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

Linuxové noviny 11/2000

K čemu slouží identd?

David Häring, 5. listopadu 2000

Identd je aplikace, která slouží k identifikaci uživatelů vlastnících dotazovaná síťová (TCP/IP) spojení. Představme si, že se chceme přihlásit, dejme tomu pomocí služby ftp, na vzdálený počítač. Během přihlašování se vzdálený počítač našeho počítače dotáže na uživatele, který vlastní přicházející spojení a tuto informaci pak může zapsat do systémového logu, nebo se rozhodnout spojení odmítnout apod. Tato služba používá standardně TCP port 113. Identd bývá obvykle spouštěn přes inetd (případně xinetd apod.). Podrobné informace o definici protokolu IDENT, který identd implementuje, lze nalézt v RFC 1413.

Využití této služby je několik. Poskytuje přehled o uživatelích vlastnících příchozí spojení, může také posloužit k odhalení uživatelů provozujících nekalé praktiky. Dejme tomu, že uživatel "xy" rád posílá poštu s falešnými "From:" hlavičkami. Pokud administrátor systému používá identd, z logu poštovního agenta snadno zjistí, kdo poštu skutečně odeslal, protože např. v logu sendmailu bude následující záznam:

Oct 11 12:57:23 server sendmail[25433]:\
MAA25433: from=vymyslene_jmeno@server,\
size=5, class=0, pri=30005, nrcpts=1,\
msgid=<200010111057.MAA25433@server.domena.cz>,\
proto=SMTP, relay=IDENT:xy@localhost [127.0.0.1]

Ze záznamu "IDENT:xy@localhost" je patrné, že poštu odeslal uživatel "xy" a nikoliv uživatel "vymyslene_jmeno".

Další příklad může být následující: uživatel "xy" se přihlásí pomocí ftp na cizí účet "abc" na vzdáleném počítači (pomineme způsob jakým se dostal k cizímu heslu). Majitel dotyčného účtu si všimne, že jeho účet je používán někým jiným a upozorní na to adminstrátora. Administrátor vzdáleného počítače ze systémového logu zjistí, že se na účet "abc" přihlásil uživatel "xy" ze stroje server1:

Oct 11 13:22:45 server2 in.ftpd[25487]:\
connect from xy@server1
Oct 11 13:22:47 server2 ftpd[25487]:\
FTP LOGIN FROM server1 [10.12.34.56], abc
Oct 11 13:23:10 server2 ftpd[25487]:\
FTP session closed

Administrátor stroje server2 pak může na aktivity uživatele "xy" upozornit administrátora stroje server1. Identd může také zapisovat provedené akce do logu (volba "-l"). Pokud je logování zapnuto, v logu dotazovaného stroje se objeví záznam, ze kterého vyplývá, že bylo dotazováno spojení využívající port 21 (služba ftp):

Oct 11 13:22:37 server1 identd[25488]:\
from: 10.12.34.56 ( server1 ) for: 1323, 21
Oct 11 13:22:37 server1 identd[25488]:\
Successful lookup: 1323 , 21 : xy.users 

Další možnost využití identd spolu s balíčkem tcp_wrappers je omezení přístupu k určitým službám (které musí obsahovat podporu tcp_wrappers) na základě informace o identitě uživatele, které identd poskytuje. Například omezení služby talk pro lokální uživatele a uživatele "abc" vzdáleného počítače server2 zajistí následující řádek v souboru /etc/hosts.allow:

in.talkd:ALL@LOCAL abc@server2.domena.cz

Pokud navážeme na předchozí příklady, administrátor stroje server2 může zabránit uživateli "xy" ze stroje server1 přihlášení na službu ftp editací souboru /etc/hosts.allow (za předpokladu, že ftp démon obsahuje podporu pro tcp_wrappers, viz dokumentace k tcp_wrappers) například přidáním následujícího řádku:

in.ftpd:ALL EXCEPT xy@server1.domena.cz

Rizika spojená s použitím identd

Pokud použijeme identd ve standardní konfiguraci, poskytuje zpravidla přímo jména účtů, která určitá spojení vlastní - tak jako jsme to viděli ve výše uvedených příkladech. Potenciálnímu útočníkovi to umožňuje získat informace o jménech účtů (na základě kterých se může např. pokusit hádat hesla) nebo zjistit pod jakými účty jsou provozovány síťové aplikace ("reverse identd scanning"). To pochopitelně není žádoucí a proto se dále podíváme na možnosti, jak rizika spojená s provozováním služby identd omezit.

Jak rizika minimalizovat?

Identd zpravidla obsahuje podporu {\bd tcp_wrappers}, takže přístup k službě můžeme omezit v konfiguračních souborech /etc/host.allow a /etc/host.deny. Dále kromě možnosti poskytovat přímo jména účtů vlastníků tcp spojení umožňuje identd tuto informaci skrýt v zašifrované podobě. Pak situace vypadá následovně: IP adresa lokálního a vzdáleného počítače, spolu s čísly portů, UID lokálního uživatele a datem jsou zašifrovány pomocí algoritmu DES. Výsledný řetězec je v base64 kódování předán vzdálenému stroji místo uživatelského jména. Administrátor vzdáleného počítače pak v logu vidí:

Oct 16 11:10:58 server1 ftpd[9677]:\
connect from [F2Q3+JSPE0dbsmGGTgm0PdDUrJtEiGVj]\
@server1.domena.cz

V případě, kdy administrátor vzdáleného stroje zjistí nějaké nekalé aktivity pocházející ze stroje server1, musí požádat administrátora serveru1 o dešifrování informace. K dešifrování slouží utilita idecrypt (jejíž výstup má formát datum, UID uživatele, lokální IP adresa a číslo portu, vzdálená IP adresa a číslo portu):

server1 / 20# idecrypt                
[F2Q3+JSnE0dbamGGTwm0PqDUUJhEiMVm]
Mon Oct 16 11:10:58 2000 0 10.76.45.89\
4630 10.23.45.67 22

Abychom mohli tuto variantu použít, musí náš identd podporovat šifrování. V linuxových distribucích se většinou nachází identd bez této podpory, v tom případě je zapotřebí identd s podporou šifrování sestavit ze zdrojového kódu anebo třeba v případě Red Hatu použít balíček pidentd-crypt.

Varianta identd s podporou šifrování odstraní problém s nechtěným poskytováním informací potenciálním útočníkům (jména účtů apod.), na druhé straně ale znemožní používat identd pro omezení přístupu k službám na základě identifikace vzdáleného uživatele. V této souvislosti je třeba podotknout, že omezení přístupu k službám s pomocí protokolu IDENT je jen doplňkem a v žádném případě ne náhradou jiných mechanismů kontroly přístupu (mějme na paměti, že se zde spoléháme na korektnost údajů poskytnutých vzdáleným systémem).

Pokud identd potřebujeme a nemůžeme použít šifrování, můžeme soukromí alespoň částečně chránit spuštěním identd s volbou "-n", která zajistí, že se místo uživatelských jmen budou vypisovat pouze číselné UID. Volba "-N" umožní skrýt uživatele, kteří mají ve svém domovském adresáři soubor .noident. V tomto případě vrátí místo identifikace uživatele chybu "HIDDEN-USER". Užitečná je volba "-F", která umožní definovat obsah a formát poskytované informace. Další užitečné volby jsou "-l" (zápis událostí do systémového logu), "-o" (vrací řetězec "OTHER" místo identifikace operačního systému), "-e" (vrací chybu "UNKNOWN-ERROR" místo chyb "NO-USER" a "INVALID-PORT"). Identd bychom neměli spouštět s oprávněními administrátora, pokud tedy pro identd založíme uživatele/skupinu, pak použijeme volby "-u" a "-g".

Závěr

Je na administrátorovi, aby podle místních potřeb zvážil výhody a nevýhody spojené s používáním identd; skutečně paranoidní uživatelé identd zatratí a nebudou jej používat vůbec :-), jiní v něm shledají užitečného pomocníka. *


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