Безопасность веб-приложений всегда была больной темой. Говорят о ней много, но общая картина от этого практически не меняется – хакерских атак по-прежнему немало, и зачастую они весьма успешны для злоумышленников и затраты для пострадавших.
С серьезной проблемой столкнулись владельцы южнокорейской торговой площадки Interpark – хакер проник в их базу данных, украл из нее информацию о 10 млн. клиентов и сейчас требует выкуп за ее неразглашение. Также в список громких инцидентов вошел взлом официального форума Ubuntu с помощью SQL-инъекции через хорошо известную уязвимость в движке vBulletin. Похищены персональные данные 2 млн. пользователей.
Все это – только за текущий июль. И только касательно крупных сайтов. Сложно представить, сколько происходит нападений на более мелкие проекты. Впрочем, исследователи из Wallarm не поленились и посчитали – за 2015 год ими было зафиксировано 100 млн. атак на веб-ресурсы своих клиентов.
Один из эффективных способов защиты своего сайта – проведение аудита его безопасности. Поэтому давайте рассмотрим, как проходит это мероприятие.
Тестирование на проникновение
Чаще всего проверка защищенности ресурса проводится по методу «черного ящика» — специалист по безопасности начинает попытки взлома своей цели, как если бы он был реальным злоумышленником и преследовал какую-либо корыстную цель: хакнуть конкурента, атаковать посетителей сайта, в тайне от владельца монетизировать сайт или просто потешить свое честолюбие.
Таким образом, тестировщик должен решить хотя бы одну из глобальных задач:
- Нарушить конфиденциальность информации заказчика.
- Ограничить доступ к ключевым данным.
- Изменить или уничтожить какие-либо сведения без возможности их восстановления.
Как видно их этого перечня, нельзя просто так взять и провести аудит сайта. Нужна определенная подготовка к тестированию на проникновение, без которого оно либо будет неэффективно, либо может стать настоящей хакерской атакой с печальными последствиями. Нужно сделать хотя бы следующее.
- Подписание соглашения о неразглашении. Исследователь в ходе своей работы может получить доступ к очень ценной конфиденциальной информации. Солидные организации, занимающиеся тестированием безопасности, вряд ли будут пользоваться ею в своих целях, но не всегда есть возможность проверить честность исполнителя, поэтому договор лучше заключить.
- Проведение аудита на полной копии основного сайта. Тестировщик будет применять все методы хакеров, в том числе и приводящие к поломке веб-ресурса либо уничтожению данных на нем. Лучше не подвергать боевую версию проекта такому стрессу и ограничиться клоном.
- Сокрытие проведения аудита. Чем меньше людей знает о тестировании – тем лучше. Злоумышленники редко предупреждают о своей атаке, поэтому если рассказать о мероприятии большому числу людей, это может исказить результат.
Методы тестирования на проникновение
Поиск по открытым источникам. Так как используется способ «черного ящика», то тестировщик абсолютно не в курсе, как выглядит атакуемый объект изнутри, иначе взлом был бы крайне тривиальной задачей. Поэтому в ход идет предварительный сбор информации.
Специалиста в первую очередь интересует техническая сторона веб-приложения – на каком языке оно написано, какую CMS использует и с какими расширениями. Узнать все это можно даже не прибегая к специальным средствам, иногда хватит только Google. Например, можно найти в LinkedIn сотрудников атакуемой компании, выделить среди них программистов и определить, на каком языке они специализируются.
Более того, при желании можно выяснить, и чем конкретно они занимались. Для этого достаточно поискать по их именам или никнеймам, и можно найти в выдаче много чего интересного. Это может быть, например, обсуждение от имени этого программиста какого-либо модуля для движка или заказ с корпоративного аккаунта у фрилансера-подрядчика нового плагина с подробным ТЗ.
Определение защитных средств. Наличие какого-либо софта для безопасности – систем предотвращения вторжения, защиты от DDoS, межсетевого экрана — может серьезно усложнить задачу по взлому, поэтому его необходимо обнаружить. Обычно для этого применяются специальные программы. К примеру, обнаружить наличие фаерфола можно с помощью сканера портов, а антиддос-сервисы определяются по DNS-записям домена.
Использование стандартных уязвимостей. Прежде чем начинать искать неизвестные уязвимости нулевого дня, изучать логику работы веб-приложения и его архитектуру, тестировщик проверят устойчивость сайта к обычным методам атаки. Например, это может быть использование известного эксплойта к старой версии движка. Именно на этом этапе и пострадали вышеупомянутые Interpark и форум Ubuntu.
В общем виде на этом этапе обычно происходит следующее:
- Попытка удаленного выполнения кода.
- Попытка SQL-инъекции.
- Эксплуатирование XSS, RFI и LFI уязвимостей.
- Поиск мест хранения backup-ов и получение доступа к ним.
- Манипуляции с системой авторизации: брутфорс, поиск небезопасного восстановления пароля, обход аутентификации.
- Изучение файловой структуры сайта с целью обнаружения файлов, доступ к которым ограничен только отсутствием явной ссылки на него.
- Перехват трафика и его исследование.
- Поиск вариантов несанкционированного доступа к конфиденциальной информации.
Нешаблонный подход. Когда общеизвестные методы не помогают, тестировщик с помощью комбинации всех вышеописанных способов и своего понимания систем безопасности пытается обойти существующую защиту либо обнаружить неизвестную до сих пор уязвимость.
Далеко не все аудиторы проводят данную процедуру, т.к. она достаточно сложна, требует очень высокой квалификации специалистов и стоит немало. Как показывает практика, очень часто уязвимости нулевого дня обнаруживаются сторонними исследователями. Однако и вознаграждение за их находку они получают соответствующее.
На самом деле, если ваш сайт успешно проходит тестирование на все стандартные виды угроз, то проверку можно считать успешной. Более детальное и глубокое изучение методов взлома актуального только для очень крупных проектов, для взлома которых могут привлекать действительно высококлассных хакеров, способных обнаруживать новые бреши в защите.
Завершение аудита
Результатом любого тестирования на проникновение становится документ, который должен включать в себя:
- Информацию о методах, использованных в момент проведения проверки.
- Разработка концепции злоумышленника, его потенциальных целях и мотивации.
- Описание разработанных и реализованных тестировщиками сценариев атак.
- Подробный отчет обо всех найденных уязвимостях.
- Рекомендации по их устранению.
Грамотно выполненный аудит – очень эффективная мера поиска слабых мест сайта и его сервера. Крайне редко тест проходится полностью, обычно какая-либо деталь упускается из вида разработчиками. Но даже в том случае, если веб-ресурс так и не удалось взломать, это все равно результат – теперь его владелец точно сможет спать спокойно.
Автор: ishashko