
#CVE-2021-31796용 C-Ark 자격 증명 디코더
Exploit tool for CVE-2021-31796
C-Ark 자격 증명 파일 디코딩 도구
제작: Aaron Mizrachi - https://twitter.com/unmanarc/
Enrique Vaamonde - https://twitter.com/_ejvm
최초 릴리스: 2/Sep/2019
공개: 11/Oct/2021
이 취약점은 2019년 9월부터 공개가 보류되어 있었습니다.
그리고... 타임라인은 다음과 같습니다:
침투 테스트 중에, 누군가가 영리하게 PSM에 도달하고 우연히 CredFile에 접근하게 된다면, 그 파일을 사용하여 Vault에 연결하고 전체 제어권을 얻을 수 있습니다...
대응책으로, 대부분의 자격 증명 파일은 암호가 다른 환경/컴퓨터(예: 해커 자신의 PSM)에서 사용되는 것을 방지하기 위해 몇 가지 "제한"을 둡니다.
하지만, 그러한 제한은 리버스 엔지니어링하여 원시 키 부분을 얻는다면 수정될 수 있습니다. 이 복호화된 키 부분은 다른 "보안" 매개변수(예: 다른 호스트, 다른 애플리케이션, 다른 OS 사용자)로 다른 파일을 다시 생성하는 데 사용될 수 있습니다.
AES-256(32바이트) 원시 복호화 키를 생성하기 위해, "AdditionalInformation" 자격 증명 필드에서 각 해시에 "0x00000000" 및 "0x00000001"을 추가하여 한 쌍의 SHA1SUM을 만듭니다. 첫 번째 해시는 키의 처음 20바이트를 제공하고, 두 번째 해시는 마지막 12바이트만 제공합니다.
환경 제한(IP/Host/exepath/... 등)이 있는 경우, 두 SHA1SUM을 계산하기 전에 각 평문 값을 AdditionalInformation 앞에 추가합니다.
중요한 점은 "ClientApp" 필드는 "AdditionalInformation" 앞에 추가되고 두 SHA1SUM이 생성되기 전에 BASE64(SHA1SUM(strlower(ClientApp)))로 변환된다는 것입니다.
복호화는 Password 또는 NewPassword 필드를 사용하여 AES-256-CBC OpenSSL 함수로 수행됩니다. (https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption)
어떤 검증/제한이 적용되는지 파악하기 위해 (verificationflags-16)을 사용합니다:
usingClientApp = ((uVerificationsFlag&0x1) != 0);
usingAppPath = ((uVerificationsFlag&0x2) != 0);
usingClientIP = ((uVerificationsFlag&0x4) != 0);
usingOSUser = ((uVerificationsFlag&0x8) != 0);
usingClientHostname = ((uVerificationsFlag&0x20) != 0);
그리고 일부 제한이 출력 자격 증명 파일에 표시되지 않는 경우, 항상 수동으로 추가할 수 있습니다. "앱 경로"나 "클라이언트 IP" 모두 진정한 임의 값이 아니라는 점에는 우리 모두 동의할 것이라고 생각합니다.
HSM을 사용하세요 \o/, 복호화 키를 자격 증명 파일에 저장하지 마세요.
qmake .
make -j8