Her Yazılım Geliştiricinin Öğrenmesi Gereken 5 Güvenlik Kavramı

By July 11, 2017Uncategorized

Yazılım geliştirmedeki en büyük tehlike yazılımlarını nasıl güvence altına alacaklarını anlamayan ya da anlamayacak geliştiricilerdir. Şu andaki teknoloji durumu, uygulamaların sürekli saldırıya uğradığı bir ortam yarattı. Bu yüzden uygulamalar genellikle bir şirketin altyapısında en zayıf halkasıdır da diyebiliriz.

Bir yazılım geliştiricisinin yazılımın güvenliğini nasıl sağlayacağını anlamadan yazılımı kurması profesyonelce yapılmadığı anlamına gelir .
Bazıları, iyi kodun nasıl geliştirileceğini öğrenmenin zor ve güvenliği öğrenmek için zamanı olmadığını düşünebilir . Ancak asıl mesele, güvenli kodun iyi kod olmasıdır. Üretimdeki bir hata, büyük sorunlara neden olabilir.

Bunu akılda tutarak kod yazın: Güvenli kod iyi bir koddur.

Geliştiricilerin güvenli bir yazılım oluşturmak için güvenlik uzmanı olmaları gerekmez . Gerekli durumlarda şirketlere rehberlik edebilecek uzmanlar zaten var, ancak her geliştirici kilit güvenlik kavramlarını öğrenmeye çalışmalıdır.

Tüm geliştiricilerin anlayabileceği ve anlaması gereken beş güvenlik kavramına göz atalım .

CIA Üçlüsü
Herhangi bir güvenlik faaliyetinin temelini oluşturan temel güvenlik kavramlarından biri, CIA üçlüsüdür.
Confidentiality, Integrity, Availability triadının kısaltmasıdır. Tüm güvenlik faaliyetleri, bu üç nitelik veriyi desteklemek ve korumak için varolmaktadır. Diğer temel güvenlik kavramları bu temel kavramların
temelini oluşturur.

Confidentiality(Gizlilik)
Basitçe ifade etmek gerekirse, gizlilik, verilerin yalnızca yetkilendirilmiş kişiler tarafından kullanılabilmesi anlamına gelir. Gizliliğin dışında kalan anahtar kavramlar, kimlik doğrulama, yetkilendirme ve şifreleme konularını içermektedir.

Integrity (Bütünlük)
Gizlilik, verilerin yalnızca yetkili kişiler tarafından görülebilmesini sağlarken, veri bütünlüğü, verileri değiştirmeye yetkili kişiler tarafından değiştirilmesini sağlar. Ayrıca verilerin bütünlüğünde kilit kavram hesap verebilirliktir. Hesap Verebilirlik, bir sistemin kimin ve neyin değiştiğini bilmek için bir sistemin kabiliyetidir. Verilerinize yetkisiz değişiklikler yapılması tercih edilse de, bu talihsiz olay meydana gelirse hesap verme sorumluluğu size yardımcı olur. Bu değişiklik en azından algılanır ve gerekirse zamanında onarılmasını sağlar.

Availability(Kullanılabilirlik)
Kullanılabilirlik, sistemin ve verisinin, gerektiğinde yetkili kullanıcıların erişebileceği güvencesidir. Bu işlem, kullanıcıların ihtiyaç duyduğu anda hazır olmasını sağlar
CIA üçlüsü tüm güvenlik ilkelerinin temelini oluşturmaktadır. Geliştiriciler tarafından anlaşılmalıdır çünkü geliştiriciler gizlilik, bütünlük ve kullanılabilirliği destekleyen sistemlerine işlevsellik sağlamalıdır.

En Az Ayrıcalık
Geliştiricilerin bir sonraki kilit güvenlik kavramı en az ayrıcalıktır. En az ayrıcalık, kullanıcıların yalnızca işlerini yapmak için gereken erişimi bulmaları ve daha fazlasına ihtiyaç duymaları ve yalnızca bu erişime sahip olmaları için gereken süre boyunca olmasıdır. En az ayrıcalık, aynı zamanda, uygulamanızın yalnızca gereken sunucu dosya sisteminin bölümlerine erişimi olması gerektiği anlamına gelir.

Kriptografi / Kriptografik Çeviklik
Kriptografi, hassas veriyi, PII’yi, PHI’yı veya PCI-DSS veya HIPAA gibi endüstri standartlarına uygun herhangi bir şeyi tutan tüm yazılımlarla oldukça alakalıdır.
Bu veri son derece hassas olduğu için, geliştiricilerin hangi algoritmaları hangi durumlarda kullanacaklarını ve diğer algoritmaların hangileri daha güçlü olduğunu anlamaları önemlidir.
Şifreleme algoritması seçimi, iyi güvenli yazılım tasarımı söz konusu olduğunda sadece bir başlangıçtır. Güvenli yazılım tasarlarken kriptografik çeviklik daha da önemlidir.
Kriptografik çeviklik, yazılımın gerektiğinde kendi şifreleme algoritmalarını değiştirmesine izin veren bir tasarım ilkesidir. Bir tasarım ilkesi, çünkü tasarım aşamasında bunu gerçekten düşünmeden önce, herhangi bir kod yazmanız gerekir.
Bunun en güzel örneği .NET framework’dür. .NET framework akıllıca kriptografik çeviklik ile oluşturulmuştur. Ayrıca bir geliştiricinin kriptografik çeviklikle tasarım yapmasına izin verir.

Tehdit Modelleme
Her geliştiricinin anlaması gereken son kavram, tehdit modellemesidir. Bir yazılım geliştiricisi olarak, yazılımınızın veya sizin yazdığınız parçalarının sizin veya müşterinizin kuruluşuna zarar vermek için kullanılmadığından emin olmak sizin sorumluluğunuzdadır; Yazılımınızın güvenli olduğundan emin olmalısınız. Bu sürecin önemli bir parçası tehdit modelleme yöntemidir. Bir saldırganın yazılımınızı nasıl saldırdırabileceğini veya kötüye kullanabileceğini modellemeyi içerir.

Uygulama güvenliği büyük bir alandır ve zaman geçtikçe ve uygulamalarla daha fazla saldırı geldiğinde giderek daha da önem kazanmaktadır. Ele aldığımız beş güvenlik kavramı, uygulama güvenliği uzmanları olmayan geliştiricilerin daha güvenli bir yazılım oluşturmasına yardımcı olabilir.