secure coding guidelines
Bu eğitici, Güvenli Kodlamayı, Güvenlikle ilgili Güvenlik Açıklarından nasıl kaçınılacağını açıklar ve Güvenli Kodlama Uygulamaları için Kodlama Yönergeleri ve Kontrol Listesi Sağlar:
Yazılımda güvenlik oluşturmak ve Güvenli Kodlama Yönergelerini ve En İyi Uygulamaları uygulamak için, amaçlanan Uygulama Geliştirme üzerinde çalışmak üzere belirlenen ekip ile birlikte tüm kuruluşun belirli yönleri dikkate alması gerekir.
Burada, güvenli bir yazılım geliştirmeye yardımcı olan bu yönleri tartışacağız.
Bir geliştiricinin ne anlama geldiğini bilmemesi kadar basittir. 'Yazılım için güvenlik' ve bir bilgisayar korsanının kendi yazılımını nasıl hackleyebileceğini, kontrolünü nasıl ele geçirebileceğini ve yararlanmaya çalışabileceğini, bu durumda güvenli bir yazılımı kodlamak imkansızdır. Bu nedenle, geliştiricinin önce Güvenli Kodlamanın anlamını anlaması gerekir.
Ne öğreneceksin:
- Güvenli Kodlama Nedir?
- Güvenli Kodlama Yönergeleri
- Güvenli Kod Uygulamaları İçin Kontrol Listesi
- Sonuç
Güvenli Kodlama Nedir?
Güvenli kodlama, yazılımın tasarlanması ve geliştirilmesidir. zayıflıklardan kaçınmak belirtilen güvenlik standartlarına ve sektörün en iyi uygulamalarına bağlı kalarak güvenlikle ilgili güvenlik açıklarına yol açan.
Herkesin aklından çıkan ilk soru şudur: 'Yazılımımız için Ne Kadar Güvenlik Gerekiyor' veya Yazılımımızın Güvenli olduğunu ne zaman söyleyebiliriz? ve Bu güvenlik standartları nelerdir ?
Dolandırıcılık ve güvenlik tehditleri gün geçtikçe artıyor ve en güvenli yazılım olarak adlandırılan yazılımlarda bile yeni çeşitler ve hackleme yolları görüyoruz.
Son zamanlarda, UIDAI'nin Aaadhar programının kişisel veriler için değiştirildiğini duyduk. Bu nedenle, yazılımın içerdiği tehditleri anlamadığımız ve işin risklerine göre önceliklendirmediğimiz sürece, yazılım için ne kadar güvenlik gerektiğini ve güvenlik standartlarının neler olduğunu bilmek gerçekten zordur.
Yazılıma% 100 güvenlik koruması sağlamak muhtemelen zor olabilir, ancak Program Ekibi bunu analiz ederse Riskler ve Menkul Kıymetler Yazılımlarına dahil olan, yani potansiyel tehditler ve ekip bu riskleri azaltmakla ilgilenebilirse, uygulamanın güvenlik açısından iyi olacaktır.
Bu nedenle, ekibin ilk görevi, uygulamalarında yer alan riskleri ve menkul kıymetleri belirlemek ve analiz etmek ve olası azaltma seçeneklerini anlamak ve buna göre en iyi seçeneği benimsemektir.
Bu nedenle, ilk on güvenlik açığı belirlendikten sonra, bir programın karşılaşabileceği neredeyse tüm saldırıları sınıflandırır. Bu, tehditleri anlamaya ve güvenlik ve geliştirme çabalarına azaltmadan çok önlemeye yönelik öncelik vermeye yardımcı olacaktır.
Örneğin. Bireyin sağlık verilerini ve kişisel bilgilerini işleyen ve depolayan sağlıkla ilgili bir uygulama geliştirmeyi planlarken, uygulama için en büyük güvenlik riski kişisel sağlık verilerini çalmaktır.
Risk azaltma
Riski azaltmak için,
- Yetkisiz bir kullanıcı tarafından verilere erişim için güvenliğin uygulanması, uygun kimlik doğrulama ve yetkilendirme ile ele alınmalıdır (güçlü parola politikası uygulamaları, 2 Faktörlü Kimlik Doğrulama).
- Veri aktarımının güvenli kanallarını (HTTPS) uygulayarak ve aktarım sırasında veri şifrelemesini uygulayarak bir kaynaktan başka bir kaynağa veri aktarımı sırasında veri sızıntısı olmamasını sağlamak için özen gösterilmelidir.
- Beklemede olan verilerin tahrif edilmesi veya çalınması da başka bir olasılıktır. Bu nedenle, kişisel sağlık verilerinin saklanması (şifreleme kullanılması) çok önemlidir.
'Güvenli Kodlama Standardı' na gitmeden önce, tüm program ekibinin bir 'Güvenlik Bilinci Oturumu' tartışın ve beyin fırtınası yapın
- Spesifik ürünleri için güvenlik gerekliliği.
- Bir bilgisayar korsanının sistemlerini hackleyerek elde edebileceği olası faydalar.
- Uygulamalarının güvenlik ihlallerinin olası yolları ve araçları.
- Benzer bir sektör ve alanda Ortak Güvenlik Uygulamaları izlendi.
- İlgili programlarının tipik güvenlik sorunlarını anlama.
Ayrıca, eğer anlayabilirlerse, ekibin daha iyi başa çıkmasına yardımcı olur. Güvenlik Açıklarının Kaynakları yazılımlarının karşılaşabileceği ve yazılımın hangi nedenlerle oluşturulduğu Zayıf / Yetersiz Güvenlik .
Yetersiz Güvenlik Uygulamasının Nedenleri
Genel olarak, uygulamada yetersiz güvenlik uygulamasının birkaç nedeni aşağıdadır.
- İşlevsel Yayın için Güvenlik yönünden öncelik verilir.
- Yazılım Güvenliği ve Hackerlar Hakkında Cehalet veya Farkında Olmama.
- Program veya Yazılım Tasarımının kendisinde yeterli netlik yok.
- Programın karmaşıklığı.
- Yeterli veri yok, konuşlandırılacağı canlı sistem hakkında bilgi.
- SDLC aşamalarında Güvenlik dikkate alınmaz.
- Yazılımda kullanılan dilin özelliklerine ilişkin yetersiz bilgi ve anlayış.
- Ekip ve geliştiricilere Güvenlik Kodlama Yönergeleri hakkında yeterli bilgi yok.
Tüm Geliştiricilerin ve Test Uzmanlarının bir uygulamanın Güvenliğinin farkında olmadığını ve özellikle üzerinde çalışacakları uygulamaya yönelik güvenlik açıkları ve açıkları hakkında derinlemesine bir anlayışa sahip olmayabileceğini biliyoruz. Genellikle aşina olacaklar, 'İşlevsel olarak nasıl kodlanır' ancak hepsi 'Güvenli bir şekilde kod yazmayı' bilmiyor.
Bu nedenle, kuruluşun yazılımlarında Güvenli Kodlama Uygulamalarını benimsemesinin en önemli yönü, öncelikle 'Tren insanları' . Bu nedenle, ekibini Güvenli Kodlama Yönleri, En İyi Güvenlik Kodlama Uygulamaları ve Doğru Araç kullanımı konusunda eğitmek çok önemlidir.
Yazılım Güvenliğinin en önemli Tasarım Prensibi, 'Tasarım ve Varsayılana Göre Güvenliği Uygulama' .
Güvenli Kodlama Yönergeleri
Güvenliği sağlamak için, bir 'Güvenli Kodlama standardı' uygulama geliştirmenin en başında bir program için tanımlanmıştır ve bu, takıma yazılım için Güvenli Varsayılanları ele alma ve onu saldırılardan korumaya yardımcı olur.
oracle sql röportaj soruları ve cevapları
Tüm ekibin Bu Standarda Uymaya Zorunlu , kodlama dilinden ve programda kullandıkları araçlardan bağımsız olarak.
Aşağıda, güvenli kod tasarımında varsayılan olarak uygulanması gereken birkaç örnek verilmiştir:
- Erişim yalnızca kimliği doğrulanmış kullanıcılarla sınırlandırılmalı ve kimlik doğrulaması her katmanda uygulanmalıdır.
- Kimlik doğrulama belirteçlerini korumak için iletişim kanallarının şifrelenmesi gerekir.
- Tüm anahtarların, şifrelerin ve sertifikaların uygun şekilde saklanması ve korunması gerekir.
- Dosya şifreleme, veritabanı şifreleme ve veri öğesi şifrelemesinin uygulanması gerekir.
Güvenli Kodlama İçin Dil Seçimi
Kodlama için dil seçimi, güvenli kodlamaya bağlı olmayabilir. Güvenli bir yazılım oluşturmak için kodlama için güvenli veya güvenli olmayan bir dil olarak belirli bir şey yoktur.
Bu, yazılımı oluşturmak için bir programlama dilini nasıl kullandığımız ve geliştiricinin güvenlik yönlerini uygulamada kodlama dili hakkında ne kadar derinlemesine bilgi sahibi olduğudur.
Ancak yine de açıklığa kavuşturuldu Güvenli Kodlama Standartları, dil seçiminden bağımsızdır, Güvenli Kod En İyi Uygulamaları dile bağlıdır, Platforma bağlıdır ve Uygulamaya bağlıdır .
Bu nedenle, Güvenli Koda sahip olmak için, Geliştiricinin programda kullanılan dil hakkında derinlemesine bilgi sahibi olması ve böylece en iyi güvenlik uygulamalarının kolayca uygulanabilmesi gerekir.
Misal:
- Arabellek taşması güvenlik açığı olasılığı dilden dile farklılık gösterir, ancak C, C ++ ve Assembly, eski bellek yönetimi yeteneklerinden dolayı en duyarlı oldukları kabul edilir. Strcpy () ve memcpy () gibi birkaç standart C kitaplığı işlevi, arabellek taşması saldırılarına karşı savunmasızdır. Hedef arabelleğe sığamayacak kadar büyük bir kaynak arabelleği kopyalayarak bu işlevlerin yanlış kullanımı, arabellek taşmasına neden olur.
- Java tabanlı web uygulamalarındaki yaygın sorun, dosya, soket ve veritabanı bağlantıları gibi açık sistem kaynakları nedeniyle meydana gelebilecek olası kaynak sızıntılarıdır.
Güvenliğin bir sonraki yönü, kullanılacak araçlar gibi araçlar kullanarak güvenliği optimize etmek için Uygulama Programında Entegre Geliştirme Ortamları çok şey sağladıkları için en faydalı olacak Uyarılar yazılımın kalitesini denemek ve iyileştirmek için kullanıcılara ve bu uyarılara dikkat çekmek.
- Eclipse, Spring Tool Suite, RAD gibi ticari veya Açık kaynaklı kitaplıkların / eklentilerin IDE ile entegrasyonu, geliştiricilerin potansiyel olarak savunmasız kodu tespit edip tanımlayarak güvenli kod yazmasına yardımcı olur ve kötü amaçlı dosya yürütme, bilgi sızıntısı ve uygunsuz hata işleme.
Ayrıca kullanmak da önemlidir. Statik ve Dinamik Analizörler yazılımın Güvenlik yönlerini iyileştirmek için. Genel olarak, Statik analizörler belirli hata türleri için optimize edilmiştir, bu nedenle belirli hataları tespit ederken çok sayıda yanlış pozitif bulurlar. Bazen gerçek hataları da gözden kaçırma olasılıkları vardır.
Bu nedenle kullanılması tavsiye edilir çoklu Statik Analizörler farklı türdeki hataları daha iyi kapsamak ve birçok yanlış pozitiften kaçınmak için. Bazen de yapılması tavsiye edilir manuel test -e yanlış pozitifleri ortadan kaldırmak .
Güvenli Kodlama Kuralları ve Önerileri
Programın bir dizi tanımlaması iyi olacaktır. 'Güvenli kodlama Kuralları ve Önerileri' kaynak kodun uyumluluk açısından değerlendirilebileceği, böylece test uzmanlarının 'Uyumluluk Testi' bu güvenli kodlama standartlarının her biri için.
Bu nedenle, güvenlik kodu, belirlenen ölçütlere göre bu kurallar kullanılarak Uygun veya Uygun Olmayan olarak onaylanabilir.
Aşağıda belirtilen kurallardan birkaçı güvenlik ihlallerini kontrol etmek için kullanılabilir:
- Artık ihtiyaç kalmadığında dosyaların kapatılması gerekir.
- Bir yapıyı bir sınırdan geçerken, bilgi sızıntısının önlenmesi gerekir.
- Nesneler, uygun saklama süreleri ile beyan edilmelidir.
Bu nedenle, bu kuralları doğrulamak için test senaryoları, uygunluğu kontrol etmek için tasarlanmalı ve yürütülmelidir. Güvenlik açıklarının çoğunun tipik yaygın programlama hatalarından kaynaklandığı da tespit edilmiştir.
Bu nedenle, Geliştiricinin anlaması gerekir 'Güvensiz Kodlama Yöntemi' bir yandan da Güvenli Kodlamanın en iyi uygulamalarını öğrenirler. Uygulamalarının güvenlik açıklarına katkıda bulunan en yaygın programlama hatalarını, kodlama sırasında ilgilenilebilmeleri için toplamak idealdir.
Bu tür tipik programlama hataları, esas olarak arabellek taşmaları, siteler arası komut dosyası oluşturma ve enjeksiyon kusurlarından kaynaklanır.
Tipik programlama güvenlik açıklarından bazıları şunları içerir:
- SQL Enjeksiyonu (Bir SQL Komutunda kullanılan Özel Öğelerin Hatalı Nötrleştirilmesi).
- Tamsayı taşması.
- Arabellek taşması (Giriş Boyutunu Kontrol Etmeden Arabellek Kopyası).
- Kontrolsüz biçim dizesi.
- Eksik kimlik doğrulama ve yetkilendirme (Yanlış yetkilendirme).
- Hassas verilere maruz kalma.
- Yanlış hata işleme.
Bu hatalardan bazıları sistemin çökmesine, sisteme beklenmeyen erişime ve yazılımın kontrolünün bilgisayar korsanları tarafından kaybedilmesine neden olabilir.
Kaçınılması Gereken Yaygın Programlama Hataları
Kaçınılması gereken birkaç yaygın Programlama Hatası aşağıda listelenmiştir:
- Bir SQL Komutunda kullanılan Özel Öğelerin Yanlış Nötrleştirilmesi ('SQL Enjeksiyonu').
- Giriş Boyutunu Kontrol Etmeden Arabellek Kopyalama ('Klasik Arabellek Taşması').
- Kritik İşlev için Eksik Kimlik Doğrulama.
- Eksik veya Yanlış Yetkilendirme.
- Sabit Kodlu Kimlik Bilgilerinin Kullanımı.
- Hassas Verilerin Eksik Şifrelenmesi.
- Tehlikeli Türde Dosyanın Sınırsız Yüklenmesi.
- Bir Güvenlik Kararında Güvenilmeyen Girdilere Güven.
- Gereksiz Ayrıcalıklarla Yürütme.
- Siteler Arası İstek Sahteciliği (CSRF).
- Bütünlük Kontrolü Olmadan Kodun İndirilmesi.
- Arabellek Boyutunun Yanlış Hesaplanması.
- Aşırı Kimlik Doğrulama Girişimlerinin Uygunsuz Kısıtlanması.
- Güvenilmeyen Siteye URL Yeniden Yönlendirme ('Açık Yönlendirme').
- Kontrolsüz Biçim Dizesi.
- Tuzsuz Tek Yönlü Hash Kullanımı.
Güvenli Kod Uygulamaları İçin Kontrol Listesi
Son olarak, Güvenli Yazılım Geliştirme yönlerinin yukarıdaki tüm noktalarını değerlendirdikten sonra, Geliştiricilerin aşağıdakileri izlemesi gerekir: Güvenli Kod Uygulamaları için oluşturulmuş kontrol listesi şeylerin gözden kaçırılmamasını sağlamak için. Aşağıda birkaç tane verilmiştir, ancak kapsamlı bir liste değildir.
Giriş Doğrulama:
- Girdiye güvenmeyin, merkezi girdi doğrulamasını düşünün.
- İstemci tarafı doğrulamaya güvenmeyin.
- Standartlaştırma sorunları konusunda dikkatli olun.
- Girişi sınırlayın, reddedin ve sterilize edin. Tür, uzunluk, biçim ve aralık için doğrulayın.
Doğrulama:
- Siteyi anonim, tanımlanmış ve doğrulanmış alana göre bölümleyin.
- Güçlü parolalar kullanın.
- Parola sona erme dönemlerini ve hesap devre dışı bırakmayı destekleyin.
- Kimlik bilgilerini saklamayın (salt ile tek yönlü karmalar kullanın).
- Kimlik doğrulama belirteçlerini korumak için iletişim kanallarını şifreleyin.
- Form kimlik doğrulama tanımlama bilgilerini yalnızca HTTPS bağlantıları üzerinden geçirin.
Yetki:
- En az ayrıcalıklı hesapları kullanın.
- Yetkilendirme ayrıntı düzeyini düşünün.
- Ayrıcalıkların ayrılmasını zorunlu kılın.
- Kullanıcı erişimini sistem düzeyindeki kaynaklara kısıtlayın.
- Kimlik Doğrulama ve Yetkilendirme için OAuth 2.0 protokolünü kullanın.
- Carryout API Doğrulaması.
- İzin verilen yöntemleri beyaz listeye ekleyin.
- Ayrıcalıklı eylemleri ve hassas kaynak koleksiyonlarını koruyun.
- Siteler arası kaynak sahteciliğine (CSRF) karşı koruma.
Oturum Yönetimi:
- Sunucuda bir Oturum tanımlayıcı oluşturun.
- Oturumu Oturumu Kapat ile sonlandırın.
- Yeniden kimlik doğrulamada yeni bir oturum oluşturun.
- TLS üzerinden iletilen çerezler için 'güvenli' özelliğini ayarlayın.
Kriptografi:
- 'Veri aktarılırken, Veri depolanırken, Veri hareket halindeyken, Mesaj Bütünlüğü' sırasında kriptografi kullanın.
- Kendinizinkini geliştirmeyin. Denenmiş ve test edilmiş platform özelliklerini kullanın.
- Şifrelenmemiş verileri algoritmaya yakın tutun.
- Doğru algoritmayı ve anahtar boyutunu kullanın.
- Anahtar yönetiminden kaçının (DPAPI kullanın).
- Anahtarlarınızı periyodik olarak değiştirin.
- Anahtarları sınırlı bir yerde saklayın.
Günlük Kaydı ve Denetleme:
- Kötü niyetli davranışı tanımlayın.
- İyi trafiğin neye benzediğini bilin.
- Tüm uygulama katmanlarındaki etkinliği denetleyin ve günlüğe kaydedin.
- Günlük dosyalarına güvenli erişim.
- Günlük dosyalarını yedekleyin ve düzenli olarak analiz edin.
Çıkış Kodlaması:
- Carryout 'Giriş Doğrulama (XML, JSON….).
- Parametreli sorgu kullanın.
- 'Şema doğrulaması' gerçekleştirin.
- Kodlama (XML, JSON ..) gerçekleştirin.
- Güvenlik Başlıkları Gönderin.
Referans: ' OWASP Güvenli Kodlama Uygulamaları Kontrol Listesi (Kısaca SCP Kontrol Listesi) '
Güvenli Kodlama Kontrol Listesinin Tablo Özeti
Aşağıdaki tablo, 'Güvenli Kod İçin Hatırlamanız Gerekenler' bir uygulamanın.
# | Ne? |
---|---|
7 | Tüm ekibin Güvenli Kodlama Standardına Uymaya Zorlandığından emin olmak için. |
bir | Açıkça anlamak için 'Güvenli Kod Nedir'? |
iki | Yaygın 'Güvenlik Açıklarının Kaynakları' nı anlamak. |
3 | Ekibe 'Güvenlik Farkındalık Oturumu' yürütmek. |
4 | Uygulamaya dahil olan 'Riskleri ve Menkul Kıymetleri' ve 'Azaltma' yöntemlerini belirlemek ve analiz etmek. |
5 | Güvenli Kodlama Standartları, En İyi Uygulamalar ve yönergeler konusunda 'Ekibi Eğitmek'. |
6 | 'Güvenli Kodlama Standardı' nı tanımlamak için |
8 | 'Uygulaması Kolay Dili' kullanmak ve bu konuda 'derinlemesine bilgi' sahibi olmak. |
9 | IDE (Integrated Development Environment) araçlarını kullanmak için |
10 | 'Statik ve Dinamik analizörleri' ve 'çoklu Statik Analizörleri' kullanarak 'Yanlış Pozitifleri' ortadan kaldırmak için |
on bir | Hatayı tanımlamak için gereken her yerde 'Manuel Test' gerçekleştirmek için, eksikleri atlayın. |
12 | Bir dizi 'Güvenli Kodlama Kuralları ve Önerileri' tanımlamak için |
13 | Belirlenen kurallar için 'Uygunluk Uygunluk Testi' gerçekleştirmek. |
14 | 'Güvenli olmayan kodlama yöntemini' anlamak ve 'Yaygın Programlama Hatalarını' toplamak. |
on beş | 'SCP Kontrol Listesi'ni kesinlikle takip etmek |
Sonuç
Bu öğreticinin Yazılım Güvenliğini sağlamak için en iyi rehberiniz olacağını umuyoruz.
Güvenli yazılım geliştirme için kodlama yönergeleri, kavramı kolayca anlamanız için örneklerle birlikte burada basit terimlerle listelenmiştir.
Mutlu Okumalar !!
Önerilen Kaynaklar
- Güvenlik Testi (Tam Kılavuz)
- 2021 Yılının En İyi 30 Siber Güvenlik Şirketi (Küçük - Kurumsal Düzeydeki Firmalar)
- Yeni Başlayanlar İçin Bilgisayar Programlamanın Temelleri | Kodlama Eğitimi
- Mükemmel Kodlama Deneyimi için En İyi 15 En İyi Ücretsiz Kod Düzenleyicisi
- SQL Injection Testing Tutorial (SQL Injection Attack Örneği ve Önlenmesi)
- Geliştiriciler İyi Testçiler değildir. Ne diyosun?
- ISTQB Foundation Sınav Formatı ve Bildirileri Çözme Yönergeleri
- Mobil Uygulama Güvenliği Test Yönergeleri