Biztonságos programozás C/C++ környezetben

CL-CSC

Biztonságos kódok és alkalmazások készítése C és C++ környezetben

Képzési forma:
Képzés hossza:
2 nap (16 óra)
Képzés nyelve:
Magyar/Angol
2023.
április
03.
Normál
2023.
november
13.
Normál
Képzési forma:
Normál
Képzés hossza:
2 nap (16 óra)
Képzés nyelve:
Magyar/Angol
2023.
április
03.
2023.
november
13.

Ismertető

A C/C++ programnyelv biztonsági szempontból valódi rémálom. A nyelvben és a tipikus használati módokban rejlő gyenge pontokból fakadóan szinte művészet biztonsági szempontból hibamentes kódot írni: olyat, amely semmilyen, a hackerek által kihasználható sérülékenységet nem tartalmaz.

Ismerkedjen meg a tipikus biztonsági hibákkal, a gyakorlatok során tapasztalja meg a hackelés élményét, és tanulja meg a korrekt programozási technikákat valamint a védekezési módok működési mechanizmusait! Szerezzen a mindennapi munkában nélkülözhetetlen biztonságos programozási tapasztalatot, hogy elkerülhesse a fejlesztett termékek elleni támadásokat.

A profi hackerek által használatos támadási módok megismerése rávilágít arra, hogy milyen egyszerű egy-egy veszélytelennek tűnő hibát kihasználni, és milyen súlyosak lehetnek a következmények. A hibák okát minden esetben könnyen érthető példaprogramokon keresztül szemléltetjük, amelyeken egyszersmind a védekezési módok használatát is bemutatjuk. Egyrészt a forráskód módosításával megmutatjuk a korrekt programozási technikákat, másrészt pedig ismertetjük, és a gyakorlatban bemutatjuk azokat a szolgáltatásokat, amelyekkel a már a forráskódban lévő hibák elkerülhetőek, felismerhetőek, illetve kihasználásuk nehezíthető vagy esetenként teljesen meggátolható.

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 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. A képzés egyedi formában is elérhető más fejlesztői környezettel, technológiával összevonva.

  • Az IT biztonságtól a biztonságos programozásig: általános vs. IT biztonság, biztonsági fogalmak, a kockázat fogalma, biztonsági követelmények, biztonságos programozás, a sérülékenységektől a szervezett bűnözésig, a biztonsági rések jellege, kategóriái.
  • Biztonsági szempontból releváns C/C++ hibák: tipikus biztonsági szempontból veszélyes hibák, kihasználható sérülékenységek, általános és specifikus védekezési módok, védekezés különböző szinteken (hardware, operációs rendszer, fordítóprogram, forráskód, fejlesztőeszközök).
  • Az x86 architektúra alapjai: gépi kód és assembly (regiszterek, parancsok, futás kontrol, stack kezelő utasítások), memóriaszervezés, stack szervezése, függvényhívások mechanizmusa.
  • Stack túlcsordulás (stack overflow): puffer túlcsordulás a stack-en, a visszatérési cím felülírása, a visszatérési cím azonosítása a stack-en. Védekezési módok: buffer security check / stack smashing protection, variánsai, használata és kijátszása; Address Space Layout Randomization (ASLR) és kijátszása (NOP sled, heap spraying), software ASLR; a processor no-execute bitje és a Data Execution Prevention (DEP), kijátszása (return-to-libc támadás).
  • 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. Védekezési módok. A delete and delete[] felcseréléséből eredő problémák.
  • C/C++ integer problémák: negatív számok ábrázolása, kettes komplemens használata, integer tartományok, problémák típusai (ábrázolási szélesség keverése, előjeles és nem előjeles számok keverése, aritmetikai túlcsordulás), integer kiterjesztés (promotion) szabályok, az abszolút érték képzés ellentmondásai, példák a valós életből. Védekezés: korrekt aritmetikai kifejezések, biztonságos programkönyvtárak használata.
  • Printf format string (PFS) bug: mechanizmusa, egyszerű kihasználás, kihasználás a visszatérési érték felülírásával. Védekezési módok.
  • Egyéb tipikus biztonsági szempontból veszélyes hibák: tömb indexelés, unicode bug, információ szivárgás side channel támadással, szerializációs hibák temp file létrehozásakor és signal-ok használatakor, file I/O kockázatok (Directory Traversal Vulnerability, Symbolic Link Vulnerability)
  • Az RSA elleni időalapú támadás (timing attack): RSA alapok, implementáció, a fast exponentiation algoritmus, a futásidő méréséből fakadó támadhatóság, mérések végzése, korreláció számítása, az RSA elleni időalapú támadás a gyakorlatban (chip-kártya és SSL szerver támadása). Védekezési módok: vakaláírás (blind signature) használata.
  • Tanácsok és elvek: fejlesztőknek és üzemeltetőknek, Saltzer és Schröder 8 elve, Matt Bishop robusztus programozási elvei, referenciák, további források, sérülékenység adatbázisok, összefoglaló.

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 magyar nyelven zajlik.