SOC Prime Bias: 중간

17 4월 2026 17:34

PowMix 봇넷, 미디어 회사 유혹을 통해 체코 노동력 공격

Author Photo
SOC Prime Team linkedin icon 팔로우
PowMix 봇넷, 미디어 회사 유혹을 통해 체코 노동력 공격
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

Cisco Talos는 최소 2025년 12월부터 활성화된 PowMix로 추적된 봇넷을 발견했으며, 이는 체코 공화국 내 조직을 겨냥하고 있다. 감염 체인은 PowerShell 로더를 트리거하는 악성 LNK 파일로 시작되며, 이는 ZIP 아카이브를 풀고, AMSI 보호를 우회하고, PowMix 페이로드를 메모리 내에 직접 실행한다. 설정되면, 이 악성코드는 랜덤한 16진수 이름의 예약 작업을 통해 지속성을 유지하고, 전역 Mutex를 사용해 실행을 제어한다. PowMix는 훼손된 herokuapp.com 도메인에 호스팅된 랜덤 REST-유사 경로를 통해 명령 및 제어 인프라와 통신하며, 원격 명령 실행, 구성 변경, 그리고 자체 제거를 지원한다.

조사

Talos는 전체 LNK 기반 전달 체인, PowerShell 로더 및 PowMix 봇 자체를 분석하여, ZIP 기반 페이로드 은폐 및 Heroku에 호스팅된 C2 인프라 사용 등, 이전 ZipLine 캠페인과의 주목할 만한 유사성을 확인했다. 연구자들은 악성코드의 AMSI 우회 방법, CRC32 스타일의 봇 ID 생성 로직, 탐지를 줄이기 위해 지터가 추가된 비콘 간격을 문서화했다. 또한 예약된 작업 명명 패턴, Mutex 규약, 악성코드에 내장된 하드코딩된 XOR 키 문자열 등의 주요 지표를 추출했다. ClamAV 및 Snort 시그니처의 제작을 통해 탐지 범위를 더욱 확장했다.

완화 조치

조직은 LNK 파일의 실행에 엄격한 통제를 적용하고 예약 작업이나 글로벌 Mutex를 생성하는 PowerShell 활동을 모니터링해야 한다. AMSI 보호는 가능한 한 강화되어야 하며, 스크립트 실행은 코드 서명 요구 사항 및 제한적 정책에 의해 통제되어야 한다. 보안 팀은 또한 의심스러운 herokuapp.com 도메인으로의 아웃바운드 트래픽을 차단하거나 면밀히 검사하고, PowMix 활동을 나타낼 수 있는 비정상적인 브라우저 유사 요청에 대해 프록시 인증 로그를 검토해야 한다. 엔드포인트 탐지를 업데이트하여 로더가 사용하는 특정 PowerShell 명령 및 동작을 식별해야 한다.

대응

PowMix 관련 활동이 감지된 경우, 수비수는 영향을 받은 호스트를 격리하고, 악성 PowerShell 프로세스를 종료하며, 관련 파일과 함께 ProgramData 하에 저장된 파일이 있는 예약된 작업을 제거해야 한다. 포렌식 수집에서는 명령줄 아티팩트, Mutex 값 및 다운로드된 구성 데이터를 포함한 전체 실행 체인을 포획해야 한다. 잠재적으로 노출된 자격 증명은 재설정해야 하며, 프록시 및 방화벽 제어는 식별된 명령 및 제어 도메인을 차단하도록 업데이트해야 한다. 보안 팀은 또한 다음과 같은 명령을 위해 네트워크 트래픽을 모니터링해야 한다. ProgramData. Forensic collection should capture the full execution chain, including command-line artifacts, mutex values, and any downloaded configuration data. Potentially exposed credentials should be reset, and proxy and firewall controls should be updated to block the identified command-and-control domains. Security teams should also monitor network traffic for commands such as #HOST and #KILL, 관련 이해 관계자에게 알리고 최신 지표를 반영하도록 탐지 콘텐츠를 업데이트해야 한다.

graph TB classDef action fill:#99ccff classDef technique fill:#ffff99 classDef process fill:#ffcc99 classDef malware fill:#ff9999 classDef artifact fill:#e0e0e0 classDef persistence fill:#b3ffb3 classDef c2 fill:#d9b3ff classDef command fill:#ffd9b3 attack_phishing[“<b>행동</b> – T1566.001 피싱: 스피어피싱 ZIP<br/>악성 ZIP 이메일 수신”] class attack_phishing action file_zip[“<b>아티팩트</b> – 악성 ZIP<br/>LNK 포함”] class file_zip artifact file_lnk[“<b>아티팩트</b> – 악성 바로가기 (.lnk)<br/>T1027.012 LNK Icon Smuggling”] class file_lnk artifact process_powershell[“<b>프로세스</b> – PowerShell 로더<br/>T1059.001 실행”] class process_powershell process tech_amsi_bypass[“<b>기술</b> – AMSI 우회”] class tech_amsi_bypass technique tech_compression[“<b>기술</b> – T1027.015 압축”] class tech_compression technique tech_xor[“<b>기술</b> – T1001 XOR 난독화”] class tech_xor technique malware_powmix[“<b>악성코드</b> – PowMix”] class malware_powmix malware tech_botid[“<b>기술</b> – Bot ID 생성”] class tech_botid technique persistence_task[“<b>지속성</b> – 예약 작업”] class persistence_task persistence tech_shortcut_mod[“<b>기술</b> – T1547.009 바로가기 수정”] class tech_shortcut_mod technique tech_screensaver[“<b>기술</b> – T1546.002 화면 보호기”] class tech_screensaver technique c2_communication[“<b>C2 통신</b> – HTTPS GET”] class c2_communication c2 command_host[“<b>명령</b> – #HOST”] class command_host command command_kill[“<b>명령</b> – #KILL”] class command_kill command tech_indicator_removal[“<b>기술</b> – T1027.005 인디케이터 제거”] class tech_indicator_removal technique tech_hide_artifacts[“<b>기술</b> – T1564.011 아티팩트 숨김”] class tech_hide_artifacts technique attack_phishing –>|전달| file_zip file_zip –>|포함| file_lnk file_lnk –>|실행| process_powershell process_powershell –>|사용| tech_amsi_bypass process_powershell –>|사용| tech_compression process_powershell –>|사용| tech_xor process_powershell –>|로드| malware_powmix malware_powmix –>|생성| tech_botid malware_powmix –>|생성| persistence_task persistence_task –>|사용| tech_shortcut_mod persistence_task –>|예약 실행| tech_screensaver malware_powmix –>|통신| c2_communication c2_communication –>|전송| command_host c2_communication –>|전송| command_kill command_kill –>|적용| tech_indicator_removal command_kill –>|적용| tech_hide_artifacts

공격 흐름

탐지

이중 확장자로 의심되는 악성 LNK 파일 (cmdline 통해)

SOC Prime 팀
2026년 4월 16일

예약 작업 활동으로 PowerShell에 의해 실행될 가능성 (powershell 통해)

SOC Prime 팀
2026년 4월 16일

Powershell에서 의심스러운 .NET 메서드 호출 (powershell 통해)

SOC Prime 팀
2026년 4월 16일

Powershell에서 의심스러운 Windows API 함수 호출 (powershell 통해)

SOC Prime 팀
2026년 4월 16일

의심스러운 Herokuapp 도메인 통신 (프록시 통해)

SOC Prime 팀
2026년 4월 16일

의심스러운 Herokuapp 도메인 통신 (dns 통해)

SOC Prime 팀
2026년 4월 16일

PowerShell Invoke-Expression 및 동적 명령 구성을 탐지 [Windows Powershell]

PowMix 봇넷의 랜덤화된 C2 비콘 간격 및 REST API 호출 모방 탐지 [Windows 네트워크 연결]
2026년 4월 16일

PowMix 봇넷 AMSI 우회 및 Mutex 생성 탐지 [Windows Sysmon]

PowMix 봇넷의 랜덤화된 C2 비콘 간격 및 REST API 호출 모방 탐지 [Windows 네트워크 연결]
2026년 4월 16일

PowMix 봇넷 PowerShell 로더 실행 [Windows 프로세스 생성]

PowMix 봇넷의 랜덤화된 C2 비콘 간격 및 REST API 호출 모방 탐지 [Windows 네트워크 연결]
2026년 4월 16일

PowMix 봇넷 PowerShell 로더 실행 [Windows 프로세스 생성]

PowMix 봇넷의 랜덤화된 C2 비콘 간격 및 REST API 호출 모방 탐지 [Windows 네트워크 연결]
2026년 4월 16일

시뮬레이션 실행

전제 조건: 데이터 텔레메트리 및 베이스라인 프리플라이트 체크가 통과해야 합니다.

근거: 이 섹션은 탐지 규칙을 트리거하도록 설계된 상대 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령 및 내러티브는 식별된 TTP를 직접 반영해야 하며 탐지 로직에서 예상하는 정확한 텔레메트리를 생성하는 것을 목표로 합니다.

  • 공격 내러티브 및 명령:
    PowMix 봇넷의 운영자는 먼저 내부 amsiInitFailed 플래그를 $true로 설정하는 PowerShell 원 라이너를 호출하여 AMSI를 비활성화합니다. 바로 그 후, 같은 PowerShell 프로세스가 전역 네임스페이스에서 이름이 지정된 Mutex(GlobalBOT12345)를 생성하여 단일 실행 인스턴스를 보장합니다. 두 동작은 단일 명령줄에서 수행되므로 Sysmon 로그는 규칙이 찾으려는 정확한 문자열을 캡처합니다.

  • 회귀 테스트 스크립트:

    # PowMix AMSI 우회 + 글로벌 Mutex 생성 (탐지 규칙을 트리거)
    
    $botId = "BOT12345"
    
    # 1. AMSI 우회 플래그 설정 (명령줄에 리터럴 문자열 표시)
    # 2. "Global<BotID>"라는 전역 Mutex 생성
    powershell.exe -NoProfile -Command `
        "$amsiInitFailed = $true; `
         $null = [System.Threading.Mutex]::new($true, 'Global$botId')"
  • 정리 명령:

    # 디스크에 지속적인 아티팩트가 기록되지 않음; 메모리 내 Mutex만 존재.
    # Mutex가 해제되도록 테스트에서 시작된 PowerShell 프로세스를 종료해야 하며,
    # 필요에 따라 짧은 스크립트를 실행하여 여닫아야 합니다.
    
    Get-Process -Name powershell | Where-Object { $_.StartInfo.Arguments -match 'GlobalBOT12345' } | Stop-Process -Force