Portál AbcLinuxu, 2. května 2025 04:51
Používáte PAM modul pam_access? Pak byste měli zbystřit, protože za vhodných podmínek existuje potenciální možnost obejití tohoto modulu.
Předpokládejme, že součástí autentizace uživatele pro PAM službu sshd je modul
pam_access, kterým můžete řídit přístup uživatele k jeho účtu na
základě IP adresy, IP sítě nebo domény odkud se uživatel hlásí (v případě
lokálního uživatele podle terminálového zařízení, což ale není pro náš případ
zajímavé). Nechť obsah konfiguračního souboru
/etc/security/access.conf
je následující:
-:root:ALL EXCEPT 127.0.0.1.
a /etc/pam.d/sshd
obsahuje v sekci account:
account required /lib/security/pam_access.so
Což znamená, že uživatel root se bude moci přihlásit jen z localhostu. Zdálo by se, že takováto konfigurace je neprůstřelná a dotěrní crackeři snažící se přihlásit jako root přes SSH budou mít smůlu.
Jenže tomu tak není. Pokud (a teď vyjmenuji ony hypotetické vhodné podmínky)
localhost.
a reverzní na svoji IP 1.2.3.4
/etc/hosts
(nebo
resolvujete v pořadi bind host)UseDNS
yes
,tak si může utočník začít hledat nůž na další zářez ve svém terminálu.
1.2.3.4
na servergethostbyaddr("1.2.3.4")
localhost.
gethostbyname("localhost.")
1.2.3.4
localhost
pam_authenticate()
match_from()
v pam_access.sogethostbyname("localhost")
127.0.0.1
/etc/security/access.conf
Problém spočívá v tom, že PAM důvěřuje DNS systému. Problém je, že tuto důveru zavádí již XSSO standard, konkrétně definice položky PAM_RHOST. A OpenSSH se jí drží, a proto defaultně předává PAMu hostname a ne IP adresu.
Řešením je vypnutí DNS překladu v sshd démonu volbou UseDNS no
a samozřejmě nepoužíváním domenových jmen v konfiguraci modulu
pam_access.
Problematika samozřejmě není omezena jen na pam_access a sshd, ale týká se jakéhokoliv PAM modulu, který rozhoduje na základě doménového jména. Nebo který rozhoduje základě IP adresy, ale služba jej používající mu předává hostname.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.