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

info

Это близ­кий к тек­сту перес­каз пос­та Windows Shortcut (LNK) Malware Strategies из бло­га под­разде­ления Unit 42 ком­пании Palo Alto Networks. Весь текст статьи дос­тупен для чте­ния без плат­ной под­писки.

Итак, фай­лы ярлы­ков в Windows име­ют рас­ширение .lnk и слу­жат вир­туаль­ными ссыл­ками, которые поз­воля­ют быс­тро добирать­ся до дру­гих фай­лов без нуж­ды копать­ся в пап­ках. Эта гиб­кость дела­ет ярлы­ки мощ­ным ору­жием в руках хакеров: ярлык мож­но зас­тавить исполнять вре­донос­ный кон­тент или мас­кировать­ся под легитим­ные фай­лы, что­бы обма­нуть поль­зовате­лей и зас­тавить их слу­чай­но запус­тить мал­варь.

В 2023 году спе­циалис­ты Unit 42 при иссле­дова­нии мал­вари нас­читали 21 098 злов­редных фай­лов LNK, а в 2024 эта циф­ра под­ско­чила до 68 392. По сво­им дей­стви­ям LNK-вре­доно­сы делят­ся на четыре катего­рии:

  • за­пуск экс­пло­итов;
  • за­пуск фай­лов с дис­ка;
  • за­пуск скрип­тов из аргу­мен­тов;
  • за­пуск овер­леев.

Мы деталь­но раз­берем все эти тех­ники с при­мера­ми.

Простейшая проверка

Быть начеку сей­час нуж­но не толь­ко адми­нис­тра­торам, но и прос­тым поль­зовате­лям, осо­бен­но ког­да из интерне­та был ска­чан неиз­вес­тный файл LNK.

Фай­лы вре­донос­ного ПО в фор­мате LNK могут иметь зна­комые знач­ки либо наз­вания, которые ими­тиру­ют доверен­ные при­ложе­ния или докумен­ты, что­бы обма­нуть поль­зовате­лей и зас­тавить их открыть файл. Что­бы выявить такие угро­зы, вни­матель­но изу­чи свой­ства фай­ла, осо­бен­но его рас­положе­ние.

Для это­го щел­кни пра­вой кноп­кой мыши на LNK-фай­ле и выбери «Свой­ства». Если путь к цели выг­лядит необыч­но (нап­ример, ука­зыва­ет на неиз­вес­тные дирек­тории или слиш­ком длин­ный, воз­можно, с подоз­ритель­ными аргу­мен­тами), избе­гай выпол­нения это­го фай­ла.

 

Что такое файлы LNK?

Windows исполь­зует фай­лы LNK, так­же извес­тные как shell links или ярлы­ки, что­бы быс­тро соз­давать ссыл­ки на фай­лы, пап­ки или при­ложе­ния, раз­бро­сан­ные по раз­ным мес­там на компь­юте­ре. Отли­чить их про­ще прос­того бла­года­ря малень­кой стре­лоч­ке в ниж­нем левом углу.

Фай­лы LNK поз­воля­ют запус­кать прог­раммы без необ­ходимос­ти ковырять­ся в пап­ках в поис­ках экзешни­ка, зап­рятан­ного глу­боко где‑нибудь в C:\Program Files\[Имя программы]\[xxx].exe. Но LNK может ссы­лать­ся не толь­ко на прог­раммы — он без проб­лем откры­вает и дру­гие фай­лы, нап­ример, PDF-докумен­ты или JPEG-кар­тинки. Двой­ной клик по ярлы­ку LNK рав­носилен двой­ному кли­ку по самому фай­лу. Удоб­но, прав­да?

Хо­тя фай­лы LNK име­ют рас­ширение .lnk, которое вид­но в коман­дной стро­ке, Windows никог­да не покажет это рас­ширение на рабочем сто­ле или в «Про­вод­нике». Нап­ример, файл LNK с име­нем Invoice.lnk будет отоб­ражать­ся прос­то как Invoice.

Соз­дать LNK-файл в Windows мож­но раз­ными спо­соба­ми. Самый прос­той — клик­нуть в «Про­вод­нике» пра­вой кноп­кой по фай­лу или пап­ке, затем в кон­текс­тном меню выб­рать «Показать допол­нитель­ные парамет­ры» и «Соз­дать ярлык».

По­явля­ется окно «Соз­дать ярлык», где мож­но выб­рать мес­тополо­жение объ­екта.

Мож­но пой­ти и дру­гим путем: ско­пиро­вать файл и вос­поль­зовать­ся опци­ей «Вста­вить ярлык», что соз­даст LNK, ведущий к нуж­ному фай­лу.

Еще мож­но клик­нуть пра­вой кноп­кой мыши на фай­ле, выб­рать «Отпра­вить», а потом «Рабочий стол (соз­дать ярлык)».

Ес­ли щел­кнуть пра­вой кноп­кой мыши по фону «Про­вод­ника», мож­но выб­рать «Соз­дать» и «Ярлык». Появит­ся окно соз­дания ярлы­ка, где мож­но ука­зать путь к нуж­ной тебе прог­рамме.

Файл со ссылкой на Microsoft Edge в стандартной установке Windows
Файл со ссыл­кой на Microsoft Edge в стан­дар­тной уста­нов­ке Windows

На скри­не выше ты видишь основные парамет­ры и поля LNK-фай­ла. Самое важ­ное поле — это Target, где хра­нит­ся зна­чение:

C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe

Та­ким обра­зом, этот LNK-файл поз­воля­ет запус­тить Microsoft Edge.

На пер­вый взгляд LNK-фай­лы могут показать­ся прос­тыми, но их гиб­кость откры­вает поле для раз­ных зло­упот­ребле­ний.

Типичный зловредный ярлык
Ти­пич­ный злов­редный ярлык

Фор­мат LNK может вклю­чать аргу­мен­ты коман­дной стро­ки для выпол­нения целей (отсю­да и наз­вание shell links). Как вид­но в поле «Цель» на скрин­шоте выше, зло­умыш­ленни­ки могут исполь­зовать эти аргу­мен­ты, что­бы ска­чать и запус­тить вре­донос­ный код.

Кро­ме того, знач­ки LNK-фай­лов нас­тра­ивают­ся, из‑за чего мож­но лег­ко оши­бить­ся и клик­нуть на злов­редный LNK. На скрин­шоте выше показа­но, что хотя LNK ука­зыва­ет на batch-файл, его икон­ка выг­лядит как тек­сто­вый файл.

При этом файл с наз­вани­ем PASSWORD_HERE.txt.lnk отоб­ража­ется на рабочем сто­ле или в «Про­вод­нике» прос­то как PASSWORD_HERE.txt.

 

Ключевые для LNK-вредоносов структуры

Фай­лы LNK исполь­зуют бинар­ный фор­мат. Давай раз­берем их струк­туру.

Здесь опци­ональ­ные поля зак­лючены в квад­ратные скоб­ки. Все струк­туры, кро­ме EXTRA_DATA, начина­ются с ука­зания их раз­мера, за которым сле­дует содер­жимое. Поле STRING_DATA делит­ся на пять под­полей, два из которых жиз­ненно важ­ны для вре­доно­сов, работа­ющих с LNK.

Что инте­рес­но, для валид­ного LNK-фай­ла нужен толь­ко заголо­вок. Сле­дуя логике, файл LNK с одним лишь заголов­ком не дол­жен при­чинять вре­да, ведь без содер­жимого он не смо­жет ничего запус­тить. По дан­ным Unit 42, осно­ван­ным на ана­лизе 30 000 злов­редных LNK-фай­лов, те, что содер­жат толь­ко заголо­вок, с боль­шой веро­ятностью безопас­ны.

В фай­лах LNK три поля, нап­рямую свя­зан­ные с раз­решени­ем и выпол­нени­ем цели, выделе­ны на схе­ме выше зеленым фоном:

  • LINKTARGET_IDLIST — спи­сок эле­мен­тов в обо­лоч­ке, ука­зыва­ющих на цель;
  • RELATIVE_PATH — отно­ситель­ный путь к цели от мес­та, где находит­ся этот LNK;
  • COMMAND_LINE_ARGUMENTS — аргу­мен­ты, которые переда­ются цели.

Боль­шинс­тво вре­донос­ных фай­лов LNK мож­но вычис­лить, про­веряя три клю­чевые поля. Ана­лиз Unit 42 это под­твержда­ет.

Процентное распределение разных структур LNK в исследованных вредоносах
Про­цен­тное рас­пре­деле­ние раз­ных струк­тур LNK в иссле­дован­ных вре­доно­сах

В стро­ке LTList поле LINKTARGET_IDLIST при­сутс­тву­ет поч­ти всег­да — оно встре­чает­ся в 99,53% вре­донос­ных LNK. Это основное поле, которое исполь­зует­ся при поис­ке цели.

RP или RELATIVE_PATH (отно­ситель­ный путь) — это тоже популяр­ная шту­ка, зас­ветив­шаяся в 75,49% зло­дей­ских LNK. Если LINKTARGET_IDLIST вдруг отсутс­тву­ет или битый, RELATIVE_PATH всег­да поможет най­ти нуж­ную цель.

По­ле COMMAND_LINE_ARGUMENTS (обоз­начено как CLA) встре­чает­ся не так уж и час­то — все­го в 35,52% вре­донос­ных LNK. Это поле может при­менять­ся для переда­чи аргу­мен­тов и рас­простра­нения злов­редных скрип­тов. Одна­ко, как видишь, про­цент вре­донос­ных LNK, содер­жащих хотя бы один из подоб­ных эле­мен­тов, порази­тель­но высок.

Да­вай поб­лиже пос­мотрим на те три поля, которы­ми поль­зуют­ся зло­умыш­ленни­ки.

 

Идентификатор списка целей (LINKTARGET_IDLIST)

По­ле LINKTARGET_IDLIST име­ет сле­дующую струк­туру:

Размер поля
Shell Item [0]
Shell Item [1]
Shell Item [2]
...

LINKTARGET_IDLIST ука­зыва­ет, где находит­ся цель (то есть объ­ект, на который ссы­лает­ся файл LNK). Как намека­ет наз­вание это­го поля, его струк­тура — это спи­сок эле­мен­тов обо­лоч­ки Windows.

Структура LINKTARGET_IDLIST для LNK-файла Microsoft Edge
Струк­тура LINKTARGET_IDLIST для LNK-фай­ла Microsoft Edge

В этом поле могут пря­тать­ся раз­ные типы эле­мен­тов обо­лоч­ки Windows, но в фай­лах LNK чаще все­го встре­чает­ся ROOT, VOLUME и FILE ENTRY.

  • ROOT — встре­чает­ся поч­ти всег­да и содер­жит в себе CLSID (он же GUID) для какой‑нибудь сис­темной пап­ки, играя роль отправ­ной точ­ки пути к цели. В нашем при­мере IDList[0] — это ROOT.
  • VOLUME — час­то ука­зыва­ет на том дис­ка, нап­ример, бук­ву дис­ка в Windows, и может так­же задавать сис­темную пап­ку через ее CLSID. У нас это VOLUME.
  • FILE ENTRY — пред­став­ляет собой отдель­ный ком­понент пути к цели. В нашем при­мере все от IDList[1] до IDList[6] — это FILE ENTRY.

Ко­роче говоря, кор­рек­тный LINKTARGET_IDLIST обыч­но сос­тоит из цепоч­ки объ­ектов обо­лоч­ки, вклю­чающей ROOT, VOLUME и/или эле­мен­ты FILE ENTRY, которые точ­но ука­жут на цель.

 

Относительный путь

RELATIVE_PATH име­ет сле­дующую струк­туру:

Количество символов
Строка относительного пути

RELATIVE_PATH — это часть поля STRING_DATA, пред­став­ляющая собой стро­ку в фор­мате ASCII или Unicode. Это путь к цели отно­ситель­но фай­ла LNK, который помога­ет опре­делить цель, если LINKTARGET_IDLIST не сра­баты­вает (нап­ример, если цель недей­стви­тель­на).

 

Аргументы командной строки

STRUCTURE_COMMAND_LINE_ARGUMENTS име­ет сле­дующую струк­туру:

Количество символов
Аргумент командной строки
Строка

COMMAND_LINE_ARGUMENTS — это еще один ком­понент поля STRING_DATA. Он отве­чает за переда­чу аргу­мен­тов коман­дной стро­ки для исполня­емо­го фай­ла. В этом поле может быть обыч­ная ASCII-стро­ка или Unicode-стро­ка. Это зна­чение добав­ляет­ся к пути цели, что­бы соб­рать пол­ную коман­ду для выпол­нения.

 

Категории LNK-вредоносов и примеры

Ата­ки через фай­лы LNK мож­но поделить на четыре катего­рии:

  • экс­пло­иты LNK;
  • за­пуск вре­донос­ных фай­лов;
  • вы­пол­нение скрип­тов через аргу­мен­ты;
  • за­пуск кон­тента через наложе­ние.
 

Эксплоиты LNK

Пер­вая боль­шая раз­новид­ность LNK-мал­вари — это экс­пло­иты. Такие злов­реды пред­став­ляют собой спе­циаль­но пов­режден­ные фай­лы LNK, соз­данные для экс­плу­ата­ции кон­крет­ных уяз­вимос­тей Windows.

Как толь­ко сис­тема откры­вает пап­ку, содер­жащую файл LNK, она тут же начина­ет его обра­баты­вать. Это зна­чит, что LNK, соз­данные на базе экс­пло­итов, могут сра­зу ата­ковать сис­тему — еще до запус­ка. Конеч­но, в Microsoft уже залата­ли боль­шинс­тво таких дыр, так что злов­редные LNK ста­ли ред­костью. Но вирусы все еще иног­да целят­ся в ста­рые уяз­вимые вер­сии Windows, к тому же битые LNK вызыва­ют проб­лемы при ана­лизе исполь­зующей их мал­вари. Так что важ­но уметь отли­чать боевой LNK от дру­гих пов­режден­ных экзем­пля­ров.

По наб­людени­ям Unit 42 за мал­варью, исполь­зующей LNK-фай­лы, самой популяр­ной у зло­умыш­ленни­ков ока­залась уяз­вимость CVE-2010-2568. Хакеры исполь­зуют сра­зу два вида экс­пло­итов, что­бы выжать из нее мак­симум.

Вариант 1

Пер­вый вари­ант экс­пло­итов пря­чет­ся в нед­рах ROOT (1) внут­ри LINKTARGET_IDLIST, а точ­нее — в бло­ке рас­ширений (ExtraBlock) узла ROOT.

Пример эксплоита
При­мер экс­пло­ита

Тут сра­зу бро­сают­ся в гла­за два стран­ных момен­та. Во‑пер­вых, наличие бло­ка рас­ширения в ROOT-узле — явле­ние ред­кое, так что раз­мер под slDLlist дол­жен быть при­мер­но 20 байт. Если боль­ше — это уже подоз­ритель­но. Мы же видим зна­чение 55 — вот это и вызыва­ет воп­росы.

Во‑вто­рых, раз­мер ExtraBlock нас­толь­ко велик, что на фоне обыч­ного LNK он выг­лядит прос­то гигант­ским. В нашем слу­чае раз­мер ExtraBlock даже боль­ше, чем раз­мер самого кор­невого узла, что, естес­твен­но, при­водит к кра­шу. У нас эта циф­ра дос­тигла 57 312 байт.

Вариант 2

Этот вари­ант ком­про­мета­ции пря­чет­ся в узле VOLUME спис­ка LINKTARGET_IDLIST.

Пример эксплоита
При­мер экс­пло­ита

Зна­чение IDListSize под LINKTARGET_IDLIST в этом при­мере замет­но боль­ше, чем у IDListSize в нор­маль­ных LNK. В дан­ном слу­чае зна­чение пре­выша­ет раз­мер самого фай­ла. Здесь IDListSize сос­тавля­ет 65 280 байт, тог­да как сам файл занима­ет все­го 198 байт. Такая ано­малия может при­вес­ти либо к падению сис­темы, либо к экс­плу­ата­ции уяз­вимос­тей.

Ха­керы обыч­но исполь­зуют экс­пло­иты в виде LNK-мал­вари, что­бы откры­вать «Панель управле­ния» и обой­ти бе­лый спи­сок раз­решен­ных фай­лов «Панели управле­ния» (он же CPL allow list). В этом при­мере под узлом VOLUME зна­чит­ся такой CLSID:

{21EC2020-3AEA-1069-A2DD-08002B30309D}

Это CLSID для «Всех эле­мен­тов Панели управле­ния».

 

Запуск вредоносных файлов

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

Зловредные цели

Цель у такого рода LNK-вре­доно­сов прос­та: запус­тить код мал­вари, раз­мещен­ный на дис­ке.

Этот обра­зец пред­назна­чен для выпол­нения вре­донос­ного фай­ла с наз­вани­ем desktop.ini.exe, который поселил­ся в пап­ке «Заг­рузки» поль­зовате­ля. В дан­ном слу­чае сам по себе LNK не несет вирус­ной угро­зы, но ведет к вре­донос­ному содер­жимому.

Цели в системе

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

Цель вредоносного LNK
Цель вре­донос­ного LNK

Этот LNK-файл запус­кает через wscript.exe, лежащий в той же пап­ке, что и сам LNK, тек­сто­вый файл Video.3gp с закоди­рован­ным скрип­том VBS. Сам LNK здесь не вре­донос­ный — опас­ность пред­став­ляет имен­но содер­жимое Video.3gp.

Вы­бор цели в сис­теме зависит от типа фай­ла с вре­донос­ным содер­жимым. Нап­ример, если исполь­зует­ся вре­донос­ная DLL, в бой пой­дет rundll32.exe. Дан­ные Unit 42 показы­вают, что LNK-мал­варь чаще все­го исполь­зует сле­дующие сис­темные цели:

  • powershell.exe;
  • cmd.exe;
  • rundll32.exe;
  • conhost.exe;
  • wscript.exe;
  • forfiles.exe;
  • mshta.exe.
Наиболее распространенные системные цели
На­ибо­лее рас­простра­нен­ные сис­темные цели

Сис­темные цели так­же час­то исполь­зуют­ся при выпол­нении скрип­тов, скры­тых в аргу­мен­тах.

 

Выполнение скриптов прямо в параметрах

По­ле COMMAND_LINE_ARGUMENTS может содер­жать стро­ки любого раз­мера, в том чис­ле туда мож­но запих­нуть целый вре­донос­ный скрипт. Целью LNK мож­но уста­новить интер­пре­татор скрип­тов или ути­литу, которая уме­ет исполнять коман­ды. Тог­да вирусо­писа­тель смо­жет зас­тавить LNK выпол­нить вре­донос­ный код из поля COMMAND_LINE_ARGUMENTS.

Вот основные цели, которые зло­умыш­ленни­ки могут ата­ковать для внед­рения сво­их скрип­тов.

Цель 1: PowerShell или Командная строка

Са­мые популяр­ные инс­тру­мен­ты, которые такой LNK-вре­донос исполь­зует для выпол­нения команд, — это коман­дная стро­ка (cmd.exe) и PowerShell (powershell.exe). Они обыч­но идут в ком­плек­те с Windows. Кро­ме того, они могут кос­венно вызывать дру­гие сис­темные цели (нап­ример, коман­ду start в cmd.exe).

Ис­сле­дова­ние Unit 42 показа­ло, что cmd.exe и powershell.exe вмес­те сос­тавля­ют более 80% целей для исполне­ния скрип­тов через аргу­мен­ты в зло­наме­рен­ных LNK.

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

Ни­же показан при­мер мал­вари, замас­кирован­ной под файл LNK, который запус­кает коман­ду PowerShell для выпол­нения вре­донос­ного скрип­та через поле COMMAND_LINE_ARGUMENTS.

Этот обра­зец кос­венно запус­кает PowerShell через выпол­нение cmd.exe. Пол­ная стро­ка вре­донос­ного PowerShell-скрип­та закоди­рова­на в Base64.

Пос­ле рас­шифров­ки получит­ся скрипт PowerShell.

За­пуск это­го LNK заг­рузит и запус­тит вре­донос­ную DLL. Коман­да rundll32 $das32r422, _entry@16 здесь выг­лядит подоз­ритель­но, и, заг­лянув в DLL, мож­но убе­дить­ся, что мы име­ем дело с мал­варью.

Цель 2: Conhost

Инс­тру­мент Console Window Host (conhost), извес­тный как conhost.exe, управля­ет вво­дом/выводом коман­дных инс­тру­мен­тов вро­де cmd.exe. Хакеры могут исполь­зовать conhost как родитель­ский про­цесс, что­бы скрыть выпол­нение вре­донос­ного кода от глаз поль­зовате­ля. Иног­да мож­но нат­кнуть­ся на вре­донос­ные LNK, которые запус­кают скрип­ты через conhost.exe.

Пример вредоносного LNK, использующего conhost.exe
При­мер вре­донос­ного LNK, исполь­зующе­го conhost.exe
Полное значение переменной COMMAND_LINE_ARGUMENTS
Пол­ное зна­чение перемен­ной COMMAND_LINE_ARGUMENTS

Этот запутан­ный скрипт коман­дной стро­ки собира­ет и выпол­няет код на JavaScript. Ниже — рас­шифро­ван­ный код.

На этом эта­пе ана­литик может опре­делить, вре­доно­сен ли файл, гля­нув на домен или содер­жимое, которое тянет­ся из сети.

Цель 3: Forfiles

Ко­ман­да forfiles в Windows напоми­нает коман­ду find в UNIX. Она занима­ется поис­ком фай­лов по задан­ным шаб­лонам наз­ваний. Но ее фиш­ка в том, что с помощью аргу­мен­та /c мож­но выпол­нять про­изволь­ные коман­ды — forfiles запус­тит ука­зан­ную коман­ду для каж­дого най­ден­ного фай­ла.

Пример вредоносного LNK, использующего forfiles
При­мер вре­донос­ного LNK, исполь­зующе­го forfiles

Этот LNK при­меня­ет forfiles, что­бы запус­тить вре­донос­ный скрипт на PowerShell, который спря­тан в перемен­ной COMMAND_LINE_ARGUMENTS.

Ко­ман­да PowerShell запус­кает уда­лен­ный файл HTA с помощью mshta.exe.

 

Исполнение наложенного контента

Спе­циалис­ты Unit 42 отме­чают, что час­то видят злов­редные LNK-фай­лы с «хвос­том» из допол­нитель­ных дан­ных пос­ле офи­циаль­ного кон­ца фай­ла. Так как добав­ление дан­ных никак не меша­ет пар­сингу, замутить LNK-мал­варь мож­но, прос­то прис­тегнув туда вре­донос­ные скрип­ты или дру­гие полез­ные наг­рузки. Это мож­но наз­вать «овер­лей‑кон­тентом». Windows на такие довес­ки не обра­щает вни­мание, поэто­му что­бы скрип­ты сра­бота­ли как надо, вирусо­писа­тели шаманят с парамет­рами коман­дной стро­ки в поле COMMAND_LINE_ARGUMENTS.

Способ 1: команды Find и Findstr

Ути­литы коман­дной стро­ки Windows find и findstr при­меня­ются для поис­ка опре­делен­ных тек­сто­вых строк в фай­лах, как grep в UNIX. Злов­редные LNK могут хит­ро исполь­зовать эти коман­ды, что­бы отыс­кать точ­ное мес­тополо­жение вре­донос­ного кон­тента в овер­лее.

Ни­же — при­мер LNK-вре­доно­са, который исполь­зует коман­ду findstr рекур­сивно, что­бы спря­тать и запус­тить злов­редный код.

Этот вре­донос­ный LNK называ­ется 2023_Annual_Report.pdf.lnk, поэто­му для поль­зовате­ля, который не догада­ется пос­мотреть под­робнос­ти в «Про­вод­нике», он будет выг­лядеть как документ PDF. Вот так выг­лядит его струк­тура:

P1: Содержимое LNK
P2: PDF в Base64
P3: Скрипт в Base64

Сек­ции P2 и P3 — добав­ленный мал­варью кон­тент.

По­ле COMMAND_LINE_ARGUMENTS содер­жит коман­дный скрипт. Его код — ниже.

В рас­шифро­ван­ном скрип­те findstr ищет стро­ку CiRFcnJvckFjdGlvbl пря­мо в злов­редном LNK. Сов­падение най­дет­ся в бло­ке P3, который пред­став­ляет собой закоди­рован­ный скрипт PowerShell.

Начало расшифрованного контента
На­чало рас­шифро­ван­ного кон­тента

Этот скрипт ска­чива­ет дан­ные с сер­вера зло­умыш­ленни­ка по адре­су pdf-online[.]top. При­чем, преж­де чем акти­виро­вать вре­донос­ный код, он сна­чала рас­кодиру­ет и откры­вает PDF-файл в P2. Сам по себе PDF никакой угро­зы не несет.

Встроенный безобидный PDF
Встро­енный безобид­ный PDF

Хо­тя этот при­мер выпол­няет вре­донос­ный PowerShell-скрипт, метод с findstr будет работать и с дру­гим вре­донос­ным содер­жимым, нап­ример, с VBS или коман­дным скрип­том. Этот метод сра­бота­ет и с вре­донос­ным бинар­ным кодом, закоди­рован­ным в Base64 и записан­ным в овер­лей.

Способ 2: MSHTA

Пе­рехо­дим ко вто­рому спо­собу наложе­ния кон­тента. Зло­умыш­ленни­ки час­то исполь­зуют вре­донос­ные фай­лы HTML Application (HTA) для рас­простра­нения мал­вари, и в слу­чае с LNK-вре­доно­сами при­емы с HTA тоже час­то идут в ход. Windows довер­чиво запус­кает такие фай­лы через mshta.exe, при­чем mshta.exe нас­толь­ко тер­пелив, что про­пус­тит любое содер­жимое, пока не нат­кнет­ся на иско­мый про­лог hta:application.

Ког­да злов­редный HTA прик­реплен к LNK как нак­ладное содер­жимое, не нуж­но ломать голову, с какого мес­та начина­ется HTA. Дос­таточ­но одной прос­той коман­ды: mshta [название малвари].lnk.

Поля образца LNK-малвари, использующей HTA-оверлеи
По­ля образца LNK-мал­вари, исполь­зующей HTA-овер­леи

Струк­тура здесь прос­тая:

P1: Содержимое LNK
P2: HTA-скрипт

Ни­же — COMMAND_LINE_ARGUMENTS это­го при­мера.

Вредоносный скрипт, запускающий содержимое HTA через оверлей
Вре­донос­ный скрипт, запус­кающий содер­жимое HTA через овер­лей

Он прос­то запус­кает mshta, переда­вая самого себя в качес­тве аргу­мен­та для mshta.

Способ 3: Команды и фишки PowerShell

Ко­ман­ды PowerShell и встро­енные воз­можнос­ти вро­де Select-String, Get-Content и .Substring отлично под­ходят для поис­ка или извле­чения кон­тента. При­чем эти коман­ды мож­но закоди­ровать так, что­бы их было слож­нее засечь.

Да­вай рас­смот­рим при­мер мал­вари в фор­мате LNK, которая исполь­зует трюк с PE-фай­лом, закоди­рован­ным в Base64 и встав­ленным в качес­тве овер­лея.

Образец вредоноса
Об­разец вре­доно­са

Струк­тура:

P1: Содержимое LNK
P2: PE, закодированный в Base64

По­ле COMMAND_LINE_ARGUMENTS содер­жит скрипт PowerShell с кон­тентом, закоди­рован­ным в Base64.

Со­дер­жимое перево­дит­ся из Base64 в текст.

Раскодированное содержимое
Рас­кодиро­ван­ное содер­жимое

Вот что дела­ет эта коман­да:

  1. Ищет файл, закан­чива­ющий­ся на .lnk.
  2. Ищет в тек­сте пат­терн BS:D с помощью коман­ды Select-String.
  3. Рас­кодиру­ет из Base64 все, что идет пос­ле пат­терна BS:D.
  4. Сох­раня­ет рас­кодиро­ван­ный текст в файл в дирек­тории TEMP и запус­кает его с помощью коман­ды Start-Process.

Ни­же — единс­твен­ный пат­терн BS:D в фай­ле LNK.

Начало оверлейного контента в образце вредоноса
На­чало овер­лей­ного кон­тента в образце вре­доно­са

Пос­ле BS:D идет тек­сто­вый шаб­лон в кодиров­ке Base64, который очень час­то сос­тавля­ет пер­вые три бай­та исполня­емо­го (PE) фай­ла (4d 5a 90). Содер­жимое, начина­ющееся с TVqQ, — это P2-овер­лей, не явля­ющий­ся частью содер­жания LNK. Декоди­руешь эту стро­ку из Base64 — получа­ешь вре­донос­ный PE-файл.

Сравнение способов выполнения оверлей-контента

У каж­дой из этих трех тех­ник выпол­нения наложен­ного кон­тента свои плю­сы. Кон­крет­нее:

  • find/findstr — уни­вер­саль­ная и прос­тая в осво­ении тех­ника. Под­держи­вает раз­ные шаб­лоны‑раз­делите­ли и раз­нооб­разные полез­ные наг­рузки. Плюс ко все­му, коман­ду find мож­но шиф­ровать стан­дар­тны­ми метода­ми обфуска­ции скрип­тов.
  • mshta — реали­зовать про­ще прос­того, ведь mshta.exe нас­толь­ко все­яден, что про­игно­риру­ет любой не-HTA кон­тент. Дос­таточ­но запус­тить mshta, что­бы выпол­нить файл LNK. Минус — полез­ная наг­рузка дол­жна быть HTA-скрип­том.
  • PowerShell (коман­ды/встро­енные воз­можнос­ти) — реали­зация пос­ложнее, зато мож­но исполь­зовать хар­дкор­ную обфуска­цию, что­бы скрыть или замас­кировать вре­донос­ное содер­жание в нак­ладке.

Эти три методи­ки сос­тавля­ют при­мер­но 95% от всех, которые спе­циалис­ты Unit 42 видели при наборе дан­ных. На диаг­рамме ниже все наг­лядно раз­ложено.

Распределение техник выполнения оверлея в образцах LNK-малвари
Рас­пре­деле­ние тех­ник выпол­нения овер­лея в образцах LNK-мал­вари

Ос­таль­ные 5,6% — это раз­нооб­разные тех­ники для поис­ка и исполне­ния овер­лей‑кон­тента. Тут тебе и фик­сирован­ные сме­щения, и запуск прог­рамм‑заг­рузчи­ков. Мощь PowerShell поз­воля­ет хакерам при­менять целый арсе­нал методов для выпол­нения вре­донос­ного кода в овер­лее — гра­ницы тут толь­ко в фан­тазии самого зло­умыш­ленни­ка.

 

Выводы

Итак, мы разоб­рали четыре типа мал­вари LNK. Эти зна­ния при­годят­ся не толь­ко спе­циалис­там по безопас­ности, но и ана­лити­кам дан­ных. Если ты исполь­зуешь Windows, про­веряй любой подоз­ритель­ный .lnk, преж­де чем клик­нуть два раза. Не дай мал­вари тебя про­вес­ти!

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии