Бесплатный электронный учебник по защите информации компьютера в интернет |
|
служба Компьютерная
помощь |
Взлом с использованием данных |
Антивирусная защита компьютера. Вызов мастера на дом в Кириши |
|
|||||
|
Взлом с использованием данных Обсудив "притчу во языцах" — взлом с помощью подбора паролей, — можно перейти к другому методу, также ставшему стандартом "де факто" при получении удаленного доступа. Этот метод заключается в использовании для взлома определенных данных (data driven attack), отправляемых активной службе, что позволяет получить неожиданные или нежелательные результаты. Конечно, формулировка "неожиданные или нежелательные" достаточно субъективна. Все зависит от того, кто вы — хакер или же программист, разработавший соответствующую службу. С точки зрения взломщика, результат может быть более чем желательным, поскольку в этом случае он сможет получить доступ к интересующему его компьютеру. С точки зрения же программиста, программа, получившая данные, к приему которых она не была готова, выдает нежелательные результаты. Методы взлома с использованием данных можно разделить на две категории: атака путем переполнения буфера и взлом при отсутствии проверки ввода. В последующих подразделах каждая из этих категорий будет рассмотрена более подробно. |
||||
Взлом путем переполнения буфера В ноябре 1996 года подходы к компьютерной безопасности
изменились раз и навсегда. Ведущий списка рассылки Bugtraq Алеф Ван
(Aleph One) опубликовал в номере 49 журнала Phrack Magazine, посвященного
вопросам безопасности, статью под названием "Разрушение стека
для развлечения и извлечения выгоды" (Smashing The Stack For
Fun And Profit). Эта статья произвела колоссальный эффект на состояние
дел в сфере обеспечения безопасности, поскольку в ней очень ясно показано,
как практика некачественного программирования может привести к нарушению
безопасности путем переполнения буфера. Первые упоминания об использовании
этой методологии датируются 1988 годом в связи с нашумевшим делом
о сетевом черве Роберта Морриса (Robert Morris), однако полезной информации
о ее конкретных подробностях не было вплоть до 1996 года. char shellcode[]= "\xeb\xlf\x5e\x89\x76\x08\x31\xcO\ Контрмеры: защита от атак с использованием переполнения буфера
Практика безопасного кодирования Лучшим методом зашиты от переполнения буфера является
практика кодирования, учитывающего все требования обеспечения безопасности.
Хотя на практике невозможно спроектировать и запрограммировать систему
таким образом, чтобы в ней не было ни одной ошибки, существуют подходы,
способные минимизировать вероятность возникновения переполнения буфера.
Среди таких рекомендаций можно выделить следующие.
Тестирование и аудит каждой программы Очень важно выполнять тестирование и аудит каждой
программы. Очень часто случается, что программисты даже не задумываются
о том, может ли в их программе возникнуть ошибка переполнения буфера.
Однако всегда найдется кто-нибудь, кто не только задумается над этим,
но и приложит все усилия для того, чтобы найти такие ошибки и воспользоваться
ими в своих целях. Одним из лучших примеров тестирования и аудита
кода UNIX является проект OpenBSD (www.openbsd.org), которым руководит
Тео де Раадт (Theo de Raadt). Программисты, работающие над проектом
OpenBSD, постоянно проверяют и перепроверяют исходный код друг друга
и уже исправили сотни ошибок, которые могут привести к переполнению
буфера, не говоря уже о более серьезных проблемах, имеющих отношение
к безопасности. Именно из-за столь грамотного подхода к тщательному
аудиту, применяемого разработчиками OpenBSD, эта операционная система
заслужила репутацию одной из самых надежных из свободно распространяемых
версий UNIX. Отключение неиспользуемых или потенциально опасных служб На протяжении этой главы мы будем возвращаться много
раз к этому вопросу. Если какие-то неиспользуемые или потенциально
опасные службы не являются жизненно необходимыми для работы системы
UNIX, отключите их. Помните, что ни один злоумышленник не может проникнуть
в систему через неработающую службу. Кроме того, мы настоятельно рекомендуем
использовать TCP-оболочки (tcpd) и xinetd (http://www. synack.net/xinetd/)
для того, чтобы можно было применить избирательные списки управления
доступом на уровне служб, а также воспользоваться дополнительным возможностями
регистрации событий. Конечно, не к каждой службе можно применить оболочку.
Однако применение этого средства лишь к некоторым службам может значительно
повысить защищенность вашей системы. Кроме того, оцените возможность
использования режима фильтрации пакетов на уровне ядра, поддержка
которого уже стала стандартной для большинства бесплатных операционных
систем UNIX (например, ipchains или netf liter для Linux, ipf для
BSD). Хорошие рекомендации по использованию ipchains для обеспечения
безопасности можно найти по адресу http://www.linuxdoc.org/HOWTO/IPCHAINS-HOWTO.html.
Пакет ipf Даррена Рида (Darren Reed) является одним из лучших и может
быть добавлен во многие версии системы UNIX. Для получения об этом
пакете более подробной информации обращайтесь по адресу http: //www.obfuscation.
rg/ ipf / ipf-howto. html. Отключение режима поддержки выполнения стека Некоторые радетели чистоты нередко прибегают даже
к отключению режима поддержки выполнения стека (stack execution),
чтобы обеспечить защиту каждой программы от взлома с помощью переполнения
буфера. Хотя такое решение может привести к некоторым побочным эффектам,
в большинстве систем оно все же обеспечивает защиту от скрытого использования
уязвимых мест. Для Linux имеется модуль обновления, позволяющий отключить
режим поддержки выполнения стека, который можно применять в системах
с ядром версий 2.0.x и 2.2.x Первым разработал такой модуль хакер
Solar Desinger (http://www.false.com). Этот модуль обновления, ценный
в основном для программистов, можно найти по адресу http: //www. openwall.
com/linux/. Взлом при отсутствии проверки ввода В 1996 году Дженифер Майерс (Jennifer Myers) идентифицировал
ставший впоследствии широко известным изъян PHF. Хотя атаки с использованием
этого изъяна уже отошли в прошлое, на его примере очень хорошо видно,
как может осуществляться взлом при отсутствии проверки ввода (input
validation attack). Если вы разберетесь в основном механизме этого
метода, то сможете применить полученные знания и к другим подобным
подходам. В данной главе мы не будем посвящать много времени этой
теме, поскольку она подробно рассматривается в главе 15. Наша цель
— лишь показать, что из себя представляет взлом при отсутствии проверки
ввода и как с его помощью злоумышленник может получить доступ к системе
UNIX.
/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd На момент написания этой книги данный код не мог выполнить ничего, кроме вывода файлов паролей с помощью команды cat. Конечно, эта информация может использоваться для определения идентификаторов пользователей, а также зашифрованных паролей (при условии, что пароли не содержатся в файле с повышенной защитой shadow). В большинстве случаев этого достаточно, чтобы даже неопытный злоумышленник смог взломать файл паролей и зарегистрироваться в системе. Опытный же взломщик сможет не только проникнуть в систему, но и получить прямой доступ к командной оболочке, как будет показано ниже в этой главе. Помните, что этот изъян позволяет взломщику выполнить любую команду с привилегиями пользователя, от имени которого запущен Web-сервер. В большинстве случаев, конечно, таким пользователем является nobody, однако, к сожалению, нередко встречаются узлы, на которых Web-сервер работает на уровне привилегий суперпользователя root, — ни больше, ни меньше! В 1996-1997 годах взломы PHF были очень популярны. От этих простых, но очень эффективных приемов пострадали очень многие Web-узлы. Поскольку данный подход пригоден и для проведения других взломов при отсутствии проверки ввода, необходимо хорошо понимать, как именно данный изъян используется злоумышленниками. В системе UNIX имеются метасимволы, зарезервированные для специальных целей. К таким метасимволам относятся следующие (данный перечень не является исчерпывающим). \ /<>!$% ^ & * | {}[]`"` ~ ; Если программа (или сценарий CGI) принимает какие-то данные, вводимые пользователем, и не проверяет их корректность, то такая программа может подвергнуться взлому с помощью специально подобранного кода. Этот метод обычно называется "выбросом" (escaping out) в командную оболочку и позволяет передать в качестве параметра один из метасимволов UNIX. Данный подход очень распространен и не ограничивается одними лишь сценариями PHF. Имеются многочисленные примеры незащищенных программ CGI, входящих в базовый комплект поставки Web-серверов. Что еще хуже, многие уязвимые программы создаются "профессиональными" разработчиками Web-узлов, имеющими весьма смутное представление о безопасности. К сожалению, с развитием электронной коммерческой деятельности и появлением множества соответствующих приложений с дополнительным набором функций (увеличивающих, соответственно, их сложность), количество таких взломов только возрастает. Контрмеры Как уже упоминалось раньше, одним из лучшим способов превентивной защиты является разработка программ с учетом требований обеспечения безопасности. Это же правило можно в полной мере применить и к защите от описанного выше взлома. Абсолютно необходимо, чтобы программы и сценарии воспринимали только те данные, которые они должны воспринимать. В разделе часто задаваемых вопросов WWW Security, расположенном по адресу http://www.w3.org/Security/Faq/www-security-faq.html, содержится важная информация о том, как сделать защищенными программы CGI. Поскольку очень трудно выполнять проверку каждой порции входных данных, лучше, чтобы эти процедуры по умолчанию отбрасывали все критические данные. Кроме того, после компиляции тщательно контролируйте и тестируйте весь программный код. |
|||||
|
|
|||
|