Belkin Wemo Smart Plug V2 – บัฟเฟอร์โอเวอร์โฟลว์ที่ไม่ได้รับการแก้ไข

Belkin Wemo Smart Plug V2 – บัฟเฟอร์โอเวอร์โฟลว์ที่ไม่ได้รับการแก้ไข

โหนดต้นทาง: 2657924

นักวิจัยจาก Sternum บริษัทรักษาความปลอดภัย IoT ขุดลงไป ปลั๊กไฟระบบอัตโนมัติในบ้านยอดนิยมจาก Belkin แบรนด์อุปกรณ์ชื่อดัง

แบบจำลองที่พวกเขาดู, the Wemo ปลั๊กอัจฉริยะขนาดเล็ก (F7C063) เห็นได้ชัดว่ากำลังจะสิ้นสุดอายุการเก็บรักษา แต่เราพบว่ามีขายมากมายทางออนไลน์พร้อมกับคำแนะนำโดยละเอียดและคำแนะนำในเว็บไซต์ของ Belkin เกี่ยวกับวิธีการตั้งค่า

เก่า (ในแง่สมัยใหม่ในระยะสั้น) นักวิจัยตั้งข้อสังเกตว่า:

ความสนใจเบื้องต้นของเราในอุปกรณ์นี้มาจากการที่มีสิ่งเหล่านี้หลายชิ้นวางอยู่รอบ ๆ ห้องปฏิบัติการของเราและใช้ในบ้านของเรา ดังนั้นเราจึงต้องการดูว่าปลอดภัย (หรือไม่) ที่จะใช้ [… T]ดูเหมือนว่าจะเป็นอุปกรณ์ที่ค่อนข้างได้รับความนิยมสำหรับผู้บริโภค[; b]จากตัวเลขเหล่านี้ จึงปลอดภัยที่จะประเมินว่ายอดขายรวมใน Amazon เพียงอย่างเดียวควรอยู่ที่หลักแสน

พูดง่ายๆ คือมีผู้คนจำนวนมากที่ซื้อและเสียบปลั๊กสิ่งเหล่านี้แล้ว และกำลังใช้มันตอนนี้เพื่อควบคุมเต้ารับไฟฟ้าในบ้านของพวกเขา

พูดง่ายๆ ว่า “ปลั๊กอัจฉริยะ” คือปลั๊กไฟที่คุณเสียบเข้ากับเต้ารับบนผนังที่มีอยู่และวางสวิตช์ที่ควบคุมด้วย Wi-Fi ระหว่างเต้ารับหลักที่ด้านหน้าของเต้ารับบนผนังและเต้ารับหลักที่มีหน้าตาเหมือนกันบน ด้านหน้าของปลั๊กอัจฉริยะ ให้คิดว่ามันเหมือนกับอะแดปเตอร์แปลงไฟที่แทนที่จะแปลง เช่น เต้ารับยูโรแบบกลมให้เป็นปลั๊กสามเหลี่ยมของสหราชอาณาจักร แปลง เช่น เต้ารับของสหรัฐฯ ที่สลับด้วยตนเองให้เป็นเต้ารับของสหรัฐฯ ที่สวิตช์ด้วยไฟฟ้าซึ่งสามารถควบคุมได้จากระยะไกลผ่านแอปหรือ อินเทอร์เฟซแบบเว็บ

S ใน IoT…

ปัญหาเกี่ยวกับอุปกรณ์ที่เรียกว่า Internet of Things (IoT) อย่างที่พูดเล่นๆ ก็คือ ตัวอักษร “S” ใน “IoT” หมายถึงความปลอดภัย...

…หมายความว่า มักจะมีความปลอดภัยทางไซเบอร์ไม่มากเท่าที่คุณคาดหวัง หรือแม้แต่ไม่มีเลยด้วยซ้ำ

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

เราเคยเขียนเกี่ยวกับความไม่ปลอดภัยของ IoT ในผลิตภัณฑ์ต่างๆ มากมายก่อนหน้านี้ จาก กาต้มน้ำอินเทอร์เน็ต (ใช่จริงๆ) ที่อาจทำให้รหัสผ่าน Wi-Fi ที่บ้านของคุณรั่วไหลไปยังกล้องรักษาความปลอดภัยที่มิจฉาชีพสามารถใช้เพื่อเก็บรักษา ตาคุณ แทนที่จะเป็นวิธีอื่น ๆ ดิสก์ไดรฟ์ที่เชื่อมต่อกับเครือข่ายมีความเสี่ยงที่จะได้รับ ถูกสาดโดยแรนซัมแวร์ โดยตรงผ่านอินเทอร์เน็ต

ในกรณีนี้ นักวิจัยพบช่องโหว่ในการเรียกใช้โค้ดจากระยะไกลใน Wemo Mini Smart Plug เมื่อเดือนมกราคม 2023 รายงานในเดือนกุมภาพันธ์ 2023 และได้รับหมายเลข CVE ในเดือนมีนาคม 2023 (CVE-2023-27217).

น่าเสียดายที่แม้ว่าจะมีอุปกรณ์เหล่านี้เกือบทั้งหมดที่ใช้งานจริงในโลกแห่งความเป็นจริง แต่ Belkin ได้กล่าวอย่างชัดเจนว่าพิจารณาว่าอุปกรณ์ดังกล่าว "สิ้นสุดอายุการใช้งาน" และช่องโหว่ด้านความปลอดภัยจะไม่ได้รับการแก้ไข

(เราไม่แน่ใจว่าการเลิกจ้างแบบ "สิ้นอายุขัย" แบบนี้จะยอมรับได้อย่างไรหากอุปกรณ์พบว่ามีข้อบกพร่องในวงจรไฟฟ้า 120V AC หรือ 230V AC เช่น ความเป็นไปได้ของความร้อนสูงเกินไปและปล่อยสารเคมีที่เป็นพิษหรือการตั้งค่า ไฟไหม้ แต่ดูเหมือนว่าข้อผิดพลาดในอุปกรณ์อิเล็กทรอนิกส์ดิจิทัลแรงดันต่ำหรือเฟิร์มแวร์ในอุปกรณ์สามารถถูกเพิกเฉยได้ แม้ว่าอาจนำไปสู่การโจมตีทางไซเบอร์ที่สวิตช์ไฟหลักในอุปกรณ์เปิดและปิดซ้ำ ๆ ได้ตามต้องการ)

เมื่อชื่อที่เป็นมิตรคือศัตรูของคุณ

ปัญหาที่นักวิจัยค้นพบคือความแก่ที่ดี สแต็กบัฟเฟอร์ล้น ในส่วนของซอฟต์แวร์อุปกรณ์ที่ให้คุณเปลี่ยนสิ่งที่เรียกว่า FriendlyName ของอุปกรณ์ – สตริงข้อความที่แสดงเมื่อคุณเชื่อมต่อกับแอปบนโทรศัพท์ของคุณ

ตามค่าเริ่มต้น อุปกรณ์เหล่านี้เริ่มต้นด้วยชื่อที่จำง่ายตามบรรทัดของ Wemo mini XYZที่นี่มี XYZ หมายถึงเลขฐานสิบหกสามหลักที่เราคาดเดาว่าถูกเลือกแบบสุ่ม

ซึ่งหมายความว่าหากคุณเป็นเจ้าของอุปกรณ์เหล่านี้ XNUMX-XNUMX เครื่อง อุปกรณ์เหล่านี้แทบจะเริ่มต้นด้วยชื่อที่แตกต่างกัน ดังนั้นคุณจึงตั้งค่าได้อย่างง่ายดาย

แต่คุณอาจจะต้องเปลี่ยนชื่อในภายหลังเพื่อให้ง่ายต่อการแยกแยะในอนาคต โดยกำหนดชื่อที่จำได้ง่าย เช่น TV power, Laptop charger และ Raspberry Pi server.

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

แต่พวกเขาลืมตรวจสอบว่าชื่อที่คุณระบุนั้นพอดีกับช่องขนาด 68 ไบต์นั้นหรือไม่

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

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

เราทุกคนรู้ว่าเหตุใดการปล่อยให้ฝั่งไคลเอนต์ทำการตรวจสอบข้อผิดพลาดแทนที่จะตรวจสอบแทน (หรือดีกว่านั้นเช่นกัน) ที่ฝั่งเซิร์ฟเวอร์เป็นความคิดที่แย่มาก:

  • รหัสไคลเอนต์และรหัสเซิร์ฟเวอร์อาจไม่สอดคล้องกัน แอปไคลเอนต์ในอนาคตอาจตัดสินใจว่าชื่อ 72 อักขระจะเป็นตัวเลือกที่ดีและเริ่มส่งข้อมูลไปยังเซิร์ฟเวอร์มากกว่าที่จะสามารถจัดการได้อย่างปลอดภัย ผู้เขียนโค้ดฝั่งเซิร์ฟเวอร์ในอนาคตอาจสังเกตเห็นว่าไม่มีใครใช้เต็ม 68 ไบต์ที่สงวนไว้ และตัดสินใจโดยไม่ได้ตั้งใจว่า 24 ควรจะมากเกินพอ
  • ผู้โจมตีสามารถเลือกที่จะไม่ยุ่งเกี่ยวกับแอป ด้วยการสร้างและส่งคำขอของตนเองไปยังอุปกรณ์ พวกเขาจะข้ามการตรวจสอบความปลอดภัยใดๆ ที่ต้องใช้แอปเพียงอย่างเดียวได้เล็กน้อย

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

ทำลายสแต็ก

น่าเสียดายที่ในระบบปฏิบัติการแบบสแต็ก ซอฟต์แวร์ส่วนใหญ่จะลงเอยด้วยการจัดวางบัฟเฟอร์หน่วยความจำชั่วคราวแบบสแต็ก ดังนั้นบัฟเฟอร์ส่วนใหญ่เหล่านี้จึงตามมาติดๆ ด้วยบล็อกหน่วยความจำที่สำคัญอีกบล็อกหนึ่งที่บอกให้โปรแกรมไปที่ใดเมื่อดำเนินการเสร็จสิ้น มันกำลังทำอยู่ตอนนี้

ในทางเทคนิคแล้ว กลุ่มข้อมูล “ตำแหน่งต่อไป” เหล่านี้เรียกว่า ที่อยู่ผู้ส่งและจะถูกบันทึกโดยอัตโนมัติเมื่อโปรแกรมเรียกสิ่งที่เรียกว่า a ฟังก์ชัน,หรือ รูทีนย่อยซึ่งเป็นกลุ่มของโค้ด (เช่น "พิมพ์ข้อความนี้" หรือ "ป๊อปอัปกล่องโต้ตอบคำเตือน") ที่คุณต้องการให้ใช้ในหลายส่วนของโปรแกรม

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

(หากรูทีนย่อยมีที่อยู่ผู้ส่งที่แน่นอน คุณสามารถเรียกมันได้จากที่เดียวในโปรแกรมของคุณ ซึ่งจะทำให้ไม่ต้องกังวลกับการบรรจุโค้ดนั้นลงในรูทีนย่อยที่แยกจากกันตั้งแต่แรก)

อย่างที่คุณสามารถจินตนาการได้ หากคุณเหยียบย่ำที่อยู่ผู้ส่งวิเศษนั้นก่อนที่รูทีนย่อยจะทำงานเสร็จ เมื่อเสร็จสิ้น ก็จะ "คลาย" ตัวเองไปยังที่ผิดอย่างวางใจแต่ไม่รู้ตัว

ด้วยความโชคดีเล็กน้อย (หรืออาจมาก) ผู้โจมตีอาจสามารถคาดการณ์ล่วงหน้าได้ว่าจะเหยียบย่ำที่อยู่ผู้ส่งอย่างสร้างสรรค์ และด้วยเหตุนี้จึงมุ่งโปรแกรมในทางที่ผิดโดยจงใจและมุ่งร้าย

แทนที่จะหยุดทำงานเพียงอย่างเดียว โปรแกรมที่ส่งผิดทางอาจถูกหลอกให้รันโค้ดที่ผู้โจมตีเลือก ซึ่งทำให้เกิดสิ่งที่เรียกว่า การเรียกใช้โค้ดจากระยะไกล หาประโยชน์หรือ RCE

การป้องกันทั่วไปสองประการช่วยป้องกันการแสวงประโยชน์ในลักษณะนี้:

  • การสุ่มเค้าโครงพื้นที่ที่อยู่หรือที่เรียกว่า ASLR ระบบปฏิบัติการจงใจโหลดโปรแกรมในตำแหน่งหน่วยความจำที่แตกต่างกันเล็กน้อยทุกครั้งที่เรียกใช้ สิ่งนี้ทำให้ผู้โจมตีคาดเดาได้ยากขึ้นว่าจะมุ่งไปทางโปรแกรมบั๊กกี้ในทางที่ผิดได้อย่างไร ซึ่งท้ายที่สุดแล้วจะได้รับและคงไว้ซึ่งการควบคุม แทนที่จะเพียงแค่ทำให้โค้ดขัดข้อง
  • นกคีรีบูนสแต็ค, ตั้งชื่อตามนกที่คนงานเหมืองเคยพาพวกมันไปใต้ดินเพราะพวกมันจะเป็นลมเมื่อมีเทน จึงเป็นการเตือนภัยที่โหดร้ายแต่ได้ผลล่วงหน้าถึงความเสี่ยงของการระเบิด โปรแกรมจงใจแทรกบล็อกข้อมูลที่รู้จักแต่สุ่มไว้ด้านหน้าที่อยู่ผู้ส่งทุกครั้งที่มีการเรียกใช้รูทีนย่อย เพื่อให้บัฟเฟอร์ล้นจะเขียนทับ "คานารี" อย่างหลีกเลี่ยงไม่ได้และตรวจจับได้ ก่อนที่มันจะเกินขนาดจนเหยียบย่ำ ในที่อยู่ผู้ส่งที่สำคัญทั้งหมด

เพื่อให้ช่องโหว่ทำงานได้อย่างรวดเร็วและเชื่อถือได้ นักวิจัยจำเป็นต้องบังคับปลั๊ก Wemo เพื่อปิด ASLR ซึ่งผู้โจมตีจากระยะไกลไม่สามารถทำได้ แต่ด้วยความพยายามหลายครั้งในชีวิตจริง ผู้โจมตีอาจโชคดีและคาดเดาได้อย่างถูกต้อง ที่อยู่หน่วยความจำที่โปรแกรมใช้อยู่และรับการควบคุมต่อไป

แต่นักวิจัยไม่จำเป็นต้องกังวลเกี่ยวกับปัญหาสแต็กคานารี เนื่องจากแอปบั๊กกี้ได้รับการรวบรวมจากซอร์สโค้ดโดยปิดฟีเจอร์ "แทรกคำแนะนำด้านความปลอดภัยในการตรวจสอบคานารี"

(โดยทั่วไปแล้วโปรแกรมที่มีการป้องกัน Canary จะใหญ่กว่าและช้ากว่าโปรแกรมที่ไม่มีการป้องกันเล็กน้อย เนื่องจากต้องใช้โค้ดพิเศษในทุกรูทีนย่อยเพื่อทำการตรวจสอบความปลอดภัย)

จะทำอย่างไร?

  • หากคุณเป็นเจ้าของ Wemo Smart Plug V2 ตรวจสอบให้แน่ใจว่าคุณไม่ได้กำหนดค่าเราเตอร์ที่บ้านให้อนุญาตให้เข้าถึงอุปกรณ์จาก "ภายนอก" ผ่านอินเทอร์เน็ต สิ่งนี้จะลดสิ่งที่เป็นที่รู้จักในศัพท์แสงว่าเป็นของคุณ พื้นที่ผิวโจมตี.
  • หากคุณมีเราเตอร์ที่รองรับ Universal Plug and Play หรือที่เรียกว่า UPnP ตรวจสอบให้แน่ใจว่าปิดอยู่ UPnP ทำให้อุปกรณ์ภายในสามารถเปิดออกโดยไม่ได้ตั้งใจต่อบุคคลภายนอกได้อย่างง่ายดาย
  • หากคุณเป็นโปรแกรมเมอร์ หลีกเลี่ยงการปิดคุณลักษณะด้านความปลอดภัยของซอฟต์แวร์ (เช่น การป้องกันสแต็กหรือการตรวจสอบคานารีสแต็ก) เพื่อประหยัดไบต์เพียงไม่กี่รายการ หากหน่วยความจำของคุณหมดจริงๆ ลองลดรอยเท้าของคุณโดยการปรับปรุงโค้ดหรือลบคุณลักษณะต่างๆ แทนที่จะลดความปลอดภัยลง เพื่อให้คุณอัดได้มากขึ้น

ประทับเวลา:

เพิ่มเติมจาก ความปลอดภัยเปล่า