Tapjacking กลับมาอีกครั้งใน Android Marshmallow และไม่มีใครสังเกตเห็น

อุปกรณ์ Marshmallow บางตัวไวต่อ Tapjacking โดยที่แอปวางซ้อนข้อความที่ด้านบนของกล่องโต้ตอบการอนุญาตเพื่อหลอกผู้ใช้

แม้ว่าพวกเราหลายคนจะน้ำลายสอเพราะอุปกรณ์ Android Nougat สำหรับอุปกรณ์ Nexus ที่เพิ่งเปิดตัว แต่ผู้ใช้ส่วนใหญ่ก็ยังคงใช้ Android Marshmallow การใช้ประโยชน์จากการดำรงอยู่ซึ่งได้รับการบันทึกไว้ตั้งแต่นั้นเป็นต้นมา อย่างน้อยกลางปี ​​2558 ยังคงส่งผลกระทบต่ออุปกรณ์ Android สมัยใหม่จำนวนมาก

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


การกลับมาของ Tapjacking

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

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

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

Tapjacking อนุญาต Marshmallow การแตะ "อนุญาต" จะแสดงรายชื่อติดต่อทั้งหมดของฉัน

แอปพลิเคชันที่มีความสามารถในการวาดบนหน้าจอของคุณอาจหลอกให้คุณป้อนข้อมูลที่ละเอียดอ่อนได้ ตัวอย่างเช่น การซ้อนทับหน้าจออาจใส่รหัสผ่านปลอมที่ด้านบนของหน้าจอเข้าสู่ระบบจริงเพื่อรวบรวมรหัสผ่านของคุณ การเอารัดเอาเปรียบเช่นนี้เรียกว่า 'แท็ปแจ็ค' และมีการอัพเดทและแพตช์บน Android เวอร์ชันต่างๆ ตลอดหลายปีที่ผ่านมาด้วย หนึ่งในตัวอย่างที่แย่ที่สุดที่คงอยู่จนถึง Android 4.0.3. แต่เมื่อไม่นานมานี้การเอารัดเอาเปรียบกลับคืนมาด้วย รูปแบบการอนุญาตรันไทม์ของ Android Marshmallow.

นักพัฒนาชื่อ อิโว บานาช สร้าง แอปพลิเคชัน แสดงให้เห็นถึงการเอารัดเอาเปรียบ วิธีการทำงานค่อนข้างง่าย - เมื่อแอปพลิเคชันแสดงกล่องโต้ตอบการอนุญาต ซึ่งเป็นแอปพลิเคชันที่เป็นอันตราย ที่คุณติดตั้งจะแสดงการซ้อนทับของระบบเพื่อปกปิดบล็อกข้อความของกล่องโต้ตอบการอนุญาตด้วยข้อความใดก็ตาม ต้องการ ผู้ใช้ที่ไม่รู้ตัวซึ่งคลิก "อนุญาต" ในกล่องโต้ตอบการอนุญาตจะถูกหลอกให้อนุญาตตามที่พวกเขาร้องขอ แต่คำขอนั้นถูกซ่อนไว้จากมุมมองของผู้ใช้ การแสวงหาประโยชน์ดังกล่าวขัดต่อจุดประสงค์ของระบบการอนุญาตของ Android Marshmallow อย่างสิ้นเชิงนับตั้งแต่เปิดตัว โมเดลใหม่ควรจะทำให้แน่ใจว่าผู้ใช้จะอนุญาตเฉพาะที่พวกเขายินยอมอย่างชัดแจ้งเท่านั้น.

ตอนนี้ฉันรู้ว่าคุณคิดอะไรอยู่ หาก Android ตรวจพบการซ้อนทับของระบบและป้องกันไม่ให้ฉันอนุญาตการอนุญาตพื้นที่เก็บข้อมูล Instagram มันจะป้องกันไม่ให้เกิดช่องโหว่นี้เกิดขึ้นใช่หรือไม่ คำตอบคือไม่ในการทดสอบของฉัน ปรากฏว่าในอุปกรณ์บางรุ่นที่แสดงข้อความซ้อนทับที่ด้านบนของกล่องโต้ตอบการอนุญาต จะไม่ทริกเกอร์กลไกด้านความปลอดภัย ผู้พัฒนาแอปพลิเคชัน tapjacking แบบพิสูจน์แนวคิดระบุว่าการหาประโยชน์นั้นมีประสิทธิภาพเพราะมัน ขึ้นอยู่กับผู้ใช้ที่ติดตั้งแอปพลิเคชันรองที่เป็นอันตรายซึ่งกำหนดเป้าหมาย API ระดับ 22 และต่ำกว่า (ก่อนมาร์ชแมลโลว์) นี่เป็นเพราะความจริงที่ว่าก่อน Android Marshmallow แอปพลิเคชันทั้งหมดจะได้รับสิทธิ์ระหว่างการติดตั้ง

โอเค หากคุณใช้ Marshmallow สิ่งที่คุณต้องทำคือหลีกเลี่ยงการติดตั้งแอปใดๆ ที่คุณไม่เชื่อถือซึ่งจะขออนุญาตในการวาดโอเวอร์เลย์ใช่ไหม หากรูปแบบการอนุญาตของ Android ทำงานตามที่วางแผนไว้แต่แรก คุณคิดถูกแล้ว แต่เนื่องจากการค้นพบช่องโหว่นี้ แม้แต่แอปที่กำหนดเป้าหมาย API ระดับ 23 (Marshmallow) ที่ขออนุญาตซ้อนทับนั้นมีความเสี่ยงที่อาจเกิดขึ้น


ช่องว่างในรูปแบบการอนุญาต?

แอพทั่วไปที่ใช้โอเวอร์เลย์ ทาง: ปานกลาง

หากคุณเป็นหนึ่งในหลายล้านคนที่ใช้ Facebook Messenger เพื่อแชทกับเพื่อนของคุณ ถ้าอย่างนั้นคุณก็ได้พบกับหนึ่งในคุณสมบัติที่ดีที่สุดของ Android นั่นก็คือความสามารถของแอพที่จะดึงเอาคุณสมบัติอื่น ๆ มาใช้ หน้าจอ มันเจ๋งแค่ไหนที่คุณสามารถมีฟองสบู่ด้วยการแชทกลุ่ม Facebook ที่คุณชื่นชอบ ติดตามผู้ใช้ ด้านบนของแอปพลิเคชันที่พวกเขาเปิด? แม้ว่า Messenger ของ Facebook จะนำแนวคิด "แอปลอยตัว" มาสู่กระแสหลัก แต่แนวคิดนี้มีอยู่ใน Android มาระยะหนึ่งแล้ว แอปพลิเคชันสามารถสร้างโอเวอร์เลย์บนแอปของคุณได้มาระยะหนึ่งแล้ว เนื่องจากการมีอยู่ของ TYPE_SYSTEM_OVERLAY ใน WindowManager ของ Android

เมนูสิทธิ์ "วาดทับแอปอื่น"

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

อย่างไรก็ตาม SYSTEM_ALERT_WINDOW ไม่เหมือนกับการอนุญาตอื่นๆ นักพัฒนาซอฟต์แวร์ไม่สามารถแสดงกล่องโต้ตอบเพื่อขอสิทธิ์โดยทางโปรแกรมจากผู้ใช้ปลายทางได้ เช่นเดียวกับสิทธิ์อื่นๆ ส่วนใหญ่ในแอปใดๆ ที่กำหนดเป้าหมายไปที่ Marshmallow คุณต้องไปที่หน้าจอการตั้งค่าด้วยตนเองและเปิดใช้งานการอนุญาตด้วยตนเองแทน แน่นอนว่าแอพบางตัวเช่น Facebook Messenger จะช่วยคุณตลอดกระบวนการ

Google ต้องการสิ่งนี้จากนักพัฒนาเพราะพวกเขาถือว่าได้รับอนุญาตเป็น "มีความละเอียดอ่อนเป็นพิเศษ"

สิทธิ์พิเศษ

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

เมื่อพิจารณาจากสิ่งที่เรารู้ข้างต้นเกี่ยวกับ tapjacking นี่ก็สมเหตุสมผลดี แต่นี่คือสิ่งที่ Google ไม่ปฏิบัติตามกฎของตัวเองด้วยซ้ำ ภาพหน้าจอของ Facebook Messenger ที่แนะนำคุณตลอดขั้นตอนการให้สิทธิ์ SYSTEM_ALERT_WINDOW ที่ฉันแสดงให้คุณเห็นข้างต้น สิ่งนี้จะเกิดขึ้นหากคุณติดตั้ง APK จากภายนอก Google Play Store หากคุณติดตั้งแอปพลิเคชันจาก Google Play Store สิทธิ์ SYSTEM_ALERT_WINDOW จะได้รับโดยอัตโนมัติ.

ไฟล์ Manifest ของ Facebook Messenger แอปจะได้รับสิทธิ์การซ้อนทับโดยอัตโนมัติแม้จะกำหนดเป้าหมาย API ระดับ 23 ก็ตาม

Google เสียสละความปลอดภัยเพื่อความสะดวกสบาย

เป็นเวลานานก่อน Android Marshmallow SYSTEM_ALERT_WINDOW ถือเป็น "อันตราย" การอนุญาต. ด้วย Android Marshmallow 6.0 การอนุญาตจะเปลี่ยนเป็น ลายเซ็น | ระบบ | appop ซึ่งเป็นสิ่งที่ในตอนแรกต้องการให้นักพัฒนานำผู้ใช้ไปยังหน้าจอการตั้งค่าเพื่อให้สิทธิ์ แต่ด้วย Android เวอร์ชัน 6.0.1 SYSTEM_ALERT_WINDOW ได้รับการแก้ไขแล้ว เพื่อให้ Google Play Store สามารถให้สิทธิ์โดยอัตโนมัติได้โดยไม่ต้องแจ้งให้ผู้ใช้ทราบ สาเหตุที่ Google ทำการเปลี่ยนแปลงนี้ยังไม่ชัดเจนสำหรับเรา Google เองไม่ได้ออกมาและระบุว่าเหตุใดพวกเขาจึงทำการเปลี่ยนแปลงนี้ ซึ่งแปลกโดยเฉพาะอย่างยิ่งเมื่อพิจารณาภาษาเกี่ยวกับ SYSTEM_ALERT_WINDOW ที่ยังคงมีอยู่บนหน้าเว็บของพวกเขา

เป็นไปได้ว่า นักพัฒนามากพอก็โกรธ โดยการเปลี่ยนแปลงครั้งแรกใน SYSTEM_ALERT_WINDOW ที่กำหนดให้ผู้ใช้ต้องให้สิทธิ์ด้วยตนเองที่ Google เก็บไว้โดยไม่แจ้งให้ทราบ และเพิ่งมอบให้กับแอปพลิเคชันใด ๆ ที่ร้องขอ แต่ในการทำเช่นนั้น Google ก็มี เสียสละความปลอดภัยเพื่อความสะดวก. มีเหตุผลว่าทำไม Google เองก็ถือว่าการอนุญาตนั้นเป็นอันตรายเป็นเวลานานที่สุดเพราะมันเป็นเช่นนั้น และการมีอยู่ของการใช้ประโยชน์จากการแตะแจ็คที่ได้รับอนุญาตของ Marshmallow นั้นเป็นหลักฐานเพียงพอที่แสดงถึงอันตรายโดยธรรมชาติในการให้สิทธิ์นี้แก่แอปใด ๆ โดยอัตโนมัติ

การใช้ประโยชน์จาก tapjacking นี้เพิ่งได้รับความสนใจจากเรา แม้ว่าจะมีมาหลายเดือนแล้วก็ตาม ในการทดสอบอุปกรณ์ภายในของเรากับทีม XDA Portal เราได้รับการยืนยันแล้ว การใช้ประโยชน์นี้ใช้งานได้บนอุปกรณ์สมัยใหม่จำนวนมากที่ใช้ Android Marshmallow. ต่อไปนี้เป็นข้อมูลสรุปสั้นๆ ของอุปกรณ์ที่เราทดสอบกับซอฟต์แวร์เวอร์ชันล่าสุดที่มีอยู่สำหรับอุปกรณ์แต่ละเครื่อง และดูว่าช่องโหว่ของ tapjacking ใช้งานได้หรือไม่ อุปกรณ์ที่ทำเครื่องหมายว่า "มีช่องโหว่" มีความอ่อนไหวต่อการโจมตีแบบ tapjacking ในขณะที่อุปกรณ์ที่ระบุว่า "ไม่ Vulnerable" สามารถตรวจจับแอปที่แสดงโอเวอร์เลย์และขอให้คุณปิดการใช้งานก่อน ดำเนินการต่อ

  • Nextbit Robin - Android 6.0.1 พร้อมแพทช์รักษาความปลอดภัยเดือนมิถุนายน - เปราะบาง
  • Moto X Pure - Android 6.0 พร้อมแพทช์รักษาความปลอดภัยเดือนพฤษภาคม - เปราะบาง
  • Honor 8 - Android 6.0.1 พร้อมแพทช์รักษาความปลอดภัยเดือนกรกฎาคม - เปราะบาง
  • Motorola G4 - Android 6.0.1 พร้อมแพตช์ความปลอดภัยเดือนพฤษภาคม - เปราะบาง
  • OnePlus 2 - Android 6.0.1 พร้อมแพทช์รักษาความปลอดภัยเดือนมิถุนายน - ไม่เปราะบาง
  • Samsung Galaxy Note 7 - Android 6.0.1 พร้อมแพตช์ความปลอดภัยเดือนกรกฎาคม - ไม่เปราะบาง
  • Google Nexus 6 - Android 6.0.1 พร้อมแพทช์รักษาความปลอดภัยเดือนสิงหาคม - ไม่เปราะบาง
  • Google Nexus 6P - Android 7.0 พร้อมแพทช์รักษาความปลอดภัยเดือนสิงหาคม - ไม่เปราะบาง

จนถึงตอนนี้ อุปกรณ์เหล่านั้นคืออุปกรณ์ทั้งหมดที่ฉันสามารถให้ทีมทดสอบได้ ฉันไม่พบความสัมพันธ์ระหว่างเวอร์ชันแพตช์ความปลอดภัยและการใช้ประโยชน์ ดังที่คุณสามารถบอกได้จากเรา การสนทนาล่าสุดเกี่ยวกับการอัปเดตความปลอดภัยของ Androidหลายๆ คนไม่ได้ใช้แพตช์รักษาความปลอดภัยล่าสุดอยู่แล้ว และอาจเสี่ยงต่อการถูกโจมตีนี้และอื่นๆ ที่ระบุไว้ใน กระดานข่าวความปลอดภัยของ Android.


ก้าวไปข้างหน้า

บริการ Tapjacking ได้รับสิทธิ์การซ้อนทับ

เราขอแนะนำให้คุณทดสอบช่องโหว่นี้บนอุปกรณ์ของคุณเพื่อดูว่าคุณมีความเสี่ยงหรือไม่. เราได้รวบรวม APK จาก ซอร์สโค้ดที่ลิงก์ด้านบน (คุณสามารถทำได้ด้วยตัวเองเช่นกัน) และอัปโหลดไปยัง AndroidFileHost เพื่อทดสอบช่องโหว่ คุณต้องติดตั้งทั้งสองอย่าง แอปพลิเคชัน tapjacking หลัก เช่นเดียวกับมัน บริการช่วยเหลือ. จากนั้นเพียงเรียกใช้แอปพลิเคชันหลักแล้วคลิกที่ปุ่ม "ทดสอบ" หากกล่องข้อความลอยอยู่เหนือกล่องโต้ตอบการอนุญาต และเมื่อคุณคลิก "อนุญาต" รายชื่อผู้ติดต่อในอุปกรณ์ของคุณปรากฏขึ้น แสดงว่าอุปกรณ์ของคุณมีความเสี่ยงที่จะถูกแตะ ไม่ต้องกังวลกับกล่องข้อความแบบลอยที่ไม่ครอบคลุมกล่องโต้ตอบการอนุญาตทั้งหมด แอปพิสูจน์แนวคิดนี้ไม่ครอบคลุม ตั้งใจที่จะแสดงให้เห็นอย่างสมบูรณ์ถึงวิธีการแย่งชิงกล่องโต้ตอบการอนุญาตอย่างเรียบร้อย แต่เป็นการพิสูจน์ว่าเป็นเช่นนั้นจริงๆ เป็นไปได้.

เราหวังว่าการแก้ไขดังกล่าวจะถูกนำมาใช้เพื่อแก้ไขช่องโหว่นี้บนอุปกรณ์ Marshmallow ทั้งหมด และ OEM จะอัปเดตอุปกรณ์ทั้งหมดของตนเป็นแพตช์ความปลอดภัยล่าสุด เพราะความจริงก็คืออุปกรณ์ส่วนใหญ่ที่สัญญาไว้จะใช้เวลาหลายเดือนกว่าจะได้ Nougat ดังนั้นวิธีเดียวสำหรับคนส่วนใหญ่ ผู้ใช้เพื่อหลีกเลี่ยงอันตรายคือติดตั้งแพตช์ความปลอดภัยล่าสุดหรือรับสิทธิ์ของแอปตรวจสอบ ตัวพวกเขาเอง. แต่ด้วยการตัดสินใจของ Google ที่จะให้สิทธิ์ SYSTEM_ALERT_WINDOW ที่อาจเป็นอันตรายโดยอัตโนมัติ ผู้ใช้ใช้งานแอปโดยไม่รู้ตัวซึ่งอาจขโมยโทรศัพท์ของตนเพื่อให้เกิดอันตรายมากขึ้นเรื่อยๆ สิทธิ์