impersonate-proxy: Công cụ MITM proxy mã nguồn mở giúp kiểm soát TLS fingerprint để test bảo mật WAF
impersonate-proxy là một proxy MITM cục bộ mã nguồn mở, cho phép kiểm soát toàn diện TLS fingerprint (JA3/JA4), HTTP/2 fingerprint, thứ tự header và User-Agent thông qua một file cấu hình YAML duy nhất. Dự án hỗ trợ sẵn extension Chrome để chuyển đổi hồ sơ fingerprint nhanh chóng, phục vụ mục đích kiểm thử bảo mật các hệ thống phát hiện bot của WAF.

impersonate-proxy: Vũ khí mới cho chuyên gia bảo mật kiểm soát TLS fingerprint
impersonate-proxy là một proxy MITM (Man-in-the-Middle) cục bộ mã nguồn mở vừa được giới thiệu trên Hacker News, cho phép người dùng kiểm soát chi tiết TLS fingerprint (JA3/JA4), HTTP/2 fingerprint, thứ tự HTTP header, User-Agent và cả địa chỉ IP nguồn — tất cả chỉ qua một file cấu hình YAML duy nhất. Kèm theo đó là extension Chrome giúp chuyển đổi hồ sơ fingerprint trực tiếp từ thanh công cụ mà không cần khởi động lại proxy, công cụ này hứa hẹn là trợ thủ đắc lực cho việc kiểm thử hệ thống phát hiện bot của WAF.
Badge License MIT
Vấn đề mà impersonate-proxy giải quyết
Trong bối cảnh an ninh mạng ngày càng phức tạp, các hệ thống WAF (Web Application Firewall) và giải pháp chống bot hiện đại không chỉ dựa vào IP hay User-Agent để nhận diện bot. Chúng sử dụng các kỹ thuật fingerprint tầng TLS — phân tích cách một client thiết lập kết nối TLS (bộ mã hóa, thứ tự extension, tham số HTTP/2) để tạo ra "dấu vân tay" số hóa đặc trưng cho từng trình duyệt như Chrome, Firefox hay Safari.
Việc kiểm thử các hệ thống này thường gặp khó khăn vì các công cụ proxy truyền thống như Burp Suite hay mitmproxy không cho phép tinh chỉnh sâu các tham số TLS ở mức gói tin. impersonate-proxy ra đời để lấp khoảng trống này, giúp các chuyên gia bảo mật mô phỏng chính xác hành vi của từng trình duyệt cụ thể.
Cách hoạt động và kiến trúc
Về cốt lõi, impersonate-proxy hoạt động như một proxy MITM:
curl / trình duyệt / Playwright
│ HTTP CONNECT (đến proxy)
▼
┌─────────────────────────────────────────┐
│ impersonate-proxy │
│ │
│ MITM TLS ◄──────────────► uTLS │
│ (CA cert) (custom JA3/4) │
│ │
│ Header rewriter (UA, thứ tự, thêm/xóa) │
│ HTTP/2 framer (SETTINGS, WINDOW_UPDATE│
│ pseudo-header order) │
└─────────────────────────────────────────┘
│ Custom TLS ClientHello + HTTP/2
▼
Máy chủ đích / WAF
Kiến trúc này cho phép người dùng can thiệp vào ba tầng chính:
- Tầng TLS: Kiểm soát cipher suites, extension và thứ tự của chúng thông qua các preset uTLS (chrome, firefox, safari, edge, ios...) hoặc cấu hình
custom_hellohoàn toàn tùy chỉnh. - Tầng HTTP/1.1: Tùy chỉnh thứ tự header, User-Agent, thêm/xóa header, giả mạo IP qua
X-Forwarded-ForhoặcTrue-Client-IP. - Tầng HTTP/2: Kiểm soát giá trị và thứ tự SETTINGS, WINDOW_UPDATE, thứ tự pseudo-header — vốn là thành phần chính của HTTP/2 fingerprint.
Lưu ý quan trọng: JA3 và JA4 là các hàm băm một chiều — bạn không thể đảo ngược hash để tìm ra tham số gốc. Cần lấy tham số từ các công cụ như tls.peet.ws hoặc Wireshark, sau đó dán vào
custom_hello.
Tính năng nổi bật và trải nghiệm sử dụng
Cấu hình qua một file YAML duy nhất
Điểm ấn tượng nhất của dự án là sự đơn giản trong cấu hình. Thay vì phải viết code hay sử dụng nhiều công cụ khác nhau, người dùng chỉ cần chỉnh sửa một file config.yaml:
tls:
preset: "chrome" # hoặc firefox, safari, edge, ios, random, golang, custom
http:
user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36..."
client_ip: "1.2.3.4" # Giả mạo IP nguồn
header_order:
- "Host"
- "User-Agent"
- "Accept"
http2:
enabled: true
settings:
- { id: 1, val: 65536 }
- { id: 2, val: 0 }
- { id: 4, val: 6291456 }
window_update: 15663105
Extension Chrome điều khiển trực tiếp
Một điểm cộng lớn cho trải nghiệm người dùng là extension Chrome (Manifest V3) đi kèm, cho phép:
- Bật/tắt proxy chỉ với một cú click trên thanh công cụ.
- Chuyển đổi nhanh giữa các preset TLS (Chrome, Firefox, Safari...).
- Tinh chỉnh chi tiết cipher suites, curves, TLS versions, extensions ngay trên popup khi chọn chế độ Custom — không cần sửa YAML hay khởi động lại proxy.
- Thiết lập Client IP và User-Agent tùy ý.
- API quản lý HTTP tại cổng 8081 giúp tự động hóa quá trình thay đổi cấu hình.
Hỗ trợ đa nền tảng
Công cụ hỗ trợ macOS và Linux (cả kiến trúc amd64 và arm64 — bao gồm Raspberry Pi, AWS Graviton), tương thích với Go 1.22+. Người dùng có thể dễ dàng tích hợp với curl, trình duyệt Chrome, hoặc framework automation như Playwright (Node.js và Python) — một lợi thế lớn cho việc xây dựng các kịch bản kiểm thử tự động.
Hướng dẫn nhanh để bắt đầu
Việc cài đặt khá đơn giản với các lệnh sau:
# Clone và build
git clone https://github.com/ytkoka/impersonate-proxy.git
cd impersonate-proxy
make build
# Chạy lần đầu để tạo CA certificate
make run
# Tin cậy CA (trên macOS)
make trust-ca
# Sử dụng với curl
curl --proxy http://127.0.0.1:8080 --cacert ca.crt https://tls.peet.ws/api/all
Sau đó, bạn có thể kiểm tra fingerprint của mình tại tls.peet.ws để xem các trường tls.ja3_hash, tls.ja4 hay http2.akamai_fingerprint — xác nhận rằng proxy đã tạo đúng "dấu vân tay" như mong muốn.
Lưu ý pháp lý và giới hạn
Điều quan trọng cần nhấn mạnh: công cụ này chỉ dành cho mục đích kiểm thử bảo mật có ủy quyền — ví dụ như kiểm tra cấu hình WAF trên hệ thống bạn sở hữu hoặc đã được cấp phép bằng văn bản. Việc sử dụng công cụ này chống lại hệ thống không có sự cho phép có thể vi phạm pháp luật (như Computer Fraud and Abuse Act của Mỹ, Luật truy cập máy tính trái phép của Nhật Bản, hoặc các luật tương đương tại Việt Nam) và điều khoản dịch vụ của mục tiêu.
Một số giới hạn kỹ thuật hiện tại của dự án:
- Chỉ hỗ trợ MITM: Client phải tin tưởng CA certificate do proxy tạo ra.
- Không hỗ trợ HTTP/2 từ client: Kết nối client→proxy dùng HTTP/1.1, chỉ proxy→server mới dùng HTTP/2.
- Chưa hỗ trợ request body dạng chunked.
- Không hỗ trợ QUIC/HTTP/3.
- User-Agent chỉ thay đổi ở tầng HTTP header, không ảnh hưởng đến
navigator.userAgenttrong JavaScript của trình duyệt.
Đánh giá tổng quan
impersonate-proxy là một công cụ mã nguồn mở chất lượng cao, giải quyết một nhu cầu rất cụ thể và kỹ thuật trong lĩnh vực bảo mật web. Với kiến trúc rõ ràng, tài liệu chi tiết, và sự hỗ trợ tuyệt vời từ extension Chrome, công cụ này rất đáng để các chuyên gia bảo mật, tester WAF và nhà nghiên cứu bot-detection đưa vào bộ công cụ của mình. Việc kiểm soát được fingerprint ở mức chi tiết như vậy mở ra nhiều khả năng kiểm thử mới, giúp đánh giá chính xác hơn mức độ bảo mật của các hệ thống phòng thủ hiện đại.
Với cộng đồng bảo mật tại Việt Nam đang ngày càng phát triển, đây là một công cụ đáng để theo dõi và đóng góp, đặc biệt trong bối cảnh các WAF và giải pháp chống bot ngày càng được triển khai rộng rãi tại các doanh nghiệp trong nước.