April 19, 2020

О определении версии SMB и его взломе

Любой пентестер должен уметь осуществлять атаки на SMB. Но прежде чем перейти к делу, давайте разберемся, что же представляет из себя данный протокол.

SMB (Server Message Block) - сетевой протокол для удалённого доступа к файлам, принтерам и другим сетевым ресурсам, а также для межпроцессного взаимодействия. Как правило, работает на 445 или 139 порту (в зависимости от сервера). Вторая версия этого протокола была разработана целиком компанией Microsoft, и в поэтому в Windows SMB доступен по-умолчанию, сразу же после установки. В 1992 году появилась Samba — свободная реализация протокола SMB для UNIX-подобных операционных систем. Так как Microsoft не любит делиться своими наработками, разработчикам Sabma пришлось провести обратную разработку этого протокола.

Аутентификация в SMB состоит из двух уровней защиты: user-level (пользовательский уровень) и share-level (уровень совместно используемого ресурса). Под share (выложенный в сеть ресурс) понимается файл, каталог, принтер, любая услуга, которая может быть доступна клиентам по сети.

Аутентификация на уровне user-level означает, что клиент, который пытается получить доступ к ресурсу на сервере, должен иметь username (имя пользователя) и password (пароль). Если аутентификация прошла успешно, клиент имеет доступ ко всем доступным ресурсам сервера, кроме тех, что с share-level-защитой.

Аутентификация на уровне share-level означает, что доступ к ресурсу контролируется паролем, установленным конкретно на этот ресурс. В отличие от user-level, этот уровень защиты не требует имя пользователя для аутентификации и не устанавливается никакая уникальность текущего пользователя. В обоих этих уровнях защиты используется шифрование.

Самая частая ошибка при использовании данного протокола заключается в использовании стандартных или легко угадываемых учетных данных, а иногда и отсутствие аутентификации для доступа к важным ресурсам сервера. Администраторы обязаны использовать надежные пароли для пользователей, которые хотят получить доступ к ресурсам, используя SMB.

Второй недостаток - Samba-сервера. За 28 лет своего существования было выявлено огромное количество уязвимостей, поэтому их использование априори небезопасно. Не верите мне? Просто введите в Google «samba server exploit», чтобы получить букет эксплойтов для этого сервера. В Metasploit хранится так много вспомогательных сканеров и эксплойтов для Samba-сервера, что я уже сбился со счету!

Не смотря на свою печальную известность, Samba-сервера используются 75% предприятий [прим. ред. - в оригинальной статье ни одного ссылки на источник]. Обнаружили мы открытый 445 или 139 порты в Nmap, что же дальше?

Итак, первое, что мне нравится делать, - это использовать Nmap-сценарии, также известные как NSE. Это очень мощная функция Nmap, и, вероятно, потребуется отдельная статья, чтобы продемонстрировать ее в полную силу. Чтобы определить версию сервера, наберите в терминале:

nmap -p445 —script smb-protocols <target ip>

или

nmap -p139 —script smb-protocols <target ip>

Для 445 и 139 порта, соответственно.

Мы также можем попытаться узнать дополнительную информацию, используя:

nmap -sC -p 139,445 -sV 10.0.2.30

Ницца! Теперь мы знаем версию Samba, работающую на сервере. Теперь просто можно зайти в Google и попробовать найти информацию о том, является ли данная версия уязвимой или нет.

Это замечательно, но что если сервер с Samba исправен?

Есть много способов выудить информацию об атакуемом сервере. Самый быстрый способ - использование инструмента под названием enum4linux. Однако результат, при использовании enum4linux иногда разочаровывает. Поэтому я чувствую себя уютнее, когда использую smbclient и smbmap.

Но давайте сначала попытаемся подключиться к серверу вручную. Для этого перейдем в файловый менеджер и введем его IP-адрес:

К сожалению, подключиться не удается

Я, на самом деле, даже и не знаю, почему. Иногда такое случается, но, как правило, все в порядке и подключиться удается. Во всяком случае, такая ошибка нам дает понять, почему smbclient и smbmap лучше.

Давайте сначала попробуем воспользоваться smbmap. Чтобы использовать его базовую версию, введите:

Аргумент -H служит для указания имени хоста, а -R - рекурсивный ключ, то есть он будет проходить через каждый каталог и выводить список файлов. Хотя я вынужден сказать вам, что сейчас никаких ошибок не возникло из - за того, что разрешен на сервере разрешен анонимный вход, то есть на реальной машине нам, вероятно, понадобились бы имя пользователя и пароль.

Используя smbmap, мы можем скачивать и удалять файлы на сервере (а также загружать свои). Но что, если мы хотели бы получить полноценную командную строку для взаимодействия с системой? Это возможно с smbclient. Давайте попробуем это сделать.

Эта команда пытается установить анонимный вход в систему с Metasploitable, чтобы мы могли видеть, к каким файлам мы можем получить доступ. Вы видите, что соединение успешно установлено, и у нас есть доступ к общим ресурсам, таким как opt и tmp.

Теперь, как мне воспользоваться smbshell в любом из дисков? Для этого нужно выполнить следующую команду

Да, у нас есть оболочка на диске TMP. Теперь мы можем скачать или загрузить файлы в общий ресурс. Как видите, это действительно полезно как для системных администраторов, так и для пентестеров. Вот почему лучший способ начать карьеру этического хакера - сначала стать системным или сетевым администратором.