运行Cisco自适应安全设备(ASA)软件和Firepower威胁防御(FTD)软件的设备在处理RSA密钥时存在漏洞,此漏洞可能允许未经身份验证的远程攻击者检索RSA私钥。该漏洞是由于在硬件加密平台上将RSA密钥存储于内存时出现逻辑错误所致。攻击者可通过针对目标设备实施Lenstra侧信道攻击来利用此漏洞。成功利用后,攻击者可获取RSA私钥。
受漏洞影响的设备可能出现以下情况:
该工具允许您检查Cisco ASA或FTD设备中的私RSA密钥。
Cisco安全公告可通过以下链接获取: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-rsa-key-leak-Ms7UEfZz
key_check.py工具的目的是分析从ASA或FTD导出的密钥,检查其是否容易受到"Cisco RSA私钥泄露漏洞(CVE-2022-20866)"的影响。
key_check.py是一个社区支持的工具,运行于Linux shell环境,并具有以下依赖项:
该工具设计为平台无关,并已在以下平台配置上测试:
语法:
key_check.py [-h] --pkcs12 PKCS12 [--passwd PASSWD]
参数:
-h
显示帮助信息
--pkcs12
包含待分析密钥的文件名,密钥为base64编码的PKCS12格式。
该文件通过下文所述流程从ASA或FTD设备导出。
--passwd
解密PKCS12所需的密码。此密码与在ASA或FTD CLI上导出密钥时输入的密码相同。
若未指定此选项,工具将提示输入密码。
本节描述如何从ASA设备导出一个密钥。每个待分析的密钥都需要执行此流程。有两种情况:
信任点允许您管理和跟踪证书颁发机构(CA)和证书。信任点是CA或身份对的表示。信任点包含CA的身份、CA特定的配置参数以及与一个已注册的身份证书的关联。如果密钥对用于在ASA上配置的证书中,则可以通过以下命令导出密钥对:
# asa(config)# crypto ca export <tpname> pkcs12 test
其中是信任点的名称。
如果密钥不在ASA上配置的证书中,则需要创建一个临时信任点并使用自签名证书进行注册。
假设keyname是要导出的密钥对的名称。 假设temptp是用于临时信任点的名称。
# asa(config)# crypto ca trustpoint temptp
# asa(config-ca-trustpoint)# keypair keyname
# asa(config-ca-trustpoint)# subject-name cn=temp
# asa(config-ca-trustpoint)# no serial-number
# asa(config-ca-trustpoint)# enroll self
# asa(config-ca-trustpoint)# crypto ca enroll temp noconfirm
现在生成PKCS12:
# asa(config)# crypto ca export xtp pkcs12 test
上述两个流程(1、2)将生成一个base64编码的p12文件(密码为"test")并输出到控制台。将所有输出行放入一个文本文件中,该文件将作为工具的输入。
在FTD设备上,流程需要使用FMC,具体如下。请注意,FTD无法独立管理密钥,因此所有密钥都应有关联的证书。
以下内容用于可视化验证导出的PKCS12文件的内容,其格式应如下所示:
-----BEGIN PKCS12-----
MIIJvwIBAzCCCXUGCSqGSIb3DQEHAaCCCWYEggliMIIJXjCCA78GCSqGSIb3DQEH
BqCCA7AwggOsAgEAMIIDpQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMwDgQIwsRZ
<省略行>
geRPZxLUjt8nsc0bbrmEkXJ/27EbUm43UkioncY7JJwwQTAxMA0GCWCGSAFlAwQC
AQUABCAMZ7IR6nXHNbZ5zdtVAQX90VZyu2pvnJpiYgWWEf+WngQI9H/zlSTGKeAC
AggA
-----END PKCS12-----
以下示例展示了工具的使用方法,并演示了所有可能的输出结果。
linux> ./key_check.py --passwd test --pkcs12 valid_normal.p12.b64
The RSA key is valid.
linux> ./key_check.py --passwd test --pkcs12 valid_short.p12.b64
The RSA key is valid but is vulnerable to exposure if used in product versions that are affected by the Cisco Private Key Leak Vulnerability (CVE-2022-20866). If this was done, this key should no longer be used.
linux> ./key_check.py --passwd test --pkcs12 inval_not_vulnerable.p12.b64
The RSA key is invalid due to the Cisco RSA Private Key Leak Vulnerability (CVE-2022-20866) but does not have known exposure characteristics. It is recommended that this key be replaced.
linux> ./key_check.py --passwd test --pkcs12 inval_vulnerable.p12.b64
The RSA key is invalid and vulnerable to exposure due to the Cisco RSA Private Key Leak Vulnerability (CVE-2022-20866). This key should no longer be used.
linux> ./key_check.py --passwd test2 --pkcs12 valid_normal.p12.b64
ERROR: Mac verify error: invalid password?
linux> ./key_check.py --passwd test --pkcs12 bad_file.txt
ERROR: 139710534743952:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:157:
linux> ./key_check.py --passwd test --pkcs12 ecdsa.p12.b64
ERROR: 140300676220816:error:0607907F:digital envelope routines:EVP_PKEY_get1_RSA:expecting an rsa key:p_lib.c:287: