Skrývání věcí na platformě Windows: Síťová komunikace

Windows Pokročilé Skrývání věcí na platformě Windows: Síťová komunikace

I když se útočníkovi podaří usadit na cílovém stroji a do určité míry zamaskovat svoji přítomnost, nemusí mít ještě vyhráno. Obvykle potřebuje s daným strojem komunikovat, nebo z něho alespoň čas od času odesílat data. Vzhledem k tomu, že v dnešní době se mezi počítači komunikuje téměř výhradně po síti (zvláště na větší vzdálenosti než malé), patří zvládnutí síťové komunikace k „dobrým“ vlastnostem útočníka. V této části si ukážeme několik zajímavostí z této oblasti použitelných na OS Windows.

Základní informace

V rámci tohoto textu má síť pouze jedinou úlohu, a to přenášení dat mezi libovolně vzdálenými počítači. Důležitým faktem pro další čtení je vrstevnatost síťové architektury. Pokud se nějaká entita rozhodne poslat zprávu standardním způsobem, tato zpráva postupně prochází několika vrstvami řešícími síťovou komunikaci, než opustí prostředí odesílajícího stroje. Příjemce ji po úspěšném zachycení opět „prožene“ stejnými vrstvami, pouze v opačném pořadí.

Obrázek 1 zobrazuje tři pro tento text důležité vrstvy síťové architektury: linkovou, síťovou a transportní. Z obrázku je vidět, že aplikace a ovladače mohou pomocí příslušných knihovních funkcí odesílat a přijímat zprávy na transportní vrstvě. Odesílané zprávy putují níže na vrstvu síťovou a linkovou. Na straně přijímajícího stroje se objevují na vrstvě linkové a postupují přes síťovou na transportní. Každá z vrstev rozšiřuje schopnosti té předchozí. Linková vrstva dovoluje posílat kratší zprávy, rámce, mezi sousedními počítači (např. Přímo spojenými jedním síťovým kabelem) a k určení příjemce používá fyzických adres (MAC). Síťová vrstva přidává možnost komunikace mezi stroji, které mezi sebou nemají přímé spojení; používá logických (IP) adres. Transportní vrstva přidává možnost souběžné komunikace více entit na jednom stroji a zavádí spolehlivou a spojovanou komunikace.

Důležité vrstvy síťové architektury

Obrázek 1: Důležité vrstvy síťové architektury

Obrázek 2 ukazuje, jak reálně může vypadat zpráva odeslaná aplikací či ovladačem přes transportní vrstvu. Každá vrstva na straně odesilatele, kterou zpráva prochází, k ní přibalí svá metadata, a to obvykle ve formě hlavičky. Při zpětném průchodu vrstvami na straně příjemce jsou tato metadata postupně odstraňována, až příjemce obdrží původní zprávu (pokud pracuje na stejné vrstvě jako odesilatel).

Schéma zprávy procházející síťovou architekturou

Obrázek 2: Schéma zprávy procházející síťovou architekturou

Na obrázku 4 se nachází i záhadný nápis WFP odkazující na síťovou vrstvu. Písmena tvoří zkratku z názvu Windows Filtering Platform, rozhraní poprvé představené ve Windows Vista a umožňující „jednoduché“ psaní firewallů či jiných druhů paketových filtrů. V případě Windows Vista a Windows 7 toto rozhraní dovoluje filtrovat síťový provoz od síťové vrstvy nahoru, Windows 8 přidávají vrstvu linkovou. Pokud by se tedy útočníkovi podařilo pracovat přímo na linkové vrstvě, obešel by tak bezpečnostní aplikace, které ke kontrole síťové komunikace využívají pouze WFP, alespoň na Windows Vista a 7. Mezi takové aplikace patří i Brána firewall systému Windows.

Komunikace na linkové vrstvě

Windows (ale i jiné operační systémy) dovolují aplikacím i ovladačům pracovat přímo na síťové vrstvě prostřednictvím tzv. raw socketů. V běžných případech se takový přístup nevyplatí, protože znamená ztrátu funkčnosti poskytované transportní vrstvou, ale nachází uplatnění, pokud potřebujete implementovat například příkazy ping či traceroute prostřednictvím protokolu ICMP.. Aplikacím je přímý přístup na nižší vrstvu (linkovou) zapovězen; pro ovladače ale takové omezení neplatí. Zajímavé na tomto tvrzení není ani tak to, že implikuje obcházení rozhraní Windows Filtering Platform (zejména na Windows 7 a starších verzích), ale jak obtížné je ovladač komunikující přímo na linkové vrstvě vytvořit.

Součástí balíku Windows Driver Kit, jež umožňuje vývoj ovladačů pro Windows, je i řada ukázkových zdrojových kódů ovladačů různých zaměření. Patří mezi ně i ovladač s názvem ndisprot, který dovoluje aplikacím prostřednictvím standardních funkcí ReadFile a WriteFile přijímat a odesílat data na linkové vrstvě. Ovladač data zabaluje do speciálních ethernetových rámců, takže jej přímo nelze využít pro skryté odesílání dat na libovolný počítač viditelný v rámci internetu, ale měl by dobře fungovat mezi stroji sousedními. Ovladačem používané rámce jsou typu Ethernet II, což znamená, že v rámci hlavičky linkové vrstvy je nutné specifikovat zdrojovou a cílovou MAC adresu a protokol (EtherType), jehož data jsou zabalena do jednotlivých rámců (například protokol IPv4 používá typ 0x8000. Ovaldač pro položku EtherType používá hodnotu 0xXXXX.

Ukazuje se, že tento ovladač není příliš těžké modifikovat tak, aby dokázal odesílat i rámce údajně obalující například dobře známý (a hojně využívaný) protokol IPv4. V zásadě je potřeba pouze změnit hodnotu EtherType. Typově ndisprot patří mezi tzv. Protokolových ovladačů NDIS (NDIS Protocol Driver). Tento text nevysvětluje účel a strukturu takových ovladačů nejen proto, že ji sám autor těchto řádek zatím příliš nerozumí, ale i proto, že pro provedení zamýšlené úpravy tady znalost není nijak podstatná. Potřebné jsou zejména znalosti ohledně toho, jak ovladače obsluhují požadavky čtení a zápisu přicházející od aplikací.

Nastavení hodnoty EtherType na protokol IPv4 s sebou přináší problém. Ovladač bude přijímat velké množství paketů určených pro někoho jiného, který sídlí na síťové či vyšší vrstvě. Pro účel tohoto textu ale bude stačit umět data pouze odesílat.

Pro důkaz, že odesílání dat přímo na linkové vrstvě stačí úspěšně odelsat zprávu ICMP echo request (ping) na server kdesi v internetu. Tuto činnost lze rozložit do následujících kroků:

  • nastavit ve firewallu pravidlo zakazující komukoliv odesílat příkaz ping,
  • zjistit MAC adresu následujícího síťového prvku na cestě do internetu a použít ji jako cílovou adresu pro odesílaný rámec,
  • vyplnit správně hlavičku pro protokol IPv4,
  • vyplnit správně hlavičku protokolu ICMPv4,
  • přidat nějaká vlastní data,
  • odeslat vše upravenému ovladači ndisprot.

Správné vyplnění dat linkové vrstvy (zejména cílové MAC adresy) zajistí doručení zprávy na následující síťový prvek nacházející se na cestě do internetu (obvykle router). Ten podle položky EtherType zjistí, že se jedná o IPv4 paket a zajistí jeho odeslání směrem, kde by se mohl nacházet stroj s cílovou IP adresou.

Server po přijetí zprávy a jejím zpracování odešle odpověď, která by měla být doručena na počítač odesilatele původní zprávy. Jelikož upravený ovladač ndisprot dokáže data pouze odesílat a nikoliv přijímat, tato zpráva je viditelná i pro síťovou vrstvu, a tedy snadno zachytitelná pomocí rozhraní Windows Filtering Platform i na Windows 7 a starších systémech.

Obrázky 3 a 4 ukazují obě zprávy zachycené programem Wireshark. Ten monitoruje ještě na nižší úrovni než ndisprot odesílá data, tudíž dokáže obě zprávy snadno detekovat. Obě zprávy obsahují stejná data za hlavičkou protokolu ICMPv4.

Zpráva ICMP echo request odesílaná ovladačem ndisprot přímo z linkové vrstvy

Obrázek 3: Zpráva ICMP echo request odesílaná ovladačem ndisprot přímo z linkové vrstvy

Odpověď vzdáleného serveru na zprávu ovladače ndisprot

Obrázek 4: Odpověď vzdáleného serveru na zprávu ovladače ndisprot

Na tomto místě můžete namítnout, že tato ukázka bude fungovat pouze v případě, že je počítač připojen k internetu pouze síťovým kabelem, protože přece rámce odesílané například prostřednictvím bezdrátových sítí mají trochu jinou strukturu. Jelikož ale Windows nad těmito lišícími se strukturami rámců implementují jednotnou abstrakci převádějící vše do ethernetové podoby, výše popsaná ukázka by měla fungovat i v případě připojení přes Wifi.

Zatím se mi nepodařilo úspěšně provést výše popisovaný experiment na fyzických síťových kartách, ať už drátových či bezdrátových. Z virtuálního stroje ve VMWare 11 s NATovaným síťovým provozem vše fungovalo správně.

Na závěr se ještě můžete na obcházení programu Windows Firewall podívat na videu.


 

Stáhnout

Staženo 103x (7.9 MB)

 

  Aktivity (2)

Článek pro vás napsal Martin Dráb
Avatar
Autor se věnuje studiu obecné teorie operačních systémů, vnitřnímu uspořádání jádra OS Windows, trochu také matematice a šifrování

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 



 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!