Deno 기반 프록시 및 RAT 내부 분석
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
공격자는 Deno JavaScript 런타임을 활용하여 모듈식 원격 액세스 트로이 목마(RAT) 및 프록시 프레임워크를 배포했습니다. 이 공격은 메일봄 및 Microsoft Teams 가장을 사용하여 악성 아카이브 다운로드를 용이하게 했습니다. 임플란트는 여러 모듈식 JavaScript 파일을 통해 작동하며, 특정 Deno 권한 플래그를 사용하여 C2 통신, 로컬 명령 실행 및 네트워크 피벗을 수행합니다.
조사
조사는 이메일 폭주와 Microsoft Teams를 통한 소셜 엔지니어링으로 구성된 초기 접근 단계를 밝혀냈습니다. 이 악성코드는 비전통적이며 모듈식으로 설계된 Deno 기반 시스템으로, app.js, back.js, helper.js, webui.js의 네 가지 스크립트로 분리되어 있습니다. 탐지는 초깃 실행이 아닌 사후 악용 정찰 활동 중에 발생했습니다.
대응 방법
조직은 사용자 쓰기 가능한 디렉터리에서 Deno와 같은 스크립팅 런타임의 실행을 모니터링하고 –allow-run 또는 –allow-net과 같은 의심스러운 권한 플래그에 대한 경고를 실행해야 합니다. 로컬 루프백 HTTP 서비스에 대한 모니터링과 이메일 이상 현상과의 Teams 가장 경고 상관 관계 구현을 권장합니다. 추가로 서명되지 않거나 승인되지 않은 런타임 실행의 제한은 공격 표면을 줄일 수 있습니다.
대응
탐지 시, 응답자는 영향을 받은 호스트를 격리하고 Teams 가장의 출처를 조사해야 합니다. 분석은 Deno 프로세스 계통과 루프백 포트 10021 또는 10022에 바인딩된 로컬 서비스에 집중해야 합니다. Microsoft 365 통합 감사 로그에서 TeamsImpersonationDetected 이벤트를 검토하는 것은 소셜 엔지니어링 캠페인의 범위를 결정하는 데 중요합니다.
graph TB %% 클래스 정의 classDef action fill:#99ccff classDef builtin fill:#cccccc classDef malware fill:#ff9999 classDef discovery fill:#ccffcc classDef command_control fill:#ffff99 %% 초기 공격 단계 attack_email_bombing[“<b>행위</b> – <b>T1667 이메일 폭탄 공격</b><br/>설명: 대량 이메일 캠페인을 통해<br/>사용자의 피로와 혼란을 유발함.”] class attack_email_bombing action attack_social_eng[“<b>행위</b> – <b>T1684.001 사회공학: 사칭</b><br/>설명: Microsoft Teams 통화를 통해<br/>IT 지원 담당자로 가장하여 신뢰를 구축함.”] class attack_social_eng action attack_user_exec[“<b>행위</b> – <b>T1204.002 사용자 실행: 악성 파일</b><br/>설명: 피해자가 악성 아카이브를<br/>다운로드하고 압축을 해제함.”] class attack_user_exec action file_malicious_archive[“<b>파일</b>: patch09913.b<br/>설명: Deno 기반 악성코드 프레임워크가 포함된<br/>악성 아카이브.”] class file_malicious_archive builtin %% 악성코드 프레임워크 실행 단계 malware_deno_framework[“<b>악성코드</b>: Deno 기반 프레임워크<br/>설명: app.js를 오케스트레이터로 사용하는<br/>모듈형 악성코드.”] class malware_deno_framework malware module_app_js[“<b>모듈</b>: app.js<br/>설명: JavaScript를 사용하여<br/>전문 모듈을 실행하는 오케스트레이터.”] class module_app_js malware action_js_interpreter[“<b>행위</b> – <b>T1059.007 명령 및 스크립트 인터프리터: JavaScript</b><br/>설명: app.js가 모듈을 실행하는 데 사용됨.”] class action_js_interpreter action action_hide_artifacts[“<b>행위</b> – <b>T1564.011 아티팩트 은닉: 프로세스 인터럽트 무시</b><br/>설명: conhost.exe –headless를 사용하여<br/>콘솔 창을 숨김.”] class action_hide_artifacts action %% 지속성 단계 module_back_js[“<b>모듈</b>: back.js<br/>설명: 지속성 유지 및 C2 통신을 담당함.”] class module_back_js malware action_persistence[“<b>행위</b> – <b>T1037.004 부팅 또는 로그온 초기화 스크립트: RC 스크립트</b><br/>설명: Windows 레지스트리 키<br/>HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run 을 수정함.”] class action_persistence action %% 정보 수집 단계 module_helper_js[“<b>모듈</b>: helper.js<br/>설명: 시스템 열거 작업을 수행함.”] class module_helper_js malware action_process_discovery[“<b>행위</b> – <b>T1057 프로세스 탐색</b><br/>설명: tasklist를 실행하여 현재 실행 중인 프로세스를 식별함.”] class action_process_discovery discovery action_sys_info_discovery[“<b>행위</b> – <b>T1082 시스템 정보 탐색</b><br/>설명: ipconfig /all 및 set 명령을 실행하여<br/>네트워크 및 환경 정보를 수집함.”] class action_sys_info_discovery discovery %% C2 및 내부 피벗 단계 action_c2_protocol[“<b>행위</b> – <b>T1071.001 애플리케이션 계층 프로토콜: 웹 프로토콜</b><br/>설명: CloudFront 기반 C2 엔드포인트와의<br/>지속적인 WebSocket 연결을 유지함.”] class action_c2_protocol command_control module_webui_js[“<b>모듈</b>: webui.js<br/>설명: 내부 네트워크 내 이동을 지원함.”] class module_webui_js malware action_proxy_pivoting[“<b>행위</b> – <b>T1090 프록시 (내부 피벗팅)</b><br/>설명: TCP 트래픽을 내부 네트워크로 전달하는<br/>접근 중개자 역할을 수행함.”] class action_proxy_pivoting command_control %% 연결 관계 attack_email_bombing –>|혼란을_유발| attack_social_eng attack_social_eng –>|이어짐| attack_user_exec attack_user_exec –>|포함함| file_malicious_archive file_malicious_archive –>|실행함| malware_deno_framework malware_deno_framework –>|제어함| module_app_js module_app_js –>|사용함| action_js_interpreter module_app_js –>|구현함| action_hide_artifacts module_app_js –>|실행함| module_back_js module_app_js –>|실행함| module_helper_js module_app_js –>|실행함| module_webui_js module_back_js –>|수행함| action_persistence module_back_js –>|구축함| action_c2_protocol module_helper_js –>|수행함| action_process_discovery module_helper_js –>|수행함| action_sys_info_discovery module_webui_js –>|수행함| action_proxy_pivoting
공격 흐름
탐지
가능한 지속성 지점 [ASEPs – Software/NTUSER Hive] (registry_event을 통해)
보기
가능한 지속성 지점 [ASEPs – Software/NTUSER Hive] (cmdline을 통해)
보기
가능한 Deno 런타임 악용 시도 (process_creation을 통해)
보기
가능한 시스템 네트워크 구성 탐지 (cmdline을 통해)
보기
LOLBAS Conhost (cmdline을 통해)
보기
탐지할 IOC (HashSha256): Deno 기반 프록시 및 RAT의 해부학
보기
Deno 명령 쉘 커맨드 실행 탐지 [Windows Sysmon]
보기
의심스러운 권한 플래그로 Deno 기반 RAT 실행 탐지 [Windows Process Creation]
보기
시뮬레이션 실행
전제 조건: 추적 정보 및 기준선 사전 체크를 통과해야 합니다.
이유: 이 섹션은 탐지 규칙을 트리거하도록 설계된 구체적인 공격자의 기술 (TTP)의 실행을 상세히 설명합니다. 명령과 서술은 식별된 TTP를 직접 반영해야 하며, 탐지 논리에서 예상되는 정확한 추적 자료를 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련 없는 예제는 오진을 초래할 수 있습니다.
-
공격 서사 및 명령: 공격자는 spearphishing 첨부 파일을 통해 피해자의 기계에 악성 Deno 기반 RAT를 성공적으로 전달했습니다. (T1566.004). 전통적인 서명 기반 AV를 피하기 위해 공격자는 Deno 이진 파일을 사용자의 로밍 프로필의 깊고 비표준적인 서브디렉터리 안에 숨겨둡니다:
C:Usersuser.nameAppDataRoamingDenoJSEnv. 공격자는 해당 이진 파일을 실행하며--allow-runand--allow-net플래그를 사용합니다. 이는 JavaScript 기반 악성코드가 시스템 탐지(T1082)를 위해 임의 쉘 명령을 실행하고 HTTPS를 통해 외부 C2 서버와 통신할 수 있도록 합니다(T1071.001). -
회귀 테스트 스크립트:
# 참고: 이 스크립트는 규칙 논리를 트리거하기 위해 디렉토리 및 이진 파일의 존재를 시뮬레이션합니다. 실제 테스트에서는 파일이 정확한 경로에 존재해야 합니다. $targetDir = "C:Usersuser.nameAppDataRoamingDenoJSEnv" $targetExe = "$targetDirdeno.exe" # 1. 탐지 규칙에 필요한 특정 디렉토리 구조 생성 if (!(Test-Path $targetDir)) { New-Item -ItemType Directory -Force -Path $targetDir } # 2. 'deno.exe'로 작용할 더미 파일 생성 # 실제 시뮬레이션에서는 실제 Deno 이진 파일일 것입니다. New-Item -ItemType File -Force -Path $targetExe # 3. '악성' 명령 실행 # 자식 프로세스로 나타나기 위해 Start-Process를 사용합니다. # 'deno.exe'가 더미이기 때문에 'cmd.exe'를 호출하지만, 논리와 일치하는 명령 문자열을 가장시킵니다. 규칙 검증을 목표로 실제 바이너리는 실제로 그 경로에 존재해야 합니다. Write-Host "[!] $targetExe의 악성 플래그로 실행을 시뮬레이션... Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo 규칙 트리거 시뮬레이션..." # 참고: 실제로 규칙을 트리거하기 위해서는 deno.exe가 존재해야 합니다. # 규칙이 이미지 경로를 직접적으로 찾고 있다면 바이너리가 반드시 존재해야 합니다. # 기능적 시뮬레이션 스크립트를 위해 경로를 호출합니다: # Start-Process -FilePath $targetExe -ArgumentList "--allow-run --allow-net" -
정리 명령:
# 시뮬레이션된 악성 디렉토리 및 파일 제거 Remove-Item -Path "C:Usersuser.nameAppDataRoamingDenoJSEnv" -Recurse -Force Write-Host "[+] 정리 완료."