Защита от хакеров корпоративных сетей
Шрифт:
Идеальная схема? Нет. Двум хостам для установления связи и передачи данных между собой третий хост не нужен. Это чересчур плохая попытка хакинга, обусловленная несовершенством конструкции межсетевого экрана. Кроме того, известны различные проблемы, сопутствующие только что описанному способу.
Механика чисел: полуслепая (semiblind) фальсификация пакетов SYNIACK. Хотя брокер подключения действительно информирован относительно времени и главным образом места предполагаемой фальсификации, есть нетривиальные проблемы, сопутствующие кровавым деталям того, что на самом деле было отправлено. Не рассматривая синхронизацию и размещение пакета, можно сказать, что фактический пакет инициализации соединения SYN содержит два блока случайных данных, которые должны быть полностью согласованы с межсетевым экраном. Иначе нельзя будет получить ответ. К этим данным относятся номер порта отправителя и начальный порядковый номер.
Сначала несколько слов о номере порта отправителя. Это число из диапазона от 0 до 65 535, которое используется клиентом для выделения нужного соединения среди любого числа
Применительно к разбираемому случаю это означает, что Алисе необязательно знать номер порта, по которому, как предполагается, будет отослан пакет SYNIACK. В обычном режиме номером порта отправителя будет считаться тот порт, который она установила как свой порт получателя, а портом получателя – тот порт, который она установила как свой порт отправителя. Выбранные номера портов теперь должны быть отосланы по некоторому другому порту отправителя, о котором знает только межсетевой экран и маршрутизатор Интернета. Что Алиса в этом случае может сделать?
К счастью, многие реализации трансляции сетевых адресов будут пытаться поставить в соответствие локальному порту числа. Может быть, Алисе не придется вообще что-либо делать до тех пор, пока она не столкнется с уже используемым портом. Те, кто изменяют номер порта, почти всегда увеличивают его при каждом подключении. Это позволит Алисе использовать тривиальный способ для косвенного сообщения брокеру ее соединения номера порта, который будет использовать ее межсетевой экран. Прямо перед посылкой своего обреченного пакета SYN Алиса устанавливает соединение с брокером. Тем самым она информирует брокера о двух вещах. Во-первых, Алиса неявно предоставляет глобальный маршрутизируемый адрес своего межсетевого экрана, снимая с себя обязанность найти его самостоятельно. Во-вторых, Алиса предоставляет брокеру уменьшенный на единицу номер порта отправителя, записанный в пакете SYN, который ее межсетевой экран оттранслирует от ее имени. Ввиду предположения назначения последовательных значений номеров порта при последовательных соединениях и отсутствия попыток открытия новых соединений еще кем-либо за короткий промежуток времени между установлением связи брокером и посылкой пакета SYN брокер сможет сравнительно легко определить номер порта.
Конечно, никакое предположение не гарантирует правильного результата, но проверить его можно. Путем быстрого открытия многочисленных соединений к брокеру и контроля номеров порта, которые были выбраны при трансляции сетевого адреса, брокер сможет определить, являются ли выбранные порты отправителя полностью случайными, последовательными или каким-то образом предсказуемыми. Если номера портов полностью случайны, то хм это не является невозможным, но это откровенно плохое решение. Номера портов отправителя, как уже говорилось, расположены в диапазоне от 0 до 65 535. Под них отводится 16 бит энтропии. Без подсказки номера порта, который следует выбрать, можно только сохранять посланные пакеты SYMIACK со случайными номерами портов, пока не будет найден тот номер порта, по которому передавались данные. Но для этого для каждого удачно угаданного номера порта потребуется послать в среднем около 320 000 пакетов (вероятно, получить ответ удастся после перебора примерно половины типового набора). В полном объеме это неосуществимо. Но если будет послано достаточное число обреченных SYN-пакетов, то они займут различные номера портов отправителя по одному и тому же IP-адресу, полученному в процессе трансляции сетевых адресов, и каждый из них будет считаться успешным соответствием в процессе согласования посланных пакетов SYMIACK.
Сколько для этого нужно пакетов? Удивительно, но всего лишь несколько. Ищется совпадение среди 65 000 возможностей. Согласно теории, прежде чем будет найдена подходящая пара с шансами на успех не менее 50 %, следует перебрать число вариантов, приблизительно равных квадратному корню из всех возможных вариантов. (Это известно как парадокс дня рождения (Birthday Paradox), который назван так потому, что у собранных в комнате двадцати человек есть более пятидесятипроцентные шансы встретить в этой же комнате двух человек с одним и тем же днем рождения. Это несколько противоречит ожиданиям. Для каждого из находящихся в комнате человека шанс родиться в один из дней года оценивается как 365:1, но вполне логично, что чем больше в комнате людей, тем больше шансы на совпадение их дней рождения с заданной датой.) В случае с Алисой, посылающей 256 обреченных пакетов SYN, и брокером, фальсифицирующим поступившие от Боба 256 пакетов SYNIACK, шанс получения Алисой правильного пакета SYNIACK от Боба превышает 50 % (однако при этом Боб пострадает от шквала 255 TCP пакетов сброса соединения RST).
Несколько замечаний по поводу того, что в то время как число пакетов является большим, размер этих пакетов сравнительно невелик. Пустой пакет (пакет, не несущий содержательной информации) занимает в байтах немногим больше
Одна очень важная проблема заключается в необходимости знать, какие из многочисленных попыток установления соединения закончились успешно. Помните, трансляция сетевых адресов межсетевыми экранами осуществляется в обратном порядке: то, что видит внешний мир, преобразуется в то, что должна видеть частная сеть – в данном случае ее собственный частный IP-адрес и ее собственный выбранный номер локального порта. Это означает, что Алиса не может, только глядя на номер локального порта, узнать, какой пакет через него был получен. Алиса также не может спросить об этом у брокера. Брокер не знает этого, он только посылает пару сотен пакетов. Откуда он может узнать о пристрастиях и особенностях работы межсетевого экрана Алисы? Ответ должен был содержаться где-нибудь в пакете. Но где? Автор полагает, что, скорее всего, в поле IPID. Редко используемое поле используется для отличия одного пакета IP от другого независимо от протоколов более высокого уровня. Это поле может принимать одно из значений в пределах от 0 до 65 535. Будучи редко использованным, поле, вероятно, большинством межсетевых экранов не изменяется и, в отличие от номера локального порта, не транслируется. Так, если полю IPID будет присвоено значение номера порта адресата в пакете SYMIACK, то откуда бы пакет SYMIACK ни поступил, он сохраняет отметку, которая позволит ему передавать внутри заголовка IP нужные данные.
Но почему так много внимания следует обращать на номера портов? Потому что пока не будет достигнута симметрия номеров портов, нельзя будет установить соединение. При обычной установке TCP-соединения инициирующий соединение хост использует некоторый случайный номер порта отправителя для подключения к хорошо известному порту адресата, а адресат меняет эти номера портов. Таким образом, ответные пакеты поступают от хорошо известного номера порта к случайному порту.
После установки соединения обязательно нужно достичь зеркальной симметрии номеров портов: номер порта адресата должен стать номером порта отправителя, и наоборот. Всегда известен номер порта, по которому данные отправляются, но не обязательно известно, кто их прослушивает. В конечном счете данные установления связи возвращаются с фальсифицированного сервера обратно, но при этом редко есть возможность установить, какой из возможных портов был прослушан. В данном случае возможность выбора даже не рассматривается. Счастье, что вообще есть связь. Более проблематичной является борьба за получение успешного пакета SYMIACK по заданному номеру порта отправителя. Очень важно, чтобы первоначально выбранный порт назначения соответствовал порту отправителя на другом конце соединения и был бы воспринят его межсетевым экраном. Если на той стороне соединения столько же проблем при получении доступа к определенному порту отправителя на межсетевом экране, что и на этой, то число требуемых попыток для установления соединения быстро приравняет к нулю любой шанс просачивания сессии TCP через межсетевой экран. Конечно, все возможно, только шансы того, что звезды и порты выровняются в зеркальную структуру, становятся чрезвычайно низкими. Это немного похоже на наши первоначальные условия – ограничения в управлении установления связи вплоть до случая подключения более ограниченного в своих возможностях сайта к более либеральному сайту.
И самое плохое. В случае использования межсетевого экрана Cisco PIX с отсутствующей опцией norandomseq порядковые номера, которые нужны для ответа каждому пакету TCP, становятся непредсказуемыми при переходе от одной сессии к другой. Поскольку порядковые номера занимают 32 бита, то потребуется 16 бит энтропии (65 000 попыток) для достижения пятидесятипроцентного шанса получения пакетов SYMIACK. Автору остается только пожелать читателю удачи в этом начинании.
Конечно, по-прежнему остается нерешенным один из самых больших вопросов. Как раньше использовали рассмотренные системы? Наиболее вероятной причиной того, что способ обреченного установления связи не был разработан ранее, является то, что раньше это было невозможно. Нет никаких параметров сокета, которые позволяют определять, когда пакет должен прекратить свое существование. Уже не говоря о параметрах, которые бы точно определяли все выполняемые компоненты процедуры установления связи. Этого не было до второй половины 90-х годов, когда стало очевидным, что простое нападение на сайт большим числом запросов на соединение (лавиной пакетов SYN) от несуществующих хостов (которые не отвечают пакетами RSTIACK) явилось причиной проблем большинства сетевых стеков. Доступные инструментальные средства определяют технологию. Даже если несовершенные инструментальные средства к настоящему времени устарели, автор все еще не знает ни о каких системах, которые составили бы альтернативу ядру операционной системы при выполнении функций сетевых сервисов. Программа DoxRoute является первым и действительно внушающим доверие средством тонкой настройки сетевого трафика. Наиболее вероятно, что первыми системами, реализующими обсужденные в секции способы, будут решения в стиле программы DoxRoute с использованием библиотек libnet/libpcap. Хотя могут быть и другие решения.