-
Notifications
You must be signed in to change notification settings - Fork 151
Attestation
fairy edited this page Oct 10, 2020
·
1 revision
对Android
安全环境的检测,市面上的各种检测已经很多了,但是对应的反检测也层出不穷。那么怎样从硬件检测方面来实现安全环境的检测呢?那么从以下两方面入手:
SELinux
KeyAttestation
本文先从KeyAttestation
证书链认证进行说明。
Android
的Keystore
提供了一个安全的位置,能够以可控方式创建、存储和使用加密密钥。如果有硬件支持的密钥存储区可用,则使用该存储区比从设备中提取密钥材料更安全,但是仅当已知Keystore
密钥位于由硬件支持的存储区中时,才能够实现这一点。
为了解决此问题,在Android
7.0中引入了密钥认证。
认证扩展内容由以下 ASN.1 架构描述。
KeyDescription ::= SEQUENCE {
attestationVersion INTEGER, # KM2 value is 1. KM3 value is 2. KM4 value is 3.
attestationSecurityLevel SecurityLevel,
keymasterVersion INTEGER,
keymasterSecurityLevel SecurityLevel,
attestationChallenge OCTET_STRING,
uniqueId OCTET_STRING,
softwareEnforced AuthorizationList,
teeEnforced AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
Software (0),
TrustedEnvironment (1),
StrongBox (2),
}
AuthorizationList ::= SEQUENCE {
purpose [1] EXPLICIT SET OF INTEGER OPTIONAL,
algorithm [2] EXPLICIT INTEGER OPTIONAL,
keySize [3] EXPLICIT INTEGER OPTIONAL.
digest [5] EXPLICIT SET OF INTEGER OPTIONAL,
padding [6] EXPLICIT SET OF INTEGER OPTIONAL,
ecCurve [10] EXPLICIT INTEGER OPTIONAL,
rsaPublicExponent [200] EXPLICIT INTEGER OPTIONAL,
rollbackResistance [303] EXPLICIT NULL OPTIONAL, # KM4
activeDateTime [400] EXPLICIT INTEGER OPTIONAL
originationExpireDateTime [401] EXPLICIT INTEGER OPTIONAL
usageExpireDateTime [402] EXPLICIT INTEGER OPTIONAL
noAuthRequired [503] EXPLICIT NULL OPTIONAL,
userAuthType [504] EXPLICIT INTEGER OPTIONAL,
authTimeout [505] EXPLICIT INTEGER OPTIONAL,
allowWhileOnBody [506] EXPLICIT NULL OPTIONAL,
trustedUserPresenceRequired [507] EXPLICIT NULL OPTIONAL, # KM4
trustedConfirmationRequired [508] EXPLICIT NULL OPTIONAL, # KM4
unlockedDeviceRequired [509] EXPLICIT NULL OPTIONAL, # KM4
allApplications [600] EXPLICIT NULL OPTIONAL,
applicationId [601] EXPLICIT OCTET_STRING OPTIONAL,
creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
origin [702] EXPLICIT INTEGER OPTIONAL,
rollbackResistant [703] EXPLICIT NULL OPTIONAL, # KM2 and KM3 only.
rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
osVersion [705] EXPLICIT INTEGER OPTIONAL,
osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
attestationApplicationId [709] EXPLICIT OCTET_STRING OPTIONAL, # KM3
attestationIdBrand [710] EXPLICIT OCTET_STRING OPTIONAL, # KM3
attestationIdDevice [711] EXPLICIT OCTET_STRING OPTIONAL, # KM3
attestationIdProduct [712] EXPLICIT OCTET_STRING OPTIONAL, # KM3
attestationIdSerial [713] EXPLICIT OCTET_STRING OPTIONAL, # KM3
attestationIdImei [714] EXPLICIT OCTET_STRING OPTIONAL, # KM3
attestationIdMeid [715] EXPLICIT OCTET_STRING OPTIONAL, # KM3
attestationIdManufacturer [716] EXPLICIT OCTET_STRING OPTIONAL, # KM3
attestationIdModel [717] EXPLICIT OCTET_STRING OPTIONAL, # KM3
vendorPatchLevel [718] EXPLICIT INTEGER OPTIONAL, # KM4
bootPatchLevel [719] EXPLICIT INTEGER OPTIONAL, # KM4
}
RootOfTrust ::= SEQUENCE {
verifiedBootKey OCTET_STRING,
deviceLocked BOOLEAN,
verifiedBootState VerifiedBootState,
verifiedBootHash OCTET_STRING, # KM4
}
VerifiedBootState ::= ENUMERATED {
Verified (0),
SelfSigned (1),
Unverified (2),
Failed (3),
}
RootOfTrust
字段名称 | 类型 | 值 |
---|---|---|
verifiedBootKey | OCTET_STRING | 用于验证系统映像的密钥的安全哈希。建议使用 SHA-256。 |
deviceLocked | BOOLEAN | 如果引导加载程序已锁定,则该值为 true,这表示只能刷入已签名的映像,并表示验证启动检查已完成。 |
verifiedBootState | VerifiedBootState | 启动时验证的状态。 |
verifiedBootHash | OCTET_STRING | 受启动时验证保护的所有数据的摘要。 |
VerifiedBootState
值 | 介绍 |
---|---|
Verified | 表示实现了从引导加载程序到已验证分区的完整信任链,其中包括引导加载程序、启动分区和所有已验证的分区。在此状态下,verifiedBootKey 值是嵌入证书的哈希值,表示不可更改的证书已烧录到 ROM 中。 |
SelfSigned | 表示已使用嵌入的证书启动时验证分区,并且签名有效。在允许启动过程继续之前,引导加载程序会显示一条警告以及公钥的指纹。在此状态下,verifiedBootKey 值是自签名证书的哈希值。 |
Unverified | 表示可以随意修改设备。设备完整性由用户进行带外验证。在允许启动过程继续之前,引导加载程序会向用户显示一条警告。在此状态下,verifiedBootKey 值为空。 |
Failed | 表示设备验证失败。实际上,并没有任何认证证书包含此值,因为引导加载程序在此状态下会停止运行。此处包含该值是为了实现完整性。 |
机器 | 值 |
---|---|
未解锁 | Device Locked: true,Verified Boot State: VERIFIED |
解锁 | Device Locked: false,Verified Boot State: UNVERIFIED |
模拟器 | 无此字段 |
本SDK已经对其获取进行了封装,可以直接调用进行获取。
JSONObject attestationResult = AttestationSdk.getKeyAttestation();
请自觉遵循《信息安全技术移动互联网应用(App)收集个人信息基本规范(草案)》