Kaip galėčiau pavogti pinigus iš „Instagram“, „Google“ ir „Microsoft“ – Arne Swinnen saugumo tinklaraštis

TL; DR: „Instagram“ (2000 USD), „Google“ (0 USD) ir „Microsoft“ (500 USD) buvo pažeidžiami tiesioginių pinigų vagystės naudojant aukščiausios kokybės telefono numerius. Visi jie siūlo paslaugas, kad vartotojams teiktų žetoną per kompiuterio skambutį, tačiau nepaisė tinkamai patikrinti, ar pateikti telefono numeriai buvo teisėti, ne aukščiausios kokybės numeriai. Tai galėjo leisti paskirtam užpuolikui pavogti tūkstančius EUR / USD / GBP /…. „Microsoft“ buvo išskirtinai pažeidžiama masinio išnaudojimo, palaikydama praktiškai neribotus tuo pačiu metu atliekamus skambučius į vieną aukščiausios klasės numerį. Pažeidimai buvo pateikti atitinkamoms „Bug Bounty“ programoms ir tinkamai pašalinti.

„Instagram“ palaiko mobiliojo telefono numerio susiejimą su paskyra, o tai leidžia kitiems vartotojams jų ieškoti „Instagram“ pasaulinėje adresų knygoje. Įvedęs mobiliojo telefono numerį, „Instagram“ atsiunčia tekstą su 6 skaitmenų žetonu:

1 2

Tačiau jei kitame ekrane neįvedėte kodo per tris minutes, „Instagram“ tai padarys skambutis iš Kalifornijos:

3 5


Šis skambutis truks apie 17 sekundžių. Pagrindinė užklausa, kuri tai sukelia, yra tokia, kuri aprašyta toliau burp kartotuve:

4

Prašymą į https://i.instagram.com/api/v1/accounts/robocall_user/ buvo galima pakartoti tik kartą per 30 sekundžių dėl riboto tarifo. Tačiau taip pat buvo pastebėta, kad „Instagram“ mielai paskambins į bet kurį jiems pateiktą numerį, pvz., 0,06 GBP / min. Aukščiausios kokybės numerį JK, įregistruotą per eurocall24.com:

6 7

Kaip „PoC“, „Burp Intruder“ buvo automatiškai atlikta 60 papildomų skambučių, kiekvienam iš jų 30 sekundžių akceleratoriaus intervalas. Tai užbaigė vieno simbolinio svaro vagystę per 17 minučių:

8

Taigi vienas užpuolikas galėjo pavogti 1 GBP per 30 minučių arba 48 GBP / dieną, 1.440 GBP / mėn. Arba 17.280 / metus su vienu. [instagram account, premium number] pora. Tačiau atsidavęs užpuolikas galėjo lengvai sukonfigūruoti ir valdyti 100 šių porų, padidindamas šiuos skaičius 100 kartų: 4.800 GBP / diena, 144.000 GBP / mėn. Arba 1.728.000 GBP / metus.

Be to, paaiškėjo, kad užpuolikui reikės tik vieno aukščiausios kokybės numerio ir 100 „Instagram“ paskyrų. 1 užklausos / 30 sekundžių normos ribinė riba taikoma tik sąskaitoms. Aukščiausio lygio numerį būtų galima naudoti norint susieti skirtingas „Instagram“ paskyras vienu metu.

„Facebook“ ištaisymas

Pirmasis „Facebook“ atsakymas į pateiktą informaciją:

Tai yra sąmoningas elgesys mūsų gaminyje. Mes nemanome, kad tai yra saugumo spraga, tačiau turime kontrolės priemones, skirtas stebėti ir sušvelninti piktnaudžiavimą.

Ar jie iš tikrųjų man davė nemokamą leidimą tiesiogiai vogti pinigus iš „Instagram“ čia?

21. kačiukas

Po tam tikrų diskusijų ir ekstrapoliavęs skaičiavimus nuo 1 iki 100 paskyrų, „Facebook“ išplėtojo:

Dėkojame už tolesnius veiksmus – kadangi šios užklausos perduodamos per tam skirtą tarnybą, skirtą piktnaudžiavimams stebėti ir blokuoti, „tyčinis elgesys“ šiuo atveju laikomas „priimtina rizika“. Apskritai, atakos, kurios priklauso nuo kelių užpuolikų kontroliuojamų paskyrų, patenka į „whitehat“ programos netinkamų ataskaitų kategoriją „šlamštas ar socialinės inžinerijos metodai“.

Ir galiausiai, po šiek tiek išsamesnės mano pusės („100 paskyrų galima lengvai sukurti rankiniu būdu“):

Labas dar kartą! Reaguodami į šį pranešimą pateiksime šiek tiek koreguodami tarifų ribas ir dirbdami su paslaugomis, naudojamomis siunčiamiems skambučiams, todėl šiam klausimui bus tinkama „whitehat“ premija. Kai atliksite pakeitimus, vėl galite tikėtis mūsų atnaujinimo. Dėkoju!
(…)
Mes išnagrinėjome šią problemą ir manome, kad pažeidžiamumas buvo užtaisytas (tarifų ribos pakoreguotos ir įdiegta papildoma stebėsena).

Laiko juosta

  • 2015 m. Rugsėjo 5 d .: pradinis pranešimas apie klaidą išsiųstas „Facebook“
  • 2015 m. Lapkričio 13 d .: pradinis „Facebook“ nuosmukis (žr. Aukščiau), o po to – mano pusė
  • 2015 m. Gruodžio 21 d.: Antrasis „Facebook“ nuosmukis (žr. Aukščiau), po kurio sekė mano pusė
  • 2015 m. Gruodžio 22 d .: pranešimo apie klaidą priėmimas
  • 2016 m. Sausio 6 d. Pataisytas pažeidžiamumas
  • 2016 m. Sausio 9 d .: paskirta 2000 USD už klaidą.
  • 2016 m. Sausio 11 d.: Patvirtinimas, kad pinigai padauginami iš dviejų faktorių (4000 USD) paaukoti ne pelno organizacijai, pakeiskime Etiopiją, kuri remia gatvės vaikus Etiopijoje.

Turėjau pasilikti įsigytą 1 GBP.

„Google“ atvejis buvo šiek tiek sudėtingesnis. „Google“ neskambina per mobiliojo telefono susiejimo procesą, tačiau jie turi galimybę paskambinti, kad perduotų 6 skaitmenų 2FA prieigos raktą:

1

Čia įvedus aukščiausios kokybės numerį, bus paskambinta iš „Google“, tačiau numeris nebus užblokuotas po kelių bandymų, kai nebus įvestas galiojantis prieigos raktas. Tačiau, laimei, eurocall24.com palaikė skambučio peradresavimą į SIP serverį („Callcentre“) ir suvartojimą su SIP klientu (šiuo atveju „Blink“), kad iš tikrųjų galėčiau garsiai išgirsti pranešimą:

2

Susieję aukščiausios kokybės numerį su šiuo skambučių centru ir įvedę jį kaip 2FA mobiliojo telefono numerį, mes gautume skambutį savo kliente ir galėtume išgirsti ir įvesti teisingą 6 skaitmenų žetoną, kad jį patvirtintume:

3
5

6

Praėjus registracijai nustatyta, kad „Google“ bandydama prisijungti leido 10 kartų per valandą skambinti į mobiliojo telefono numerį. Nesvarbu, ar skambutis iš tikrųjų gautas, ar prisijungimas buvo sėkmingas, ar ne, nesvarbu, kas mane šiek tiek nustebino. Aš jau mintyse ruošiausi kažkokiam SIP serveriui -> balso atpažinimui -> „Selenium“ scenarijų grandinėms, tačiau tai pasirodė nereikalinga.

Pirma, aukščiausio lygio telefono skambučio paskirties vieta svetainėje eurocall24.com buvo pakeista į standartinę „konferencijų paslaugą“, todėl manęs tai nebevargintų. Tada seleno scenarijus, skirtas prisijungti su vartotojo vardu ir slaptažodžiu prie 2FA apsaugotos paskyros, buvo įrašytas naudojant „Firefox IDE“ papildinį ir eksportuotas į „login.py python“ scenarijų. Paskutinis, bet ne mažiau svarbus dalykas, antrasis greitas ir purvinas python scenarijus loop.py buvo sukurtas vykdyti buvusį kas 6 minutes ir vykdomas. Po dviejų valandų ir 17 + 1 (registracijos) skambučių vėl buvo mano simbolinis euras.

8

10Vienas skambutis trunka maždaug 35 sekundes. Greitai apskaičiavus paaiškėja, kad užpuolikas galėtų pavogti 12 EUR / diena = 360 EUR / mėn. = 4.320 EUR / metus su vienu aukščiausios klasės numeriu tokiu tarifu. Tačiau užpuolikas galėjo lengvai valdyti ir išlaikyti apie 100 aukščiausios kokybės numerių ir su jais susietų „Google“ paskyrų, padaugindamas poveikio mastą nuo 100 iki 1.200 EUR per dieną = 36.000 EUR / mėn. = 432.000 EUR / metus. „Google“ atveju faktinės unikalios [Google Account, premium number] buvo reikalaujama.

„Google“ ištaisymas

Panašu, kad mes taikėme švelninimo priemones, ir dėl to, kaip veikia visa telekomunikacijų pramonė, neįmanoma to visiškai išvengti. Tačiau bandymas išfiltruoti pinigus būtų nutrauktas neilgai trukus, nes turime tam tikrų švelninimo priemonių, kad juos aptiktume.

Dėl to, kas išdėstyta pirmiau, komisija nusprendė neapdovanoti šios ataskaitos finansiškai (kaip sakėme, „Google“ pinigų praradimas už mūsų procesą yra mažiau svarbus nei vartotojų saugumas). Vis dėlto tai atitiko kreditą – pasirodysite „Google“ šlovės muziejuje.

Laiko juosta

  • 2016 m. Vasario 9 d .: pradinė pranešimas apie klaidą išsiųstas „Google VRP“
  • 2016 m. Vasario 10 d.: Pirminis „Google“ atsakymas, siūlantis naudoti pažeidžiamumą norėdamas įsilaužti į please.break.in@gmail.com
  • 2016 m. Vasario 10 d .: „Google“ išsiųstas el. Laiškas, kuriame prašoma paaiškinimo
  • 2016 m. Vasario 11 d .: „Google“ atsakymas, kuriame sakoma, kad jų ankstesni laiškai nebuvo man siunčiami, ir jie tiria šią problemą iki kito pranešimo.
  • 2016 m. Vasario 16 d .: pradinis „Google“ nuosmukis: „Ši problema neturi labai mažo poveikio saugumui arba jos neturi jokio, todėl manome, kad tai nėra programos taikymo sritis“, po to išdėstiau savo pusę
  • 2016 m. Vasario 17 d .: „Google“ atsakymas, kuriame teigiama, kad ankstesnis laiškas buvo automatinis atsakymas, kurio nereikėjo siųsti, ir jie vis dar tiria problemą. Tačiau pridurdamas, kad „Keista, kad pinigai yra mažiau jautrūs / paveikūs nei prieiga prie vartotojo duomenų. Tai nereiškia, kad pinigai nėra svarbūs, tiesiog pinigus lengva atgauti nei vartotojų pasitikėjimą, todėl, nors sutinku, kad tai ironiška, manau, kad geriau tokiems mūsų vartotojams 🙂 “
  • 2016 m. Vasario 23 d .: „Google“ atnaujinta informacija, kad tyrimas vis dar vyksta
  • 2016 m. Kovo 1 d.: Galutinis „Google“ atsakymas (žr. Aukščiau).

Registruojant „Office 365“ bandomąją versiją galima pateikti telefono numerį, į kurį skambina „Microsoft“. Nustatyta, kad „Microsoft“ iš tikrųjų skambino įvestais aukščiausios kokybės numeriais, tačiau blokavo numerį po 7 nepavykusių bandymų registruotis šiuo numeriu:

2 3

4

Tačiau buvo nustatyti du skirtingi šio apsaugos mechanizmo apvažiavimai, kurie leido daug, daug daugiau skambinti aukščiausios kokybės numeriu.

Paruošti nuliai

Buvo nustatyta, kad, iš anksto užfiksavus numerį su nuline, numeris vėl bus priimtas ir paskambins dar kartą tuo pačiu pagrindiniu „premium“ numeriu. Be to, šį triuką būtų galima pakartoti 18 kartų, nes vis tiek bus priimtas įprastas skaičius su 18 nulių. Galiausiai buvo nustatyta, kad pakeitus atsitiktinai pasirengusią nulinę porą aukščiausio lygio šalies (šiuo atveju 48 – Lenkija) šalies kodu, vis tiek bus skambinama:

5 7

9

10

Ši formulė apibūdina bendrą papildomų skaičiaus variantų, kuriuos galima padaryti naudojant šį pirmojo blokavimo aplinkkelio metodą, skaičių, kur kintamasis n apibūdina prieš telefono numerį įterpiamo elemento ilgį:

formulė 1

  • Jei n = 1, yra viena iš pirmųjų parinkčių su „0“
  • Jei n = 2, galima pasirinkti „00“ arba „48“
  • Jei n = 3, yra galimybė įvesti reikšmę „000“, „480“ arba „048“

Taigi bendras vieno priemokų skaičiaus variantų skaičius dabar yra 171 + 1 = 172.

Pridedami atsitiktiniai skaitmenys

Rastas papildomas apėjimas pridėjus skaičių su daugiausia 4 atsitiktiniais skaitmenimis (šioje ekrano kopijoje 1111):

11

12

Bendras derinių, kuriuos galima padaryti su keturiais atsitiktiniais galiniais skaitmenimis, skaičius yra pateiktas pagal šią formulę, kur i apibūdina galinių skaitmenų skaičių:

  • Jei i = 0, yra 1 galimybė (nėra pridėtų skaitmenų)
  • Jei i = 1, yra 10 galimybių (0–9)
  • Jei i = 2, yra 100 galimybių (00–99)
  • Jei i = 3, yra 1000 galimybių (000–999)
  • Jei i = 4, yra 10000 galimybių (0000–9999)

Kadangi šį galinį numerį galima pridėti prie bet kurio priimto numerio, šiame skaičiavime aprašoma bendra „Microsoft“ skambučių į vieną aukščiausio lygio numerį suma:

(172 * 11111) * 7 = 13 377 644 skambučiai / aukščiausios kokybės numeris

Kiekvienas skambutis trunka maždaug 23 sekundes, taigi, paskaičiuokime 20, kad būtų lengviau atlikti skaičiavimus. Priemokos numeris uždirbo 0,15 EUR / minutę:

(13.377.644 / 3) * 0,15 = 668.882 EUR / priemokos numeris

Vienalaikiai skambučiai

Be to, „Microsoft“ leido tuo pačiu metu skambinti tuo pačiu aukščiausios kokybės numeriu. „Eurocall24.com“ apriboja tuo pačiu metu skambinančių skambučių iš vieno šaltinio adreso į vieną iš aukščiausios kokybės numerių skaičių iki 10, todėl buvo atliktas „PoC“, kai 2 * 10 vienu metu skambinant buvo atlikta mažiau nei per minutę, gaunant šiek tiek daugiau nei 1 EUR pelno:

16

17

18 20a

21a

Galų gale užpuolikas per labai trumpą laiką galėtų pavogti milžinišką pinigų sumą, automatizuodamas šį išnaudojimo būdą naudodamas kelis aukščiausios kokybės numerius.

„Microsoft“ ištaisymas

Parengiamieji ir pridedami numerių blokavimo mechanizmo aplenkimai buvo nustatyti dviem etapais (2016 m. Kovo ir liepos mėn.). Minimali premija už 500 USD buvo mano dalis.

Sprendimus dėl atlygio priima apdovanojimų teikiančios premijos programos vertinimo komanda. Siekiame suteikti apdovanojimus pagal jų poveikį 1) „Microsoft“ klientams ir 2) pačiai „Microsoft“. Atsižvelgiant į tai, kad yra trečioji šalis, kuri teikia šią paslaugą mums, „Microsoft“ dėl šio trūkumo turėjo nereikšmingą poveikį. Nors didžioji rizikos dalis tenka įmonei, su kuria dirba „Microsoft“, o ne pačiai „Microsoft“, mes vis tiek nusprendėme skirti premiją.

Tai tikrai buvo pažeidžiamumas ir geras, todėl nusprendėme skirti penkių šimtų dolerių premiją. Saugumo požiūriu mes priskyrėme ypatingą dėmesį savo klientų apsaugai, ir nors šį pažeidžiamumą buvo verta apdovanoti ir ištaisyti, mes nematėme, kaip rizikuoti mūsų klientų duomenimis. Mes visada norime paskatinti tyrėjus praleisti laiką padėdami apsaugoti vartotojus, tačiau šiuo atveju mes tikrai norime skirti atlygį už tai, kad padėjome apsaugoti …