2 คะแนน โดย GN⁺ 2024-07-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • หากใช้ คอนโซล UART และตัวแปรสภาพแวดล้อมของ U-Boot บน Sleep Number Hub เพื่อเข้าถึง root ได้ ก็สามารถสร้าง เส้นทางควบคุมแบบโลคัล ที่ไม่ต้องผ่านเซิร์ฟเวอร์ SleepIQ ได้
  • ปลั๊กอิน Homebridge เดิมเรียก SleepIQ API ทุก 5 วินาที และเมื่อมีผู้ใช้ระดับหลายพันคนก็สร้างภาระให้เครือข่ายของ Sleep Number จนได้รับคำขอให้ปิดใช้งาน
  • อุปกรณ์เป้าหมายคือ Sleep Number Hub 360SIQ01D โดยเงื่อนไขสำคัญคือขา UART J16, คอนโซล 115200 baud, ไดรฟ์ USB แบบ FAT32 หรือ Ext3 และการลงทะเบียน public key ของ SSH
  • หลังเข้าถึง root แล้ว หากใช้ Python 2.7.18 ของ Hub และ /bam/scripts จะสามารถจัดการการตั้งค่าและสถานะของเตียงผ่านเซิร์ฟเวอร์ HTTP บนพอร์ต 8000 ภายในเครือข่ายโลคัลได้
  • Hub สามารถเปิด SSH reverse tunnel ไปยังเซิร์ฟเวอร์ Sleep Number ได้ ดังนั้นเมื่อการควบคุมแบบโลคัลเพียงพอแล้ว การตัดการเชื่อมต่ออินเทอร์เน็ตภายนอกและใช้ Bluetooth หรือการควบคุมภายในจะปลอดภัยกว่า

เหตุผลที่เริ่มหาแนวทางเข้าถึงแบบโลคัล

  • เป้าหมายคือการ ควบคุมเตียง Sleep Number จากเครือข่ายโลคัล โดยไม่ต้องผ่านเซิร์ฟเวอร์ SleepIQ
  • ปลั๊กอิน homebridge ที่เคยสร้างไว้ ทำให้ควบคุมการตั้งค่าเตียงจาก HomeKit หรือระบบอัตโนมัติได้
    • โดยเฉพาะค่า bed presence ที่บอกว่ามีคนอยู่บนเตียงหรือไม่ มีประโยชน์ต่อการทำงานอัตโนมัติ เช่น ปิดไฟหรือล็อกประตู
  • ปลั๊กอินเรียก SleepIQ API ทุก 5 วินาที และเมื่อจำนวนผู้ใช้เพิ่มขึ้นเป็นหลายพันคน ก็สร้างภาระให้เครือข่ายของ Sleep Number
    • Sleep Number ขอให้ปิดใช้งานปลั๊กอิน
    • การทำแบรนด์ของ repository ก็มีปัญหาว่าอาจดูเหมือนเป็นเครื่องมือทางการของ Sleep Number
  • หลังจากนั้น งานเดิมได้ต่อยอดเป็นปลั๊กอินใหม่ homebridge-bed-control
    • ปลั๊กอินใหม่ปิดการติดตาม bed presence เป็นค่าเริ่มต้น และเพิ่มคำเตือนก่อนเปิดใช้งาน

เส้นทางเข้าถึงที่พบจากฮาร์ดแวร์ Hub

  • ช่วงแรกตรวจดู J10 header ใกล้ CPU แต่ไม่ได้ข้อมูล UART
    • ในการกำหนดค่า CPU ตัวนี้ สาย UART ไม่ได้ถูกนำออกมาใช้งาน
  • เชื่อมต่อ logic analyzer เข้ากับขา header 10 ขาที่ J16 header ด้านล่างของบอร์ด เพื่อค้นหาสัญญาณ UART
  • เมื่อเชื่อมต่ออุปกรณ์ UART-TTY ก็สามารถเข้าถึงคอนโซลของอุปกรณ์ได้
  • ได้ dump แฟลชเพื่อตรวจดูระบบไฟล์และช่องโหว่ แต่ไม่พบ backdoor ที่ใครก็ล็อกอินได้โดยไม่ต้องใช้ UART
  • แต่พบ backdoor สำหรับบำรุงรักษา ที่ทำให้ Sleep Number สามารถ SSH เข้าสู่ Hub ได้
    • เนื่องจาก Hub เชื่อมต่อกับเครือข่ายบ้านภายใน เส้นทางเข้าถึงนี้อาจเชื่อมต่อไปยังเครือข่ายภายในได้
    • จึงแนะนำให้ตัดการเชื่อมต่อ Wi-Fi และใช้การควบคุมผ่าน Bluetooth ให้มากที่สุดเท่าที่ทำได้

สิ่งที่ต้องเตรียมและอุปกรณ์เป้าหมาย

  • ขั้นตอนนี้ดำเนินการบนรุ่น Sleep Number Hub 360SIQ01D
  • อุปกรณ์ที่ต้องใช้คืออุปกรณ์ UART-TTY และเครื่องมือเชื่อมต่อกับบอร์ด
    • USB-C to UART หรือ USB-A to UART
    • สามารถติดตั้ง Raspberry Pi Pico W ไว้ภายในแบบถาวรเพื่อเข้าคอนโซลจากระยะไกลในกรณีที่ SSH ไม่ทำงาน
    • pin header 2.54mm กับหัวแร้งบัดกรี หรือ PCB clip clamp
  • ต้องใช้ serial console เพื่อสื่อสารกับบอร์ด
    • บน Linux และ Mac ใช้ minicom ได้
    • บน Windows ใช้ PuTTY ได้
  • แฟลชไดรฟ์ USB-A ต้องฟอร์แมตเป็น FAT32 หรือ Ext3
  • หาก Hub ที่ใช้งานอยู่มีอุปกรณ์ USB เสียบอยู่แล้ว อาจเป็น Wi-Fi dongle และถ้าไม่มีอุปกรณ์นี้ อาจเกิด boot loop ได้

ลำดับหลักของขั้นตอนเข้าถึง root

  • เชื่อมต่ออุปกรณ์ UART เข้ากับ J16 header บนบอร์ด
    • pin 1: TX สัญญาณที่เข้าสู่ Hub
    • pin 2: RX สัญญาณที่ออกจาก Hub
    • pin 3: ground
  • ตั้งค่า serial console เป็น 115200 baud
  • หลังเปิดไฟ Hub ให้กดปุ่ม Space ภายใน 2 วินาทีเพื่อหยุดการ boot อัตโนมัติ
  • ต้องสำรองตัวแปรสภาพแวดล้อมของ U-Boot ด้วย printenv -a ก่อน
    • ควรบันทึกว่าต่างจากสภาพแวดล้อมปัจจุบันหรือไม่ เพราะอาจต้องกู้คืนค่าเริ่มต้น
  • แก้ bootcmd โดยลบส่วน run set_bootargs; ออก เพื่อให้ตั้งค่า boot arguments ด้วยตนเอง
  • เนื่องจากสคริปต์ /init อยู่ใน bootrom ที่ถูก hash ไว้ จึงแก้ไขโดยตรงไม่ได้ ต้องใช้ bootargs เพื่อเปลี่ยนเนื้อหา /init ขณะ runtime
    • สคริปต์ค่าเริ่มต้นจะค้นหาไฟล์เข้ารหัสที่ถอดรหัสด้วยข้อความ let_me_root
    • แทนที่บรรทัดถอดรหัสด้วยค่าที่ถอดรหัสแล้ว เพื่อข้ามเงื่อนไขที่ต้องมีไฟล์เข้ารหัส
  • การ boot ครั้งแรกต้องใช้ไดรฟ์ USB ที่มีไฟล์ let_me_root
    • หลัง boot แล้ว หากเห็นพรอมป์ root@bam-se:~# ในคอนโซล แปลว่าเข้าสู่ root shell แล้ว
  • จากนั้น remount พาร์ทิชัน root เป็นโหมดอ่าน/เขียน และสร้างไฟล์ /root/let_me_root เพื่อให้คงการเข้าถึงไว้ได้โดยไม่ต้องใช้ USB

การตั้งค่าการเข้าถึงผ่าน SSH

  • หลังได้พรอมป์ root แล้ว ให้เพิ่ม SSH public key ลงใน /root/.ssh/authorized_keys เพื่อตั้งค่าการเข้าถึงผ่านเครือข่าย
  • ต้องสร้าง SSH key บนเครื่องโลคัลที่จะใช้เชื่อมต่อ
    • ตัวอย่างคำสั่งคือ ssh-keygen -t ed25519
    • ในประโยคอธิบายแนะนำ key แบบ ecdsa แต่ตัวอย่างจริงใช้ ed25519
  • หลังเพิ่ม public key แล้ว ให้ทดสอบการเชื่อมต่อในรูปแบบ ssh root@$hub_ip -i <path to id_ed25519>
  • หากเชื่อมต่อไม่ได้ ต้องตรวจสอบรูปแบบและเนื้อหาของ authorized_keys
    • มีการระบุว่าไฟล์นี้ควรมี key สองรายการ

สร้างเซิร์ฟเวอร์ควบคุมในเครือข่ายโลคัล

  • แค่เข้าถึง root ยังแทนที่ฟังก์ชันควบคุมของแอปเตียงได้ยาก จึงรัน เซิร์ฟเวอร์ HTTP แบบโลคัล ภายใน Hub
  • Hub มี Python 2.7.18 รวมอยู่ด้วย
    • ดูเหมือนว่า Hub อัปเดตครั้งล่าสุดในปี 2018
    • Python 2.7.18 มีแพ็กเกจ simpleHTTPServer ที่ให้ฟังก์ชันที่จำเป็น
  • script_server.py เปิดเซิร์ฟเวอร์ HTTP บนพอร์ต 8000 และรันสคริปต์ใน /bam/scripts
    • path ของ URL จะกลายเป็นชื่อสคริปต์
    • สามารถส่ง query parameter arg หลายตัวเพื่อใช้เป็น argument ของสคริปต์ได้
    • ผลลัพธ์การรันจะแสดงในเบราว์เซอร์
  • คัดลอกสคริปต์ไปยัง Hub ด้วยรูปแบบ scp -O script_server.py root@$hub_ip:~
  • หากต้องการให้เริ่มอัตโนมัติหลัง reboot ต้องต่อเข้ากับ startup script หรือเพิ่มสคริปต์ rc.d

ตั้งค่าให้รันอัตโนมัติหลัง reboot

  • อินสแตนซ์ OS ที่กำลังรันทำงานอยู่ภายใน chroot ที่สคริปต์ /init ของ bootloader สร้างขึ้น
  • ไฟล์ระบบหลายไฟล์ถูกเก็บไว้ในพาร์ทิชัน tmpfs ดังนั้นแม้แก้ไขโดยตรงก็จะไม่คงอยู่หลัง reboot
  • หาก mount พาร์ทิชันดิสก์ที่มีไฟล์ต้นฉบับแยกต่างหาก จะสามารถแก้ไขไฟล์ /etc ต้นฉบับที่จะถูกคัดลอกหลัง reboot ได้
  • สร้าง init script ในรูปแบบ script_server.sh แล้วคัดลอกไปยัง Hub จากนั้นวางไว้ใน tmp/etc/init.d ของพาร์ทิชัน root ต้นฉบับ
  • เพิ่ม symbolic link ใน rc0.d, rc3.d, rc4.d, rc5.d, rc6.d เพื่อให้รันตอนเริ่มและตอนปิดระบบ
  • หลัง reboot หากเข้า http://$hub_ip:8000/bamstat จากเบราว์เซอร์แล้วเห็นข้อมูลสถานะของ Hub แสดงว่าเซิร์ฟเวอร์ทำงานปกติ

การควบคุมที่ทำได้ด้วยสคริปต์ /bio

  • /bio ดูเหมือนเป็น สคริปต์ควบคุมหลัก ของเตียง
  • ส่งคำสั่งในรูปแบบ /bio?arg=XXXX
  • สามารถดูและตั้งค่า Sleep Number ได้
    • PSNL, PSNR: ดูค่าที่ตั้งไว้ล่าสุดของฝั่งซ้ายและขวาของเตียง
    • PSNl, PSNr: ดูค่าปัจจุบันของฝั่งซ้ายและขวาของเตียง
    • PSNX: ดูค่าที่ตั้งไว้ล่าสุดและค่าปัจจุบันของทั้งสองฝั่ง
    • PSNS&arg=L100: ตั้งค่า Sleep Number ฝั่งซ้ายเป็น 100 โดยช่วงค่าคือ 5..100
  • สามารถจัดการการตรวจจับการมีคนอยู่และการตั้งค่าความเป็นส่วนตัวได้ด้วย
    • SPAU: ดูการตั้งค่าความเป็นส่วนตัว
    • SPAU&arg=on: เปิดการตั้งค่าความเป็นส่วนตัว, ใช้ off เพื่อปิด
    • LBPL, LBPR, LBPX: ดูค่าการมีอยู่ฝั่งซ้าย ฝั่งขวา และทั้งสองฝั่ง
  • รวมถึงฟังก์ชัน Responsive Air, ตำแหน่งเตียง, ไฟส่องสว่าง และอุ่นเท้าด้วย
    • LRSG: ดูการตั้งค่า Responsive Air ทั้งสองฝั่ง
    • LRLE&arg=on, LRRE&arg=off: เปลี่ยนการตั้งค่า Responsive Air ฝั่งซ้ายและขวา
    • MFST: ดูตำแหน่งหัวและเท้า
    • MFUL, MFUR, MFFL, MFFR: ตั้งค่าตำแหน่งหัว·เท้าฝั่งซ้ายและขวา
    • MFO3, MFSO: ตั้งค่าสถานะไฟใต้เตียงหรือปลั๊กไฟ รวมถึงความสว่าง·ตัวจับเวลา
    • FWGL, FWGR, FWSL, FWSR: ดู·ตั้งค่าระดับและตัวจับเวลาของระบบอุ่นเท้าฝั่งซ้ายและขวา
    • SBAS: ตั้งค่า baseline ของเตียง
  • /bio?arg=help แสดงรายการคำสั่งที่รันได้
    • หากเพิ่มคำสั่งเป็น argument ตัวที่สองในการเรียก help จะแสดงข้อมูลโดยละเอียดของคำสั่งนั้น
  • สคริปต์ bio ยังมี foundation preset, การตั้งค่ากรน, การควบคุม DualTemp และข้อมูลสถานะด้วย
    • คำสั่งที่ทำลายข้อมูลได้ เช่น factory reset หรือการควบคุม radio ต้องใช้ด้วยความระมัดระวัง
    • ในเวอร์ชัน bio ที่ผู้เขียนใช้ ลำดับรายการ MFSO ใน LIST ผิด จึงต้องย้ายขึ้นไปอีกสองสามบรรทัดจึงจะเรียกใช้ได้

พื้นที่ที่ตรวจดูได้หลังเข้าถึง และข้อกังวลด้านความปลอดภัย

  • ฟังก์ชันควบคุมเตียงรวมอยู่ในไดเรกทอรี root /bam
    • หากตรวจดูสคริปต์ต่าง ๆ ในนั้น จะเห็นว่า Hub ทำงานอย่างไร
  • พยายามหา backdoor ที่เข้าถึงได้โดยไม่ต้องใช้ UART แต่ช่องทางเข้าถึงที่ชัดเจนถูกปิดไว้แล้ว
  • เมื่อ Hub สื่อสารกับเซิร์ฟเวอร์ Sleep Number จะเปิด SSH tunnel และให้ reverse tunnel ที่นักพัฒนาใช้สำหรับบำรุงรักษาได้
  • เนื่องจากมีความเป็นไปได้ที่ผู้ใช้ภายนอกจะเชื่อมต่อเข้ากับเครือข่ายบ้านภายในโดยตรง จึงพิจารณาวิธีตัดการเชื่อมต่ออินเทอร์เน็ตภายนอกของ Hub เมื่อมีสคริปต์ควบคุมเครือข่ายภายในเพียงพอแล้ว
  • Progressive Web App แบบง่ายที่สามารถแทนที่แอป SleepIQ โดยตรงก็เป็นตัวเลือกขั้นถัดไป

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

 
GN⁺ 2024-07-02
ความคิดเห็นจาก Hacker News
  • ค่อนข้างเหลือเชื่อเลย เมื่อก่อนเคยใช้เตียงแบบนี้ แต่เป็นช่วงก่อนที่ทุกอย่างจะกลายเป็น สมาร์ต มีคอนโทรลเลอร์แบบมีสายสองตัวต่อกับปั๊ม และบนคอนโทรลเลอร์มีหน้าจอตัวเลขกับปุ่มปรับขึ้น/ลง
    ไม่ต้องใช้อินเทอร์เน็ต ไม่ต้องใช้ไมโครคอนโทรลเลอร์ที่ใช้ Linux ไม่มีทางที่เตียงจะถูกแฮ็ก และก็นอนสบายได้

    • ทุกครั้งที่รู้สึกว่า “นี่มัน ซับซ้อนเกินจำเป็น แบบไร้สาระ” ผมพยายามจินตนาการว่ามันอาจทำให้ชีวิตของใครบางคนง่ายขึ้นได้แค่ไหน
      เช่น ถ้ามีความบกพร่องด้านการเคลื่อนไหวแบบใดก็ตาม ตั้งแต่โรคพาร์กินสันไปจนถึงอัมพาตทั้งสี่แขนขา การเชื่อมต่อกับคอนโทรลเลอร์กลางที่สั่งงานด้วยเสียงหรือวิธีป้อนข้อมูลมาตรฐานได้ อาจเป็นประโยชน์อย่างมหาศาล เพราะไม่ต้องรับมือกับข้อจำกัดด้านการเข้าถึงของแต่ละผลิตภัณฑ์ที่ต่างกันไป
      สำหรับคนที่ร่างกายไม่ได้พิการ อุปกรณ์สมาร์ตโฮมส่วนใหญ่แทบดูไร้ประโยชน์ แต่สำหรับคนอื่น มันอาจเป็นเส้นชีวิตได้
    • ถ้าเป็นเตียงแบบนี้ผมคงซื้อ แต่การต้องใส่ ฟังก์ชันเชื่อมต่อ Wi‑Fi ให้เตียงนี่แปลกมาก หมายความว่าต้องมีฮาร์ดแวร์มากกว่าแค่เสียบเข้ากับปลั๊กผนัง ผมว่ามันบ้าไปแล้ว
  • ผมสงสัยตรงที่ว่า “เมื่อฮับสื่อสารกับเซิร์ฟเวอร์ของ Sleep Number มันจะเปิด SSH tunnel และให้ reverse tunnel เพื่อให้นักพัฒนาเชื่อมต่อเข้ามายังฮับเพื่อบำรุงรักษาเมื่อจำเป็น”
    อยากเห็นว่าใช้การยืนยันตัวตนด้วย public key หรือรหัสผ่าน แล้วเวลาทำ tunnel กลับเข้าบ้านใช้ IP หรือ DNS ถ้าเงื่อนไขลงตัวพอดี น่าจะสร้างรูปแบบ DNS hijacking ที่ตลกที่สุดในประวัติศาสตร์มนุษย์ได้เลย
    ยืมคำพูดอมตะของ Homer Simpson มาใช้ก็คือ เตียงขึ้น เตียงลง

    • แบบเก่า: การโจมตี SIM swapping ที่เล็งผู้ถือคริปโต
      แบบใหม่: เตียง Sleep Number เชื่อมกับข้อมูลคำสั่งซื้ออยู่แล้ว ก็เจาะ Sleep Number เพื่อหาเป้าหมาย จากนั้น SSH เข้าเตียงของคนนั้น แล้ว pivot เข้าสู่เครือข่ายบ้านเพื่อขโมยกระเป๋าคริปโต
      ยังไงเงินก็มักถูกซ่อนไว้ใต้ที่นอนอยู่แล้วนี่ ;)
    • ถ้าไม่ได้แจ้งเรื่องนี้ก่อนซื้อ เจ้าของเตียงไม่ควรฟ้องหรือ? การเข้าถึงเครือข่ายโดยไม่ได้รับอนุญาตและฝัง backdoor ไม่ใช่อาชญากรรมหรือ?
  • ทำไมเตียงต้องรัน Linux? ทำไม?
    รู้สึกเหมือนเราอยู่ในเส้นเวลาที่โง่ที่สุดจากทั้งหมดที่เป็นไปได้ เตียงธรรมดาที่ไม่มี RAM 1GB กับระบบปฏิบัติการเต็มรูปแบบมันมีปัญหาอะไร? ที่ไหน ๆ ก็เหมือนกันไปหมด แม้แต่การหาเครื่องซักผ้าที่ไม่ต่อ Wi‑Fi ก็ยังเป็นเรื่อง และพอคิดว่าอีก 10 ปีต้องทำแบบนั้นอีกก็น่ากลัว
    ในฐานะคนที่เคยเจาะอุปกรณ์ “สมาร์ต” ระดับ O(1000) ชิ้น ไม่ว่าจะเพื่อความสนุกหรือเพื่อหาเงิน ผมไม่อยากเอาของแบบนี้เข้าบ้านเลย แต่ความบ้าอย่าง เตียงที่รัน Linux แบบนี้ทำให้หลีกเลี่ยงยากขึ้นเรื่อย ๆ ได้โปรดหยุดเถอะ

    • เตียงไม่จำเป็นต้องซับซ้อน เมื่อก่อนแค่ Z80 กับ RAM 32K ก็ทำทุกอย่างที่เตียงต้องทำได้แล้ว วันที่ซื้อเตียงแบบ cooperative multitasking เครื่องแรกเป็นวันที่น่าจดจำจริง ๆ และผ้าห่มความหนาแน่นสูงก็เปลี่ยนเกมไปเลย
      แต่ผมไม่คิดถึงการต้องถือแผ่นไวนิลเปล่าไปห้องสมุดสาธารณะเพื่อรับอัปเดตซอฟต์แวร์หรอกนะ ถ้าลืมทีไรก็มีตัวเรือดขึ้นทุกที
    • https://imgur.com/6wbgy2L
      “ผลิตภัณฑ์เทคโนโลยีล่าสุดที่ผมมีคือพรินเตอร์รุ่นปี 2004 และผมเตรียมปืนที่บรรจุกระสุนไว้พร้อมยิงมันทันทีถ้ามันส่งเสียงที่คาดไม่ถึง”
    • เหตุผลที่เตียงรัน Linux คือเราอยู่ในยุคที่สิ่งต่าง ๆ วัดผล ตัวเองเพื่อผลลัพธ์ที่ดีขึ้น
      เมื่อหนึ่งศตวรรษก่อน เราค้นพบยาปฏิชีวนะ ซึ่งเป็นความก้าวหน้าครั้งใหญ่ หลังจากนั้นเราพบโรคที่ชัดเจนและวิธีรักษาที่ชัดเจนมากมาย และตอนนี้เหลือแต่เรื่องซับซ้อนและละเอียดอ่อน เตียงนี้รัน Linux เพื่อบอกสภาพการนอนของคุณ
      ถ้านอนหลับไม่ดี โดยทั่วไปจะเกิดผลเสียหลายอย่างแม้จะไม่รุนแรงนัก และถ้ารู้ก็แก้ได้ มันเหมือนทำการตรวจการนอนหลับความเข้มต่ำให้ทุกคืน จึงอาจเป็นข้อมูลที่มีค่า
      เตียง Sleep Number ราคาเป็นพันดอลลาร์ ถ้าอยากหลีกเลี่ยงก็น่าจะหลีกเลี่ยงได้พอสมควร
    • ผมก็รู้สึกแบบเดียวกัน ข้อดีคือกระแสแบบนี้ทำให้ผมหันไปซื้อของที่เก่ากว่า เป็นมือสอง และ ซ่อมได้ ในราคาถูกกว่ามาก และยังค่อย ๆ ได้เรียนรู้การซ่อมเล็ก ๆ น้อย ๆ ของอุปกรณ์อิเล็กทรอนิกส์เก่า
      ดีต่อกระเป๋าเงินมาก และยังพอใจที่ไม่ส่งของที่ยังใช้ได้ไปฝังกลบ คำว่า ลดการใช้ ใช้ซ้ำ และรีไซเคิล มีลำดับความสำคัญตามนั้นจริง ๆ
    • อย่างน้อยมันก็ไม่ได้รัน Windows
  • ตอนแรกผมนึกเต็ม ๆ ว่าบทความนี้เป็นเรื่องแฮ็กเตียง Eight Sleep โดยคนที่ไม่อยากเอ่ยชื่อบริษัทตรง ๆ ด้วยเหตุผลทางกฎหมาย
    แต่พอเห็นรูป “Number Sleep Hub” ที่ดูเหมือนมีอยู่จริงก็หลุดโลกไปเลย มีบริษัททำเตียงระบายความร้อนด้วยน้ำตั้งสองเจ้า เจ้านึงคือ Eight Sleep อีกเจ้าคือ Sleep Number เส้นเวลานี้แปลกเกินไปแล้ว เหมือนตัวสร้างเลขสุ่มของอินสแตนซ์นี้ได้ seed แย่ ๆ มา

    • ชื่อ Sleep Number มาจาก ค่าปรับความแน่น ของที่นอน คือเลือก “sleep number” ของตัวเอง แล้วคู่ของคุณก็เลือกค่าของตัวเองที่อีกฝั่งของเตียง
    • มองว่าเป็นความบังเอิญที่ตลกดี แต่เหมือน Eight Sleep เลือก ชื่อที่สับสนกับ Sleep Number ได้ง่าย แค่พอไม่โดนฟ้องทันที
    • แบรนด์ Sleep Number น่าจะมีมาตั้งแต่ยุค 80 แล้วมั้ง ผมไม่เคยใช้เอง แต่แน่ใจว่าเป็นแบรนด์เก่าแก่ ถ้าอยู่นอกสหรัฐฯ อาจไม่เคยได้ยินก็ได้
    • เตียง Sleep Number โดยพื้นฐานแล้วเป็น ถุงลม สี่เหลี่ยมขนาดยักษ์ทรงที่นอน ฝังอยู่ในหลุมโฟม
      https://i.ytimg.com/vi/pMiTq6YkJ2c/maxresdefault.jpg
      พูดตรง ๆ คือผู้คนจ่ายเงินหลายพันดอลลาร์ให้เตียงลมปรับระดับได้แบบหรูที่มีโฟมวางทับอยู่ด้านบน
    • ผมเพิ่งเคยได้ยินทั้งสองเจ้า เลยนึกว่าชื่อเรื่องเป็นอุปมาเกี่ยวกับ “วิธีได้สิทธิ์ root ในสมองเพื่อปรับปรุงคุณภาพการนอน”
      เตียงแบบนี้ควรมี ปุ่มควบคุมแบบกายภาพ ที่คลำใช้ได้แม้ในที่มืด ถ้าต้องหยิบสมาร์ตโฟนขึ้นมาตรงหน้าเพื่อปรับตอนกำลังจะหลับ ผมก็สงสัยจริง ๆ ว่าผู้ผลิตเตียงและที่นอนรู้หรือเปล่าว่าอะไรดีหรือไม่ดีต่อคุณภาพการนอน
  • Eight Sleep Pod 3 ก็มีวิธีเข้าไปในลักษณะคล้ายกัน [0] บางรุ่นมีการ์ด MicroSD ที่แก้ไขได้อยู่ภายใน จึงต้องใช้อุปกรณ์เสริมน้อยลง
    วิธีในบทความอาจเป็นวิธีที่ดีในการได้สิทธิ์ root บน Pod ที่ไม่มีการ์ด อย่างไรก็ตาม สิ่งที่เพิ่งรู้คือ Eight Sleep ลงลายเซ็นให้เฟิร์มแวร์อัปเดตจริง แต่ก็ส่ง private key ที่ใช้ลงลายเซ็นอัปเดตนั้นมาในแพ็กเกจเดียวกันด้วย
    [0]: https://github.com/bobobo1618/ninesleep

    • น่าขันที่พอเห็นแบบนี้กลับทำให้อยากซื้อขึ้นมา ถ้าสามารถทำให้อุปกรณ์สมาร์ททำงานแบบ local หรือควบคุมด้วย Home Assistant แล้วตัดการเชื่อมต่ออินเทอร์เน็ตได้ ก็ดูไม่แย่เท่าไร
      แน่นอนว่า 2,000–4,000 ดอลลาร์นั้นแพง แต่ถ้าเป็นค่าใช้จ่ายครั้งเดียวที่ใช้ได้ราว 10 ปี ก็ถือว่าสมเหตุสมผล แต่ถ้าจ่าย 4,000 ดอลลาร์แล้วยังต้องจ่ายอีกเดือนละ 25 ดอลลาร์ แบบนั้นไร้สาระ
  • สงสัยว่ามีใครทำแบบเดียวกันกับ Eight Sleep แล้วหรือยัง การที่ปรับอุณหภูมิเตียงไม่ได้เพียงเพราะอินเทอร์เน็ตหลุดนี่น่าหงุดหงิดอย่างมากจริงๆ

    • นี่มันนรกแบบใหม่อะไรกัน ทำไมต้องต่ออินเทอร์เน็ตด้วย?
    • ในกรณีของผม ผ้าห่ม แก้ปัญหาได้ 95% และที่กระท่อมสกี แผ่นรองที่นอนไฟฟ้าราคาถูกก็จัดการอีก 5% ที่เหลือ
    • เคยคิดจะซื้อ Eight Sleep แต่พอรู้ว่าทำแบบนี้ก็หมดความสนใจทันที จ่ายเกิน 1,000 ดอลลาร์สำหรับผ้าคลุมที่นอนแล้ว ยังจะให้จ่าย “ค่าเช่า” เพื่อให้ของทำงานอีก ผมไม่เอาด้วย
  • จะไม่ซื้อ Sleep Number
    เคยนอนบนที่นอนเป่าลมมาหลายปี หลังจากผู้ผลิตเริ่มจ้างผลิตในจีน ตะเข็บของผนังกั้นภายในก็แตกในที่นอนสองตัว

  • อยากให้เลิกแพร่เรื่องไร้สาระอย่าง “ถ้าทำตามคู่มือนี้ คุณต้องแก้ไขไฟล์ภายในของฮับ Sleep Number และจะทำให้การรับประกันเป็นโมฆะ” ได้แล้ว
    เช่นเดียวกับสติกเกอร์ “แกะแล้วหมดประกัน” ที่บังคับใช้ทางกฎหมายไม่ได้ ไม่มีอะไรที่ทำให้การรับประกันสินค้า เป็นโมฆะโดยอัตโนมัติ นอกจากการใช้งานผิดวิธีหรือการบำรุงรักษาที่ไม่ดี
    เมื่อเตียงสมาร์ทเสีย ผู้ผลิตไม่ได้หลุดพ้นจากภาระการรับประกันเพียงเพราะคุณเคยยุ่งกับคอนโทรลเลอร์ รวมถึงการรับประกันโดยนัยด้วย ภาระในการพิสูจน์ว่าผู้บริโภคทำสินค้าเสีย ใช้งานในแบบที่ “ไม่สมเหตุสมผล” หรือไม่ได้บำรุงรักษาอย่างเหมาะสม อยู่ที่ผู้ผลิต
    ถ้าคุณต่อ JTAG แล้วพลาดไปบริดจ์ 5V เข้ากับวงจรลอจิก 3.3V จนสมองของเตียงไหม้ อันนั้นเป็นความรับผิดชอบของคุณเอง
    แต่ถ้า power supply ระเบิดจนคอนโทรลเลอร์เสีย ข้อเท็จจริงที่ว่าคุณติดหัวต่อ JTAG แปะสติกเกอร์ลูกตา และทาสีชมพู ไม่เกี่ยวกัน ต้องซ่อมให้
    แม้จะแก้ไขเฟิร์มแวร์ ผู้ผลิตก็ต้องพิสูจน์ว่าการแก้ไขนั้นเป็นสาเหตุของความเสียหาย
    เราไม่ได้คาดหวังว่าการเล่นเกมบนแล็ปท็อปจนเครื่องร้อนจะทำให้ประกันเป็นโมฆะ การติดตั้ง Firefox หรือ Linux ก็เช่นกัน แล้วก็ไม่มีเหตุผลให้คิดว่ากฎจะเปลี่ยนไปเพียงเพราะอุปกรณ์นั้น “โง่” กว่านิดหน่อย

    • กฎหมายบนกระดาษกับกฎหมายในสนามจริงไม่เหมือนกัน ถ้าผู้ผลิตปฏิเสธการรับประกัน ลูกค้าทำอะไรได้ไม่มากนัก
  • ต่อไปคงเป็น ransomware “ถ้าไม่จ่าย 1,000 ดอลลาร์ เดือนหน้าทั้งเดือนแกจะนอนบนเตียงของแกไม่ได้”

    • ต่อไปไม่ใช่ subscription เหรอ?
  • มาดูข้อเท็จจริงบางอย่างกัน
    เตียง Sleep Number มีเซ็นเซอร์ตรวจจับอัตราการเต้นของหัวใจ โดยทำจากการตรวจจับความต่างของแรงดันภายในที่นอนลม ในทางปฏิบัติก็แทบไม่ต่างจาก ไมโครโฟน และค่อนข้างไวด้วย

    • ใช้เซ็นเซอร์แรงดันตรวจจับอัตราการเต้นของหัวใจได้จริงหรือ? ดูเหมือน noise จะเยอะเกินจนข้อมูลใช้ไม่ได้
      ลองค้นดูแล้ว เหมือนว่าจะผสานการวิเคราะห์เชิงสถิติที่ค่อนข้างสมเหตุสมผล จนได้ข้อมูลที่แม่นพอ น่าสนใจดี