Comments 55
https://habrahabr.ru/post/123238/
Также находим USERTrustRSAAddTrustCA.cer — уже интересней. Насколько я понял это запароленный сертификат, аналоговый брутфорс профита не дал.
Это сертификат удостоверяющего центра, который выпустил сертификат для сервера с API.
Просто они пользуются не сильно популярным сертификационным центром, для проверки которого нужно вручную устанавливать промежуточные СА
Бред. Никто не подпишет вам TLS сертификат напрямую сертификатом CA, им подписывают intermediate, сертификаты для подписи crl и ocsp и т. п. А для того, чтобы клиент мог проверять всю цепочку сервер отдаёт не только сертификат хоста, но и все промежуточные, кроме сертификата root CA.
Что касается автоматического скачивания цепочек, это всё в идеале (в Windows, например). В реальности же почти везде мало известные промежуточные СА сертификаты нужно вставлять вручную. Зайдите, например, в AWS и попробуйте зарегистрировать SSL сертификат, скажем, от Cybertrust. У вас ничего не получится, пока вы не предоставите, вручную (в нужное текстовое поле), соответвующий промежуточный СА: https://www.cybertrust.ne.jp/sureserver/support/download_ca.html
Мой коммент про root CA касался того, что должно быть в "хранилище сертификатов"/ca-certificates/keychain/whatever.
Что касается автоматического скачивания цепочек, это всё в идеале (в Windows, например).
Intermediate CA certs не "скачиваются" и не устанавливаются в системное/браузерное хранилище. Они отдаются сервером в рамках установления TLS-соединения (в Server certificate
, сразу после Server hello
), см. RFC 2246 и RFC 6101.
Скачивают и устанавливают их, разве что, по глупости. Своей или администраторов сервера, которые не осилили сделать cat и своего сертификата и цепочки intermediate.
Причём здесь винда — хз, оно так работает, как минимум, со времён SSL v3. У всех, кто может в стандарты.
Зайдите, например, в AWS и попробуйте зарегистрировать SSL сертификат, скажем, от Cybertrust. У вас ничего не получится, пока вы не предоставите, вручную (в нужное текстовое поле), соответвующий промежуточный СА
Тёплое с мягким-то не путайте. Естественно амазону нужны промежуточные сертификаты, иначе как он их будет отдавать в Server certificate
? S3/CF-то работают в качестве сервера.
Intermediate CA certs не «скачиваются» и не устанавливаются в системное/браузерное хранилище.
Еще как скачиваются и устанавливаются, по крайней мере в Windows. Зайдите в certmgr.msc и посмотрите категорию «Intermediate Certification Authorities». Можете даже сравнить до и после посещения сайта, с подобным редким промежуточным СА (которого в чистой системе еще нет).
Тёплое с мягким-то не путайте. Естественно амазону нужны промежуточные сертификаты, иначе как он их будет отдавать в Server certificate? S3/CF-то работают в качестве сервера.
Здесь я имел в виду то, что эта процедура требуется не для всех сертификатов, а только для тех, чей промежуточный СА достаточно редкий, чтобы AWS не имел его у себя в своем хранилище.
Зайдите в certmgr.msc
-> % certmgr.msc
zsh: command not found: certmgr.msc
Извините, не удержался.
Если серьёзно, то это, скорее всего, то, что обычно именуется CryptoAPI cache. Он пополняется при получении intermediate из gpo/enterprise policies или через AIA (authority information access), прописанном в самом сертификате.
Тот же firefox раньше использовал своё NSS-хранилище и на виндовое ему было плевать. Как сейчас — не ведаю; с виндой давно не имею дел без крайней необходимости.
Здесь я имел в виду то, что эта процедура требуется не для всех сертификатов, а только для тех, чей промежуточный СА достаточно редкий, чтобы AWS не имел его у себя в своем хранилище.
Иии? Логично, что aws надо откуда-то получить всю цепочку. То, что они упростили пользователям жизнь в каких-то частных случаях ни коим образом не говорит о том что требуется "устанавливать промежуточные СА" потому что "они пользуются не сильно популярным сертификационным центром, "для проверки которого нужно вручную устанавливать промежуточные СА".
Напомню, речь шла о зашитом в клиентское приложение сертификате, который как выше предположил navion, скорее всего, используется для cert pinning.
Один из стандартных вариантов жеж, подсунуть HTTP_PROXY + HTTPS_PROXY, а дальше mitmproxy ,)
С помощью фотки, хах.
Мне надо было списком выложить приложения и их уязвимости? )
Вы открыли приложение и обнаружили там:
1) О мой бог — фреймворки! Приложение использует фреймворки!
2) Сертификат, назначение которого не поняли.
3) API ключи для crashlytics. Ценная находка — теперь вы можете собрать своё приложение и отправить ребятам ложные сообщения о ошибках. Мда.
4) Идентификаторы групп в фейсбуке и вконтакте. Сомнительное достижение с учётом того, что они и так открыты…
5) Фотка друга. Единственное что вообще претендует на интересное и смешное открытие.
Далее статья изобилует чудесными утверждениями типа
Видим, что приложение захочет работать с инстаграмом, фейсбуком и вконтактом. Эта информация никаким образом, конечно, не поможет «сломать» приложение, но даст нам дополнительную информацию.
Какую же это вам дало дополнительную информацию? А что, без этого не видно, что приложение работает с этими сеточками? Очередное ведро воды в тексте.
В финале вы облажались с подделкой запроса в призму и почему-то написали кучу текста про запросы в Vinci — непонятно, какое это имеет отношение к статье кроме набивки объёма.
Если бы статья называлась «что мы можем понять с первого взгляда на мобильное приложение на примере Prisma и Vinci» — не вопрос, плюсик вам в карму и все дела. Но претендует-то она на совсем другое. А называть статью по аналогии с другой плохой шуточной статьёй с упоминанием мейнстримного приложения для накрутки просмотров — с моей точки зрения очень плохой тон.
По факту я не расскажу вам ничего нового, я не придумал никакого ноу-хау, это просто вектор известных техник и умений на приложения.
Я даю вам удочку, а рыбу ловите сами. Если вы знали все эти техники до этой статьи, зачем вообще читали? Хотя вряд ли вы были в курсе этих техник, если для подделки crashlytics евентов предлагаете собирать собственное приложение…
Для вас пошаговая демонстрация техники это вода, а кому-то может пригодиться. Для этого и стоит флажок «туториал» рядом с названием статьи. «Облажался» с запросами к призме я не случайно, статья писалась не пошагово, а сразу после всей экспертизы этих приложений. И Призма отличный пример для объяснения техники обхода защиты от mitm и отличный пример тупика. Винчи тут как раз для того, чтобы логично завершить блок с рассказом о сниффе и зачем он нужен.
А называть статью по аналогии с другой плохой шуточной статьёй с упоминанием мейнстримного приложения для накрутки просмотров — с моей точки зрения очень плохой тон.
Мне просмотры вообще по барабану, а называть статьи по аналогии с другими популярными, это хорошая традиция на хабре. У моих статей на хабре достаточно просмотров, чтобы перестать уже мастурбировать на них. Конечно, мне как автору, приятно видеть положительные отзывы и плюсики моему тексту. Но это давно уже не самоцель )
В то же время вы пишите, что будете делать ДЕТАЛЬНЫЙ АНАЛИЗ:
> я бы хотел поделиться техникой детального анализа приложений
Это как-бы подразумевает, что вы сейчас разберете все приложение и даже найдете, как считается хэш файлов, как работает программа и разберете её детально, на ДЕТАЛИ. У вас не только заголовок получился желтым, но и содержание.
Этот метод как раз вызывает HmacSHA256 с так желанной вами солью
private String a(byte[] bArr) {
if (bArr.length >= 82) {
bArr = a.a(Arrays.copyOfRange(bArr, 0, 42), Arrays.copyOfRange(bArr, bArr.length - 42, bArr.length));
}
String str = BuildConfig.FLAVOR;
try {
str = Base64.encodeToString(i.a(bArr, "duGB^Vy3Q&FQrJz2guKJBxNH3dAr/sQx"), 0).trim();
} catch (Throwable e) {
Log.e(g.class.getName(), "Error encoding image", e);
}
return str;
}
А вот метод, который принимает этот массивчик из 42 байт и соль
public static byte[] a(byte[] bArr, String str) throws Exception {
Mac instance = Mac.getInstance("HmacSHA256");
String trim = Base64.encodeToString(a(PrismaApplication.b().getString(2131165323).getBytes()).getBytes(), 0).trim();
str.getBytes();
instance.init(new SecretKeySpec(trim.getBytes("UTF-8"), "HmacSHA256"));
return instance.doFinal(bArr);
}
Правда либо криво декомпильнулось, либо они эту соль не используют, а вместо неё какой то строковый видимо ресурс getString(2131165323). Это вы уже сами
Так что, всё расковыривается на раздва, никаких проблем
Тут же подсмотрел протокол общения утилиты MTS для отправки СМС с компьютера
Я заглянул в приложение Prisma, и вы не поверите, что я там нашёл