
Vidar Stealer 리버스 엔지니어링: 난독화된 메모리 문자열부터 Chrome 프로세스 인젝션, 악성 JS 실행, 그리고 Google 및 Reddit에서의 활성 세션 하이재킹까지.
Binary Ninja에 로드된 Vidar Stealer 샘플은 main.vxormo 함수 내에서 심하게 난독화된 코드를 보여줍니다. 분석 결과, 이 악성코드는 문자열 암호화, 사용자 정의 XOR 루틴, 런타임 메모리 어셈블리를 사용하여 실제 동작을 숨기고 있음이 드러납니다. 의사 C 뷰에서 \x00이 다수 포함된 바이트 배열(x00\x00\x00...)은 원시 페이로드 조각이 메모리에서 직접 구성되고 있음을 나타냅니다.
난독화된 함수: main.vxormo, main.oqvmwusz, main.dzgsnuhm과 같이 무작위로 생성된 이름이 기능을 숨기는 데 사용됩니다. 난독화된 문자열: whatnthotsfalse... 및 cornbindtrue...는 런타임에 해석되는 암호화된 문자열입니다. 사용자 정의 XOR 루틴: vxormo라는 함수 이름 자체가 사용자 정의 XOR 복호화 루프가 활성화되어 있음을 시사합니다. 인메모리 페이로드 구성: \x00, \x89, \x99, \x48 바이트를 포함하는 배열이 _builtin_memcpy를 사용하여 메모리에 기록됩니다. uint8_t)rax 포인터는 원시 셸코드/페이로드 조각이 어셈블되고 있음을 보여줍니다.
정적 분석 무력화: 무작위로 명명된 함수와 암호화된 문자열을 사용한다는 것은 정적 시그니처 기반 AV가 페이로드를 식별하지 못한다는 것을 의미합니다. 인메모리 실행(파일리스): \x00 페이로드는 디스크에 드롭되지 않고 메모리(RWX)에 직접 할당되어 실행되므로 파일 스캐너를 회피합니다. 사용자 정의 XOR 암호화: 사용자 정의 XOR 루틴은 단순한 문자열 추출이나 YARA 규칙 매칭을 방지합니다. 데이터 은닉: 방대하고 판독 불가능한 배열(\x00\x00\x00\x01...)은 필요할 때만 복호화되는 암호화된 구성 블록(C2 URL, 정보 탈취 모듈)일 가능성이 높습니다.

Binary Ninja에서 본 Vidar Stealer 샘플의 두 번째 뷰는 시스템 정찰 및 포렌식 방해 정리에 전념하는 함수(main.obttcklrlfwpzvugbzqtn)를 보여줍니다. 이 함수는 암호화된 문자열을 처리하고 API 이름을 해석하여 실행 흔적을 지우며, 특히 최종 페이로드를 드롭하기 전에 DNS 캐시, 이벤트 로그, 임시 인터넷 파일을 대상으로 합니다.
난독화된 API 해석: ...DiednsQuery_WGGetIfEntryCancelIoExCreatePipe... 문자열은 WinAPI 호출이 암호화되어 연결된 것입니다 식별된 정리 API: DnsQuery_W / DnsFlushResolverCache – C2 도메인 해석 흔적을 숨기기 위해 DNS 캐시를 플러시합니다. GetIfEntry – 네트워크 인터페이스를 열거합니다(샌드박스/가상 어댑터 확인). WinExec – 시스템 정리 유틸리티(예: cmd.exe /c del ...)를 동적으로 실행합니다. 시스템 호출/스크립트 실행: dllws2_32.dll 및 /dev/stdin(표준 입력 리디렉션)에 대한 참조는 악성코드가 시스템의 표준 스트림 또는 네트워크 스택과 상호작용할 준비를 하고 있음을 나타냅니다.
포렌식 방해: DNS 캐시를 플러시하고(DnsFlushResolverCache) 정리 루틴을 호출하면 네트워크 로그와 로컬 아티팩트가 파괴되어 사고 대응을 방해합니다. 샌드박스 회피: 네트워크 인터페이스를 쿼리하면(GetIfEntry) 스틸러가 가상화 환경(예: VMware, VirtualBox)을 탐지하고 샌드박스가 감지되면 실행을 중단할 수 있습니다 실행 흐름 위장: 정리에 WinExec를 사용한다는 것은 악성코드가 삭제 API를 정적으로 임포트할 필요가 없다는 뜻이며, 더러운 작업을 OS에 위임합니다. 파일리스 상호작용: /dev/stdin 리디렉션과 파이프 사용(CreatePipe)을 통해 스틸러는 디스크에 접촉하지 않고도 탈취한 데이터를 주입된 프로세스나 명령 셸로 전달할 수 있습니다.

chrome.exe 프로세스(PID 8944)의 Process Hacker 메모리 뷰는 Vidar Stealer가 페이로드를 브라우저의 메모리 공간에 직접 주입했음을 확인해 줍니다. 문자열 스캔은 다수의 스레드 실행 블록을 노출하는데, 이는 프로세스 할로잉 또는 원격 스레드 주입의 전형적인 흔적입니다. Chrome에 주입함으로써 스틸러는 신뢰받는 고무결성 프로세스 아래에서 동작하여 쿠키, 저장된 자격 증명, 세션 토큰을 조용히 수집합니다.
주입된 스레드 (메모리 문자열): THREAD_BROWSER_WATCHDOG / THREAD_GPU_WATCHDOG – 주입된 스레드를 계속 살아 있게 유지하기 위해 와치독이 탈취됨. THREAD_CACHE_BLOCKFILE – Chrome 캐시 조작을 나타냄 (세션 데이터 추출 목적으로 추정). THREAD_AUDIO_INPUTDEVICE / THREAD_GAMEPAD_POLLING – 악성 활동을 위장하기 위해 용도가 변경된 비필수 스레드. THREAD_WEBCRYPTO – 매우 의심스러움; Chrome의 내부 암호화 API가 저장된 비밀번호와 쿠키를 복호화하는 데 사용됨. THREAD_PROXYRESOLVER / THREAD_DATABASE – 네트워크 트래픽을 가로채고 로컬 자격 증명 데이터베이스에 접근하는 데 사용됨.
브라우저 자격 증명 탈취: THREAD_WEBCRYPTO와 THREAD_DATABASE를 후킹하면 Vidar가 Chrome의 암호화를 우회하여 저장된 비밀번호와 쿠키를 탈취할 수 있습니다. Living off the Land: chrome.exe에 주입함으로써 악성코드는 정상적인 브라우저 트래픽으로 위장하여 방화벽과 EDR 네트워크 규칙을 손쉽게 우회합니다. 프로세스 할로잉: 주입된 스레드와 함께 표준 Chrome 스레드가 존재한다는 것은 악성코드가 정상 스레드를 할로잉했거나 CreateRemoteThread를 사용했을 가능성을 의미합니다. 세션 하이재킹: THREAD_CACHE_BLOCKFILE과 쿠키 추출을 통해 공격자는 사용자의 비밀번호 없이도 활성 세션을 탈취(세션 하이재킹)할 수 있습니다. 회피: 안티바이러스 솔루션은 Chrome과 같은 서명된 브라우저의 메모리 공간 내부를 거의 검사하지 않습니다.

chrome.exe(PID 8944)의 주입된 메모리 공간을 더 깊이 살펴보면 Google 인증 흐름, Reddit 세션, 브라우저 JavaScript 실행을 특정적으로 겨냥한 문자열 모음이 드러납니다. 이러한 문자열의 존재는 Vidar Stealer가 악성 JavaScript를 주입하거나 브라우저 API를 후킹하여 로그인 자격 증명과 세션 토큰을 가로챈다는 것을 확인해 줍니다.
자격 증명 / 인증 대상: accounts.google.com – 자격 증명 탈취를 위해 Google 계정 로그인 페이지를 특정적으로 겨냥. https://www.reddit.com/notifications – Reddit 세션 활동 모니터링 (쿠키 탈취로 추정). Gelen Kutusu (터키어로 "받은 편지함") – 이메일 또는 메시징 인터페이스를 겨냥함을 나타냄. toDashCase / MemoryInfra / BackForwardCacheCSIgnoreUnc... – Chrome의 내부 메모리 및 렌더링 플래그 AutoFillEnableExpandIframeRegexPatt... – 저장된 비밀번호/양식을 캡처하기 위한 Chrome AutoFill 기능 조작 다수의 text/javascript: 항목은 Vidar가 브라우저 컨텍스트 내에서 직접 악성 JavaScript를 주입하고 실행함을 확인해 줌. ResourcePool / sfsssqcxxwqecaddbbbcqpvadzvwrze – 암호화된 C2 엔드포인트 또는 무작위로 생성된 세션 식별자로 추정.
표적화된 자격 증명 수집: accounts.google.com을 지정하는 것은 Vidar가 단순히 무작위로 스크래핑하는 것이 아니라, 고가치 인증 포털을 적극적으로 표적으로 삼고 있음을 보여줍니다. 브라우저 API 후킹: AutoFillEnableExpandIframeRegexPatt와 같은 문자열은 Vidar가 Chrome의 AutoFill 엔진을 조작하여 저장된 자격 증명과 양식 데이터를 가로챈다는 것을 증명합니다. JavaScript 주입: 메모리에 text/javascript가 다수 존재한다는 것은 Vidar가 브라우저 내부에서 스크립트를 실행하여 쿠키(document.cookie)를 읽고 HTTPOnly 보호를 우회한다는 것을 의미합니다. Mojo IPC 악용: interfaceMessageHeader는 이 스틸러가 Chrome의 내부 IPC(Mojo)와 통신하여 브라우저의 샌드박스 처리된 프로세스에서 직접 데이터를 추출하고 있음을 나타냅니다. 세션 하이재킹: Reddit 알림과 받은편지함을 표적으로 삼는 것은 목표가 단순한 정적 비밀번호 덤프가 아니라 활성 세션 하이재킹(쿠키 탈취)임을 확인시켜 줍니다.

chrome.exe(PID 8944) 메모리 공간을 마지막으로 살펴보면, C2 서버가 아니라 분석 방해 및 샌드박스 회피에 사용되는 미끼 도메인의 방대한 목록이 드러납니다. ddt-smart.net, deepL.com, dropbox.com 및 다수의 기타 문자열이 주입된 페이로드에 하드코딩되어 있습니다. 이는 보안 분석가와 자동화된 샌드박스를 압도하기 위해 설계된 전형적인 도메인 플러딩 기법입니다.
미끼 도메인 목록(일부): 정상:deepL.com, dropbox.com, deviantart.com, discord.com, ebay.com. 가짜 / 무작위: ddt-smart.net, destacamos.com, dfk.com, donga.com, dzgsnuhm.com. 지역 특화: dokomo.ne.jp, doujin.desu.tv, e-hantal.org(중동 / 아시아 표적). 직접적인 C2 지표 없음: 이 도메인 중 어느 것도 알려진 Vidar C2 인프라와 일치하지 않으며, 샌드박스/AV의 시간을 낭비시키기 위해 전달된 것으로 보입니다.
도메인 플러딩(분석 방해): Vidar는 수십 개의 무작위 및 정상 도메인을 메모리에 주입하여 자동화된 샌드박스(예: Any.run 또는 Cuckoo)에 쓸모없는 네트워크 요청을 범람시킵니다. 보안 분석가는 무해한 트래픽을 분석하느라 시간을 낭비합니다. 오탐: 분석가가 메모리에서 도메인 목록을 추출하면 정상 사이트(예: dropbox.com 또는 deepL.com)를 C2로 잘못 표시하여 부정확한 IOC와 깨진 규칙을 초래할 수 있습니다. 샌드박스 타임아웃: 이러한 미끼에 대한 지속적인 DNS 쿼리와 HTTP 요청은 샌드박스 리소스와 시간 제한을 소모하여, 실제 C2 연결이 빠져나가거나 샌드박스가 중지된 후에 실행될 수 있게 합니다. TLD 다양성: 도메인은 .com, .net, .jp, .tv, .org, .de에 걸쳐 있어 패턴 기반 차단 규칙을 비효율적으로 만듭니다.

Vidar Stealer 샘플 분석은 이것이 고도로 정교한 파일리스 정보 스틸러로서 고급 회피 및 안티 포렌식 기능을 갖추고 있음을 확인시켜 줍니다. Binary Ninja와 Process Hacker를 통해 우리는 이 악성코드가 메모리에서 직접 페이로드를 구성하고, 내부 API를 후킹하기 위해 chrome.exe 프로세스에 주입하며, 분석을 방해하기 위해 환경을 미끼 도메인으로 범람시키는 것을 관찰했습니다.