Blog ·
O potrivire care refuză să fie sigură
Patru fapte din patru surse, ținute separat. De ce o intrare KEV nu ridică niciodată o gravitate și de ce doar un interval mărginit contează cu adevărat.
De Provibr
Un scaner de bannere citește SSH-2.0-OpenSSH_8.9p1 de pe un port și notează un produs și o versiune. Un flux de vulnerabilități spune că un interval de versiuni al acelui produs are o problemă cunoscută. A pune cele două laolaltă înseamnă un rând de cod și una dintre cele mai simple căi de a construi un ecran de securitate în care nimeni nu mai are încredere peste o lună.
Motivul este că cele două fraze nu sunt același fel de afirmație. Una este o măsurătoare a unui serviciu care te poate minți. Cealaltă este afirmația unui terț despre un interval de versiuni scris poate înainte să existe remedierea. Un ecran care le arată ca pe un singur număr a aruncat tocmai lucrul care i-ar îngădui clientelei să hotărască ce are de făcut.
Patru fapte din patru surse
În fraza această mașină are CVE-1234 se află patru afirmații separate.
- Accesibil este măsurat. La un moment dat s-a stabilit o legătură TCP.
- Versiunea este dedusă. Am decupat un jeton dintr-un salut, iar serviciul poate fi configurat să spună orice, iar o distribuție poate să fi adus înapoi un petic fără să schimbe numărul.
- Avizul aparține altcuiva. NVD spune că un interval de versiuni al unui produs este afectat.
- Exploatat activ este încă o terță parte. CISA spune că acel CVE este folosit pe teren.
Rămân patru coloane. A le înmulți într-un scor este exact acel compus lipsit de sens pe care specificația acestei funcții îl interzice, iar a trata o intrare din catalogul vulnerabilităților exploatate drept o creștere de gravitate este aceeași greșeală la scară mică.
De aceea o intrare KEV nu ridică niciodată o gravitate. Gravitatea vine din scorul de bază CVSS și din nimic altceva, încrederea rămâne scăzută fiindcă dovada este un banner, iar exploatarea este o coloană proprie cu trei stări: da, nu și inaplicabil pentru constatările care nu se sprijină pe niciun aviz. Măsurat pe datele de probă: un aviz Exim la CVSS 9,8 este critic și poartă un semn KEV; un aviz OpenSSH la 8,1 este ridicat și nu poartă niciunul. Cel de 9,8 este critic datorită scorului său și nu semnului.
Catalogul nu poate, prin construcție, să producă singur o potrivire. Poartă un identificator CVE, un producător, un nume de produs și o dată, și niciun interval de versiuni. A pune Apache HTTP Server față în față cu un banner ar însemna a ghici. Cel mult pune un semn pe un aviz pe care NVD l-a legat deja de un interval de versiuni.
Fluxurile sunt tabele de platformă
Ambele fluxuri trăiesc în tabele fără coloană de organizație. Un CVE nu este al nimănui: nu este un dat personal, nu sunt datele unei cliente și este același rând pentru fiecare cont de pe platformă. De aceea nu se află în curățenia care rulează la închiderea unei organizații și nici într-un export de date personale. Legătura dintre o constatare și un aviz este însă a clientelei, iar aceea se află în amândouă.
Colectorul aplică o listă permisă pe gazdă și nu pe adresă, iar adresele stau în cod. Un lucrător care citește o adresă din mediu sau din baza de date este o primitivă de falsificare a cererilor cu un planificator în jur: cine poate stabili acea valoare face poarta noastră să emită o cerere din rețeaua noastră, cu adresele noastre de ieșire. Gazda fiecărei adrese finale este verificată de asemenea, astfel încât și o redirecționare către altă gazdă să fie respinsă în loc de urmată.
Tabelul de adevăr
Cu un nume de produs care se potrivește și o regulă CPE din aviz există exact trei răspunsuri cu putință, iar cele mai interesante rânduri îl produc pe cel din mijloc.
| Versiunea observată | Regula CPE | Rezultat |
|---|---|---|
| oricare | numele produsului diferă | nimic |
| necitibilă | oricare | potrivire cu putință, neverificată |
| citibilă | versiune exactă, egală, revizia se potrivește | potrivire de aviz |
| citibilă | versiune exactă, egală, revizia diferă | potrivire cu putință, neverificată |
| citibilă | versiune exactă, diferită | nimic |
| citibilă | interval cu limită superioară, înăuntru | potrivire de aviz |
| citibilă | interval cu limită superioară, în afară | nimic |
| citibilă | doar limită inferioară, deasupra | potrivire cu putință, neverificată |
| citibilă | nicio limită | potrivire cu putință, neverificată |
Contează numai intrările CPE cu partea a, de la aplicație. Un o pentru sistem de operare sau un h pentru echipament ar agăța Ubuntu 22.04 de un banner SSH, iar aceea este tocmai specia de potrivire care pare convingătoare și nu înseamnă nimic: noi am văzut serviciul și nu sistemul de dedesubt.
Rândul discutabil este doar limită inferioară. O regulă care spune tot începând de la 8.0, fără limită superioară, cuprinde versiuni apărute după aviz și care au rezolvat deja problema. NVD scrie intervalele astfel când remedierea nu era încă publicată și nu le revizuiește întotdeauna ulterior. A lipi o asemenea regulă pe o mașină ar raporta drept vulnerabil un server deja peticit, iar după două asemenea raportări clientela învață să ignore tot ecranul. Neverificată este eticheta cinstită, iar neverificată nu este o variantă mai mică a confirmatei. Este o altă afirmație.
Când un aviz poartă zeci de reguli CPE, câte una pentru fiecare versiune afectată, câștigă rezultatul cel mai tare. Dacă una se potrivește exact, acela este răspunsul, chiar dacă alături stau zece vagi.
O reevaluare scrie o revizie nouă și nu atinge nicio dovadă
Fluxurile se schimbă. NVD corectează un scor, un interval se îngustează, un CVE care se potrivea săptămâna trecută nu se mai potrivește. Baleierea care reevaluează constatările deschise față de fluxurile curente are o regulă aspră: nu scrie și nu modifică niciodată o apariție.
O apariție este răspunsul la era acolo la 03:14. O actualizare de flux nu schimbă nimic din asta. Ceea ce se schimbă este concluzia pusă deasupra, iar aceea primește un rând nou în tabelul evaluărilor, cu un identificator de revizie propriu care numește ambele instantanee de flux. Măsurat: după mutarea unui aviz de la CVSS 9,8 la 7,5, rândurile de apariție existente s-au întors identice octet cu octet.
O potrivire dispărută închide constatarea drept closed_unverified și niciodată drept resolved_verified. A doua este o afirmație despre o măsurătoare, iar măsurătoare nu a existat. Ceea ce s-a schimbat este propria noastră deducție. Numele este întregul motiv pentru care starea aceea există.
Nu se scrie nimic nici atunci când nimic nu s-a schimbat. Instantaneul este comparat mai întâi cu judecata anterioară, fiindcă o baleiere care depune un rând la fiecare trecere lasă într-o lună o sută douăzeci de evaluări identice sub fiecare constatare, iar atunci cronologia devine necitibilă.
Nicio baleiere fără un flux reușit
Ultimul zăvor a costat cel mai puțin cod și împiedică cel mai rău rezultat.
Dacă niciun flux nu a reușit vreodată, revizia de avize curentă este goală, iar baleierea se întoarce îndată fără să cerceteze nimic. Fără acea verificare ar rula, ar constata că interogarea candidaților nu întoarce nimic și ar închide fiecare constatare bazată pe un aviz la fiecare client drept nemaipotrivită. O flotă întreagă ar deveni verde pe temeiul unui flux stricat.
O aducere eșuată lasă în plus memoria tampon anterioară în picioare, cu propriul ei moment de reușită, astfel încât cele două întrebări când am încercat ultima oară și când am reușit ultima oară să fie două coloane separate în loc de una singură, plină de speranță.
Ce costă asta și ce aduce
Costul este că ecranul arată multe rânduri potrivire cu putință, neverificată, iar acelea satisfac mai puțin decât un număr. Cine administrează trebuie să se uite la unul și să hotărască dacă versiunea aflată în folosință este într-adevăr afectată.
Ce aduce este că rândurile însemnate drept confirmate merită o acțiune și că fiecare rând poate fi desfăcut în cele patru fapte din care a fost construit: ce s-a măsurat, ce s-a dedus, ce a afirmat altcineva și ce pur și simplu nu se știe. O constatare care nu poate explica de unde vine fiecare parte a ei este o constatare pe care cineva va învăța într-o zi să o sară.
Din munca de securitate a Provibr. De ce o scanare de expunere care citește un banner nu trimite nicio încărcătură se află în un scaner care trimite zero octeți, iar de ce un incident nu se închide niciodată prin tăcere se află în un incident care nu se închide niciodată prin tăcere.