Коллектив авторов - Защита от хакеров корпоративных сетей
Как автор уже упоминал ранее, нельзя доверять каждому, но кому-то довериться все-таки надо. Если пользующиеся доверием люди имеют тенденцию располагаться в контролируемой администратором безопасности сети, то управление входными (правом доступа) и выходными (правом выхода) точками контролируемой сети позволит ему определить сервисы, если они есть, с помощью которых внешний мир может прислать сообщения компьютерам его сети. Межсетевые экраны являются хорошо известным первым рубежом защиты сети от атаки злоумышленника. Они не позволяют принимать сообщения от недоверенных доменов. В большинстве случаев межсетевые экраны самостоятельно не могут доверять содержимому проходящих через них сетевых пакетов, потому что оно может быть фальсифицировано любым доменом, через который прошел пакет, или даже его отправителем. Тем не менее в передаваемом пакете есть небольшая порция данных, которая выдает собственника пакета. Она несет информацию об отправителе данных. Этой маленькой порции данных достаточно для однозначной идентификации сети. Ее достаточно для предотвращения, помимо многого другого, появления в сети пакетов, которые были присланы в сеть недоверенными внешними пользователями. Ее даже достаточно для защиты от передачи компьютерам сети пакетов от пользователей, которые, являясь на самом деле недоверенными пользователями, маскируются под доверенных.
Фильтрация на выходе (egress filtering) – последняя форма фильтрации. Она имеет решающее значение для предотвращения распространения распределенных атак отказа в обслуживании (атак типа DDoS), потому что на уровне провайдера Интернета не пропускает в глобальный Интернет пакеты с фальсифицированным в заголовке пакета адресом отправителя. Фильтрация на выходе может быть выполнена на устройствах Cisco с использованием команды ip verify unicast reverse-path. Подробнее об этом можно узнать по адресу www.sans.org/y2k/egress.htm.
Потенциальная возможность передать противоположному концу соединения относится к основному уровню безопасности, который должен быть реализован. Даже самый незащищенный, доступный всем сервис удаленного доступа не может быть атакован недоверенным пользователем, если у него не будет средств посылки сообщения уязвимой системе. К сожалению, нельзя считать сеть достаточно защищенной, полагаясь только на межсетевой экран, который не позволяет послать кому угодно сообщение, угрожающее системе в сети. Вероятнее всего, до тех пор, пока не будет использован воинствующий вариант настройки межсетевого экрана (читайте межсетевой экран, работающий по радиоканалу (air firewall) или полное отключение соединений между локальной сетью и глобальным Интернетом), всегда найдутся дополнительные пути пересылки опасных сообщений. В отчете Министерства обороны далее пишется:
...«В основе планирования реакции системы должен лежать принцип постепенного сокращения возможностей системы, то есть система или сеть должны утрачивать свои функциональные возможности постепенно, сравнивая серьезность направленной против нее атаки с возможностью защиты от нее».
Способность ответить: «Система может мне ответить?»
Ответить – это следующий шаг, который необходимо выполнить вслед за передачей информации. Всего лишь несколько протоколов предусматривают некоторую форму переговоров между отправителем и получателем данных. Некоторые из них ограничиваются определением объявляющих что-либо сообщений, которые рассылаются по сети от случая к случаю или по требованию заинтересованного в передаче хоста и которые посылаются тому, кто будет готов участвовать в передаче информации. Если для обмена данными между компьютерами, состоящего из фазы передачи и фазы приема данных, требуется провести переговоры, то у системы должна быть возможность передать свою реакцию на содержимое данных, полученных от другого компьютера сети. Подобная возможность принципиально отличается от возможности простой передачи данных. Она находится на более сложном уровне, и автор назвал ее способностью ответить (ability to respond).
Общепринята методика посылки ответа на принятые данные для проверки истинности сетевого адреса отправителя. Многие с большой охотой обращают внимание на адреса отправителей как на средство обеспечения неприкосновенности сетей и подавления атак фальсификации. Всегда найдется сеть, которая будет утверждать, что она лишь передала произвольный пакет, хотя на самом деле она породила его.
Для обработки подобной ситуации во многих протоколах предусмотрена попытка аннулирования подложного адреса отправителя посредством передачи ответного сигнала предполагаемому отправителю пакета. Если предполагается передача ответа, содержащего некоторые сведения о принятом сигнале, то это подразумевает некоторую форму интерактивного взаимодействия.
В протоколе TCP данный уровень защиты является стандартным. Он встроен в протокол в виде трехэтапного установления соединения. По существу трехэтапное установление соединения выглядит следующим образом. «Здравствуйте, я – Боб». «А я Алиса. Вы говорите, что Вы – Боб?» «Да, Алиса, я – Боб». Если Боб сообщает Алисе: «Да, Алиса, я – Боб», а Алиса перед этим с Бобом не разговаривала, то протокол может решить, что имеет место атака спуфинга вслепую (blind spoofing). (В действительности протоколы редко ищут случаи нападения. Скорее они функционируют только при отсутствии нападений. Это происходит из-за того, что большинство протоколов предназначены для установления соединения, а не для отражения атаки. В результате это приводит к невозможности работы по протоколу из-за аварийного завершения его функций, за исключением случаев обработки данных, предусмотренных протоколом. В итоге протоколы повышают уровень своей безопасности простым способом: значительно сокращают число хостов, которые могли бы легко атаковать их. Простое сокращение числа хостов, которые могли бы осуществить прямое нападение «с любой машины в Интернете» на «любую машину Интернета при наличии десятка подсетей между сервером и клиентом» часто на многие порядки сокращает число хостов, способных к эффективной атаке!)
Если на сетевом уровне рассматривать направленную против сети фальсификацию, целью которой является нейтрализация способности системы ответить на переданные ей данные, то существуют два типа атаки спуфинга: спуфинг вслепую и активный спуфинг (active spoofs). При спуфинге вслепую злоумышленник имеет смутные представления о входящем и выходящем трафиках атакуемого хоста (в особенности относительно неопознанных им переменных, с помощью которых протоколом предусмотрен ответ получателя данных их отправителю). При активном спуфинге у злоумышленника, по крайней мере, есть возможность прослушивания выходного трафика атакуемого хоста и, вероятно, возможность влиять в той или иной мере на трафик. Эти два вида атаки далее будут обсуждены отдельно.
Спуфинг вслепую. Для типовой реализации атаки спуфинга вслепую более чем достаточно того, что было сказано в главе ll по поводу перехвата сеанса. Но чисто теоретически спуфинг вслепую преследует одну цель – найти способ предсказания изменений значения прогнозируемой переменной, а затем установить столько возможных соединений, сколько протокол может выдержать, и случайным способом правильно выбрать одно из них для успешного ответа на данные, которые никогда не были получены.
Одним из наиболее интересных результатов, полученным при развитии спуфинга вслепую, является открытие способов сканирования удаленных хостов вслепую. Конечно, невозможно проверить соединение с выбранным хостом или портом без посылки ему пакета и анализа на него реакции (нельзя заранее знать реакцию на пакет, который фактически не был отправлен), но сканирование вслепую позволяет исследовать ничего не подозревающий хост без его ведома. Попытки установления соединения проводятся обычным способом, но если они исходят от другого компьютера, так называемого компьютера зомби, то они фальсифицированы. Подобные зомби имеют связь с Интернетом, которая практически ими не используется, как, например, забытый всеми сервер. Поэтому злоумышленник может предполагать, что весь входящий и исходящий трафик этого зомби является результатом его косвенных или непосредственных действий.
Конечно, косвенный трафик является результатом возврата зомби пакетов исследуемому хосту.
При сканировании вслепую исследуемый хост должен как-то знать о получении зомби его положительных ответов. Антирез (Antirez) обнаружил способ узнать об этом, который был реализован хакером Федором (Fyodor) при построении сетевых схем nmap в виде опции —si. В открытом Антирезом (Antirez) способе используется поле IPID. На уровне протокола IP поле IPID позволяет одному пакету ссылаться на другой, устанавливая тем самым ссылки на фрагментированные пакеты. Во многих операционных системах поле IPID после отправки каждого пакета увеличивается на l. (В операционной системе Windows приращение значения поля IPID происходит в соответствии с прямым порядком байтов (little-endian). Прямой порядок байтов – формат хранения и передачи двоичных данных, при котором сначала (первым) передается младший (наименее значимый) бит (байт). Поэтому на самом деле значение поля увеличивается на 256. Но на суть способа это не влияет.) В протоколе TCP предусмотрено, что при положительном ответе хоста на запрос установления соединения по указанному порту (получении сообщения c установленным в заголовке пакета флажком SYN – пакета SYN) он возвращает сообщение с установленными в заголовке пакета флажками подтверждения запроса на установления соединения SYN и ACK – пакета SYNIACK. Но когда зомби, который никогда не пытался соединиться с кем-либо, получает пакет SYNIACK, то он сообщает отправителю пакета о завершении сеанса связи с ним и завершает соединение. Это выполняется при помощи посылки пакета, в заголовке которого установлены флажки RST и ACK – пакета RSTIACK. В рамках подобной передачи никакие данные больше не пересылаются. Атакуемый хост посылает зомби пакет RSTIACK, если порт закрыт, а зомби ничего не присылает в ответ.