Elsajátítandó programozási nyelvek etikus hackerek részére

Ha hackerek akarunk lenni, célszerű pár programozási nyelvet megtanulnunk. Hogy mik ezek? A cikkben rövid összefoglalót kapunk azokból a manapság használatos nyelvekből, amelyekre szükségünk lehet a munkánk során.

Egy karrier indulása

Egy információsbiztonsági karrier beindításához komoly technikai tudással kell rendelkezni, ám ez közel sem űrtudomány. Ez a cikk azoknak az aspiránsoknak és kezdőknek szól, akik az Információs biztonság és az Etikus hackelés területén szeretnének karriert befutni. Ismertetésre kerülnek azon programozási nyelvek, melyek szükségesek a folyamat, az eljárások és a különböző technikák teljes körű megértéséhez az etikus hackelés és a behatolási tesztelés területén.

Milyen nyelvet tanuljunk?

Sok nyílt forráskódú biztonsági alkalmazás C/C++/Python és Perl nyelven van megírva. Ezért is érdemes ezeket a nyelveket elsajátítani, hogy megérthessük a már elérhető eszközök kódjait, és tanulhassunk belőlük. Az olyan dolgok, mint a buffer-túlcsordulás és az alacsony szintű programozás szükségessé teszi az alapfokú assembler/C ismeretek meglétét. Ha egy bizonyos típusú platform feltörését tűztük ki célul, akkor az ehhez szükséges szintaxis ismerete igen fontos (pl. a legtöbb webes alkalmazás feltörése megkíván némi adatbázis/JavaScript/PHP tudást (vagy épp ellenkezőleg ASP/JSP ismeretet)).

Végezetül pedig az általunk választott platform megismerése is fontos, így a Linux-felhasználók a bash scriptingbe ásnák bele magukat, míg a Windows-felhasználók valamiféle batch vagy PowerShell szkriptelést tanulnának.

A Java mindenütt jelen van, így bármely IT-szakembernek, aki bele akarna nyúlni a kódba, rendelkeznie kell némi Java-ismerettel, de ha már a C/C++ elsajátításával fáradoznak, akkor ez nem lesz teljesen ismeretlen terület számukra. Manapság a JavaScript egy igen jó nyelv a tanulás megkezdéséhez. Lehet összetett és egyszerű is. Mindenkinek van böngészője, és így megtanulhatja az erős polimorfizmust (objektum halmozást), vagy csak egyszerű iterációkat. A Ruby egy elég világos, könnyen tanulható, és roppant könnyen kezelhető nyelv. Ehhez még hozzájön az is, hogy gyakori nyelv eszközök megírásakor. Az egésznek az a lényege, hogy tudjuk, mire való az adott nyelv.

Szóval kezdjünk hozzá a tanuláshoz, játsszunk a nyelvekkel, lehetőségekkel, stb. Az elején ez megteszi. De egy biztonsági szakértőknek ennél mélyebbre kell ásnia: mi ennek a funkciónak a feladata, és mi történik, ha sizeof(i++) értéket adom meg, miért rossz a printf(ac[1]), stb.

Ha az a cél, hogy csak bizonyos sebezhetőségeket derítsünk fel, akkor ez rossz gondolatmenet: hiszen a lényeg, hogy számoljunk az ismeretlennel is, mielőtt még bekövetkezne. Akadtak olyan nagyobb programok, mint a Metasploit és az Nmap, melyek megírásához például Lua-t és Ruby-t használtak, de amint megismerünk néhányat a cikkben említett nyelvek közül, ezeknek az „újaknak” az elsajátítása sem lesz probléma. Megfigyelhető, hogy bizonyos nyelvek más és más időben voltak "divatosak".

A magasabb szintű nyelvek ismerete többé-kevésbé átültethető bármelyik másik nyelvbe (csak figyelni kell az egyes nyelvek saját kódolási trükkjeire). Az assembly-vel és az alacsony szintű programozással viszont munkáról munkára meg kell küzdeni, hacsak nem merülünk bele a hasonló típusú célok folyamatos ismétlésébe.

Végül is mi csak megfigyeljük a kódot ahelyett, hogy saját magunk írnánk meg (eltekintve a szkriptelési gyakorlatoktól), így nem kell ismernünk minden apró trükköt, hiszen a legtöbbre ráismerhetünk a célkód alapján. Továbbá használjuk a Common Criteria (ISO/ICE 15408) szabványt. Ez a minta egyszerűen fogalmazva meghatároz hét IT-biztonsági szintet (EAL1-től egészen EAL7-ig). Az önálló biztonsági tesztelés az EAL2-es szinten lép be, majd a kódvizsgálat az EAL4-es szintjén. Etikus hackelési megbízások esetén ezek nem számítanak tipikus értékeléseknek (több hónapos időszakokra is kiterjednek, és komoly költségekkel járnak), de tartalmazzák az etikus hackelést az egyik komponensük részeként (legalábbis EAL2-től fölfelé).

Összefoglalva

  • Python, C++ (ha akarjuk C), Perl és végezetül Java (ebben a sorrendben).
  • Egyéb nyelvek, amik szükségesek lehetnek (igényektől függően): HTML/JavaScript/adatbázis (MySQL, PostgreSQL…), és persze PHP és ASP.
  • C és assembly a mélyebb ismeretekhez – az assembly ismeretek nem feltétlenül tartalmazzák a buffer / integer / egyéb túlcsordulásos sebezhetőségeket.
  • Lua, Ruby, LISP. Különböző eszközök használják ezeket.
  • A maradék pedig a bash, batch és PowerShell.
Az elején kezdjünk csak lassan, könnyedén, aztán haladjunk lépésről lépésre.
Szerző:
Harish Chaudhary

<< Vissza