상세 컨텐츠

본문 제목

상품 파손 사칭 메일로 유포되는 다단계 정보탈취 악성코드 주의

악성코드 분석 리포트

by 알약4 2026. 8. 4. 16:44

본문

[이미지] 생성형 AI 제작

 

 

국내 정부기관 담당자를 대상으로 상품 파손 클레임을 사칭한 스피어피싱 메일이 확인되었습니다.

해당 메일은 악성코드를 직접 첨부하는 대신 외부 파일 공유 서비스 링크를 통해 압축 파일을 내려받도록 유도하며, 내부에는 정상 서명된 Microsoft Excel 실행 파일과 악성 DLL파일이 함께 존재합니다. 감염이 완료되면 브라우저 자격 증명과 암호화폐 지갑 정보가 공격자 서버로 전송됩니다.

 

공격 개요

 

이번 피싱 메일은 온라인 거래 과정에서 흔히 발생하는 상품 파손 분쟁을 소재로 삼았습니다.
공격자는 주문한 제품에서 심각한 손상이 발견되었다고 주장하면서, 개봉 과정과 파손 부위를 촬영한 자료를 준비했으니 확인해 달라고 요청합니다. 파일 용량이 크다는 이유를 들어 첨부 대신 외부 링크를 안내한 점이 특징이며, 이는 메일 게이트웨이의 첨부파일 검사를 우회하려는 구성으로 판단됩니다.

 

링크에 접속하면 파일 공유 서비스(pixeldrain)에 업로드된 압축 파일이 내려받아집니다.
압축을 해제하면 문서로 위장한 실행 파일이 나타나고, 이를 실행하는 순간 다단계에 걸친 감염 절차가 시작됩니다. 각 단계는 서로 다른 방식으로 암호화되어 있으며, 최종적으로 정보탈취 악성코드가 실행되는 구조입니다.

 

전체 흐름은 [피싱 메일 수신 → 외부 링크 접속 → 압축 파일 다운로드 → 실행 → DLL 사이드로딩 → 파이썬 기반 은닉 설치 → 셸코드 실행 → 정보탈취 악성코드 구동 → 공격자 C2 접속] 순서로 전개됩니다.

 

공격 흐름

 

1단계 - 스피어피싱 메일 수신 

메일은 한국어 업무 메일 형식을 갖추고 있으며, 발신자명에 한국식 이름을 사용해 국내 거래처로 보이도록 위장했습니다. 본문에는 파손 상태를 증명할 영상과 사진을 제공하겠다는 내용과 함께 다운로드 링크가 삽입되어 있습니다.

 

[그림 1] 상품 파손 클레임 사칭 피싱 메일

 

또한 본문 하단에는 1×1 크기의 추적 픽셀이 삽입되어 있습니다. 추적 픽셀은 발송자가 수신자가 메일을 열었는지, 언제 열었는지를 확인하는 용도로 삽입되는 이미지이며 화면에는 사실상 보이지 않지만, 수신자가 메일을 열어 이미지를 불러오는 순간 해당 이미지가 저장된 서버에 접속 기록이 남게됩니다. 

 

주목할 부분은 이미지 주소의 구성입니다. 주소에는 캠페인을 구분하는 식별자와 수신자를 구분하는 식별자가 각각 포함되어 있어, 서버는 접속 기록만으로 어느 캠페인의 어느 수신자가 메일을 열었는지 구분할 수 있습니다.

  • 추적 픽셀 URL 구조: (/index.php/campaigns/{캠페인ID}/track-opening/{수신자ID})

[그림 2] 피싱 메일 본문에 삽입된 추적 픽셀

 

동일한 캠페인 식별자는 메일 헤더에서도 확인됩니다. 대량 발송 도구는 수신 측의 스팸 신고를 발송자에게 되돌려 주기 위해 캠페인과 발송 목록을 구분하는 값을 Feedback-ID 헤더에 기록하는데, 여기에 본문 이미지 주소와 동일한 값이 남아 있습니다. 

 

[그림 3] 메일 헤더에 기록된 캠페인 식별자

 

수신자마다 고유 식별자를 부여하고 열람 여부를 집계하는 구조는 개별 작성된 메일에서는 나타나지 않습니다. 이번 메일이 발송 관리 도구를 통해 배포되었으며, 동일한 내용이 다수의 수신자에게 전달되었을 가능성을 시사하는 부분입니다. 아울러 공격자는 어느 수신자가 메일을 열었는지 파악할 수 있으므로, 반응을 보인 대상을 추려 후속 공격을 시도하는 것도 가능합니다.

 

2단계 - DLL 사이드로딩(Side-Loading) 

사용자가 메일 본문 내 링크를 클릭하게 되면   Full_Unboxing_Process_Inspection_Record_9862_2026.zip 압축파일이 다운로드 되며, 압축해제 시 EXE 실행 파일과 DLL 파일이 나타납니다.

 

[그림 4] 압축 해제 후 내부 파일

 

Full_Unboxing_Process_Inspection_Record_9862_2026.pdf.exe 파일은 이중 확장자를 사용하여 PDF 파일로 위장하였으며, 실제로는 정상 Excel 실행 파일입니다. 공격자는 악성코드를 직접 만들어 넣는 대신, 신뢰할 수 있는 프로그램을 악용하여 탐지 회피를 노렸습니다.

 

[그림 5]Full_Unboxing_Process_Inspection_Record_9862_2026.pdf.exe 파일 속성


AppVIsvSubsystems64.dll 파일은 Excel이 실행될 때 자동으로 불러오는 구성 요소와 동일한 이름을 가진 악성 DLL 파일 입니다. Full_Unboxing_Process_Inspection_Record_9862_2026.pdf.exe 파일이 실행되면 Excel은 DLL사이드로딩 기법을 통해  같은 폴더에 있는 이 DLL 파일을 정상 구성 요소로 오인해 메모리에 올리고, 그 순간부터 악성 코드가 정상 프로그램의 권한으로 동작하게 됩니다.

💡 참고하세요

DLL 사이드로딩(DLL Side-Loading)이란?
Windows의 DLL 검색 순서(DLL Search Order)를 악용하는 공격 기법으로 프로그램 실행 시 필요한 DLL을 찾기 위해 여러 경로를 검색하는데, 정상 프로그램과 동일한 경로내 악성 DLL 파일을 위치시켜 악성 DLL 파일이 먼저 로드되도록 조작하는 방식입니다.

 

3단계 - 악성 DLL의 은닉 동작
메모리에 적재된 DLL 파일은 세 개의 스레드를 생성해 각기 다른 역할을 수행합니다.

 

첫 번째 스레드는 미끼 문서를 화면에 띄웁니다. 
DLL 내부 리소스에 저장된 PDF 파일을 %TEMP% 경로에 doc_<PID>.pdf 이름으로 저장하여  웹 브라우저로 여는 방식으로, 사용자가 정상 문서를 열었다고 인식하게 만드는 역할을 합니다.

 

[그림 6] 미끼 문서로 사용된 PDF 파일 화면

 

두 번째 스레드는 화면에 나타나는 대화상자를 감시합니다.
악성 DLL파일은 정상 DLL 파일이 제공해야 할 기능을 갖추고 있지 않으므로, Excel은 초기화 과정에서 오류 대화상자를 표시하게 됩니다. 공격자는 이 스레드를 통해 창이 뜨는 즉시 확인 버튼을 눌러 닫도록 처리했습니다.

 

같은 목적으로 DLL 파일은 실행 직후 Excel의 IAT(Import Address Table)를 조작합니다. 대화상자를 띄우는 함수 세 개의 주소를 아무 동작도 하지 않는 함수로 교체해, 오류 창 자체가 생성되지 않도록 차단하는 방식입니다.

 

💡 참고하세요

IAT 패칭이란?
IAT(Import Address Table)는 프로그램이 사용할 외부 함수의 실제 주소를 기록해 두는 표입니다. 프로그램은 함수를 직접 호출하지 않고 항상 이 표를 거쳐 호출하므로, 표의 내용을 바꾸면 프로그램 코드를 수정하지 않고도 동작을 바꿀 수 있습니다. 공격자는 이 점을 이용해 대화상자 함수의 주소를 빈 함수로 교체했습니다. 이때 빈 함수가 "사용자가 확인 버튼을 눌렀다"는 값을 되돌려 주기 때문에, Excel은 오류 처리가 정상적으로 끝났다고 판단하고 실행을 계속합니다. 프로그램을 손상시키지 않으면서 화면에서 흔적만 지우는 기법입니다.

세 번째 스레드가 실제 감염을 진행합니다.
이 스레드는 분석 환경을 확인하는 코드를 반복 실행해 시간을 지연시킨 뒤, 디버거로부터 자신을 숨기는 처리를 수행합니다. 감염 PC의 정상 ntdll.dll 을 읽어 메모리 영역을 덮어쓰는데, 이는 보안 제품이 감시를 위해 삽입해 둔 코드를 제거하기 위한 동작입니다.

 

준비가 끝나면 DLL 파일 뒤쪽에 덧붙여진 약 20MB 크기의 데이터를 꺼내 복호화합니다. 이 데이터는 압축 파일이며, DLL은 이를 %TEMP% 폴더에 Drv<PID^TickCount>.zip 이름으로 저장한 뒤 PowerShell을 숨김 상태로 실행해 압축을 해제합니다. DLL 파일 크기가 20MB를 넘는 이유도 여기에 있습니다.

 

4단계 - 파이썬 실행 환경 설치와 지속성 확보
압축 해제된 파일은 대부분 Python 3.11 포터블 배포판으로 공격자는 감염 대상 PC에 파이썬 실행 환경을 통째로 설치한 뒤, 그 위에서 악성 스크립트를 구동하는 방식을 택했습니다. 실행 주체가 정상 파이썬 인터프리터이므로 프로세스 목록만으로는 악성 여부를 판단하기 어렵게 만들었습니다.

 

[그림 7] %TEMP% 경로내 압축 해제된 파일들

 

압축을 해제한 폴더의 최상위에는 설치를 담당하는 run.py 스크립트가 존재하며, 이 스크립트는 같은 폴더에 있는 macOS 하위 폴더를 %LOCALAPPDATA%\Drivers\macOS\ 경로로 통째로 복사한 뒤, 복사된 위치의 파이썬 인터프리터로 해당 폴더내 동일한 이름의 run.py 스크립트를 실행합니다.

 

실행 시 CREATE_NO_WINDOW 옵션을 지정하기 때문에 콘솔 창이 화면에 나타나지 않으며,  임시 폴더에서 시작된 실행 흐름은 이 시점에 사용자 프로파일 경로로 옮겨가며, 이후 동작은 모두 복사된 경로에서 이루어집니다.

 

[그림 8] 압축 해제 된 폴더 내 run.py 스크립트 코드

 

경로 파일 역할
%LOCALAPPDATA%\Drivers\ run.vbs 스크립트 실행 런처
%LOCALAPPDATA%\Drivers\macOS\ python.exe Python 3.11 인터프리터(32비트
%LOCALAPPDATA%\Drivers\macOS\ run.py 셸코드 로더
%LOCALAPPDATA%\Drivers\macOS\ trumads_enc.bin 암호화된 셸코드

[표 1] 설치되는 주요 파일

 

설치 경로에 사용된 DriversmacOS라는 폴더명은 실제 기능과 무관하며, 사용자나 관리자가 목록을 확인하더라도 시스템 구성 요소로 오인하도록 붙인 이름으로 추정됩니다.

 

복사된 경로에서 실행되는 run.py(%LOCALAPPDATA%\Drivers\macOS\) 스크립트는 압축을 푼 폴더의 설치용 run.py 스크립트와 파일명이 같지만 역할이 다릅니다. 이 스크립트는 동일 경로내 암호화된 셸코드 파일(trumads_enc.bin)을 복호화한 뒤 실행 권한이 부여된 메모리 영역에 올려 구동합니다. 이 과정에서 별도의 실행 파일이 디스크에 생성되지 않으므로 파일 기반 검사만으로는 탐지가 어렵습니다.

 

[그림 9] macOS 폴더 내 run.py 스크립트 코드 일부

 

동시에 Drivers_EveryMinute라는 이름의 예약 작업이 등록됩니다. 이 작업은 1분 간격으로 런처를 실행하므로, 사용자가 악성 프로세스를 강제 종료하더라도 1분 이내에 다시 구동됩니다. 파일 하나를 삭제하는 것만으로는 감염이 해소되지 않는 구조입니다.

 

[그림 10] 등록된 작업 스케줄러

 

[그림 11] run.vbs 코드

 

5단계 - 셸코드 실행과 프로세스 인젝션
복호화된 셸코드는 특정 메모리 주소에 의존하지 않고 동작하도록 작성되어 있으며, 사용할 함수의 주소를 실행 시점에 직접 찾아냅니다. 코드 안에 함수 이름이 남지 않기 때문에 정적 분석으로 기능을 파악하기 어렵습니다. 내장된 설정값 역시 공격자가 직접 설계한 스트림 암호로 보호되어 있습니다.
셸코드는 .NET 실행 환경을 프로세스 내부에 구성한 뒤 explorer.exe에 코드를 삽입합니다. 이후 동작이 정상 시스템 프로세스 내부에서 이루어지고 실행할 코드도 디스크에 기록되지 않으므로, 프로세스 목록과 파일 검사 양쪽에서 탐지를 피할 수 있습니다.

 

6단계 - .NET 로더를 통한 최종 페이로드 적재

셸코드 설정 영역에 포함된 .NET 로더는 자신의 리소스에 저장된 압축 데이터를 복호화하고 압축을 해제해 최종 악성코드를 메모리에 올립니다.

복호화에 사용되는 키는 .NET 실행 파일의 문자열 저장 영역에 숨겨져 있어, 일반적인 분석 도구의 기본 화면에서는 확인되지 않습니다. 앞선 단계까지 포함하면 최초 DLL부터 최종 악성코드에 이르기까지 서로 다른 방식의 암호화가 다섯 차례 중첩되어 적용된 구조입니다. 한 단계를 복호화해도 그 결과물이 다시 암호화된 상태이므로, 자동화된 분석 도구가 전체 구조를 한 번에 파악하기 어렵습니다.

 

7단계 - 정보탈취 악성코드 실행
최종 단계에서 실행되는 악성코드는 감염 시스템의 자격 증명과 자산 정보를 수집해 공격자 서버로 전송하는 정보탈취형 악성코드입니다. C2 접속 정보는 압축과 직렬화를 거쳐 저장되어 있으며, 통신 시 상호 인증서 검증을 적용해 임의의 분석 도구가 통신 내용을 확인하기 어렵도록 구성되었습니다.

 

탈취 대상 및 주요 기능

 

수집 대상은 브라우저 자격 증명과 암호화폐 자산에 집중되어 있습니다.

 

구분  대상 수집 정보
브라우저
Chromium 계열 34종(Chrome, Edge, Brave, Vivaldi 등) 저장된 비밀번호, 쿠키, 자동완성, 신용카드 정보
지갑 확장 프로그램 48종(MetaMask, Phantom, Trust Wallet, Coinbase Wallet 등) 지갑 데이터, 인증 정보
데스크톱 지갑·앱 12종(Exodus, Electrum, Atomic Wallet, Ledger Live, Telegram 등) 지갑 파일, 키 저장소
시스템 정보 WMI 조회 프로세서·디스크 식별자, OS 버전, 설치된 백신 제품, 웹캠 유무

[표 2] 주요 탈취 대상 

 

수집 기능 외에도  다음과 같은  동작이 확인되었습니다.

  • 화면 캡처: 고해상도 모니터에서도 전체 화면을 정확히 저장하도록 처리
  • 활성 창 감시: 사용자가 현재 사용 중인 프로그램의 창 제목을 실시간 수집
  • 유휴 시간 확인: 키보드·마우스 입력이 없는 시점을 판단해 탈취 작업 시점을 조절
  • 프로세스 인젝션: 실행 중인 다른 프로세스 메모리에 코드를 삽입해 실행

활성 창 제목과 유휴 시간을 함께 확인한다는 점은, 사용자가 자리를 비운 시점을 골라 활동하도록 설계되었음을 시사합니다.

 

탐지 회피 기법

 

이번 공격에서 악성코드는 단계마다 서로 다른 회피 기법을 적용하고 있습니다.

 

기법 내용
DLL 사이드로딩 정상 서명된 Microsoft Excel이 악성 DLL을 적재
이중 확장자 .pdf.exe 형식으로 문서 파일처럼 표시
IAT 패칭 대화상자 함수를 빈 함수로 교체해 오류 창 차단
ntdll 언후킹 디스크의 정상 ntdll.dll로 메모리를 덮어써 보안 제품의 감시 코드를 제거
안티 디버깅 디버거 탐지 및 스레드 은폐 처리
안티 분석 의미 없는 연산을 반복해 분석 도구의 흐름 추적을 방해
정상 도구 악용 Python 포터블 배포판과 PowerShell을 실행 수단으로 사용
메모리 실행 최종 페이로드를 디스크에 기록하지 않고 메모리에서 직접 적재
다중 암호화 서로 다른 방식의 암호화를 5단계로 중첩 적용
문자열 분할 민감한 함수 이름을 조각내어 저장해 문자열 검사 회피

[표 3] 탐지 회피 기법

 

 

공격자 추정 단서

 

메일 헤더에 기록된 발신 IP (103.82.22.82) 는 베트남에 할당된 주소이며, 발신 국가 정보 역시 베트남으로 표기되어 있습니다.

파이썬 로더 스크립트에는 베트남어로 작성된 주석이 남아 있고, 악성 DLL의 컴파일 시각은 피싱 메일 발송일과 같은 날짜입니다.

 

[그림 12] macOS\run.py 스크립트 내 베트남어 주석

 

또한 확인된 C2 도메인(trum.1368[.]lol)은 베트남어 표현을 포함한 이름을 사용하고 있으며, 연결되는 IP(51.79.209.228)는 해외 호스팅 사업자에 할당된 대역입니다. 이러한 정황을 종합하면 베트남을 기반으로 활동하는 공격자의 소행일 가능성이 높습니다.

 

공격 특징

 

  • 업무 맥락을 활용한 사회공학:거래 과정에서 자연스럽게 발생하는 파손 분쟁을 소재로 삼아, 수신자가 확인하도록 유도
  • 첨부 우회형 유포: 악성 파일을 메일에 첨부하지 않고 파일 공유 서비스에 올린 뒤 링크만 전달해 게이트웨이 검사를 회피
  • 정상 파일 기반 실행: 서명이 유효한 Microsoft 실행 파일과 Python 배포판을 실행 수단으로 활용해 평판 기반 탐지를 우회
  • 단계별 암호화: 다섯 차례에 걸친 중첩 암호화로 정적 분석과 자동 분석을 저해
  • 분석 및 추적 방해: 보안 제품이 삽입한 감시 코드를 제거하고 디버거 탐지 기능을 적용해 분석과 사후 추적을 저해 
  • 짧은 주기의 지속성: 1분 간격 예약 작업을 등록해 프로세스 종료 후에도 즉시 재실행

 

결론 및 대응 방안

 

이번 공격은 악성코드를 직접 만들어 넣는 대신 신뢰받는 정상 구성 요소를 조합해 감염 체인을 구성한 사례입니다.

서명이 유효한 실행 파일, 정상 파일 공유 서비스, 공식 배포된 파이썬 인터프리터가 모두 공격 수단으로 사용되었습니다. 개별 요소만 보아서는 악성으로 판단할 근거가 없다는 점이 이번 사례의 핵심입니다. 피해 예방을 위해 다음 사항을 준수하시기 바랍니다.

  • 확장자 표시 설정: Windows 탐색기의 '알려진 파일 형식의 파일 확장명 숨기기' 옵션을 해제하고, 실행 전 확장자를 필히 확인하시기 바랍니다. 
  • 외부 링크 실행 자제: 파일 용량을 이유로 외부 공유 서비스 링크를 안내하는 메일은 첨부파일 검사를 우회하려는 시도일 수 있으므로, 접속하지 마시고 발신자에게 별도 경로로 사실을 확인하시기 바랍니다.
  • 감염 의심 시 조치: 브라우저에 저장된 비밀번호와 세션이 유출되었을 수 있으므로, 시스템 점검과 함께 주요 서비스의 비밀번호 변경 및 로그인 세션 종료를 함께 진행하시기 바랍니다. 

 

IoC

Indicator Type Description Detection Name
D144AA1E7FD64A25E7EA97DFDCDBA658 MD5 AppVIsvSubsystems64.dll Trojan.Dropper.Agent
2CD2F749E3D62CE3F90805461D5F9478 MD5 root\run.py Trojan.Python.Loader
2021D8C6181C54A96FE9D16469E7983B MD5 macOS\run.p Trojan.ShellCodeLoader.A
2F7FC67A9567BBE87594935393240C6C MD5 run.vbs Trojan.Script.Agent
9D6C2666BF26A9F71C53EF766DB2E885 MD5 trumads_enc.bin Trojan.BIN.Encoded
trum.1368.lol DOMAIN C2  
51.79.209.228 IP C2  
okok   Mutex create  

 

관련글 더보기

댓글 영역