ValleyRAT 악성코드, 구직자 겨냥하며 Foxit DLL 사이드 로딩 악용
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
ValleyRAT 원격 접근 트로이 목마는 구직자와 인사 담당자를 겨냥한 이메일 첨부파일을 통해 전달됩니다. 공격자는 조작된 Foxit PDF Reader 실행 파일을 번들로 묶어 DLL 사이드-로딩을 통해 악성 msimg32.dll을 트리거합니다. 페이로드는 숨겨진 Python 런타임을 풀어내고, C2 서버에서 Base64로 인코딩된 스크립트를 가져와 자동 실행 레지스트리 값을 통해 지속성을 설정하며 브라우저 데이터를 유출합니다.
조사
연구원들은 악성 아카이브를 분석하여 표준 Windows DLL 검색 순서에 따라 악성 msimg32.dll을 사이드로딩하는 이름이 바뀐 FoxitPDFReader.exe를 발견했습니다. 배치 스크립트는 임베디드된 Python 인터프리터(이름이 zvchost.exe로 변경됨)를 풀어내며 악성 IP 주소에서 가져온 Base64로 인코딩된 로더 스크립트를 실행합니다. 네트워크 검사에서 무작위 CN과 독특한 JA3 핑거프린트를 가진 자체 서명된 인증서가 C2 트래픽에 사용됨이 드러났습니다. 지속성은 자동 실행 레지스트리 키를 생성하여 유지됩니다.
완화
권장 방어책에는 엄격한 이메일 첨부파일 스캔 및 PDF 파일로 위장된 실행 파일 차단이 포함됩니다. 신뢰할 수 없는 바이너리의 DLL 사이드-로딩 및 실행을 방지하기 위해 애플리케이션 화이트리스트를 적용하십시오. 자동 실행 레지스트리 항목 생성 모니터링 및 알려진 C2 IP 주소 차단이 필요합니다. 엔드포인트 보호 서명 업데이트를 유지하고 구직 테마의 피싱에 집중된 보안 인식 교육을 제공하십시오.
대응
비정상적인 위치, 특히 깊은 밑줄 패턴 경로에서 FoxitPDFReader.exe 또는 msimg32.dll이 실행될 때 경고를 생성하십시오. -c 매개변수와 Base64 명령 페이로드를 사용하는 zvchost.exe의 프로세스 활동을 상관시키십시오. 196.251.86.145(및 관련 인프라)에 대한 아웃바운드 연결을 탐지하고, 고유한 자체 서명된 인증서가 있는 TLS 세션을 검토하십시오. HKCUSoftwareMicrosoftWindowsCurrentVersionRun 하의 레지스트리 변경 사항을 검사하여 허가되지 않은 자동 실행 항목을 찾으십시오.
mermaid graph TB %% 클래스 정의 섹션 classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ff9999 %% 노드 정의 action_phishing[“<b>작업</b> – <b>T1566.001 피싱: 스피어피싱 첨부파일</b><br />피해자는 위장된 FoxitPDFReader.exe가 포함된 악성 zip 아카이브를 받습니다.”] class action_phishing action file_archive[“<b>도구</b> – 악성 아카이브<br />페이로드를 전달하는 압축 파일 Overview_of_Work_Expectations.zip.”] class file_archive tool exe_foxit[“<b>도구</b> – FoxitPDFReader.exe (이름 변경됨)<br />사용자가 아카이브를 연 후 실행됩니다.”] class exe_foxit tool dll_msimg32[“<b>도구</b> – msimg32.dll (악성)<br />DLL 사이드-로딩을 달성하기 위해 동일한 디렉토리에 위치합니다.”] class dll_msimg32 tool exec_hijack[“<b>작업</b> – T1574.008 실행 흐름 가로채기<br />검색 순서 가로채기는 악성 DLL을 로드합니다.”] class exec_hijack action script_bat[“<b>도구</b> – document.bat<br />하이재킹된 실행 파일에 의해 시작된 배치 스크립트입니다.”] class script_bat tool docx_7zip[“<b>도구</b> – document.docx (7‑zip 아카이브)<br />임베디드 Python 환경이 포함되어 있습니다.”] class docx_7zip tool exe_zvchost[“<b>도구</b> – zvchost.exe (이름 변경된 python.exe)<br />Base64로 인코딩된 로더 스크립트를 실행합니다.”] class exe_zvchost tool payload_base64[“<b>도구</b> – Base64 페이로드<br />최종 악성 구성 요소를 디코딩하고 준비합니다.”] class payload_base64 tool registry_run_key[“<b>도구</b> – 레지스트리 실행 키<br />지속성을 달성하기 위해 Active Setup 하에 생성됩니다.”] class registry_run_key tool persistence_active_setup[“<b>작업</b> – T1547.014 부팅 또는 로그인 자동 시작 실행: Active Setup<br />각 로그인 시 페이로드 실행을 보장합니다.”] class persistence_active_setup action defense_obfuscation[“<b>작업</b> – T1027 난독화된 파일 또는 정보<br />깊은 밑줄 디렉토리에 숨겨진 파일 및 Base64로 인코딩됩니다.”] class defense_obfuscation action credential_browser[“<b>작업</b> – T1555.003 웹 브라우저에서 자격 증명 가져오기<br />ValleyRAT은 저장된 사용자 이름, 비밀번호 및 쿠키를 추출합니다.”] class credential_browser action malware_valleyrat[“<b>악성코드</b> – ValleyRAT<br />TLS C2 채널을 여는 원격 접근 도구입니다.”] class malware_valleyrat malware c2_server[“<b>도구</b> – C2 서버 196.251.86.145<br />RAT로부터 암호화된 트래픽을 수신합니다.”] class c2_server tool malware_component[“<b>악성코드</b> – 추가 구성 요소<br />피해자 호스트에서 가져온 실행 바이너리.”] class malware_component malware %% 플로우를 보여주는 연결 action_phishing u002du002d>|전달| file_archive file_archive u002du002d>|포함| exe_foxit exe_foxit u002du002d>|로드| dll_msimg32 dll_msimg32 u002du002d>|활성화| exec_hijack exec_hijack u002du002d>|트리거| script_bat script_bat u002du002d>|추출| docx_7zip docx_7zip u002du002d>|제공| exe_zvchost exe_zvchost u002du002d>|실행| payload_base64 payload_base64 u002du002d>|생성| registry_run_key registry_run_key u002du002d>|보장| persistence_active_setup payload_base64 u002du002d>|실행| defense_obfuscation payload_base64 u002du002d>|탈취| credential_browser credential_browser u002du002d>|피드| malware_valleyrat malware_valleyrat u002du002d>|설립| c2_server malware_valleyrat u002du002d>|가져오기| malware_component
공격 흐름
탐지
ValleyRAT 캠페인 C&C 및 페이로드 전송 탐지 [Windows 네트워크 연결]
보기
ValleyRAT 캠페인 Foxit PDF Reader를 사용한 DLL 사이드-로딩 [Windows 프로세스 생성]
보기
IOCs (SourceIP)를 탐지하기 위한: Malware ValleyRAT 캠페인은 구직자를 목표로 하고, Foxit PDF Reader를 악용하여 DLL 사이드-로딩을 실행
보기
IOCs (HashSha256)를 탐지하기 위한: Malware ValleyRAT 캠페인은 구직자를 목표로 하고, Foxit PDF Reader를 악용하여 DLL 사이드-로딩을 실행
보기
IOCs (HashSha1)를 탐지하기 위한: Malware ValleyRAT 캠페인은 구직자를 목표로 하고, Foxit PDF Reader를 악용하여 DLL 사이드-로딩을 실행
보기
시뮬레이션 실행
전제 조건: 원격 측정 및 기준치 사전 비행 검사를 통과했어야 합니다.
이유: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적 대술 기법(TTP)의 정밀한 실행을 상세히 설명합니다. 명령과 내러티브는 식별된 TTP를 직간접적으로 반영해야 하며, 탐지 논리가 기대하는 정확한 원격 측정을 생성하는 것을 목표로 합니다. 추상적이거나 관련이 없는 예시는 오진을 초래할 수 있습니다.
-
공격 내러티브 및 명령:
-
초기 침해: 피해자가 이메일을 통해 전달된 악성 채용 테마 PDF를 엽니다. PDF는 JavaScript (T1059.006)를 포함하고 있으며, 악성 DLL (
valley.dll)을 PDF 리더 실행 파일과 동일한 디렉토리에 드롭합니다. -
DLL 사이드-로딩: 공격자는 Foxit Reader의 보조 DLL 로드 기능을 활용합니다.
valley.dll를 바꾸어 놓음으로써 흡수된Foxit 실행 파일 (Foxit 실행 파일 ( -
프로세스 생성 트리거: 이름이 바뀐 실행 파일 (
Foxit 실행 파일 ()이 실행되며, 이미지 경로가zvchost.exe로 끝나는 프로세스 생성 이벤트를 생성합니다. 이것은 Sigma 규칙의Image|endswith조건과 일치하여 경고를 유발합니다.
-
-
회귀 테스트 스크립트: 다음 PowerShell 스크립트는 제어된 실험실 환경에서 위의 단계를 재현합니다.
# ------------------------------------------------------------ # ValleyRAT 사이드-로딩 탐지 테스트를 위한 회귀 스크립트 # ------------------------------------------------------------ # 1. 임시 작업 디렉토리 설정 $workDir = "$env:TEMPValleyRAT_Test" New-Item -Path $workDir -ItemType Directory -Force | Out-Null # 2. 정식 Foxit Reader 실행 파일 복사 (PDF 리더 시뮬레이션) $foxitSrc = "C:Program FilesFoxit SoftwareFoxit ReaderFoxitReader.exe" $foxitRenamed = Join-Path $workDir "zvchost.exe" Copy-Item -Path $foxitSrc -Destination $foxitRenamed -Force # 3. 가짜 악성 DLL 생성 (실제로는 ValleyRAT 페이로드 일 것) $dllPath = Join-Path $workDir "valley.dll" Set-Content -Path $dllPath -Value ([byte[]](0x4D,0x5A)) -Encoding Byte # 최소 MZ 헤더 # 4. 이름이 바뀐 Foxit 실행 파일 실행 (이것이 DLL 사이드-로딩을 트리거함) Write-Host "[*] 이름이 바뀐 Foxit 실행 파일을 실행하여 사이드-로딩 트리거 중..." $proc = Start-Process -FilePath $foxitRenamed -PassThru -WindowStyle Hidden # 5. 프로세스 생성이 기록되도록 잠시 대기 Start-Sleep -Seconds 5 # 6. 검증을 위한 프로세스 정보 출력 Write-Host "프로세스 ID: $($proc.Id)" Write-Host "실행 파일 경로: $($proc.Path)" # 7. 정리 (선택 사항 - 별도의 정리 섹션 참조) # Remove-Item -Recurse -Force $workDir -
정리 명령: 테스트 후 아티팩트를 제거하고 남아있는 사이드-로드 DLL을 피하기 위해 실행하십시오.
# 테스트 디렉토리 정리 및 남아있는 프로세스 종료 $workDir = "$env:TEMPValleyRAT_Test" # 실행 중인 프로세스 종료 Get-Process -Name "zvchost" -ErrorAction SilentlyContinue | Stop-Process -Force # 테스트 아티팩트 삭제 Remove-Item -Path $workDir -Recurse -Force -ErrorAction SilentlyContinue Write-Host "[+] 정리 완료."