Поздравляем с Новым Годом!
   
Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: CIII Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 08 июля 2021 г.)

Наука: Информационные технологии

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Романенко В.Д., Овечкин Д.Е. АНАЛИЗ WSO 4.2.5: РАЗБИРАЕМ УСТРОЙСТВО ОДНОГО ИЗ САМЫХ РАСПРОСТРАНЁННЫХ ВЕБ ШЕЛЛОВ // Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ: сб. ст. по мат. CIII междунар. студ. науч.-практ. конф. № 7(102). URL: https://sibac.info/archive/technic/7(102).pdf (дата обращения: 29.12.2024)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

АНАЛИЗ WSO 4.2.5: РАЗБИРАЕМ УСТРОЙСТВО ОДНОГО ИЗ САМЫХ РАСПРОСТРАНЁННЫХ ВЕБ ШЕЛЛОВ

Романенко Вадим Денисович

студент, кафедра информатики, информационных технологий и защиты информации, Липецкий Государственный Педагогический Университет им. П.П. Семёнова-Тян-Шанского,

РФ, г. Липецк

Овечкин Дмитрий Евгеньевич

студент, кафедра информатики, информационных технологий и защиты информации, Липецкий Государственный Педагогический Университет им. П.П. Семёнова-Тян-Шанского,

РФ, г. Липецк

Золотарева Татьяна Александровна

научный руководитель,

старший преподаватель кафедры информатики, информационных технологий и защиты информации, Липецкий Государственный Педагогический Университет им. П.П. Семёнова-Тян-Шанского,

РФ, г. Липецк

АННОТАЦИЯ

В данной статье на примере WSO 4.2.5 рассмотрены основные методы сокрытия вредоносного PHP кода на скомпрометированных веб приложениях. Также, представлены основные способы обхода ограничений и систем защиты, реализованных в исследуемом веб шелле.

 

Ключевые слова: WSO; Web Shell; обратная разработка; safe mode bypass; методы сокрытия; вредоносный код; повышение привилегий.

 

Обычно, злоумышленники, после получения доступа к какой-либо системе, оставляют в ней специальные программы, написанные на различных языках, для получения повторного доступа - бэкдоры (англ. Backdoor – «чёрный ход»). В случае же с веб приложениями используются похожие по смыслу скрипты, необходимые как для закрепления достигнутого во взломе результата, так и для продвижения в глубь сервера, на котором непосредственно работает само скомпрометированное веб приложение. Такие скрипты называют web shells. В данной статье мы рассмотрим один из самых известных шеллов как среди пентестеров, так и среди злоумышленников - WSO (Web Shell by Orb).

 

Безымянный

Рисунок 1. Панель управления WSO

 

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

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

 

Рисунок 2. Обфусцированный шелл

 

Представленный выше приём используется для защиты PHP кода и затруднения его понимания.  Не смотря на его простоту, два моих антивируса не смогли обнаружить в нем вредоносные сегменты. Однако, иногда можно встретить защиту кода через IonCube, как это обычно проворачивают в проектах гораздо масштабнее, вроде связок эксплойтов. В данном примере строка, длинной в 31 000 символов это простейшая base64 кодировка, в которой и спрятан основной код WSO. Функция eval() используется для исполнения PHP кода. Таким образом, base64_decode вернёт исходных код в нормальном виде, который и будет отработан. Так как для дальнейшего анализа мне всё же нужен код в нормальном виде я просто заменю eval на echo и посмотрю результат в браузере. Первое, что бросается в глаза, это переменные, имеющие весьма необычные названия. На самом деле ничего странного в этом нет. Судя по всему, они содержат в себе некоторые данные конфигурации и авторизации. Например, первая переменная содержит в себе хеш пароля представленный в md5. Автор добровольно оставил нам его расшифровку в комментарии – root. Однако, для установки своего пароля следует просто заменить указанный в переменной хеш на свой.

 

Рисунок 3. Результат простейшей деобфускации

 

Особо интересные части кода были обфусцированы для затруднения понимания алгоритма работы и сокрытия их от систем обнаружения. На скриншоте выше представлены два обфусцированных фрагмента кода – функция decrypt, и eval, с приёмом, который ранее был рассмотрен. Так как изучать весь функционал не разумно, в пределах одной статьи, то пройдёмся по основным моментам, которые сильнее прочих приковывают внимание.

 

Рисунок 4. Код авторизации

 

Прежде всего, взглянем на то, как в WSO проходит авторизация. Первые 3 строки нам не интересны, так как всего лишь сравнивается хеш введённого пароля и хеш исходного, после чего выполняется функция prototype, которая устанавливает значения cookies. Таким образом проходит стандартная авторизация. Казалось бы, всё просто, однако далее следует фрагмент кода, который скрывает шелл от различных поисковых ботов. Строка 36 проверяет, авторизованы ли вы, и если нет, то вызывает некоторую функцию hardlogin(), в которой описаны регулярные выражения методом preg_match. Данное регулярное выражение отыскивает в запросе любое упоминание User-Agent поисковых ботов, описанных в переменной $userAgents. В случае наличия совпадений, WSO прикрывается заголовком с кодом 404 (данная страница не найдена). Если же вы не поисковый бот, то шелл с радостью приветствует вас формой авторизации. Проанализировав заголовки в BurpSuite можно убедиться в достоверности данного вывода.

 

1

Рисунок 5. Обычный User-Agent пользователя

 

2

Рисунок 6. User-Agent поискового бота Google

 

Далее PHP скрипт получает основные сведения о системе, которые мы наблюдаем в самой верхней панели основного меню (см. рис. 1). На иллюстрации кода ниже (рис. 7 и рис. 8) приведено описание функций и операций, определяющих характеристики системы и некоторые сведения о её пользователях.

В промежутке, между приведёнными примерами описаны CSS-стили, создающие весьма дружелюбный пользовательский интерфейс, и JS код, дающий возможность интерактивно пользоваться скриптом. Их изучение нас вовсе не интересует, поэтому обойдёмся одним лишь упоминанием и продолжим изучение.

 

Безымянный

Рисунок 7. Определение данных

 

Безымянный

Рисунок 8. Определение данных

 

Стоит уделить особое внимание третьему блоку кода (рис. 8). В нём формируется запрос к сайту exploit-db через noreferer.de, который анонимизирует факт осуществления запроса. Сам же сайт, exploit- db позволяет осуществлять поиск эксплоитов по достаточно обширной базе. Исходя из строк 183 и 185, поиск ведётся по названию операционной системы ($kernel) и её версии ($release). Предполагаю, что данный запрос позже будет предложен к использованию пользователю, для поиска эксплоита, позволяющего повысить привилегии или как-то иначе скомпрометировать систему.

Большая часть функционала WSO это именно работа с файлами. Ей уделены сотни строк кода. Некоторые системные администраторы используют данный шелл просто как файловый менеджер в своём проекте. Действительно, в этом плане он очень удобен, однако помимо работы с файлами существуют функции, которые превращают WSO в опасное оружие, излюбленное многими злоумышленниками. Рассмотрим некоторые из них.

Code execution. Данный веб шелл позволяет исполнять запросы как, непосредственно, в командной оболочке системы, так и просто произвольный код на языке PHP. Также, имея доступ к базе данных, вы можете взаимодействовать с ней через шелл. Более чем интересной является функция обхода safe mode. В PHP существует директива, которая запрещает использование функций, вызывающих какие-либо системные программы. Именно эти функции делают возможным обращение к командной оболочке системы и взаимодействие с файлами ограниченного доступа. Давайте взглянем, какие ухищрения применяются для обхода запретов, выставленных safe mode.

 

Безымянный

Рисунок 9. Обход safe mode

 

И так, разберём всё по порядку. Первый кейс позволяет нам считать данные некоторого файла. Для этого, скрипт создаёт свой временный файл и пытается скопировать в него данные из файла, который необходимо прочитать. В случае успешной записи, на экран будет выведено содержимое временного файла, после чего он удаляется. Дело в том, что safe mode позволяет прочитать файл только в том случае, если он и был вами создан. Далее следует блок (2), который позволяет просмотреть файлы в действующем каталоге исходя из какого-либо шаблона. Предыдущее предложение является определением PHP функции glob(). В соответствии с шаблоном, который ей будет задан, она вернёт нам список из файлов, которые ему соответствуют. Если мы опустим шаблон, то увидим весьма интересную картину при активном safe mode. Для структуризации массив просто прогоняют через цикл и каждый элемент выводят на экран.

 

Рисунок 10. Результат исполнения кода

 

Третий кейс, как и первый, позволяет нам прочитать некоторый файл. В этом случае, используется уязвимость в функции curl_init(), которая из-за недостаточной обработки нулевого байта, позволяет вывести на экран содержание произвольного файла. К более новым версиям PHP такой метод обхода safe mode не применяется в связи с исправлением данной недоработки разработчиками. По умолчанию в файле конфигурации safe mode отключён. Поэтому, в следующем исполняемом блоке (4), для его обхода используется функция ini_restore(), возвращающая значение конфигурации по умолчанию. Исходя из этого можно воспользоваться include() и вывести содержимое определённого файла на экран. В WSO представлены разнообразные методы именно для того, чтобы увеличить вероятность обхода ограничений и предусмотреть как можно больше факторов, способствующих реализации хотя бы одного из осуществляемых методов.

 

Рисунок 11. Результат исполнения кода

 

Больше всех моё внимание привлёк именно блок 5. В нём осуществляется своеобразное «чтение» файла /etc/passwd (файл семейства систем *nix, содержащий данные о пользователях системы). На самом же деле происходит простое составление приближённого к правде содержимого данного файла путём перебора всех пользовательских данных. Цикл задаёт границы перебора по GID, а в теле цикла происходит получение и преобразование идентификатора пользователя (UID). Наконец, последний блок, использует функцию imap_open() для открытия IMAP потока, который предоставляет возможность работать с почтовыми сервисами. Однако, нам здесь интересно другое. В качестве параметра адреса задаётся название файла, который необходимо прочесть, а остальные параметры опущены. В случае правильной отработки на экран выводится тело IMAP потока, и как следствие содержимое целевого файла.

В данной функции применяются давно известные способы safe mode bypass и некоторые из них, в настоящее время, подкорректированы. Несмотря на это, их эффективность всё ещё находится на достойном уровне.

BruteForce. Помимо обхода директивы защиты у WSO имеется небольшая, но иногда удобная функция осуществления перебора учётных данных, т.е. атака грубой силой. Шелл позволяет добыть пароли FTP, MySQL и PostgreSQL сервисов.

 

Безымянный

Рисунок 12. BruteForce MySQL

 

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

Подводя итог данной статье, хочу заметить, что, хоть веб шеллы и оставляют много следов после себя, обнаружить их вручную все же задача непосильная обычному системному администратору. Ведь результаты их деятельности, зачастую смешиваются с обычным белым трафиком, который идёт на сервер от пользователей. Также, многие из известных шеллов используют различные ухищрения дабы сокрыть свои вредоносные сегменты от антивирусных программ. Чтобы уберечь сервер от загрузки на него веб шеллов, необходимо:

  1. Активно обновлять программное обеспечение сервера (антивирусы, обработчики скриптовых языков сервера, сервисные ПО) и следить за обновлениями используемых CMS.
  2. Установить специализированное программное обеспечение, осуществляющее анализ используемых на сервере скриптов по параметрам веб шеллов (длинные строки, ключевые слова, подозрительные сигнатуры и т.п.)
  3. Периодически проводить аудит безопасности сервера, чтобы обнаружить уязвимые точки входа, через которые злоумышленники могут подгружать вредоносные файлы.

 

Список литературы:

  1. Игорь Симдянов, Дмитрий Котеров PHP 7. Наиболее полное руководство. Книга, 2016 год.
  2. Фленов Михаил, PHP глазами хакера. 3-е издание. Год издания: 2016
  3. Хабр / онлайн источник -  https://habr.com/ru/post/137459/ (дата обращения: 8.06.2021)
  4. Журнал Хакер / онлайн источник - https://xakep.ru/2005/06/14/26964/ (дата обращения: 11.06.2021)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

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