13 คะแนน โดย GN⁺ 2024-12-31 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • curl-impersonate คือ curl รุ่นบิลด์พิเศษที่สามารถเลียนแบบเว็บเบราว์เซอร์หลักอย่าง Chrome, Edge, Safari และ Firefox ได้
    • ทำ TLS และ HTTP handshake ให้เหมือนกับเบราว์เซอร์จริง
    • ใช้งานได้ทั้งเป็นเครื่องมือบรรทัดคำสั่งหรือผนวกรวมเป็นไลบรารี
  • ความสำคัญ
    • เมื่อ HTTP client เข้าถึงเว็บไซต์ที่ใช้ TLS จะมีการทำ TLS handshake และในกระบวนการนี้สามารถระบุลักษณะเฉพาะของไคลเอนต์ได้
    • curl-impersonate ทำให้ handshake เหล่านี้เหมือนกับเบราว์เซอร์จริง เพื่อให้เว็บเซอร์วิสไม่สามารถระบุไคลเอนต์ได้
  • การทำงานเชิงเทคนิค
    • คอมไพล์ curl โดยใช้ BoringSSL ซึ่งเป็นไลบรารี TLS ของ Google
    • ปรับแก้ TLS extensions และตัวเลือก SSL หลายรายการ
    • เปลี่ยนการตั้งค่าการเชื่อมต่อ HTTP/2
    • รัน curl ด้วยแฟลกที่ไม่ใช่มาตรฐาน
  • เบราว์เซอร์ที่รองรับ
    • สามารถเลียนแบบเบราว์เซอร์หลายเวอร์ชัน เช่น Chrome, Edge, Safari และ Firefox
    • มีสคริปต์สำหรับแต่ละเบราว์เซอร์ให้ใช้งาน
  • วิธีใช้งานพื้นฐาน
    • มี wrapper script สำหรับรัน curl-impersonate แยกตามแต่ละเบราว์เซอร์ที่รองรับ
    • ตัวอย่าง: curl_chrome123 https://www.wikipedia.org
  • การใช้งานขั้นสูง
    • ใช้ไลบรารี libcurl-impersonate เพื่อตั้งค่าผ่าน API ได้
    • สามารถสลับไลบรารีตอนรันไทม์ได้ด้วยตัวแปรแวดล้อม CURL_IMPERSONATE
  • การติดตั้ง
    • มีไบนารีที่คอมไพล์ไว้ล่วงหน้าสำหรับ Windows, Linux และ macOS บนหน้า GitHub Releases
    • ใช้งานผ่าน Docker image ได้เช่นกัน
  • รีโพซิทอรีนี้เป็นฟอร์กที่มีความเคลื่อนไหวมากกว่าของ curl-impersonate และมีความแตกต่างสำคัญดังนี้
    • รองรับ Encrypted Client Hello (ECH): เพิ่มฟีเจอร์ ECH ที่เปิดตัวใน Chrome 119
    • รองรับการบีบอัด ZSTD: รองรับโปรโตคอลการบีบอัด ZSTD ที่เปิดตัวใน Chrome 123
    • รองรับเส้นโค้ง X25519Kyber768: เพิ่มเส้นโค้งเข้ารหัสใหม่ที่เปิดตัวใน Chrome 124
    • ขยายตัวเลือก Akamai HTTP/2 fingerprint: เสริมตัวเลือก fingerprint ของ HTTP/2 รวมถึง Safari
    • อัปเกรดเป็น curl เวอร์ชันล่าสุด: อัปเดตเป็น curl 8.7.1
    • ตั้งค่าลำดับ TLS extensions และ GREASE ได้: เพิ่มตัวเลือกเปิด/ปิด GREASE และกำหนดลำดับ TLS extensions
    • เตรียมรองรับเบราว์เซอร์ที่ใช้ Webkit และ Gecko: กำลังพัฒนาไบนารีเดียวสำหรับ Chrome และ Firefox

1 ความคิดเห็น

 
GN⁺ 2024-12-31
ความคิดเห็นจาก Hacker News
  • มีโปรเจ็กต์ที่ให้ API คล้ายกับ requests ผ่าน Python binding ซึ่งช่วยให้ส่งคำขอ HTTP ได้ง่ายโดยไม่ต้องรันสแตกเบราว์เซอร์ทั้งหมด

    • ทำให้รู้สึกถึงจุดจบของอินเทอร์เน็ตแบบเปิด บริษัทใหญ่พยายามบังคับให้ใช้เฉพาะซอฟต์แวร์ที่ตนอนุมัติและพยายามระบุตัวผู้ใช้
    • มีการเข้าถึงจากหลายมุม ทั้งความปลอดภัย บอต DDoS และอื่น ๆ และไม่ได้จำกัดอยู่แค่เบราว์เซอร์
    • ดูเหมือนว่าเป้าหมายสุดท้ายคือให้บริษัทใหญ่ติดตามทุกพฤติกรรมของผู้ใช้และอนุญาตให้ทำได้เฉพาะพฤติกรรมที่ได้รับการรับรอง
  • บางเว็บไซต์ต้องมีการตรวจจับเบราว์เซอร์ด้วย JavaScript และยังสามารถทำให้ puppeteer-extra-plugin-stealth ใช้ไม่ได้ด้วย

    • ดูเหมือนว่าการทำ TLS fingerprinting จะไม่ถูกใช้บนเว็บไซต์ที่ไม่ได้มีการตรวจจับบอตอย่างจริงจัง
    • อาจมีประโยชน์ในการใช้เบราว์เซอร์แบบ headless เพื่อเอาโทเค็น/คุกกี้อายุสั้นมา แล้วใช้สิ่งเหล่านั้นส่งคำขอด้วยไคลเอนต์น้ำหนักเบา
  • สคริปต์สำหรับบิลด์มีความซับซ้อน ใช้ autotools แต่ต้องบิลด์จากไดเรกทอรีย่อย

    • เป้าหมายบิลด์เริ่มต้นไม่ใช่การบิลด์โปรเจ็กต์ แต่เป็นข้อความช่วยเหลือ
    • เมื่อลองใช้เป้าหมายบิลด์ การตั้งค่า dependency ไม่ถูกต้องจึงต้องรันหลายครั้ง
    • บิลด์ไม่สำเร็จเพราะ BoringSSL build failed ลองบน Ubuntu 20 แล้วไม่ผ่าน
    • ลองบน Ubuntu 22 แล้วก็ยังเจอ BoringSSL build failed แต่สคริปต์ make ทำงานได้ดีกว่า
    • แก้ปัญหาได้ด้วยการเอา -Werror ออก รายการ dependency ยังไม่ครบถ้วน
    • ต้องใช้ libc++-XX-dev และ libc++abi-XX-dev กระบวนการติดตั้งยังไม่ค่อยสมบูรณ์
    • BoringSSL เป็นไลบรารีขนาดใหญ่จึงใช้เวลาบิลด์นาน
  • เคยทำโปรเจ็กต์ลักษณะคล้ายกันสำหรับ Python และกำลังมองหาคนมาช่วยเรื่องการบิลด์บน Windows

  • มีเว็บไซต์เพียงไม่กี่แห่งที่ใช้ JA3/JA4 fingerprinting และยังมีเว็บที่ใช้เทคนิคขั้นสูงเพื่อเชื่อมโยง header กับ fingerprint

    • สามารถใช้ fingerprint ของ Burp Suite เพื่อทำงานด้านความปลอดภัยได้
  • ใช้ ja3proxy เพื่อเปิดเผย HTTP proxy ผ่าน utls ไม่มีฟีเจอร์พิเศษสำหรับ HTTP/2

  • ในภาษา Go มักใช้แพ็กเกจ tls-client เป็นหลัก

  • มีการพูดถึงเรื่องที่ AI scraper farm ทำให้เว็บไซต์โดน DDoS ซึ่งน่าสนใจ

  • คิดว่าโปรเจ็กต์แบบนี้ไม่ควรถูกเผยแพร่ อาจมีศัตรูแฝงอยู่ในหมู่พวกเรา

    • การเลือกปฏิบัติต่อ user agent ควรเป็นสิ่งผิดกฎหมาย EU อาจทำให้เกิดการเปลี่ยนแปลงได้ แต่ก็ให้ความสนใจเรื่อง digital identity อย่างมาก
  • หากจำเป็นต้องอ่านข้อมูลจากบางเว็บไซต์ เว็บไซต์จะใช้ข้อมูล handshake เพื่อกันไม่ให้ซอฟต์แวร์อ่านได้

    • เมื่อส่งคำขอ HTTP จะใช้เบราว์เซอร์แบบ headless เป็นค่าปริยาย บางเว็บไซต์ก็ยังอ่านไม่ได้เพราะมี CAPTCHA เป็นต้น