Учебник для вузов в. Олифер Н. Олифер Компьютерные Принципы, технологии, протоколы
Скачать 22.28 Mb.
|
835 Исходная таблица ЮМР-сообщение маршрутизации хоста Н1 маршрутизатора R1 Измененная таблица Ложное ЮМР-сообщение маршрутизации хоста Н1 атакующего хоста НА Default IP* R1 IP* Type Code ChSum Адрес атакующего хоста НА t Заголовок пакета с адресом назначения Н2 Исходный маршрут / J Перенаправленный //'маршрут Рис. 24.3. Перенаправление маршрута с помощью протокола ICMP: а — сообщение о более рациональном маршруте хосту Н2 посылает маршрутизатор R1, применяемый по умолчанию; б — сообщение о перенаправлении маршрута на себя направляет атакующий хост НА 836 Глава 24. Сетевая безопасность Рис. 24.4. Схема перенаправления трафика путем использования ложных DNS-ответов Прежде всего необходимо задержать ответ DNS-сервера, для этого сервер, например, мо жет быть подвергнут DoS-атаке. Другая проблема связана с определением номера порта клиента DNS, который необходимо указать в заголовке пакета, чтобы данные дошли до приложения. И если серверная часть DNS имеет постоянно закрепленный за ней так на зываемый «хорошо известный» номер 53, то клиентская часть протокола DNS получает номер порта динамически при запуске, причем операционная система выбирает его из достаточно широкого диапазона. Заметим, что протокол DNS может использовать для передачи своих сообщений как про токол UDP, так и протокол TCP, в зависимости от того, как он будет сконфигурирован администратором. Поскольку протокол TCP устанавливает логическое соединение с от слеживанием номеров посланных и принятых байтов, «вклиниться» в диалог клиента и сервера в этом случае гораздо сложнее, чем в случае, когда используется дейтаграммный протокол UDP. Однако и в последнем случае остается проблема определения номера UDP-порта кли ента DNS. Эту задачу злоумышленник решает путем прямого перебора всех возможных номеров. Также путем перебора возможных значений злоумышленник преодолевает про блему определения^дентификаторов DNS-сообщений. Эти идентификаторы передаются в DNS-сообщениях и служат для того, чтобы клиент системы DNS мог установить соот ветствие поступающих ответов посланным запросам. Итак, злоумышленник бомбарди рует клиентскую машину ложными DNS-ответами, перебирая все возможные значения идентифицирующих полей так, чтобы клиент, в конце концов, принял один из них за ис тинный DNS-ответ. Как только это происходит, цель злоумышленника можно считать до стигнутой — пакеты от клиента направляются на адрес атакующего хоста, злоумышленник Типы и примеры атак 837 получает в свое распоряжение имя и пароль легального пользователя, а с ними и доступ к корпоративному серверу. Внедрение в компьютеры вредоносных программ Многочисленная группа атак связана с внедрением в компьютеры вредоносных программ (malware), к числу которых относятся троянские и шпионские программы, черви, вирусы, спам, логические бомбы и некоторые другие типы программ, нацеленные на нарушение информационной безопасности. Эти программы могут проникать на атакуемые компьютеры разными путями. Самый про стой из них — «самодоставка», когда пользователь загружает файлы из непроверенных ис точников (съемных носителей или веб-сайтов) либо беспечно открывает подозрительный файл, пришедший к нему по электронной почте. Существуют и более сложные предста вители вредоносных программ, обладающие собственными механизмами «размножения», копии таких программ распространяются по компьютерам сети без участия пользователей. Ущерб, наносимый вредоносными программами, может выражаться не только в уни чтожении, искажении или похищении информации, приведении в нерабочее состояние программного обеспечения, а значит, и компьютера в целом, но и в значительных затратах времени и сил администраторов на обнаружение и распознавание атак, фильтрацию внеш них сообщений, тестирование и перезагрузку систем. Вредоносные программы в начале этого десятилетия были одной из основных причин нарушения безопасности компью терных сетей. Однако как показала статистика, в последние два года суммарный ущерб, нанесенный вредоносными программами предприятиям, резко снизился. Это связывают, в том числе, с улучшением качества антивирусных средств и ужесточением наказаний за такого рода преступления. Прежде чем перейти к рассмотрению конкретных типов вредоносных программ, заметим, что на практике злоумышленники часто сочетают в одной и той же программе различные типы угроз. Например, некоторые черви способны маскироваться под троянские програм мы или подобно вирусам заражать исполняемые файлы на локальном диске, а некоторые вирусы наделены способностями червей самокопироваться на другие компьютеры. Кроме того, вы можете встретить и другую классификацию вредоносных программ, где, скажем, троянские программы и черви рассматриваются как разновидности вирусов. Троянские программы Троянские программы, или трояны (trojan), — это разновидность вредоносных программ, ко торые наносят ущерб системе, маскируясь под какие-либо полезные приложения. Троянские программы могут применять в качестве прикрытия знакомые пользователю при ложения, с которыми он работал и раньше, до появления в компьютере «троянского коня». При другом подходе в полном соответствии с древней легендой троянская программа при нимает вид нового приложения, которое пытается заинтересовать пользователя-жертву какими-то своими якобы полезными функциями. Однако суть троянской программы и в том и в другом случаях остается вредительской: она может уничтожать или искажать информацию на диске, передавать данные (напри мер, пароли) с «зараженного» компьютера на удаленный компьютер хакера, приводить 838 Глава 24. Сетевая безопасность в неработоспособноесостояние установленное на атакованном компьютере программное обеспечение, участвовать в проведении DoS-атак на другие удаленные компьютеры. Так, одна из известных троянских программ AIDS TROJAN DISK7, разосланная нескольким тысячам исследовательских организаций на дискете, при запуске перемешивала символы в именах всех файлов и заполняла все свободное пространство жесткого диска. После этого программа от имени злоумышленника предлагала помощь в восстановлении диска, требуя взамен вознаграждение для автора этой программы. (Злоумышленники могут также шан тажировать пользователя, зашифровывая его данные.) Кстати, описанное компьютерное преступление завершилось поимкой хакера-шантажиста. Троянские программы могут быть отнесены к самому простому по реализации виду вре доносных программ. Сетевые черви чедои(удат) — это программы, способные к самостоятельному распространению ’ї щ yltfo©|ія£едалах локальной доти, а также по глобальным связям, перемещаясь ' от бдобгв КІ^Рбму без всякого участия в этом процессе пользователей сети. Поскольку большинство сетевых червей передаются в виде файлов, основным механизмом их распространения являются сетевые службы, основанные на файловом обмене. Так, червь может рассылать свои копии по сети в виде вложений в сообщения электронной почты или путем размещения ссылок на зараженный файл на каком-либо веб-сайте. Однако существуют и другие разновидности червей, которые для своей экспансии используют более сложные приемы, например, связанные с ошибками («дырами») в программном обеспечении. Главная цель и результат деятельности червя состоит в том, чтобы передать свою копию на максимально возможное число компьютеров. При этом для поиска компьютеров — новых потенциальных жертв — черви задействуют встроенные в них средства. Типичная программа-червь не удаляет и не искажает пользовательские и системные файлы, не пере хватывает электронную почту пользователей, не портит содержимое баз данных, а наносит вред атакованным компьютерам путем потребления их ресурсов. Если червь обладает возможностью повторного заражения, то число его копий растет лавинообразно, и вре доносные программы все более и более загружают процессор, захватывая новые области памяти, отбирая пропускную способность сетевых соединений, пока, наконец, программы легальных пользователей не потеряют возможность выполняться. При создании типичного сетевого червя хакер, прежде всего, определяет перечень сете вых уязвимостей, которые он собирается использовать для проведения атак средствами создаваемого червя. Такими уязвимостями могут быть как известные, но не исправленные на некоторых компьютерах ошибки в программном обеспечении, так и пока неизвестные никому ошибки, которые обнаружил сам хакер. Чем шире перечень уязвимостей и чем более они распространены, тем больше узлов может быть поражено данным червем. Червь состоит из двух основных функциональных компонентов: атакующего блока и блока поиска целей. □ Атакующий блок состоит из нескольких модулей (векторов атаки), каждый из которых рассчитан на поражение конкретного типа уязвимости. Этот блок открывает «входную дверь» атакуемого хоста и передает через нее свою копию. Типы и примеры атак 839 □ Б л о к п о и с к а ц е л е й ( л о к а т о р ) собирает информацию об узлах сети, а затем на осно вании этой информации определяет, какие из исследованных узлов обладают теми уязвимостями, для которых хакер имеет средства атаки. Эти два функциональных блока являются обязательными и присутствуют в реализации любой программы-червя. Некоторые черви нагружены их создателями и другими вспомо гательными функциями, о которых мы скажем позже. Упрощенно жизненный цикл червя может быть описан рекурсивной процедурой, состоя щей из циклического запуска локатора и атакующего блока на каждом из последующих заражаемых компьютеров (рис. 24.5). В начале каждого нового цикла червь, базирующийся на захваченном в результате предыду щей атаки компьютере, запускает локатор для поиска и формирования списка узлов-целей, пригодных для проведения каждой из специфических атак, а затем, используя средства атакующего блока, пытается эксплуатировать уязвимости узлов из этого списка. В ре зультате успешной атаки червь копирует все свои программы на «новую территорию» и активирует локатор. После этого начинается новый цикл. На рисунке показано, как червь лавинообразно распространяется по сети. Заражение тысяч компьютеров может занять всего несколько минут. Некоторые виды червей не нападают на уже зараженные и/или подвергающиеся атаке в данный момент узлы. Если же такая проверка не предусмотрена в алгоритме работы червя, то в сети случайным образом могут возникать очаги стихийных DoS-атак. Рис. 24.5. Экспансия червя в сети 840 Глава 24. Сетевая безопасность Локатор идентифицирует цели по адресам электронной почты, IP-адресам, характеристи кам установленных на хостах операционных систем, номерам портов, типам и версиям приложений. Для сбора информации локатор может предпринимать действия, связанные как с поисками интересующих данных на захваченном им в данный момент хосте, так и путем зондиро вания сетевого окружения. Простейший способ получить данные локально — прочитать файл, содержащий адресную книгу клиента электронной почты1. Помимо почтовых адре сов, локатор может найти на узле базирования другие источники информации, такие как таблицы конфигурационных параметров сетевых интерфейсов, ARP-таблицы и таблицы маршрутизации. Зная IP-адреса хоста базирования и шлюзов, локатор достаточно просто может определить IP-адреса других узлов этой сети. Для идентификации узлов локатор может также использовать ІСМР-сообщения или запросы ping, указывая в качестве адресов назначения все возможные I P-адреса. Для определения того, какие приложения работают на том или ином хосте, локатор сканирует различные хорошо известные номера TCP- и UDP-портов. Определив тип приложения, локатор пытается получить более де тальные характеристики этого приложения. Например, пусть некоторая программа-червь имеет в своем арсенале средства для атаки на некоторые версии веб-сервера Apache. Для поиска потенциальных жертв локатор этого червя зондирует узлы сети, посылая умышленно ошибочные запросы к веб-серверу: GET / HTTP/ 1 . l \ r \ n \ r \ n Узел, на котором установлен сервер Apache, отвечает на такой запрос так, как и рассчиты вал разработчик червя, то есть сообщением об ошибке, например, это может быть сообще ние такого вида: НТТР/1.1 400 Bad R e q u e s t D a t e : Mon, 23 Feb 2004 2 3 : 4 3 : 4 2 GMT S e r v e r : A p a c h e / 1 . 3 . 1 9 (UNIX) ( R e d - H a t / L i n u x ) m o d _ s s l / 2 . 8 . 1 0 p e n S S L / 0 . 9 . 6 DAV/1. 0 . 2 P H P / 4 . 0 . 4 p l l m o d _ p e r l / 1 . 24_01 C o n n e c t i o n : c l o s e T r a n s f e r - E n c o d i n g : chunke d C o n t e n t - T y p e : t e x t / h t m l ; c h a r s e t = i s o - 8 8 5 9 - 1 Из этого ответа локатор узнает о том, что на узле установлен веб-сервер Apache версии 1.3.19. Для червя этой информации может быть достаточно, чтобы внести данный узел в число целей. Собрав данные об узлах сети, локатор анализирует их подобно тому, как это делает хакер при поиске уязвимых узлов. Для атаки выбираются узлы, удовлетворяющие некоторым условиям, которые говорят о том, что данный узел возможно обладает уязвимостями нуж ного типа (для них еI атакующем блоке есть средства нападения). Понятно, что при таком «предположительном» способе отбора целей не всякая предпринятая атака обязательно приводит к успеху. Неудача рассматривается атакующим блоком червя как штатная си туация, он просто сворачивает все свои действия, направленные на не поддавшийся атаке узел, и переходит к атаке следующей цели из списка, подготовленного локатором. Рассмотрим более подробно, как работает атакующий блок червя. Среди механизмов, по зволяющих червю передать свою копию на удаленный узел, наиболее длинную историю имеет уязвимость о ш и б к и переполнения б у ф е р а . Этот достаточно распространенный 1 Для коллекционирования почтовых адресов локатор может прибегать и к более интеллектуальным методам, которые использую т в своей работе спамеры (о спаме см. далее). Типы и примеры атак 841 вид уязвимости связан с неправильной работой некоторых программ, когда у них пере полняется буфер. При трансляции программ, написанных на многих языках программирования, в исполняе мом (объектном) модуле в сегменте локальных переменных отводится место для буферов, в которые будут загружаться данные при выполнении процедур ввода. Например, в про грамме веб-сервера должен быть предусмотрен буфер для размещения запросов, поступаю щих от клиентов. Причем размер буфера должен быть равен максимально допустимой для данного протокола длине запроса. В том же сегменте локальных переменных транслятор размещает команду возврата из процедуры, которой будет передано управление при за вершении процедуры (рис. 24.6, а). Д ля правильной работы программы очень важно, чтобы вводимые данные (в нашем при мере — запрос клиента) всегда укладывались в границы отведенного для них буфера. В противном случае эти данные записываются поверх команды возврата из процедуры. А это, в свою очередь, означает, что процедура не сможет завершиться корректно: при пере даче управления на адрес команды возврата процессор будет интерпретировать в качестве команды то значение из запроса, которое записано поверх команды возврата. Если такого рода переполнение возникло в результате случайной ошибки, то маловероятно, что зна чение, записанное поверх команды возврата, окажется каким-либо осмысленным кодом. Иное дело, если это переполнение было специально инициировано злоумышленником. Код приложения Код приложения JMP <адрес возврата из процедуры> JMP <адрес кода червя> I..W W Код червя Буфер а б Рис. 24.6. Схема атаки на уязвимость ошибки переполнения буфера: а — структура адресного пространства программы до поступления злонамеренного запроса; б — после поступления злонамеренного запроса Злоумышленник конструирует запрос так, чтобы сервер прореагировал на него предска зуемым и желательным для хакера образом. Для этого хакер посылает нестандартный запрос, размер которого превышает размер буфера (рис. 24.6,6). При этом среди данных запроса в том месте, которое приходится как раз на команду возврата, злоумышленник помещает команду перехода на вредоносный код червя. В простейшем случае таким вредоносным кодом может быть совсем небольшая программа, переданная в том же запросе. 842 Глава 24. Сетевая безопасность Итак, атакующий блок червя посылает некорректный запрос уязвимому серверу, его буфер переполняется, код команды возврата из процедуры замещается кодом команды передачи управления вредоносной программе, которая выполняет копирование всех оставшихся программных модулей червя на вновь освоенную территорию. Хотя рассмотренный подход применим к самым различным приложениям, для каждого типа приложений хакер должен сформировать специальный атакующий запрос, в котором смещение кода команды передачи управления вредоносной программе точно соответство вало бы местоположению команды возврата в процедуру атакуемого приложения. Именно поэтому для червя при проведении такого вида атак так важно получить информацию о типе и версиях программного обеспечения, установленного на узлах сети. Помимо локатора и атакующего блока червь может включать некоторые дополнительные функциональные компоненты. □ Б л о к у д а л е н н о г о управления и к о м м у н и к а ц и й служит для передачи сетевым червям команд от их создателя, а также для взаимодействия червей между собой. Такая воз можность позволяет хакеру координировать работу червей для организации распреде ленных атак отказа в обслуживании. Сетевые черви могут быть также использованы для организации параллельных вычислений при решении таких требующих большого объема вычислений задач, как, например, подбор секретного ключа шифрования или пароля. |