2012-02-22 13 views
13

-pie -fPIE ile ASLR'yi etkinleştirebildiğinizden ve (daha doğrusu uygulamanızı ASLR'nin farkında olmasını sağladığınız) bir makalenin üzerine geldim. -fstack-protector da genellikle tavsiye edilir (ancak ne tür saldırıların nasıl korunduğuna ve nadiren nasıl göründüğüne dair açıklamaları nadiren görmekteyim).Programlarınızın güvenliğini artırmak için yararlı GCC bayrakları?

Yararlı seçeneklerin ve açıklamaların güvenliği nasıl artırdığının bir listesi var mı? uygulamanızın bu hiçbiri kullanmak yaklaşık 30 kütüphaneleri kullandığında

...

Ve ne kadar faydalı tür önlemlerin, zaten nelerdir? ;)

+0

ASLR nedir? Bu bayrakların detaylı bir açıklamasını ve performans etkilerini nerede bulabiliriz? – sree

cevap

4

: uygulamanızın bu hiçbiri kullanmak yaklaşık 30 kütüphaneleri kullandığında

Ve ne kadar faydalı tür önlemlerin, zaten nelerdir? ; ana program rasgele bir adrese yüklenecek edebilmek için)

PIE gereklidir. ASLR her zaman paylaşılan kitaplıklar için çalışır, bu nedenle paylaşılan bir kitaplık veya 100.

Yığın koruyucusu, yığın koruyucusuyla derlenen koddan yararlanır. kütüphaneleriniz güvenlik açıklarıyla doluysa program yardımcı olmaz.

Her durumda, bu seçenekleri uygulamanızın bir parçası olarak değil, tüm sistem entegrasyonunun bir parçası olarak görmenizi tavsiye ederim. Güvenilmeyen, potansiyel olarak kötü niyetli verilerle arabirim oluşturacak bir programda 30'dan fazla kitaplık (muhtemelen kod kalitesi ve güvenliği söz konusu olduğunda çoğu önemsiz) kullanıyorsanız, tüm sisteminizi oluşturmak iyi bir fikir olur. Yığın koruyucusu ve diğer güvenlik sertleştirme seçenekleriyle. Bununla birlikte, _FORTIFY_SOURCE'un en yüksek düzeylerinin ve belki de diğer bazı yeni güvenlik seçeneklerinin geçerli, doğru programların yapması gerekebileceği geçerli şeyleri çiğnediğini ve bu nedenle bunları kullanmanın güvenli olup olmadığını analiz etmeniz gerektiğini unutmayın. . O seçeneklerden birinin yaptığı (tehlikeli bir şey), printf'un %n belirtecinin, en azından belirli durumlarda çalışmamasını sağlamasıdır. Bir uygulama oluşturulan bir dize bir ofset elde etmek için %n kullanıyor ve bu ofset daha sonra yazmak için gerekli ve değer doldurulmamışsa, kendi başına olası bir güvenlik açığı ...

5

Hardening page on the Debian wiki, Linux'ta kullanılabilen en yaygın olanları açıklar. Listenizden eksik olan en az -D_FORTIFY_SOURCE = 2, -Wformat, -Wformat-güvenlik ve dinamik yükleyici için relro ve şimdi özellikleri. son soruya gelince

+0

-O1 (veya -O2, -O3, vb.) Olmadan asla -D_FORTIFY_SOURCE = 2'yi kullanmadığınızdan emin olun. Debian bunu çözdü, ama bazı dağıtımlar yoktu ve orada -O0'daki yapıyı kıracak. IOW, ait olması gereken CPPFLAGS'ye -D_FORTIFY_SOURCE eklemeyin. -O1/-O2/-O3/-O6 seçeneğiyle birlikte CFLAGS/CXXFLAGS'ye ekleyin. – anonymous

5

Sertleştirilmiş Gentoo bu bayrakları kullanır:

CFLAGS="-fPIE -fstack-protector-all -D_FORTIFY_SOURCE=2" 
LDFLAGS="-Wl,-z,now -Wl,-z,relro" 

ben optimize Gentoo linux kıyasla yaklaşık% 5-10 performans düşüşü yaşadı (dahil PaX/selinux ve diğer önlemler, sadece CFLAGS.) varsayılan Phoronix kriter paketi.

+1

Sadece bu cevabı bir şekilde güncellemek için, yığın kanarlarını her yerde karşıt olarak gerçekte meydana gelebilecek hareketlere sokan "-fstack-protector-strong" yi kullanmak daha iyidir. Bu, ek yük açısından daha az maliyet için neredeyse etkili SO azaltma ile sonuçlanır. – AoeAoe