Защита от атак на фреймворк Apache Struts2

Защита от атак на фреймворк Apache Struts2

В середине июля 2013 года в CVE (справочник известных уязвимостей) были опубликованы три уязвимости (первая, вторая, третья) в веб-фреймворке Apache Struts2, на основе которых можно создать потенциальные эксплоиты. Фреймворк Apache Struts2 производит оценку HTTP-запросов. При использовании уязвимостей этого фреймворка злоумышленник может выполнять произвольные команды на веб-сервере.

Авторы: Джеф Хамм (Jeff Hamm) и Джейсон Ребхолз (Jason Rebholz)

В середине июля 2013 года в CVE (справочник известных уязвимостей) были опубликованы три уязвимости (первая, вторая, третья) в веб-фреймворке Apache Struts2, на основе которых можно создать потенциальные эксплоиты. Фреймворк Apache Struts2 производит оценку HTTP-запросов. При использовании уязвимостей этого фреймворка злоумышленник может выполнять произвольные команды на веб-сервере.

После публикации этой информации в компании Mandiant проводили активное исследование действий злоумышленников во время осуществления этой серий атак. В этой статье рассказывается о шагах, которые может предпринять организация для выявления фактов компрометирования системы с использованием вышеупомянутых уязвимостей.

Дополнительную информацию касаемо уязвимости в Apache Struts2 вы можете найти по адресу https://cwiki.apache.org/confluence/display/WW/S2-015.

Замечание: все примеры логов, упомянутых в данной статье, были зачищены на предмет IP-адресов, имен файлов и временных меток.

Анализ скомпрометированных систем, проведенный компанией Mandiant, выявил три основных шага во время осуществления атаки:

  1. Злоумышленники использовали запросы к поисковым системам для нахождения веб-сайтов с установленным фреймворком Apache Struts2.
  2. Злоумышленники использовали код эксплоита из публичных блогов и сканировали уязвимые системы.
  3. После использования первоначального эксплоита происходило дальнейшее компрометирование системы.

Запросы к поисковым системам

Вначале Mandiant выявила запросы к поисковым системам, наиболее распространенными из которых были Гугл и Байду (китайский поисковик), позволяющие злоумышленникам находить уязвимые системы (для этого использовалась информация из логов веб-сервера Apache и поля referrer). Мы решили не публиковать эти запросы, поскольку сразу станет понятно, сколько существует потенциально уязвимых серверов.

Сканирование систем

Во время анализа каждой отдельной системы, на которой установлен Apache Struts2, Mandiant обнаружила одни и те же следы сканирования, при помощи которых злоумышленники пытались идентифицировать уязвимые системы. Наиболее распространенные попытки сканирования содержали строки «id», «goes», «here». В результате подобного сканирования не производилось выполнение команд или создание веб-шеллов. На Рисунке 1 показан пример такого сканирования.

Рисунок 1: Пример сканирования потенциально уязвимой системы

Также Mandiant обнаружила факты сканирования, когда выполнялись команды внутри системы, обычно состоящие из следующих команд: «whoami», «netstat», или «cat /etc/passwd». На Рисунке 2 показан пример выполнения команды.

Рисунок 2: Пример выполнения команды

Строке с командой предшествовала строка «new%20java.lang.String» за которой следовала либо комбинация символов «[]{», либо закодированный URL «%5B%5D%7B». Далее следовала сама команда (в нашем примере это «’cat’,'/etc/passwd’»). В конце строки стояла либо строка «})», либо «%7D)». В нашем примере злоумышленник пытался вывести на экран содержимое файла «/etc/passwd». На Рисунке 3 показаны команды, используемые внутри GET-запроса, в удобочитаемом формате.

Рисунок 3: Используемые команды в удобочитаемом формате

Укрепление позиций

Последним шагом злоумышленников, выявленным Mandiant, было создание веб-шеллов и/или установка дополнительного комплекта эксплоитов для укрепления своих позиция в захваченной системе. Во время расследования Mandiant обнаружили наиболее распространенные имена веб-шеллов: «css3.jsp» и «inback.jsp». Mandiant полагает, что злоумышленники использовали один и тот же код в разных средах поскольку:

  • Вышеупомянутые веб-шеллы находились в публичном доступе.
  • На сайтах, где находились эти веб-шеллы, была инструкция по их применению в связке с эксплоитом для Apache Struts2.

Веб-шелл «css3.jsp» часто представлял собой простейшую утилиту для загрузки файлов. Выражение включает в себя Java-модуль «FileOutputStream» и функцию «write» (эти Java-функции очень популярны и поиск только по одному лишь их имени приведет к множеству ложных срабатываний). Этот код был найден на множестве публичных сайтов, где были использованы функции наподобие «JSP writer» или «JSP word». На Рисунке 4 показан пример создания веб-шелла, взятый из логов Apache.

Рисунок 4: Пример создания веб-шелла

На Рисунке 5 показана отформатированная версия кода из Рисунка 4.

Рисунок 5: Отформатированный пример создания веб-шелла

Поисковые системы находят продемонстрированные здесь HTTP запросы в блогах, где описывается механизм использования уязвимости во фреймворке Struts2. Вполне вероятно, из-за этого было обнаружено нечто общее в действиях злоумышленников при расследовании инцидентов. К тому же, некоторые товарищи смогли загрузить публично доступные наборы эксплоитов, используя команду «wget» в своих инъекциях.

На Рисунке 6 показан пример использования эксплоита Struts2 для загрузки файла «exp.py» на целевой веб-сервер с веб-сайта злоумышленника. Файл был загружен в папку «/tmp».

Рисунок 6: Использование wget

Дальнейшие действия злоумышленников

На веб-серверах, исследованных компанией Mandiant, где установлен фреймворк Apache Struts2, были вдоль и поперек просканированы злоумышленниками. Также на них были установленные веб-шеллы. В большинстве случаев злоумышленники воевали друг с другом, перезаписывая веб-шеллы с одинаковыми именами. В дальнейшем злоумышленники не сильно эксплуатировали установленные шеллы, часто лишь посылая запрос HTTP GET, чтобы удостовериться в правильной работе веб-шелла. Оставленный шелл гарантирует то, что злоумышленник сможет взаимодействовать с системой даже в случае установки патча, устраняющего уязвимость во фреймворке Apache Struts2.

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

Как защититься?

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

1. Проверьте, установлена ли у вас версия, в которой может присутствовать уязвимость

Версии Apache Struts2 до 2.3.15 уязвимы. Учитывая широкое распространение сканеров, вполне вероятно, если у вас установлена уязвимая версия Apache Struts2, злоумышленники уже попытались проникнуть в вашу систему.

2. Создайте образ скомпрометированных систем

Прежде, чем работать с файлами или сканировать систему, создайте ее образ, чтобы гарантировать актуальность временных меток. Ваш эксперт по безопасности скажет вам спасибо.

3. Поищите индикаторы компрометирования в логах веб-сервера

Существует множество уникальных ключевых слов, которые можно использовать во время анализа логов веб-сервера. Для начала можно поискать следующие ключевые слова: «action:», «redirect:» или «redirectAction:».

Индикаторы компрометирования системы с Apache Struts2

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

Ключевые слова, которые следует искать в логах Apache:

  • “action:”
  • “redirect:”
  • “redirectAction:”
  • “new+java.io.FileOutputStream(application.getRealPath
    (%22%2f%22)%2brequest.getParameter(%22f%22))).write(request.getParameter”
  • “(new%20java.lang.String[]‘”
  • “(new java.lang.String[]‘”
  • “(new%20java.lang.String%5B%5D%20%7B”

Индикаторы файловой системы

  • Имена файлов веб-шеллов и/или архивы веб-приложений (WAR):«css3.jsp»
    • «jspspy.jsp»
    • «inback.jsp»
    • «Silic.jsp»
    • «index2.jsp»
    • «jobs.jsp»
  • Наборы эксплоитов в папке «/tmp» были созданы пользователем «http» или «web»

4. Реорганизуйте и обновите скомпрометированные системы

После того, как вы провели полное расследование и убедились в том, что злоумышленник не получил доступ к ОС или просто не «упрочил» свое присутствие в системе, настало время заняться ликвидацией последствий. Самое правильное, что можно сделать, - перестроить систему в соответствии со стандартами безопасности. Наиболее важно убедиться в том, что все сервисы и приложения обновлены до последних версий. 

Домашний Wi-Fi – ваша крепость или картонный домик?

Узнайте, как построить неприступную стену