SOC Prime Bias: 치명적

27 May 2026 15:32 UTC

GitHub과 SourceForge의 가짜 소프트웨어로 배포되는 Deno RAT by 가브리엘레 오리니

Author Photo
SOC Prime Team linkedin icon 팔로우
GitHub과 SourceForge의 가짜 소프트웨어로 배포되는 Deno RAT by 가브리엘레 오리니
shield icon

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

공격 흐름

시뮬레이션 실행

전제조건: 텔레메트리 및 기준점 프리플라이트 체크가 통과해야 합니다.

근거: 이 섹션은 탐지 규칙을 작동시키기 위한 적의 기법(TTP)의 정확한 실행을 상세히 다룹니다. 명령 및 설명은 식별된 TTP와 직접적으로 연관되어야 하며, 탐지 논리에서 기대되는 바로 그 텔레메트리를 생성하도록 설계되어야 합니다.

  • 공격 서사 및 명령:
    공격자는 피싱 첨부파일을 통해 악성 CMD 스크립트로 초기 발판을 얻었습니다. 은밀함을 유지하기 위해, 스크립트는 숨겨진 창으로 PowerShell을 실행하고, 실행 정책을 비활성화하며, base64로 인코딩된 페이로드를 다운로드 및 실행합니다. 정확한 명령줄은 규칙의 세 가지 플래그 된 부분 문자열과 일치하여 탐지를 보장합니다.

    1. 1단계 – CMD 실행기 (테스터에 의해 시뮬레이션됨):

       @echo off
       start "" powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -EncodedCommand %payload%
    2. 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."