Сканирование shared-ресурсов
Оформил: DeeCo
В результате экспериментов с NetBIOS был реализован метод
сканирования Internet в поисках открытых для записи разделяемых
(shared) ресурсов. Подобная идея уже применялась в Legion, но
простое дополнение этой схемы простейшим алгоритмом подбора паролей
позволило добиться неожиданно "хороших" результатов.
Алгоритм сканирования
Сканирование выполняется параллельно для каждого из заданных
адресов (при наличии достаточных ресурсов у атакующего). Сканируется
сеть класса C, кроме 1.2.3.0 и 1.2.3.255.
Первая стадия - сбор данных.
- Послать запрос ping. Если нет ответа, то пропустить этот адрес
(и не атаковать эту машину на второй стадии).
- Определить имя DNS (на всякий случай, оно нигде не
используется)
- Попробовать установить null session(1).
- Попробовать получить список shared resources.
- Если null session установить не удалось, то закончить первую
стадию для этого адреса.
- Попробовать получить список имен пользователей.
- Попробовать получить информацию об операционной системе, а
именно
- Платформу (Windows 9x, Windows NT)
- Версию LAN Manager (Для NT: 4.00 => NT4, 5.00 =>
Windows 2000)
- Роль системы в сети: флаги Master Browser, Backup Browser,
PDC, BDC, RAS dialin server.
Вторая стадия - подбор паролей. Все имена
пользователей, полученные на первой стадии, объединяются в один
список, что позволяет учесть доменную архитектуру систем на базе
Windows NT. На этой стадии проверяются соединения типа net use
\\1.2.3.4\IPC$ password /user:username. Если соединение успешно,
то проверяются все возможность подключения ко всем shared resources,
и, когда подключение успешно, возможность записи.
- Проверить подключение со случайным именем (используется
результат GetTickCount() в десятичном представлении) и пустым
паролем. Если подключение успешно, то считать, что разрешено
подключение Guest, и дальнейшие проверки паролей будут
бессмысленны(2). Проверить shared resources и больше не
подбирать пароли на эту машину.
- Проверить подключения со всеми именами, собранными на первой
стадии. Проверяется пустой пароль и пароль, совпадающий с именем
пользователя. Если подключение успешно, то проверить shared
resources.
(1) Null session - анонимное соединение (с
пустым именем и паролем). То же, что и net use \\1.2.3.4\IPC$ ""
/user:"" (2) Это не совсем верно. Правильным
вариантом было бы все равно проверять все имена, и каждый раз
отслеживать изменения прав доступа к shared resources.
Защита
Атака может быть предотвращена следующими методами:
- отключением NetBIOS over TCP/IP
- запретом доступа к портам 135 и 139 при помощи firewall
- запретом анонимного доступа к системе путем установки в 1
значения ключа
HKLM\System\CurrentControlSet\Control\Lsa\RestrictAnonymous
- выбором устойчивых паролей
- запретом пользователя Guest или введением для него login
station restrictions
- специальными программными средствами
Введение account lockout смысла, скорее всего, не имеет,
поскольку проводятся всего две попытки угадать пароль.
Стандартное протоколирование доступа методами NT не позволяет
установить IP атакующего (только NetBIOS имя машины и домен, которые
могут быть произвольно изменены). Однако протокол позволяет
идентифицировать прошедшую атаку: сначала идет одна запись об
успешном входе в систему пользователя ANONYMOUS, а потом (после
паузы около минуты) серия записей о неуспешных попытках входа с
разными именами пользователей (в том числе и тех, которых нет на
этой машине; по две записи на имя). Если среди них есть хотя бы одна
запись об успешном входе, систему следует считать
скомпрометированной.
Реализация
Для проверки метода была написана программа, реализующая
вышеописанный алгоритм (это заняло около 6 часов вместе с
тестированием и перерывами на покурить). Тестовые сканирования
проводились на Dual Celeron 400MHz 96Mb RAM с одновременным запуском
до 128 потоков.
Статистика
Был проведен ряд экспериментальных сканирований. В качестве
источника адресов подсетей был использован Intruders list,
полученный при помощи BlackICE, однако разработка
алгорима быстрого определения "населенных" подсетей не
представляет никакой сложности. Сканирование 254 адресов занимает от
двух до десяти минут в зависимости от качества связи и общего
количества имен пользователей в сети.
Кратко сформулированный результат такой:
- примерно 10% паролей пользователей Windows может быть угадано
с двух попыток
- примерно 40% Windows-машин, доступных по NetBIOS over TCP/IP,
выставляют ресурсы в общее пользование без (достаточной) защиты
- примерно каждая третья share, доступная из Internet, разрешает
запись
Кроме того: за два часа не очень напряженной работы можно найти
три машины с Windows NT, к которым можно подключиться по сети с
правами администратора (CONNECT: Administrator : <NO PASSWORD>
:).
Детальная статистика:
Всего адресов просканировано |
1524 |
100% |
На ping ответило |
442 |
29% |
Null session установлено с |
102 |
6.7% |
Guest разрешен(1) |
57 |
3.7% |
Уязвимых машин(2) |
45 |
3.0% |
(1) Т.е. возможно подключение к IPC$ со
случайным именем (2) Уязвимыми считались все
машины, которые позволяли подключить разделяемый ресурс хотя бы на
чтение.
Распределение платформ |
Всего успешных запросов |
102 |
100% |
Windows 95/98 |
58 |
57% |
Windows NT или SAMBA |
44 |
43% |
Пользователи |
Всего имен проверено |
177 |
100% |
С пустым паролем |
10 |
6% |
С паролем, совпадающим с именем |
10 |
6% |
Shared resources |
Всего директорий |
278 |
100% |
Доступно на чтение |
171 |
62% |
Доступно на запись |
91 |
33% |
Перспективы применения
Во-первых, эта атака (после незначительного усовершенствования)
может быть использована для быстрого заселения обширных территорий,
например, BackOrifice или программами для проведения DDoS-атак.
Во-вторых, на этом алгоритме может быть реализован сетевой червь,
даже заниженная оценка скорости распространения которого производит
тяжелое впечатление.
|