Kod denetimi - Code audit

Yazılım kodu denetimi , hataları, güvenlik ihlallerini veya programlama kurallarının ihlallerini keşfetmek amacıyla bir programlama projesindeki kaynak kodun kapsamlı bir analizidir . Yazılım piyasaya sürülmeden önce hataları azaltmaya çalışan savunma programlama paradigmasının ayrılmaz bir parçasıdır . C ve C ++ kaynak kodu, Python gibi birçok üst düzey dilin daha az potansiyel olarak savunmasız işleve (örneğin, sınırları kontrol etmeyen işlevlere) sahip olması nedeniyle denetlenecek en yaygın koddur.

Yönergeler

Yazılım denetlenirken, her kritik bileşen ayrı ayrı ve tüm programla birlikte denetlenmelidir. Önce yüksek riskli güvenlik açıklarını aramak ve düşük riskli güvenlik açıklarına doğru çalışmak iyi bir fikirdir . Yüksek riskli ve düşük riskli arasındaki güvenlik açıkları genellikle duruma ve söz konusu kaynak kodun nasıl kullanıldığına bağlı olarak mevcuttur. Uygulama sızma testi, uygulamayı devre dışı bırakmak amacıyla olası erişim noktalarında mümkün olduğunca çok sayıda bilinen saldırı tekniği başlatarak yazılımdaki güvenlik açıklarını belirlemeye çalışır. Bu, yaygın bir denetim yöntemidir ve belirli bir güvenlik açıklarının olup olmadığını, ancak kaynak kodun neresinde olduklarını bulmak için kullanılabilir. Bazıları, döngü sonu denetim yöntemlerinin geliştiricileri bunaltmaya meyilli olduğunu ve sonuçta ekibi uzun bir bilinen sorunlar listesiyle bıraktığını, ancak çok az gerçek gelişme sağladığını iddia ediyor; bu durumlarda, alternatif olarak hat içi denetim yaklaşımı tavsiye edilir.

Yüksek riskli güvenlik açıkları

Aşağıdakilerin kullanılması nedeniyle bazı yaygın yüksek riskli güvenlik açıkları mevcut olabilir:

  • Arabellek taşması güvenlik açığına yol açabilecek sınır dışı denetim işlevleri (ör. Strcpy , sprintf , vsprintf ve sscanf )
  • Daha sonraki sınırların kontrolüne müdahale edebilecek arabelleklerin işaretçi manipülasyonu, örneğin: if ((bytesread = net_read(buf,len)) > 0) buf += bytesread;
  • Execve (), yürütme boruları, system () ve benzeri şeyler gibi çağrılar , özellikle statik olmayan argümanlarla çağrıldığında
  • Giriş doğrulaması, örneğin (SQL'de): SQL yerleştirme güvenlik açığı statement := "SELECT * FROM users WHERE name = '" + userName + "';" örneğidir
  • Dosya dahil etme işlevleri, ör. (PHP'de): Uzaktan Dosya Ekleme güvenlik açığı include($page . '.php'); örneğidir
  • Kötü amaçlı kodla bağlantılı olabilecek kitaplıklar için, referansın dahili değiştirilebilir veri yapısına (kayıt, dizi) döndürülmesi. Kötü amaçlı kod, yapıyı değiştirmeye veya gelecekteki değişiklikleri gözlemlemek için referansı korumaya çalışabilir.

Düşük riskli güvenlik açıkları

Aşağıda, kod denetlerken bulunması gereken, ancak yüksek riskli bir durum oluşturmayan düşük riskli güvenlik açıklarının bir listesi verilmiştir.

Araçlar

Kaynak kodu denetim araçları genellikle yaygın güvenlik açıklarını arar ve yalnızca belirli programlama dilleri için çalışır . Bu tür otomatik araçlar zamandan tasarruf etmek için kullanılabilir, ancak derinlemesine bir denetim için bunlara güvenilmemelidir. Politika temelli bir yaklaşımın parçası olarak bu tür araçların uygulanması tavsiye edilir.

Gereksinimlere bağımlılık

Düşük eşik olarak ayarlanırsa, yazılım denetim araçlarının çoğu, özellikle kod daha önce denetlenmemişse, çok sayıda güvenlik açığı tespit eder. Ancak bu uyarıların gerçek önemi, uygulamanın nasıl kullanıldığına da bağlıdır. Kötü amaçlı kodla bağlantılı olabilecek (ve buna karşı bağışık olması gereken) kitaplık , sistemi kırmak için kasıtlı girişimler beklendiğinden , döndürülen tüm veri yapılarını klonlamak gibi çok katı gereksinimlere sahiptir . Yalnızca kötü amaçlı girdiye maruz kalabilecek program (web sunucusu arka ucu gibi) öncelikle bu girdiye (arabellek taşmaları, SQL enjeksiyonu, vb.) Dikkat etmelidir. Bu tür saldırılar, yalnızca korumalı bir altyapıda yetkili kullanıcılar tarafından dahili olarak kullanılan program için asla gerçekleşemez.

Ayrıca bakınız

Referanslar