Cela fait bientôt plus de 10 ans qu’Android (un système d’exploitation fondé sur Linux) domine le marché du téléphone portable [1]. En plus de cela, Linux fait fonctionner environ 85 % des sites internet répertoriés par W3Techs [2] (un service indépendant de recensement des technologies du Web). Il est donc naturel que ce système d’exploitation soit devenu une cible de choix ; en témoigne l’explosion de publications de vulnérabilités sur Linux ces dernières années [3]. Dans cet article, nous allons nous intéresser à l’utilisation d’eBPF pour lutter contre les exploits sous Linux, montrant en quoi cette nouvelle technologie peut aider à protéger le noyau.
Le noyau Linux est sans cesse la cible d'attaques de plus en plus sophistiquées [4]. La fréquence à laquelle de nouvelles vulnérabilités sont découvertes [3] met en évidence la nécessité de mettre en place des solutions de sécurité proactives et efficaces. Si les mises à jour régulières du noyau sont essentielles, elles sont difficiles à déployer à grande échelle, et ne suffisent pas à garantir une protection complète, notamment face aux menaces dites « zero-day » (c’est-à-dire des vulnérabilités inconnues des développeurs du noyau).
Ces dernières années, de nombreuses techniques ont été développées pour renforcer la sécurité sous Linux. Parmi elles, eBPF, un sous-système de Linux permettant d’instrumenter le noyau, s'est imposé comme une technologie prometteuse, offrant de nouvelles possibilités pour la détection et la prévention des attaques en espace utilisateur [5]. Cependant, l'utilisation d'eBPF pour protéger le noyau soulève de...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première
[1] Mobile Operating System Market Share Worldwide, https://gs.statcounter.com/os-market-share/mobile/worldwide/#monthly-201401-202404
[2] Usage statistics and market shares of operating systems for websites : https://w3techs.com/technologies/overview/operating_system
[3] Statistiques sur les vulnérabilités du noyau Linux de 2014 à 2024 : https://www.cvedetails.com/vendor/33/Linux.html
[4] Flipping Pages: An analysis of a new Linux vulnerability in nf_tables and hardened exploitation techniques : https://pwning.tech/nftables/
[5] Lorenzo Fontana, David Calavera. Linux Observability with BPF, novembre 2019
[6] Kernel address space layout randomization, https://lwn.net/Articles/569635/
[7] x86 NX support, https://lwn.net/Articles/87814/
[8] Supervisor mode access prevention, https://lwn.net/Articles/517475/
[9] The current state of kernel page-table isolation, https://lwn.net/Articles/741878/
[10] Spectre et Meltdown, https://meltdownattack.com/
[11] Linux Kernel Runtime Guard, https://lkrg.org/
[12] Control-flow integrity for the kernel, https://lwn.net/Articles/810077/
[13] Intégrité du flux de contrôle du noyau sur Android,
https://source.android.com/docs/security/test/kcfi?hl=fr
[14] Ajout de kCFI dans la configuration de sécurité renforcée du noyau, https://lore.kernel.org/lkml/202405111234.6F2AB1F@keescook/
[15] Sécurité à l’exécution sous Linux, https://connect.ed-diamond.com/misc/misc-117/securite-a-l-execution-sous-linux
[16] Code source de Tracee, https://github.com/aquasecurity/tracee
[17] Code source de Tetragon, https://github.com/cilium/tetragon
[18] Code source de l’agent de Sécurité de Datadog, https://github.com/DataDog/datadog-agent/tree/main/pkg/security
[19] Détection de l’altération de la table des appels systèmes dans KRIe, https://github.com/Gui774ume/krie/blob/695f81a553029f776a38d11d78e3755a943ecff1/ebpf/krie/krie/syscall_check.h#L70
[20] Détection de l’altération des paramètres du noyau dans KRIe, https://github.com/Gui774ume/krie/blob/695f81a553029f776a38d11d78e3755a943ecff1/ebpf/krie/krie/kernel_parameter.h#L38
[21] Learning Linux Kernel Exploitation, https://lkmidas.github.io/posts/20210123-linux-kernel-pwn-part-1/
[22] Kernel exploit practice, https://github.com/pr0cf5/kernel-exploit-practice/tree/master
[23] Patch du noyau 5.3 responsable de l’ajout de « pinned » bits sur le registre CR4, https://github.com/torvalds/linux/commit/873d50d58f67ef15d2777b5e7f7a5268bb1fbae2
[24] Linux Kernel 5.3 changelog, https://cdn.kernel.org/pub/linux/kernel/v5.x/ChangeLog-5.3
[25] The Ubuntu lifecycle and release cadence,
https://ubuntu.com/about/release-cycle#ubuntu-kernel-release-cycle
[26] Module vulnérable d’exemple pour une attaque ROP, https://github.com/Gui774ume/krie/blob/9e18daa31b65e1338d2cfc26326a15ca1ebe77a2/example/module/vuln_device/vuln_device.c#L83
[27] Code source de ROPgadget, https://github.com/JonathanSalwan/ROPgadget
[28] Tetragone: a lesson in security fondamentals, https://grsecurity.net/tetragone_a_lesson_in_security_fundamentals