GitHub과 SourceForge의 가짜 소프트웨어로 배포되는 Deno RAT by 가브리엘레 오리니
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
위협 행위자들은 GitHub 및 SourceForge를 통해 널리 사용되는 소프트웨어의 가짜 설치 프로그램 및 플러그인을 배포하여 DinDoor로 알려진 Deno 기반 백도어를 전달하고 있습니다. 이 악성 코드는 Scoop 또는 WinGet을 통해 Deno 런타임을 설치한 후 데이터를 훔치고, 원격 명령을 실행하며, P2P 비디오 스트리밍을 가능케 하는 JavaScript RAT를 실행합니다. 감염 체인은 악성 MSI 패키지와 PowerShell 스크립트를 사용하여 시작되며, 명령 및 제어 트래픽은 HTTP 또는 WebSocket을 통해 이루어집니다. 이 캠페인은 또한 피해자를 악성 리포지토리로 유도하기 위해 해킹된 YouTube 채널을 악용합니다.
조사
연구자들은 전체 감염 시퀀스를 재구성했습니다, 시작은 curl 명령어들로, MSI 파일을 다운로드하고 Scoop, WinGet, Deno를 배포한 후 DinDoor JavaScript 로더를 실행하는 설치 스크립트를 실행했습니다. 그들의 분석은 시스템 정찰, 브라우저 및 암호화폐 지갑 도난, WebSocket을 통한 VNC, 그리고 Edge 기반의 P2P 스트리밍을 포함한 RAT의 능력을 문서화했습니다. 팀은 또한 탐지와 위협 헌팅을 지원하기 위한 도메인, URL, IP 주소, 명령줄 아티팩트 등의 지표를 추출했습니다.
완화
조직은 소프트웨어를 공식 공급업체 웹사이트에서만 다운로드하고 설치 프로그램을 실행하기 전에 디지털 서명을 확인해야 합니다. 보안 팀은 Deno를 설치하기 위해 Scoop 및 WinGet을 비정상적으로 사용하는 경우와 예기치 않은 MSI 기반 소프트웨어 배포를 모니터링해야 합니다. 확인된 악성 도메인 및 IP 주소로의 아웃바운드 트래픽은 차단되어야 하며, PowerShell 또는 curl 믿을 수 없는 소스에서 파일을 다운로드하고 실행하는 활동은 철저히 검사되어야 합니다.
대응
방어자는 경고를 설정해야 합니다. msiexec 파일을 실행하거나 의심스러운 GitHub 또는 SourceForge URL로부터 발생한 파일을 실행하는 Run 레지스트리 키에서 deno.exe를 시작하고, 알려진 명령 및 제어 인프라와의 네트워크 통신을 감시해야 합니다. 영향을 받은 호스트는 드롭된 스크립트, Deno 런타임, 그리고 지속성 메커니즘을 찾기 위해 포렌식 검토를 받아야 하며, 타협된 시스템은 즉시 격리하고 모든 비인가된 Deno 설치는 제거해야 합니다.
graph TB
%% 클래스 정의
classDef technique fill:#99ccff
classDef tool fill:#ffcc99
classDef operator fill:#ff9900
%% 공격 단계(기법 노드로서)
step1_malicious_link[기법 – T1204.001 사용자 실행: 악성 링크
피해자가 가짜 GitHub 또는 SourceForge 프로젝트로 리디렉션하는 악성 YouTube 링크를 클릭합니다]
class step1_malicious_link technique
step1_content_injection[기법 – T1659 콘텐츠 인젝션
해킹된 YouTube 채널은 비디오 설명이나 댓글에 악성 URL을 삽입합니다]
class step1_content_injection technique
step2_msiexec[기법 – T1218.007 시스템 바이너리 프록시 실행: Msiexec
명령어는 MSI 파일을 다운로드하고 msiexec를 통해 실행합니다]
class step2_msiexec technique
step3_installer_pkg[기법 – T1546.016 실행 트리거: 설치 패키지
PowerShell 스크립트는 Scoop 또는 WinGet을 사용하여 Deno 런타임을 설치합니다]
class step3_installer_pkg technique
step4_logon_script[기법 – T1037.001 부팅 또는 로그인 초기화 스크립트: 로그인 스크립트
Deno 백도어를 로그온 시 실행하는 Run 레지스트리 키를 생성합니다]
class step4_logon_script technique
step5_reflective_load[기법 – T1620 반사적 코드 로딩
백도어는 메모리 내에서 완전히 JavaScript 코드를 가져와 실행하는 루프를 실행합니다]
class step5_reflective_load technique
step6_c2[기법 – T1102 웹 서비스 및 T1102.002 양방향 통신
명령 및 제어를 위해 HTTP 엔드포인트와 맞춤형 WebSocket VNC 채널을 사용합니다]
class step6_c2 technique
step7_browser_creds[기법 – T1555.003 저장소에서 자격 증명 추출: 웹 브라우저
절도범이 저장된 브라우저 비밀번호를 추출합니다]
class step7_browser_creds technique
step7_input_capture[기법 – T1056 입력 캡처
키로깅과 폼 캡처를 통해 자격 증명을 획득합니다]
class step7_input_capture technique
step7_clipboard[기법 – T1115 클립보드 데이터
민감 데이터를 포함할 수 있는 클립보드 콘텐츠를 수집합니다]
class step7_clipboard technique
step8_browser_discovery[기법 – T1217 브라우저 정보 발견
암호화폐 지갑 파일, 브라우저 데이터 및 스크린샷을 수집합니다]
class step8_browser_discovery technique
step9_exfil[기법 – T1011 다른 네트워크 매체를 통한 데이터 유출
수집된 데이터를 동일한 HTTP/WebSocket 채널을 통해 전송합니다]
class step9_exfil technique
step10_process_injection[기법 – T1055.005 프로세스 주입: 스레드 로컬 저장소
TLS를 사용하여 합법적인 프로세스에 악성 코드를 주입합니다]
class step10_process_injection technique
step11_indirect_exec[기법 – T1202 간접 명령 실행
추가 페이로드의 프록시 실행을 위해 msiexec를 활용합니다]
class step11_indirect_exec technique
%% 선택적 도구 노드
tool_msiexec[도구 – 이름: msiexec
설명: 프록시 실행에 사용되는 Windows 설치 프로그램 실행 파일]
class tool_msiexec tool
tool_powershell[도구 – 이름: PowerShell
설명: 설치 패키지를 구동하는 스크립팅 환경]
class tool_powershell tool
tool_deno[도구 – 이름: Deno
설명: JavaScript 백도어를 호스팅하는 런타임]
class tool_deno tool
%% 공격 흐름을 보여주는 연결
step1_malicious_link –>|로 이어짐| step2_msiexec
step1_content_injection –>|지원됨| step2_msiexec
step2_msiexec –>|사용함| tool_msiexec
step2_msiexec –>|작동시킴| step3_installer_pkg
step3_installer_pkg –>|사용함| tool_powershell
step3_installer_pkg –>|설치함| tool_deno
step3_installer_pkg –>|활성화함| step4_logon_script
step4_logon_script –>|설정함| step5_reflective_load
step5_reflective_load –>|제공함| step6_c2
step6_c2 –>|촉진함| step7_browser_creds
step6_c2 –>|촉진함| step7_input_capture
step6_c2 –>|촉진함| step7_clipboard
step7_browser_creds –>|피드로 전달됨| step8_browser_discovery
step7_input_capture –>|피드로 전달됨| step8_browser_discovery
step7_clipboard –>|피드로 전달됨| step8_browser_discovery
step8_browser_discovery –>|전송됨| step9_exfil
step9_exfil –>|채널 사용함| step6_c2
step5_reflective_load –>|활성화함| step10_process_injection
step10_process_injection –>|권한 상승함| step11_indirect_exec
step11_indirect_exec –>|실행함| step2_msiexec
class step1_malicious_link,step1_content_injection,step2_msiexec,step3_installer_pkg,step4_logon_script,step5_reflective_load,step6_c2,step7_browser_creds,step7_input_capture,step7_clipboard,step8_browser_discovery,step9_exfil,step10_process_injection,step11_indirect_exec technique
class tool_msiexec,tool_powershell,tool_deno tool
공격 흐름
탐지
LOLBAS Conhost (cmdline 에 기반)
보기
비정상적인 최상위 도메인(TLD) DNS 요청에 의한 수상한 명령 및 제어 (dns에 기반)
보기
탐지 대상 IOCs (SourceIP): GitHub 및 SourceForge에서 Deno RAT을 배포하는 가짜 소프트웨어, Gabriele Orini
보기
탐지 대상 IOCs (DestinationIP): GitHub 및 SourceForge에서 Deno RAT을 배포하는 가짜 소프트웨어, Gabriele Orini
보기
DinDoor RAT C2 통신 탐지 [Windows 네트워크 연결]
보기
가짜 설치 프로그램을 통한 Deno RAT 배포 탐지 [Windows 프로세스 생성]
보기
숨겨진 창과 회피된 실행 정책의 PowerShell 실행 [Windows PowerShell]
보기
시뮬레이션 실행
전제조건: 텔레메트리 및 기준점 프리플라이트 체크가 통과해야 합니다.
근거: 이 섹션은 탐지 규칙을 작동시키기 위한 적의 기법(TTP)의 정확한 실행을 상세히 다룹니다. 명령 및 설명은 식별된 TTP와 직접적으로 연관되어야 하며, 탐지 논리에서 기대되는 바로 그 텔레메트리를 생성하도록 설계되어야 합니다.
-
공격 서사 및 명령:
공격자는 피싱 첨부파일을 통해 악성 CMD 스크립트로 초기 발판을 얻었습니다. 은밀함을 유지하기 위해, 스크립트는 숨겨진 창으로 PowerShell을 실행하고, 실행 정책을 비활성화하며, base64로 인코딩된 페이로드를 다운로드 및 실행합니다. 정확한 명령줄은 규칙의 세 가지 플래그 된 부분 문자열과 일치하여 탐지를 보장합니다.-
1단계 – CMD 실행기 (테스터에 의해 시뮬레이션됨):
@echo off start "" powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -EncodedCommand %payload% -
2단계 – PowerShell 페이로드 (base64로 인코딩되며, 테스트를 위한 무해한 것):
$cmd = 'Write-Output "Malicious simulation executed"' $bytes = [System.Text.Encoding]::Unicode.GetBytes($cmd) $b64 = [Convert]::ToBase64String($bytes) echo $b64 # 이 값을 배치 파일에서 %payload%로 삽입
-
-
회귀 테스트 스크립트: 아래 스크립트는 전체 프로세스를 자동화하여 인코딩된 명령어를 생성하고 필요한 플래그가 설정된 상태에서 PowerShell을 실행한 후, SIEM이 이벤트를 수집할 수 있도록 잠시 멈춥니다.
# ------------------------------------------------- # 회귀 테스트 – PowerShell 숨김 + Bypass EP # ------------------------------------------------- # 1) 무해한 페이로드 생성 (Write-Output) $payload = 'Write-Output "Malicious simulation executed"' # 2) base64로 페이로드 인코딩 (PowerShell에서 예상되는 Unicode 인코딩) $bytes = [System.Text.Encoding]::Unicode.GetBytes($payload) $b64 = [Convert]::ToBase64String($bytes) # 3) Sigma 규칙에 필요한 정확한 플래그 세트로 PowerShell 실행 $psCmd = @( 'powershell.exe', '-NoProfile', '-ExecutionPolicy', 'Bypass', '-WindowStyle', 'Hidden', '-EncodedCommand', $b64 ) -join ' ' Write-Host "Executing:`n$psCmd" Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile","-ExecutionPolicy","Bypass","-WindowStyle","Hidden","-EncodedCommand",$b64 -WindowStyle Hidden # 4) 로깅 전파 대기 (필요에 따라 조정) Start-Sleep -Seconds 10 Write-Host "Simulation complete – check SIEM for detection." -
정리 명령: 임시 파일이 없는지(여기서는 생성되지 않음)를 제거하고 남아 있는 PowerShell 프로세스가 없도록 합니다.
# 테스트에서 생성된 불필요한 PowerShell 프로세스를 종료(현재 세션 제외) Get-Process -Name powershell | Where-Object { $_.Id -ne $PID } | Stop-Process -Force Write-Host "Cleanup complete."