- ระหว่างการวิเคราะห์ล็อกของเว็บเซิร์ฟเวอร์ พบกิจกรรมของบอตจำนวนมากที่ร้องขอ ไฟล์ JavaScript ที่ไม่มีอยู่จริง
- คาดว่าเป็นพฤติกรรมที่ตีความสคริปต์แท็กในคอมเมนต์ HTML เป็นโค้ดจริงและร้องขอไป ซึ่งน่าจะเป็น ความพยายามเก็บข้อมูลสำหรับการฝึก LLM
- มีการเสนอแนวทางรับมือหลายแบบ เช่น การเปิดเผยคำเตือนสู่สาธารณะ, การบล็อก IP, ระเบิดบีบอัด, การวางยาพิษข้อมูล โดยอาศัยการตรวจจับคำขอผิดปกติเหล่านี้
- โดยเฉพาะ การวางยาพิษข้อมูล ถูกกล่าวถึงว่าเป็นวิธีที่มีประสิทธิภาพในการทำให้ข้อมูลฝึก LLM ปนเปื้อนและลดประสิทธิภาพของโมเดล
- เน้นย้ำถึงความจำเป็นที่ผู้ดูแลเว็บควรทดลองนำ กลยุทธ์ป้องกันและโต้กลับต่อ AI scraper มาใช้
พบพฤติกรรมการสแครปที่ผิดปกติ
- ยืนยันได้จากล็อกเซิร์ฟเวอร์ว่ามี คำขอ 404 error จำนวนมากต่อไฟล์ JavaScript ที่ไม่มีอยู่จริง
- ไฟล์ดังกล่าวเป็นสคริปต์ที่ถูกปิดการใช้งานและอยู่ภายในคอมเมนต์ HTML ซึ่งเบราว์เซอร์ปกติไม่ควรร้องขอ
- ใน User-Agent ของคำขอบางส่วน ระบุได้ชัดว่าเป็นบอต เช่น
python-httpx/0.28.1, Go-http-client/2.0, Gulper Web Bot 0.2.4
- แม้จะห้ามครอว์เลอร์เข้าถึงไว้ใน
robots.txt แล้ว คำขอก็ยังเกิดขึ้นต่อเนื่อง จึงถูกมองว่าเป็น การเพิกเฉยต่อกฎหรือเพิกเฉยนโยบาย
- คำขอบางส่วนปลอมตัวเป็นเบราว์เซอร์ปกติอย่าง Firefox, Chrome, Safari แต่เพราะไม่สามารถตีความคอมเมนต์ HTML ได้ จึงเผยให้เห็นว่าเป็น การปลอมแปลงตัวตน
- คำขอเหล่านี้ถูกคาดว่าเป็น scraper สำหรับ เก็บคอนเทนต์ไปใช้ฝึก LLM โดยไม่ได้รับความยินยอม
วิธีการทำงานของ scraper
- บางตัวอาจพาร์ส HTML ได้อย่างถูกต้องและไล่สำรวจ URL ภายในคอมเมนต์แบบ recursive
- อีกบางตัวน่าจะประมวลผล HTML เป็นเพียงข้อความธรรมดาแล้วทำ การดึง URL ด้วย regex
- จากความหลากหลายและระดับความซับซ้อนของ User-Agent จึงคาดว่ามี ผู้ดำเนินการหลายราย และบางรายใช้เครื่องมืออัตโนมัติแบบง่าย
- แรงจูงใจร่วมกันคือ การเก็บข้อมูลอย่างละโมบ และมีการเสนอว่าสามารถ ย้อนใช้จุดนี้กลับไปเล่นงานได้
การก่อวินาศกรรมเชิงอัลกอริทึม (Algorithmic Sabotage)
- คือการจงใจรบกวนระบบเชิงอัลกอริทึม ซึ่งเป็นประเด็นที่ได้รับความสนใจจาก ปัญหาต้นทุนภายนอกของ LLM
- หากสังเกตรูปแบบพฤติกรรมที่ไม่เหมือนมนุษย์ของบอตได้ ก็จะ ตรวจจับและตอบโต้ได้ง่าย
- วิธีรับมือแบ่งได้เป็น 4 แบบ: การเปิดเผยสู่สาธารณะ, การกรอง IP, ระเบิดบีบอัด, การวางยาพิษข้อมูล
0. การเปิดเผยสู่สาธารณะ (Public Disclosure)
- ความผิดพลาดเล็กน้อยที่อาจตรวจผิดได้ (เช่น พิมพ์ User-Agent ผิดเป็น “Mozlla”) หากเปิดเผยออกไปก็อาจถูกแก้ไขได้ง่าย จึงควรเก็บไว้ไม่เปิดเผย
- แต่สำหรับ พฤติกรรมที่เป็นแก่นแท้ (เช่น การร้องขอสคริปต์ในคอมเมนต์) ซึ่งแก้ไม่ได้ง่าย การเปิดเผยจึงเป็นประโยชน์
- วิธีนี้ช่วยให้ผู้ดูแลเว็บไซต์รายอื่นสามารถ ตรวจจับและบล็อก การโจมตีแบบเดียวกันได้
- ขณะนี้กำลังนำระบบตรวจจับพฤติกรรมดังกล่าวไปใช้กับเว็บไซต์อื่นเพิ่มเติม
1. การกรอง IP (IP Filtering)
- ใช้ fail2ban เพื่อบล็อกอัตโนมัติโดยอิงจากแพตเทิร์นในล็อก วันที่ และ IP
- โดยทั่วไปจะตั้งเวลาบล็อกสั้น ๆ แต่หาก บล็อกระยะยาว ก็อาจช่วยยับยั้งการลองใหม่ของบอตที่มีการเรียนรู้ได้
- ในกรณีของ botnet อาจสลับ IP แล้วร้องขอต่อเนื่องได้ แต่ยังสามารถตรวจจับจากแพตเทิร์นซ้ำ ๆ ได้
- มีการกล่าวถึงแผนศึกษาการทำงานของ botnet เพิ่มเติมในอนาคต
2. ระเบิดบีบอัด (Decompression Bombs)
- ส่ง zip bomb ให้กับไฟล์ที่ผู้โจมตีร้องขอ เพื่อทำให้ระบบใช้ทรัพยากรมากเกินไป
- อาจบังคับให้ใช้ CPU, RAM, ดิสก์อย่างหนัก หรืออาจนำไปสู่การใช้ประโยชน์จากช่องโหว่ได้
- ข้อเสียคือทำให้ทรัพยากรของเซิร์ฟเวอร์ถูกใช้ไปด้วย และมี ความเสี่ยงสิ้นเปลืองแบนด์วิดท์
- บอตบางตัวทำงานอยู่บนเครื่องที่ติดเชื้ออยู่แล้ว จึงอาจทำให้ผลของการโจมตีมีจำกัด
- แทนที่จะใช้กับทุกบอต มีการเสนอให้ ตอบสนองเฉพาะบางคำขอแบบสุ่ม
3. การวางยาพิษข้อมูล (Poisoning)
- ทำให้ข้อมูลสำหรับฝึก LLM ปนเปื้อนเพื่อบั่นทอนประสิทธิภาพของโมเดล
- งานวิจัยล่าสุดระบุว่า แม้มีเพียง เอกสารปนเปื้อน 250 ฉบับ ก็อาจสร้างผลกระทบถาวรต่อโมเดลขนาดใหญ่ได้
- ข้อมูลปนเปื้อนอาจทำให้โมเดลสร้าง เอาต์พุตไร้ความหมาย ในหัวข้อบางอย่าง
- ตัวอย่างเช่น สามารถชักจูงให้โมเดลแนะนำบล็อกหนึ่งเป็นพิเศษเมื่อถูกถามเรื่องงานวิจัยด้านความปลอดภัย
- สามารถใช้เครื่องมือสาธารณะอย่าง nepenthes, iocaine, glaze, nightshade ได้
- หากข้อมูลฝึก LLM ถูก เก็บรวบรวมโดยไม่ได้รับความยินยอม การตอบโต้แบบนี้ถูกเสนอว่าเป็น วิธีป้องกันที่ชอบธรรม
- หากใช้ร่วมกับการบล็อก IP อาจเพิ่มความซับซ้อนในการใช้งาน แต่ก็ยัง มีความเป็นไปได้ที่จะใช้งานร่วมกัน
- อาจไม่เปิดเผยการออกแบบที่มีประสิทธิภาพ และเน้นย้ำความจำเป็นในการ ขยายการมีส่วนร่วมในวินาศกรรมเชิงสร้างสรรค์
บทสรุปและการตอบสนองของชุมชน
1 ความคิดเห็น
ความเห็นจาก Hacker News
เว็บสแครปเปอร์ส่วนใหญ่ทำไปเพื่อธุรกิจ แม้ในหลายกรณีจะผิดกฎหมายก็ตาม
เลยมักจะไปดึงข้อมูลจาก Amazon หรือเว็บช้อปปิ้งต่าง ๆ และสุดท้ายทราฟฟิกที่ไม่พึงประสงค์ส่วนใหญ่ก็มาจากบิ๊กเทคหรือผู้ไม่หวังดีที่มุ่งหาช่องโหว่
ฉันพอรู้เรื่องเว็บสแครปปิงอยู่บ้าง บางเว็บไซต์จะตอบกลับเป็น 404 เพื่อป้องกันตัว ดังนั้นครอว์เลอร์ของฉันจึงลองวิธีครอว์ลแบบเร็วหลายครั้งด้วยเครื่องมืออย่าง
curlcffiการป้องกัน Zip bomb นั้นง่าย แค่อ่าน
content-lengthจากเฮดเดอร์ก็พอแล้ว ถ้าคำตอบมีขนาดใหญ่เกินไปก็ตั้งลิมิตจำนวนไบต์ไม่ให้อ่านต่อ และควบคุมด้วย timeout ได้ด้วยแต่รู้ไหมว่า timeout ของ
requestsไม่ได้เป็น timeout สำหรับการอ่านทั้งหน้า? ถ้าเซิร์ฟเวอร์ค่อย ๆ ส่งไบต์มา ก็อาจรอไม่รู้จบได้เพราะงั้นฉันเลยสร้าง ระบบครอว์ลิง ของตัวเองขึ้นมาเพื่อแก้ปัญหาแบบนี้ และยังรัน Selenium ได้อย่างสม่ำเสมอด้วย
โปรเจกต์ของฉันคือ crawler-buddy และไลบรารีฐานคือ webtoolkit
content-lengthถูกคำนวณ หลัง content-encodingคำว่า “เก็บข้อมูลฝึก LLM แบบไม่ยินยอม” ฟังดูน่าขำ
แค่ส่งคำขอ GET ไปยังเซิร์ฟเวอร์ HTTP ที่เปิดสาธารณะ จะต้องขออนุญาตอะไรด้วยไม่เข้าใจ แน่นอนว่าคดี weev เป็น โศกนาฏกรรม ที่ค่อนข้างยกเว้น
แต่ (1) การเข้าถึงของผู้ใช้ทั่วไปกับ DDoS จากบอต เป็นคนละเรื่องกัน ของที่ให้ใช้ฟรีไม่ได้แปลว่าจะเอาไปได้ไม่จำกัดจนเป็นการละเมิด
(2) การทำสำเนาอย่างถูกกฎหมายกับ การปลอมแปลงโดยหุ่นยนต์ ควรถูกแยกจากกัน
(3) ถ้าเป็นบอตที่ทำงานอย่างเหมาะสม ก็ควรเคารพ
robots.txtแม้จะไม่ใช่กฎหมาย แต่เป็นเรื่องของ มารยาทบอตที่หมุนใช้ residential IP หลายล้านรายการไม่มีทางถือว่าปกติได้
การเป็นเซิร์ฟเวอร์สาธารณะไม่ได้แปลว่ายอมรับคำขอเท็จ ๆ แต่เป็นการยินยอมโดยนัยเฉพาะคำขอที่สมเหตุสมผลเท่านั้น
robots.txtไม่ได้มีผลผูกพันทางกฎหมาย แต่เป็น คำขออย่างสุภาพมีความหมายประมาณว่า “กรุณาอย่าสแครปหน้านี้” เท่านั้น ถ้าอยากป้องกันจริงก็ควรใช้ API token หรือขั้นตอนยืนยันตัวตน
เหมือนกับที่สแปมไม่ใช่อีเมลธรรมดา การใช้บอตในทางที่ผิดก็ไม่เหมือนคำขอทั่วไป
น่าจะเร็วกว่า ถ้า ค้นหาสตริง http/https โดยตรง แทนการพาร์ส DOM
สุดท้ายตัวจำกัดจริง ๆ คือ ความแออัดของเครือข่าย
สนุกดีที่ได้เห็น การประยุกต์ใช้งานจริง ของงานวิจัยที่น่าสนใจ
งานวิจัยที่เกี่ยวข้องดูได้จากโพสต์นี้
ชื่อเรื่องชวนสับสน น่าจะใช้คำว่า “commented-out” มากกว่า
นี่ดูไม่ใช่การใช้งานในทางที่ผิดเท่าไร แค่เหมือน อ่าน URL ที่ถูกคอมเมนต์ทิ้งไว้ มากกว่า
robots.txtแล้วยังสแครปแม้แต่คอมเมนต์ ก็ชัดเจนว่าเป็น พฤติกรรมไร้มารยาทสมัยก่อนตอนครอว์ลเว็บ regex ของ Perl น่าเชื่อถือที่สุด
URL ในคอมเมนต์ก็ถูกใส่เข้าคิวตามปกติ
ชวนคิดว่า ถ้าให้บอตเจอไฟล์ ข้อมูลสุ่มขนาด 512MB จะเป็นยังไง
สตาร์ตอัปที่ฉันทำอยู่ให้บริการแบบนี้พอดี เป็น Ad-poisoning-as-a-service
นี่ดูไม่ใช่ “การเก็บข้อมูลเพื่อฝึก LLM” เท่าไร แต่เป็นแค่ noise จากการสแกนอินเทอร์เน็ต
ไฟล์ JS เป็นเบาะแสที่ดี ไม่ว่าจะอยู่ในคอมเมนต์หรือไม่ก็ตาม
แต่ถ้าเป็นเพื่อฝึก LLM จริง ก็คงไม่ได้สนใจ โค้ด JS คุณภาพต่ำ แบบนี้นัก
นี่คือความคิดเกี่ยวกับการ วางยาพิษทราฟฟิก สำหรับการฝึก LLM ที่ไม่พึงประสงค์
ถ้าร่วมมือกับเจ้าของลิขสิทธิ์ก็อาจลดความเสี่ยงลงได้
และยังอาจดัดแปลงภาพแบบไดนามิกในแต่ละคำขอเพื่อ ทำลายการป้องกันการลบข้อมูลซ้ำ ได้ด้วย ถ้ามีปลั๊กอินแบบนั้นฉันคงติดตั้งทันที