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 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. 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. 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) Jednoduchy konfiguracni soubor muze byt shellovy skript, ktery si nasourcujete. (iii) 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, 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. Pro prvotni testovani muzete vyuzit: http://pasky.or.cz/cmd.txt (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.