Module kernel pour surveiller les appels système?

Je voudrais créer un module kernel à partir de zéro qui se verrouille sur une session utilisateur et surveille chaque appel système effectué par des processus appartenant à cet utilisateur.

Je sais ce que tout le monde pense – “utiliser strace” – mais je voudrais avoir une partie de ma propre journalisation et parsing avec les données que je collecte, et strace a quelques problèmes – une application pourrait utiliser “mmap” pour écrire dans un fichier Si le contenu du fichier n’apparaît jamais comme argument d’un appel système “ouvert” ou si une application sans autorisation en écriture peut créer des coredumps pour copier des données sensibles.

Je veux être capable de gérer ces cas particuliers et faire une partie de ma propre journalisation. Je me demande cependant – comment puis-je acheminer tous les appels système via mon module? Est-il possible de le faire sans toucher au code du kernel?

Merci

J’ai fait quelque chose de similaire par le passé en utilisant un module du kernel pour patcher la table d’appels du système. Chaque fonction patchée a fait quelque chose comme ceci:

 patchFunction(/*params*/) { // pre checks ret = origFunction(/*params*/); // post checks return ret; } 

Notez que lorsque vous commencez à parcourir les structures de données du kernel, votre module dépend de la version. Le module du kernel devra probablement être compilé pour la version du kernel que vous installez.

Notez également que cette technique est utilisée par de nombreux rootkits, donc si un logiciel de sécurité est installé, il peut vous empêcher de faire quelque chose comme ça.

Je n’ai pas la réponse exacte à votre question, mais j’ai publié un document il y a quelques jours et cela pourrait vous être utile:

http://www.cse.iitk.ac.in/users/moona/students/Y2157230.pdf/