
- Собственный профессионализм разработчика (мы ведь все с вами молодцы);
- Web Application Firewall, который отфильтрует атаки на веб-приложение в реальном времени;
- Статический анализ кода, который подскажет возможные уязвимости в коде;
- Непрерывная работа нашей команды по обеспечению безопасности API и компонентов Битрикс;
- Сторонний анализ безопасности веб-приложения различными средствами (к примеру с помощью w3af).
Именно с этими мыслями мы сели проектировать наш собственный «сканер безопасности», который выйдет в версии 12.5.0.
Давайте для начала разберемся, что он умеет на текущий момент:
- Выполнять внутренние сканирование окружения проекта, к примеру, безопасно ли хранятся файлы сессий.
- Выполнять проверку настроек сайта, к примеру, включен ли WAF, установлен ли пароль к БД и т. д.
- Выполнять поиск потенциальных уязвимостей в коде проекта с помощью .
- Запускать внешнее сканирование.
Давайте поближе глянем на сканер безопасности, который вы сможете найти, пройдя в Настройки->Проактивная защита->Сканер безопасности либо просто кликнув по кнопке «Выполнить» в гаджете безопасности на рабочем столе административной части сайта:

Войдя в сканер безопасности, вам сразу же будет предложено пройти сканирование:

Жмем «Запустить сканирование» и ожидаем результатов:

После завершения сканирования вы увидите его результаты. Посмотрим что получилось у меня:

Как видно из результатов, всего на моей тестовой установке было обнаружено 12 потенциальных проблем, из них 5 критичных. Рассмотрим подробнее результаты приведенные на скриншоте:
- Статический анализ обнаружил явную SQLi, без комментариев

- Внешнее сканирование обнаружило один публично доступный сервер memcached из пула, заведенного в модуле веб-кластер. Нужно в обязательном порядке закрыть порт (в моем случае 11212), а лучше и вовсе закрыть любой публичный доступ к этому серверу.
- Внутреннее сканирование обнаружило файлы с доступом для other (к примеру -rw-rw-rw-), такое часто происходит в последствии выполнения всяких how-to, где написано что после установки права на какой либо файл или директорию нужно выставить в 777. К примеру, вот:
В этот раз я не буду детально останавливаться конкретно на тестах, желая осветить лишь общую концепцию его работы. Так же, хотел упомянуть тот факт, что нами рекомендовано проходить сканирование хотя бы раз в месяц о чем вам напомнит административный информер. Это обусловлено и планами по развитию сервиса и ситуацией, когда хостинг провайдеры прозрачно для клиента меняют какую либо часть конфигурации сервера, которая в последствии может стоит вашему проекту репутации и честного имени.
Если у вас есть какие вопросы либо предложения — спрашивайте, пожалуйста, либо пишите в нашу отважную ТП. Всем безопасных проектов, продолжение следует!
=(
Ну какой же я разработчик...
По моему опыту вопросы безопасности пользователи и даже разработчики оценить в большинстве своём не могут. Безопасность можно только навязать сверху. А пользователи и разработчики о ней вспоминают только когда "жареный петух клюнет".
Просто уже сейчас модуль проактивной защиты даёт колоссальные возможности (один модуль контроля целостности чего стоит). Но на него нужно сажать человека, который бы не только первичную настройку сделал, но и периодически мониторил происходящее.
У меня есть пока 1 клиент, который на это согласился, да и то лишь потому, что у них недавно произошло вирусное заражение и сайт был заблокирован в единый день и браузерами и поисковиками и антивирусами...
=)
Вот эти да, пока готовы платить 10К в месяц за ежедневный аудит.
А остальным даже первичная настройка "не нужна".
И аргументы железобетонные, которые им дал сам битрикс (вырыв партнёрам яму): "Ну он же безопасный, вы ж сами говорили".
Безопасный. Но живёт в агрессивной среде, где помимо него ест ьи хостер и дебилы-сотрудники, складывающие все доступы в текстовый файлик на рабочем столе "passwods.txt"
А последние и так очень коварны. Я в том году лечил сайт, где эксплуатация была только для пользователей (НЕ ДЛЯ СОТРУДНИКОВ И АДМИНОВ, причём определялось по ряду факторов включая ИП и логин) да ещё на событии. Т.е. в коде было обнаружить очень непросто.
А все старые дырочки были прикрыты (всяких шеллов нерабочих обнаружилась масса).
А такие люди и так в курсе где что может выстрелить...
Году в 2004-м, когда я хотел стать хакером (которыми хотели стать все), я нашел описание какой-то уязвимости - мол иди туда, вбивай то, получишь это. Что получилось? Я залил картинку "хакед бай ...." на сайт какой-то американской средней школы. Делаем выводы.
И оно заключается в том, что с хакерами-ламерами понятно как бороться - бекапы, аудирующие сайт админы (с минимальными познаниями если не в безопасности, то в мониторе битриксовом), общий уровень грамотности. Это наоборот даже хорошо на мой взгляд. Появляется угроза мелочной пакости, которая повышает общий уровень защищённости (и заинтересованности заказчиков в защищённости).
А вот с профи всё суровее.
Профи часто ищут уязвимость, потом ломают, а потом эксплуатируют и между этими этапами могут проходить недели и месяцы! При этом бекапы могут устареть и уже содержать в себе бекдоры к моменту обнаружения. А самый кайф, что в этом случае профи делает не 1 закладку, а несколько и проверяет их работоспособность. И если вдруг ему начинают противодействовать начинается войнушка.
Согласись, есть разница между двумя сценариями:
- Дефейснуть сайт школы (или любую другую визитку) и повесить "хакед бай ...."
- Заложить десяток бекдоров и год без ведома администраторов и программистов уводить 50% клиентского траффика с сайта (например на сайт конкурента или просто на дорвеи / контекстную рекламу), да ещё подбираться к тому чтобы протроянить (с помощью XSS, или фишинга на основе соц инженерии) сотрудников компании, в том числе руководство с целью получения доступа к клиент-банковским системам.
Я конечно сейчас ради красного словца всё в одну кучу намешал и на самом деле обычно всё не так трагично, но сценарий вероятен. Я наблюдал пару раз не столь суровые, но схожие случаи.
Осталось дать возможность повесить проверку монитора контроля целостности (и создание новых точек) на крон. А точки хранить не у себя на хостинге, а в облаке без возможности удаления.
А ещё очень хочется чтобы была возможность подвергать сканеру кеш, папку с бекапами и некоторые другие области, которые он пока пропускает. Но как это сделать корректно пока не придумал.
Просто теоретически злоумышленник, имея доступ к сайту может свой вредоносный код инклудить не в исходные файлы, а в файлы кеша. И делать это периодически.
В общем, не мне вас учить, это я просто в приступе весенней паранойи буяню...
На большинстве установок Битры не стоит блокировка или вывод капчи после N неудачных попыток авторизации в админку, админка доступна с любого IP, и есть логин из серии "admin" (да ещё это как правило юзер с ID=1).
На мой взгляд при таком подходе никаких уязвимостей не нужно ))))
Другими словами, вы подсказываете им как ломать сайты.
1. Если выше стоит фильтрация (например, принудительным приведением типа), то никакой инъекции тут нет.
2. Какая тут публичная доступность, когда IP из частной сети ?
3. Зависит от того, где размещён сайт. Если на изолированном сервере, то никаких проблем опять же нет. Если же "по соседству" ещё сайты крутятся, то надо проверять не только права на запись, но и на чтение - dbconn.php же
1. Если стоит выше по коду текущего скрипта, статический анализ это должен понимать. Т.е. к примеру:
$id = (int) $_GET["int"]; $DB->Query("seleсt * frоm any where id = ".$id);$_GET["id"] = (int) $_GET["id"]; $DB->Query("seleсt * frоm any where id = ".$_GET["id"]);2. Моя тестовая установка расположена в одной подсети с сканером, поэтому естественно для него этот приватные IP - публичен. Извините, я ради одного скриншота не стал собирать публичную тестовую установку. Но(!) если даже это приватная сеть и сервер Memcached доступен ей всей (IP внешнего сканера != IP проверяемого сайта, по определению) - это плохо (пусть и не так критично, разумеется), т.к. одна SSRF уязвимость на любом из серверов доступных публично и расположенных в этой приватной сети позволит полностью скомпроментировать ваш сайт. Тоже касается, к примеру, и информационных страниц apache, nginx, php-fpm (eg. , если они НЕ доступны публично а доступны только локалхосту (а, увы, даже это не всегда так) это еще не означает что вы в безопасности.
3. Даже в случае изолированного сервера имеет смысл не давать запись для остальных, не вижу смысла это объяснять, это и так очевидно. На счет "по соседству" и прав на чтение - согласен с вами, но пока эта проверка не реализована и оставлена на будущее вместе с рядом других локальных тестов.
Поймите, суть правильной конфигурации серверного ПО не только в закрытии явных проблем связанных с ИБ, но так же и в предотвращении потенциальных угроз, которые могут возникнуть в следствии каких либо обстоятельств.
Если хотите, можете создать обращение в ТП (либо мне в IM) и я с радостью разберу все имеющиеся у вас замечания и предложения
Хорошего дня!
А вот, кстати, интересно, почему "Битрикс" по дефолту предлагает BX_FILE_PERMISSIONS = 0644 и BX_DIR_PERMISSIONS = 0755, а не 0600 и 0700 соответственно? Ведь на виртуальном хостинге это действительно представляет существенную угрозу.
Извините за столь поздний ответ, заработался:)
Как правило на виртуальном хостинге разделение по файловым правам происходит на основании UID пользователя, а каждому клиенту создается новый пользователь на чью домашнюю директорию выставляются корректные права (eg. drwx------). Но, увы, случаи бывают разные и посему начиная с версии 12.5.0 модуля main дефолтные права на файлы как раз такие какие вы и озвучили
Если у вас есть еще какие либо вопросы - спрашивайте пожалуйста и спасибо за бдительность:)
Андрей, а не будет ли предусмотрено в системе какого-то штатного механизма или инструмента для конвертации текущих прав в рекомендуемые (те, которые станут дефолтными в 12.5)? Если нет, то, быть может, Вы подскажете наиболее удачный и эффективный вариант решения такой задачи?
Спасибо!
Я затрудняюсь вам утвердительно ответить на счет того будет ли конвертер когда либо, скорее всего нет. Дело в том, что файловые права это все таки файловые права и любые действия связанные с ними должны выполнятся осознанно, иначе существует риск закрыть их веб-серверу
P.S. Настоятельно рекомендую сначала создать любую тестовую папку (с тестовой страничкой внутри) и сначала попробовать на ней. Или же если у вас шаред-хостинг думаю можете обратится в их ТП, они это быстренько сделают.
Хорошего дня!
Во время сканирования произошли ошибки:
Внешнее сканирование: Извините, мы не смогли проверить ваш сайт по адресу: . Скорее всего у вашего сайта отсутствует публичный доступ.
Где и что смотреть? В чем может быть причина?
Внешнее сканирование: Извините, мы не смогли проверить ваш сайт по адресу: Скорее всего у вашего сайта отсутствует публичный доступ.
Зависит от того на чьей "стороне" проблема. В любом случае без адреса хоста ничего сказать нельзя:-( Вы можете обратиться в тех. поддержку, ребята смогут подсказать направление.
Адрес:
Запрос/Ответ:GET /?rnd=0.765310815931 HTTP/1.1
host: 192.168.3.79
accept: */*
user-agent: BitrixCloud BitrixSecurityScanner/Robin-Scooter
----------timed out----------
Подскажите, как решить данную проблему?