COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
report.pdf.exe가 문서로 보이는 이유. Windows 확장자 숨김 기능을 악용한 이중 확장자 공격과 MortalKombat 랜섬웨어 사례.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
Windows 운영 체제는 기본적으로 알려진 파일 유형의 확장자를 숨기도록 설정되어 있다. 이 설정은 사용자 편의를 위해 도입되었지만, 동시에 공격자들이 악용할 수 있는 보안 취약점을 만들어냈다. 2021년 MITRE ATT&CK 프레임워크에 등록된 T1036.007 이중 확장자(Double File Extension) 공격은 이러한 Windows의 기본 동작을 정교하게 악용하는 방어 회피 기법이다.
Adversaries may abuse a double file extension in the filename as a means of masquerading the true file type. A file name may include a secondary file extension that may cause only the first extension to be displayed. — MITRE ATT&CK T1036.007
이중 확장자 공격은 파일명에 두 개의 확장자를 사용하여 실제 파일 유형을 숨기는 기법이다. 사용자에게는 첫 번째 확장자만 보이지만, 시스템은 두 번째 확장자를 기준으로 파일을 실행한다.
이 공격 기법의 핵심 구성 요소는 다음과 같다:
| 용어 | 설명 |
|---|---|
| 이중 확장자 | 정의: 파일명에 두 개의 확장자 사용 / 목적: 실제 파일 유형 숨김 / 사용 예시: report.pdf.exe |
| 확장자 스푸핑 | 정의: 파일 확장자를 다른 유형으로 위장 / 목적: 파일 유형 오인 유도 / 사용 예시: malware.exe → malware.jpg |
| 파일 시그니처 조작 | 정의: 파일 헤더의 매직 바이트 변경 / 목적: 파일 분석 도구 우회 / 사용 예시: PE 파일에 JPEG 헤더 삽입 |
| RLO 공격 | 정의: 유니코드 제어 문자로 텍스트 방향 조작 / 목적: 파일명 표시 순서 뒤집기 / 사용 예시: docume[RLO]fdp.exe → documeexe.pdf |
| 파일명 패딩 | 정의: 긴 공백으로 확장자를 화면 밖으로 밀어냄 / 목적: 확장자 숨김 / 사용 예시: file.txt[255개 공백].exe |
Windows는 사용자 편의성을 위해 알려진 파일 유형의 확장자를 기본적으로 숨깁다. 이 동작은 다음 레지스트리 키로 제어된다:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
키 이름: HideFileExt
값: 1 (숨김), 0 (표시)
1단계: 악성 파일 생성
공격자는 다음과 같은 패턴으로 파일을 생성한다:
# 일반적인 이중 확장자 패턴
invoice.pdf.exe # 청구서 문서로 위장
photo.jpg.scr # 이미지 파일로 위장
document.docx.bat # Word 문서로 위장
report.xlsx.vbs # Excel 파일로 위장
2단계: Windows 표시 처리
Windows 탐색기는 HideFileExt 설정에 따라 파일명을 다음과 같이 처리한다:
# Windows 파일명 표시 로직 (의사코드)
def display_filename(full_filename):
if hide_file_ext_enabled():
# 알려진 확장자 목록에서 확인
known_extensions = ['.exe', '.scr', '.bat', '.vbs', '.com']
for ext in known_extensions:
if full_filename.endswith(ext):
# 마지막 확장자만 제거하여 표시
return full_filename[:-len(ext)]
return full_filename
else:
return full_filename
# 예시 실행
print(display_filename("invoice.pdf.exe")) # 출력: "invoice.pdf"
3단계: 사용자 상호작용
사용자는 Windows 탐색기에서 "invoice.pdf"라는 파일명을 보게 된다. 파일 아이콘도 PDF 리더와 연결된 아이콘이 아닌, 실제 .exe 파일의 기본 아이콘이나 공격자가 설정한 아이콘으로 표시될 수 있다.
4단계: 시스템 실행 처리
사용자가 파일을 더블클릭하면, Windows는 다음과 같은 순서로 파일을 처리한다:
// Windows 파일 실행 로직 (의사코드)
HRESULT ExecuteFile(LPCWSTR filename) {
// 실제 확장자(.exe) 기준으로 실행 방식 결정
LPCWSTR actualExtension = GetFileExtension(filename);
if (wcscmp(actualExtension, L".exe") == 0) {
return CreateProcess(filename, ...); // 실행 파일로 실행
}
// 다른 확장자 처리...
}
긴 파일명을 이용한 확장자 숨김
공격자는 매우 긴 파일명을 사용하여 실제 확장자를 화면 밖으로 밀어내는 기법도 사용한다:
매우긴파일명입니다매우긴파일명입니다매우긴파일명입니다매우긴파일명입니다.txt ```
report.txt .exe
이처럼 공백을 대량으로 삽입하여 실제 확장자를 화면 밖으로 밀어내는 방식이다.
아이콘 조작을 통한 시각적 속임수
공격자는 실행 파일의 아이콘을 PDF나 Word 문서 아이콘으로 변경하여 시각적 속임수를 더욱 강화한다:
// 리소스 편집을 통한 아이콘 변경 (의사코드)
HICON hIcon = LoadIcon(NULL, IDI_DOCUMENT); // 문서 아이콘 로드
SetClassLongPtr(hwnd, GCLP_HICON, (LONG_PTR)hIcon); // 아이콘 설정
이는 Windows 탐색기에서 파일을 볼 때 사용자가 실제 문서 파일로 인식하게 만듭니다.
공격자는 이중 확장자 기법을 이메일 피싱 공격과 결합하여 효과를 극대화한다. 실제 사례를 살펴보면:
이 공격의 특징:
.pdf.zip 파일로 압축 파일임을 숨김.pdf.exe 파일로 실행 파일임을 숨김공격자들이 자주 사용하는 확장자 조합 패턴:
| 위장 확장자 | 설명 |
|---|---|
| 실제 확장자: .exe / 공격 목적: 문서 위장 / 사용 빈도: 매우 높음 | |
| .jpg | 실제 확장자: .scr / 공격 목적: 이미지 위장 / 사용 빈도: 높음 |
| .docx | 실제 확장자: .bat / 공격 목적: Office 문서 위장 / 사용 빈도: 높음 |
| .xlsx | 실제 확장자: .vbs / 공격 목적: Excel 파일 위장 / 사용 빈도: 중간 |
| .txt | 실제 확장자: .com / 공격 목적: 텍스트 파일 위장 / 사용 빈도: 낮음 |
공격자는 다음과 같은 방법으로 보안 솔루션의 탐지를 우회한다:
1. 파일명 기반 필터링 우회
# 보안 솔루션의 일반적인 파일명 검사 (의사코드)
def check_suspicious_file(filename):
dangerous_extensions = ['.exe', '.scr', '.bat', '.vbs']
# 단순한 확장자 검사는 우회 가능
if filename.endswith('.exe'):
return "BLOCKED"
# 이중 확장자는 탐지하지 못함
if filename.endswith('.pdf.exe'):
return "ALLOWED" # 실제로는 위험한 파일
2. 이메일 게이트웨이 우회
많은 이메일 보안 게이트웨이는 첫 번째 확장자만 확인하여 invoice.pdf.exe 파일을 안전한 PDF 파일로 분류한다.
이 기법의 핵심은 사용자의 인지적 편향을 악용하는 것이다:
파일명 패턴 분석
import re
def detect_double_extension(filename):
"""이중 확장자 패턴 탐지"""
# 알려진 위험 확장자 목록
dangerous_exts = r'\.(exe|scr|bat|cmd|vbs|js|pif|com)$'
# 무해해 보이는 확장자 목록
decoy_exts = r'\.(pdf|doc|docx|txt|jpg|png|gif|xlsx|ppt)'
# 이중 확장자 패턴 검사
pattern = decoy_exts + r'\.' + dangerous_exts
if re.search(pattern, filename, re.IGNORECASE):
return True, "이중 확장자 탐지"
return False, "정상"
# 테스트
test_files = [
"invoice.pdf.exe",
"photo.jpg.scr",
"document.docx.bat",
"normal.pdf"
]
for file in test_files:
detected, reason = detect_double_extension(file)
print(f"{file}: {reason}")
이메일 게이트웨이 설정
# Postfix 메일 서버 설정 예시
# /etc/postfix/header_checks
/^Content-Type:.*name=".*\.(pdf|doc|txt|jpg)\.(exe|scr|bat|vbs)"/ REJECT 이중 확장자 첨부파일 차단
# /etc/postfix/mime_header_checks
/name=".*\.(pdf|doc|txt|jpg)\.(exe|scr|bat|vbs)"/ REJECT 이중 확장자 파일 차단
Windows 보안 정책 설정
# PowerShell을 통한 파일 확장자 표시 강제 설정
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "HideFileExt" -Value 0
# 그룹 정책을 통한 조직 전체 적용
# Computer Configuration > Administrative Templates > Windows Components > File Explorer
# "Hide extensions for known file types" = Disabled
실행 방지 정책
<AppLockerPolicy Version="1">
<RuleCollection Type="Exe" EnforcementMode="Enabled">
<FilePathRule Id="fd686d83-a829-4351-8ff4-27c7de5755d2"
Name="Block Double Extension"
Description="이중 확장자 실행 파일 차단"
UserOrGroupSid="S-1-1-0"
Action="Deny">
<Conditions>
<FilePathCondition Path="*.*.*exe" />
<FilePathCondition Path="*.*.*scr" />
<FilePathCondition Path="*.*.*bat" />
</Conditions>
</FilePathRule>
</RuleCollection>
</AppLockerPolicy>
체크리스트 기반 검증
사용자가 파일을 열기 전 확인해야 할 사항:
시뮬레이션 훈련
조직에서는 정기적으로 이중 확장자를 활용한 모의 피싱 훈련을 실시하여 직원들의 인식 수준을 높여야 한다.
T1036.007 이중 확장자 공격은 Windows 운영 체제의 사용자 편의 기능을 악용하는 정교한 사회공학 기법이다. 이 공격의 핵심은 기술적 취약점보다는 인간의 인지적 편향을 노리는 데 있다.
방어를 위해서는 기술적 대응책과 함께 사용자 교육이 병행되어야 한다. 특히 파일 확장자 표시 설정 활성화와 같은 간단한 조치만으로도 이 공격의 효과를 크게 줄일 수 있다.
이 기법은 다른 위장 공격과 함께 사용될 때 더욱 위험해진다. 매직 바이트 조작: 4바이트로 .exe를 .jpg로 위장하는 원리 | T1036.008이나 유니코드 RLO 공격: 파일명 1글자로 확장자가 뒤집히는 원리 | T1036.002 같은 다른 파일 위장 기법과 결합되면 탐지가 더욱 어려워진다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.