Android Guards – Telegram
Android Guards
3.8K subscribers
93 photos
1 video
7 files
222 links
Статьи, исследования, полезные ссылки и многое другое из мира безопасности Android платформы и приложений. Только проверенный контент!

YouTube: https://www.youtube.com/c/AndroidGuards

Поблагодарить: https://news.1rj.ru/str/+oMgsdsq2ydY5MjQy
Download Telegram
Давненько ничего не выкладывал на YouTube и на то были причины. Но о них как-нибудь потом. По ссылке найдете лекцию по основам информационной безопасности, которую я читал в рамках "Робопрактики", которую компания red_mad_robot каждый год проводит для мобильных разработчиков. В лекции можно найти:

- Основные понятия из мира ИБ
- Моделирование злоумышленников и угроз
- Основы криптографии (симметричная, асимметричная, цифовые подписи, сертификаты, хэш-функции, KDF-функции)
- HTTP vs HTTPS, MITM и SSL Pinning
- Основные угрозы мобильных приложений

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

https://youtu.be/oZEFUA-unDo
Давно не создавал ключи подписи для приложений, а когда попытался, то напоролся на интересную ошибку про невозможность создания ключа с разными паролями на хранилище и на сам ключ. Покопавшись в интернетах быстро выяснил, что это известная проблема с Android Studio 4.2 и в качестве эльфийского костыля предлагается... сделать пароль на хранилище и на ключ одинаковыми. "Отличный совет", который полностью противоречит официальной документации. Более глубокие раскопки показали, что студия версии 4.2 работает на JDK 11, в которой для keystore по умолчанию используется формат PKCS12. Соответственно keytool и пытается создать именно его. Если попробовать сделать это из терминала, то можно увидеть вот такое сообщение: Warning: Different store and key passwords not supported for PKCS12 KeyStores. Ignoring user-specified -keypass value.

Ок, но как же так... Оказалось, что "проблема" известна аж с 2013го года и все работает как ожидается. Потому что (цитирую): Файл pkcs12 с различными паролями на хранилище и на ключ является (почти) бесполезным, потому что другие тулы (MSIE, Firefox и т.д.) принимают такие файлы только с одинаковыми паролями на ключ и хранилище. Поэтому keytool работает таким образом.

Собственно почему мы на это все попали только сейчас? Все просто. Google продолжает держать уверенный курс по направлению "подальше от Oracle" и всячески выпиливает всякие проприетарные штуки из Android окружения. А формат JKS как раз является проприетарным.

Сконвертировать свои старые JKS ключи в модный, молодежный PKCS12 можно так:
keytool -importkeystore \
-srckeystore keystore.jks \
-destkeystore keystore.p12 \
-srcstoretype JKS \
-deststoretype PKCS12 \
-deststorepass password \
-srcalias alias \
-destalias alias
Произошло целых два события: отгремела Google I/O 2021 и у меня нашлось время собрать всякую интересную инфу по privacy & security фишкам, которые там показали. Обзор получился довольно объемный, поэтому в описании вас традиционно ждут таймкоды и куча тематических ссылок. Смотрите, комментируйте, задавайте вопросы. Там есть что обсудить!
https://youtu.be/2Mtdo84dI4M
Мне тут коллеги с соседнего предприятия рассказали историю о том, что им пришло приложение от не самой распоследней конторы на аудит. И первым, что бросилось в глаза, было наличие релизного ключа в каталоге с проектом и заботливо прописанных креденшелов к нему в build-файле. Скажу очевидную мысль: никогда так не делайте 😄 А если узнали свое приложение, то поменяйте пароли на ключ и будьте счастливы.

А надо делать? Не в такой ситуации, а вообще. Вопрос большой и дискуссионный, но я бы посоветовал рассмотреть такие варианты:

- Назначить "хозяина ключей". Это может быть тим/техлид, который в нужное время будет спускаться с небес и подписывать ваше многострадальное приложение
- Убрать все ключи на CI чтобы все подписывалось там.

Я не хочу давать оценку ни одному из этих вариантов. Надеюсь что вы с этим справитесь самостоятельно.
Бывает смотришь на девушку и думаешь — DAST или не DAST... Впрочем о чем это я... А, подкаст новый записали. На этот раз обсуждаем все прелести DAST анализа с ребятами, которые неплохо в этом разбираются. В выпуске присутствует жесткая критика MobSF, поэтому слабонервных прошу поаккуратнее с прослушиванием 😉

Послушать выпуск можно в Google/Apple подкастах и на Youtube:

🎥 YouTube: https://youtu.be/imrlMLVOTRY
🎙 Google Podcasts: https://bit.ly/360XYIi
🍏 Apple Podcasts: https://apple.co/3vWFYte
Вам когда-нибудь было интересно как эволюционировали подходы к обеспечению безопасности в Android? Если да, то вот статья способная хоть немного удовлетворить ваш интерес. Это хороший обзор того, как Google улучшала безопасность и приватность операционной системы начиная с версии 4.4 и до наших дней. Ну и автор — не хрен с горы, а известный в нашем теплом мобильном инфобезе @Mr_R1p. Так что заваривайте свою любимую "принцессу Нури", доширак и наслаждайтесь чтением.

P.S. Статью уже репостили в чат канала, но автор репоста любезно согласился удалить сообщение, чтобы избежать дублирования 😎
Каждый раз когда я говорю "не пишите свою криптографию, у вас нет для этого достаточного количества знаний", вы мне возможно не верите и думаете: ну уж я то разбираюсь, даже половину "прикладной криптографии" прочитал. В таком случае у меня для вас есть статья, где очень круто показано, что даже специалисты ошибаются. В статье речь идет о слабых алгоритмах генерации случайных чисел, которые применялись в парольном менеджере от Лаборатории Касперского. Читается на одном дыхании (почти) и наглядно демонстрирует как находят уязвимости в ГПСЧ.

⚠️ Осторожно, все что вы прочитаете дальше в этом сообщении — теория заговоров и так не бывает.

А еще злые языки говорят, что в некоторые криптографические алгоритмы специально вносятся уязвимости. При чем порой настолько хитро, что нужно обладать очень глубокими знаниями в математике и криптографии чтобы эти уязвимости найти. А вот кто вносит эти уязвимости и зачем — я вам не скажу 😉 Статью читайте. Нечего про всякие глупости думать.
🔥1
Попалась мне тут книжка — Android глазами хакера. И решил я ее почитать и составить свое мнение. Делал заметки по ходу чтения и решил, что неплохо бы с кем-нибудь ими поделиться. Для тех, кому вечно "некогда", вот главная мысль — Книга отлично подойдет для тех, кто только начинает или хочет начать погружаться в мир android инфобеза

Для всех остальных есть такая ссылка — https://youtu.be/urgbx0QmHxs
Появилась новая инфа по safety section в GooglePlay, о которой я как-то писал. Теперь на это можно посмотреть в картинках и начать готовиться к ее появлению.
Открыть ее для заполнения в консоли разработчика обещают в октябре. Чуть больше подробностей тут.
Когда я нахожу в списке пакетов приложения net.sqlcipher, то сразу чувствую дух приключений. Это же люди заморочились, решили сделать зашифрованную базу данных и чтобы все было безопасно и хорошо. В такие моменты всегда интересно, что же они придумали с хранением ключей шифрования. Обычно там ничего интересного или всякая "комнатная криптография" типа константы с именем автора закодированной в base64, но на этот раз я нашел кое что забавное.

Самый простой способ начать раскручивать алгоритм — поискать метод net.sqlcipher.database.getReadableDatabase. В который и передается пароль на открытие БД. Если вам повезло и туда передается не статическая строка "mysecretpassword", то начинайте искать артефакты 😉 В моем случае, дорога приключений привела меня в класс с совершенно ничего не говорящим названием DatabasePasswordManager, который содержал такой код:

static SecretKey generatePassword() {
return new SecretKeySpec(UUID.randomUUID().toString().replaceAll("-", "").getBytes(StandardCharsets.UTF_8), "AES");
}

Ну хоть не имя автора и то ладно. А дальше сгенерированный ключ попадал в файл:

static void writeDatabasePassword(Context context, SecretKey secretKey, File file) {
....
byte[] wrap = keyWrapperFactory.createInstance(context, "db").wrap(secretKey);
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(wrap);
fileOutputStream.close();
return;
}


Который сохранялся в песочнице приложения. Шах и мат =)

Как стоило бы решать такую задачу? Я вижу три способа:

1. Не решать ее вообще. Зачем вам шифровать всю базу данных? Что там такого содержится? Если там куча конфиденциально инфы, то лучше бы это вынести на сервер.
2. Шифровать только конкретные данные. Тут хорошо помогает генерация ключей в keystore и обычные операции шифрования конкретных значений, которые потом можно сохранять в БД.
3. Размазать алгоритм генерации пароля по всему приложению с заходом в нативные либы, использовать куски подписи приложения и всякое такое прочее. Потом осознать, что пароль все равно получат с помощью хука на методе getReadableDatabase и написать защиту от фриды, xposed и... ну в общем вы поняли 😉
Создатель Magisk-а опубликовал статью вносящую ясность в то, что будет происходить с проектом дальше. Если коротко, то дела такие:

- MagiskHide — все. У автора теперь есть доступ ко всему коду гугла поэтому такие штуки вызывают конфликт интересов.
- Репозиторий модулей — все. Автор устал заниматься модерацией.
- Ведется работа на Zygisk — части Magisk будут запускаться в Zygote.
Frida book.pdf
3.9 MB
Перевернул сегодня календарь, а там...

Какие-то добрые люди надергали из документации всяких полезностей по Frida и сделали из них удобную PDF-ку, которая будет очень полезна новичкам. Хотя, джедаям тоже будет на что посмотреть.

Что внутри:
- Краткая история фриды
- Установка и базовые компоненты
- Примеры решения задач: обход рута, поиск секретов, обход авторизации. В этом же разделе есть инфа про r2frida (джедаи тут?)
- Примеры инструментов базирующихся на фриде
- Коллекции скриптов
- Референсы на основании которых это все собиралось. Можно юзать как список для дальнейшего изучения.
#frida
Довольно оперативно выложили материалы с прошедшей недавно Zero Nights 2021. По нашей теме там был только один доклад от Дмитрия Терёшина(@dtereshin) про проблемы SSDLC. В рамках доклада Дмитрий рассказал о внезапно появляющихся багах в релизных сборках и о том как их сбивать на подлете. А еще он презентовал свой тул CheckKarlMarx, который выглядит как ваша обычная грепалка на питоне, только с отчетами 😉

📹 Видео
👨🏻‍🏫 Слайды
👮 CheckKarlMarx
Решил немного разбавить посты про андройдно-мобильный инфобез постом на более широкую тему. В блоге Positive Technologies (запрещенная в США организация) вышла статья, с подборкой полезных ресурсов где можно почитать (а то и причаститься) про пентесты мобилок и веба, про реверс ВПО и про техники применяемые APT командами. Справедливости ради, стоит сказать, что подобную подборку, но на более узкую тему - reverse engineering я видел от компании Digital Security. Мне вообще нравится тренд, когда люди из индустрии и даже целые компании не закапывают знания внутри своего офиса, а делятся ими с сообществом. Хотелось бы видеть такие подборки чаще и было бы совсем хорошо если бы они на 90% состояли из материалов людей работающих в этих компаниях ;) Всем приятного чтения.
Довелось мне тут в очередной раз разворачивать с нуля пентестерское окружение на Android. А раз с нуля, значит надо сделать все правильно и красиво, поэтому решил закинуть сертификат для mitm-а в системные. В результате получился мини-гайд, который наверняка кому-то пригодится. Конечно есть и другие способы, с ремаунтом системного раздела и прочими приключениями. Но мне было как-то не до них :D
https://telegra.ph/Kak-sdelat-sertifikat-sistemnym-10-01
Ну что, любители бинарного анализа, которых почему-то занесло в android, для вас есть задачка.
Ребята из Delivery Club похоже решили потестировать свои наработки по защите приложений и оформили это в виде челленджа, за решение которого обещают пригласить в приватную bug bounty программу и дать скидку в $1000 на следующий заказ ;)

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

Чуть больше подробностей найдете в статье на хабре. Не забывайте спать и вовремя принимать пищу. Доброй охоты!
👍1
Пока не имею достаточно времени, чтобы записывать свой подкаст - приходится ходить по чужим ;) На этот раз сходил в SDCast к Константину Буркалеву. Поговорили про безопасность мобилок, поругали "вайтишников" и в очередной раз сошлись во мнении, что разработчикам неплохо бы разбираться в безопасности. В общем если кто-то искал, чем занять себя на ковидных каникулах, то послушайте подкаст. От себя могу еще порекомендвать выпуск с Ares-ом (автор Intercepter-NG), он вышел довольно интересным.

👨‍🔬Выпуск со мной
🥷Выпуск с Ares-ом