Pagrindiniai web sistemų pažeidžiamumai Ir saugos būdai


3. Autentifikacijos ir sesijos mechanizmų pažeidžiamumai

Programuotojams dažnai tenka kurti nestandartines autentifikacijos ir sesijos valdymo schemas, ką padaryti teisingai yra nelengva. Neretai būtent šiuose mechanizmuose slypi įvairių rūšių išnaudotinos spragos: konfidencialios informacijos paviešinimas, slaptažodžio valdymas, slapti klausimai ir pan. Dažnesnės tokių schemų spragos:

  • Dauguma Web aplikacijų menkai kontroliuoja laisvai pasirenkamo slaptažodžio kokybę (numatytieji, trumpi, nuspėjami, identiški vartotojo vardui slaptažodžiai ir
    pan.). Įsilaužėliui tai ypač palengvina spėliojimo procesą. Mozilla rekomenduoja rinktis bent 8 simbolių slaptažodžius, kuriuos sudaryti privalo raidės ir skaičiai. Ypatingais atvejais slaptažodyje reikalauti reikėtu ir vieno ar daugiau specialiųjų rašmenų. Taip pat siūloma tikrinti slaptažodžius pagal juodąjį sąrašą (blacklisted passwords).
  • Web aplikacija, neribodama neteisingų prisijungimų kiekio (arba tai darydama neteisingai), suteikia proga įsilaužėliui spėlioti prisijungimo duomenis jėgos
    metodu (bruteforce). Po tam tikro neteisingų prisijungimo kiekio yra ypač svarbu sulėtinti galimai su ataka susijusius veiksmus, pvz. laikinai blokuoti IP adresą nuo
    autentifikacijos sistemos. Iš vartotojo taip pat gali būti reikalaujama įvesti grafiškai sugeneruotą tekstą (CAPTCHA), pvz:
 

https://cert.litnet.lt/wp-content/uploads/2015/05/captcha2.png

  • Neteisingo prisijungimo atveju gaunama naudingos informacijos, pvz. apie vartotojo egzistavimą duomenų bazėje arba nepavykusios autentifikacijos priežastį. Tokiu būdu įsilaužėlis gali ženkliai sutrumpinti automatizuotos spėliojimo atakos laiką. Saugi aplikacija turėtų grąžinti tik bendrą pranešimą, kad autentifikacija yra nesėkminga, pvz. „Neteisingas vartotojo vardas arba slaptažodis“
  • Nesaugiai perduodami konfidencialūs duomenys, tokie kaip sesijos prieigos raktas, slaptažodis. Daugelis šių pažeidžiamumų kyla dėl netinkamo HTTPS naudojimo.
  • Pamiršto slaptažodžio atstatymo funkcijos pažeidžiamumai, neretai kylantys dėl per mažų informacijos, identifikuojančios vartotoją, reikalavimų. Kai kurios sistemos suteikia galimybę vartotojui atgauti užmirštą slaptažodį, leisdamos įsibrovėliui veikti nepastebimai.
  • Kai kurios Web aplikacijos neteisingai įgyvendina prisijungimo „prisiminimo“ funkcionalumą (remember me). Vartotojui neretai grąžinamas paprastai sugeneruojamas ilgalaikis sausainėlis be papildomų, autentifikacijai užtikrinti skirtų, parametrų. Motyvuotas įsibrovėlis gali susigeneruoti tokį sausainėlį savo rankomis.
  • Nuspėjami numatytieji (pradiniai) slaptažodžiai, paskyrų aktyvacijų URL ir kiti slapti duomenys.
  • Nesaugiai sugeneruoti, nuspėjami sesijų prieigos raktai, leidžiantys įsibrovėliams jais manipuliuoti. Naudodamas tokį įrankį kaip Burp Sequencer[12] įsibrovėlis gali statistiškai išanalizuoti prieigos rakto atsitiktinumo faktorių ir galimai atkurti generavimo algoritmą (ar jo dalį).
  • Sesijos prieigos raktų paviešinimas (pvz. žurnalo įrašuose, URL).
  • Netinkamai apribojamas sausainėlių siuntimas (leidžiama pasiekti sausainėlius iš neprivilegijuotų subdomenų ir pan.).
 

Apsisaugojimui nuo šių pažeidžiamumų, siūloma naudoti standartines, jau patikrintas autentifikacijos ir sesijos kontrolių schemas. Populiariausi Web karkasai paprastai
palaiko bazinį sesijų valdymo bei autentifikacijos funkcionalumą, dokumentacijoje dažnai pateikiami patarimai saugiam išplėstinių schemų kūrimui.