sast

Putting the Principle of Least Privilege to Work for Web Apps

With an ever-increasing proportion of day-to-day work on the desktop occurring in the form of web-based applications, organizations need to rethink how those applications work. They also need to examine – and in some cases tighten up – how web-based apps (or rather, the processes within which they operate) make use of privileges and access rights for Least Privilege. Let’s ponder this as we consider some basic definitions. Understanding the Principle of Least Privilege I’ve been writing about this principle since the early 2000s (the first edition of our Sybex CISSP Study Guide is copyright 2003; it’s now in its 6th edition). Simply put, the principle of least privilege means that no user, process, or program should have any more privileges than it absolutely needs to do its job. This principle exists to prevent cases where excessive (and unnecessary) privileges can lead to unwanted, unauthorized, and perhaps even damaging use of such privileges can occur. I just learned that this principle is sometimes abbreviated POLP, and takes the principle of minimal privilege (POMP) and the principle of least authority (POLA) as synonyms, thanks to Nate Lord’s excellent discussion at the Digital Guardian. POLP’s Security Implications for Web-based Apps Web-based apps generally run in two or more security contexts, in which one might be characterized as “typical user” and the other as “administrator.” Of course, some Web-based apps (think security portals, cloud or network management consoles, threat and vulnerability reporting and alerting tools, and so forth) may have multiple levels of administrative privilege. Thus, they can distinguish basic admins who maintain and update the runtime environment from senior admins who can install and configure the environment, establish role-based security structures and populate them with groups and accounts, and so forth. Across the board, asserting the principle of least privilege starts with checking the processes and accounts associated with a web app: Do ordinary users run in the typical user context? Do admins run in an appropriate administrator security context? If so, that’s one step in making sure things are working as they should be. If not, it’s time – right now! – to set things right and put accounts into their proper security contexts. But there’s more involved in asserting POLP for web-based apps. Using some kind of audit tool within the access control capabilities of the host platform’s OS, and the security tools for the web-based app itself, it’s essential to get as complete a picture of the privileges available to the web-based app itself (it’s usual runtime context, that is). Then, do likewise for the user accounts and/or groups or roles that are allowed to run this web-based app. Here, you’re looking for grants of access or privileges that exceed the bare minimum that’s needed for the item under consideration (be it user, group, role, process, or program). Of course, if you find anything, you’ll need to trim it back to where it should be. From a forensics and information-gathering perspective, you’ll also want to use logs or other audit tools to get a picture of how privilege is actually being used within the general runtime context for the web-based app as well. Settings that grant access rights or privileges tell you what should be going on within that runtime context. Examination of logs and other audit tools that record, analyze, and report on actual USE of […]

Read More

Selectarea solutie SAST

Odată cu creșterea companiei și creșterea numărului de dezvoltatori, verificarea „manual” a prezenței vulnerabilităților devine din ce în ce mai dificilă. Devine necesar implementarea soluțiii SAST – testarea statică de securitate a aplicațiilor (Static Application Security Testing). Cum să alegi SAST? Nici o simplă vulnerabilitate nu poate fi găsită folosind algoritmi primitivi. Astăzi pe piață există o mulțime de soluții SAST, atât comerciale, cât și gratuite. Cele mai populare dintre ele sunt AppScan de la IBM Security, Synopsys, Veracode, Inspector de aplicații, MicroFocus, Appercut, Checkmarks. Eficiența procesului de dezvoltare depinde de alegerea soluției. Principalele avantaje ale soluțiilor comercial sunt: Concentrare pe securitate: algoritmi specifici și baze de reguli mari. Asistență pentru multe limbaje de programare. Interfață ușor de utilizat. Disponibilitatea pluginurilor și API-ului. Disponibilitatea suportului tehnic pentru instrument. Instrumentele gratuite și interfețele web sunt adesea inferioare celor plătite, deoarece conțin algoritmi mai simpli, iar bazele regulilor sunt mai puțin complete. Sarcina lor principală este de a găsi erori în cod. Specializarea și funcționalitatea acestor soluții este de obicei foarte restrânsă. Odată selectată soluția SAST, trebuie să o integrați în procesul de dezvoltare. Opțiunile de integrare pot include: încorporarea unui repozitoriu, medii de dezvoltare, servere CI / CD, sisteme de urmărire a sarcinilor. Un instrument bun este capabil să se integreze cu succes în toate clasele de sisteme enumerate. Notă: API-ul SAST deschis include API-ul JSON și CLI și oferă oportunități ample pentru integrarea și automatizarea suplimentară. Pentru a selecta instrumentul care îndeplinește cel mai mult obiectivele și obiectivele dezvoltatorului, trebuie să efectuați compararea funcțională și compararea lor în calitate. O comparație funcțională se realizează în funcție de mai mulți parametri: ei analizează comoditatea interfeței și comoditatea integrării cu instrumentele proprii. În același timp, este important să efectuați verificări pe propriile coduri. Următorul pas este o comparație a calității: analizează vulnerabilitățile și falsele pozitive în raport cu propriul cod. Nuanțele și subtilitățile analizei de cod Cu cât se constată mai devreme o vulnerabilitate, cu atât este mai ieftin pentru dezvoltator și pentru client. Acest lucru înseamnă că produsul trebuie verificat periodic pentru vulnerabilități în timpul procesului de dezvoltare și, în plus, să efectueze verificări de control înainte de eliberare. Viteză și resurse: de obicei este de așteptat ca instrumentul să funcționeze rapid; alergați la fiecare schimbare; arată pe zbor cine și când a introdus vulnerabilitatea. De fapt, SAST analizează codul timp de cel puțin 8 ore, este dificil să îl executați la fiecare modificare; este dificil să identifici autorul vulnerabilității; fals pozitive se întâmplă. Deci, apare întrebarea: cum să configurați DevSecOps. Este foarte important să: Calculați timpul și resursele pentru a vă analiza codul. Identificați declanșatorii pentru începerea unei scanări pe baza rezultatelor. Rețineți că puterea va trebui recalculată periodic. Este mai bine să folosiți o analiză incrementală, dar aceasta trebuie făcută cu prudență, deoarece vulnerabilitățile pot fi pierdute. De exemplu, puteți rula testarea folosind SAST atunci când un dezvoltator trimite o sarcină pentru revizuire. De asemenea, puteți începe scanarea la sfârșitul zilei de lucru. O altă problemă este falsul pozitiv și obținerea de informații despre vulnerabilități multiple în raport. În acest caz, dezvoltatorul este recomandat: să filtreze analizatorii statici în funcție de vulnerabilități și de fișiere. Puteți exclude bibliotecile, analiza criticitatea, adăuga excepții pentru anumiți parametri. Este suficient să faci o astfel de lucrare o singură dată, pentru ca, în […]

Read More

Ce nu vor putea niciodată static analysis

Ce este practic, source code static analysis? Trimitem câteva surse code la intrare, iar la ieșire într-un timp scurt (mult mai scurt decât testul) obținem câteva informații despre codul nostru. Limitarea fundamentală și insurmontabilă din punct de vedere matematic este că nu putem obține în acest fel o clasă destul de restrânsă de informații. Cel mai cunoscut exemplu de problemă care nu poate fi rezolvat cu ajutorul static analysis este problema de oprire: aceasta este o teoremă care dovedește că este imposibil să dezvolte un algoritm general care să determine prin codul sursă al unui program dacă se va bucla sau se va termina într-un timp finit. O extensie a acestei teoreme este teorema lui Rice, care afirmă că, pentru orice proprietate non-privată a funcțiilor computabile, a determina dacă un program arbitrar calculează o funcție cu această proprietate este o problemă algoritmic nesolvabilă. De exemplu, este imposibil să scrii un analizator care stabilește, folosind orice cod sursă, dacă programul analizat este o implementare a unui algoritm care calculează, să zicem, pătratul unui număr întreg. Astfel, funcționalitatea analizatorilor statici are limită insurmontabile. În toate cazurile, analizatorul static nu va putea niciodată să detecteze astfel de lucruri, cum ar fi, de exemplu, apariția unei „excepții de indicator nul” în limbile nuloase sau în toate cazurile va determina apariția unui „atribut care nu se găsește” în limbile tipizate dinamic. Tot ceea ce poate face cel mai avansat analizor static este să izoleze cazuri particulare, dintre care numărul dintre toate problemele posibile cu codul sursă este, fără exagerare, o scădere a găleții. Static analysis nu este o căutare a erorilor Concluzia rezultă din cele de mai sus: static analysis nu este un mijloc de reducere a numărului de defecte dintr-un program. Mă aventurez să spun: atunci când este aplicat pentru prima oară proiectului dvs., va găsi locuri „ocupate” în cod, dar cel mai probabil nu va găsi defecte care să afecteze calitatea programului. Exemplele de defecte găsite automat de analizatori sunt impresionante, dar nu trebuie să uităm că aceste exemple au fost găsite prin scanarea unui set mare de baze de coduri mari. După același principiu, crackerele care au capacitatea de a încerca câteva parole simple pe un număr mare de conturi găsesc în cele din urmă acele conturi care au o parolă simplă. Asta înseamnă că nu trebuie aplicată static analysis? Sigur că nu! Și, exact pentru același motiv, de ce merită să verificați fiecare nouă parolă pentru prezența acesteia în stop-list a parolelor „simple”.

Read More

Cum se utilizează corect analiza statică

Acualmente se vorbește din ce în ce mai mult despre analiza statică pentru căutarea vulnerabilităților ca etapă necesară a procesului de dezvoltare. Cu toate acestea, mulți vorbesc și despre problemele analizei statice. Dacă ați încercat vreun instrument specializat, puteți fi înspăimântat de rapoarte lungi, cu recomandări confuze, dificultăți în configurarea instrumentului și falsuri pozitive. Deci este încă necesară analiza statică? Experiența sugerează că este necesar. Și multe dintre problemele care apar atunci când vă uitați prima dată la instrument, este destul de posibil să rezolvați. Voi încerca să vă spun ce poate face utilizatorul și cum ar trebui să fie analizatorul astfel încât utilizarea sa să fie utilă și să nu se introducă „un alt instrument inutil, de care are nevoie Security Officer”. Despre analiza statică Deci, am vorbit deja despre limitările teoretice ale analizei statice. De exemplu, analiza statică profundă încearcă să rezolve probleme care sunt exponențiale în complexitate. Prin urmare, fiecare instrument caută un compromis între timpul necesar, resursele cheltuite, numărul de vulnerabilități găsite și numărul de falsuri pozitive. De ce avem nevoie de analize aprofundate? Orice IDE găsește foarte repede erori, uneori chiar și legate de securitate – care sunt unele probleme exponențiale? Un exemplu clasic este SQL injection (și orice altă injecție, cum ar fi XSS, RCE și altele asemenea), care trece prin mai multe funcții (adică citirea datelor de la utilizator și executarea interogării apar în diferite funcții). Căutarea acestuia necesită o analiză interprocedurală a fluxului de date, iar aceasta este o sarcină de complexitate exponențială. De acord, fără a căuta astfel de vulnerabilități, analiza nu poate fi considerată profundă. Din același motiv, trebuie să analizați codul în întregime și nu în părți – altfel, vulnerabilitățile interprocedurale pot fi ratate. În ultimii ani, am acumulat multă experiență în comunicarea cu clienții (potențiali) ai diferiților analizoare statice. În special, discutăm revendicările la instrumente pe baza rezultatelor primei utilizări (pilot). Majoritatea revendicărilor urmează într-un fel sau altul din limitările teoretice ale tehnologiei. În plus, este posibil ca instrumentele să nu aibă pur și simplu funcționalitatea de care utilizatorul are nevoie. Cu toate acestea, în opinia noastră, analizatorii se pot deplasa (și se îndreaptă) către utilizator în ceea ce privește rezolvarea problemelor identificate mai jos. Dar, de asemenea, trebuie să poți folosi analizoare, nivelând consecințele acelorași probleme – după cum se dovedește, acest lucru nu este atât de dificil. Hai să mergem în ordine. Vă puteți imagina o situație de model: decideți să încercați tehnologia în acțiune sau să alegeți un analizor static – efectuați un pilot. Desigur, nu aveți încredere în cazurile de test ale furnizorului și doriți să încercați să analizați codul dvs. (în același timp puteți găsi vulnerabilități reale și să le remediați). Vi se oferă un program de instalare sau o mașină virtuală pre-configurată cu un sistem pentru o perioadă scurtă de timp. Începutul analizei Mai întâi trebuie să lansați analiza. Accesați interfață și totul pare clar: încărcați arhiva cu codul sursă și faceți clic pe „analiză”. Dar nu: primiți mai multe formulare cu câmpuri diferite care trebuie completate cumva. Este necesar să indicați limbaje de programare, unele setări ale analizorului, selectați pachete de vulnerabilitate (de unde știți ce este inclus în ele?) Ș.a. Treci acest test și începe analiza. Ah, nu – o eroare de scanare. „Formatul nu corespunde cerințelor”, „Este necesar un […]

Read More