Schița de curs
Ziua 1
Securitatea IT și codificarea sigură
- Natura securității
- Termeni legați de securitatea IT
- Definiția riscului
- Diferite aspecte ale securității IT
- Cerințe pentru diferite domenii de aplicare
- Securitatea IT vs. codificarea sigură
-
De la vulnerabilități la botnet-uri și infracționalitate cibernetică
- Natura defectelor de securitate
- Motivele dificultății
- De la un computer infectat la atacuri țintite
-
Clasificarea defectelor de securitate
- Taxonomia lui Landwehr
- Cele Șapte Regate Perverse
- OWASP Top Ten 2013
- Comparație OWASP Top Ten 2003 – 2013
Introducere în Microsoft® Security Development Lifecycle (SDL)
- Agenda
-
Aplicații sub atac...
- Evoluția infracționalității cibernetice
- Atacurile se concentrează pe aplicații
- Majoritatea vulnerabilităților sunt în aplicațiile ISV mici
-
Originile Microsoft SDL...
- Cronologia securității la Microsoft...
- Care aplicații sunt obligate să urmeze SDL?
-
Microsoft Security Development Lifecycle (SDL)
- Microsoft Security Development Lifecycle (SDL)
- Cerințe pre-SDL: Formare în securitate
- Faza Unu: Cerințe
- Faza Doi: Proiectare
- Faza Trei: Implementare
- Faza Patru: Verificare
- Faza Cinci: Lansare – Plan de răspuns
- Faza Cinci: Lansare – Revizuire finală de securitate
- Faza Cinci: Lansare – Arhivare
- Cerință post-SDL: Răspuns
- Ghid de proces SDL pentru aplicații LOB
- Ghid SDL pentru metodologii Agile
- Dezvoltarea de software sigur necesită îmbunătățirea procesului
Principii de proiectare sigură
-
Suprafața de atac
- Reducerea suprafeței de atac
- Suprafața de atac – un exemplu
- Analiza suprafeței de atac
- Reducerea suprafeței de atac – exemple
-
Confidențialitate
- Confidențialitate
- Înțelegerea comportamentelor și preocupărilor aplicațiilor
-
Apărare în profunzime
- Principiul de bază SDL: Apărare în Profunzime
- Apărare în profunzime – exemplu
-
Principiul privilegiului minim
- Privilegiu minim – exemplu
-
Setări implicite sigure
- Setări implicite sigure – exemple
Principii de implementare sigură
- Agenda
- Microsoft Security Development Lifecycle (SDL)
-
Bazele depășirii buffer-ului
- Procesoare Intel 80x86 – registre principale
- Layout-ul adreselor de memorie
- Mecanismul de apelare a funcțiilor în C/C++ pe x86
- Variabilele locale și cadrul stivei
-
Depășirea stivei
- Depășirea buffer-ului pe stivă
- Exerciții – introducere
- Exercițiul BOFIntro
- Exercițiul BOFIntro – determinarea layout-ului stivei
- Exercițiul BOFIntro – un exploit simplu
-
Validarea intrărilor
- Concepte de validare a intrărilor
-
Probleme cu numerele întregi
- Reprezentarea numerelor întregi negative
- Depășirea numerelor întregi
- Depășirea aritmetică – ghiciți rezultatul!
- Exercițiul IntOverflow
- Care este valoarea lui Math.Abs(int.MinValue)?
-
Atenuarea problemelor cu numerele întregi
- Atenuarea problemelor cu numerele întregi
- Evitarea depășirii aritmetice – adunare
- Evitarea depășirii aritmetice – înmulțire
- Detectarea depășirii cu cuvântul cheie checked în C#
- Exercițiu – Utilizarea cuvântului cheie checked în C#
- Excepții declanșate de depășiri în C#
-
Studiu de caz – Depășirea numerelor întregi în .NET
- O vulnerabilitate reală de depășire a numerelor întregi
- Exploatarea vulnerabilității de depășire a numerelor întregi
-
Vulnerabilitatea de traversare a căilor
- Atenuarea vulnerabilității de traversare a căilor
Ziua 2
Principii de implementare sigură
-
Injecție
- Metode tipice de atac prin injecție SQL
- Injecție SQL oarbă și bazată pe timp
- Metode de protecție împotriva injecției SQL
- Injecție de comenzi
-
Autentificare defectuoasă – gestionarea parolelor
- Exercițiu – Slăbiciunea parolelor hash-uite
- Gestionarea și stocarea parolelor
- Algoritmi de hash specializați pentru stocarea parolelor
-
Cross-Site Scripting (XSS)
- Cross-Site Scripting (XSS)
- Injecție CSS
- Exploatare: injecție prin alte tag-uri HTML
- Prevenirea XSS
-
Lipsa controlului de acces la nivel de funcție
- Filtrarea încărcărilor de fișiere
-
Criptografie practică
- Asigurarea confidențialității cu criptografia simetrică
- Algoritmi de criptare simetrică
- Cifruri pe blocuri – moduri de operare
- Hash sau digest de mesaj
- Algoritmi de hash
- Cod de autentificare a mesajelor (MAC)
- Asigurarea integrității și autenticității cu o cheie simetrică
- Asigurarea confidențialității cu criptografia cu cheie publică
- Regulă generală – posesia cheii private
- Greșeli tipice în gestionarea parolelor
- Exercițiu – Parole hardcodate
- Concluzie
Principii de verificare sigură
- Testare funcțională vs. testare de securitate
- Vulnerabilități de securitate
- Priorizare
- Testarea securității în SDLC
- Pașii de planificare a testelor (analiza riscului)
-
Definirea scopului și colectarea informațiilor
- Părți interesate
- Active
- Suprafața de atac
- Obiective de securitate pentru testare
-
Modelarea amenințărilor
- Modelarea amenințărilor
- Profilele atacatorilor
- Modelarea amenințărilor bazată pe arbori de atac
- Modelarea amenințărilor bazată pe cazuri de utilizare/abuz
- Cazuri de utilizare/abuz – un exemplu simplu de magazin online
- Abordarea STRIDE pe elemente pentru modelarea amenințărilor – MS SDL
- Identificarea obiectivelor de securitate
- Diagramare – exemple de elemente DFD
- Diagramă de flux de date – exemplu
- Enumerarea amenințărilor – STRIDE și elementele DFD ale MS SDL
- Analiza riscului – clasificarea amenințărilor
- Modelul de clasificare a riscurilor DREAD
-
Tehnici și instrumente de testare a securității
- Abordări generale de testare
- Tehnici pentru diverse etape ale SDLC
-
Revizuirea codului
- Revizuirea codului pentru securitatea software
- Analiza de contaminare
- Euristici
-
Analiza statică a codului
- Analiza statică a codului
- Exercițiu – Utilizarea instrumentelor de analiză statică a codului
-
Testarea implementării
- Verificare manuală în timp real
- Testare manuală vs. automată a securității
- Testare de penetrare
- Teste de stres
-
Fuzzing
- Testare automată a securității – fuzzing
- Provocări ale fuzzing-ului
-
Scanere de vulnerabilități web
- Exercițiu – Utilizarea unui scaner de vulnerabilități
-
Verificarea și întărirea mediului
- Sistemul comun de notare a vulnerabilităților – CVSS
- Scanere de vulnerabilități
- Baze de date publice
-
Studiu de caz – Bypass-ul autentificării prin formulare
- Vulnerabilitatea de terminare NULL byte
- Vulnerabilitatea Bypass-ului autentificării prin formulare în cod
- Exploatarea vulnerabilității Bypass-ului autentificării prin formulare
Surse de cunoștințe
- Surse de codificare sigură – un kit de început
- Baze de date de vulnerabilități
- Ghiduri de codificare sigură .NET la MSDN
- Fișe de sinteză pentru codificarea sigură .NET
- Cărți recomandate – .NET și ASP.NET
Mărturii (5)
Numerous exemple pentru fiecare modul și o mare cunoaștere a instrutorului.
Sebastian - BRD
Curs - Secure Developer Java (Inc OWASP)
Tradus de catre o masina
Modulul 3 Aplicații Atacuri și Exploatări, XSS, injecție SQL Modulul 4 Servere Atacuri și Exploitări, DoS, BOF
Tshifhiwa - Vodacom
Curs - How to Write Secure Code
Tradus de catre o masina
Informații generale despre curs
Paulo Gouveia - EID
Curs - C/C++ Secure Coding
Tradus de catre o masina
Cunoașterea instrctorului în privința subiectului a fost excelentă, iar modul în care sesiunile erau structurate pentru ca audiența să poată urma demonstrațiile a ajutat cu adevărat la consolarea acestei cunoștințe, față de a doar sta și asculta.
Jack Allan - RSM UK Management Ltd.
Curs - Secure Developer .NET (Inc OWASP)
Tradus de catre o masina
Nu era nimic, era perfect.
Zola Madolo - Vodacom
Curs - Android Security
Tradus de catre o masina