\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{lun. mai 29 10:54:21 CEST 2017}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={auditctl},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Utilitaire de contrôle du système d'audit Linux},
CreationDate={D:20170529105421},
ModDate={D:20170529105421},
Keywords={audit;Linux;security;auditd;logs}
}}
\begin{document}
 
\begin{center}
{\Huge auditctl }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Utilitaire de contrôle du système d'audit Linux}
 
\vspace{10mm}
 
\vspace{1cm}{\huge Options de configuration }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -b backlog]{Définis le nombre max de tampon d'audit permit (défaut: 64). Si tous les tampons sont pleins, le flag d'erreur est consulté par le kernel.}
\item[\hspace{1mm} --backlog\_wait\_time wait\_time]{Définis de temps (défault: 60*Hz) que le kernel attend lorsque backlog\_limit est atteind avant de mettre plus d'évènements d'audit en queue à transférer à auditd. Doit être supérieur ou égal à 0 et inférieur à 10 fois la valeur par défaut.}
\item[\hspace{1mm} -c]{Continue à charger les règles malgré les erreurs. Génère un sommaire du résultat du chargement des règles}
\item[\hspace{1mm} -D]{Supprime toutes les règles et watchs}
\item[\hspace{1mm} -e \texttt{[}0..2\texttt{]}]{Définis le flag enable. 0 = désactivé, 1 = activé, 2 = bloqué en l'état actuel.}
\item[\hspace{1mm} -f \texttt{[}0..2\texttt{]}]{Défpinis le mode failure. 0 = silencieux, 1 = printk, 2 = panic. Permet de déterminer comment le kernel gère les erreurs critiques.}
\item[\hspace{1mm} -i]{Ignore les erreurs en lisant les règles depuis un fichier.}
\item[\hspace{1mm} --loginuid-immutable]{Rend les loginuid inchangeables une fois définis.}
\item[\hspace{1mm} -q mount-point.subtree]{Si vous avez un watch répertoire existant, et un montage déplacé ou bindé ailleurs dans le subtree rechargé, il faut indiquer au kernel que le subtree mounté est équivalent au répertoire regardé. Si le subtree est déjà monté au moment où le watch est émis, le subtree est automatiquement taggé pour surveilance.}
\item[\hspace{1mm} -r rate]{Définis la limite des message par seconde. (0=pas de limite). Si ce taux est atteind, le flag failure est consulté}
\item[\hspace{1mm} -R file]{Lit les règles dans un fichier.}
\item[\hspace{1mm} -t]{Déclence les subtrees après une commande mount}
\end{description}
 
\vspace{1cm}{\huge Options de status }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -l]{Liste toutes les règles, 1 par ligne. 2+ options peuvent être passées à cette commande. -k liste les règles qui matche une clé, ou -i pour interpreter a0 à a3 pour aider à déterminer les valeurs d'argument syscall.}
\item[\hspace{1mm} -m text]{Envoie un message userspace dans le système d'audit. Ne peut être fait qu'avec la capability CAP\_AUDIT\_WRITE.}
\item[\hspace{1mm} -s]{Reporte le status du sous-système d'audit}
\end{description}
 
\vspace{1cm}{\huge Options de règle }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -a \texttt{[}list,action|action,list\texttt{]}]{Ajoute une règle à la fin de la liste avec l'action spécifié. Les champs peuvent être dans n'importe quel ordre. Les noms de liste valides, puis d'actions sont:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} task]{Ajoute une règle à la liste par tâche. Utilisée seulement quand une tâche est créée ( fork() ou clone() )}
\item[\hspace{6mm} exit]{Ajoute une règle à la liste de sortie syscall. Utilisée à la sortie d'un appel système pour déterminer si un évènement d'audit devrait être créé}
\item[\hspace{6mm} user]{Ajoute une règle à a liste de filtre de message utilisateur. Utilisé par le kernel pour filtrer les évènements venant du userspace avant de les relayer à service d'audit.}
\item[\hspace{6mm} exclude]{Ajoute une règle à la liste de filtre d'exclusion de type d'évènement. Cette liste est utilisée pour filtrer les évènement que l'on ne veut pas voir.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} never]{Aucun enregistrement d'audit n'est généré.}
\item[\hspace{6mm} always]{Alloue un contexte d'audit.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} -A list,action]{Ajoute une règle au début de la liste}
\item[\hspace{1mm} -C \texttt{[}f=f | f!=f\texttt{]}]{Construit une règle de comparaison inter-champ. Peut être spécifié plusieurs fois. Les 2 opérateurs supportés sont equel et not equal. Les champs valides sont: auid, uid, euid, suid, fsuid, obj\_uid; and gid, egid, sgid, fsgid, obj\_gid}
\item[\hspace{1mm} -d list,action]{Supprime une règle de la liste. La règle est supprimée seulement si les noms syscall matchent exactement.}
\item[\hspace{1mm} -F \texttt{[}n=v | n!=v | n<v | n>v | n<=v | n>=v | n\&v | n\&=v\texttt{]}]{Construit un champs de règle: nom, opération, valeur. Peut être spécifié jusqu'à 64 fois. Chaque équation est combinée l'une avec l'autre pour déclencher un enregistrement d'audit. Il y a 8 opérateurs supportés: égal, non égal, inférieur à, supérieur à, inférieur ou égal à, supérieur ou égal à, mask de bit ou test de bit. Les champs qui prennent un uid peuvent utiliser le nom de l'utilisateur. Les champs valides sont:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} a0, a1, a2, a3]{Les 4 arguments d'un syscall. Noter que les arguments chaîne ne sont pas supportés.}
\item[\hspace{6mm} arch]{Architecture CPU du syscall (uname -m)}
\item[\hspace{6mm} auid]{ID original de l'utilisateur. raccourci de audit uid, parfois appelé loginuid}
\item[\hspace{6mm} devmajor]{Numéro majeur de périphérique}
\item[\hspace{6mm} devminor]{Numéro mineur de périphérique}
\item[\hspace{6mm} dir]{Chemin complet d'un répertoire à regarder}
\item[\hspace{6mm} egid]{gid effectif}
\item[\hspace{6mm} euid]{uid effectif}
\item[\hspace{6mm} exe]{Chemin absolu de l'application à laquelle cette règle s'applique. Uniquement dans une liste exit}
\item[\hspace{6mm} exit]{Valeur de sortie d'un syscall}
\item[\hspace{6mm} fsgid]{GID du système de fichier.}
\item[\hspace{6mm} fsuid]{UID du système de fichier}
\item[\hspace{6mm} filetype]{Type du fichier cible (file, dir, socket, link, character, block, ou fifo)}
\item[\hspace{6mm} gid]{id du groupe}
\item[\hspace{6mm} inode]{Numéro d'inode}
\item[\hspace{6mm} key]{Autre manière de définir une clé filtre. voir -k}
\item[\hspace{6mm} msgtype]{Utiliser pour matcher le type d'enregistrement de l'évènement. devrait être utilisé dans les listes d'exclusion ou utilisateur}
\item[\hspace{6mm} obj\_uid]{UID de l'objet}
\item[\hspace{6mm} obj\_gid]{GID de l'objet}
\item[\hspace{6mm} obj\_user]{Utilisateur SELinux de la ressource}
\item[\hspace{6mm} obj\_role]{Type SELinux de la ressource}
\item[\hspace{6mm} obj\_type]{Type SELinux de la ressource}
\item[\hspace{6mm} obj\_lev\_low]{niveau inférieur SELinux de la ressource}
\item[\hspace{6mm} obj\_lev\_high]{Niveau supérieur SELinux de la ressource}
\item[\hspace{6mm} path]{Chemin complet du fichier à regarder. Ne peut être utiliser que dans la liste exit}
\item[\hspace{6mm} perm]{Filtre de permissions pour les opérations de fichier. Voir -p Uniquement dans la liste exit}
\item[\hspace{6mm} pers]{Numéro de personnalité OS}
\item[\hspace{6mm} pid]{ID de processus}
\item[\hspace{6mm} ppid]{ID du processus parent}
\item[\hspace{6mm} subj\_user]{Utilisateur SELinux du programme}
\item[\hspace{6mm} subj\_role]{role SELinux du programme}
\item[\hspace{6mm} subj\_type]{Type SELinux du programme}
\item[\hspace{6mm} subj\_sen]{Sensibilité SELinux du programme}
\item[\hspace{6mm} subj\_clr]{Autorisation SELinux du programme}
\item[\hspace{6mm} sgid]{gid sauvé.}
\item[\hspace{6mm} success]{Si la valeur de sortie est >=0, c'est true/yes (1), sinon false/no (0)}
\item[\hspace{6mm} suid]{UID sauvé}
\item[\hspace{6mm} uid]{id de l'utilisateur}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} -k key]{Définis une clé filtre dans une règle d'audite. C'est une chaîne arbitraire (max 31 octets) qui peut identifier de manière unique les enregistrements d'audit produits par une règle. Peut être spécifié plusieurs fois}
\item[\hspace{1mm} -p \texttt{[}r|w|x|a\texttt{]}]{Décrit les types d'accès sur lesquels se déclence un watch de système de fichier.}
\item[\hspace{1mm} -S \texttt{[}Syscall name or number|all\texttt{]}]{Si le syscall doné est fait par un programme, démarre un enregistrement d'audit. Peut être spécifié plusieurs fois}
\item[\hspace{1mm} -w path]{Insert un watch pour un objet système de fichier au chemin spécifié.}
\item[\hspace{1mm} -W path]{Suppmire un watch pour l'objet système de fichier.}
\end{description}
 
\vspace{1cm}{\huge Performances }
 
\
 
\hspace{1mm} Les règles syscall sont évaluées pour chaque syscall pour chaque programme. Avec 10 règles syscall, chaque programe dans le système est retardé durant un syscall jusqu'à ce que le système d'audit évalu chaque règle, ce qui peut impacter fortement les performances. Tenter de combiner autant de filtre, action, clé, et champs que possible sont identiques. Par exemple: \\
\hspace{1mm} \textbf{auditctl -a always,exit -S openat -F success=0} \\
\hspace{1mm} \textbf{auditctl -a always,exit -S truncate -F success=0} \\
\hspace{1mm} peuvent être reécris en une seule règle: \\
\hspace{1mm} \textbf{auditctl -a always,exit -S openat -S truncate -F success=0} \\
\hspace{1mm} Également, tenter d'utiliser l'audit de système de fichier améliore les performances. Par exemple, pour capturer toutes les ouvertures échouées, mais seulement les fichiers dans /etc: \\
\hspace{1mm} \textbf{auditctl -a always,exit -S openat -S truncate -F dir=/etc -F success=0} \\
\hspace{1mm} Cela améliore les performances vu que le kernel n'évalue pas chaque syscall. C'est géré par le code d'audit de système de fichier. \\
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Voir tous les syscalls faits par un programme spécifique \\
\hspace{1mm} \textbf{auditctl -a always,exit -S all -F pid=1005} \\
\hspace{1mm} Vois les fichiers ouverts par un utilisateur spécifique \\
\hspace{1mm} \textbf{auditctl -a always,exit -S openat -F auid=510} \\
\hspace{1mm} Voir les appels openat échoués \\
\hspace{1mm} \textbf{auditctl -a always,exit -S openat -F success=0} \\
\hspace{1mm} Regarder les changements d'un fichier (2 manières exprimées) \\
\hspace{1mm} \textbf{auditctl -w /etc/shadow -p wa} \\
\hspace{1mm} \textbf{auditctl -a always,exit -F path=/etc/shadow -F perm=wa} \\
\hspace{1mm} Regarder les changements, récursivement dans un répertoire (2 manières exprimées) \\
\hspace{1mm} \textbf{auditctl -w /etc/ -p wa} \\
\hspace{1mm} \textbf{auditctl -a always,exit -F dir=/etc/ -F perm=wa} \\
\hspace{1mm} Voir si un admin accède aux fichier des autres utilisateurs: \\
\hspace{1mm} \textbf{auditctl -a always,exit -F dir=/home/ -F uid=0 -C auid!=obj\_uid} \\
\end{flushleft}
\end{document}
