![]() |
Чистка скриптов от антивирусных сигнатур.
Чистка скриптов от антивирусных сигнатур. Вступление. В этой статье я расскажу о способах преодоления антивирусной защиты основанной на поисках и изменения сигнатур. Я постарался изложить всё простым языком, большинство примеров изложено с использованием языка программирования PHP. Для демонстрации примеров этой статьи нам потребует комплекс серверного программного обеспечения (Apache +PHP ), мною был выбран Денвер . Несовершенство антивирусов. С увеличением числа веб-сайтов и возрастающей популярностью PHP как языка программирования появилась огромное число прикладных программ связанных с ИБ тематикой, эти программы не могли остаться без внимания антивирусов. Создав самую простую программу нельзя быть уверенным, что через некоторое время эта программа не будет занесена в базы антивирусов. Сигнатурный метод детектирования является основой большинства существующих антивирусных продуктов, антивирус действует по схеме: - поиск, в базе данных антивирусного ПО - сигнатур вирусов, нахождение этих сигнатур в памяти проверяемой программы. Рассмотрим пример PHP кода: PHP код:
1. 70% людей будут использовать этот код как лазейку “бэкдор”, в код не вносятся изменения. 2. Остальные будут использовать этот код при программировании калькулятора, возьмёт часть кода, но дополнит его своим кодом: PHP код:
Цитата:
Далее 1 группа меняет код на: PHP код:
Цитата:
Далее для кода будет создана сигнатура: Цитата:
В тоже время новый код: PHP код:
Можно сделать вывод: Чем больше будет изменяться код тем больше будет пополняться антивирусная база. Любой код можно будет модифицировать таким образом, чтобы он не был детектирован антивирусным ПО. Поиск антивирусной сигнатуры. Для поиска ав-сигнатур нам потребуется любой из антивирусов с возможность проверять файлы на диске, я выбрал Avira. Также любой php скрипт в котором присутствует сигнатура вредоносного ПО, я выбрал WSO Shell. Возьмём часть кода из WSO pack: PHP код:
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 код:
Попробуем сделать тоже самое - с не пакованным WSO полный исходный код 66 032 байт. Редактируем Avkrot изменим имя файла и размер блока (если не менять размер блока файлов будет слишком много): PHP код:
Проверенно файлов 661 Обнаружено 659 В результате получаем 2 чистых файла, 63600-63700 файл. Открываем любой чистый файл и переходим в место нахождения блока(на начало сигнатуры указывает имя файла). Сигнатура в переменной $bind_port_p в которой находится зашифрованный в base64 исходный код, после декодирования base64 видим, что это perl скрипт удалим все лишни пробелы после while, заново закодируем в base64 и запишем переменную $bind_port_p, или добавим пробелы в base64 - получим совершенно чистый файл для Avira. Видео. Создание случайного кода. Известно то, что Антивирусы не могут эмулировать PHP код, для каждого нового объекта создают свою сигнатуру. Поэтому мы можем создать каждый раз разный код: PHP код:
PHP код:
Код можно спрятать внутри файлы, который считается безопасными, но на деле безопасность понятие относительное. Всё зависит не только от программ для проверки файлов, но и от бдительности пользователя осуществляющий контроль над файлами. Пример: Если есть сайт содержащий уязвимость, воспользовавшись уязвимостью - залили файлы(веб-шелл например), но через некоторое время эти файлы удалил админ. Как админ нашёл посторенний файл неизвестно, но возможна причина в том, что заливавший этот файл не соблюдал несколько простых правил: 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Можно даже спрятать код внутри htaccess: Код:
eval => preg_replace: shell_exec => оператор исполнения PHP код:
PHP код:
auto_prepend_file -определение файла, который будет выводится в начале каждого php-скрипта. И последнее что хотелось бы сказать, в Linux существует удобная утилита find для поиска файлов: PHP код:
Возникла идея автоматизировать весь процесс чистки и поиска: написать программу, которая будет находить примерное расположение АВ.сигнатуры, затем программа должна определить тип файла, учитывать особенности кода, чистить файл. Искать сигнатуры будем с помощью, установленного в системе антивируса Avira: Для запуска сканера создаём батник run.bat: Код:
"c:/program files/Avira/AntiVir Desktop/avscan.exe" /CFG="C:\WebServers\home\localhost\www\avtoscan\filescan.txt"Скачиваем проверяемый файл 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. Статья написана в образовательных целях. |
Что-то я не увидел главную антиантивирусную фишку... она что в приваде видимо?
|
Цитата:
Я крипторы сам писал, знаю что говорю.... |
| Время: 12:59 |