SOC Prime Bias: 심각

11 2월 2026 18:47

여러 테마의 피싱 이메일을 활용한 새로운 XWorm 캠페인 심층 분석

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
여러 테마의 피싱 이메일을 활용한 새로운 XWorm 캠페인 심층 분석
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

FortiGuard Labs는 악성 Excel 첨부 파일을 통해 XWorm 원격 접근 트로이 목마를 배포하는 다단계 피싱 캠페인을 관찰했습니다. 이 문서는 Microsoft Equation Editor의 CVE-2018-0802를 악용하여 HTA 파일을 검색한 다음 XWorm을 새로 생성된 Msbuild.exe 프로세스에 삽입하는 프로세스 홀로잉을 사용하는 파일리스 .NET 로더를 트리거합니다. RAT는 AES 암호화된 트래픽을 사용하여 C2와 통신하며 확장된 제어를 위한 플러그인 지원을 포함한 폭넓은 명령 집합을 노출합니다. 이 캠페인은 타협된 엔드포인트에 걸쳐 지속적인 원격 제어를 달성하기 위해 파일리스 기술과 현존하는 바이너리의 사용을 활용하는 고급 기법을 보여줍니다.

조사

분석가들은 피싱 이메일부터 Excel OLE 익스플로잇, HTA 실행, 파워셸 기반의 .NET 모듈 다운로드, 최종적으로 Msbuild.exe로의 프로세스 홀로잉까지의 흐름을 복구했습니다. 정적 및 동적 검토에서는 JPEG 이미지 내에 숨겨진 Base64 인코딩 페이로드 데이터가 하이라이트 되었으며 최종 XWorm 구성 요소는 실행 중 디스크에 해독된 실행 파일을 기록하지 않고 메모리에 로드되었습니다. 네트워크 캡처에서는 C2 도메인 berlin101.com으로 포트 6000을 통해 AES 암호화된 패킷이 전송되는 것이 관찰되었습니다. 보고서는 또한 XWorm의 광범위한 명령 세트와 플러그인 아키텍처를 분류했습니다.

완화

FortiGuard는 매크로 및 OLE 보호를 활성화하고 CVE-2018-0802에 대한 패치를 적용하며 이메일 콘텐츠에서 유래된 Msbuild, PowerShell 및 HTA 파일의 실행을 제한할 것을 권장합니다. 웹 필터링, 피싱 방지 제어 및 게이트웨이에서의 전달 및 스테이징을 차단하기 위해 관찰된 지표와 연결된 IDS/IPS 시그니처를 배포하십시오. 특히 PowerShell에서 시작된 Msbuild.exe와 같은 이상한 프로세스 트리를 모니터링하여 초기 착취를 식별하십시오.

대응

탐지 시 영향을 받은 엔드포인트를 격리하고 악성 프로세스를 종료하며 메모리에서 로드된 XWorm 모듈을 제거하십시오. 명령줄 텔레메트리, 네트워크 로그 및 레지스트리 변경사항을 포함하여 포렌식 아티팩트를 수집하여 침입 범위를 파악하십시오. 잠재적으로 손상된 자격 증명을 재설정하고 취약한 Equation Editor 구성 요소를 업데이트하며 악성 도메인 및 C2 서버를 차단하십시오. 환경 전반에서 재발을 방지하고 관련된 활동을 찾기 위해 EDR/SIEM 탐지에 위협 정보 업데이트를 적용하십시오.

graph TB %% 클래스 정의 classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccffcc %% 액션 노드 action_phishing[“<b>행위</b> – T1566.001<br/><b>이름</b>: 스피어피싱 첨부파일<br/><b>설명</b>: 이메일로 전달된 악성 Excel .xlam”] class action_phishing action action_user_exec[“<b>행위</b> – T1204.002<br/><b>이름</b>: 사용자 실행<br/><b>설명</b>: 피해자가 첨부 Excel 파일을 열음”] class action_user_exec action exploit_eqnedt[“<b>행위</b> – T1203<br/><b>이름</b>: 클라이언트 실행을 위한 익스플로잇 (CVEu20112018u20110802)<br/><b>설명</b>: Equation Editor 취약점으로 쉘코드 실행”] class exploit_eqnedt action defense_evasion[“<b>행위</b> – T1211<br/><b>이름</b>: 방어 회피 익스플로잇<br/><b>설명</b>: 취약점이 기존 방어를 우회”] class defense_evasion action action_powershell[“<b>행위</b> – T1059.001<br/><b>이름</b>: PowerShell 실행<br/><b>설명</b>: Base64 디코딩 후 숨겨진 .NET 모듈이 포함된 JPEG 다운로드 및 JScript 실행”] class action_powershell action action_reflective_load[“<b>행위</b> – T1620<br/><b>이름</b>: 리플렉티브 코드 로딩<br/><b>설명</b>: .NET 어셈블리를 메모리에 직접 로드”] class action_reflective_load action action_process_hollowing[“<b>행위</b> – T1055.012<br/><b>이름</b>: 프로세스 홀로잉<br/><b>설명</b>: 일시 중지된 Msbuild 프로세스에 XWorm RAT 주입”] class action_process_hollowing action module_shared[“<b>행위</b> – T1129<br/><b>이름</b>: 공유 모듈<br/><b>설명</b>: 필요 시 로드되는 .NET 플러그인”] class module_shared action persistence_active_setup[“<b>행위</b> – T1547.014<br/><b>이름</b>: Active Setup 지속성<br/><b>설명</b>: 플러그인 바이너리를 HKCU 레지스트리에 저장”] class persistence_active_setup action action_query_registry[“<b>행위</b> – T1012<br/><b>이름</b>: 레지스트리 조회<br/><b>설명</b>: 플러그인 데이터 및 구성 읽기”] class action_query_registry action encryption_aes[“<b>행위</b> – T1001<br/><b>이름</b>: 데이터 난독화<br/><b>설명</b>: 모든 C2 트래픽을 AES 암호화”] class encryption_aes action c2_https[“<b>행위</b> – T1102.003<br/><b>이름</b>: 단방향 웹 서비스 통신<br/><b>설명</b>: berlin101.com:6000로 암호화된 HTTPS”] class c2_https action %% 도구 노드 tool_excel_xlam[“<b>도구</b> – Excel .xlam 첨부파일”] class tool_excel_xlam tool tool_mshta[“<b>도구</b> – mshta.exe”] class tool_mshta tool tool_powershell[“<b>도구</b> – PowerShell”] class tool_powershell tool tool_msbuild[“<b>도구</b> – Msbuild.exe”] class tool_msbuild tool %% 멀웨어 노드 malware_dotnet_module[“<b>멀웨어</b> – 숨겨진 .NET 모듈”] class malware_dotnet_module malware malware_xworm[“<b>멀웨어</b> – XWorm RAT”] class malware_xworm malware %% 프로세스 노드 process_shellcode[“<b>프로세스</b> – 쉘코드 실행”] class process_shellcode process proc_mshta[“<b>프로세스</b> – mshta 프로세스”] class proc_mshta process proc_msbuild[“<b>프로세스</b> – Msbuild 프로세스 (일시 중지)”] class proc_msbuild process %% 연결 action_phishing –>|첨부 전달| tool_excel_xlam tool_excel_xlam –>|피해자가 열람| action_user_exec action_user_exec –>|트리거| exploit_eqnedt exploit_eqnedt –>|활성화| defense_evasion defense_evasion –>|실행| process_shellcode process_shellcode –>|실행| proc_mshta proc_mshta –>|실행| tool_mshta tool_mshta –>|다운로드 후 실행| action_powershell action_powershell –>|로드| malware_dotnet_module malware_dotnet_module –>|메모리 내 호스팅| action_reflective_load action_reflective_load –>|페이로드 호스팅| proc_msbuild proc_msbuild –>|시작됨| tool_msbuild tool_msbuild –>|통해 호스팅| action_process_hollowing action_process_hollowing –>|주입| malware_xworm malware_xworm –>|사용| module_shared module_shared –>|저장| persistence_active_setup persistence_active_setup –>|설정 읽기| action_query_registry action_query_registry –>|암호화| encryption_aes encryption_aes –>|전송 대상| c2_https

공격 흐름

시뮬레이션 실행

전제 조건: 텔레메트리 및 기준선 점검이 통과해야 합니다.

이유: 이 섹션은 탐지 규칙을 활성화하기 위해 설계된 적의 기술(TTP)의 정확한 실행을 설명합니다. 명령 및 서사는 식별된 TTP를 직접 반영하며 탐지 논리에 의해 기대된 정확한 텔레메트리를 생성하는 것을 목표로 합니다.

  • 공격 서사 및 명령:

    1. 초기 드롭: 공격자는 CVE‑2018‑0802를 악용하는 악성 Excel 파일을 전달합니다. 시뮬레이션을 위해 익스플로잇을 무시하고 페이로드를 직접 실행합니다.
    2. EQNEDT32.EXE을 통한 프로세스 홀로잉: 실행 EQNEDT32.EXE 명령 행을 사용하여 ShellExecuteExW() 를 합법적인 Office 구성 요소로 가장합니다.
    3. Msbuild.exe 횡적 실행: 스폰 Msbuild.exe 와 함께 CreateProcessA() 를 사용하여 실시간으로 은신형 .NET 페이로드를 컴파일합니다.
    4. 파일리스 .NET 실행: Use powershell.exe 기본-64 인코딩된 명령으로 반사 .NET 어셈블리를 로드합니다 (T1620). 명령 줄에는 ‘규칙’을 충족시키기 위해 리터럴 문자열이 포함되어 있습니다. CreateProcessA() to satisfy the rule.
  • 회귀 테스트 스크립트:

    <#
    XWorm 실행 체인을 시뮬레이션합니다:
    1. ShellExecuteExW()를 가진 EQNEDT32.exe
    2. CreateProcessA()를 가진 Msbuild.exe
    3. CreateProcessA()를 포함한 .NET 반사 로더가 인코딩된 파워셸
    #>
    
    # 1. EQNEDT32.exe (프로세스 홀로잉)
    $eqnPath = "$env:SystemRootSystem32EQNEDT32.EXE"
    $eqnArgs = "-Command "ShellExecuteExW()""
    Start-Process -FilePath $eqnPath -ArgumentList $eqnArgs -WindowStyle Hidden
    
    # 2. Msbuild.exe (동적 DLL 주입)
    $msbuildPath = "$env:ProgramFilesMicrosoft Visual Studio2022CommunityMSBuildCurrentBinMsbuild.exe"
    $msbuildArgs = "/t:Compile /p:UseShellExecute="CreateProcessA()""
    Start-Process -FilePath $msbuildPath -ArgumentList $msbuildArgs -WindowStyle Hidden
    
    # 3. 파워셸 (파일리스 .NET 반사 로드)
    # Base64로 인코딩된 샘플 .NET 페이로드 (플레이스홀더)
    $payload = "W3siQmFzZURhdGEiOiAiIiB9XQ=="   # 더미 base64
    $psArgs = "-EncodedCommand $payload -ArgumentList "CreateProcessA()""
    Start-Process -FilePath "powershell.exe" -ArgumentList $psArgs -WindowStyle Hidden
    
    Write-Host "XWorm 시뮬레이션 완료."
  • 정리 명령어:

    # 남아있는 시뮬레이션 프로세스 종료
    Get-Process -Name "EQNEDT32","Msbuild","powershell" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # 임시 파일을 제거할 선택적 단계 (이 순수 프로세스 시뮬레이션에서는 생성되지 않음)
    Write-Host "정리 완료."