X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=procadv.tex;h=4989cee79ffa7a7dcedfa3beeb8abf2a01c06c9f;hp=2859e8b0f6529864d8c424edae9e385e6e23874a;hb=4d8005673a429c8d47d1b21b84aa839afdf17dda;hpb=dc4eaddc9bad8eca47e81b003fefeccaa3372f48 diff --git a/procadv.tex b/procadv.tex index 2859e8b..4989cee 100644 --- a/procadv.tex +++ b/procadv.tex @@ -213,8 +213,8 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC. ``\textit{tracer process}''. Questa è una funzionalità fornita da \textit{``Yama''}, uno specifico \textit{Linux Security Modules}, e serve a consentire al processo indicato, quando le restrizioni introdotte da questo - modulo sono attive, di usare \func{ptrace}\unavref{ (vedi - sez.\ref{sec:process_ptrace})} sul processo chiamante, anche se quello + modulo sono attive, di usare \func{ptrace} (vedi + sez.~\ref{sec:process_ptrace}) sul processo chiamante, anche se quello indicato non ne è un progenitore. Il valore \constd{PR\_SET\_PTRACER\_ANY} consente a tutti i processi l'uso di \func{ptrace}. L'uso si \textit{Yama} attiene alla gestione della sicurezza dei processi, e consente di introdurre @@ -394,8 +394,8 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC. \end{basedescript} -%\subsection{La funzione \func{ptrace}} -%\label{sec:process_ptrace} +\subsection{La funzione \func{ptrace}} +\label{sec:process_ptrace} %Da fare @@ -407,6 +407,12 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC. % TODO: trattare PTRACE_O_SUSPEND_SECCOMP, aggiunta con il kernel 4.3, vedi % http://lwn.net/Articles/656675/ +\subsection{La funzione \func{kcmp}} +\label{sec:process_kcmp} + +%Da fare +% vedi man kcmp e man 2 open + \section{La gestione avanzata della creazione dei processi} \label{sec:process_adv_creation} @@ -2013,26 +2019,37 @@ funzione. Il \textit{secure computing mode} è un meccanismo ideato per fornire un supporto per l'esecuzione di codice esterno non fidato e non verificabile a -scopo di calcolo. L'idea era quello di poter vendere la capacità di calcolo -della propria macchina ad un qualche servizio di calcolo distribuito, senza -comprometterne la sicurezza eseguendo codice non sotto il proprio controllo. - -Nella prima versione del meccanismo, introdotto con il kernel 2.6.23 e -disponibile solo avendo è abilitato il supporto nel kernel con -\texttt{CONFIG\_SECCOMP}, questo veniva attivato con \func{prctl} indicando -l'opzione \const{PR\_SET\_SECCOMP}, che all'epoca supportava soltanto l'uso -del valore \const{SECCOMP\_MODE\_STRICT} per \param{arg2}. - -Una volta abilitato il \textit{secure computing mode} in questa modalità (in -seguito denominata \textit{strict mode}) il processo o il \textit{thread} -chiamante potrà utilizzare soltanto un insieme estremamente limitato di -\textit{system call}: \func{read}, \func{write}, \func{\_exit} e -\funcm{sigreturn}. Ogni altra \textit{system call} porterà all'emissione di un -\signal{SIGKILL} (vedi sez.~\ref{sec:sig_termination}). In questa modalità di -utilizzo i dati vengono letti o scritti grazie ad un socket o una -\textit{pipe}, creati prima di lanciare il processo che eseguirà il codice non -fidato, e per evitare problemi di sicurezza non saranno possibili altre -operazioni se non quelle citate. +scopo di calcolo. L'idea era quella di disporre di una modalità di esecuzione +dei programmi che permettesse di vendere la capacità di calcolo della propria +macchina ad un qualche servizio di calcolo distribuito, senza comprometterne +la sicurezza eseguendo codice non sotto il proprio controllo. + +La prima versione del meccanismo è stata introdotta con il kernel +2.6.23,\footnote{e disponibile solo avendo abilitato il supporto nel kernel + con l'opzione di configurazione \texttt{CONFIG\_SECCOMP}.} è molto semplice, +il \textit{secure computing mode} viene attivato con \func{prctl} usando +l'opzione \const{PR\_SET\_SECCOMP}, ed indicando \const{SECCOMP\_MODE\_STRICT} +come valore per \param{arg2} (all'epoca unico valore possibile). Una volta +abilitato in questa modalità (in seguito denominata \textit{strict mode}) il +processo o il \textit{thread} chiamante potrà utilizzare soltanto un insieme +estremamente limitato di \textit{system call}: \func{read}, \func{write}, +\func{\_exit} e \funcm{sigreturn}; l'esecuzione di qualsiasi altra +\textit{system call} comporta l'emissione di un \signal{SIGKILL} e conseguente +terminazione immediata del processo. + +Si tenga presente che in questo caso, con versioni recenti della \acr{glibc} +(il comportamento è stato introdotto con la 2.3), diventa impossibile usare +anche \func{\_exit} in \textit{strict mode}, in quanto questa funzione viene +intercettata ed al suo posto viene chiamata \func{exit\_group} (vedi +sez.~\ref{sec:pthread_management}) che non è consentita e comporta un +\signal{SIGKILL}. + +Si tenga presente che, non essendo \func{execve} fra le funzioni permesse, per +poter eseguire un programma terzo essendo in \textit{strict mode} questo dovrà +essere fornito in una forma di codice interpretabile fornito attraverso un +socket o una \textit{pipe}, creati prima di lanciare il processo che eseguirà +il codice non fidato. + % TODO a partire dal kernel 3.5 è stato introdotto la possibilità di usare un @@ -2126,11 +2143,11 @@ alcune opzioni di controllo attivabili via \func{sysctl} o il filesystem Questa funzionalità consente di rendere impraticabili alcuni attacchi in cui si approfitta di una differenza di tempo fra il controllo e l'uso di un - file, utilizzando quella che viene usualmente chiamata una - \itindex{symlink~race} \textit{symlink race}.\footnote{si tratta di un - sottoinsieme di quella classe di attacchi chiamata genericamente - \textit{TOCTTOU}, acronimo appunto di \textit{Time of check to time of - use}.} + file, ed in particolare quella classe di attacchi viene usualmente chiamati + \textit{symlink attack},\footnote{si tratta di un sottoinsieme di quella + classe di attacchi chiamata genericamente \textit{TOCTTOU}, acronimo + appunto di \textit{Time of check to time of use}.} di cui abbiamo parlato + in sez.~\ref{sec:file_temp_file}. Un possibile esempio di questo tipo di attacco è quello contro un programma che viene eseguito per conto di un utente privilegiato (ad esempio un @@ -2155,6 +2172,10 @@ alcune opzioni di controllo attivabili via \func{sysctl} o il filesystem \end{basedescript} +% TODO: trattare pure protected_regular e protected_fifos introdotti con il +% 4.19 (vedi https://lwn.net/Articles/763106/) + + % TODO: trattare keyctl (man 2 keyctl)