IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 2 - BOTNET - Mechanismy

V minulé lekci, BOTNET - Úvod, jsme si udělali úvod do teorie okolo botnetů.

V dnešní lekci se budeme věnovat mechanismům takového sítě.

Mechanismy

Komunikační protokoly

Komunikace v mém BOTNETU probíhá na základě HTTP požadavků a stahováním souborů s příkazy a dodatečnými údaji.

Odesílání dat hostovi

Data jsou odesílána pomocí HTTP požadavku GET. Program používá Powershell (Batch) a WebClient (C#) k odeslání. Následná implementace URL probíhá v sestavení formátu "kam chci odeslat + údaje" např. http://stránka.com/index.php?data=ahoj. V PowerShell se vytvoří skript v jazyku VBS, který se přenese do souboru poslat.vbs. Tento soubor se spustí a po odeslání požadovaných dat se sám odstraní. V případě C# jsem vyhotovil elegantnější řešení vybíráním hostů, kteří jsou dostupní a modulování veličin na tuto adresu, kdy není nutný žádný soubor, pouze funkce, která přijímá data a odesílá je.

Přijímání dat od klienta

probíhá na principu požadavků GET a POST, které jsou odesílány na webový server (host). Při přijetí tohoto požadavku se ověří heslo a data, která jsou předána a vložena do souboru, odkud si je zpracuje stránka podle naprogramování. Názorný příklad: $promenna=GET[‘id‘]; veškerá data pod klíčem id budou předána do proměnné $promenna a dále zpracována. Bohužel požadavky mají určité omezení a jsou u nich limity znaků. Posílání souborů je vyhotoveno pomocí požadavků POST. Posílání zpráv např. o stavu je pomocí GET.

Odesílání dat klientovi

probíhá stahováním souborů s daty určenými k zpracování. Data v souboru jsou oddělena řádky a klient si vybere vždy jen řádek, který potřebuje získat. Host zapíše do tohoto určeného souboru data na určená místa a vyčkává na jejich stažení a následnou zprávu od klienta o vykonání.

Přijímání dat od hosta

Klient stahuje ve stanovené frekvenci (2Hz) soubor s daty, po jeho stažení se přečtou řádky s příkazy a dalšími argumenty. Host příkazy a argumenty zpracuje a použije podle instrukcí, jakmile jsou zpracovány zašle serveru zprávu o stavu. Datový tok je v rozmezí 50-500bitů za sekundu.

Přijímání dat od hosta BOTNETu - Botnet

Vykonávání příkazů

Selektivní vykonávání příkazů

Všichni klienti mohou vykonávat stejný příkaz, nebo lze vykonávat tyto příkazy i selektivně tzv. jen pro cílové klienty. Po prvním spuštění se každému BOTovi vytvoří jeho jedinečné ID, pomocí něhož můžeme určit, že pouze tento vykoná náš příkaz a ID požadovaného BOTa je uloženo ve staženém souboru a přečteno.

Hromadné vykonávání příkazů

Klienti mohou vykonávat hromadné příkazy tzv. bez udavatele ID. Tyto příkazy budou vykonány všemi klienty, kteří jsou online a naslouchají. Po provedení následuje další příkaz.

Struktura

Klient

Páteřní programy

Tvoří nejvýznamnější část klienta, která je zodpovědná za odesílání, přijímání a vyhodnocování dat. Dále spouští podprogramy a námi definované funkce, které by taky mohly být definované v externí knihovně "dll". Vzhledem k obfuskaci kódu toto není tak snadno proveditelné a není to tak snadno maskovatelné jako jsou vnitřní funkce. Kód je také díky tomuto odolný vůči dekompilaci a reversnímu inženýrství, takže hledání řešení, jak se tohoto programu zbavit, bude komplikované a časově náročné pro výrobce antivirů. Páteřní strukturu tvoří jen hlavní programy, v tomto případě 1 program, který si dokáže v případě potřeby stáhnout dodatečné soubory, které postrádá k činnosti. Páteřní program nesmí být nikdy ukončen, protože by se ztratil kontakt s počítačem, takže musí být ošetřen a patřičně odladěn, aby neselhal nebo nevytvořil nějakou chybu.

Je nutné zvolit takovou frekvenci obnovení, abychom server nezatěžovali více, než je potřeba, a nevytvářeli tak zbytečně velký datový tok. Pokud např. zvolíme přehnanou frekvenci obnovení 100/s ~ 20Mb/s, uživatel si toho všimne, zpomalí se přenos dat a žádný zdarma poskytovaný server nemá dostatečné Traffic limity. Toto je zcela zbytečné pokud bychom zadávali příkazy manuálně. Při strojové komunikaci bychom museli volit jiný způsob, jelikož placené servery budou vodítkem k naší osobě a budeme stíháni za činnost. Běžný limit se vyskytuje od 3GB~30GB /měsíc, což není moc a je nutno počítat s nedostatkem limitu. V případě nedostatečného limitu se program přepojí na jinou stránku.

Podmínky pro páteřní program jsou kompatibilita, bezchybnost, optimalizace, umělá inteligence, síťová komunikace a schopnost rozhodovat na základě dostupných dat. Tyto podmínky je nutné dodržet z mnoha důvodů, např. pokud jej nainstalujeme na nějakém počítači, kterému chybí určité knihovny, nemůžeme očekávat, že program bude bez problémů fungovat. Bezchybnost musí být zachována už jen kvůli shodě náhod a alespoň náš čistý kód musí být natolik bezchybný, aby se sám neukončil a nepřestal pracovat. Optimalizace je nutná pro plynulý chod a nenáročnost našeho programu. Pokud budeme zbytečně přetěžovat služby nebo místo na disku tak by se mohl program i počítač zpomalit a dojít k reinstalaci systému. Umělá inteligence je tu pro ty případy, že některý ze zavaděčů nebo podprogramů selže a naruší integritu i v tomto případě je nutná náprava.

Síťová komunikace slouží k výměně dat mezi klientem a serverem a je nutná její celková diagnostika v případech, kdy vypadne internet nebo služba samotná. V těchto případech je nutné definovat chování klienta. Náročnost komunikace na objemu dat závisí na rychlosti. Proto je nutné přenosy dat dělat častěji po menších dílech než po obrovském objemu dat. Přílišná frekvence odesílání dat vede k nechtěnému DDOS útoku a není možné ji podceňovat, jelikož bychom si při větším počtu klientů zahltili vlastní službu. Schopnost rozhodovat je tu myšlena spíše z hlediska příkazů serverem vydaných a schopnost uskutečňování pokročilých funkcí bezchybně anebo nahlášení chyby a zpracování bez zásahu uživatele.

Pomocné soubory

tvoří programy, které vykonávají služby nemožné uskutečnit samotným páteřním souborem. Je to Aktualizační služba a Služba úplného odstranění. Tyto soubory jsou nutné z důvodu odstraňování samotného páteřního souboru neboť se nedokáže sám přepisovat. Služba Update slouží k obnovení verze na aktuální, pokud jsme provedli změny. Je vybavena podmínkami, které zamezí aktualizaci aktuální verze. Služba úplného odstranění vymaže všechny soubory a stopy zanechané v systému uživatele a poté se sama odstraní. Služby jsou reprezentovány v jazyku Batch. Jsou v základním archivu pro injekci s páteřním souborem, nikoli zvlášť.

Zavaděče

jsou programy, které se starají o jednorázovou injekci do systému a první spuštění. Skládají se z více souborů, které se podle odhalených možností vhodně zvolí. Injekce se týká pouze základních souborů, jako je celek kromě Zavaděče (viz obr. níže). Po dokončení injekce se odstraní a spustí páteřní soubor, který dokončí inicializaci pro daný stroj. Z tohoto programu se sestaví všechny bloky.

Podprogramy

Zřizují takzvaný funkční blok navazující na vyžadované úlohy od serveru, které jsou vykonávány. Úlohy mohou být externí nebo interní, závisí to na jejich velikosti a komplikovanosti. Páteřní soubor je schopen nahrazovat chybějící externí soubory stažením z hosta. Avšak je-li problém interní, je nutná aktualizace celého celku. Podprogramy jsou stahovány až v přídavných souborech, které obstarává páteřní soubor a rozbaleny z archivu.

Podprogramy pro BOTNET - Botnet

Chyba

Pokud je vyvolána výjimka (chyba), je odeslána pro zpracování do bloku odeslání a následně vyřešena. Po každé chybě je program povinen odeslat informaci o vzniklé chybě. Tyto chyby se na hostovi ukládají do souboru s id každého klienta a jsou načítány do bloku pro čtení správcem serveru. Chyby se dělí na maskovatelné, ignorovatelné a kritické. Maskovatelné jsou chyby, které vznikly z měnícího se prostředí neexistujících souborů zdrojů nebo repositářů, bývají často lehce autonomně vyřešeny změnou hosta. Ignorovatelné jsou ty chyby, které nemusíme sledovat, jelikož jsou vytvořené z banálních důvodů např. čtení řádku, který neexistuje, v tomto případě se i využívá tato chyba jako ukazatel prázdnoty hodnoty. Kritické jsou chyby, které zapříčiní chybu programu nebo v horším případě jeho pád. Vznikají v případech neošetřené výjimky.

Bezpečnost z více úhlů

Bezpečnost je nutná již jen z důvodu vývoje programu, kradení kódu od známých antivirových firem nebo jen testování programu bezpečným způsobem, aby neuškodil našemu počítači.

Bezpečnost před antivirovými firmami

Při vývoji programu jsem se setkal se zákeřností antivirových firem, které se mi snažily pokazit moji práci a vzhledem k tomuto nebezpečí chráním programy obfuskací, což je zašifrování nebo upravení kódu, aby nebylo možné reversně odhalit jeho činnost nebo některé jeho statické hodnoty. Byl mi odcizen kód BOTNETu verze 4.4-4.5, který byl označen za novou bezpečnostní výjimku v Oblasti MSIL/Agent.ASP. Testování provedly firmy Microsoft a ESET. Vzhledem k spouštění počítačů na jejich zařízeních mi docházely zprávy o virtuálních počítačích nacházejících se ve firmách např. Microsoft. Výše zmíněné firmy se domluvily na blokaci stránek a řešení bezpečnostního rizika. Naštěstí díky ochraně kódu škody nebyly tak rozsáhlé a firmy zablokovaly pouze jednoho hosta a obfuskovaný kód, který jsem byl nucen přepsat. Celkový program jsem upravil, aby se nedal tak lehce opět získat a při narušení od firem se pouze odhalí jeden program a maximálně jeden host. Při této možnosti jsem zavedl blokování a dvojnásobné šifrování RSA a Xcrypt. Povolení pro BOTA k vysílání je zavedené na osobní povolení pro určitou adresu BOTA s klíčem.

Možnosti bezpečného testování Programu

Testování programu může být ošemetné již jen z toho důvodu, že si nechceme zanést vlastní počítač, proto používáme Virtuální počítače. Testování mého programu proběhlo na zhruba 20 počítačích Mendelovy Univerzity a Firem ESET, Microsoft, VirusTotal a dobrovolníků. V tomto případě byla na počítači nahrána záloha nebo byl nastaven pasivní režim programu, který počítači neškodil. Program používá verzi NetFramework 4.5.2+, vzhledem k tomu musela být doinstalována data na starších počítačích, ale nové počítače už jsou těmito programy vybaveny. Pro testování programu byla zvolená verze programu s grafickým rozhraním takzvaným GUI. Nebo Visual Studio.

Prevence proti zneužití

Kvůli krádeži kódu a jeho zneužití je program zajištěn již několika způsoby: Šifrováním, Omezeným zásobníkem hostů a Obfuskací.

Šifrování

Tímto způsobem jsou ošetřeny téměř všechny části programu: archivy, programy, databáze, přístup a komunikace. Jelikož všechny prostředky, co si program stahuje, jsou početnější, je potřeba je vložit do archivu, který je heslovaný a zašifrovaný. Programy v archivu jsou obfuskovány a ošetřeny proti reverznímu inženýrství. Databáze jsou ukládány uvnitř programu, který je již zašifrován. Přístup k webovému ovládání je také ošetřen heslem, aby se dovnitř dostal pouze oprávněný člověk. Komunikace mezi serverem a klientem je šifrována rovněž pomocí různých šifrovacích algoritmů.

Omezený zásobník hostů

Jsou v něm uložení hosté, které může BOT zkoušet, pokud některý z nich nefunguje.

Zásobník je editovatelný pouze přímou kompilací, jiným způsobem není možný upravit.

Obfuskace

Je proces, kterým se znemožňuje reverzace kódu a činnosti. Většina programů v tomto projektu je tímto ošetřena. Obfuskace je více druhů jak kryptografické tak převádění do nesmyslných znaků. Všechny tyto způsoby se užitností liší a jejich eskalací se zvyšuje odhalitelnost obfuskace a úpravy programu. Obfuskace se dá indikovat jako škodlivý program.

V příští lekci, BOTNET - Programování klienta, se budeme věnovat programování klienta.


 

Předchozí článek
BOTNET - Úvod
Všechny články v sekci
Botnet
Přeskočit článek
(nedoporučujeme)
BOTNET - Programování klienta
Článek pro vás napsal Jiri Otoupal
Avatar
Uživatelské hodnocení:
10 hlasů
Autor se věnuje Zabezpečení Softwaru, Inovaci v sítích , Správa Serverů,Malware,Exploiting, Penetration Testing
Aktivity