NetBIOS в руках хакера
В данной статье пойдёт краткое повествование о том, что нам может рассказать такая привычная с виду вещь как NetBIOS. Какую он может предоставить информацию для потенциального злоумышленника/пентестера.
Продемонстрированная область применения разведывательных техник относится к внутренним, то есть изолированным и недоступным извне сетям. Такие сети есть как правило у любой даже у самой крошечной компании.
Сам по себе NetBIOS используется, как правило, для получения сетевого имени. И этого будет достаточно, чтобы сделать как минимум 4 вещи.
Обнаружение хостов
Благодаря тому, что NetBIOS может использовать UDP в качестве транспорта, скорость его работы позволяет обнаруживать хосты в очень больших сетях. Так, например, инструмент nbtscan, входящий в одноимённый пакет, может всего за 2 секунды (может положить сеть) разресолвить адреса сети вида 192.168.0.0/16, тогда как традиционное TCP-сканирование займёт десятки минут. Эту особенность можно использовать как технику обнаружения хостов (host sweep) в очень больших сетях, о которых ничего не известно, перед тем как запускать nmap. Хотя результат и не гарантирует 100% обнаружения, т. к. преимущественно отвечать будут windows-хосты и то не все, он всё же позволит определить, в каких примерно диапазонах находятся живые хосты.
Идентификация хостов
Используя результаты получения имён из ip-адресов:
можно видеть: помимо того что имя раскрывает владельца рабочей станции (хотя такое кстати бывает далеко не всегда), один из адресов явно выделяется на фоне других. Мы можем видеть, что было получено имя KALI. Такое поведение характерно, как правило, для unix-реализации SMB/NetBIOS в составе программного пакета samba или очень старых Windows 2000.
Получение имени KALI, в то время как на других хостах это свидетельствует о наличии так называемой null-session. При дефолтных настройках SMB-сервера на linux склонны к ней. Null-session лишь позволяет абсолютно анонимно (а мы ни какие пароли не вводили, как видно на скрине) получить достаточно много дополнительной информации, такой как локальная парольная политика, список локальных пользователей, групп и список расшаренных ресурсов (шар):
Зачастую на linux SMB-серверах бывают публично доступные шары не то что на чтение, но даже на запись. Наличие и той, и другой несут в себе различные угрозы, использование которых выходит за рамки данной статьи.
NetBIOS так же позволяет получить имена всех типов, которые хранит рабочая станция:
в данном случае это позволяет узнать, что хост является ещё и контроллером домена ARRIVA.
Так же стоит еще дополнительно обратить внимание, что NetBIOS позволяет получить mac-адрес. При чём в отличие от arp-запросов, NetBIOS-запросы способны выйти за пределы подсети. Это может быть полезно если, например, требуется отыскать в сети какой-нибудь ноутбук или специфичное железо, зная его производителя. Так как первые три октета mac-адреса идентифицируют производителя, то можно рассылая подобные NetBIOS-запросы во все известные подсети попытаться найти нужное устройство (http://standards-oui.ieee.org/oui.txt).
Определение принадлежности к домену
Часто при перемещении по внутренним корпоративным сетям требуется атаковать именно рабочую станцию, включенную в домен (например, для поднятия привилегий до уровня доменного администратора) или наоборот. В данном случае NetBIOS опять-таки может помочь:
В данном случае с помощью NetBIOS были получены все имена всех типов. Среди них можно увидеть, помимо имени ПК (то что уже было получено до этого), ещё и имя рабочей группы. По дефолту для windows оно как правило что-то вроде WORKGROUP или IVAN-PC, но если рабочая станция в домене, то её рабочая группа — это и есть имя домена.
Таким образом, с помощью NetBIOS можно узнать в домене ли рабочая станция и, если да, то в каком.
Если же требуется получить список доменных хостов в пределах подсети, то хватит и одного широковещательного запроса с именем нужного домена:
в результате ответят все хосты, состоящие в данном домене.
Обнаружение multihomed хостов
И наконец ещё одна вероятно очень мало известная техника, которая является просто незаменимой для нахождения путей в защищённые, возможно даже изолированные физически, сети. Это могут быть цеховые сети предприятий, напичканные контроллерами. Доступ к этой сети для злоумышленника означает возможностью влиять на технологический процесс, а для предприятия риск понести колоссальные убытки.
Итак, суть в том, что даже если сеть изолирована из корпоративной сети, то зачастую некоторые администраторы, то ли по своей лени, то ли ещё как то, любят поднимать ещё одну сетевую карту на своих ПК для доступа в эту самую сеть. При этом всё это происходит конечно же в обход всяческих правил корпоративных сетевых экранов. Удобно, да, но не очень безопасно, в случае если вас взломают, тогда вы станете мостом в данную сеть и понесёте ответственность.
Однако для злоумышленника тут есть одна проблема — найти того самого администратора, который включился в защищённую сеть подобным нелегальным образом. Более того, это непростая проблема и для самих безопасников сети. На больших предприятиях это поистине сложная задача, словно отыскать иголку в стоге сена.
В данной ситуации очевидных варианта для злоумышленника было бы два:
- попытаться использовать каждый ПК в корпоративной подсети в качестве шлюза до требуемой сети. Это было бы очень удобно, но такое редко встречается, т. к. на windows хостах ip forwarding почти всегда отключен. Более того подобная проверка возможна только внутри своей подсети, а также она требует от злоумышленника точно знать целевой адрес из изолированной сети
- пытаться удалённо заходить на каждый хост и выполнять банальную команду ipconfig/ifconfig. И тут не всё так гладко. Даже если злоумышленник заручился правами доменного администратора, то сетевые экраны и локальные фаерволы никто не отменял. Так что данная задача не на 100% автоматизируется. В результате остаётся мучительно заходить на каждый хост, преодолевая сетевые экраны (часто блокирующие именно 445/tcp порт), в надежде увидеть наконец желанный сетевой интерфейс.
Однако всё куда проще. Существует один чрезвычайно простой приём, который позволяет получить с того или иного хоста список сетевых интерфейсов. Допустим у нас есть некий хост:
это обратный ресолв ip-адрес → сетевое имя. Если же мы теперь попытаемся сделать прямой ресолв сетевое имя → ip-адрес:
то мы узнаем, что данный хост — это ещё и шлюз (по-видимому) в какой то другой сети. Стоит отметить, что в данном случае запрос шёл широковещательно. Иными словами, его услышат хосты только из подсети злоумышленника.
Если же целевой хост находится за пределами подсети, то можно послать таргетированный запрос:
В данном случае видно, что цель находится за пределами подсети злоумышленника. С помощью ключа -B было указано, что запрос следует слать на конкретный адрес, а не на широковещательный.
Теперь осталось лишь быстро собрать информацию со всей интересующей подсети, а не с одного адреса. Для этого можно использовать небольшой python-скрипт:
И через несколько секунд:
Именно выделенный хост, в данном импровизированном случае стал бы первой мишенью злоумышленника, если бы он преследовал сеть 172.16.1/24.
Повторяющиеся имена на разных ip свидетельствуют о том, что хост имеет так же две сетевые карты, но уже в одной подсети. Тут стоит отметить, что NetBIOS не разглашает alias-ы (которые легко могут быть вычислены через arp-запросы как ip с одинаковым mac). В данном случае ip-адреса имеют разные mac.
Другой пример использования данного приёма — общественный Wi-Fi. Иногда можно встретить ситуацию, когда среди гостевых устройств к общественной сети подключается персонал, работающий в закрытом корпоративном сегменте. Тогда с помощью данной разведывательной техники злоумышленник очень быстро сможет наметить себе путь для прохождения в закрытую сеть:
В данном случае среди 65 клиентов общественного Wi-Fi оказались две рабочие станции, имеющие дополнительный интерфейс, вероятно относящийся к корпоративной сети.
Если иногда между сетевыми сегментами или прямо на рабочих станциях наблюдается фильтрация трафика на 445/tcp порт, препятствующая удалённому входу на систему (удалённому исполнению кода), то в данном случае для разрешения имён по NetBIOS используется 137/udp порт, сознательное блокирование которого почти не встречается, т. к. от этого сильно пострадает удобство работы в сети, например, может исчезнуть сетевое окружение и т.п.
Как говорится, enumeration is the key
Есть ли от этого защита? Её нет, т. к. это и не уязвимость во все. Это лишь штатный функционал того немного что есть по умолчанию у windows (в linux поведение немного отличается). И если вы, вдруг несогласованно, в обход правил сетевой маршрутизации включились в закрытый сегмент, то злоумышленник вас обязательно найдет и сделает это очень быстро.
Hacking Articles
Raj Chandel’s Blog
NetBIOS and SMB Penetration Testing on Windows
NetBIOS (Network Basic Input/Output System)
NetBIOS is a service which allows communication between applications such as a printer or other computer in Ethernet or token ring network via NetBIOS name.
NetBIOS name is 16 digits long character assign to a computer in the workgroup by WINS for name resolution of an IP address into NETBIOS name.
Workgroup VS Domain
Workgroup: It is a peer-to-peer network for a maximum of 10 computers in the same LAN or subnet. It has no Centralized Administration, which means no computer has control over another computer. Each user controls the resources and security locally on their system.
Domain: It is a client/server network for up to 2000 computers anywhere in the world. The administrator manages the domain and its users and resources. A user with an account on the domain can log onto any computer system, without having the account on that computer.
NetBIOS provides three distinct services:
- Name service (NetBIOS-NS) for name registration and resolution via port 137.
- Datagram distribution service (NetBIOS-DGM) for connection less communication via port 138.
- Session service (NetBIOS-SSN) for connection-oriented communication via port 139.
Port | Protocol | Service |
135 | TCP | MS-RPC endpoint mapper |
137 | UDP | NetBIOS Name Service |
138 | UDP | NetBIOS Datagram Service |
139 | TCP | NetBIOS Session Service |
445 | TCP | SMB Protocol |
Port 135: it is used for Microsoft Remote Procedure Call between client and server to listen to the query of the client. Basically, it is used for communication between client- client and server -client for sending messages.
Port 137: the name service operates on UDP port 137. The name service primitives offered by NetBIOS are:
- Add name – registers a NetBIOS name.
- Add group name – registers a NetBIOS “group” name.
- Delete name – un-registers a NetBIOS name or group name.
- Find name – looks up a NetBIOS name on the network.
Port 138: Datagram mode is connectionless; the application is responsible for error detection and recovery. In NBT, the datagram service runs on UDP port 138. The datagram service primitives offered by NetBIOS are:
- Send Datagram – send a datagram to a remote NetBIOS name.
- Send Broadcast Datagram – send a datagram to all NetBIOS names on the network.
- Receive Datagram – wait for a packet to arrive from a Send Datagram operation.
- Receive Broadcast Datagram – wait for a packet to arrive from a Send Broadcast Datagram operation.
Port 139: Session mode lets two computers establish a connection, allows messages to span multiple packets, and provides error detection and recovery. In NBT, the session service runs on TCP port 139.
The session service primitives offered by NetBIOS are:
- Call – opens a session to a remote NetBIOS name.
- Listen – listen for attempts to open a session to a NetBIOS name.
- Hang Up – close a session.
- Send – sends a packet to the computer on the other end of a session.
- Send No Ack – like Send, but doesn’t require an acknowledgment.
- Receive – wait for a packet to arrive from a Send on the other end of a session.
Port 445: It is used for SMB protocol (server message block) for sharing file between different operating system i.e. windows-windows, Unix-Unix and Unix-windows.
For mail details read our previous article given below:-
Scanning open port for NETBIOS Enumeration
We are using nmap for scanning target network for open TCP and UDP ports and protocol.