หมวดหมู่ 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 ได้อย่างเต็มรูปแบบ
ความเสี่ยง: กิจกรรมแซนด์วิช
หากแอปที่เป็นอันตรายสามารถโน้มน้าวให้ผู้ใช้เปิดแอปได้ แอปก็ยังคงเปิดกิจกรรมจากแอปเหยื่อและซ้อนทับด้วยกิจกรรมของตนเองได้ ซึ่งจะทำให้เกิดแซนด์วิชกิจกรรมและสร้างการโจมตีแบบบดบังบางส่วน
การลดปัญหา
ดูการลดผลกระทบทั่วไปสำหรับการบดบังบางส่วน เพื่อการป้องกันแบบหลายชั้น โปรดตรวจสอบว่าคุณไม่ได้ส่งออกกิจกรรมที่ไม่จำเป็นต้องส่งออกเพื่อป้องกันไม่ให้ผู้โจมตีแทรกกิจกรรมเหล่านั้น
แหล่งข้อมูล
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- android:exported
- # การจัดการคีย์ {:#key-management}
- เรียกใช้โค้ด DEX แบบฝังจาก APK โดยตรง