Открыть список
Как стать автором
Обновить

Комментарии 55

Газетный заголовок какой-то получился.
Понятно, спасибо)
Я в прошлое написал, очевидно же
а резюме уже у вас на рабочем столе! :D
Старый неопубликованный черновик. Ему присвоился когда-то ID вот такой мелкий, который никак не зависит от того, была статья опубликована или нет.
Может на сервере хабра начало кончаться место и они решили повторно использовать id удалённых постов?
теплый, ламповый черновик июля 2011 года…
Мне заголовок больше напомнил текст с рекламного баннера.
Также находим USERTrustRSAAddTrustCA.cer — уже интересней. Насколько я понял это запароленный сертификат, аналоговый брутфорс профита не дал.

Это сертификат удостоверяющего центра, который выпустил сертификат для сервера с API.
Ничего интересного

Это понятно, я даже корневой для него нашёл, но зачем он в приложении?
Какая-нибудь защита от MitM, чтобы приложение не пыталось отправлять картинки на captive portal.
Сомневаюсь что это защита. Просто они пользуются не сильно популярным сертификационным центром, для проверки которого нужно вручную устанавливать промежуточные СА. Эти промежуточные сертификаты обычно выложены на сайтах для скачивания и последующей регистрации вручную.
Просто они пользуются не сильно популярным сертификационным центром, для проверки которого нужно вручную устанавливать промежуточные СА

Бред. Никто не подпишет вам TLS сертификат напрямую сертификатом CA, им подписывают intermediate, сертификаты для подписи crl и ocsp и т. п. А для того, чтобы клиент мог проверять всю цепочку сервер отдаёт не только сертификат хоста, но и все промежуточные, кроме сертификата root CA.

SSL сертификаты как раз подписываются промежуточным СА, что я и написал. Про корневые сертификаты речь вообще не шла…

Что касается автоматического скачивания цепочек, это всё в идеале (в 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.

Комодо является крупнейшим продавцом сертификатов в мире, куда уж популярней?
Речь здесь не о Comodo, а о Gandi.
Так в приложении зашит сертификат Comodo, а Gandi ниже по цепочке и в проверке может не участвовать.
НЛО прилетело и опубликовало эту надпись здесь
Это путь джедая, а я скрипткидди же ) я стар и ленив и уже не люблю руками разбирать gzip`ы, возиться с wireshark`ом итп. В моём случае эволюция дала обратный виток, из джадая я превратился в штурмовика )

Один из стандартных вариантов жеж, подсунуть HTTP_PROXY + HTTPS_PROXY, а дальше mitmproxy ,)

Некоторый роутеры, например микротик, умеют дампить трафик для дальнейшего анализа в wireshark. Либо коммутатор с mirror портом. Никакого вмешательства в трафик.
Вот для таких целей и стоит у правильных парней MicroTik )
осподе, любой современный роутер это линукс. А если и не так, то под него есть ddwrt/openwrt, т.е. линукс.
Спасибо, отличная статья!
Побольше бы таких статей, обходящих интересные моменты уязвимости и написанных понятным языком.)
Сказать, как получить алгоритм от Prism'ы?
С помощью фотки, хах.
Алгоритм открыт, был опубликован на сайте MIT. Ребята доработали его и вложили в приложение.
Кстати, в последней версии призмы есть оффлайн фильтры, которые так же можно выудить из приложения описанным выше способом. Точнее не алгоритм, а модель нейросети, конечно.

Это не с ними был скандал, что они использовали чужую сеть без указания авторства и ссылки на первоисточник?

Я имел ввиду алгоритм шифровки
Минус за заголовок в сочетании с тем, что вы не нашли в приложении ровно ничего интересного. Содержание воды в статье больше, чем в человеке.
Простите господин, что не нашёл ничего интересного для вас в приложении и посмел написать о этом.
Мне надо было списком выложить приложения и их уязвимости? )
Не то что вы не нашли ничего интересного для меня, вы не нашли ничего интересного вообще.

Вы открыли приложение и обнаружили там:
1) О мой бог — фреймворки! Приложение использует фреймворки!
2) Сертификат, назначение которого не поняли.
3) API ключи для crashlytics. Ценная находка — теперь вы можете собрать своё приложение и отправить ребятам ложные сообщения о ошибках. Мда.
4) Идентификаторы групп в фейсбуке и вконтакте. Сомнительное достижение с учётом того, что они и так открыты…
5) Фотка друга. Единственное что вообще претендует на интересное и смешное открытие.

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

Какую же это вам дало дополнительную информацию? А что, без этого не видно, что приложение работает с этими сеточками? Очередное ведро воды в тексте.

В финале вы облажались с подделкой запроса в призму и почему-то написали кучу текста про запросы в Vinci — непонятно, какое это имеет отношение к статье кроме набивки объёма.

Если бы статья называлась «что мы можем понять с первого взгляда на мобильное приложение на примере Prisma и Vinci» — не вопрос, плюсик вам в карму и все дела. Но претендует-то она на совсем другое. А называть статью по аналогии с другой плохой шуточной статьёй с упоминанием мейнстримного приложения для накрутки просмотров — с моей точки зрения очень плохой тон.
Перед текстом я явно указал:
По факту я не расскажу вам ничего нового, я не придумал никакого ноу-хау, это просто вектор известных техник и умений на приложения.

Я даю вам удочку, а рыбу ловите сами. Если вы знали все эти техники до этой статьи, зачем вообще читали? Хотя вряд ли вы были в курсе этих техник, если для подделки crashlytics евентов предлагаете собирать собственное приложение…
Для вас пошаговая демонстрация техники это вода, а кому-то может пригодиться. Для этого и стоит флажок «туториал» рядом с названием статьи. «Облажался» с запросами к призме я не случайно, статья писалась не пошагово, а сразу после всей экспертизы этих приложений. И Призма отличный пример для объяснения техники обхода защиты от mitm и отличный пример тупика. Винчи тут как раз для того, чтобы логично завершить блок с рассказом о сниффе и зачем он нужен.

А называть статью по аналогии с другой плохой шуточной статьёй с упоминанием мейнстримного приложения для накрутки просмотров — с моей точки зрения очень плохой тон.

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

> Перед текстом я явно указал: я не расскажу вам ничего нового, я не придумал никакого ноу-хау

В то же время вы пишите, что будете делать ДЕТАЛЬНЫЙ АНАЛИЗ:
> я бы хотел поделиться техникой детального анализа приложений
Это как-бы подразумевает, что вы сейчас разберете все приложение и даже найдете, как считается хэш файлов, как работает программа и разберете её детально, на ДЕТАЛИ. У вас не только заголовок получился желтым, но и содержание.
и даже найдете, как считается хэш файлов

И даже кофе вам сварю? Огласите весь список «и даже» чего я должен сделать, если осмелюсь что-либо ещё писать на хабр?
Да, лучше напишите годную статью как варить кофе, печь хлеб и варить пельмени.
Алгоритм подписи prisma-image-sign можно изучить, разобрав приложение для android. Так же в этом поможет davlik код, дописав который можно на консоль IDE вывести все, что используется для генерации этой подписи.
Алгоритм подписи я знаю, это хеш-функция, md5/sha256 или что-то подобное + base64. Мне интересней соль, которая используется для генерации хеша. Как получить её быстро и без особых усилий — мне не известно.
Там особо нечего получать, код выковыривается из APK андроида очень легко, даже почти читабелен (хоть и обфусцирован)

Этот метод как раз вызывает 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). Это вы уже сами

Так что, всё расковыривается на раздва, никаких проблем
пора подтягивать свои познания в андройдовских apk ) спасибо, очень интересно
Там не сложно даже тому, кто Android в глаза не видел. Любой APK можно онлайн декомпилировать в Java-код, бесплатных сервисов вагон. И внутри уже посмотреть строковое значение ключа. На самом деле ребята не морочились с безопасностью особо.
С Avito в этом плане оказалось сложнее =)
Вошел, чтобы написать коммент о том, что проще взять вариант Android и декомпилить его в Java-код за минуту.
Спасибо топикстартеру за postman (не знал) и charles (знало, но только после статьи сподобился разобраться с MITM SSL)
Тут же подсмотрел протокол общения утилиты MTS для отправки СМС с компьютера
Пожалуйста, поменяйте в начале статьи название страны на правильное — Беларусь.
Надеюсь, верно изменил
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.