Miért mondják, hogy a nyílt forráskód biztonságosabb, mint a zárt? Tudnátok válaszolni néhány kérdésemre a nyílt forráskóddal és a szabad szoftverrel kapcsolatban, amit nem igazán értek?
Mindig a több szem többet lát elvre hivatkoznak, hogy világszerte felügyelnek egy projektet és így előnyben vannak a zárt forráskódú projektekkel, mert azokat csak egy meghatározott számú programozó figyelheti.
Tegyük fel, hogy egy rosszakaró ember felmegy githubra vagy gitlabra vagy akárhova, hogy megnézzen egy open source projektet magának. És mondjuk felfedez néhány biztonsági rést, de ezt nem jelenti be, hanem szépen megtartja magának, ezáltal lehetősége nyílik exploitolni azokat azokon az embereken akik azt az adott szoftvert használják. Na most ilyenkor mi van? És még csak reverse engineeringelnie sem kellett a rosszakarónak, hisz minden nyíltan ott van.
Tehát röviden, mi a garancia arra, hogy ha valaki talál egy sebezhetőséget, akkor azt jelzi a fejlesztő(k)nek és nem él vissza vele?
Ez pláne akkor veszélyesebb, ha mondjuk egy olyan projektről van szó, amit nagyon lassan fejlesztenek, tehát ritkán van rá frissítés. Ez azt jelenti, hogy a forráskódot nem sokan vizsgálgatják. Itt még nagyobb az esély arra, hogy egy black hat hacker kihasználja a sebezhetőségeket, amiket amúgy rég felfedeztek volna, ha van elég ember, aki segít az adott szoftver fejlesztésében.
Egy másik dolog. Ez már inkább a szabad szoftverekre vonatkozik. Tehát a GNU GPL (meg pl. a BSD, MIT, apache) licenc kimondja, hogy bárki szabadon módosíthatja igénye szerint az adott szoftvert és azt tovább is terjesztheti akárkinek, hogy segítsen másokat. Akkor hogy lehet ebben megbízni? Tegyük fel, hogy valaki forkol egy szoftvert, de mellé belerak egy csomó kártékony sort, ami mondjuk kémkedik a felhasználó után. Azt fogja és binárissá teszi és terjeszti valakinek, aki erről mit sem sejt. Ez megint egy érdekes dolog. Hogy bízhatunk így meg bárkiben? Honnan tudhatjuk, hogy tényleg segíteni akar és nem épp ellenkezőleg?
Aztán: Habár a GPL licenc is egy megengedő licenc, de annyi kikötése van, hogy amit GPL licencről forkolsz azt neked kötelességed GPL licenc alatt kiadni. És kérdezem én: Ezt ki ellenőrzi? Honnan tudják, hogy mondjuk én forkolom tegyük fel a LibreOffice-t és aztán kiadom zárt forráskódú licencként? Ez hogy tud kiderülni? Ki tudja ezeket leellenőrizni vagy hogy van ez?
Aztán még egy dolog: A nyílt forráskodú és a szabad játékok.
Ugye a megengedő licencek, mint tudjuk azért megengedőek, mert megengedik, hogy szabadon igény szerint módosíthatjuk és terjeszthetjük azt. Tehát ergo ha egy játékot kiadnak mondjuk GPL licenc alatt akkor én ahhoz nyugodtan készíthetek bármilyen cheatet? Aimbotot, wallhacket stb. és ráadásul még tovább is terjeszthetem ezt bárkinek?? Magyarán akkor egy GPL licences multiplayer játékban legálisan csalhatok, nem igaz? :D
Félre értés ne essék én nem ellene vagyok a nyílt forráskódnak és a szabad szoftvereknek. Szeretem őket, nap szinten többet is használok. Linuxot is mellesleg. Meg amúgy alapjában véve ez egy jó dolog, hogy szabadon tanulmányozható egy program, de biztos, hogy elég biztonságos?
Én nem vagyok szoftverfejlesztő, de furcsállom azokat, akik simán rámondják a nyílt forráskódú szoftverekre, hogy azok márpedig az biztonságosabbak, mint a zárt (proprietary) szoftverek.
Szóval ha valaki(k) jobban otthon van az ilyen licencek világában az elmagyarázhatná nekem ezeket. :)
"akkor nem játszhatja ki simán a vírusirtót azáltal, hogy elemzi a forráskódját és így rájön, hogy az antivirus milyen algoritmus alapján szűri ki a kártékony programokat? "
Nem hát, hiszen a kereső szekvenciát keres majd, a megújított adatbázisa alapján. Ami vírus nem ismert, azt nem képes detektálni. Amit még efelett tehet, az a kódanalízis. Ha észreveszi, hogy olyan sumákságok vannak a kódban, ami illegális tevékenységre utal, akkor riaszt/vagy vakriaszt.
Pl. a fent említett CurlFtpFs -nél is alapvetően nem lenne gond.
A problémát az hozza amikor letöltenél egy mappát ezen keresztül.
A mappában pedig manipulált fájl nevek vannak, ami fájl létrehozás helyett a fájl tartalmának futtatását végzi el.
De csak egy apró banális funkcionális hiba, hogy pl. a # -et tartalmazó fájlok / könyvtáraknál megrokkan. :-D
Ezek közvetlen a forrás elemzéséből nem feltétlen derül ki, a program futtatásakor, jöhet elő mint hiba, és ha jobban ránézünk az érintett részekre, akkor derül ki hogy milyen hibák vannak még.
"Értem, így már tisztább... Szóval egy komolyabb biztonsági rés csak a program valódi futtatása, tesztelése során derül ki?"
Igen. Ha nem így lenne, akkor szinte hibátlan lenne a szoftver első fordítás után, és nem is nagyon kellene tesztelgetni. A tapasztalat viszont épp az ellenkezőjét mutatja, jó példa erre az utóbbi évek sorozatos Windows 10 frissítéseinek hibái. A Microsoft több ezer tesztmérnököt küldött el, azóta vállalkozó szellemű végfelhasználók végzik a Windows tesztelésének végső fázisát, és azért a végfelhasználók mégsem tesztmérnökök, ez jól látszik az eredményeken is.
Forráskódszinten azokat a hibák derülnek ki, amikre figyelmeztet a fordító, és a komolyabb algoritmikus hibák. Vannak olyan hibák, amiknél esély sincs arra, hogy forráskódszinten megtalálhatók legyenek, sőt még a tesztek során sem mindig ütköznek ki (pl. a race condition).
"Pontosan hogy zajlik ez? Hogy szírnek ki egy biztonsági rést?"
Szerintem ezt a kérdést tedd fel a prog.hu-n :)
"nem játszhatja ki simán a vírusirtót azáltal, hogy elemzi a forráskódját és így rájön, hogy az antivirus milyen algoritmus alapján szűri ki a kártékony programokat?"
Mondok egy nagyon egyszerű példát. Tegyük fel, a vírusírtó három dolgot csinál:
1. megnyitja a fájlokat
2. végigellenőrzi, hogy az adatbázisában található minták közül megtalálható-e valamelyik a fájlban.
3. ha nem, akkor bezárja a fájlt, ha igen, akkor karanténba rakja
E közül a három közül melyik lépést tudod kicselezni azzal, ha ismered a vírusírtó forráskódját? Ha ki is tudod cselezni bármelyiket, akkor szinte biztos, hogy nem a forráskód ismerete miatt (mert ilyen egyszerű, látványos hibák nem maradnak a kódban), hanem úgy, hogy lefordítod a binárist és azt elemezgeted. Ez meg ugye zárt forrású kódnál ugyanígy megy.
De vehetjük a mindennapokban használt titkosítási eljárásokat, nagy részük azoknak is nyílt. Itt van pl. az OpenSSL kódja: [link]
Megszámlálhatatlanul sok program használja ezt a könyvtárat, szerintem nincs olyan operációs rendszer, amire ne fordították volna le.
Ha kriptográfiailag bizonyítottan működik az algoritmus, akkor teljesen mindegy, hogy nyílt vagy zárt.
"E közül a három közül melyik lépést tudod kicselezni azzal, ha ismered a vírusírtó forráskódját."
Ha megnézzük hogyan ellenőrzi az antivirus a fájlt és addig simítgatjuk, encrypteljük, amíg már nem jelez rá kártékonyságot. Bár nem tudom...
Mi a helyzet az adatbázissal, amivel összehasonlítja a fájlt az antivirus? Gondolom azért ahhoz nem férhet hozzá akárki.
#14 A vírus irtó első körben hash kulcsokkal ellenőriz.
Millió vírus program fájl hash értékét ismeri.
Utána vannak tipikus binárisból vissza fejthető, olvasható kód részek, ezeket is megnézi.
Illetve sandbox technológiát használva működés közben is leteszteli, miket csinálna a program, milyen gyanús tevékenységeket... pl. futtatható álományt húzna be az internetről végrehajtásra (fa pacik), vagy más ismert rendszer álományokat próbálna lecserélni, hivatalos aláírás nélkül driverként regisztrálni magát... és egy csomó dolgot vizsgál.
Egyedi vírusok így is átcsúszhatnak amíg nem válnak ismertté.
Volt olyan ami közel 20 évig terjedt, mivel semmit nem csinált, csak lappangot a gépeken, várva az ébresztő utasítást, egy komoly botnet hálózatott sikerült kiépíteni így.
"Volt olyan ami közel 20 évig terjedt, mivel semmit nem csinált, csak lappangot a gépeken, "
Túlozni nem kell, mert ilyen azért nem volt.
Ha valaki megtalálja a cikket ami írt ról, kérem linkelje be a #16 -osnak.
Egy orosz BotNet hálózat építő vírus, ami közel 2 évtizede terjed, crack és keygen programmal, ami csak lappang, semmit nem csinált, a konkurenciák kinyírásán kívül, és amivel megbénították múlt évben a FaceBook -ot.
#14
"Ha megnézzük hogyan ellenőrzi az antivirus a fájlt és addig simítgatjuk, encrypteljük, amíg már nem jelez rá kártékonyságot."
Ezt legfeljebb akkor tudod megtenni, ha a vírusírtó fejlesztői valami nagy hibát vétettek, de az ilyesmit jellemzően nem forráskódszinten csinálják.
Mondok egy egyszerű példát. Teszem azt, a fejlesztők úgy találták ki, hogy a vírusírtó ellenőrizgeti a fájlokat, és ha valahol gyanús kódrészletet talál, akkor meghívja az akármilyen .dll-ben definiált akármilyen() függvényt. A fejlesztők úgy kalkulálnak, hogy az akármilyen() függvény be lesz töltve a memóriába, az X:Y címre, és ha bármely külső program megpróbálja átírni ezt a címet vagy a tartományt ahova mutat, akkor egy "access violation" hibaüzenettel leáll az a külső program.
De tegyük fel, jön a compiler, aki beleokoskodik a dolgokba, és azt mondja, hogy optimalizáljuk ki a kódot, az X:Y címet ideiglenesen rakjuk be egy regiszterbe, mert úgy gyorsabb lesz. De mondjuk, a regiszter tartalmát - egy hiba folytán - a külső programok is át tudják írni. Így a te vírusod meg tudja csinálni, hogy átírja azt, és mielőtt a Windows betölti arra a memóriatartományra a kódot, te már átírtad az X:Y értékét úgy, hogy a saját kódodra mutasson, így a vírusírtó kódja helyett a sajátod fog betöltődni (ez most egy nagyon fapados hiba, a valóságban ez így nem működne).
A vírusírtó ilyetén módon való viselkedését a forráskódból soha nem fogod tudni kitalálni, csakis a lefordított binárisból. És lehetsz akármilyen jó programozó, nagyon nagyon kicsi a valószínűsége, hogy hibát találj egy olyan forráskódban, amit előtted már tízen-húszan-százan-ezren átnéztek.
"Mi a helyzet az adatbázissal, amivel összehasonlítja a fájlt az antivirus? Gondolom azért ahhoz nem férhet hozzá akárki."
Változó, például a ClamAV adatbázisa letölthető a hivatalos oldalról, a dokumentációban pedig leírják a fájlformátum struktúráját is, és hogy hogyan kell kibontani.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!