Açıkçası, kod tabanınızdan geçmemeye çalışıyoruz, bunu bizim için yapmak için araçlar yazmaya çalışıyoruz.
İlk olarak, teori. Güvenlik bir yazılım sisteminin bir gereğidir, bu nedenle diğer gereksinimler (işlevsellik, kullanılabilirlik, erişilebilirlik, performans vb.) Gibi, gereksinimlerin bir araya getirilmesinden dağıtım ve bakıma kadar yazılım mühendisliği iş akışının her aşamasında dikkate alınmalıdır. Aslında, bu mümkündür ve yazılım proje ekiplerinin bunu yapmasına yardımcı olmak için rehberlik vardır. Çoğunlukla iOS geliştiricileriyle çalışmama rağmen, "güvenli geliştirme yaşam döngüsü" ile ilgili en sevdiğim açıklama Microsoft Press'ten .
Bu modelde, uygulama güvenliği kullanıcılarımızdan gereksinimleri sağlamaya çalışırken başlar. Güvenlik ve gizlilik endişelerini keşfetmemiz gerekiyor, bu kolay değil çünkü biz uzman değiliz, kullanıcı değiliz ve güvenlik gereksinimlerini anladıklarında onları ifade etmeyi zor bulabilirler. Ayrıca, dağıtım sırasında yazılımın hangi risklere maruz kalacağını ve hangi riskin kabul edilebilir olduğunu da keşfetmeliyiz.
Uygulamamızı bu gereksinimleri göz önünde bulundurarak tasarlıyoruz. Kodu, bu gereksinimleri karşılamaya ve kod düzeyinde güvenlik hatalarıyla ilişkili ek risklerden kaçınmaya dikkat ederek yazıyoruz. Yazılımı, güvenlik modelimizin gerçekten yaptığımızla tutarlı olduğundan emin olmak için test ediyoruz, ardından yazılımı, şeyi tasarlarken çevre hakkında yaptığımız varsayımlara uygun bir şekilde dağıtıyoruz. Son olarak, kullanıcının yazılımı güvenlik gereksinimlerine uygun bir şekilde kullanmasına yardımcı olan ve (ve bizlerin) sunulan risklerdeki yeni değişikliklere tepki vermelerini sağlayan destek ve bakım sağlıyoruz.
Tamam, teori için çok fazla. In Uygulamada , (a teknik olmayan biçimde de olsa) çok iyi açıklanmıştır nedenlerle Geekonomics ve esas yolu yazılım şirketleri motive olmuş bunlar nedeniyle, yukarıdaki şeylerin çoğunu olmaz vardır. Bunun yerine, bunu anlıyoruz. Geliştiriciler:
- bir sözleşme için teklif verirken, güvenlik "aldıklarını" göstermek için bir güvenlik görevlisi veya gal kiralamak.
- yazım yazılımı.
- 2. adımda ortaya çıkan birçok sorunu gidererek, sürümü yayınlamadan önce yazılımı doğrulamak için bir güvenlik görevlisi veya gal işe alın.
- dağıtımdan sonra her şeyi yama.
Yani çoğu uygulama güvenliği insanının gerçekten yaptığı şey, sizin de dediğiniz gibi, hataları bulmak. Bu gerçekten yüceltilmiş bir kod inceleme ama bu inceleme arıyor hatalar tür uzman olan insanlar tarafından yürütülen son derece odaklanmış bir kod inceleme, bu yüzden hala bunu yaparken dış yardım alma değeri vardır. Bu genel bir kural kuralı, elbette: her zaman bir şeyi yapmakla ilgilenmeyenleri test etmek için başka birini alın.
Yukarıdakileri doğru olarak kabul edersek, o zaman satın alma kararları veren insanların "yetenekli güvenlik görevlisi" ile "çok fazla hata bulur" eşitlemesi muhtemeldir. Bilgisayarları kendileri için işi yapanlar, olmayanlardan daha fazla hata bulacaklar, bu yüzden elbette büyük ölçüde statik analiz araçlarına güveniyorlar ve belirli istemciler için belirli sorunları kodlamaktan daha fazla zaman harcayacaklar. Daha sonra, uygulama güvenliği çalışanlarının kodu okumak için kod yazmak yerine araç yazma olasılıklarının daha yüksek olduğu sonucuna vardık.
** Uyarı: geriye kalan kişisel görüş ve spekülasyon **
Gerçeklik bozuldu. Yazılım güvenliği teorisinin, bir yazılım sistemine güvenme riskini tanımlamak ve buna yanıt vermekle ilgili olduğunu fark edeceksiniz, uygulama ise mümkün olduğunca çok hata bulmakla ilgiliydi. Elbette, bu yine de riski azaltacaktır, ancak sadece bir yan etki olarak. Oyunun amacı oyunu "kazanmaktan" daha az önemli hale geldi, bu yüzden kurallar kazanmayı kolaylaştırmak için değiştirildi.
Bir yazılım geliştiricisi olarak bu konuda ne yapabilirsiniz? Oyunu orijinal kurallarına göre oynayın. Güvenliğinizin önemini anlayan ve bejeezus'u onlardan eğiten ekibinizde bir ekip bulun (tercihen bir yüklenici yerine ekibinizde, hızlı bir kazanç yerine uzun vadeli sonuçlar elde etmek için motive edilir). Bu kişiye, cevabımın başında tanımlanan uçtan uca güvenliği sağlamada ekibi yönlendirmek için sorumluluk verin.
Ayrıca, o kişiye takip etme yetkisi verin . Bir tasarım güvenlik gereksinimlerini ifade etmiyorsa gözden geçirilmelidir. Uygulama güvenlik gereksinimlerini karşılamıyorsa, serbest bırakılmamalıdır . Güvenlik görevliniz karar çağırabilir, ancak bu karar üzerinde hareket etmesine izin verilmelidir. Bunun, "OMFG güvenliği en önemli şey" diyen güvenlik görevlisi gibi göründüğünün farkındayım, ama demek istediğim bu değil. Ürününüz de işlevsellik, kullanılabilirlik veya performans gereksinimlerini karşılamıyorsa, bu şeyi de serbest bırakmamalısınız.
Bunu neden yapmak istiyorsun? Daha ucuz olmalı: Hepimiz kusurları daha pahalı hale getirdiğiniz Kod Komple tablosunu gördük (ve muhtemelen ucuz bir +10 rep için alıntıladık), değil mi? Güvenlik kusurları da kusurlardır. Ben oyunun gerçek dünya kuralları, çoğu bakım gereksinimi sabit sorunları. Bu ucuz mu?
Tamam, şimdi ne olabilir ben kiralık bir güvenlik tabanca bu konuda ne kadar? Değiştirilmiş kurallara göre oynamayı reddedebileceğim ortaya çıkıyor. Geliştiricilere her şeyin riski azaltmakla ilgili olduğunu, bunun her aşamada yapılabileceğini söyleyebilirim ve sonra bunu yapmalarına yardımcı olabilirim.