Sécurisation des fichiers et vérification de l'intégrité des fichiers dans Oracle® Solaris 11.2

Quitter la vue de l'impression

Mis à jour : Juillet 2014
 
 

Protection contre les problèmes de sécurité causés par les fichiers exécutables

Les programmes lisent et écrivent des données sur la pile. D'une manière générale, ils s'exécutent à partir de portions de mémoire en lecture seule qui sont spécifiquement désignées pour ce code. Certaines attaques provoquant des tampons sur la pile jusqu'au débordement tentent d'insérer un nouveau code sur la pile et forcent le programme à l'exécuter. Ces attaques peuvent être mises en échec en supprimant les autorisations d'exécution de la Suppression de droits d'exécution la mémoire de la pile. C'est-à-dire que la plupart de ces programmes peuvent fonctionner correctement sans utiliser les piles exécutables.

Les processus 64 bits disposent toujours de piles non exécutables. Par défaut, les processus SPARC 32 bits possèdent des piles exécutables. La variable noexec_user_stack vous permet d'indiquer si les piles des processus 32 bits sont exécutables.

Une fois que cette variable est définie, un signal SIGSEGV est envoyé aux programmes qui tentent d'exécuter du code sur leur pile. Ce signal résulte généralement en un arrêt du programme à l'aide d'un dump noyau. Ces programmes génèrent également un message d'avertissement qui inclut le nom du programme concerné, l'ID de processus, et l'UID réel de l'utilisateur à l'origine de l'exécution du programme. Par exemple :

a.out[347] attempt to execute code on stack by uid 555

Le message est consigné par le démon syslog lorsque la fonctionnalité syslog kern est définie sur le niveau notice. Cet enregistrement est défini par défaut dans le fichier syslog.conf, ce qui signifie que le message est envoyé à la console et au fichier /var/adm/messages. Pour plus d'informations, reportez-vous aux pages de manuel syslogd(1M) et syslog.conf(4).

Le message syslog est utile pour observer les potentiels problèmes de sécurité. Le message identifie également les programmes valides qui dépendent des piles exécutables dont le bon fonctionnement est empêché par la définition de la variablenoexec_user_stack. Si vous ne voulez pas que les messages soient consignés, définissez la variable de journalisation noexec_user_stack_log sur zéro dans le fichier /etc/system. Bien que les messages ne soient pas consignés, le signal SIGSEGV peut continuer d'entraîner l'arrêt du programme d'exécution à l'aide d'un dump noyau.

Les programmes peuvent marquer explicitement ou empêcher l'exécution des piles. Dans les programmes, la fonction mprotect() marque explicitement les piles comme étant exécutables. Pour plus d'informations, reportez-vous à la page de manuel mprotect(2). Un programme compilé avec -M /usr/lib/ld/map.noexstk rend la pile non exécutable indépendamment du paramètre à l'échelle du système.