
C-Ark Credential Decoder #CVE-2021-31796 用
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のペアを取得します。最初のSHA1SUMは鍵の最初の20バイトを提供し、2番目は最後の12バイトのみを提供します。
環境制限(IP/ホスト/実行パスなど)がある場合、各平文値をAdditionalInformationの前に付加してから両方のSHA1SUMを取得します。
重要な点として、「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/。復号鍵をcredファイルに保存しないでください。
qmake .
make -j8