สาธิตการข้าม BitLocker ด้วย memory dump บน Windows 11
(noinitrd.github.io)- เป็นการสาธิตการ dump RAM บนสภาพแวดล้อม Windows 11 24H2 ด้วย Memory-Dump-UEFI เพื่อค้นหา FVEK ซึ่งเป็นคีย์เข้ารหัสทั้งโวลุม และเข้าถึงโวลุมที่ป้องกันด้วย BitLocker
- หากผู้โจมตีสามารถเข้าถึงอุปกรณ์ได้ทางกายภาพ ก็อาจเล็งคีย์ที่ยังคงอยู่ใน RAM ทันทีหลังรีสตาร์ตได้ แต่ยิ่งไฟถูกตัดนานเท่าไร ความเสี่ยงที่ ข้อมูลใน RAM จะเสียหาย ก็ยิ่งสูงขึ้น
- การสาธิตนี้ใช้วิธีช็อต ขารีเซ็ต (reset pins) บนเมนบอร์ดเพื่อรีสตาร์ตโดยไม่สูญเสียพลังงาน และไม่ครอบคลุมกรณีการข้าม Secure Boot
- ใน dump ของ Windows 11 พบ FVEK ใต้แท็ก
dFVEและNoneแทนFVEcของ Windows 7 และCngbของ Windows 8.1/10 ในอดีต - แม้ Microsoft จะพยายามทำลายคีย์ด้วยฟังก์ชันอย่าง
SymCryptSessionDestroyแต่คีย์อาจยังคงอยู่บนฮีป ดังนั้นการวิเคราะห์การทำงานของ BitLocker ด้วย การดีบักระดับเคอร์เนล จึงเป็นแนวทางที่ตรงที่สุด
ขอบเขตของการสาธิตการข้าม BitLocker บน Windows 11
- เป้าหมายคือ Windows 11 version 24H2 และเป็นวิธีดึง FVEK ซึ่งเป็นคีย์เข้ารหัสทั้งโวลุมของ BitLocker ออกจากหน่วยความจำ
- ใช้แอปพลิเคชัน UEFI สำหรับ dump เนื้อหา RAM ชื่อ Memory-Dump-UEFI
- สมมติฐานหลักคือผู้โจมตีต้องสามารถ เข้าถึงอุปกรณ์ได้ทางกายภาพ
เงื่อนไขที่ทำให้การ dump RAM ใช้งานได้
- ใน RAM ของอินสแตนซ์ Windows ที่เพิ่งทำงานล่าสุด อาจยังมีข้อมูลอ่อนไหวอย่าง FVEK เหลืออยู่
- เมื่อไฟถูกตัด เนื้อหาใน RAM จะเสียหายอย่างรวดเร็ว ดังนั้นต้องลดช่วงเวลาที่คอมพิวเตอร์ปิดสนิทระหว่างการรีสตาร์ตให้น้อยที่สุด
- วิธีลดความเสียหายของ RAM ได้แก่ การทำความเย็นทางกายภาพหรือการคงแหล่งจ่ายไฟภายนอกไว้ โดยในการสาธิตนี้ใช้การช็อต ขารีเซ็ต ของเมนบอร์ดเพื่อรีสตาร์ตโดยไม่สูญเสียพลังงาน
- Secure Boot เป็นมาตรฐานความปลอดภัยที่จำกัดสิ่งที่สามารถรันได้ตอนเริ่มต้นอุปกรณ์ แต่มีกรณีที่ถูกข้ามได้ผ่าน shim เป็นต้น ซึ่งเดโมนี้ไม่ได้ลงรายละเอียด
การเตรียมบูต USB และการสร้าง dump
- บูต USB ต้องมีอุปกรณ์เก็บข้อมูลที่มีความจุมากกว่าขนาด RAM ของระบบเป้าหมาย
- สคริปต์
flashimage.shช่วยทำให้การเตรียมแอปพลิเคชันที่บูตได้ง่ายขึ้น - ขั้นตอนการสร้างและใช้งานแอปพลิเคชันสำหรับบูตสรุปไว้ที่ MemoryDumpUEFI
- การรีสตาร์ตขณะ Windows กำลังโหลดอยู่ แต่ก่อนที่หน้าจอล็อกอินจะปรากฏ เป็นช่วงที่มีโอกาสพบ FVEK สูงที่สุด
- จากนั้นให้บูตจากอุปกรณ์ USB ไปยัง Memory-Dump-UEFI ทันที แล้วรัน
app.efiใน UEFI shell- วิธีรันมีขั้นตอนเพิ่มเติมใน README ของแอปพลิเคชัน
- เวลาที่ใช้ในการ dump ขึ้นอยู่กับขนาด RAM และความเร็วของอุปกรณ์ USB
- เพื่อหลีกเลี่ยงการเขียนลงไดรฟ์ผิด ควรถอดอุปกรณ์เก็บข้อมูล USB อื่นออก
การจัดการไฟล์ dump และเครื่องมือค้นหา
- Memory-Dump-UEFI สามารถสร้างไฟล์ dump ได้หลายไฟล์
- เพื่อให้เป็นไปตามข้อกำหนดของ UEFI ต้องใช้ระบบไฟล์ FAT32 และ FAT32 มี ข้อจำกัดขนาดไฟล์ 4GB
concatDumpsในไดเรกทอรีtoolsใช้รวม dump หลายไฟล์ตามลำดับเวลาให้เป็นไฟล์เดียว- dump เป็นข้อมูลดิบที่อยู่ในหน่วยความจำ ณ เวลานั้น จึงสามารถใช้เครื่องมืออย่าง
xxdเพื่อตรวจดูให้อ่านง่ายขึ้นได้ searchMemใช้ค้นหาแพตเทิร์น hex ใน dump และสามารถย้ายไปยังออฟเซ็ตของตำแหน่งที่พบได้
Pool tag และตำแหน่งของ FVEK
- pool tag คือรหัสระบุ 4 ตัวอักษรที่บ่งชี้ตำแหน่งของ Windows kernel memory pool
- memory pool ที่เคอร์เนล Windows จัดสรรอาจเป็นตำแหน่งที่เหมาะสำหรับค้นหาข้อมูลอ่อนไหว
pooltag.txtมีรายการ pool tag และข้อมูลเกี่ยวกับจุดประสงค์ของแต่ละรายการ- ใน Windows รุ่นก่อนหน้า ตำแหน่งของคีย์ BitLocker แตกต่างกัน
- บน Windows 7 สามารถกู้คืนคีย์ได้จาก pool tag
FVEcซึ่งสอดคล้องกับการจัดสรรการเข้ารหัสของfvevol.sys - บน Windows 8.1 และ Windows 10 สามารถค้นหาคีย์ได้ใน memory pool ของแท็ก
Cngbที่เกี่ยวข้องกับโมดูลksecdd.sys
- บน Windows 7 สามารถกู้คืนคีย์ได้จาก pool tag
- ใน dump ของ Windows 11 ไม่พบคีย์ใน
FVEcและCngbแต่พบ FVEK ในสองตำแหน่งแทน- ตำแหน่งแรกอยู่ใต้ pool tag
dFVEซึ่งบ่งชี้หน่วยความจำที่dumpfve.sysจัดสรรไว้ dumpfve.sysเกี่ยวข้องกับ full volume encryption crash dump filter ของ BitLocker drive encryption- ตำแหน่ง
dFVEเป็นจุดที่พบคีย์ได้ง่ายและสม่ำเสมอที่สุด - ก่อนหน้าคีย์ในตำแหน่งนี้มีค่า
0x0480ซึ่งระบุชนิดการเข้ารหัส และในสภาพแวดล้อมของการสาธิตนี้หมายถึง XTS-AES-128 - ตำแหน่งที่สองอยู่ใต้แท็ก
Noneซึ่งเกี่ยวข้องกับการเรียกExAllocatePool - ในตำแหน่งนี้พบครึ่งแรกของคีย์สองครั้ง และครึ่งหลังหนึ่งครั้ง
- ตำแหน่งแรกอยู่ใต้ pool tag
การเข้าถึงโวลุม BitLocker ด้วย FVEK
- คีย์ที่ได้มาต้องเติมค่าของอัลกอริทึมเข้ารหัสที่ใช้อยู่ไว้ด้านหน้า
- ในตัวอย่างนี้มีการเติมค่าอัลกอริทึม
0x8004ไว้หน้าคีย์ในรูปแบบ little endian คือ0480 - ค่าที่ประกอบแล้วนี้สามารถบันทึกเป็นไฟล์และใช้งานในรูปแบบ
output.fvekได้ - ชุดเครื่องมือ dislocker เป็นตัวเลือกที่แนะนำสำหรับตรวจสอบอัลกอริทึมและค่าที่จำเป็น รวมถึงใช้ปลดล็อกพาร์ทิชันที่ป้องกันด้วย BitLocker
- หากขั้นตอนถูกต้อง ก็จะสามารถใช้
output.fvekเพื่อเข้าถึงข้อมูลในโวลุมที่ป้องกันด้วย BitLocker ได้
การวิเคราะห์การทำงานของ BitLocker และคีย์ที่ค้างอยู่บนฮีป
- วิธีที่ตรงที่สุดในการทำความเข้าใจการทำงานของ BitLocker คือการใช้
windbgเพื่อดีบักในระดับเคอร์เนล - การดีบักเคอร์เนลทำได้ค่อนข้างง่ายผ่านเครื่องเสมือนหรือสาย crossed over USB 3.0 A/A
- การไล่ดูขั้นตอนการบูตของ Windows ทีละลำดับและสังเกตการทำงานของ BitLocker ช่วยให้ค้นหาคีย์ได้
- Microsoft พยายามทำลายคีย์ด้วยฟังก์ชันอย่าง
SymCryptSessionDestroyแต่คีย์อาจยังคงอยู่บนฮีป จึงไม่สามารถลบคีย์ทั้งหมดได้
ลิงก์อ้างอิง
- recovering-bitlocker-keys-on-windows-8-1-and-10: เอกสารเกี่ยวกับการกู้คืนคีย์ BitLocker บน Windows 8.1 และ Windows 10
- dislocker: ชุดเครื่องมือที่ใช้เข้าถึงโวลุม BitLocker
- SymCrypt: ไลบรารีเข้ารหัสของ Microsoft
- libbde: ไลบรารีที่เกี่ยวข้องกับ BitLocker Drive Encryption
- pooltag.txt: รายการ Windows pool tag
- An Introduction to Pool Tags: เอกสารแนะนำ pool tag ของ Microsoft
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ผมมองว่า BitLocker มีประโยชน์สูงสุดเมื่อใช้ TPM(PCR 7+11)+PIN
ถ้าไม่มี PIN ก็ควรอ่าน FVEK ไม่ได้ ดังนั้นจึงช่วยบรรเทาการโจมตีนี้ได้ และถ้า BitLocker ทำไว้ถูกต้อง เมื่อใส่ PIN ผิดมากเกินไป TPM จะเข้าสู่โหมดล็อกป้องกันการโจมตีแบบเดาสุ่ม
ผมพยายามทำคอนฟิกแบบเดียวกันบน Linux มาหลายเดือนแล้ว แต่ systemd-cryptsetup/cryptenroll เป็นของ LUKS ส่วนกรณีของผมคืออยากเข้ารหัสไดเรกทอรีที่ละเอียดอ่อนบางส่วนด้วย fscrypt (คีย์ secure boot และ /home) บน eMMC ในตัวที่ช้า
พอเกินระดับพื้นฐานไปแล้ว รู้สึกว่าการเขียนโค้ด TPM นั้น ยากสุดขีด: ต้องผูกกับ PCR 7, ผูกกับ PCR 11 ที่เปลี่ยนทุกครั้งเมื่ออัปเดตเคอร์เนล/init/cmdline, ใช้ PIN ไม่ใช่ AuthValue, ใช้นโยบายอนุมัติเดียวกันในการรีเซ็ตตัวนับ DA lockout ตอนล็อกอิน พร้อมทั้งมีรหัสผ่านยาว/AuthValue สำหรับรีเซ็ตด้วยมือ และยังต้องให้ตรงกับลายเซ็น PCR 11 กับกุญแจสาธารณะที่ systemd-stub ให้มาด้วย
นอกจากคู่มือ TPM พื้นฐานแล้วแทบไม่มีข้อมูลเลย ถ้ามีผู้เชี่ยวชาญก็อยากได้ความช่วยเหลือ นี่เป็นโปรเจกต์ส่วนตัว แต่ถ้าวันหนึ่งทำเสร็จก็ตั้งใจจะเขียนสรุปไว้
วิธีนั้นน่าพิจารณาใช้เป็นกลไกกู้คืน
หนึ่งในเหตุผลที่มีคนทำงานด้าน TPM โอเพนซอร์สเป็นงานอดิเรกน้อย คือมีทางเลือกมากมายที่ตอบโจทย์คล้ายกันได้ง่ายกว่ามาก
ถ้าอยากผูกคีย์เข้ารหัสสำคัญไว้กับฮาร์ดแวร์ ก็ซื้อ Yubikey ได้ และถ้ารหัสผ่านเข้ารหัสดิสก์ของโน้ตบุ๊กยุ่งยาก ก็ใช้โหมดสแตนด์บายเมื่อปิดฝาแทนการปิดเครื่องสนิทได้
ถ้ารหัสผ่านล็อกอินไม่สะดวก ก็มีเครื่องอ่านลายนิ้วมือหรือ Yubikey แบบยืนยันตัวตนด้วยชีวมิติ และถ้าต้องบูตโดยไม่ใช้รหัสผ่าน เช่น คีออสก์ไร้คนดูแลหรือห้องคอมพิวเตอร์ของโรงเรียน ก็ใส่ไว้ในกล่องโลหะแข็งแรงแล้วล่ามโซ่ติดผนัง
ถ้าเซิร์ฟเวอร์ในดาต้าเซ็นเตอร์ต้องบูตแบบไร้คนดูแล ก็ย้ายไปดาต้าเซ็นเตอร์ที่มีความปลอดภัยทางกายภาพที่เชื่อถือได้ และถ้ายังกังวลอยู่ ก็ใช้ Dropbear หรือ Tang ให้บูตได้เฉพาะเมื่ออยู่ในเครือข่ายที่ถูกต้อง
ถ้ากำลังเล่น TPM เป็นงานอดิเรกในโฮมแล็บ ก็ควรตรวจสอบให้ดีว่า งานเกี่ยวกับ TPM สนุกจริงหรือไม่ และมีโอกาสสูงที่จะพบว่าอาจไม่ใช่
ไม่อย่างนั้นต้องป้อน PIN ทุกครั้งที่ถอดรหัสบล็อกดิสก์ไม่ใช่หรือ? ผลกระทบด้านประสิทธิภาพจากการเรียก TPM ทุกครั้งที่มีงานกับดิสก์ก็มากด้วย
การโจมตีนี้อ่านคีย์จาก RAM ดังนั้นผมไม่เข้าใจว่า TPM PIN จะเป็นมาตรการบรรเทาได้อย่างไร
ถ้าต้องใส่รหัสผ่านก่อนบูต และต้องนำรหัสผ่านนั้นมารวมกับคีย์ TPM ถึงจะเปิดไดรฟ์ได้ ก็จะช่วยได้ในสถานการณ์ที่ภายหลังมีการค้นพบคีย์ TPM
แต่สำหรับการโจมตีนี้ ยากจะมั่นใจว่ามาตรการไหนช่วยได้มากแค่ไหน เพราะถ้า OS ต้องคงสิทธิ์อ่าน/เขียนไดรฟ์ไว้ ก็ต้องถือคีย์ไว้ที่ไหนสักแห่ง ดังนั้นแค่เปลี่ยนตำแหน่งที่ไปค้นหาคีย์ ก็น่าจะยังสามารถกู้ข้อมูลจาก RAM แบบนี้ได้ในสถานการณ์ส่วนใหญ่
เท่าที่จำได้ อุปกรณ์ Apple ไม่ปล่อยคีย์ออกมานอก secure enclave จึงดูเหมือนจะไม่เปราะบางต่อการโจมตีแบบนี้ TPM 3.0 ดูเหมือนจำเป็นต้องเข้าใกล้แนวทางนั้นให้มากขึ้นมาก
บน ThinkPad สามารถใช้ลายนิ้วมือแทนรหัสผ่านเปิดเครื่องได้ และทำให้อุปกรณ์แทบใช้ไม่ได้สำหรับขโมย ผมจึงชอบคอนฟิกนี้มากกว่า BitLocker PIN
แน่นอนว่ารหัสผ่านเปิดเครื่องและการยืนยันตัวตนด้วยลายนิ้วมือก็แข็งแรงเท่ากับ TPM เท่านั้น แต่ BitLocker TPM+PIN ก็เหมือนกันไม่ใช่หรือ
หลังจากมีซอฟต์แวร์เข้ารหัสโอเพนซอร์สที่ประสบความสำเร็จแล้ว กระแสที่ย้ายไปใช้ TPM ดูแปลก ๆ เหมือนกับบอกว่ามีที่เก็บข้อมูลแบบปลอดภัยสุด ๆ จากบริษัทใหญ่ให้ใช้แล้ว ไม่ต้องกังวลหรือถามอะไร
ผมอดสงสัยไม่ได้ว่าต้องมีแบ็กดอร์ที่หน่วยข่าวกรองสามารถดาวน์โหลด PIN และรหัสผ่านทั้งหมดแล้วเข้าถึงข้อมูลได้อย่างแน่นอน
ผมยังไม่เข้าใจ โมเดลความปลอดภัย ของ BitLocker อย่างถ่องแท้
ในการติดตั้งส่วนใหญ่ ดูเหมือนว่ากดปุ่มเปิดเครื่องแล้วก็จะบูตเข้า Windows
ถ้าอย่างนั้นเมื่อมีคนขโมยเครื่องที่มีฮาร์ดไดรฟ์เข้ารหัสไป แค่เปิดเครื่องก็พอแล้วหรือ? คงไม่ใช่แบบนั้นหรอก แต่ขณะเดียวกันก็ไม่รู้ว่ามันป้องกันการโจมตีเฉพาะแบบนี้ได้อย่างไร
คงต้องสันนิษฐานว่าทราฟฟิกบนบัส SPI ถูกเข้ารหัส จึงไม่สามารถดัมป์คีย์แบบนี้ได้ แต่ไม่ว่าอย่างไร ดูเหมือนเครื่องจะยอมปล่อยคีย์ออกมาได้ค่อนข้างง่าย
อย่างน้อย LUKS ก็มีพรอมป์ให้ใส่รหัสผ่านเพื่อปลดล็อกไดรฟ์
แปลกดีที่ Microsoft ไม่ใช้การเข้ารหัสพารามิเตอร์ของ TPM ดังนั้นทุก ๆ 1–2 ปี นักวิจัยด้านความปลอดภัยก็จะทำอุปกรณ์ดักฟัง TPM มาเดโมให้ดู
LUKS ก็ขึ้นอยู่กับการตั้งค่าเช่นกัน Linux ก็สามารถตั้งค่าในลักษณะเดียวกับ Windows ตรงนี้ได้ และเซิร์ฟเวอร์รักษาความปลอดภัยวิดีโอที่บ้านของผมก็ต้องรีบูตแบบเงียบ ๆ เลยตั้งค่าไว้แบบนั้น ผมรู้ว่ามันเสี่ยงต่อการโจมตีแบบ warm/cold boot และพื้นผิวโจมตีทางซอฟต์แวร์ แต่ถ้ามีคนแค่ถอดไดรฟ์ไปก็ยังปลอดภัย
Windows ก็สามารถตั้งให้ต้องใช้รหัสผ่าน หรือใช้คีย์ TPM ที่ผนึกด้วย PIN authentication ได้
ถ้าตัดปัญหาเรื่องการเข้ารหัสพารามิเตอร์และการดักฟังบัสออกไป BitLocker จะย้ายขอบเขตจาก “ใครก็อ่านไดรฟ์ได้” ไปเป็น “ต้องโจมตีระดับแพลตฟอร์มเพื่อเอาเนื้อหาในหน่วยความจำ หรือแฮ็กบริการที่ทำงานอยู่ในหน้าจอเข้าสู่ระบบ”
มันกันสถานการณ์อย่างการขโมยข้อมูลการเงินจากฮาร์ดไดรฟ์ที่ถูกนำกลับมาใช้ใหม่แบบสุ่มได้ดีมาก จึงถือเป็นการยกระดับความปลอดภัยที่ค่อนข้างดีจริง ๆ
ต้องมีการเลี่ยงผ่านอย่างช่องโหว่ remote code execution หรือบูตด้วย Windows bootloader รุ่นเก่าที่มีช่องโหว่ เนื่องจากไดรฟ์ถูกล็อกอยู่ วิธีเลี่ยงผ่านยอดฮิตอย่าง “เปลี่ยนซอฟต์แวร์คีย์บอร์ดเป็น cmd.exe” จึงใช้ไม่ได้
ถ้าไม่มี BitLocker ก็แค่เสียบไดรฟ์ Windows เข้ากับพีซีเครื่องอื่นแล้วดูไฟล์ทั้งหมดได้ แต่ถ้ามี BitLocker ก็ต้องไปสู้กับซอฟต์แวร์ Microsoft ที่มีช่องโหว่ ช่องโหว่ต่าง ๆ หน่วยความจำที่ถูกดัมป์ และอะไรทำนองนั้น ซึ่งก็ไม่ได้สำเร็จเสมอไป
ถ้าตั้ง BitLocker เป็นโหมด TPM+PIN ก็ทำแม้กระทั่งแบบนั้นไม่ได้ เพราะไม่มีรหัสผ่านสำหรับเปิด TPM จะตั้ง BitLocker เป็นโหมดใช้รหัสผ่านอย่างเดียวก็ได้ แต่จะเสี่ยงต่อการ brute force มากกว่าเยอะ
LUKS ก็เช่นกัน ปัจจุบันดิสโทร Linux ส่วนใหญ่รองรับ TPM และ TPM+PIN
ถ้าพยายามรีบูตเข้า Safe Mode หรือรีบูตไปยัง OS อื่น ยูทิลิตีอัปเดตเฟิร์มแวร์ ฯลฯ ก็ต้องใส่ BitLocker recovery key
ผมไม่ค่อยแน่ใจว่ากรณี “แฮ็ก” เซ็นเซอร์ลายนิ้วมือหรือเว็บแคมจดจำใบหน้านั้นภายในทำงานอย่างไร
ต้องตั้งสมมติฐานว่า TPM ไม่มีช่องโหว่ที่ดึงคีย์ออกมาได้
ประเด็นสำคัญคือตอนที่ปิดเครื่องอยู่
สำหรับการเข้ารหัสไดรฟ์ทั่วไป TPM ช้าเกินกว่าจะถอดรหัสข้อมูลปริมาณมากจริง ๆ สุดท้าย OS จึงต้องถือคีย์ที่สามารถถูกดึงออกมาได้
ในรุ่น Pro ยังสามารถใช้ Group Policy บังคับให้ต้องมี ขั้นตอนโต้ตอบ ตอนบูตได้ด้วย ทำงานได้แม้ไม่มี TPM และในกรณีนี้จะถามรหัสผ่านทุกครั้งที่เริ่มเครื่อง
สิ่งนี้สามารถป้องกันได้อย่างสมบูรณ์ด้วย https://trustedcomputinggroup.org/resource/pc-client-work-gr...
หากเปิดใช้ไว้ ในกรณีที่ OS ไม่ได้ปิดเครื่องตามปกติจนไม่มีโอกาสลบคีย์เข้ารหัส ก่อนบูตครั้งถัดไป เฟิร์มแวร์จะหยุดและล้าง RAM
สงสัยว่า Windows ไม่ได้ใช้สิ่งนี้ หรือระบบที่ทดสอบไม่ได้ implement กันแน่
ระบุว่า “BitLocker ใช้ TCG Reset Attack Mitigation หรือที่เรียกว่า MOR bit (Memory Overwrite Request) ก่อนจะดึงคีย์ออกมาไว้ในหน่วยความจำ”
อย่างไรก็ตาม ผมไม่เชื่อถือการ implement ของแพลตฟอร์มส่วนใหญ่เลย ไม่เคยเห็นแพลตฟอร์ม UEFI ที่ implement ได้ใกล้เคียงกับคำว่าถูกต้องในรูปแบบใด ๆ
คงน่าสนใจถ้ารู้ว่านักวิจัยคนนี้ใช้แพลตฟอร์มใด และแพลตฟอร์มนั้นอ้างว่ารองรับ MOR bit หรือไม่
แค่ดูว่า Team Tweezers โจมตี Wii รุ่นแรกอย่างไรก็พอ
มาตรการบรรเทาที่แท้จริงคือฟีเจอร์ การเข้ารหัสหน่วยความจำ ของ CPU สมัยใหม่ เพราะมันอยู่ภายในได จึงใช้แหนบแตะไม่ถึง และแค่ลบคีย์ก็พอจึงลบทันที อีกทั้งแม้จะรอดผ่านการตัดต่อไฟมาได้ ก็ยากมากที่จะรบกวน
ตามอุดมคติ คีย์ควรเหลืออยู่เฉพาะใน SRAM cache ของ CPU และไม่ควรออกไปนอกไดของ CPU เลย
ผมเป็นคนเขียนบทความนี้เอง ถ้ามีคำถามก็ส่งข้อความมาที่บัญชีนี้ได้
งานนี้สนุกมากจริง ๆ และขอบคุณสำหรับความสนใจอย่างมาก
การนำเสนอที่ 38C3 เกี่ยวกับการเลี่ยงผ่าน BitLocker บน Windows 11: https://media.ccc.de/v/38c3-windows-bitlocker-screwed-withou...
เป็นที่ทราบกันค่อนข้างดีว่า BitLocker ปกป้องได้อย่างเหมาะสมเฉพาะกับ คอมพิวเตอร์ที่ปิดอยู่ เท่านั้น และถึงอย่างนั้นก็เฉพาะเมื่อมีการตั้งค่าให้ BitLocker ขอรหัสผ่านตอนบูต
[0] https://en.wikipedia.org/wiki/BitLocker#TPM_alone_is_not_eno...
Windows มีตัวเลือก การเข้ารหัสหน่วยความจำ ที่ถูกเสนอขึ้นมาควบคู่กับการบีบอัดหน่วยความจำ
ทั้ง Intel และ AMD ต่างกำลังทำงานเพื่อใส่ฟีเจอร์นี้เข้าไปใน CPU
อย่างไรก็ตาม เป้าหมายดูเหมือนจะเป็นเซิร์ฟเวอร์ที่รันเครื่องเสมือนหลายตัว ไม่ใช่แล็ปท็อป
คงไม่น่าแปลกใจถ้าอีกไม่นานจะมีการใช้ “เครื่องเสมือน” ที่เข้ารหัสไว้เป็นวิธีเก็บค่าลับเหล่านี้ สิ่งที่จำเป็นคือการรองรับจากฮาร์ดแวร์ที่แพร่หลายบนแพลตฟอร์มผู้บริโภค
แต่การโจมตี side-channel ของ CPU ก่อนหน้านี้แสดงให้เห็นว่าหน่วยความจำที่เข้ารหัสก็ยังถูกโจมตีได้ (https://www.usenix.org/conference/usenixsecurity21/presentat...) โดยเล็งไปที่แคชตอนที่ CPU ถอดรหัสหน่วยความจำเพื่อให้ทำงานได้ตามปกติ
น่าจะช่วยทำให้ memory dump ใช้ไม่ได้ผล แต่ RAM ที่เข้ารหัสคงไม่ทำให้การ dump คีย์จากหน่วยความจำหมดไป โดยเฉพาะกับผู้โจมตีที่มีความอดทนหรือมีทักษะสูง
https://techcommunity.microsoft.com/blog/windowsosplatform/m...
การบีบอัดหน่วยความจำมีมานานแล้ว อย่างน้อยก็ตั้งแต่ Windows 10 RTM ระบบปฏิบัติการหลักทั้งหมดต่างก็ implement ฟีเจอร์นี้ แต่ไม่ได้เกี่ยวข้องกับความปลอดภัย
บทความที่เกี่ยวข้อง: การเลี่ยง BitLocker บนแล็ปท็อป Lenovo ด้วย logic analyzer ราคาถูก
https://news.ycombinator.com/item?id=37249623
สำหรับการโจมตีที่พึ่งพาการอ่าน memory dump ของเครื่องเป้าหมาย ถ้ามีการเข้าถึงทางกายภาพ ก็สงสัยว่า อุปกรณ์ interposer ที่คัดลอกหรือแก้ไขข้อมูลที่เข้าออก RAM จะเป็นไปได้จริงแค่ไหน
นึกถึงอุปกรณ์อย่าง “Action Replay” สำหรับ Gameboy ในอดีต ที่แก้ไขหน่วยความจำที่ถูกโหลดหรือรันจากตลับเกมไปยังระบบเพื่อให้โกงเกมได้ วิธีใช้คือเสียบตลับเกมเข้ากับ Action Replay แล้วเสียบ Action Replay เข้ากับ Gameboy
จะทำสิ่งคล้ายกันระหว่าง RAM กับเมนบอร์ดได้ไหม? เช่นเสียบ RAM เข้ากับอุปกรณ์ แล้วเสียบอุปกรณ์นั้นเข้ากับเมนบอร์ด จากนั้นสังเกตการอ่าน/เขียนหน่วยความจำเพื่อจับสถานะหน่วยความจำ ณ เวลาใดก็ได้
แบบนั้นจะหลีกเลี่ยงความยุ่งยากที่ต้องปิดเครื่องด้วยมือแล้วหวังว่าข้อมูลที่ต้องการยังคงเหลืออยู่ได้
ผมไม่ใช่วิศวกรไฟฟ้า ข้อเสนอนี้จึงอาจเป็นไปไม่ได้โดยสิ้นเชิง ข้อจำกัดด้านพื้นที่ทางกายภาพและแบนด์วิดท์ดูจะใหญ่มากแน่นอน แต่เป็นไปได้ไหม?
คงคาดหวังยากว่าจะมีโซลูชันสำเร็จรูปออกมา
มีคนไม่มากที่รู้ว่า CPU Intel/AMD ที่ออกมาในช่วงไม่กี่ปีมานี้รองรับ การเข้ารหัสหน่วยความจำทั้งหมด แบบโปร่งใส
เนื้อหาใน RAM จะถูกเข้ารหัสด้วยคีย์สุ่มที่เก็บอยู่ใน memory controller ของ CPU และสร้างขึ้นตอนรีเซ็ต
โดยปกติ BIOS จะปิดไว้ เพราะมีผลกระทบต่อประสิทธิภาพหน่วยความจำเล็กน้อย (0.1%~1%)
แต่การโจมตีนี้สามารถถูกป้องกันได้อย่างสมบูรณ์