ทำไมจึงต้องตรวจสอบไฟล์ที่ดาวน์โหลดมา


19

ฉันมักจะเห็นการตรวจสอบที่ได้รับถัดจากไฟล์ที่สามารถดาวน์โหลดได้ จุดประสงค์ของการฝึกนี้ทำให้ฉันหลง เห็นได้ชัดว่ามันตรวจจับไฟล์ที่เสียหาย แต่สิ่งที่อาจเป็นสาเหตุของความเสียหายนี้และเป็นไปได้หรือไม่

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


2
และผู้โจมตีใด ๆ ที่สามารถแก้ไขไฟล์เพื่อวัตถุประสงค์ที่เป็นอันตรายก็สามารถแก้ไขเช็คซัมที่ได้รับ - ตกลงการตรวจสอบจะไม่รับประกันความถูกต้องหากไม่ได้แสดงผ่าน HTTPS หรือคุณไม่แน่ใจว่าใบรับรอง SSL เป็นของผู้สร้างซอฟต์แวร์
หมดเวลา

1
TCP checksum นั้นค่อนข้างน่ากลัวเพราะมันมีเพียง 16 บิตเท่านั้น หากคุณให้บริการไฟล์ขนาดใหญ่แก่ผู้คนหลายพันคน (คิดว่า: การติดตั้งอิมเมจดีวีดี) แน่นอนว่าการดาวน์โหลดเหล่านั้นบางรายการจะเสียหายอย่างตรวจจับไม่ได้
ทำเครื่องหมาย

@Mihai แน่นอนว่ามันอาจลดความเสี่ยงลงเล็กน้อย ตัวอย่างเช่นหากเซิร์ฟเวอร์ของคุณติดไวรัสที่ปรับเปลี่ยนการตอบสนองแบบไบนารี่ทั้งหมดโดยอัตโนมัติ (หรือแทนที่ไฟล์ปฏิบัติการทั้งหมดที่คุณดาวน์โหลด) มันไม่สมบูรณ์แบบ แต่สามารถช่วยได้ในบางกรณี
Luaan

คำตอบ:


9

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

ดังนั้นเพื่อให้แน่ใจว่าซอฟต์แวร์ที่ดาวน์โหลดนั้นเหมือนกับของซอฟต์แวร์ 'เป็นทางการ' ที่เผยแพร่โดยองค์กรที่เกี่ยวข้องจึงใช้การตรวจสอบ อัลกอริทึมที่ใช้สำหรับสร้าง checksums นั้นแม้กระทั่งการเปลี่ยนแปลงเล็กน้อยในโปรแกรมก็ส่งผลให้เกิด checksum ที่แตกต่างกันโดยสิ้นเชิง

ตัวอย่างที่นำมาจากPractical Unix และ Internet Security

MD5 (มี $ 1,500 ในกล่องสีน้ำเงิน) = 05f8cfc03f4e58cbee731aa4a14b3f03

MD5 (มี $ 1100 ในกล่องสีน้ำเงิน) = d6dee11aae89661a45eb9d21e30d34cb

ข้อความซึ่งแตกต่างกันเพียงตัวเดียว (และภายในตัวอักษรโดยบิตเดียวบิตเดียว) มีการแยกย่อยข้อความที่แตกต่างอย่างสิ้นเชิง

หากไฟล์ที่ดาวน์โหลดมีการตรวจสอบเช่นเดียวกับการตรวจสอบที่ได้รับบนเว็บไซต์ 'เป็นทางการ' แสดงว่าซอฟต์แวร์นั้นไม่สามารถแก้ไขได้

หมายเหตุด้านข้าง:ตามทฤษฎีแล้วไฟล์ที่ต่างกันสองไฟล์สามารถมีค่าแฮชเดียวกันได้ สำหรับอัลกอริทึม Hash / checksum ที่จะพิจารณาว่าปลอดภัยควรคำนวณราคาแพงมากเพื่อค้นหาไฟล์อื่นที่สร้าง checksum เดียวกัน


1
ดังนั้นหากไฟล์และ checksum ให้บริการโดยโฮสต์เดียวกันมันค่อนข้างไร้ประโยชน์?
Karolis Juodelė

อาจจะ. การตรวจสอบเป็นเพียงวิธีการตรวจสอบความสมบูรณ์ พูดในสถานการณ์เฉพาะหากผู้โจมตีเข้าถึงเซิร์ฟเวอร์ FTP ขององค์กรเขาอาจแก้ไขซอฟต์แวร์ แต่คุณยังคงสามารถใช้ checksum เดียวกันเพื่อยืนยันความถูกต้องถ้าหากผู้โจมตีไม่ได้บุกเข้าไปในเซิร์ฟเวอร์ HTTP ดังนั้นหากทั้งคู่อยู่ภายใต้การควบคุมของผู้โจมตีเขาสามารถเปลี่ยนแปลงได้ทั้งสองอย่างและคุณจะไม่ทราบถึงความแตกต่าง
Aswin PJ

1
อีกสถานการณ์หนึ่งที่การตรวจสอบความเกี่ยวข้องอาจเกี่ยวข้องกับการตรวจสอบสถานการณ์ที่การถ่ายโอนไฟล์จะดำเนินต่อหลังจากอาการสะอึก แต่ไฟล์นั้นได้รับการเปลี่ยนแปลงในระหว่างกาล
supercat

@ KarolisJuodelėลิงค์ดาวน์โหลดอาจอยู่ในเว็บไซต์ / โฮสต์เดียวกัน แต่ตำแหน่งที่แก้ไขอาจแตกต่างกันไปตามเซิร์ฟเวอร์ที่ใกล้ที่สุด นอกจากนี้โปรดทราบว่าหน้าการตรวจสอบควรเป็น https ในขณะที่การดาวน์โหลดสามารถเป็นโปรโตคอลใด ๆ http หรือ ftp
balki

10

และผู้โจมตีใด ๆ ที่สามารถแก้ไขไฟล์เพื่อวัตถุประสงค์ที่เป็นอันตรายก็สามารถแก้ไขเช็คซัมที่ได้รับ

ไม่เสมอ.

คุณสามารถมีลิงค์เนื้อหาพร้อมกับ checksum ที่ให้บริการบน HTTPS ลิงก์อาจเป็นลิงค์ที่ไม่ได้เข้ารหัส - ธรรมดา HTTP หรือ FTP หรืออย่างอื่น

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

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


ที่กล่าวมาคุณได้เตือนฉันว่ามีสิ่งที่รบกวนซึ่งอ้างว่า "ปลอดภัย" และเว็บไซต์ของพวกเขาใช้ HTTP เท่านั้นเช่นเดียวกับลิงก์ไปยังรูปภาพของพวกเขา

ตัวอย่าง:

มันเป็นเรื่องตลกเพราะคุณอาจจะไม่ได้รับความปลอดภัยมากกว่านั้น แม้ว่าพวกเขาจะไม่ประสงค์ร้ายก็ตาม ISP ก็สามารถแทนที่ทั้งเว็บไซต์และรูปภาพด้วยการปลอมและให้ใครบางคนติดตั้งระบบปฏิบัติการที่ซับซ้อนขณะที่ทำให้ดูเหมือนว่าพวกเขาได้รับลินุกซ์ "ปลอดภัย" Linux เป็นที่สุด Pwnage


1
มีหลายสิ่งที่ปลอดภัยน้อยกว่า HTTP ที่ไม่ผ่านการตรวจสอบความถูกต้องซึ่งต้องมี MITM ที่ใช้งานอยู่เพื่อล้มล้าง
user253751

4

เท่าที่ทำไมการตรวจสอบข้อผิดพลาด TCP / IP ไม่ได้จับทุกอย่าง: จาก /programming//a/17083365/2551539

มีข้อผิดพลาดต่าง ๆ ที่สามารถเกิดขึ้นได้(TCP นั้นจะตรวจจับ) [ชี้ชัดโดย Jacob Krall] :

  • ลำดับแพ็กเก็ตไม่ถูกต้อง
  • การสูญเสียของแพ็กเก็ต
  • ข้อมูลที่เสียหายภายในแพ็คเก็ต
  • แพ็คเก็ตแฟนทอม (ผู้รับได้รับแพ็คเก็ตที่ไม่เคยส่ง)

แก้ไขด้วยข้อมูลเพิ่มเติม:

หน้า 9 ของการศึกษานี้: http://paperhub.s3.amazonaws.com/8ff1e4414c070e900da8ab3885593085.pdfแสดงให้เห็นว่ามีข้อผิดพลาดที่ไม่สามารถตรวจพบโดย TCP ความเข้าใจของฉันคือว่ามันเกิดขึ้นเมื่อดาตาแกรมที่ผิดพลาด (เรียกว่า "แฝดเลว" ในการศึกษา) มีการตรวจสอบเช่นเดียวกับดาตาแกรมที่ตั้งใจ (เรียกว่า "แฝดดี" ในการศึกษา)


2
อ่านคำตอบนั้นให้ละเอียดยิ่งขึ้นนั่นคือข้อผิดพลาดทั้งหมดที่ TCP แก้ไข
Jacob Krall

4

ข้อผิดพลาดในการส่งสามารถเกิดขึ้นได้ โปรโตคอลเลเยอร์ลิงค์มักจะมี checksums หรือรหัสแก้ไขข้อผิดพลาดเพื่อหลีกเลี่ยงพวกเขา แต่มันไม่สมบูรณ์แบบ: มีโอกาสเล็กน้อยที่ข้อผิดพลาดจะไม่ถูกแก้ไข แพ็คเก็ตTCPยังมีการตรวจสอบซึ่งช่วยลดโอกาสในการเกิดข้อผิดพลาด 2 ^ 16 ทำให้มีโอกาสน้อยมาก แต่ไม่ใช่ศูนย์ของข้อผิดพลาดในการส่ง มันเป็นสิ่งที่คนส่วนใหญ่ไม่เคยพบมาโดยไม่รู้ตัวในช่วงชีวิตของพวกเขา แต่มันไม่ได้อยู่ในความเป็นไปได้ที่ไม่เคยมีมาก่อนในพันล้านปีของ checksums การเข้ารหัสลับ

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

เหตุผลที่แท้จริงในการคำนวณ checksums คือการตรวจสอบข้อผิดพลาดระดับซอฟต์แวร์ สิ่งเหล่านี้เกิดขึ้น ข้อผิดพลาดที่เป็นไปได้รวมถึง:

  • ไฟล์ถูกดาวน์โหลดบางส่วน เว็บเซิร์ฟเวอร์และเบราว์เซอร์มีแนวโน้มที่จะตรวจพบการเชื่อมต่อที่ถูกขัดจังหวะและการล้างไฟล์บางส่วน ข้อผิดพลาดอาจเกิดขึ้นระหว่างการดาวน์โหลดของคุณหรืออาจเกิดขึ้นระหว่างการอัปโหลด
  • มีความเสียหายระหว่างทาง ตัวอย่างเช่นบางโหนดกลางในการกระจายของไฟล์ตัดสินใจที่จะใช้การแปลงการเข้ารหัสข้อความเป็นไฟล์ไบนารี หรือเซิร์ฟเวอร์ที่กำหนดค่าผิดพลาดบางตัวแสดงข้อความแสดงข้อผิดพลาดแทนเนื้อหา
  • ตัวแปร: อัปโหลดไฟล์ผิด
  • หายาก แต่มีประโยชน์ในการป้องกัน: ศัตรูเปลี่ยนไฟล์ แต่ไม่สามารถเปลี่ยนการตรวจสอบการอ้างอิง โครงสร้างพื้นฐานความปลอดภัยมีแนวโน้มที่จะทำให้ยากขึ้นสำหรับผู้โจมตีที่จะเผยแพร่การตรวจสอบที่ไม่ถูกต้องกว่าไฟล์ที่ไม่ถูกต้อง ตัวอย่างเช่นไฟล์ขนาดใหญ่มักจะแจกจ่ายผ่านมิเรอร์ในขณะที่ checksums จะให้บริการโดยไซต์กลางที่มีโอกาสน้อยลงสำหรับการแก้ไขดัดแปลง (การเข้าถึงเซิร์ฟเวอร์เฉพาะกับผู้นำโครงการเท่านั้นการแจกจ่ายผ่าน HTTPS)

ในทางปฏิบัติการตรวจสอบขนาดของไฟล์ที่ดาวน์โหลดจะจับข้อผิดพลาดที่พบบ่อยที่สุดซึ่งถูกตัดทอนหรือแปลงไฟล์ไม่ถูกต้อง Checksums มีข้อได้เปรียบที่พวกเขาตรวจพบปัญหาที่เข้มงวดมากขึ้น


2

ในทางทฤษฎีเครือข่ายจะส่งมอบทุกส่วนอย่างถูกต้องและพวกเขาจะรวมตัวกันอย่างถูกต้องบนดิสก์และไม่มีอะไรผิดพลาด

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

การตรวจสอบคุณภาพสูงเป็นวิธีที่เชื่อถือได้สำหรับการตรวจสอบความถูกต้องของข้อมูล


0

ไม่มีการตรวจสอบใดที่สามารถเชื่อถือได้ 100% เนื่องจากไฟล์จำนวนมากจับคู่กับการตรวจสอบเดียวกัน

เมื่อเราเพิ่มการตรวจสอบอีกครั้งในรถไฟเราจะเพิ่มความน่าจะเป็นในการตรวจจับข้อผิดพลาด

มีการจราจรบนอินเทอร์เน็ตเป็นจำนวนมากซึ่งความผิดพลาดนั้นค่อนข้างทั่วไป


นอกจากนี้ยังมีเน่าเล็กน้อย
Deer Hunter

ซึ่งควรตรวจพบโดย Hardware storage เอง แต่การตรวจสอบว่าเป็นคุณสมบัติที่สำคัญของ ZFS และ btrfs ฉันสงสัยว่ามันทำงานได้อย่างสมบูรณ์
Max Ried

0

Checksum จะช่วยป้องกันการดาวน์โหลดที่เสียหายเนื่องจากสถานการณ์ต่อไปนี้:

เซิร์ฟเวอร์มีข้อผิดพลาดภายในในขณะที่ให้บริการดาวน์โหลดดังนั้นการดาวน์โหลดจึงถูกยกเลิก

เมื่อสิ่งนั้นเกิดขึ้นมีผลลัพธ์ที่เป็นไปได้สองสามประการ:

  • เซิร์ฟเวอร์ที่ดี - การใช้งานการเข้ารหัสการถ่ายโอนแบบ Chunkedของเซิร์ฟเวอร์ไม่ได้เป็นค่าเริ่มต้น:
    • ลูกค้าที่ดี (เช่น cURL, wget) จะสามารถแจ้งให้คุณทราบว่านี่เป็นการดาวน์โหลดที่ไม่ดีเนื่องจากไม่มีการส่ง chunk ที่ยกเลิกจากเซิร์ฟเวอร์
    • ลูกค้าที่ไม่ดีจะคิดว่าการดาวน์โหลดเสร็จสิ้นเนื่องจากไม่ได้รับข้อมูลเพิ่มเติมจากเซิร์ฟเวอร์
  • เซิร์ฟเวอร์ไม่ดี - การใช้งานการเข้ารหัสการถ่ายโอนแบบ Chunked ของเซิร์ฟเวอร์คือรถที่จะส่งการยกเลิกการดาวน์โหลดที่ไม่ดีนี้:
    • ลูกค้าใด ๆจะคิดว่าการดาวน์โหลดนี้เสร็จสมบูรณ์แล้ว

ฉันเคยเห็นพฤติกรรมเหล่านี้ท่ามกลางเครื่องมือไคลเอนต์ที่เป็นที่นิยมและเฟรมเวิร์กเซิร์ฟเวอร์ดังนั้นเมื่อคุณไม่ใช้ checksum จากนั้นในกรณีของ "เซิร์ฟเวอร์ดี + ลูกค้าไม่ดี" หรือ "เซิร์ฟเวอร์ไม่ดี + ลูกค้าใด ๆ " การดาวน์โหลดที่เสียหายจะไม่ถูกสังเกต .

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