A co zranitelnost, že napadený server může poslat jiný obsah souboru, než na něm je? Třeba kopíruji ze vzdáleného serveru skript, server mi podstrčí škodlivý kód, já ho v dobré víře spustím (kdo kontroluje známý skript, který si právě zkopíroval z jiného serveru) a voilá, můj počítač je napadený! Na to CVE a fix je? ;)
Ked uz je raz server kompromitovany to je velky problem. A asi preto existuju aj tieto zranitelnosti v klientovi lebo autor klienta to chape rovnako. Ak je server kompromitovany pan boh nam pomahaj, klient uz si velmi nepomoze. Ale OK, opravia dalsie chyby, ide sa delej. Je dobre ze sa niekto venuje takymto veciam.
Tak ty klíče snad jsou v ~/.ssh/authorized_keys a ~/.ssh/known_hosts, ne? Nastavím pro /home/*/.ssh jako vlastníka root, povolení k zápisu jenom pro vlastníka, zákaz připojení roota na dálku a pak má útočník jedinou možnost - SSH + su s heslem na roota... Nějaký SCP se další spojení nepřidá. Ani klient, ani server. Ani oblbnutý uživatel.
LOKÁLNĚ si nastavím práva a vlastníka k souborům v /home/$user/.ssh tak, aby je $user nemohl spustit.
SSH klient v kontextu uživatele $user pak nemůže měnit ani přidávat klíče. Uživatel $user si bez SU nemůže přidat další servery, na který se smí připojit. A dokonce ani smazat/přegenerovat klíče, takže ti odpadne řešení situací, že včera to fungovalo a dneska ne.
Zákaz přihlášení jako root je standardní doporučovaná věc, přihlásíš se jako jiný uživatel a přepneš se přes SU.
Co je v tom za problém?
Za prve otazka. Mas to tak urobene? Ci az ako reakcia na tieto chyby ktore aj tak opravia.
Za druhe ak ti moze prepisat akykolvek subor tak nemusi ist cez ~/.ssh moze ti urobit uplne hocico, prepisat bashrc, nahrat celeho noveho ssh klienta ktory kasle na tvoj ~/.ssh a nastavit PATH, ... fantazii sa medze nekladu.
Jistě, proto je celý ten původní příspěvek od L. úplně mimo mísu. Tohle prostě není typ problému, který lze vyřešit na straně klienta, leda by ten klient měl o obsahu kopírovaného souboru dodatečnou informaci odjinud (typicky nějaký checksum), pomocí které dokáže pravost obsahu toho souboru ověřit.
Co to kecáš? Když nemáš obsah souboru s čím porovnat, jak chceš ověřit jeho správnost? Pokud jde o seznam souborů, které chceš kopírovat (včetně nějakého blacklistu, který zabrání přepisu některých lokálních souborů), ten si můžeš na klientovi definovat a porovnat se seznamem souborů, které přicházejí ze serveru, a podle toho se zachovat. S obsahem souboru to uděláš jak?
Vtip je v tom, že ani ten "správný" seznam souborů na klientovi (v některých případech) nesestavíš. Protože prostě nevíš, které soubory na serveru reálně jsou a které ne. Polopaticky. Dám příkaz:
scp server:adresar/.* ~
Server pošle soubor (třeba) .bashrc. Jak rozhodneš, jestli je "opravdový" a máš ho uložit a zkopírovat, nebo jestli je podvržený? Nezjistíš, stejně jako v mém příkladu nezjistíš jestli ten skript je nebo není podvržený (leda by ho prozkoumal člověk, což ovšem v 99.99% případů neudělá).
Celý ten můj příspěvek byl takový inteligenční test, jestli lidem tahle analogie dojde nebo ne. Ty jsi evidentně neprošel. Ale nevěš hlavu, aktuální skóre je že 7 lidi prošlo a 10 ne, takže jsi s většinou.