การเป็นพลเมือง "ปกติ" ที่อาศัยอยู่ในยุโรปตะวันตกจำเป็นต้องล้างหรือเข้ารหัสการแลกเปลี่ยนในคอมพิวเตอร์ของฉันหรือไม่?
เป็นการตัดสินใจส่วนบุคคลขึ้นอยู่กับว่าคุณให้ความสำคัญกับความเป็นส่วนตัวของข้อมูลของคุณมากน้อยเพียงใดและคุณต้องการปกป้องข้อมูลของคุณมากน้อยเพียงใดหากต้องตกอยู่ในมือของผู้โจมตี สมมติว่าคุณมีแล็ปท็อปและวันหนึ่งมันถูกขโมย - มีแนวโน้มว่าโจรจะพยายามดึงรหัสผ่านหรือคีย์การเข้ารหัสหรือข้อมูลส่วนตัวอื่น ๆ และคุณสนใจไหม? ผู้คนจำนวนมากไม่สนใจ แต่บางคนทำ เป็นที่ยอมรับว่าขโมยส่วนใหญ่จะขายแล็ปท็อปเพื่อผลประโยชน์ทางการเงินทันที แต่ก็มีหลายกรณีที่ผู้โจมตีอาจถูกกระตุ้นให้ทำต่อไปเพื่อพยายามเข้าถึงข้อมูล
และก่อนที่ใครบางคนจะตอบว่า "ใช่" ฉันจะมีตัวอย่างในการทดสอบและรั่วออกจากการแลกเปลี่ยนของตัวเองเพื่อที่ฉันจะได้เห็นข้อมูลชนิดใดที่ไม่มีการป้องกันแม้จะมีการเข้ารหัสที่บ้าน
หน่วยความจำของกระบวนการใด ๆ อาจถูกสลับเป็นพื้นที่สว็อป หน่วยความจำรั่วไหลอาจเป็นอันตรายได้ - ตัวอย่างที่ชัดเจนเป็น Heartbleed - ดูวิธีที่ผมใช้ Heartbleed จะขโมยคีย์การเข้ารหัสลับของเว็บไซต์ส่วนตัว หน่วยความจำที่เปิดเผยโดย Heartbleed เป็นของกระบวนการเดียวเท่านั้นในขณะที่หน่วยความจำที่อาจเปิดเผยโดยพื้นที่สวอปของคุณเป็นของทุกกระบวนการ ลองนึกภาพกระบวนการที่มีคีย์ส่วนตัวหรือรายการรหัสผ่าน (เช่นเว็บเบราว์เซอร์) ที่ถูกสลับออก - รายการเหล่านั้นจะปรากฏในข้อความธรรมดาในพื้นที่สลับ การแยกมันเป็นเรื่องของการลอดผ่านหน่วยความจำสำหรับรูปแบบของข้อมูลโดยเฉพาะ - มันอาจเป็นข้อมูล ASCII ธรรมดาที่มองเห็นได้ผ่านstrings
หรืออาจมีส่วนร่วมมากขึ้นเช่นเดียวกับใน Heartbleed (โดยการทดสอบคือบางไบต์ที่ต่อเนื่องกันเป็นตัวหารของคีย์ crypto สาธารณะ) หากคุณมีพาร์ติชั่นที่เข้ารหัส / โฮมแล้วสิ่งที่ชัดเจนในการค้นหาคือบล็อกของข้อมูลที่สร้างรหัสการเข้ารหัสที่จะปลดล็อคข้อมูลของผู้ใช้
ตัวอย่างการทำงาน:
ทำbash -c 'echo SECRET=PASSWORD > /dev/null; sleep 1000'
เพื่อสร้างกระบวนการทุบตีกับข้อมูลลับบางอย่างในกองซ้อนของมัน
ทำsysctl vm.swappiness=100
เพื่อเพิ่มความรวดเร็ว (ไม่จำเป็น แต่อาจทำให้ตัวอย่างง่ายขึ้น)
รันtop -c
, กด f, เปิดใช้งานคอลัมน์ SWAP, กด q เพื่อกลับไปที่มุมมองกระบวนการด้านบน, เลื่อนลงจนกว่าคุณจะเห็นbash -c
กระบวนการ
ในเทอร์มินัลอื่นบันทึกโปรแกรม Chimnay Kanchi จากLinux: จะโหลดหน่วยความจำระบบได้อย่างไร เพื่อusemem.c
รวบรวมgcc -o usemem usemem.c
และเรียกใช้usemem &
ซ้ำแล้วซ้ำอีกใน terminal ซึ่งจะใช้หน่วยความจำสูงสุด 512MB ในแต่ละครั้ง (ไม่สำคัญว่าอะไรทำให้หน่วยความจำเปลี่ยนไปมันอาจเป็นการใช้งานระบบตามปกติกระบวนการวิ่งหนีหรือการโจมตีโดยเจตนาผลลัพธ์สุดท้ายก็เหมือนกัน)
เฝ้าดูด้านบนรอbash -c
รับการสลับ (ค่าคอลัมน์ SWAP> 0)
ตอนนี้ทำงานstrings /dev/sdaX | grep SECRET
ที่ X คือการแลกเปลี่ยนของคุณ
ขอแสดงความยินดี - คุณเพิ่งดึงข้อมูล "ความลับ" ออกจากพาร์ทิชันสลับ คุณจะเห็นข้อความ SECRET หลายสำเนาตามด้วย "รหัสผ่าน" สำเนาที่มีบรรทัดคำสั่งเต็มรูปแบบที่รั่วไหลออกมาจากกระบวนการทุบตีผู้ปกครองกระบวนการด้านบนและกระบวนการ 'bash -c' บรรทัดที่ไม่รวมบรรทัดคำสั่งทั้งหมดรั่วไหลออกมาจากกระบวนการ 'bash -c'
หากต้องการพิสูจน์ว่าความลับรั่วไหลจากหน่วยความจำกระบวนการและไม่ใช่เพียงแค่บรรทัดคำสั่งให้เพิ่มบรรทัดunsigned char secret[] = "SECRET=XXXX";
ใน usemem.c (ด้านล่างunsigned long mem;
บรรทัด) คอมไพล์แล้วเรียกใช้usemem &
ซ้ำแล้วซ้ำstrings /dev/sdaX | grep SECRET
อีก เวลานี้คุณจะเห็นความลับ 'XXXX' ถูกรั่วไหลออกมา