Коллеги, рад приветствовать Вас! С момента запуска сканера безопасности в версии security 12.5.0 прошло около полу года. За это время его рекомендации увидело около 12к+ сайтов (суммарно более 50к проверок). Увы, как показывает статистика подавляющее большинство либо игнорирует его рекомендации, либо не знает, что с ними делать. Именно поэтому я решил более детально описать тесты и каким образом трактовать их результаты. Я постараюсь описать лишь наиболее часто встречающиеся угрозы или угрозы, вызывающее наибольшее количество вопросов. Осторожно, ниже обильное количество хардкора.
Локальное сканирование
Как вы знаете из предыдущего поста Сканер безопасности - верный друг и помощник. Сканер разделен на две части - локальную и внешнюю. Локальная - ответственна за проверки, которые невозможно/нецелесообразно выполнить “снаружи”, например, настройки сайта или исполнение php/python/perl/etc скриптов в директории хранения загружаемых файлов гораздо эффективнее проверять именно изнутри. Все проверки сгруппированы по типу (настройки окружения, настройки php, настройки сайта и т.д.), поэтому предлагаю начать по порядку:)
Настройки окружения
Директория хранения файлов сессий доступна для всех системных пользователей Вы можете лицезреть сообщение об этой угрозе, когда директория хранения файловых сессий php (session.save_path, по умолчанию /tmp) доступна для всех (other), например:
$ stat -c 'Perms: %A' /tmp
Perms: drwxrwxrwt
Если вы не используете хранение сессий в БД и пользуетесь shared-хостингом, то в большинстве случаев ваш “сосед” сможет получить полный доступ к вашему сайту, модифицировав сессионные данные. Это хороший повод задать ему вопрос и потребовать внести правки в конфигурацию, таким образом дабы сессионные файлы каждого пользователя были отделены друг от друга, и на эти директории были установлены корректные файловые права. Пользователям выделенных серверов это менее критично, но все же рекомендовано, причем что у вашего администратора это займет не более 10 минут времени;)
Предположительно в директории хранения сессий находятся сессии других проектов Подобное сообщение можно встретить, если несколько сайтов используют одну директорию для хранения сессий. Очень часто это можно встретить при использовании выделенных серверов, когда есть N сайтов и все они хранят свои сессии где-нить в /tmp/php_sess. Начиная с версии main 12.5.0 это стало не столь критично, но тем не менее стоит это исправить указав собственную директорию хранения сессий для каждого сайта. Чем это опасно? При такой конфигурации сессии получаются “сквозные”, т.е., допустим, есть сайт A и сайт B: a) Мы регистрируемся на сайте B, получаем ID пользователя 7; b) Теперь зайдя на сайт A с ID сессии от сайта B, мы окажемся авторизованными под пользователем с ID 7, но сайта A, улавливаете? А что если пользователь с ID 7 на сайте A администратор?
PHP/Python/Perl/etc скрипты исполняются в директории хранения загружаемых файлов Используя API Битрикс, пользователь сайта не может загрузить .php, .py, .psp, .pl и т.д. файлы без наличия необходимых прав. Но к сожалению, как в пользовательском коде, так и в коде разработчиков Маркетплейс все еще встречается “кастомная” загрузка файлов, которая может позволить загрузить файлы с потенциально опасными расширениями. Именно поэтому лучше исключить эту возможность, корректно сконфигурировав ваш веб-сервер.
.htaccess файлы обрабатываются Apache в директории хранения загружаемых файлов Аналогично предыдущему, только вектор атаки через загрузку файлов направлен на загрузку .htaccess файлов с кастомными конфигами. Например такой:
<Files ~ "^\.ht">
Order allow,deny
Allow from all
</Files>
AddHandler zend-enabler-script .htaccess
<IfModule mod_mime.c>
AddType application/x-httpd-php .htaccess
</IfModule>
#<?php assert($_GET[0]); ?>
Apache Content Negotiation разрешен в директории хранения загружаемых файлов Суть проблемы заключается в том, что в конфигурации Apache по умолчанию можно встретить такую строку:
AddHandler type-map .var
Это означает, что если в директории загружаемых файлов у вас будет лежать файл с именем test.var.gif и содержимым:
(вполне валидная картинка по мнению PHP!), то при запросе этого файла нам будет отдано тело с типом text/html, что логично, т.к. обработчики в Apache вызываются до определения типа:
А не как мы ожидали image/gif, что разумеется приводит к возможности XSS нападения:
Эта возможность придает гибкости Apache для обработки мультиязычной статики, но безопасности вашего сайта только вредит.
Настройки PHP Еще не устали? Тогда продолжаем! По настройкам PHP зачастую не возникает вопросов, кроме двух:
Разрешено чтение файлов по URL (URL wrappers) Это разумеется один из тез пунктов, за который на меня зол не один разработчик. Но природа PHP такова, что никогда не знаешь с какой стороны получишь поддых:) И если мы хотим повысить безопасность нашего сайта - allow_url_fopen должен быть Off, дабы оградить разработчика от "сюрпризов"
Cookies доступны из JavaScript Имеется в виду, что при установке cookie ваш сайт не передает дополнительный флаг httpOnly для HTTP-заголовка Set-Cookie, который указывает на запрет чтения/записи данных Cookie посредством JavaScript, отсюда и название. Увы XSS атаки наиболее распространены, и получить пользовательские cookies это самый простой их вектор (сейчас все чаще XSS нападение используется для CSRF атак). Поэтому необходимо использовать любую возможность для уменьшения рисков. Флаг httpOnly рекомендуется указывать как минимум для ID сессии, для этого достаточно в настройках php указать:
Настройки сайта Так же как и в случае с настройками PHP - проблем обычно не возникает, т.к. исправление обнаруженных угроз достаточно тривиально. По моему мнению требует объяснений лишь одна:
Ограничен список расширений исполняемых файлов Т.к. администратор сайта вправе изменять этот список по своему усмотрению, он может устаревать со временем (когда мы решаем добавить какое-либо расширение в список опасных, к примеру, как было с var). Сканер безопасности сообщит вам, если в вашем кастомизированном списке содержаться не все необходимые расширения.
Пользователи Эти проверки появились только в security 14.0.3. Основная их цель - проверить все ли привилегированные пользователи используют MFA, у всех ли установлен пароль достаточной сложности и т.д. Увы, на текущий момент по политическим соображениям включена только одна:
У некоторых пользователей административной группы установлен слабый пароль Сканер безопасности берет список пользователей из административной группы и пытается подобрать пароль к ним методом перебора по словарю. В случае успеха будет выведен список пользователей, которым необходимо установить более сложный пароль. Зачастую слабый пароль у пользователей административной группы оказывается в следствии того, что изначально они небыли администраторами, т.е. административный доступ предоставляется ранее зарегистрированному пользователю, чьи политики безопасности не требовали стойкого пароля.
Внешнее сканирование
Внешнее сканирование, кажется, заслуживает отдельного поста, но я постараюсь вкратце осветить основные моменты.
Доступен листинг директорий Увы, включенный Directory AutoIndex встречается повсеместно и сулит как минимум неконтролируемым доступом к загруженным пользовательским файлам. Для nginx необходимо убрать директиву autoindex, она выглядит примерно так:
location / {
autoindex on;
...
}
Для Apache это Options +Indexes, как-то так будет выглядеть в конфиге:
Открыт доступ к важным сервисам Всегда помните - все сервисы, необходимые только сайту, не должны “торчать” наружу. Увы, случаи неконтролируемого доступа к критически важным сервисам (например, memcached) - совсем не редкость. Это важный момент, т.к. доступ к memcached, где ваш сайт хранит свой кеш - это по сути полный контроль над ним. Если вы пользуетесь shared-хостингом - это отличный повод для разговора с ним:) Если у вас не кластерная архитектура проекта, то правильнее всего использовать unix-сокет, когда у вас memcached используется для кластера - корректные настройки firewall + SASL.
Инъекция PHP-CGI параметров из строки запроса Тут все достаточно просто:) Есть уязвимость в php: CVE-2012-1823 Она позволяет как читать файлы вашего сайта ( /some_script.php?-s ), так и в большинстве случаев исполнять произвольный php код в контексте вашего сайта. Рекомендуется незамедлительно обновить версию php, либо не использовать php-cgi вовсе
Неправильно сконфигурирована связка Nginx + php-fpm Сколько не бейся над этой темой, но в интернете все еще достаточно много ужасных HowTo’шек по настройке связки nginx + php-fpm, в которых ни слова не сказано о том, что php-fpm с конфигами по умолчанию и локейшн в nginx примерно следующего содержания:
location ~* \.php$ {
fastcgi_pass backend;
...
}
позволит злоумышленнику интерпретировать любой файл как php скрипт. К примеру, обратившись к аватару пользователя таким образом: /upload/main/f6f/photo.jpg/some.php, злоумышленник выполнит php код содержащийся в аватаре (например в EXIF или конце PNG). Наиболее распространенными вариантами решения является либо указание в php.ini (если это удовлетворяет требованиям вашего проекта):
cgi.fix_pathinfo=0
, либо корректно сконфигурировать nginx, учитывая особенности вашего проекта
Открыт доступ к служебным "статус" страницам Так называемые статус-страницы позволяют злоумышленнику получить дополнительную информацию о вашем сайте, которая им столь нужна. Не стоит их радовать, ограничив доступ к ним (а лучше отключив/закрыв авторизацией, т.к. доверять localhost так же не стоит). Наиболее распространенные: Apache mod_status. Например: http://apache.org/server-status И PHP-FPM Status Page (pm.status-path)
Найдены временные файлы При редактировании файлов на сервере по SSH или при использовании DCVS могут создаваться временные копии текущих файлов, в которых может содержаться важная информация (например, все еще актуальные данные о подключении к БД). Внешнее сканирование отобразит вам список всех таких файлов, которые необходимо удалить и понять причину их появления. Так же, возможно, стоит ограничить доступ к таким файлам на уровне веб-сервера.
Найдены опасные файлы Так же достаточно часто встречаются сайты на которых остались какие-то файлы после отладки, установки и т.д. Например: bitrixsetup.php, bx_1c_import.php, restore.php, log.txt и т.д. Внешнее сканирование сообщит вам список найденных файлов, которые в обязательном порядке (!) необходимо удалить.
Доступны настройки PhpMyAdmin Еще одна частая проблема - доступны настройки PhpMyAdmin (папочка setup в новых версиях). Увы, они как минимум позволяют прочесть текущую конфигурацию PhpMyAdmin + в них постоянно находятся новые уязвимости. Внешнее сканирование сообщит вам, куда нужно смотреть;)
Публичный доступ к файлам контроля версий Как ни странно - публичный доступ к служебным каталогам DCVS все еще достаточно актуальное явление. Зачастую это крайне опасно для вашего сайта - необходимо в срочном порядке закрыть доступ к таким каталогам (.git, .hg, .bzr и т.д.) и к файлам игнорирования (.gitignore, .hgignore и т.д.). В идеале необходимо пользоваться экспортом в вашей DCVS. Разумеется, внешнее сканирование сообщит вам куда необходимо смотреть:)
Проверяемый сайт отвечает на хост по умолчанию Это пожалуй одна из самых распространенных ошибок конфигурации для выделенных серверов. Суть проблемы заключается в том, что сайт отвечает на любой Host в заголовке запроса, в следствие чего, например, если $_SERVER["HTTP_HOST"] попадет в кеш компонента, то получаем классический content spoofing. Проверить очень легко, запрашиваем наш сайт с правильным хостом:
$ http -v head some.info
HEAD / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, compress
Host: some.info
User-Agent: HTTPie/0.6.0
HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=windows-1251
Date: Fri, 25 Oct 2013 06:57:31 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
P3P: policyref="/bitrix/p3p.xml", CP="NON DSP COR CUR ADM DEV PSA PSD OUR UNR BUS UNI COM NAV INT DEM STA"
Pragma: no-cache
Server: nginx/1.2.6
Set-Cookie: PHPSESSID=vp93uc1j3avoibvfkusn5p6gc5; path=/; HttpOnly
X-Frame-Options: SAMEORIGIN
X-Powered-CMS: Bitrix Site Manager (a0b80388d20et47833773cf8f6b7c738)
А теперь с произвольным:
$ http -v head some.info 'Host: batman.inc'
HEAD / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, compress
Host: batman.inc
User-Agent: HTTPie/0.6.0
HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=windows-1251
Date: Fri, 25 Oct 2013 06:57:35 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
P3P: policyref="/bitrix/p3p.xml", CP="NON DSP COR CUR ADM DEV PSA PSD OUR UNR BUS UNI COM NAV INT DEM STA"
Pragma: no-cache
Server: nginx/1.2.6
Set-Cookie: PHPSESSID=55up92i9r2sorg24j78lud9li2; path=/; HttpOnly
X-Frame-Options: SAMEORIGIN
X-Powered-CMS: Bitrix Site Manager (a0b80388d20et47833773cf8f6b7c738)
Если мы видим одинаковый контент отданный для правильного и произвольного хоста - у нас неправильно сконфигурирован веб-сервер. Для решения этой угрозы, например, в nginx достаточно добавить сервер по умолчанию с перенаправлением на основной домен, например, такой (domain.com замените на ваш домен):
Перед этим не забудьте убедится что больше нет явно указанных серверов по умолчанию (с директивой default_server) Подробнее в документации nginx
Найден phpinfo() Честно говоря, я этого искренне не понимаю, но с завидным постоянством вижу на сайтах файлы x.php, pi.php, phpinfo.php и т.д. с выводом phpinfo(). Не надо так! Внешнее сканирование укажет список таких файлов, которые необходимо удалить и впредь использовать встроенную в Битрикс админскую страницу с выводом phpinfo()
Включен Automatic MIME Type Detection для Internet Explorer По умолчанию в Internet Explorer включен mime-сниффинг (MIME Type Detection in Windows Internet Explore, IE8 Security Part VI: Beta 2 Update), что никак не идет на пользу безопасности пользователей вашего сайта. В двух словах, если в заголовке ответа Content-Type сказано "text/plain," "application/octet-stream,", он отсутствует либо пуст - IE сам решает какой тип у контента основываясь, на его содержимом. Благо начиная с IE8 этим поведением можно управлять при помощи заголовка X-Content-Type-Options. Самый простой пример эксплуатации этого - загрузка файла без расширения. Допустим, у нас есть скрипт позволяющий загружать только картинки, но сохраняющий их без расширения... 1. Загружаем через него файл test.gif с содержимым:
GIF89
<html>
<script>
prompt('XSS on ' + document.domain);
</script>
</html>
2. Т.к. это вполне валидная картинка с позиции PHP, она благополучно попадет на сервер, но сохранится без расширения (по условиям примера). Допустим будет доступна по адресу: http://192.168.1.185:8080/upload/test 3. Для начала проверяем как его обработает IE10 с включенным mime-сниффингом:
$ http head http://192.168.1.185:8080/upload/test
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 80
Content-Type: application/octet-stream
Date: Sun, 27 Oct 2013 12:14:45 GMT
ETag: "526d026b-50"
Last-Modified: Sun, 27 Oct 2013 12:09:15 GMT
Server: nginx/1.4.3
Т.к. тип отдаваемого контента application/octet-stream (по умолчанию, регулируется директивой default_type), IE включает mime-сниффинг, и мы видим, что наша “картинка” была обработана как html-код:
4. А теперь с заголовком "X-Content-Type-Options: nosniff". В nginx это можно сделать через add_header:
add_header X-Content-Type-Options nosniff;
Проверяем:
$ http head http://192.168.1.185:8080/upload/test
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 80
Content-Type: application/octet-stream
Date: Sun, 27 Oct 2013 12:18:21 GMT
ETag: "526d026b-50"
Last-Modified: Sun, 27 Oct 2013 12:09:15 GMT
Server: nginx/1.4.3
X-Content-Type-Options: nosniff
И видим, что IE теперь предлагает нам сохранить этот файл:
На этом пожалуй все:) Я постарался осветить основные моменты, далеко не все, но наиболее часто встречающиеся. В скором времени набор тестов во внешнем сканировании будет еще расширен. Всем безопасных проектов и если у вас есть какие-либо вопросы - спрашивайте пожалуйста:)
Всем хорошо известно, что безопасность любого проекта равна безопасности самого слабого звена. И об одном из них, увы, зачастую наименее безопасном, я бы и хотел поговорить. Не редко можно наблюдать ситуацию, когда непосредственно само веб-приложение достаточно безопасно, но окружение, в котором он работает, не выдерживает ни какой критики. Это и понятно, т. к. в борьбе за безопасность веб-приложения существует достаточное число помощников:
Собственный профессионализм разработчика (мы ведь все с вами молодцы);
Web Application Firewall, который отфильтрует атаки на веб-приложение в реальном времени;
Статический анализ кода, который подскажет возможные уязвимости в коде;
Непрерывная работа нашей команды по обеспечению безопасности API и компонентов Битрикс;
Сторонний анализ безопасности веб-приложения различными средствами (к примеру с помощью w3af).
Но когда приложение «ушло на золото» и введено в эксплуатацию, начинается наибольшее число неприятностей. Увы, зачастую разработчики и системные администраторы не имеют надлежащего опыта в конфигурировании серверного ПО с позиции ИБ, а штатного эксперта в команде нет. И это хорошо, если проект располагается на VPS/VDS, где можно использовать нашу виртуальную машину, но если это не так, особенно в случае с виртуальным хостингом, то мы можем видеть все что угодно — от полного доступа к вашим бэкапам до использования одного Memcached на все виртуальные хосты. Не стоит так же забывать, что к перечню доменных имен множества зон (ru, рф, com и т. д.) существует публичный доступ, чем с радостью пользуются злоумышленники, периодически проходя по нему и анализируя на предмет уязвимостей связанных с неправильно сконфигурированным серверным ПО. Автоматизировать весь этот процесс от обновления списка до попыток атаки через найденные «огрехи», как вы сами понимаете, достаточно не сложно, и мы не редко отмечаем подобную активность. Именно с этими мыслями мы сели проектировать наш собственный «сканер безопасности», который выйдет в версии 12.5.0. Давайте для начала разберемся, что он умеет на текущий момент:
Выполнять внутренние сканирование окружения проекта, к примеру, безопасно ли хранятся файлы сессий.
Выполнять проверку настроек сайта, к примеру, включен ли WAF, установлен ли пароль к БД и т. д.
Выполнять поиск потенциальных уязвимостей в коде проекта с помощью статического анализа.
Запускать внешнее сканирование.
Каждый из приведенных пунктов - это целый комплекс различных тестов и анализов преследующих одну цель — дать возможность понять, как можно улучшить общую безопасность проекта. Разумеется, ни аудиторы, ни автоматизированные средства не смогут вам сказать безопасен ли проект, все они говорят лишь, «есть ли в проекте уязвимости». А учитывая тот факт, что каждое работающее серверное приложение и каждая строка кода веб-приложения может полностью решить судьбу проекта — задача эта не так легка. Давайте поближе глянем на сканер безопасности, который вы сможете найти, пройдя в Настройки->Проактивная защита->Сканер безопасности либо просто кликнув по кнопке «Выполнить» в гаджете безопасности на рабочем столе административной части сайта:
Войдя в сканер безопасности, вам сразу же будет предложено пройти сканирование:
Жмем «Запустить сканирование» и ожидаем результатов:
После завершения сканирования вы увидите его результаты. Посмотрим что получилось у меня:
Как видно из результатов, всего на моей тестовой установке было обнаружено 12 потенциальных проблем, из них 5 критичных. Рассмотрим подробнее результаты приведенные на скриншоте:
Статический анализ обнаружил явную SQLi, без комментариев
Внешнее сканирование обнаружило один публично доступный сервер memcached из пула, заведенного в модуле веб-кластер. Нужно в обязательном порядке закрыть порт (в моем случае 11212), а лучше и вовсе закрыть любой публичный доступ к этому серверу.
Внутреннее сканирование обнаружило файлы с доступом для other (к примеру -rw-rw-rw-), такое часто происходит в последствии выполнения всяких how-to, где написано что после установки права на какой либо файл или директорию нужно выставить в 777. К примеру, вот: http://www.opengs.ru/lampubuntu/77-ustanovka-i-nastroika-lamp-i-phpmyadmin.html
Думаю никто не станет спорить с критичностью найденных проблем и с необходимостью их исправления. В этот раз я не буду детально останавливаться конкретно на тестах, желая осветить лишь общую концепцию его работы. Так же, хотел упомянуть тот факт, что нами рекомендовано проходить сканирование хотя бы раз в месяц о чем вам напомнит административный информер. Это обусловлено и планами по развитию сервиса и ситуацией, когда хостинг провайдеры прозрачно для клиента меняют какую либо часть конфигурации сервера, которая в последствии может стоит вашему проекту репутации и честного имени. Если у вас есть какие вопросы либо предложения — спрашивайте, пожалуйста, либо пишите в нашу отважную ТП. Всем безопасных проектов, продолжение следует!
Работа над безопасностью любого приложения и особенно веб-приложения, с родни работы шпиона — об успехах не знает никто, о провалах слышат все. Славное имя Вас, как разработчика, и клиента, как владельца бизнеса, может оказаться под угрозой благодаря одному забытому экранированию или пропущенной фильтрации. Заботясь о безопасности проектов, разрабатываемых на нашей платформе, мы ранее выпустили проактивный фильтр, который предотвращает эксплуатацию распространённых уязвимостей и в целом значительно подстраховывает разработчика от ошибок. Но его задача предотвратить эксплуатацию уязвимости, а не устранить её источник. Именно поэтому мы решили пойти немножечко дальше и начали работу над собственным инструментом для статического taint-анализа кода проекта (анализ приложения, производимый без его реального выполнения, рассчитанный на выявление ошибок связанных с некорректной обработкой пользовательских данных), который бы учитывал специфику разработки на нашей платформе.
Итак, веб-антивирус 1С-Битрикса рапортует об обнаружении вируса. Что делать в таком случае?
Для начала необходимо выяснить, на самом ли деле на сайте присутствует ссылка на вирус или произошло ложное срабатывание.
Работа веб-антивируса основана на эвристическом анализе потенциально опасных блоков в html коде. Количество ложных срабатываний веб-антивируса минимально, но, к сожалению, ложные срабатывания все равно встречаются.
Итак, ключевое отличие блоков, действительно содержащих ссылки на вирусы, от легитимных блоков, вызывающих ложные срабатывания — это то, что легитимные блоки были явно добавлены вашим программистом. Кто же добавил «вирусные» блоки, и откуда они взялись, вы не знаете. В целом, распознавание «вирусных» и легитимных блоков может быть нетривиальной задачей даже для человека. Сканирование этих блоков персональными антивирусами тоже, как правило, не дает результата, так как такие блоки html кода не содержат собственно вирусы или трояны, а содержат лишь ссылки на них.
Итак, если вы уверены, что блок, на который срабатывает веб-антивирус 1С-Битрикса, легитимный и не содержит ссылки на загрузку вирусов, то данное срабатывание антивируса является ложным. В этом случае вам необходимо взять некоторую строку из этого блока (достаточно длинную и достаточно уникальную) и добавить ее в исключения веб-антивируса. В результате, антивирус перестанет срабатывать на любые, обрабатываемые им блоки, содержащие указанную строку.
Если же блок содержит ссылку на вирус, то все сложнее. Так как наличие стороннего кода на вашем сервере означает, что произошла компрометация веб-сервера, и к файлам на вашем сервере мог получить доступ злоумышленник. В подавляющем большинстве случаев, наличие «вирусных» блоков, на которые срабатывает веб-антивирус 1С-Битрикса, означает, что какой-либо компьютер вашего администратора, вебмастера или программиста (и т.п.), имеющий доступ на сервер через FTP (SSH, SFTP и т.п.), заражен вирусом, и с него был похищен пароль от сервера.
Потому при обнаружении вируса на сайте, необходимо проверить все компьютеры людей, имеющих доступ к сайту (в том числе к панели администрирования 1С-Битрикса), персональным антивирусным программным обеспечением.
После того, как все такие компьютеры были вылечены, необходимо сменить все пароли от вашего сервера (пароли на FTP, SSH, в том числе рутовые пароли, если у вас есть рутовый доступ на сервер, пароли к базе данных, пароли пользователей в 1С-Битриксе, имеющих доступ к админке).
Затем следует вычистить весь сторонний код на сервере. Проще всего для отслеживания изменившихся файлов использовать контроль целостности файлов 1С-Битрикса. Но это только в том случае, если вы заранее озаботились безопасностью и периодически запускаете контроль целостности файлов.
Если же вы не используете контроль целостности, то в общем случае поиск всех изменений, оставленных хакером, может быть нетривиальной задачей.
Для поиска таких изменений, можно провести поиск по всем файлам на сервере, содержащим строки из блока, на который сработал веб-антивирус. Поиск и ручная проверка всех недавно изменившихся файлов. Анализ логов http сервера.
В целом остается надеяться, что ваш хакер оказался не слишком хитрым, ограничился внедрением ява-скриптов со ссылками на вирус и не оставил за собой скрытых бекдоров. И хотя на практике скрытые бекдоры оставляются не слишком часто, такие случаи иногда бывают. Кроме того, у хакеров есть множество приемов сокрытия бекдоров на веб сайте, которые приводят к значительному затруднению автоматического обнаружения таких бекдоров.
Если после всех выполненных рекомендаций инциденты с вашим сайтом продолжают регулярно случаться, значит где-то на сервере имеется такой труднообнаружимый бекдор.