1 คะแนน โดย GN⁺ 2023-08-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • หาก BitLocker ที่ไม่มีรหัสผ่านพึ่งพา TPM แบบแยกชิป (discrete TPM) ก็สามารถดักจับคีย์ VMK แบบข้อความล้วนได้จากบัส SPI ในจังหวะที่ VMK ถูกส่งจาก TPM ไปยัง CPU ระหว่างบูต
  • การทดลองบน Lenovo L13 ใช้ DSLogic Plus ที่ราคาไม่ถึง 100 ดอลลาร์ แต่มีข้อจำกัดด้านการสุ่มสัญญาณมากสำหรับการอ่านบัส SPI 33MHz ได้อย่างเสถียร
  • ข้อมูลที่ดักจับมา ต้องตีความตามลำดับ SPI → TIS → TPM 2.0 และพบคีย์ขนาด 32 ไบต์ที่ขึ้นต้นด้วย 5761 ในบัฟเฟอร์ตอบกลับของ TPM2_Unseal
  • เมื่อนำคีย์ที่ดึงออกมาไปใช้กับ dislocker-fuse ก็สามารถเมานต์พาร์ทิชัน BitLocker ได้ และเปลี่ยน sethc.exe เป็น cmd.exe เพื่อให้กด Shift 5 ครั้งแล้วได้ SYSTEM shell
  • การใช้ discrete TPM เพียงอย่างเดียวให้การป้องกันได้ไม่เพียงพอ และแนวทางป้องกันที่ได้ผลจริงคือ ใช้ fTPM หรือกำหนด PIN/วลีรหัสผ่านให้กับ BitLocker

จุดอ่อนของ BitLocker แบบไม่มีรหัสผ่านและ discrete TPM

  • พาร์ทิชัน BitLocker ถูกเข้ารหัสด้วย FVEK (Full Volume Encryption Key)
  • FVEK จะถูกเข้ารหัสซ้ำด้วย VMK (Volume Master Key) แล้วเก็บไว้บนดิสก์พร้อมข้อมูลที่เข้ารหัส
    • โครงสร้างนี้ทำให้สามารถหมุนเวียนคีย์ได้โดยไม่ต้องเข้ารหัสทั้งดิสก์ใหม่
  • VMK ถูกเก็บไว้ใน TPM
    • ดังนั้นดิสก์จึงถอดรหัสได้เฉพาะตอนบูตบนเครื่องคอมพิวเตอร์เครื่องนั้นเท่านั้น
    • ใน Active Directory มีกลไกการกู้คืนอยู่
  • จุดที่เปราะบางคือช่วงที่ CPU ขอให้ TPM ส่ง VMK เพื่อใช้ถอดรหัสดิสก์
    • VMK จะวิ่งผ่าน บัส SPI ระหว่าง TPM กับ CPU ในรูปข้อความล้วน
    • หากดักจับค่านี้ได้ ก็สามารถนำไปใช้ถอดรหัสดิสก์ BitLocker ได้

อุปกรณ์ที่ใช้ดักจับการสื่อสารของ TPM

  • อุปกรณ์ทดลองคือ DSLogic Plus ลอจิกอะนาไลเซอร์
    • ซื้อมาในปี 2021 ในราคาต่ำกว่า 100 ดอลลาร์รวมภาษีและค่าส่ง
  • เพื่อให้ได้สัญญาณที่เสถียร โดยทั่วไปต้องใช้ความถี่สุ่มสัญญาณราว 3–4 เท่า ของความถี่บัส
    • บัส SPI เป้าหมายทำงานที่ 33MHz จึงต้องการการสุ่มสัญญาณอย่างน้อย 100MHz
    • สเปกของ DSLogic Plus ระบุว่าสูงสุด 400MHz ที่ 16 แชนเนล แต่การใช้งานจริงมีข้อจำกัด
  • DSLogic Plus มีข้อจำกัดชัดเจนตามวิธีการจับข้อมูลและจำนวนแชนเนล
    • หากเพิ่มจำนวนแชนเนลที่จับพร้อมกัน ความถี่สุ่มสัญญาณจะลดลง
    • โหมดสตรีมสามารถจับข้อมูลขนาดใหญ่ได้นานราว 1 นาที แต่ถูกจำกัดที่ 100MHz เมื่อใช้ 3 แชนเนล
    • โหมดบัฟเฟอร์แม้จะสุ่มสัญญาณได้ที่ 400MHz แต่ทำงานได้เพียงไม่กี่มิลลิวินาที จึงไม่เหมาะกับงานนี้
  • ตัวเลือกที่เป็นมืออาชีพกว่าคือ Saleae ซึ่งมีราคาสูงกว่าราว 10 เท่า และสามารถดูอุปกรณ์อื่นได้จาก รายการฮาร์ดแวร์ที่ sigrok รองรับ

การต่อเข้ากับบอร์ดและจังหวะการจับข้อมูล

  • SPI เป็น บัสที่ใช้ร่วมกัน จึงไม่จำเป็นต้องต่อเข้ากับขาเล็ก ๆ ของ TPM โดยตรง
    • หากมีชิ้นส่วนที่ใหญ่กว่าซึ่งต่ออยู่บนบัส SPI เดียวกัน ก็สามารถไปเกี่ยวสัญญาณจากจุดนั้นได้
    • ในการทดลองนี้ระบุชิป SPI flash ที่อยู่ใกล้เคียงแล้วใช้งานจากจุดนั้น
    • ตัวชิ้นส่วนมีสกรีนระบุไว้ ทำให้ค้นหา datasheet และตรวจสอบหน้าที่ได้ง่าย
  • เนื่องจากความถี่สุ่มสัญญาณจะตกลงเมื่อใช้ DSLogic จึงจับเพียง 3 เส้นจากบรรดาเส้น SPI
    • เส้นสำคัญคือ CLK, MOSI และ MISO
  • ค่าแรงดัน threshold ควรตั้งไว้ประมาณครึ่งหนึ่งของแรงดันสัญญาณ
    • แรงดันสัญญาณที่วัดได้คือ 3.3V และค่า threshold ที่เหมาะสมคือราว 1.6V
  • VMK ที่ต้องการจะถูกใช้งานในช่วงท้ายของขั้นตอน POST
    • บน Lenovo L13 ช่วงนั้นอยู่หลังหน้าจอสแปลชทันที หรือประมาณวินาทีที่ 14 ของการบูตทั้งหมดราว 25 วินาที
    • ก่อนหน้านั้นก็มีการทำงานของ SPI เช่นกัน แต่ส่วนใหญ่เป็นการอ่านและตรวจสอบในขั้นตอนบูตระยะแรก ไม่ใช่การสื่อสารกับ TPM
    • สามารถเริ่มจับข้อมูลได้ทันทีหลังเปิดเครื่อง หรือหากต้องการลดข้อมูลที่ไม่จำเป็นก็เริ่มหลังจากนั้นราว 7 วินาทีได้

การตีความ SPI, TIS และ TPM 2.0

  • สัญญาณที่จับได้ต้องแยกตีความเป็น 3 ชั้นคือ SPI, TIS และ TPM 2.0
  • SPI เป็นโปรโตคอลที่เรียบง่าย จึงตีความได้ด้วยลอจิกอะนาไลเซอร์ทั่วไป
    • เมื่อสัญญาณนาฬิกาเปลี่ยนจาก 0 เป็น 1 สถานะของเส้นข้อมูลในขณะนั้นจะเป็นค่าบิต
    • ในตัวอย่าง MOSI เป็น 0 ตลอด 8 จังหวะนาฬิกาจึงตีความเป็น 0x00 ส่วน MISO มีบิตแรกเป็น 1 เพียงบิตเดียวจึงตีความเป็น 0x80
  • ส่วนที่ยากที่สุดคือ TIS (TPM Interface Specification)
    • ไม่พบดีโค้ดเดอร์ที่ใช้งานได้จริง จึงต้องจัดการแบบแมนนวล
    • libsigrok decoders แม้จะตีความข้อมูลได้ไม่ถูกต้องนัก แต่ช่วยหาช่วงคร่าว ๆ ที่มีการแลกเปลี่ยนกับ TPM ได้
    • สาเหตุที่ล้มเหลวอาจเป็นเพราะการจับข้อมูลไม่มี Chip Select, สัญญาณนาฬิกาไม่แม่นยำ, มีบางไบต์ตกหล่น หรือเหตุผลอื่น
  • คำขอที่ส่งจากมาสเตอร์ไปยังสเลฟมีรูปแบบซ้ำ ๆ
    • สเลฟส่ง 80 เพื่อบอกว่าพร้อมแล้ว
    • มาสเตอร์ส่งเฮดเดอร์ D4 00 24 พร้อมไบต์ของ TPM
    • สเลฟยืนยันการอ่านด้วย 01 FF
  • การตอบกลับจากสเลฟไปยังมาสเตอร์ขึ้นกับการตั้งค่าและการอ่านรีจิสเตอร์
    • เฟรมตัวอย่างเป็นผลลัพธ์ของการอ่าน 1 ไบต์จากแอดเดรส D4 00 24
    • สเลฟเริ่มทรานแซกชันด้วย 80 แล้วจากนั้นค่าที่สนใจคือ 0x80 จึงปรากฏขึ้น

การหาคีย์จากการตอบกลับของ TPM2_Unseal

  • คำสั่ง TPM ที่ใช้ขอคืนคีย์คือ TPM2_Unseal
  • การแยกทรานแซกชันของ TPM ทำโดยโฟกัสที่การตอบกลับบนเส้น MISO มากกว่าที่เฟรมคำขอ
    • กรองข้อมูล SPI ดิบด้วยมาสก์ 80 00 00 00 01 .. แล้วเก็บไว้เฉพาะไบต์ wildcard ตัวสุดท้าย
    • จุดเริ่มต้นของทรานแซกชัน TPM ระบุได้จากเฮดเดอร์ 80 01 หรือ 80 02
    • การตอบกลับที่มีคีย์จะเป็นการตอบกลับการยืนยันตัวตนที่ยาวกว่า และขึ้นต้นด้วย 80 02
  • ระหว่างคำสั่ง Unseal กับการตอบกลับมีความหน่วงประมาณ 10ms
    • เฮดเดอร์ 80 02 หมายถึง password session ซึ่งต่างจากเฮดเดอร์ 80 01 แบบข้อความล้วนที่คำขอส่วนใหญ่ใช้
    • คาดว่าความหน่วงนี้เกิดจากการประมวลผล authentication ของคำขอและ HMAC ของคำตอบ
  • คำสั่งและคำตอบของ TPM ถูกประกอบกลับขึ้นมาทีละไบต์
    • ใช้เครื่องมือ tpmstream-web ในการดีโค้ด
    • คีย์ในบัฟเฟอร์ตอบกลับขึ้นต้นด้วย 5761 และมีความยาว 32 ไบต์

การเมานต์ดิสก์และการทำแบ็กดอร์

  • หลังบันทึกคีย์ที่ดึงออกมาไว้ในไฟล์ ก็ส่งต่อให้ dislocker-fuse เพื่อเมานต์พาร์ทิชัน BitLocker
  • ตัวอย่างคำสั่งจะสร้างไฟล์คีย์ เชื่อม /dev/sdd3 เข้ากับ ./mnt/ แล้วเมานต์ dislocker-file ซ้ำไปยัง ./mnt2/
  • แบ็กดอร์ที่ง่ายที่สุดคือการเขียนทับโปรแกรม sticky keys ของ Windows ด้วย cmd.exe
    • คัดลอก Windows/System32/cmd.exe ไปเป็น Windows/System32/sethc.exe
    • เมื่อนำดิสก์กลับไปใส่ในโน้ตบุ๊กแล้วบูต จากนั้นกด Shift 5 ครั้ง ก็จะได้ SYSTEM shell

ข้อจำกัดของอุปกรณ์และแนวทางป้องกัน

  • ไม่ค่อยแนะนำ DSLogic สำหรับงานนี้
    • มีการจับข้อมูลล้มเหลวจำนวนมากจนต้องทิ้งไป
    • การสุ่มสัญญาณที่ 3 เท่าของความเร็วบัสนั้นเพียงพอแบบเฉียด ๆ สำหรับการได้สัญญาณนาฬิกาที่สม่ำเสมอ และยังมีบางไบต์ตกหล่น
  • เพราะข้อจำกัดของอุปกรณ์ จึงต้องใช้เวลามากในการทำความเข้าใจโปรโตคอลเชิงลึกและตีความข้อมูลที่จับมาแบบแมนนวล
    • หากเป็นกรณีที่นายจ้างเป็นผู้จัดซื้ออุปกรณ์ ก็น่าจะคุ้มกว่าหากซื้อลอจิกอะนาไลเซอร์ระดับมืออาชีพไปเลย
  • การใช้ discrete TPM ไม่ได้เพิ่มความปลอดภัยของระบบอย่างที่คาด และอาจสร้าง ภาพลวงตาว่าปลอดภัย
  • แนวทางป้องกันมี 2 แบบ
    • ใช้ fTPM
    • หากจำเป็นต้องใช้ discrete TPM ก็ควรกำหนด PIN หรือวลีรหัสผ่านให้กับ BitLocker
  • Microsoft เองก็ แนะนำ ให้ตั้งค่า PIN หรือวลีรหัสผ่านของ BitLocker สำหรับพื้นที่ในองค์กรที่ต้องการการปกป้องข้อมูลในระดับสูงกว่า

1 ความคิดเห็น

 
GN⁺ 2023-08-25
ความคิดเห็นจาก Hacker News
  • TPM ทุกตัวรองรับ เซสชันที่เข้ารหัส เพื่อป้องกันการโจมตีแบบคนกลางลักษณะนี้ แค่ใช้ TPM2_StartAuthSession แล้วระบุให้เข้ารหัสในคำสั่งของแต่ละเซสชันก็พอ แต่ BitLocker ไม่ได้ใช้สิ่งนี้ จึงเป็นความล้มเหลวร้ายแรง Microsoft ควรแก้ไข
    หากเทียบกัน systemd ใช้เซสชันที่เข้ารหัสเมื่อใช้การเข้ารหัสดิสก์ LUKS ร่วมกับ TPM: https://github.com/systemd/systemd/commit/acbb504eaf1be51572...

    • นี่ไม่ใช่การโจมตีแบบคนกลางเต็มรูปแบบด้วยซ้ำ แต่ใกล้เคียงกับ การดักฟังแบบพาสซีฟ มากกว่า
      ขอถามเพราะไม่ค่อยรู้เรื่อง TPM ว่าเซสชันที่ผ่านการยืนยันตัวตนทำงานอย่างไร ระบบปฏิบัติการพิสูจน์ตัวตนของตัวเองต่อ TPM ด้วยวิธีที่ผู้โจมตีปลอมแปลงไม่ได้ในการโจมตีแบบคนกลางจริง ๆ ได้อย่างไร? ความลับหรือคีย์ที่เก็บไว้ฝั่งระบบปฏิบัติการก็ดูเหมือนจะต้องอยู่บนดิสก์เป็นข้อความธรรมดา เพราะยังไม่มีคีย์เข้ารหัส
      ต่อให้ระบบปฏิบัติการตรวจสอบตัวตนของ TPM ได้ด้วยวิธีใดวิธีหนึ่ง และทำให้ไม่สามารถเลี่ยงได้ด้วยการแก้ไขไฟล์บางไฟล์บนดิสก์ ผมก็ยังไม่เห็นว่าอะไรจะหยุดผู้โจมตีไม่ให้รันรูทีนเดียวกันในอีมูเลเตอร์ได้ หากไม่ผสานกับ สภาพแวดล้อมการประมวลผลที่ปลอดภัย ฝั่ง CPU อย่าง Intel ME หรือ SGX ก็ดูยากที่จะได้ความปลอดภัยจริงจากแนวทางนี้ และถ้าเป็นแบบนั้นก็เหมือนจะไม่ต้องมี TPM ตั้งแต่แรก
    • สงสัยว่าการละไว้นี้เป็นความตั้งใจหรือไม่ และถ้าใช่ เหตุผลคืออะไร
    • เซสชันที่ผ่านการยืนยันตัวตนแทบไม่มีประโยชน์จริง เว้นแต่จะเป็นอุปกรณ์ที่ผสานรวมอย่างสมบูรณ์ ไม่มีวิธีรับประกัน ตัวตนของ SRK ได้ การโจมตีแบบคนกลางจึงยังเป็นไปได้อยู่
  • มีบทความอื่นจากปี 2021 ด้วย
    https://arstechnica.com/gadgets/2021/08/how-to-go-from-stole...
    ผู้ผลิตโน้ตบุ๊กบางรายมีการตั้งค่าที่จะล้าง TPM เมื่อเปิดเครื่องโน้ตบุ๊ก หากคุณเปิดโน้ตบุ๊กเพื่อดูว่าสามารถเพิ่ม RAM ได้ไหม ก็ต้องหวังว่าจะเข้าถึง คีย์กู้คืน BitLocker ได้หรือมีสำรองไว้

    • การเก็บสำเนาคีย์กู้คืนไว้ที่ไหนสักแห่งเป็นนิสัยที่ดี
    • น่าจะพึ่งพาปุ่ม สวิตช์ตรวจจับการงัดแงะ แบบง่าย ๆ และอาจเลี่ยงได้ง่ายด้วยการตัดพลาสติกด้านหลังออก ไม่น่าจะใส่อุปกรณ์ซับซ้อนแบบเดินสายทั่วทั้งเคสไว้
    • ผมไม่เคยเห็นการตรวจจับการเปิดแชสซีถูกเปิดใช้เป็นค่าเริ่มต้นในอุปกรณ์สำหรับผู้บริโภคเลย อาจเป็นสินค้าที่สั่งจำนวนมากผ่านบัญชีองค์กรก็ได้ สินค้าแบบนั้นสามารถออกจากโรงงานด้วยการตั้งค่าตามที่ฝ่าย IT ต้องการ
    • หมายถึงกรณีที่ไขสกรูโน้ตบุ๊กแล้วเข้าถึงภายในใช่ไหม?
      ผมคิดว่าอาจเข้าถึงด้วยการตัดพลาสติกออกได้เหมือนกัน แบบฉากดึงปรสิตออกใน Matrix
    • ทุกวันนี้เป็นเรื่องขำ ๆ ไปแล้วว่าหาโน้ตบุ๊กที่มี RAM ที่อัปเกรดได้ ยาก บางไลน์ของ ThinkPad ก็เป็นแบบนั้น ส่วนโน้ตบุ๊กเกมมิ่งมักจะทำได้เป็นบางรุ่น
  • ไม่มีอะไรใหม่ ค่าเริ่มต้นไม่บังคับใช้ PIN แต่เอกสารของ Microsoft อธิบายการโจมตีหลายแบบและแนะนำให้ตั้งค่า BitLocker PIN เพื่อป้องกันได้อย่างสมบูรณ์ เพราะ TPM ป้องกันการลองเดาสุ่มแบบ brute force อยู่แล้ว PIN จึงค่อนข้างอ่อนได้
    ตัวอย่าง: https://learn.microsoft.com/en-us/windows/security/operating...

    • น่าสนใจที่เท่าที่ผมรู้ ตอนนี้ Windows Defender ป้องกันการยกระดับสิทธิ์ผ่านฟีเจอร์การช่วยการเข้าถึงเป็นค่าเริ่มต้นแล้ว Behavior:Win32/AccessibilityEscalation
    • ผมคาดว่า TPM จะลบวัสดุคีย์เมื่อมีการพยายามล้มเหลว X ครั้ง ไม่ใช่หรือ?
  • สำหรับ BitLocker และการเข้ารหัสประเภทนี้ ผมไม่เคยเข้าใจโครงสร้างที่ระบบให้คีย์ถอดรหัสโดยอัตโนมัติเลย หากโน้ตบุ๊กทั้งเครื่องถูกขโมย BitLocker ให้ความปลอดภัยอะไร? จากมุมมองผู้โจมตี ระบบก็แค่บูตขึ้นมาแล้วขอรหัสผ่านบัญชีผู้ใช้เท่านั้น
    เท่าที่ผมเข้าใจ มันน่าจะปกป้องข้อมูลของผมตอนถอดฮาร์ดดิสก์ออกจากโน้ตบุ๊กแล้วพยายามรันบนระบบอื่น เพราะความเข้าใจที่อาจโง่เขลานี้ ผมจึงตั้งรหัสผ่านที่ต้องป้อนเองกับ BitLocker เสมอ และกับ LUKS ก็ทำแบบนั้นมาตลอด ผมเข้าใจผิดทั้งหมดหรือเปล่า?

    • ผู้โจมตีต้องเลี่ยงการล็อกอิน ดึงคีย์ออกจากหน่วยความจำระบบ หรือถ้ามี TPM แบบกายภาพ ก็โจมตีแบบในบทความนี้ ซึ่งน่าจะเป็นการโจมตีที่ซับซ้อนกว่ามากเมื่อเทียบกับขโมยทั่วไปที่ขโมยคอมพิวเตอร์แพง ๆ ไปหาเงินเร็ว ๆ
      โดยปกติน่าจะล้างไดรฟ์แล้วขายมากกว่า และคงไม่พยายามทำการโจมตี cold boot จริง ๆ แต่ทั้งหมดขึ้นอยู่กับโมเดลภัยคุกคาม ส่วนตัวแล้วเหตุผลหลักที่ใช้การเข้ารหัสดิสก์ทั้งลูกบนอุปกรณ์ส่วนตัวคือเพื่อลดความจำเป็นในการทำลายสื่อจัดเก็บข้อมูลทางกายภาพเมื่อจะทิ้ง
      แม้ฮาร์ดดิสก์เสีย ผมก็ไม่จำเป็นต้องถอดมันออกมาจริง ๆ เพื่อให้แน่ใจว่าข้อมูลหายไปแล้ว อุปกรณ์ของผมมักอยู่ในโหมด sleep เวลาอยู่นอกบ้าน ดังนั้นถ้ามีใครจะทำการโจมตี cold boot ก็ทำได้อยู่ดี
    • ไม่ได้เข้าใจผิดทั้งหมด แต่อาจมองข้ามความเสี่ยงที่คีย์จะ ถูกส่งออกได้
      อย่างที่กล่าวไว้ หากคีย์ถอดรหัสถูกส่งให้ระบบโดยอัตโนมัติ คีย์นั้นก็อยู่ใน RAM และพร้อมให้ผู้โจมตีส่งออกแล้วนำกลับมาใช้กับดิสก์ที่เข้ารหัสได้ การโจมตี cold boot[1] เป็นเวกเตอร์การโจมตีที่ควรอ่านเพิ่มเติมเพื่อประเมินว่าเข้ากับโมเดลภัยคุกคามของคุณหรือไม่
      [1] https://en.wikipedia.org/wiki/Cold_boot_attack
    • Windows ควรทำให้ไม่มีใครเข้าถึงไฟล์ได้จนกว่าจะป้อนรหัสผ่านบัญชีที่ถูกต้อง ดังนั้นบนคอมพิวเตอร์เครื่องนี้ดิสก์จะถูกถอดรหัส แต่หลังจากนั้น Windows จะเป็นตัวบล็อกการเข้าถึง
    • เดาว่าถ้าไม่ได้ตั้งรหัสผ่านสำหรับการเข้ารหัสดิสก์ ในสถานการณ์นั้นก็คงไม่มีการป้องกัน
  • หากคีย์วิ่งผ่านบัสที่ใช้ร่วมกัน ก็แปลว่าส่วนประกอบทุกอย่างในระบบสามารถดักคีย์ได้ง่าย ๆ เหมือน logic analyzer ตัวนี้ใช่ไหม? ฟังดูเหมือนฝันร้ายด้านความปลอดภัยของซัพพลายเชน

    • จุดประสงค์ของการเข้ารหัสแบบนี้คือทำให้สามารถขายหรือนำฮาร์ดไดรฟ์ที่แยกออกไปใช้ซ้ำได้โดยไม่มีความเสี่ยงต่อข้อมูล
      ถ้าใครก็ตามสามารถบูตแล็ปท็อปแล้วเข้าถึงฮาร์ดไดรฟ์ที่ถูกถอดรหัสแล้วได้ การ sniff คีย์ก่อนมันต่างกันตรงไหน? ถ้าบูตแล็ปท็อปได้ ยังไงก็เข้าถึงผลลัพธ์สุดท้ายได้อยู่แล้ว
    • แม้จะใช้ร่วมกันระหว่างส่วนประกอบบางชิ้น แต่ไม่ใช่ทั้งหมดเลย ทุกวันนี้โดยทั่วไป SPI bus จะมีแค่ boot flash, TPM และตัว CPU เองซึ่งเป็น bus master ต่ออยู่
  • ถ้าต้องการให้ BitLocker ปกป้องในกรณีที่มีคนขโมยแล็ปท็อปไป ยังไงก็ต้องใช้ รหัสผ่าน และต้องปิด sleep mode ที่ไม่ใช่ hibernate

    • ข้อแรกก่อนบทความนี้ยังไม่ได้ชัดเจนเต็มที่ การขโมยแล็ปท็อปเป็นภัยคุกคามที่แทบจะอ่อนที่สุด[1] ในบรรดากรณีที่ full-disk encryption มีความหมาย และ Windows ก็โฆษณาอย่างมากว่าไม่ต้องการอะไรนอกจากรหัสผ่านบัญชีปกติ
      แล้วฮาร์ดแวร์ “ที่เชื่อถือได้” ของ TPM กำลังทำอะไรอยู่จริง ๆ กันแน่? boot measurement ก็ปลอมได้ด้วยหรือเปล่า? แถมเรื่องนี้ยังโง่อย่างน่าขัน ทำไม key material ถึงวิ่งเป็น plaintext อยู่บนบัส? ไม่มีแม้แต่โปรโตคอลแลกเปลี่ยนคีย์อะไรเลย
      [1] ตรงนี้มีเรื่อง secure delete ด้วย ซึ่งเป็นกรณีที่อ่อนแอกว่านั้นอีก แต่ถ้า full-disk encryption มี EEPROM ที่ถอดออกจากซ็อกเก็ตแล้วทำลายทางกายภาพได้ ส่วนนั้นก็แก้ได้ผลพอ ๆ กัน
  • สงสัยว่าใช้ซอฟต์แวร์อะไรในการแปลงสัญญาณดิบให้เป็น 0 กับ 1 เมื่อก่อนมีโปรเจกต์คล้าย ๆ กัน คือการอ่านข้อมูลดิจิทัลจากเทปคาสเซ็ตยุค 80 ได้ไฟล์ .wav ของเทปมาในสภาพค่อนข้างดี แต่ยังหาเครื่องมือหรือไลบรารีที่เหมาะสมสำหรับแปลงมันเป็น 0 กับ 1 ไม่ได้
    แน่นอนว่าความสนุกจริง ๆ น่าจะเริ่มหลังจากเริ่มถอดรหัส 0 กับ 1 แล้ว รู้แล้วว่าบิตถูกเข้ารหัสอย่างไร และมันคือ frequency-shift keying[0] สิ่งที่ไม่รู้คือควรใช้อะไรถอดรหัสสิ่งนี้ให้เป็นบิตสตรีมที่ผมเอาไปประมวลผลต่อได้
    [0] https://en.wikipedia.org/wiki/Frequency-shift_keying

    • สำหรับการถอดรหัส FSK tape เก่า ๆ ลองดู sliding Goertzel filter น่าจะดี เป็นฟิลเตอร์ที่ implement ง่าย ดึงแอมพลิจูดของ frequency bin เฉพาะภายใน sliding window และมักถูกพูดถึงในเอกสารการถอดรหัส DTMF
      สามารถเปรียบเทียบเอาต์พุตของฟิลเตอร์คู่นี้เพื่อสร้างเอาต์พุตดิจิทัลได้ จะใช้ sparse sliding discrete Fourier transform ก็ได้ แต่การ interpolate ระหว่าง frequency bin จะยุ่งยากกว่า ขณะที่ Goertzel filter จัดการเรื่องนั้นให้แทน
    • นี่คือสาขาใหญ่ที่เรียกว่า digital signal processing และโดยเนื้อแท้คือสิ่งที่โมเด็มหรือ analog-to-digital converter ของการ์ดเสียงทำ
      ไม่รู้จักอัลกอริทึมหรือซอฟต์แวร์ตัวเดียวที่แปลงสัญญาณดิบอะไรก็ได้ให้เป็นไบต์ ต้องหาก่อนว่าสัญญาณใช้ modulation แบบไหน แล้วหา decoder ที่ตรงกันหรือเขียนเอง โดยทั่วไปจะมีการกรองและอัลกอริทึมคณิตศาสตร์หลายอย่าง แต่โปรแกรมสำหรับ decoding ขั้นพื้นฐานมักค่อนข้างสั้นและเรียบง่าย
      เป็นทักษะที่เรียนไว้แล้วเจ๋งทีเดียว เพราะเทคนิคเดียวกันใช้ได้สารพัดที่ เช่น พอได้เรียน DSP นิดหน่อย ก็ทำอะไรได้มากขึ้นในงานสื่อสารไร้สาย ดนตรีและ sound design ภาพ และการประมวลผลวิดีโอ
    • อ่านจากบทความแล้วดูง่าย ตอน clock เปลี่ยนจาก low เป็น high ระดับปัจจุบันของ data line ก็คือค่าบิต และถ้าจะหาจุดเริ่มต้นก็หา 1 หนึ่งตัวกับ 0 เจ็ดตัว
    • น่าจะดู Pulseview https://github.com/sigrokproject/pulseview และส่วนอื่น ๆ ของโปรเจกต์ Sigrok https://github.com/sigrokproject ได้
      หรือผู้เขียนพูดถึง DSlogic ก็อาจมี fork ของโปรแกรมเหล่านั้นที่ผู้ผลิต logic analyzer ตัวนั้นทำไว้
    • โหลดรูทีนในยุคนั้นแค่นับจำนวน zero crossing ของ DC แล้วถ้าข้าม X ครั้งก็แปลงเป็น 0 ถ้าข้าม Y ครั้งก็แปลงเป็น 1 โดยไม่สนใจความถี่หรือแอมพลิจูด
      สัญญาณดิบมักถูกป้อนเข้า Schmitt trigger เพื่อทำ hysteresis สำหรับ edge ที่เสถียร วิธีนี้จะชดเชย polarity ของสัญญาณเทปและความคลาดเคลื่อนของมอเตอร์
  • ตรงที่ว่า “ถ้าใช้ TPM แยกทางกายภาพ ความปลอดภัยจะลดลงจริง ๆ” นี่ช่างย้อนแย้ง
    แล็ปท็อปของผมในปี 2015 ไม่มี TPM แบบกายภาพ พอจะเปิดใช้ก็ขึ้นว่า “อนุญาต BitLocker โดยไม่มี TPM ที่เข้ากันได้ (ต้องใช้รหัสผ่านหรือ startup key บน USB flash drive)” เลยคิดว่ามันปลอดภัยน้อยกว่า โชคดีที่ยังไงก็ไม่ได้ใช้ BitLocker

  • ตลกมากที่ ทริกแบบเด็กประถม อย่างการเปลี่ยนชื่อ Command Prompt ให้เป็น accessibility handler แบบสมัย Windows Vista ยังใช้ได้เหมือนเดิม
    ถ้าอะไรสักอย่างรันด้วยสิทธิ์ผู้ดูแลระบบโดยไม่ต้องล็อกอิน ก็ทำให้นึกว่า Windows จะยืนยันตัวตนเสียก่อน แต่ Windows ดูเหมือนเป็นละครด้านความปลอดภัย 75% และอีก 25% ที่เหลือก็เป็นละครอีกแบบหนึ่ง

  • มีการอธิบายเทคนิคเดียวกันไว้ในปี 2021:
    https://dolosgroup.io/blog/2021/7/9/from-stolen-laptop-to-in...