Веб-оболочка
Веб-оболочка (англ. web shell) — это средство, предоставляющее интерфейс, аналогичный командной оболочке, для удалённого доступа к веб-серверу, часто используемое в контексте кибератак[1]. Ключевым признаком веб-оболочки является взаимодействие через веб-браузер[2][3].
Веб-оболочка может быть реализована на любом языке программирования, поддерживаемом сервером. Наиболее часто используются PHP, поскольку он широко распространён в разработке веб-приложений. Также встречаются реализации на Active Server Pages, ASP.NET, Python, Perl, Ruby и скриптах UNIX-оболочки[1][2][3]
С помощью средств сетевого мониторинга злоумышленник может выявить уязвимости, позволяющие установить веб-оболочку. Эти уязвимости зачастую присутствуют в приложениях, работающих на веб-сервере[2].
Веб-оболочку можно использовать для выполнения команд shell, повышения привилегий на веб-сервере, загрузки, удаления, скачивания и выполнения файлов на сервере и с сервера[2].
Типовые применения
Веб-оболочки применяются в атаках прежде всего из-за их многофункциональности и сложности обнаружения[4]. К числу наиболее распространённых злоупотреблений относят:
- Кража данных[4]
- Инфицирование посетителей сайта (атаки watering hole)[5]
- Дефейсинг сайта путём вредоносной модификации файлов
- Проведение атак отказа в обслуживании (DDoS)[2]
- Передача команд внутри внутренних сетей, не доступных из Интернета[4]
- Использование в качестве инфраструктуры управления и контроля, например, в составе ботнетов или для компрометации новых внешних сетей[4]
Веб-оболочки позволяют хакерам похищать информацию, искажать данные и устанавливать вредоносное ПО, наносящее серьёзный ущерб системе. Проблема усугубляется, если взломанные серверы используются для проникновения во внутреннюю сеть и заражения других машин. Веб-оболочки активно применяются для атак на различные отрасли, включая государственный, финансовый сектор и оборону, зачастую в целях кибершпионажа. Одним из самых известных примеров является «China Chopper»[6].
Установка веб-оболочек
Веб-оболочки устанавливаются посредством эксплуатации уязвимостей веб-приложений или ошибочной настройки безопасности сервера, в том числе[2][4]:
- SQL-инъекции;
- Уязвимости приложений и сервисов (например, ПО веб-сервера, такого как Nginx, или системы управления содержимым — WordPress)[7][8]
- Уязвимости обработки и загрузки файлов, которые можно смягчить, ограничив типы разрешённых к загрузке файлов[8]
- Удалённое и локальное включение файлов (RFI, LFI)
- Удалённое выполнение кода
- Открытые административные интерфейсы[2]
Злоумышленник также может подделать HTTP-заголовок Content-Type при загрузке файла, чтобы обойти неадекватную валидацию, основанную на MIME-типе от клиента, что позволяет загрузить собственную веб-оболочку.
Пример
Ниже приведён простой пример веб-оболочки на PHP, выполняющей и возвращающей результат произвольной shell-команды:
<?=`$_GET[x]`?>
Пусть файл сохранён как example.php, пример вызова для вывода содержимого файла /etc/passwd:
https://example.com/example.php?x=cat%20%2Fetc%2Fpasswd
Указанный запрос извлечёт значение параметра x из URL-строки запроса, передавая следующую shell-команду:
cat /etc/passwd
Такой сценарий можно предотвратить, отключив в настройках PHP выполнение shell-команд, исключив тем самым возможность выполнения произвольного кода.
Предотвращение и снижение риска
Обычно веб-оболочки устанавливаются через уязвимости веб-сервера или его программного обеспечения. Поэтому важно своевременно устранять известные уязвимости для предотвращения компрометации сервера.
Ниже приведён перечень мер безопасности для предотвращения установки веб-оболочек[2][3]:
- Регулярно обновлять приложения и операционную систему сервера-хоста для защиты от известных ошибок
- Разграничивать интернет-сервера и внутренние сети с помощью демилитаризованной зоны (DMZ)
- Безопасно настраивать веб-сервер[2]
- Отключать или блокировать неиспользуемые сети и сервисы[4]
- Проверять входящие данные пользователей для снижения рисков RFI и LFI[4]
- Использовать reverse proxy для ограничения доступа к административным URL только легитимным и известным пользователям[4]
- Регулярно проводить сканирование на уязвимости и использовать современные средства защиты веб-среды (при этом не исключая угрозу атак нулевого дня[4])
- Устанавливать файервол[4]
- Отключать просмотр каталогов
- Не использовать стандартные/предустановленные пароли[4]
Обнаружение
Веб-оболочки легко модифицируются, что затрудняет их обнаружение; антивирусные средства зачастую не способны их выявить[2][9].
Вот некоторые характерные признаки присутствия веб-оболочки на веб-сервере[2][3]:
- Необычно высокая нагрузка на веб-сервер (из-за большого количества загрузок и скачиваний злоумышленником)[2][9]
- Файлы с подозрительными временны́ми метками (например, новее других легитимных файлов на сервере)[9]
- Неизвестные файлы на диске веб-сервера
- Файлы с подозрительными конструкциями, например, вызовы
cmd.exeили функцииeval - Необычные соединения в логах веб-сервера
- Файлы, генерирующие аномальный сетевой трафик (например, изображения PNG, принимающие POST-параметры)[2][10][11][12]
- Подозрительные подключения между серверами в DMZ и внутренними подсетями[4]
Веб-оболочки часто содержат собственный модуль входа, маскируемый под страницу ошибки[2][10][13][14].
Через веб-оболочки злоумышленники могут изменять файл .htaccess (при использовании Apache HTTP Server), перенаправляя посетителей с поисковых систем на страницы с вредоносным ПО или спам. Часто веб-оболочки анализируют user agent, чтобы показывать разный контент для поисковых роботов и обычным пользователям. Для обнаружения таких оболочек иногда требуется изменить user agent на поисковый, после чего вредоносный файл можно легко удалить[2].
Анализ логов веб-сервера помогает локализовать веб-оболочку: легитимные пользователи и посетители имеют разнообразные user agent и referer, тогда как у веб-оболочки обычно наблюдается ограниченное количество вариантов этих строк[2].