Всем хорошо известно, что безопасность любого проекта равна безопасности самого слабого звена. И об одном из них, увы, зачастую наименее безопасном, я бы и хотел поговорить. Не редко можно наблюдать ситуацию, когда непосредственно само веб-приложение достаточно безопасно, но окружение, в котором он работает, не выдерживает ни какой критики. Это и понятно, т. к. в борьбе за безопасность веб-приложения существует достаточное число помощников:
Собственный профессионализм разработчика (мы ведь все с вами молодцы);
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
Думаю никто не станет спорить с критичностью найденных проблем и с необходимостью их исправления. В этот раз я не буду детально останавливаться конкретно на тестах, желая осветить лишь общую концепцию его работы. Так же, хотел упомянуть тот факт, что нами рекомендовано проходить сканирование хотя бы раз в месяц о чем вам напомнит административный информер. Это обусловлено и планами по развитию сервиса и ситуацией, когда хостинг провайдеры прозрачно для клиента меняют какую либо часть конфигурации сервера, которая в последствии может стоит вашему проекту репутации и честного имени. Если у вас есть какие вопросы либо предложения — спрашивайте, пожалуйста, либо пишите в нашу отважную ТП. Всем безопасных проектов, продолжение следует!
Не переживайте, вопрос автоматизации поднимался и скорее всего будет реализован. Просто пока не пришли к единому мнению в каком именно виде она должна быть, поэтому и не включили в этот этап. Плюс сейчас наиболее важно собрать фидбек, понять правильный ли дальнейший вектор развития нами выбран и двигаться дальше. Мы же с Вами разработчики и прекрасно понимаем, что для начала наиболее важно отладить всю процедуру, дополнить её нужными шестернями, а автоматизация - дело наживное и "прилетит" вместе с обновлениями
Андрей, вы меня переоцениваете ))) Ну какой же я разработчик...
По моему опыту вопросы безопасности пользователи и даже разработчики оценить в большинстве своём не могут. Безопасность можно только навязать сверху. А пользователи и разработчики о ней вспоминают только когда "жареный петух клюнет".
Просто уже сейчас модуль проактивной защиты даёт колоссальные возможности (один модуль контроля целостности чего стоит). Но на него нужно сажать человека, который бы не только первичную настройку сделал, но и периодически мониторил происходящее. У меня есть пока 1 клиент, который на это согласился, да и то лишь потому, что у них недавно произошло вирусное заражение и сайт был заблокирован в единый день и браузерами и поисковиками и антивирусами... =) Вот эти да, пока готовы платить 10К в месяц за ежедневный аудит. А остальным даже первичная настройка "не нужна".
И аргументы железобетонные, которые им дал сам битрикс (вырыв партнёрам яму): "Ну он же безопасный, вы ж сами говорили". Безопасный. Но живёт в агрессивной среде, где помимо него ест ьи хостер и дебилы-сотрудники, складывающие все доступы в текстовый файлик на рабочем столе "passwods.txt"
Говнохакеры не так опасны как хакеры опытные. А последние и так очень коварны. Я в том году лечил сайт, где эксплуатация была только для пользователей (НЕ ДЛЯ СОТРУДНИКОВ И АДМИНОВ, причём определялось по ряду факторов включая ИП и логин) да ещё на событии. Т.е. в коде было обнаружить очень непросто. А все старые дырочки были прикрыты (всяких шеллов нерабочих обнаружилась масса).
А такие люди и так в курсе где что может выстрелить...
Алексей, ламеры гораздо опаснее. Ибо (в данном случае) опытные хакеры давно сами проверили _где надо_ дыры. Сейчас же ламеры начнут проверять _все_ ресурсы. Есть разница?
Году в 2004-м, когда я хотел стать хакером (которыми хотели стать все), я нашел описание какой-то уязвимости - мол иди туда, вбивай то, получишь это. Что получилось? Я залил картинку "хакед бай ...." на сайт какой-то американской средней школы. Делаем выводы.
Антон, описанное тобой справедливо, однако как всегда есть НО И оно заключается в том, что с хакерами-ламерами понятно как бороться - бекапы, аудирующие сайт админы (с минимальными познаниями если не в безопасности, то в мониторе битриксовом), общий уровень грамотности. Это наоборот даже хорошо на мой взгляд. Появляется угроза мелочной пакости, которая повышает общий уровень защищённости (и заинтересованности заказчиков в защищённости). А вот с профи всё суровее. Профи часто ищут уязвимость, потом ломают, а потом эксплуатируют и между этими этапами могут проходить недели и месяцы! При этом бекапы могут устареть и уже содержать в себе бекдоры к моменту обнаружения. А самый кайф, что в этом случае профи делает не 1 закладку, а несколько и проверяет их работоспособность. И если вдруг ему начинают противодействовать начинается войнушка.
Согласись, есть разница между двумя сценариями: - Дефейснуть сайт школы (или любую другую визитку) и повесить "хакед бай ...." - Заложить десяток бекдоров и год без ведома администраторов и программистов уводить 50% клиентского траффика с сайта (например на сайт конкурента или просто на дорвеи / контекстную рекламу), да ещё подбираться к тому чтобы протроянить (с помощью XSS, или фишинга на основе соц инженерии) сотрудников компании, в том числе руководство с целью получения доступа к клиент-банковским системам.
Я конечно сейчас ради красного словца всё в одну кучу намешал и на самом деле обычно всё не так трагично, но сценарий вероятен. Я наблюдал пару раз не столь суровые, но схожие случаи.
На счет бэкдоров в бэкапах - это увы и правда случается, не редко лицезрел собственными глазами когда бэкап почти годовалой давности уже содержит чьи-то "закладки". Тут на помощь может прийти только регулярный контроль целостности, как сделать его лучше полезнее и быстрее мысли есть, но оглашать их пока рано.
Вот видите, мы мыслим в одном направлении! Осталось дать возможность повесить проверку монитора контроля целостности (и создание новых точек) на крон. А точки хранить не у себя на хостинге, а в облаке без возможности удаления.
А ещё очень хочется чтобы была возможность подвергать сканеру кеш, папку с бекапами и некоторые другие области, которые он пока пропускает. Но как это сделать корректно пока не придумал. Просто теоретически злоумышленник, имея доступ к сайту может свой вредоносный код инклудить не в исходные файлы, а в файлы кеша. И делать это периодически.
В общем, не мне вас учить, это я просто в приступе весенней паранойи буяню...
Антон, позволь покапитанствовать. На большинстве установок Битры не стоит блокировка или вывод капчи после N неудачных попыток авторизации в админку, админка доступна с любого IP, и есть логин из серии "admin" (да ещё это как правило юзер с ID=1). На мой взгляд при таком подходе никаких уязвимостей не нужно ))))
Антон, не понял, где они и что наберут и куда пойдут. Пойти они могли и раньше существующими внешними сканерами. Наш сканер доступен только владельцу сайта, проверить чужой сайт им нельзя.
Вадим, базу они наберут. Вот к примеру этот сканер сообщил, что если залить такой-то файл, можно скомпрометировать систему. И пошел дурака валять на других сайтах.
Другими словами, вы подсказываете им как ломать сайты.
Антон, мне кажется Вадим прав. Имхо, скрипт-кидди проще просматривать свеженькие CVE (с пометкой наличия сплоита) + читать русскоязычные форумы, где плюс ко всему и на вопросы ответят почему не получается + GHDB. Учитывая все эти простые варианты, думаю что собирать нашу базу им просто будет незачем
Думаю никто не станет спорить с критичностью найденных проблем и с необходимостью их исправления
Будет. 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. http://localhost/status-phpfpm), если они НЕ доступны публично а доступны только локалхосту (а, увы, даже это не всегда так) это еще не означает что вы в безопасности.
3. Даже в случае изолированного сервера имеет смысл не давать запись для остальных, не вижу смысла это объяснять, это и так очевидно. На счет "по соседству" и прав на чтение - согласен с вами, но пока эта проверка не реализована и оставлена на будущее вместе с рядом других локальных тестов.
Поймите, суть правильной конфигурации серверного ПО не только в закрытии явных проблем связанных с ИБ, но так же и в предотвращении потенциальных угроз, которые могут возникнуть в следствии каких либо обстоятельств.
Если хотите, можете создать обращение в ТП (либо мне в IM) и я с радостью разберу все имеющиеся у вас замечания и предложения
А вот, кстати, интересно, почему "Битрикс" по дефолту предлагает BX_FILE_PERMISSIONS = 0644 и BX_DIR_PERMISSIONS = 0755, а не 0600 и 0700 соответственно? Ведь на виртуальном хостинге это действительно представляет существенную угрозу.
Добрый вечер! Извините за столь поздний ответ, заработался:) Как правило на виртуальном хостинге разделение по файловым правам происходит на основании UID пользователя, а каждому клиенту создается новый пользователь на чью домашнюю директорию выставляются корректные права (eg. drwx------). Но, увы, случаи бывают разные и посему начиная с версии 12.5.0 модуля main дефолтные права на файлы как раз такие какие вы и озвучили Если у вас есть еще какие либо вопросы - спрашивайте пожалуйста и спасибо за бдительность:)
Андрей, а не будет ли предусмотрено в системе какого-то штатного механизма или инструмента для конвертации текущих прав в рекомендуемые (те, которые станут дефолтными в 12.5)? Если нет, то, быть может, Вы подскажете наиболее удачный и эффективный вариант решения такой задачи?
Добрый день! Я затрудняюсь вам утвердительно ответить на счет того будет ли конвертер когда либо, скорее всего нет. Дело в том, что файловые права это все таки файловые права и любые действия связанные с ними должны выполнятся осознанно, иначе существует риск закрыть их веб-серверу Для быстрого и эффективного решения этой задачи я бы воспользовался консолью, подключаемся по ssh и пишем:
cd _your_www_dir_
chmod -R o-wrx,g-rwx ./
P.S. Настоятельно рекомендую сначала создать любую тестовую папку (с тестовой страничкой внутри) и сначала попробовать на ней. Или же если у вас шаред-хостинг думаю можете обратится в их ТП, они это быстренько сделают.
Недавно установил SSL сертификат (RU-CENTER Gold SSL). При попытке сканирования безопасности система сообщает:
Во время сканирования произошли ошибки: Внешнее сканирование: Извините, мы не смогли проверить ваш сайт по адресу: https://www.im14.ru. Скорее всего у вашего сайта отсутствует публичный доступ.
Во время сканирования произошли ошибки: Внешнее сканирование: Извините, мы не смогли проверить ваш сайт по адресу: Скорее всего у вашего сайта отсутствует публичный доступ.
День добрый! Зависит от того на чьей "стороне" проблема. В любом случае без адреса хоста ничего сказать нельзя:-( Вы можете обратиться в тех. поддержку, ребята смогут подсказать направление.
=(
Ну какой же я разработчик...
По моему опыту вопросы безопасности пользователи и даже разработчики оценить в большинстве своём не могут. Безопасность можно только навязать сверху. А пользователи и разработчики о ней вспоминают только когда "жареный петух клюнет".
Просто уже сейчас модуль проактивной защиты даёт колоссальные возможности (один модуль контроля целостности чего стоит). Но на него нужно сажать человека, который бы не только первичную настройку сделал, но и периодически мониторил происходящее.
У меня есть пока 1 клиент, который на это согласился, да и то лишь потому, что у них недавно произошло вирусное заражение и сайт был заблокирован в единый день и браузерами и поисковиками и антивирусами...
=)
Вот эти да, пока готовы платить 10К в месяц за ежедневный аудит.
А остальным даже первичная настройка "не нужна".
И аргументы железобетонные, которые им дал сам битрикс (вырыв партнёрам яму): "Ну он же безопасный, вы ж сами говорили".
Безопасный. Но живёт в агрессивной среде, где помимо него ест ьи хостер и дебилы-сотрудники, складывающие все доступы в текстовый файлик на рабочем столе "passwods.txt"
А последние и так очень коварны. Я в том году лечил сайт, где эксплуатация была только для пользователей (НЕ ДЛЯ СОТРУДНИКОВ И АДМИНОВ, причём определялось по ряду факторов включая ИП и логин) да ещё на событии. Т.е. в коде было обнаружить очень непросто.
А все старые дырочки были прикрыты (всяких шеллов нерабочих обнаружилась масса).
А такие люди и так в курсе где что может выстрелить...
Году в 2004-м, когда я хотел стать хакером (которыми хотели стать все), я нашел описание какой-то уязвимости - мол иди туда, вбивай то, получишь это. Что получилось? Я залил картинку "хакед бай ...." на сайт какой-то американской средней школы. Делаем выводы.
И оно заключается в том, что с хакерами-ламерами понятно как бороться - бекапы, аудирующие сайт админы (с минимальными познаниями если не в безопасности, то в мониторе битриксовом), общий уровень грамотности. Это наоборот даже хорошо на мой взгляд. Появляется угроза мелочной пакости, которая повышает общий уровень защищённости (и заинтересованности заказчиков в защищённости).
А вот с профи всё суровее.
Профи часто ищут уязвимость, потом ломают, а потом эксплуатируют и между этими этапами могут проходить недели и месяцы! При этом бекапы могут устареть и уже содержать в себе бекдоры к моменту обнаружения. А самый кайф, что в этом случае профи делает не 1 закладку, а несколько и проверяет их работоспособность. И если вдруг ему начинают противодействовать начинается войнушка.
Согласись, есть разница между двумя сценариями:
- Дефейснуть сайт школы (или любую другую визитку) и повесить "хакед бай ...."
- Заложить десяток бекдоров и год без ведома администраторов и программистов уводить 50% клиентского траффика с сайта (например на сайт конкурента или просто на дорвеи / контекстную рекламу), да ещё подбираться к тому чтобы протроянить (с помощью XSS, или фишинга на основе соц инженерии) сотрудников компании, в том числе руководство с целью получения доступа к клиент-банковским системам.
Я конечно сейчас ради красного словца всё в одну кучу намешал и на самом деле обычно всё не так трагично, но сценарий вероятен. Я наблюдал пару раз не столь суровые, но схожие случаи.
Осталось дать возможность повесить проверку монитора контроля целостности (и создание новых точек) на крон. А точки хранить не у себя на хостинге, а в облаке без возможности удаления.
А ещё очень хочется чтобы была возможность подвергать сканеру кеш, папку с бекапами и некоторые другие области, которые он пока пропускает. Но как это сделать корректно пока не придумал.
Просто теоретически злоумышленник, имея доступ к сайту может свой вредоносный код инклудить не в исходные файлы, а в файлы кеша. И делать это периодически.
В общем, не мне вас учить, это я просто в приступе весенней паранойи буяню...
На большинстве установок Битры не стоит блокировка или вывод капчи после N неудачных попыток авторизации в админку, админка доступна с любого IP, и есть логин из серии "admin" (да ещё это как правило юзер с ID=1).
На мой взгляд при таком подходе никаких уязвимостей не нужно ))))
Другими словами, вы подсказываете им как ломать сайты.
1. Если выше стоит фильтрация (например, принудительным приведением типа), то никакой инъекции тут нет.
2. Какая тут публичная доступность, когда IP из частной сети ?
3. Зависит от того, где размещён сайт. Если на изолированном сервере, то никаких проблем опять же нет. Если же "по соседству" ещё сайты крутятся, то надо проверять не только права на запись, но и на чтение - dbconn.php же
1. Если стоит выше по коду текущего скрипта, статический анализ это должен понимать. Т.е. к примеру:
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)? Если нет, то, быть может, Вы подскажете наиболее удачный и эффективный вариант решения такой задачи?
Спасибо!
Я затрудняюсь вам утвердительно ответить на счет того будет ли конвертер когда либо, скорее всего нет. Дело в том, что файловые права это все таки файловые права и любые действия связанные с ними должны выполнятся осознанно, иначе существует риск закрыть их веб-серверу Для быстрого и эффективного решения этой задачи я бы воспользовался консолью, подключаемся по ssh и пишем:
P.S. Настоятельно рекомендую сначала создать любую тестовую папку (с тестовой страничкой внутри) и сначала попробовать на ней. Или же если у вас шаред-хостинг думаю можете обратится в их ТП, они это быстренько сделают.
Хорошего дня!
Во время сканирования произошли ошибки:
Внешнее сканирование: Извините, мы не смогли проверить ваш сайт по адресу:
Где и что смотреть? В чем может быть причина?
Внешнее сканирование: Извините, мы не смогли проверить ваш сайт по адресу: Скорее всего у вашего сайта отсутствует публичный доступ.
Зависит от того на чьей "стороне" проблема. В любом случае без адреса хоста ничего сказать нельзя:-( Вы можете обратиться в тех. поддержку, ребята смогут подсказать направление.
Адрес:
Запрос/Ответ:GET /?rnd=0.765310815931 HTTP/1.1
host: 192.168.3.79
accept: */*
user-agent: BitrixCloud BitrixSecurityScanner/Robin-Scooter
----------timed out----------
Подскажите, как решить данную проблему?