Аппаратная аттестация хранилища ключей Android не работает на Samsung Galaxy S8

Я пытался проверить корневой сертификат аттестации, следуя этой пример из Google

Однако корневой сертификат моего устройства (Samsung Galaxy S8 с Android 9) не соответствует GOOGLE_ROOT_CERTIFICATE в примере и не проходит проверку в строке 441 в этом примере.

Но корневой сертификат моего устройства совпадает, когда я выключаю GOOGLE_ROOT_CERTIFICATE в примере для сертификата, размещенного здесь: https://gist.github.com/herrjemand/a612608dfbb2bc136aba57c64ff4a04c#file-androidkey-attestation-root-pem

Я заметил, что и корневой сертификат моего устройства, и сертификат, размещенный в этой последней ссылке, имеют значение общего имени «Android Keystore Software Attestation Root». Означает ли это, что мое устройство не поддерживает ключ с аппаратной поддержкой аттестация?

(Я убедился, что сами ключи хранятся на защищенном оборудовании, используя функцию isInsideSecureHardware () в моем приложении для Android , который генерирует ключи.)


person Pantsless Grandpa    schedule 24.07.2019    source источник


Ответы (1)


Устройства, запущенные с Nougat или более ранними версиями, не обязаны поддерживать аттестацию с аппаратной поддержкой, но вместо того, чтобы просто давать сбой при запросе аттестации, они генерируют аттестацию в программном обеспечении, и это то, что вы видите: аттестация программного обеспечения для оборудования. на основе ключа. Если вы изучите запись аттестации (см. https://github.com/googlesamples/android-key-attestation для примера кода) вы обнаружите, что уровень безопасности аттестации - KM_SECURITY_LEVEL_SOFTWARE, но уровень безопасности keymaster - KM_SECURITY_LEVEL_TRUSTED_ENVIRONMENT. Это означает, что ключ на самом деле находится в защищенном оборудовании, но аттестация была сгенерирована программным обеспечением Android.

Чем это отличается от аттестации, сгенерированной безопасным оборудованием, с корнем аттестации Google?

Если злоумышленник скомпрометировал программное обеспечение данного устройства Android в достаточной степени, чтобы иметь возможность изменить работу демона хранилища ключей, он может заставить программное обеспечение сгенерировать любой вид подтверждения, который они хотят. Они могут заставить его сгенерировать запись аттестации, утверждающую, что ключ находится в защищенном оборудовании, когда это не так, или запись, в которой утверждается, что ключ имеет определенные ограничения на его использование, когда это не так. Чего они не могут сделать, так это подписать его с помощью ключа, который связывается с корнем Google.

Однако злоумышленник, взломавший Android, не может изменить работу защищенного оборудования. Если аттестация связана с корнем Google, тогда вы можете быть уверены, что аттестация была создана на защищенном оборудовании и, следовательно, защищена от злоумышленников, которые могут скомпрометировать ОС Android.

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

Обобщить:

  1. If you see an attestation chain that doesn't end in the Google root, you should assume that either:
    • The device is not a Google Play device, or
    • Устройство было выпущено с версией Android до Oreo.
  2. Если вы видите цепочку аттестации, содержащую отозванный сертификат, вы должны предположить, что возникла какая-то проблема. Чтобы узнать, что именно, проверьте данные отзыва.

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

Извините, если это кажется очень тонким и сложным. Безопасность - дело тонкое и никогда не бывает простым «да» или «нет».

person divegeek    schedule 13.08.2019