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 editovat

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 editovat

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ávnou sekvenci 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.

Nevýhody port knockingu editovat

Port knocking je zcela závislý na robustnosti démona, který port knocking zpracovává. V případě selhání démona bude odepřen přístup na tento port všem uživatelům a z hlediska použitelnosti a bezpečnosti, je toto selhání nežádoucí. Moderní port knocking implementace zmírňuje tento problém tím, že poskytuje monitorování procesu démona a v případě selhání ho restartuje. Systémy, které nepoužívají kryptografický hash jsou náchylné k spoofing útokům IP adres. Tyto útoky, formou zamezení přístupu, používají principy port knockingu na známé IP adresy k zablokováním těchto adres, zasláním paketů s falešnou IP adresou na náhodné porty. Servery pomocí statického adresování jsou obzvláště citlivé na tyto typy zamítnutí služby, protože jejich adresy jsou dobře známy.

Port knocking může být problematický v sítích s vysokou latencí. Port knocking totiž závisí na paketech přicházejícím ve správném pořadí, aby byl port otevřen. TCP/IP je na druhou stranu navržen tak, aby fungoval sestavením paketů které jsou mimo provoz do soudržné zprávy. V těchto situacích je jediným řešením pro klienta, aby i nadále přeposílal správné pořadí paketů v pravidelných intervalech, dokud sekvence není potvrzena serverem. Port knocking nemůže být použit jako jediný ověřovací mechanismus pro server. Z bezpečnostního hlediska, jednoduchý port knocking spoléhá na bezpečnost utajením: neúmyslné zveřejnění sekvence knockingu kompromituje všechna zařízení, která tuto sekvenci využívají.

Nešifrovaný port knocking je vystaven možnosti odposlechnutí pomocí metody odchytávání paketů. Trasováním v síti vhodné délky lze detekovat správnou sekvenci klepání z jedné IP adresy, a tím poskytnout mechanismus pro neoprávněný přístup k serveru a rozšíření do připojené sítě. Jakmile je jednou tato sekvence kompromitována, soubory protokolu na zařízení jsou zdrojem dalších platných sekvencí, a odhalují tak další možnost selhání. Řešením je obohatit každou klepací sekvenci o jednorázové heslo. Aby byl v praxi použitelný, musí být port knocking kombinován s jinými formami ověřování, které nejsou náchylné k opakování nebo k man in the middle útokům.

Reference editovat

V tomto článku byl použit překlad textu z článku Port knocking na anglické Wikipedii.