AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для...

16
1 QuickStart Guide v20180709 Антивирус для сервера Компания Ревизиумhttps://revisium.com/ Технические вопросы на [email protected] Организационные вопросы на [email protected]

Transcript of AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для...

Page 1: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

1

QuickStart Guide v20180709

Антивирус для сервера Компания “Ревизиум” https://revisium.com/ Технические вопросы – на [email protected] Организационные вопросы – на [email protected]

Page 2: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

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* файлы – исключения и белые списки Структура архива не меняется при выходе обновлений. При обновлении достаточно распаковать новую версию поверх старой.

Page 3: AI-BOLIT QuickStart Guideai-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 формате.

Page 4: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

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 ядро сервера.

Page 5: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

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 со списком файлов для проверки, который удаляется автоматически по завершении.

Page 6: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

6

Формат файла прогресса сканирования Для отслеживания прогресса сканирования в других процессах можно использовать файл прогресса, который создает и обновляет сканер при запуске с параметром --progress=<путь к файлу>.

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

• self – путь до файла сканера • started – время старта сканирования в unixtime • updated – время последнего обновления файла в unixtime • progress – процент выполненного сканирования (от 0 до 100) • time_elapsed – время сканирования в секундах • time_left – оценка оставшегося времени сканирования в секундах

(пересчитывается в процессе сканирования динамически) • files_left – оставшееся число файлов на сканирование • files_total – общее число файлов на сканирование • current_file – путь до файла, который проверяется в данный момент

Page 7: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

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-файлов

Page 8: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

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 – уникальный идентификатор сигнатуры (можно игнорировать)

Page 9: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

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

Page 10: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

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

Page 11: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

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 и другие).

Page 12: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

12

Дополнительные материалы по работе сканера Возможности сканера не ограничиваются перечисленными выше, поэтому мы рекомендуем ознакомиться со всеми параметрами командной строки в следующих статьях:

• https://revisium.com/kb/ai-bolit-console-faq.html - справка по параметрам командной строки

• https://revisium.com/kb/ai-bolit-masterclass.html - мастер-класс по запуску сканера на сервере

А также любые вопросы, связанные с интеграцией или автоматизацией сканера и его возможностей вы всегда можете уточнить у нас по email [email protected]

Page 13: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

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 – путь до текстового лога операций

Page 14: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

14

• --progress=/tmp/progress.json – путь до файла, в который пишется прогресс лечения. Файл в формате json, обновляется каждую секунду. По завершении лечения удаляется.

• --soft – режим “мягкого” удаления файлов, когда файл физически не удаляется, а обнуляется. Это защищает от повреждения сайтов, если вредоносные скрипты подключены в другиих скриптах или в шаблонах базы данных.

• --result=/var/www/cure_result.json - путь до файла с отчетом в формате json. • --deobfuscate – данный параметр включает режим декодирования зашифрованных

файлов перед проверкой по базам сигнатур

Формат progress.json аналогичный формату progress.json файла сканера AI-BOLIT (см. раздел “Формат файла прогресса сканирования”). Формат файла отчета приведен ниже:

Данный файл представляет массив элементов со следующими полями:

• f – путь до файла, который был вылечен

Page 15: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

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_<время>. При необходимости можно откатить изменения, восстановив все или отдельные файлы

Page 16: AI-BOLIT QuickStart Guideai-design.html – шаблон html отчета для кастомизации.a* файлы – исключения и белые списки ... каталоге

16

из созданной резервной копии (в каталоге backup_<время> файлы будут в той же структуре каталогов, что и на сайте).