SOC Prime Bias: 중간

27 Apr 2026 15:06 UTC

Vidar 2026 내부 탐색: 감염에서 메모리 실행까지

Author Photo
SOC Prime Team linkedin icon 팔로우
Vidar 2026 내부 탐색: 감염에서 메모리 실행까지
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

이 보고서는 Vidar가 어떻게 다단계 파일리스 공격 프레임워크로 진화했는지를 조사하며, 이는 Go 기반 로더, VBS, PowerShell 및 원격 IP 주소에 호스팅된 JPEG 및 TXT 파일 내에 숨겨진 악성 콘텐츠를 검색하기 위해 살아있는 바이너리와 결합됩니다. 내장된 페이로드는 추출, 디코딩되어 메모리에서 직접 실행됩니다. RegAsm.exe을 사용하여 디스크 기반 탐지를 피합니다. 초기 접근은 가짜 GitHub 저장소, 침해된 WordPress 사이트 및 가짜 CAPTCHA 페이지와 같은 소셜 엔지니어링 수법을 통해 전달됩니다. 이 캠페인은 명령 및 제어와 데이터 탈취를 위해 Telegram 및 Cloudflare 프런트된 도메인에도 의존합니다.

조사

Point Wild 연구진은 처음의 Go로 컴파일된 드로퍼부터 최종 Vidar 페이로드까지의 전체 감염 체인을 추적하고 각 단계의 난독화 레이어를 문서화했습니다. 그들의 분석은 실행을 숨기기 위해 사용자 정의된 Base64 마커, 역방향 문자열 및 반사.NET 어셈블리 로딩의 사용을 강조했습니다. 또한 연구팀은 WScript, PowerShell 및 RegAsm.exe 가 실행 프록시로 오용되어, 악성 DLL을 완전히 메모리 내에서 디코딩하고 시작할 수 있게 한다고 설명했습니다. 네트워크 트래픽은 하드코딩된 IP 주소에서 설정된 JPEG 및 TXT 페이로드의 HTTP 기반 검색을 추가로 확인했습니다.

완화

방어자는 의심스러운 RegAsm.exeVBS 및 PowerShell 감염 체인의 초기 단계를 탐지하는 데 집중해야 하며, 악성 IP에서 JPEG 또는 TXT 파일을 검색하고 인식 가능한 Base64 마커 패턴을 사용하는 것을 포함해야 합니다. 알려진 악성 도메인 및 IP 주소 차단, Telegram으로의 아웃바운드 트래픽 모니터링, 일반 LOLBin 유틸리티에 대한 실행 제어 적용은 노출을 줄이는 데 도움이 됩니다. 파일리스 실행 및 메모리 로딩 기법에 조정된 행동 기반 탐지가 강력히 권장됩니다.

대응

Vidar 감염 체인에 묶인 지표가 확인되면, 영향을 받은 호스트를 즉시 격리하고 WScript, PowerShell 및 RegAsm.exe와 같은 의심스러운 프로세스를 종료하며 포렌식 검토를 위해 메모리 이미지를 수집하십시오. 식별된 IP 주소 및 관련 도메인은 차단하고 지속성을 위한 시작 단축키 또는 예약된 작업은 제거해야 합니다. 보안 팀은 노출된 브라우저 데이터, 확장 프로그램 및 암호화폐 지갑에 집중한 전체 자격 증명 검토를 수행해야 합니다.

"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef builtin fill:#cccccc %% Nodes initial_access["<b>Action</b> – <b>T1204 User Execution</b><br/>피해자는 가짜 GitHub 저장소, 가짜 CAPTCHA/ClickFix 페이지, 침해된 WordPress 사이트 및 게임 치트 배포 채널에서 악성 파일을 실행합니다.<br/><b>서브기술</b>: T1204.001 악성 링크, T1204.002 악성 파일, T1204.004 악성 복사 및 붙여넣기"] class initial_access action execution["<b>Action</b> – <b>T1216 System Script Proxy Execution</b><br/>WScript 및 PowerShell을 사용하여 스크립트를 실행"] class execution action appdomain_hijack["<b>Action</b> – <b>T1574.014 Hijack Execution Flow: AppDomainManager</b><br/>.NET 어셈블리를 로드하기 위해 RegAsm.exe를 서명된 바이너리 프록시로 호출"] class appdomain_hijack action defense_obfusc["<b>Action</b> – <b>T1027 Obfuscated Files or Information</b><br/>다형성 코드, 전달 후 컴파일, HTML 밀수, 내장/스트립 페이로드, 역방향 문자열 및 사용자 정의 Base64 마커"] class defense_obfusc action reflective_loading["<b>Action</b> – <b>T1620 Reflective Code Loading</b><br/>.NET 페이로드를 메모리에 전적으로 로드"] class reflective_loading action process_injection["<b>Action</b> – <b>T1055 Process Injection</b><br/>합법적인 프로세스에 반사 페이로드를 주입"] class process_injection action persistence["<b>Action</b> – <b>T1176 Software Extensions</b><br/>사용자 레벨의 지속성을 위해 시작 폴더에 .bat 파일 복사"] class persistence action discovery["<b>Action</b> – <b>T1518 Software Discovery</b> 및 <b>T1217 Browser Information Discovery</b><br/>암호화폐 지갑 및 비밀번호 관리자에 대한 설치된 소프트웨어 및 200개 이상의 브라우저 확장 프로그램을 열거"] class discovery action c2["<b>Action</b> – <b>T1071.001 Web Protocols</b>, <b>T1090.004 Domain Fronting</b>, <b>T1102.002 Bidirectional Web Service</b>, <b>T1071.004 DNS</b><br/>직접-IP HTTP 서버, Cloudflare-fronted 도메인 및 명령 및 제어를 위한 Telegram 인프라 사용"] class c2 action masquerade["<b>Action</b> – <b>T1036 Masquerading</b><br/>악성 파일이 합법적인 JPEG 이미지 및 TXT 텍스트 캐리어로 가장됨"] class masquerade action exfiltration["<b>Action</b> – <b>T1041 Exfiltration Over Command and Control Channel</b><br/>수집된 데이터는 Telegram 웹 페이지와 Cloudflare 프록시 도메인을 통해 전송됨"] class exfiltration action %% Edges showing flow initial_access –>|leads to| execution execution –>|uses| appdomain_hijack appdomain_hijack –>|enables| defense_obfusc defense_obfusc –>|enables| reflective_loading reflective_loading –>|enables| process_injection process_injection –>|enables| persistence persistence –>|enables| discovery discovery –>|enables| c2 c2 –>|enables| masquerade masquerade –>|enables| exfiltration "

공격 흐름

시뮬레이션 실행

전제 조건: Telemetry & Baseline Pre-flight Check가 통과해야 합니다.

이유: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적 기법(TTP)의 정확한 실행을 상세히 설명합니다. 명령과 내러티브는 식별된 TTP를 직접 반영하고 탐지 논리에서 기대하는 정확한 텔레메트리를 생성하는 것을 목표로 해야 합니다.

  • 공격 내러티브 & 명령:

    1. 초기 드로퍼 (WScript): 공격자는 악성 JScript 파일 (payload.js)을 전달하여 WScript.exe을 통해 실행합니다. 이 스크립트는 C2 서버에서 base64로 인코딩된 PowerShell 페이로드를 다운로드하고 %TEMP%.
    2. PowerShell 스테이지: 다운로드한 페이로드는 -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden로 실행되며, 악성 .NET 어셈블리 (evil.dll)의 반사 DLL 로딩 (T1620)을 실행하여 메모리에 로드하고, 어셈블리를 디스크에 드롭합니다.
    3. RegAsm 프록시: 네이티브 PowerShell 탐지를 피하기 위해 공격자는 RegAsm.exe 를 호출하여 evil.dll 에 포인팅하고 /codebase 스위치를 사용하여 .NET 로더가 악성 엔트리 포인트를 실행하게 합니다 (T1574.014).

    체인은 규칙의 Image|endswith 선택과 일치하는 세 개의 고유한 Sysmon 이벤트를 생성하여 경보를 트리거합니다.

  • 회귀 테스트 스크립트: 아래 스크립트는 안전하고, 샌드박스된 방법으로 위에 설명된 체인을 재현하며, 안전한 에코 명령과 더미 DLL(단순 텍스트 파일)을 사용하여 실제 악성 활동을 피하면서 동일한 프로세스 생성 이벤트를 여전히 생성합니다.

    <#  
    Vidar 스타일의 다단계 실행 시뮬레이션  
    - 스테이지 1: WScript가 %TEMP%에 PowerShell 스크립트를 작성하는 JScript를 실행  
    - 스테이지 2: PowerShell이 스크립트를 실행, 더미 DLL을 생성하고 RegAsm 시작  
    #>
    
    # ---------- 스테이지 1: WScript ----------
    $jsPath = "$env:TEMPstage1.js"
    $psPayloadPath = "$env:TEMPstage2.ps1"
    $dummyDllPath = "$env:TEMPevil.dll"
    
    # PowerShell 페이로드를 디스크에 작성하는 간단한 JScript
    $jsContent = @"
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var ts = fso.OpenTextFile("$psPayloadPath", 2, true);
    ts.WriteLine('Write-Host "[Stage 2] PowerShell executed"');
    ts.WriteLine('Set-Content -Path "$dummyDllPath" -Value "This is a dummy DLL"');
    ts.WriteLine('Start-Process -FilePath "$env:SystemRootMicrosoft.NETFramework64v4.0.30319RegAsm.exe" -ArgumentList "`"$dummyDllPath`" /codebase" -NoNewWindow');
    ts.Close();
    "@
    
    Set-Content -Path $jsPath -Value $jsContent -Encoding ASCII
    
    # JScript를 WScript를 통해 실행
    Write-Host "`n[Stage 1] Launching WScript..."
    & "$env:SystemRootSystem32WScript.exe" $jsPath
    
    # ---------- 스테이지 2: PowerShell ----------
    Write-Host "`n[Stage 2] Executing generated PowerShell payload..."
    & powershell.exe -NoProfile -ExecutionPolicy Bypass -File $psPayloadPath
    
    # ---------- 정리 ----------
    Write-Host "`nCleaning up temporary files..."
    Remove-Item -Path $jsPath, $psPayloadPath, $dummyDllPath -Force -ErrorAction SilentlyContinue
  • 정리 명령: 스크립트 끝의 정리에 추가하여, 다음 명령을 실행하여 남아있는 프로세스나 파일이 없도록 하십시오.

    # 테스트에서 생성된 남은 RegAsm 또는 PowerShell 인스턴스를 강제로 종료합니다
    Get-Process -Name regasm, powershell -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # 테스트 패턴과 일치하는 %TEMP%의 잔여 파일을 제거합니다
    Get-ChildItem -Path $env:TEMP -Filter "stage*.*" -File | Remove-Item -Force