แจ็กเก็ตแท็ป

หมวดหมู่ OWASP: MASVS-PLATFORM: การโต้ตอบกับแพลตฟอร์ม

ภาพรวม

Tapjacking คือสิ่งที่เทียบเท่ากับช่องโหว่ของเว็บที่เรียกว่า Clickjacking ในแอป Android โดยแอปที่เป็นอันตรายจะหลอกให้ผู้ใช้คลิกการควบคุมที่เกี่ยวข้องกับความปลอดภัย (ปุ่มยืนยัน ฯลฯ) โดยการซ่อน UI ด้วยการซ้อนทับหรือด้วยวิธีอื่นๆ ในหน้านี้ เราจะแยกความแตกต่างของการโจมตี 2 รูปแบบ ได้แก่ การบดบังทั้งหมดและการบดบังบางส่วน ในการบดบังทั้งหมด ผู้โจมตีจะซ้อนทับพื้นที่สัมผัส ส่วนในการบดบังบางส่วน พื้นที่สัมผัสจะยังคงไม่ถูกบดบัง

ผลกระทบ

การโจมตีแบบ Tapjacking ใช้เพื่อหลอกให้ผู้ใช้ดำเนินการบางอย่าง ผลกระทบจะขึ้นอยู่กับการดำเนินการที่ผู้โจมตีมุ่งเป้า

ความเสี่ยง: บดบังทั้งหมด

ในการบดบังทั้งหมด ผู้โจมตีจะวางซ้อนพื้นที่สัมผัสเพื่อลักลอบใช้เหตุการณ์การสัมผัส

รูปภาพที่มีการบดบังทั้งหมด

การลดปัญหา

การบดบังทั้งหมดจะป้องกันได้โดยการตั้งค่า View.setFilterTouchesWhenObscured(true) ในโค้ด ซึ่งจะบล็อกการแตะที่ส่งผ่านโดยการซ้อนทับ หากต้องการใช้แนวทางแบบประกาศ คุณก็เพิ่ม android:filterTouchesWhenObscured="true" ในไฟล์เลย์เอาต์สำหรับออบเจ็กต์ View ที่ต้องการปกป้องได้เช่นกัน


ความเสี่ยง: วัตถุบดบังบางส่วน

ในการโจมตีแบบบดบังบางส่วน พื้นที่สัมผัสจะยังคงมองเห็นได้

รูปภาพที่มีการบดบังบางส่วน

การลดปัญหา

คุณสามารถลดการบดบังบางส่วนได้โดยการละเว้นเหตุการณ์การแตะที่มี แฟล็ก FLAG_WINDOW_IS_PARTIALLY_OBSCURED ด้วยตนเอง ไม่มีการป้องกันเริ่มต้น สำหรับสถานการณ์นี้

Android 16 และ accessibilityDataSensitive: ตั้งแต่ Android 16 (API ระดับ 16) ขึ้นไป นักพัฒนาแอปสามารถใช้แฟล็ก accessibilityDataSensitive เพื่อปกป้องข้อมูลที่ละเอียดอ่อนเพิ่มเติมจากบริการการช่วยเหลือพิเศษที่เป็นอันตราย ซึ่งไม่ใช่เครื่องมือการช่วยเหลือพิเศษที่ถูกต้องตามกฎหมาย เมื่อตั้งค่าแฟล็กนี้ในมุมมองที่ละเอียดอ่อน (เช่น หน้าจอเข้าสู่ระบบ หน้าจอยืนยันธุรกรรม) แฟล็กจะจำกัดแอปที่มี สิทธิ์การช่วยเหลือพิเศษไม่ให้อ่านหรือโต้ตอบกับข้อมูลที่ละเอียดอ่อน เว้นแต่จะมีการประกาศเป็น isA11yTool=true ในไฟล์ Manifest ซึ่งจะช่วยให้การป้องกันระดับระบบมีความแข็งแกร่งมากขึ้นจากการดักฟังและการโจมตีแบบคลิก อินเจ็กชัน ซึ่งเป็นลักษณะเฉพาะของสถานการณ์การบดบังบางส่วน นักพัฒนาแอปมักจะเปิดใช้ accessibilityDataSensitive โดยนัยได้โดย การระบุ android:filterTouchesWhenObscured="true" ในไฟล์เลย์เอาต์


ความเสี่ยงที่เฉพาะเจาะจง

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

ความเสี่ยง: android.Manifest.permission.SYSTEM_ALERT_WINDOW

สิทธิ์ SYSTEM_ALERT_WINDOW อนุญาตให้แอปสร้างหน้าต่างที่แสดงทับแอปทั้งหมด

การลดปัญหา

Android เวอร์ชันใหม่ๆ ได้เปิดตัวการลดความเสี่ยงหลายอย่าง ซึ่งรวมถึงสิ่งต่อไปนี้

  • ใน Android 6 (API ระดับ 23) ขึ้นไป ผู้ใช้ต้องให้สิทธิ์อย่างชัดแจ้งเพื่อให้แอปสร้างหน้าต่างซ้อนทับได้
  • ใน Android 12 (API ระดับ 31) ขึ้นไป แอปจะส่ง true ไปยัง Window.setHideOverlayWindows() ได้

ความเสี่ยง: ข้อความโทสต์ที่กำหนดเอง

ผู้โจมตีสามารถใช้ Toast.setView() เพื่อปรับแต่งลักษณะที่ปรากฏของข้อความ Toast ใน Android 10 (API ระดับ 29) และต่ำกว่า แอปที่เป็นอันตรายอาจเปิดใช้ข้อความแจ้งดังกล่าวจากเบื้องหลังได้

การลดปัญหา

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

ตั้งแต่ Android 12 (API ระดับ 31) เป็นต้นไป ระบบจะลดการโจมตีแบบ Toast ในเบื้องหลังและการโจมตีแบบ Toast Burst ได้อย่างเต็มรูปแบบ


ความเสี่ยง: แซนด์วิชกิจกรรม

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

การลดปัญหา

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


แหล่งข้อมูล