Quant à votre dernière question:
Et l'utilité de telles mesures sont de toute façon, lorsque votre application utilise environ 30 bibliothèques qui utilisent aucune de ces? ;)
PIE est nécessaire uniquement pour le programme principal pour pouvoir être chargé à une adresse aléatoire. ASLR fonctionne toujours pour les bibliothèques partagées, donc le bénéfice de PIE est le même que vous utilisiez une bibliothèque partagée ou 100.
Stack Protector ne bénéficiera que du code compilé avec stack protector, donc l'utiliser seulement dans votre main programme n'aidera pas si vos bibliothèques sont pleines de vulnérabilités.
Dans tous les cas, je vous encourage à ne pas considérer ces options comme faisant partie de votre application, mais comme faisant partie de l'intégration complète du système. Si vous utilisez plus de 30 bibliothèques (probablement la plupart du temps indésirables pour la qualité et la sécurité du code) dans un programme qui s'interface avec des données non fiables et potentiellement malveillantes, ce serait une bonne idée de construire votre système entier avec protecteur de pile et autres options de durcissement de sécurité. Gardez à l'esprit, cependant, que les plus hauts niveaux de _FORTIFY_SOURCE
et peut-être d'autres nouvelles options de sécurité briseront des choses valides qui justifient les programmes corrects, et vous devrez peut-être analyser s'il est sécuritaire de les utiliser . Une chose connue dangereuse que l'une des options fait (j'oublie laquelle) fait en sorte que le spécificateur %n
à printf
ne fonctionne pas, au moins dans certains cas. Si une application utilise %n
pour obtenir un décalage dans une chaîne générée et doit utiliser ce décalage pour y écrire ultérieurement, et que la valeur n'est pas renseignée, il s'agit d'une vulnérabilité potentielle en soi ...
qu'est-ce que c'est ASLR? Où pouvons-nous trouver une explication détaillée de ces drapeaux et de leurs impacts sur les performances? – sree