Android ignoră atingerea de aprobare a VPN? Verifică mai întâi suprapunerea
Un buton de consimțământ care nu primește atingerea este de obicei o piedică locală pentru atingere, nu o defecțiune a serverului sau a contului. Înlătură suprapunerea și păstrează protecția.
Atingi butonul de aprobare a VPN și dialogul nu reacționează. Concluzia firească este că aplicația VPN sau serverul este stricată, așa că oamenii resetează parole, schimbă DNS sau reinstalează clientul. În cazul obișnuit nimic din toate acestea nu atinge defectul, pentru că Android aruncă atingerile care sosesc printr-o piedică, iar ecranul de aprobare a VPN este exact genul de solicitare sensibilă de consimțământ care primește acea protecție. Atingerea nu ajunge niciodată la buton.
Ce respinge de fapt protecția
Android protejează interacțiunile sensibile împotriva tapjacking, când o altă fereastră stă deasupra unui dialog și fie fură atingerea, fie o face ambiguă. O vizualizare se înscrie cu View.setFilterTouchesWhenObscured, iar evenimentul sosește purtând MotionEvent.FLAG_WINDOW_IS_OBSCURED când o altă fereastră este marcată ca acoperind-o parțial sau complet. Când se întâmplă asta, evenimentul este aruncat în loc să fie livrat în locul greșit. Android 12 (API 31) a extins aceeași protecție cu blocarea atingerilor neîncrezute în suprafețele de consimțământ ale sistemului, motiv pentru care dialogul de aprobare poate refuza o atingere venită dintr-o suprapunere pe care alte aplicații ar accepta-o în continuare.
Trei lucruri produc de obicei o piedică: o aplicație care deține permisiunea de afișare peste alte aplicații, un serviciu de accesibilitate care desenează conținut și un widget plutitor de la un înregistrator de ecran sau un instrument de filtrare. Unele funcții de ecran ale producătorului adaugă și propriul strat, motiv pentru care același dialog se poate comporta diferit pe două telefoane cu aceeași versiune de Android. O fereastră care acoperă parțial setează FLAG_WINDOW_IS_PARTIALLY_OBSCURED, iar atingerea este aruncată înainte ca butonul să o vadă. Aceasta este o proprietate a ecranului, nu a rețelei. Nimic nu a fost trimis către serverul VPN în momentul în care atingerea este aruncată, deci nicio schimbare pe partea de server nu poate influența rezultatul.
Separă o atingere moartă de o conexiune eșuată
Distincția este întregul diagnostic și durează zece secunde. Dacă atingerea este ignorată și dialogul rămâne exact cum era, piedica este locală. Dacă dialogul se închide și apare o eroare după aceea, consimțământul a fost acceptat și ai trecut într-o altă etapă care are nevoie de informațiile de eveniment ale aplicației VPN.
Poți confirma lectura locală verificând dacă aplicația care face cererea a încercat măcar o conexiune. Un client care nu înregistrează niciodată o încercare de handshake în timp ce un dialog de consimțământ este pe ecran nu a ajuns la rețea.
adb shell cmd appops get com.example.vpn SYSTEM_ALERT_WINDOW
adb shell settings get secure enabled_accessibility_servicesListează ce deține permisiunea de suprapunere și ce servicii de accesibilitate sunt activate, apoi compară-le cu ce rulează. Nu dezactiva protecția platformei în sine; ea este cea care împiedică o fereastră ascunsă să răspundă la o solicitare de consimțământ în numele tău.
Înlătură piedica, apoi reia fluxul normal
Identifică mai întâi aplicația care a cerut aprobarea VPN, ca să știi ce consimțământ acorzi. Apoi oprește suprapunerea specifică prin propria ei setare, în loc să revoci o permisiune largă de care ai putea avea nevoie mai târziu. Un filtru de ecran are de obicei un comutator în propria aplicație; un widget plutitor are un control de închidere; un mod de ecran al producătorului are un comutator în setările de afișare.
Revino apoi la aplicația VPN și cere aprobarea din nou, ca dialogul să fie creat de la zero. Dacă atingerea funcționează acum, ajustează comportamentul de compatibilitate al suprapunerii sau lasă-o oprită cât timp te conectezi, și păstrează protecția la atingere activată.
Dacă nu poți spune care fereastră este responsabilă, elimină-le una câte una și reia dialogul de consimțământ după fiecare schimbare. O bară de control a înregistratorului sau o comandă rapidă plutitoare este de obicei vinovatul, iar cea pe care ai eliminat-o imediat înainte să funcționeze este răspunsul.
Restabilește tot ce nu are legătură și ai oprit pe parcurs. Un filtru de ecran sau un mod nocturn nu este dușmanul; fereastra specifică ce se suprapune peste dialog este.
Ce să nu faci ca să treci de dialog
Nu acorda acces de accesibilitate unei aplicații necunoscute ca să poată apăsa butonul și nu instala o aplicație ajutătoare în acest scop. Ele acordă exact capacitatea pe care protecția există ca să o refuze, pe un ecran care autorizează un VPN.
Nu automatiza dialogul nici cu un instrument de introducere. Produce același rezultat ca o suprapunere răuvoitoare și nu te învață nimic despre cauză.
Pe un dispozitiv administrat, o politică ce restricționează schimbările VPN este decizia administratorului. Un experiment cu suprapuneri nu este autorizație de a o ocoli. La fel, un buton de consimțământ care nu răspunde nu este motiv să slăbești verificarea certificatului sau să schimbi datele de autentificare ale contului: niciuna dintre setări nu înlătură o piedică locală pentru atingere.
Dacă tot eșuează, raportează comportamentul exact
Descrie dialogul, nu concluzia: ce aplicație a cerut aprobarea, dacă dialogul a rămas deschis sau s-a închis, dacă alte solicitări sensibile precum avertismentele despre surse necunoscute sau despre accesibilitate ignoră și ele atingerile, modelul dispozitivului și versiunea de Android, plus listele de suprapuneri și de accesibilitate pe care le-ai capturat.
Întreabă responsabilul de suport încă un lucru cât timp ești acolo: dacă politica dispozitivului restricționează cumva schimbările de configurare VPN. Un blocaj administrat arată altfel decât o atingere ignorată, iar să știi pe care dintre ele îl vezi economisește o a doua rundă.
Acest set distinge o problemă de atingere acoperită de un dispozitiv de intrare defect, de un dialog înghețat sau de un blocaj de politică. Îi mai spune și următoarei persoane dacă să se uite la ecran sau la rețea.
Ghidul Android despre tapjacking acoperă condițiile ferestrelor acoperite și API-urile din spatele acestui comportament. Dacă vrei urma dovezilor, caută FLAG_WINDOW_IS_OBSCURED și FLAG_WINDOW_IS_PARTIALLY_OBSCURED pe evenimentul care nu a ajuns niciodată la buton. Dialogul care rămâne deschis este lucrul care trebuie capturat, pentru că arată că atingerea a fost reținută, nu livrată altei ferestre.