Részvételi forma

Képzés hossza

3 nap (3×8 tanóra)
naponta 9:00 - 17:00

Időpontok

Képzés ára

656 000 Ft
+ ÁFA/fő
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 írása a memóriakezeléstől kezdve a régebbi kódok kezelésén át az éles határidőkig és a kód karbantarthatóságáig sokféle okból nehéz lehet. De mindezen túl 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 a C/C++ kódoddal kapcsolatos szemléletét. 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 a saját védelme érdekében alkalmazhat. 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 képzés egész ideje alatt élő gyakorlati feladatokat fogunk bemutatni, hiszen a képzés erőssége a részvevők aktív bevonásával végrehajtott gyakorlatokban rejlik. Tapasztalatunk szerint csak ezek bemutatásával döbbenthetjük rá igazán a programozókat arra, hogy milyen egyszerű az általuk vétett hibák kihasználása. A bemutatott korrekt programozási technikák és a védekezési módok viszont egyértelművé teszik, hogy a programokban lévő biztonsági hibák hatékonyan kiküszöbölhetőek.

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

A képzés programozóknak, fejlesztőknek, szoftvertervezőknek, tesztelőknek, biztonsági szakembereknek ajánljuk, akik szeretnék megismerni a minél biztonságosabb programok, alkalmazások készítésének professzionális technikáit C/C++ környezetben.

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.
  • x86 gépi kód, memóriaelrendezés és stack műveletek: Intel 80x86 processzorok (fő regiszterek, legfontosabb parancsok, flags, control instructions, stack handling és flow control), a memóriacímek megjelenítése, a függvényhívási mechanizmus a C/C++-ban x86-on, hívási konvenciók, 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 túlcsordulá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, a szoftverbiztonság védelmi mátrixa. Address Space Layout Randomization (ASLR): randomizálás, gyakorlati gyengeségek és korlátok, megkerülés (NON sledding). Nem futtatható memóriaterületek - az NX bit: hozzáférés-szabályozás a memóriaszegmensekhez, a Never eXecute (NX) bit. Return-to-libc attack - az NX bit védelem megkerülése. A memória végrehajtás elleni védelem megkerülése, visszatérés-orientált programozás (ROP): felfedezés ROP-pal, ROP modulok, 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. Védekezési módok. 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 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.
  • 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. Esettanulmány - "#iamroot" hitelesítés megkerülése a macOS-ben: hitelesítési folyamat a macOS-ben (High Sierra), hibás hibakezelés az opendirectoryd-ben, az #iamroot sebezhetőség (CVE-2017-13872).
  • 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 (WannaCry zsarolóprogram, a WannaCry mögött meghúzódó sebezhetőség, tanulságok).
  • Input validáció: 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, esettanulmány - Android Stagefright), Printf format string bug (karakterláncok, hiba – kihasználás, visszatérési cím felülírása), 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).
  • Idő- és állapotproblémák: idővel és állapottal kapcsolatos hibák, Serialization errors, TOCTTOU, legjobb gyakorlatok a TOCTTOU ellen.
  • Tanácsok és elvek: fejlesztőknek és üzemeltetőknek, Saltzer és Schröder biztonsági elvei, Matt Bishop robusztus programozási elvei, referenciák, további források, sérülékenység adatbázisok, összefoglaló.

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.