2 нояб. 2011 г.

Защита jmx-консоли и web-консоли JBoss 4.X-5.X от JBoss worm

В интернетах распространяется JBoss worm - червь, атакующий сервера JBoss с настройками jmx-консоли и web-консоли по умолчанию. Суть в том, что через консоль можно получить доступ к серверу (выполнить произвольный код в контексте пользователя JBoss), а в настройках по умолчанию защита или выключена вообще (JBoss 4.X) или ограничена типами HTTP-запросов GET и POST, что червь легко обходит.

Что надо сделать, чтобы защитить консоли JBoss (в примере - с использованием файла с логином/паролем):

  1. Не забыть сделать резервную копию всех изменяемых файлов
  2. Определить используемую конфигурацию JBoss (all, default, и т.д.) - далее по тексту она обозначена как PROFILE
  3. Найти файл web.xml от JMX Console (server/PROFILE/deploy/jmx-console.war/WEB-INF/web.xml)
  4. Раскомментировать в нём секцию <security-constraint>...</security-constraint>
  5. Если в раскомментированной секции есть строки
    <http-method>GET</http-method>
    <http-method>POST</http-method>
    - удалить их (constraint станет действовать на все типы запросов). Раскомментированная секция должна выглядеть так:
       <security-constraint>
         <web-resource-collection>
           <web-resource-name>HtmlAdaptor</web-resource-name>
           <description>An example security config that only allows users with the
             role JBossAdmin to access the HTML JMX console web application
           </description>
           <url-pattern>/*</url-pattern>
         </web-resource-collection>
         <auth-constraint>
           <role-name>JBossAdmin</role-name>
         </auth-constraint>
       </security-constraint>
  6. Найти рядом с web.xml файл jboss-web.xml (server/PROFILE/deploy/jmx-console.war/WEB-INF/jboss-web.xml)
  7. Раскомментировать в нём секцию <security-domain>...</security-domain> - она указывает на настройки аутентификации и авторизации (JAAS) в файле server/PROFILE/conf/login-config.xml (он будет отредактирован в п.10)
  8. Аналогично пунктам 3-5 изменить файл web.xml от Web Console (server/PROFILE/deploy/management/console-mgr.sar/web-console.war/WEB-INF/web.xml). Раскомментированная секция должна выглядеть так:
       <security-constraint>
          <web-resource-collection>
             <web-resource-name>HtmlAdaptor</web-resource-name>
             <description>An example security config that only allows users with the
                role JBossAdmin to access the HTML JMX console web application
             </description>
             <url-pattern>/*</url-pattern>
          </web-resource-collection>
          <auth-constraint>
             <role-name>JBossAdmin</role-name>
          </auth-constraint>
       </security-constraint>
  9. Аналогично пунктам 6-7 изменить jboss-web.xml (server/PROFILE/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml)
  10. Найти файл server/PROFILE/conf/login-config.xml
  11. Найти в файле секции <application-policy name="jmx-console">...</application-policy name="jmx-console"> и <application-policy name="web-console">...</application-policy name="web-console">. При использовании для аутентификации/авторизации файла с логином/паролем они должны выглядеть так:
        <application-policy name="jmx-console">
           <authentication>
              <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
                 flag="required">
               <module-option name="usersProperties">props/jmx-console-users.properties</module-option>
               <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
              </login-module>
           </authentication>
        </application-policy>
        <application-policy name="web-console">
           <authentication>
              <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
                 flag="required">
                 <module-option name="usersProperties">props/jmx-console-users.properties</module-option>
                 <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
              </login-module>
           </authentication>
        </application-policy>
    у меня usersProperties и rolesProperties консолей указывают на одни и те же файлы, т.к. нет смысла дублировать одинаковое содержимое
  12. В файле server/PROFILE/conf/props/jmx-console-users.properties изменить пароль по умолчанию администратора консоли
  13. В файле server/PROFILE/conf/props/jmx-console-roles.properties проверить наличие роли администратора консоли, указанной в web.xml в пунктах 5 и 8 (по умолчанию это JBossAdmin)
  14. Перезапустить JBoss, проверить доступ к консолям
  15. ...
  16. PROFIT

Комментариев нет:

Отправить комментарий