Všechny vaše názory jsou dobré a máte pravdu, ale než se tím rozhořčíme, musíme si připomenout, jak funguje linuxový bezpečnostní model a co má chránit.
Pamatujte, že model zabezpečení Linuxu je navržen s ohledem na víceuživatelský terminálový server nebo server SSH. Windows je navržen s ohledem na pracovní stanici pro koncového uživatele (ale slyšel jsem, že nedávná generace Windows je přívětivější k terminálům). Zejména linuxová konvence odvádí lepší práci při vkládání aplikací do prostředí uživatelů, zatímco ve Windows všechno důležité běží jako System, zatímco Linux GUI (X Server) je na nic na zabezpečení a Windows GUI má vestavěné efektní věci, jako je UAC. Linux je v zásadě (a vždy byl) na prvním místě server a až poté pracovní stanice, zatímco Windows je tomu naopak.
Modely zabezpečení
Pokud jde o „OS“ (tj. jádro), máte 7 konzolí tty a libovolný počet připojení SSH (neboli „přihlašovacích relací“) – jen tak se stane, že se ubuntu dodává se skripty pro automatické spuštění GUI na tty7
session, ale pro jádro je to jen další aplikace.
Přihlašovací relace a uživatelské účty jsou od sebe docela pěkně izolované, ale Linux má bezpečnostní myšlenku, že nepotřebujete chránit uživatele před nimi samými. V tomto bezpečnostním modelu, pokud je váš účet ohrožen malwarem, je to ztracený případ, ale přesto jej chceme izolovat od ostatních účtů, abychom ochránili systém jako celek.
Například aplikace pro Linux mají tendenci vytvářet uživatele s nízkými oprávněními, jako je apache
nebo ftp
že běží, jako když nepotřebují dělat zakořeněné věci. Pokud se útočníkovi podaří převzít kontrolu nad běžícím apache
proces, může zašpinit další apache
procesy, ale bude mít problémy s přechodem na ftp
procesy.
Všimněte si, že Windows zde zaujímá zásadně odlišný přístup, převážně díky konvenci, že všechny důležité věci běží neustále jako systém. Škodlivá služba v Linuxu má menší prostor k provádění špatných věcí než škodlivý proces spuštěný jako systém, takže Windows potřebuje vynaložit další úsilí na ochranu někoho s právy správce před „sami sebou“.
Prostředí s grafickým uživatelským rozhraním a X Server, který nebyl navržen pro zabezpečení, vrhají do tohoto modelu zabezpečení klíček.
Gnome gksudo vs Windows UAC a keyloggery
Ve Windows, když uživatelský proces požaduje eskalaci oprávnění, jádro vyvolá speciální chráněnou výzvu, jejíž paměť a sběrnice klávesnice/myši jsou izolovány od zbytku zbytku desktopového prostředí. Může to udělat, protože GUI je integrováno do operačního systému. V Linuxu je GUI (X server) jen další aplikací, a proto výzvy k zadání hesla patří procesu, který je vyvolal, běží jako vy, sdílí paměťová oprávnění a vstupní sběrnici s každým dalším oknem a procesem běžícím jako vy.
Výzva pro root nemůže dělat ty luxusní věci UAC, jako je zamykání klávesnice, protože ty už musí být root nebo vyžadují úplné přepracování X serveru (viz Wayland níže). Chyt-22, což je v tomto případě nevýhoda oddělení GUI od jádra. Ale alespoň je to v souladu s bezpečnostním modelem Linuxu.
Pokud bychom revidovali model zabezpečení, abychom to potlačili přidáním sandboxingu mezi výzvy k zadání hesla a další procesy běžící jako uživatel ve stejné relaci GUI, mohli bychom přepsat spoustu věcí. Přinejmenším by si jádro muselo uvědomit GUI, aby bylo schopno vytvářet výzvy (dnes to není pravda). Dalším příkladem je, že všechny procesy v relaci GUI sdílejí sběrnici klávesnice.
Sledujte, jak píšu keylogger a poté stisknu některé klávesy v jiném okně :
➜ ~ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech K400 Plus id=9 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=13 [slave pointer (2)]
➜ ~ xinput test 9
key release 36
key press 44
hkey release 44
key press 40
ekey release 40
key press 33
lkey release 33
key press 33
lkey press 39
okey release 33
key release 39
key press 66
key press 31
Jakýkoli proces běžící jako vy můžete vyčenichat heslo ve výzvě nebo terminálu jiného procesu a pak na sebe volat sudo (to vyplývá přímo z myšlení „není třeba vás chránit“), takže zvýšení bezpečnosti výzev k zadání hesla je zbytečné, pokud zásadně měníme model zabezpečení a provádíme masivní přepisování nejrůznějších věcí.
(Stojí za zmínku, že se zdá, že Gnome přinejmenším sandboxuje sběrnici klávesnice na zamykací obrazovce a nové relace prostřednictvím „Přepnout uživatele“, protože věci, které tam zadáte, se ve sběrnici klávesnice mé relace nezobrazují)
Wayland
Wayland je nový protokol, jehož cílem je nahradit X11. Uzamyká klientské aplikace, aby nemohly ukrást informace nebo ovlivnit cokoli mimo jejich okno. Jediný způsob, jak mohou klienti mezi sebou komunikovat mimo vnější IPC, je projít přes kompositor, který je všechny ovládá. To však nevyřeší základní problém a jednoduše přesune potřebu důvěry na sazeče.
Virtualizace a kontejnery
Pokud pracujete s cloudovými technologiemi, pravděpodobně skáčete nahoru a dolů a říkáte „Docker je odpověď!!“. Opravdu, brownie body pro vás. I když samotný Docker není ve skutečnosti určen ke zvýšení bezpečnosti (díky @SvenSlootweg), poukazuje na použití kontejnerizace a/nebo virtualizace jako forward, který je kompatibilní se současnou architekturou Linuxu.
Dvě pozoruhodné linuxové distribuce, které jsou vytvořeny s ohledem na meziprocesovou izolaci:
Operační systém Qubes který spouští aplikace na uživatelské úrovni uvnitř několika virtuálních počítačů rozdělených do „bezpečnostních domén“, jako je práce, bankovnictví, procházení webu.
Android který instaluje a spouští každou aplikaci jako samostatný uživatel s nízkými oprávněními, čímž získává izolaci na úrovni procesu a izolaci souborového systému (každá aplikace je omezena na svůj vlastní domovský adresář) mezi aplikacemi.
Sečteno a podtrženo: Z pohledu koncového uživatele není nerozumné očekávat, že se Linux bude chovat stejně jako Windows, ale toto je jeden z těch případů, kdy potřebujete trochu porozumět tomu, jak základní systém funguje a proč byl takto navržen. . Pouhá změna implementace výzvy k zadání hesla nic nedosáhne, pokud je vlastněna procesem, který vlastníte vy. Aby Linux získal stejné bezpečnostní chování jako Windows v kontextu pracovní stanice s grafickým uživatelským rozhraním pro jednoho uživatele, vyžadovalo by to značné přepracování operačního systému, takže je nepravděpodobné, že se to stane, ale věci jako Docker mohou poskytnout cestu vpřed v linuxovém nativním způsobem.
V tomto případě je důležitý rozdíl v tom, že Linux je navržen na nízké úrovni jako server pro více uživatelů a oni se rozhodnou nechrání uživatele před sebou samým, zatímco Windows je navržen jako pracovní stanice pro jednoho uživatele. takže v rámci přihlašovací relace musíte mít meziprocesovou ochranu. Je také důležité, že ve Windows je GUI součástí operačního systému, zatímco v Linuxu je GUI jen další aplikací na uživatelské úrovni.
Existuje nějaký bezpečnostní mechanismus v Linuxu obecně nebo konkrétně v Ubuntu, který zabraňuje jakékoli aplikaci zobrazit dialog, který vypadá identicky jako systémový, a žádat mě o heslo?
Rychlá odpověď:Ne.
Z pohledu uživatele neexistuje žádná záruka, že výzva pochází z operačního systému; může to být jakýkoli škodlivý program, který má pouze omezené oprávnění k zobrazení okna, a tím, že požádá o mé heslo, získá neomezený přístup k celému počítači.
Pokud je v počítači škodlivý program, nezáleží ani na tom, který program zobrazuje dialogové okno.
Pokud se jedná o škodlivý program, jak je popsáno v další větě, nemusí vám ani zobrazovat dialogové okno. Pokud se jedná o legální program, může škodlivý program „sledovat“ okno a to, co tam píšete, v prostředí X serveru (terminál je lepší).
Řešení?
Pokud máte důvod se domnívat, že některý program není důvěryhodný, použijte sandboxing (VM nebo menší věci).
Jinak nepožadovat hesla . Tento dialog je pohodlí pro netechnické uživatele. Pokud se zajímáte o bezpečnost nebo o správce organizace nebo podobně, není vůbec potřeba zobrazovat dotaz na heslo GUI. Správně nakonfigurujte oprávnění uživatelských účtů jiných než root (ano nebo ne, ale neptejte se) a nepoužívejte plochu jako root (kvůli tomu a protože je pokušení používat root častěji, než je nutné).
Pravidelným vyzváním uživatele k zadání hesla systém uživatele učí, že poskytnout jeho systémové heslo vždy, když o to nějaká aplikace požádá, je naprosto přirozené.
Jak je popsáno, jen se jich neptejte. Jako admin mají mít „vaši“ uživatelé jasně definovaná oprávnění.
A o automatických aktualizacích jako správce organizace:Jste blázen :) Vážně, nenechte mnoho klientů Ubuntu aktualizovat náhodné věci v náhodných časech. Co takhle centrální obrazy, které udržujete a testujete vy a pak je zavádíte; nebo v opačném směru věci jako Ansible?
Aktualizace zcela nezávisle na zabezpečení mohou věci rozbít. Proto.
Ano. To je nejisté!
Osobně tento dialog vždy zruším. Ne proto, že by to mohlo být falešné, ale protože by to mohlo být skutečné.
Mám „aplikaci“ udělit eskalovaná oprávnění jen proto, že se ptá? Ne, nemyslím si to.
Aktualizace systému jsou v pořádku, dělám je ručně, ale štve mě, že to systém hlášení chyb vyžaduje. Špatný design.