技術討論 | Apostille:讓假證書以假亂真的證書偽造工具
嚴正宣告:本文僅限於技術討論,嚴禁用於其他用途。
在DefCon 26上, ofollow" rel="nofollow,noindex" target="_blank">@singe 和 @_cablethief 發表了關於企業無線攻擊的精彩演講。如果你仔細觀看了之後放出的演講視訊,你應該能注意到其中他們提及了一個叫做“Apostille”的工具。這是一款由 @Sensepost 團隊成員 Rogan Daweska 開發的,證書竊取(克隆/偽造)工具。但在演講中他們並未過多介紹,這也是促使我寫這篇博文的原因。
複製證書的通用名稱,電子郵件或在建立時輸入其他欄位是證書偽造的相對簡單的方式。咋一看,他們看起來並沒有什麼不同。但這樣的證書往往會留下諸多的偽造痕跡。例如,我建立了一個類似的證書:
root@apostille-post:~# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mycert.pem -out mycert.pem Generating a 2048 bit RSA private key .................................................................................................................+++ ...+++ writing new private key to 'mycert.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:California Locality Name (eg, city) []:Mountain View Organization Name (eg, company) [Internet Widgits Pty Ltd]:Google LLC Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:*.google.com Email Address []:
如果我將其託管,以下是Google.com的結果:
可以看到,偽造證書(左圖)的證書資訊明確指出該證書不被信任。此外,從證書的頒發機構也可以很容易的判斷出證書的真偽。
Apostille 安裝
Apostille需要Java JDK和Maven來進行編譯,因此我們先來安裝它們:
root@apostille-post:~# apt install -y maven default-jdk git
克隆儲存庫,並使用Maven進行編譯:
root@apostille-post:~# git clone https://github.com/sensepost/apostille Cloning into 'apostille'... remote: Counting objects: 48, done. remote: Total 48 (delta 0), reused 0 (delta 0), pack-reused 48 Unpacking objects: 100% (48/48), done. root@apostille-post:~# cd apostille/ root@apostille-post:~/apostille# mvn package
克隆你的第一個證書:
java -jar target/apostille-1.0-SNAPSHOT.jar google.com:443 tempkeystore.jks ASDqwe123 ASDqwe123
google.com:443:服務於證書鏈的端點(不僅限於HTTPS,任何TLS端點都可以)。
tempkeystore.jks:存放證書鏈的Java Keystore檔案。
ASDqwe123:前一個是kspassword,後面的是keypassword(金鑰庫和證書密碼)- 金鑰庫只會在稍後匯出證書的時候用到。
下面我們要做的是將證書從金鑰庫中取出,並轉換為可用於測試的PEM格式。具體操作可參考: https://www.calazan.com/how-to-convert-a-java-keystore-jks-to-pem-format/
root@apostille-post:~/apostille# keytool -importkeystore -srckeystore tempkeystore.jks -destkeystore myapp.p12 -srcalias *.google.com -srcstoretype jks -deststoretype pkcs12 Importing keystore tempkeystore.jks to myapp.p12...Enter destination keystore password: ASDqwe123 Re-enter new password: ASDqwe123 Enter source keystore password: ASDqwe123
轉換後看起來應該像這樣:
現在,讓我們來看看對比之前偽造的證書有什麼不同之處。我將參考 AKB的快速Web伺服器列表 。
root@apostille-post:~/apostille# openssl s_server -cert myapp.pem -accept 443 -WWW Enter pass phrase for myapp.pem: WugWZ3!F3hD#8P!f Using default temp DH parameters ACCEPT
結果如下:
可以看到,真證書和偽造證書幾乎已經很難通過肉眼進行區分。而證書資訊部分,雖有提示但並不明確。最後,再次感謝 @RoganDawes 提供了這款工具!
*參考來源: malicious ,FB小編 secist 編譯,轉載請註明來自FreeBuf.COM