Вы здесь

Защита от хакеров корпоративных сетей. Глава 3. Классы атак ( Коллектив авторов, 2005)

Глава 3

Классы атак

В этой главе обсуждаются следующие темы:

Обзор классов атак

Методы тестирования уязвимостей

· Резюме

· Конспект

· Часто задаваемые вопросы

Введение

Об опасности атаки судят по ущербу, который может быть нанесен скомпрометированной системе в результате нападения. Для домашнего пользователя худшее, что может произойти, – это стать жертвой атаки, приводящей к запуску программы злоумышленника на его компьютере. В то же время для компаний электронной коммерции опаснее атака, приводящая к отказу в обслуживании (DoS-атака, DoS – denial of service) или утечке информации, потому что она чревата более тяжкими последствиями. Любая уязвимость системы, которая может привести к компрометации, оценивается применительно к одному из известных классов атак. Зная сильные и слабые стороны класса атаки, можно предварительно оценить как его опасность, так и сложность защиты от него.

В этой главе рассматриваются классы атак, извлекаемая злоумышленником выгода из их осуществления и возможный ущерб, наносимый ими.

Обзор классов атак

Каждая атака принадлежит к определенному классу атак. Последствия атаки могут быть самыми различными: атакованная система может быть выведена из строя или удаленный злоумышленник сможет полностью контролировать ее. О последствиях атак речь пойдет в специальном разделе этой главы. Сначала рассмотрим классификацию атак, в основу которой положен наносимый ими ущерб.

Можно выделить семь классов атак, последствия которых отражают общие критерии оценки проблем безопасности:

• отказ в обслуживании (Denial of service);

• утечка информации;

• нарушения прав доступа к файлу;

• дезинформация;

• доступ к специальным файлам / базам данных;

• удаленное выполнение программ (Remote arbitrary code execution);

• расширение прав (Elevation of privileges).

Отказ в обслуживании

Что собой представляет атака, приводящая к отказу в обслуживании (DoS-атака)? О DoS-атаке говорят в том случае, когда в результате действий злоумышленника ресурс заблокирован или его функциональные возможности существенно ограничены. Другими словами, атака препятствует доступности ресурса его постоянным авторизованным пользователям. Атаки этого класса могут осуществляться как локально на автономной системе, так и удаленно через сеть. Они направлены на ограничение функциональных возможностей процессов, уменьшение объема запоминаемой информации, разрушение файлов. Подобные атаки преследуют цель сделать ресурс непригодным для работы или добиться завершения работы системы или процессов. Рассмотрим DoS-атаки подробнее.

Локальная DoS-атака

Локальная DoS-атака встречается часто, и ее во многих случаях можно предотвратить. Несмотря на большой ущерб от атак этого класса, все же предпочтительнее иметь дело именно с ними. При грамотно реализованной системе безопасности этот класс атак легко отследить, а злоумышленника – идентифицировать.

Локальная DoS-атака наиболее часто преследует следующие три цели: существенное снижение функциональных возможностей процесса, исчерпание места на диске и истощение индексных узлов (index node (inode) exhaustion).


Снижение функциональных возможностей процесса

По сути, каждый локальный отказ в обслуживании – это существенное снижение функциональных возможностей процессов вследствие снижения производительности системы из-за ее перегрузки в результате атаки злоумышленника. Перегрузка системы наступает из-за порождения процессов с повторяющейся структурой, которые пожирают доступные ресурсы хоста, переполнения таблицы системных процессов или из-за перегрузки центрального процессора, опять же в результате порождения слишком большого количества процессов.

Известен вариант атаки этого класса, основанный на недавно найденной уязвимости в ядре Linux. Создавая систему вложенных символических ссылок, пользователь может помешать планированию выполнения других процессов во время разыменовывания символической ссылки. После создания вложенных символических ссылок, пытаясь выполнить один из связанных файлов, планировщик процесса блокируется, не позволяя другим процессам получить процессорное время. Ниже представлен исходный текст файла mklink.sh, который создает все необходимые ссылки в системе, подвергнувшейся нападению (эта проблема была полностью исправлена только в ядре Linux версии 2.4.12):



Еще один вариант локальной DoS-атаки получил название fork bomb – развилочная бомба (fork bomb – самовоспроизводящаяся командная строка, способная в конечном итоге уничтожить все другие записи в таблице процессов командной системы). Эта проблема не только операционной системы Linux. Она не решена и в других операционных системах на различных платформах. Развилочную бомбу легко реализовать на языке командной оболочки shell или языке C. Код бомбы на языке командной оболочки shell представлен ниже:



Код на языке С следующий:



В любом из вариантов злоумышленник может снизить эффективность работы процесса как незначительно, лишь замедлив работу системы, так и весьма сильно, перерасходовав или монополизировав ресурсы системы и вызвав тем самым ее аварийный отказ.


Переполнение диска

Цель другого класса локальной DoS-атаки состоит в том, чтобы полностью заполнить диск. Емкость диска – конечный ресурс. Ранее дисковая память была очень дорогим ресурсом. В настоящее время цена хранения информации на диске значительно снизилась. Несмотря на возможность решения многих задач хранения информации при помощи дисковых массивов и программ, контролирующих хранение информации, емкость дисковой памяти продолжает оставаться узким местом во всех системах. Программные решения типа выделения квот хранения информации каждому пользователю позволяют лишь смягчить эту проблему.

Этот вид атак преследует цель сделать невозможным создание новых файлов и увеличение размера существующих. Дополнительная проблема состоит в том, что некоторые UNIX-системы завершаются аварийно при полном заполнении корневого раздела. Хотя это нельзя характеризовать как конструкторский дефект UNIX, правильное администрирование системы должно предусматривать отдельный раздел для журналов регистрации типа /var и отдельный раздел для пользователей типа директории /home на Linux-системах или директории /export/home на системах Sun.

Если при планировании работы с диском не было предусмотрено разбиение диска на раздел(ы) для пользователей и, отдельно, раздел(ы) для журналов регистрации, то злоумышленник может воспользоваться этим типом DoS-атаки для достижения аварийного отказа системы. Он может также воспользоваться этим типом атаки для затруднения работы пользователей: при генерации большого количества событий, регистрируемых в системном журнале syslog, расходуется отведенная разделу журналов регистрации дисковая память, и при ее исчерпании нельзя зарегистрировать новые события в журнале syslog.

Реализация такой атаки тривиальна. Пользователю локального компьютера достаточно выполнить следующую команду:



Эта команда свяжет файл устройства /dev/zero (который просто генерит нули) с файлом злоумышленника. Команда будет продолжаться до тех пор, пока пользователь не прекратит ее выполнение или не будет заполнен диск.

Для усиления разрушительного эффекта атаки, направленной на исчерпание дисковой памяти, можно воспользоваться идеей бомбежки почты. Хотя это старая идея, на практике она почти не применяется. Возможно, из-за того, что на основе анализа заголовков пакетов протокола SMTP путь электронной почты легко проследить. И хотя для передачи пакетов могут использоваться открытые ретрансляторы (open relays), поиск отправителя почтовой бомбы – не очень сложная задача. Поэтому большинство бомбардировщиков почты окажется или без Интернета, или в тюрьме, или одновременно и там, и там.


Истощение индексных узлов

Несмотря на разные цели, атаки, направленные на истощение индексных узлов, похожи на предыдущий тип DoS-атаки, ориентированный на переполнение диска. Локальные DoS-атаки истощения индексных узлов изначально ориентированы на тот или иной тип файловой системы. Индексные узлы – обязательная часть файловой системы UNIX.

Индексные узлы содержат важную информацию файловой системы. Как минимум, это сведения о владельце файлов, групповом членстве файлов, их типе, разрешениях, размере и адресах блоков, содержащих данные файла. При форматировании файловой системы создается конечное число индексных узлов для обработки индексов файлов каждой группы.

Ориентированные на истощение индексных узлов DoS-атаки стараются использовать все доступные индексные узлы раздела. Истощение этих ресурсов создает ситуацию, подобную той, которая происходит в случае нехватки места на диске. В результате система не может создавать новые файлы. Этот класс атак обычно используется для нанесения ущерба системе и препятствования регистрации системных событий, особенно действий злоумышленника.

Сетевые DoS-атаки

Сетевые DoS-атаки, преследующие цель вывода подключенного к сети компьютера (или компьютеров) из строя, могут быть отнесены к одному из двух подклассов: нападение на какую-либо службу системы или нападение на систему в целом. Такие атаки могут быть очень опасными. Эти типы атак были придуманы для создания дискомфорта пользователям и предпринимаются злоумышленником как карательные акции.

Характеризуя людей, стоящих за подобными атаками, следует сказать, что DoS-атаки из сети – в основном метод действия малодушных людей, пытающихся уйти от ответственности за совершенные действия. Любые оправдания DoS-атак из сети несостоятельны. Свободно распространяемый и легкодоступный инструментарий создал субкультуру, называемую миром возможностей новичков-недоумков (script kiddiot), способных только на то, чтобы запустить нужный сценарий. (Автор позаимствовал неологизм, придуманный Джосом Оквендо (Jose Oquendo) – автором известной программы antiofiline.com.) Выражение новичок-недоумок произошло от базового словосочетания, в котором сценарий определяется как «предварительно написанная программа, запускаемая пользователем», а словообразование новичок-недоумок (kiddiot) является комбинацией слов ребенок и недоумок. Очень доходчиво. Доступность существующего инструментария позволяет им причинять неудобства, оставаясь при этом анонимными. При этом пользователям совсем не обязательно утруждать себя хотя бы минимальными техническими знаниями. Единственные, кто несет за подобные атаки большую ответственность, чем новички-недоумки, – это группа профессионалов, создающих условия для подобных атак.

DoS-атаки из сети, как уже было сказано, могут быть направлены на службы или систему в целом в зависимости от того, какую цель преследует атака и почему. Они могут быть подразделены на атаки, направленные для достижения отказа в обслуживания клиентской части, сервисов или систем. В следующих разделах каждый из этих типов атак будет рассмотрен более детально.


Сетевые DoS-атаки на клиентскую часть

Специальные программы ориентированы на достижение отказа в обслуживании клиентской части. Они преследуют следующую цель: добиться невозможности выполнения клиентской частью запросов пользователя. Примером подобной атаки являются так называемые бомбы JavaScript (JavaScript bombs).

По умолчанию большинство Web-браузеров разрешают использование сценария на языке JavaScript. То, что это действительно так, можно заметить во время посещения Web-сайта, когда отображается всплывающая или фоновая (pop-under) реклама. К сожалению, злоумышленник может использовать возможности JavaScript преступным образом, например для атаки с целью достижения отказа обслуживания клиентской части. Используя ту же самую технику, что и рекламодатели для создания нового рекламного окна, злоумышленник может создать злонамеренную Web-страницу, состоящую из бесконечного цикла создания окон. В конечном счете всплывет так много окон, что система исчерпает все свои ресурсы.

Это был пример атаки на клиентскую часть для достижения отказа в обслуживании пользователя в результате исчерпания ресурсов. Принцип атаки аналогичен ранее описанному, но теперь атака организована через сеть. Это только одна из многих атак на клиентскую часть. Другие используют возможности таких программ, как AOL Instant Messenger, ICQ Instant Message Client и аналогичные им.


Сетевые DoS-атаки на сервисы

Другим представителем класса сетевых DoS-атак являются сетевые DoS-атаки на сервисы. Они предназначены для нападения на выбранные для атаки сервисы, для того чтобы добиться их недоступности для авторизованных пользователей. Подобные атаки обычно осуществляются при помощи таких используемых пользователями сервисов, как демон протокола передачи гипертекста (Hypertext Transfer Protocol Daemon – HTTPD), агент доставки почты (Mail Transport Agent – MTA) и др.

Иллюстрацией подобной проблемы служит уязвимость, которая случайно была обнаружена в инфраструктуре Web-конфигурации операционной системы фирмы Cisco CBOS (Cisco Broadband Operating System). После появления на свет червя Code Red, который создавался, ориентируясь на Wed-сервера с IIS (Internet Information Server) 5.0 фирмы Микрософт, было обнаружено, что червь неразборчив к типу атакуемого Web-сервера. Червь сканировал сети в поисках Web-серверов и предпринимал попытки атаковать любой встретившийся сервер.

Побочный эффект червя проявился в том, что хотя некоторые хосты оказались ему не по зубам, другие хосты, в частности хосты с CBOS, оказались подверженными другой опасности: прием от хостов, инфицированных Code Red, многократных запросов на соединение с использованием протокола TCP через порт 80 приводил к аварии CBOS.

Хотя эта уязвимость была обнаружена как проявление другой, любой пользователь мог воспользоваться ею с помощью легкодоступного инструментария аудита сети. Тем более что после нападения маршрутизатор не смог бы самостоятельно выключиться и сразу включиться, чтобы восстановить свою работоспособность. Это классический пример атаки, нацеленной на уязвимый сервис.


Сетевые DoS-атаки на систему

Нацеленные на разрушение системы сетевые DoS-атаки обычно преследуют те же цели, что и локальные DoS-атаки: уменьшение производительности системы вплоть до ее полного отказа. Выявлено несколько характерных подходов для осуществления этого типа атак, которые по существу полностью определяют используемые методы. Один из них основан на атаке одной системы из другой. Этот тип нападения был продемонстрирован в нападениях land.c, Ping of Death (звонок смерти) и teardrop (слезинка), происходивших пару лет назад, а также в нападениях на различные уязвимости фрагментированных пакетов TCP/IP в маршрутизаторе D-Link, Microsoft ISA Server и им подобных программных средствах.

Аналогична идея синхронной атаки (SYN flooding). (SYN flooding – злонамеренное действие, состоящее в генерировании злоумышленником лавины синхронизирующих символов SYN с целью заблокировать легальный доступ на сервер путем увеличения полуоткрытых соединений к TCP порту). Синхронная атака предполагает наличие ряда условий: начиная от случая, когда атакующий компьютер обладает большей производительностью, чем атакуемый, и заканчивая случаем наличия в сети компьютеров, соединенных скоростными каналами. Этот тип нападения используется главным образом для деградации производительности системы. Синхронная атака реализуется путем посылки запросов на TCP-соединение быстрее, чем система сможет их обработать. Атакованная система расходует ресурсы на отслеживание каждого соединения. Поэтому получение большого количества символов синхронизации может привести к тому, что атакованный хост исчерпает все свои ресурсы и не сможет выделить их новым легальным соединениям. IP-адрес источника, как обычно, подменяется таким образом, чтобы атакованная система не смогла получить ответ на свою посылку второй части трехстороннего представления SYN-ACK (синхронизированное уведомление об успешном приеме данных, генерируемое получателем пакетов). Некоторые операционные системы несколько раз повторно передадут SYN-ACK, перед тем как освободить ресурс и вернуть его системе. Заках (Zakath) написал программу синхронной атаки syn4k.c. Программа позволяет указать в пакете подмененный адрес отправителя и порт системы жертвы синхронной атаки. По соображениям краткости изложения в книге не приведен исходный код программы, но его можно загрузить с www.cotse.com/sw/dos/syn/synk4.c.

Синхронную атаку можно обнаружить различными инструментальными средствами, например командой netstat, результат действия которой показан на рис. 3.1, или с помощью сетевых систем обнаружения вторжения (IDS).

Рис. 3.1. Пример использования команды netstat для обнаружения синхронной атаки


В некоторых версиях операционных систем использование параметра – n команды netstat позволяет отобразить адреса и номера портов в числовом формате, а переключатель -p – выбрать протокол для просмотра. Это дает возможность просматривать не все соединения по протоколу UDP (User Datagram Protocol), а только те из них, которые представляют интерес в рамках определенной атаки. Перед использованием команды ознакомьтесь с описанием команды netstat, установленной на вашей операционной системе, чтобы гарантировать использование правильных параметров.

Добавим, что некоторые операционные системы поддерживают возможность работы с маркерами SYN cookies по протоколу TCP. Использование маркеров SYN cookies позволяет устанавливать защищенные криптографическими средствами соединения (в системах с удаленным доступом использование маркеров подразумевает пароль, порождаемый сервером при первом подключении и отсылаемый пользователю; при последующих подключениях пользователь должен предоставлять серверу этот пароль). При получении символа синхронизации SYN от системы – инициатора обмена система возвращает символы синхронизированного уведомления об успешном приеме данных SYN+ACK, как если бы SYN-очередь в действительности была больше. При возврате системой-инициатором обмена символа ACK обратно системе она вызывает специальную функцию сервера, передавая функции в качестве входного параметра значение 32-битового счетчика времени по модулю 32. Если результат, возвращаемый функцией, соответствует ожидаемому, то используется извлеченный максимальный размер сегмента MSS и восстанавливаются внутренние переменные для правильного поступления SYN-символов в очередь.

Рассмотрим атаки типа smurf или packet, которые обычно инициируются ранее упомянутыми новичками-недоумками. Атаки типа smurf – DoS-атаки из сети, ставящие перед собой цель вывести из строя атакованный хост. Этот тип атак использует маршрутизатор, играющий роль посредника, как это показано на рис. 3.2. Злоумышленник, подменивший исходный IP-адрес на адрес атакуемого хоста, генерирует большое количество эхо-сообщений по протоколу ICMP (Internet Control Message Protocol), создавая тем самым большой поток информации по широковещательным IP-адресам. Маршрутизатор, в данном случае выступающий в роли усилителя smurf-атаки, преобразует широковещательный запрос на IP-передачу к широковещательному запросу уровня канала передачи данных Layer 2 и посылает их дальше. Каждый хост, получив широковещательный запрос, отвечает эхо-сигналом по подмененному IP-адресу отправителя. В зависимости от числа хостов в сети как маршрутизатор, так и атакуемый хост могут быть перегружены потоком информационного обмена, что может привести к снижению сетевой производительности атакованного хоста. В зависимости от числа используемых сетевых усилителей атакованная сеть сможет достичь предела своих возможностей обработки информации.

Рис. 3.2. Схема smurf-атаки


В последнее время появились сетевые распределенные DoS-атаки (DDoS). В их основе лежит та же самая идея, что и в smurf-атаках, хотя средства нападения и метод усиления атаки значительно отличаются.

Типы DDoS-атак различаются способом использования клиентов, мастеров и демонов (также называемых зомби). Для того чтобы DDoS-атака стала возможной, специальная программа должна быть размещена на десятках или сотнях системах-«агентах». Обычно кандидаты на роль «агентов» ищутся автоматически среди хостов, которые могут быть cкомпрометированы (например, в результате переполнения буферов во время удаленного вызова процедур (RPC) служб statd, cmsd и ttdbserverd). Затем на скомпрометированные хосты размещается специальная программа – мастер или демон. На них же загружаются специальные программы запуска демонов вместе с программами-генераторами потока пакетов информации, нацеленных на атакуемую систему. Для атаки злоумышленник использует клиента мастера, размещенного на скомпрометированном хосте. Мастер позволяет злоумышленнику управлять демонами. В конечном счете злоумышленник управляет несколькими мастерами, а те – демонами. Во время DDoS-атаки каждый из агентов участвует в создании избыточного потока информации по направлению к атакуемой системе и перегружает ее. Современный набор инструментальных средств DDoS-атак состоит из таких средств, как trinoo, Tribe Flood Network, Tribe Flood Network 2000, stacheldraht, shaft и mstream. Для дополнительного ознакомления о средствах и методах обнаружения демонов и инструментарии DDoS-атак посетите Web-сайт Дэвида Дитриха (David Dittrich): http://staff.washington.edu/dittrich/misc/DDoS.

Приоткрывая завесу

Код Red Worm

В июле 2001 года фильтр IIS (Internet Information Server – информационный сервер Internet) фирмы Микрософт был преобразован в автоматическую программу, названную червем. Используя брешь в системе защиты IIS, червь сначала атаковал один IIS, а затем, пользуясь скомпрометированной системой, нападал на другие системы IIS. Червь предназначался для двух вещей. Во-первых, для стирания Web-страницы инфицированной системы. И, во-вторых, для координации DdoS-атаки против Белого дома. Червь потерпел неудачу, не достигнув своих целей, в основном из-за своевременной квалифицированной реакции штаба информационных технологий Белого дома (White House IT staff).

Последствия от нападения червя не ограничились уязвимыми операционными системами Windows или Белым домом. В результате атаки были переполнены журналы серверов HTTP, неуязвимых к нападению, и был найден оригинальный способ воздействия на маршрутизаторы цифровой абонентской линии (DSL-Digital Subscriber Line) фирмы Cisco. После нападения червя на маршрутизаторы DSL с интерфейсом Web-администрирования они работали неустойчиво, аварийно завершались, способствуя тем самым отказу в обслуживании. В результате клиенты Qwest и некоторых других известных Интернет-провайдеров остались без доступа к сети, пораженной червем. Из-за деятельности червя инфицированная сеть была перегружена операциями сканирования.

Утечка информации

Утечку информации можно сравнить с протечкой воды из прохудившихся труб. Почти всегда утечка информации нежелательна и заканчивается неприятностями. Как правило, утечка информации – результат неправильного обращения с ресурсом, от которого зависит возможность нападения. Точно так же как генералы полагаются на сведения разведчиков, проникших в тыл врага, так и злоумышленники проникают в сеть для выполнения аналогичных задач, собирая информацию о программах, операционных системах и архитектуре сети, намеченной для нападения.

Пути утечки информации

Пути утечки информации различны. Один из возможных путей – баннеры. Баннеры – текст, предъявляемый пользователю при регистрации в системе посредством той или иной службы. Баннеры можно найти в протоколах FTP (File Transfer Protocol), SMTP (Simple Mail Transfer Protocol), POP3 (Post Office Protocol v. 3, оболочках безопасности (SSH-secure shell), службе telnet. Большинство программного обеспечения этих служб услужливо предоставляют внешним пользователям информацию о своей версии и конфигурации, как показано на рис. 3.3.

Рис. 3.3. Версия демона SSH


Другой путь – сообщения об ошибках. Часто Web-сервера предоставляют избыточную информацию о себе при возникновении исключительных условий. Исключительные условия определяются обстоятельствами, отличными от нормальных условий работы, например запросом несуществующей страницы или неопознанной командой. В этой ситуации лучше всего предусмотреть возможность настройки формата выдачи диагностических сообщений или тщательно продумать (workaround) формат выдачи диагностики. На рисунке 3.4 показано излишне болтливое сообщение об ошибке Apache.

Рис. 3.4. Разглашение информации о версии HTTP-сервера


Анализ протоколов

Обзор путей утечки информации будет неполным, если не сказать об анализе протоколов (protocol analysis). Существуют различные варианты анализа протоколов. В одном из вариантов используются ограничения, предусмотренные при разработке протоколов якобы для предотвращения выдачи избыточной информации о системе. Посмотрите на этот FTP-запрос system type:



В HTTP – аналогичная проблема. Посмотрите, как выбалтывается информация о системе в заголовке HTTP посредством команды HEAD:





Кроме этих вариантов, злоумышленники при анализе протоколов используют и другие. Один из них – анализ ответов в IP-протоколе. Атака основана на уже упомянутой идее, но реализуется на более низком уровне. Автоматизированный инструментарий типа Network Mapper или Nmap предоставляет удобные средства для сбора информации о системе, на которую готовится нападение, включая общедоступные порты системы и установленную на ней операционную систему. Посмотрите на результаты сканирования Nmap:







Во-первых, давайте выясним смысл флажков, использованных для сканирования системы parabola. Флаг sS используется при SYN-сканировании для исследования полуоткрытых соединений с целью определения открытых портов хоста. O флаг указывает Nmap на необходимость идентификации операционной системы, если это возможно, на основе ранее выявленных и сохраненных в базе данных особенностей реакции систем на сканирование. Как вы можете видеть, Nmap смог идентифицировать все открытые порты системы и достаточно точно определить операционную систему системы parabola (на самом деле это была операционная система Solaris 7, выполняющаяся на платформе Sparc).

Приведенные примеры показывают пути утечки информации, которые помогли злоумышленнику собрать обширные сведения о сети при подготовке к нападению.

Примечание

Один примечательный проект, связанный с утечкой информации, – исследование протокола ICMP (протокол управляющих сообщений в сети Internet), проводимое Офиром Аркином (Ofir Arkin). На его сайте www.sys-security.com размещено несколько html-страниц, на которых обсуждаются методы использования ICMP для сбора важной информации. Две страницы, озаглавленные «Identifying ICMP Hackery Tools Used In The Wild Today» («Современный инструментарий дикого хакера для идентификации ICMP») и «ICMP Usage In Scanning» («Использование ICMP для сканирования»), доступны на www.sys-security.com/html/papers.html. Они не предназначены для щепетильных людей, но содержат много информации.

Утечка информации об архитектуре сети

Это общая проблема. Некоторые программы любезно и охотно предоставляют важную информацию об архитектуре сети. Протоколы типа SNMP (Simple Network Management Protocol) предусматривают открытое описание соединений для взаимодействия с другими системами. Ухудшает положение дел и то, что в очень многих реализациях протокола SNMP для ограничения предоставления сведений об архитектуре сети применяются примитивные или легкоугадываемые процедуры аутентификации.

Печально, но SNMP все еще широко используется. Например, маршрутизаторы Cisco поддерживают SNMP. Некоторые операционные системы типа Solaris устанавливают и запускают SNMP-средства по умолчанию. Помимо других уязвимостей, найденных в этих средствах, их использование с конфигурацией по умолчанию – явно плохая практика.


Утечка с Web-серверов

Предварительно уже говорилось о чрезмерно болтливых Web-серверах, сообщающих назойливым пользователям лишние сведения о себе при некоторых режимах их работы. Эта проблема еще более усложняется, когда используются такие вещи, как PHP, CGI (Common Gateway Interface) и мощные машины поиска. Подобно любому другому инструментарию, они могут использоваться как на пользу, так и во вред.

Так, PHP, CGI и машины поиска могут использоваться для создания интерактивных Web-средств, настраиваемой среды пользователя для работы в Интернете и автоматизации предпринимательской деятельности. А могут использоваться и для злонамеренных действий, особенно если в их реализации есть ошибки. Беглое знакомство с документом ARIS (Attack Registry and Intelligence Service) показывает, что под номером 3 в нем значится тип атак, использующих обход директории («Generic Directory Traversal Attack»). (Этим типам атак в документе предшествуют атаки с использованием ISAPI и нападения типа cmd.exe, которые на момент написания книги были очень многочисленными и разнообразными.) В группу атак на основе обхода директории входят атаки типа dot-dot (..) или атаки относительного пути (…), в ходе которых в URL добавляются точки для выяснения, приведет ли это к переходу в другую директорию и выдаче листинга или выполнению программы на Web-сервере.

Сценарии, которые предоставляют возможность обхода директорий, позволяют не только кому-либо сменить директорию и просмотреть список файлов системы. Они позволяют злоумышленнику прочитать любой файл, читаемый HTTP-сервером с учетом монопольного использования и группового членства. А это, в свою очередь, может позволить пользователю получить доступ к файлу паролей passwd в директории /etc и к другим непривилегированным файлам Unix-систем или иных систем, например Microsoft Windows, привести к чтению (а потенциально и к записи) привилегированных файлов. Любые данные, полученные в результате этого типа атак, могут быть использованы для подготовки более опасных нападений. Web-сценарии и приложения должны стать темой тщательного рассмотрения еще до их установки. Подробнее познакомиться с ARIS можно по адресу http://ARIS.securityfocus.com.


Гипотетический сценарий

Некоторые программы, например Sendmail, в большинстве своих реализаций по умолчанию предоставляют сведения о пользователях системы. Усугубляет ситуацию еще и то, что эти программы используют пользовательскую базу данных как справочник для адресов электронной почты. Кое-кто, возможно, лишь усмехнется, услышав рассуждения о возможности утечки информации. В этом случае задумайтесь над следующим примером.

В маленьком городке два Интернет-провайдера. Интернет-провайдер A появился позднее Интернет-провайдера B и быстро развивается, существенно увеличивая число своих клиентов. Интернет-провайдер B обосновался в городке раньше A и владеет большим процентом клиентов. Интернет-провайдер B ведет конкурентную войну с Интернет-провайдером A, недовольный тем, что A ограничивает сферу деятельности B и выбивает почву из-под его ног. У Интернет-провайдера A работают более квалифицированные системные администраторы, которые смогли воспользоваться преимуществами различных программных средств, ограничив доступ пользователей к важной информации. Они достигли этого с помощью таких ухищрений, как организация почты (hosting mail) на отдельном сервере, использование различных регистрационных имен оболочки сервера для исключения возможности получения доступа к базе данных почтовых адресов различным пользователям. Однако Интернет-провайдер B не предпринял таких мер предосторожности. Однажды сотрудников Интернет-провайдера A осенила блестящая идея, как получить учетные записи Интернет-провайдера B. Эти учетные записи позволят им сначала получить доступ к почтовому серверу Интернет-провайдера B, а затем легко завладеть файлом паролей passwd. Зная пароли, можно будет по почте отправить всем пользователям Интернет-провайдера B предложение о сотрудничестве с Интернет-провайдером A, предлагая им существенные скидки по сравнению с текущими расходами у Интернет-провайдера B.

Как вы можете видеть, утечка подобной информации может привести не только к взлому системы безопасности, но и, возможно, к банкротству. Предположим, что компания смогла получить доступ к информационным системам своего конкурента. Что остановит ее от кражи, дезинформации, мошенничества и осуществления всего того, что можно сделать для подрыва честной конкуренции? Дни наивности в Интернете закончены.

Почему опасна утечка информации?

В силу различных причин всегда найдутся люди, которые не обеспокоены утечкой информации. Такое отношение к утечке информации объясняется, например, тем, что, по их мнению, утечку информации остановить невозможно и тайное всегда станет явным, или тем, что без допуска к некоторой хранимой на сервере информации нельзя наладить доверительные отношения с клиентами. Сюда относится и такая возможность, как «снятие отпечатков пальцев» систем, смысл которой состоит в идентификации систем на основе сравнения реакции системы с ожидаемыми действиями.

Любая грамотно разработанная операционная система предоставляет возможности или для уклонения от «снятия отпечатков пальцев», или для затруднения проведения идентификации системы на их основе, требуя проведения дополнительных мероприятий. Некоторые системы даже предоставляют возможность посылки поддельных «отпечатков пальцев» чрезмерно навязчивым хостам. Причины этого очевидны. Возвращаясь к примеру из военной области, отметим, что зачастую подготовка к предстоящему нападению тщательно скрывается для достижения эффекта неожиданности. Это может достигаться маскировкой своих сил, скрытию их передислокации, передаче только зашифрованных сведений и т. д. Подобное ограничение утечки информации заставляет неприятеля принимать решения без знания истинного положения дел, увеличивая тем самым возможность совершения ошибки.

Поэтому, по аналогии с армией, для которой существует риск нападения на нее грозного врага, следует приложить максимум усилий для скрытия ресурсов собственной сети от сбора сведений и предотвратить утечку информации. Любая имеющая значение информация о сети, которая окажется в распоряжении злоумышленника, предоставит ему возможность сделать обоснованные выводы в нужном направлении. Устранение утечки информации вынуждает злоумышленника предпринимать дополнительные меры для сбора необходимой ему информации. Возросшая активность злоумышленника увеличивает шансы его обнаружения.

Нарушения прав доступа к файлу

Нарушения прав доступа к файлу создают благоприятные условия для начала атаки. Используя нарушения прав доступа к файлу и методы, описанные в секции «Утечка информации», злоумышленник может добраться до секретной информации типа имен пользователей или их паролей в системе, получить доступ к другим файлам при помощи, например, смены владельца файла или атаки символических ссылок (symboliclink attack).

Права

Один из самых простых способов обеспечить безопасность файла состоит в обеспечении прав работы с ним. Часто это один из наиболее освещаемых аспектов безопасности системы. Некоторые однопользовательские системы типа Microsoft Windows 3.1/95/98/ME не поддерживают права доступа к файлам. В то же время многопользовательские системы имеют, по крайней мере, одно, а обычно несколько возможностей управления доступом к файлам.

Например, Unix-подобные системы и некоторые Windows-системы поддерживают пользователей и группы пользователей, позволяют задавать атрибуты файлов для указания прав пользователя и группы пользователей на выполнение тех или иных действий с файлом. Пользователь или владелец файла может быть наделен правами полного управления файлом, включая операции чтения, записи и выполнения других разрешенных действий с файлом. В то же время пользователь группы, назначенной этому файлу, может иметь права на чтение и выполнение файла, а пользователи, не являющиеся владельцами файла или членами группы, могут обладать другим набором прав или вообще не иметь никаких разрешений на работу с файлом.

В дополнение к стандартному набору прав владельца файла группы пользователей и многие Unix-подобные системы поддерживают более изощренные методы разрешения доступа к файлу. Их реализация разнообразна: от простого – типа предоставления возможности определить, какие пользователи имеют доступ к файлу, – до более сложного – назначения ролевого имени для открытия пользователям доступа к набору утилит. В составе операционной системы Solaris имеется два таких примера: ролевое управление доступом (Role-Based Access Control – RBAC) и списки управления доступом (ACL – Access Control Lists).

Списки управления доступом ACL позволяют пользователю определить доступ к файлу для отдельных пользователей системы. Список доступа связан с владельцем и членством в группе.

Ролевое управление доступом RBAC – сложный инструментарий, предусматривающий различные слои прав. Инструментарий можно настраивать, предоставляя пользователям обширные общие роли для выполнения таких функций, как добавление пользователей, изменение некоторых настроек системы и т. п. Также можно ограничить права пользователей, разрешив им выполнять только отдельные функции.

Примечание

Дополнительные сведения о RBAC и ACL можно найти в книге издательства Syngress Hack Proofing Sun Solaris 8 (ISBN 1-928994-44-X).

Атаки символических связей

Атаки символических связей – это проблема, которая обычно используется злоумышленником для реализации своих замыслов. Цель подобных атак состоит в изменении полномочий работы с файлом, разрушении файла в результате добавления в конец новых данных или перезаписи файла с уничтожением ранее содержащейся в нем информации.

Атаки символических связей часто начинаются из директорий для хранения временных данных. Обычно проблема возникает из-за ошибки программирования. Когда запускается уязвимая программа, она создает файл с параметрами, делающими его уязвимым для нападения. Таких параметров два.

Первый – права работы с файлами. Второй – создание небезопасных временных файлов, то есть уязвимых для нападения злоумышленника. Если файл был создан с опасными с точки зрения безопасности системы правами работы, то он может быть изменен злоумышленником. В зависимости от алгоритма работы программы возможна ситуация, когда измененные злоумышленником данные временного файла могут быть переданы сессии пользователя.

Во втором случае, если программа не проверяет существование файла на диске перед его созданием, атака на систему реализуется следующим образом. Если пользователь в состоянии определить имя временного файла прежде, чем он будет создан, то создается символическая связь с временным файлом, который будет создан и который намечен для нападения. В следующем примере продемонстрирован исходный текст программы, создающей файл с предсказуемым именем:



Эта программа создает файл /tmp/junktmp без первоначальной проверки его существования.

Пусть во время выполнения программы, создающей небезопасный временный файл, создаваемый файл уже существует. Тогда файл, указанный в символической связи, будет или перезаписан, или в конец этого файла будут добавлены новые данные при условии, если пользователь, выполняющий потенциально опасную программу, имеет право на запись в файл. Рисунки 3.5 и 3.6 демонстрируют пример использования подобной программы пользователем haxor для перезаписи файла пользователя ellipse.

Рис. 3.5. Пользователь haxor создает злонамеренную символическую ссылку


Рис. 3.6. В результате выполнения программы Lameprogram пользователем Ellipse осуществляется перезапись данных файла Lamedata

Дезинформация

Поясним суть дезинформации на примере из военной области. Предположим, что часовые выставлены на посты для наблюдения за обстановкой. Один из них обнаружил разведчиков неприятеля. Часовой сообщает командованию о вражеской разведке, а командование отправляет собственную группу разведки для точного выяснения, кто шпионит за ними.

Можно предположить, что генерал неприятеля уже думал над возможными вариантами своих действий при подобном развитии обстановки. Например, он может решить скрывать свои силы, пока не убедится, что перед ним никого нет. «Но что, если кто-то увидит мои наступающие силы, – может быть его следующей мыслью. – И если противостоящий мне неприятель пошлет разведчиков для разведки моих сил и занимаемых ими позиций, которые найдут мою армию сильнее, чем свою, то неприятель, вероятно, или укрепит свои позиции, или отойдет на другие позиции, где на них труднее напасть или где их нельзя обнаружить».

Поэтому вражеский генерал может захотеть представить свои силы менее опасными, чем они являются в действительности. Он может спрятать тяжелое вооружение и большую часть пехоты, оставляя на обозрении только маленькую часть своих сил. В основе дезинформации лежит та же самая идея.

Способы и инструментарий дезинформации

Как правило, после компрометации системы злоумышленник прилагает максимум усилий для скрытия своего присутствия и распространения дезинформации. Злоумышленники добиваются этого при помощи ряда способов.

Например, в системе Sun Solaris была обнаружена уязвимость, предоставляющая злоумышленнику дополнительные возможности для распространения дезинформации. Речь идет об обработке списков контроля доступа ACL (access control list) на псевдотерминалах, подсоединенных к системе. После получения доступа к терминалу злоумышленник может установить элемент списка контроля доступа и завершить работу. Во время обращения другого пользователя к системе с того же самого терминала предыдущий владелец терминала (в данном случае злоумышленник) сохраняет за собой право записи на терминал, что позволит ему записать дезинформацию на терминал нового владельца.

В следующих разделах рассмотрены некоторые из применяемых на практике способов дезинформации и соответствующего инструментария.


Редактирование журналов регистрации

Редактирование журналов регистрации – один из способов распространения дезинформации злоумышленником. Замечено, что когда действия злоумышленника становятся опасными для системы, у него появляется желание как можно дольше оставаться незамеченным. Для него будет даже лучше, если он сможет еще кого-нибудь увлечь в атаку или наделать достаточно шума, для того чтобы на этом фоне скрыть свое вторжение.

При рассмотрении отказа от обслуживания поступившего запроса уже говорилось о генерации событий для записи их в журнал регистрации. Злоумышленник может попытаться переполнить журналы регистрации, но хорошо разработанная система предусматривает средства циклического заполнения журналов регистрации и обладает достаточными возможностями для предотвращения их переполнения. Зная это и пытаясь скрыть свою деятельность, злоумышленник может найти выход в генерации большого количества событий. При соответствующих обстоятельствах злоумышленник сможет создать большой поток событий, регистрируемых в журнале событий, а причина одного или нескольких из генерируемых злоумышленником событий будет выглядеть вполне законной.

Если злоумышленник получает доступ к системе с правами администратора, то любые предположения о целостности журналов регистрации несостоятельны. Обладая правами администратора, злоумышленник может так отредактировать журналы регистрации, что будут удалены любые события, свидетельствующие о нападении, а содержимое журналов будет изменено таким образом, что можно будет заподозрить в нападении другого пользователя. Если это произошло, то только внешние программы, предназначенные для регистрации системных данных скомпрометированных компьютеров, или системы обнаружения вторжения в сеть могут предоставить полезную информацию.

Некоторые инструментальные средства предусматривают возможность генерации случайных данных или случайного потока информации, который называется шумом. Обычно они используются злоумышленником для того, чтобы отвлечь внимание или запутать суть дела. Генерируемый инструментальными средствами шум может использоваться для обмана администратора, отвлечения его внимания от атаки или внушения ему мысли о том, что на систему начал атаку кто угодно, но только не этот человек.

Редактирующий журналы регистрации злоумышленник преследует ряд целей. Одна из них заключается в создании видимости нормальной работы системы, как будто ничего не произошло. Другая – в создании обстановки полной неразберихи, когда противоречивые записи в журнале регистрации подталкивают администратора к мысли о выходе системы из-под контроля или, как было сказано ранее, наличия шума в системе. Некоторые средства, например типа Nmap, исследуя сеть, представляют дело таким образом, как если бы запросы на сканирование пришли из разных источников, создавая обстановку неразберихи и пряча злоумышленника за ложными целями.


Программы типа rootkit

К средствам дезинформации можно отнести программы rootkit, предназначенные для скрытия деятельности злоумышленника в системе. Известно несколько вариантов этих программ с собственными возможностями и недостатками. Программа rootkit – первое, что выбирает злоумышленник для обеспечения длительного доступа к системе.

Rootkit работает, подменяя в UNIX-системах ключевые системные программы типа ls, df, du, ps, sshd и netstat, а в Windows – драйверы и записи системного реестра. Rootkit заменяет эти программы, а возможно, и еще какие-нибудь, на другие, которые настроены таким образом, чтобы не предоставлять администраторам достоверной информации о работе системы. Вне всякого сомнения, программы типа rootkit используются для скрытия злоумышленника и его деятельности в системе и предназначены для дезинформации. Они подталкивают администратора к мысли о нормальной работе системы в то время, когда злоумышленник контролирует ее, атакует новые хосты или занимается другими нехорошими делами.


Модули ядра

Модули ядра – часть кода, который может быть загружен в память и выгружен из памяти ядром операционной системы. Модуль ядра предоставляет ядру дополнительные функциональные возможности по мере необходимости. Ядро выгружает ненужный в данный момент модуль из памяти, чтобы освободить память для других программ. Модули ядра могут быть загружены для того, чтобы обеспечить поддержку, например, файловой системы другой операционной системой, управления устройством или чего-то еще.

Злонамеренные модули ядра преследуют те же цели, что и программы типа rootkit. Они предназначены для дезинформации администраторов системы, заставляя их поверить в нормальную работу хоста. Тем самым они защищают злоумышленника от обнаружения, позволяя ему выполнить задуманное.

Принципы работы модуля ядра и программы типа rootkit отличаются принципиально. Программы rootkit работают как фильтр, защищающий нужные данные от вездесущих администраторов. А модуль ядра работает на более низком уровне, перехватывая информационные запросы на уровне системных вызовов и не доводя до администратора любые данные, которые могут выдать присутствие несанкционированных гостей. Тем временем защищенный злонамеренным модулем ядра гость может найти скрытую лазейку в системе защиты системы и скомпрометировать систему, не подвергая себя опасности быть обнаруженным вследствие модификации системных утилит.

Модули ядра становятся стандартом скрытия вторжения. После проникновения в систему злоумышленник должен просто загрузить модуль и удостовериться в том, что модуль загружен и в дальнейшем будет подгружаться системой. С этого момента и до перевода дисковода в автономный режим и монтировки другой копии операционной системы нельзя обнаружить ни злонамеренного модуля ядра, ни маскирующего с его помощью злоумышленника.

Доступ к специальным файлам / базам данных

Ниже излагаются два метода проникновения в систему, которые основаны на получении доступа к специальным файлам и базам данных. Специальные файлы хотя и различаются форматом и функциями, но присутствуют во всех системах на всех платформах от систем NT до Sun Enterprise 15000 на Unisys Mainframe.

Нападения на специальные файлы

Проблема нападений на специальные файлы становится очевидной, если пользователь использует сервис RunAs операционной системы Windows 2000. Когда пользователь выполняет обращающуюся к RunAs программу, Windows 2000 создает поименованный канал (канал – механизм связи между процессами, который позволяет одному процессу передавать данные другому процессу), запоминая мандат аутентификации в незашифрованном виде. Если сервис RunAs остановлен, то злоумышленник может создать именованный канал под тем же самым именем. Когда сервис RunAs стартует еще раз, соответствующий процессу мандат будет передан злоумышленнику, что позволит злоумышленнику зарегистрироваться в системе пользователем сервиса RunAs.

Аналогичные проблемы есть и в UNIX-системах. Уже упоминалось об одной из них – псевдотерминалах системы Solaris. В компоненте дистрибутива Red Hat Linux 7.1, отвечающего за обновление системы, была выявлена следующая уязвимость. Оказывается, у злоумышленника есть возможность тайно просматривать файл подкачки, создаваемый пользователем при обновлении системы. Это происходит из-за создания файла подкачки с атрибутами, которые разрешают всем пользователям читать его. Сначала злоумышленник, руководствуясь низменными целями, основательно загружает память системы, вынуждая систему использовать файл подкачки. А затем, при различных состояниях системы, несколько раз копирует файл подкачки, для того чтобы на досуге поискать в копиях пароли и другую важную информацию.

Нападения на базы данных

Автор на одном из этапов своей карьеры собирался стать администратором базы данных, полагая, что это позволит ему усовершенствовать профессиональные навыки в обслуживании систем и их безопасности. Чем больше он входил в курс дела, тем сильнее убеждался в том, что по напряженности труда работа администратором баз данных сродни участию в боевых действиях, потому что от него зависит финансовое благополучие компании. И если пришлось бы выбирать, он лучше бы пошел добровольцем на войну.

Базы данных всегда были лакомым кусочком для злоумышленника. Современная профессиональная деятельность людей зачастую немыслима без централизованного хранилища информации, в котором содержатся финансовые данные, сведения о кредитных карточках, платежные ведомости, списки клиентов и т. д. Одна только мысль о ненадежности баз данных способна лишить сна генерального директора, не говоря уже о доведении администратора баз данных до нервного срыва. Можно сказать, что сегодня электронная коммерция процветает. А где бизнес, там и базы данных.


Зона риска

Системы управления базами данных являются объектами нападения с двух сторон. Поскольку они относятся к программному обеспечению, то им присущи общие проблемы программ, как, например, переполнение буфера, отказ в обслуживании, скорость реакции. Дополнительно к этому системы управления базами данных – фоновая компонента большинства современных программ Web-интерфейса, средств графического интерфейса пользователя и т. д. Поэтому базы данных безопасны настолько, насколько безопасны программные средства интерфейса с пользователем и обработки данных.

Наблюдается устойчивая зависимость безопасности баз данных от Web-интерфейса, по крайней мере, по двум причинам. Во-первых, зачастую программы Web-интерфейса завершаются аварийно при обработке специальных символов. Во-вторых, из-за неважного проектирования алгоритмов Web-интерфейса известны случаи неавторизованного доступа к базам данных. Сказанное подтверждается фактами регулярного нахождения ошибок в интерфейсах пакетов электронной коммерции.

Сложно написать хорошую программу обработки информации, введенной пользователем. Пользователь всегда может ввести что-нибудь такое, что почти невозможно предусмотреть. Иногда – по невежеству, иногда – специально. Программа должна правильно обрабатывать специальные символы, например одинарные () и двойные (") кавычки, прямой (/) и обратный слэш (\) и некоторые другие, иначе быстро найдется желающий воспользоваться ошибками. Пропускающая спецсимволы программа интерфейса не сможет служить преградой для выполнения произвольно заданных команд.

Плохо разработанный интерфейс – тема отдельного разговора. Ошибки в проектировании интерфейса позволяют злоумышленнику по своему желанию просматривать и удалять таблицы, выполнять SQL-запросы. Хотя в этом нет ничего нового, подобные инциденты происходят постоянно.


Программные средства баз данных

Программные средства баз данных богаты сюрпризами нарушения безопасности. Безопасность базы данных зачастую определяется безопасностью ее программных средств. И это не требует особых пояснений.

Например, система управления базами данных Oracle может работать на нескольких платформах. Нишад Херат (Nishad Herath) и Брок Теллер (Brock Tell ier) из Network Associates COVERT Labs нашли уязвимость в версиях Oracle 8.1.5–8.1.7. Уязвимость была вызвана некорректной работой программы Oracle – TNS Listener.

Для незнакомых с Oracle поясним, что программа TNS Listener облегчает подключения к базе данных и управляет ими. Она прослушивает произвольный порт данных, в последних версиях порт 1521/TCP, ожидая запроса на установку соединений к базе данных. После получения запроса программа разрешает пользователю зарегистрироваться в базе данных в соответствии с его мандатом (мандат – учетная запись с параметрами доступа пользователя, сформированными после его успешной аутентификации).

Выявленная уязвимость проявляется при посылке откорректированного злоумышленником пакета Net8, который перехватывается программой TNS Listener. Логика работы программы TNS Listener такова, что этого оказывается достаточно для получения доступа к базе данных на локальной машине и выполнения произвольной программы на ней. Если для Unix-систем подобный дефект имеет большое значение, то для систем Windows – очень большое. Для Unix-систем найденная уязвимость позволяет злоумышленнику получить доступ к базе данных на локальной машине и зарегистрироваться пользователем Oracle, а для систем Windows – с привилегиями LocalSystem, эквивалентными правам администратора. Вопросы выполнения программы будут рассмотрены в следующей секции.

Служба компьютерной безопасности предупреждает!

Oracle – не единственный уязвимый программный продукт. Просматривая различные технические отчеты или базу язвимостей SecurityFocus, можно найти большое количество слабо защищенных программ, например MySQL или Microsoft SQL. Не дайте себя одурачить, делая поспешные выводы о безопасности тех или иных программ, поскольку в отчетах приведены cведения только об известных уязвимостях.


Разграничение доступа в базах данных

Напоследок обсудим разграничение доступа в базах данных. Большинство баз данных используют собственные средства разграничения доступа. Например, Microsoft SQL Server версии 6.5 (и более ранних) при выборе стандартной защиты использует свои собственные процедуры подтверждения достоверности при регистрации, а не аналогичные процедуры, предоставляемые операционной системой. Есть учетная запись SA с пустым паролем, которая создается при инсталляции SQL Server, она описывает права администратора во всех базах данных на сервере. Администратору рекомендуется заменить пароль по умолчанию учетной записи SA сразу же после инсталляции.

Системы управления, работающие под управлением UNIX, также могут иметь собственные средства разграничения доступа. Например, у MySQL собственный список пользователей, не связанный со списком пользователей UNIX. В MySQL есть учетная запись root (которую не следует путать с основной учетной записью операционной системы UNIX), устанавливаемая по умолчанию без пароля. Если не назначить пароля этой учетной записи, то любой сможет подключиться к MySQL c максимально возможными правами, введя следующую команду:



Если кто-нибудь захочет изменить записи в доступных таблицах, а пароль учетной записи не назначен, то ему достаточно ввести следующую команду:



Но даже если учетной записи root базы данных MySQL был назначен пароль, а какому-то пользователю нет, то пользователь всегда может подключиться под другим именем, введя вместо собственного имени имя пользователя с неназначенным паролем после флага —u. По этой причине назначение паролей всем пользователям MySQL должно войти в обыденную практику администрирования, чтобы не подвергать систему ненужному риску.

Удаленное выполнение программ

Наиболее часто в атаках на систему используется так называемое удаленное выполнение программ. Несколько заслуживающих внимания нападений на известные Web-сайты оказались для злоумышленника успешными благодаря удаленному выполнению программ. Удаленное выполнение программ – серьезная проблема, потому что в этом случае аутентификация не требуется и процесс может быть инициирован кем угодно.

Возвращаясь к примеру о разведчиках, предположим, что вражеская разведка просочилась мимо сторожевых постов и выследила позиции наших войск, нанесла их на карту и доложила о результатах разведки.

Оценив полученные сведения, неприятель может принять решение о нанесении артиллерийского удара по выявленным целям. Предположим, что, зная технологию выдачи целеуказания, противоборствующая сторона в состоянии подменить выявленные цели ложными, для того чтобы вражеская артиллерия нанесла удар по своим силам.

Точно так же и злоумышленник, имея возможность удаленного запуска произвольных программ в системе, может извлечь для себя выгоду, заставив программы работать против собственной системы. Известно несколько методов удаленного выполнения программ. Наиболее известны атаки, основанные на переполнении буфера и форматированных строках.

Атака

Удаленное выполнение программ всегда осуществляется с использованием автоматизированного инструментария, как правило, при помощи скриптов. Практически невозможно выполнить программу вручную.

Чаще всего целью удаленного выполнения программ является получение прав администратора на уязвимой системе. Подобным атакам обычно предшествует сбор информации при помощи автоматизированных средств сканирования для поиска уязвимых версий программного обеспечения. Если уязвимое программное обеспечение найдено, то для получения прав администратора злоумышленник запускает сценарий, использующий бреши в системе защиты идентифицированных программ.

Примечание

Для дополнительного ознакомления с вопросами использования атак, основанных на переполнении буфера, рекомендуется познакомиться с работой Алефа (Alephl) «Smashing The Stack For Fun And Profit» («Разрушение стека для забавы и обогащения»), Phrack, выпуск 49, статья 14 по адресу www.phrack.com/show.php?p=49&a=14. Или с главой 8 книги.

Дополнительные сведения об уязвимостях форматированных строк можно найти в главе 9 книги, которая посвящена детальному обсуждению уязвимостей форматированных строк, и дополнительно в официальном документе Team Teso's по адресу www.team-teso.net/articles/formatstring/index.html.

Получив права администратора, он выполняет комплекс мероприятий по дезинформации, освещенный в секции «Дезинформация». Злоумышленник будет стараться скрыть свое присутствие в системе. После этого он может использовать скомпрометированный хост для начала атак.

Хотя удаленное выполнение программ позволяет злоумышленнику вводить команды, тем не менее на их выполнение накладываются некоторые ограничения.

Ограничения удаленного выполнения программ

Групповое членство и монопольное использование ресурса накладывают на удаленное выполнение программ точно такие же ограничения, как на процессы и работу пользователей.

Как правило, в UNIX-системах привилегированные процессы – это процессы, взаимодействующие с портами, чьи номера меньше, чем 1024. Но некоторые пакеты программ, например Apache Web Server, тоже могут модифицировать групповое членство и условие монопольного использования ресурса, несмотря на то что это разрешено делать лишь привилегированным процессам. Злоумышленник, контролирующий HTTP-процесс Apache, может присвоить себе его привилегии. Но в этом случае он может получить доступ к системе только как непривилегированный пользователь, потому что по умолчанию предусмотрено понижение привилегий Apache после его запуска. Для расширения своих привилегий воспользовавшемуся непривилегированным процессом злоумышленнику потребуются другие уязвимости локальной системы и незаурядные способности, если он не хочет быть пойманным.

Он может попытаться повлиять на процесс таким образом, чтобы вместо пользователя с более высокими привилегиями его могли запускать пользователи с более низкими. Это называется понижением привилегий (dropping privileges). В качестве ответной меры используется так называемая подмена корневого каталога (change root или chroot), которая заключается в следующем: Apache помещается в фальшивый корневой каталог для изоляции его процессов. Для подмены корневого каталога разработаны специальные программные средства, например программы-оболочки большинства сервисов, запирающие сервисы в так называемые изолированные подмененные корневые каталоги (chroot jail). Изолированные подмененные корневые каталоги были придуманы для ограничения пользователя рамками определенного каталога. Программа подмены корневого каталога разрешает доступ только к программам и библиотекам внутри этого каталога. Это ограничение – западня для неопытного злоумышленника.

Если злоумышленник получает доступ к системе, но его прав недостаточно для осуществления своих замыслов, то, вероятнее всего, он попытается расширить свои права.

Расширение прав

Расширение прав присуще большинству нападений. Оно наблюдается после получения пользователем доступа к ранее недоступному ресурсу. Этим ресурсом может быть все, что угодно: от получения удаленного доступа к системе до получения прав администратора на хосте. Известны различные формы расширения прав.

Удаленное расширение прав

Классификация удаленного расширения прав предусматривает два варианта. Первый – удаленный непривилегированный доступ, позволяющий удаленному пользователю получить неавторизованный доступ законного пользователя к системе. Второй – мгновенный доступ с правами администратора.

Пользователь может получить удаленный доступ при помощи обработки специальных символов в Web-интерфейсах, программных ошибок переполнения буфера, ошибок форматирования строк или утечки информации. Это серьезная угроза для нормальной работы системы.


Удаленный непривилегированный пользовательский доступ

При атаках на систему с использованием непривилегированных процессов можно наблюдать удаленное расширение прав непривилегированного пользователя. Подобное квалифицируется как расширение прав из-за того, что злоумышленник, не имеющий доступа к локальной системе до атаки, в результате атаки получает его. Некоторые люди, как ранее и сам автор, только усмехнутся, прочитав это. Координатор Bugtraq Дэвид Ахмад (David Ahmad) переубедил автора.

Однажды ночью за чашечкой кофе автор совместно с Дэвидом обсуждали тему получения доступа к системе. Автор, основываясь на своем опыте обеспечения безопасности компьютерных систем, был совершенно убежден в их неприступности даже в том случае, если злоумышленнику удастся получить локальный доступ к системе. Автор был убежден, что защита, основанная на недопущении хранения в стеке выполнимого кода (non-executable stacks), ограниченный по своим возможностям пользовательский интерфейс, средства подмены корневой директории (chrooted environments) и небольшие setuid-программы не позволят злоумышленнику получить права администратора. Дэвид был настолько любезен, что доказал автору вопиющую неправоту его убеждений.

В распоряжении злоумышленника имеются различные способы получения доступа непривилегированного пользователя к локальной системе. Возможно использование непривилегированных сервисов, таких как HTTP-демоны, процессов, работающих в рамках подмененной корневой директории, или других сервисов, запущенных со стандартными правами пользователей. Имеются и иные способы получения доступа к системе. В некоторых случаях пароли, полученные из исходных текстов ASP (Active Server Pages – активные серверные страницы (протокол ASP – разработанная корпорацией Microsoft технология, с помощью которой Web-мастер может динамически формировать автоматически обновляемые Web-страницы)), позволяют злоумышленнику получить доступ обычного пользователя. Печально известная проблема заключается в ошибке фильтрования спецсимволов программами Web-интерфейсов. Если атакующий сможет добиться передачи спецсимволов из Web-интерфейса в систему, то он сможет связать порт системы с оболочкой. Вероятно, это и не позволит ему сейчас получить права администратора, но он получит права HTTP-процесса позднее. По словам Дэвида Ахмада: «Это – только вопрос времени».


Удаленный привилегированный пользовательский доступ

Приобретение злоумышленником удаленного привилегированного пользовательского доступа чревато более тяжкими последствиями. Если удаленный пользователь сможет получить доступ к системе с правами привилегированного пользователя, целостность системы будет нарушена. Можно говорить о получении злоумышленником удаленного привилегированного пользовательского доступа при условии приобретения им прав, предоставляемых учетными записями uucp, root, bin или sys в UNIX-системах, или же Administrator либо LocalSystem в Windows 2000.

Методы получения удаленного привилегированного или непривилегированного пользовательского доступа по существу одинаковые, за исключением нескольких ключевых моментов. Одно отличие заключается в использовании сервисов. Для того чтобы получить удаленный доступ на правах пользователя, злоумышленник должен использовать процесс с правами привилегированного пользователя.

Большинство сервисов UNIX все еще выполняются с правами привилегированных пользователей. В некоторых из них, как telnet и SSH, недавно были обнаружены серьезные уязвимости. Особенно серьезна ошибка в SSH, первоначально обнаруженная Михаилом Залевски (Michal Zalewski) и преданная огласке в феврале 2001 года. Не вникая в сложные детали, отметим только, что уязвимость позволяет удаленному пользователю инициировать злонамеренное сетевое соединение, защищенное криптографическими средствами, с демоном. После установления соединения злоумышленник может, воспользовавшись недостатками протокола, запустить произвольную программу с правами администратора, связав оболочку с портом, закрепленным за нулевым идентификатором пользователя.

Аналогичная уязвимость была недавно обнаружена в Windows 2000 IIS (Internet Information Server – информационный сервер Internet), что позволило успешно атаковать системы Windows NT. IIS 5.0 выполняется с правами, эквивалентными правам администратора. Проблема заключалась в переполнении буфера индексации инфраструктуры ISAPI IIS 5.0. Благодаря ей стали возможны различные вторжения, например червя Code Red и его модификаций.

Получение удаленного привилегированного пользовательского доступа является целью большинства Троянских коней и скрытых программ (backdoor programs). Такие программы, как SubSeven, Back Orifice, и их варианты могут применяться для получения злоумышленником удаленного привилегированного пользовательского доступа к инфицированной системе. Эти программы широко используют методы социотехники, дезинформации или убеждения, для того чтобы заставить пользователя запустить программу с правами привилегированного пользователя. После их выполнения злоумышленнику потребуется связаться тем или иным способом с запущенной программной, чтобы наблюдать за инфицированной системой, управлять ее работой и работой ее пользователей.

Целью других атак может быть получение прав иных привилегированных пользователей, отличных от администратора. Злоумышленник, завладевший такими правами, сильно отличается по своим возможностям от обычного пользователя, поскольку теперь он может получить доступ к жизненно важным компонентам системы. К тому же пользователь, получивший доступ к системным учетным записям, отличным от записи администратора, вероятно, позднее сможет получить его права.

То же самое справедливо и для повышения прав на локальной системе. При помощи социотехники или вредной программы пользователь с локальными непривилегированными правами может добиться повышения своих прав на локальной системе.

Методы тестирования уязвимостей

Тестирование – лучший способ удостовериться в присутствии уязвимостей у системы. Тестирование уязвимостей – необходимая обязанность каждого, кто связан с администрированием или безопасностью информационных систем. Убедиться в безопасности охраняемого компьютера можно только после собственных попыток его взлома.

До этого момента в главе были обсуждены различные типы уязвимостей, которые могли привести к проникновению злоумышленника в систему. В этой секции будет уделено внимание поиску и доказательству существования уязвимостей в системе, в том числе с использованием специальных программ. Также будут рассмотрены методы сбора информации о системе до начала атаки на нее, например применение программы Nmap.

Доказательство возможности нападения

Общепризнанный метод, используемый сообществом безопасности, получил название доказательство возможности нападения (proof of concep). Про доказательство возможности нападения можно сказать, не вдаваясь в излишние подробности, что это изученный со всех сторон надежный метод тестирования систем на уязвимости. Обычно он применяется разработчиком программы или аналитиком по безопасности в форме максимально гласной дискуссии.

Доказательство возможности нападения проводится для демонстрации уязвимостей в системе. Доказательство не проводится само по себе, оно проводится для демонстрации проблем с использованием небольших безопасных для системы программ или технического описания, позволяющего пользователю воспроизвести проблему. Доказательство возможности нападения может использоваться членом сообщества для выявления источника проблем, формулирования рекомендаций по вычищению программ с целью максимального устранения недоделок в них и, в некоторых случаях, рекомендаций по исправлению ошибок до выхода патчей производителя, а также для обнаружения уязвимых систем.

Доказательство возможности нападения используется как средство уведомления сообщества безопасности о проблеме при возникновении даже незначительных подозрений с целью опережения злоумышленника. Узнав о проблеме, у производителя появляется возможность решить ее и выпустить заплатку раньше, чем злоумышленник научится извлекать из нее выгоду и ринется в безумную атаку.

Написание программ, демонстрирующих проблему

Написание программ, демонстрирующих проблему, — еще один метод, используемый сообществом безопасности. В первом написание демонстрирующих проблему программ может быть определено как написание программ, так или иначе использующих выявленную уязвимость и преимущества программирования. Конечно, это может быть использовано для извлечения личной выгоды.

Написание программ, демонстрирующих проблему, может быть отнесено к доказательству возможности нападения, поскольку в результате на практике демонстрируется существование уязвимости и детали атаки на нее. Программа может быть написана на разных языках: например, C, Perl или ассемблер.

Написание подобных программ – обоюдоострый меч. С одной стороны, общественности предоставляются программы, демонстрирующие уязвимости и возможности их использования для личной выгоды, а с другой – злоумышленнику невольно предоставляются средства нападения на системы. В целом же написание демонстрирующих проблему программ – хорошая вещь, потому что вносит ясность в рассмотрение выявленной уязвимости и подталкивает производителей к исправлению ошибок и выпуску заплаток.

Зачастую производитель с удовольствием не торопился бы с выпуском заплаток, позволяя злоумышленнику, знающему об уязвимости и инструментарии работы с ней, воспользоваться ею. Поэтому написание демонстрирующих проблему программ позволяет акцентировать на ней внимание и подстегнуть производителей, перекладывая на их плечи всю ответственность после обнародования сведений об уязвимости.

Как уже говорилось, обсуждаемые программы – обоюдоострый меч. Предание гласности программ, демонстрирующих проблему, на практике означает появление работающих программ, которые могут служить источником личной выгоды. Большинство форумов, на которых разглашаются технические детали уязвимостей программного обеспечения и распространяются использующие их программы, многими участниками оцениваются по-разному. Обсуждение программ на форуме может позволить некоторым непорядочным членам форума воспользоваться свободно распространяемыми программами демонстрации проблем для личной или злонамеренной выгоды.

Автоматизированный инструментарий безопасности

Автоматизированный инструментарий безопасности – это пакеты программ, разработанные производителями для автоматизированного тестирования систем безопасности. Обычно это программы с хорошим пользовательским интерфейсом и средствами генерации отчетов. Генерация отчетов позволяет пользователям инструментальных средств распечатать детальный список проблем и наметить пути их решения.

Автоматизированный инструментарий безопасности – еще один обоюдоострый меч. С одной стороны, он позволяет законным владельцам инструментария проводить аудит безопасности своих сетей и повышать тем самым их безопасность. А с другой – позволяет злонамеренным пользователям находить уязвимости в системе и использовать их для личной выгоды.

Но все же автоматизированный инструментарий безопасности полезен всем. Он позволяет недостаточно квалифицированным пользователям определить уязвимые хосты и обеспечить их безопасность. Еще полезнее средства обновлений с подключаемыми программами (plug-ins), разработанными для выявления новых или недавно обнаруженных уязвимостей.

Различные производители выпускают различные средства автоматизированного тестирования. Среди них можно выделить CyberCop Security Scanner, выпущенный Network Associates, NetRecon компании Symantec и Internet Scanner – производитель Internet Security Systems. Свободно распространяется Nessus от Nessus Project. Более подробно с ними можно познакомиться в главе 17 книги.

Контроль версий

Контроль версий (versioning) – отказоустойчивый метод тестирования систем на наличие уязвимостей. По сравнению с ранее упомянутыми методами его не так часто используют, но он приводит к надежным результатам.

Контроль версий заключается в определении версии или редакции используемого программного обеспечения. Это может оказаться сложным, поэтому большинство программного обеспечения различается версиями, как, например, Windows 2000 Professional или Solaris 8, а многие из пакетов, помимо своей версии, характеризуются еще и версиями включаемых программ, например wget версии 1.7. На практике это часто приводит к необходимости решения сложных проблем, как, например, кошмар с дистрибутивом Linux, который является сборищем различных версий разного программного обеспечения.

Контроль версий осуществляется во время анализа ассортимента предлагаемых программ. Идея очень проста – ищутся версии программ с известными уязвимостями. Поиск выполняется различными способами. Один из способов состоит в выдаче команды отображения версии проверяемой программы, например команды uname, как это показано на рис. 3.7.

Рис. 3.7. Определение редакции ядра Linux с помощью команды uname-a


Другой метод использует предоставляемые производителем средства определения на вашей машине последней редакции системы (см. рис. 3.8).

Рис. 3.8. Проверка редакции Sun Solaris System при помощи команды showrev-p


Для упрощения контроля версий предложены различные варианты. Один из них заключается в использовании базы данных версий программ хоста, куда можно помещать дополнительную информацию о необходимых мерах предупреждения ее краха, нерационального использования ресурсов и потенциальных уязвимостях.

Стандартные методы исследования

Уже говорилось о том, что 97 % злоумышленников – это неопытные пользователи-недоумки. Действительно опасные – остальные 3 %. У этой группы есть чему поучиться, при условии что полученные знания не будут использованы для достижения зловредных целей. Ланс Спитзнер (Lance Spitzner), один из наиболее хорошо подготовленных специалистов по вопросам безопасности (и вообще всесторонне развитый человек), некоторое время назад написал несколько работ, в которых все расставил по своим местам. Заимствуя принцип Сан Цзу (Sun Tzu) из его книги «Искусство войны», работы Спицнера были озаглавлены «Узнай своего врага». Они доступны по адресу http:// project.honeynet.org.

В первую очередь следует обратить внимание на интеллектуальные нападения. Нападение – акт агрессии, а интеллектуальность предполагает твердые навыки познавательной деятельности. При подготовке интеллектуальной атаки осуществляется сбор информации либо с использованием утечки информации, либо при помощи доступных ресурсов Интернета. Рассмотрим некоторые методы, основанные на использовании базы данных Whois, службы имен доменов (DNS – Domain Name System), программы Nmap и индексирования Web.

База данных Whois

Whois – это общедоступная база данных, содержащая информацию о владельцах сетевых ресурсов. База данных Whois подразделяется на базы данных Whois доменов. com, biz и базу данных Американского регистра Интернет-адресов (ARIN – American Registry of Internet Numbers), которые содержат сведения об именах служб и сетях.


База данных Whois имен служб

В базе данных Whois имен служб хранится разнообразная информация о доменах: зарегистрировавшее домен лицо, его адрес и контактные номера телефонов и факса, а также другие сведения, позволяющие при необходимости легко и быстро связаться с владельцем домена. Это идеальный способ решения возникающих проблем, хотя в последнее время, как кажется автору, наблюдается тенденция увеличения числа необоснованных жалоб на провайдера по поводу той или иной проблемы и нарушения сетевого этикета. Проанализируйте следующую информацию:



Из примера видно, как можно узнать регистрационные сведения владельца домена Cipherpunks.com: его имя, адрес, контактные номера телефонов и факса.

С точки зрения безопасности, база данных Whois – находка для злоумышленника, потому что она содержит информацию, которая может быть использована для атаки на сервер и установления контроля над доменами. Например, названия серверов доменных имен.

В последнее время регулярно наблюдаются попытки злоумышленников использовать почтовые адреса лиц, зарегистрировавших домен. Для этого, в случае одновременного администрирования одного домена несколькими людьми, могут быть применены методы социотехники. Наиболее часто добытые таким способом сведения используются для распространения спама. Такие компании, как Network Solutions, даже продают подобную информацию фирмам «направленного маркетинга» (метод маркетинга, при котором компании рассылают образцы своей продукции потенциальным заказчикам), прославившимся распространением спама. Эти фирмы в буквальном смысле слова захламляют почтовый ящик жертвы различным мусором. То, как это происходит, описано в статье Newsbytes «ICANN To Gauge Privacy Concerns Over 'Whois' Database», доступной в Интернете по адресу www.newsbytes.com/news/01/166711.html.


База данных Whois сетевых сервисов

В базе данных Whois сетевых сервисов содержится информация по управлению сетью. Она позволяет персоналу, занятому обслуживанием сети и обеспечением ее безопасности, решать возникающие проблемы. В базе данных Whois хранятся контактные номера телефонов и факсов, а в отдельных случаях названия компаний, арендующих сетевые ресурсы. Проанализируйте следующую информацию из базы Whois сетевых сервисов:



Как можно заметить, адреса Интернет от 66.38.151.0 до 66.38.151.63 закреплены за SecurityFocus. Кроме того, эти адреса принадлежат GT Group Telecom.

Подобная информация позволяет злоумышленникам очертить границы будущего нападения. Если злоумышленник захочет скомпрометировать хост сети SecurityFocus, ему нужно только выбрать хост сетевого сегмента, поддерживаемый ARIN. А затем, используя скомпрометированный хост сети, выбрать другие хосты той же самой или другой сети.

Служба имен доменов

Служба имен доменов (DNS) – еще одно средство в арсенале злоупотреблений злоумышленника для сбора информации в процессе подготовки атаки на сеть. Люди, принимая решение об использовании DNS на каждом хосте Интернета, часто даже не подозревают о той удавке, которую они накидывают себе на шею. Не обсуждая недостатки протокола, которые приводят к подобным последствиям, сконцентрируемся на злоупотреблениях DNS.

Источник уязвимостей был обнаружен в широко распространенной программе разрешения имен в Интернете BIND. Служба доменных имен в сети Интернет или BIND (Berkley Internet Name Domain – программа для поддержки сервера имен доменов, первоначально написанная для UNIX, в настоящее время является наиболее популярной реализацией DNS и перенесена практически на все платформы. BIND задает структуру баз данных, функции DNS и конфигурационные файлы, требующиеся для установки и функционирования сервера имен) ранее имела ряд уязвимостей, которые позволяли злоумышленнику получать удаленный административный доступ. Также известна уязвимость в старших версиях программы, при помощи которой можно подменять содержимое кэш DNS, дурача клиентов. Подмена состояла в изменении занесенного в кэш соответствия между доменом и его адресом. В результате пользователь вместо желаемого сайта мог попасть куда угодно. Далее рассмотрим методы определения уязвимостей, возникающие при работе DNS.


Утилита dig

dig – легкодоступный инструментарий, тесно связанный с программой BIND. В утилите предусмотрен как интерактивный режима запуска, так и удобный режим командной строки, позволяющий собирать сведения о DNS-сервере. Утилита dig выполняется под управлением многих свободно распространяемых операционных систем и может поставляться консорциумом программного обеспечения Интернет (Internet Software Consortium) совместно с BIND.

Утилита dig может быть использована для определения IP-адресов по их именам (прямое преобразование) и, наоборот, определения доменного имени хоста по его адресу (обратное преобразование). Это может оказаться очень полезным из-за того, что много приложений не смогут определить IP-адрес по имени, а для нормального функционирования им нужно указать явный адрес хоста.

Также утилита dig может использоваться для определения версии серверов DNS. Поступив таким образом, злоумышленник может собрать необходимые для начала атаки сведения о хосте. Но, самостоятельно определив версию сервера имен, специалист по безопасности сможет сам найти потенциально уязвимый сервер и повысить безопасность охраняемой системы (вспомните метод определения версий).

Проанализируйте следующий пример использования утилиты dig:



Из отчета можно определить версию BIND, установленную на pi в домене cipherpunks.com. А также то, что на pi запущена версия BIND, уязвимая для многих атак, одна из которых – переполнение NXT-буфера, известная с 1999 года и позволяющая злоумышленнику получить удаленный доступ к системе с правами программы BIND (обычно выполняющейся с правами привилегированного пользователя root).

Сервисы преобразования имен зачастую могут сообщать больше информации, чем ожидается. Утилиты типа dig могут выполнять и иные DNS-сервисы, например передачу зоны. DNS использует передачу зоны для распределения записей преобразования имен между остальными хостами. Инициировав вручную передачу зоны, злоумышленник может получить ценную информацию о системах и преобразовании адресов серверами DNS.


nslookup

nslookup (Name Service Lookup – служба поиска имен) – полезная утилита, которая свободно распространяется консорциумом программного обеспечения Интернет.

Принцип работы nslookup почти такой же, как и dig. Пользователю точно так же предоставляется как диалоговый интерфейс, так и интерфейс командной строки. После запуска утилита собирает информацию о хостах с помощью DNS. О доменах nslookup выдает хотя и общедоступную, но очень важную информацию.

Например, nslookup может использоваться для поиска почтовых доменов или записей типа MX (Mail Exchanger). В результате станут возможными различные атаки на почтовый сервер: посылка спама для достижения отказа в обслуживании, атаки на программное обеспечение с целью получения доступа к серверу или использование почтового сервера для рассылки спама другим хостам, если это разрешено. Посмотрите на следующий пример:



Анализируя приведенный пример, можно найти обработчик почты для домена cipherpunks.com. Хост parabola.cipherpunks.com может быть использован для сбора информации. Например, если в системе используется версия программы sendmail, которая позволит злоумышленнику расширить учетные записи пользователя, то он сможет найти адреса электронной почты системного администратора. Из этого можно будет узнать тип транспортного агента, установленного в системе, как это показано в следующем примере:



Из примера видно, как почтовый север с радостью выбалтывает сведения об установленных программах (Microsoft Exchange), а из этого можно сделать вывод о типе операционной системы хоста.


Nmap

Атака, имеющая своей целью получение доступа к хосту, может быть направлена против выполняющихся в системе сервисов. Нередко сервисы уязвимы, и это позволяет злоумышленнику добиться своего. Еще до атаки можно высказать предположение о сервисах, используемых системой для предотвращения сбора информации, и исследовать порты, запустив утилиту netcat, чтобы выяснить возможность подключения через них в службе.

Сбор сведений о доступных сервисах системы сильно упрощается при использовании такого инструментария, как Network Mapper или Nmap. Как ранее уже упоминалось, Nmap в случае его применения для достижения злонамеренных целей использует многочисленные изощренные методы определения характеристик хоста. К этим возможностям относится переменный режим сканирования TCP-трафика и анализ IP-ответов для определения операционных систем и идентификации прослушиваемых сервисов на хосте.

Nmap может использоваться для определения общедоступных сервисов сети, а также прослушиваемых сервисов, подвергнувшихся фильтрации такими средствами, как оболочки TCP-трафика, или межсетевыми экранами. Посмотрите на следующий отчет:



Давайте одновременно проанализируем эту небольшую часть отчета о сканировании. Во-первых, Nmap был запущен с флагами sS и O. Эти флаги указывают Nmap на необходимость сканирования символов синхронизации SYN на хосте и идентификации операционной системы на основе полученных IP-ответов. Во-вторых, в отчете видны три колонки данных. В крайней слева колонке расположен номер порта и протокол, используемый прослушиваемым сервисом. В средней – состояние порта: подвергнулся ли порт фильтрации, как у порта службы telnet, являющейся оболочкой TCP-трафика, или открыт для общедоступного использования, как остальные.

Индексация Web

Индексация Web (или, как ее еще обычно называют, спайдеринг (spidering) – движение паука по паутине) – следующий тип сбора информации. С начала 90-х годов компании типа Yahoo! WebCrawler и другие начали использовать автоматизированные программы для посещения Web-сайтов и индексации размещенных на них данных, чтобы впоследствии проиндексированные данные можно было найти с помощью поискового запроса. Это было началом бизнеса Web-порталов.

Индексация сайтов обычно выполняется различными по форме и названию программами. Их называют роботами, пауками или червяками. Хотя все они выполняют одну и ту же функцию, их безо всякой видимой причины называют по-разному. Эти программы просматривают все связи анализируемого Web-сайта и индексируют находящиеся на них данные. Индексы просмотренных данных помещаются в реляционную базу данных и связываются с поисковой машиной (машина поиска – в сети Internet инструментальные средства, предназначенные для отсеивания информации, не относящейся к теме запроса). Если пользователь во время посещения портала сформулирует поисковый запрос по ключевым словам, то ему будут предъявлены ссылки на проиндексированные Web-страницы, соответствующие его запросу.

Но что произойдет, если конфиденциальная информация Web-страниц не сохранится с соответствующими правами доступа? Поскольку данные Web-страниц архивированы, то злоумышленник может получить доступ к важной информации о сайте, а значит, он может собирать интересующие его сведения с помощью поисковой машины. Уже упоминалось о том, что эта проблема не нова. Она существовала несколько лет назад, начиная с первых поисковых машин, существует сегодня и, к сожалению, будет существовать завтра.

Эта проблема не ограничена порталами. Инструментарий типа wget может быть использован для рекурсивного извлечения всех страниц сайта. Для этого достаточно запустить программу с нужными параметрами. Посмотрите на следующий пример:



В примере вывод команды wget завершен символами […] из-за большого количества файлов (44 файла), загружаемых с Web-сайта www.mrhal.com, которые были бы напечатаны в конце отчета. Команда wget была запущена с переключателями m и x. Переключатель m (переключатель зеркального сохранения информации) включает режим загрузки копии всех файлов сайта www.mrhal.com в соответствии с их ссылками. Переключатель x используется для сохранения структуры директорий сайта при его загрузке на компьютер пользователя.

Подобный инструментарий позволяет злоумышленнику проиндексировать сайт и создать его зеркальную копию. Впоследствии злоумышленник может воспользоваться стандартными системными утилитами для быстрого анализа скопированных данных. Например, программа grep позволяет быстро найти представляющие для него интерес строки. В первую очередь это относится к строкам «password», «root» и «passwd».

Резюме

В главе рассмотрено семь классов атак, приводящих к отказу в обслуживании, утечке информации, нарушению прав доступа к файлу, дезинформации, доступу к специальным файлам или базам данных, удаленному вызову программ и расширению прав.

Об атаках, приводящих к отказу в обслуживании (DOS-атаках), говорят в том случае, когда в результате действий злоумышленника ресурс преднамеренно заблокирован или деградирован. Локальные DOS-атаки нацелены на достижение локального отказа в обслуживании и приводят к деградации процесса, исчерпанию дисковой памяти или истощению индексных узлов. DOS-атаки из сети могут начинаться как с сервера, так и с клиентской части (как в одном из вариантов DOS-атаки из сети на Web-браузеры – бомбы JavaScript). DOS-атаки из сети на сервисы используют многочисленные подключения для предотвращения использования сервисов. DOS-атаки на систему похожи на локальные DOS-атаки и основаны на создании потока символов синхронизации SYN для переполнения очереди или использовании атак типа smurf для достижения отказа в обслуживании в результате перенасыщения сетевого трафика. Распределенные DOS-атаки (DDoS-атаки) относятся к классу сетевых атак, нацеленных на систему в целом. Распределенные программы перенасыщения трафика, как, например, tfn и shaft, могут быть использованы для достижения отказа в обслуживании.

Утечка информации – результат злоупотребления ресурсами. Обычно нападению на систему предшествует утечка информации. В главе рассмотрены пути утечки информации через баннеры оболочки безопасности SSH. Была показана принципиальная возможность «снятия отпечатков пальцев» у ряда служб, например у служб, обеспечивающих работу по протоколам HTTP или FTP. Протокол SNMP – пример протокола, в котором недопустимо мало внимания уделено вопросам безопасности, и поэтому сравнительно легко получить доступ к важной информации в системах, построенных на его основе. Web-сервер легко предоставляет сведения, интересующие злоумышленников, если на него совершено нападение атакой типа точка-точка – слэш (../). Уже упоминалось об инциденте, когда один Интернет-провайдер воспользовался файлами паролей другого провайдера, для того чтобы переманить к себе его клиентов. Тем самым были рассеяны любые мифы о допустимости утечки информации в хорошо сделанной системе, даже если она может маскировать или скрывать свои «отпечатки пальцев».

При помощи изменения прав доступа к файлу злоумышленник может получить доступ к важной информации, например к именам пользователей и их паролям. Поэтому непонятно, почему зачастую специалисты в области безопасности пренебрегают такой мерой предосторожности, как изменение разрешений доступа к файлу или владельцев файлов, в которых записаны эти разрешения. При рассмотрении подобных вопросов важно различать однопользовательские системы, в которых не предусмотрено управление доступом к файлу, и многопользовательские системы с одним или несколькими уровнями доступа, примерами которых служат списки контроля ACL системы Solaris и ролевой механизм управления доступом (Role-Based Access Control-RBAC). В главе также обсуждались атаки символических связей для перезаписи файлов других пользователей.

Дезинформация определяется как предоставление противоположной стороне фальшивых данных, провоцирующих противоположную сторону на неадекватное поведение. Стандартные методы дезинформации предусматривают редактирование журналов, использование программных инструментальных средств с правами привилегированного пользователя (rootkits) и модулей ядра. Редактирование журналов – элементарное средство скрытия вторжения. Инструментальные средства типа rootkits позволяют подменять системные программы. Наиболее изощренные методы дезинформации заключаются в подмене модулей ядра, осуществляющих компрометацию системы на нижнем уровне операционной системы: на уровне ее ядра.

Доступ к специальным файлам / базам данных – еще одно средство получения доступа к системным ресурсам. Ранее обсуждалась возможность использования специальных файлов для получения важной информации, например паролей. База данных – хранилище важной информации о ресурсах системы. Доступ к базе данных может быть получен в результате использования ошибок в обслуживающем их программном обеспечении, например ошибок в Web-интерфейсе или программных ошибок типа переполнения буфера. Ну и конечно, от злоумышленника потребуются определенные усилия, чтобы разобраться с разграничением доступа в базах данных.

Удаленное выполнение программ – серьезная проблема, позволяющая злоумышленнику взять под свой контроль атакованную систему. Эта угроза легко реализуется в тех случаях, когда в системе не предусмотрена аутентификация. Удаленное выполнение программ осуществляется при помощи автоматизированного инструментария, накладывающего те или иные ограничения на используемые программы.

О расширении прав говорят в случае, когда неавторизованный пользователь получил доступ к ресурсу, хотя ранее он им не обладал. Были рассмотрены варианты удаленного получения доступа на правах как привилегированного, так и непривилегированного пользователя. В первом случае при помощи демонов HTTP на UNIX-системах, во втором – при помощи таких служб, как демоны SSH. В главе также обсуждались вопросы применения Троянских коней и методов социотехники для получения привилегированного пользовательского доступа к хосту. Отмечалось сходство методов удаленного и локального расширения прав.

Тестирование уязвимостей – необходимая и обязательная обязанность всякого, кто занимается администрированием систем или обеспечением их безопасности. Доказательство возможности нападения (proof of concept) – один из методов тестирования, который используется для доказательства существования уязвимостей. Другие методы заключаются в применении демонстрирующих проблему программ, автоматизированного инструментария безопасности и контроля версий (versioning) для обнаружения уязвимых версий программного обеспечения.

Опытный злоумышленник применяет различные методы подготовки атак. Базы данных Whois могут использоваться для сбора разносторонней информации о системе, доменах и сетях. Такие средства DNS, как утилита dig, могут использоваться для сбора информации о хостах и используемом ими программном обеспечении, а nslookup – для идентификации почтовых серверов доменов. В главе кратко освещены вопросы сканирования сети при помощи Nmap. Сканирование сети позволяет выудить сведения о сервисах операционных систем хостов. Наконец, обсуждался спайдеринг для сбора сведений о сайте: его расположении и наличии на нем потенциально важной информации.

Конспект

Обзор классов атак

· По своему результату атаки разбиты на семь классов: отказ в обслуживании, утечка информации, нарушение прав доступа к файлу, дезинформация, получение доступа к специальным файлам / базам данных, удаленное выполнение программ и расширение прав.

· Отказ в обслуживании хоста может быть достигнут в результате локальной или DOS-атаки из сети.

· Атаке почти всегда предшествует анализ сведений, полученных в результате утечки информации.

· Незащищенная директория и неверные права доступа к файлу могут позволить локальному злоумышленнику получить доступ к информации, важной для других пользователей.

· Скомпрометированной системе нельзя доверять ни при каких обстоятельствах до тех пор, пока она не будет восстановлена с безопасного носителя (например, дистрибутива производителя).

· Атаки на базы данных могут использовать либо бреши программного интерфейса, например Web-интерфейса, либо ошибки программного обеспечения баз данных, например переполнение буфера.

· Большинство уязвимостей, используемых для удаленного выполнения программ, могут быть в значительной мере обезврежены при помощи ограничения прав доступа, замены корневой директории (change rooting) и недопущения помещения в стек программ (non-executable stack protection).

· При расширении прав доступа злоумышленник может получить удаленный непривилегированный и привилегированный доступы или локальный привилегированный доступ.

Методы тестирования уязвимостей

· Тестирование уязвимостей – необходимая часть обеспечения безопасности систем.

· Доказательство возможности нападения (proof of concept) – лучший метод определения любой уязвимости, поскольку он помогает определить суть уязвимости, место ее нахождения и способ защиты.

· Применение программ, демонстрирующих уязвимости, – наиболее часто используемый метод доказательства возможности нападения. Подобные программы можно найти в Интернете.

· Широко используется автоматизированный инструментарий обеспечения безопасности, с помощью которого в большинстве случаев корпоративные группы персонала по безопасности проводят плановый аудит безопасности.

· Контроль версий позволяет перегруженному работой отделу безопасности оценить опасность со стороны известных уязвимостей и их влияние на работоспособность развернутых систем.

· Для подготовки атак могут быть использованы сведения из баз данных Whois. А в случае атаки из базы данных Whois можно получить контактную информацию владельца сайта.

· Информация DNS раскрывает структуру сети.

· Индексация Web (спайдеринг – spidering) позволяет получать сведения о структуре директорий и важных файлах.

Часто задаваемые вопросы

Вопрос: Может ли атака относиться к нескольким классам атак?

Ответ: Да. Некоторые атаки могут быть отнесены к нескольким классам. Например, отказ в обслуживании, вызванный аварийным завершением сервиса в результате неверного ввода информации пользователем.


Вопрос: Где можно дополнительно прочитать о предупреждении DDoS-атак?

Ответ: Дейв Диттрич (Dave Dittrich) – автор ряда статей на эту тему. Статьи можно найти по адресу www.washington.edu/People/dad.


Вопрос: Как можно предотвратить утечку информации?

Ответ: Этой теме посвящено много работ. Некоторые варианты утечки информации могут быть предупреждены, например такие как чрезмерно словоохотливые баннеры или диагностические сообщения, выдаваемые по умолчанию. Другой вариант утечки информации может быть остановлен только в результате переписывания программ и изменения их настроек.


Вопрос: Можно ли предотвратить утечку информации посредством «занавеса секретности»?

Ответ: Ни в коем случае. Нельзя привести в пользу этого утверждения ни одного логически обоснованного довода, поскольку программное обеспечение обменивается сертификатами (мандатами) практически независимо от пользователя. Хотя если остановить данный поток информации, то это осложнит жизнь злоумышленников и повысит шансы обнаружения их атак.


Вопрос: Где можно достать программы, демонстрирующие уязвимости?

Ответ: Их можно найти при помощи подробных адресных списков типа Bugtraq (www.securityfocus.com) или в архивах подобных программ PacketStorm (www.packetstormsecurity.org) либо Church of the Swimming Elephant (www.cotse.com).


Вопрос: Как можно защитить собственную информацию в базе данных Whois?

Ответ: В настоящее время для этого немного возможностей. Можно сообщить неверные сведения во время регистрации домена. Но в этом случае возможны проблемы при уведомлении вас о последующих модификациях сети. К тому же неверно указанные данные вряд ли помогут вам в случае возникновения каких-либо конфликтов.


Вопрос: Может ли быть получена дополнительная информация при помощи утилиты DNS dig?

Ответ: Да. Ошибочно сконфигурированные сервера доменных имен могут разрешать передачу зоны в адрес произвольного хоста, создавая предпосылки раскрытия информации о структуре сети.