- předchozí článek - následující článek - obsah - úvodní stránka -

Linuxové noviny 01-02/2001

Ochrana před scanováním portů II: Scanlogd

David Haring, 10, prosince 2000

Scanlogd je dalším z nástrojů určených pro detekci scanování portů, podobně jako např. Portsentry, se kterým jsme se seznámili v minulém čísle Linuxových novin. Na tento článek nyní volně navazujeme a zde se již nebudeme zabývat definicemi "portscanu" či běžnými metodami scanování portů; stručný úvod do problematiky čtenář nalezne v předchozím článku.

Scanlogd umožňuje monitorovat buď lokální systém (zpravidla přes "raw socket"), anebo i provoz celé lokální sítě (k čemuž využívá knihovny libpcap, libnet a libnids). Domovskou stránku projektu nalezneme na serveru Openwall.

Instalace a konfigurace

Instalace scanlogd je velmi jednoduchá. Pokud scanlogd instalujeme za účelem monitorování lokálního systému, kompilaci provedeme příkazem make linux. V tomto případě bude scanlogd používat pouze "raw socket". Pokud chceme monitorovat provoz v lokální síti, použijeme pro sestavení příkaz make libnids, v tomto případě bude scanlogd používat knihovny libpcap a libnids (které musíme předtím instalovat a nastavit příslušné cesty v Makefile). Není vhodné používat pouze libpcap bez libnids (příkaz make libpcap), protože pak scanlogd nebude moci pracovat s fragmentovanými pakety.

Scanlogd nepoužívá konfigurační soubory, konfigurace se provádí před kompilací ruční editací hlavičkového souboru params.h, kde lze nastavit zejména následující položky:

  • SCANLOGD_USER: uživatel, pod kterým scanlogd poběží (je záhodno vytvořit pro provozování scanlogd zvláštní účet)
  • SCANLOGD_PROMISC: zde volíme, zda bude síťové zařízení pracovat v promiskuitním režimu (tedy bude přijímat veškerou komunikaci, nejen tu která je určena danému zařízení). Pokud monitorujeme pouze provoz lokálního systému, ponecháme hodnotu 0.
  • PORT_WEIGHT_PRIV, PORT_WEIGHT_HIGH: zde nastavíme závažnost pokusů o scan privilegovaných portů (porty nižší než 1024 může otevřít pouze aplikace běžící s oprávněním uživatele root) a neprivilegovaných portů. Scanu privilegovaných portů se standardně přikládá větší význam.
  • SCAN_MIN_COUNT: číslo říká kolik portů musí být scanováno ze stejného zdroje během určitého časového úseku, aby byl scan zaznamenán do logu.
  • SCAN_DELAY_THRESHOLD: maximální časová prodleva, která může uplynout mezi scany jednotlivých portů, aby byl scan zaznamenán do logu.
  • LOG_COUNT_THRESHOLD: maximální počet scanů během časového úseku, které budou zaznamenány do logu. Ochrana proti zahlcení systémového logu.

  • položka SYSLOG_IDENT, položka SYSLOG_FACILITY a položka SYSLOG_LEVEL: nastavení logování (odpovídajícím způsobem je třeba nakonfigurovat také syslog).

Závažnost scanu je dána počtem scanovaných privilegovaných portů vynásobených jejich váhou (PORT_WEIGHT_PRIV) plus počet scanovaných neprivilegovaných portů vynásobených jejich váhou (PORT_WEIGHT_HIGH). Scan je považován za významný (a je zaznamenán) tehdy, je-li závažnost rovná anebo větší než hodnota SCAN_MIN_COUNT vynásobená PORT_WEIGHT_PRIV.

Použití

Při kompilaci máme možnost zvolit uživatele, pod kterým scanlogd poběží. Založíme tedy zvolený uživatelský účet (na účet není třeba se přihlašovat, můžeme tedy přihlášení zakázat). Pokud chceme, aby byl scanlogd spuštěn automaticky po startu systému, můžeme jej přidat do startovacích skriptů, např. rc.local).

Záznam scanu vypadá přibližně následovně:

Dec 10 14:24:19 server scanlogd: 11.22.33.44:45048 to 11.22.33.45 
ports 16, 18, ..., FsrPaUxy, TOS 00, TTL 59 @14:24:19

V logu je uváděn čas, zdrojová a cílová IP adresa, seznam scanovaných portů, použité nastavení příznaků paketů a hodnoty TOS a TTL. V uvedeném příkladu byl proveden "Xmas" scan (používá pakety s nastavenými příznaky FIN, PUSH a URG; proto jsou v logu příznaky F, P a U vyznačeny velkými písmeny) na porty 19-21. Scanlogd má limitovanou velikost záznamu, který se do logu zapíše, pokud nám nestačí, tak tato položka je opět při kompilaci nastavitelná v souboru params.h (pamatujme ale na možnost případného zaplnění logu).

Srovnání s Portsentry

Scanlogd na rozdíl od Portsentry scany pouze detekuje a loguje, neumožňuje na scany reagovat modifikací pravidel firewallu či tcp_wrappers nebo spouštěním definovaných akcí. Dále scanlogd analyzuje pouze protokol TCP, zatímco portsentry umí detekovat i UDP scany. Na druhou stranu se portsentry nechrání proti zaplnění systémového logu a je určen pouze pro monitorování jednotlivých systémů, neumožňuje monitorovat provoz lokální sítě.

Závěrem

Scanlogd je jednoduchý nástroj pro monitorování TCP port scanů lokálního počítače nebo i okolní sítě, která je plně dostačující pokud nám jde pouze o zaznamenání scanů. *


- předchozí článek - následující článek - obsah - úvodní stránka -