HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ИНФО > Статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 21.08.2012, 18:31
kroŧ
Новичок
Регистрация: 19.05.2010
Сообщений: 6
С нами: 8411065

Репутация: 4
По умолчанию

Чистка скриптов от антивирусных сигнатур.

Чистка скриптов от антивирусных сигнатур.

Вступление.

В этой статье я расскажу о способах преодоления антивирусной защиты основанной на поисках и изменения сигнатур.

Я постарался изложить всё простым языком, большинство примеров изложено с использованием языка программирования PHP.

Для демонстрации примеров этой статьи нам потребует комплекс серверного программного обеспечения (Apache +PHP ), мною был выбран Денвер .

Несовершенство антивирусов.

С увеличением числа веб-сайтов и возрастающей популярностью PHP как языка программирования появилась огромное число прикладных программ связанных с ИБ тематикой, эти программы не могли остаться без внимания антивирусов. Создав самую простую программу нельзя быть уверенным, что через некоторое время эта программа не будет занесена в базы антивирусов.

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

Рассмотрим пример PHP кода:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR
Представим, как будет использован этот код:

1. 70% людей будут использовать этот код как лазейку “бэкдор”, в код не вносятся изменения.

2. Остальные будут использовать этот код при программировании калькулятора, возьмёт часть кода, но дополнит его своим кодом:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR
Если код будет отправлен антивирусной компании и из этого кода будет выделана сигнатура:

Цитата:
Сообщение от None  
$_GET['cmd'];@eval(
То и 1 и 2 гриппа человек не сможет использовать этот код из-за наличия вирусной сигнатуры.

Далее 1 группа меняет код на:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR
Если антивирус добавит сигнатуру:

Цитата:
Сообщение от None  
['cmd'];@eval(
Большое количество кодов будет обнаружена как вирус.

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

Цитата:
Сообщение от None  

Где {?} означает пропуск. При поиске по сигнатуре будет обнаружены программы, где переменная ‘s’ будет иметь любое имя, также как и GET может быть заменено на POST.

В тоже время новый код:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR
будет идентифицирован как вирус только после добавления сигнатуры конкретно для этого кода.

Можно сделать вывод:

Чем больше будет изменяться код тем больше будет пополняться антивирусная база.

Любой код можно будет модифицировать таким образом, чтобы он не был детектирован антивирусным ПО.

Поиск антивирусной сигнатуры.

Для поиска ав-сигнатур нам потребуется любой из антивирусов с возможность проверять файлы на диске, я выбрал Avira. Также любой php скрипт в котором присутствует сигнатура вредоносного ПО, я выбрал WSO Shell.

Возьмём часть кода из WSO pack:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR
Запишем код WSO pack (http://pastebin.com/NH7FK6EU ) как test.php, и запустим Avkrot.

Avkrot создаст в папке tmp -346 файлов в каждом из файлов будет изменён $blok байт(1 байт) на $simvol.

Запустим сканирование созданных файлов Avira-й.

После сканирования антивирус удалит все файлы AV-сигнатура которых не была изменена с помощью скрипта(220 файлов).

Файлы 27.php по 152.php остались чистыми это и есть AV-сигнатура, по которой php скрипт обнаруживается как PHP/Shell.G.1.

Проверяем, вносим изменения в любые от 0 до 27 байт или от 152 до 346, php скрипт также обнаруживается.

Теперь поставим пробел в любую часть программы, например 95 байт:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$color[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"#df5"[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]$default_action[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'FilesMan'[/COLOR][COLOR="#007700"];[/COLOR][/COLOR
Поставив пробел в любую часть программы от 27 до 152, мы получим чистую программу.

Попробуем сделать тоже самое - с не пакованным WSO полный исходный код 66 032 байт.

Редактируем Avkrot изменим имя файла и размер блока (если не менять размер блока файлов будет слишком много):

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'wso2.php'[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#FF8000"]//имя файла

[/COLOR][COLOR="#0000BB"]$blok[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]100[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#FF8000"]//размер блока[/COLOR][/COLOR] 
Запускаем Avkrot. Проверяем созданные файлы Avira обнаруживается как PHP/WebShell.A.19.

Проверенно файлов 661

Обнаружено 659

В результате получаем 2 чистых файла, 63600-63700 файл.

Открываем любой чистый файл и переходим в место нахождения блока(на начало сигнатуры указывает имя файла). Сигнатура в переменной $bind_port_p в которой находится зашифрованный в base64 исходный код, после декодирования base64 видим, что это perl скрипт удалим все лишни пробелы после while, заново закодируем в base64 и запишем переменную $bind_port_p, или добавим пробелы в base64 - получим совершенно чистый файл для Avira.

Видео.

Создание случайного кода.

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

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]str_repeat[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]' '[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]rand[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]10[/COLOR][COLOR="#007700"])),

[/
COLOR][COLOR="#DD0000"]'[1]'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]reg[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'eval'[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#DD0000"]'[2]'[/COLOR][COLOR="#007700"]=>([/COLOR][COLOR="#0000BB"]rand[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"])?[/COLOR][COLOR="#DD0000"]'GET'[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#DD0000"]'POST'[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#DD0000"]'[3]'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]str_shuffle[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'qwertyuiopas'[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]rand[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]12[/COLOR][COLOR="#007700"])),));

echo[/
COLOR][COLOR="#0000BB"]$text[/COLOR][COLOR="#007700"];[/COLOR][/COLOR
либо самомодифицирующийся код(пример изменения кода внутри eval при каждом запуске программы, программа добавляет пробелы в base64 тело зашифрованной программы):

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][COLOR="#0000BB"][COLOR="#0000BB"]'[/COLOR][COLOR="#007700"];

eval([/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]file_get_contents[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$file_name[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]903[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]913[/COLOR][COLOR="#007700"]));[/COLOR][/COLOR] 
Маскировка в безопасных файлах.

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

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

1) Не создавать новые файла, изменять старые файлы.

2) После редактирования файла изменить время создания файла на время до внесения изменения (touch)

3) Не изменять размер файла, удалить - лишни пробелы, сжать код.

4) Не допускать записей в LOG(FTP или SSH или любые другие) запись в логах вида: /admin.php?shell=phpinfo();выглядит подозрительно, поэтому для получения параметров можно использовать COOKIE), отключить вывод ошибок error_reporting(0);

5) Не оставлять следов деятельности программы, если программа создаст файлы(в процессе своей работы) это может вызвать подозрение.

Не всегда человек контролирует файлы, это может делать программа Антивирус.

Антивирус не всегда может быть настроен на сканирование всех типов файлов, часто он сканирует базовый список расширений. Если говорит про сканирование с помощью скрипов (проверка заливки шеллов и тд.) то в большинстве они также сканируют не большой список расширений (например это может быть следующие расширения:'php', 'php3', 'php4', 'php5', 'phps', 'ph3', 'ph4', 'html', 'htm', 'phtml', 'pl'), для обходы защиты досрочно сменить расширение файла затем подключить этот файл из уже чистого файла:include('shell._bak'); либо с помощью htaccess сменить расширение для выполнения php:

Все JPG файлы будут исполняться как код php:

.htaccess

Код:
AddHandler  application/x-httpd-php .JPG
php_flag display_errors off
при этом тег будет отображать изображение.

Можно даже спрятать код внутри htaccess:

Код:
Order allow,deny
Allow from all

AddType application/x-httpd-php .htaccess 
#
Файл может проверятся на наличие опасных функций (обычно это: 'shell_exec', 'system', 'passthru', 'exec', 'eval', 'ftp_connect'), соответственно можно использовать функции аналоги:

eval => preg_replace:

shell_exec => оператор исполнения

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]preg_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"##e"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"phpinfo();"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'+'[/COLOR][COLOR="#007700"]);

echo `[/COLOR][COLOR="#DD0000"]ls[/COLOR][COLOR="#007700"]`;[/COLOR][COLOR="#FF8000"]//выводит список файлов[/COLOR][/COLOR] 
Предположим: мини антивирус проверяет файл, каждый файл разбирает на токины, суммирует их, затем сверяет значение:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'Tools\phpmyadmin\browse_foreigners.php'[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#FF8000"]// файл http://pastebin.com/6P65cgKS

[/COLOR][COLOR="#0000BB"]$val[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]423478[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#FF8000"]//значение для проверки

[/COLOR][COLOR="#0000BB"]$file_con[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]file_get_contents[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]$hash_token[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]$array[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]token_get_all[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$file_con[/COLOR][COLOR="#007700"]);

for([/
COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"][/COLOR][/COLOR
Файл подключатся сразу после выполнение основного файла. Для ещё большой маскировки файл file.php можно замаскировать под файл сессии sess_06708908aa0e86c1f02ff78cf01ca10b, также сменить дату создания файла .htaccess на дату до внесения изменений.

auto_prepend_file -определение файла, который будет выводится в начале каждого php-скрипта.

И последнее что хотелось бы сказать, в Linux существует удобная утилита find для поиска файлов:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]echo `[/COLOR][COLOR="#DD0000"]find ./ -name '*.php' | xargs grep -E '(shell_exec|system|passthru|exec|eval|ftp_connect|base64_decode)\s*\('[/COLOR][COLOR="#007700"]`;[/COLOR][COLOR="#FF8000"]//поиск запрещенных функций

[/COLOR][COLOR="#007700"]echo `[/COLOR][COLOR="#DD0000"]find ./ -mtime -7d[/COLOR][COLOR="#007700"]`;[/COLOR][COLOR="#FF8000"]//файлы измененные за последние 7 дней[/COLOR][/COLOR] 
Автоматический поиск сигнатур и чистка

Возникла идея автоматизировать весь процесс чистки и поиска:

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

Искать сигнатуры будем с помощью, установленного в системе антивируса Avira:

Для запуска сканера создаём батник run.bat:

Код:
"c:/program files/Avira/AntiVir Desktop/avscan.exe" /CFG="C:\WebServers\home\localhost\www\avtoscan\filescan.txt"
Прописываем путь до avscan.exe и файла конфигурации (создал папку avtoscan в каталоге www).

Скачиваем проверяемый файл avira.pl(обнаруживается как PERL/FindAdmin.A), закидываем в папку avtoscan. Avira может не разрешить создать файл поэтому отключаем Realtime Protection.

Что должна делать программа:

1)Запусти AvKrot –он создал множество проверяемых файлов в папке vir

2)Запустить run.bat

3)Выбрать 1-й чистый для антивируса файл, по имени файла определить начало сигнатуры.

4)Взять содержимое avira.pl, чистить код по месту расположение сигнатуры, записать результат.

Реализация в PHP.

Получим чистый файл good.txt, код нужно конечно в дальнейшем улучшить +чистка у нас простая замена.

Видео.

Чистка с помощью онлайн сервисов.

Для проверки файлов будем использовать онлайн сервис vscan.novirusthanks.org, проверить будет уже известный avira.pl.

Как будет работать программа:

1)Читать содержимое проверяемого файла avira.pl, разделить файл на $divчасти

2)Отправить первую часть файла если она обнаруживается отправить n-ю часть.

3)Если одна из частей не обнаруживается(антивирусн я сигнатура затёрта символом $chr) взять начало и конец этой части и разделить на n часть, делить фал до тех пор пока передаваемый фрагмент будет меньше $min_block.

4)После того как размер последнего переданного фрагмента будет меньше $min_block –AV сигнатура найдена, начать чистку(замена ','->' , '), записать чистый файл.

Код выложен тут

Плюс этого метода в том, что не требует установки антивируса, можно чистить сразу от нескольких антивирусов.

Видео.

Особенность поиска сигнатур.

Методы поиска сигнатур одинаковы для любых типов файлов:

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

Можно выделить несколько правил для поиска сигнатур:

1)Использовать формулы для расчёта результата:

Число файлов = размер файла / рамер блока

Общий размер файлов = число файлов * размер файла


2)Сигнатур может быть несколько, 2 и большее.

3)Сигнатура может быть маской.

Заключение.

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

Используемые термины.

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

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

Обфускация или запутывание кода — приведение исходного текста или исполняемого кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции.

Ссылки.

http://ru.wikipedia.org/wiki/PHP

http://ru.wikipedia.org/wiki/Денвер_(программа)

http://ru.wikipedia.org/wiki/Обнаружение,_основанное_на_ сигнатурах

http://ru.wikipedia.org/wiki/Обфускация

PS. Статья написана в образовательных целях.
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.