Exec Shield est un projet lancé par Red Hat , Inc. fin 2002 dans le but de réduire le risque d'attaques à distance par des vers ou d'autres types d'attaques automatisées sur les systèmes Linux. Le premier résultat du projet a été un correctif de sécurité pour le noyau Linux qui émule un bit NX sur les processeurs x86 qui n'ont pas d'implémentation NX native au niveau matériel. Bien que le projet Exec Shield ait eu de nombreux autres composants, certaines personnes font référence à ce premier correctif sous le nom d'Exec Shield.
Le premier correctif Exec Shield tente de marquer la mémoire de données comme non exécutable et la mémoire de programme comme non inscriptible. Cela supprime de nombreuses failles de sécurité , telles que celles provenant de dépassements de tampon et d'autres techniques reposant sur l'écrasement des données et l'insertion de code dans ces structures. Exec Shield fournit également une certaine randomisation de la disposition de l'espace d'adressage pour la base mmap () et heap.
Le patch augmente également la difficulté d'insertion et d'exécution du shellcode , rendant la plupart des exploits inefficaces. Aucune recompilation d'application n'est nécessaire pour utiliser pleinement exec-shield, bien que certaines applications ( Mono , Wine , XEmacs , Mplayer ) ne soient pas entièrement compatibles.
D'autres fonctionnalités issues du projet Exec Shield sont les exécutables indépendants de la position (PIE), le patch de randomisation de l'espace d'adressage pour les noyaux Linux, un large ensemble de contrôles de sécurité internes glibc qui rendent les exploits de tas et de chaînes de format presque impossibles, la fonctionnalité GCC Fortify Source, et le port et la fusion de la fonctionnalité de protection de pile GCC .
Mise en œuvre
Exec Shield fonctionne sur tous les processeurs x86 utilisant la limite de segment de code. En raison de la façon dont Exec Shield fonctionne, il est très léger ; cependant, il ne protège pas complètement les configurations de mémoire virtuelle arbitraires . Si la limite CS est augmentée, par exemple en appelant mprotect() pour rendre exécutable une mémoire plus élevée, alors les protections sont perdues en dessous de cette limite. Ingo Molnar le souligne dans une conversation par e-mail. La plupart des applications sont assez saines à ce sujet ; la pile (la partie importante) se retrouve au moins au-dessus de toutes les bibliothèques mappées, donc ne devient pas exécutable sauf par des appels explicites de l'application.
En août 2004, aucun des projets Exec Shield ne tentait de renforcer les protections de mémoire en limitant mprotect () sur aucune architecture ; bien que la mémoire puisse ne pas être exécutable initialement, elle peut le devenir plus tard, de sorte que le noyau permettra à une application de marquer les pages de mémoire comme étant à la fois inscriptibles et exécutables. Cependant, en coopération avec le projet Security-Enhanced Linux (SELinux), la politique standard de la distribution Fedora Core interdit ce comportement pour la plupart des exécutables, à quelques exceptions près pour des raisons de compatibilité.
Histoire
Exec Shield a été développé par différentes personnes chez Red Hat ; le premier patch a été publié par Ingo Molnar de Red Hat et publié pour la première fois en mai 2003. Il fait partie de Fedora Core 1 à 6 et de Red Hat Enterprise Linux depuis la version 3. Parmi les autres personnes impliquées figurent Jakub Jelínek, Ulrich Drepper, Richard Henderson et Arjan van de Ven.
Molnar a commenté en 2007 sur LWN.net que « des morceaux de [exec-shield] sont allés en amont, mais une bonne partie ne l'a pas fait. »