AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для...
Transcript of AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для...
1
QuickStart Guide v20180709
Антивирус для сервера Компания “Ревизиум” https://revisium.com/ Технические вопросы – на [email protected] Организационные вопросы – на [email protected]
2
Дистрибутив Сканер распространяется в виде архива .zip, который можно загрузить с сервера компании “Ревизиум”. Ссылка на архив с версией AI-BOLIT для хостинга предоставляется индивидуально по запросу.
Структура архива
ai-bolit-hoster.php – скрипт сканера (для публичного архива файл называется ai-bolit.php) AIBOLIT-WHITELIST.db – база данных исключений файлов (белый список) handler.php – вспомогательный файл, пример файла-обработчика событий антивируса vps_docroot.php – вспомогательный файл для поиска каталогов сайтов на сервере ai-bolit-wl.php – скрипт добавления файлов в базу исключений ai-design.html – шаблон html отчета для кастомизации .a* файлы – исключения и белые списки Структура архива не меняется при выходе обновлений. При обновлении достаточно распаковать новую версию поверх старой.
3
Сценарии использования сканера и примеры параметров командной строки Рекомендуемая версия php для запуска сканера – php 7.x (старше 7.0.17) Минимальная версия php для запуска сканера – php 5.3 В версии php 7.x скорость сканирования в 3 раза выше. Средняя скорость проверки – 90 файлов в секунду.
Просканировать каталог /home/u1234/site.ru/ на вирусы Данная команда запускает экспресс-сканирование каталога (только критичных файлов) и сформирует отчет в json формате. В процессе сканирования будет создан файл /tmp/progress_1.json, в котором раз в секунду будет обновляться статус сканирования и прогресс (сколько проверено файлов, сколько осталось, время сканирования и % проверенных). По окончании сканирования файл прогресса удаляется автоматически. php -d short_open_tag=on ai-bolit-hoster.php --path=/home/u1234/site.ru/ --json_report=/home/aibolit-result/result.json --smart --scan=php,.,js,htaccess,html,htm,tpl,inc,css,txt,sql,ico,cgi,pl,py,sh,php3,php4,php7,pht,shtml,susp,suspected,vir,old --deobfuscate --memory=1G --progress=/tmp/progress_1.json То, что выделено жирным, необходимо поменять с учетом локальных путей на сервере или на аккаунте хостинга.
Описание параметров • -d short_open_tag=on – параметр php для интерпретации <?php и <? как общий
формат.
• --path=/home/u1234/site.ru/ - путь до каталога сканирования (проверяется каталог и ресурсивно все каталоги и файлы внутри)
• --json_report=/home/aibolit-result/result.json – путь до файла с результатами сканирования. Файл создается по завершении проверки (перезаписывает существующий, если такой был создан ранее).
• --smart – режим “интеллектуального” сканирования: ускоряет проверку cache каталогов CMS
• --scan=php,.,js,htaccess,html,htm,tpl,inc,css,txt,sql,ico,cgi,pl,py,sh,php3,php4,php7,pht,shtml,susp,suspected,vir,old – будут проверены только указанные расширения. Точка означает файл без расширений (они тоже будут проверены).
• --memory=1G – лимит потребления памяти 1 гигабайт при сканировании (задает ограничение для php)
• --progress=/tmp/progress_1.json – файл для отражения прогресса сканирования. Сканер пишет в него текущий прогресс в формате json раз в секунду. Любой другой процесс может считывать данный прогресс и отображать, например, в панели хостинга.
• --deobfuscate – php скрипты, зашифрованные известными обфускаторами будут автоматически декодированы, что повышает процент обнаружения
Все параметры являются необязательными кроме --path. При указании только одного параметра --path=… отчет будет создан в каталоге сканирования в html формате.
4
Отчет можно генерировать в html, json и plain text форматах. Это задается параметрами --list= и --json_report=. Отчет в формате html создается по-умолчанию. Список файлов можно получить из stdin, например, из результатов команды find: find /home/user1234 -type f -name '*.php' | php ai-bolit.php --listing=stdin --json_report=report.json --json-stdout --progress=progress.json
Для того чтобы сканер принял список файлов из стандартного ввода stdin, необходимо указать параметр --listing=stdin. В примере выше с помощью утилиты find можно получить определенные файлы (например, изменившиеся за сутки или только php), и выполнить сканирование только по полученному списку. Специальные параметры отчетов: • Для того чтобы отключить создание html отчета, укажите параметр --no-html.
php ai-bolit-hoster.php --path=/home/u1234/site.ru/ --json_report=/home/aibolit-result/result.json --no-html …
• Для того чтобы вывести json-отчет непосредственно в stdout, укажите параметр --json-stdout php ai-bolit-hoster.php --path=/home/u1234/site.ru/ --json_report=/home/aibolit-result/result.json --json-stdin
Чтобы создать отчет со своим шаблоном, достаточно скопировать файл ai-design.html рядом с ai-bolit-hoster.php. Данный шаблон подгрузится автоматически.
Как узнать статус проверки без анализа отчета (обнаружены ли вирусы при сканировании)? Работа сканера завершается с exit code. Если exit code == 0, вирусов не обнаружено (отчет будет чистым). Если exit code == 2, обнаружены вирусы, хакерские скрипты или другие угрозы безопасности.
Как ограничить потребление ресурсов при сканировании Для ограничения потребления ресурсов можно использовать штатные средства ОС, например, cgroups / lxc контейнер / докер-контейнер, внутри которых запускать процесс сканера. По-умолчанию, 1 инстанс сканера загружает полностью 1 ядро сервера.
5
Размер потребляемой оперативной памяти можно ограничивать через параметр сканера --memory, через параметр php –d memory_limit=, через cgroups или контейнеризацию.
Рекомендации по безопасности Сканер не вносит изменения в сканируемые файлы и работает в режиме “только чтение”, тем не менее по соображениям безопасности мы рекомендуем запускать сканер с привилегиями пользователя (не суперпользователя). Самый безопасный вариант – запускать его внутри cgroups или docker с примонтированным VOLUME каталогом для сканирования. Также у сканера есть параметр --username=<пользователь> с помощью которого можно задать имя пользователя, от которого выполнять сканирование. Для работы данного механизма должны быть доступы posix_* функции в php. php ai-bolit.php --username=www-data … На время сканирования в каталоге отчета сканер AI-BOLIT создает файл AI-BOLIT-QUEUE-xxxxxxxxxxxxxxxxx.txt со списком файлов для проверки, который удаляется автоматически по завершении.
6
Формат файла прогресса сканирования Для отслеживания прогресса сканирования в других процессах можно использовать файл прогресса, который создает и обновляет сканер при запуске с параметром --progress=<путь к файлу>.
Файл прогресса создается в момент сканирования, обновляется сканером раз в секунду и автоматически удаляется по завершении сканирования. Поля массива:
• self – путь до файла сканера • started – время старта сканирования в unixtime • updated – время последнего обновления файла в unixtime • progress – процент выполненного сканирования (от 0 до 100) • time_elapsed – время сканирования в секундах • time_left – оценка оставшегося времени сканирования в секундах
(пересчитывается в процессе сканирования динамически) • files_left – оставшееся число файлов на сканирование • files_total – общее число файлов на сканирование • current_file – путь до файла, который проверяется в данный момент
7
Формат json отчета При запуске сканера с параметром --json_report=<имя файла отчета.json> создается отчет в формате json:
• Cекция summary – сводная статистика по проверке • Секция vulners – список уязвимых скриптов • Секция php_malware – список серверных вирусов/веб-шеллов/бэкдоров и других вредоносных скриптов
• Секция js_malware – список клиентских вирусов: инъекции в javascript Структура summary
• scan_path – путь до каталога, с которого начиналось сканирование • report_time – время создания отчета • scan_time – затраченное на сканирование время (в секундах) • total_files – просканированное число файлов • counters – число обнаруженных угроз (зараженных файлов)
o redirect – число кодов с редиректами o critical_php - php-вредоносов o critical_js – js-вредоносов o phishing – фишинговых страниц o unix_exec – исполняемых unix-файлов
8
o iframes – вредоносных iframe вставок o not_read – ошибок чтения файлов o base64 – закодированных файлов o heuristics – число файлов, обнаруженных «эвристиками» o symlinks – символических ссылок o big_files_skipped – файлов, превышающих установленный размер (600Кб)
Примечание: в версии для хостеров сканер заполняет только critical_php и critical_js поля.
• ai_version – версия сканера, которым была выполнена проверка
Структура vulners В данный блок попадают скрипты, которые содержат публичные критические уязвимости.
• fn – путь до уязвимого файла • sig – обозначение уязвимости • ct – ctime файла • mt – mtime файла • sz – размер файла в байтах • sigid – уникальный идентификатор сигнатуры (можно игнорировать)
Структура php_malware и js_malware php_malware и js_malware являются массивом файлов с вирусами. Каждый элемент массива включает следующие поля:
• fn – путь до зараженного файла • sig – сниппет обнаруженной сигнатуры (в квадратных скобках – номер строки, в которой обнаружена сигнатура)
• ct – ctime файла • mt – mtime файла • sz – размер файла в байтах • sigid – уникальный идентификатор сигнатуры (можно игнорировать)
9
Корректировка путей в отчете Сканер при формировании отчета может корректировать путь до файла с угрозой (заменять абсолютный путь на некий виртуальный). Например, необходимо скрыть абсолютный путь до файла или сократить его. Для этого есть два параметра сканера --addprefix=строка и --noprefix=строка Например, при выполнении php ai-bolit-hoster.php --addprefix=/home/user/ --noprefix=/tmp/scan/users/ Путь к файлу /tmp/scan/users/site1/bitrix/cache/wso2.php будет автоматически изменен в отчетах на /home/user/site1/bitrix/cache/wso2.php
Внешний обработчик событий сканера В сканере AI-BOLIT можно задать внешний скрипт для обработки событий, таких как начало, завершение сканирования, прогресс сканирования и ошибка сканирования. Для каждого события вы можете создать свой обработчик. Например, по завершении сканирования можно отослать email с уведомлением или запустить парсер отчета. Прогресс сохранять в базе данных. Фатальные ошибки обрабатывать отдельным скриптом. Шаблон для файла-обработчика включен в архив сканера в каталоге misc/handler.php Для подключения обработчика достаточно вызвать сканер с параметром php ai-bolit-hoster.php --handler=/path/to/handler.php
10
• onStart – функция выполнится в начале сканирования • onComplete – функция выполнится по завершении сканирования и в нее передаются параметры – код завершения (0 – чисто, 2 – есть вирусы), а также статистика по обнаруженным типам вредоносных скриптов.
• onProgressUpdate – вызывается каждую секунду и сообщает прогресс сканирования
• onReadError – функция вызывается, если возникает ошибка чтения какого-то файла
• onBigFile – функция вызывается, если файл превышает допустимый размер (по-умолчанию 600K)
• onFatalError – функция вызывается, когда сканер не может продолжать работу, например, не найден путь для сканирования или не хватает оперативной памяти.
Оптимизация процесса сканирования Ускорить работу сканера можно различными способами:
1. использовать php 7.x вместо php 5.x – ускоряется в 3 раза 2. указать параметр --smart для оптимизации сканирования cache каталогов 3. для экспресс-сканирования задать список расширений для сканирования через параметр --scan=список. В большинстве случаев достаточно следующих: --scan=php,.,js,htaccess,html,htm,tpl,inc,css,txt,sql,ico,cgi,pl,py,sh,php3,php4,php7,pht,shtml,susp,suspected,vir,old
11
4. для более детального сканирования можно наоборот – исключать отдельные расширения, например media-файлы (картинки, видео, документы). Для этого существует параметр --skip=список. Типовым является следующий список: --skip=mo,po,jpg,jpeg,png,gif,bmp,pdf,xml,ini,po,swf,mo,woff,ttf,css,ini,zip,rar,db,bz2,css,tiff,woff,ttf,mp3,mp4,mpg,xml,djvu,wmv,jpa,avi,xls,xlsx,doc,docx,ppt,pptx,flv,psd
Как запустить сканирование всех сайтов на сервере одной командой В архиве сканера есть утилита vps_docroot.php, которая позволяет получить все DOCUMENT_ROOT каталоги сайтов сервера, извлекая их из конфигурации веб-сервера. Можно использовать данную утилиту для автоматизации. Например, вы распаковали архив со сканером и перешли в каталог src, то сканирование всех сайтов на сервере выполняется следующей командой: php ../misc/vps_docroot.php | xargs -P 1 -I {} php ai-bolit-hoster.php --report=`pwd`/REPORT-@[email protected] --path={}
Данная команда запустить vps_docroot.php, который вернет список домашних каталогов пользователей, передаст их в xargs и запустит сканирование каждого каталога через параметр path. Приме этом отчеты будут размещены в текущем каталоге для каждого сайта и именоваться, например, так REPORT-var_www_site1.ru.html. Сканирование сайтов на сервере можно запустить в несколько потоков. Для этого достаточно параметр -p 1 заменить на -p 4 (в 4 потока). Важно, чтобы данная цифра была меньше, чем число ядер на сервере, чтобы загрузка всех ядер не была 100%. Рекомендуем ставить половину от числа доступных ядер. При запуске сканера в таком формате ему можно передавать все те же параметры, про которые мы написали ранее (--handler, --progress, --json_report и другие).
12
Дополнительные материалы по работе сканера Возможности сканера не ограничиваются перечисленными выше, поэтому мы рекомендуем ознакомиться со всеми параметрами командной строки в следующих статьях:
• https://revisium.com/kb/ai-bolit-console-faq.html - справка по параметрам командной строки
• https://revisium.com/kb/ai-bolit-masterclass.html - мастер-класс по запуску сканера на сервере
А также любые вопросы, связанные с интеграцией или автоматизацией сканера и его возможностей вы всегда можете уточнить у нас по email [email protected]
13
Автоматизированное лечение сайтов Сканер AI-BOLIT предназначен для поиска файлов с вредоносным кодом. Для автоматизированного лечения сайтов реализован отдельный внешний лечащий модуль Procureor (скрипт procu2.php), который запускается как отдельный php-скрипт, получает на вход список файлов для лечения, выполняет удаление вирусых вставок из файлов, удаление хакерских скриптов и других угроз безопасности, и формирует отчет в json-формате. Скрипт умеет формировать резервные копии перед лечением, делать “безопасное” лечение (когда вместо удаления файл зануляется), и обновлять прогресс выполнения лечения в указанном файле в json формате аналогично сканеру AI-BOLIT. Архив с лечащим модулем предоставляется в платной версии антивируса.
Параметры запуска лечащего модуля procu2.php Минимально необходимый набор параметров для лечащего модуля – это параметр –list или , указывающий список файлов для лечения (с относительными или абсолютными путями). Например, php procu2.php --list=/var/www/infected_list.txt
или php procu2.php --json_list=report.json
Параметр --list=… принимает на вход тектовый файл, в котором перечислены полные пути до файлов, которые необходимо вылечить. Обычно – это те файлы, которые были обнаружены сканером ai-bolit-hoster.php. Параметр --json_list=… принимает на вход .json файл, сгенерированный сканером с помощью параметра --json_report=... Рекомендуемая строка запуска при автоматизированном лечении php procu2.php --list=/var/www/infected_list.txt --log=/var/www/procu_log.txt --progress=/tmp/progress.json --deobfuscate --soft --result=/var/www/cure_result.json
или php procu2.php --json_list=/var/www/aibolit_report.json --log=/var/www/procu_log.txt --progress=/tmp/progress.json --deobfuscate --soft --result=/var/www/cure_result.json
То, что выделено жирным, необходимо поменять с учетом локальных путей на сервере или на аккаунте хостинга.
Описание параметров • --list=/var/www/infected_list.txt - путь до файла с листингом зараженных
файлов, который можно получить из отчета сканера AI-BOLIT или --json_list=/var/www/aibolit_report.json - путь до файла отчета сканера AI-BOLIT в json-формате.
• --log=/var/www/procu_log.txt – путь до текстового лога операций
14
• --progress=/tmp/progress.json – путь до файла, в который пишется прогресс лечения. Файл в формате json, обновляется каждую секунду. По завершении лечения удаляется.
• --soft – режим “мягкого” удаления файлов, когда файл физически не удаляется, а обнуляется. Это защищает от повреждения сайтов, если вредоносные скрипты подключены в другиих скриптах или в шаблонах базы данных.
• --result=/var/www/cure_result.json - путь до файла с отчетом в формате json. • --deobfuscate – данный параметр включает режим декодирования зашифрованных
файлов перед проверкой по базам сигнатур
Формат progress.json аналогичный формату progress.json файла сканера AI-BOLIT (см. раздел “Формат файла прогресса сканирования”). Формат файла отчета приведен ниже:
Данный файл представляет массив элементов со следующими полями:
• f – путь до файла, который был вылечен
15
• e – ошибка операции o e = 0 – файл вылечен, o e = 1 - файл слишком большой, o e = 2 - ошибка чтения файла, o e = 3 – файл не доступен на запись.
• d – тип операции удаления
o d= 0 – в файле удалена инъекция (вредоносный фрагмент) o d > 0 (т.е. 1, 2 или 3) – удален сам файл, код зависит от типа обнаружения вредоносного файла.
• s – идентификатор удаленной сигнатуры
Интеграция AI-BOLIT и лечащего модуля При лечении сайта рекомендуемый следующий алгоритм действий: Скопировать файлы
• ai-bolit-hoster.php • procu2.php
в корневой каталог проверяемого сайта (или можно указывать параметр --path=<путь до сканируемого каталога> и запустить антивирус из любого каталога). Запускать сканер с параметром --json_report=`pwd`/report.json, чтобы сформировался файл файл отчета report.json со списком обнаруженных вирусных и вредоносных файлов. php ai-bolit-hoster.php --json_report=`pwd`/report.json [другие параметры проверки]
Далее запустить лечащий модуль командой php procu2.php --json_list=`pwd`/report.json --soft
Модуль автоматически подгрузит листинг файлов для лечения из сгенерированного сканером AI-BOLIT отчета и последовательно автоматически вылечит все известные угрозы. После завершения работы procu2.php будут созданы
• файл отчета, • файл лога • каталог с резервными копиями измененных (удаленных) файлов
backup_<время>. При необходимости можно откатить изменения, восстановив все или отдельные файлы
16
из созданной резервной копии (в каталоге backup_<время> файлы будут в той же структуре каталогов, что и на сайте).