X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=procadv.tex;h=a5ea67f92461d11fe848000979129e21aa59b30e;hp=06454cc65285639dafe0bea434221b27db9dccca;hb=f21f63518fb77f32a2474564e1a3c2f4c32cccd4;hpb=6dbafc3dcbc3e96af38174f5c5ef446c65ce6ead diff --git a/procadv.tex b/procadv.tex index 06454cc..a5ea67f 100644 --- a/procadv.tex +++ b/procadv.tex @@ -6,7 +6,7 @@ dei processi. Inizieremo con le funzioni che attengono alla gestione avanzata della sicurezza, passando poi a quelle relative all'analisi ed al controllo dell'esecuzione, e alle funzioni per le modalità avanzate di creazione dei processi e l'uso dei cosiddetti \textit{namespace}. Infine affronteremo le -\textit{sytem call} attinenti ad una serie di funzionalità specialistiche come +\textit{system call} attinenti ad una serie di funzionalità specialistiche come la gestione della virgola mobile, le porte di I/O ecc. \section{La gestione avanzata della sicurezza} @@ -463,7 +463,8 @@ opportuno dettagliare maggiormente. sez.~\ref{sec:file_ownership_management}).\\ \constd{CAP\_DAC\_OVERRIDE}& Evitare il controllo dei permessi di lettura, scrittura ed esecuzione dei - file, (vedi sez.~\ref{sec:file_access_control}).\\ + file, (vedi + sez.~\ref{sec:file_access_control}).\\ \constd{CAP\_DAC\_READ\_SEARCH}& Evitare il controllo dei permessi di lettura ed esecuzione per le directory (vedi @@ -571,6 +572,10 @@ opportuno dettagliare maggiormente. \label{tab:proc_capabilities} \end{table} +% TODO: verificare ed aggiungere le nuove capacità CAP_BPF, CAP_PERFMON, vedi +% https://lwn.net/Articles/822362/ anche CAP_CHECKPOINT_RESTORE vedi +% https://lwn.net/Articles/822362/ e https://git.kernel.org/linus/74858abbb103 + \constbeg{CAP\_SETPCAP} Prima di dettagliare il significato della capacità più generiche, conviene @@ -1317,7 +1322,6 @@ funzione. - \subsection{La gestione del \textit{Secure Computing}.} \label{sec:procadv_seccomp} @@ -1368,7 +1372,11 @@ il codice non fidato. % TODO a partire dal kernel 3.17 è stata introdotta la nuova syscall seccomp, % vedi http://lwn.net/Articles/600250/ e http://lwn.net/Articles/603321/ +% sempre per seccomp vedi https://lwn.net/Articles/799557/ dal 5.11 supporto +% per le constant-action bitmaps https://lwn.net/Articles/834785/ +% TODO un esempio di uso di seccomp è su +% https://blog.cloudflare.com/sandboxing-in-linux-with-zero-lines-of-code/ \itindend{secure~computing~mode} @@ -1483,12 +1491,26 @@ alcune opzioni di controllo attivabili via \func{sysctl} o il filesystem % TODO: trattare keyctl (man 2 keyctl) - +% (fare sezione dedicata ????) +% TODO documentare la Crypto API del kernel % TODO trattare le funzioni di protezione della memoria pkey_alloc, pkey_free, % pkey_mprotect, introdotte con il kernel 4.8, vedi -% http://lwn.net/Articles/689395/ e Documentation/x86/protection-keys.txt +% http://lwn.net/Articles/689395/ e Documentation/x86/protection-keys.txt + +% TODO documentare la syscall getrandom, introdotta con il kernel 3.17, vedi +% http://lwn.net/Articles/606141/, ed introdotta con le glibc solo con la +% versione 2.25 con getentropy, vedi https://lwn.net/Articles/711013/ ed i +% problemi successivi vedi https://lwn.net/Articles/800509/ + +%\subsection{La gestione delle chiavi crittografiche} +%\label{sec:keyctl_management} + +% TODO non è chiaro se farlo qui, ma documentare la syscall bpf aggiunta con il +% kernel 3.18, vedi http://lwn.net/Articles/612878/; al riguardo vedi anche +% https://lwn.net/Articles/660331/ + \section{Funzioni di gestione e controllo} \label{sec:proc_manage_control} @@ -1540,7 +1562,8 @@ all'ordinario valore nullo (dato per implicito). %TODO: trattare PR_CAP_AMBIENT, dal 4.3 %TODO: trattare PR_CAP_FP_*, dal 4.0, solo per MIPS -%TODO: trattare PR_MPX_*_MANAGEMENT, dal 3.19 +%TODO: trattare PR_MPX_*_MANAGEMENT, dal 3.19, vedi +% https://lwn.net/Articles/582712/ %TODO: trattare PR_*NO_NEW_PRIVS, dal 3.5 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} @@ -1873,10 +1896,18 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC. % TODO documentare PR_SPEC_DISABLE_NOEXEC in 5.1, vedi % https://lwn.net/Articles/782511/ +% TODO documentare PR_SET_IO_FLUSHER in 5.6, vedi +% https://lwn.net/Articles/811230/ + +% TODO documentare PR_SET_SYSCALL_USER_DISPATCH in 5.11, vedi +% https://lwn.net/Articles/826313/ + \label{sec:prctl_operation} \end{basedescript} + + \subsection{La funzione \func{ptrace}} \label{sec:process_ptrace} @@ -1941,6 +1972,14 @@ si intende creare un \textit{thread}. L'esecuzione del programma creato da \func{sys\_clone} riprende, come per \func{fork}, da dopo l'esecuzione della stessa. +% TODO trattare anche clone3 (vedi https://lwn.net/Articles/792628/), aggiunta +% con il kernel 5.3 +% e aggiunte successive, col 5.5 +% il flag CLONE_CLEAR_SIGHAND +% https://git.kernel.org/linus/49cb2fc42ce4 +% https://git.kernel.org/linus/41585bbeeef9 + + La necessità di avere uno \textit{stack} alternativo c'è solo quando si intende creare un \textit{thread}, in tal caso infatti il nuovo \textit{task} vede esattamente la stessa memoria del \textit{task} @@ -2034,7 +2073,7 @@ utilizzati soltanto se si sono specificati rispettivamente i flag \const{CLONE\_CHILD\_SETTID}. La funzione ritorna un l'identificatore del nuovo \textit{task}, denominato -\texttt{Thread ID} (da qui in avanti \ids{TID}) il cui significato è analogo +\textit{Thread ID} (da qui in avanti \ids{TID}) il cui significato è analogo al \ids{PID} dei normali processi e che a questo corrisponde qualora si crei un processo ordinario e non un \textit{thread}. @@ -2063,7 +2102,7 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa padre la \textit{file descriptor table} (vedi sez.~\ref{sec:file_fd}), questo significa che ogni \textit{file descriptor} aperto da un processo verrà visto anche dall'altro e che ogni chiusura o cambiamento dei - \textit{file descriptor flag} di un \textit{file descriptor} verrà per + \textit{file descriptor flags} di un \textit{file descriptor} verrà per entrambi. Se non viene impostato il processo figlio eredita una copia della @@ -2190,14 +2229,17 @@ degli altri gruppi, che costituisce poi quello che viene chiamato un % informazioni su setns qui: http://lwn.net/Articles/532748/ % http://lwn.net/Articles/531498/ - +% TODO: se si applicano e ci stanno trattare gli argomenti di ioctl_ns \section{Funzionalità avanzate e specialistiche} \label{sec:process_special} % TODO: trattare userfaultfd, introdotta con il 4.23, vedi -% http://man7.org/linux/man-pages/man2/userfaultfd.2.html +% http://man7.org/linux/man-pages/man2/userfaultfd.2.html, +% https://lwn.net/Articles/787308/, https://git.kernel.org/linus/57e5d4f278b9, +% e hardening della stessa (https://lwn.net/Articles/819834/) nel 5.11 + % TODO: trattare process_vm_readv/process_vm_writev introdotte con il kernel % 3.2, vedi http://man7.org/linux/man-pages/man2/process_vm_readv.2.html e i @@ -2219,9 +2261,12 @@ Da fare. % % TODO l'I/O sulle porte di I/O -% consultare le manpage di ioperm, iopl e outb +% consultare le manpage di ioperm, iopl e outb e +% https://lwn.net/Articles/804143/ % non c'entra nulla qui, va trovato un altro posto (altri meccanismi di I/O in % fileintro ?) +% emulata a partire dal kernel 5.5, vedi https://lwn.net/Articles/804143/ +% Da fare @@ -2256,6 +2301,9 @@ Da fare % vedi anche l'ulteriore opzione "expedited" introdotta con il kernel 4.14 % (https://lwn.net/Articles/728795/) +% TODO trattare process_mrelease introdotta con il kernel 5.16, vedi: +% https://lwn.net/Articles/864184/ + %%% Local Variables: @@ -2298,4 +2346,4 @@ Da fare % LocalWords: libcap lcap obj to text dup clear DIFFERS get ncap caps ssize % LocalWords: argument length all setpcap from string name proc cat capgetp % LocalWords: capsetp getcap read sigreturn sysctl protected hardlinks tmp -% LocalWords: dell' symlink symlinks pathname TOCTTOU of +% LocalWords: dell' symlink symlinks pathname TOCTTOU of execve attack kcmp