Bénázásaim part II - na majd én írok "trójait" linuxra :)

 ( nyekhere | 2010. február 7., vasárnap - 1:28 )

Szóval a cím szándékos szenzációhajhász stb. Igazából erre szerettem volna valami vicces választ adni, és elkezdett járni az agyam azon kevés linux tudáson, ami benne lötyög, és kitaláltam hogy írok egy bash trójait :) (trójai alatt a klasszikus falovat értem, azaz nem egészen az, aminek látszik, és az ember maga tolja be a kapun :) )

Sajnos jól mellé lőttem, akár az r0-s topikba is mehetett volna, de próbálom úgy írni a blogot, hogy ne lőjem le előre a poént - bár szerintem mindenki egyből látja majd a gondot. Tehát a scriptszüleményem:

pld. ingyenpia.sh

#!/bin/bash
touch ~/troja.sh
echo -e "#!/bin/bash" >> ~/troja.sh
echo -e "echo 'most torolhetnem a home-t'" >>~/troja.sh
echo -e "dir" >>~/troja.sh
chmod 755 ~/troja.sh
alias dir="~/troja.sh"

Nem nagy ügy, meg biztos szebben is meg lehet csinálni, nekem most ennyire futotta :), de az elv gondolom látszik. Tehát ha valakit rá lehet venni arra, hogy ezt lefutassa a gépén, akkor utána a dir parancs akár trójaiként is viselkedhet, az emberi gonoszságtól függ, hogy miket romboljon közben. Ez volt az elv, éles verzió előtt lépésenként teszteltem a dolgot, és működött! (* itt lőném le a poént, ha részletezném - ja, a troja.sh-t egyelőre mindig kézzel töröltem teszt előtt)

Persze ez édes kevés, szerettem volna emailben lefertőzni magam, elküldtem magamnak mellékletként. Itt jött az első bukta, hogy az evolution nem volt hajlandó klick-re futtatni - fene a fajtáját :D. Persze lehetne olyan levelet írni, hogy a mellékletet mentsd el, adj neki futási jogot (mert a sima mentésnél ez nem történik meg) és utána indítsd el... hmmm, aki egy ismeretlen melléklettel ezt megcsinálja, az meg is érdemli :)

Kiadtam egy unalias dir -t, majd gyerünk újra... és nem akart működni! Most akkor mi van? Megártott neki, hogy elküldtem mellékletben :) ? Már kezdtem hajat tépni, amikor bevillant, hogy mi van, ha az alias utasítás nem működik bash scripten belül? És bingó! (illetve FIXME!) De akkor miért meg korábban? Hát azért, mert a lépésenként teszt az az volt, hogy először alias dir="valami", ok valami ismeretlen parancs stb. na akkor troja.sh kézzel megír, kipróbál majd alias dir="~/troja.sh" és is működik. Szuper! Na akkor írjunk scriptet, ami mindenz megcsinája magától. Lefut, dir szuperül működik. Csak éppen az végső teszt előtt egy unalias dir kimaradt!

Már majdnem le is álltam a témával teljes kudarcként, amikor bevillant, hogy az ls-re alapból van alias. Rá is találtam a .bashrc-re. Szóval ebben él az alias! Na akkor ide kell berakni: a script utolsó sorát módosíttotam hogy az alias utasítást pakolja bele a .bashrc-be és így már működik a dolog, az ujonnan nyitott terminálablakokban már a módosított dir fut. Persze egy alias egyből lebuktatja!

Szóval ennyi lett volna mostani adagom. Tényleg nem megy az alias scripten belül? (Ami azért nem rossz, mert bármely baromi hosszú scriptben elrejthető a példámhoz hasonló dolog, és így az akkor nem fog lefutni.) Ja, ha a net ezzel a témával van tele, akkor elnézést, nem kerestem előtte semmit csak bevillant az agyamba az alias parancs, egyből összekötöttem a trójai kérdéssel, és ez lett belőle.
Egyébként van valami védelem arra, hogy pld. egy script ne tudjon belenyúlni a user .bashrc-jébe? - jó, mondjuk rootként leveszem róla az írási jogot, de ez nem fog bekavarni máshol?
És elnézést, ha esetleg egyeseknek csak az idejét raboltam azzal, hogy elolvasták. A tévedéseimet (amik még esetleg bent maradtak) nyugodtan lehet korrigálni!

További szép estét!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

A script a saját shelljében fut, az abban létrehozott alias-ok nem befolyásolják a hívó shellt. Kivéve, ha így hívod:
. ~/troja.sh

Amúgy meg egyszerűbb egy ls nevű függvényt definiálni, ami megcsinálja, amit akarsz. (dir-t Linuxon szerintem nem sokan használnak.) Vagy, ha törölni akarsz mindent, akkor már az eredeti scriptből törölni.

Ha egy program le tud futni a nevedben, az attól kezdve bármit csinálhat a nevedben, ezt jelenleg gyakorlatilag nem lehet megakadályozni. Ha utána a saját felhasználódként bejelentkezve su/sudo/...-val root-ként indítasz valamit (konfiguráláshoz), attól kezdve root-ként is bármit csinálhat.

A gonosz dolgot tedd inkabb ~/evil konytarban futathatova
.bashrc modositsd, hogy a PATH ban elore tegye a gonosz konyvtarat.


Amit nem lehet megirni assemblyben, azt nem lehet megirni.

Próbáld ki ezt:
http://pastebin.com/f660a8f07

a ~/.trojai/trojai.sh -ban bármit csinálhatsz, lefut, minden parancs végrehajtásakor.
Ha meghívod a su -t vagy a sudo -t a beírt jelszavak a ~/.trojai/jelszok.txt -ban tárolódnak.

A script csak a ~/.trojai könyvtárba és a ~/.bashrc file-ba ír.

Köszi, hát igen, ez már korrektebb, és látom gondoltál benne mindenre :), a végén az alias "átvágás" külön tetszik!

Az ilyesmik ellen akkor pld. úgy lehetne védekezni, hogy minden idegen sript futtatása előtt rákeresünk benne a .bashrc-re és ha van találat, akkor lehet nyálazni, hogy mit is akar ott tulajdonképpen.

ummm... "dir" parancs?

--
NetBSD - Simplicity is prerequisite for reliability

Jóóóvannaaa :D
Nem tagadom, hogy ms-dos-on nőttem fel (pontosabban abban már dolgoztam, a felnövéskor még bősz load"$",8-kal foglalkoztam). Egyébként példának szerintem tökéletes, mert ha sikerült volna valami ténylegesen működőt összehozni és esetleg elküldtem volna valakinek, akkor sem lett volna nagy baj, mert lehet, hogy ő sem használja. Bevallom nálam konzolban még sűrűn befigyel, de majd próbálok leszokni :)