Директория хранения файлов сессий доступна для всех системных пользователей
|
---|
Сообщение об этой угрозе можно увидеть, когда директория хранения файловых сессий PHP (session.save_path ( $ stat -c 'Perms: %A' /tmp Perms: drwxrwxrwt Если вы не используете хранение сессий в БД и пользуетесь shared-хостингом, то в большинстве случаев ваш "сосед" сможет получить полный доступ к вашему сайту, модифицировав сессионные данные. Это хороший повод задать ему вопрос и потребовать внести правки в конфигурацию, таким образом, дабы сессионные файлы каждого пользователя были отделены друг от друга, и на эти директории были установлены корректные файловые права. Пользователям выделенных серверов это менее критично, но все же рекомендовано.
Если настройка производится самостоятельно, то необходимо создать другую папку (можно даже внутри |
Трактовка результатов сканера безопасности
Трактовка результатов сканера безопасности
Сканер разделен на две части - локальную и внешнюю. Внешнее сканирование позволяет произвести проверку сайта "снаружи". Локальная - отвечает за проверки, которые невозможно/нецелесообразно выполнить “снаружи”, например, настройки сайта или исполнение php/python/perl/etc скриптов в директории хранения загружаемых файлов гораздо эффективнее проверять именно изнутри.
Локальное сканирование
Настройки окружения
Предположительно в директории хранения сессий находятся сессии других проектов
|
---|
Подобное сообщение можно встретить, если несколько сайтов используют одну директорию для хранения сессий. Очень часто это можно встретить при использовании выделенных серверов, когда есть N сайтов и все они хранят свои сессии где-нибудь в
Чем это опасно? При такой конфигурации сессии получаются "сквозные", т.е., допустим, есть сайт A и сайт B: |
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]); ?>Необходимо найти все текущие правила: $ find ./upload -type f -name '.htaccess' -print -exec cat {} \; ./upload/support/not_image/.htaccess Deny from all ./upload/.htaccess <IfModule mod_mime.c> RemoveHandler php .php3 .php4 .php5 .php6 .phtml .pl .asp .aspx .cgi .dll .exe .ico .shtm .shtml .fcg .fcgi .fpl .asmx .pht .py .psp AddType text/plain php .php3 .php4 .php5 .php6 .phtml .pl .asp .aspx .cgi .dll .exe .ico .shtm .shtml .fcg .fcgi .fpl .asmx .pht .py .psp </IfModule> <IfModule mod_php5.c> php_flag engine off </IfModule>Перенести их в конфигурацию виртуального хоста вашего сайта и добавить AllowOverride None для директории загружаемых файлов, например, так:
<Directory /home/bitrix/www/upload/support/not_image> AllowOverride none Order allow,deny Deny from all </Directory> <Directory /home/bitrix/www/upload> AllowOverride none AddType text/plain php .php3 .php4 .php5 .php6 .phtml .pl .asp .aspx .cgi .dll .exe .ico .shtm .shtml .fcg .fcgi .fpl .asmx .pht .py .psp php_value engine off </Directory> |
Apache Content Negotiation разрешен в директории хранения загружаемых файлов
|
---|
Суть проблемы заключается в том, что в конфигурации Apache по умолчанию можно встретить такую строку: AddHandler type-map .varЭто означает, что если в директории загружаемых файлов у вас будет лежать файл с именем test.var.gif и содержимым: GIF89: any Content-language: ru Content-type: text/html; Body:----------ru-- <img src=x onerror=prompt(/XSS/)> ----------ru--(вполне валидная картинка, по мнению PHP), то при запросе этого файла нам будет отдано тело с типом text/html, что логично, т.к. обработчики в Apache вызываются до определения типа: $ http -v http://bus-win.my/upload/test.var.gif GET /upload/test.var.gif HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate, compress Host: bus-win.my User-Agent: HTTPie/0.7.2 HTTP/1.1 200 OK Accept-Ranges: bytes Content-Language: ru Content-Length: 34 Content-Type: text/html Date: Sun, 27 Oct 2013 09:57:40 GMT Server: Apache/2.4.3 (Unix) OpenSSL/1.0.1c PHP/5.4.7 <img src=x onerror=prompt(/XSS/)>А не как мы ожидали image/gif, что, разумеется, приводит к возможности XSS нападения. Эта возможность придает гибкости Apache для обработки мультиязычной статики, но безопасности вашего сайта только вредит. |
Настройки PHP
Разрешено чтение файлов по URL (URL wrappers)
|
---|
Чтобы оградить разработчика от "сюрпризов" и повысить безопасность сайта - allow_url_fopen должен быть Off. |
Cookies доступны из JavaScript
|
---|
Имеется в виду, что при установке cookie ваш сайт не передает дополнительный флаг session.cookie_httponly = On Ссылки по теме:
|
Не установлен дополнительный источник энтропии при создании идентификатора сессии
|
---|
Отсутствие дополнительной энтропии может использоваться для предугадывания случайных чисел. Необходимо в настройках php указать: session.entropy_file = /dev/urandom session.entropy_length = 128" |
Включено использование тегов в стиле ASP
|
---|
Многие разработчики не догадываются о существовании подобной опции, а как следствие могут не учесть её в различных проверках. Необходимо в настройках php указать:asp_tags = Off |
Cookies - не единственное хранилище идентификатора сессии
|
---|
Хранение идентификатора сессии не только в Cookies может служить источником атак разного типа. Необходимо в настройках php указать:
session.use_only_cookies = On |
Включен вывод ошибок
|
---|
Вывод ошибок предназначен для разработки и тестовых стендов, он не должен использоваться на конечном ресурсе. Необходимо в настройках php указать:display_errors = Off |
Настройки сайта
Ограничен список потенциально опасных расширений исполняемых файлов
|
---|
Так как администратор сайта вправе изменять этот список по своему усмотрению, он может устаревать со временем (когда мы решаем добавить какое-либо расширение в список опасных, к примеру, как было с |
Проактивный фильтр выключен
|
---|
Выключенный проактивный фильтр не сможет отразить попытки нападения на ресурс. |
Защита редиректов выключена
|
---|
Редирект на произвольный сторонний ресурс может служить подспорьем для множества атак, защита редиректов исключает эту возможность (при использовании стандартного API). |
Уровень безопасности административной группы не является повышенным
|
---|
Пониженный уровень безопасности административной группы может значительно помочь злоумышленнику. |
Включена отладка SQL запросов (
\$DBDebug в значении true ) |
---|
Отладка SQL запросов может раскрыть важную информацию о ресурсе. Рекомендуется установить значение переменной |
Ошибки, связанные с паролями. Рекомендуется усложнить пароли согласно указаниям сканера.
|
---|
|
Пользователи
Эти проверки появились только с версии модуля 14.0.3. Основная их цель - проверить, все ли привилегированные пользователи используют MFA, у всех ли установлен пароль достаточной сложности и так далее.
У некоторых пользователей административной группы установлен слабый пароль
|
---|
Сканер безопасности берет список пользователей из административной группы и пытается подобрать пароль к ним методом перебора по словарю. В случае успеха будет выведен список пользователей, которым необходимо установить более сложный пароль. Зачастую слабый пароль у пользователей административной группы оказывается вследствие того, что изначально они не были администраторами, т.е. административный доступ предоставляется ранее зарегистрированному пользователю, чьи политики безопасности не требовали стойкого пароля. |
Выключена двухэтапная авторизация
|
---|
Двухэтапная авторизация призвана значительно повысить безопасность сайта от фишинг-атак. Её использование крайне рекомендовано для привилегированных пользователей. |
Не все администраторы сайта используют OTP
|
---|
То же самое, что и в предыдущем пункте. Необходимо оповестить администраторов сайта о необходимости использования OTP. |
Внешнее сканирование
Доступен листинг директорий
|
---|
Включенный Directory AutoIndex встречается повсеместно и сулит как минимум неконтролируемым доступом к загруженным пользовательским файлам. Для nginx необходимо убрать директиву location / { autoindex on; ...}Для Apache это Options +Indexes в конфигурационном файле:
<Directory /home/bitrix/www> Options +Indexes </Directory> |
Открыт доступ к важным сервисам
|
---|
Всегда помните - все сервисы, необходимые только сайту, не должны быть видны "наружу". Случаи неконтролируемого доступа к критически важным сервисам (например, memcached) - совсем не редкость. Это важный момент, т.к. доступ к memcached, где ваш сайт хранит свой кеш - это, по сути, полный контроль над ним. Если вы пользуетесь shared-хостингом - это отличный повод для "беседы" с ним. Если у вас не кластерная архитектура проекта, то правильнее всего использовать unix-сокет, когда у вас memcached используется для кластера - корректные настройки firewall + SASL. |
Инъекция PHP-CGI параметров из строки запроса
|
---|
Есть уязвимость в PHP: CVE-2012-1823. Она позволяет как читать файлы вашего сайта ( |
Неправильно сконфигурирована связка Nginx + php-fpm
|
---|
К сожалению, в интернете все еще достаточно много ужасных "How To" по настройке связки nginx + php-fpm, в которых ни слова не сказано о том, что php-fpm с конфигурацией по умолчанию и location ~* \.php$ { fastcgi_pass backend; ...}позволит злоумышленнику интерпретировать любой файл как php-скрипт.
К примеру, обратившись к аватару пользователя таким образом: Наиболее распространенными вариантами решения является либо указание в php.ini (если это удовлетворяет требованиям вашего проекта): cgi.fix_pathinfo=0либо корректно сконфигурировать nginx, учитывая особенности вашего проекта. |
Открыт доступ к служебным "статус" страницам
|
---|
Так называемые статус-страницы позволяют злоумышленникам получить дополнительную информацию о вашем сайте, которая им столь нужна. Не стоит их радовать. Рекомендуем ограничить доступ к ним, а ещё лучше – отключить/закрыть авторизацию, т.к. доверять localhost также не стоит. Наиболее распространенные:
|
Найдены временные файлы
|
---|
При редактировании файлов на сервере по SSH или при использовании DCVS могут создаваться временные копии текущих файлов, в которых может содержаться важная информация (например, все еще актуальные данные о подключении к БД). Внешнее сканирование отобразит вам список всех таких файлов, которые необходимо удалить и понять причину их появления. Так же, возможно, стоит ограничить доступ к таким файлам на уровне веб-сервера. |
Найдены опасные файлы
|
---|
Так же достаточно часто встречаются сайты, на которых остались какие-то файлы после отладки, установки и т.д. Внешнее сканирование сообщит вам список найденных файлов, которые в обязательном порядке необходимо удалить. |
Доступны настройки PhpMyAdmin
|
---|
Еще одна частая проблема - доступны настройки PhpMyAdmin (директория |
Публичный доступ к файлам контроля версий
|
---|
Как ни странно - публичный доступ к служебным каталогам DCVS все еще достаточно актуальное явление. Зачастую это крайне опасно для вашего сайта - необходимо в срочном порядке закрыть доступ к таким каталогам (.git, .hg, .bzr и т.д.) и к файлам игнорирования (.gitignore, .hgignore и т.д.). В идеале необходимо пользоваться экспортом в вашей DCVS. Разумеется, внешнее сканирование сообщит, "куда нужно смотреть". |
Разрешено отображение сайта во фрейме с произвольного домена
|
---|
Эта ошибка по своей сути ничто иное как, проверка включена ли у вас защита от фреймов. Суть защиты заключается в запрете отображения целевого сайта во фрейме со стороннего сайта или запрете работы во фреймах вовсе. Это рекомендованная настройка нужна для предотвращения целого класса client-side атак (например, таких как Clickjacking, Framesniffing и т.п.). |
Проверяемый сайт отвечает на хост по умолчанию
|
---|
Это, пожалуй, одна из самых распространенных ошибок конфигурации для выделенных серверов. Суть проблемы заключается в том, что сайт отвечает на любой Host в заголовке запроса, вследствие чего, например, если Проверить очень легко, запрашиваем наш сайт с правильным хостом: $ 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 замените на ваш домен):
server { listen 80 default_server; access_log /var/log/nginx/default.host.access.log main; return 301 $scheme://domain.com$request_uri; }Перед этим не забудьте убедиться, что больше нет явно указанных серверов по умолчанию (с директивой default_server ).
Подробнее можно посмотреть в документации nginx. |
Найден phpinfo()
|
---|
С завидным постоянством на сайтах можно увидеть файлы x.php, pi.php, phpinfo.php и т.д. с выводом
Внешнее сканирование укажет список таких файлов, которые необходимо удалить и впредь использовать встроенную в страницу административного интерфейса ссылку (Настройки > Производительность > PHP, ссылка Настройки PHP) с выводом |
Включен Automatic MIME Type Detection для Internet Explorer
|
---|
По умолчанию в Internet Explorer включен mime-сниффинг (MIME Type Detection in Windows Internet Explorer), что никак не идет на пользу безопасности пользователей вашего сайта. В двух словах, если в заголовке ответа Самый простой пример эксплуатации этого - загрузка файла без расширения. Допустим, у нас есть скрипт позволяющий загружать только картинки, но сохраняющий их без расширения...
|
Документация по теме
и Ваше мнение важно для нас