
Уязвимость BDU:2017-01095 (CVE-2017-0148) SMBv1 Windows
Уязвимость BDU:2017-01095 (CVE-2017-0148) возникает из-за некорректной обработки специально сформированных SMBv1-пакетов в ядре Windows. Атакующий может вызвать переполнение буфера при обработке транзакционных запросов, что позволяет выполнить произвольный код с правами SYSTEM. Уязвимы все версии Windows, не установившие патч MS17-010.
Анализ уязвимости
Уровень опасности: 8.1 HIGH
Вектор атаки: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
-
AV:N (Attack Vector: Network) - Атака через сеть
-
AC:H (Attack Complexity: High) - Высокая сложность эксплуатации
-
PR:N (Privileges Required: None) - Права не требуются
-
UI:N (User Interaction: None) - Взаимодействие с пользователем не нужно
-
S:U (Scope: Unchanged) - Воздействие на другие компоненты отсутствует
-
C:H (Confidentiality: High) - Полное нарушение конфиденциальности
-
I:H (Integrity: High) - Полное нарушение целостности
-
A:H (Availability: High) - Полное нарушение доступности
Условия эксплуатации
-
Сетевой доступ к SMB-порту (445/TCP)
-
Отсутствие патча MS17-010 на целевой системе
-
Включенный протокол SMBv1 (по умолчанию активен в уязвимых версиях)
-
Не требует аутентификации или действий пользователя
Уязвимые версии ОС
- Windows XP
- Windows 8
- Windows 10
- Windows 8
- Windows 7 SP1
- Windows 8.1 RT
- Windows Server 2003
- Windows Server 2008 R2 SP1
- Windows Server 2008 SP2
- Windows Server 2012 gold
- Windows Server 2012 R2
- Windows Server 2016
- Windows Vista SP2
Анализ эксплойта EternalBlue
Рассмотрим код эксплоита для понимания работы вектора атаки с использованием уязвимости CVE-2017-0148.
Механизм обнаружения уязвимости (Ruby-код):
def do_smb_probe(ip) connect simple.login(datastore['SMBName'], '', '', datastore['SMBDomain']) simple.connect("\\\\#{ip}\\IPC$") # Ключевая проверка через транзакцию FID=0 pkt = make_smb_trans_ms17_010(tree_id) sock.put(pkt) response = sock.get_once # Интерпретация ответа case pkt['SMB'].v['ErrorClass'] when 0xC0000205 # STATUS_INSUFF_SERVER_RESOURCES return :vulnerable end end
Принцип работы:
Эксплойт отправляет специальный SMB-пакет с операцией PeekNamedPipe
для FID 0. Непатченные системы возвращают статус STATUS_INSUFF_SERVER_RESOURCES
(0xC0000205), что подтверждает уязвимость. Патч изменяет поведение ядра, возвращая STATUS_ACCESS_DENIED
.
Шеллкод EternalBlue (ASM-анализ):
mov ecx, 0 ; Инициализация счетчика loop_start: inc ecx ; Увеличение счетчика loop loop_start ; Цикл до переполнения ECX call $+5 ; Динамическое вычисление адреса pop rsi add rsi, 0x308 ; Смещение к полезной нагрузке mov rbx, [rsi] ; Загрузка адреса ядерной структуры
Что достигает шеллкод:
-
Обходит ASLR через динамическое вычисление адресов
-
Эскалирует привилегии до уровня ядра
-
Загружает и исполняет произвольный код (например, ransomware)
Последствия успешной эксплуатации:
-
Удаленное выполнение кода с правами SYSTEM
-
Массовое заражение по типу WannaCry
-
Кража учетных данных (Pass-the-Hash атаки)
-
Установка бэкдоров (DoublePulsar)
-
Криптоджекинг и шифрование данных
Актуальные меры защиты:
-
Отключение SMBv1 (только для внутренних сетей!):
Set-SmbServerConfiguration -EnableSMB1Protocol $false
-
Сетевые правила Suricata (IDS/IPS):
alert smb any any -> any 445 (msg:"ET EXPLOIT EternalBlue attempt"; flow:established; content:"|FF|SMB|25|"; depth:5; content:"|00|"; distance:0; within:1; content:"|00 00 00 00|"; distance:4; metadata:policy balanced-ips; sid:202417010; rev:1;)
-
Сегментация сети: Блокировка 445/TCP из ненадежных зон
-
Application Whitelisting: Запрет исполнения .exe из TEMP-директорий
-
Обновление систем: Критически важно для Windows Server 2003/XP
Почему IPS не панацея:
-
Ложные срабатывания: Могут блокировать легитимный SMB-трафик
-
Слепая зона: Бесполезны при атаке из доверенной сети
-
Обход подписей: Современные эксплойты используют полиморфный код
Важно! Для Windows XP/2003 используйте физическую изоляцию. Официальные патчи недоступны.
