Phantom in the vault: Obsidian abused to deliver PhantomPulse RAT
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
Elastic Security Labs는 Obsidian 메모 작성 플랫폼과 그 커뮤니티 플러그인 생태계를 남용하여, Windows 및 macOS 시스템을 대상으로 하는 이전에 문서화되지 않은 RAT인 PhantomPulse를 전달하는 새로운 사회 공학 캠페인을 밝혀냈습니다. 이 작전은 금융 및 암호화폐 분야의 개인을 목표로 하는 것으로 보이며, 공격자들은 LinkedIn과 Telegram을 사용하여 초기 미끼로서 손상된 Obsidian 금고를 배포합니다. Windows에서는 감염 경로가 PowerShell, PhantomPull로 알려진 메모리에 상주한 로더, 반사 로딩 기술에 의존합니다. macOS에서는 공격자들이 AppleScript와 Telegram 기반의 덤프 커맨드 및 컨트롤 메커니즘을 사용합니다. 이 캠페인은 또한 Ethereum 거래 데이터를 통한 블록체인 기반 C2 탐색을 통합합니다.
조사
연구원들은 Shell Commands와 Hider 플러그인을 사용하여 악성 실행을 유발하는 무기화된 Obsidian 금고를 구축함으로써 공격을 재현했습니다. 분석 중, 그들은 syncobs.exe 라는 로더를 다운로드하는 PowerShell 스크립트를 관찰했습니다. 195.3.222.251에서 암호화된 페이로드를 검색한 후 메모리에 반사적으로 로딩했습니다. 로더는 뮤텍스를 생성하고, panel.fefea22134.net에 호스팅된 제어 패널과 통신하며 블록체인 데이터에서 유도된 백업 인프라를 지원했습니다. macOS에서는 악성코드가 LaunchAgent plist를 통해 지속성을 확립하고, 하드 코딩된 도메인과 Telegram 채널에서 2차 AppleScript 페이로드를 다운로드했습니다. 조사팀은 두 감염 경로와 관련된 JSON 구성 파일과 메모리 내 리소스에서 주요 아티팩트를 회복했습니다.
완화 조치
조직은 비인가된 자식 프로세스 생성으로부터 Obsidian을 방지하고, 커뮤니티 플러그인 사용에 대한 엄격한 통제를 적용하며, Obsidian이 부모 프로세스로 나타나는 PowerShell 활동을 모니터링해야 합니다. 네트워크 방어는 195.3.222.251 로의 아웃바운드 트래픽을 차단해야 하며, 캠페인 관련 panel.fefea22134.net, 0x666.info와 알려진 Telegram 덤프 위치의 도메인도 차단해야 합니다. 보안 팀은 또한 반사 로딩, 타이머 큐 콜백 남용, 멀웨어 로더가 사용하는 특정 뮤텍스 값을 탐지해야 합니다.
대응
Obsidian에서 의심스러운 자식 프로세스가 감지되면, 감염된 호스트를 즉시 격리하고 초점을 맞춰서 포렌식 검토를 위해 .obsidian 디렉토리를 수집해야 합니다. 뮤텍스 hVNBUORXNiFLhYYh를 찾은 후 PHANTOMPULL 로더와 PHANTOMPULSE RAT 바이너리의 흔적을 찾기 위해 엔드포인트를 검색해야 합니다. 식별된 명령 및 제어 인프라를 차단하고 손상된 모든 Obsidian 관련 자격을 취소하며, 금융 및 암호화폐 계정과 관련한 자격 도난 노출에 대해 광범위한 검토를 수행해야 합니다.
graph TB %% Class definitions classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccffcc %% Technique nodes tech_valid_accounts[“<b>기법</b> – <b>T1078 유효 계정</b><br/><b>설명</b>: 공격자가 탈취된 자격 증명으로 계정 접근<br/><b>세부</b>: Obsidian 자격 증명 제공”] class tech_valid_accounts technique tech_user_execution[“<b>기법</b> – <b>T1204 사용자 실행</b><br/><b>설명</b>: 사용자가 악성 코드 실행 유도됨<br/><b>세부</b>: 공유 vault 및 플러그인 동기화”] class tech_user_execution technique tech_powershell_initial[“<b>기법</b> – <b>T1059.001 PowerShell</b><br/><b>설명</b>: PowerShell로 명령 실행<br/><b>세부</b>: Base64로 script1.ps1 다운로드”] class tech_powershell_initial technique tech_bits_transfer[“<b>기법</b> – <b>T1105 도구 전송</b><br/><b>설명</b>: 도구/페이로드 전송<br/><b>세부</b>: syncobs.exe 다운로드”] class tech_bits_transfer technique tech_reflective_loading[“<b>기법</b> – <b>T1620 리플렉티브 로딩</b><br/><b>설명</b>: 디스크 없이 메모리에 로드<br/><b>세부</b>: AES-256-CBC 페이로드 복호화”] class tech_reflective_loading technique tech_process_injection[“<b>기법</b> – <b>T1055.002 PE 인젝션</b><br/><b>설명</b>: 프로세스 코드 주입<br/><b>세부</b>: reflective PE injection”] class tech_process_injection technique tech_dynamic_resolution[“<b>기법</b> – <b>T1568 동적 해석</b><br/><b>설명</b>: 실행 중 C2 해석<br/><b>세부</b>: 블록체인 기반 URL 해석”] class tech_dynamic_resolution technique tech_powershell_c2[“<b>기법</b> – <b>T1059.001 PowerShell</b><br/><b>설명</b>: C2 통신 및 beacon”] class tech_powershell_c2 technique tech_applescript[“<b>기법</b> – <b>T1059.007 AppleScript</b><br/><b>설명</b>: macOS에서 악성 코드 실행<br/><b>세부</b>: osascript 실행”] class tech_applescript technique tech_launch_agent[“<b>기법</b> – <b>T1543.001 Launch Agent</b><br/><b>설명</b>: LaunchAgent 지속성<br/><b>세부</b>: plist 설치”] class tech_launch_agent technique tech_dead_drop_resolver[“<b>기법</b> – <b>T1102.001 데드드롭 리졸버</b><br/><b>설명</b>: 웹 서비스 C2 해석<br/><b>세부</b>: Telegram 백업 C2”] class tech_dead_drop_resolver technique %% Tool / Malware nodes tool_syncobs_exe[“<b>도구</b> – <b>이름</b>: syncobs.exe<br/><b>설명</b>: 2단계 바이너리”] class tool_syncobs_exe tool malware_phantompull[“<b>멀웨어</b> – <b>이름</b>: PHANTOMPULL<br/><b>설명</b>: AES-256-CBC payload 로더”] class malware_phantompull malware %% Flow connections tech_valid_accounts –>|leads_to| tech_user_execution tech_user_execution –>|leads_to| tech_powershell_initial tech_powershell_initial –>|executes| tech_bits_transfer tech_bits_transfer –>|downloads| tool_syncobs_exe tool_syncobs_exe –>|enables| tech_reflective_loading tech_reflective_loading –>|loads| malware_phantompull malware_phantompull –>|facilitates| tech_process_injection tech_process_injection –>|injects| tool_syncobs_exe tech_process_injection –>|enables| tech_dynamic_resolution tech_dynamic_resolution –>|resolves| tech_powershell_c2 tech_dynamic_resolution –>|resolves| tech_applescript tech_powershell_c2 –>|beacons| tech_dead_drop_resolver tech_applescript –>|creates| tech_launch_agent tech_launch_agent –>|persists| tech_dead_drop_resolver
공격 흐름
탐지
Powershell을 통한 다운로드나 업로드 (cmdline)
보기
의심스러운 Powershell 문자열 (cmdline)
보기
Invoke-RestMethod의 의심스러운 사용 (powershell)
보기
의심스러운 Powershell 문자열 (powershell)
보기
Bits Transfer 활동 가능성 (powershell)
보기
의심스러운 Trycloudflare 도메인 통신 (프록시)
보기
의심스러운 파일 다운로드 직접 IP (프록시)
보기
의심스러운 Trycloudflare 도메인 통신 (dns)
보기
Obsidian 코드 실행 및 지속성에 남용됨 [Windows 프로세스 생성]
보기
Obsidian을 부모 프로세스로 한 의심스러운 PowerShell 실행 [Windows PowerShell]
보기
시뮬레이션 실행
사전 조건: 텔레메트리 및 기준 비행 전 점검이 통과해야 합니다.
합리적 근거: 이 섹션은 탐지 규칙을 유발하도록 설계된 적대적 기술(TTP)의 정확한 실행을 상세히 설명합니다. 명령과 내러티브는 식별된 TTP를 직접 반영하고 탐지 로직에서 예상되는 정확한 텔레메트리를 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련 없는 예시는 오진을 초래합니다.
-
공격 내러티브 및 명령:
- 초기 손상: 공격자는 악성 Obsidian 플러그인 (
evil-plugin.js)을 사용자의 Obsidian 플러그인 디렉토리에 드롭합니다. - 실행 트리거: Obsidian이 시작되면 플러그인은
notepad.exevia를 실행하는 PowerShell 원라이너를 실행합니다. 이는 규칙이 모니터링하는 정확한프로세스 체인을 생성합니다.프로세스 체인을 생성합니다.지속성: - Persistence: 플러그인은 Obsidian이 실행될 때마다 자동으로로드되도록 설정되어 악의적인 자식 프로세스가 재발합니다.
- 회피: 플러그인은 또한
rundll32.exe(T1216.002)를 잠시 호출하여 무해한 DLL을 로드하고 진정한 의도를 숨기면서 탐지 트리거 체인을 유지합니다.
- 초기 손상: 공격자는 악성 Obsidian 플러그인 (
-
회귀 테스트 스크립트:
# ------------------------------------------------- # 악성 Obsidian 플러그인 시뮬레이션 (PowerShell) # ------------------------------------------------- # 1. Obsidian이 예상 경로에 설치되어 있는지 확인합니다 $obsidianPath = "C:Program FilesObsidianObsidian.exe" if (-Not (Test-Path $obsidianPath)) { Write-Error "Obsidian not found at $obsidianPath" exit 1 } # 2. Obsidian을 *부모*로 하여 실행하고 즉시 Notepad를 시작합니다 $startInfo = New-Object System.Diagnostics.ProcessStartInfo $startInfo.FileName = $obsidianPath $startInfo.Arguments = "-c `"Start-Process notepad.exe`"" $startInfo.UseShellExecute = $false $startInfo.CreateNoWindow = $true $proc = [System.Diagnostics.Process]::Start($startInfo) # 3. 선택 사항: T1216.002를 시뮬레이션하기 위해 서명된 바이너리(rundll32)를 호출합니다 Start-Process -FilePath "C:WindowsSystem32rundll32.exe" -ArgumentList "shell32.dll,Control_RunDLL" -WindowStyle Hidden # 4. 로그를 출력할 수 있도록 스크립트를 잠시 활성 상태로 유지 Start-Sleep -Seconds 5 # ------------------------------------------------- -
정리 명령:
# 테스트에서 생성된 스테이 오브시디언이나 메모장 프로세스 종료 Get-Process -Name "Obsidian","notepad","rundll32" -ErrorAction SilentlyContinue | Stop-Process -Force # 시뮬레이션 악성 플러그인 파일 제거 (존재하는 경우) $pluginPath = "$env:APPDATAObsidianpluginsevil-plugin.js" if (Test-Path $pluginPath) { Remove-Item $pluginPath -Force } Write-Host "정리 완료."