Взлом корпоративного портала SAP

    Популярность SAP NetWeaver Portal и его доступность из сети Интернет делают его привлекательным объектом для атаки на компании разного масштаба и профиля. В данной статье рассматривается, как потенциальный злоумышленник может взломать этот популярнейший модуль ERP-системы SAP и каким образом можно избежать подобной угрозы.

    Бизнес-приложения представляют привлекательную мишень для атак компьютерных злоумышленников. Цели могут быть самые разные: промышленный шпионаж, нанесение финансовых и репутационных потерь, получение критичной информации с целью продажи. Как правило, атаки на бизнес-приложения и системы являются целенаправленными и выполняются людьми весьма квалифицированными.

    SAP NetWeaver Portal (EP) является основной точкой входа в ERP-систему SAP для всех пользователей корпоративной сети. Портал, как правило, используется внутри компании как площадка, где хранится и обрабатывается как открытая информация (включая новости компании, данные о работниках и т. д.), так и закрытые сведения (внутренние документы, инструкции и распоряжения). Кроме того, портал предоставляет пользователям необходимые инструменты, с помощью которых они могут выполнять свои повседневные рабочие задачи: проводить встречи и совещания, управлять пользователями, редактировать документы, работать с необходимыми таблицами и т. д.

    Отличительная особенность SAP Portal состоит в том, что он связан практически со всеми остальными компонентами SAP, развернутыми в сети компании. Таким образом, компрометация SAP Portal приведет не только к компрометации всей обрабатываемой в нем информации, но и к превращению его в своеобразный плацдарм для дальнейших атак злоумышленника.

    Многие пользователи пребывают в ложной уверенности, что ERP-система SAP не доступна из Интернет. Между тем, доступ к SAP Portal зачастую можно получить из сети Интернет, используя, например, простой Google Dork inurl:/irj/portal, где можно найти большое количество SAP Portal, доступных для подключения:



    Поисковик Shodan также позволяет легко обнаруживать доступные SAP Portal.



    Популярность SAP NetWeaver Portal и его доступность из сети Интернет делают его привлекательным объектом для атаки на компании разного масштаба и профиля. Рассмотрим SAP Portal более детально.

    АРХИТЕКТУРА SAP NETWEAVER PORTAL

    Архитектура SAP Portal представлена на рисунке ниже.



    Как видно из схемы, основой системы является Web Application Server (SAP J2EE), в контексте которого работает портал. Сам же Portal представляет собой платформу для работы разного рода модулей, главными из которых являются iViews, приложения и Web-сервисы.

    На схеме видно, что SAP Portal связан с базой данных, а также с множеством других компонентов и моделями SAP.

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

    АТАКИ НА SAP NETWEAVER J2EE

    SAP NetWeaver J2EE является основой SAP Portal, поэтому важно понять, как злоумышленник может скомпрометировать J2EE. Для этого необходимо разбираться в некоторых нюансах работы J2EE.

    Доступ к приложениям, работающим в J2EE, определяется разработчиками этих приложений с помощью файла-дескриптора, который называется web.xml. Ниже представлен пример такого файла-дескриптора.

    <servlet> 
       <servlet-name>CriticalAction</servlet-name> 
       <servlet-class>com.sap.admin.Critical.Action</servlet-class>    
    </servlet>
    <servlet-mapping> 
         <servlet-name>CriticalAction</</servlet-name> 
         <url-pattern>/admin/critical</url-pattern> 
     </servlet-mapping
    <security-constraint>
    <web-resource-collection>
    <web-resource-name>Restrictedaccess</web-resource-name>
    <url-pattern>/admin/*</url-pattern>
    <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
    	<role-name>administrator</role-name>
     </auth-constraint>
    </security-constraint>


    Рассмотрим его подробнее.

    Атака Verb Tampering. Наиболее важными тегами в файле-дескрипторе являются: servlet-name, определяющий имя сервлета; http-method, задающий HTTP-метод для доступа к сервлету; role-name, указывающий необходимую роль для доступа к сервлету. Таким образом, для доступа к сервлету CriticalAction пользователь должен отправить запрос GET и при этом обладать правами администратора.

    Однако аутентификацию можно обойти: если пользователь сделает запрос, отличный от GET, то его роль пользователя проверяться не будет. Разработчики, как правило, ограничивают доступ к приложению для методов GET и POST, однако иногда забывают про метод HEAD. Последний аналогичен GET, за исключением одного отличия – ответ сервера содержит лишь заголовок. Таким образом, если злоумышленник найдет приложение, которому для работы не требуется подтверждения от сервера, он может попробовать воспользоваться данной ошибкой.

    Например, сервлет CTC позволяет управлять пользователями в SAP Portal: создавать и удалять пользователей, перемещать их между группами. Таким образом, он является подходящим объектом для атаки, ведь в запросе на создание пользователя важно именно отправить запрос, а не получить ответ.

    И хотя сервлет CTC предусматривает аутентификацию при использовании методов GET и POST, злоумышленник может получить административный доступ к ERP-системе, используя всего два запроса HEAD к SAP Portal:
    • создаем нового пользователя blabla с паролем blabla
    HEAD /ctc/ConfigServlet?param=com.sap.ctc.util.UserConfig;CREATEUSER;USERNAME=blabla,PASSWORD=blabla 
    

    • добавляем созданного пользователя в группу Administrators
    HEAD /ctc/ConfigServlet?param=com.sap.ctc.util.UserConfig;ADD_USER_TO_GROUP;USERNAME=blabla,GROUPNAME=Administrators
    

    Данный тип атаки называется Verb Tampering. Для защиты системы необходимо:
    • установить SAP-ноты: 1503579,1616259
    • проверить все файлы web.xml. Это можно сделать с помощью утилиты ERPScan WEB.XML checker.

    Invoker Servlet. Взглянем на web.xml еще раз.

    <servlet> 
       <servlet-name>CriticalAction</servlet-name> 
       <servlet-class>com.sap.admin.Critical.Action</servlet-class>    
    </servlet>
    <servlet-mapping> 
         <servlet-name>CriticalAction</</servlet-name> 
         <url-pattern>/admin/critical</url-pattern> 
     </servlet-mapping
    <security-constraint>
    <web-resource-collection>
    <web-resource-name>Restrictedaccess</web-resource-name>
    <url-pattern>/admin/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>HEAD</http-method>
    </web-resource-collection>
    <auth-constraint>
    	<role-name>administrator</role-name>
    </auth-constraint>
    </security-constraint>


    Обратим внимание еще на один важный тег – url-pattern, описывающий URI, по которому будет предоставлен доступ к сервлету. Таким образом, отправив запрос GET по URI /admin/critical/CriticalAction, пользователь получит доступ к сервлету CriticalAction, если будет иметь роль администратора.

    Однако и в данном случае злоумышленник может обойти аутентификацию и получить доступ к сервлету. Дело в том, что по умолчанию в SAP включен механизм InvokerServlet, который позволяет обращаться к сервлетам по специально сформированным ссылкам. Иначе говоря, злоумышленник может обратиться к сервлету CriticalAction по URI /servlet/com.sap.admin.Critical.Action и получить доступ, не имя никакой роли, так как данный URI не соответствует указанному в url-pattern.

    Для атаки на реальные ERP-системы злоумышленник может использовать все тот же сервлет CTC. Помимо управления пользователями он позволяет выполнять команды ОС, на которой работает SAP Portal, например «создать пользователя».

    /ctc/servlet/ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=[команда]




    На рисунке показано выполнение команды ipconfig на сервере SAP Portal.

    Для защиты системы необходимо:
    • установить SAP-ноты: 1467771, 1445998;
    • проверить все файлы web.xml (это можно сделать с помощью утилиты ERPScan WEB.XML checker).

    Теперь перейдем к рассмотрению возможных атак непосредственно на портал.

    ПРЯМЫЕ АТАКИ НА ПОРТАЛ

    Security Zone. В Portal есть модуль, которая называется Security Zone. Он служит дополнительным инструментом для конфигурирования доступа к программам портала (iViews). Зоны определяются для каждого приложения в файле-дескрипторе portalapps.xml и имеют такой критичный параметр, как Safety Level. Он отвечает за уровень доступа к приложению. Safety Level предусматривает четыре уровня безопасности:

    • No Safety
    o Анонимным пользователям разрешается доступ к компонентам портала, определенным в зоне безопасности.
    • Low Safety
    o Пользователь должен быть по меньшей мере пользователем портала, чтобы получить доступ к компонентам портала, определенным в зоне безопасности.
    • Medium Safety
    o Пользователь должен иметь на портале конкретную роль, которой предоставлено право доступа к компонентам портала, определенным в зоне безопасности.
    • High Safety
    o Пользователь должен иметь на портале роль с высокими административными правами, которой предоставлено право доступа к компонентам портала, определенным в зоне безопасности.

    Разработчики должны внимательно подходить к заданию Safety Levels, так как, если пользователь обращается, например, к iView по прямому URL: /irj/servlet/prt/portal/prtroot/<iView_ID>, то доступ к приложению будет проверяться только по результатам проверки Safety Level.

    В SAP Portal был обнаружен ряд критичных приложений с Safety Level= No Safety. Для защиты системы необходимо проверить настройки приложений Safety Level.

    XSS. SAP Portal является Web-приложением, поэтому ему свойственны все характерные для web-приложений уязвимости. Одной из таких является межсайтовый скриптинг (XSS). Однако, в отличие от классических векторов для подобного рода атак, при атаке на портал злоумышленник может использовать особенности Portal – например, технологию EPCF, позволяющую получить доступ к данным пользователя через специальный JavaScript API.

    Пример такой «зловредной» нагрузки:
    <SCRIPT>
      alert(EPCM.loadClientData("urn:com.sap.myObjects", "person");
    </SCRIPT>


    Для защиты системы необходимо:
    • установить SAP-ноту: 1656549.

    Directory traversal. Речь идет еще об одной классической атаке на Web-приложения. Однако и здесь имеется своя специфика – например, выход за пределы каталога осуществляется не традиционными символами /../, а !252f..!252f, как в данной уязвимости:
    /irj/servlet/prt/portal/prteventname/nav/prteventdata/root!3d!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f..!252f../prtroot/com.sap.portal.support.browse.default


    Для защиты системы необходимо:
    • установить SAP-ноту: 1630293.

    XML External Entity. Это классическая атака на XML-транспорт Web-приложений. XML является одним из основных транспортов в SAP NetWeaver Portal, поэтому потенциальный злоумышленник может пытаться скомпрометировать систему через него – в частности, получить административный доступ в SAP Portal.

    В SAP есть специальное хранилище паролей SAP Security Storage, расположенное в файле SecStore.properties. Пароли зашифрованы, однако ключ для расшифровки расположен в том же каталоге, что и пароли (в файле SecStore.key). Таким образом, если злоумышленник сможет прочитать данные файлы, то он сможет расшифровать пароли и получить административный доступ к порталу.

    Эта атака осуществляется в несколько этапов:
    • нахождение уязвимости, позволяющей читать файлы сервера SAP-Portal;
    • чтение файл SecStore.properties с зашифрованными паролями;
    • чтение файла SecStore.key с ключами для расшифровки паролей;
    • расшифровка административного пароля и получение доступа в SAP Portal.

    В качестве уязвимости, позволяющей читать файлы с сервера SAP Portal, можно использовать описанные ранее. Это может быть Directory Traversal, Command Execution.

    Отдельно хотелось бы продемонстрировать внедрение внешних XML-модулей (XXE). Вот так выглядит типичный запрос к порталу в сниффере.



    Как можно видеть, запрос POST содержит огромное количество параметров. Если присмотреться, в одном из них указан XML.



    Именно в него и попытаемся внедрять запрос, который вернет содержимое файлов SecStore.properties и SecStore.key.



    На рисунке показано, как можно читать файлы с сервера SAP Portal, используя для этого уязвимость XXE.

    После успешного прочтения файлов их можно расшифровать с помощью утилиты ERPScan SecStore descriptor.

    Для этого запускаем SecStore_Cr.jar в том же каталоге, где находятся полученные с сервера файлы паролей и ключ, указываем SID системы. В результате утилита отобразит расшифрованные пароли и другую служебную информацию.



    Раскрытие информации. Вместе с SAP Portal поставляется множество сервисов, которые могут быть использованы злоумышленниками для получения информации при планировании атак на систему. Однако возможны и иные векторы развития событий – например, использование портала в качестве плацдарма для дальнейших действий. Здесь хранится множество документов, и при помощи простого механизма внутреннего поиска и запросов наподобие secret или password, злоумышленник может узнать большое количество конфиденциальной информации.



    ВЫВОДЫ

    Популярность SAP NetWeaver Portal – одного из модулей системы SAP ERP – сделала его наиболее привлекательной мишенью для атак злоумышленников, стремящихся получить доступ к корпоративной информации. Именно поэтому требуется повышенное внимание к его безопасности как со стороны администраторов системы, так и разработчиков и даже простых пользователей.
    • +29
    • 16,4k
    • 5
    Digital Security
    314,49
    Безопасность как искусство
    Поделиться публикацией

    Комментарии 5

      +3
      (Наряду с очевидными дырами) вот что бывает, когда люди пренебрегают практикой «Все изменения в состоянии приложения только через PUT, POST, DELETE».
        +1
        >Однако аутентификацию можно обойти: если пользователь сделает запрос, отличный от GET, то его роль пользователя проверяться не будет. Разработчики, как правило, ограничивают доступ к приложению для методов GET и POST, однако иногда забывают про метод HEAD.

        Ржунимагу, ынтырпрайзная промышленная система за миллионы денег такая ынтырпрайзная.
        Перед таким решетом просто надо ставить nginx с http basic auth, учетки юзеров — из базы сапа, и будет счастье.
          0
          Проблема в том, что «ынтырпрайз» решения используют не только http, но и кучу других протоколов и портов соответственно. Прикрыли http(s) — сломают через P4.
            0
            VPN же есть.
          0
          Забыл пароль — запустил SecStore_Cr.jar — вспомнил пароль :)

          ЗЫ, не актуально, но может быть полезно, тем-кто не любит обновляться годами

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое