꼬불꼬불 동지들: 비정상적인 Hyper-V 활성화
Detection stack
- AIDR
- Alert
- ETL
- Query
비정상적인 Hyper-V 활성화
연구는 Windows Hyper-V를 활용하여 손상된 Windows 10 호스트에서 숨겨진 Alpine Linux VM을 생성하는 새로운 위협 행위자 Curly COMrades를 발견했습니다. 이 VM은 커스텀 악성코드(CurlyShell 및 CurlCat)를 실행하여 지속적인 역방향 셸과 프록시 기능을 제공하며 일반적인 EDR 탐지를 회피합니다. 추가 기법에는 PowerShell 기반의 Kerberos 티켓 주입, 그룹 정책을 통한 로컬 계정 생성, 오픈 소스 프록시 도구의 사용이 포함됩니다.
Curly COMrades는 Linux VM에서 악성코드를 어떻게 숨기는가?
Curly COMrades는 감염된 Windows 호스트의 Microsoft Hyper-V 내에 작은 Alpine Linux 게스트를 생성하여 악성코드를 숨깁니다. 이 숨겨진 VM 내부에서는 커스텀 임플란트(CurlyShell 및 CurlCat로 보고됨)를 실행하면서도 Hyper-V의 네트워킹(Default Switch)을 통해 나가는 트래픽이 호스트에서 오는 것처럼 보이게 만듭니다.
PowerShell 도우미와 curl.exe를 호스트에 배포하고 기만적인 VM 이름을 부여하며, Hyper-V 관리 인터페이스를 제한하여 탐지를 피합니다. 이러한 내용은 Bitdefender 분석에서 기술 지표 및 해결 지침과 함께 문서화되었습니다.
완화 조치
호스트 기반 네트워크 검사(e.g., Bitdefender NAD)를 배포하여 호스트 네트워크 스택에서 비정상적인 출력 트래픽을 탐지합니다. Windows를 강화하여 Hyper-V 기능 활성화를 비활성화하거나 엄격히 제어하고 DISM 및 PowerShell cmdlet의 사용을 제한하여 VM을 가져오거나 시작하는 것을 제한합니다. Proactive Hardening 및 Attack Surface Reduction(PHASR)을 적용하여 curl, rar, Import-VM, Start-VM과 같은 네이티브 바이너리의 무단 사용을 차단합니다. 새로운 Hyper-V VM의 생성, ProgramData에 있는 비정상적인 VHDX/VMCX 파일, Linux VM에서의 crontab 수정사항을 모니터링합니다. EDR/XDR 자격 증명 접근 경고를 사용하여 LSASS 접근 및 Kerberos 티켓 주입을 감지합니다. 그룹 정책 스크립트에 대한 최소 권한을 시행하고 로컬 계정 생성을 감사합니다. CurlyShell/CurlCat과 알려진 프록시 도구의 커스텀 임플란트에 대한 시그니처 기반 및 행동 감지를 사용합니다.
대응 조치
영향을 받은 호스트를 격리하고, Hyper-V를 비활성화하며 숨겨진 VM 파일 및 관련 VHDX/VMCX 이미지를 제거합니다. PowerShell 스크립트(kb_upd.ps1, screensaver.ps1, locals.ps1)에 대한 전체 파일 시스템 및 레지스트리 검사를 수행하여 삭제합니다. 무단 생성된 로컬 계정을 리셋하거나 제거하고 비밀번호를 교체합니다. 식별된 C2 IP(예: 45.43.91.10, 88.198.91.116)로의 아웃바운드 연결을 차단하고 방화벽 규칙을 업데이트합니다. CurlyShell 및 CurlCat의 특정 DLL/ELF 시그니처와 관찰된 프록시 도구에 대한 탐지 규칙을 배포합니다. 공개 GitHub 리포지토리의 IOC를 사용하여 위협 사냥을 수행합니다. CERT와 협력하여 정보 공유를 실시하고 추가 활동을 모니터링합니다. 취약점 공표되어 악용된 경우 패치를 적용하고 업데이트합니다.
mermaid graph TB %% 클래스 정의 classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccccff %% 노드 – 행동 action_initial_setup[“<b>행동</b> – 초기 설정<br/><b>기법</b>: T1564.006 숨겨진 아티팩트: 가상 인스턴스 실행, T1497 가상화/샌드박스 회피, T1059.012 하이퍼바이저 CLI<br/>DISM을 통해 Hyper-V 활성화 및 관리 클라이언트 비활성화”] class action_initial_setup action action_vm_deployment[“<b>행동</b> – VM 배포<br/><b>기법</b>: T1059.012 하이퍼바이저 CLI<br/>curl을 사용하여 Alpine Linux VHDX 다운로드, WinRAR로 추출, PowerShell을 통해 VM 가져오기 및 시작”] class action_vm_deployment action action_vm_persistence[“<b>행동</b> – VM에서의 지속성<br/><b>기법</b>: T1037.004 RC 스크립트, T1543 시스템 프로세스 생성/수정<br/>4시간마다 /bin/alpine_init을 시작하는 cron 작업 생성하여 CurlyShell 실행”] class action_vm_persistence action action_c2_communication[“<b>행동</b> – C2 통신<br/><b>기법</b>: T1071.001 웹 프로토콜, T1102.002 양방향 웹 서비스<br/>CurlyShell은 libcurl을 사용하여 HTTPS 엔드포인트에 접속(GET/POST)”] class action_c2_communication action action_proxy_tunneling[“<b>행동</b> – 프록시 및 터널링<br/><b>기법</b>: T1090.001 내부 프록시, T1090.003 다중 홉 프록시<br/>ProxyCommand 설정을 통해 SSH 역방향 프록시 구성, 로컬 SOCKS 프록시로 트래픽 전달”] class action_proxy_tunneling action action_credential_abuse[“<b>행동</b> – 인증 정보 남용<br/><b>기법</b>: T1550.003 티켓 전달, T1059.001 PowerShell<br/>PowerShell 스크립트 kb_upd.ps1은 제작된 Kerberos 티켓을 LSASS에 주입”] class action_credential_abuse action action_lateral_movement[“<b>행동</b> – 횡적 이동<br/><b>기법</b>: T1021.002 SMB/Windows 관리자 공유, T1135 네트워크 공유 발견<br/>주입된 티켓을 net use 및 SMB 명령어와 함께 사용하여 공유 목록 작성 및 원격 명령어 실행”] class action_lateral_movement action action_persistence_accounts[“<b>행동</b> – 로컬 계정 통한 지속성<br/><b>기법</b>: T1136.001 로컬 계정 생성, T1037.003 네트워크 로그인 스크립트<br/>그룹-정책 스크립트는 지속적인 액세스를 위해 로컬 계정을 생성하거나 리셋합니다 (예: camera)”] class action_persistence_accounts action action_defense_evasion[“<b>행동</b> – 방어 회피<br/><b>기법</b>: T1059.003 Windows 명령 셸, T1202 간접 명령 실행, T1001.003 프로토콜 가장, T1599 네트워크 경계 브리징<br/>숨겨진 VM 내에서 모든 악성 바이너리 실행, 커스텀 Base64 인코딩을 사용하여 포렌식 흔적 감소”] class action_defense_evasion action %% 노드 – 도구 / 프로세스 / 악성코드 tool_dism[“<b>도구</b> – DISM<br/><b>설명</b>: Hyper-V와 같은 Windows 기능을 배포”] class tool_dism tool tool_powershell[“<b>도구</b> – PowerShell<br/><b>설명</b>: VM 가져오기, 티켓 주입 및 기타 자동화를 위한 스크립팅 환경”] class tool_powershell tool process_curl[“<b>프로세스</b> – curl<br/><b>설명</b>: Alpine VHDX 다운로드 및 HTTPS C2 요청 수행”] class process_curl process process_winrar[“<b>프로세스</b> – WinRAR<br/><b>설명</b>: 다운로드한 VHDX 아카이브 추출”] class process_winrar process malware_curlyshell[“<b>악성코드</b> – CurlyShell<br/><b>설명</b>: 숨겨진 Alpine VM 내에서 실행되는 커스텀 백도어”] class malware_curlyshell malware malware_ssh_reverse[“<b>악성코드</b> – SSH 역방향 프록시<br/><b>설명</b>: ~/.ssh/config를 통해 SOCKS로 트래픽을 터널링하도록 구성”] class malware_ssh_reverse malware script_kb_upd[“<b>악성코드</b> – kb_upd.ps1<br/><b>설명</b>: Kerberos 티켓을 제작하는 PowerShell 스크립트로 LSASS에 주입”] class script_kb_upd malware %% 연결 – 흐름 action_initial_setup u002du002d>|도구 사용| tool_dism action_initial_setup u002du002d>|도구 사용| tool_powershell action_vm_deployment u002du002d>|다운로드 수행| process_curl action_vm_deployment u002du002d>|추출 수행| process_winrar action_vm_deployment u002du002d>|가져오기/시작| tool_powershell action_vm_persistence u002du002d>|cron 작업 생성| malware_curlyshell action_c2_communication u002du002d>|통신 수행| process_curl action_c2_communication u002du002d>|백도어 실행| malware_curlyshell action_proxy_tunneling u002du002d>|설치| malware_ssh_reverse action_credential_abuse u002du002d>|실행| script_kb_upd action_credential_abuse u002du002d>|도구 사용| tool_powershell action_lateral_movement u002du002d>|주입된 티켓 활용| script_kb_upd action_lateral_movement u002du002d>|SMB 명령어 사용| tool_powershell action_persistence_accounts u002du002d>|계정 생성/리셋| tool_powershell action_defense_evasion u002du002d>|바이너리 실행| action_vm_deployment action_defense_evasion u002du002d>|데이터 난독화| process_curl %% 다이어그램 끝
숨겨진 Hyper-V 가상 머신 공격 체인
탐지 규칙
PowerShell 기반의 Hyper-V 가상 머신 가져오기 및 시작 [Windows Powershell] 탐지
보기
가능한 IP 조회 도메인 통신 시도 (dns를 통해)
보기
탐지할 IOCs (ip): Curly COMrades: 숨겨진 Hyper-V 가상을 통한 회피 및 지속성…
보기
탐지할 IOCs (해시): Curly COMrades: 숨겨진 Hyper-V 가상을 통한 회피 및 지속성…
보기
의심스러운 CURL 사용 (cmdline을 통해)
보기
시뮬레이션 지침
시뮬레이션 실행
선행 조건: 원격 측정 및 기준선 사전 비행 체크가 통과해야 합니다.
이유: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적대적 기법(TTP)의 정확한 실행을 자세히 설명합니다. 명령 및 내러티브는 식별된 TTP를 직접 반영해야 하며, 탐지 논리에 예상되는 정확한 원격 측정을 생성하기 위한 것입니다. 추상적이거나 관련 없는 예는 오진을 초래할 것입니다.
-
공격 내러티브 및 명령:
공격자는 이미 낮은 권한의 사용자 계정을 손상시켰고, Hyper-V 관리자 권한을 가진 서비스 계정으로 권한 상승했습니다. 은밀한 지속성을 유지하기 위해 AppV 캐시 디렉토리에 숨겨진 VM 이미지를 제작합니다 (c:programdatamicrosoftAppVappVirtual Machines1DBCC80B-5803-4AF1-8772-712C688F408A.vmcx). PowerShell을 사용하여 이 VM을 조용히 가져와 WSL라는 이름으로 시작합니다. 이는 Windows Subsystem for Linux 인스턴스로 가장하며, 이 정확한 명령 줄은 Sigma 규칙의 하드 코딩된 문자열과 일치하여 경고가 발생하도록 합니다. -
회귀 테스트 스크립트:
# ------------------------------------------------- # Curly COMrades Hyper-V 지속성 시뮬레이션 # ------------------------------------------------- # 변수 (규칙의 정확한 문자열 반영) $vmPath = 'c:programdatamicrosoftAppVappVirtual Machines1DBCC80B-5803-4AF1-8772-712C688F408A.vmcx' $vmName = 'WSL'