Az adat, információ és intelligencia fogalmai gyakran összekeverednek, különösen az IT és adatelemzés világában, pedig mindegyik más szerepet játszik a tudásépítés folyamatában. Ahhoz, hogy hatékonyan kezeljük őket, elengedhetetlen megérteni, hogy miként kapcsolódnak egymáshoz, és mi különbözteti meg őket.

Az "adat" az egyik leggyakrabban használt fogalom minden területen, különösen az informatika világában. Az adat a nyers formájában lévő entitások összessége, amely önálló jelentés nélkül létezik. Például, ha egy szövegfájl tartalmaz olyan szavakat, mint abc.inc, xyz.com, john, 28, [email protected], CTO, akkor látjuk, hogy ezek entitások, de semmi jelentéssel nem bírnak önállóan. Az adat tehát egy nyers formában lévő tények ábrázolása, amely önállóan nem sok haszonnal bír.

Az "információ" az adat rendszerezett formája. Amikor az adatokat különböző jellemzőik alapján kategorizáljuk, akkor azt információnak hívjuk. Az információ tehát az összegyűjtött és rendszerezett adat. Az információ előállításához tehát szükség van az adatok feldolgozására. Ha visszautalunk az előző példára, az abc.inc egy cég neve, az xyz.com egy domain, john egy felhasználónév, 28 pedig életkor. Az email cím [email protected] és a CTO pozíció is ezen információk közé tartozik. Ekkor az adatok már értelmet nyernek, és információvá válnak.

Az "intelligencia" akkor jön létre, amikor különböző információkat kapcsolunk össze, és azok alapján értelmet nyernek. Az intelligencia tehát az információk értelmezése és azok közötti kapcsolatok felismerése, amely a döntéshozatalt segíti elő. Az előző példából kiindulva az xyz.com domain és az [email protected] email cím ugyanahhoz a vállalathoz tartozik. Ugyanakkor feltehetjük, hogy john, aki 28 éves, az abc.inc CTO-ja. Az ilyen előzetes következtetések elsődleges predikciók, amelyek téves pozitívumokat is tartalmazhatnak, tehát később validálni kell őket, de az adott pillanatban az információk alapján egy értelmes következtetést vonhatunk le. Az intelligencia tehát az információ értelmes elemzésén alapul, és segít abban, hogy a rendelkezésre álló tudás felhasználásával helyes döntéseket hozzunk.

Az adat tehát önállóan nem értékes, de az információról és az információk közötti kapcsolatok értelmezése rendkívüli haszonnal bírhat. Ha az adatokat nem értjük meg, akkor nem tudunk mit kezdeni velük. Például, ha kapunk 1000 véletlenszerű karakterláncot, azok értéktelenek, amíg nem derítjük ki, hogy ezek felhasználónevek vagy jelszavak, ami már egészen más értéket képviselhet. A jól kezelt adatok gyorsan felhasználhatók, és könnyebben megmutatják az összefüggéseket, például egy táblázatban rendszerezett adatokat gyorsan kereshetünk és összevethetünk egymással.

A különböző adatforrásokból származó információk összegyűjtése rendkívül fontos, mivel minden forrás egyedi módon járul hozzá a teljes képhez. Amint azt a Maltego esettanulmány is bemutatta, az eszköz különböző adatforrásokból gyűjt adatokat, de még mindig léteznek egyéb források is. A lényeg nem csak az, hogy egy eszközt futtassunk és begyűjtsük az adatokat, hanem az, hogy az egyes adatokat lépésről lépésre összegyűjtsük, összekapcsoljuk és értelmezzük őket a saját igényeink szerint. Az adatok nem minden esetben származnak egyetlen forrásból, ezért több adatforrásra van szükség ahhoz, hogy teljes képet alkossunk.

Ha például egy John nevű személy összes információját próbáljuk összegyűjteni, akkor különböző forrásokból kell információkat begyűjtenünk. Elindíthatjuk egy egyszerű Google kereséssel, hogy találjunk egy képet róla, majd ezt követően kereshetünk a közösségi médiában, például Facebookon vagy LinkedIn-en. Ha sikerül profilokat találni, további adatokat szerezhetünk, például email címet, céget, pozíciót, lakóhelyet és egyéb jellemzőket. Miután összegyűjtöttük ezeket az adatokat, ellenőrizhetjük az email címeket más webhelyeken, fórumokon, blogokon. Az információkat különböző online forrásokból manuálisan is begyűjthetjük. Az egész folyamat egy lépésről lépésre történő adatgyűjtést jelent, ahol az egyes információk egy következő lépés kiindulópontjaként szolgálnak.

A lényeg tehát, hogy a különböző adatok rendszerezése és összegyűjtése nem egyszerű feladat. Az adatokat nemcsak meg kell szerezni, hanem strukturálisan kell kezelni, hogy később könnyen navigálhassunk közöttük. Az adatok struktúrája, például a szülő-gyermek entitások alkalmazása, segíthet a következtetések levonásában. Az email cím például egy gyermek entitás lehet, amely a név szülő entitásához kapcsolódik. A jól struktúrált adat lehetővé teszi, hogy a későbbiekben egyszerűen navigáljunk, és gyorsan megtaláljuk, amit keresünk.

A vizualizált adatmegjelenítés, mint amilyen a Maltego is, kulcsfontosságú eszközként szolgál az adatok közötti kapcsolatok megértésében. A vizuális megjelenítés segít abban, hogy a bonyolult adatfolyamok könnyebben áttekinthetők és érthetőek legyenek, különösen akkor, amikor hatalmas mennyiségű adatot kell kezelni és elemezni. Az adatok megfelelő kezelésével és strukturálásával sokkal hatékonyabbak lehetünk az információk kinyerésében és a szükséges intelligencia megértésében.

Mik a HTTP-válaszkódok jelentése és milyen környezet szükséges a gyakorlati munkához?

A böngésző egy HTTP-válaszban kapja meg a szerver státuszát numerikus kóddal; egyszerűen fogalmazva a státuszkódok megadják, hogy a szerver milyen eredménnyel dolgozta fel a kérést. A státuszkódok három számjegyűek, és az első számjegy alapján osztályozhatók: az 1xx információt, a 2xx a sikeres választ, a 3xx az átirányítást, a 4xx a kliens oldali hibát, míg az 5xx a szerver oldali hibát jelzi. Gyakori példák: 100 (continue), 200 (ok), 301 (moved permanently), 302 (found), 400 (bad request), 401 (unauthorized), 403 (forbidden), 404 (not found), 500 (internal server error), 502 (bad gateway). Hibás státuszkód esetén a böngésző nem kapja meg megfelelően a forrást; sikeres státusznál a válasz törzse — általában az oldal HTML-je és a hozzá kapcsolódó erőforrásokra mutató hivatkozások — renderelődik, majd ezek az erőforrások ugyanazon az elven további lekéréseket indítanak. Ha a válasz cache-elhető, a tartalom a gyorsítótárban tárolódhat; ez a mechanizmus kulcsfontosságú a teljesítmény és a forgalom optimalizálásában. Ez a háttérfolyamat játszódik le, amikor böngészünk: kérés, státusz vissza, törzs feldolgozása, és szükség szerinti további lekérések.

A gyakorlati laborfeladatokhoz és a további munkához szükséges környezet megértése ugyanolyan fontos, mint a protokoll ismerete. Az operációs rendszer a hardver fölött futó szoftvergyűjtemény, amely kezeli az alapvető erőforrásokat és szolgáltatásokat; enélkül a hardver értelmetlen. A Windows, melyet a Microsoft 1985-ben vezetett be és a szerkesztés idején 8.1-es verzióját említi a szöveg, széles körben elterjedt és használhatósága miatt népszerű; a könyv gyakorlatai esetén a szerző Windows 7 64 bites környezetet használta, de minden 7-nél újabb verzió hasonlóan működik. A Linux, sokféle disztribúcióban elérhető, szerveroldalon gyakori választás stabilitása és biztonsága miatt; a parancssori felület (terminál) ereje különösen fontos rendszergazdáknak és biztonsági szakembereknek. A könyv során Kali Linuxot (http://www.kali.org/), a Debian alapú penetrációs tesztelésre optimalizált disztribúciót használjuk, de más disztribúciók, például Ubuntu vagy Arch is alkalmazhatók, mivel a legtöbb parancs hasonló. Az Apple által fejlesztett Mac OS X jellegzetes, letisztult felületet ad, és erős CLI-t is kínál; a szerző 10.8.2 verziót említi, de későbbi kiadások is megfelelnek a gyakorláshoz.

A gyakorlatok egyszerűbbé válhatnak, ha virtuális gépeket használunk: javasolt egy másik OS típus virtualizálása a host rendszeren. Virtualizációhoz alkalmas szoftverek például az Oracle VirtualBox (https://www.virtualbox.org/wiki/Downloads) vagy a VMware Player (http://www.vmware.com/go/downloadplayer/). A legtöbb eszköz, amelyet a könyv bemutat, nyílt forráskódú és platformfüggetlen, de lesznek kivételek, amelyeket külön jelezünk.

A programozási nyelvek ismerete alapvető: a Java, egy magas szintű, objektumorientált nyelv (eredetileg Sun Microsystems, ma Oracle), kliens-szerver alkalmazások fejlesztésében gyakori, és sok böngésző alapú alkalmazás futtatásához szükséges. A Python, egy magas szintű, olvashatóságot előtérbe helyező nyelv, kis hatékony scriptek automatizálására és webfejlesztésre egyaránt alkalmas; a szerző megjegyzi, hogy míg a jelenlegi sorozat 3.x, a példák többsége a széles körben elterjedt 2.7-es verziót használja, így a gyakorlatokhoz a Python 2.7-et ajánlja és a 2.7.6 letöltési forrását is megadja (https://www.python.org/download/releases/2.7.6/). A nyelvek tanulmányozása során érdemes figyelembe venni a verziók közötti inkompatibilitásokat és a könyv példáinak következetes futtathatóságát.

A kliens oldalon a böngészők szerepe központi: a Chrome, a Google által fejlesztett, 2008 óta gyorsan terjedt és stabil kiadássá vált; forráskódjának többsége a Chromium projektben elérhető (http://www.chromium.org/Home), és a Chrome széles platformtámogatottságot kínál. A Firefox, a Mozilla Foundation terméke, erőteljes testreszabhatóságot és bővítménygazdagságot biztosít; mindkét böngészőt a könyv fő eszközként használja, és későbbi fejezetekben testre szabjuk őket, illetve kipróbálunk módosított változatokat is.

Fontos kiegészítő anyag, amelyet a szöveghez illesztve hozzá kell adni az olvasó gyakorlatias felkészítéséhez: élő vizsgálatok HTTP-válaszokkal — a fejlesztői eszközök (devtools) hálózati paneljének tudatos használata kérések és válaszok nyomon követésére; explicit gyakorlatok a státuszkódok generálására (sikeres válasz, átirányítás, kliens- és szerverhibák szimulálása) és ezek hatásának megfigyelése cache-elés, fejlécek és érvényességi idő vizsgálatával; a virtualizációs környezet biztonságos beállítása, snapshotok készítése és visszaállítási gyakorlatok; Python 2.7 vs 3.x kompatibilitási problémák demonstrálása konkrét példákkal és a modernizációs útvonalak ismertetése; alapvető parancssori (CLI) gyakorlatok Linuxon és Mac-en — fájlkezelés, hálózati eszközök és csomagkezelők használata; végül a biztonsági megfontolások: mi történik, ha tudatosan manipuláljuk a státuszkódokat vagy a fejléceket, és hogyan lehet a tesztkörnyezetet izolálni a valódi hálózattól annak érdekében, hogy a kísérletek ne okozzanak kárt vagy zavarokat más rendszerekben.