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

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

ภาพรวม

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

ผลกระทบ

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

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

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

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

การลดปัญหา

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


ความเสี่ยง: การบดบังบางส่วน

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

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

การลดปัญหา

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

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


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

ส่วนนี้รวบรวมความเสี่ยงที่ต้องใช้กลยุทธ์การลดความเสี่ยงที่ไม่เป็นไปตามมาตรฐานหรือ ได้รับการลดความเสี่ยงในระดับ 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 ได้อย่างเต็มรูปแบบ


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

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

การลดปัญหา

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


แหล่งข้อมูล