Hogy ne a saját kárunkon tanuljunk
Ha biztonságos alkalmazásokat akarunk készíteni, nem árt, ha szakembereinket felvértezzük különböző programozási technikákkal. De ne gondoljuk, hogy csak egyes kiemelt személyeket kell kiképeznünk! Az egész csapat (beleértve fejlesztőket, tesztelőket, vezetőket) biztonsági felkészítését tartsuk szem előtt!A hackereknek egyetlen rés is elég, ne a cég presztízse legyen a tandíj!
Miért van szükség a biztonságos programozás oktatására?
Bennünket, a szoftverbiztonsággal foglalkozó szakembereket gyakran megdöbbent, hogy az átlagos programozók mennyire járatlanok abiztonságos programozás területén. Sokszor az sem teljesen egyértelmű számukra, hogy a hírekben megjelenő támadások zömét biztonsági rések, azaz végső soron programozók által elkövetett hibák – tehát bugok – teszik lehetővé. Persze, ha jobban belegondolunk, ez tulajdonképpen nem meglepő.
A különböző egyetemi kurzusok, egyéb tanfolyamok megtanítanak programozni, algoritmusokat és struktúrákat létrehozni, API-kat használni, de nem igazán térnek ki azokra a trükkökre, elkövethető hibákra, amelyek biztonsági szempontból fontosak lehetnek. Korábban még az sem volt ritka, hogy egy programozási tankönyvet valahol felcsapva, az oldalon található példaprogram biztonsági sérülékenységet tartalmazott.
Ugyanakkor a szoftverfejlesztő cégek erőforrásai sajnálatos módon – de a dolgok természetéből fakadóan – mindig erősen korlátozottak. Örülnek, ha a szoftver időre elkészül és működik. Ennek megfelelően a program biztonsága mindaddig nem kap hangsúlyt, amíg meg nem támadják. Megjegyzem: attól a pillanattól kezdve viszont egy ideig kiemelt, sokszor túlzott fontosságot tulajdonítanak neki – amíg az első ijedtség el nem múlik.
Szerencsére mára sokan belátták, hogy ez a helyzet tarthatatlan. A biztonsági megfontolások a termék életciklusának minden fázisában megjelentek, a követelmények lefektetésétől a tervezésen és az implementáción keresztül egészen a tesztelésig, az üzembe helyezésig és a üzemeltetésig.
Ne feledjük: ahhoz, hogy egy termék biztonsági szempontból kikezdhetetlen legyen, a szoftvereseknek – elméletben legalábbis – minden, ismétlem: MINDEN biztonsági rést meg kell találniuk és ki kell küszöbölniük, miközben a támadóknak elég lehet EGYETLEN EGY bennmaradt hibát megtalálniuk és kihasználniuk céljuk elérésére érdekében. Ebből egyrészt az következik, hogy naiv dolog azt gondolni, hogy létezik 100 százalékos biztonság – ez egy örökös macska-egér játék. Másrészt pedig az, hogy hiába rendelünk biztonsági szakembert egy szoftverprojekthez, hiszen ami számít, az a fejlesztésben résztvevő tervezők, fejlesztők és tesztelők összességének átlagos biztonsági felkészültsége.
A megoldás tehát az oktatás.
Mi a különbség a biztonsági tesztelés és az etikus hackelés között?
Az etikus hackelés napjaink bűvszava. Valljuk be: jól hangzik. A jó oldalon álló hacker egy kicsit olyan, mint Robin Hood, vagyis mindennek van egy kis romantikus mellékzöngéje is.
Tény: mind a biztonsági tesztelő, mind pedig a hacker (akár etikus, akár kevésbé az) célja, hogy biztonsági réseket találjon.
Fontos különbség azonban, hogy a hackelés célja a biztonsági hibák kihasználása – etikus esetben azért, hogy a betörést, adatlopást vagy hasonló támadások lehetőségét demonstráljuk.
Ezzel szemben a tesztelő nem érdekelt a kihasználás demonstrálásában. Ha már egyszer kimutatta a hibát, miért töltené az időt a kiaknázásával? A tesztelőnek ugyanis elsődleges célja, hogy minél több hibát megtaláljon: elég, ha a hiba ismert, a következő lépés a javítás.
Mennyire tudatosak a cégek? Tisztában vannak a biztonsági kockázatokkal?
Ha az ember rákeres az „IT security” (informatikai biztonság) kifejezésre, a találatok nagy része valamilyen módon a „corporate security” (vállalati biztonság) témakörébe esik, tehát a vállalat adatainak a védelméről szól. Sok cégnél a fejlesztett termék biztonságát is – miután ráébredtek ennek jelentőségére – jobb híján a cég biztonságáért felelős csoport hatáskörébe rendelték.
Ez nyilvánvalóan a semminél több, de az ideálistól messze van, hiszen a termékbiztonságot teljesen más megfontolások vezérlik, mint a vállalati biztonságot. Az előbbinek több köze van a különböző mérnöki tevékenységekhez, a termékfejlesztési életciklus egyes lépéseihez, mint a jelszavak erősségéhez vagy a VPN használatához.
Ami a biztonságos programozás oktatását illeti, a nemzetközi szoftveriparban az ezredforduló óta mindinkább megerősödik az a szemlélet, hogy ha biztonságos terméket szeretnének fejleszteni, akkor hosszú távon az alkalmazottakba a legérdemesebb befektetni.
Szerves részét képezi az oktatás például a Microsoft Security Development Lifecycle módszertannak is, és a cégek már jelentős részt biztosítanak biztonsági büdzséjükből munkatársaik továbbképzésére. Az oktatás ugyanis a gyökerénél ragadja meg a biztonság kérdését: a szoftverfejlesztőknél (beleértve a tervezőket és tesztelőket is).
Hogyan frissítik a szakértők a tudásukat?
Mint biztonsági tesztelő és elemző, ez az egyik legfontosabb. Nap mint nap új fenyegetések, támadási technikák jelennek meg. Ezekről első kézből értesülünk, és szinte automatikusan, sokszor már másnapra naprakészek leszünk.
A szakirodalom és az IT biztonsági portálok azonban nem az egyetlen forrásunk… Cipőt a cipőboltból: ha támadási technikákról akarunk hallani, a legjobb, ha magukhoz a hackerekhez fordulunk. Folyamatosan keressük és figyeljük a „sötét oldal” fórumait. Az egyes technológiákkal kapcsolatban itt megjelenő legújabb támadásokat – ezek néha csak ötlet szintjén kidolgozottak – magunk is kipróbáljuk, és a tapasztalatainkat beemeljük a tananyagba.
Hogyan történik az oktatás?
A leghatékonyabb és legátfogóbb természetesen a tantermi képzés. Ezeken a résztvevők számos gyakorlat segítségével sajátíthatják el a tudnivalókat. Ki-ki maga kipróbálhatja a látott módszereket.
Tapasztalatom szerint a sérülékenységek bemutatásán túl a kiaknázásukkal végrehajtott, demonstrált támadás az, amin keresztül a programozók és tesztelők igazán megértik, hogy egy-egy kódolási megoldás miért annyira veszélyes. Nincs annál megdöbbentőbb, mint a gyakorlatban látni egy sérülékeny kód következményeit. Végül, de nem utolsósorban, a hackelés élvezetessebbé teszi a sokszor tetemes tananyag elsajátítását.
Melyek a legnépszerűbb képzések?
Már évek óta a Java és a C/C++ tréningekre van a legnagyobb igény. Ez utóbbi szakmailag a legérdekesebb, mivel a számítógép, az operációs rendszer és a fordítóprogramok valóban bitszintű ismeretével indul, ami nélkülözhetetlen a különböző sérülékenységek, támadási módok és védekezési technikák megismeréséhez és megértéséhez.
A Java platform biztonsági réseiről mostanában egyre többet hallunk. Szinte folyamatosan újabbnál újabb támadásokkal vagyunk kénytelenek felkészülni. Az utóbbi időben egyébként nagy az érdeklődés a .NET tréning iránt is, a közeljövőben pedig egyértelműen a mobil platformok biztonságával kapcsolatos kurzusok lesznek a favoritok.
A tesztelők mit tanulhatnak mindebből?
Nem csak a helyes programozási gyakorlatokat, illetve azokat a technikákat lehet megtanulni, amelyekkel a hibák a forráskód vagy a bináris szintjén detektálhatók és rendszer szinten elkerülhetők. Azt is megtanulhatjuk, hogy az egyes hibákat hogyan lehet a leghatékonyabban felismerni, úgymond kitesztelni. Jóllehet az ilyen tanfolyamok elsődlegesen programozóknak szólnak, a tesztelőknek is szolgálnak hasznos tudással, így ők is előszeretettel látogatják őket.
Ma már van kifejezetten tesztelőknek szóló, kimondottan az ő követelményeiknek megfelelően felépített kurzus is. Ennek keretében részletesen tárgyalják a biztonsági tesztelés specialitásait és módszertanát, hiszen a biztonsági tesztelés merőben más hozzáállást, no meg jelentős biztonsági szakértelmet és tapasztalatot igényel. Ezen felül bemutatják a tesztelés során felhasználható technikákat és a tevékenység automatizálására szolgáló különböző szoftvereszközöket.
Szerző: Jeges Ernő
A szerző
- Jeges Ernő közel 15 éve dolgozik biztonsági területen. Kutatásai között a biometrikus biztonsági megoldások szerepelnek kiemelt helyen, de e mellett az IT-biztonság és a digitális jogok technikai fejlesztésében is számos eredményt ért el. Újításai között olyan szabadalmakat találunk, mint a fülalapú azonosítás, a biometria titkosító rendszerekbe történő beépítése, az objektumkövetés vagy újabban a szoftverek ködösítése és vízjelezése.