В сетях возможны более тонкие способы нападений такого типа. Одна компания может иметь надежную систему сетевой безопасности. А другая компания может не обеспечивать ее должный уровень. Если они взаимодействуют по сети, это означает, что сеть имеет слабое звено, которое нуждается в защите.
Глубинная (многоуровневая) защита – другой универсальный принцип безопасности, который применяется в области компьютерных технологий, так же как и в других областях.
Защита территории (дверные замки и сигнализация на окнах) более эффективна, если она используется совместно с системой слежения внутри дома. Система защиты кредитных карточек от мошенничества работает лучше, если она дополняется проверкой подлинности и системой отслеживания подозрительных расходов. Брандмауэр в сочетании с системой обнаружения вторжения и сильной криптографической защитой приложений будет намного более надежным, чем просто брандмауэр.
На протяжении всей книги я пытался донести до читателя мысль, что защита настолько надежна, насколько прочно ее самое слабое звено, и предыдущее утверждение, кажется, противоречит этому принципу. В действительности все зависит от исполнения. Вспомните схемы нападений: безопасность группы узлов ИЛИ определяется надежностью защиты самого слабого узла, в то время как в случае конечных узлов И защита каждого из них усиливает защиту их совокупности.
Два брандмауэра, каждый из которых защищает отдельную точку входа в сеть, – это не глубинная защита. Для успешного нападения достаточно преодолеть любой из этих брандмауэров. Защита по глубине будет реализована в том случае, если брандмауэры установлены последовательно один за другим: тогда нападающему придется по очереди иметь дело с двумя уровнями защиты. Меня всегда поражает, когда я вижу сложные сети, точки входа в которые порознь защищают брандмауэры различных марок или даже различные конфигурации одного и того же брандмауэра. Это совершенно лишено смысла.
Многие системы устроены таким образом, что если система выходит из строя, пользователь обращается к резервной системе, хоть и менее безопасной. Например, в Соединенных Штатах система VeriFone используется при совершении сделок по кредитной карточке. Когда клерк проверяет вашу карту, VeriFone обращается к базе данных и проверяет, не украдена ли карта, достаточно ли денег у вас на счете и т. д. Вспомните случаи, когда терминал не работал по какой-либо причине: или он был сломан, или прерывалась телефонная связь. Разве торговец отказывался обслуживать вас? Конечно, нет. Он вытаскивал бумажные бланки и оформлял сделку по старинке.
Многие нападающие пытаются взломать защиту «кавалерийской атакой»: атаки, приводящие к отказу в обслуживании, могут повторяться снова и снова. Я уже говорил о грабителях, которые заставляют постоянно срабатывать сигнализацию для того, чтобы ее в конце концов отключили. Есть и более тонкие способы нападения. Немногие люди дисциплинированы настолько, чтобы не воспользоваться обычной связью, когда они не могут пользоваться безопасной. Даже военные, которые, как принято считать, подходят к этому серьезно, постоянно повторяют подобные ошибки.
Нужно, чтобы системы в случае отказа становились более защищенными, а не менее. Если в банкомате перестанет работать система проверки личного идентификационного номера, произойдет отказ, но при этом не посыплются деньги из щели. Если сломается брандмауэр, то это приведет к тому, что он перестанет пропускать любые пакеты данных. Когда повреждается слот-машина, она не должна проливать монетный дождь на поднос выплаты.
Тот же самый принцип используется в технике безопасности и называется отказоустойчивостью (безаварийный отказ). Если выйдет из строя микропроцессор в автомобиле, это не должно привести к разгону до максимальной скорости. Если произойдет отказ в системе управления ядерной ракетой, это не должно привести к ее запуску. Безаварийный отказ – хорошее правило проектирования.
Снова и снова в этой книге я выступаю против безопасности, основанной на секретности: закрытая криптография, закрытый исходный код, секретные операционные системы. Секретность так же может иметь место, но не в продуктах, а в том, как они используются. Я называю это непредсказуемостью.
Одно из преимуществ защищающихся перед нападающими состоит в знании местности. Армия не передает врагу сведений о расположении своих танков, установок противовоздушной обороны и батальонов. Нет никакой причины сообщать каждому интересующемуся сведения о топологической схеме вашей сети. Слишком многие компьютеры в ответ на любой запрос выдают информацию об используемой операционной системе и номере версии. Этому нет разумного обоснования. Будет намного лучше, если при регистрации пользователя в системе на экране появится сообщение:
«Предупреждение: частный компьютер. Использование этой системы предусматривает контроль безопасности. Все действия пользователя и сведения о нем регистрируются, включая IP-адрес и имя хоста».
Предоставьте нападающим самим разбираться, можете ли вы следить за ними.
Если вы строите частную систему безопасности (например, электронных банковских платежей), то важно использовать сильный, открытый, надежный алгоритм шифрования. Когда вы сделаете свой выбор, незачем объявлять о нем.
Если вы используете брандмауэр, нет никакого смысла сообщать всему миру настоящее имя хоста и имя пользователя. Это также принцип построения системы мер безопасности (сетевой сигнализации, приманок и других). Администратор сети знает, как она работает и что означают те или иные действия. Когда кто-то копается в фиктивном счете, администратор знает, что это – злоумышленник. Нападающий не должен знать, где и какое оборудование работает, когда и какой протокол можно использовать, какие порты и при каких условиях будут открыты. Поразительно, как часто серверы, приложения и протоколы объявляют на весь мир: «Привет! Я – служба V2.05». Многие автоматические средства взлома в поисках определенных версий программного обеспечения просматривают машины, о которых известно, что у них имеются уязвимые места. Если сети будут непредсказуемы, нападающие не смогут так свободно их огуливать. Не располагая нужной информацией, намного труднее обозначить цель и определить возможные виды атак. Разница такая же, как между прогулкой по солнечном лугу в полдень и по зарослям колючего кустарника в полночь.
Столь же непредсказуемы должны быть и меры реагирования. Ракета «Патриот» недостаточно эффективно поражала в небе иракские «Скады», но вы никогда не узнали бы об этом из официальных сообщений Пентагона. Если Соединенные Штаты знали, насколько была неэффективна противовоздушная оборона, это не означало, что нужно сообщать об этом врагу.
Непредсказуемость – мощное средство, используемое террористами, специалистами по «промыванию мозгов» при авторитарных режимах и теми, кто еще только рвется к власти. Но оно также хорошо работает в сфере компьютерной безопасности.
Я уже говорил в предыдущей главе: сложность – злейший враг безопасности. Система настолько защищена, насколько защищено ее самое слабое звено. Поэтому систему с меньшим количеством связей легче обезопасить. Эйнштейн говорил: «Все должно быть настолько просто, насколько это возможно, но не более».
Народная мудрость «Не кладите все яйца в одну корзину», казалось бы, противоречит этому утверждению. Так оно и есть, и на этом принципе строится защита по глубине. Но помните, что охранять несколько корзин сложнее, чем одну. Когда речь идет о безопасности, лучше следовать совету одного героя Марка Твена: «Сложите все яйца в одну корзину и присматривайте за ней».
Обеспечить безопасность намного легче, если приходится иметь дело с надежными и разумными пользователям, и намного тяжелее – с невежественными и имеющими злой умысел. Меры безопасности, не понятые и не согласованные к каждым, не будут работать. Помните: самыми трудными проблемами безопасности являются те, которые связаны с людьми, а самыми легкими – те, что связаны с битами. Несомненно, должна существовать защита от нападений изнутри, но в основном ваши сотрудники – это ваши союзники. Заручитесь их поддержкой, насколько это возможно.