Гайд по hardened web server. Часть 2.
В конфигурации Apache по умолчанию у вас будет много потенциальных путей раскрытия информации, которые могут быть использованы для подготовки к атаке. Это одна из наиболее важных задач, которые администратор обязан понять и защитить. Одна из первых вещей, которую нужно учитывать, это, что вы не хотите раскрывать, какую версию веб-сервера вы используете. Выдача версии означает, что вы помогаете хакеру ускорить процесс разведки. Конфигурация по умолчанию будет раскрывать версию Apache и тип ОС.
- Утечка информации.
Идем в $Web_Server/conf
Редактируем httpd.conf
Добавляем строки в httpd.conf
ServerTokens Prod
ServerSignature Off
Рестарт Apache.
- Отключить список каталогов
Обязательно отключить список каталогов в браузере, чтобы посетитель не видел, какие файлы и папки у вас есть в корне или подкаталах.
Перейдите в каталог $ Web_Server / htdocs
Создайте папку и несколько файлов внутри
mkdir test
touch hi
touch hello
Теперь будут видны лишь эти папки, и их содержимое, накидайте в них мусора, пусть изучают)) Продолжим развивать тему
$Web_Server/conf
Редактируем httpd.conf
Ищем строку Directory и меняем Options на None или –Indexes
<Directory /opt/apache/htdocs>
Options None Order allow,deny Allow from all </Directory>
(или)
<Directory /opt/apache/htdocs>
Options -Indexes Order allow,deny Allow from all
</Directory>
Рестарт Apache
- Запуск Apache из непривилегированной учетной записи
Конфигурация Apache по умолчанию должна выполняться как «никто» или демон. Правильно использовать отдельный непривилегированный аккаунт для Apache. Идея здесь состоит в том, чтобы защитить другие службы, если удастся их запуск в случае любой дыры в безопасности.
Создайте пользователя и группу под названием apache
#groupadd apache
# useradd -G apache apache
Изменим владельца каталога установки apache для вновь созданного пользователя без привилегий
# chown -R apache: apache / opt / apache
Перейти к $ Web_Server / conf
Измените httpd.config
Поиск Директивы User & Group и изменение на непривилегированную учетную запись apache
User apache
Group apache
Сохраните httpd.conf
Перезапустите Apache
- Защитим права на бинарники и конфигурации.
По умолчанию разрешение для испоняемых файлов кода и конфигурации 755 означает, что любой пользователь на сервере может просматривать конфигурацию. Вы можете запретить другому пользователю войти в папку conf и bin.
Перейдите в каталог $ Web_Server
Изменить разрешение папки bin и conf
# chmod -R 750 bin conf
- Защита системных настроек
При установке по умолчанию пользователи могут переопределить конфигурацию Apache с помощью .htaccess. если вы хотите, чтобы пользователи не меняли настройки сервера Apache, вы можете добавить AllowOverride в None, как показано ниже. Это должно быть сделано на уровне root.
Реализация:
Перейдите в каталог $ Web_Server / conf
Откройте httpd.conf
Options -Indexes
AllowOverride None
</Directory>
Сохраните httpd.conf
Перезапустить Apache
- Trace HTTP
#telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
TRACE / HTTP/1.1 Host: test
HTTP/1.1 200 OK
Server: Apache
Transfer-Encoding: chunked
Content-Type: message/http 20
TRACE / HTTP/1.1
Host: test 0
Connection closed by foreign host.
#
Как видим, о нас рассказали все, название хоста, на чем сервер… Обидно
Как всегда в $Web_Server/conf
TraceEnable off
#telnet localhost 80
#telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
TRACE / HTTP/1.1 Host: test
HTTP/1.1 405 Method Not Allowed
Server: Apache Allow:
Content-Length: 223
Content-Type: text/html; charset=iso-8859-1
The requested method TRACE is not allowed for the URL
Connection closed by foreign host.
#
Вроде ничего не изменилось, кроме - HTTP/1.1 405 Method Not Allowed
Все, теперь сервер молчит не хуже партизана, мы ему запретили распространяться о себе.
- SSL Key
Нарушение SSL-ключа сложно, но не невозможно. Это просто вопрос вычислительной мощности и времени. Как примерно 73 дней на брут 512-битного ключа. Таким образом, чем выше длина ключа, тем сложнее становится разрыв SSL. Большинство веб-компаний используют ключ 2048 бит, А чем хуже мы?
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt
openssl req -out localhost.csr -new -newkey rsa:2048 -nodes -keyout localhost.key
Засовываем Personal Cert, Signer Cert and Key file в httpd-ssl.conf
SSLCertificateFile # Personal Certificate
SSLCertificateKeyFile # Key File
SSLCACertificateFile # Signer Cert file
Теперь, в общих чертах сервер молчит, не рапространяется и все шифрует.
Следущая часть будет, устранение вероятности "тонкого взолама" издалека, но и этого конфига хватит чтобы отвадить неопытного хакера. Но мы сделаем сервер неломаемым!