13 điểm bởi GN⁺ 2024-12-31 | 1 bình luận | Chia sẻ qua WhatsApp
  • curl-impersonate là một bản dựng curl đặc biệt có thể mô phỏng các trình duyệt web phổ biến như Chrome, Edge, Safari và Firefox
    • Thực hiện bắt tay TLS và HTTP giống hệt trình duyệt thật
    • Có thể dùng như công cụ dòng lệnh hoặc tích hợp dưới dạng thư viện
  • Tầm quan trọng
    • Khi một HTTP client truy cập website dùng TLS, nó sẽ thực hiện bắt tay TLS, và trong quá trình này có thể bị nhận diện đặc tính của client
    • curl-impersonate làm cho quá trình bắt tay này giống hệt trình duyệt thật để dịch vụ web không thể nhận diện client
  • Triển khai kỹ thuật
    • Biên dịch curl bằng BoringSSL, thư viện TLS của Google.
    • Chỉnh sửa nhiều phần mở rộng TLS và tùy chọn SSL.
    • Thay đổi thiết lập kết nối HTTP/2.
    • Chạy curl bằng các cờ không tiêu chuẩn.
  • Trình duyệt được hỗ trợ
    • Có thể mô phỏng nhiều phiên bản trình duyệt như Chrome, Edge, Safari và Firefox.
    • Có sẵn script cho từng trình duyệt.
  • Cách dùng cơ bản
    • Có các wrapper script để chạy curl-impersonate cho từng trình duyệt được hỗ trợ.
    • Ví dụ: curl_chrome123 https://www.wikipedia.org
  • Cách dùng nâng cao
    • Có thể cấu hình qua API bằng thư viện libcurl-impersonate.
    • Có thể thay thế thư viện lúc chạy bằng biến môi trường CURL_IMPERSONATE.
  • Cài đặt
    • Các binary biên dịch sẵn cho Windows, Linux và macOS được cung cấp trên trang GitHub Releases.
    • Cũng có thể sử dụng thông qua Docker image.
  • Kho lưu trữ này là một fork năng động hơn của curl-impersonate, với các khác biệt chính sau
    • Hỗ trợ Encrypted Client Hello (ECH): Bổ sung tính năng ECH được giới thiệu trong Chrome 119.
    • Hỗ trợ nén ZSTD: Hỗ trợ giao thức nén ZSTD được giới thiệu trong Chrome 123.
    • Hỗ trợ đường cong X25519Kyber768: Bổ sung đường cong mã hóa mới được giới thiệu trong Chrome 124.
    • Mở rộng tùy chọn dấu vân tay Akamai HTTP/2: Tăng cường các tùy chọn dấu vân tay HTTP/2, bao gồm cả Safari.
    • Nâng cấp lên phiên bản curl mới nhất: Cập nhật lên curl 8.7.1.
    • Có thể cấu hình thứ tự phần mở rộng TLS và GREASE: Bổ sung tùy chọn bật/tắt GREASE và sắp xếp thứ tự phần mở rộng TLS.
    • Chuẩn bị hỗ trợ trình duyệt nền tảng Webkit và Gecko: Đang thực hiện bản nhị phân hợp nhất cho Chrome và Firefox.

1 bình luận

 
GN⁺ 2024-12-31
Ý kiến trên Hacker News
  • Có một dự án cung cấp API tương tự requests thông qua Python binding. Điều này giúp thực hiện các yêu cầu HTTP dễ dàng mà không cần chạy toàn bộ stack trình duyệt

    • Khiến người ta cảm nhận được sự cáo chung của Internet mở. Các tập đoàn lớn chỉ muốn mọi người dùng phần mềm do họ phê duyệt và cố gắng nhận diện người dùng
    • Vấn đề này đang được tiếp cận từ nhiều góc độ như bảo mật, bot, DDoS, v.v., và không chỉ giới hạn ở trình duyệt
    • Có vẻ mục tiêu cuối cùng là các tập đoàn lớn muốn theo dõi mọi hành vi của người dùng và chỉ cho phép những hành vi đã được phê duyệt
  • Trên một số trang web nhất định, cần đến cơ chế phát hiện trình duyệt dựa trên JavaScript. Ngay cả puppeteer-extra-plugin-stealth cũng có thể bị vô hiệu hóa

    • Có lẽ TLS fingerprinting sẽ không được dùng trên các trang không có cơ chế phát hiện bot quá nghiêm ngặt
    • Có thể hữu ích khi dùng trình duyệt headless để lấy token/cookie có thời hạn ngắn, rồi dùng chúng để gửi yêu cầu bằng client gọn nhẹ
  • Script build khá phức tạp. Dùng autotools nhưng phải build trong thư mục con

    • Mục tiêu build mặc định không phải là build dự án mà là phần văn bản trợ giúp
    • Khi dùng các mục tiêu build, dependency không được thiết lập đúng nên phải chạy nhiều lần
    • Không thể hoàn tất build do lỗi build BoringSSL. Đã thử trên Ubuntu 20 nhưng thất bại
    • Cũng thử trên Ubuntu 22 nhưng build BoringSSL vẫn lỗi. Script make hoạt động tốt hơn
    • Giải quyết được vấn đề bằng cách bỏ -Werror. Danh sách dependency không đầy đủ
    • Cần libc++-XX-devlibc++abi-XX-dev. Quá trình cài đặt còn hơi thiếu sót
    • BoringSSL là một thư viện lớn nên thời gian build khá lâu
  • Đã tạo một dự án tương tự cho Python. Đang tìm người có thể hỗ trợ build trên Windows

  • Chỉ một số ít website dùng JA3/JA4 fingerprinting. Cũng có những trang dùng kỹ thuật nâng cao để liên kết header với fingerprint

    • Có thể dùng fingerprint của Burp Suite để thực hiện công việc bảo mật
  • Dùng ja3proxy để expose HTTP proxy thông qua utls. Không có tính năng đặc biệt nào cho HTTP/2

  • Trong ngôn ngữ Go, gói tls-client là thứ thường được dùng nhất

  • Câu chuyện và sự thú vị liên quan đến việc các AI scraper farm DDoS website

  • Tôi nghĩ những dự án như thế này không nên được công bố. Kẻ địch có thể đang ở giữa chúng ta

    • Việc phân biệt đối xử dựa trên user agent nên là bất hợp pháp. EU có thể mang lại thay đổi, nhưng họ cũng rất quan tâm đến định danh số
  • Nếu cần đọc dữ liệu từ một số website nhất định, chúng dùng thông tin handshake để ngăn không cho phần mềm đọc được

    • Khi gửi yêu cầu HTTP thì mặc định dùng trình duyệt headless. Một số website vẫn không thể đọc được vì captcha và các lý do tương tự