De ceva timp incoace am cercetat incidentul ce a avut loc anul acesta , mai exact tentativa de a introduce un backdoor in utilitarul xz de pe linux.
Cu ocazia acestor cercetari ma gandeam sa pornesc o posibila lucrare de disertatie in ideea de a dezvolta un tool ce sa analizeze tarball-urile pentru astfel de utilitare inainte de a fii deployate pe linux.
Pe hartie suna bine ideea dar am nevoie de o a doua parere ca desi in mintea mea se rezolva problema cu un model de machine learning plus ceva dynamic code analysis dar nu stiu daca in practica e chiar asa si sa nu ma fac de ras .
Nu știu dacă e posibil sau nu. Nici măcar nu știu dacă înțeleg foarte bine ideea până la capăt.
De ce să nu faci analiza direct pe codul sursă înainte de compilare? Aici ai prinde cel mai devreme problema și te bazezi pe un număr mai mic de actori care rulează tool-ul tău și asigură siguranță pentru toți utilizatorii.
Pe ce o să antrenezi modelul de machine learning? Ca să fie fezabil, ar trebui măcar să știi ce date ai pentru training, altfel soluția este sortită eșecului din start.
O altă analiză la care m-aș gândi ar fi să ai un model care îți clasifică o bază de cod în capabilități cunoscute (acces la sistemul local de fișiere, memorie, sockets, permisiuni, etc) și apoi să detectezi bucăți de cod care ies în afara capabilităților (eg. aplicație desktop care deschide un socket să asculte; nu zic că n-ar fi posibil dar e puțin probabil pentru majoritatea aplicațiilor)
Inteleg ce zici dar aici este problema ca s-a lucrat foarte profesionist, ca daca te apui sa creezi un socket in codul sursa bate ochii la review asa ca nu au introdus backdoor-ul in codul sursa si in tarballs intr-unul dintre fisierele binare.
Ideea mea era sa creez un tool ce sa verifice aceste fisiere + alte fisiere aferente ce pot reprezenta un loc unde ar putea ascunde cineva cod malitios.
Plus ca pentru analiza de cod deja exista CodeQL si alte tool-uri de la github ce fac o treaba mult mai buna decat as face eu de unul singur
Poate că da, dar niciun antivirus nu este perfect. Crezi că industria n-ar beneficia de un instrument mai bine adaptat pentru a detecta vulnerabilitățile la nivel de cod?
o sa observi ca a modificat si oss_fuzz, deci ce te face sa crezi ca nu ar modifica si solutia ta daca se iveste ocazia ?
Omul a fost foarte profesionist, si-a pus codul in teste, pe care l-a facut corupt in mod void. Ce a facut dupa in macro e cireasa de pe tort. Daca nu ai domain knowledge pe pipeline si fisierele de genul si codul real arata cam la fel.
E extrem de greu sa detectezi vulnerabilitatile la nivel de cod fiindca nu doar codul e parte din ce ruleaza in pipeline si la utilizatorul final, tot stack-ul tau inclusiv sta pe niste tool-uri complexe pe care nu le vei intelege pe deplin niciodata.
legat de primul punct ma gandeam ca tool-ul sa verifice tarball-ul inainte ca acesta sa fie inclus in urmatoarea distributie de linux, adica daca mantainerilor le-a scapat ceva macar celor ce integreaza mai departe sa nu le scape.
stiu ca poate a sunat putin idealista ideea , de aici si intrebarea da mersi pentru feedback-ul constructiv oferit.
Multa sanatate, toate cele bune!
Tarball-ul ala contine niste instructiuni pentru procesor si memorie (binare), fisiere arhivate care vor fi dezarhivate undeva (statice) si mai exista si date in clar (string-uri ASCII in cod).
Un antivirus functioneaza prin verificarea a ce apeleaza instructiunile, unde incearca sa citeasca si sa scrie in memorie, verifica daca sunt diferente intre o versiune dinainte si daca apeleaza functii suspecte apelate frecvent de virusi. Iar cea mai importanta functie e cautarea de instructiuni similare (copy paste din virusi/vulnerabilitati deja confirmati/confirmate manual).
Codul compilat e o serie de instructiuni, nu cred ca AI-ul il poate rula “in cap” ca sa iti spuna ca e o vulnerabilitate sau nu inainte sa rulezi acel cod. Posibil la exemple foarte simple si triviale. Daca ai cod care oricum apeleaza in mod normal functii suspecte si scrie/citeste in memorie unde n-ar trebui (multe aplicatii au) o sa iti marcheze fiecare tarball/binar ca si suspect. De asemenea de multe ori daca ai cod care ruleaza intr-o masina virtuala (e.g. chrome) sansele sa poti detecta ceva la rulare sunt zero fiindca semnatura la ce cauti se schimba de la rulare la rulare.
Dupa poate vine omul care a introdus vulnerabilitatea si convinge oamenii ca tool-ul tau oricum detecteaza o gramada de falsuri si sa ii aprobe schimbarile oricum si o sa trimita tie o somatie ca ba vezi ca codul meu nu e virus/nu e vulnerabil si tu ce faci din acest punct? De unde stii ca AI-ul e mai bun ca el ? Ai resursele ca sa te uiti manual peste fiecare cod sursa posibil din lume si sa il intelegi ?