Не так часто тут бывают ретроспективы, но в этот раз я почему-то решил ее провести. Есть о чем рассказать и чем поделиться. Обещаю, что этот пост не будет повествованием о моих дивных творческих планах, о прекрасных днях проведенного года и всем таком прочем, что совершенно бесполезно для случайного читателя. Попробую нанести только непоправимую пользу, рассказать об интересных находках в этом году и поразмышлять о вероятном будущем мобильной индустрии.
Книги
Это год был как-то не богат на интересные книги. Все еще жду Android Internals Vol III, которую действительно хочется прочитать. Но несколько заметных для меня вещей все же покажу.
Practical Binary Analysis (Практический анализ двоичных файлов)
readelf
и objdump
. Также довольно интересным показалось введение в теорию дизассемблирования, где автор описывает проблемы этой области знаний и примеры решения этих проблем. В общем книга однозначно стоит внимания.
The Hardware Hacking Handbook (Аппаратный хакинг)
MacOS and iOS Internals
Инструменты
Все программные инструменты, которые мне встретились в этом году обычно имели вид полуразобранных и полурабочих прототипов которые мы с командой пытались довести до ума. Часто безуспешно =) Но вот кое-что интересное и полезное из аппаратного мне приобрести удалось. С них и начнем.
Программатор CH341
Крэш-курс по работе с flashrom
:
# Вставляем флешку в программатор и выполняем команду для определения чипа памяти
flashrom --programmer ch341a_spi
# Потом читаем содержимое
flashrom --programmer ch341a_spi -c <имя чипа из предыдущего пункта> --progress -r dump.bin
Также напечатал для него корпус чтобы чего-нибудь не замкнуло и не отвалилось:
Лабораторный блок питания Wanptek WPS3010H
Характеристики:
- Мощность: 300Вт
- Выходное напряжение: до 30В
- Выходной ток: до 10А
Taint, AST и все что рядом
Сделал очередной заход на оценку работоспособности утилит для работы с исходным и декомпилированным Java кодом. Из того что посмотрел, и что не очень впечатлило пока что:
- FlowDroid - подающий надежды инструмент, который с моей точки зрения пока не идет дальше подавания надежд. Как-то работает, но слишком коряво на мой взгляд. Хотя и заявляется как инструмент для Android, по факту мало какие цепочки строит пока ему не объяснишь. При чем одно дело объяснять какие-то специфические вещи, но он не умеет даже довольно базовые.
- gadgetinspector - интересный инструмент, но как и все подобное - трацидионно плохо работает под Android, особенно если приложение написано на Kotlin. Сильно фолзит и вообще напоминает скорее прототип чем что-то полноценное.
Тем не менее, кажется, что эти инструменты вполне можно взять, допилить и использовать. Что, впрочем требует определенного времени на погружение в архитектуру этих инструментов и понимания как они делают свою работу. А в случае с FlowDroid это довольно нетривиальная область знаний в целом.
На фоне этих двух “подающих надежды прототипов”, библиотека JavaParser выглядит весьма итересной и удобной в использовании. Нашел ее уже под занавес года и пока не успел разобраться в деталях, но понравилось то, что она обладает вполне всеядным парсером в который можно закидывать даже декомпилированный код и библиотека его разберет, до какой-то степени. Результат выглядит полезным для дальнейшего использования в собственных инструментах. Также приятно, что авторы библиотеки выпустили небольшую электронную книгу про нее, где рассказывается как все устроено и как с ней правильно работать. Если смогу сделать с этой библиотекой что-то разумное, то напишу отдельную статью как ее приложить к анализу безопасности приложений под Android.
Технологии
AI
Все что делалось в 2024-м, просто обязано было содержать AI/LLM. Без вариантов. Олды помнят, что когда-то точно также было с блокчейном. Пихали куда только можно, вели умные беседы про “честное голосование” и прочие приятные во всех отношениях решения. Правда чутка наевшись говна наигравшись, люди поняли, что похоже основной его профит в криптовалютах и как будто бы успокоились. Всплывают иногда желатели делать заправочные станции на смарт-контрактах, но их все меньше на мой взгляд =) Та же история сейчас с LLM. Любой очередной новый, блестящий инструмент для решения всех проблем обязательно является “AI powered”. Собственно львиная доля таких тулзов состоит из трех основных китов: поля CHATGPT_KEY
, файлика prompt.txt
и поделки на питоне которая передает это все на сервер и печатает ответ. Сделать с этим явлением ничего нельзя. Только дождаться пока все успокоятся. Следующей “big thing” думаю будет квантовый компьютер “ломающий интернет”.
Но у “AI бума” есть и положительные стороны. Все это стало сильно доступнее для человека не желающего глубоко погружаться в нюансы дата-сатанизма и смежные дисциплины. Для тех, кто с технологиями не очень, есть ужасающее количество сервисов и ботов, которые дают доступ к сокровенным тайным знаниям, которые хранит ChatGPT. Для более подкованных есть штуки вроде LM Studio, которые позволяют гонять модельки у себя локально и получать неплохой буст производительности при умелом использовании. Чем еще мне нравится конкретно LM Studio, так это возможностью локально поднять API-шку для любой выбранной модели, что позволяет писать свои инструменты не покупая CHATGPT_KEY
®.
Кросс-платформенные мобильные приложения
Наверное мне дико везло, но в этом году я встречал очень мало кросс-платформенных приложений на проектах. В основном нативные попадались. Аналогично на багбаунти. С чем это связано мне не очень понятно, но может быть люди тоже наигрались в чудо-технологии и решили, что ну его нафиг? Правда под конец года мне принесли интересную точку зрения на это все: скоро все перейдут от нативных приложений к PWA, потому что их просто писать и легко скейлить. И вроде как все страны третьего мира прогрессивное человечество семимильными шагами стремиться перейти на эту технологию. Чтож, такие обещания я слышал лет 7-9 назад, и что-то революции пока не произошло. Продолжаем наблюдение.
Уязвимости
Вот пара интересных уязвимостей которые хотел бы отметить в этом году:
- Malicious App Can Write/Delete Arbitrary Files in App Internal Storage (Flipper)
- Android Jetpack Navigation: Go Even Deeper
Что характерно, обе уязвимости не имеют идентификаторов CVE. По разным причинам. Но в целом все эти причины можно свести к одной: такова политика компании. И это очень плохо. Пол-беды, что те кто нашел эти уязвимости не получают никого публичного подтверждения своей работы (да-да, работать “на зачетку” все еще важно в современном мире). Основная проблема в том, что другие люди смогут узнать о таких уязвимостях только случайно. Ну или если автор начнет об этом рассказывать публично, а так делают далеко не все. А значит люди не сделают выводы и не получат полезный опыт. Зато у компании будет меньше CVE и вроде как она будет выглядеть более защищенной. Тут речь про Goolge конечно. Приложенька для Flipper-а хоть и достойна CVE по моему мнению, но все же не так критично ее отсутствие в случае этой уязвимости. При этом я регулярно вижу как Google выдает CVE на баги вроде этой:
Такое комментировать — только портить, но все же мне понравился комментарий одного из участников чата Android Guards на эту тему:
Я бы лучше не сказал.
Были и другие интересные события, которые хоть и остались без CVE, но зато получили публичную огласку и я рад, что имел к этому отношение.
Первое — мое выступление на Positive Hack Days этой весной, где я рассказывал как легко получить root права на чуде китайского автопрома — Haval Dargo. Записи выступления нет, поэтому получился в некотором роде эксклюзив, но проблема была обозначена широкому кругу людей и это главное.
Второе — взлом замка от ПВЗ в рамках багбаунти программы Wildberries. Ребята заморочились, и даже позвали людей с камерами чтобы сделать про это ролик. Так что все подробности смотрите там.
Кроме всего этого конечно же была куча уязвимостей на проектах и багбаунти о которых не могу рассказывать подробно, но поделюсь списком того, что мне в принципе встречалось в этом году:
- Выполнение произвольного кода в мобильных приложения. Очень редкий зверь надо сказать 😎
- SQL-инъекции на разных ресурсах. Казалось бы, 2024-й год уже давно, но увы. Все еще можно найти SQLi с правами SA;
- Мобильные приложения все еще хранят конфиденциальную инфу в доступных каталогах на sd-карте;
- Сервера все еще присылают избыточное количество полей в ответах и часто эти поля содержат конфиденциальную информацию;
- Интроспекция GraphQL тоже на месте. При чем на довольно популярных ресурсах;
- Обход аутентификации по пин-коду тоже встречался. И часто это проблема именно локальной реализации;
- Загрузка произвольных URL в WebView мобильных приложений. Сотни CTF-тасков сделано на этот счет, а проблема все еще актуальна;
- IDOR-ы всех цветов и размеров.
- Слишком слабые политики CORS хоть и встречаются реже, но не исчезли совсем;
- Чтение файлов из внутренней директории в мобильных приложениях;
- Состояние гонки (race condition) на всяких промокодах и прочем подобном функционале;
- Обход различных механизмов безопасности из-за ошибок в бизнес-логике;
- Захват аккаунта из-за автоматической подстановки авторизационных заголовков в WebView;
- Утечки персональных данных из-за публично доступных серверных логов.
- Ну и XSS конечно же. Куда ж без них? =)
Все остальное
Хотел это все оформить отдельными красивыми пунктами, но в итоге решил что это избыточно, и просто решил поделиться полезными сервисами и интересными блогами. Они все на разную тематику, но реалии современного IT таковы, что нужно постоянно изучать смежные области знаний чтобы оставаться актуальным как специалист. Это сложный путь, но на мой взгляд - самый правильный.
Полезные сервисы:
- Netlify — позволяет по-быстрому накидать PoC-сайт для эксплуатации web уязвимостей. Поддерживается автоматический деплой с GitLab например, что довольно удобно. Бесплатного тарифа хватает с головой;
- Generate Strings from Regular Expressions - с этой задачей хорошо справляется LLM, но порой это довольно избыточно и хватит такого простого сервиса. На вход принимает регулярку, а в ответ показывает подходящие под нее строки;
- Webcrack - деобфускатор JavaScript. Выручал меня множество раз. Можно гонять локально или использовать веб-приложение;
- Flatliner: Convert python programs into a single line - позволяет схлопнуть красивый python-скрипт в тяжело читаемую строку. Полезно чтобы прокинуть куда-то полезную нагрузку. Исходный код также доступен;
- Shodan Exploits - как Shodan только по эксплойтам. Ищет информацию сразу в нескольких источниках. Есть удобные фильтры по языкам программирования, авторам и т.п;
- Protobuf Decoder - онлайн декодер probobuf блобов. Требует оригинальных
.proto
файлов. Для сырого декодирования можно выполнить локальную командуprotoc --decode_raw < secret.pb
; - Exploit Notes - сборник различных техник эксплуатации разбитый по разделам. Неплохая альтернатива Hack Tricks;
- AttackerKB - монитор уязвимостей. В описаниях попадаются неплохие разборы конкретных CVE.
- SnykAdvisor: NPM — позволяет быстро “проверить здоровье” у
package.json
файла. Среди прочего показывает уязвимые компоненты и CVE к ним. Полезно при whitebox анализе;
Интересные блоги:
- James A. Chambers. Legendary Technology Blog - hardware/re
- RoboCoffe - hardware/re
- Aleph Research. Security Research by HCL Technologies - mobile/hardware/re
- The Twenty Percent - hardware/ml
- Order Of Six Angles - malware/re/mobile
- 8KSEC Engineering blog - malware/re/mobile
- Dana Epp’s Blog. Security (de)engineering for fun and profit - web/api
- Pyn3rd - web/api
- The Binary Hick - re/forensic
- Dimitrios Valsamaras(Senior security researcher@Microsoft) - re/malware/mobile
- Mobile Hacker - mobile/re/hardware
- SpiderLabs Blog - web/pentest
- Redfox Security Blog - web/mobile/pentest/etc
- natashenka. Hack those Tamagotchis! - hardware/re
- Reverse Engineering Blog - re
- Conviso Blog - re/mobile/web/etc/
- Folder: blog - re/mobile/web
Я намеренно не стал делать описание для блогов, потому что часто невозможно описать все что в них находится. Рекомендую пролистать их все, а если лень, то просто ориентируйтесь по названиям или тегам.
Вот так и закончился этот год. Благодарю читателей дочитавших до этих строк. Надеюсь вы нашли для себя что-то полезное.
С Новым Годом вас!
🎅🏻