Steganography โดยไฟล์: ซ่อนข้อมูลโดยตรงในภาคส่วน

คำนำสั้น ๆ

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

เป็นไปได้ไหมที่จะทำโดยไม่มีอัลกอริธึมอันชาญฉลาดและการจัดการข้อมูลอย่างละเอียดและยังคงรับประกันการทำงานของคอนเทนเนอร์และระดับความปลอดภัยของข้อมูลที่ซ่อนอยู่ที่ยอมรับได้ เมื่อมองไปข้างหน้าฉันจะบอกว่า - ใช่คุณทำได้! ฉันจะเสนอยูทิลิตี้ด้วย

รายละเอียดวิธีการนองเลือด

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

ข้อดีของวิธีนี้ชัดเจน: เราไม่ได้ขึ้นอยู่กับรูปแบบไฟล์ หรือแม้แต่ประเภทของระบบไฟล์ที่ใช้

ฉันคิดว่าข้อเสียก็ชัดเจนเช่นกัน:

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

ตอนนี้เรามาดูข้อมูลเฉพาะกันดีกว่า

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

คำถามต่อไปคือเราจะแยกแยะข้อมูล “ดี” จากข้อมูลที่ไม่ดีได้อย่างไร การตรวจสอบผลรวมจะช่วยเราได้ แต่ไม่ใช่วิธีง่ายๆ แต่เป็น SHA1 และอะไร? มันดีพอสำหรับคอมไพล์ ดังนั้นมันก็จะเหมาะกับเราเช่นกัน ตัดสินใจแล้ว: เราจัดเตรียมข้อมูลที่เก็บไว้แต่ละชิ้นพร้อมกับผลรวมตรวจสอบ และหากหลังจากการถอดรหัสตรงกัน ก็หมายความว่าการถอดรหัสสำเร็จ

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

การทดสอบวิธีการในทางปฏิบัติ

ในการตรวจสอบลองใช้สื่อที่พบบ่อยที่สุดนั่นคือแฟลชไดรฟ์ ฉันพบอันเก่าที่มีความจุ 1 GB ซึ่งค่อนข้างเหมาะสำหรับการทดลอง หากคุณเช่นฉันเกิดความคิดที่จะไม่ยุ่งเกี่ยวกับสื่อทางกายภาพ แต่ทดสอบกับไฟล์ - ดิสก์อิมเมจ ฉันจะบอกทันที: มันจะไม่ทำงาน เมื่อทำการฟอร์แมต "ดิสก์" Linux จะสร้างไฟล์อีกครั้ง และเซกเตอร์ที่ไม่ได้ใช้ทั้งหมดจะถูกเติมด้วยศูนย์

น่าเสียดายที่ฉันเป็นเครื่องที่ใช้ Linux ฉันต้องใช้สถานีตรวจอากาศบน Raspberry Pi 3 ที่วางอยู่บนระเบียง ที่นั่นมีหน่วยความจำไม่มากดังนั้นเราจึงไม่ซ่อนไฟล์ขนาดใหญ่ เราจำกัดขนาดตัวเองไว้ที่ขนาดสูงสุด 10 เมกะไบต์ นอกจากนี้ยังไม่มีประโยชน์ในการซ่อนไฟล์ที่มีขนาดเล็กเกินไป: ยูทิลิตี้เขียนข้อมูลลงในดิสก์ในคลัสเตอร์ขนาด 4 KB ดังนั้นด้านล่างเราจะจำกัดตัวเองไว้ที่ไฟล์ขนาด 3 kb - มันพอดีกับคลัสเตอร์ดังกล่าว

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

  1. การจัดรูปแบบที่รวดเร็วในรูปแบบ FAT16 ด้วยขนาดคลัสเตอร์ 16 KB นี่คือสิ่งที่ Windows 7 เสนอให้ทำกับแฟลชไดรฟ์ที่ไม่มีระบบไฟล์
  2. เติมแฟลชไดรฟ์ด้วยขยะทุกชนิด 50%
  3. เติมแฟลชไดรฟ์ด้วยขยะทุกชนิด 100%
  4. การจัดรูปแบบ "ยาว" ในรูปแบบ FAT16 (เขียนทับทุกอย่าง)

การทดสอบสองครั้งแรกตามที่คาดไว้จบลงด้วยชัยชนะอย่างสมบูรณ์: ยูทิลิตี้นี้สามารถดึงข้อมูลลับขนาด 10 เมกะไบต์จากแฟลชไดรฟ์ได้สำเร็จ แต่หลังจากที่แฟลชไดรฟ์เต็มความจุไฟล์แล้ว เกิดความล้มเหลว:

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile

อย่างที่คุณเห็น มีการถอดรหัสคลัสเตอร์ได้สำเร็จเพียง 158 คลัสเตอร์ (ข้อมูลดิบ 632 กิโลไบต์ ซึ่งให้เพย์โหลด 636424 ไบต์) เห็นได้ชัดว่าไม่มีวิธีรับ 10 เมกะไบต์ที่นี่ แต่ในกลุ่มเหล่านี้ยังมีการซ้ำกันอย่างชัดเจน คุณไม่สามารถกู้คืน 1 เมกะไบต์ได้ด้วยวิธีนี้ แต่เราสามารถรับประกันได้ว่าเราจะกู้คืนข้อมูลลับ 3 กิโลไบต์จากแฟลชไดรฟ์แม้ว่าจะได้รับการฟอร์แมตและเขียนจนเต็มความจุแล้วก็ตาม อย่างไรก็ตาม การทดลองแสดงให้เห็นว่ามีความเป็นไปได้ที่จะแยกไฟล์ขนาด 120 กิโลไบต์ออกจากแฟลชไดรฟ์ดังกล่าว

โชคไม่ดีที่การทดสอบครั้งล่าสุดแสดงให้เห็นว่าแฟลชไดรฟ์ทั้งหมดถูกเขียนทับ:

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile

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

ค่อนข้างคาดหวังเช่นกันว่าไม่สามารถซ่อน 10 เมกะไบต์ในดิสก์เต็มได้ แต่ตอนนี้จำนวนคลัสเตอร์ที่ถอดรหัสสำเร็จเพิ่มขึ้นมากกว่าสองเท่า!

Total clusters read: 250752, decrypted: 405

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

ข่าวเกี่ยวกับการตรวจสอบครั้งสุดท้ายครั้งที่ 4 คราวนี้น่ายินดี: การฟอร์แมตแฟลชไดรฟ์ดังกล่าวโดยสมบูรณ์ไม่ได้นำไปสู่การทำลายข้อมูลทั้งหมด! ข้อมูลลับขนาด 120 กิโลไบต์พอดีกับพื้นที่ที่ไม่ได้ใช้งาน

ตารางสรุปการทดสอบ:

Steganography โดยไฟล์: ซ่อนข้อมูลโดยตรงในภาคส่วน

ทฤษฎีเล็กน้อย: เกี่ยวกับพื้นที่ว่างและเซกเตอร์ที่ไม่ได้ใช้

หากคุณเคยแบ่งฮาร์ดไดรฟ์ออกเป็นพาร์ติชั่น คุณอาจสังเกตเห็นว่าไม่สามารถจัดสรรพื้นที่ว่างทั้งหมดบนดิสก์ได้เสมอไป ส่วนแรกจะเริ่มต้นด้วยการเยื้องบางส่วนเสมอ (ปกติคือ 1 เมกะไบต์หรือ 2048 เซกเตอร์) ด้านหลังส่วนสุดท้าย ยังปรากฏว่ายังมี “ส่วนท้าย” เล็กๆ ของส่วนที่ไม่ได้ใช้อยู่ และบางครั้งก็มีช่องว่างระหว่างส่วนต่างๆ แม้ว่าจะไม่ค่อยมีก็ตาม

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

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

อีอีอี - กลองม้วน! คำตอบมักจะเป็นใช่เสมอ! ในกรณีส่วนใหญ่ การสร้างระบบไฟล์ขึ้นอยู่กับการเขียนข้อมูลบริการเพียงไม่กี่บล็อกลงในดิสก์ มิฉะนั้นเนื้อหาของพาร์ติชันจะไม่เปลี่ยนแปลง

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

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

ยูทิลิตี้สำหรับการทดลอง

คุณสามารถสัมผัสซอร์สโค้ดของยูทิลิตี้ได้ ที่นี่

ในการสร้าง คุณจะต้องมี Qt เวอร์ชัน 5.0 ขึ้นไปและ OpenSSL หากมีบางอย่างใช้งานไม่ได้ คุณอาจต้องแก้ไขไฟล์ steganodisk.pro

คุณสามารถเปลี่ยนขนาดคลัสเตอร์จาก 4 KB เป็น 512 ไบต์ (ใน Secretfile.h) ในขณะเดียวกัน ต้นทุนการบริการข้อมูลจะเพิ่มขึ้น: ส่วนหัวและผลรวมตรวจสอบมีขนาดคงที่ 68 ไบต์

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

สนุก.

ที่มา: will.com

เพิ่มความคิดเห็น