Сегодня брандмауэры выступают в роли защитников границ между локальными сетями и огромной глобальной сетью. Они оставляют снаружи, незваных гостей и впускают внутрь только полномочных пользователей. Правильнее было бы называть их «крепостными стенами», но термин «брандмауэр» уже устоялся.
Я не собираюсь вести разговор о тонкостях устройства брандмауэров и о том, как они работают; об этом написаны многие тома. Я намереваюсь рассказать об общей концепции брандмауэров, о том, насколько эффективно они противодействуют угрозам и какое у них будущее.
Первое: брандмауэр – это граница, линия обороны. Подобно стенам замка он служит для отражения нападений. Точно так же, как и стены замка, он бесполезен против вооруженного мятежа внутри. Билл Чесвик дал брандмауэру следующее определение: «твердая скорлупа, окружающая мягкое ядро». Как только нападающий преодолеет брандмауэр, последний станет бесполезным. И поскольку (согласно исследованиям Института компьютерной безопасности в 1998 году) около 70% всех нападений происходит внутри сети, об этом определенно стоит подумать.
Конечно, можно установить внутренние брандмауэры для дополнительной защиты сегментов сети. Представьте себе замок с внешним и внутренним дворами.
Второе: до изобретения артиллерийских орудий хороший замок был неуязвим; не было возможности забраться на его стены по лестнице, проломить их или сделать под ними подкоп. Однако терпеливый военачальник всегда может устроить осаду замка. Он надеется, что, лишив жителей продовольствия, воды и отрезав от внешнего мира, заставит защитников капитулировать. Иногда это действовало быстро, но некоторые осады продолжались годами. Если в стенах замка был колодец, это давало больше шансов его защитникам. Если из него были прорыты секретные тоннели наружу, они очень помогали. Если у жителей замка начиналась чума, замок не мог помочь им. (Антисанитария победила многих отважных защитников.) Точно так же можно морить голодом сеть, разорвав ее соединения с внешним миром.
Третье: замок должен быть защищен со всех сторон. Не имеет смысла воздвигать отдельно стоящую стену, нападающие просто обойдут ее. Помните Линию Мажино? Франция выстроила ее, чтобы предотвратить немецкое вторжение. Это было сделано, когда была жива память о траншейных боях Первой мировой войны, и подобные укрепления казались неприступными. Но в последующие годы развитие производства танков изменило подходы к ведению войны, и немцы изобрели Блицкриг. Они просто обошли вокруг Линии Мажино, вторгшись во Францию с территории Бельгии. Точно так же брандмауэр должен служить барьером между внутренней сетью и всеми внешними точками доступа. Иначе нападающий просто обойдет брандмауэр и атакует какое-нибудь незащищенное подключение.
И наконец, четвертое: замкам нужны ворота. Бесполезно и глупо строить замок, в который никто не может проникнуть ни при каких обстоятельствах: даже королям иногда нужно выходить на прогулку. Торговцы, курьеры, даже обычные горожане должны иметь возможность свободно входить в замок и выходить из него. Следовательно, в замках были привратники, чьей обязанностью было пропускать людей, желающих войти, или, наоборот, не пускать их.
Великая Китайская Стена не произвела впечатления на Чингисхана. Ему приписывают слова: «Неприступность крепости зависит от отваги ее защитников». Пропускать все, что нужно, и при этом оставлять все, что может представлять опасность, снаружи является главной задачей любого компьютерного брандмауэра. Он должен действовать как привратник. Он должен выяснить, какой код представляет опасность, и не пропустить его. Он должен делать это без необоснованной задержки движения. (Для среднестатистического пользователя Интернета необоснованной задержкой является всякое заметное замедление.) Брандмауэр должен делать это, не раздражая законного пользователя. (Среднестатистический пользователь Интернета не способен отказаться от чего-либо наподобие загрузки новой интернет-игры от компании с названием «Подозрительное программное обеспечение» или прочтения электронной почты от ненадежной машины.) Но если привратник – брандмауэр – допустит ошибку, хакер может проникнуть внутрь сети и стать ее полновластным хозяином.
Есть три основных способа преодолеть брандмауэр. О первом я уже говорил: просто обойти его с другой стороны. В обширной сети много соединений. Большие фотокопировальные устройства часто обладают возможностью подключения к Интернету; в сетевом оборудовании обычно присутствуют порты обслуживания модемной связи. Часто компании подключают свои сети к сетям поставщиков, клиентов и т. п.; иногда намного менее защищенным. Сотрудники компании могут использовать модемы, чтобы иметь возможность работать дома. Одна супружеская пара из Силиконовой Долины периодически работала, не выходя из дома. Муж проверял свою электронную почту, в то время как жена занималась программированием, их компьютеры были объединены в маленькую домашнюю сеть. Внезапно компьютеры его компании начали обнаруживаться в сети ее компании, и наоборот.
Второе, и более сложное нападение – это украсть что-нибудь через брандмауэр. Чтобы сделать это, вы должны обмануть брандмауэр, чтобы он думал о вас, что вы хороший, честный и уполномочены сделать это. В зависимости от того, насколько хорош брандмауэр и насколько хорошо он был установлен, это просто, сложно или почти невозможно.
Основная идея в том, чтобы создать образец кода, который брандмауэр пустит внутрь сети. Код предназначен для того, чтобы использовать некий дефект в компьютерной системе, который позволит установить соединение между хакером снаружи брандмауэра и компьютером внутри него. Если все это срабатывает, хакер попадет внутрь.
Третье нападение – попытка захватить брандмауэр. Это похоже на подкуп и шантаж привратника. Как только вы сумеете заполучить его в свои ряды, он будет делать все, что вы пожелаете. Насколько это будет просто, зависит от брандмауэра. Некоторые брандмауэры работают с программным обеспечением, имеющим уязвимые места, что может помочь злоумышленникам. Некоторые используют в высшей степени ненадежные операционные системы, которые сильно облегчают задачу атакующим.
Так или иначе, разработка брандмауэра сегодня включает все, что нужно для проектирования умного привратника. На самом простом уровне брандмауэр – это маршрутизатор с последовательным набором правил, проверяющий сетевые потоки, проходящие через него, и регулирующий движение в соответствии с правилами. Примером могло бы послужить ограничение движения, основанное на адресе источника, или на адресе назначения, или на типе протокола.
Раньше это было относительно легко, но сегодняшним брандмауэрам приходится иметь дело с мультимедийным трафиком, загружаемыми программами, апплетами Java (переносимыми программами на Java, распространяемыми через вебстраницы) и другими видами разных непонятных вещей. Брандмауэр должен принимать решения, имея в наличии только неполную информацию: он должен решить, можно или нельзя пропустить пакет, до того как просматривать все пакеты в передаче.
Ранние брандмауэры представляли собой пакетные фильтры. Брандмауэр просматривал каждый пакет, после чего пропускал или тормозил его в зависимости от того, соответствует ли заголовок пакета своду правил, которые известны брандмауэру. Первые пакетные фильтры были достаточно «неразумными» и позволяли попадать внутрь целым партиям пакетов, которые было бы лучше оставить снаружи. Со временем они стали умнее.
Сегодня они изменяют параметры своего состояния в процессе исполнения: вместо индивидуального просмотра каждого пакета брандмауэры хранят информацию о состоянии сети и о том, какие типы пакетов ожидаются. Тем не менее у брандмауэров не такая уж долгая память, и медленные нападения зачастую могут пройти.
Сейчас есть достаточно хорошие фильтрующие брандмауэры, но они по-прежнему имеют множество недостатков. Первый и самый главный заключается в том, что они трудны для правильного конфигурирования, а неподходящая конфигурация часто ведет к уязвимости защиты. Многие вещи, которые должны бы блокироваться, допускаются внутрь по умолчанию. Брандмауэры не изменяют пакетов; таким образом, если пакет проходит внутрь, он может сделать все что захочет. Есть группа скрытых нападений на пакетные фильтры: только вообразите бестолковую охрану, которая старается остановить поток опасных писем в замок, разглядывая конверты.
Другой тип брандмауэров – это прокси-брандмауэр, или система, выполняющая преобразование из одного естественного формата в другой. Подумайте о двух стражниках, один из которых находится снаружи перед стеной замка, а другой внутри, за стеной. Стражник снаружи не знает ничего о внутренней части замка. Стражник внутри ничего не ведает о мире за стеной замка. Но они переправляют друг другу пакеты. Прокси-брандмауэры могут служить иллюстрацией этой метафоры. Некоторые прокси-брандмауэры работают только в качестве посредников: если кому-то, находящемуся внутри охраняемой брандмауэром области, необходим документ «из внешнего мира», программное обеспечение клиента спрашивает у брандмауэра (внутреннего стражника) об этом, и брандмауэр (наружный стражник) соединяется с нужным веб-сайтом и получает требуемый документ. Другие прокси-брандмауэры понимают, какие правила и виды протоколов они используют. Существуют прокси-брандмауэры с промежуточным накоплением – они хранят куски данных между передачами и могут фильтровать данные, основываясь на своде правил. Лучшие прокси-брандмауэры узнают свое окружение, и поэтому способны принимать более умные решения относительно пакетов.