Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Защита приложений от модификации средствами Android. Работает или нет?

Защита приложений от модификации средствами Android. Работает или нет?

Михаил Дударев, Licel Corporation – MOSDROID #7 Nitrogen

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

Для его реализации в Android используется цифровая подпись содержимого приложений.

В своем докладе я расскажу о схемах подписи, использующихся в Android (JarSignature, APK Signature 2, Google Play Signing), их плюсах, минусах, уязвимостях, и конечно же, мы проверим все это на практике.

MOSDROID

April 17, 2018
Tweet

More Decks by MOSDROID

Other Decks in Programming

Transcript

  1. Содержание • Защита приложения от модификации по пути от разработчика

    до пользователя • Что такое JarSignature и как это работает • Немного о формате Zip и почему в Google придумали APK Signature 2 • Янус Двуликий или зачем надо контролировать формат файлов • Google Play Signing и некоторые его особенности 3
  2. Реальная жизнь. Отправка крутой тачки :) 4 Контейнер Крутая тачка

    Контейнер с крутой тачкой, с описью тачки, и пломбой
  3. Реальная жизнь. Получение крутой тачки :) 5 Контейнер с крутой

    тачкой?, с описью тачки?, и пломбой? Я счастливчик Не повезло
  4. Мир Android (Доставка приложения) 6 Содержимое приложения Подпись Разработчик Магазин

    приложений Производитель устройств Облачная подпись Метаданные + Подпись производителя + Предустановленное приложение Установка из магазина
  5. Структура Jar-архива • META-INF – MANIFEST.MF – … • Набор

    файлов 8 Manifest-Version: 1.0 Created-By: X.X.X _X (Test Corporation) Attribute-1: .. .. Atttribute-N: ..
  6. Подпись Подписано Без подписи Структура подписанного Jar-архива • META-INF –

    MANIFEST.MF – ….. – ALIAS.<RSA|DSA|ECDSA> – ALIAS.SF • Набор файлов 9
  7. ALIAS.<RSA|DSA|ECDSA> > openssl pkcs7 -in app-release/META-INF/ANDROID.RSA -print_certs - inform der

    | openssl x509 -text Certificate: Data: Version: 3 (0x2) Serial Number: 1743593741 (0x67ed210d) Signature Algorithm: sha256WithRSAEncryption Issuer: C=Sample, ST=Sample, L=Sample, O=Sample, OU=Sample, CN=Sample Validity Not Before: Jul 7 08:31:03 2016 GMT Not After : Nov 23 08:31:03 2043 GMT Subject: C=Sample, ST=Sample, L=Sample, O=Sample, OU=Sample, CN=Sample Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:83:c6:5f:16:c5:16:db:4c:77:04:89:60:cc:b9: 10
  8. ALIAS.SF > less app-release/META-INF/ANDROID.SF Signature-Version: 1.0 Created-By: 1.0 (Android) SHA1-Digest-Manifest:

    3ev1dDcxoBNvtSvROx4TMk5Ntkg= X-Android-APK-Signed: 2 Name: AndroidManifest.xml SHA1-Digest: NMq4oqeJgEsXTPOq7vRb06OFtlg= Name: classes.dex SHA1-Digest: he0u+MMYOPtjL0qaRCkw275Ntw0= Name: …. SHA1-Digest: 0M605fq0IY/ugc/TZITuTpjBaFQ= 11
  9. Минусы JarSignature для Android • По умолчанию все сертификаты самозаверенные

    • Не поддерживается механизм цифровых временных меток • Для проверки подписи, требуется распаковать файлы из архива и вычислить их хеш • Подписывается только содержимого файлов 13
  10. Zip-архив 00 01 02 03 04 05 06 07 08

    09 0A 0B 0C 0D 0E 0F -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 00: 50 4B 03 04 0A 00 00 00 00 00 DB 65 90 4C 53 FC 10: 51 67 02 00 00 00 02 00 00 00 01 00 1C 00 31 55 20: 54 09 00 03 0E 71 D4 5A C7 72 D4 5A 75 78 0B 00 30: 01 04 F5 01 00 00 04 14 00 00 00 31 0A 50 4B 01 40: 02 1E 03 0A 00 00 00 00 00 DB 65 90 4C 53 FC 51 50: 67 02 00 00 00 02 00 00 00 01 00 18 00 00 00 00 60: 00 01 00 00 00 A4 81 00 00 00 00 31 55 54 05 00 70: 03 0E 71 D4 5A 75 78 0B 00 01 04 F5 01 00 00 04 80: 14 00 00 00 50 4B 05 06 00 00 00 00 01 00 01 00 90: 47 00 00 00 3D 00 00 00 00 00 14
  11. Zip-архив 00 01 02 03 04 05 06 07 08

    09 0A 0B 0C 0D 0E 0F -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 00: 50 4B 03 04 0A 00 00 00 00 00 DB 65 90 4C 53 FC 10: 51 67 02 00 00 00 02 00 00 00 01 00 1C 00 31 55 20: 54 09 00 03 0E 71 D4 5A C7 72 D4 5A 75 78 0B 00 30: 01 04 F5 01 00 00 04 14 00 00 00 31 0A 50 4B 01 40: 02 1E 03 0A 00 00 00 00 00 DB 65 90 4C 53 FC 51 50: 67 02 00 00 00 02 00 00 00 01 00 18 00 00 00 00 60: 00 01 00 00 00 A4 81 00 00 00 00 31 55 54 05 00 70: 03 0E 71 D4 5A 75 78 0B 00 01 04 F5 01 00 00 04 80: 14 00 00 00 50 4B 05 06 00 00 00 00 01 00 01 00 90: 47 00 00 00 3D 00 00 00 00 00 15 End of Central Directory Record Central Directory Record File Data Local File Header
  12. Zip-архив (играем в прятки) 00 01 02 03 04 05

    06 07 08 09 0A 0B 0C 0D 0E 0F -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 00: 50 4B 03 04 0A 00 00 00 00 00 DB 65 90 4C 53 FC 10: 51 67 02 00 00 00 02 00 00 00 01 00 1C 00 31 55 20: 54 09 00 03 0E 71 D4 5A C7 72 D4 5A 75 78 0B 00 30: 01 04 F5 01 00 00 04 14 00 00 00 31 0A .. .. .. 40: 50 4B 01 02 1E 03 0A 00 00 00 00 00 DB 65 90 4C 50: 53 FC 51 67 02 00 00 00 02 00 00 00 01 00 18 00 60: 00 00 00 00 01 00 00 00 A4 81 00 00 00 00 31 55 70: 54 05 00 03 0E 71 D4 5A 75 78 0B 00 01 04 F5 01 80: 00 00 04 14 00 00 00 .. .. .. 50 4B 05 06 00 00 90: 00 00 01 00 01 00 47 00 00 00 40 00 00 00 00 00 16 End of Central Directory Record Central Directory Record File Data Local File Header
  13. APK Signature 2 00 01 02 03 04 05 06

    07 08 09 0A 0B 0C 0D 0E 0F -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- XX: FILE HEADER1 + DATA1, .. FILE HEADERN + DATAN XX: 15 06 00 00 00 00 00 00 .. .. .. .. .. .. .. .. XX: 66 85 63 86 66 AC D4 BA 5E 27 AA D3 9C 24 61 EF XX: 9A E7 E5 86 6D 3A BE 1F 92 D8 3B A0 0A F3 5A 64 XX: 72 B7 15 02 03 01 00 01 15 06 00 00 00 00 00 00 XX: 41 50 4B 20 53 69 67 20 42 6C 6F 63 6B 20 34 32 XX: 50 4B 01 02 1E 03 0A 00 00 00 00 00 DB 65 90 4C 17 First Central Directory Record APK Signature 2 Magic Size of APK Signature Block Signature Block Data (ID-Value pairs)
  14. Плюсы APK Signature 2 • Контролирует целостность всего содержимого APK

    • Меньший размер • Высокая скорость проверки подписи содержимого APK 18
  15. CVE-2017-13156 (JANUS) 00 01 02 03 04 05 06 07

    08 09 0A 0B 0C 0D 0E 0F -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 00: 64 65 78 0A 30 33 35 00 99 3F 71 CE 9D 42 F4 30 ..: MALICIOUS DEX PAYLOAD.. .. .. .. .. .. .. .. .. XX: 50 4B 03 04 0A 00 00 00 00 00 DB 65 90 4C 53 FC XX: 51 67 02 00 00 00 02 00 00 00 01 00 1C 00 31 55 XX: 54 09 00 03 0E 71 D4 5A C7 72 D4 5A 75 78 0B 00 XX: 01 04 F5 01 00 00 04 14 00 00 00 31 0A 50 4B 01 XX: 02 1E 03 0A 00 00 00 00 00 DB 65 90 4C 53 FC 51 XX: 67 02 00 00 00 02 00 00 00 01 00 18 00 00 00 00 XX: 00 01 00 00 00 A4 81 00 00 00 00 31 55 54 05 00 XX: 03 0E 71 D4 5A 75 78 0B 00 01 04 F5 01 00 00 04 XX: 14 00 00 00 50 4B 05 06 00 00 00 00 01 00 01 00 19 End of Central Directory Record Central Directory Record File Data Local File Header
  16. CVE-2017-13156 (JANUS) 20 • Используйте APK Signature 2 (Andoid 7

    и выше) • Для более старых версий Android, контролируете целостность APK самостоятельно
  17. Google Play Signing 21 Содержимое приложения Подпись для загрузки Разработчик

    Подпись Google Публикация Google Play Метаданные Содержимое приложения
  18. GOOGPLAY.RSA > openssl pkcs7 -in app-release/META-INF/GOOGPLAY.RSA -print_certs - inform der

    | openssl x509 -text Certificate: Data: Version: 3 (0x2) Serial Number: 91:92:a6:48:0e:6d:ce:77:c3:ed:ba:dd:8c:31:30:01:73:4d:47:c4 Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Google Inc., OU=Android, CN=Android Validity Not Before: Jul 26 18:50:07 2017 GMT Not After : Jul 26 18:50:07 2047 GMT Subject: C=US, ST=California, L=Mountain View, O=Google Inc., OU=Android, CN=Android Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (4096 bit) Modulus (4096 bit): 00:ac:9b:a0:db:0c:71:e7:9d:90:a5:fe:d1:e8:af: 23
  19. Плюсы Google Play Signing • Централизованная подпись APK – Нет

    риска кражи ключей для подписи – Удобство командной работы • Метаинформация для отслеживания копий приложения 24
  20. Минусы Google Play Signing • Все APK подписываются Google ключами

    • Происходит модификация содержимого APK • При утере ключей подписи для загрузки, нет возможности их замены, без обращения в техподдержку Google 25
  21. Выводы • Механизмы контроля целостности в Android работают, НО: –

    До Android 7, следует контролировать целостность APK самостоятельно – Нет цепочки доверенных сертификатов – В сертификатах подписи Google Play Signing не используется информация о разработчике 26