../../THE%20BRITISH%20EMBASSY
../../LANGUAGE%20SELECTOR

CGI Security

Emeric írta vala a biztonságos CGI futtatásról a cikket, ehhez lenne egypár hozzászolásom. Ugye a CGI alapjába véve egy gépfüggetlen, programozási nyelv független dolgot takar, az az ha valaki CGI-t akar írni azt elég sokféle módon megteheti, egy dolgot azért szem előtt kell tartania, a CGI-jét olyan nyelven kell megírnia, amely futni fog azon a szerveren, amelyre fel fog kerülni a CGI.

Ez áltlánosságban ugye egy Unix-os dolgot takar ( jobb esetben Linux-ot..:) ). Itt merül fel az első biztonsági probléma, mert ugye az Apache webszervernek van windows-os portja is, namármost ezt felpakoljuk egy win9x-re, és elkezdünk rajta CGI-t futtatni (pl. dos binárisokat). Ebben az esetben a biztonságról egyedül az Apache fog tudni gondoskodni, már amenyire meg tudja ezt tenni. (gondolom nem kell most azt részleteznem hogy milyen hatásfogú lesz ez a védelem)

Tehát első lépésben, próbáljunk egy olyan operációs rendszert keresni a web szerverünknek, amely rendszerszinten támogatja a több felhasználót, valamint a több felhasználó között az adatok védelmét. Ez alap, ettől semmiféleképpen ne térjünk el, mert akkor előfordulhat, hogy farkaskönnyeket ejtve siratjuk a szerverünket.... Ilyen operációs rendszer valamelyik Unix variáns (Linux, Solaris, Irix, FreeBSD stb...), vagy VMS, ha már minden part szakad akkor lehetséges egy winNT-t használni web szerverként, de ezt lehetőleg csak akkor válasszuk, ha mondjuk pl. egy intranet-nek szolgáltatunk http-t, mert ha internetten is rajta van a szerverünk, akkor a farkaskönyhullatás itt is fennáll.

Egy fontos dolgot érdemes itt megjegyezni, mindenképpen úgy áljunk neki a dolognak, hogy lehetőleg próbáljuk felmérni, hogy ki fogja használni a webszervert. Például ha egy intranettes webszervert kreálunk, akkor ugye elég kicsi a valószinűsége annak, hogy mondjuk a Joli, a titkárnő, craker-é avenzsál , hogy feltörje a szerverünket. Ha azt a gondolatot forgatjuk a fejünkben, hogy egy olyan szervert készítünk, amely 24 órában fent fog lógni az internetten, akkor készüljünk fel arra, hogy a biztonság az egyik fő szempont legyen, mert hát bizony előfordulhat, hogy egy Argentin craker azt tekinti élete céljának, hogy a mi szerverünket feltörje, és ha nem tarjuk szem előtt a biztonságot, sikerülhet is neki!

Az általam jónak tartott párosítások, bár itt meg kell jegyeznem, hogy ez a lista igen szubjektív :

Intel - Debian GNU/Linux
Amiga - Debian GNU/Linux
Macintosh - Debian GNU/Linux
SGI - Irix
Sparc Solaris
Alpha Digital Unix, vagy Linux
VAX - VMS

(lehetőleg próbáljuk meg az adott operációs rendszer utolsó stabil verziója előtti stabil verziót felinstallálni, ez igen kiemelten igaz a Linux-okra, kisebb mérékben a többi op. rendszere, pl. VMS-re egyáltalán nem. Miért is van ez? Új rendszer - új hibák, viszont az se jó ha túl régi, mert akkor valószinűleg minden craker palánta ismeri már a rendszer expolit-jait, biztonsági hibáit.)

Tehát megvan a operációs rendszer. Ha ezt jól választjuk ki, akkor már egy jelentős lépést tettünk a biztonság felé, a következő lépés a megfelelő webszerver kiválasztása, ennek kapcsán igazándiból az Apache-ot tudom meleg szível ajánlani, mivel egyéb szerverekkel nem igazán van tapasztalatom.

Az ezután az általam követendőnek tartott irányelvek :

- A rendszeren lévő felhasználók számát próbáljuk szükséges szinten tartani, mert biztonsági szempontból minden egyes felhasználó +1 hibalehetőség. Egy szervert általában könnyebb megtörni belűről, mint kivülről.

- Ha lehetséges akkor egy gépen, csak egy szervert futtasunk. Ez a legkeményebb dió, mert igen ritkán fordul elő, hogy az embernek van 5-6 Ip címe, és minden Ip cím mögé külön gépet tud állítani.

- Ha több szerver fut a gépen akkor azoknak próbáljuk a lehető legbiztonságosabb verzióját futtatni. Mire is gondolok itt tulajdonképpen? Például próbáljuk a felhasználókat rábírni a Telent helyett az SSH használatára. Az ftp szerverünk lehetőleg ne a operációs rendszer alap ftp szervere legyen (in.ftpd helyett pl. ProFTPd, Wu-FTPD).

- Semmiképpen ne futtasunk IMAP, rlogin, rexec, boot, X, DNS, TimeSync szervereket hacsak nincs rájuk kifejezetten szükség.

- Sürün olvasgassuk a www.roootshell.com-t.....:)

Nagyjából ezek lennének az operációs rendszer részéről igénylet dologok, perszer a lista korántsem teljes, csak egy körülbelüli irányt ad.

Ha megvan a biztonságosnak tartott web szerver, akkor essünk neki a CGI-nek. Ez egy igen macerás, és az estek nagy többségében igen időigényes feladat, valószinűleg sokkal több időnket fogja felemészteni, mint a szerver elindítása.

- Első és igen fontos aranyszabály, hogy egy CGI csak egy dolgot csináljon, mert egy többszálú, sok funkciós programban sokkal könyebb hibát véteni, mint egy 50 soros programban

- Ehhez kapcsolódik egy probléma, hogy miben is írjuk meg a CGI-t, szerintem 2 igazán jó programozási nyelv van erre a célra. Első a Perl, amiben elsősorban egyszerübb feladatokat lehet jól megoldani (szem előtt tartva a hatékonyság elvét). A második a C, ebben a nyelvben lehetőleg ne akarjunk egyszerű feladatokat megoldani, mert előfordulham hogy egy hetünk rámegy arra, mire tudnuk írne egy olyan rutint, ami Perl-ben egy utasítás. A C-t tartalékoljuk a nagyobb feladatokra.

- Az adott CGI-ben próbáljunk lehetőleg mined bevitt adatot többször is ellenőrizni, több szempotból (pl. nem-e esteleg egy parancsot próbál megetetni a CGI-vel, nem fog-e kiakadni a program, egy esetleg érdekes adat kapcsán, nem fog-e kilógni a beviteli buffer-ból bevitt adat)

A Konkrét hibák elemzését, és elhárítását inkább Emeric-re hagynám. (na majd kapsz-Emeric SH)

Achos (achos@abakusz.matav.hu)

 

     
MAGYAR ENGLISH MAGYAR ENGLISH