В рамках одного из рабочих проектов по внутреннему пентесту я обнаружил на одном из серверов возможность загружать файлы и запускать их. Там работала ОС Windows Server. Но, помимо этого, был установлен один из наиболее известных антивирусов в актуальной версии, со свежими обновлениями и с правильно заданными настройками (нечасто такое встретишь, верно?).
Еще по теме: Обход антивируса в Meterpreter
Когда я обнаружил возможность загрузки и исполнения загруженных файлов, первым делом я попытался сгенерировать нагрузку для вызова реверс‑шелла с помощью нескольких современных генераторов (Msfvenom, Empire). Однако все сгенерированные ими нагрузки, даже созданные с применением различных энкодеров и крипторов, блокировались антивирусом на этапе загрузки или запуска. Это создало для меня проблему: получить шелл нужно, но мешает антивирус.
Обход антивируса с помощью Haskell
За несколько дней до начала проекта я наткнулся на обзор языка программирования Haskell. Среди прочих интересных особенностей была упомянута стойкость к отладке. В некоторых реализациях этого языка программы превращаются в байт‑код, который потом запускается в собственной виртуальной машине. Поэтому исполняемый файл Haskell может иметь динамическую структуру, что позволяет скрывать определенные сигнатуры, детектируемые средствами автоматизированного анализа исполняемых файлов.
Именно поэтому я решил переписать модуль реверс‑шелла на Haskell. Я посчитал эту задачу достаточно тривиальной и не требующей особых временных затрат. Это было большой моей ошибкой.
Обход антивируса раз
Как мне удалось выяснить спустя неделю, Haskell требует абсолютно альтернативного образа мышления. Он поддерживает строго функциональный стиль, ленивые вычисления и монады. Все эти слова до знакомства с этим чудным языком программирования мне не были известны, ведь я не программист. Но все‑таки спустя еще несколько дней изучения мне удалось создать что‑то отдаленно похожее на ту вроде бы тривиальную программу, что мне была нужна. По крайней мере, она выполняла хотя бы некоторые из нужных мне действий.
При загрузке этого файла на сервер и при его запуске мне действительно удалось преодолеть антивирус. Он перестал блокировать и удалять исполняемый файл, но возникла новая проблема. Как только я получал командную оболочку в Metasploit, антивирус разрывал соединение. В результате я не мог совершить ни одного действия на целевой системе, а Metasploit был необходим для организации прочих, уже ранее построенных туннелей.
Обход антивируса два
К этому шагу уже произошел байпас антивирусных проверок файла — сигнатурной и эвристической, однако антивирус продолжал наблюдать за сетевым трафиком и разрывать все подозрительные соединения. Поэтому в какой‑то момент у меня родилась новая свежая идея. Ведь я могу реализовать шифрование трафика между командным центром и узлом‑жертвой самостоятельно! И тогда, в зашифрованном трафике, антивирус не сможет выявить подозрительную активность и позволит ее осуществлять. А так как антивирус установлен актуальный, сертифицированный, со свежими базами и эвристикой, значит, и шифр надо брать… Самый простой и банальный — Атбаш. Поэтому я добавил в свою нагрузку на Haskell реализацию шифрования путем замены каждого символа на противоположный по ASCII. И добавил отдельный микро‑прокси‑скрипт, запускаемый на командном центре.
Прописываю порты переадресации, загружаю новый файл на целевой сервер. Запускаю его, принимаю бэкконнект и… Бинго! Антивирус больше не ругается на мой файл, не видит ничего подозрительного в трафике, не разрывает соединения, а это значит, все байпасы прошли успешно, антивирус ведет себя максимально тихо и послушно, не мешая мне изучать целевую систему с помощью привычных и удобных инструментов! Цель достигнута.
Заключение
Такой нетривиальный, пусть и очень замороченный подход позволил добиться отличных результатов, а именно — привел к компрометации всего доменного леса. А для меня самого это стало отличной возможностью улучшить свои навыки, подтянуть знания и снизить градус самонадеянности при первом знакомстве с новыми языками и технологиями.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Как скрыть процессы от антивирусов
- Как обойти антивирус с помощью Chimera
- Использование SigThief для обхода антивируса