Jump to content
Domnul.Do

[Timing Attack] Discrepante in logica executiei

Recommended Posts

Posted (edited)

In mare parte acesta metoda este mai mult un design bug care are un potential foarte mare . Se baseaza mai mult pe un "delay" comparativ si se foloseste in cryptologie sau in aplicati offline/online:

-Cu un delay in logica executie a unei anumite functi intr-o aplicatie se poate identifica functia respectiva.

Dar am gasit o alta intrebuinta pentru testarea api-urilor de tip web care se bazeaza pe un echo din server side.

Avem urmatorul caz fictiv:

Parametri:

===============================

var api = 'domeniu-fictiv.biz/api/echo.php?nume=Popescu'

var Draspuns = 'orasul=fictiva&strada=fictiva&nr=fictiva&bloc=fictiva&scara=fictiva&judet=fictiva'

var Nraspuns = 'Nume incorect'

var logat = 'domeniu-fictiv.biz/account.php'

var nelogat = 'domeniu-fictiv.biz/main.php'

Perspectiva user-ului:

===============================

Domnul Popescu isi viziteaza site-ul de matrimoniale ,apeland din broswer bookmark-ul cu adresa 'logat' .

-Daca nu este autentificat , site-ul il redirectioneaza catre 'nelogat' pentru a se autentifica (timpul redirectionari este de 4 sec ) dupa care mai face un redirect spre 'logat' .

-Daca este autentificat (onload-ul pagina este de 1 sec ) , nu face nici un redirect in plus.

Odata autentificat site-ul apeleaza 'api' pentru sustragerea informatilor 'Draspuns':

-Daca are numele Popescu , va afisa 'Draspuns' (timpul echo-ului 10 sec)

-Daca nu are numele Popescu , va afisa 'Nraspuns' (timpul echo-ului 5 sec)

Perspectiva atacatorului:

===============================

Verificarea user-ului daca este autentificat se face :

1) efectuand un request prin user , catre 'logat' verificand daca face un redirect spre 'nelogat'

Prin redirectionare se poate verifica daca este logat prin "load time"-ul redirectionari . Daca "load time"-ul este de 4 sec atunci nu este autentificat. Daca este de 1 sec. atunci este autentificat.

2) al 2-lea request va fi catre 'api' dar cu parametru: "nume=Smith'

La acest request echo-ul de la 'api' va fi 'Nraspuns' si "load time"-ul procesari de catre server este de 5 secunde. Aceasta variatie se poate masura din nou prin "load time" procesari echo-ului.

Atacatorul continua cu un "dictionary attack" sa ghiceasca numele .

Concluzie:

===============================

Orice discrepante in logica executiei a unui api poate sa fie masurata daca variatia este mare sau constanta.

Aflarea "Load Time"-ul este una mai delicata,metoda mea este pornirea unui javascript timer la incarcarea pagini (prima valoare T0) , requestul sa il introduc intr-un < img scr > si cu onerror pentru oprirea timer-ul (a 2-a valoare T1).

T1 - T0 = "load-time"-ul

Acesta este un caz fictiv harmless , mai mult este incadrat pe "Information Disclosure" dar se poate face mult mai multe .

Aceasta metoda nu are un standart , este egala cu clickjacking sau XSSI . Depinde de api-ul respectiv si de parametri pentru stabilirea rezultatului final.

Note:

Aceasta metoda depinde foarte mult de:

- browser , deoarece nu este cross browser

- extentile instalate in browser , poate sa influente mult "load time"-ul

- arhitectura os-ul (cpu/gpu)

Sfaturi:

-Pentru prima valoarea,eu am ajuns la concluzia ca este o metoda buna de a face multe refresh-uri pentru cache-uirea pagini .

-Evitarea a multor iframe-uri .

-Pornirea timer-ului trebuie sa fie simultan cu incarcarea pagini.

Edited by Domnul.Do
  • Upvote 2

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...