secure coding guidelines
Acest tutorial explică codificarea securizată, cum să evitați vulnerabilitățile legate de securitate și oferă Ghiduri de codare și listă de verificare pentru practicile de codificare securizată:
Pentru ca securitatea să fie încorporată în software și să implementeze Ghiduri și cele mai bune practici de codificare securizată, întreaga organizație, împreună cu echipa identificată pentru a lucra la dezvoltarea aplicației, trebuie să ia în considerare anumite aspecte.
Aici vom discuta acele aspecte care ajută la dezvoltarea unui software securizat.
Este la fel de simplu ca și dacă un dezvoltator nu știe ce se înțelege prin „Securitate pentru software” și modul în care un hacker își poate pirata software-ul, să preia controlul asupra acestuia și să încerce să exploateze, atunci este pur și simplu imposibil să codați un software sigur. Deci, dezvoltatorul trebuie să înțeleagă mai întâi semnificația codificării securizate.
Ce veți învăța:
- Ce este codarea sigură?
- Ghiduri de codificare securizată
- Listă de verificare pentru practicile de cod securizat
- Concluzie
Ce este codarea sigură?
Codificarea sigură este de a proiecta și dezvolta software prin evitând punctele slabe care duc la vulnerabilități legate de securitate prin respectarea standardelor de securitate specificate și a celor mai bune practici din industrie.
Prima întrebare care apare în mintea tuturor este „Câtă securitate este necesară pentru software-ul nostru” sau Când putem spune că software-ul nostru este securizat? și Care sunt aceste standarde de securitate ?
Fraudele și amenințările la adresa securității sunt în creștere zi de zi și vedem noi varietăți și modalități de hacking, chiar și în așa-numitul software cel mai securizat.
Recent am auzit că programul Aaadhar al UIDAI a fost modificat pentru datele cu caracter personal. Prin urmare, este foarte dificil să știm câtă securitate este necesară pentru software și care sunt standardele de securitate, cu excepția cazului în care înțelegem amenințările implicate în software și le acordăm prioritate pe baza riscurilor pentru afacere.
Poate fi dificil să oferiți protecție de securitate 100% software-ului, dar dacă echipa programului analizează Riscuri și valori mobiliare care sunt implicate în software-ul lor, adică potențiale amenințări și dacă echipa se poate ocupa de atenuarea acestor riscuri, atunci ar fi bine din punctul de securitate al aplicației.
Astfel, prima sarcină a echipei este de a identifica și analiza riscurile și valorile mobiliare implicate în aplicarea lor și de a înțelege posibilele opțiuni de atenuare și de a adopta cea mai bună opțiune în consecință.
Deci, odată identificate primele zece vulnerabilități, clasifică aproape toate atacurile cu care este probabil să se confrunte un program. Acest lucru va ajuta la înțelegerea amenințărilor și la prioritizarea eforturilor de securitate și dezvoltare mai mult spre prevenire decât atenuare.
De exemplu. În timp ce intenționăm să dezvoltăm o aplicație legată de asistență medicală, care gestionează și stochează datele de sănătate ale individului și informațiile lor personale, cel mai mare risc de securitate pentru aplicație este să fure datele de sănătate personale.
Atenuarea riscurilor
Pentru a atenua riscul,
- Implementarea securității pentru accesul la date de către un utilizator neautorizat trebuie gestionată cu autentificare și autorizare corespunzătoare (implementări puternice de politici de parolă, autentificare cu 2 factori).
- Trebuie să se asigure că nu există scurgeri de date în timpul transmiterii datelor de la o sursă la alta sursă prin implementarea canalelor securizate (HTTPS) de transmitere a datelor și implementarea criptării datelor în timpul tranzitului.
- Manipularea sau furtul datelor în repaus este, de asemenea, o altă posibilitate. Prin urmare, stocarea datelor personale de sănătate (folosind criptarea) este foarte esențială.
Înainte de a merge la „Secure Coding Standard”, este întotdeauna mai bine ca întreaga echipă a programului să aibă un „Sesiune de conștientizare a securității” și să discute și să facă o brainstorming despre,
- Cerința de securitate pentru produsul lor specific.
- Posibile beneficii pe care le-ar avea un hacker prin piratarea sistemului lor.
- Modalități și mijloace posibile de compromisuri de securitate ale aplicației lor.
- Au urmat practici comune de securitate într-o industrie și domeniu similar.
- Înțelegerea problemelor tipice de securitate ale programelor respective.
De asemenea, ajută echipa să se descurce mai bine, dacă poate înțelege Surse ale vulnerabilităților cu care se poate confrunta software-ul lor și motivele pentru care este construit software-ul Slab / inadecvat Securitate .
Motive pentru implementarea necorespunzătoare a securității
În general, următoarele sunt câteva motive pentru implementarea necorespunzătoare a securității în aplicație.
- Prioritatea este dată pentru lansarea funcțională decât aspectele de securitate.
- Ignoranță sau lipsă de conștientizare cu privire la securitatea software-ului și hackeri.
- Nu este suficientă claritate asupra programului sau asupra proiectării software în sine.
- Complexitatea programului.
- Nu sunt suficiente date, informații despre sistemul live unde va fi implementat.
- Nu se ia în considerare securitatea în fazele SDLC.
- Cunoaștere și înțelegere insuficiente a specificului limbii utilizate în software.
- Nu sunt suficiente cunoștințe pentru echipă și dezvoltatori despre liniile directoare de codificare a securității.
Știm că nu toți dezvoltatorii și testerii sunt conștienți de securitatea unei aplicații și este posibil să nu aibă o înțelegere aprofundată a vulnerabilităților și exploitelor de securitate, în special a aplicației la care ar lucra. În general, vor fi familiarizați cu, „Cum se codifică funcțional” dar nu toți știu „Cum se codifică în siguranță”.
Prin urmare, aspectul foarte important pentru organizație de a adopta practici de codificare securizată în software-ul lor este de a începe „Antrenează oamenii” . Așadar, este foarte important să vă pregătiți echipa cu privire la aspectele de codificare securizată, cele mai bune practici de codificare a securității și utilizarea corectă a instrumentului.
Cel mai important principiu de proiectare al securității software este acela de a „Implementați securitatea prin proiectare și implicit” .
Ghiduri de codificare securizată
Pentru a obține securitate, este foarte esențial să aveți un „Standard de codificare sigură” identificat pentru un program chiar la începutul dezvoltării aplicației, iar acest lucru ajută echipa să aibă grijă de valorile implicite securizate ale software-ului și ajută la protejarea acestuia împotriva atacurilor.
Este esențial să vă asigurați că întreaga echipă este Forțat să adere la acest standard , indiferent de limbajul de codare și de instrumentele pe care le folosesc în program.
Mai jos sunt câteva exemple care trebuie implementate în mod implicit în proiectarea codului securizat:
- Accesul ar trebui să fie limitat doar la utilizatorii autentificați și autentificarea trebuie să fie implementată la fiecare strat.
- Canalele de comunicare trebuie criptate pentru a proteja jetoanele de autentificare.
- Toate cheile, parolele și certificatele trebuie să fie stocate și protejate corespunzător.
- Criptarea fișierelor, criptarea bazei de date și criptarea elementelor de date trebuie să fie implementate.
Selectarea limbii pentru codificare sigură
Este posibil ca selecția limbii pentru codificare să nu depindă de codificarea sigură. Nu există nimic specific ca limbaj securizat sau nesecurizat pentru codificare pentru a construi un software securizat.
Este doar modul în care folosim un limbaj de programare pentru a construi software-ul și cât de multe cunoștințe aprofundate are dezvoltatorul despre limbajul de codare în implementarea aspectelor de securitate.
Cu toate acestea, este clar că, totuși Standardele de codificare securizată sunt independente de selectarea limbii, cele mai bune practici ale codului securizat sunt dependente de limbă, de platformă și de implementare .
Astfel, pentru a avea un cod securizat, este esențial ca dezvoltatorul să aibă cunoștințe aprofundate despre limba utilizată în program, astfel încât cele mai bune practici de securitate să poată fi implementate cu ușurință.
Exemplu:
- Probabilitatea vulnerabilității la depășirea bufferului diferă de la limbă la limbă, dar C, C ++ și Assembly sunt considerate cele mai sensibile datorită capacităților lor de gestionare a memoriei învechite. Mai multe funcții C lib standard, cum ar fi strcpy () și memcpy (), sunt vulnerabile la atacurile de depășire a bufferului. Utilizarea incorectă a acestor funcții, prin copierea unui buffer sursă care este prea mare pentru a se potrivi în bufferul de destinație, duce la depășirea bufferului.
- Problema obișnuită în aplicațiile web bazate pe Java sunt posibilele scurgeri de resurse care pot apărea din cauza resurselor de sistem deschise, cum ar fi un fișier, socket și conexiuni la baza de date.
Următorul aspect al securității este legat de instrumente de utilizat în Programul de aplicații pentru optimizarea securității, folosind instrumente precum Medii de dezvoltare integrate vor fi cele mai benefice deoarece oferă o mulțime de Alerte utilizatorilor și atrageți atenția asupra acelor alerte pentru a încerca să îmbunătățiți calitatea software-ului.
- Integrarea bibliotecilor / pluginurilor comerciale sau Open-source, cum ar fi Eclipse, Spring Tool Suite, RAD cu IDE ajută dezvoltatorii să scrie cod securizat prin detectarea și identificarea codului potențial vulnerabil și oferă alerte cu privire la constatările legate de execuția fișierelor dăunătoare, scurgerea informațiilor și tratarea necorespunzătoare a erorilor.
De asemenea, este esențial să utilizați Analizoare statice și dinamice pentru a îmbunătăți aspectele de securitate ale software-ului. În general, analizorii statici sunt optimizați pentru anumite tipuri de erori, astfel încât ajung să găsească un număr mare de falsi pozitivi în timp ce identifică erori specifice. Uneori există posibilități ca și ele să rateze erorile reale.
Prin urmare, se recomandă utilizarea analizoare statice multiple pentru a obține o acoperire mai bună a diferitelor tipuri de erori și pentru a evita o mulțime de fals pozitive. Uneori, se recomandă și efectuarea testarea manuală la elimina pozitivele false .
Reguli și recomandări de codificare securizată
Va fi bine ca programul să definească un set de „Reguli și recomandări de codificare securizată” la care codul sursă poate fi evaluat pentru conformitate, astfel încât testerii să poată efectua „Testarea conformității conformității” pentru fiecare dintre aceste standarde de codificare sigure.
Prin urmare, codul de securitate poate fi certificat conform sau neconform folosind aceste reguli în raport cu criteriul de referință stabilit.
cum se scrie cazuri de testare junit în java
Puține dintre regulile menționate mai jos pot fi utilizate pentru a verifica încălcările securității:
- Fișierele trebuie închise atunci când nu mai sunt necesare.
- Ori de câte ori treceți o structură peste o graniță, scurgerile de informații trebuie evitate.
- Obiectele trebuie declarate cu durate de depozitare adecvate.
Deci, cazurile de testare pentru a verifica aceste reguli trebuie să fie proiectate și efectuate pentru a verifica conformitatea conformității. De asemenea, se identifică faptul că majoritatea vulnerabilităților sunt cauzate de erori tipice de programare obișnuite.
Prin urmare, dezvoltatorul trebuie să înțeleagă „Metodă nesigură de codificare” , în timp ce învață și cele mai bune practici de codificare securizată. Este ideal să adunați cele mai frecvente erori de programare care contribuie la vulnerabilitățile de securitate ale aplicației lor, astfel încât să poată fi îngrijite în timpul codificării.
Astfel de erori tipice de programare sunt contribuite în principal din depășirile de tampon, scripturi între site-uri și defecte de injecție.
Unele dintre vulnerabilitățile tipice de programare includ,
- Injecție SQL (Neutralizare necorespunzătoare a elementelor speciale utilizate într-o comandă SQL).
- Debordare de număr întreg.
- Buffer overflow (Buffer Copy fără a verifica dimensiunea intrării).
- Șir de format necontrolat.
- Autentificare și autorizare lipsă (autorizare incorectă).
- Expunere la date sensibile.
- Tratarea incorectă a erorilor.
Unele dintre aceste erori pot duce la blocarea sistemului, accesul neprevăzut la sistem și controlul software-ului pierdut de către hackeri.
Erori comune de programare care trebuie evitate
Câteva erori comune de programare care trebuie evitate sunt enumerate mai jos:
- Neutralizare necorespunzătoare a elementelor speciale utilizate într-o comandă SQL („SQL Injection”).
- Copiați tamponul fără a verifica dimensiunea intrării („Buffer Overflow clasic”).
- Autentificarea lipsește pentru funcția critică.
- Autorizație lipsă sau incorectă.
- Utilizarea acreditării codificate în mod dur.
- Lipsește criptarea datelor sensibile.
- Încărcare fără restricții a fișierului cu tip periculos.
- Dependența de intrări de încredere într-o decizie de securitate.
- Executarea cu privilegii inutile.
- Cross-Site Request Forgery (CSRF).
- Descărcarea codului fără verificarea integrității.
- Calcul incorect al dimensiunii bufferului.
- Restricționarea necorespunzătoare a încercărilor de autentificare excesivă.
- Redirecționarea adreselor URL către un site de încredere („Redirecționare deschisă”).
- Șir de format necontrolat.
- Utilizarea unui hash unic, fără sare.
Listă de verificare pentru practicile de cod securizat
Nu în ultimul rând, după ce au luat în considerare toate punctele de mai sus ale aspectelor Secure Software Development, dezvoltatorii trebuie să urmeze Lista de verificare stabilită pentru practicile de cod securizat pentru a se asigura că lucrurile nu sunt ratate. Mai jos sunt câteva, dar nu o listă exhaustivă.
Validare intrare:
- Nu aveți încredere în intrare, luați în considerare validarea centralizată a intrărilor.
- Nu vă bazați pe validarea din partea clientului.
- Aveți grijă la problemele de canonizare.
- Constrângeți, respingeți și igienați intrarea. Validați pentru tip, lungime, format și interval.
Autentificare:
- Site de partiție după zonă anonimă, identificată și autentificată.
- Folosiți parole puternice.
- Sprijină perioadele de expirare a parolei și dezactivarea contului.
- Nu stocați acreditările (utilizați hashuri unidirecționale cu sare).
- Criptați canalele de comunicație pentru a proteja jetoanele de autentificare.
- Treceți cookie-uri de autentificare a formularelor numai prin conexiuni HTTPS.
Autorizare:
- Folosiți conturi cu cel mai mic privilegiu.
- Luați în considerare granularitatea autorizației.
- Aplică separarea privilegiilor.
- Limitați accesul utilizatorilor la resursele la nivel de sistem.
- Utilizați protocolul OAuth 2.0 pentru autentificare și autorizare.
- Validare API Carryout.
- Metode admise pe lista albă.
- Protejați acțiunile privilegiate și colecțiile sensibile de resurse.
- Protejați-vă împotriva falsificării resurselor între site-uri (CSRF).
Managementul sesiunii:
- Creați un identificator de sesiune pe server.
- Terminați sesiunea cu Deconectare.
- Generați o nouă sesiune de re-autentificare.
- Setați atributul „securizat” pentru cookie-urile transmise prin TLS.
Criptografie:
- Utilizați criptografia în timp ce „Date în tranzit, Date stocate, Date în mișcare, Integritatea mesajelor”.
- Nu vă dezvoltați propriul. Utilizați funcții de platformă încercate și testate.
- Păstrați datele necriptate aproape de algoritm.
- Utilizați algoritmul corect și dimensiunea cheii.
- Evitați gestionarea cheilor (utilizați DPAPI).
- Ciclează-ți tastele periodic.
- Stocați cheile într-o locație restricționată.
Logare și audit:
- Identificați comportamentul rău intenționat.
- Aflați cum arată traficul bun.
- Auditați și jurnalizați activitatea prin toate nivelurile aplicației.
- Acces securizat la fișierele jurnal.
- Faceți backup și analizați în mod regulat fișierele jurnal.
Codare ieșire:
- Realizare „Validare intrare (XML, JSON ....).
- Utilizați interogare parametrizată.
- Efectuați „Validarea schemei”.
- Efectuați codificarea (XML, JSON ..).
- Trimiteți antete de securitate.
Referinţă: ' Lista de verificare OWASP Secure Coding Practices (Pe scurt, Lista de verificare SCP) '
Rezumatul tabelar al listei de verificare a codificării sigure
Tabelul de mai jos rezumă „Lucruri de reținut pentru un cod securizat” a unei cereri.
# | Ce? |
---|---|
7 | Pentru a vă asigura că întreaga echipă este obligată să adere la standardul de codificare sigură. |
1 | Pentru a înțelege clar „Ce este codul securizat”? |
Două | Pentru a înțelege „Sursele vulnerabilităților” comune. |
3 | Pentru a efectua „Sesiunea de conștientizare a securității” către echipă. |
4 | Pentru a identifica și analiza „Riscuri și valori mobiliare” implicate în aplicație și metodele de „Atenuare”. |
5 | Pentru a „instrui echipa” cu privire la standardele de codificare sigură, cele mai bune practici și liniile directoare. |
6 | Pentru a defini „Secure Coding Standard” |
8 | Pentru a utiliza „Limbajul ușor de implementat” și pentru a avea „cunoștințe aprofundate” despre acesta. |
9 | Pentru a utiliza instrumentele IDE (Integrated Development Environment) |
10 | Pentru a utiliza „Analizoare statice și dinamice” și „Analizoare statice multiple” pentru a elimina „Pozitivele false” |
unsprezece | Pentru a efectua „testarea manuală” ori de câte ori este necesar pentru a identifica eroarea, pierdeți eșecurile. |
12 | Pentru a defini un set de „Reguli și recomandări de codificare securizată” |
13 | Pentru a efectua „Testarea conformității conformității” pentru regulile stabilite. |
14 | Pentru a înțelege „Metoda nesigură de codificare” și a aduna „Erori comune de programare”. |
cincisprezece | Pentru a respecta cu strictețe „Lista de verificare SCP” |
Concluzie
Sperăm că acest tutorial va fi cel mai bun ghid pentru asigurarea securității software-ului.
Liniile directoare de codificare pentru dezvoltarea de software securizat au fost enumerate aici în termeni simpli cu exemple pentru înțelegerea ușoară a conceptului.
Lectura placuta!!
Lectură recomandată
- Testarea securității (Un ghid complet)
- Topul celor mai bune 30 de companii de securitate cibernetică din 2021 (întreprinderi mici până la întreprinderi)
- Bazele programării pe calculator pentru începători Tutorial de codare
- Top 15 cei mai buni editori de coduri gratuite pentru o experiență de codificare perfectă
- Tutorial SQL Testing Injection (Exemplu și prevenirea atacului SQL Injection)
- Dezvoltatorii nu sunt buni testeri. Ce spui?
- ISTQB Foundation Exam Format & Guidelines To Solve Papers
- Instrucțiuni de testare a securității aplicațiilor mobile