การย้อนกลับและการแฮ็กไดรฟ์ที่เข้ารหัสด้วยตนเองภายนอกเป็นงานอดิเรกเก่าของฉัน ในอดีตผมมีโอกาสได้ฝึกซ้อมกับรุ่นต่างๆ เช่น Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500 เมื่อเร็ว ๆ นี้ เพื่อนร่วมงานคนหนึ่งนำนิทรรศการอีกชิ้นมาให้ฉัน: Patriot (Aigo) SK8671 ซึ่งสร้างขึ้นตามการออกแบบทั่วไป - ไฟแสดง LCD และแป้นพิมพ์สำหรับป้อนรหัส PIN นั่นคือสิ่งที่ออกมาจากมัน…
1. บทนำ
การเคหะ
การบรรจุ
การเข้าถึงข้อมูลที่จัดเก็บไว้ในดิสก์ซึ่งคาดว่าจะเข้ารหัสนั้นจะดำเนินการหลังจากป้อนรหัส PIN บันทึกเบื้องต้นบางประการเกี่ยวกับอุปกรณ์นี้:
- หากต้องการเปลี่ยนรหัส PIN คุณต้องกด F1 ก่อนปลดล็อค
- รหัส PIN จะต้องมีตัวเลขตั้งแต่ 6 ถึง 9 หลัก
- หลังจากพยายามไม่ถูกต้อง 15 ครั้ง ดิสก์จะถูกล้าง
2. สถาปัตยกรรมฮาร์ดแวร์
ขั้นแรก เราจะแยกอุปกรณ์ออกเป็นส่วนๆ เพื่อทำความเข้าใจว่าอุปกรณ์ประกอบด้วยส่วนประกอบใดบ้าง งานที่น่าเบื่อที่สุดคือการเปิดเคส: สกรูขนาดเล็กและพลาสติกจำนวนมาก เมื่อเปิดเคสแล้วเราจะเห็นสิ่งต่อไปนี้ (ให้ความสนใจกับขั้วต่อห้าพินที่ฉันบัดกรี):
2.1. กระดานหลัก
กระดานหลักค่อนข้างง่าย:
ส่วนที่โดดเด่นที่สุด (ดูจากบนลงล่าง):
- ขั้วต่อสำหรับตัวบ่งชี้ LCD (CN1);
- ทวีตเตอร์ (SP1);
- PM25LD010 (
สเปค ) แฟลชไดรฟ์ SPI (U2); - คอนโทรลเลอร์ Jmicron JMS539 (
สเปค ) สำหรับ USB-SATA (U1); - ขั้วต่อ USB 3 (J1)
แฟลชไดรฟ์ SPI เก็บเฟิร์มแวร์สำหรับ JMS539 และการตั้งค่าบางอย่าง
2.2. กระดานแสดงสถานะ LCD
ไม่มีอะไรโดดเด่นบนบอร์ด LCD
เท่านั้น:
- ตัวแสดงสถานะบนจอ LCD ที่ไม่ทราบที่มา (อาจมีชุดแบบอักษรภาษาจีน) ด้วยการควบคุมตามลำดับ
- ขั้วต่อริบบิ้นสำหรับบอร์ดคีย์บอร์ด
2.3. บอร์ดคีย์บอร์ด
เมื่อตรวจสอบบอร์ดคีย์บอร์ด สิ่งต่างๆ จะเปลี่ยนไปที่น่าสนใจยิ่งขึ้น
ที่ด้านหลังเราเห็นขั้วต่อริบบิ้นเช่นเดียวกับไมโครคอนโทรลเลอร์ Cypress CY8C21434 PSoC 1 (ต่อไปนี้เราจะเรียกมันว่า PSoC)
CY8C21434 ใช้ชุดคำสั่ง M8C (ดู
2.4. มองสายไฟ
เรามาดูกันว่ามีอะไรเชื่อมต่อกันที่นี่ ในการทำเช่นนี้เพียงทดสอบสายไฟด้วยมัลติมิเตอร์:
คำอธิบายสำหรับแผนภาพนี้วาดที่หัวเข่า:
- PSoC อธิบายไว้ในข้อกำหนดทางเทคนิค
- ตัวเชื่อมต่อถัดไปทางด้านขวาคืออินเทอร์เฟซ ISSP ซึ่งสอดคล้องกับสิ่งที่เขียนเกี่ยวกับมันบนอินเทอร์เน็ตตามความประสงค์แห่งโชคชะตา
- ขั้วต่อขวาสุดคือขั้วต่อสำหรับขั้วต่อริบบิ้นกับบอร์ดคีย์บอร์ด
- สี่เหลี่ยมสีดำเป็นรูปวาดของขั้วต่อ CN1 ซึ่งออกแบบมาเพื่อเชื่อมต่อเมนบอร์ดกับบอร์ด LCD P11, P13 และ P4 เชื่อมต่อกับพิน PSoC 11, 13 และ 4 บนบอร์ด LCD
3. ลำดับขั้นตอนการโจมตี
ตอนนี้เรารู้แล้วว่าไดรฟ์นี้ประกอบด้วยส่วนประกอบใดบ้าง เราต้อง: 1) ตรวจสอบให้แน่ใจว่ามีฟังก์ชันการเข้ารหัสขั้นพื้นฐานอยู่จริง; 2) ค้นหาวิธีการสร้าง/บันทึกคีย์การเข้ารหัส 3) ค้นหาตำแหน่งที่จะตรวจสอบรหัส PIN อย่างแน่นอน
เมื่อต้องการทำเช่นนี้ ฉันทำตามขั้นตอนต่อไปนี้:
- ถ่ายโอนข้อมูลจากแฟลชไดรฟ์ SPI
- พยายามถ่ายโอนข้อมูลจากแฟลชไดรฟ์ PSoC
- ตรวจสอบแล้วว่าการสื่อสารระหว่าง Cypress PSoC และ JMS539 มีการกดแป้นพิมพ์จริง ๆ
- ฉันแน่ใจว่าเมื่อเปลี่ยนรหัสผ่านจะไม่มีการเขียนทับในแฟลชไดรฟ์ SPI
- ขี้เกียจเกินไปที่จะย้อนกลับเฟิร์มแวร์ 8051 จาก JMS539
3.1. การรับดัมพ์ข้อมูลจากแฟลชไดรฟ์ SPI
ขั้นตอนนี้ง่ายมาก:
- เชื่อมต่อโพรบเข้ากับขาของแฟลชไดรฟ์: CLK, MOSI, MISO และ (อุปกรณ์เสริม) EN;
- การสื่อสารแบบ "สูดดม" กับการดมกลิ่นโดยใช้เครื่องวิเคราะห์ลอจิก (ฉันใช้
ขาย Logic Pro 16 ); - ถอดรหัสโปรโตคอล SPI และส่งออกผลลัพธ์เป็น CSV
- ใช้ประโยชน์จาก
decode_spi.rb เพื่อแยกวิเคราะห์ผลลัพธ์และรับดัมพ์
โปรดทราบว่าวิธีการนี้ทำงานได้ดีเป็นพิเศษในกรณีของคอนโทรลเลอร์ JMS539 เนื่องจากคอนโทรลเลอร์นี้โหลดเฟิร์มแวร์ทั้งหมดจากแฟลชไดรฟ์ในขั้นตอนการเริ่มต้น
$ decode_spi.rb boot_spi1.csv dump
0.039776 : WRITE DISABLE
0.039777 : JEDEC READ ID
0.039784 : ID 0x7f 0x9d 0x21
---------------------
0.039788 : READ @ 0x0
0x12,0x42,0x00,0xd3,0x22,0x00,
[...]
$ ls --size --block-size=1 dump
49152 dump
$ sha1sum dump
3d9db0dde7b4aadd2b7705a46b5d04e1a1f3b125 dump
หลังจากนำดัมพ์จากแฟลชไดรฟ์ SPI ฉันได้ข้อสรุปว่างานเดียวคือจัดเก็บเฟิร์มแวร์สำหรับอุปกรณ์ควบคุม JMicron ซึ่งติดตั้งอยู่ในไมโครคอนโทรลเลอร์ 8051 น่าเสียดายที่การทิ้งแฟลชไดรฟ์ SPI กลับไร้ประโยชน์:
- เมื่อเปลี่ยนรหัส PIN การถ่ายโอนข้อมูลแฟลชไดรฟ์จะยังคงเหมือนเดิม
- หลังจากระยะการเริ่มต้น อุปกรณ์จะไม่สามารถเข้าถึงแฟลชไดรฟ์ SPI
3.2. การดมกลิ่นการสื่อสาร
นี่เป็นวิธีหนึ่งในการค้นหาว่าชิปตัวใดที่รับผิดชอบในการตรวจสอบการสื่อสารสำหรับเวลา/เนื้อหาที่สนใจ ดังที่เราทราบแล้วว่าคอนโทรลเลอร์ USB-SATA เชื่อมต่อกับ Cypress PSoC LCD ผ่านตัวเชื่อมต่อ CN1 และริบบอนสองตัว ดังนั้นเราจึงเชื่อมต่อโพรบเข้ากับขาสามขาที่สอดคล้องกัน:
- P4, อินพุต/เอาต์พุตทั่วไป;
- P11, I2C เอสซีแอล;
- P13, I2C SDA.
จากนั้นเราเปิดตัววิเคราะห์ตรรกะ Saleae และป้อนบนแป้นพิมพ์: “123456~” ด้วยเหตุนี้เราจึงเห็นแผนภาพต่อไปนี้
เราจะเห็นช่องทางการแลกเปลี่ยนข้อมูลสามช่องทาง:
- มีการระเบิดสั้น ๆ หลายครั้งในช่อง P4;
- บน P11 และ P13 - การแลกเปลี่ยนข้อมูลเกือบต่อเนื่อง
เมื่อซูมเข้าที่สไปค์แรกบนช่อง P4 (สี่เหลี่ยมสีน้ำเงินในรูปก่อนหน้า) เราจะเห็นสิ่งต่อไปนี้:
ที่นี่คุณจะเห็นได้ว่าใน P4 มีสัญญาณซ้ำซากเกือบ 70ms ซึ่งในตอนแรกดูเหมือนว่าฉันจะเล่นบทบาทของสัญญาณนาฬิกา อย่างไรก็ตาม หลังจากใช้เวลาตรวจสอบการเดาของฉันมาระยะหนึ่ง ฉันพบว่านี่ไม่ใช่สัญญาณนาฬิกา แต่เป็นสตรีมเสียงที่ส่งออกไปยังทวีตเตอร์เมื่อกดปุ่ม ดังนั้นสัญญาณส่วนนี้จึงไม่มีข้อมูลที่เป็นประโยชน์สำหรับเรา อย่างไรก็ตาม สามารถใช้เป็นตัวบ่งชี้เพื่อให้ทราบว่าเมื่อใดที่ PSoC ลงทะเบียนการกดปุ่ม
อย่างไรก็ตาม สตรีมเสียง P4 ล่าสุดแตกต่างออกไปเล็กน้อย นั่นคือเสียงสำหรับ "PIN ไม่ถูกต้อง"!
กลับไปที่กราฟการกดแป้นพิมพ์ โดยซูมเข้ากราฟสตรีมเสียงล่าสุด (ดูสี่เหลี่ยมสีน้ำเงินอีกครั้ง) เราจะได้:
ที่นี่เราเห็นสัญญาณซ้ำซากบน P11 ดูเหมือนว่านี่คือสัญญาณนาฬิกา และ P13 คือข้อมูล สังเกตว่ารูปแบบเปลี่ยนไปอย่างไรหลังจากเสียงบี๊บสิ้นสุดลง มันน่าสนใจที่จะเห็นว่าเกิดอะไรขึ้นที่นี่
โปรโตคอลที่ทำงานกับสายสองเส้นมักจะเป็น SPI หรือ I2C และข้อกำหนดทางเทคนิคของ Cypress ระบุว่าพินเหล่านี้สอดคล้องกับ I2C ซึ่งเราเห็นว่าเป็นความจริงในกรณีของเรา:
ชิปเซ็ต USB-SATA จะสำรวจ PSoC อย่างต่อเนื่องเพื่ออ่านสถานะของคีย์ ซึ่งตามค่าเริ่มต้นคือ "0" จากนั้นเมื่อคุณกดปุ่ม "1" มันจะเปลี่ยนเป็น "1" การส่งครั้งสุดท้ายทันทีหลังจากกด “~” จะแตกต่างออกไปหากป้อนรหัส PIN ผิด อย่างไรก็ตาม ในขณะนี้ฉันยังไม่ได้ตรวจสอบสิ่งที่กำลังส่งอยู่ที่นั่นจริงๆ แต่ฉันสงสัยว่านี่ไม่น่าจะเป็นคีย์เข้ารหัส อย่างไรก็ตาม โปรดดูส่วนถัดไปเพื่อทำความเข้าใจว่าฉันลบเฟิร์มแวร์ภายใน PSoC ได้อย่างไร
ที่มา: will.com