GNU/Linux >> Znalost Linux >  >> Linux

Jak lze zjistit, zda je binární soubor bezpečný pro udělení oprávnění sudo nedůvěryhodnému uživateli?

Obecně je nemožné to vědět s jistotou – dokonce i zdánlivě dokonale bezpečný program může mít zranitelnosti, což znamená, že jej lze použít pro libovolné akce – ale zde je několik věcí, které je třeba zkontrolovat:

Provádí program některou z následujících akcí?

  • Odhalte obsah libovolných souborů nebo zařízení.
  • Kopírujte, přesouvejte, zapisujte nebo mažte libovolné soubory.
  • Nastavte/upravte libovolné proměnné prostředí (které převezmou jiné privilegované procesy) nebo proveďte libovolné změny konkrétních.
  • Vyvolání IOCTL nebo jiná interakce s libovolnými zařízeními.
  • Změňte vlastnictví nebo oprávnění k libovolným souborům.
  • Připojte libovolné souborové systémy nebo změňte možnosti připojení u stávajících.
  • Umožněte přímý přístup do paměti systému nebo libovolného procesu (jako je ladicí program).
  • Povolit spouštění libovolných programů.

Jakýkoli program, který něco z toho dělá, není bezpečné udělit uživateli s nízkým oprávněním sudo přístup k. To vylučuje například jakýkoli program se schopností určit výstupní soubor (obvykle pomocí -o nebo -f parametr), zpracovat vstupní soubor jakýmkoli způsobem, který odhalí jeho obsah (i jen prostřednictvím dostatečně informativního chybového hlášení o nesprávném vstupním formátu) a velkou většinu běhových prostředí skriptů (včetně shellů).

Pokud nahradíte libovolně v těchto kontrolách s omezeným nebo konkrétní , pak jste problém posunuli o krok níže (nebo několik):proveďte kteroukoli z věcí, které program dokáže vést takové svévolné události, možná prostřednictvím více úrovní nepřímosti? Pokud například váš program umožňuje uživateli nastavit jedinečnou proměnnou prostředí, způsobí to, že privilegovaný program bude číst jiný soubor, než se očekávalo, a tento jiný soubor způsobí, že systém uživatelům umožní připojit soubor obrazu podle vlastního výběru jako souborový systém s setuid respektován, pak nesmíte dovolit nedůvěryhodným uživatelům spouštět tento program.

To, že program projde všemi těmito kontrolami, však ještě neznamená, že je skutečně bezpečný. Pokud například provádí určité síťové akce (jako je naslouchání na omezených portech nebo odesílání nezpracovaných paketů), může být nebezpečné, protože v síti (nebo na stejném počítači) může být jiný program za předpokladu, že každý proces, který to dokáže věci vlastní důvěryhodný uživatel – koneckonců tyto akce vyžadují root – a vy jste tento předpoklad porušili. Navíc, výše uvedený seznam odrážek je jen věc, která mě napadla během několika minut; téměř jistě existují některé cesty k eskalaci privilegií, které jsem nezahrnul.

Nakonec, stejně jako u všech bezpečnostních otázek, záleží na modelu vaší hrozby.

  • Je útočník (nedůvěryhodný uživatel) v počítači s fyzickým přístupem místní, nebo je vzdálený? Je extrémně obtížné zabránit odhodlanému útočníkovi s fyzickým přístupem v získání rootu, zvláště pokud musí být schopen (re)bootovat počítač bez pomoci, takže zvažte, jaká rizika jste ochotni přijmout.
  • Je počítač sdílen mezi uživateli? Pak je třeba zvážit další útoky napříč uživateli, jako je denial-of-service (spotřebováním nadměrných zdrojů nebo tím, že se stroj stane nepoužitelným).
  • Požadujete neodmítnutí (schopnost dokázat, kdo něco udělal)? Pak se musíte ujistit, že můžete spojit všechny akce provedené pomocí sudo uživateli, který je provedl.
  • Potřebujete zabránit uživateli v provádění některých věcí, které obvykle může dělat i uživatel bez oprávnění root (například spouštění libovolných programů v jejich vlastním uživatelském kontextu, i když jsou tyto programy věci jako hry nebo kryptomery nebo otevřený klient TCP? připojení k libovolným hostitelům a portům)? Pak musíte navíc zvážit prostředky, kterými toto omezení vynucujete, a zabránit spuštění jako sudo všem programům, které by uživatele mohly vést k tomu, že by toto omezení mohl obejít.

Atd. Skutečně vyčerpávající odpověď zde nebude možná; záleží na příliš mnoha věcech. Řeknu však toto:je to velmi těžké zajistit, aby nedůvěryhodný uživatel, vzhledem k možnosti spouštět jako root jakýkoli netriviální program (který nebyl explicitně navržen tak, aby jej bylo možné bezpečně spouštět tímto způsobem), udělat něco neočekávaného. I když žádný takový program neumožňuje nic, čemu byste považovali za důležité zabránit, může být možné zřetězit více takových programů dohromady, abyste dosáhli cíle útočníka.


V podstatě se to scvrkává na problém zastavení, můžete auditovat kód nebo zpětně analyzovat binární soubor, ale i když neexistují žádné „funkce“, které vám umožňují provádět libovolné příkazy, stále mohou existovat zranitelnosti v binárním nebo sudo samotném, které by mohly vést k spuštění libovolného příkazu jako root pro povolené uživatele.


Linux
  1. Jak nastavit oprávnění Sudo pro uživatele v Linuxu

  2. Jak nastavit Sudo bez hesla pro konkrétního uživatele

  3. Jak mohu provést řadu příkazů v subshell bash jako jiný uživatel pomocí sudo?

  1. Jak poznám, že jsem na obrazovce?

  2. Jak mohu poskytnout přístup pro zápis do složky všem uživatelům v linuxu?

  3. Jak mohu udělat sudo session hodinu a ne pár minut v Ubuntu 10.04?

  1. Jak mohu změnit všechny soubory patřící jednomu uživateli na jiného uživatele?

  2. Jak mohu bezpečně spustit nedůvěryhodný spustitelný soubor na linuxu?

  3. Jak zjistím, na jaký uživatelský limit narážím?