2 คะแนน โดย GN⁺ 2024-10-08 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • มีการทดลองยกระดับสิทธิ์ภายในเครื่องสำเร็จ โดยใช้เพียง ไฟแช็กบุหรี่ แบบเพียโซอิเล็กทริกเพื่อเหนี่ยวนำความผิดพลาดทางแม่เหล็กไฟฟ้าบนบัสหน่วยความจำ DDR3 ของแล็ปท็อป จากผู้ใช้ Linux ที่ไม่มีสิทธิ์ไปจนถึง เชลล์ root
  • บนแล็ปท็อป Samsung S3520 ได้บัดกรี ตัวต้านทาน 15Ω และสายไฟที่ทำหน้าที่เป็นเสาอากาศ เข้ากับขา data ของ SODIMM แล้วคลิกไฟแช็กใกล้ ๆ เพื่อสร้างข้อผิดพลาดในหน่วยความจำที่ทำให้บิตบางตำแหน่งพลิก
  • ในการทดลองกับ CPython ใช้ความผิดพลาดบนเส้น DQ7 พลิก bit 7 ของพอยน์เตอร์อ็อบเจ็กต์ ให้ไปอ้างอิงโครงสร้าง bytearray ปลอมภายใน bytes แล้วสร้าง primitive สำหรับอ่าน/เขียนหน่วยความจำตามอำเภอใจ
  • การยกระดับสิทธิ์บน Linux ทำงานโดยพ่น page table จำนวนมากลงในหน่วยความจำกายภาพ จากนั้นเหนี่ยวนำความผิดพลาด bit 29 ระหว่างอ่าน PTE เพื่อให้ mapping ที่ผู้ใช้เข้าถึงได้ชี้ไปยัง page table
  • หลังสำเร็จ จะค้นหาหน้าแรกของ /usr/bin/su ในหน่วยความจำกายภาพ แล้วแทนที่ด้วย ELF ขนาดเล็กแบบ setuid root เพื่อ ทำให้ page cache ปนเปื้อน โดยในสภาพแวดล้อมทดลอง ความน่าเชื่อถือที่รู้สึกได้อยู่ราว 50% เมื่อเชื่อมต่อผ่าน SSH และราว 20% เมื่อใช้กราฟิกเชลล์

จุดเริ่มต้นของการทดลอง EMFI ด้วยไฟแช็ก

  • แม้ไม่มีบั๊กซอฟต์แวร์ ก็สามารถสร้างพฤติกรรมผิดปกติได้ด้วย การฉีดความผิดพลาด (fault injection)
    • วิธีฉีดความผิดพลาดมีทั้งการทำให้ข้อมูลควบคุมของซอฟต์แวร์เสียหาย, power glitch, clock glitch, พัลส์แม่เหล็กไฟฟ้า, เลเซอร์ เป็นต้น
  • การฉีดความผิดพลาดบนฮาร์ดแวร์มักต้องอาศัย ความแม่นยำของเวลาและตำแหน่ง ที่จะใส่ความผิดพลาด จึงต้องมีอุปกรณ์เฉพาะทางและมีค่าใช้จ่าย
  • จุดเริ่มต้นคือแนวทางที่นำที่จุดเตา BBQ แบบเพียโซอิเล็กทริกมาต่อกับอินดักเตอร์ เพื่อใช้เป็นเครื่องมือ ฉีดความผิดพลาดทางแม่เหล็กไฟฟ้า (EMFI) ราคาประหยัด
    • ก่อนหน้านี้เคยโจมตีการ implement AES ด้วยซอฟต์แวร์ที่รันบน Arduino ได้สำเร็จด้วย DFA
  • ในบริบทที่การประกาศ Nintendo Switch 2 ใกล้เข้ามา ผู้ทดลองคาดว่าจะมีซอฟต์แวร์ระบบคล้าย Switch 1 และขาดบั๊กซอฟต์แวร์ จึงกลับมาทดลอง EMFI ต้นทุนต่ำอีกครั้ง

เป้าหมายทดสอบและความผิดพลาดบนบัส DDR

  • เป้าหมายทดสอบคือแล็ปท็อป Samsung S3520 ผลิตปี 2011 ที่ใช้ CPU Intel i3-2310M และ RAM DDR3 1GB
    • เลือกเพราะรัน Arch ซึ่งเป็นดิสโทร Linux เดสก์ท็อปขนาดเบาได้ และหากเสียหายก็ไม่เดือดร้อนมาก
  • เป้าหมายคือเขียน exploit ยกระดับสิทธิ์ภายในเครื่อง ที่ทำงานบนพื้นฐานของความผิดพลาดฮาร์ดแวร์ที่ถูกฉีดเข้าไป
  • จุดที่เปราะบางที่สุดทางกายภาพที่เลือกคือ บัส DDR ซึ่งเชื่อม DRAM กับระบบ
    • SODIMM มีขา DQ 64 ขา คือ DQ0~DQ63 สำหรับส่งบิตข้อมูลอ่าน/เขียน
  • อุปกรณ์ทดลองมีโครงสร้างเป็นการบัดกรี ตัวต้านทาน 15Ω และสายไฟ หนึ่งเส้นเข้ากับขาที่คาดว่าเป็น DQ26
    • สายไฟรับสัญญาณรบกวนแม่เหล็กไฟฟ้ารอบข้างเหมือนเสาอากาศ แล้วส่งต่อไปยังบัสข้อมูล
    • ตัวต้านทานมีไว้จำกัดความแรงของสัญญาณรบกวนเพื่อไม่ให้ขัดขวางการทำงานปกติของหน่วยความจำตลอดเวลา และในทางปฏิบัติอาจไม่จำเป็นก็ได้
  • เพียงคลิกไฟแช็กแบบเพียโซอิเล็กทริกทั่วไปใกล้สายเสาอากาศ ก็ทำให้ memtest แสดงข้อผิดพลาดหน่วยความจำได้อย่างเสถียร
    • ข้อผิดพลาดที่แสดงทั้งหมดอยู่ในรูปแบบที่ bit 29 พลิก
    • แม้ขาที่บัดกรีถูกคาดว่าเป็น DQ26 แต่สาเหตุที่ bit 29 พลิกอาจเป็นเพราะนับขาผิด หรือเมนบอร์ดสลับการเดินสาย data line
  • เพราะอยู่ในระดับความเร็วการตอบสนองของนิ้วมือ การ ควบคุม timing ของการฉีดความผิดพลาดจึงไม่แม่นยำ
    • เมื่อเกิดความผิดพลาด มีความเป็นไปได้สูงว่าบิตเดียวกันจะพลิกในการอ่านหรือเขียน 64 บิตรายการหนึ่ง

ใช้ประโยชน์จาก bit flip ใน CPython

  • การทดลองแรกคือสร้าง exploit ในรูปแบบ sandbox escape บน CPython
    • ตัว CPython เองไม่ใช่ sandbox จึงไม่ใช่การข้ามขอบเขตความปลอดภัยจริง แต่เป็นขั้นเตรียมการที่ใช้โครงสร้างภายในที่คุ้นเคย
  • ในการทดลองนี้ใช้สายที่บัดกรีกับ DQ7 แทน DQ26 ในภาพก่อนหน้า
  • อ็อบเจ็กต์ CPython อยู่ใน heap ของ garbage collection และใน header ของอ็อบเจ็กต์มี refcount กับพอยน์เตอร์ไปยัง type object จากนั้นตามด้วยฟิลด์เฉพาะตามชนิด
    • อ็อบเจ็กต์ bytes มีฟิลด์ความยาว แล้วตามด้วยข้อมูลจริงภายใน heap allocation เดียวกัน
    • อ็อบเจ็กต์ bytearray มีฟิลด์ความยาว แล้วตามด้วยพอยน์เตอร์ไปยังบัฟเฟอร์ที่เก็บข้อมูลจริง
  • กลยุทธ์หลักคือใส่โครงสร้าง bytearray ปลอมเป็นข้อมูลไว้ภายในอ็อบเจ็กต์ bytes
    • หากหลอกให้ CPython ให้ reference ไปยังอ็อบเจ็กต์ปลอมนี้ได้ ก็จะอ่าน/เขียนหน่วยความจำตามอำเภอใจได้ด้วยฟิลด์ความยาวและพอยน์เตอร์ของ bytearray ที่ผู้โจมตีเลือก
  • ความผิดพลาดที่พลิก bit 7 มีผลเหมือน บวกหรือลบ 128 ให้พอยน์เตอร์ใน word 64 บิต
    • หากวาง bytearray ปลอมไว้ที่ offset +128 ไบต์ภายในอ็อบเจ็กต์ bytes พอยน์เตอร์ของอ็อบเจ็กต์ bytes อาจกลายเป็นพอยน์เตอร์ของ bytearray ปลอมได้จากความผิดพลาด
    • การแปลงนี้มีโอกาส 50% ที่จะเป็นทิศทางที่ต้องการ
  • สิ่งสำคัญคือการ glitch การอ่าน/เขียนบนบัสหน่วยความจำ ไม่ใช่ เนื้อหา ของหน่วยความจำเอง
    • ไม่ใช่วิธีที่ข้อมูลที่จัดเก็บถูกเปลี่ยนแบบ Rowhammer แต่เป็นการทำให้ access ที่กำลังเกิดขึ้นบนบัสเสียหาย
  • เติม reference ไปยังอ็อบเจ็กต์เดียวกันใน tuple ขนาดใหญ่ เพื่อให้การเข้าถึงพอยน์เตอร์ที่ต้องการเป็นกิจกรรมส่วนใหญ่บนบัส
    • เนื่องจาก CPU cache ลดการเข้าถึง DRAM จึงสร้างโครงสร้างที่ใหญ่กว่า cache 3MiB แล้วเข้าถึงตามลำดับ เพื่อให้แต่ละครั้งต้องอ่านจาก DRAM
    • is ของ Python ทำงานคล้ายการเปรียบเทียบพอยน์เตอร์ จึงใช้ตรวจสอบได้ว่าพอยน์เตอร์เปลี่ยนหรือไม่
  • ซอร์ส exploit CPython ทั้งหมดอยู่ที่ ddr3_dq7.py
    • สามารถใช้ตัวแปร TESTING จำลอง bit flip ในซอฟต์แวร์โดยไม่ต้องมีฮาร์ดแวร์ได้

โครงสร้างหน่วยความจำที่จำเป็นต่อการยกระดับสิทธิ์บน Linux

  • ในการยกระดับสิทธิ์ภายในเครื่องบน Linux โครงสร้างสำคัญคือ cache, virtual memory กับ page table และ TLB
  • DRAM ค่อนข้างช้า CPU จึงใช้ cache L1, L2, L3
    • L3 cache ของแล็ปท็อปทดลองคือ 3MiB
    • เมื่อ cache hit จะไม่เข้าถึง DRAM และต้องเกิด cache miss จึงจะมีการอ่าน DRAM
  • หน่วยขั้นต่ำในมุมมองของ cache คือ cache line และบนแล็ปท็อปนี้มีขนาด 64 ไบต์
    • แม้อ่านเพียงหนึ่งไบต์ หากข้อมูลนั้นยังไม่อยู่ใน cache ก็จะเกิดการอ่าน DRAM 64 ไบต์
    • บัสข้อมูล DDR กว้าง 64 บิต ดังนั้นการอ่านนี้จะถูกจัดการเป็น burst ของการเข้าถึงต่อเนื่อง 8 ครั้ง
  • virtual memory ของ x86-64 ถูก implement ด้วย page ขนาด 4KiB และ page table รูปแบบต้นไม้
    • แพลตฟอร์มนี้มี page table 4 ชั้น
    • page table แต่ละตัวเป็น page ขนาด 4KiB และมี PTE 64 บิตจำนวน 512 รายการ
    • PTE ชั้นบนชี้ไปยังที่อยู่กายภาพของ page table ชั้นถัดไป ส่วน PTE level 0 ชี้ไปยัง page กายภาพเป้าหมาย
    • ที่อยู่กายภาพของ root page table ถูกเก็บไว้ในรีจิสเตอร์ CPU CR3
  • ส่วนที่ต้องใช้ใน PTE คือฟิลด์ที่อยู่กายภาพ
    • เมื่อ mask บิต flag ออก จะเหลือที่อยู่หน่วยความจำกายภาพที่จัดแนวตาม page
  • TLB คือฮาร์ดแวร์ภายใน CPU ที่ cache mapping ของ page จาก virtual address ไป physical address
    • ไม่ทราบขนาด TLB ที่แน่นอนของแล็ปท็อปทดลอง แต่ดูเหมือนจะอยู่ราว 1024 entries

ดึง page table เข้ามาในหน่วยความจำของผู้ใช้

  • กลยุทธ์ exploit บน Linux ได้แรงบันดาลใจจากองค์ประกอบของ Rowhammer exploit ของ Mark Seaborn
  • เป้าหมายคือ map page table ของ process ตัวเองให้เป็นหน่วยความจำที่ผู้ใช้เข้าถึงได้
    • เมื่อเป็นเช่นนั้นก็จะแก้ไข PTE เพื่อเข้าถึงหน่วยความจำกายภาพตามอำเภอใจได้
  • แทนที่จะควบคุมการจัดวางหน่วยความจำกายภาพอย่างแม่นยำ จะเติมหน่วยความจำกายภาพให้ตรง 50% ด้วย page table level-0
  • จากนั้นเข้าถึง mapping R/W ซ้ำ ๆ เพื่อหลบเลี่ยง TLB
    • เพราะจำนวน mapping เกินขนาด TLB จึงบังคับให้เกิดการเดิน page table ในแต่ละครั้งได้
    • เป้าหมายคือทำให้เกิดความผิดพลาด bit 29 ระหว่างอ่าน PTE level-0 ในการเดินดังกล่าว
  • เมื่อ bit 29 พลิก ที่อยู่กายภาพที่ PTE ชี้ไปจะเปลี่ยนไปด้วย offset 512MiB
    • หากโชคดี ที่อยู่ที่เปลี่ยนไปจะชี้ไปยัง page table level-0 ตัวหนึ่งที่พ่นไว้ก่อนหน้า
    • ในกรณีนี้ mapping ที่เดิมควรมองเห็นเป็น page R/W ปกติ จะเปิดเผย page table ออกมาเหมือนเป็น page R/W ปกติ
  • ตามทฤษฎี bit flip ใด ๆ ตั้งแต่ bit 29 ถึง bit 12 ก็อาจใช้งานได้
    • bit 12 เท่ากับ offset 4KiB
    • แก่นสำคัญคือ PTE ชี้ไป “ที่อื่น” และหน่วยความจำกายภาพราว 50% ถูกเติมด้วย page table ที่นำมาใช้โจมตีได้
  • การบัดกรีสายเสาอากาศอาจไม่จำเป็นเสมอไป
    • หากสร้างสัญญาณรบกวนแม่เหล็กไฟฟ้าที่แรงพอได้ ก็มีความเป็นไปได้ แต่โอกาสระบบ crash หรือเสียหายจะสูงกว่ามาก

วิธีพ่น page table level-0

  • ขั้นแรกสร้างไฟล์บนหน่วยความจำด้วย memfd_create ของ Linux
    • ทำหน้าที่เดียวกับไฟล์ /dev/shm/ ใน exploit ของ Mark Seaborn แต่ไม่แตะ filesystem โดยตรง
  • map บัฟเฟอร์เดียวกันหลายครั้งด้วย mmap
    • ใช้ตัวเลือก MAP_FIXED เพื่อบังคับให้แต่ละ mapping จัดแนว 2MiB ใน virtual memory
    • การจัดแนวนี้รับประกันว่าจะสร้าง page table level-0 ใหม่ทุกครั้ง
  • Linux มีข้อจำกัดจำนวน mapping ต่อ process หรือ VMA ประมาณ 2^16
    • จึงทำให้แต่ละ mapping ยาว 32MiB เพื่อให้ mapping หนึ่งสร้าง page table level-0 จำนวน 16 ตัว
  • แต่ละ mapping ใช้พื้นที่ 32MiB ใน virtual address space แต่ PTE ชี้ไปยัง physical page เดียวกัน
    • ต้นทุนหน่วยความจำกายภาพมีเพียง page table level-0 เท่านั้น
    • ด้วยวิธีนี้สามารถพ่น page table ได้จนกว่าหน่วยความจำจะเต็ม

อ่าน/เขียนหน่วยความจำกายภาพและทำให้ page cache ของ su ปนเปื้อน

  • ระหว่างรอความผิดพลาด จะเข้าถึง mapping R/W ซ้ำ ๆ และหากค่าที่ส่งคืนไม่ตรงกับที่คาด จะตรวจพบความผิดพลาด
    • หากข้อมูลที่ส่งคืนดูเหมือน PTE แปลว่าได้สิทธิ์เข้าถึง R/W ไปยัง page table แล้ว
  • ขั้นถัดไปคือหาว่า page table นี้สอดคล้องกับ virtual address ใด
    • แก้ PTE ให้ชี้ไปยังที่อยู่กายภาพ 0
    • จากนั้นสแกน mapping R/W อีกครั้งเพื่อหาว่า mapping ใดเปลี่ยนไป
  • แม้แก้ PTE แล้ว MMU จะไม่รู้ทันที
    • เพราะ mapping virtual-physical ถูก cache ไว้ใน TLB
    • เนื่องจากไม่ทราบวิธี flush TLB โดยตรงจาก user space จึงเข้าถึง mapping R/W หลายพันรายการซ้ำ ๆ เพื่อเติมค่าใหม่ลง TLB และผลักค่าเดิมออกไป
  • ณ จุดนี้จะสามารถอ่าน/เขียน หน่วยความจำกายภาพ ทั้งหมดได้
  • จากนั้นเปิดไฟล์ executable /usr/bin/su แบบ read-only แล้ว mmap หน้าแรก
    • /usr/bin/su เป็น executable แบบ setuid root
    • สแกนหน่วยความจำกายภาพทั้งหมดเพื่อหา page เดียวกัน
    • เมื่อพบ physical page นั้น จะเขียนทับด้วย ELF payload ขนาดต่ำกว่า 4KiB ที่เปิดเชลล์ root
  • เมื่อ su ถูกเรียกใช้ครั้งถัดไป Linux จะเห็นว่าหน้าแรกอยู่ในหน่วยความจำแล้ว และไม่อ่านซ้ำจากดิสก์
    • จึงใช้ page cache ที่ปนเปื้อนซ้ำและรัน ELF ที่ถูกฉีดเข้าไป
    • ELF ที่ฉีดเข้าไปจะล้าง page cache ด้วย echo 1 > /proc/sys/vm/drop_caches เพื่อให้การรัน su ครั้งถัดไปกลับมาทำงานตามปกติ
  • ซอร์ส exploit Linux ทั้งหมดอยู่ที่ linux_x86_64_lpe.c

ความน่าเชื่อถือและข้อจำกัดของสภาพแวดล้อม

  • ในการรันเดโม โชคดีที่เกิด glitch ที่ดีจากการคลิกไฟแช็กเพียงครั้งเดียว
    • ในความพยายามหลายครั้งก่อนหน้า ระบบทั้งระบบ crash
  • ความน่าเชื่อถือโดยรวมของ exploit ไม่ได้ถูกวัดอย่างเข้มงวด
    • เมื่อปิดหน้าจอแล็ปท็อปและเชื่อมต่อผ่าน SSH ความรู้สึกอยู่ที่ราว 50%
    • ในกราฟิกเชลล์ใกล้เคียง 20%
  • ระบบทดลองใช้กราฟิกแบบรวม
    • การเข้าถึงหน่วยความจำของ GPU อาจรบกวน exploit
  • background service ที่เกี่ยวกับ pipewire, sshd, systemd และ swap ก็เปิดอยู่ด้วย
    • เป็นทางเลือกเพื่อคงสภาพแวดล้อม Linux เดสก์ท็อปที่สมจริง และหากปิดใช้งาน ความน่าเชื่อถืออาจสูงขึ้น
  • หากติดตั้ง RAM มากกว่านี้ ก็อาจเติม page table ได้ในสัดส่วนที่สูงกว่า และเพิ่มความน่าเชื่อถือโดยรวมได้

การใช้งานที่เป็นไปได้และคำถามที่ยังเหลือ

  • หากสามารถทำ EMFI ยกระดับสิทธิ์ภายในเครื่องบน Windows ได้อย่างน่าเชื่อถือ ก็อาจส่งผลต่อสถานการณ์ที่ anti-cheat แบบอิง TPM จำกัดซอฟต์แวร์ที่อนุญาตให้รันบนระบบ
  • เรื่องคล้ายกันอาจเกิดกับการตรวจสอบ SafetyNet หรือ Play Integrity ของ Android ได้ แต่การใส่ glitch modchip ลงในโทรศัพท์ทำได้ยากกว่า
  • ในการเพิ่มประสิทธิภาพระดับต่ำ ความรู้เรื่อง page table และ TLB มักไม่ได้สำคัญโดยตรงเสมอไป แต่ใน exploit นี้ โครงสร้างที่รักษาภาพลวงของ virtual memory กลายเป็นเป้าหมายโจมตีโดยตรง
  • ขอบเขตการใช้งานยังมีหลายประเด็นที่ต้องตรวจสอบ
    • ใช้ได้กับ DDR4, DDR5 หรือไม่
    • ใช้ได้กับ ARM หรือไม่
    • ECC หลายประเภท โดยเฉพาะ DDR5 Link-ECC ช่วยบรรเทาได้มากน้อยเพียงใด
    • วิธีที่ง่ายที่สุดในการ trigger ความผิดพลาดลักษณะเดียวกันด้วยอุปกรณ์อย่าง RP2040 ทางอิเล็กทรอนิกส์คืออะไร
    • ใช้หนีออกจาก hypervisor ได้หรือไม่
    • สามารถทำเป็น WebKit exploit หรือ Nintendo Switch kernel exploit ได้หรือไม่

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

 
mammal 2024-10-08

นึกถึงตอนถอดตัวจุดไฟออกจากไฟแช็กไปโกงเพิ่มเครดิตเหรียญในตู้เกมอาร์เคดเลย

 
GN⁺ 2024-10-08
ความคิดเห็นจาก Hacker News
  • แรงบันดาลใจตรงนี้คือการ ได้สิทธิ์ root บน Switch 2 และการได้ root บน Linux ก็เป็นเพียงการพิสูจน์แนวคิด
    เป้าหมายไม่ใช่การแสดงช่องโหว่ความปลอดภัยพื้นฐานที่นำไปใช้โจมตีได้จริง แต่ใกล้เคียงกับการทวงคืนความเป็นเจ้าของฮาร์ดแวร์ของตัวเองอย่างแท้จริง โดยไม่ต้องทำลาย TPM หรือระบบแอนตีชีตระดับเคอร์เนลของเกม

    • เข้าใจเจตนา แต่ไม่ค่อยเข้าใจประเด็นหลักนัก เมื่อ 20 ปีก่อนตอนคอนโซลเป็นคอมพิวเตอร์แรง ๆ ที่ขายขาดทุนหรือกำไรต่ำ มันยังฟังดูสมเหตุสมผลกว่า แต่ตอนนี้ Nintendo ขายคอนโซลแบบมีกำไร และ Switch 2 ก็น่าจะเป็นแบบนั้นด้วย
      งานนี้น่าประทับใจและน่ายินดีที่ช่วยปกป้องเสรีภาพด้านซอฟต์แวร์ แต่ฉันอยากสนับสนุนทางเลือกอื่นมากกว่า ทำไมต้องให้ตัวเลขที่ดูเหมือนฐานติดตั้งและกำไรแก่พวกเขาด้วยล่ะ? ซื้อ Steam Deck หรืออุปกรณ์พกพาอื่นที่ให้ root access เป็นฟีเจอร์ตั้งแต่แรกก็ได้
  • บทความเขียนได้ดีมากและความท้าทายก็น่าทึ่ง แต่สมองฉันตอบสนองไปทาง สามัญสำนึกของการแฮ็ก ว่า “ถ้ามีการเข้าถึงทางกายภาพ ก็จบแล้ว”
    สิ่งแรกที่นึกถึงคือ ถ้ามีการเข้าถึงทางกายภาพ ก็รีแฟลช BIOS ติดตั้งไดรเวอร์แบ็กดอร์ บูตด้วยไลฟ์ OS แล้วแก้ /etc/{passwd,shadow,groups, etc} ได้เลย
    แต่แล้วก็นึกขึ้นได้ว่าถ้าดิสก์ถูกเข้ารหัส การโจมตีส่วนใหญ่ที่อาศัยการเข้าถึงทางกายภาพจะทำไม่ได้ และในกรณีนั้น การโจมตีแบบนี้ก็ดูน่าสนใจมาก ไอเดียเรื่องเสาอากาศยังต่อยอดเป็นฮาร์ดแวร์ที่ฝังอุปกรณ์รบกวนไว้ได้ และทำให้สื่อสารกับภายนอกผ่านช่องทางไร้สาย เพื่อให้ผู้โจมตีสร้างการรบกวนจากระยะไกลได้ ถ้ามีเว็บไซต์ที่ผู้โจมตีควบคุมไว้หลอกให้เหยื่อเข้าไปเยี่ยมชมด้วย ก็เริ่มดูสมจริงขึ้น

    • แรงจูงใจในบทนำคือการ รูต/เจลเบรก เครื่องเกมพกพา มีการเข้าถึงทางกายภาพอยู่แล้ว แต่ก็ยังเป็นสถานการณ์ที่สมเหตุสมผลพอสำหรับการอยากได้การเข้าถึงแบบ “ไม่ได้รับอนุญาต”
    • เท่าที่ฉันเห็น การรีแฟลช BIOS ก็แทบไม่ได้อะไร เพราะก่อนเริ่มรัน ฮาร์ดแวร์ของ CPU จะตรวจสอบลายเซ็นด้วยคีย์ส่วนตัวที่ถูกต้องก่อน จึงต้องเซ็นให้ผ่านเสียก่อน
      เทคนิค การรบกวนทางแม่เหล็กไฟฟ้า นี้เป็นการหลอก CPU เอง ดังนั้นตราบใดที่ยังไม่มีอัลกอริทึมการเพจแบบใหม่ออกมา ฉันก็ยังไม่แน่ใจว่าจะแก้ได้อย่างไร
    • คำพูดที่ว่า “ถ้าดิสก์ถูกเข้ารหัส การแฮ็กแบบอาศัยการเข้าถึงทางกายภาพส่วนใหญ่จะทำไม่ได้” จะถูกต้องก็ต่อเมื่อ PC ปิดอยู่ และยังไม่ได้ใช้คีย์ไฟล์หรือวลีรหัสผ่านเพื่อถอดรหัสข้อมูลและบูตระบบเท่านั้น
      PC ของฉันก็ใช้ full-disk encryption เหมือนกัน แต่เมื่อบูตแล้ว คีย์ไฟล์ที่ใช้ถอดรหัสก็ถูกใช้งาน และนับจากจุดนั้นมันก็กลายเป็น PC ที่เข้าถึงทางกายภาพได้
  • ชอบมาก ประเด็นคือเกิด การพลิกบิตจากไฟฟ้าสถิต ระหว่างการอ่านหรือเขียนหน่วยความจำ และถ้ามีการบัดกรีด้วย ก็สามารถเปลี่ยนพอยน์เตอร์ที่ “ปลอดภัย” ให้กลายเป็นพอยน์เตอร์อันตรายที่ต้องการได้แบบกำหนดได้แน่ชัด
    ในทางประวัติศาสตร์ มุมมองต่อการเข้าถึงทางกายภาพคือ “ถ้าคู่ต่อสู้ได้เครื่องไป ก็เกมจบ” TPM และ trusted execution environment ได้เปลี่ยนมุมมองนี้เป็น “แม้ผู้ใช้จะเข้าถึงทางกายภาพได้ แต่การคำนวณบางอย่างภายใน enclave ก็ยังเชื่อถือได้”
    ขั้นต่อไปนี่แหละที่น่าสนใจที่สุด จะได้ผลลัพธ์ที่เชื่อถือได้พอสมควรโดยไม่ต้องบัดกรีได้ไหม? ดูน่าจะยากกว่ามาก เพราะมีการคิดรับมือกับการรบกวนทางไฟฟ้าไว้เยอะแล้ว แต่ก็อาจเป็นไปได้ ถ้าทุกครั้งที่กดไฟแช็ก มีบิตสุ่ม 1 บิตพลิกในค่าที่อ่านแบบ 64 บิต และเอ็กซ์พลอยต์ทำงานได้ด้วยการพลิกเพียงหนึ่งใน 4 บิตที่เป็นไปได้ จำนวนครั้งที่ต้องลองโดยเฉลี่ยก็อาจไม่มากนัก

    • ถ้ามีการเข้าถึงทางกายภาพจนสามารถบัดกรีเสาอากาศได้ ก็เสียบ DIMM แบบคัสตอมที่ตั้งโปรแกรมได้จาก “ด้านหลัง” เพื่อเจาะ TPM หรืออะไรก็ตามได้เลย
      เพราะคุณสามารถเปลี่ยนค่าตรงส่วนไหนของหน่วยความจำก็ได้ตามเวลาที่ต้องการ จึงไม่จำเป็นต้องหวังพึ่งการพลิกบิตแบบสุ่ม แค่ฉีดทั้งโปรแกรมเข้าไปเลยก็ได้
    • ถ้าไม่มีเสาอากาศ ก็ดูยากที่จะจำกัดสิ่งที่พลิกให้เหลือแค่บิตเดียว อย่างน้อยนี่ก็เป็นการคาดเดาของฉัน
  • แค่อ่านชื่อเรื่อง ฉันก็นึกว่าเป็นบทความที่มีคน ได้สิทธิ์ root บนไฟแช็กบุหรี่ และก็พร้อมจะเชื่อเต็มที่
    เตาอบที่บ้านพ่อแม่ฉันยังได้รับอัปเดตซอฟต์แวร์เป็นประจำ เลยไม่ได้สงสัยเลยว่าไฟแช็กจะ “ฉลาด” ได้ไหม

    • ตอนเห็นแต่ชื่อเรื่อง ฉันคาดหวังอยู่ครึ่ง ๆ ว่ามันจะเป็นกุญแจเพลิงของการวิเคราะห์รหัสด้วยสายยางยาง
    • จะเป็นยังไงถ้ามีไฟแช็กที่ติดแผงโซลาร์เล็ก ๆ กับแบตเตอรี่ไว้ และเมื่อ LiDAR ตรวจจับบุหรี่หรือซิการ์ที่อยู่ใกล้ ก็ปล่อยประกายไฟเหมือนเทเซอร์จิ๋ว โดยไม่ตอบสนองกับนิ้วหรือฮอตด็อก ไม่มีปุ่ม และไม่ต้องเติมเชื้อเพลิงไฟแช็กอีกตลอดไป
      แน่นอนว่าต้องมีชิปไว้หมุน LiDAR พร้อมทั้งปล่อยแฟลช LED แรง ๆ เอฟเฟ็กต์เฟด แรงสั่นสะเทือน และเอฟเฟ็กต์เสียงด้วย อยากให้มีใครทำเดโมขึ้นมาจริง ๆ ถ้าหน้าตาเหมือนรีวอลเวอร์เล็ก ๆ ก็น่าจะดี แต่เพื่อความปลอดภัยของนิ้วกับฮอตด็อก คงต้องเสริม virtual memory controller ให้แน่นหนาขึ้น
    • หัวแร้งบัดกรีที่ฉันใช้บ่อยที่สุดเองก็รันเฟิร์มแวร์ที่แก้ไขได้บน RISC-V SoC เหมือนกัน (https://pine64.com/product/pinecil-smart-mini-portable-solde...)
      แค่การหลอมตะกั่วจะซับซ้อนได้ขนาดนี้เชียว ดังนั้นบทความเรื่องการรูตไฟแช็กก็ฟังดูน่าเชื่อได้เต็มที่
    • ฉันนึกว่าเขากำลังคำนวณรากที่สองจากรูปทรงของเปลวไฟ
  • ทำให้นึกถึงเอ็กซ์พลอยต์ที่เคยใช้กับตู้เกมอาร์เคดในซิดนีย์ช่วงยุค 80~90 ที่โรงเรียนมี ตัวจุดไฟแบบเพียโซ ที่พวกเราเรียกว่า “clicker” อยู่ในเครื่องทำความร้อนแก๊ส และสามารถถอดออกมาได้
    เราเอา clicker นั้นไปที่อาร์เคดแถวบ้าน แล้วกดแกร็กที่มุมใดมุมหนึ่งของ CRT ระบบจะได้รับแรงกระตุ้นและเครดิตเกมก็เพิ่มขึ้นมา
    เดาว่าเป็นเพราะกราวด์ของ CRT ใช้สายกราวด์ร่วมกับอุปกรณ์ตรวจจับเหรียญในเชิงกายภาพ พอเวลาผ่านไปเจ้าของร้านก็เริ่มรู้ทันและเพิ่มอะไรทำนองสัญญาณเตือนเข้าไป แต่ก่อนหน้านั้นมันเป็นช่วงเวลาที่สุดยอดจริงๆ

    • ตอนต้นยุค 80 ก็ทำแบบเดียวกัน เราใช้ clicker จากไฟแช็กแบบใช้แล้วทิ้ง
      ทำอยู่หลายปีจนเจ้าของร้านเริ่มจับได้ แล้วก็เริ่มเอาพลาสติกใสมาคลุมตู้เกมอาร์เคด จากนั้นพอตู้ถูกปิดด้วยพลาสติกก็ต้องเจาะรูด้านหลังไว้ระบายอากาศ และเราก็พบว่าสามารถใช้แท่งไม้ไผ่กดคันโยกที่ใช้ลงทะเบียนการหยอดเหรียญได้
      พอเป็นแบบนั้น พวกเขาก็ย้ายช่องระบายอากาศไปไว้ด้านบนแทนด้านหลังเพื่อไม่ให้แตะคันโยกได้ แต่คราวนี้เรากลับรู้ว่าสามารถดันเหรียญขึ้นไปทางช่องคืนเหรียญเพื่อไปโดนคันโยกลงทะเบียนเหรียญได้ เกมฟรีก็เลยยังดำเนินต่อไป สุดท้ายพวกเขาถึงขั้นติดสกรูแหลมไว้ในกล่องช่องคืนเหรียญให้บาดนิ้ว แล้วหลังจากนั้นพวกเราก็ซื้อ SEGA มาเล่นเอง สนุกมากจริงๆ
    • ทำให้นึกถึงตู้เกมเครื่องหนึ่งที่ถ้าเพื่อนมุดเข้าไปด้านหลังแล้วปิดเปิดไฟใหม่ จะได้โทเค็นฟรีหนึ่งอัน
      ไม่รู้ว่าจงใจออกแบบไว้แบบนั้นเพื่อให้พนักงานทดสอบฟรีหรือเปล่า แต่เพื่อนคนนั้นมุดไปด้านหลังแล้วเล่นฟรีต่อเนื่องอยู่เรื่อยๆ
    • ใช้ได้ผลในอเมริกาเหมือนกัน ราวๆ ทศวรรษ 1990 อาร์เคดส่วนใหญ่เลิกใช้เหรียญเงินจริงแล้วหันมาใช้โทเค็นเฉพาะของร้าน และยังมี เครื่องพนันเชิงทักษะ จำนวนมากที่มีโทเค็นเรียงซ้อนแล้วไหลเลื่อนไปมา
      เวอร์ชัน “Jungle Jive” ถ้าใช้ตัวจุดไฟไฟฟ้าของไฟแช็กกระตุ้นเบาๆ ที่ช่องรับโลหะ จะมีโทเค็นออกมาจากอีกฝั่งของเครื่อง ถ้ากดแกร็กถี่เกินไปมากเกินไปมันจะเข้าโหมดเตือน ทำคนเดียวก็ได้ แต่ชุดที่เหมาะที่สุดคือทีม 3 คน: 1 คนคอยดูพนักงาน, 1 คนกด clicker, 1 คนคอยเก็บโทเค็น
    • จำเลือนๆ ได้ว่า ถ้าตีด้านข้างของเครื่องพินบอลได้พอดี ก็จะได้เกมฟรี คิดว่าน่าจะหลักการเดียวกัน
    • จำได้ว่าเคยอ่านในหนังสือเล่มนี้ว่ากันว่าแฮ็กเกอร์ Pengo เคยเพิ่มเครดิตตู้เกมด้วยวิธีเดียวกัน
      https://www.amazon.com/CYBERPUNK-Outlaws-Hackers-Computer-Fr...
  • ถ้าอ่านในฐานะคนออสเตรเลีย มันจะตีความไปอีกแบบ ตามทักษะการเจรจา บางทีก็อาจได้ root ด้วยแค่ไฟแช็กบุหรี่หนึ่งอัน

  • ไม่ใช่แค่เอ็กซ์พลอยต์ที่สนุก แต่ยังเป็นมินิอินโทรที่ยอดเยี่ยมสำหรับอธิบายว่า แคชใน CPU ทำงานอย่างไร ด้วย
    จำได้ว่าประมาณปีที่แล้วมีบทความที่อธิบายว่าคอมพิวเตอร์ทำงานและถูกสร้างขึ้นมาอย่างไร โดยเริ่มจากส่วนที่เล็กที่สุดอย่างลอจิกเกต มีใครจำได้ไหมว่าเป็นเว็บไซต์อะไร?

  • “มันเป็นแค่ตัวต้านทาน 15 โอห์มหนึ่งตัวกับสายเส้นหนึ่งที่บัดกรีเข้ากับ DQ26 สายนี้จะทำตัวเหมือนเสาอากาศ รับ สัญญาณรบกวนแม่เหล็กไฟฟ้า ใกล้เคียงแล้วส่งตรงเข้าไปยัง data bus”
    นี่เป็นการแฮ็กที่เจ๋งจริงๆ ใช้ไฟแช็กเพื่อสร้างสัญญาณรบกวนแม่เหล็กไฟฟ้าเนี่ยนะ น่าเอาไปจุดข้างๆ DDR bus แล้วดูว่าจะเกิดอะไรขึ้น

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

    • “ในทางทฤษฎี ถ้าเกิดบิตฟลิปขึ้นที่ตำแหน่งใดก็ได้ระหว่างบิต 29 ถึงบิต 12 มันก็จะทำงาน ดังนั้นถ้าสร้างสัญญาณรบกวนแม่เหล็กไฟฟ้าที่แรงพอได้ การบัดกรีสายเสาอากาศอาจไม่จำเป็นอย่างสิ้นเชิงก็ได้”
    • การใช้งานอย่างหนึ่งในส่วน “practical use” คือการ ข้ามระบบป้องกันการคัดลอก ของคอนโซล
  • ตอนเห็นชื่อเรื่องครั้งแรก นึกว่าจะเป็นเรื่องการแฮ็กรถ Hyundai รุ่นใหม่ด้วยอุปกรณ์ไฟแช็กบุหรี่แบบ USB-C