Naprogramujte klientsky skript pro jednoduchy botnet. Botnet obvykle pouzivaji blackhati hackeri, aby ovladali mnozinu pocitacu, kam se jim podarilo ziskat pristup. Na kazdem pocitaci bezi "bot", tedy program, ktery prijima prikazy od nejakeho centralniho veleni a vykonava je; prikaz muze byt informace o danem stroji, spusteni nejakeho vypoctu, atd. atd. Abychom proti blackhatum mohli bojovat, je dulezite pochopit nastroje, ktere pouzivaji. Predpokladejte, ze program, ktery bota na pocitac nainstaloval, take zajistil jeho "neviditelnost" pred uzivatelem a jeho spusteni po restartu systemu. Take mu pridelil unikatni ID, kterym se bude bot v ramci botnetu identifikovat; ID vzdy pri spusteni obdrzi jako jediny parametr. Prikazy bude bot dostavat prostrednictvim webu - pravidelne bude kontrolovat urcitou URL, kam bude majitel botnetu vkladat postupne ruzne prikazy (jejich seznam viz nize). Bot by samozrejme nikdy nemel zadny prikaz vykonat vicekrat, tedy si musi pamatovat, ktere uz vykonal. Take by mel majitel mit moznost predat prikaz pouze pro bota s konkretnim id. Format souboru s prikazy je na Vas, jeden napad je pouzit textovy soubor ve formatu: 1 * run ps axu 20 * maillog pasky@ucw.cz 21 * resetlog 40 xb1 set url="http://example.com/c.txt http://1.2.3.4/c.txt" Tady by prvni tri prikazy provedli vsichni boti, posledni pouze bot s identifikatorem 'xb1'; prvni cislo je "sekvencni cislo" prikazu a botovi staci si pamatovat sekvencni cislo prikazu, ktery provedl naposledy, a vykonavat pouze prikazy s vyssim cislem. Bot by mel veskerou svoji cinnost a vystup prikazu, ktere vykonava, nekam logovat; majitel si pak muze vyzadat odeslani logu mailem nebo jeho zresetovani. To je zakladni zpusob, kterym bude dostavat od botu feedback. Logy cinnosti by mely byt opatreny timestampem a id bota. Bot by mel elegantne prezit zrestartovani sveho skriptu. Nemel by zapomenout aktualni nastaveni, mel by navazat na rozepsany log a nemel by opet vykonavat prikazy, ktere provedl pri predchozim behu. Naimplementujte alespon tyto prikazy: run COMMAND Spusti v subshellu dany prikaz a zaloguje jeho vystup a navratovou hodnotu. passwd Zaloguje seznam vsech uzivatelu v systemu. exec URL Stahne z dane URL soubor a spusti jej (muze to byt skript nebo binarni program). Ma-li priponu .gz, pred spustenim jej dekomprimuje. upgrade URL Stahne z dane URL novou verzi skriptu, tou prepise verzi stavajici a spusti ji. autodestroy Smaze sebe sama a skonci. maillog email@address Odesle na danou e-mailovou adresu log cinnosti. resetlog Vyprazdni log cinnosti. set var=... Nastavi konfiguracni promennou 'var' na danou hodnotu. 'var' muze byt: url - URL s prikazy pro botnet; URL muze byt nekolik oddelenych mezerou, pak by skript mel postupne zkouset vsechny URL v seznamu, dokud se nepodari prikazy z nektere stahnout. period - v sekundach, jak casto se ma kontrolovat soubor s prikazy. mailall - e-mailova adresa; je-li nastavena na neprazdny retezec, logovani pracuje v jinem rezimu: po spusteni kazdeho prikazu se informace o spusteni a pripadny vystup odeslou ihned na danou adresu a log se zresetuje. Poznamky: (i) Pamatujte, ze na vetsine linuxovych systemu najdete pro stahovani souboru z webu prikazy `wget` a `curl`. V pripade curlu budete chtit pouzit parametr -f. (ii) Nejjednodussi konfiguracni soubor je shellovy skript, ktery si nasourcujete. (iii) Builtin prikaz `exec` se vam muze hodit, chcete-li v ramci aktualniho procesu misto aktualne beziciho skriptu spustit jiny prikaz. (iv) Vytvorite-li si ve svem domovskem adresari v labu adresar WWW/, jeho obsah bude pristupny po webu na adrese: http://www.ms.mff.cuni.cz/~/ Pokud vam to nefunguje (zrejme trva min. nekolik hodin, nez si webserver vsimne, ze adresar existuje), muzete vyuzit sluzeb pastebin.com; po vytvoreni noveho paste mate mezi ruznymi odkazy na paste i jeden s popiskou 'RAW'. Ale pozor, takovy stazeny soubor musite znormalizovat, bude mit totiz DOSove konce radku a posledni radek bude neukonceny. (v) Pro snadne logovani si vyrobte pomocnou funkci. Presmerovavate-li standardni i chybovy vystup, nezapomente, ze to musite udelat v poradi >soubor 2>&1 nikoliv 2>&1 >soubor (vi) Potrebujete-li znat jmeno sebe sama, vzpomente na $0. (vii) Na rozbaleni souboru by se vam mohl hodit prikaz gunzip.