GNU/Linux >> Znalost Linux >  >> Linux

variabilní dostupnost prostředí v Linuxu

Pojďme sledovat tok důvěrných dat. V této analýze se rozumí, že cokoli může udělat Alice, může také root. K datům může mít přístup také externí pozorovatel „o úroveň výš“ (např. s fyzickým přístupem ke sledování na diskové sběrnici nebo v hypervizoru, pokud kód běží na virtuálním počítači).

Nejprve se data načtou ze souboru. Za předpokladu, že pouze Alice má oprávnění ke čtení souboru a soubor není jinak prozrazen, může pouze Alice volat cat /home/alice/fav_food.txt úspěšně. Data jsou pak v paměti cat proces, kde k němu má přístup pouze tento proces. Data jsou přenášena potrubím z cat příkaz volajícímu shellu; data na potrubí mohou vidět pouze dva zúčastněné procesy. Data jsou pak v paměti procesu shellu, opět soukromá pro tento proces.

V určitém okamžiku data skončí v prostředí shellu. V závislosti na shellu se to může stát, když je export nebo pouze tehdy, když shell spustí externí program. V tomto okamžiku budou data argumentem execve systémové volání. Po tomto volání budou data v prostředí podřízeného procesu.

Prostředí procesu je stejně soukromé jako zbytek paměti tohoto procesu (z mm->env_start na mm->env_end v paměťové mapě procesu). Souvisí se zásobníkem počátečního vlákna. Existuje však speciální mechanismus, který umožňuje ostatním procesům zobrazit kopii prostředí:environ soubor v procesu /proc adresář (/proc/$pid/environ ). Tento soubor je čitelný pouze pro jeho vlastníka, kterým je uživatel spouštějící proces (u privilegovaného procesu je to efektivní UID). (Všimněte si, že argumenty příkazového řádku v /proc/$pid/cmdline , na druhou stranu jsou čitelné pro všechny.) Můžete auditovat zdrojový kód jádra a ověřit, že je to jediný způsob, jak uniknout prostředí procesu.

Existuje další potenciální zdroj úniku prostředí:během execve volání. execve systémové volání přímo neprosakuje prostředí. Existuje však obecný mechanismus auditu, který dokáže zaznamenat argumenty každého systémového volání, včetně execve . Pokud je tedy auditování povoleno, může být prostředí odesláno prostřednictvím mechanismu auditu a skončit v souboru protokolu. Na slušně nakonfigurovaném systému má k souboru protokolu přístup pouze administrátor (v mé výchozí instalaci Debianu je to /var/log/audit/audit.log , lze číst pouze rootem a zapisovat do auditd démon běžící jako root).

Lhal jsem výše:napsal jsem, že paměť procesu nemůže číst jiný proces. To ve skutečnosti není pravda:stejně jako všechny Uniice, Linux implementuje ptrace systémové volání. Toto systémové volání umožňuje procesu prozkoumat paměť a dokonce spustit kód v kontextu jiného procesu. To umožňuje existenci debuggerů. Pouze Alice může vysledovat Aliciny procesy. Navíc, pokud je proces privilegovaný (setuid nebo setgid), může jej sledovat pouze root.

Závěr:Prostředí procesu je dostupné pouze uživateli (euid), na kterém běží proces .

Všimněte si, že předpokládám, že neexistuje žádný jiný proces, který by mohl uniknout data. V normální instalaci Linuxu neexistuje žádný kořenový program setuid, který by mohl odhalit prostředí procesu. (U některých starších unices ps byl setuid kořenový program, který analyzoval část paměti jádra; některé varianty by ochotně zobrazily prostředí procesu všem a všem. V systému Linux ps není privilegovaný a získává svá data z /proc jako všichni ostatní.

(Všimněte si, že to platí pro přiměřeně aktuální verze Linuxu. Myslím, že před velmi dlouhou dobou, v dobách jádra 1.x, bylo prostředí světově čitelné.)


Původně jsem chtěl říct "ne". Hodnoty proměnných prostředí jsou na uživatele a žádný jiný uživatel nemůže číst ani zapisovat do prostředí jiného uživatele. vars. Na SO je však zajímavá drobnost, která naznačuje, že root je schopen tuto informaci alespoň přečíst pomocí /proc/<pid>/environ . Doposud jsem o tomto rozhraní specifickém pro Linux nevěděl.

https://stackoverflow.com/a/532284/643314

Díky tomu to vypadá, že toto rozhraní je pro ostatní uživatele stále nečitelné, i když jsou ve stejných skupinách. Oprávnění jsou nastavena na 400 pro soubor prostředí a /proc zabraňuje chmod v jeho ovlivnění. Mám podezření, že bezpečnostní doména pro oddělení proměnných prostředí mezi uživateli je stále nedotčená a nelze ji obejít běžnými prostředky.


Navzdory Gillesově teoreticky správné odpovědi:Do proměnných prostředí bych nevkládal tajemství.

  • Proměnné prostředí jsou obvykle definovány v horní části stromu procesu (např. prostřednictvím $HOME/.profile ).
  • Uživatelé nezacházejí s obsahem prostředí jako s tajemstvím.

Stačí, aby jeden proces zaprotokoloval proměnné prostředí do celosvětově čitelného souboru:env >> env-traces.txt nebo podobné. Nemůžete to ovládat.


Linux
  1. Tipy a triky pro proměnné prostředí Linuxu

  2. Stavy procesu Linuxu

  3. Povolené znaky v názvech proměnných prostředí Linux

  1. Linux CreateProcess?

  2. Nastavit proměnnou prostředí s prostorem v Linuxu

  3. Vytvoření démona v Linuxu

  1. Proměnné prostředí Linux:Jak číst a nastavovat na Linux VPS

  2. Vylepšení přístupnosti Kali Linuxu

  3. Linux:proces do služby