Доброго времени суток. Я хочу немного рассказать об эксплойтах, о том как ко мне приходило понимание данного процесса. Читая в новостях очередное сообщение о том, что был взломан популярный веб-ресурс, я постоянно удивлялся, как это происходит.
Да, в интернете полно информации о найденных свежих уязвимостях, но как, зная об их наличие проникнуть в систему и извлечь конфиденциальную информацию – загадка. Я недавно начал изучать данную тематику и хочу поделиться информацией, которая, надеюсь, поможет сделать первые шаги. Если говорить об атаках на веб-приложения, то здесь все прозрачно.
Пользователи, используя протокол HTTP, посредством браузера отправляют запрос на сервер, в ответ получают соответствующие веб-страницы.Сразу, очевидная атака Man-in-the-Middle или человек посередине, когда нападающий вклинивается между сервером и клиентом и для клиента выступает в роли сервера, а для сервера – клиентом. Таким образом, получает полный контроль над передаваемой информацией.
На поверхности лежит идея, положенная в основу CSRF — “Cross-Site Request Forgery” (Межсайтовая подделка запроса), когда осуществляется имитирование запроса пользователя к стороннему сайту. Также понятны атаки типа XSS, SQL-инъекция, основанные на недостаточной фильтрации введенных пользователем данных.
А вот как осуществляется атака на настольные приложения, долгое время было для меня непонятно. Но и тут все достаточно прозрачно. В основе всего лежит наличие ошибки программиста, написавшего данную программу. Например, довольно распространенной является ошибка программирования off-by-one, т.е. ошибка на единицу. Возникает она, когда при подсчете программист ошибается на 1 в одну или другую сторону. Наиболее часто это может получаться при выборе между >(больше) и >=(больше или равно). В ходе тестирования ПО выявить эту ошибку довольно трудно, ведь она зачастую не сказывается на общем алгоритме функционирования, что таит в себе некоторую опасность. Ведь если теперь передать такой программе входные данные, которые заставят ошибку проявиться, вся дальнейшая логика программы может быть нарушена.
Уязвимость, связанная с переполнением буфера – одна из самых древних, но при этом не утратила актуальности и о сей день. Основана она на том, что в языке С не предусмотрена проверка целостности данных, т.е. за этим должен следить сам программист. Ошибка возникает при попытке записи в буфер данных, размер которых превышает размер самого буфера. И если в программе не предусмотрена проверка на этот случай, ее ждет неминуемый крах. В этом случае «лишние» данные запишутся за пределами отведенной памяти, затерев то, что находилось там ранее. Очевидно, что при наличии такой уязвимости в память легко может быть записан вредоносный код.
Другими словами, если программа представляет нам возможность записывать в память произвольные данные, она уязвима.
Описание получилось сумбурным, но я, усвоив это для себя, дальше стал двигаться уже значительно быстрее. Спасибо за внимание.
Автор: Alf162