v clanku sa pise, ze "...ale obecně TLS – potenciálně ohroženy jsou tedy i další protokoly jako HTTPS nebo VPN..."
VPN nie je protokol ani nahodou.
autor mal zrejme na mysli rodinu protokolov okolo TLS/SSL, nad ktorym je mozne vybudovat VPN [OpenVPN napriklad pouziva TLS protokol].
Souhlasím. Navíc, těch problémů vidím v článku víc. Může kupříkladu někdo hloupé slečně vysvětlit, co je špatně na protokolu telnet? Špatně to začne být imho až v momentě, kdy tím protokolem přenesete něco, co by nemělo být zveřejněno (například heslo). PROČ mi článek podsouvá, že služby typu telnet://horizons.jpl.nasa.gov:6775 jsou bezpečnostní průšvih? Já totiž nechápu V ČEM je použití telnetu zrovna v tomto konkrétním případě špatně a měla bych se mu vyhnout. Dtto platí i pro ftp a v podstatě i pro http, jenže o http se už autor v článku nezmiňuje a dobře ví proč. Imho autor trpí fixní ideou, že telnet se používá pouze na vzdálenou správu serveru, na což je obvykle poněkud nevhodný. Jiná použití mu uchází. A s ftp je to patrně nějak podobně, asi v životě neviděl věci jako ftp.funet.fi . A pak je otázkou jakými dalšími fixními ideami trpí a jak moc brát článek vážně.
Připouštím, že jsem dnes zvláště jizlivá, nicméně prohlášení typu "určitě znáte \(.*) ale doufám, že \1 nepoužíváte" mám až příliš spojené vymývači mozků na mlm akcích a jsem na to poměrně dost háklivá.
k tomu telnetu:
nebolo to az tak davno, co sa dala zneuzit chyba v SunOS 5.10 a 5.11, ktora zneuzivala telnet [respektive bug v jeho daemonovi]
utocnikovi stacilo malo: prikazom 'telnet -l "-froot" a.b.c.d ' ziskal neopravneny root na cielovom systeme. o nebezpeci protokolu, ktory prenasa udaje nesifrovane sa vazne nema cenu bavit - pouzit rsh/rlogin/telnet na prihlasenie ku kritickym systemom [switch,router,firewall] moze len naprosty ignorant.
Takze kdyz se sifrovane prihlasis na ssh, tak bug v jeho demonovi zneuzit nemuzes? Bych rek, ze to stim jaksi vubec nesouvisi. Nesifrovany sluzby proste maji svy misto. Spoustu veci sifrovat nema smysl. U spousty dalsich je to dokonce proti smyslu tech sluzeb samotnych.
Vem si, ze chci provozovat verejnou sit, ale bez klice se do ni nepripojis ... a klic neziskas bez pripojeni do site ...
Když je bug v nešifrovaným, odposlechneš si heslo, přihlásíš se a eskaluješ práva.
Když je bug v šifrovaným, musíš po odposlechnutí napřed heslo dešifrovat a až pak můžeš eskalovat práva,
Takže pro útočníka bez hesla je SSH větší oříšek, než Telnet. Cizinec bez hesla je taky větší nebezpečí pro systém, než např. zaměstnanec, u kterýho je ověřená identita před tím, než mu IT vygeneruje klíče.
Obecně všechny nešifrované protokoly, které neautentizují server klientovi (a naopak) a přenášejí data nešifrovaným plaintextem bez robustní kontroly integrity přenášených dat jsou potenciálně nebezpečné. Včetně http, telnetu a dalších. Ne vždycky a pro každého ale pro někoho ano.
Nikdy nevíš jakým způsobem bude kdo kterou službu používat a jestli ji třeba pak někdo nemůže použít ke sbírání informací, exploitování klienta, atd.
BTW: Dočkáme se zabezpečeného přístupu na root.cz nebo až v příštím století?
Co je na tom spatneho a nebezpeneho? Zeptej se soudruhu v Samsungu treba...
http://www.root.cz/zpravicky/telefony-samsung-jsou-ohrozeny-bezpecnostni-dirou/
Co když mu vnutím nějakou verzi s vyšší revizí z nějaké staging distribuce, která ještě neprošla testováním do stabilní distribuce a je v ní ještě větší bota než kterou zalepuje? Nebo mu u složitějšího fixu zabráním nainstalovat jeden z X balíčků a záplata tak nebude fungovat a otevře ještě neco jiného? Nebo si počkám až bude nějaká díra v apt nebo nějakém xml parseru (tzn. průměrně stačí počkat týden) a pak si vyrobím balíček co to využije a vložím ho do session? Tím pádem mám rovnou remote root exploit.
Zkrátka možností jak mitm útočník může využít to, že nezabezpečený ftp/http je mnoho.
To že Linuxové distribuce včetně třeba Debianu tolerují http v tak kritické oblasti jako je distribuce bezpečnostních záplat nebezpečné protokoly pokládám za hru s otevřeným ohněm.
Jak Apple tak Microsoft používají bez výjimky SSL.
Tak to už na Mars létáme. Aneb nepleťte si mitm a narušení komunikace. Mitm je opravdu spíše tím výletem do Podolí, byť značná část výletníků odmítne nastoupit, protože "tohle není Jim Beam". Nezanedbatelné množství uživatelů ale divnou barvu ikonky neřeší a klidně vleze na podvržený server a v pohodě surfuje "po https, takže bezpečně".
Útočník ví co si stahuješ a leakuješ plno informací. V případě problémů se zabezpečením podpisu balíčků, uniklému klíči k repozitáři nebo chybě v apt má nástupní pole k exploitu (zvlášť když si balíčky stahuješ pravidelně v cronu).
Pak ti třeba může zavírat spojení s aktualizacema a vynutit si chybu v přenosu. Nebo ti třeba do session podstrčí tříterový balíček bashe a nechá ti přetýct kapacitu /var než ho odmítneš až když si spočítáš hash.
I když vím, že řada distribucí to má dělané blbě.
Neexistuje služba, která by nemohla benefitovat z end-end bezpečnosti. Používání zabezpečené komunikace po síti je malá násobilka každé architektury bezpečnosti.
No... Představ si vytahování adres klientů z cizího e-shopu z linuxovýho web serveru. Někdo se naboří do systému a prvně si ho musí očuchat. Co je tam za CMS (to většinou ještě před proniknutím do systému), verzi PHP, web server, databázi,.. To mu sebere nějaký čas a záznamy v logu, navíc to vyžaduje víc znalostí.
Odposlechnutím, že server stahuje jako update PHP verze X, Apache verze Y a MariaSQL verze Z + verzi CMS, ve které zná zatím neopravenou díru, mu ušetří docela dost práce a jde na jisto...
Takže i tady má šifrování smysl. Neodstraní chyby, neovlivní možnost podvrhnutí podepsaných balíčků, ale háže útočníkům klacky pod nohy. V podstatě ty informace o stahování získá jenom provozovatel serveru, ze kterýho se tahají aktualizace (tj. musí mirrorovat distro a musí mít nejlepší spojení). Tím s docela redukuje množství lidí, kteří to mají s útokem snažší.
Zatimco za http:// vetsinou stoji komunitou dlouho ladeny a patchovany indian, za telnetem to bude spis nejaka domaci tvorba.
Jasne, muzu si vymyslet i relevantni pripad, kdy mi vubec nevadi, kdyz se na server nekdo prihlasi a voila - uz mam dalsi protipriklad. Autor je proste v nejakem kontextu...netreba se durdit...
Na telnetu je blby, kdyz ho pouzivate treba pres nezabezpecnou wifi. Neni vubec problem sedet kousek pobliz a videt, co na svem pocitaci v telnetu pisete nebo delate neco jineho.
Ti lepsi dokonce umi do vasi seance podstrcit informaci at uz smerem od vas, nebo k vam, takze vy treba ziskate falesne informace a to muze byt drahe
Neomezuje se to ale jen na wifi, pevne site lze timto zpusobem taky monitorovat, je to sice tezsi, ale da se. Zalezi na vynosu, ktery to utocnikovy prinese.
Proto ja vsude pouzivam SSH a dokonce na vzdalene stroje, ktere poskytuji neverejne sluzby pouzivam tunelovani pres SSH, nez abych jim oteviral verejny port.
Při hledání správné míry zabezpečení jsem po přečtení spousty názorů došel k tomu, že fail2ban (nebo obdobné blokovače IP adres - Denyhost, CSF) je lepší vynechat.
- má to spoustu vedlejších účinků
- řeší některé problémy, ale jiné vytváří
- může mi to zablokovat mou IP adresu
- může to odříznot nevinné uživatele (sdílející IP s útočníkem)
- chrání to jen proti slabému útočníkovi, pro silného útočníka to stejně není překážka
- při zahlcení požadavky se to tímto ještě násobí, protože se na serveru provádí další režie navíc; analýza logů a změna nastavení fw nějaký výpočetní čas stojí
Stejně tak změna portu není zabezpečení, ale "obscuring".
SSH řešit pouze a jedině zakázáním přihlašování hesly a používat dobré klíče.
S blokovacmi suhlasim; rovnako aj s tym, ze zmena portu nie je zabezpecenie. Zmena portu vyrazne precisti logy, co moze pomoct pri analyze. Zakazanie hesiel nie vzdy prejde (=chce tam mat pristup aj niekto dalsi) a zle kluce nechavaju hlasky v logu.
Podobne je to aj s portknockingom, ktory tiez trochu pomaha, ale zase je to za cenu pouzitelnosti.
fail2ban rozhodně není metoda jak zesílit nejslabší bod ochrany.
Nicméně je to metoda jak zlevnit odrážení útoků na místo na které se útočí často. Já místo toho použil pravidlo v iptables, které dovolovalo jen málo spojení z jedné IP za pět minut. Pentium III, zátěž procesoru se z 100% vrátila k celkem normálním 2%.
Používejte aktuální verze software, zkontrolujte povolené protokoly a šifry, délky klíčů. Povolení přihlášení pouze klíčem bezpečnost zvyšuje, zákaz přihlášení na roota přes ssh ji nezvyšuje a naopak může vést k oslabení (musíte používat su), fail2ban bezpečnost nezvyšuje (až na výjimky, kdy zamítnutí přístupu správci ve skutečnosti vede ke zvýšení bezpečnosti...).
Zásadně snižuje? Vy jste si jist, že máte server zabezpečen proti útoku lokálního uživatele? Na roota se přihlašujete vždy tak, že útočník nemůže získat heslo?
Používání neprivilegovaného účtu a nástrojů typu sudo má na serveru význam tehdy, pokud tam jsou správci, kteří mohou spravovat pouze něco. Pokud tam je jeden správce, asi se tam bude většinou přihlašovat právě proto, aby mohl něco jako správce s plným oprávněním nastavit. sudo je pak jenom protivná překážka, kterou se bude snažit co nejsnáz obejít - buď povolí sudo na roota bez hesla (takže to proti odcizení nebo prolomení hesla nechrání vůbec), nebo bude mít na rootovi slabé heslo (takže to proti odcizení nebo prolomení privátního klíče taky moc nepomůže).
Obávám se, že si velká většina lidí neuvědomuje, že aby jim ten zákaz přihlášení na roota k něčemu byl, museli by mít systém odolný proti útoku lokálního uživatele. A to je úplně jiná úroveň zabezpečení.
Aha, takže třeba priviledge separation v sshd nebo provozování služeb pod neprivilegovanými účty je vlastně taky blbost? Když vlastně každý kdo se dostane na lokální účet už je podle vás rovnou root (nejspíš po dvojkliku někam).
Odjakživa je problematika obrany založena na vrstvách, které se doplňují. Ať už z pohledu počítačů nebo třeba z pohledu vojenství. Naši předci to věděli a proto stavěli u svých hradů systém obran, příkopy, předsunuté věže, vnitřní a vnější opevnění, které se doplňují. Mějme k nim trochu respekt a přemýšlejme nad tím a nežijme v opojení zdánlivě nepřekonatelných dogmat (RSA klíč který se dnešním pohledem blbě faktorizuje).
Pokud budete na svém serveru spoléhat na jeden velký zámek (RSA), tak vám ho dřív nebo později někdo vybere. Jakkoliv se to může zdát dostatečně bezpečné.
Používání neprivilegovaného účtu a sudo k administraci i jedním správcem je naopak velice rozumný "best practice", který umožňuje předejít celé řadě problémů a rizik. Byť samozřejmě není jaké žádná není ani tohle všemocná metoda.
Zkuste si zodpovědět co se vám asi stane, když vám někdo ten váš privátní klíč co jde přímo do roota ukradne a o co lépe na tom budu já, když se to stane mému neprivilegovanému účtu a nelajdácky nastavené konfiguraci sudo.
Provozování služeb pod neprivilegovanými účty není blbost - ale stále se považuje se vážný problém a ohrožení celého systému, pokud je pod tou službou možné spustit libovolný kód. Lokální uživatel má mnohem víc možností k útoku a obrana je tak mnohem složitější. Není to nemožné a v odůvodněných případech se to dělá - ale určitě nejsou takhle chráněné servery, jejichž správce zakázal přímé přihlášení na roota, protože něco zakázat a zkomplikovat oprávněnému uživateli přece vždycky musí zvyšovat bezpečnost.
Když vlastně každý kdo se dostane na lokální účet už je podle vás rovnou root
Nic takového jsem netvrdil.
(nejspíš po dvojkliku někam)
Třeba vám do .bashrc přidá alias na sudo, který se vás zeptá na heslo a pošle ho útočníkovi. Jak se proti tomuhle bráníte?
Odjakživa je problematika obrany založena na vrstvách, které se doplňují.
Podstatné je to doplňování. Nemá smysl za jednu vrstvu obrany dávat ještě jednou obranu proti tomu samému útoku, ale mnohem slabší.
Pokud budete na svém serveru spoléhat na jeden velký zámek (RSA), tak vám ho dřív nebo později někdo vybere.
Rozhodně to bude později, než když vy si myslíte, že nespoléháte jen na jeden zámek (a tím pádem mu nevěnujete takovou pozornost), ale ve skutečnosti se váš druhý zámeček rozpadne hned, jak se na něj útočník zle podívá.
Používání neprivilegovaného účtu a sudo k administraci i jedním správcem je naopak velice rozumný "best practice", který umožňuje předejít celé řadě problémů a rizik.
Je možné z té celé řady pár bodů vyjmenovat? Ona pak typická práce takového správce bude vypadat tak, že bude před každý příkaz psát sudo - což bezpečnosti nijak nepomáhá.
Zkuste si zodpovědět co se vám asi stane, když vám někdo ten váš privátní klíč co jde přímo do roota ukradne a o co lépe na tom budu já, když se to stane mému neprivilegovanému účtu a nelajdácky nastavené konfiguraci sudo.
Ve vašem případě si útočník počká, až se přihlásíte na roota, ukradne vám při tom heslo a bude ve stejné situaci, jako kdyby se přihlašoval přímo na roota. Privátní klíč je chráněný heslem, může být na hardwarovém tokenu chráněném PINem. Pokud bych se chtěl chránit dalším stupněm ochrany, budou to buď jednorázová hesla nebo nějaký druh VPN, ale určitě ne přihlašování na jiného uživatele.
Téma "sudo" mě zajímá, zatím ho používám a zatím nejsem pevně přesvědčený ani o tom, že je to nebo není správně. Argumenty pro a proti, mi přišly, že vesměs končí plichtou. Ale našel jsem jeden argument pro sudo, který to pro mě převážil pro používání.
A to je nutnost po pár minutách neaktivity znovu zadávat sudo heslo. Co v tom vidím za výhody:
- když odejdu od svého počítače a sedne si tam kolega s páskou přes oko, tak mu to zamezí provádět v terminálu serveru správcovské věci; ať už ten terminál mám otevřený, nebo si ho sám otevře, protože mám v sezení odemklý svůj privátní klíč (ano, při opuštění počítače bych ho měl zamkout; ale třeba je nějaká krize a připojuju se kdovíodkud kdovíjak)
- mám otevřených několik terminálů serverů (protože je třeba upgraduji), po nějaké době chci u sebe provést nějakou operaci a v samém zamyšlení to omylem napíšu do terminálu serveru; ejhle, sudo se specifickým heslem pro daný server mě tam právě zachránilo provést něco nechtěného (stává se mi několikrát do roka)
Takže zatím sudo používám a čekám jestli se objeví nějaký killer argument, který mě přesvědčí chodit rovnou na roota. Mimochodem, s linuxem jsem začal se sudo, tak možná celou dobu nevím o co přicházím, resp. chápu, že používat roota a přejít na sudo musí být frustrující.
Přesně tohle je důvod, proč považuju běžné implementace zákazu přihlášení na roota + sudo za zmenšení bezpečnosti. Popsal jste tu několik bezpečnostních děr a vydáváte je za zlepšení.
Když odejdete od odemčeného terminálu, kolega s páskou přes oko může stihnout získat práva roota dřív, než se sudo uzamkne – jak dlouho mu asi bude trvat přidat svého uživatele a povolit mu sudo bez hesla? A i kdyby to nestihl, vytvoří vám připravený kolega alias na sudo, který si to vaše heslo pěkně poslechne a pošle mu ho e-mailem. V tomto případě se tedy nejedná přímo o snížení bezpečnosti, pouze vás to ukolébává falešnou představou o dalším zabezpečení, takže začnete kašlat na to skutečné zabezpečení, totiž zamykání terminálu.
Když opakovaně zadáváte heslo roota, máte pravděpodobně nějaké snadné heslo, asi ne příliš dlouhé. Takže to heslo může zkoušet kterýkoli kód spuštěný pod běžným uživatelem na daném serveru. Jak často se objevují chyby umožňující vzdálené spuštění kódu v nejrůznějších síťových serverech? Dokonce stačí nějaký hloupý PHP skript obsahující exec(), o kterém ani nebudete vědět, protože si budete myslet, že ať si tam někdo pod svým účtem v PHP čudlá co chce, že to váš server nemůže ohrozit.
Správou nějakého serveru jsme myslel to, že se tam přihlásím (jako root), pak tam dělám to, co je potřeba pro správu, a pak se zase odhlásím. Situace, že mám někde jen tak otevřený terminál s přihlášeným rootem, a mezi tím dělám někde něco jiného, a pak se omylem přepnu do toho terminálu s rootem, na který jsem vlastně už zapomněl – to je mimo mou představivost.
Při používání sudo nezadáváme heslo roota, ale uživatele (jen pro upřesnění pro kolemjdoucí).
ad. odemčený terminál. Defaultní timeout pro odhlášení u sudo je 5 minut (abychom měli konkrétní údaje). Mluvím spíš na základě životních zkušeností než "akademických". Pokud pracuji s terminálem, nebo jsem s ním před chvilkou ještě dělal, mám to tedy v živé paměti a odhlásím ho. Ale spíš jde o situace, kdy člověk musí provést nějaký akutní zásah, třeba spustí upgrade. Protože vidí že to potrvá několik minut, přepne pozornost jinam, do jiného okna, a protože potom začne s někým mluvit o jiné věci pozapomene, že má otevřený terminál a na chvíli se vzdálí z místnosti. Prostě mám za to, že ten timeout je právě vhodný pro tyto lidské chyby, kdy zapomenu na otevřenou session. A zmíněný pirát může být klidně dítko, které dojde z vedlejší místnosti k počítači, umí popřepínat okna, pomačkat šipku nahoru a enter.
Snadné sudo heslo na mnou spravovaných serverech nemám, není teda nijak hyper silné, ale určitě patří do kategorie dostatečných.
Situace, že mám jen tak otevřený terminál - pro představu: Můžu počít něko kopírovat, stahovat, upgradovat, což může být na desítky minut. Můžu si zapnout htop a průběžne sledovat vytížení. Můžu začít něco nastavovat podle manuálu, začíst se, od manuálu pak odskočit (někdo mě třeba vyruší) a terminál zůstane pozapomenutý. Takové věci můžu dělat na svých pár serverech souběžně. Mám za to, že je lidské někdy pozapomenout na otevřený terminál.
Při používání sudo nezadáváme heslo roota, ale uživatele (jen pro upřesnění pro kolemjdoucí).
To záleží na konfiguraci.
Odemčený terminál – to ovšem pouze spoléháte na to, že budete mít štěstí. Nebylo by mnohem lepší naučit se, že než tomu terminálu přestanete věnovat pozornost, ukončíte ho a necháte dlouhotrvající proces, ať si běží na pozadí ve screenu?
Patří to heslo do kategorie bezpečných i při louskání na lokálním počítači? A i kdyby ano, zadáváte ho pořád dokola v neznámém prostředí, takže útočník má dost možností ho odposlechnout. Pokud je tedy v systému zrovna nějaká verze sudo, pro které je znalost hesla vůbec potřeba…
Ke kopírování, stahování a upgradování už jsem se vyjádřil, když vám běží htop, asi těžko na stejném terminálu omylem spustíte nějaký příkaz, a pro čtení manuálu opravdu nejsou potřeba oprávnění roota.
Mám za to, že je lidské někdy pozapomenout na otevřený terminál.
To sice může být, ale je potřeba dělat taková opatření, aby k tomu docházelo co nejméně, ne se spoléhat na to, že v takovém případě něco zachrání sudo (je dost vysoká pravděpodobnost, že nic nezachrání).
Odhlašovat se a nechat běžet ve screenu - to když chci mrknout jestli už to je, dozvědět se a že ne, to se mám stále dokola přihlašovat a přepínat screen? Není prostě lepší mít to okno otevřené?
Vzhledem k tomu, že to heslo není na roota, ale na mého uživatele (že jde sudo přenastavi tak, aby se tam muselo dávat rootovo heslo jsem ještě neslyšel, každopádně sudo chápu tak, že se zadává heslo uživatele a je to vždy určitě výchozí chování), tak bych ke složitosti hesla asi mohl připočítat, že bude třeba hádat i jméno uživatele, takže je tam ještě o to větší entropie. I s tím se to snad blíží ke kategorii bezpečných.
V neznámem prostředí - tím je míňeno co?
Zapomenuté okno se spuštěným htopem může potenciálně využít jiná osoba a manuály - zapomněl jsem zmínit, že nemyslím manuály v teminálu, ale prostě jinde (na webu v prohlížečí atp.).
bych ke složitosti hesla asi mohl připočítat, že bude třeba hádat i jméno uživatele
Spíš byste měl počítat s tím, že nic takového potřeba hádat nebude. Je to dost pravděpodobné.
V neznámem prostředí - tím je míňeno co?
Například to, že se celou dobu bavíme o případu, kdy se útočník dokázal vaším jménem přihlásit na cílový server. A vy se teď připojujete do prostředí, které ten útočník mohl vylepšit.
Zapomenuté okno se spuštěným htopem může potenciálně využít jiná osoba
Ano, takže není rozumné to okno někomu jinému zpřístupňovat.
nemyslím manuály v teminálu, ale prostě jinde (na webu v prohlížečí atp.).
Číst manuály na webu v prohlížeči pod rootem mi připadá jako ještě mnohem horší nápad, než dohromady všechno ostatní, co jste napsal.
Jinak všechny ty problémy se zapomenutým terminálem řeší jednoduché pravidlo, zamknout počítač pokaždé, když od něj odcházíte. Na rozdíl od spoléhání, že vás zachrání sudo, to doopravdy funguje. A pokud už byste chtěl řešit další úroveň, zaměřte se na timeout uzavření terminálu místo na timeout, po kterém sudo vyžaduje nové zadání hesla. Protože to uzavření terminálu útočníkovi skutečně znemožní škodit, zatímco když má přístup na server pod vaším účtem, má spoustu možností.
Číst manuály na webu v prohlížeči pod rootem...
Ehm. Někdo z nás to překomplikoval. Já tady mám prohlížeč na svém počítači a taky tu mám terminál s sshčkem na server. Tak jaký prohlížeč pod rootem..? Ale nemusíme to pitvat.
Ano, prvotně zamykat počítač, to jsem psal hned. To je jasné. Celou dobu se ale bavíme o tom "extremním" případě, kdy to nešlo.
Uzavírání terminálu háže klacky pod nohy mě.
Zatímco ve vašem preferováném případě. Tzn. používání přímo rootovského účtu ke všemu bez prostředníků v podobě sudo se útočník s takovýma věcma jako děravým sudem, vyměňováním .bashrc a čekáném až se příhlásím, atd nemusí zabývat. Prostě má terminál s rootem, získá ssh klíč k účtu přímo (nebo si ho dopočítá při chybě v ssh, generátoru entropie), atd.
Osobně bych lajdácký přístup čekal spíš u toho kdo sudo nepoužívá než naopak.
Pokud mám neprivilegovaný účet, budu pravděpodobněji používat roota jen když ho budu potřebovat. Tzn. wget neco ; configure ; make ; sudo make install místo všeho pod rootem. Což je další "best practice"
rootovský terminál je prostě ojištěná zbraň a je potřeba to používat opatrně. Pojistky jsou občas otravné, ale správně používané bezpečnostní standard zvýší.
Teď si hraju s novým root-less módem v novém OS X 10.11, kde nad POSIXovými právy je ještě jedna vrstva, která brání rootovi v přepisování binárek a dalším věcem. Další otrava, člověk by řekl, ale podle mě to bude zase další krok k větší bezpečnosti.
V mém preferovaném případě útočník žádný rootovský přístup nemá.
Osobně bych lajdácký přístup čekal spíš u toho kdo sudo nepoužívá než naopak.
Já bych ho spíš čekal od člověka, který se někde dočetl, že má zakázat přístup na roota a používat sudo, tak to tak dělá a neví proč.
Pokud mám neprivilegovaný účet, budu pravděpodobněji používat roota jen když ho budu potřebovat.
Ano, to už jste psal, třeba pro čtení manuálů.
rootovský terminál je prostě ojištěná zbraň a je potřeba to používat opatrně.
To tvrdím celou dobu. Nelze se spoléhat na to, že to možná někdy zachrání timeout na heslo pro sudo.
Pojistky jsou občas otravné, ale správně používané bezpečnostní standard zvýší.
To je právě jedna z největších chyb začátečníků – že mají pocit, že když je něco otravné, tak to zvyšuje bezpečnost.
Jen bych rád upozornil, že se asi každý bavíte o něčem trochu jiném. Sudo a neprivilegovaný uživatel je skutečně obecná "best practice" pro lokální správu. Ale jak správně upozorňujete, tady se nebavíme o této situaci, ale o vzdáleném přihlašování administrátora.
Scénář je ten, že se jako správce loguji přes ssh jako neprivilegovaný uživatel "karel" a teprve pak dávám sudo. To je z hlediska bezpečnosti úplně stejné, jako kdybych se logoval rovnou jako root. A protože si řada lidí myslí, že to bezpečnější je, tak to vlastně je ještě horší, protože mají falešný pocit bezpečí. Důvod, proč to je stejné, je vámi zmiňován - prostě mi prolomí účet "karel", upraví aliasy a já po prvním přihlášení a použití sudo nabonzuju své heslo do světa, nebo jim rovnou založím účet "karel2" se sudo bez hesla.
U administrátorských účtů je tudíž dost jedno, zda mi prolomí roota u ssh, které roota dovolí, nebo neprivilegovaný účet, který ale po přihlášení skoro okamžitě použije sudo. Prostě jakmile se prolomí do účtu admina, tak je problém. Zda je to root nebo "jen" účet co xkrát denně píše heslo do sudo, to na výsledku moc nezmění. Pokud někdo tvrdí, že zablokováním ssh pro roota zvýšil bezpečnost serveru, ke kterému se loguje admin přes ssh, pak skutečně raději utíkat pryč.
to sice někdo může prolomit klíč Karla a přes něj na roota. Ale bude muset napřed zjistit, že ten účet se jmenuje karel. Navíc nebude znát heslo na sudo, tak pokud tam nebude nějaká jiná díra, tajk já se pak budu muset interaktivně přihlásit, nevšimnout si toho, že tam už někdo vlezl a vyměnil my aliasy, nevyměnit klíč, použít to sudo a zadat heslo a až potom je tam. což je přece jen kvalitativní rozdíl než když dostane rovnou k rootovi například prolomením slabého klíče.
Berte to tak, že v ssh, šifrách, generátorech náhodných čísel čas od času chyby bývají. Možnost přihlášení přímo na roota pak v případě chyby typu CVE-2008-0166 ten útok výrazně usnadní.
S nějakými pocity bezpečí to nesouvisí. Lidi občas dělají blbosti.
Nějak jste zapomněl popsat, s čím to porovnáváte. Porovnáváte to s chybami v sudo a s chybami v síťových serverech, které umožňují útočníkovi spustit libovolný kód. Například budete mít na serveru web v PHP se špatně použitou funkcí exec a děravé sudo. Pak můžete mít cestu přes SSH superbezpečnou, ale útočník prostě půjde jinudy.
A teď si to porovnejte. Kolik bylo chyb typu CVE-2008-0166? Já vím o jedné. A kolik bylo chyb v sudo a chyb v různých serverech, které umožňovaly spustit libovolný kód? V druhém případě nemyslím jenom tenhle měsíc, ale celkově.
Nebavil bych se o sudo, ale o su. A jinak -- kolik tedy bylo chyb v sudo, které umožňovaly získat roota uživateli pro kterého sudo nebylo zkonfigurované? (btw. binárku suda může vlastnit nějaká skupina do které přidám jenom lidi co ho můžou používat a "others" nemusí mít nastavený "x" bit).
Díry v sudo jsou a budou, ale útočník na to spoléhat nemůže.
To je opravdu perla. Takže zabezpečení uděláte tak, že spoléháte na to, že útočník na něco spoléhat nemůže. Třeba když neví, jak dlouhé používáte heslo, nemůže spoléhat na to, že by mělo jenom čtyři znaky – takže vlastně klidně můžete čtyřznakové heslo použít.
su je něco jiného, to bych alespoň nepovažoval za bezpečnostní hrozbu. Nicméně stejně si nemyslím, že by zákaz přihlášení na roota a používání su bylo smysluplné bezpečnostní opatření, protože brání jen velmi specifickému útoku, kdy neschopný útočník dostane do ruky nástroj, který mu umožňuje snadno prolomit privátní klíč. Jak už jsem psal, pro obranu před prolomením privátního klíče bych zvolil spíš VPN, portknocking (oba chrání i před chybou v implementaci SSH) nebo dvoufaktorovou autentizaci (jednorázovým heslem). Třeba ta dvoufaktorová autentizace je asi tak stejně nepohodlná, jako su, ale v případě prolomení privátního klíče to zastaví i dost schopného útočníka.
Pokud si pamatuju, tak zrovna v ChallengeResponse byl kdysi nejošklivější bug v historii OpenSSH. Zapojení PAM modulů, keyboard-interactive/challenge-response, a spol do ssh vych se instinktivně vyhnul. Přidává to do poměrně robustního části openssh hódu na prosté ověření klíčů poměrně hodně věcí navíc, zpracování vstupu uživatele v pre-auth fázi, díry v modulech, konfiguraci, atd.
Vím o možnosti použít modul na dvoufázovou autentizaci (tzn. klíč+heslo) Ale vase to bude znamenat složitejší konfiguraci na straně serveru. Další pam moduly, atd. Proti komplikacím bude pak sudo hodně malý opruz.
Podobně VPN je podstatně složitejší kus software, který potenciálně obsahuje větší množství chyb než samotný ssh server. Schovávat ssh za VPN, abych tak ochránil ssh je podle mě blbost. Ale uznávám, že VPN může mít význam v konkrétním prostředí, pokud už tam třeba VPN běží.
Port knocking a další obscurity metody maskující fakt, že tam někde běží služba viz výše.
IPsec je v jádře, jestli to chcete nazývat „podstatně složitější kus software“, to je vaše věc. U port knockingu nejde ani tak o maskování faktu, že tam služba běží, jako o další vrstvu zabezpečení – SSH je přístupné jenom tomu, kdo ho dokáže správným způsobem odemknout. Pokud zabezpečujete proti prolomení privátního klíče pro SSH, port knocking dokáže zastavit docela schopného útočníka, zatímco sudo se ten útočník jenom vysměje. A to navíc port knocking není nebezpečný sám o sobě, na rozdíl od sudo.
Proti komplikacím bude pak sudo hodně malý opruz.
Proti jakým komplikacím?
Používat ke zvýšení bezpečnosti zrovna sudo, které má nejspíš ještě horší historii bezpečnostních děr než sendmail, zní trochu úsměvně :-)
Vrstevnatá obrana je samozřejmě užitečná, ale s trochu jinými vrstvami, než jaké navrhujete. SSH bych chránil jako celek, ne jenom pro přihlašování na roota. Můžete použít port knocking, nebo se třeba připojovat pouze přes nějakou VPN, nebo přidat ještě jeden nezávislý autentikační mechanismus.
Mě přijde zvláštní, že haníte oddělení roota od neprivilegovaného uživatele přes sudo, což je široce používaná věc a tradiční vrstva obrany navíc, která má v bezpečnostní politice místo a zároveň hájíte port koncking. Což je (podle implementace) klasický učebnicový případ "security through obscurity".
To, že je něco široce používané, vůbec neznamená, že je to správně. A nenazýval bych tradicí to, že něco bez přemýšlení používá spousta lidí, kteří to opsali z článků, kam to autoři bez přemýšlení napsali, protože měli pocit, že je to široce používané.
O tom, co má v bezpečnostní politice místo, u mne nerozhoduje to, zda je to široce používáno čtenáři Root.cz, ale třeba bezpečnostní historie dané aplikace. V případě sudo bych tedy musel mít opravdu vážný důvod, proč něco takového do systému vůbec nainstalovat.
Port knocking je trochu netradiční implementace přihlášení heslem. Plést si zabezpečení znalostí nějakého údaje (hesla, klíče) a „security through obscurity“ je docela začátečnická chyba.
U produkcnich systemu ale nelze opravovat vetsinou "ze dne na den" a co se tyce obecne bezpecnosti voli se urcity "trade-off" mezi bezpecnosti,rychlosti a funkcnosti. Obcas u velkych infrastruktur(tisice masin po svete) trva i tyden nebo nekolik tydnu nez k upgradu dojde. Extremni pripad ktery jsem mel byl pul roku kvuli fuzi spolecnosti a mergovani dat.
Takze se prechazi k workaroundum, dalsim zabezpecovacim vrstvam a spoleha se na drahe skatule(l7 firewally) ktere lezi mezi DMZ a zbytkem sveta.
Pouzivam 'Match' volbu a volby 'Address', 'User', 'Group' atp.
Pomoci 'AuthenticationMethods' nebo PAM si muzes nastavit dual-auth - neco co mas a neco co vis, takze kdyz ti leakne private ssh klic a passphrase tak jeste nekdo musi ziskat dalsi passphrase a ta je v tve hlave (treba).
To je fakt, faktorizace prvočísel je docela triviální, protože ta dělitelná nejsou. Faktorizace ne-prvočísel náročná je. Co mě překvapilo byla přednáška o tom, že kryptografie možná udělala obrovskou chybu s tím, že používá součin dvou prvočísel. Protože ačkoliv o obecné faktorizaci a její složitosti pochybuje jen málo matematiků, u faktorizace součinu dvou prvočísel už ta jednota chybí. Bylo tam plno řečí o entropii, dimenzích, ukotvení v prostoru apod., kterým jsem nerozumněl. Myšlenka, že faktorizace součinu dvou prvočísel je ve skutečnosti specifická úloha s mnohem menší výpočetní složitostí než obecná faktorizace, mě dost překvapila. Napjatě čekám, zda "vědět, že jsou dvě a velká" opravdu povede k nějakému vylepšenému útoku.