CL-CPA

Új C és C++ Secure Coding ARM

Részvételi forma
Képzési Forma
Képzés hossza
  • 3 nap (3×8 tanóra)
  • naponta 9:00 - 17:00
Elérhető képzési nyelvek
  • Magyar
Időpontok
Szeretne a témában testre szabott megoldást, csoportos képzést?
Egyedi képzési szolgáltatásainkról részletesen itt olvashat.

Ismertető

A C/C++ kód megírása aknamező lehet, a memóriakezeléstől kezdve a régi kódok kezelésén át az éles határidőkig és a kód karbantarthatóságáig terjedő okok miatt. Mindezeken túl azonban mi lenne, ha azt mondanánk, hogy a támadók éppen most próbálnak betörni az Ön kódjába? Mennyire valószínű, hogy sikerrel járnának?

 

Ez a tanfolyam megváltoztatja azt, ahogy a C/C++ kódjára tekint. Megtanítjuk a gyakori gyengeségeket és azok következményeit, amelyek lehetővé teszik a hackerek számára, hogy megtámadják a rendszerét, és - ami még fontosabb - a legjobb gyakorlatokat, amelyeket alkalmazhat a védelme érdekében. Holisztikus képet adunk a C/C++ programozási hibákról és azok ellenintézkedéseiről a gépi kód szintjétől a virtuális függvényekig és az operációs rendszer memóriakezeléséig. Az egész tanfolyamot élő gyakorlati feladatokon keresztül mutatjuk be, hogy az izgalmas és szórakoztató legyen.

 

A biztonságos kód írása egyértelmű előnyhöz juttathatja Önt versenytársaival szemben. Az Ön választása, hogy a mezőny előtt akar-e járni - tegyen egy lépést, és legyen a kiberbűnözés elleni harc egyik meghatározó szereplője.

Tematika

  • Az IT biztonságtól a biztonságos programozásig: Mi a kockázat? IT-biztonság vs. biztonságos kódolás, a sebezhetőségektől a botnetekig és a kiberbűnözésig, a biztonsági hibák természete, a fertőzött számítógéptől a célzott támadásokig, A biztonsági hibák osztályozása, Landwehr taxonómiája, a hét ártalmas királyság.
  • ARM gépi kód, memóriaelrendezés és stack műveletek: ARM processzorok (fő regiszterek, legfontosabb parancsok, flags és feltételmezők, control instructions, stack handling instructions), az összetett ARM utasítások megértése, a függvényhívási mechanizmus az ARM-ben, a helyi változók és a stack frame, a függvényhívások - egy függvény prológusa és epilógusa, stack frame a beágyazott hívásokban, stack frame a rekurzív függvényekben.
  • Puffer túlcsordulás (buffer overflow), Stack túlcsordulás (stack overflow): puffer túlcsordulás a stack-en, a visszatérési cím felülírása. Védekezési módok a Stack túlcsordulás ellen: speciális védelmi módszerek, védelmi módszerek különböző rétegeken, a szoftverbiztonság védelmi mátrixa, Stack túlcsordulás megelőzés (fejlesztés során) és felismerés (végrehajtás közben), Fortify fordító opció (FORTIFY_SOURCE). Stack smashing protection: variánsai, védelem a GCC-ben, hatásai (prológus, epilógus), megkerülése, az algoritmusok felülírása – mitigáció. Address Space Layout Randomization (ASLR): randomizálás, gyakorlati gyengeségek és korlátok, megkerülés (NOP sledding). Nem futtatható memóriaterületek - az NX bit: hozzáférés-szabályozás a memóriaszegmensekhez, a Never eXecute (NX) bit. Visszatérés-orientált programozás (ROP): a memória végrehajtás elleni védelem megkerülése, Return-to-libc támadás ARM-ben, ROP gadget (regiszterkitöltés konstansokkal, memóriaírás), ROP gadgetek kombinálása, valódi ROP támadási forgatókönyvek, ROP hatásainak enyhítése, a ROP-támadás enyhítési technikái.
  • Heap túlcsordulás (heap overflow): memória allokáció kétszeresen láncolt listákkal, puffer túlcsordulás a heap-en, a szabad területek felszabadítása és egyesítése, allokált memóriablokkok felszabadítása. Esettanulmány – Heartbleed: TLS Heartbeat kiterjesztés, Heartbleed - információszivárgás az OpenSSL-ben, Heartbleed - javítás a v1.0 1g-ben. Védelem a heap túlcsordulás ellen.
  • Gyakorlati kriptográfia: kriptoszisztémák, szimmetrikus kulcsú kriptográfia (bizalmasság biztosítása, titkosítási algoritmusok, működési módok, szimmetrikus titkosítás OpenSSL-el (titkosítás, visszafejtés), egyéb kriptográfiai algoritmusok (Hash vagy message digest, Hash algoritmusok, SHAttered, Hashelés OpenSSL-lel, üzenethitelesítési kód (MAC), integritás és hitelesség biztosítása szimmetrikus kulccsal, véletlenszám-generálás - véletlenszámok és kriptográfia, kriptográfiailag erős PRNG-k, gyenge PRNG-k C és C++ nyelven, erősebb PRNG-k C nyelven, véletlenszámok generálása OpenSSL-lel, hardveralapú TRNG-k). Aszimmetrikus (public-key) kriptográfia (bizalmasság biztosítása, ökölszabály – a private key birtoklása, RSA algoritmus – bevezetés, titkosítás, szimmetrikus és aszimmetrikus algoritmusok kombinálása, digitális aláírás, OpenSSL – aszimmetrikus titkosítás, digitális aláírás). Nyilvános kulcsú infrastruktúra (PKI): Man-in-the-Middle (MitM) támadás, digitális tanúsítványok MitM-támadás ellen, tanúsítványhivatalok a nyilvános kulcsú infrastruktúrában, X.509 digitális tanúsítvány.
  • XML Biztonság: injektálás, védelem szanálással és XML-érvényesítéssel, XML-elemzés C++ nyelven, az XML entitással való visszaélés (XML Entity bevezetés, XML bomba, XML külső entitással kapcsolatos támadás (XXE) - erőforrás bevonása, XXE támadás, az entitásokkal kapcsolatos támadások megelőzése, Esettanulmány - XXE a Google eszköztárban.
  • A szolgáltatás megtagadása: DoS bevezetés, aszimmetrikus DoS, szabályos kifejezéses DoS (ReDoS) (gyakorlat, esettanulmány – ReDoS a Stack Exchange-n), Hashtable ütközéses támadás (Hashtáblák használata adatok tárolására, Hashtable ütközés)
  • Gyakori kódolási hibák és sebezhetőségek: helytelen error és kivételkezelés, tipikus problémák a hiba- és kivételkezeléssel, üres catch blokk, túlságosan széleskörű catch blokk. ErrorHandling, hibakezelés.
  • Kódminőségi problémák: a rossz kódminőségből eredő veszélyek, nem közzétett erőforrások, típuseltérés, memória allokálási problémák (Intelligens mutatók, zero hosszúságú allokáció, double free, delete és delete [] vegyítése), use after free (egy osztály példája, a hiba kiszúrása, Use after free- Dangling pointer, esettanulmány – WannaCry.
  • Input validáció: fogalmak, koncepciók, egész számokkal kapcsolatos problémák (a negatív egész számok ábrázolása, egész számtartományok, egész számok túlcsordulása, egész számokkal kapcsolatos problémák C/C++ nyelven, az egész számok előléptetési szabálya C/C++-ban, aritmetikai túlcsordulás, IntOverflow, mekkora az abs(INT_MIN) értéke?, aláírtsági hiba, egész számok csonkítása, egész szám probléma, esettanulmány - Android Stagefright), Printf format string bug (karakterláncok, hiba – kihasználás), néhány egyéb bemeneti érvényesítési probléma (Array indexelés, off-by-one és más null termination errors, Unicode hiba), az elérési útvonalat átszelő sebezhetőség (Útvonaltúllépés – gyenge védelem és legjobb gyakorlatok), naplóhamisítás.
  • A biztonsági funkciók nem megfelelő használata: tipikus problémák, jelszókezelés (a hashed jelszavak gyengeségei, jelszókezelés és tárolás, különleges célú hash-algoritmusok jelszavak tárolására, Argon2 és PBKDF2 implementációk C/C++ nyelven, bcrypt és scrypt implementációk C/C++ nyelven, esettanulmány - az Ashley Madison adatainak megsértése, tipikus hibák a jelszókezelésben, hard coded jelszavak).
  • Érzékeny információk a memóriában: titkok védelme, a támadási felület minimalizálása, a titkaid vs. dinamikus memória, zeroisation, zeroisation vs. optimalizálás, az érzékeny adatok másolatai a disk-en, magdömping, a magdömping letiltása, felcserélés, memóriazárolás – a swapolás megakadályozása, problémák a lapzárolással, legjobb gyakorlatok.
  • Idő- és állapotproblémák: idővel és állapottal kapcsolatos problémák, Serialization errors, TOCTTOU, legjobb gyakorlatok a TOCTTOU ellen.
  • Tanácsok &eacut

Szükséges előképzettség

  • Programozási ismeretek és legalább kétéves gyakorlat C vagy C++ környezetben. x86 architektúra és assembly nyelv alapfokú ismerete, valamint alapvető kriptográfiai fogalmak és módszerek alapfokú gyakorlati ismerete ajánlott. Mivel a tananyag angol nyelvű, ezért alapfokú, dokumentumolvasás-szintű angol nyelvtudás szükséges. Az előadás angol nyelven zajlik.