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

การป้องกันปฏิเสธอะไรกันแน่

Android ปกป้องการโต้ตอบที่อ่อนไหวจาก tapjacking ซึ่งหน้าต่างอื่นวางทับกล่องโต้ตอบและอาจขโมยการแตะหรือทำให้คลุมเครือ มุมมองจะเข้าร่วมด้วย View.setFilterTouchesWhenObscured และเหตุการณ์จะมาพร้อม MotionEvent.FLAG_WINDOW_IS_OBSCURED เมื่อหน้าต่างอื่นถูกทำเครื่องหมายว่าปิดทับบางส่วนหรือทั้งหมด เมื่อเกิดขึ้น เหตุการณ์จะถูกทิ้งแทนที่จะส่งไปยังที่ผิด Android 12 (API 31) ขยายการป้องกันเดียวกันด้วยการบล็อกการสัมผัสที่ไม่น่าเชื่อถือในพื้นผิวความยินยอมของระบบ ซึ่งเป็นเหตุผลที่กล่องโต้ตอบอนุมัติสามารถปฏิเสธการแตะจากเลเยอร์ซ้อนที่แอปอื่นยังคงยอมรับ

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

แยกการแตะที่ตายจากการเชื่อมต่อที่ล้มเหลว

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

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

adb shell cmd appops get com.example.vpn SYSTEM_ALERT_WINDOW
adb shell settings get secure enabled_accessibility_services

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

ลบอุปสรรค แล้วลองเส้นทางปกติอีกครั้ง

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

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

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

คืนค่าสิ่งที่ไม่เกี่ยวข้องที่คุณปิดไประหว่างทาง ตัวกรองหน้าจอหรือโหมดกลางคืนไม่ใช่ศัตรู หน้าต่างที่เฉพาะเจาะจงซึ่งทับกับกล่องโต้ตอบต่างหากคือศัตรู

สิ่งที่ไม่ควรทำเพื่อผ่านกล่องโต้ตอบ

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

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

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

ถ้ายังล้มเหลว ให้รายงานพฤติกรรมที่แน่ชัด

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

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

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

คำแนะนำ tapjacking ของ Android ครอบคลุมเงื่อนไขของหน้าต่างที่ถูกปิดทับและ API ที่อยู่เบื้องหลังพฤติกรรมนี้ หากต้องการร่องรอยหลักฐาน ให้มองหา FLAG_WINDOW_IS_OBSCURED และ FLAG_WINDOW_IS_PARTIALLY_OBSCURED ในเหตุการณ์ที่ไม่เคยไปถึงปุ่ม กล่องโต้ตอบที่ค้างเปิดอยู่คือสิ่งที่ควรบันทึกไว้ เพราะมันแสดงว่าการแตะถูกยับยั้งไว้แทนที่จะส่งไปยังหน้าต่างอื่น

บทความที่เกี่ยวข้อง