
CVE-2022-20866용 RSA 키 검사기
Cisco Adaptive Security Appliance Software 및 Firepower Threat Defense Software를 실행하는 장치에서 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 셸 환경에서 실행되며 다음과 같은 종속성이 있습니다:
이 도구는 플랫폼에 독립적으로 설계되었으며, 다음 플랫폼 구성에서 테스트되었습니다:
구문:
key_check.py [-h] --pkcs12 PKCS12 [--passwd PASSWD]
매개변수:
-h
도움말 정보를 표시합니다.
--pkcs12
분석할 키가 base64로 인코딩된 PKCS12 형식의 파일 이름입니다.
이 파일은 아래 설명된 절차를 사용하여 ASA 또는 FTD 장치에서 내보냅니다.
--passwd
PKCS12를 해독하는 데 필요한 비밀번호입니다. 이 값은
키를 내보낼 때 ASA 또는 FTD CLI에서 입력한 값과 동일합니다.
이 옵션을 지정하지 않으면 도구에서 비밀번호를 입력하라는 메시지가 표시됩니다.
이 섹션에서는 ASA 장치에서 하나의 키를 내보내는 방법을 설명합니다. 분석할 각 키에 대해 이 절차를 따라야 합니다. 두 가지 시나리오가 있습니다:
트러스트포인트를 사용하면 인증 기관(CA)과 인증서를 관리하고 추적할 수 있습니다. 트러스트포인트는 CA 또는 ID 쌍을 나타냅니다. 트러스트포인트에는 CA ID, CA별 구성 매개변수 및 등록된 하나의 ID 인증서와의 연결이 포함됩니다. 키 쌍이 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)는 비밀번호 "test"를 사용하여 base64로 인코딩된 p12를 콘솔에 출력합니다. 모든 출력 줄을 텍스트 파일에 저장합니다. 이 파일이 도구의 입력으로 사용됩니다.
FTD 장치에서는 절차를 위해 FMC를 다음과 같이 사용해야 합니다. FTD에서는 키를 독립적으로 관리할 수 없으므로 모든 키에는 연결된 인증서가 있어야 합니다.
다음은 내보낸 PKCS12 파일의 내용이 어떻게 보여야 하는지 시각적으로 확인하기 위한 것입니다:
-----BEGIN PKCS12-----
MIIJvwIBAzCCCXUGCSqGSIb3DQEHAaCCCWYEggliMIIJXjCCA78GCSqGSIb3DQEH
BqCCA7AwggOsAgEAMIIDpQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMwDgQIwsRZ
<lines omitted>
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
RSA 키는 유효하지만 Cisco 개인 키 유출 취약점(CVE-2022-20866)의 영향을 받는 제품 버전에서 사용될 경우 노출에 취약합니다. 이 키가 해당 방식으로 사용된 경우 더 이상 이 키를 사용해서는 안 됩니다.
linux> ./key_check.py --passwd test --pkcs12 inval_not_vulnerable.p12.b64
RSA 키는 Cisco RSA 개인 키 유출 취약점(CVE-2022-20866)으로 인해 유효하지 않지만 알려진 노출 특성은 없습니다. 이 키를 교체하는 것이 좋습니다.
linux> ./key_check.py --passwd test --pkcs12 inval_vulnerable.p12.b64
RSA 키가 유효하지 않으며 Cisco RSA 개인 키 유출 취약점(CVE-2022-20866)으로 인해 노출에 취약합니다. 이 키는 더 이상 사용해서는 안 됩니다.
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: