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

Практическое руководство по усилению защиты и обеспечению безопасности Apache Tomcat Server с использованием лучших практик.

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

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

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

Источник: Пламбр

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

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

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

Ниже приведены тесты на Tomcat 7.x, среда UNIX.

Аудитория

Это предназначено для администратора промежуточного программного обеспечения, поддержки приложений, системного аналитика или любого, кто работает или хочет изучить Tomcat Hardening and Security.

Хорошее знание команд Tomcat и UNIX обязательно.

Заметки

Нам нужен какой-то инструмент для проверки заголовков HTTP. Есть два способа сделать это.

При тестировании приложения с выходом в Интернет вы можете использовать следующие инструменты HTTP-заголовков для проверки реализации.

А для приложения для интранета вы можете использовать инструменты разработчика Google Chrome, Firefox.

Рекомендуется сделать резервную копию любого файла, который вы собираетесь изменить.

В этом руководстве мы будем называть папку установки Tomcat как $tomcat.

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

Удалить баннер сервера

Удаление баннера сервера из заголовка HTTP — одна из первых вещей, которую нужно сделать в качестве защиты.

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

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

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

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

Бывший: —

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

Запуск Tomcat с помощью диспетчера безопасности

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

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

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

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

[[email protected] 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.
[[email protected] bin]#

Включить SSL/TLS

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

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

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

Измените имя файла хранилища ключей и пароль на свои.

Если вам нужна помощь с процессом хранения ключей и CSR, обратитесь к этому руководству.

Использовать HTTPS

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

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

  • Перейдите в папку $tomcat/conf
  • Измените web.xml с помощью vi
  • Добавьте следующее перед синтаксисом
<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.

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

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

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

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

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

Запустите Tomcat из непривилегированной учетной записи

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

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

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

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

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

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

  • ROOT — страница приветствия по умолчанию
  • Документы — документация Tomcat
  • Примеры — JSP и сервлеты для демонстрации
  • Менеджер, хост-менеджер — администрация Tomcat

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

[[email protected] 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
[[email protected] webapps]#

Изменить порт SHUTDOWN и команду

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

Знаете ли вы, что вы можете выключить экземпляр tomcat, выполнив telnet для IP: порта и выполнив команду 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">

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

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

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

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

  • Перейдите в $tomcat/webapps/$application
  • Создайте файл error.jsp с помощью редактора vi.
<html>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Перейдите в папку $tomcat/conf
  • Добавьте следующее в файл web.xml. Убедитесь, что вы добавили перед синтаксисом
<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, чтобы проверить его.

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

Вы можете сделать это и для 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. Если вы хотите узнать больше об администрировании Tomcat, ознакомьтесь с этим онлайн курс.
Кроме того, узнайте, как настроить WAS, чтобы он не запрашивал пароль при завершении работы, здесь.