Чтение онлайн

на главную - закладки

Жанры

Linux глазами хакера

Флёнов Михаил Евгеньевич

Шрифт:

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

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

Кто хорошо работает, тот должен

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

14.2. Переполнение буфера

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

В таких языках, как С++, для работы с данными, которые вводит пользователь, выделяется память определенного размера. Информация заносится в этот буфер простым копированием. Большинство программистов рассчитывают максимальный объем данных, который может передать пользователь, и выделяют именно столько памяти (возможен небольшой запас). При этом во время копирования не происходит никаких проверок размера полученных данных. Злоумышленник может воспользоваться этим недостатком и ввести в программу столько информации, что она просто не поместится в памяти и произойдет сбой.

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

Код

Код

Буфер данных 50 байт

Код

Код

Буфер для хранения данных находится внутри кода. В данном случае будем считать, что программист выделил под него 50 байт. А что будет, если пользователь передаст в программу 70 байт? Если при приеме информации программа не проверит размер блока, то при записи данных в буфер они выйдут за его пределы и запишутся поверх кода. Это значит, что программа будет испорчена и не сможет выполнять каких-либо действий, и, скорее всего, произойдет зависание.

В старых версиях Windows некоторые ошибки переполнения буфера могли нарушить работу всей ОС. Windows 2000/XP и Linux более защищены, их вывести из строя уже намного сложнее, и при подобных ошибках перестает функционировать только сама программа.

Но это еще полбеды. Наиболее опытные взломщики могут передать такие данные, в которых будет 50 байт мусора, а потом пойдет корректно исполняемый код, но только написанный злоумышленником. Тогда структура программы будет выглядеть примерно таким образом:

Код

Код

Буфер данных 50 байт.

Код хакера

Код хакера

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

пароли, открыть какую-либо дверь в системе или просто уничтожить все данные на сервере.

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

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

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

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

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

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

В качестве самостоятельной защиты от ошибок работы с буфером могу посоветовать воспользоваться утилитой Libsafe (www.research.avayalabs.com/project/libsafe). Это библиотека создает промежуточный уровень между программой и ОС, перехватывая опасные системные функции, вызываемые кодом взломщика, заменяя их своими аналогами.

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

Поделиться:
Популярные книги

Гримуар темного лорда VI

Грехов Тимофей
6. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VI

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Тринадцатый XI

NikL
11. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Тринадцатый XI

Первый среди равных

Бор Жорж
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных

Развод с драконом. Отвергнутая целительница

Шашкова Алена
Фантастика:
фэнтези
4.75
рейтинг книги
Развод с драконом. Отвергнутая целительница

Правильный лекарь. Том 11

Измайлов Сергей
11. Неправильный лекарь
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Правильный лекарь. Том 11

Как я строил магическую империю 3

Зубов Константин
3. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 3

Газлайтер. Том 22

Володин Григорий Григорьевич
22. История Телепата
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Газлайтер. Том 22

Гримуар темного лорда III

Грехов Тимофей
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда III

Кодекс Охотника. Книга XXVI

Винокуров Юрий
26. Кодекс Охотника
Фантастика:
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXVI

Меченный смертью. Том 5

Юрич Валерий
5. Меченный смертью
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Меченный смертью. Том 5

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Инженер Петра Великого 2

Гросов Виктор
2. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Инженер Петра Великого 2

Старый, но крепкий 4

Крынов Макс
4. Культивация без насилия
Фантастика:
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 4