Măsuri de protecție WhatsApp – hacking

CERT-RO a publicat pe site-ul instituției un articol care din punctul meu de vedere nu trebuia să apară în forma actuală. Este o preluare de fapt a unei știri de la TeliaCERT. E lansată o idee, niște băieți o vor prinde, mare majoritate nu, dar s-a făcut comunicare. Sper că în viitorul DNSC va mai filtra un pic dintre foștii angajați CERT-RO 🙂 ca să nu mai existe derapaje de genul acesta.

Știrea

Abuzarea serviciului de mesagerie vocală pentru a eluda sistemul de autentificare în doi pași

Atacatorul apelează serviciul de mesagerie vocală și se autentifică cu ajutorul unui cod PIN. Modul în care atacatorul reușește să obțină acel PIN este încă neclar, dar se presupune că metoda folosită în acest caz este brute force.

Atacatorul vizează numere de telefon cu un statut special, unele de obicei extrem de ușor de reținut, de ex. Xx000000 sau xx333333

Ce este în neregulă?

Titlul este bombastic, clickbait pentru că nu eludează sistemul de autentificare în doi pași. Chiar în articol se recomandă utilizarea unui sistem de autentificare în doi pași. În rest, presupunerea metodei și motivația este aruncată o idee cu privire la numerele premium, ușor de reținut. Aici se vede diferența dintre cei de la birou care doar presupun și un real life scenario. Făcând o paranteză, iată încă un motiv pentru care îmi plac challenge-urile de tip Capture The Flag la HackTheZone pentru că atunci când gândesc un challenge, mă gândesc cum este el transpus în viața reală, nu pe scaun de gaming într-o sală cu aer condiționat și internet gigabit. Niciodată un atacator nu va merge pe ideea de a accesa contul de WhatsApp a unui număr de telefon doar pentru că este premium. Atacatorul are cu totul alt mindset și psihologia lui este diferită față de cei care vânează numere premium pentru a și le însuși. În cazul de față, atacatorul nu va avea acces la numărul de telefon fizic iar accesul la WhatsApp îl poate avea pentru câteva minute până la maxim câteva ore, deci nu numărul premium este scopul ci contul WhatsApp este ținta.

Dacă vorbim de un kinder la început de drum, probabil va încerca pe numerele de telefon ale câtorva prieteni, apoi niște glume pe Facebook/Discord. Când are ceva experiență deja merge la ținte fixe, fără să conteze ce format are numărul de telefon. Poți merge pe lideri politici, directori de companii, directoarea liceului 🙂 depinzând de motivația din spate, dacă este un scop politic, inter-statal, spionaj industrial etc. Mă gândesc că poate este și asta o strategie de comunicare, să arunci în libertate niște motivații și care prinde ideea, bine. Cine nu, te gândești că nu îi poți salva pe toți.

Care e faza cu PIN-ul de la WhatsApp?

Atunci când schimbi telefonul mobil, WhatsApp îți transmite un mesaj cu un cod format din 6 cifre pe numărul de telefon cu care ai creat contul. În cazul în care nu primești SMS-ul (există aici numeroase motive dar este discuție pentru un alt articol) sau cel puțin spui că nu l-ai fi primit, majoritatea sistemelor de verificare ale identității prin SMS oferă și o metodă de backup prin apel telefonic. Adică după un timp, în cazul WhatsApp e un minut, un roboțel te apelează și îți dictează în limba engleză codul transmis prin SMS.

Dacă ținta are telefonul închis sau nu răspunde și are mesageria vocală activată, atunci protocoalele GSM nu știu să transmită mai departe informația cu privire la tipul de redirecționare efectuat și lasă apelul din partea Whatsapp să plece mai departe către mesageria vocală. Pentru că la bază, mesageria vocală este o simplă redirecționare de apel în câteva cazuri (telefon închis, ocupat, nerăspuns sau necondiționat).

Pe acest flux se bazează și atacatorul, care va trebui să intre în posesia codului din 6 cifre și am să detaliez mai jos potențiale scenarii și metode.

Notă: facem un exercițiu de imaginație mai jos, ceva rapid, freestyle, ce încropesc în 5 minute. Desigur, fiecare potențial atacator are metodele lui, imaginația și resursele lui, diferite față de ale celorlalți. Ideea din spatele poveștii este de a conștientiza potențialul pericol și îndoielile celor care cred că lumea este roz și umblă seara unicorni prin parc.

Dacă cybercrime-ul ar fi o țară, țara aceasta ar fi pe locul 3 în lume, după SUA și China, cu 6 triliarde de dolari în 2021, ce a depășit valoarea pieței globală de droguri și cu o creștere până la 10.5 triliarde de dolari în 2025.

Recon (reconnaissance – recunoaștere). Recunoașterea este cel mai important pas al procesului și poate fi împărțită în două subfaze, activă și pasivă. În această fază, obiectivul principal al atacatorului este să obțină cât mai multe informații despre victima sa. Caută vulnerabilități sau puncte slabe pe care le poate folosi în pașii ulteriori pentru a avea acces la contul de WhatsApp.

Recunoașterea pasivă este ceea ce apare atunci când nu interacționezi cu ținta. Acest lucru se realizează căutând informații pe site-ul victimei, căutând pe Google, căutând pe rețelele sociale, folosind tool-uri gen Maltego etc. Pe scurt, atacatorul caută orice informație care poate fi utilizată pentru a afla numărul de telefon cu care este creat contul de WhatsApp. Acesta este singurul pas care nu este ilegal. Orice a trecut acest pas poate fi considerat ca fiind infracțiune. Scopul articolului este în sfera educațională și sub nicio formă nu recomand utilizarea informațiilor de pe acest blog în activități ilegale.

Recunoașterea activă este pasul pe care îl folosește un atactator atunci când testează în mod activ ținta. În cazul de față, un exemplu poate fi adăugarea în agendă a numărului de telefon al țintei și deschiderea unei conversații prin WhatsApp pentru a începe să învețe pattern-uri comportamentale ale țintei. Cât timp este activă pe WhatsApp pe zi, la ce oră cel mai târziu a fost activă într-o zi, cât doarme noaptea în cursul săptămânii, în weekend, care este intervalul orar maxim pe care l-ar avea la dispoziție pentru a ataca și exploata o vulnerabilitate.

Să spunem că strict pentru scenariile din acest articol recunoașterea pasivă nu este ilegală pentru că oricât de ciudat ar suna, faptul că urmărești de la distanță o persoană nu este ilegal. Însă, de exemplu dacă am fi vorbit de o aplicație web, în acest pas ar fi fost clasicele scanări de date, porturi, servere, activități care intră în mod direct ca activități ilegale.

Exploatarea este definită ca folosirea unei vulnerabilități identificate în timpul fazei de recunoaștere și folosind-o pentru a avea acces la contul de WhatsApp al țintei. Voi folosi o poveste pentru a detalia tehnicile de exploatare a vulnerabilității, iar eu sunt atacatorul. De multe ori oamenii aud termenul de vulnerabilitate și cumva bat în retragere spunând că aplicația folosită este sigură și nu există vulnerabilități cunoscute. Problema este că una din cele mai puternice ramuri ale securității cibernetice este social engineering-ul (ingineria socială) pentru că acolo nu depinzi de sisteme de protecție clare, nu depinzi de un software anume ci doar de capacitatea creierului uman de a interpreta niște informații, de a ști cum să răspundă și ce căi de ocolire a regulilor și procedurilor există. WhatsApp nu are o vulnerabilitate la nivel de software cunoscută în prezent, ci vulnerabilitatea este dată de lipsa de igienă în securitatea cibernetică din partea victimelor.

Scenariu. Radu este un băiat cu inteligență medie. Are facultate, master, lucrează de acasă în perioada aceasta pentru că în Pipera sunt închise majoritatea clădirilor de birouri și firma la care lucrează îi permite să lucreze remote. El este manager în cadrul unei companii ce are câteva data centere și oferă servicii de găzduire web, închiriază VPS-uri, servere dedicate etc. Radu avea de vânzare pe olx o bicicletă așa că l-am abordat pe WhatsApp întrebându-l dacă o mai poate ține câteva zile până când iau salariul și să îmi salveze numărul ca să putem comunica rapid. Mă încurcă un pic pentru că în WhatsApp – Privacy – Last seen este setat să fie văzut când a fost ultima oară online numai de către contactele sale.

Radu se trezește dimineața în jur de 7:00 – 07:15 și își verifică emailul (știu pentru că i-am trimis câteva newslettere cu tips & tricks pentru noul Samsung Galaxy S21 și văd la ce oră a verificat și deschis emailul). După vreo 10 minute deschide pe rând WhatsApp, apoi LinkedIn, Facebook, Telegram, Discord și site-uri de știri. L-am văzut că mai dă share dimineața la ce articole i s-au părut interesante sau intră în dezbatere pe Facebook cu privire la știrea zilei. În timpul zilei verifică destul de des WhatsApp și este posibil chiar să aibă aplicația instalată pe calculator și mai vorbește cu colegii săi. Seara se culcă undeva în jur de 23:30 – 00:00 și ultimele două aplicații verificate înainte de culcare sunt Telegram și WhatsApp. În weekend stă foarte puțin pe telefonul mobil.

Sâmbătă de regulă se trezește abia pe la 10:00 deși se culcă tot la 23:30. Deci vineri noapte este momentul în care magia va trebui să se întample. Și fac un scurt inventar: telefon secundar am, cartelă SIM cu internet, aplicație de spoof call, un pachet de țigări, o cafea mare și am dormit după-amiază așa că vineri noapte adrenalina mă va ține în priză. Acum, ca spirit de glumă, există mari șanse să nu am cafea câteva zile mai târziu pe cameră la Rahova dar de dragul articolului și conștientizării pericolelor, continui povestea.

Este vineri, ora 23:38 și Radu a fost conectat ultima oară acum 5 minute pe WhatsApp. Îl mai las puțin, mă duc să pregătesc calculatorul, să dau drumul la niște muzică. Ora 00:02 și Radu nu a mai deschis aplicația. Este timpul să acționez pentru că noaptea este scurtă și avem foarte multă treabă. Dar trebuie să mă asigur că doarme și are telefonul pe DND, mute something așa că îi trimit un SMS de pe un site unde am câteva SMS internaționale gratis și simulez generarea unui cod WhatsApp. Daca în 2 minute apare online pe WhatsApp, înseamnă că într-adevăr nu va vedea telefonul în seara aceasta.

Deschid burner phone-ul, am WhatsApp deja instalat și în wizzard-ul de configurare al contului scriu numărul de telefon al lui Radu. Radu a primit un SMS cu un cod format din 6 cifre pe care eu trebuie să îl scriu pe telefonul meu pentru a confirma că eu sunt Radu și în felul acesta aș căpăta acces la contul său. După un minut se poate solicita retrimiterea codului prin apel vocal așa că îl solicit. O să ziceți…bine Cristi dar WhatsApp îl va apela pe Radu și numai Radu poate apăsa pe butonul de răspuns. True that, dar Radu doarme așa că nu va răspunde apelului și apelul va fi redirecționat către mesageria vocală (VMS) iar WhatsApp va rosti codul format din 6 cifre ca mesaj vocal 😉

Scenariul se împarte în două situații:

  1. Dacă are PIN definit la VMS. Fiecare operator de telefonie mobilă pune la dispoziția clienților un număr de telefon format din 3-4 cifre către care se poate apela și asculta mesajul vocal. Dar dacă nu suni de pe numărul de telefon al victimei, atunci poți apela la un al doilea număr de telefon care are un format asemănător unui număr de telefon, un MSISDN clasic. La apelarea acelui număr, va trebui să tastez numărul de telefon al lui Radu, apoi codul lui PIN. Atenție, nu PIN-ul cartelei SIM ci PIN-ul setat pentru ascultarea mesajelor vocale. Este format din 4 cifre și din testele efectuate pe doi operatori, fiecare încercare de introducere a codului PIN durează în medie 25 de secunde. Digi e pe buget de austeritate si nu mai oferă de prin 2018 serviciu de mesagerie vocală clienților săi. După 3 încercări de introducere a codului PIN eronat este închis apelul și va trebui să reapelez. Problema este că aș avea 9999 de încercări deci brute force-ul este un consumator imens de timp și ideal ar fi să încercăm cel puțin 10-20 oameni câteva seri la rând. Probabil la un nivel mai mare s-ar merita o astfel de investiție dar mă văd nevoit să anulez operațiunea folosind metoda aceasta pentru că Radu nu reprezintă o țintă atât de importantă. De fapt, metoda s-a anulat încă din pasul de recunoaștere activă.
  2. Dacă nu are PIN definit la VMS atunci dai ca surdu în clopote. Este cazul ideal și cumva problema este că majoritatea utilizatorilor nici nu știu că au VMS sau cum îl dezactivează. Tricky mai este că la unele schimbări în provizionarea serviciilor, se resetează și VMS (ex la portare, migrare pre 2 postpaid, migrare post 2 prepaid etc) și uiți de el. Ca să mergem pe firul narativ, Radu nu are un PIN setat. Astfel, cu ajutorul unei aplicații de spoof calling, apelez la numărul de telefon al VMS, operatorul de telefonie crede că apelez de pe numărul de telefon al lui Radu și mă lasă să definesc un cod PIN (!). Apoi, îmi spune câte mesaje vocale am primite și le pot reda. Este ceea ce numim escalarea privilegiilor.

În acest pas, folosind codul ascultat în VMS confirm identitatea pe telefonul meu. Voi avea timp până dimineață în jurul orei 10:00 să lucrez. Nu putem vorbi pe persistență pentru că dimineață Radu o să vadă că WhatsApp îi resolicită adăugarea unui număr de telefon și îmi va lua la rândul lui obiectul muncii.

Acum, că am acces la contul lui de WhatsApp, nu văd conversațiile pe care le-a avut în trecut ci văd doar grupurile din care face parte. Dar am acces la ceva mult mai important și anume agenda telefonică. În pasul de recunoaștere pasivă am învățat că este un anume Sergiu care lucrează noaptea și este L3 suport în cadrul companiei. Sergiu este subordonat lui Radu și e un pic naiv. În pasul de recunoaștere pasivă l-am sunat pe Sergiu și i-am spus că lucrez la Dell și o să avem o lucrare vineri noapte, urmând să ținem legătura prin managerul lui direct, deci un posibil contact din partea lui Radu și cerințe specifice nu ar pune prea multe întrebări.

Printre clienții companiei este și un client care are un server dedicat. Un client destul de mare care reprezintă de fapt ținta mea finală. Filmul merge și îl contactez pe Sergiu prin WhatsApp spunându-i că am vorbit cu colegii de la Dell, am terminat lucrarea dar sunt câteva anomalii pe care aș vrea să le verific așa că îi trimit o cheie publică și îi cer să îmi creeze rapid un user acces de sudo pe vreo 10 mașini. Prima mașină este chiar ținta mea, astfel că restul sunt fie pagube colaterale, fie o diversiune. Altă mașină este cea de backup pe care am aflat-o în pasul de recunoaștere activă. Nu vreau să mi se dea acces în vreun panou de management clienți pentru că ar fi mult prea suspect. Mă chinui un pic, dar merită. Rând pe rând voi accesa fiecare mașină și voi reinstala sistemul de operare via SSH. De mai multe ori chiar și voi încerca să umplu discul cu fișiere ca să fie dificilă sau imposibilă recuperarea datelor. Apoi pe una dintre masini voi lăsa un index ce să ducă cu gândul la un defacement al unei grupări inexistente și voi trimite către mai multe publicații din presa centrală capturi de ecran și link către pagina de defacement.

Scopul final este multiplu. Pe deoparte mă asigur că din partea companiei de hosting datele sunt compromise și poate irecuperabile. Sau cel puțin nu date recente, că mai sunt companii de hosting care fac imagini o dată pe lună și apoi și serverul deconectat. Pe de altă parte alterez credibilitatea companiei întorcând atenția publicului spre vinovăția companiei de hosting și presiune din partea presei, iar clienții care nu știau că le-au fost compromise mașinile, ar afla pe această cale iar majoritatea vor părăsi barca ducându-se la un alt provider.

Din filmul ăsta sunt nșpe metode pentru care ar putea să nu funcționeze scenariul și cel mai evident este faptul că este posibil ca clienții să aibă propriile backup-uri off-site și atunci am muncit degeaba. Ideea este însă cu totul alta și anume că pare a fi un film, dar nu este. Este real life scenario, s-a mai întâmplat și se va mai întâmpla. Radu și Sergiu sunt simpli actori, dar în locul lor poate fi un CEO, poate fi un membru important al unui partid politic, poate fi directorul unei instituții guvernamentale, poate fi oricine, depinzând de cât de tare vrei să te duci la pușcărie.

În funcție de gravitate și de victimă unele lucruri se pot mișca mai încet sau incredibil de repede. Pentru contul de WhatsApp al lui tanti Maria care este învățătoare la o școală într-o comună fără curent electric, posibil să dureze câțiva ani investigațiile. Dar pentru contul de WhatsApp al lui Putin, este posibil să mă calce o mașină neagră înainte să termine organele abilitate investigația.

Care este morala?

Viața bate filmul. Sunt situații, sunt scenarii în viața reală unde prima oară ridici o sprânceană și crezi că este doar un alt film prost cu Kevin Mitnick. Până când vezi că în realitate lucrurile sunt mult mai violente (ca metodologie). Personal, consider că un atac violent și o alterare a datelor vizibilă pot fi justificate numai de către un impuls de moment sau o răzbunare ce trebuie semnată. Altfel, atacatorii de regulă sunt persoane cu extrem de multă răbdare. Extrem de multă și de regulă își asigură acces continuu pe echipamentul / contul victimei astfel încât să poată colecta date pe termen îndelungat și să poată reveni ușor. Cunosc un tip, nu foarte tehnic dar cu multă răbdare, un nivel de inteligență peste medie și care atunci când se uită la un obiect / aplicație software, principala curiozitate este cum poate fi desfăcut și ce va găsi înauntru. Lumea dincolo de tastatură și aceste rânduri este mare, diversă și nu întotdeauna binevoitoare.

Ce pot face?

În cazul specific al WhatsApp-ului, în Settings – Account – Two step verification există un layer suplimentar de securitate exact pentru a preveni filmul pe care l-ai citit în articolul acesta. Adaugi un cod PIN format din 6 cifre (a nu se confunda cu 2FA prin aplicații precum Google/Microsoft Authenticator) și o adresă email pe care poate fi resetat acest PIN. Periodic, WhatsApp va mai cere acest PIN chiar si pentru simpla vizualizare a mesajelor în ideea că cerându-l periodic nu îl vei uita exact atunci când ai nevoie cel mai mult de el (nu știu ce înseamnă acest periodic, dacă o dată pe săptămână, pe an etc). Nu-i așa că nu ai activat Two step verification pe WhatsApp?

Separat de cazul WhatsApp, recomand cu tărie orice metodă de tip two factor authentication pentru orice fel de cont: cloudflare, cpanel (puțini folosesc opțiunea aceasta), platforme de email marketing, conturi de email, steam, accesul în panourile de administrare (inclusiv de la bloguri), github, envato, orice, oriunde! Să nu uităm și de chei SSH parolate.

Impersonalizarea și furtul de identitate sunt în zilele noastre extrem de ușor de realizat și cel mai nasol este că nu necesită un nivel de inteligență superior sau cunoștințe tehnice solide.

#StaySafe și activați two factor authentication fie că este prin SMS, aplicații sau chei USB fizice!

  1. Foarte bun articolul si explicat ca pentru doamna Maria :]]
    Am si eu un amic caruia i s-a luat contul de Whatsapp si tot la fel primise sms dar nu il daduse nimanui. Acum macar exista o explicatie

  2. Nu aveam activat 2FA dar acum am si o sa iau la rand conturile ca am un pic de panica la gmail…

  3. am activat acum thanks

    Cristian Iosub