TerminalFix 캠페인, 손상된 호스트를 통한 네트워크 피벗 가능
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
TerminalFix는 공격자가 가짜 Cloudflare 검증 프롬프트를 사용하여 악성 PowerShell 명령을 실행하도록 사용자를 조작하는 ClickFix 기법의 변형입니다. 이 공격은 DLL 사이드로딩, 스테가노그래피 기반 페이로드 전달, WebSocket 기반 리버스 터널을 결합합니다. 이를 통해 침해된 워크스테이션이 추가 정찰 및 잠재적 랜섬웨어 배포를 위한 네트워크 피벗으로 작동할 수 있습니다.
조사
조사는 초기 웹 기반 유인물에서부터 사후 이용 활동에 이르기까지 공격 수명주기를 검토했습니다. 분석가는 DLL 사이드로딩에 악용되는 LockScreenContentServer.exe와 스테가노그래픽 페이로드 전달에 사용되는 PNG 파일을 확인했습니다. 이 캠페인은 독일 미디어 보도와 BSI에서 발행한 권고를 기반으로 Vice Spider와 관련되었습니다.
완화
방어자는 PowerShell 또는 Windows Terminal 실행 이후의 의심스러운 브라우저 기반 iframes에 대해 모니터링해야 합니다. 조직은 특히 C:ProgramData와 같은 예기치 않은 위치에서 DLL을 로드하는 정품 파일을 사용하는 비정상적인 DLL 로딩 동작을 감지해야 합니다. PowerShell 실행 정책을 제한하고 무단 예약 작업 및 레지스트리 Run 키 수정사항을 모니터링하면 공격 노출을 더욱 줄일 수 있습니다.
응답
TerminalFix 활동이 감지되면 영향을 받은 워크스테이션을 고립시켜 네트워크 피벗으로 작동하지 않도록 합니다. 알려지지 않은 도메인으로의 외부 WebSocket 연결 및 LDAP 쿼리와 같은 내부 정찰 활동에 대한 네트워크 트래픽을 분석하세요. 승인되지 않은 Python 스크립트 실행 및 Impacket과 Certipy를 포함한 도구 사용에 대한 엔드포인트 텔레메트리를 검토하세요.
공격 흐름
이 부분은 아직 업데이트 중입니다.
탐지
NoWarningNoElevationOnInstall 레지스트리 키에 대한 의심스러운 작업 (via registry_event)
가능한 지속성 지점 [ASEPs – Software/NTUSER Hive] (via registry_event)
가능한 Impacket 명령줄 패턴 (via cmdline)
Impacket을 사용한 가능성 있는 원격 코드 실행 (via cmdline)
의심스러운 폴더에서의 Python 실행 (via cmdline)
가능성 있는 관리자 계정 또는 그룹 나열 (via cmdline)
의심스러운 도메인 신뢰 관계 탐색 (via cmdline)
PsExec 또는 유사한 것을 통한 가능성 있는 횡적 이동 (via system)
PsExec 또는 유사한 것을 통한 가능성 있는 횡적 이동 (via audit)
가능성 있는 PsExec 사용 (via audit)
탐지할 IOCs (SourceIP): TerminalFix: 워크스테이션이 네트워크 피벗이 될 때
탐지할 IOCs (DestinationIP): TerminalFix: 워크스테이션이 네트워크 피벗이 될 때
TerminalFix 네트워크 피벗 탐지 [Windows 네트워크 연결]
TerminalFix 악성 실행 탐지 [Windows 프로세스 생성]
ZIP 및 PNG 검색을 위한 악성 PowerShell 명령 탐지 [Windows Powershell]
시뮬레이션 실행
-
공격 내러티브 & 명령: 적은 초기 접근을 획득했고 워크스테이션을 통해 피벗하기 위한 지속적 C2 채널을 설정하려고 시도하고 있습니다. 표준 웹 트래픽과 어울리기 위해 WebSocket 프로토콜을 사용합니다. 공격자는 연결을 시작하는 PowerShell 스크립트를 실행합니다
gitnow.dev. 이는 워크스테이션이 릴레이로 작동하는 TerminalFix 행동을 모방합니다. 목표는selection_domainandselection_connection탐지 규칙의 기준을 트리거하는 것입니다. -
회귀 테스트 스크립트:
# TerminalFix C2 WebSocket 연결의 시뮬레이션 # 대상 도메인: gitnow.dev $targetDomain = "gitnow.dev" $uri = "wss://$targetDomain/path/to/c2" Write-Host "TerminalFix C2 연결을 $targetDomain로 시뮬레이션 중입니다..." $ws = New-Object System.Net.WebSockets.ClientWebSocket $ct = New-Object System.Threading.CancellationTokenSource try { # 네트워크 연결 텔레메트리를 생성하기 위한 연결 시도 $connectTask = $ws.ConnectAsync($uri, $ct.Token) # 도메인이 존재하지 않거나 응답하지 않을 가능성이 있어 타임아웃을 사용합니다 if ($connectTask.Wait(10000)) { Write-Host "$targetDomain에 성공적으로 연결되었습니다" $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "종료 중", $ct.Token).Wait() } } catch { Write-Host "연결이 시도되었습니다. Sysmon/EDR 로그에 텔레메트리가 생성되어야 합니다." Write-Host "오류 세부정보: $($_.Exception.Message)" } finally { $ws.Dispose() } -
정리 명령:
# 이 특정 시뮬레이션 스크립트에서는 지속성 또는 파일이 생성되지 않았습니다. # 임시 파일을 사용했다면 여기에 제거해야 합니다. Write-Host "시뮬레이션 정리가 완료되었습니다. 이 스크립트가 남긴 아티팩트가 없습니다."