เอาหละพอแล้วก็พอแล้ว นี่คือสิ่งที่ฉันเกิดขึ้นจนถึงตอนนี้
(ขออภัยโพสต์ยาวไปข้างหน้าจงกล้าหาญเพื่อนการเดินทางจะคุ้มค่า)
รวมวิธีการที่ 3 และ 4 จากตำแหน่งเดิมเป็นชนิดของ 'คลุมเครือ' หรือแบบไดนามิกรายการที่อนุญาตแล้ว - และนี่คือเคล็ดลับ - ไม่ได้ปิดกั้น IP ที่ไม่ใช่ที่อนุญาตพิเศษเพียงบีบรัดพวกเขาไปนรกและกลับ
โปรดทราบว่ามาตรการนี้มีไว้เพื่อป้องกันการโจมตีประเภทนี้โดยเฉพาะเท่านั้น ในทางปฏิบัติแน่นอนว่ามันจะทำงานร่วมกับแนวทางปฏิบัติอื่น ๆ ที่ดีที่สุดในการรับรองความถูกต้อง: การควบคุมปริมาณชื่อผู้ใช้คงที่, การควบคุมปริมาณไอพีต่อหนึ่ง IP, นโยบายบังคับใช้รหัสผ่านที่คาดเดาได้ยาก ใช้คำถามเพื่อความปลอดภัย ฯลฯ
สมมติฐานเกี่ยวกับสถานการณ์การโจมตี
หากผู้โจมตีกำหนดเป้าหมายชื่อผู้ใช้ตัวแปรการควบคุมปริมาณชื่อผู้ใช้ของเราจะไม่เริ่มต้น หากผู้โจมตีกำลังใช้บ็อตเน็ตหรือมีการเข้าถึงช่วง IP ขนาดใหญ่การควบคุมปริมาณ IP ของเรานั้นไม่มีอำนาจ หากผู้โจมตีได้คัดลอกรายการผู้ใช้ของเราล่วงหน้า (โดยปกติจะเป็นไปได้สำหรับบริการเว็บแบบเปิดลงทะเบียน) เราจะไม่สามารถตรวจจับการโจมตีอย่างต่อเนื่องตามจำนวนข้อผิดพลาด 'ไม่พบผู้ใช้' และถ้าเราบังคับใช้การ จำกัด การใช้งานทั่วทั้งระบบ (ชื่อผู้ใช้ทั้งหมด, IP ทั้งหมด) การโจมตีใด ๆ ดังกล่าวจะทำให้ DoS ทั้งเว็บไซต์ของเราตลอดระยะเวลาของการโจมตีรวมถึงช่วงเวลาการควบคุมปริมาณ
ดังนั้นเราต้องทำอย่างอื่น
ส่วนแรกของการตอบโต้: รายการที่อนุญาต
สิ่งที่เรามั่นใจได้อย่างแน่นอนคือผู้โจมตีไม่สามารถตรวจจับและปลอมแปลงที่อยู่ IP ของผู้ใช้ของเราหลายพันคน (+) ซึ่งทำให้รายการที่อนุญาตเป็นไปได้ กล่าวอีกนัยหนึ่ง: สำหรับผู้ใช้แต่ละคนเราจะจัดเก็บรายการของ IP (แฮช) ที่ผู้ใช้ลงชื่อเข้าใช้ก่อนหน้านี้ (เมื่อเร็ว ๆ นี้)
ดังนั้นรูปแบบรายการที่อนุญาตของเราจะทำหน้าที่เป็น 'ประตูหน้า' ที่ล็อคซึ่งผู้ใช้จะต้องเชื่อมต่อจากหนึ่งใน 'ดี' IP ที่ได้รับการยอมรับของเขาเพื่อเข้าสู่ระบบเลย การโจมตีที่ดุร้ายกับ 'ประตูหน้า' จะเป็นไปไม่ได้ในทางปฏิบัติ (+)
(+) ยกเว้นว่าผู้โจมตี 'เป็นเจ้าของ' ไม่ว่าจะเป็นเซิร์ฟเวอร์กล่องผู้ใช้ของเราทั้งหมดหรือการเชื่อมต่อเอง - และในกรณีเหล่านั้นเราไม่มีปัญหา 'การรับรองความถูกต้อง' อีกต่อไปเรามีการดึงขนาดแฟรนไชส์ของแท้ - เสียบสถานการณ์ FUBAR
ส่วนที่สองของการตอบโต้: การควบคุมปริมาณของ IP ที่ไม่รู้จัก
ในการทำให้รายการที่อนุญาตทำงานสำหรับบริการเว็บลงทะเบียนแบบเปิดซึ่งผู้ใช้สลับคอมพิวเตอร์บ่อยครั้งและ / หรือเชื่อมต่อจากที่อยู่ IP แบบไดนามิกเราจำเป็นต้องเปิด 'ประตูแมว' สำหรับผู้ใช้ที่เชื่อมต่อจาก IP ที่ไม่รู้จัก เคล็ดลับคือการออกแบบประตูนั้นเพื่อให้ได้รับการติด botnets และผู้ใช้ที่ถูกต้องเพื่อให้ได้รับการใส่ใจน้อยที่สุดเท่าที่เป็นไปได้
ในรูปแบบของฉันนี้จะประสบความสำเร็จโดยการตั้งค่ามากจำนวนสูงสุดที่เข้มงวดของการล้มเหลวในการพยายามเข้าสู่ระบบโดย IP ที่ไม่ได้รับอนุมัติมากกว่าบอกว่าระยะเวลา 3 ชั่วโมง (มันอาจจะฉลาดที่จะใช้ระยะเวลาสั้นหรือยาวขึ้นอยู่กับประเภทของบริการ) และ ทำให้ข้อ จำกัดระดับโลกคือ สำหรับบัญชีผู้ใช้ทั้งหมด
แม้แต่การใช้กำลังดุร้ายช้า ๆ (1-2 นาทีระหว่างการพยายาม) จะถูกตรวจจับและขัดขวางอย่างรวดเร็วและมีประสิทธิภาพโดยใช้วิธีนี้ แน่นอนว่าแรงเดรัจฉานที่ช้ามาก ๆนั้นยังคงไม่มีใครสังเกตเห็นได้ แต่ความเร็วที่ช้าเกินไปจะเอาชนะจุดประสงค์ของการโจมตีกำลังดุร้ายได้
สิ่งที่ฉันหวังว่าจะบรรลุผลด้วยกลไกการควบคุมปริมาณนี้คือหากถึงขีด จำกัด สูงสุดแล้ว 'ประตูแมว' ของเราปิดไปชั่วขณะหนึ่ง แต่ประตูหน้าของเรายังคงเปิดให้ผู้ใช้ที่ถูกกฎหมายเชื่อมต่อด้วยวิธีปกติ:
- ไม่ว่าจะโดยการเชื่อมต่อจากหนึ่งใน IP ที่ได้รับการยอมรับ
- หรือโดยใช้คุกกี้การเข้าสู่ระบบแบบถาวร (จากที่ใดก็ได้)
ผู้ใช้ที่ชอบด้วยกฎหมายเท่านั้นที่จะได้รับผลกระทบระหว่างการโจมตี - เช่น ในขณะที่การควบคุมปริมาณถูกเปิดใช้งาน - จะเป็นผู้ใช้ที่ไม่มีคุกกี้การเข้าสู่ระบบแบบถาวรซึ่งกำลังเข้าสู่ระบบจากตำแหน่งที่ไม่รู้จักหรือด้วย IP แบบไดนามิก ผู้ใช้เหล่านั้นจะไม่สามารถเข้าสู่ระบบได้จนกว่าการควบคุมปริมาณจะหายไป (ซึ่งอาจใช้เวลาสักครู่หากผู้โจมตียังคง botnet ของเขาทำงานแม้จะมีการควบคุมปริมาณ)
เพื่ออนุญาตให้ผู้ใช้กลุ่มย่อยขนาดเล็กนี้บีบผ่านประตูแมวที่ถูกปิดผนึกไว้เป็นอย่างอื่นแม้ในขณะที่บอทยังคงใช้งานอยู่ผมก็จะใช้รูปแบบการเข้าสู่ระบบ 'สำรอง' กับ CAPTCHA ดังนั้นเมื่อคุณแสดงข้อความ "ขออภัย แต่คุณไม่สามารถลงชื่อเข้าใช้จากที่อยู่ IP นี้ได้ในขณะนี้" ให้ใส่ลิงก์ที่ระบุว่า " การสำรองข้อมูลที่ปลอดภัย - มนุษย์เท่านั้น ( บอท: ไม่โกหก ) " ติดตลกเมื่อพวกเขาคลิกลิงค์นั้นให้พวกเขากรอกแบบฟอร์มการเข้าสู่ระบบรับรองความถูกต้อง reCAPTCHA ที่ข้ามการควบคุมปริมาณไซต์ ด้วยวิธีนี้หากพวกเขาเป็นมนุษย์และรู้รหัสผ่าน + ที่ถูกต้อง (และสามารถอ่าน CAPTCHA) พวกเขาจะไม่ถูกปฏิเสธบริการแม้ว่าพวกเขาจะเชื่อมต่อจากโฮสต์ที่ไม่รู้จักและไม่ได้ใช้คุกกี้ autologin
โอ้และเพิ่งจะอธิบาย: เนื่องจากฉันถือว่า CAPTCHAs เป็นความชั่วร้ายโดยทั่วไปตัวเลือกการเข้าสู่ระบบ 'สำรองข้อมูล' จะปรากฏเฉพาะเมื่อการควบคุมปริมาณใช้งานได้เท่านั้น
ไม่มีการปฏิเสธว่าการโจมตีที่ยั่งยืนเช่นนั้นจะยังคงเป็นรูปแบบของการโจมตี DoS แต่ด้วยระบบที่อธิบายไว้ในสถานที่มันจะส่งผลกระทบต่อสิ่งที่ฉันสงสัยว่าจะเป็นผู้ใช้ย่อยเพียงเล็กน้อยนั่นคือคนที่ไม่ได้ใช้ คุกกี้ "จดจำฉัน" และเข้าสู่ระบบในขณะที่มีการโจมตีเกิดขึ้นและไม่ได้ลงชื่อเข้าใช้จาก IP ปกติใด ๆ ของพวกเขาและผู้ที่ไม่สามารถอ่าน CAPTCHA ได้ เฉพาะผู้ที่ไม่สามารถบอกได้ว่าเกณฑ์ทั้งหมดเหล่านั้น - โดยเฉพาะบอทและผู้พิการที่โชคร้ายจริงๆเท่านั้นที่จะถูกผละออกจากการโจมตีของบอท
แก้ไข:จริง ๆ แล้วฉันคิดว่าจะให้ผู้ใช้ที่ท้าทาย CAPTCHA ผ่านระหว่าง 'lockdown' แทนการใช้ CAPTCHA สำรองแทนหรือเพื่อเสริมการล็อกอิน CAPTCHA สำรองให้ผู้ใช้มีตัวเลือกในการใช้ครั้งเดียว รหัสล็อคดาวน์เฉพาะผู้ใช้ที่ส่งไปยังอีเมลของเขาซึ่งเขาสามารถใช้เพื่อเลี่ยงการควบคุมปริมาณได้ สิ่งนี้ข้ามผ่านเกณฑ์ 'ความน่ารำคาญ' ของฉัน แต่เนื่องจากใช้เป็นทางเลือกสุดท้ายสำหรับผู้ใช้กลุ่มย่อยจำนวนเล็กน้อยและเนื่องจากมันยังคงถูกล็อกจากบัญชีของคุณมันจึงเป็นที่ยอมรับ
(โปรดทราบว่าไม่มีสิ่งนี้เกิดขึ้นหากการโจมตีนั้นซับซ้อนน้อยกว่ารุ่นที่เผยแพร่ที่น่ารังเกียจที่ฉันได้อธิบายไว้ที่นี่หากการโจมตีนั้นมาจากเพียงไม่กี่ IP หรือเพียงแค่กดชื่อผู้ใช้ไม่กี่ครั้ง และไม่มีผลกระทบต่อทั้งไซต์)
ดังนั้นนี่คือวิธีการตอบโต้ที่ฉันจะนำไปใช้ในห้องสมุดรับรองความถูกต้องของฉันเมื่อฉันเชื่อว่ามันเป็นเสียงและไม่มีวิธีที่ง่ายกว่าที่ฉันพลาด ความจริงก็คือมีวิธีที่ละเอียดอ่อนมากมายในการทำสิ่งที่ผิดพลาดในเรื่องความปลอดภัยและฉันไม่ได้เหนือสมมติฐานที่ผิดพลาดหรือตรรกะที่ไร้ข้อบกพร่อง ดังนั้นได้โปรดคำติชมคำติชมและการปรับปรุงรายละเอียดปลีกย่อยอื่น ๆ และอื่น ๆ ทั้งหมดเป็นที่นิยมอย่างสูง