Apache Tomcat Руководство по усилению безопасности

Tomcat является одним из самых популярных серверов сервлетов и JSP-контейнеров. Он используется некоторыми из следующих сайтов с высоким трафиком:

  • LinkedIn.com
  • Dailymail.co.uk
  • Comcast.net
  • Wallmart.com
  • Reuters.com
  • Meetup.com
  • Webs.com

На приведенной ниже диаграмме показана рыночная позиция Tomcat на сервере приложений Java.

Статистика Java Серверов

Технически вы можете использовать Tomcat в качестве интерфейсного сервера для непосредственного обслуживания запросов сайта. Однако в производственной среде вы можете использовать некоторые веб-серверы, такие как Apache, Nginx, в качестве интерфейса для маршрутизации запросов к Tomcat.

Использование веб-сервера для обработки запросов повышает производительность и безопасность . Если вы используете Apache HTTP в качестве интерфейсного веб-сервера, то вам также следует подумать о его защите.

Настройка Tomcat по умолчанию может раскрыть конфиденциальную информацию, которая помогает хакеру подготовиться к атаке на приложение.

1. Удалите Server Banner

Удаление Server Banner из заголовка HTTP - это одна из первых вещей, которую нужно сделать для усиления защиты.

Наличие Server Banner информации об используемом вами продукте и его версии приводит к уязвимости, связанной с утечкой информации.

По умолчанию страница, обслуживаемая Tomcat, будет отображаться следующим образом.

Заголовок сайта

Давайте скроем информацию о продукте и версии от заголовка сервера.

  • Перейдите в папку $ tomcat/conf
  • Измените server.xml с помощью vi
  • Добавить следующее к Connector port
Server =” “

Пример: -

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
Server =" "
redirectPort="8443" />
  • Сохраните файл и перезапустите Tomcat. Теперь, когда вы получаете доступ к приложению, вы должны увидеть пустое значение для заголовка сервера.
Заголовок сайта

2. Запустите Tomcat с Security Manager

Security Manager защищает вас от ненадежного апплета, работающего в вашем браузере.

Запускать Tomcat с Security Manager (менеджером безопасности) лучше, чем без него. Tomcat имеет отличную документацию по Tomcat Security Manager.

Хорошо, что вам не нужно менять какой-либо файл конфигурации. Это просто способ выполнения startup.sh файла.

Все, что вам нужно сделать, это запустить tomcat с –security аргументом.

[root@itgap bin]# ./startup.sh -security
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Using Security Manager
Tomcat started.
[root@itgap bin]#

3. Включите SSL/TLS

Обслуживание веб-запросов через HTTPS имеет важное значение для защиты данных между клиентом и Tomcat. Чтобы сделать ваше веб-приложение доступным через HTTPS, вам необходимо внедрить сертификат SSL.

Предполагая, что у вас уже есть готовое хранилище ключей с сертификатом, вы можете добавить следующую строку в server. XML-файл в разделе Connector port.

SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"

Измените имя файла и пароль Keystore на свое.

4. Примените HTTPS

Это применимо только тогда, когда вы включили SSL. Если нет, это сломает приложение.

После того, как вы включили SSL, было бы хорошо принудительно перенаправить все HTTP-запросы на HTTPS для безопасной связи между пользователем и сервером приложений Tomcat.

  • Перейдите в папку $ tomcat/conf
  • Измените web.xml с помощью vi
  • Добавить следующий перед </web-app> синтаксисом
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
  • Сохраните файл и перезапустите Tomcat.

5. Добавите флаг Secure & HttpOnly в Cookie

Можно украсть или манипулировать сеансом веб-приложения и файлами cookie без использования безопасного файла cookie. Это флаг, который вводится в заголовок ответа.

Это делается путем добавления ниже строки в session-config разделе файла web.xml

<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>

Скриншот конфигурации:

Скриншот конфигурацииweb.xml

Сохраните файл и перезапустите Tomcat, чтобы проверить заголовок ответа HTTP.

6. Запустите Tomcat из непривилегированного аккаунта

Хорошо использовать отдельного непривилегированного пользователя для Tomcat. Идея здесь состоит в том, чтобы защитить другие службы, работающие в случае взлома любой учетной записи.

  • Создайте пользователя UNIX, скажем, tomcat
useradd tomcat
  • Остановите Tomcat, если работает
  • Измените принадлежность $tomcat на пользователя tomcat
chown -R tomcat:tomcat tomcat/

Запустите Tomcat и убедитесь, что он работает с пользователем Tomcat

7. Удалите стандартные/нежелательные приложения

По умолчанию Tomcat поставляется со следующими веб-приложениями, не требуются в производственной среде.

Вы можете удалить их, чтобы избежать любой неизвестной угрозы безопасности с приложением по умолчанию Tomcat.

  • ROOT - страница приветствия по умолчанию
  • Docs - документация Tomcat
  • Examples - JSP и сервлеты для демонстрации
  • Manager, host-manager  - администрация Tomcat

Они доступны в папке $tomcat/webapps

[root@itgap webapps]# ls -lt
drwxr-xr-x 14 tomcat tomcat 4096 Sep 29 15:26 docs
drwxr-xr-x 7 tomcat tomcat 4096 Sep 29 15:26 examples
drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 host-manager
drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 manager
drwxr-xr-x 3 tomcat tomcat 4096 Sep 29 15:26 ROOT
[root@itgap webapps]#

8. Измените порт и команду выключения

По умолчанию tomcat настроен на отключение на порт 8005.

Знаете ли вы, что вы можете отключить экземпляр tomcat, выполнив команду telnet в IP: port и выполнив команду SHUTDOWN?

Chandans # telnet localhost 8005
Trying ::1... telnet:
connect to address ::1:
Connection refused Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SHUTDOWN Connection closed by foreign host.
Chandans #

Видите ли, наличие конфигурации по умолчанию приводит к высокому риску безопасности.

Рекомендуется изменить порт отключения tomcat и команду по умолчанию на что-то непредсказуемое.

  • Измените следующее в server.xml
<Server port="8005" shutdown="SHUTDOWN">

8005 - Измените на другой неиспользуемый порт

SHUTDOWN - измените на что-то сложное

Например:

<Server port="8867" shutdown="NOTGONNAGUESS">

9. Заменить по умолчанию 404, 403, 500 страницы

Наличие страницы по умолчанию для не найденных, запрещенных, серверных ошибок раскрывает детали версии.

Давайте посмотрим на страницу 404 по умолчанию.

Tomcat404 по умолчанию

Вы можете сначала создать страницу с общей ошибкой и настроить web.xml для перенаправления на страницу с общей ошибкой.

  • Перейдите в приложение $tomcat/webapps/$
  • Создайте файл error.jsp с помощью редактора vi
<html> 
<head> 
<title> Страница ошибки </ title> 
</ head> 
<body> Это ошибка! </ body> 
</ html>
  • Перейдите в папку $tomcat/conf
  • Добавьте следующее в файл web.xml. Убедитесь, что вы добавили перед <web-app/>
<error-page> 
<error-code>404</error-code> 
<location>/error.jsp</location>
</error-page>
<error-page> 
<error-code>403</error-code> 
<location>/error.jsp</location>
</error-page>
<error-page> 
<error-code>500</error-code> 
<location>/error.jsp</location>
</error-page>
  • Перезапустите сервер Tomcat, чтобы проверить его
Tomcat 404

Намного лучше!

Вы можете сделать это также в java.lang.Exception. Это поможет не раскрывать информацию о версии tomcat, если есть исключение java lang.

Просто добавьте следующее web.xml и перезапустите сервер Tomcat.

<error-page> 
<exception-type>java.lang.Exception</exception-type> 
<location>/error.jsp</location>
</error-page>

Надеюсь, что приведенное выше руководство даст вам представление о безопасности Tomcat.