Az a helyzet, hogy nem lehet kikerülni bizonyos hírekben megjelenő témákat, akkor sem, ha összeszorított farpofával szeretném, mert egyszerűen a csapból is az folyik. Képzelem, ahogy a műkörmös szalonban a szakértő hölgyek azzal kapcsolatban hüledeznek, hogy egy 18 éves diák jelentette a BKK e-ticket jegyvásárlását érintő sebezhetőséget, na jó, ez így bonyolult, inkább csak annyit mondanak egymás közt, hogy meghakkolták a Békákát, erre elvitték a zsaruk. Micsoda világban élünk, elviszik a hékek azt, aki csak segíteni akart. Nem röhögni! A 10 legolvasottab magyar sajtótermék szerintem ennél nem sokkal magasabb szinten tárgyalja vagy lényegében nem eltérő interpretációban tárgyalja a témát. De úgy fest, hogy még az IT-sek közt - na meg aki annak mondja magát - is sokaknál elszállt a séró', ezért gondoltam, hogy egy kicsit oszlatom a ködöt.
Miről is van szó ténylegesen?
A BKK és a T-Systems közösen egy netes jegyvásárlási rendszert vezetett be, aminek az alkalmazásában bennmaradt egy olyan hiba, amilyenre én tankönyvi hibaként szoktam hivatkozni, mert annyira triviális. Innentől kezdve úgy írom, hogy az a műkörmös is megértse, aki még nem látott forráskódot, az informatikában minimálisan is jártas műkörmösöktől pedig előre is elnézést kérek! Több hibáról van szó egyébként, a legegyszerűbbet fogom kivesézni. /*azt is pongyolán, amiért pedig azok elnézését kérem, akik értik, hogy miről van szó*/
Amikor egy alkalmazás/szolgáltatás/API adott típusú bemenő adatot, azaz például egy pozitív egész számot kér, mint amilyen pozitív egész egy BKK-bérlet ára forintban, akkor nyilván nem logikai értéket, negatív számot, éppenséggel a Despacito szám egyik sorát, mint sztringet, azaz karaktersorozatot fogja megkapni, hanem valóban pozitív egészet. Na már most, elvben nincs akadálya annak, hogy egy egész számot váró szolgáltatás más típusú adatot kapjon, viszont elemi, na még egyszer: _elemi_, hogy fel kell készíteni a szoftvert az ilyen eset kezelésére. Nyilván nem fordulhat elő véletlenül, hogy a rendszer a 9500, mint egész szám helyett /*egy havi bérlet ára forintban*/, a szerver felé - a továbbiakban: szerveroldalra - mondjuk a "Sí, sabes que ya llevo un rato mirándote" karaktersorozatot küldje vagy mondjuk egy logikai értéket. Viszont kábé az első, ha nem nulladik dolog az, amit nem hogy egy éles üzembe állított rendszeren egy fekete kalapos hekkernek, fehér kalapos hekkernek vagy egy médiában kikiáltott balfácánnak kell ellenőriznie, hanem a tesztelőnek már az adott modulban ki kell szúrnia - módszertantól függően - mondjuk az unittesztelés során. És abban az esetben, ha azt észleli, hogy a fejlesztő annyira hülye volt, hogy egy ilyen egyszerű trükkre, azaz az adat on-the-fly átírhatóságára nem készítette fel a szoftver adott részét, alaposan dokumentálja, iszik egy felest, majd megpróbál egy kulturált levelet írni a fejlesztőnek, ami tartalmazza a javítással kapcsolatos instrukciókat /*részletekbe menően vagy kevésbé*/, aztán ez vagy sikerül européer stílusban vagy sem.
A leírt folyamatot, azaz azt, hogy egy szoftver ellenőrizze, hogy valid adatot kapott-e és nem egy nyári sláger első sorát karaktersorozat formátumban, esetleg egy olyan bitsorozatot /*nagy általánosságban fogalmazva*/, ami tetszőleges műveletet hajt majd végre a szerver oprendszerén vagy annak valamelyik szolgáltatásában röviden parserelésnek nevezzük, persze ez önmagában még mindig nem elég.
Azaz amellett, hogy leprogramozzák, hogy valami egész számot vár, biztosítani és ellenőrizni is kell, hogy oda csak egész szám kerülhet, majd továbbítódhat-e.
írok egy olyan sebezhetőséget, de én inkább tweaknek nevezném, ami gyakorlatilag dettó ugyanerre épül, pont az előző posztban írtam róla, csak én nem egy szaros jegyvásárlási rendszerrel csináltam meg, hanem a Facebookkal, másrészt nem azért, hogy én legyek egy hétig a nemzeti Robin Hood, hanem azért, mert praktikusnak találtam. A következőről van szó: a Facebook egész számokkal azonosítja a jogosultságokat - többek közt - azaz, hogy valaminek a láthatósága, eléghetősége Only me, Friends, Friends of Friends vagy Public/Everyone vagy egy általad definiált, ismerősöket tartalmazó lista. Azaz amikor a Facebookon beállítod, hogy ki jelölhet be ismerősnek, azaz "Who can send you friend requests?", akkor alapvetően egy egész számot továbbít és rögzít a rendszer. Évekkel ezelőtt észleltem, hogy éppen ennek az azonosítónak az átírásával a Facebook olyan beállítást is elfogad, aminek konkrétan nincs értelme, azaz például, hogy csak önmagamat jelölhetem ismerősnek, csak a barátaim jelölhetnek ismerősnek [nem is tudnak, mert eleve a ismerőseim ugye], de még olyat is, hogy az ismerőseim egy listában tárolt része jelölhet ismerősnek, ami ugye még elborultabb. Viszont minden ilyen szokatlan beállításnak az lett az eredménye, hogy konkrétan senki sem tudott ismerősnek jelölni - hál' Istennek - akit eléggé érdekesnek találtam, azt úgyis bejelöltem én. /*csak egy üres listába tartozó felhasználók "tudtak" ismerősnek jelölni*/ Mi történt? Az, hogy a Facebook nem ellenőrizte, hogy értelmes beállítást kap-e egyáltalán, azaz hogy csak olyanok jelölhetnek ismerősnek, akivel van közös ismerősöm vagy éppen mindenki. Ez a bemenet valószínűleg nem volt parserelve vagy parserelve volt ugyan, egyéb helyen eltolva. Az előző posztban írtam, hogy ezt a beállítást a mobilappon sikerült elállítanom, viszont az évekkel korábbi módszerrel visszaállítani nem sikerült, ami bosszantott pár percig, aztán nem érdekelt.
Ami a BKK jegyrendszerét érinti, meggyőződésem, hogy a legvadabb hibákat egymástól függetlenül több százan szúrták ki, mert annyira triviálisak. Volt és sejthetően még mindig van benne néhány sokkal súlyosabb hiba is, ami ennyire röviden nem magyarázható el Ádámtól-Évától. Nem világos, hogy mennyien jelentették a hibát, az igen, hogy végülis volt egy jól beazonosítható, 18 éves gyerek is, aki igen. Innentől különösen fontos egészében nézni az eseményeket, mert elképesztő zavar van a fejekben.
Nem tisztem megvédeni a T-Systems-t, és nincs is rá szükségük - bár ilyen PR mellett ki tudja - de szó sincs róla, hogy a nagy, gonosz, hülye, bugyirózsaszín IT-cég vagy épp a BKK szemétkedésből tett volna feljelentést, hanem azért, mert ilyenkor jogszabályi kötelessége feljelentést tenni! Igen, még akkor is, ha világos, hogy pont annak a 18 éves srácnak az évszázad hakkolásával' együtt a társadalomra való veszélyessége nem is mérhető. Mindemellett a T-Systems kríziskommunikáció szempontjából megbukott, alighanem senki sem mert időben beleállni a dologba azzal, hogy köszönik, hogy a hibát jelentették, de azért a feljelentést meg kellett tenniük. Akinek nem világos, hogy ez miért van így, annak fingja nincs róla, hogy hogyan működik ez az egész. Ami pedig a Készenléti Rendőrséget illeti - amelyiket ugyancsak nem kell megvédenem - onnantól kezdve, hogy érkezik hozzájuk egy ilyen feljelentés, nem gusztus dolga, hogy eljárnak vagy sem, hanem szintén a törvény betűjét követve kell eljárniuk, akkor is, ha az sajnos az adott esetben életszerűtlen és aránytalan intézkedést ír elő, mint amilyen az előállítás. Azt azért szögezzük le, hogy nem éjszaka jelentkezett a hatóság, hanem reggel 7-kor, nem rúgták rá az ajtót, hanem kopogtattak, ami pedig az előállítást illeti, senki sem gondolhatja komolyan, hogy vezetőszáron kellett volna bevinni a gyereket Hannibal-maszkban. Azaz a Rendőrség, amelyiknek a tagjai már teljesen megszokták, hogy általában teljesen igazságtalanul élcelődik rajtuk a plebs, ugyancsak jogszerűen jártak el.
Egészében az eljárás - ahogy egy, az Ibtv. /*aka 2013. évi L. törvény*/ megalkotásában részvevő ismerősöm megjegyezte, jogszerű volt, de szégyenletes.
Na most ami a sajtót illeti, az egész hírértékét az adta, hogy mégiscsak egy jókora céget mogyoróztak meg, a szoftver lefejlesztésében tényleg orbitálisan nagy hibák vannak, az már mindegy, hogy mik, lehet hülyézni és kész. Ilyen esetben egyetlen nagyobb sajtóorgánum sem teheti meg, hogy ne szálljon fel a dilivonatra és tolja a hülyeséget, ezen kívül szokásosan mindenki egyszerre lesz telekommunikációs szakjogász, na meg a műszaki etika szakértője egyszerre.
A szerencsétlen módon előállított csávó pedig nem is etikus, nem is hekker, ami pedig legalább ilyen fontos, hogy vagy eszelősen naiv volt vagy eszelősen hülye.
A bugreporting, azaz egy-egy sebezhetőség bejelentése már-már külön tudomány, már ha úgy akar valaki eljárni, hogy abból senkinek se származzon kára, ő is legyen jogilag védve, nem mellékesen pedig a felhasználók is, akiknek az adatai pont egy-egy ilyen pszeudo-full disclosure miatt kerülhettek veszélybe, már ha igaz, hogy még az e-ticketes ügyféladatbázis is lopható volt.
Azaz ha észlelünk egy hibát, akkor nem, nem ész nélkül, azonnal jelentjük saját néven, tök hülyén, hozzátéve, hogy Proof-of-Concept, a sebezhetőséget még ki is használtuk, hanem megkérdezzük a területen jártas jogászt, utánakotrunk, hogy milyen policy szerint érdemes a hibát jelenteni a konkrét esetben, ha meg minden kötél szakad vagy csak nincs cérnánk ilyen részletekkel tökölni, akár teljesen névtelenül jelentjük. Aztán ha még továbbra sem javítják, akkor jöhet a full disclosure, gusztus, na meg vérmérséklet kérdése, hogy mennyi idő várakozás után. Tipikusan egyébként már az nem egyértelmű, hogy a hibát hova lenne érdemes jelenteni, azaz hogyan érhető el a tényleges responsible contact, mert egy sima, ügyfélszolgálati címre küldött email biztos, hogy nem az. Nem nehéz rájönni, hogy az ügyfélszolgálatok nem ilyen típusú minősített adatokkal dobálóznak nap, mint nap, sok-sok kézen megy keresztül a bug részletes leírása, aztán jó esetben senki sem használja ki, aki olvasta. Például akinek az ügyfélszolgálatos véletlenül elmondja, aztán akinek elmondta vesz 1000 darab havi bérletet 10 forintért, ami pedig a bejelentést illeti, majd vagy eljut az illetékeshez vagy sem.
Akinek van egy csöpp esze szinte mindig úgy dönt, hogy nem tököl-kockáztat, ha hibát talál, eljuttatja annak a körnek, amelyik a legnagyobb valószínűséggel illetékes és nyugodtan alszik a bejelentő. Illetve amikor valami nagyon meredekről van szó, akkor olyat kell kérdezni előzetesen, aki meg tudja jósolni, hogy egy bejelentést követően mire lehet számítani.
Na most egy olyan világban, ahol az emberek már akkor sértve érzik a magánszférájukat, ha valaki, akivel ismerkednek netes társkeresőn vagy anonim fórumon, aztán meg meg vannak lepődve, ha a másik megtalálja őket a keresztnevük és a koruk vagy egy általuk kedvelt oldal vagy meglátogatott esemény alapján /*igen, ennyi pontosan elég hozzá*/, akkor se a jogalkotóktól, sem a megoldásszállító cégektől, se a sajtótól, se a hatóságoktól nem várható el, hogy életszerűen tudjanak kezelni egy ilyen helyzetet.
Konkrétan ebben az esetben senki se jöjjön azzal, hogy inkább jutalmazni kellett volna a srácot, mivel totálisan töketlen volt a hiba bejelentése, az eset valamire azért nyomatékosan felhívja a figyelmet. Mégpedig arra, hogy bárki, akár etikus hekker, akár advanced user, akár érdeklődő, ha rendelkezik olyan ismerettel, amivel az átlag felhasználó nem, inkább tartsa a dolgot titokban, de komolyan! Ugyanis ez akár igazságos, akár nem, de a többség totálisan félreérti az egészet, elég egy kommunikációs botlás és már megállíthatatlanul borul is az illetőre a trágyalé. Hogy mást ne mondjak, sokszor egy tényleges informatikai bűncselekmény kapcsán nem azon kerültek a lehetséges gyanusítottak körébe sokáig, akiknek érdekükben állhatott az elkövetése, hanem azok, akikről tudvalevő volt, hogy technikailag képesek rá, ami nettó őrület, de így van. A Google- és Facebook-fiókhardeningelős posztjaim után halomra kaptam a segghülye leveleket azzal kapcsolatban, hogy én mennyiért törnék fel ilyen-olyan accountot. Szóval ennyire nem értették meg néhányan, amiről azt hittem, hogy egyértelmű annak, aki nem analfabéta, nevezetesen, hogy a cikkek lényegi mondanivalója nem az, hogy hogyan törjünk FB-fiókot, hanem az, hogy hogyan csökkenthetjük a rizikóját annak, hogy megtörténjen. A gyógyszerész is tud mérget keverni, de aligha fog, hiába kéri tőle valaki jópénzért. Hasonlóan, aki tud hardeningelni, nyilván törni is, de nem fog.
Tudsz valamit? Tagadd le! De tényleg! És akkor nem fognak lehekkerezni meg összemosni mindenféle idiótával. Majd akkor lehet előhozakodni security- és privacy-related tudással, amikor az a közeg, amiben élünk, kellően érett lesz hozzá, addig inkább ne.
Na, én most megyek, keresek az utcában egy lakatosként dolgozó szomszédot, hogy este elmenjünk buliból betörni, aztán majd szelfizünk egyet a kinyitott ajtó előtt, szigorúan úgy, hogy látszódjon az utca és a házszám, majd töltjük is fel a Fészre, betaggelve a kerületi rendőrség oldalát...
kép: Knowyourmeme