ESET 연구팀, FishMonger의 무기 업그레이드: Windows용 SprySOCKS
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
ESET 연구진은 FishMonger 위협 그룹과 연결된 SprySOCKS 백도어의 새로운 Windows 변종 두 가지 WIN_DRV와 WIN_PLUS를 발견했습니다. WIN_DRV 버전은 네트워크 연결, 프로세스 및 파일을 숨길 수 있는 커널 드라이버를 사용하여 강화된 은폐성을 제공합니다. 두 변종 모두 여러 통신 프로토콜을 지원하며 시스템 제어 및 데이터 탈취를 위한 광범위한 명령 집합을 제공합니다.
조사
이번 조사는 VirusTotal 및 ESET 텔레메트리를 통해 발견된 악성코드 샘플을 기반으로 하여 2023년에서 2024년에 걸친 활동을 밝혀냈습니다. 연구자들은 DLL 사이드로딩, DriverLoader 및 RawWNPF를 통한 커널 드라이버 로딩, 도플갱잉 기법을 통한 프로세스 주입 등 전체 실행 체인을 분석했습니다. 연구는 또한 명령 및 제어 통신 패턴과 여러 구성 요소에 걸쳐 공유된 하드코딩된 암호화 키를 발견했습니다.
완화
조직은 N-day 취약점을 통해 초기 침입 위험을 줄이기 위해 인터넷에 노출된 애플리케이션의 패칭을 우선시해야 합니다. 강력한 드라이버 서명 강제와 승인되지 않은 커널 드라이버 설치에 대한 모니터링이 필수적입니다. 방어자는 또한 Image File Execution Options에서의 의심스러운 예약 작업, 레지스트리 변경 및 비정상적인 프린트 프로세서 등록을 모니터링해야 합니다.
응답
이러한 위협이 감지되면 영향을 받은 시스템을 즉시 격리하여 추가적인 측면 이동 또는 데이터 탈취를 방지해야 합니다. 조사자는 커널 수준의 영속성에 특별한 관심을 기울여 원래의 침입 벡터와 전체 침해 범위를 결정하기 위한 자세한 포렌식 검토를 수행해야 합니다. 네트워크 로그도 알려진 명령 및 제어 인프라와의 통신을 확인해야 하며, 새로운 서비스 또는 변경된 레지스트리 키와 같은 시스템 변경 사항을 감사해야 합니다.
graph TB %% 클래스 정의 classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef process fill:#ccffcc classDef defense fill:#ffcc99 %% 초기 접근 action_exploit[“<b>행위</b> – <b>T1190 Exploit Public-Facing Application</b><br/>설명: 공개된 서버의 N-day 취약점을 악용하여<br/>초기 접근 권한을 확보.”] class action_exploit action %% 변형 경로 분기 op_variant((“AND”)) class op_variant tool %% WIN_DRV 변형 경로 action_win_drv_persist[“<b>행위</b> – <b>T1546.012 Event Triggered Execution: IFEO</b><br/>설명: vds.exe에 악성 디버거 등록<br/>도구: klelam00007.bat 스크립트”] class action_win_drv_persist action action_win_drv_dll[“<b>행위</b> – <b>T1574.001 Hijack Execution Flow: DLL</b><br/>설명: 정상 서명된 실행 파일을 이용한<br/>DLL 사이드 로딩<br/>도구: ApphostRegistrationVerifier.exe가 tpsvcloc.dll 로드”] class action_win_drv_dll action malware_loader[“<b>악성코드</b>: Loader<br/>설명: Process Doppelgänging을 사용하여<br/>코드 주입 수행”] class malware_loader malware action_reflective[“<b>행위</b> – <b>T1620 Reflective Code Loading</b><br/>설명: Process Doppelgänging을 통해<br/>SprySOCKS 백도어 셸코드 주입”] class action_reflective action process_svchost[“<b>프로세스</b>: svchost.exe<br/>설명: 셸코드 주입 대상 프로세스”] class process_svchost process malware_sprysocks[“<b>악성코드</b>: SprySOCKS Backdoor<br/>설명: C2 통신 유지 및 정보 수집 수행”] class malware_sprysocks malware tool_driver_loader[“<b>도구</b>: DriverLoader<br/>설명: 커널 수준 드라이버 배포”] class tool_driver_loader tool malware_rootkit[“<b>악성코드</b>: RawWNPF Kernel Driver<br/>설명: 루트킷(T1014)으로 동작하며<br/>프로세스, 파일 및 레지스트리 키 숨김”] class malware_rootkit malware action_port_knocking[“<b>행위</b> – <b>T1205.001 Traffic Signaling: Port Knocking</b><br/>설명: Windows Filtering Platform을 통해<br/>특수 제작된 TCP 트래픽 전달”] class action_port_knocking action %% WIN_PLUS 변형 경로 action_win_plus_persist[“<b>행위</b> – <b>T1547.012 Boot or Logon Autostart Execution: Print Processors</b><br/>설명: 지속성을 위해 VSPMsg.dll을<br/>Print Processor로 설치”] class action_win_plus_persist action %% 사후 침해 및 수집 action_keylogging[“<b>행위</b> – <b>T1056.001 Input Capture: Keylogging</b><br/>설명: 키 입력, 클립보드 데이터 및<br/>창 제목 수집”] class action_keylogging action action_c2[“<b>행위</b> – <b>T1132.001 Command and Control: Protocol</b><br/>설명: AES-128 암호화를 사용하여<br/>TCP, UDP 및 WebSocket 통신”] class action_c2 action action_defense_impair[“<b>행위</b> – <b>T1562.004 Defense Impairment: Disable or Modify Tools</b><br/>설명: netsh.exe를 사용하여 Windows Firewall 규칙을<br/>수정하고 트래픽 허용”] class action_defense_impair action %% 연결 흐름 action_exploit –>|연결됨| op_variant %% WIN_DRV 흐름 op_variant –>|변형_경로| action_win_drv_persist action_win_drv_persist –>|연결됨| action_win_drv_dll action_win_drv_dll –>|로드| malware_loader malware_loader –>|수행| action_reflective action_reflective –>|주입| process_svchost process_svchost –>|실행| malware_sprysocks malware_sprysocks –>|배포| tool_driver_loader tool_driver_loader –>|매핑| malware_rootkit malware_rootkit –>|활성화| action_port_knocking %% WIN_PLUS 흐름 op_variant –>|변형_경로| action_win_plus_persist action_win_plus_persist –>|사용| action_reflective %% 공통 사후 침해 malware_sprysocks –>|수행| action_keylogging malware_sprysocks –>|통신| action_c2 malware_sprysocks –>|실행| action_defense_impair %% 논리 연결 action_defense_impair –>|활성화| action_c2
공격 흐름
## 시뮬레이션 실행
전제 조건: 텔레메트리 및 기준 비행 전 점검이 통과해야 합니다.
이유: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적대적 기법(TTP)의 정확한 실행을 상세히 설명합니다. 명령과 설명은 식별된 TTP를 직접 반영해야 하며 탐지 논리에 기대되는 정확한 텔레메트를 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련 없는 예시는 오진으로 이어집니다.
-
공격 내러티브 및 명령: 적대자는 손상된 Windows 호스트에 성공적으로 SprySOCKS 백도어를 배포했습니다. 명령 및 제어 채널을 설정하기 위해, 악성코드는 53781 포트에서 수신 소켓을 엽니다. 통신이 그들의 사용자 지정 C2 서버에 의해 인식되도록 보장하기 위해, 악성코드는 초기 핸드셰이크 패킷에 매직 헥스 값을 주입합니다.
0xACACBCBC이것은 FishMonger 그룹의 특정 프로토콜 동작을 모방하여 가로채어지거나 전환된 트래픽을 통해 신뢰할 수 있는 통신을 촉진합니다. -
회귀 테스트 스크립트:
# 시뮬레이션 스크립트: SprySOCKS 네트워크 아티팩트 생성 # 이 스크립트는 SprySOCKS 백도어의 네트워크 동작을 모방합니다. $TargetPort = 53781 $MagicValue = [byte[]] @(0xAC, 0xAC, 0xBC, 0xBC) $Listener = [System.Net.Sockets.TcpListener]$TargetPort try { Write-Host "[+] 포트 $TargetPort에서 수신기 시작 중..." -ForegroundColor Cyan $Listener.Start() $Client = $Listener.AcceptTcpClient() $Stream = $Client.GetStream() Write-Host "[+] 연결이 설정되었습니다. 매직 값 $MagicValue 전송 중..." -ForegroundColor Yellow # 스트림에 매직 값을 주입하여 'selection1' 논리를 트리거합니다 $Stream.Write($MagicValue, 0, $MagicValue.Length) Start-Sleep -Seconds 5 } catch { Write-Error "[-] 시뮬레이션 실패: $($_.Exception.Message)" } finally { Write-Host "[+] 연결 정리 중..." -ForegroundColor Cyan $Stream.Close() $Client.Close() $Listener.Stop() } -
정리 명령:
# 남아있는 불량 수신기가 없도록 해야 합니다. Get-NetTCPConnection -LocalPort 53781 -ErrorAction SilentlyContinue | Remove-NetTCPConnection Write-Host "[+] 정리 완료." -ForegroundColor Green