
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