C ve C ++ ‘da güvenli programlama dizisinin bu üçüncü bölümünde, C ve C ++’ da güvenli kod oluşturmamıza yardımcı olacak bazı araçlara bakacağım. İlk makale, C/C ++ ‘dan uzaklaşmanın nedenlerine baktı, ikincisi güvenli kod oluşturmak için C/C ++’ nın özelliklerini nasıl kullanabileceğimizi araştırdı.
Bu üçüncü bölümdeki takım odağı ile, kod dillerini 3 lehine bırakıyoruzRDKodumuzun gerçekten güvenli olduğundan emin olmamıza yardımcı olabilecek parti araçları. Üç özel araca odaklanacağım:
- Statik analiz
- Dinamik analiz
- Bulanık
İlk olarak, statik analiz.
Statik analiz
Statik analiz, gelişim yaşam döngüsünün başlarında potansiyel hataları, güvenlik açıklarını, kodlama standart ihlallerini ve kalite sorunlarını tespit etmeyi amaçlayan, kaynak kodunu yürütmeden incelemek için otomatik bir yöntemdir. Statik analiz tipik olarak sürekli entegrasyon/sürekli dağıtım (CI/CD) boru hatlarına entegre olur ve yazılım geliştirme sırasında devam eden kalite kontrollerini sağlar.
Temel Avantajlar:
- Erken Tespit: Çalışma zamanından önce sorunları tanımlar.
- Güvenlik: Güvenlik açıkları bulur (örneğin, tampon taşmaları, SQL enjeksiyonu).
- Kod Kalitesi: Okunabilirliği, sürdürülebilirliği ve tutarlılığı artırır.
- Uyum: Kodlama Standartlarına ve Yönergelere Uyumayı Sağlamaya Yardımcı Olur
Tespit edilen yaygın sorunlar:
- Sözdizimi ve anlamsal hatalar
- Potansiyel güvenlik açıkları
- Kaynak sızıntıları (bellek, dosyalar, soketler)
- Ulaşılamaz veya ölü kod
- Yanlış veya riskli API kullanımı
- Kodlama Standartlarının İhlalleri (Misra, CERT, vb.) Tespit edilen ortak sorunlar:
- Sözdizimi ve anlamsal hatalar
- Potansiyel güvenlik açıkları
- Kaynak sızıntıları (bellek, dosyalar, soketler)
- Ulaşılamaz veya ölü kod
- Yanlış veya riskli API kullanımı
- Kodlama Standartlarının İhlalleri (Misra, Cert, vb.)
Popüler Açık kaynaklı Aletler:
- CPPCHECK – C/C ++ Hata ve Güvenlik Denetleyicisi.
- Clang Statik Analizör – LLVM ile entegre güçlü C/C ++ analizörü.
- VisualCodegrepper
- Fıçı
Açık kaynak alanında daha birçok seçenek vardır, ancak yukarıdaki seçim C/C ++ kodu ile çalışır. Ticari alana bakarken daha fazla seçenek var. Bir GitHub kullanıcısıysanız, GitHub’daki gelişmiş güvenlik seçenekleri, ek bir maliyetle olmasına rağmen, GitHub iş akışlarınızın bir parçası olarak çalıştırılabilen CodeQL ile birlikte gelir.
Dinamik analiz
Dinamik analiz, yürütme sırasında yazılım davranışının incelenmesini içeren bir test tekniğidir. Kodu çalıştırmadan denetleyen statik analizlerin aksine, dinamik analiz, genellikle özel enstrümantasyon kullanarak bir programı gözlemleyerek çalışma zamanı sorunlarını tanımlar.
Temel Avantajlar:
- Çalışma Zamanı Sorunu Algılama: Yalnızca yürütme sırasında belirgin olan hataları bulur (örn. Bellek sızıntıları, yarış koşulları).
- Güvenlik bilgileri: Çalışma zamanındaki kullanılabilir güvenlik açıklarını tanımlar.
- Performans profili oluşturma: bellek kullanımı, performans darboğazları ve kaynak kullanımını ölçer
Tespit edilen yaygın sorunlar:
- Bellek sızıntıları ve arabelleği taşıyor
- Kullanımdan sonra veya başlatılmamış değişkenler
- İplik güvenliği ve eşzamanlılık sorunları
- Performans darboğazları ve sıcak noktaları
- Yanlış İstisna İşleme
- Kaynak sızıntıları (dosya tanımlayıcıları, veritabanı bağlantıları)
Popüler Araçlar:
- Valgrind: Bellek sızıntılarını ve iş parçacığı sorunlarını tespit etmek için enstrümantasyon çerçevesi.
- AdresSanitizer (ASAN): Bellek bozulmasını ve sızıntılarını tespit eder.
- ThreadSanitizer (TSAN): İş parçacığı ve eşzamanlılık sorunlarını tanımlar.
- Intel VTune / Perf: Performans Profilleme ve Kaynak Kullanım İzleme.
VTune bir Intel aracı olmasına rağmen, ücretsizdir ve Windows, Linux ve macOS’da kullanılabilir.
Bulanık
Fuzzing (veya Fuzz testi), randomize veya yarı randomize edilmiş girişleri yazılıma, hatalar, güvenlik açıkları, çökmeler ve beklenmedik davranışlar arayan otomatik bir yazılım test tekniğidir. Özellikle C ve C ++ gibi, bellekle ilgili güvenlik açıklarına eğilimli dillerde etkilidir:
- Arabellek taşmaları
- Boş kullanışsız hatalar
- Hafıza Sızıntıları
- Tamsayı taşıyor
- Tanımlanmamış davranış
- Bounds Dışı Erişim
- Mantık hataları
Bulanıklaştırmanın temel avantajları:
- Güvenlik Açıklarının Otomatik Keşfi:
- Hızlı bir şekilde geliştiricilerin ve testçilerin göz ardı edebileceği kenar durumlarını ve hataları bulur.
- Yüksek Kapsam:
- Karmaşık giriş alanlarını manuel testlerden daha ayrıntılı bir şekilde keşfedebilir.
- Gerçekçi senaryolar:
- Saldırganların sömürebileceği pratik saldırı vektörlerini ortaya çıkarır.
- CI/CD ile entegrasyon:
- Sürekli güvenlik testi için otomatik yapı boru hatlarına sorunsuz bir şekilde entegre olur.
C/C ++ için popüler bulanık araçlara örnekler:
- AFL (Amerikan bulanık LOP): Kapsama kılavuzlu bulantı, son derece etkili ve yaygın olarak kullanılmıştır.
- Libfuzzer: Yapım ortamına derin entegrasyona sahip yerleşik LLVM tabanlı bulanık motor.
- Honggfuzz: İplik desteği ile hızlı, ölçeklenebilir ve çok yönlü fuzzer.
- OSS-Fuzz: Google’ın sürekli olarak açık kaynaklı projeler için kullanıldığı sürekli bulanık hizmeti.
Sınırlamalar:
- Hataların olmadığını kanıtlamıyor:
- Fuzzing güveninizi artırır, ancak yazılımınızın hatasız olduğunu garanti etmez.
- Kalite giriş corpus’a bağlıdır:
- Etkili bulanık, anlamlı tohum girişleri ve sürekli iyileştirme gerektirir.
Github’dan Fuzzing için ücretsiz bir yem seçimi bulabilirsiniz: FutureSlab/Bulanık tohumlar: Fuzzing Expeditions için merkezi bir tohum girişi koleksiyonu
Diğer
Tüm bu araçlar, kodun güvenlik testini otomatikleştirmek için CI/CD boru hatlarına entegre edilebilir ve olmalıdır. Ticari araçlardan bazıları, yazıldığı gibi kod hakkında geri bildirim sağlayabilen çeşitli IDE’lere eklentilere sahiptir.
Hem C hem de C ++ ‘nın kullanımına devam etme konusundaki kendi fikrim umarım bu seriden açıktır. Şahsen, bu dillerin geleceği için yüksek umutlarım var, özellikle C ++ Bjarbe Stoustrrup’un yaratıcısından, dillerin gelecek standartlarda güvenlik özelliklerine öncelik vermesinden sorumlu ISO komitesine çağrı ile.
Bununla ve harici takımların sürekli güçlendirilmesi ile C ve C ++ ‘da güvenli kodlama mümkündür ve önümüzdeki yıllarda daha kolay hale gelecektir!
C/C ++ (Bölüm 3) savunmasındaki görev ilk olarak Siber Güvenlik Dergisi’nde ortaya çıktı.