X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=procadv.tex;h=0b9dd0aadcebf48606433535c58cff1c67e8db78;hp=2859e8b0f6529864d8c424edae9e385e6e23874a;hb=edd44d919cddff368758c34639f50696971ed84e;hpb=1652d786896236eb5c62c5b914e5519cfe039c80 diff --git a/procadv.tex b/procadv.tex index 2859e8b..0b9dd0a 100644 --- a/procadv.tex +++ b/procadv.tex @@ -2013,26 +2013,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