56 - Bezpečnost v operačních systémech (správa OS, ACL, Audit, BSM, MAC, Capabilities).
pondělí 21. května 2018
17:21
Standardní unixová práva ugo:rwx ([d-]rwxrwxrwx)
Vlastník (u: user), skupina (g: group), ostatní (o: other)
Čtení (r: read), zápis (w: write), u souboru spouštění a u adresáře procházení (x: executable)
Lze definovat pouze jednoho vlastníka a jednu skupinu
Jeden uživatel může patřit do více skupin, maximální počet je ovšem omezen (např. 16)
Určení přístupu
Pokud se shoduje vlastník, má práva podle vlastníka
Pokud patří do skupiny, má práva podle skupiny
ACL
Access control lists: Rozšíření standardních unixových práv
Nové funkce
Nově lze specifikovat více ACL vlastníků a ACL skupin, vlastník a skupina ovšem zůstávají zachovány a ACL vlastníci a ACL skupiny fungují jen jako rozšíření standardních unixových práv
Nově maska, která určuje maximální práva pro ACL vlastníky, skupinu a ACL skupiny (funkce AND) – nevztahuje se tedy na vlastníka a ostatní
Nově u adresářů možnost definovat standardní ACL položky, které se uplatní na nově vytvářené soubory v příslušných adresářích
ACL entity
Vlastník, ACL vlastníci, skupina, ACL skupiny, ostatní
Určení přístupu
Pokud se shoduje vlastník, má práva podle vlastníka
Pokud patří do seznamu dalších vlastníků ACL, má práva podle vlastníka ACL a masky (operace AND)
Pokud patří do skupiny nebo jedné z dalších skupin ACL, má práva sjednocená (operace OR) podle skupin, kam patří, a masky (operace AND)
Audit
Acct
Příkaz accton soubor zapíná logování všech spuštěných a ukončených procesů
Příkaz accton bez parametru logování ukončuje
Příkaz sa vypisuje statistiky procesů na základě vzniklého souboru z předešlého logování
Názvy procesů
Počet spuštění procesů
Počet I/O operací na jedno spuštění
Reálný, uživatelský a systémový čas
Důležité bezpečnosní údaje se nesledují
kqueue() a kevent() 
kqueue() a kevent() (FreeBSD): Mechanismus pro sledování událostí v jádře operačního systému uživatelským procesem
kqueue() – vytvoření nové fronty událostí v jádře
kevent() – registrace událostí, které mají být hlášeny, a/nebo načtení vygenerovaných událostí k okamžiku volání funkce
BSM
Bezpečnostní audit událostí by měl být:
Spolehlivý (reliable)
Jemně rozlišitelný (fine-grained)
Konfigurovatelné logování událostí, majících vliv na systémovou bezpečnost (configurable logging)
Příklady událostí
Přihlašování a odhlašování
Konfigurační změny
Přístup k souborům
Síťový přístup
Události zaznamenává běžný démon (auditd)
Superuživatel může logování zastavit i obnovit, podobně jako u klasického rozhraní
Událost (event): Auditovatelná událost je událost, která může být zaznamenána auditem
S možností zaznamenat i autentizovaného uživatele (attributable), např. spouštěné příkazy
Bez možnosti zaznament i uživatele (non-attributable), např. akce před přihlášením, jako pokusy o neplatné přihlášení
Třída (class): Třída souvisejících událostí
lo: Login/logout, ex: Spuštění příkazu, fc: Vytvoření souboru, nt: Síťové operace... (předdefinovaných je okolo 20 tříd)
Záznam (record): Položka v auditu, která popisuje jednu bezpečnostní událost
Typ záznamu, kdo akci provedl, datum a čas, argumenty, výsledek operace (úspěch, neúspěch)
Log soubor (trail): Soubor obsahující jednotlivé záznamy
Výběrový výraz (selection expression)
Výběrový výraz je seznam tříd, kterých se výraz týká – co má a co nemá být zaznamenáváno
Prefixy před třídami
Nic: Úspěšné i neúspěšné záznamy
+: Pouze úspěšné záznamy
-: Pouze neúspěšné záznamy
^: Ani úspěšné, ani neúspěšné záznamy
^+: Nezaznamenávat úspěšné záznamy
^-: Nezaznamenávat neúspěšné záznamy
Příklad: lo,+ex
Úspěšné i neúspěšné pokusy o příhlášení a odhlášení
Pouze úspěšné spuštení příkazů
Předvolba (preselection): Předem nastavené výběrové výrazy určující, co se má zaznamenávat a co nemá, případně i pro které uživatele
Redukce (reduction): Výběr záznamů z log souboru pro jejich zobrazení, tisk nebo analýzu; lze použít i pro vytvoření nového redukovaného log souboru
MAC
Předchůdci
Chroot
Možnost spuštění nového procesu s jiným kořenovým adresářem (dále se často využívá i možností změnit efektivního uživatele a skupinu)
Proces nemůže ovlivnit nic mimo přidělený adresářový podstrom
Jail
Rozšíření funkčnosti chroot
Navíc je k procesům přidán i identifikátor konkrétního vytvořeného jail prostředí
Jail prostředí se skládá z procesů náležejících do příslušného jail prostředí a z privátního síťového rozhraní s vlastní síťovou adresou
Využívá běžící operační systém, procesy běžící pod jedním jail identifikátorem ale začínají nabývat charakteru celkového vlastního operačního prostředí
Mandatory Access Control
Umožňuje zavádět nové moduly pro řízení přistupu, pro implementaci nových bezpečnostních politik
Celková ochrana systému
MAC nenahrazuje, ale doplňuje standardní unixová oprávnění
MAC entity:
Subjekty: uživatelé, procesy, sokety, ...
Objekty: soubory, adresáře, sokety, ...
Úrovně (labels)
Formát: politika/kvalifikátor
Např. biba/low(low-low),partition/0,mls/equal(equal-equal)
Biba:
Subjekt na shodné úrovni s objektem může číst i zapisovat
Subjekt na vyšší úrovni může zapisovat, ale ne číst
Subjekt na nižší úrovni může číst, ale ne zapisovat
Lomac a MLS: podobné Biba
Bsdextended: Možnost nastavovat oprávnění pro objekty souborového systému podle UID/GID
Ifoff: Jednotlivá síťová rozhraní lze zakázat či povolit
Partition: Proces je umístěn do oddílu (partition). Vzájemně se mohou vidět pouze procesy ve shodném oddílu.
Portacl: Omezení vytváření serverových soketů na počítači
Capabilities
[link]
For the purpose of performing permission checks, traditional UNIX implementations distinguish two categories of processes: privileged processes (whose effective user ID is 0, referred to as superuser or  root), and unprivileged processes (whose effective UID is nonzero). Privileged processes bypass all kernel permission checks, while unprivileged processes are subject to full permission checking based on the process's credentials (usually: effective UID, effective GID, and supplementary group list)
Starting with kernel 2.2, Linux divides the privileges traditionally associated with superuser into distinct units, known as capabilities, which can be independently enabled and disabled. Capabilities are a per-thread attribute.
POSIX vs Capsicum
POSIX draft 1003.1e specifies a concept of permissions called "capabilities". However, POSIX capabilities differ from capabilities in this article—POSIX capability is not associated with any object; a process having CAP_NET_BIND_SERVICE capability can listen on any TCP port under 1024. 
In contrast, Capsicum capabilities on FreeBSD and Linux hybridize a true capability-system model with the UNIX design and POSIX API. Capsicum capabilities are a refined form of file descriptor, a delegable right between processes and additional object types beyond classic POSIX, such as processes, can be referenced via capabilities. In Capsicum capability mode, processes are unable to utilize global namespaces (such as the filesystem namespace) to look up objects, and must instead inherit or be delegated them.
From <[link]> 