Как работает брандмауэр nezumi Спецвыпуск: Хакер, номер #058, стр. 058-066-4 Спустившись на одну ступеньку вглубь, обнаруживаем драйвер tcpip.sys, сосредоточивший в себе реализацию протоколов TCP/IP. Это так называемый уровень TDI (Transport Data Interface - интерфейс передачи данных), также называемый "транспортным" уровнем или уровнем сетевых протоколов. Здесь же расположен драйвер NWLNKIPX.SYS, реализующий протокол IPX и другие сетевые драйверы, которые давно отошли в мир иной, и представляющий только исторический интерес. Когда компьютер работает в режиме маршрутизатора или шлюза, весь трафик идет через сетевые драйверы (главным образом через tcpip.sys) и на верхних уровнях просто не появляется (впрочем, если сетевая карта поддерживает режим FFP, трафик может не дойти и до tcpip.sys). Зловредные программы прикладного уровня могут вызывать tcpip.sys напрямую (или через высокоуровневую обертку wshtcpip.dll), минуя ws2_32.dll. Для установки TCP/IP-фильтра необходимо перехватывать все вызовы к устройствам \Device\RawIp, \Device\Udp и \Device\Tcp. Это достигается либо вызовом IoAttachDevice, либо прямой модификацией указателей таблицы диспетчеризации. Далее ступенькой ниже обосновался NDIS-драйвер (Network Driver Interface Specification - спецификатор интерфейса сетевых драйверов), представляющий собой mini-port. Грубо говоря, это библиотека функций, позволяющая драйверам сетевых протоколов "гонять" сетевые пакеты, не вникая в детали реализации. Ниже NDIS находится только драйвер сетевой карты, поэтому брандмауэр, работающий на NDIS-уровне, перехватывает практически весь трафик, который только проходит через компьютер. "Практически" - потому что обращения к обратной петле (loop back) через NDIS не проходят и остаются незамеченными, то есть, если дать команду ping 127.0.0.1, пакетный фильтр даже не пикнет. А это значит, что NDIS-брандмауэры хронически не способны обнаруживать подключения к локальным службам. Если на компьютере установлен Proxy-сервер (а он установлен практически на всех домашних сетях), любое приложение может свободно выходить в Сеть и гулять по любым адресам, осуществляя информационный обмен во всех направлениях. К тому же на NDIS-уровне не разберешься, что за приложение ломится в сеть, а без этого невозможно принять решение, пропускать его или нет. Грамотный брандмауэр представляет собой целый конгломерат пакетных фильтров разных уровней, сложным образом взаимодействующих между собой. И это еще не подводная часть айсберга. Драйвер сетевой карты опирается на драйвер шины, через который проходят все "честные" вызовы. На уровне ядра хакер может напрямую обращаться к карте через порты ввода-вывода или вклиниваться в PPP-драйвер, реализованный как WAN mini-port, а это будет пониже NDIS, по крайней мере, формально. К примеру, Dial-Up (он же RAS - remote access service, по-русски "сервис удаленного доступа") реализован на прикладном уровне, и злоумышленник легко может вклиниться в него! |