Мы уже дав­но не заикаем­ся об ассем­бле­ре, пос­коль­ку при­вык­ли к тому, что боль­шая часть сов­ремен­ной мал­вари пишет­ся на C++, C# или даже VB. Одна­ко из анти­вирус­ных ком­паний переда­ют, что вир­мей­керы XXI века поль­зуют­ся не толь­ко клас­сичес­кими язы­ками прог­рамми­рова­ния. Ока­зыва­ется, впол­не злая и фун­кци­ональ­ная мал­варь теперь пишет­ся на бат­никах, AutoIt, Lua, Python, 1C... Сегод­ня мы поп­робу­ем заг­лянуть под капот это­му «прог­рам­мно­му обес­печению» и рас­смот­реть клю­чевые, ответс­твен­ные за глав­ный фун­кци­онал учас­тки кода.

warning

Вся информа­ция пре­дос­тавле­на исклю­читель­но в озна­коми­тель­ных целях. Ни редак­ция, ни автор не несут ответс­твен­ности за любой воз­можный вред, при­чинен­ный матери­ала­ми дан­ной статьи.

 

BAT-скрипты

Ес­ли ты дума­ешь, что единс­твен­ный воз­можный вари­ант такого рода мал­вари — это клас­сичес­кий школь­ный бат­ник со стро­кой format c: внут­ри, то ты оши­баешь­ся.

Воз­можность авто­мати­зиро­вать вся­кие рутин­ные опе­рации в сис­теме с помощью bat-скрип­тов уже дав­но перерос­ла в целое нап­равле­ние соз­дания мал­вари, для которой поч­ти все анти­вирус­ные ком­пании отве­ли целый раз­дел в сво­их клас­сифика­циях вре­донос­ного прог­рам­мно­го обес­печения.

К при­меру, с помощью коман­ды ftp мож­но заг­рузить из сети нуж­ный файл, сох­ранить его в нуж­ном мес­те и запус­тить на выпол­нение, а так­же добавить этот файл в авто­заг­рузку, написав внут­ри что‑нибудь вро­де это­го:

@reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
/v Trojan /t REG_SZ /d C:\Trojan.bat /f

В ито­ге получа­ется прос­тей­ший Bat.Downloader, который исправ­но будет выпол­нять свои фун­кции.

По­мимо это­го, с помощью коман­ды taskkill мож­но попытать­ся оста­новить работа­ющие про­цес­сы меша­ющих вре­донос­ному фун­кци­она­лу прог­рамм:

// Убиваем explorer.exe
@taskkill /im explorer.exe /f > nul
// Убиваем некий антивирус aver.exe. С большой вероятностью не получится ;)
@taskkill /im aver.exe /f > nul

Обыч­но мал­варь перед началом сво­ей деятель­нос­ти про­веря­ет наличие в сис­теме анти­виру­сов и далее дей­ству­ет по резуль­татам. В bat-скрип­те это мож­но сде­лать с помощью коман­ды tasklist:

// Проверяем наличие процесса aver.exe
@for /F "delims=" %%A in ('tasklist /FI "imagename eq aver.exe"')
do @set sr=%%A
@if "%sr:~,11%"=="aver.exe" goto ff
...
// Процесс обнаружен
// Выполняем соответствующие действия
...
@goto bb
:ff
...
// Процесс не обнаружен
// Выполняем соответствующие действия
...
:bb
...
// Работаем дальше

Что каса­ется непос­редс­твен­но вре­донос­ных дей­ствий, то здесь име­ется дос­таточ­но широкое поле для деятель­нос­ти: мож­но уда­лять или переме­щать раз­личные сис­темные фай­лы, изме­нять содер­жимое кон­фигура­цион­ных фай­лов (в том чис­ле и фай­ла hosts), изме­нять зна­чения в реес­тре, бло­кируя тем самым, нап­ример, воз­можность вызова taskmgr.exe или зап­рещая вно­сить изме­нения в реестр.

Вот так меняет содержимое файла hosts Trojan.BAT.Qhost.abq
Вот так меня­ет содер­жимое фай­ла hosts Trojan.BAT.Qhost.abq
Кусочек кода bat-winlocker’а BAT/LockScreen.B (выделена блокировка диспетчера задач, блокировка запуска командной строки и запрет на изменения в реестре)
Ку­сочек кода bat-winlocker’а BAT/LockScreen.B (выделе­на бло­киров­ка дис­петче­ра задач, бло­киров­ка запус­ка коман­дной стро­ки и зап­рет на изме­нения в реес­тре)

В сети мож­но най­ти боль­шое количес­тво генера­торов bat-мал­вари. Конеч­но, всерь­ез вос­при­нимать все то, что выходит из‑под пера этих генера­торов, вряд ли сто­ит, но для не слиш­ком иску­шен­ных поль­зовате­лей даже оста­нов­ка explorer.exe может стать нераз­решимой проб­лемой.

Один из многочисленных генераторов bat-малвари (большинство антивирусных компаний относят поделки такого рода к Riskware)
Один из мно­гочис­ленных генера­торов bat-мал­вари (боль­шинс­тво анти­вирус­ных ком­паний отно­сят подел­ки такого рода к Riskware)

Для при­веде­ния вре­донос­ных скрип­тов в более при­выч­ный вид исполня­емо­го фай­ла соз­датели этих скрип­тов неред­ко поль­зуют­ся ути­лита­ми кон­верта­ции типа bat2exe. Это работа­ет, хотя ни о какой пол­ноцен­ной ком­пиляции здесь говорить не при­ходит­ся: сам скрипт пишет­ся в exe-файл в виде ресур­сов, а затем вызыва­ется cmd.exe, где скрипт и выпол­няет­ся.

Скрипт Trojan.BAT.Qhost.abq в виде exe-файла в секции ресурсов
Скрипт Trojan.BAT.Qhost.abq в виде exe-фай­ла в сек­ции ресур­сов
 

Самораспаковывающиеся архивы

Self-extracting archive (SFX-архи­вы), а точ­нее воз­можность сло­жить нес­коль­ко фай­лов в один архив с авто­мати­чес­ким запус­ком одно­го из них пос­ле рас­паков­ки уже дав­но приг­лянулись рас­простра­ните­лям сом­нитель­ного соф­та и кон­тента. Зачас­тую в эти архи­вы кла­дут впол­не легаль­ные прог­раммы вмес­те с кон­фигура­цион­ным или запус­кающим бат­ником (или скрип­том на VBS), который поз­воля­ет исполь­зовать такие архи­вы с не сов­сем бла­гими намере­ниями.

К при­меру, SFX-архив RemoteAdmin.Win32.RAdmin.20 содер­жит в себе сер­верный модуль широко извес­тной ути­литы уда­лен­ного адми­нис­три­рова­ния Radmin и bat-скрипт, с помощью которо­го про­изво­дит­ся кон­фигури­рова­ние и скры­тый запуск сер­верно­го модуля Radmin. Свою кон­фигура­цию Radmin хра­нит в реес­тре, и скрипт, находя­щий­ся в архи­ве, перед запус­ком Radmin’а про­писы­вает необ­ходимые парамет­ры в нуж­ных вет­ках реес­тра.

Конфигурационный батник RemoteAdmin.Win32.RAdmin.20
Кон­фигура­цион­ный бат­ник RemoteAdmin.Win32.RAdmin.20

С появ­лени­ем в широком оби­ходе раз­личных крип­товалют SFX-архи­вы полюби­лись и мно­гим жела­ющим помай­нить циф­ровую налич­ность на чужих вычис­литель­ных мощ­ностях. В боль­шинс­тве слу­чаев ути­литы для май­нин­га сос­тоят из нес­коль­ких фай­лов, и саморас­паковы­вающий­ся архив как нель­зя луч­ше под­ходит для того, что­бы все эти фай­лы туда спря­тать. Разуме­ется, в архив помеща­ется bat- или VBS-скрипт, запус­кающий все это дело с нуж­ными парамет­рами.

Содержимое SFX-архива Win32.BitCoinMiner.nni (выделен запускающий VBS-скрипт)
Со­дер­жимое SFX-архи­ва Win32.BitCoinMiner.nni (выделен запус­кающий VBS-скрипт)

В некото­рых SFX-архи­вах такого рода так­же содер­жится ути­лита Hidden Start, которая обес­печива­ет скры­тый запуск основной прог­раммы вре­донос­ного архи­ва.

 

AutoIt

Из­началь­но AutoIt пред­назна­чал­ся для авто­мати­зации и выпол­нения час­то пов­торя­ющих­ся задач (нап­ример, инстал­ляции соф­та на боль­шое количес­тво компь­юте­ров). В более поз­дних вер­сиях язык обрел чер­ты боль­шинс­тва рас­простра­нен­ных язы­ков обще­го наз­начения.

info

В сос­таве Windows (начиная с Windows XP) име­ется ути­лита IExpress, поз­воля­ющая соз­давать CAB-архи­вы, в том чис­ле и саморас­паковы­вающиеся.

В нас­тоящее вре­мя на AutoIt пишет­ся доволь­но боль­шое количес­тво мал­вари. Язык поз­воля­ет вза­имо­дей­ство­вать с сис­темой на дос­таточ­но низ­ком уров­не и под­держи­вает вызов API-фун­кций. Нап­ример, что­бы внед­рить свой код в какой‑нибудь про­цесс, нуж­но написать неч­то вро­де:

// Разрешения для OpenProcess
Local $PERMISSION =
BitOR(0x0002, 0x0400, 0x0008, 0x0010, 0x0020)
...
...
$hProcess = DllCall("kernel32.dll", "ptr", "OpenProcess",
"dword", $PERMISSION, "int", 0,
"dword", $Process)
...
...
DllCall("kernel32.dll", "int", "WriteProcessMemory",
"ptr", $hProcess, "ptr", $pMem, "ptr", $buffer,
"uint", 260, "uint*", 0)
...
...
DllCall("kernel32.dll", "ptr", "CreateRemoteThread",
"ptr", $hProcess, "ptr", 0, "uint", 0, "ptr", $pMem,
"ptr", $pMem, "dword", 0, "ptr", 0)

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

// Запустить обфускатор перед компиляцией
#Autoit3Wrapperr_Run_Obfuscator=y
// Установить параметры обфускации
#Obfuscator_Parameters=/StripOnly /OM
Декомпилированный AutoIt-код Backdoor.Win32.DarkKomet.djqs
Де­ком­пилиро­ван­ный AutoIt-код Backdoor.Win32.DarkKomet.djqs

В целом, если не при­нимать во вни­мание объ­ем соз­дава­емо­го ком­пилято­ром AutoIt исполня­емо­го кода, язык неп­лохо справ­ляет­ся с боль­шинс­твом задач, которые ста­вят перед собой вирусо­писа­тели. Неред­ко попада­ются весь­ма прод­винутые экзем­пля­ры, исполь­зующие раз­ные тех­ники внед­рения и сок­рытия кода, шиф­рование тела мал­вари и про­чие хит­рости.

www

Для AutoIt сущес­тву­ет визу­аль­ный редак­тор гра­фичес­кого интерфей­са, похожий на Delphi, — Koda FormDesigner. Поз­накомить­ся с ним мож­но здесь.

 

Python, Lua и прочая экзотика

Нес­мотря на то что Python — нас­тоящий хакер­ский язык прог­рамми­рова­ния, мал­варь на нем под вин­ду встре­чает­ся не очень час­то. В боль­шей сте­пени написа­ние ее оправдан­но для OS Х или Linux, в которых Python уста­нов­лен вмес­те с сис­темой.

Сомнительный Python-скрипт для Linux под названием Backdoor.Python.RShell
Сом­нитель­ный Python-скрипт для Linux под наз­вани­ем Backdoor.Python.RShell
Python-скрипт для Mac Backdoor.Python.Aharm.a
Python-скрипт для Mac Backdoor.Python.Aharm.a

Для вин­ды вре­донос­ные Python-скрип­ты, как пра­вило, ком­пилят в исполня­емый файл (на самом деле это тоже не пол­ноцен­ная ком­пиляция — в exe-файл кла­дет­ся сам скрипт и интер­пре­татор Python’а).

Что каса­ется язы­ка прог­рамми­рова­ния Lua, то самым извес­тным вре­доно­сом, который был написан с его исполь­зовани­ем, был Worm.Win32.Flame. Для боль­шей час­ти ком­понен­тов это­го чер­вя логика вер­хне­го уров­ня реали­зова­на имен­но на Lua. Все­го в Worm.Win32.Flame мож­но нас­читать 57 Lua-ком­понен­тов, каж­дый из которых выпол­няет какую‑либо вре­донос­ную фун­кцию. К при­меру, скрипт ATTACKOP _ JIMMY _ PRODS.lua про­изво­дит ата­ку на дру­гой ПК, скрипт с наз­вани­ем casafety.lua слу­жит для обна­руже­ния анти­вирус­ного ПО, CRUISE _ CRED.lua — для кра­жи учет­ных дан­ных, а euphoria.lua экс­плу­ати­рует уяз­вимость в LNK-фай­лах.

Часть списка Lua-скриптов из состава Worm.Win32.Flame
Часть спис­ка Lua-скрип­тов из сос­тава Worm.Win32.Flame
Кусочек скрипта ATTACKOP _ JIMMY _ PRODS.lua
Ку­сочек скрип­та ATTACKOP _ JIMMY _ PRODS.lua
 

Заключение

Как показы­вает пов­седнев­ная прак­тика вирус­ных ана­лити­ков, вре­донос­ный код мож­но написать на чем угод­но, и в кол­лекци­ях сэм­плов вре­донос­ного кода мно­гих анти­вирус­ных ком­паний встре­чают­ся весь­ма экзо­тичес­кие образцы, написан­ные, к при­меру, на встро­енном язы­ке прог­рамми­рова­ния сис­темы «1С:Пред­при­ятие» (Virus.1C.Bonny.a, Virus.1C.Bonny.b или Virus.1C.Tanga.а). Мы можем называть перечис­ленные в статье подел­ки стран­ными и нетипич­ными, но они есть, они работа­ют, а «1С:Пред­при­ятие», как извес­тно, уста­нов­лено на очень боль­шом количес­тве компь­юте­ров нашей родины…

Virus.1C.Tanga.а на VirusTotal
Virus.1C.Tanga.а на VirusTotal
Кусочек кода Virus.1C.Tanga.а
Ку­сочек кода Virus.1C.Tanga.а

Оставить мнение