Port knocking

Z Multimediaexpo.cz

Port knocking (česky: klepání na porty) označuje v počítačových sítích metodu, jak si z nedůvěryhodného počítače otevřít přístup do počítače nebo počítačové sítě chráněné firewallem bez nutnosti se na počítač s firewallem přihlásit a jako administrátor jeho nastavení ručně změnit. Tento způsob umožňuje mít firewall vůči nedůvěryhodným počítačům zdánlivě úplně uzavřený a přes to mít možnost pomocí speciální utajené sekvence datagramů jeho nastavení změnit. Metoda umožňuje vyhnout se zneužití bezpečnostních chyb v programech obsluhujících trvale otevřené porty.

Popis funkce

Otevření přístupu lze dosáhnout generováním pokusů o připojení na skupinu předem specifikovaných portů. V případě, že byla přijata správná sekvence pokusů o připojení, pravidla firewallu jsou dynamicky modifikována a tím je žadateli umožněn přístup na port(y), o který(é) žádal. Další varianta zvaná Single Packet Authentication umožňuje autentifikaci pomocí jednoho zašifrovaného paketu.

Hlavní cíl port knockingu je předcházet využívání exploitů na permanentně otevřených portech. Díky tomu skenování portů vzdáleného počítače vykazuje pouze porty zavřené a otevřené jsou jen pro hosty, kteří odeslali správnou klepací sekvenci.

Implementace port knockingu se provádí démonem, který sleduje logovací soubor firewallu na pokusy o připojení a podle nich následně mění konfiguraci firewallu. Lze také uskutečnit procesem, který zkoumá pakety na vyšší úrovni (například pomocí zachytávacího rozhraní Pcap). Proces pak pakety přijímá již otevřenými TCP porty bez nutnosti klepací sekvence.

Klepnutí je podobné tzv. secret handshake a může se skládat z libovolného počtu paketů TCP, UDP nebo ICMP i jiných protokolů poslaných na čísla portů vzdáleného počítače. Klepnutí mohou být jednoduchá, od posloupnosti (např. TCP port 1000, TCP port 2000, UDP port 3000) až ke komplexnímu závislému na čase, nebo na zdrojové IP adrese závislému klepnutí.

Port knocking démon na straně serveru naslouchá paketům na určených portech (případně čte log firewallu nebo zachytává pakety). Klientem je speciální nástroj, který může být jednoduchý jako netcat, nebo modifikovaný program ping nebo komplikovaný jako hashový generátor a musí být použit před obvyklým pokusem o připojení ke službě.

Většina port knocking programů jsou stavové systémy v tom, že pokud první část klepnutí byla úspěšně přijata a chybná druhá část nedovolí vzdálenému uživateli pokračovat, není uživateli poskytnuto žádné vodítko, na jakém místě v sekvenci nastala chyba. Často jediná možnost jak zjistit nezdařený pokus je na konci sekvence, kde port, který měl být otevřen, zůstal uzavřený. Klientovi se tedy zpravidla žádný paket neposílá. Říkáme, že klient provádí pasivní autentizaci.

Přestože tato technika nebyla zatím široce přijata, byla začleněna do nových rootkitů.

Výhody port knockingu

Pokud útočník nezná sekvenci klepání, je pro odhalení i té nejjednodušší sekvence zapotřebí masivní útok typu brutal force. Jde-li například o klepnutí na porty 1000, 2000 a 3000, musí útočník zkoumat všechny kombinace v rozmezí 1-65535 a mezi každým pokusem sledovat, jestli na některém portu nedošlo k otevření. Dokud není přijata sekvence tří klepnutí ve správném pořadí, tedy bez jiných paketů mezi nimi, stavový systém neotevře port.

K uskutečnění úspěšného klepnutí definovaného třemi porty by bylo třeba v nejhorším případě vyzkoušet 655354 kombinací, což je 18 445 618 199 572 250 625, tedy 18*1018, tj. 18 trilionů. Průměrně by tedy bylo potřeba 9 trilionů pokusů. Útok hrubou silou se stává ještě více nepraktickým v případě, že je na straně serveru nastaven časový limit pro přijímání spojovacích paketů.

Když je pomocí port knockingu úspěšně otevřen port, je obecně otevírán pouze IP adrese, která byla strůjcem klepnutí. Je to podobné technice povolování IP adres na základě seznamu (whitelist), ale zde ve více dynamické podobě. Autorizovaný uživatel, situovaný kdekoliv ve světě, je schopen otevřít si port (o který má zájem) pouze pro IP adresu, kterou používá, bez nutnosti zasílat požadavek administrátorovi. Po dokončení práce je schopný port opět zavřít, nebo může být implementován mechanizmus vypršení času a po jeho uplynutí se port sám uzavře.

Jelikož se port knocking chová stavově, několik uživatelů z různých IP adres může být současně v různých úrovních přihlašování. Tak je možné vpustit ověřeného uživatele skrze firewall i během útoků z různých IP adres.

Využití kryptografického hashe uvnitř klepací sekvence způsobí, že sniffing síťového provozu není efektivní pro získání sekvence a využití útoku typu replay.

I když se správná sekvence podaří uhodnout, ukrást, nebo získat pomocí sniffingu, obvyklé bezpečnostní mechanizmy jsou stále aktivní.

Vyžadovaný software na straně serveru i klienta je malý a může se v podstatě rovnat shellovému skriptu, nebo dávkovému souboru, přičemž využití CPU i operační paměti zůstává minimální. Port knocking démon také směřuje k jednoduchosti, což snižuje zranitelnost a tento kód je pak i snáze auditovatelný.

Se systémem port knockingu na portech jako je SSH lze předcházet i útokům hrubou silou na hesla a přihlašovací údaje. SSH démon se nemusí zatěžovat s každým pokusem, uskutečněným bez validního klepání, které se odrazí od zásobníku TCP/IP neškodněji než SSH autentizace.

Systém je plně přizpůsobitelný a není limitovaný otevíráním specifických portů nebo otevíráním portů obecně. Pomocí klepání lze spouštět i shellové skripty, které mohou vykonávat rozličné akce.