pagpeter/TrackMe

GitHub: pagpeter/TrackMe

这是一个Go实现的被动请求指纹识别服务器,用于提取和分析客户端TLS和HTTP指纹以支持安全监控与研究。

Stars: 407 | Forks: 72

# TrackMe - Go语言实现的服务器端HTTP/TLS跟踪演示 TrackMe是一个自定义的低层HTTP/1和H2服务器,它能响应请求的详细细节。 它返回JA3、Akamai H2指纹、头部信息及头部顺序、H2帧等内容。 ## 生成证书和配置文件 首先需要生成 certificate.pem 和 key.pem 文件。 ``` $ mkdir certs $ openssl req -x509 -newkey rsa:4096 -keyout certs/key.pem -out certs/chain.pem -sha256 -days 365 -nodes ``` 然后,复制示例配置文件(可能需要编辑) ``` $ cp config.example.json config.json $ nano config.json ... ``` ## 运行方式(Docker) ``` $ docker build -t "trackme:Dockerfile" . $ docker run -p 80:80 -p 443:443 "trackme:Dockerfile" ``` ## 运行方式(非Docker) 可以通过运行 `go build -o TrackMe cmd/main.go` 来构建二进制文件。 之后,直接运行该二进制文件(`sudo ./TrackMe`) ## 不同的指纹类型 该网站返回三种不同的指纹:[JA3](https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967/)、TLS指纹、HTTP/2 ["akamai-fingerprint"](https://www.blackhat.com/docs/eu-17/materials/eu-17-Shuster-Passive-Fingerprinting-Of-HTTP2-Clients-wp.pdf)(仅适用于HTTP/2连接)以及我自己的自定义"PeetPrint"。 ### 自定义指纹("PeetPrint") 我想扩展JA3,因此创建了自己的TLS指纹算法。它更适合用于TLS1.3连接的指纹识别,因为[JA3在这方面表现并不理想](https://github.com/salesforce/ja3/issues/78),并且我的算法包含更多数据点。其设计受Akamai提出的HTTP/2指纹启发。 其格式如下: ``` supported-tls-versions|supported-protocols|supported-groups|supported-signature-algorithms|psk-key-exchange-mode|certificate-compression-algorithms|cipher-suites|sorted-extensions ``` 使用"-"作为分隔符。 **supported-tls-versions**:`supported_versions` 扩展中发送的、以分隔符分隔的支持TLS版本列表。 **supported-protocols**:`application_layer_protocol_negotiation` 扩展中发送的、以分隔符分隔的支持HTTP版本列表。http/1.0 => 1.0,http/1.1 => 1.1,http/2 => 2 **supported-groups**:`supported_groups` 扩展中发送的、以分隔符分隔的支持椭圆曲线组列表。 **supported-signature-algorithms**:`signature_algorithms` 扩展中发送的、以分隔符分隔的支持签名算法列表。 **psk-key-exchange-mode**:`psk_key_exchange_modes` 扩展中指定的PSK密钥交换模式。通常为0或1。 **certificate-compression-algorithms**:`compress_certificate` 扩展中发送的、以分隔符分隔的证书压缩算法列表。 **cipher-suites**:以分隔符分隔的支持密码套件列表。 **sorted-extensions**:支持的扩展的排序列表。(排序是因为Chrome使用了顺序随机化) 所有TLS GREASE值必须替换为"GREASE"。 因此,一个指纹可能看起来像这样: ``` GREASE-772-771|2-1.1|GREASE-29-23-24|1027-2052-1025-1283-2053-1281-2054-1537|1|2|GREASE-4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53|GREASE-0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-GREASE-21-41 ``` ## API端点 该网站公开了多个不同的API端点。 ### /api/all 返回收集到的关于请求的所有数据 ### /api/tls 仅返回TLS数据 ### /api/clean 仅返回不同的指纹(akamai-fp+ja3) ### /api/request-count 返回数据库捕获的总请求计数。仅在连接数据库时有效。 ### /api/search-ja3 参数:`?by=` 返回与此标识符同时出现的最常见的其他标识符(user-agent, h2, peetprint)。仅在连接数据库时有效。 ### /api/search-h2 参数:`?by=` 返回与此标识符同时出现的最常见的其他标识符(user-agent, JA3, peetprint)。仅在连接数据库时有效。 ### /api/search-peetprint 参数:`?by=` 返回与此标识符同时出现的最常见的其他标识符(user-agent, h2, JA3)。仅在连接数据库时有效。 ## Docker 你也可以使用docker-compose在Docker容器中运行该服务器。 ``` # 生成证书并更新您的 config.json docker-compose -up --build # 访问 https://localhost/api/all ``` ## TLS和HTTP2指纹识别资源 - [TLS 1.3,逐字节详解](https://tls13.xargs.org/) - [JA3解释 - Salesforce](https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967/) - ["一篇关于TLS的非常简单的文章"]() - [TLS指纹识别现状 - fastly](https://www.fastly.com/blog/the-state-of-tls-fingerprinting-whats-working-what-isnt-and-whats-next) - [TLS指纹识别 - lwthiker](https://lwthiker.com/networks/2022/06/17/tls-fingerprinting.html) - [HTTP2详解 - haxx.se](https://http2-explained.haxx.se/en/part1) - [Akamai - HTTP2指纹识别](https://www.blackhat.com/docs/eu-17/materials/eu-17-Shuster-Passive-Fingerprinting-Of-HTTP2-Clients-wp.pdf) - [HTTP2指纹识别 - privacycheck.sec.lrz.de](https://privacycheck.sec.lrz.de/passive/fp_h2/fp_http2.html) - [HTTP2指纹识别](https://lwthiker.com/networks/2022/06/17/http2-fingerprinting.html) - [TCP指纹识别 - 维基百科](https://en.wikipedia.org/wiki/TCP/IP_stack_fingerprinting)(德语版本更好) - [TCP/IP栈指纹识别](https://en-academic.com/dic.nsf/enwiki/868408)(包含许多其他链接)
标签:C2日志可视化, Docker, EVTX分析, Go语言, HTTP/2指纹, JA3指纹, Radare2, TLS指纹, 加密协议分析, 加密通信, 协议分析, 安全测试工具, 安全防御评估, 客户端识别, 指纹识别, 日志审计, 服务器端跟踪, 权限提升, 程序破解, 网络安全, 被动监听, 请求分析, 请求拦截, 隐私保护