ทำไมรหัสผ่านไม่ถูกต้องจะใช้เวลาดำเนินการนานกว่ารหัสที่ถูกต้อง


17

สถานที่ที่โดดเด่นที่สุดที่ฉันสังเกตเห็นคือตอนที่ทำงานกับ SSH แต่ฉันรู้สึกเหมือนได้สังเกตพฤติกรรมนี้ที่อื่นเช่นกัน

เมื่อฉันพยายามลงชื่อเข้าใช้เซิร์ฟเวอร์ Linux จากเดสก์ท็อป Windows ในที่ทำงานฉันสังเกตเห็นว่าถ้าฉันพิมพ์รหัสผ่านผิดจะใช้เวลา 5 วินาทีหรือมากกว่านั้นก่อนที่ฉันจะได้รับ "Access Denied" กลับมา จากนั้นเมื่อฉันพิมพ์รหัสผ่านถูกต้องการเข้าสู่ระบบ (พร้อมด้วยข้อความต้อนรับ ฯลฯ ) แทบจะทันที

มีเหตุผลเชิงเหตุผลสำหรับสิ่งนี้หรือไม่หรือจะเป็นการกำหนดค่าแปลก ๆ ที่เฉพาะเจาะจงกับเครื่องที่ใช้งานอยู่ที่นี่


1
มีการอภิปราย / คำตอบที่ดีนี้ในstackoverflow.com/questions/712339/…รวมถึงการลดความล่าช้าของลีนุกซ์ Linux ที่นี่และที่นี่โดยเฉพาะ
drzaus

เหมือนกันจะเกิดขึ้นเมื่อคุณเข้าสู่ระบบ Windows ด้วยรหัสผ่านที่ไม่ถูกต้อง แต่ฉันสังเกตเห็นว่าเวลาแตกต่างกันไปในบางครั้งในช่วงเวลาไม่กี่วินาทีจนถึงประมาณ 1-2 นาที
phuclv

คำตอบ:


21

อาจมีการหยุดพักชั่วคราวในตัวเพื่อให้การโจมตีกองกำลังเดรัจฉานทำได้ยากขึ้น

คุณจะเห็นสิ่งนี้ในข้อความแจ้งเตือนการเข้าสู่ระบบจำนวนมากที่เกี่ยวข้องกับการตรวจสอบความปลอดภัย ...


1
อาไม่เคยคิดอย่างนั้น นั่นเป็นเหตุผลที่สมบูรณ์แบบและจะอธิบายว่าทำไมฉันถึงรู้สึกว่าฉันเคยเห็นความล่าช้าแบบเดียวกันที่อื่น
Cam Jackson

aka ผ้าใบกันน้ำ ขอบคุณ Michael Kjörling ( superuser.com/questions/916187/… )
rfportilla

10

นี่คือความล่าช้าที่ตั้งใจไว้บางส่วนเพื่อป้องกันการโจมตีด้วยกำลังดุร้าย การหน่วงเวลาที่นานขึ้นยังป้องกันผู้โจมตีที่สามารถเดาความแตกต่างระหว่างชื่อผู้ใช้ผิดและรหัสผ่านไม่ถูกต้อง (การแฮชและการตรวจสอบรหัสผ่านใช้เวลานานกว่าการตรวจสอบชื่อผู้ใช้)


1

เทคนิคนี้ล่าช้าโดยเจตนาคือการป้องกันการโจมตีเช่น"การโจมตี Linearization" (มีการโจมตีอื่น ๆ และเหตุผลเช่นกัน)

เพื่อแสดงให้เห็นการโจมตีพิจารณาโปรแกรม (โดยไม่ชักช้าโดยเจตนานี้) ซึ่งการตรวจสอบป้อนอนุกรมเพื่อดูว่ามันตรงกับอนุกรมที่ถูกต้องซึ่งในกรณีนี้จะเกิดขึ้น " xyba " เพื่อประสิทธิภาพโปรแกรมเมอร์ตัดสินใจที่จะตรวจสอบตัวละครทีละตัวและออกทันทีที่พบตัวอักษรที่ไม่ถูกต้องก่อนที่จะเริ่มการตรวจสอบความยาว

ความยาวอนุกรมที่ถูกต้องจะใช้เวลาในการประมวลผลนานกว่าความยาวอนุกรมที่ไม่ถูกต้อง ยิ่งกว่านั้น (สำหรับผู้โจมตี) หมายเลขซีเรียลที่มีตัวอักษรตัวแรกที่ถูกต้องจะใช้เวลานานกว่าตัวที่มีตัวอักษรตัวแรกไม่ถูกต้อง ขั้นตอนต่อเนื่องในช่วงเวลารอคอยคือเนื่องจากแต่ละครั้งมีการวนซ้ำอีกครั้งการเปรียบเทียบการป้อนข้อมูลที่ถูกต้อง

  • ดังนั้นผู้โจมตีสามารถเลือกสตริงสี่ตัวอักษรและสตริงที่ขึ้นต้นด้วยxใช้เวลามากที่สุด (โดยเดางาน)
  • จากนั้นผู้โจมตีสามารถแก้ไขอักขระเป็นxและเปลี่ยนแปลงอักขระที่สองซึ่งในกรณีนี้พวกเขาจะพบว่าyใช้เวลานานที่สุด
  • จากนั้นผู้โจมตีสามารถแก้ไขอักขระสองตัวแรกเป็นxyและเปลี่ยนแปลงอักขระที่สามซึ่งในกรณีนี้พวกเขาจะพบว่าbใช้เวลานานที่สุด
  • จากนั้นผู้โจมตีสามารถแก้ไขอักขระสามตัวแรกเป็นxybและเปลี่ยนแปลงอักขระที่สี่ซึ่งในกรณีนี้พวกเขาจะพบว่าaใช้เวลานานที่สุด

ดังนั้นผู้โจมตีสามารถกู้คืนหมายเลขซีเรียลได้ทีละตัวอักษร

Linearization.java

Linearization.docx, เอาต์พุตตัวอย่าง

หมายเลขซีเรียลมีความยาวสี่ตัวอักษรและแต่ละตัวมี 128 ค่าที่เป็นไปได้ แล้วมี 128 4 = 2 28 = 268,435,456 สิ่งพิมพ์ที่เป็นไปได้ ถ้าโจมตีแบบสุ่มต้องเดาหมายเลข serial สมบูรณ์เธอจะคาดเดาหมายเลขในประมาณ 2 27 = 134,217,728 พยายามซึ่งเป็นจำนวนเงินมหาศาลในการทำงาน ในทางตรงกันข้ามโดยการใช้การโจมตีเชิงเส้นด้านบนจะต้องใช้ค่าเฉลี่ยเพียง 128/2 = 64 การคาดเดาสำหรับจดหมายแต่ละฉบับสำหรับงานที่คาดหวังทั้งหมดประมาณ 4 * 64 = 2 8 = 256 การเดา ซึ่งเป็นจำนวนเล็กน้อย ของการทำงาน.

ศิลปะการต่อสู้ส่วนใหญ่ถูกดัดแปลงมาจากสิ่งนี้ (นำมาจาก "ความปลอดภัยของข้อมูล: หลักการและการปฏิบัติ" ของมาร์คแสตมป์) นอกจากนี้การคำนวณข้างต้นไม่ได้คำนึงถึงจำนวนของการคาดเดาที่จำเป็นในการหาความยาวอนุกรมที่ถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.