Meniu

Spectre Varianta 1 - instrument de scanare de la Red Hat

Red Hat a dezvoltat un instrument intern care poate fi folosit pentru a scana vulnerabilitati variantei 1 SPECTRE. Acest instrument nu este un produs Red Hat. Ca atare, nu este acceptata si nu vine cu nici un fel de garantie.

Instrumentul functioneaza numai pe binare statice si nu simuleaza un întreg sistem de rulare. Acest lucru înseamna ca nu va urma salturi printr-un PLT într-o biblioteca partajata, si nici nu va emula încarcarea de cod suplimentar prin intermediul functiei dlopen ().

Instrumentul accepta în prezent numai X86_64 si arhitecturi AArch64. Noi speram sa adauge arhitecturi suplimentare în viitor.

Instrumentul este disponibil în prezent în forma ca sursa nu ar fi întelept sa ofere un instrument de analiza de securitate ca un binar pre-compilate. Exista detalii cu privire la modul de a obtine sursa si de a construi instrumentul mai târziu în acest articol.

Pentru a utiliza scanerul pur si simplu invoca cu calea catre un binar pentru a scana si o adresa de pornire în interiorul binar:

x86_64-scanner vmlinux --start-address=0xffffffff81700001

Adresa de start va fi probabil un punct de intrare syscall, iar o imagine de nucleu binar. (Necomprimat, scanerul nu stiu înca cum sa decomprime kerneluri comprimate). Alternativ binar ar putea fi o biblioteca si adresa un punct de intrare functie externa în acea biblioteca. De fapt, scanerul se va ocupa de orice fel de binare, inclusiv programe de utilizator, biblioteci, module, plugin-uri si asa mai departe.

O adresa de start este necesara pentru a pastra lucrurile simple si pentru a evita iesirea din exterior. În teorie, scanerul ar putea examina orice cale de cod posibil printr-un binar, în mod normal, inclusiv cele care nu sunt accesibile unui atacator. Dar acest lucru ar produce prea mult de iesire. În schimb, o singura adresa de start este utilizata pentru a restrictiona cautarea la o regiune mai mica. În mod firesc scanerul poate fi rulat de mai multe ori cu diferite adrese de pornire de fiecare data, astfel încât toate punctele valide de atac pot fi scanate.

Iesirea scanerului va arata, probabil, ca acest lucru:

X86 Scanner: No sequences found.

Sau, în cazul în care este gasit ceva, de genul:

X86 Scanner: Possible sequence found, based on a starting address of 0:.
X86 Scanner:               000000: nop.
X86 Scanner: COND: 000001: jne &0xe .
X86 Scanner:               00000e: jne &0x24 .
X86 Scanner: LOAD:  000010: mov 0xb0(%rdi),%rcx.
X86 Scanner:               000017: mov 0xb0(%rsp),%rax.
X86 Scanner:               00001f: nop.
X86 Scanner: LOAD:  000020: mov 0x30(%rcx),%rbx.

Acest lucru indica faptul ca introducerea binara de test la adresa 0x0 poate duce la întâlnirea unei salt conditionat la adresa 0x1 ar declansa speculatii. Apoi, o sarcina la adresa 0x10 utilizeaza o valoare furnizata atacator (în% DZR), care ar putea influenta a doua sarcina la 0x20.

Un punct important de retinut despre iesire a scanerului este ca acesta este doar un punct de plecare pentru investigatii suplimentare. examinare mai atenta a codului de semnalat poate dezvalui faptul ca un atacator nu a putut folosi de fapt, pentru a exploata vulnerabilitatea Spectre.

Nota - în prezent, scanerul nu verifica daca adresa de pornire este de fapt o adresa valida de instructiuni. (Aceasta se verifica daca adresa se afla în interiorul imaginii binare furnizat). Deci, în cazul în care se furnizeaza o adresa invalida erori neasteptate pot fi generate.

Nota - sursele de scanare includ doua fisiere de test, unul pentru x86_64 (x86_64_test.S) si unul pentru AArch64 (aarch64_test.S). Acestea pot fi utilizate pentru a testa functionalitatea scanerului.

Scanerul este de fapt un simulator care emuleaza executarea instructiunilor de la adresa de pornire pâna când codul ajunge la o instructiune de retur care se va întoarce la orice numita adresa de start. Se urmaresc valori în registre si memorie.

Scanerul are o limita încorporata pe numarul total de instructiuni pe care îl va simula pe orice cale data. Acest lucru este, astfel încât sa nu se blocheze în bucle infinite. În prezent, limita este stabilita la 4096 instructiuni.

 --verbose , mai multe detalii. 

--quiet  returna o valoare zero sau non-zero în functie de faptul daca au fost gasite vulnerabilitati.

 --max-num-branches optiune care va restrictiona scanerul la urmatoarea nu mai mult decât numarul specificat de sucursale conditionate.

Feedback privind problemele de constructie sau de functionare a scanerului sunt  bine venite. Va rugam sa le trimite lui Nick Clifton . Speram ca veti gasi acest instrument util.

Red Hat este , de asemenea, este foarte interesat de colaborarea cu orice parte care este preocupat de aceasta vulnerabilitate. Daca doriti  acest lucru, va rugam sa-l contactati pe Jon Masters .

 

Source: redhat.com

FlorinM

Utilizator Linux - Solus OS, pasionat de calatorii.
  • | 2708 articole

Nici un comentariu inca. Fii primul!
  • powered by Verysign