Sergei QREMCHUK
Prevod Zerg
N 9
(284) 01.03.2004
Za suzhalenie, absolyutno
zashtiteni sistemi vse oshte ne sa izmisleni — gotovi programi za pronikvane
vuv vsiaka ot sushtestvuvashtite, kakto i opisanie na suotvetnite tehnologii, mozhe
da se nameri v otkriti iztochnitsi. Starite dupki v operatsionnite sistemi i
servizi s vremete blagopoluchno se smeniat s novi, i na tozi protses ne se vizhda
kraia. Tvurdeniiata na poddruzhnitsite na OS GNU/Linux za tova, che tazi sistema e dosta
po zashtitena ot sistemite na Microsoft, mi se struvat doniakude preuvelicheni. Da,
az sum suglasen, vuzmozhnostta za priak analiz na koda na sistemata, bez
neobhodimost ot neinoto diasemlirane,sushtestveno oblekchava turseneto na
uiazvimosti — vuprosa e v tova, koi purvi shte otkrie tazi uiazvimost. Do
neotdavna Linux, kakto i Unix v tsialo, gi spasiavashe fragmentatsiiata —
nalichie na goliamo kolichestvo distributivi i operatsionni sistemi, a sushto i
razlichieto na vlizashtite v sustava im prilozheniia ili tehni versii. Tazi bezrazbornost
ne sposobstvashe do poiavata na golemi virusni epidemii, harakterni za Windows,
osnovniia kod na koiato edva li se e prerabotval tolkova sushtestveno ot versiia kum
versiia. No v posledno vreme se zabeliazva tendentsiia kum namaliavane na
spasitelnoto raznoobrazie, i kak shte bude po natakuk e neizvestno. Mozhe, razbira
se da se vika, tropa s kraka, pishe v pisma i forumi, no deistvitelno dobri
analitichni materiali, sravniavashti arhitekturite na Linux i Windows, v Internet
ne sa chak tolkova mnogo — PO goliamata chast ot statiite sa osnovani na
emotsiiata. Razlichnite statistiki na fiksiranite probivi, sami po sebe si ne
govoriat nishto, a otraziavat razprostranenostta na sistemite, puk i istinska pulna
statistika ne znae nikoi, za mnogo probivi postradalite predpochitat da premulchat.
Mezhdu vprochem i v Unix/Linux-sistemite sushto ima vsiakukvi virusi, chervei,
troianski kone, rootkits i drugi tvari. Printsipa «tova ne mozhe da bude, zashtoto
ne mozhe da bude nikoga» — e losha osnova za zashtita.
Za da budem spravedlivi triabva da
otbelezhim, che vse pak obshtata kultura za zashtita na potrebitelite na sistemite Open Source e razvita po dobre.
Niakolko prichini sposobstvat za tova. Vse pak, kakvoto i da si govorim, sredno
statisticheskiia Linux-potrebitel e po podgotven, toi znae, che kompyuturniia virus
— tova e( kolkoto i stranno da zvuchi) samo edna programa, koiato triabva da
startirash na svoia kompyutur (ne vsichki izpolzvat uiazvimosti v tezi ili onezi
servizi). Dopulnitelna otgovornost vurhu razrabotchitsite i dopulnitelen kontrol
ot strana na potrebitelite se nalaga ot razprostranenieto na programite v
izhoden kod. Da se dobviat dve tri funktsii, otvariashti dostup do kompyutura —-
lesna rabota —- da prekompilira rpm-paketi iska/mozhe ne vseki. A za tova za
novi programi se hodi na tezi resursi, na koito napulno se doveriavat, i koito
se bezpokoiat za svoiata reputatsiia (domashnata stranitsa na programata, spetsialni
saitove kato http://rpmfind.net/
i http://www.freshports.org/).
Na domashnata stranitsa na Vasil Pupkin edva li si sruva da se hodi za novata
versiia na XMMS. Taka sushto vseki uvazhavasht sebe si razrabotchik ili
razprostranitel na PO redom sus svoiata programa v otdelen fail kato
checksum.md5 (i/ili vutre v otelen fail) postavia kontrolnata suma, koiato
mozhe vednaga da se proveri. Takava proverka po algorituma MD5 po vuzmozhnost
garantira, che v faila niama promeni, i pred vas e deistvitelno original.
Da se razbere kontrolnata suma na
svaleniia fail e mnogo prosto (pomoshtnata programa md5sum e v nalichnost
vuv vseki distributiv— ako ia niama mozhe da se vzeme ot http://www.gnu.org/software/textutils/textutils.html):
# md5sum /home/sergej/aide/aide-0.10.tar.gz
39eb7d21064cac7b409c45d038b86cd8 /home/sergej/aide/aide-0.10.tar.gz
Sega, sravniavaiki stoinostite na
kontrolnata suma, dadena ot programata, s posochenata vuv faila, mozhe da
napravim izvod za originalnostta na faila. Analogichno, kupuvaiki distributiv
niakude na pazara, e zhelatelno za uspokoiavane na dushata da posetim saita na
proizvoditelia i da iziasnim kontrolnata suma na postavenite iso-obrazi ili
otdelni prilozheniia. Proverkata na kontrolnata suma izobshto triabva da stane navik
pri vsiako instalirane na programni sredstva. V FreeBSD-sistemite pri otsustvie
v distributiva na nuzhnata programa ili versiia, predi da se oburnem kum saita
ili da kompilirame ot izhoden kod, triabva da se oburnem kum durvoto na paketite
ili portove. Ako programata e vklyuchena v tiah, togava tia e preminala
testirane na suvmestimost/bezopasnost i v kraina smetka niama da stane prichina
za krah na sistemata. V tozi sluchai kontrolnata suma se proveriava avtomatichno
pri instaliraneto, bez iavnoto uchastie na potrebitelia. I tova e nai prostiia i
bezopasen sposob da se postavi novo PO.
Sluchva se, che kompilatsiiata s
pomoshta na portove, v tova chislo i po prichina na nepravilna kontrolna suma,
zavurshva s greshka. V tozi sluchai mozhe da pomogne obnoviavaneto na durvoto na
portovete. V kraia na kraishtata, vinagi mozhe da se oburnete za pomosht kum choveka
poddurzhasht suotvetniia port ( MAINTAINER).
Da razberete negoviia elektronen
adres e mnogo prosto. Vlezte v kataloga na nuzhniia port i daite komandata:
# more Makefile | grep MAINTAINER
MAINTAINER= anarcat@anarcat.dyndn.org
Izpratete na tozi adres izhoda ot
kompilatora i informatsiia za sistemata (uname ), i ne zabraviaite predvaritelno
da blagodarite za pomoshtta.
S pomoshtta na kontrolnata suma
mozhe ne samo da se proveriavat instaliranite programi Ako zloumushlenika vse-pak
e uspial da pronikne v mrezhata, to negovoto purvo deistvie, nai veroiatno, shte
bude instaliraneto ili izmenenieto na niakoi programi. Naprimer, toi mozhe
da zameni standartnata i chesto
izpolzvana programa ps na druga, s «troianets» vutre, a komandata ls mozhe
da ne zabelezhi suzdadenite ot nego katalozi. Za da izbegnat otkrivaneto si ot,
naprimer, komandata find, takiva programi «umeiat» da imitirat vremeto na
suzdavaneto si, no da se organizira podpravena kontrolna suma e kude po slozhno.
Tezi, koito izpolzvat
rpm-based-distributsii, mogat za kontrol na tselostta na sistemata da se
vuzpolzvat ot vuzmozhnostite na menidzhura na paketi. Kogato se instalira
nova programa, to dannite za paketa v tsialo i otdelnite failove, negovi
sustavliavashti, v tova chislo i kontrolnata suma, se zapisvat v baza danni. Zatova
vuvezhdaiki komandata
# rpm -Va > file
mozhe da se poluchi predstava za
promenenite failove (i za samolichno razvalenite sushto). Ako faila se okazhe
prazen, to promeni niama— naistina, tova oshte ne oznachava, che sistemata e chista.
No ako se poiaviat podobni redove:
# rpm -Va
S.5....T c /etc/hotplug/usb.usermap
S.5....T c /etc/sysconfig/pcmcia
to izmenenite failove e
neobhodimo da se proveriat. Optsii:
• M — razlichava se
sustoianieto (vklyuchitelno razshirenie i tip na faila);
• S — razlichava razmera na
faila;
• 5 — razlichava se sumata
MD5;
• D — ne suotvetstva
broia osnovni/vtorostepenni ustroistva;
• L — ne suotvetstva
putia readLink(2);
• U — razlichava se
potrebitelia-sobstvenik;
• G — razlichava se grupata-
sobstvenik;
• T — razlichava se mTime.
Ako, kakto v pokazaniia primer,
tova sa konfiguratsionni failove, koito, estestveno, sa dluzhni da se promeniat,
to nishto strashno niama. No ako ima
failove ot katalozite, sudurzhashti izpulnimi failove, to e redno da zastanem
nashtrek. Pri pomoshtta na komandata rpm -qf /path/to/file mozhe da proverim, iaviava
li se dadeniia fail chast ot paketa. Namerenite izmeneniia mozhe — estestveno,
predvaritelno zapazvaiki suhraneniet failove za po natatushno izsledvane —
vednaga da vuzstanovim:
# rpm -i --force
No tova ne e vsichko. Po prostoto
i iasno strukturirano failovo durvo vuv vsichki Unix-sistemi, v koito izpulnimite
failove, konfiguratsionnite failove, postoianno promeniashtite se failove (naprimer,
log-failovete) i drugi lezhat v razlichni klonove na durvoto, pozvoliava ne samo
da se iznesat tseli diskovi razdeli v read-only ili da se ogranichi dostuput do
tiah na nivo iadro s pomoshtta na spetsialni krupki (patchove), no i da se kontrolira
tselostta na nuzhnite failove. V Windows, naprimer, da se izpulni podobna zadacha
e dosta po slozhno, tui kato shte se nalozhi da se obhvane goliam obem danni
(programata pishe danni, neobhodimi za rabotata i, tam kudeto schete za nuzhno
neiniia suzdatel, i za tova te sa razhvurliani po tseliia disk). Vprochem, otdelni
resheniia sushtestvuvat— imenno s tiahna pomosht uspiavame da razberem za tova, che neshto
ili niakoi e opitval da izmeni bez znanieto na stopanina na kompyutura registura
i drugi kritichni oblasti s danni. Naprimer, WinPatrol. Taka prilaganeto na
spetsialno obucheni programi, proveriavashti tselostta na sistemnite failove, mozhe da
e tova kraino sredstvo, koeto shte poprechi na zloumishlenika da se zakrepi na
vashiia kompyutur.
Sred Open-Source programite,
prednaznacheni za avtomatizatsiia na protsesa na izchisliavane na kontrolni sumi i
davane na rezultat ot sravniavaneto, nai populiarni sa Tripwire ( http://www.tripwire.org/) i
AIDE — Advanced Intrusion Detection Environment ( http://www.cs.tut.fi/~rammer/aide.html
ili http://sourceforge.net/projects/aide).
Niakoia ot tiah opredeleno shte namerite vuv vashiia distributiv, makar che se sluchva
da sa postaveni i dvete. Dnes shte vidim kak se nastroiva i izpolzva AIDE.
Programata AIDE e testvana i
raboti na povecheto Unix-sistemi: Solaris, Linux, FreeBSD, Unixware, BSDi,
OpenBSD, AIX 4.2, TRU64 4.0x i pod Cygwin.
Instaliraneto i ne e osobeno
slozhno. Razopakovame arhiva i kompilirame po obiknoveniia nachin:
# tar -xzvf aide-0.10.tar.gz
#cd aide-0.10
# ./configure
#make
#su
$make install
V kachestvoto na dopulnitelni
optsii moga da preporucham –with-zlib za da e vuzmozhno izpolzvane na
zlib-kompresiia i –with-psql za suhranenie na danni vurhu vunshna baza danni RostgresSQL.
Ako kompilatsiiata e preminala
normalno, e vreme da se zaemem s konfiguratsionniia fail. Toi se naricha
aide.conf, i sled instalirane se namira v direktoriiata /usr/local/etc. Da go
razchoplim vurhu dadeniia primer (makar i na slozhen — za normalna rabota e
dostatuchno samo da pokazhem proveriavanite direktorii).
# AIDE conf
# baza danni, za chetene, —
zhelatelno e da se kopira v nedostupno miasto(po podrazbirane e ./aide.db)
database=file:/var/lib/aide/aide.db
# mestopolozhenieto na
novosuzdavanata baza danni (./aide.db.new)
database_out=file:/var/lib/aide/aide.db.new
# ako programata e kompilirana
s poddruzhka na zlib, to po tozi nachin se vklyuchva arhiviraneto na dannite za
ikonomiia na miasto
gzip_dbout=yes
# tuk za spravka sa opisani
vsichki vuzmozhni parametri, izmenenieto na koito mozhe da kontrolira AIDE
#
#p: permissions — izmenenie na pravata
#i: inode — izmenenie na inode
#n: number of links — izmenenie na kolichestvoto prepratki
#u: user — izmenil se e potrebitelia
#g: group — grupata
#s: size — razmera
#b: block count — indeksa na bloka
#m: mtime — vreme na modifikatsii
#a: atime — vreme na dostupvane
#c: ctime — vreme na suzdavane
#S: check for growing size — proverka za izmenenie/narastvane
na razmera
# konrolni sumi po suotvetnite algoritmi
#md5: md5 checksum —
#sha1: sha1 checksum
#rmd160: rmd160 checksum
#tiger: tiger checksum
#haval: haval checksum
#gost: gost checksum
#crc32: crc32 checksum
# predustanovki,
sgruppirovannue pod opredelennue zadachi
#R: p+i+n+u+g+s+m+c+md5
#L: p+i+n+u+g
#E: Empty group (prazna grupa t.e. nishto ne se kontrolira)
#>: Growing logfile p+u+g+i+n+S (tova e za
postoianno uvelichavashti se failove)
# i samostoiatelno suzdadeni ot
potrebitelia
Binlib =
p+i+n+u+g+s+b+m+c+md5+sha1
ConfFiles =
p+i+n+u+g+s+b+m+c+md5+sha1
Logs = p+i+n+u+g+S
Devices =
p+i+n+u+g+s+b+c+md5+sha1
Databases = p+n+u+g
StaticDir = p+i+n+u+g
ManPages = p+i+n+u+g+s+b+m+c+md5+sha1
# v redovete dolu se zadavat
direktorii i pravila, koito shte se kontrolirat, makar i za proverka na tsialata
sistema mozhe da se izpolzva prosto / R; zabelezhete sushto, che se prilagat
reguliarni izrazi
# takava konstruktsiia dobavia
samo direktoriiata /boot bez poddirektorii
=/boot$ Binlib
# vsichko, koeto e po dolu, shte
bude zaobikoleno rekursivno
/bin Binlib
/sbin Binlib
/usr/bin Binlib
/usr/sbin Binlib
/usr/local/bin Binlib
/usr/local/sbin Binlib
/usr/games Binlib
/lib Binlib
/usr/lib Binlib
/usr/local/lib Binlib
# nadolu, kakto vizhdate,
se prilagat veche drugi pravila
/var/log$ StaticDir
/var/log/aide/aide.log(.[0-9])?(.gz)?
Databases
/var/log/aide/error.log(.[0-9])?(.gz)?
Databases
/var/log/setuid.changes(.[0-9])?(.gz)?
Databases
/var/log Logs
# direktorii /dev i /proc shte
budat izklyucheni ot spisuka na proveriavanite
!/dev
!/proc
Kakto vizhdate, edinstveniia
problem se sustoi v tova da opredelim kum koi direktorii da prilozhim pravilata
za da izbegnem povtoreniia i luzhlivi trevogi. Vprochem, sled dve tri preminavaniia
na konkretnata sistema, pravilata mogat da se korigirat spored situatsiiata. Vuv
faila sushto e vuzmozhno postavianeto na promenlivi — naprimer, v reda @@define
MAILTO root na promenlivata MAILTO se prisvoiava stoinost root. Pri sledvashto
puskane na aide s pomoshtta na cron (vizh statiiata na Sergei PARIZHSKI
«Pingvin na avtopilot», MK ą50 (273)) otcheta za rabotata shte bude
izpraten na ukazaniiat adres. Sled zadavane na pravilata gi zapisvame i
suzdavame baza. Za tselta startirame programata aide s parametur –i:
# aide -i
Tova deistvie shte suzdade baza i
shte ia suhrani v database_out, v nashiia sluchai tova e /var/lib/aide/aide.db.new.
Tova e osnovnata baza, s koiato shte sveriavame v budeshe. Pri tova e zhelatelno
bazata da se suhraniava na otdelen nositel, kato po tozi nachin ia zashtitavame ot
modifikatsii. Naprimer, kato ia suhranim na disketa:
#mount /dev/fd0 /mnt/floppy
#mv /var/lib/aide/aide.db.new /mnt/floppy/
I bez da zadavame kakvato i da e
stoinost na promenlivata database vuv faila aide.conf,sled tova pri proverka ia
montirame, vlizame v kataloga i davame komanda za proverka.
#mount /dev/fd0 /mnt/floppy
#cd /mnt/floppy
#aide --check
Ako izhoda e goliam, koeto ne mozhe
da se izbegne pri purvonachalna nastroika, prenasochvame izhoda kum fail:
#aide –check > ~/check
I gledame, kakvo se e promenilo
sled suzdavaneto na bazata. Vuv faila shte vidim priblizitelno takiva redove:
Start timestamp: 2004-02-12 16:54:09
Summary:
Total number of files=54989,added files=2,removed files=2,changed files=54818
Added files:
added:/var/lib/xdm/authdir/authfiles/A:0-Q5jFPJ
added:/var/lib/aide/aide.db
Removed files:
removed:/var/lib/xdm/authdir/authfiles/A:0-v8GwFo
removed:/var/lib/aide/aide.db.new
Changed files:
changed:/opt/pbs/lib/xpbs
changed:/opt/pbs/lib/xpbs/bin
Directory: /bin
Atime : 2004-02-12 09:54:53 , 2004-02-12 16:50:34
Mtime : 2004-02-02 14:12:13 , 2004-02-12 16:44:19
Ctime : 2004-02-02 14:12:13 , 2004-02-12 16:44:19
File: /bin/dd
Atime : 2004-02-12 09:50:51 , 2004-02-12 16:45:02
File: /bin/ash
Atime : 2004-02-12 09:50:51 , 2004-02-12 16:45:02
Ctime : 2004-01-31 21:12:55 , 2004-02-12 16:44:19
I t.n.
Vednaga se vizhda, kakvo stava v
sistemata i kakva informatsiia sledva da se izklyuchi ot kontrola, za da ne pretovarvame
izhoda. Taka, naprimer, za izpulnimite failove kontroliraneto na vremeto na
dostup atime e izlishno, inache pri vsiako puskane na programata informatsiia za
tova shte bude vklyuchena v otcheta, a izmenenieto na vremeto na suzdavane (ctime)
za /bin/ash izglezhda mnogo podozritelno. Ako v sistemata sa stanali globalni
izmeneniia (naprimer, obnoveni sa niakoi paketi), to bazata sledva da se obnovi,
izpolzvaiki optsiiata –update.
E tova e vsichko za koeto iskah da
Vi razkazha. Kakto vizhdate, tolkova prosto neshto, pozvoliava da poluchite pulna
informatsiia za tova kakvo se sluchva v kompyutura, da kontrolirate dostupa kum
vazhnite sistemni failove, i pri pravilno izpolzvane pravi fakticheski nevuzmozhno
nezabelezhimo da se promeniat failovete.
Linux forever!