Secure Coding Practices Part 2

Alican Kiraz
4 min readFeb 25, 2020

Yazımıza Part 2 kapsamında devam edelim.

Part 2:
- Data Protection
- Communication Security
- System Configuration
- Database Security
- File Management
- Memory Management

OWASP Secure Coding Practices Checklist Kapsamında Değerlendirelim

Data Protection:

  • Saldırganlara yol gösterebilecek ve sizlere karşı kullanabileceği Uygulamalarınıza ve sisteminize ait belgeleri kaldırın.
  • HTTP GET Request parametrelerine hassas bilgiler dahil etmeyin
  • Server-side Source Code’un bir kullanıcı tarafından indirilmesini önleyin
  • Application’ınız, artık ilgili veri gerekmediğinde bu hassas verilerin kaldırılmasını desteklemelidir. (örn. kişisel bilgiler )
  • Kimlik doğrulama da dahil olmak üzere hassas bilgilerin giriş sağlanacağı ve bu tarz bilgiler içermesinden şüphelendiğiniz formlardaki otomatik tamamlama özelliklerini devre dışı bırakın.
  • En az yetkilere sahip ayrıcalığı uygulayın, kullanıcıları yalnızca istek ve görevlerini yapması için gereken işlevsellikler, Veri ve Sistem bilgilerine ulaşabileceği şekilde sınırlayın.
  • Sunucuda depolanan hassas verileri, önbelleğe alınmış veya geçici olarak tutulan diğer verileri yetkisiz erişime karşı koruyun ve bu geçici çalışma dosyalarını işlemler sağlandıktan sonra temizleyin.
  • Sunucu tarafında bile, Authetication Credentials verileri gibi son derece önemli saklanan bilgileri güncel kriptografi algoritmaları ile şifreleyin. Her zaman iyi denetlenmiş algoritmalar kullanın, kritik noktalarda salt’lamalar kullanın.
  • Sunucuda saklanan hassas veriler için uygun erişim denetimlerini oluşturarak uygulayın. Önbelleğe alınmış verileri, geçici dosyaları ve yalnızca belirli sistem kullanıcıları tarafından erişilebilinen veriler içinde bu denetimleri uygulayın.
  • Parolaları, bağlantı dizelerini veya diğer hassas bilgileri cleartext olarak saklamayın.
  • Kullanıcı tarafından erişilebilir Source kod’da, backend sistemini veya diğer hassas bilgileri ortaya çıkarabilecek yorum satırlarını göz gezdirip kaldırın.
  • Hassas bilgiler içeren sayfalarda Client tarafında önbelleğe almayı devre dışı bırakın.

Communication Security:

  • Tüm hassas bilgilerin iletimi sırasında şifreleme kullanın. Bir bağlantıyı korumak için TLS gerekmektedir. Hassas dosyaların veya HTTP tabanlı olmayan bağlantıların ayrı ayrı şifrelenmesi ile bu güvenlik sağlanabilir.
  • TLS sertifikaları geçerli olmalı ve doğru etki alanı adına sahip olmalı, süresi dolmamış olmalıdır.
  • Başarısız TLS bağlantıları, güvenli değilse bu bağlantı isteğine geri dönmemelidir.
  • Authenticated erişim gerektiren tüm içerik ve hassas bilgiler TLS bağlantısı ile kullanılmalıdır.
  • Hassas bilgi veya işlevler içeren harici sistemlere bağlantılar için yine TLS’i kullanın.
  • Uygun şekilde yapılandırılmış tek bir standartlı TLS uygulaması kullanın.
  • Tüm bağlantılar için özel karakter kodlamalarını belirleyin.
  • Harici sitelere bağlanırken HTTP yönlendiricisinden hassas bilgiler içeren parametrelere filtreler uygulayın veya kısıtlandırmalar getirin.

System Configuration:

  • Uygulamanın hangi HTTP yöntemlerini (POST veya DELETE) destekleyeceğini ve uygulamanın farklı sayfalarında farklı işlenip işlenmeyeceğini tanımlayın
  • Sunucuların, framework’lerinin ve sistem bileşenlerinin en son yayınlanıp onaylanan sürümünü çalıştırdığından emin olun
  • Sunucuların, framework’lerinin ve sistem bileşenlerinin kullanımdaki sürüm için verilen tüm yamalara sahip olduğundan emin olun
  • Web sunucusunu, işlem ve hizmet hesaplarını mümkün olan en düşük hak yetkinlikleri ile kısıtlayın
  • İstisnalar oluştuğunda ve beklenmedik Request’ler alındığında, güvenli bir şekilde başarısız olarak isteğe tepki verin.
  • Gereksiz tüm işlevleri ve dosyaları kaldırın
  • WebDAV uzantıları gibi gereksiz HTTP yöntemlerini devre dışı bırakın. Dosya işlemeyi destekleyen genişletilmiş bir HTTP yöntemi gerekiyorsa, iyi denetlenmiş bir kimlik doğrulama mekanizması kullanın
  • Web sunucusu hem HTTP 1.0 hem de 1.1'i işliyorsa, her ikisinin de benzer ortak yapıda yapılandırıldığından emin olun veya oluşabilecek herhangi bir farkı anladığınızdan emin olun (örneğin, genişletilmiş HTTP yöntemlerinin işlenmesi)
  • İşletim sistemi, web sunucusu sürümü ve uygulama framework’leri ile ilgili HTTP Resonce başlıklarından gereksiz bilgileri kaldırın
  • Varlık yönetim sistemi oluşturun ve sistem bileşenleri ile yazılım girişlerini kaydedin
  • Geliştirme ortamlarını, prod ağından ayırın ve yalnızca yetkili geliştirme ve test gruplarına erişim sağlayın.
  • Hem geliştirme hem de prod’daki kodda değişiklikleri yönetmek ve kaydetmek için değişiklik tespit ve önlem sistemleri kullanın.

Database Security:

  • Uygulamada bağlantı dizeleri hardcoded olarak kodlanmamalıdır. Bağlantı dizeleri güvenilir bir sistemde ayrı bir yapılandırma dosyasında saklanmalı ve şifrelenmelidir.
  • Bağlantıyı mümkün olan en kısa sürede sonlandırmaya ayarlayın.
  • Tüm varsayılan veritabanı yönetim parolalarını kaldırın veya değiştirin. Çok faktörlü kimlik doğrulaması uygulamak için güçlü parola setleri kullanın. Standartlar oluşturun.
  • Güçlü işlenmiş parametreli sorgular kullanın
  • Gerekli olmayan default hesapları devre dışı bırakın
  • Uygulamanın veritabanına her güven tanım ayrımı için farklı kimlik tipleri ile bağlanmasını isteyin (ör. Kullanıcı, salt okunur kullanıcı, misafir, yöneticiler)
  • Input Validation ve Output Encoding kullanın ve metakarakterlere adreslediğinizden emin olun. Bu adımlarda anomali olursa, back-end’de sorgu komutu çalıştırmayın
  • Değişkenlerin güçlü işlendiğinden emin olun
  • Uygulama, veritabanına erişir veya sorgu yaratırsa mümkün olan en düşük yetki ayrıcalık düzeyi ile işlemleri sağlamalıdır.
  • Veritabanı erişimi için Secure Cred.’ler kullanın
  • Gereksiz tüm veritabanı işlevlerini kapatın.

File Management:

  • Unutmayın! Mutlak dosya yolunu asla Client’a göndermeyin!
  • Uygulama dosyalarının ve kaynaklarının salt okunur olduğundan emin olun
  • Kullanıcı tarafından yüklenen dosyaları virüslere ve zararlı yazılımlara karşı tarayın
  • Mümkün oldukça bir dosyanın yüklenmesine izin vermeden önce kimlik doğrulaması isteyin
  • Yüklenebilecek dosya türlerini yalnızca ihtiyacınız ve ilgili konuyla odaklı dosya türleriyle sınırlandırın
  • Kullanıcı tarafından sağlanan verileri doğrudan dinamik işlev kazandıracak bir işlemden geçirmeyin
  • Dizin veya dosya path’lerini açıklamayın. Önceden tanımlanmış path’lere eşlenen dizin yollarını kullanın.
  • Yüklenen dosyaları doğrulayın, dosya başlıklarını kontrol ederek beklenen dosya olup olmadığına bakın. Yalnızca uzantıya göre dosya türünü kontrol etmek yeterli değildir.
  • Dosyaları uygulama ile aynı web bağlamında kaydetmeyin. Dosyalar ya içerik sunucusuna ya da farklı bir veritabanına gitmelidir.
  • Web sunucusu tarafından yorumlanabilecek herhangi bir dosyanın yüklenmesini mutlaka kısıtlayın.
  • Dosya yükleme dizinlerinde exculude ayrıcalıklarını kapatın.

Memory Management:

  • Strncpy () gibi kopyalanacak bir dizi baytı kabul eden işlevler kullanırken, hedef buffer boyutu surce buffer boyutuna eşitse, dizeyi NULL sonlandıramayabileceğini unutmayın.
  • Güvenilir olmayan veriler için Input ve Output kontrolünü kullanın
  • Buffer’ın belirtildiği kadar büyük olup olmadığını iki kez kontrol edin
  • Tüm Input dizelerini kopyalama ve birleştirme işlevlerine geçirmeden önce işlenebilir olabilecek bir uzunlukta olacak şekilde kısaltın
  • Mümkünse yürütülebilir olmayan stack’ler kullanın
  • Bilinen güvenlik açığı işlevlerini kullanmaktan kaçının (örneğin, printf, strcat, strcpyetc.)
  • İşlevi bir döngüde çağırıyorsa buffer sınırlarını kontrol edin ve ayrılan alanı geçme tehlikesi olmadığından emin olun

Kaynakça;

Kaynak Resim;

  • insights.securecodewarrior.com

--

--

Alican Kiraz
Alican Kiraz

Written by Alican Kiraz

Head of Cyber Defense Center @Trendyol | CSIE | CSAE | CCISO | CASP+ | OSCP | eCIR | CPENT | eWPTXv2 | eCDFP | eCTHPv2 | OSWP | CEH Master | Pentest+ | CySA+

No responses yet