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

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

ภาพรวม

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

ผลกระทบ

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

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

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

รูปภาพที่มีการบดบังเต็มรูปแบบ

การผ่อนปรนชั่วคราว

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


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

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

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

การผ่อนปรนชั่วคราว

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

Android 14 และ accessibilityDataSensitive: ใน Android 14 (ระดับ API 34) ขึ้นไป คุณสามารถใช้แฟล็ก accessibilityDataSensitive เพื่อปกป้องข้อมูลที่ละเอียดอ่อนจากบริการการช่วยเหลือพิเศษที่เป็นอันตรายได้ เมื่อคุณตั้งค่าแฟล็กนี้ในมุมมองที่มีความละเอียดอ่อน เช่น หน้าจอเข้าสู่ระบบหรือหน้าจอยืนยันธุรกรรม จะมีเฉพาะบริการที่ประกาศ android:isAccessibilityTool="true" เท่านั้นที่สามารถอ่านข้อมูลของมุมมองหรือดำเนินการด้านการช่วยเหลือพิเศษในมุมมองนั้นได้ ใน Android 16 (ระดับ API 36) ขึ้นไป accessibilityDataSensitive จะบล็อกท่าทางสัมผัสที่จำลองขึ้นซึ่งแทรกด้วย AccessibilityService.dispatchGesture โดยบริการที่ไม่ได้ประกาศ android:isAccessibilityTool="true" ด้วย ซึ่งจะช่วยป้องกันการดักฟังและการโจมตีแบบแทรกโค้ดในระดับระบบ ซึ่งเป็นลักษณะเฉพาะของสถานการณ์การบดบังบางส่วน คุณสามารถเปิดใช้ 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 ที่กำหนดเอง

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

การผ่อนปรนชั่วคราว

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

การโจมตีด้วยข้อความโทสต์ในเบื้องหลังและการโจมตีด้วยข้อความโทสต์จำนวนมากได้รับการบรรเทาอย่างเต็มรูปแบบตั้งแต่ Android 12 (ระดับ API 31) เป็นต้นไป


ความเสี่ยง: กิจกรรมที่น่าสงสัย

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

การผ่อนปรนชั่วคราว

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


แหล่งข้อมูล