프로스티네이버: 신선한 장난과 디지털 위협
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
ESET는 FrostyNeighbor APT 그룹이 Ghostwriter로도 추적되는 우크라이나 정부 기관에 대한 공격을 재개했다고 보고합니다. 이들은 JavaScript 기반 다운로드 프로그램으로 알려진 PicassoLoader를 전달하는 스피어 피싱 PDF를 사용하여, 궁극적으로 Cobalt Strike 비콘을 배포합니다. 이 캠페인은 지리 기반 검증, 예약된 작업 지속성 및 여러 파일 드롭 기법에 의존하여 가시성을 감소시키고 탐지를 회피합니다. 인프라는 Cloudflare 뒤에 위치하고 여러 needbinding.icu 도메인을 사용합니다.
조사
연구자들은 악성 PDF 미끼에서 시작하여 JavaScript 드로퍼와 PicassoLoader 다운로더를 거쳐 최종적으로 Cobalt Strike 페이로드를 전달하기까지의 전체 공격 사슬을 재구성했습니다. 파일 이름, 레지스트리 변경사항 및 명령 및 제어 URLs을 포함한 지표를 추출하고, 이를 이미 알려진 FrostyNeighbor의 무역적 특성과 연결했습니다. 보고서는 또한 CVE-2023-38831 가 WinRAR에서, CVE-2024-42009 가 Roundcube에서 악용되었음을 강조합니다.
완화
조직은 의심스러운 첨부 파일 유형을 차단하고, 매크로 및 스크립트 실행에 대해 엄격한 통제를 시행하며, 알 수 없는 이진 파일에 의해 생성된 예약 작업을 모니터링하고, 알려진 악성 도메인으로의 아웃바운드 HTTPS 트래픽을 제한해야 합니다. 참조된 취약점들은 즉시 패치되어야 하며, 최소 권한 제한이 rundll32.exe 사용에 적용되어야 합니다.
응답
관련된 지표가 감지되면 즉시 영향을 받은 시스템을 격리하고, 포렌식 아티팩트를 수집하며, Cobalt Strike 비콘 및 PicassoLoader 컴포넌트를 추적하십시오. 공개된 자격 증명을 재설정하고 지속성의 징후를 위해 예약된 작업 및 Run 키 항목을 검토하십시오.
"graph TB %% 클래스 정의 classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef file fill:#c2f0c2 classDef tool fill:#cccccc classDef malware fill:#ff9999 %% 노드 – 행동 attack_initial_access["<b>Action</b> – <b>T1566.001 피싱: 스피어 피싱 첨부 파일</b><br/>RAR 아카이브 링크가 포함된 악성 PDF 이메일."] class attack_initial_access action action_user_execution["<b>Action</b> – <b>T1204.002 사용자 실행</b><br/>피해자가 JavaScript 드로퍼를 실행하는 PDF를 엽니다."] class action_user_execution action %% 노드 – 파일 file_malicious_pdf["<b>File</b> – <b>이름</b>: malicious.pdf<br/>JavaScript 드로퍼를 포함합니다."] class file_malicious_pdf file file_rar["<b>File</b> – <b>이름</b>: payload.rar<br/>PDF에 있는 링크를 통해 전달됩니다."] class file_rar file file_scheduled_xml["<b>File</b> – <b>이름</b>: scheduled_task.xml<br/>예약 작업을 등록하는데 사용된 XML."] class file_scheduled_xml file file_reg["<b>File</b> – <b>이름</b>: persistence.reg<br/>Run 키를 생성하는 레지스트리 파일.""" class file_reg file file_lnk["<b>File</b> – <b>이름</b>: launcher.lnk<br/>시작 메뉴에 배치된 바로 가기.""" class file_lnk file %% 노드 – 악성코드 / 도구 malware_javascript_dropper["<b>Malware</b> – <b>이름</b>: JavaScript Dropper<br/>base64로 인코딩된 스크립트를 실행하고 2차 페이로드를 포함합니다."] class malware_javascript_dropper malware tool_picasso_loader["<b>Tool</b> – <b>이름</b>: PicassoLoader<br/>시스템 정보, 프로세스 리스트, 피해자 ID 데이터를 수집합니다."] class tool_picasso_loader tool malware_cobalt_strike["<b>Malware</b> – <b>이름</b>: Cobalt Strike Beacon<br/>원격 제어 기능을 제공합니다.""" class malware_cobalt_strike malware %% 노드 – 기술 technique_obfuscation["<b>Technique</b> – <b>T1027 난독화된 파일 또는 정보</b><br/>페이로드는 탐지를 피하기 위해 base64로 인코딩됩니다."] class technique_obfuscation technique technique_embedded_payload["<b>Technique</b> – <b>T1027.009 내장된 페이로드</b><br/>다운로더 및 비콘이 JavaScript 내부에 숨겨져 있습니다."] class technique_embedded_payload technique technique_gather_identity["<b>Technique</b> – <b>T1589 피해자 신원 정보 수집</b><br/>사용자 이름, 컴퓨터 이름, OS 버전 및 부팅 시간을 수집합니다."] class technique_gather_identity technique technique_system_info["<b>Technique</b> – <b>T1082 시스템 정보 탐색</b><br/>상세 시스템 사양을 수확합니다."] class technique_system_info technique technique_process_discovery["<b>Technique</b> – <b>T1057 프로세스 탐색</b><br/>호스트에서 실행 중인 프로세스를 열거합니다."] class technique_process_discovery technique technique_c2_https["<b>Technique</b> – <b>T1071.001 애플리케이션 레이어 프로토콜: 웹 프로토콜</b><br/>HTTPS POST를 통해 C2와 통신합니다.""" class technique_c2_https technique technique_scheduled_task["<b>Technique</b> – <b>T1053.005 예약 작업/작업</b><br/>지속성을 위해 예약된 작업 XML을 생성합니다.""" class technique_scheduled_task technique technique_run_key["<b>Technique</b> – <b>T1060 레지스트리 Run 키 / 시작 폴더</b><br/>악성 LNK를 가리키는 Run 키를 추가합니다.""" class technique_run_key technique technique_exfiltration["<b>Technique</b> – <b>T1041 C2 채널을 통한 데이터 탈취</b><br/>수집된 데이터를 동일한 HTTPS 채널을 통해 전송합니다.""" class technique_exfiltration technique %% 연결 – 공격 흐름 attack_initial_access –>|전달| file_malicious_pdf file_malicious_pdf –>|열림| action_user_execution action_user_execution –>|실행| malware_javascript_dropper malware_javascript_dropper –>|사용| technique_obfuscation malware_javascript_dropper –>|포함| technique_embedded_payload technique_embedded_payload –>|드롭| tool_picasso_loader tool_picasso_loader –>|수집| technique_system_info tool_picasso_loader –>|수집| technique_process_discovery tool_picasso_loader –>|수집| technique_gather_identity tool_picasso_loader –>|연결| technique_c2_https technique_c2_https –>|전달| malware_cobalt_strike malware_cobalt_strike –>|설치| technique_scheduled_task technique_scheduled_task –>|생성| file_scheduled_xml malware_cobalt_strike –>|설치| technique_run_key technique_run_key –>|생성| file_reg file_reg –>|추가| file_lnk technique_c2_https –>|탈취> technique_exfiltration "
공격 흐름
탐지
가능한 지속성 지점 [ASEPs – 소프트웨어/NTUSER 하이브] (레지스트리 이벤트 통해)
보기
비정상 경로에서의 시스템 프로세스 실행 (프로세스 생성 통해)
보기
Rundll32 DLL 의심 경로 실행 (프로세스 생성 통해)
보기
LOLBAS WScript / CScript (프로세스 생성 통해)
보기
IOCs (HashSha1) 탐지: FrostyNeighbor: 새로운 장난과 디지털 속임수
보기
FrostyNeighbor C&C 통신 탐지 [Windows 네트워크 연결]
보기
FrostyNeighbor Cobalt Strike 배포 루틴 (Rundll32와 JavaScript를 통해) [Windows 프로세스 생성]
보기
시뮬레이션 실행
전제 조건: 텔레메트리 및 기준선 사전 점검을 통과해야 합니다.
이유: 이 섹션은 탐지 규칙을 발동하도록 설계된 적군 기술 (TTP)의 정확한 실행을 자세히 설명합니다. 명령어 및 내러티브는 식별된 TTPs를 직접 반영해야 하며 탐지 논리에 의해 예상되는 정확한 텔레메트리를 생성하는 것을 목표로 해야 합니다.
-
공격 내러티브 및 명령어:
적군은 피해자 호스트에 발판을 마련하고 Cobalt Strike 비콘을 배포하면서도 탐지되지 않으려 합니다. 방법은:
- 복사
rundll32.exe비표준 위치로 (C:ProgramDataTemprundll32.exe) 간단한 화이트리스트 경고를 회피하게 합니다. - 악성 DLL 드롭 (
ViberPC.dll)을%ProgramData%에 드롭합니다. 이 DLL은 부팅스트랩 된 Cobalt Strike 페이로드를 포함합니다. - 복사한
rundll32.exe를 악성 DLL을 로드하는 명령줄로 실행합니다 (%ProgramData%ViberPC.dll). - 두 개의 JavaScript 파일 드롭 (
53_7.03.2026_R.jsandUpdate.js) C2 서버에 접속하고 비콘 설치를 완료하는 JScript를 포함합니다. - JavaScript 파일 실행 사용
cscript.exe의해이미지끝.js와명령줄정확한 파일 이름을 포함
이 스텝은 Sigma 규칙의
selection1,selection2와selection3에 의해 일치된 정확한 Sysmon 프로세스 생성 이벤트를 생성합니다. - 복사
-
회귀 테스트 스크립트:
# FrostyNeighbor Cobalt Strike 배포 시뮬레이션 # ------------------------------------------------- # 1. 경로 준비 $tempDir = "$env:ProgramDataTemp" $rundllCopy = Join-Path $tempDir "rundll32.exe" $malDll = "$env:ProgramDataViberPC.dll" $js1 = "$env:ProgramData53_7.03.2026_R.js" $js2 = "$env:ProgramDataUpdate.js" # 2. 임시 디렉토리가 존재하는지 확인 New-Item -Path $tempDir -ItemType Directory -Force | Out-Null # 3. rundll32.exe를 비표준 위치로 복사 Copy-Item -Path "$env:SystemRootSystem32rundll32.exe" -Destination $rundllCopy -Force # 4. 더미 악성 DLL 생성 (실제 공격에서는 페이로드가 됩니다) $dummyDll = [IO.File]::ReadAllBytes("$env:SystemRootSystem32driversetchosts") # 대체 이진 파일 [IO.File]::WriteAllBytes($malDll, $dummyDll) # 5. 악성 DLL로 복사한 rundll32 실행 Start-Process -FilePath $rundllCopy -ArgumentList "`"$malDll`"" -WindowStyle Hidden # 6. JavaScript 페이로드 드롭 $jsContent = @" // C2 엔드포인트에 접속하는 단순 JScript (모의 실행) var xhr = new ActiveXObject("MSXML2.XMLHTTP"); xhr.open("GET", "http://127.0.0.1:8080/beacon", false); xhr.send(); "@ Set-Content -Path $js1 -Value $jsContent -Encoding ASCII Set-Content -Path $js2 -Value $jsContent -Encoding ASCII # 7. cscript를 통해 JavaScript 파일 실행 (이는 .js 이미지와 함께 프로세스를 생성) Start-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js1`"" -WindowStyle Hidden Start-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js2`"" -WindowStyle Hidden # 8. SIEM 수집을 위한 일시 정지 Start-Sleep -Seconds 15 -
정리 명령어:
# 시뮬레이션 후 정리 $paths = @( "$env:ProgramDataViberPC.dll", "$env:ProgramData53_7.03.2026_R.js", "$env:ProgramDataUpdate.js", "$env:ProgramDataTemprundll32.exe" ) foreach ($p in $paths) { if (Test-Path $p) { Remove-Item -Path $p -Force } } # 테스트에서 시작된 잔여 cscript 프로세스를 중지하려면 선택적으로 Get-Process -Name cscript -ErrorAction SilentlyContinue | Stop-Process -Force