Посібник із захисту та захисту Apache Tomcat

Посилення безпеки сервера Apache Tomcat: Практичний посібник

Tomcat є одним з найбільш поширених серверів для Servlet та JSP-контейнерів, що використовується великою кількістю веб-сайтів з високим трафіком, включаючи такі відомі ресурси, як LinkedIn.com, Dailymail.co.uk, Comcast.net, Wallmart.com, Reuters.com, Meetup.com та Webs.com.

Аналізуючи ринкові позиції, Tomcat є значним гравцем серед серверів застосунків Java, про що свідчать дані Plumbr.

Хоча технічно можливо використовувати Tomcat як основний сервер для безпосереднього обслуговування запитів, у реальних виробничих середовищах часто застосовують проміжні веб-сервери, такі як Apache чи Nginx. Ці веб-сервери виступають як інтерфейс, перенаправляючи запити до Tomcat, що покращує продуктивність та безпеку. Зокрема, використання Apache HTTP як зовнішнього веб-сервера вимагає особливої уваги до його захисту.

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

Цей посібник базується на тестах, проведених у середовищі Tomcat 7.x під управлінням UNIX.

Цільова аудиторія

Цей матеріал орієнтований на адміністраторів програмного забезпечення проміжного рівня, спеціалістів з підтримки застосунків, системних аналітиків, а також усіх, хто зацікавлений у вивченні методів посилення та забезпечення безпеки Tomcat. Наявність знань про команди Tomcat та UNIX є обов’язковою.

Важливі зауваження

Для верифікації заголовків HTTP буде потрібен спеціальний інструмент. Це можна зробити двома способами: для веб-програм, доступних через Інтернет, можна скористатися онлайн-інструментами для аналізу HTTP-заголовків. Для внутрішніх програм можна використовувати інструменти розробника, вбудовані в браузери Google Chrome або Firefox.

Перед внесенням змін до будь-якого файлу конфігурації, рекомендується створити його резервну копію.

У цьому посібнику, каталог установки Tomcat буде позначений як $tomcat.

Розглянемо докладніше кроки щодо посилення та захисту Tomcat.

Видалення банера сервера

Одним з перших кроків у посиленні безпеки сервера є видалення банера сервера з HTTP-заголовка. Цей банер розкриває інформацію про використовуваний продукт та його версію, що може призвести до витоку важливої інформації.

Стандартно Tomcat відображає інформацію про сервер у заголовку HTTP.

Щоб приховати цю інформацію, виконайте наступні дії:

  • Перейдіть до каталогу $tomcat/conf.
  • Відкрийте файл server.xml для редагування.
  • У секції Connector додайте атрибут Server="".

Приклад:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server="" redirectPort="8443" />
  • Збережіть зміни та перезапустіть Tomcat. Після цього в заголовку сервера не буде відображатися жодна інформація про продукт.

Запуск Tomcat з менеджером безпеки

Менеджер безпеки захищає ваш сервер від виконання ненадійних аплетів у браузері. Запуск Tomcat з менеджером безпеки є більш безпечним варіантом.

Детальна інформація про використання менеджера безпеки доступна в офіційній документації Tomcat.

Для запуску Tomcat з менеджером безпеки, необхідно використовувати параметр -security при виконанні скрипта startup.sh.

[[email protected]ekflare 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. Для цього необхідно встановити SSL-сертифікат.

Після отримання сховища ключів (keystore) з сертифікатом, додайте наступний рядок до файлу server.xml у секцію Connector:

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

Змініть значення атрибутів keystoreFile та keystorePass на свої.

Примусове використання HTTPS

Після увімкнення SSL, необхідно налаштувати автоматичне перенаправлення всіх HTTP запитів на HTTPS. Це забезпечить безпечне з’єднання між користувачем і сервером Tomcat.

  • Перейдіть до каталогу $tomcat/conf.
  • Відкрийте файл web.xml для редагування.
  • Додайте наступний блок перед тегом </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.

Додавання прапорів Secure та HttpOnly до файлів cookie

Без належного захисту, сесії веб-додатків та файли cookie можуть бути вкрадені або скомпрометовані. Щоб цього уникнути, необхідно додати прапори Secure та HttpOnly до заголовків відповіді.

Для цього додайте наступні рядки у секцію session-config файлу 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 постачається з кількома веб-додатками, які можуть бути непотрібними у виробничому середовищі. Їх видалення допоможе зменшити потенційні ризики безпеки.

Мова йде про наступні програми:

  • ROOT – сторінка привітання за замовчуванням.
  • docs – документація Tomcat.
  • examples – приклади JSP та сервлетів.
  • manager, host-manager – додатки для адміністрування 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 для команди вимкнення SHUTDOWN. Зловмисник може вимкнути екземпляр Tomcat, надіславши команду SHUTDOWN на цей порт, використовуючи telnet.

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 #

Для посилення безпеки змініть порт та команду вимкнення на щось менш очевидне.

  • У файлі server.xml знайдіть та змініть наступний рядок:
<Server port="8005" shutdown="SHUTDOWN">

Замініть 8005 на порт, який не використовується, а SHUTDOWN на складну фразу.

Приклад:

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

Заміна стандартних сторінок 404, 403, 500

Стандартні сторінки помилок (404, 403, 500) можуть розкривати інформацію про версію сервера. Тому їх рекомендується замінити на власні.

Спочатку створіть загальну сторінку помилок, наприклад, error.jsp.

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

Для більш надійного захисту додайте обробку винятків java.lang.Exception, щоб уникнути розкриття версії Tomcat.

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

Сподіваємось, ці поради допоможуть вам покращити безпеку вашого сервера Tomcat. Якщо вас цікавлять додаткові матеріали з адміністрування Tomcat, зверніть увагу на онлайн-курс. Також варто ознайомитися з методами налаштування WAS, щоб уникнути запиту пароля під час завершення роботи.