Vidar 2.0 분석: Go 로더와 Oracle 인증서로 EDR을 우회하는 $300 인포스틸러
Go로 컴파일된 Vidar 2.0 로더 분석. Oracle 인증서 도용, NTDLL 언후킹, 21개 이벤트 로그 삭제로 EDR을 우회하는 $300 인포스틸러의 새로운 배포 기법
Go로 컴파일된 Vidar 2.0 로더 분석. Oracle 인증서 도용, NTDLL 언후킹, 21개 이벤트 로그 삭제로 EDR을 우회하는 $300 인포스틸러의 새로운 배포 기법
정정 안내 (2026-09-28) 초판은 분석 기록에 남은 배달 최적화(Windows 업데이트) 형식의 HTTP 요청 33건과 Oracle 도메인 연결을 샘플의 위장 통신으로 보고, 네트워크 IOC 표와 MITRE 매핑(T1036)에 올렸다. 앞의 요청은 Windows 업데이트의 정상 통신과 형식이 같고, 뒤의 도메인은 Oracle의 실제 Java 업데이트 서버다. 둘 다 샘플이 보낸 것으로 확인되지 않아 관련 서술을 고치고, IOC 표에서 IP 주소 1개와 도메인 1개를, 매핑 표에서 T1036을 뺐다. C2로 추정한 Hetzner 주소와 파일 해시는 그대로 둔다.
Vidar 2.0이 탐지를 피하는 새로운 방법 하나가 2026년 4월 12일 abuse.ch에 포착됐다. Go로 컴파일된 DLL 래퍼에 Oracle 인증서를 붙인 뒤, 안에 실제 Vidar C 페이로드를 숨겨 실행한다. VirusTotal에서 71개 엔진 중 35개만 탐지했고, Kaspersky는 이것을 "Vidar"가 아닌 "Backdoor.Win64.Ciso"로 분류했다.
2025년 10월 6일, 언더그라운드 포럼에서 "Loadbaks"라는 개발자가 Vidar Stealer v2.0 출시를 공지했다. 2018년 Arkei 포크에서 시작한 Vidar는 C++로 작성됐었는데, 2.0에서 순수 C로 전면 재작성됐다.
2025년 하반기 LummaC2가 운영자 신원 노출로 급격히 위축되자, Vidar는 $300 평생 라이선스라는 낮은 진입 장벽을 앞세워 공백을 메웠다. Malwarebytes는 2026년 3월, 해킹된 WordPress 사이트에서 "인간임을 인증하세요" 가짜 CAPTCHA 페이지를 통해 Vidar가 배포되는 캠페인을 추적했다. Acronis는 같은 시기 GitHub에서 수백 개의 게임 치트 가장 리포지토리가 Vidar를 유포하는 것을 관찰했다.
이 글이 분석하는 샘플은 2026년 4월 12일 abuse.ch가 MalwareBazaar에 최초 제출했다. 동일한 imphash(d8b31f8c03e0c76ff245ed05a15ffe6c)를 가진 샘플이 MalwareBazaar에 50개 존재하며, 모두 Vidar 패밀리로 분류된다.
| 항목 | 값 |
|---|---|
| 파일명 | a165...ca0.dll |
| 파일 타입 | PE32+ executable (DLL) (GUI) x86-64 |
| 크기 | 3,091,648 bytes |
| SHA-256 | a165...ca0 (전체 해시는 IOC 섹션 참조) |
| MD5 | edb270b2e2589a2b6a2e3ed3bd6220c8 |
| imphash | d8b31f8c03e0c76ff245ed05a15ffe6c (Vidar 패밀리 50건 공유) |
| 탐지 점수 | 6.0/10 (종합) / 35/71 (VT) |
| 최초 제출 | 2026-04-12 07:01 UTC (abuse.ch) |
| 분석 환경 | win10x64 |
컴파일러/링커 (DIE):
겉으로는 Go 1.25.3으로 컴파일된 DLL이지만, 실제 Vidar 페이로드는 안에 MSVC(Microsoft Visual C/C++ 19.29.30151) 컴파일 PE로 존재한다. Go 바이너리는 로더 역할만 수행한다.
코드 서명 (무효):
www-cs-02.oracle.comOracle의 웹 서버 인증서를 도용해 PE에 서명했다. 코드 서명 인증서 자체가 아니라 TLS 인증서를 악용한 것으로, 서명 자체는 유효하지 않다. 그러나 일부 엔드포인트 보안 제품의 서명 여부 휴리스틱을 우회하는 데 충분하다.
PE 섹션:
| 섹션 | 가상 크기 | 엔트로피 |
|---|---|---|
.text | 0x000c73c0 | 6.22 |
.rdata | 0x001bd780 | 6.00 |
.tls | 0x00000010 | 0.00 |
TLS 섹션(.tls) 존재는 스레드 로컬 스토리지를 활용한 안티디버그 기법과 연관된다.
메모리 언팩 페이로드:
런타임 메모리에서 추출된 페이로드 2개:
| 페이로드 (SHA-256 앞 16자) | 크기 | 로드 주소 |
|---|---|---|
4c32b08d2648b703 | 836,096B | 0x140000000 |
0f47bf14acc915f0 | 969,728B | 0x140000000 |
두 페이로드 모두 rundll32.exe를 통해 동일한 가상 주소에 로드된다.
두 페이로드 모두 동일한 가상 주소(0x140000000)에 로드된다. 이는 리플렉티브 PE 로딩 패턴이다. MSVC로 컴파일된 이 페이로드가 실제 Vidar 2.0 스틸러로, Chromium 기반 브라우저와 Telegram의 데이터를 탈취한다.
| IP | 포트 | 역할 |
|---|---|---|
37.27.45.38 (Hetzner 핀란드, AS24940) | 443 | C2 (HTTPS) |
C2로 추정되는 37.27.45.38은 Hetzner 핀란드 서버(AS24940)다. VT 탐지율 1/94로 현재까지 거의 알려지지 않은 신규 인프라다.
분석 기록에는 이 밖에도 외부 연결 세 곳이 남았다. 초판은 이 가운데 둘을 샘플의 위장 통신으로 적었지만, 셋 모두 샘플이 보낸 것으로 확인되지 않은 분석 환경 기록이다. 네트워크 기록은 분석용 가상머신 전체의 통신을 담는다. 같은 분석 환경에서 계열이 다른 샘플을 돌린 기록에도 같은 주소들이 되풀이해 나타났다.
첫째는 IP 주소 하나의 80번 포트로 간 HTTP 요청 33건이다. 모두 User-Agent Microsoft-Delivery-Optimization/10.0을 달았다. URL에는 cacheHostOrigin=dl.delivery.mp.microsoft.com 파라미터가 붙어 있었다. 이 형식은 Windows 업데이트가 쓰는 배달 최적화(Delivery Optimization)의 정상 통신과 같다. Microsoft는 배달 최적화가 Microsoft 서버 말고도 같은 네트워크의 다른 기기나 전용 캐시 서버(Microsoft Connected Cache)에서 업데이트 파일을 받는다고 설명한다. Connected Cache 점검 문서가 정상 동작 확인용으로 제시하는 주소도 http://[캐시 노드 IP]/filestreamingservice/files/…?cacheHostOrigin=dl.delivery.mp.microsoft.com 형태로, IP 주소에 직접 요청한다.
요청을 받은 주소는 ARIN 등록 정보상 IP 임대 업체 IPXO의 대역이다. Microsoft Q&A에도 Microsoft 소유가 아닌 IP 주소로 같은 형식의 요청이 수백 건 나갔다는 문의가 올라왔다. 채택된 답변은 그 주소를 피어나 ISP가 운영하는 캐시 노드로 보고 정상 배달 최적화 트래픽이라고 판단했다.
둘째는 javadl-esd-secure.oracle.com(443번 포트) 연결이다. 이 도메인은 Oracle의 실제 Java 업데이트 서버다. Java 런타임은 업데이트를 받거나 보안 차단 목록(blacklist)을 갱신할 때 기본값으로 이 서버에 접속한다. 이름은 Akamai CDN으로 연결되고, 기록된 IP 주소도 ARIN 등록 정보상 Akamai 대역이다. 2026년 9월 28일 조회에서도 이 도메인은 같은 주소로 풀렸다. 샘플에 Oracle 웹 서버 인증서가 붙어 있다는 점(정적 분석 절)과 이 연결 사이에 확인된 관계는 없다.
셋째는 Google 인증서 폐기 목록(CRL) 도메인 c.pki.goog 조회다. 기록에는 있으나 조회한 주체는 확인되지 않았다.
EDR 제품은 보통 ntdll.dll의 시스템콜 진입점을 후킹해 악성 행위를 감지한다. 이 샘플은 ntdll.dll의 메모리 보호를 PAGE_READWRITE로 변경한 뒤, 디스크의 원본 ntdll.dll로 덮어쓴다.
행위 시그니처:
ntdll_memory_unhooking— ntdll.dll 메모리 보호를 PAGE_READWRITE로 변경. EDR 언후킹 패턴으로 분류.
이후 모든 시스템콜은 후킹이 제거된 ntdll을 통해 실행되므로, EDR의 행위 감시망을 벗어난다.
Unbacked 메모리에서 실행되는 스레드가 추가로 확인됐다. 디스크 파일에 대응하지 않는 동적 할당 메모리에서 코드가 실행되는 패턴으로, 언팩된 Vidar 페이로드의 실행을 숨긴다.
wevtutil cl 명령으로 21개 Windows 이벤트 로그를 삭제한다.
Microsoft-Windows-Windows Defender/OperationalMicrosoft-Windows-PowerShell/OperationalMicrosoft-Windows-TaskScheduler/OperationalMicrosoft-Windows-AppLocker/EXE and DLLMicrosoft-Windows-CodeIntegrity/OperationalMicrosoft-Windows-WMI-Activity/OperationalSecuritySystemApplicationDefender 로그, PowerShell 실행 로그, AppLocker 로그를 포함해 포렌식 흔적을 대량으로 지운다. 이벤트 로그 삭제 자체는 Windows 보안 이벤트(EventID 1102, 1100)에 기록되지만, 공격자는 이 로그도 대상에 포함시켰다.
지오펜싱: 레지스트리 언어 키를 확인해 특정 지역(CIS 국가 추정)의 시스템에서는 실행을 중단한다.
가용 메모리 확인: 시스템 가용 메모리를 확인해 가상환경 여부를 판단한다. Vidar 2.0은 2GB 이상의 RAM을 요구한다.
토큰 조작: Unbacked 메모리에서 액세스 토큰을 열람, 복제, 또는 가장(impersonation)을 시도한다. 권한 상승을 위한 사전 정찰로 보인다.
SHA-256: a165117575496e39d26d381f77ffa3c543073734d8bddd945630746835103ca0
MD5: edb270b2e2589a2b6a2e3ed3bd6220c8
imphash: d8b31f8c03e0c76ff245ed05a15ffe6c (Vidar 패밀리 50건 공유)
# 언팩 페이로드 (Vidar 실체)
SHA-256: 4c32b08d2648b703b44281e56a04f6b90f74bde7d1a526332b3aa6945e75244c
SHA-256: 0f47bf14acc915f0755157e8fa4c67231e43d03d8c2cc4fc1f256fbc02d36126
| 타입 | 값 | 맥락 |
|---|---|---|
| IP | 37.27.45.38 | C2 (Hetzner, 핀란드, AS24940) |
초판은 이 표에 배달 최적화 형식 요청을 받은 IP 주소와 javadl-esd-secure.oracle.com을 위장 통신으로 올렸다. 앞 절에서 본 것처럼 둘 다 샘플이 보낸 것으로 확인되지 않은 분석 환경 기록이고, 뒤의 도메인은 Oracle의 실제 Java 업데이트 서버라 표에서 뺐다.
| 기법 ID | 설명 | 구현 방식 |
|---|---|---|
| T1027.002 | 소프트웨어 패킹 | Go 외피가 MSVC Vidar를 메모리에서 언팩 |
| T1055 | 프로세스 인젝션 | rundll32.exe에 Vidar 페이로드 인젝션 |
| T1129 | 공유 모듈 실행 | Unbacked 메모리에서 API 수동 해석 |
| T1070.001 | 이벤트 로그 삭제 | wevtutil cl로 21개 로그 삭제 |
| T1082 | 시스템 정보 수집 | 가용 메모리·언어·권한 정찰 |
| T1497 | 가상화 회피 | RAM 2GB 이상·언어 체크 |
| T1539 | 세션 쿠키 탈취 | Chromium 브라우저 쿠키·자격증명 |
| T1071.001 | 애플리케이션 레이어 프로토콜 | HTTPS C2 (37.27.45.38:443) |
| T1553.002 | 코드 서명 | Oracle TLS 인증서 도용 |
초판은 이 표에 T1036(위장)을 넣고 배달 최적화 User-Agent와 Oracle 도메인을 근거로 들었다. 두 근거 모두 샘플 행위로 확인되지 않아 행을 뺐다.
title: Vidar Go 로더 — NTDLL 언후킹 + 이벤트 로그 대량 삭제
status: experimental
description: Go 컴파일 Vidar 로더의 EDR 우회 + 증거 은폐 패턴 탐지
date: 2026-04-12
logsource:
product: windows
category: process_creation
detection:
wevtutil_bulk:
CommandLine|contains: 'wevtutil'
CommandLine|contains: ' cl '
CommandLine|contains|any:
- 'Defender'
- 'PowerShell'
- 'AppLocker'
- 'CodeIntegrity'
rundll32_unsigned:
Image|endswith: '\rundll32.exe'
ParentImage|endswith: '\rundll32.exe'
condition: wevtutil_bulk or rundll32_unsigned
level: high
falsepositives:
- 시스템 관리 도구 (wevtutil은 드물게 정상 사용)
<Sysmon schemaversion="4.90">
<EventFiltering>
<RuleGroup groupRelation="or">
<NetworkConnect onmatch="include">
<DestinationIp condition="is">37.27.45.38</DestinationIp>
</NetworkConnect>
<ProcessCreate onmatch="include">
<CommandLine condition="contains">wevtutil</CommandLine>
<CommandLine condition="contains"> cl </CommandLine>
</ProcessCreate>
</RuleGroup>
</EventFiltering>
</Sysmon>
이 샘플의 핵심은 탐지 우회 레이어의 중첩이다. Go 외피가 AV 패턴 탐지를 피하고, Oracle 인증서가 서명 기반 신뢰 검사를 흐리며, NTDLL 언후킹이 EDR 행위 감시를 무력화한다. 그 안에서 MSVC Vidar 2.0이 조용히 브라우저 데이터와 암호화폐 지갑을 수집한다.
imphash 기준으로 MalwareBazaar에 동일 패밀리 샘플이 50건 존재한다. 이 Go 래퍼 배포 방식이 이미 Vidar 운영자들 사이에서 표준화됐을 가능성을 시사한다.
방어 우선순위:
Vidar가 한국에서 어떻게 퍼지는지는 ACRStealer 분석에서 유사 사례를 확인할 수 있다. T1055 프로세스 인젝션을 참조한다.
이 샘플의 동작 가운데 공개 탐지 룰이 가장 촘촘하게 걸리는 것은 로그 삭제다. 윈도우는 로그를 비우는 동작 자체를 따로 기록한다. Security 로그가 비워지면 보안 이벤트 1102(감사 로그 삭제)가 남고, 다른 채널이 비워지면 System 로그에 이벤트 104가 남는다. SigmaHQ는 1102를 「Security Eventlog Cleared」 룰로 잡고, 104는 지워진 채널에 따라 두 룰로 나눠 공개했다. PowerShell/Operational·System 같은 핵심 채널은 「Important Windows Eventlog Cleared」(high)가, Defender·AppLocker·CodeIntegrity 같은 나머지 채널은 「Eventlog Cleared」(medium)가 맡는다. 이 샘플의 삭제 목록에는 두 부류가 모두 들어 있다.
다만 이 샘플은 System 로그까지 지운다. System이 목록 뒤쪽에서 비워지면 그 전에 쌓인 104 기록도 함께 사라지고, 이 경우 삭제 순서 전체는 삭제 전에 수집 서버로 전송된 사본에서만 보인다. 실행 단계에서는 wevtutil.exe 프로세스 생성 자체가 데이터 소스다. SigmaHQ의 stable 룰 「Suspicious Eventlog Clearing or Configuration Change Activity」는 wevtutil.exe에 cl이나 clear-log 인자가 붙은 프로세스 생성(Sysmon 이벤트 1 등)을 high 등급으로 잡는다. MITRE ATT&CK도 탐지 전략 DET0532(Detection of Event Log Clearing on Windows via Behavioral Chain)에서 같은 행위를 다룬다. 그 분석 AN1472는 보안 이벤트 1102, Sysmon 이벤트 1(프로세스 생성), Sysmon 이벤트 23(파일 삭제)을 한 흐름으로 묶어 본다. 본문 표의 T1070.001은 2026년 4월 ATT&CK v19에서 T1685.005(Clear Windows Event Logs)로 옮겨졌고, DET0532는 이 새 번호에 연결돼 있다.
네트워크 행위에는 이 샘플을 직접 겨냥한 공개 룰이 SigmaHQ에서 확인되지 않는다(2026년 9월 기준). 분석 기록의 배달 최적화 형식 요청은 Windows 업데이트의 정상 통신과 같은 형태라 그 자체로는 이상 신호가 아니다. 가장 가까운 공개 룰은 「Rundll32 Internet Connection」이다. 이 룰은 rundll32.exe가 사설 대역이 아닌 공인 IP로 연결을 시작할 때 Sysmon 이벤트 3(네트워크 연결)에서 잡는다. 본문 관측에서 페이로드는 rundll32.exe 안에서 돌고, C2 연결(443번 포트)은 공인 IP로 향한다. 다만 연결을 연 프로세스가 rundll32.exe였는지는 본문 관측에 적혀 있지 않아, 이 룰과의 대응은 추정이다.
탐지명에 기대는 방식은 이 샘플에서 한계가 드러난다. SigmaHQ의 「Antivirus - Remote Access Tools Signature」(critical)는 백신 경보의 탐지명에 Vidar가 들어 있으면 잡는다. Trend Micro도 Vidar 2.0 분석 글에서 탐지명에 VIDAR가 들어간 악성코드 탐지 이벤트를 찾는 자사 Vision One용 헌팅 쿼리를 공개했다. 그런데 도입부에서 본 것처럼 Kaspersky는 이 샘플을 Backdoor.Win64.Ciso로 분류했고, VirusTotal 71개 엔진 중 36개는 탐지하지 못했다. 이름에 Vidar가 붙지 않은 판정은 두 방식 어디에도 걸리지 않으므로, 이 변종에서는 앞의 로그 삭제 이벤트처럼 행위를 보는 데이터 소스가 더 직접적인 근거다.
분석 환경 안내 본 분석은 격리된 동적 분석 샌드박스(CAPEv2) 환경에서 수행된 단일 인스턴스 관측치를 기반으로 합니다. 다른 환경/시점에서는 행위가 달라질 수 있으며, 본문의 모든 행위 기술은 본 인스턴스에서 실제로 관측된 것에 한정됩니다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.