Siber Güvenlik ve Asp.NET Uygulamalarınızın Güvenliğini Sağlama

Tamer TÜRKSOY
Asis Technologies
Published in
10 min readJul 12, 2023

Güvenlik tehdidi oluşturacak olan saldırı için güvenlik açıkları, donanım, işletim sistemi, uygulamadaki açıklar buna zemin sağlayabilirken en az ihtimal verdiğimiz nokta olan şirket içindeki veya dışındaki kişiler dahi olabilir.

Bu nedenle bu her bir açık oluşturabileceklerin önüne kontrol eklenmesi gerekmektedir. Preventative yani saldırı öncesi ,auth yöntemlerinde yetkili kullanıcının benzersiz şifre ve hatalı girişlerde kitlenmesi gibi yöntemler ile bu gibi mehtemel olabilecek atakların önüne geçmek en basit ve temel yoludur.

Detective yani atak sırasında, Anti Virüslerde olduğu gibi, anlık olarak malvare tespiti gibi yapılmalıdır.

Corrective yani sonrasında , bilgilendirme , yani işlem analizi, yedekten geri dönme gibi felaket senaryolarının da olması gerekir.

NIST Cyber Security Framework’e göre hasar etkileri, operasyonel, finansal ve organizasyonel itibar kayıplarnının önüne geçmek için aşağıdaki maddelere göre güvenlik öncelmelerine odaklanmyı öneriyor.

Identify: Nasıl bir saldırı yapılabileceği konusunda bilginiz olsun

Protect: Ataktan korunması gereken yere kontroller ekle

Detect: Burada saldırının başarılı olduğunu varsayıyoruz. Bu nedenle atak altındaki yeri belirlemek için kontroller eklemeliyiz.

Respond: Atağı tespit ettiğinizde nasıl durdurabileceğinizi bilmemiz gerekir.

Recover : Operasyonu nasıl normale dönüştüreceğiniz hakkında planınız olsun.

Olası hasar etki tahminini çıkarmak için saldırı ihtimal derecesi ve olası bir saldırıda oluşabilecek olan zarara göre gizliliğin, bütünlüğün, erişilebilirliğin korunması gerekir. Hassas Veri, Yetkisiz erişimden korunması gereken her tür veri hassas veridir.

Verinin çalınmamasının en kolay yolu, Gerek duyulmuyorsa kaydetmeyin.

Application Secrets

3rd Party API Keys, oAuth Client Secrets,Database credentials, SSL Certificates,Encriptions Keys,Hassas verileri belirle ve sınıflandır. Ortak hasar noktaların farkındalığı. Bu verilere saldırı sonucu yaşanacak kayıplarda muhtemel etkileri aşağıdaki gibi olabilir;

Security Risk Level — Yüksek Risk

Kredi kartı ele geçirilmesi , KVKK ihlali , Finansal işlem hareketleri. Banka hesabı bilgileri , Şirket kazanç verileri , Yüksek risk varsa daha fazla event logları olmalıdır.

Güvenlik için kaliteli log aşağıdakileri içermelidir;

Ne zaman :Date&Time

Nerede :Uygulama Adı , Versiyon, Sunucu, Kod lokasyonu, URL, Protokol, Client, geo location

Kim : Client IP , Kullanıcı bilgisi

Ne :Açıklama,Olay Tipi,Log Seviyesi ,Security,Flag

Sorumlulukların Dağıtılması

Sisteme giriş yapan herhangi bir kullanıcının, sisteme zarar verebilecek şekilde tüm işlemlere sınırsız yetkisinin olmaması gerekmektedir.

Isolated Environment : Farklı roller ile bir ortama erişimi bulunan yetkinin diğer bir ortama erişimi olmaması sağlanabilir. Farklı roller ve farklı anahtarlar sağlanarak, her ortamın erişimler kısıtlanabilir.

Yetkilendirmeler ,Authentication ve Authorization nedir?Basit bir örnek verecek olursak bir otele giriş yaptığınızda size verilen oda no ve oda anahtarı Authentication, oda no aldıktan sonra konakladığınız süre içinde hangi imkanlardan faydalanabileceğinizin(Spa,mini bar vs. ) belirlenmesi ise Authorization’dur.

Attack Detection OAuth ve OpenID Basitçe söylemek gerekirse, kimlik doğrulama için OpenID , yetkilendirme için OAuth kullanılır. OpenID Connect, OAuth 2.0 protokolü üzerine kuruludur.

Regülasyonlar

Finans, sağlık kuruluşları ve devlet kurumları başta olmak üzere birçok kurumun GDPR, eIDAS , FIPS 140, Common Criteria , HIPAA, PCI-DSS ve diğer regülasyonlara uyumlu olma zorunlulukları vardır.

GDPR : General Data Protection Regulation

HIPAA : Health Insurance Portability and Accountability Act

CC : Common Criteria

HSM (Hardware Security Module ) : HSM cihazları akıllı kart, taşınabilir cihaz, kriptografik kart, bağımsız cihaz ya da bulut üzerinden sunulan bir servis olabilir. Kriptografik anahtarlar oluşturmak/depolamak ve kriptografik işlevleri gerçekleştirmek için kullanılan kurcalamaya karşı dayanıklı ve inanılmaz derecede güvenli bir fiziksel cihazdır. Yetkisiz erişimi algılar, alarmı tetikler ve hatta bilgileri korumak için içindeki kriptografik anahtarları kaldırabilir. Ödeme endüstrisi, kriptografik anahtarları, hassas veri üretimini ve doğrulamayı korumak için özel HSM kullanır. HSM’nin ödemede kriptografik işlevler için kullanımı fiilidir ve ayrıca PCI DSS’nin bir parçası olarak PCI konseyi tarafından onaylanmıştır.

PCI/DSS ,Payment Card Industry Data Security Standard. Bir uygulama kredi kartın PAN( Primary Account Number ) , CVV vs bilgisini saklaması gerekiyorsa (ör : apple pay vs.), ancak bu sertifikayı edinmiş bir sunucuda tutabilir. PCI/DSS sürekli devam eden bir projedir ve standartları sürekli sağlandığından emin olunmalıdır. Bu standartlar çok kuralcı ve kapsamlıdır. Visa, Mastercard , American Express’in de içinde bulunduğu 5 kart markasının oluşturduğu Payment Card Industry Security Standard Council tarafından belirlenmektedir.

3D Secure Payment, 3 boyutlu ödeme işlemeleri üzerinde açıklandığı gibi işyeri ve kişi arasındaki transaction arasına bankanın girerek doğrulamayı telefona gönderilen bir mesaj ve doğrulama ekranı ile yaparak sonrasında ödeme onayını alması işlemidir.

3D : Doğrulama ve Ödeme için ayrı akışların olmasıdır.

3D Pay : 3D modelinden farkı ödeme işleminin işyeri tarafından ayrıca yapılmasına gerek olmamasıdır.

3D Pay Hosting : Bu modelde tüm ödeme sayfası tamamen banka tarafından host edilir, yani işyerinde bir kartlı ödeme sayfası uygulaması yoktur.

Protecting Data using Cryptography: Cryptography kelimesi, Yunanca gizli anlamına gelen kryptos sözünden türetilmiştir. Symmetric Key Encryption ve Asymmetric Key Encryption, Simetrik anahtar algoritmaları, şifreleme ve şifre çözme için aynı anahtarı kullanır ve genellikle daha hızlı ve daha verimlidir, ancak anahtarın taraflar arasında güvenli bir şekilde paylaşılmasını gerektirir. Asimetrik anahtar algoritmaları, şifreleme ve şifre çözme için farklı anahtarlar kullanır ve daha yüksek düzeyde güvenlik sunar, ancak genellikle simetrik anahtar algoritmalarından daha yavaş ve daha az verimlidir.

Symmetric Key Encryption

Advanced Encryption Standard (AES) : 128 ,192 ve 256 bit

Data Encryption Standard (DES)

Triple DES: 3 key kullanır.

Blowfish : 64 bit

Twofish : 128 bit

RC4 :kablosuz ağlarda, Bluetooth cihazlarında ve düşük gecikme süresi

Asymmetric Key Encryption

RSA ( Rivest — Shamir- Adleman): RSA genellikle şifreli e-postalar veya mesajlar göndermek gibi iki taraf arasında güvenli iletişim için kullanılır.

Diffie-Hellman Key Exchange: VPN lerde kullanılır.

Elliptic Curve Cryptography (ECC) : SmartCard ve Mobil Cihazlarda Kullanılır.

Digital Signature Algorithm (DSA) :Bir çift anahtar, imzalama için bir özel anahtar ve imzayı doğrulamak için bir genel anahtar üretir. Genellikle çevrimiçi bankacılık ve e — ticaret gibi güvenli elektronik işlemlerde kullanılır.

Hash

Herhangi bir boyuttaki bir girdi verisinden sabit uzunlukta karma bir karakter dizisi oluşturan tek yönlü bir işlemdir. Hash işlevi, girdi verilerini sabit boyutlu bir karakter dizisine dönüştürür ve girdi verilerinde yapılacak herhangi bir küçük değişiklik, tamamen farklı bir karma değerle sonuçlanacaktır.

Hash , genellikle verilerin veya parolaların bütünlüğünü doğrulamak için kullanılır ve orijinal verileri açığa çıkarmadan güvenli bir şekilde saklanabilir. Hash işlemi bir anahtar gerektirmez.

MD5 (Message Digest 5): Bu, 128 bitlik yaygın olarak kullanılan bir algoritmadır. MD5, uzun yıllardır yaygın olarak kullanılmaktadır, ancak keşfedilen güvenlik açıkları nedeniyle artık güvensiz olduğu düşünülmektedir.

SHA -1 (Güvenli Hash Algoritması 1): Bu, 160 bitlik bir hash değeri üreten, yaygın olarak kullanılan başka bir hash algoritmasıdır. MD5 gibi, SHA-1'in de artık güvensiz olduğu düşünülüyor ve yerini daha güvenli hash algoritmaları aldı.

SHA-256 (Güvenli Hash Algoritması 256): Bu, 256 bitlik bir hash değeri üreten daha güvenli bir hash algoritmasıdır. Dijital imzalarda, veri bütünlüğü kontrollerinde ve güçlü güvenlik gerektiren diğer uygulamalarda yaygın olarak kullanılır.

SHA-3 (Güvenli Karma Algoritma 3): Bu, SHA-2'nin yerine geçecek şekilde tasarlanmış daha yeni bir karma algoritmadır. 224, 256, 384 ve 512 bit dahil olmak üzere çeşitli uzunluklarda hash değerleri üretir.

Blake2 : Bu, SHA-3 üzerinde bir iyileştirme olarak tasarlanmış bir hash algoritmasıdır. SHA- 3'ten daha hızlı ve daha güvenlidir ve parola depolama, veri bütünlüğü kontrolleri ve kripto para birimleri gibi uygulamalarda kullanılır.

Key Vault, genellikle yazılım tabanlıdır, ancak bazı durumda ekstra güvenlik için bir donanım güvenlik modülü ile daha fazla güvenlik gerekebilir. Özel bir fiziksel bilgi işlem cihazı olan HSM ile desteklenme seçeneği düşünülebilir.

· AWS Key Management Service

· GCP Cloud Vault

· Azure Key Vault

· Hashicorp Vault

HSM kurulumları maliyetli ve kurulumu dikkat gerektiren bir çalışmadır. O nedenle Cloud yöntemler tercih edilir.

OWASP : Open Web Application Security Project, yazılımın muhtemel güvenlik açıklarından nasıl kaçınacaklarını bilmelerini sağlayan riskleri listeler.

Top 10 Web Application Security Risks

Injection Attacks

Asla input verisine güvenme. SQL Injection Attacks , NoSQL Injection, OS Injection Attack olarak çeşitlendirilebilir. Bu linq sorgularında eğer raw sql yazılacaksa FlomSqlInterpolated kullanılarak ya da model class’ında bir regular expression ile validation eklenebilir. Mongo Injection için ise aşağıdaki gibi kodlanabilir.

XML External Entities (XXE)

Saldırganlar XML verilerine harici entity tanımları dahil ederek, parsing

sırasında amaçları doğrultusunda işlem yaptırabilir. Bu saldırılara karşı koruma dotnet 4.5.2 ve core sonrasında defaut olarak aktiftir.

DTD (Dosya Tanım Dokümanı) içeren XML’i desteklemek gerekiyorsa settings te korumanın yolları vardır.

— XML Bomb Attack

XmlReaderSettings settings = new XmlReaderSettings ();

settings.MaxCharactersFromEntities = 10000;

Cross Site Scripting (XSS)

XSS web uygulamalarına kötü amaçlı komut dosyası ekleme

enjeksiyonudur. XSS = JS Injection Attack • Bir Inputa developerın beklediği girdi yerine bir js yazdığımız var sayalım.Eğer saldırgan bir textboxa js yazıp butona bastığında sonuç alıyorsa browserdan istedigi veriyi alabilir.

Contect — Security Policy (CSP) Kullanıcı girdilerini valide etmeliyiz. HttpOnly kullanarak javascript’te cookie okumayı engelleyebiliriz.

“content_security_policy“: “default-src‘self’ style -src ‘self’ ‘unsafe-inline’;»

Bu, uzantınızda inline stili kullanmaya devam etmenizi sağlayacaktır. refused to apply inline style because it violates the following content security policy directive

Cross Site Request Forgery (CSRF)

Siteler Arası İstek Sahteciliği veya CSRF, hala web uygulamalarına yönelik en büyük 10 tehditten biridir. Kullanıcı saldırılan siteyi ziyaret etmelidir. Kullanıcı saldırganın sitesine yönlenmesi için özendirilir. Saldırgan bu fırsatı değerlendirir ve Identity cookie’yiyakalamaya çalışır. Lax, çerezin bazı siteler arası isteklerde gönderilmesine izin verirken Strict, çerezin siteler arası isteklerde gönderilmesine asla izin vermez. Çözümler:SameSiteOptions:Strict,Lax veya None•Anti forgery token kullanın.

Cross OriginResource Sharing(CORS)

Origin, Porotokol+ Domain+ Port demektir. https:\\www.abc.com:8443bir origin oluyor. Subdomain değişebilir ya da url sonuna ek patheklenebilir (ör : https:\\www.abc.com:8443\products\list\1). Bunun dışındaki originler SOP (SameOriginPolicy)’ye uymadığı için engellenir. Api’deCORS tanımları ekleyerek bu gibi crossorigin erişim tanımlamaları yapılabilir.

HTTPS

HyperTextTransferProtocolSecure, client ve server arasındaki akan veririnin TLS veya SSL kullanılarak aktarılmasıdır. Https’iprojelerimizde kullanmaya daha sonra zorlama yapacak şekilde enableedilmelidir. Bunu yapmadığımızda ilerleyen zamanlarda gerekli olduğunu düşünmemize neden olacaktır.

app.UseHttpsRedirection();
services.AddHttpsRedirection(options=>{options.HttpsPort= 443;});
HTTPS ile sertifika akışı

SSL:SecureSocketLayer, SSL v1, v2 ve v3 var. v3 ten sonra TLS ‘e geçildi. Yani aslında SSL ile TLS aynı şey. TLS: Transport LayerSecurity (Aktarım Katmanı Güvenliği), SSL’ninyalnızca güncellenmiş, daha güvenli bir sürümüdür. Aslında SSL satın alındığında, TLS satın alıyoruz, ancak yaygın olarak SSL denmeye devam ediyoruz. En son TLS 1.3 kullanılıyor. Wildcard SSL: Subdomainbağımsız SSL sertifikasıdır. Yani www.domain.com dışında admin.domain.com gibi subdomainlerede SSL aktif etmek istiyorsanız paraya kıyıp wildcardsslalmanız gerekir. Genelde yıllık ya da iki yıllık olarak satılır. Multi subdomain sslise sub1.sub2.domain.com’a ssl ihtiyacınız varsa alınması gereken SSL türüdür. .csr, sertifika ilk oluşturulmak istendiğinde hosting firmasına sertifika imzalama isteği (CSR, CertificaSignRequest) için bu dosyayı oluşturup, hosting firmasına göndermeniz gerekir. pfx, (PersonalInformation Exchange) ilişkili sertifika için hem genel hem de özel anahtarı içerir, bu nedenle bunu kuruluşunuzun dışında paylaşmamak gerekir. pem ve key, pfx dosyasını export ettiğiniz de pemve key dosyaları çıkar, linux ile sertifika tanıtılırken bu dosyalara ihtiyaç olur. cer dosyası yalnızca genel anahtara sahiptir. Genel anahtarı, sunucu adını, sunucu hakkında bazı ek bilgileri içerir. Bu, iş ortaklarınızla tipik olarak değiş tokuş ettiğiniz şeydir. Örneğin bir banka ile çalışacaksanız sertifika bilgilerinize ve CER dosyasına ihtiyacımız var denilebilir.

HSTS

Http StrictTransport Security: Https olarak redirectetsek bile http ile istek gönderebilmek hala tehlikedir. HSTS header alındıktan sonra alınan ilk istek; Http’ye yönlendiren bir durum olsa bile tarayıcı ağ üzerinden geçmesi durduracak , çünkü headerda sitemize her zamanhttpsile gelinmesi gerektiği bildirilmişti.•HSTS ayarlarında max-ageile tarayıcıya ve client’ane kadar süreyle httpsistediğimizi belirtebiliyoruz.

app.UseHsts();
services.AddHsts(s => {s.IncludeSubDomains= true;s.MaxAge= TimeSpan.FromMinutes(300);});

HTTP Headers

Browser’lerdabazı güvenlik önlemleri vardır ancak güvenliği sağlamazlar, yani default olarak güvensizdirler. HTTP headerleri ekleyerek güvenlik seviyesini arttırabiliriz. ActionFilterAttribute’un OnResultExecuting context.Result eğer viewResult ise contextresponseheder-larıneyeni bir headereklenebilir.

Contect Security Policy

Bir web uygulamasının herhangi bir komut dosyasını etki alanı dışında veya kendi kaynağında çalıştırmasını kısıtlar. Ancak artık pek çok kaynağı dış kaynak olarak projemize eklemek durumunda kalıyoruz.•Sayfa içinde sınırlamak istediğimiz içeriği belirtebiliriz. CSP ne zaman kullanılır? Bankacılık uygulaması, idari uygulama gibi hassas bilgileri yöneten uygulama. Uygulamayı dış tehditlerden korumak için Content-Security-Policybaşlığını eklemeliyiz.Bunlar aşağıdaki gibi olabilir;•Script-srcstyle-srcimg-srcmedia-srcframe-srcfont-src

app.UseSecurityHeaders();
app.UseCsp(options=> options.DefaultSources(s => s.Self()).FrameAncestors(f => f.None()).StyleSources(s => s.Self().CustomSources("https://stackpath.bootstrapcdn.com")).ReportUris(r => r.Uris("/report")));

Feature Policy

camera‘none’ ,microfone ,midi,fullscreen usb autoplay sync-xhr payment(paymentrequest)Amaç uygulamanın saldırı yüzeyini azaltmaktır. Ancak bu gibi özellikler henüz tüm browserlar tarafından desteklenmiyor olabilir, Yine de caniuse.com ‘dan kontrol etmek gerekebilir.

Referrer Policy Header Options

Google Analytics gibi ortamlar referrer hader okuyarak sitenizi kimin çağırdığını size sunabilir. Ancak bu haderiçinde bulunan referrerurl içinde secretolması gereken veri var mıdır. Varsa bunu gizlemek gerekir.•no-referrer same-origin unsafe-url. Güvenli olmayan bağlantılar hesaba katmak için strict-origin no-referrer-when-downgrade strict-origin-when-corss-origin. Eğer gönderen sitede bunu yapmak istiyorsanız html tag’iiçinde rel=‘noreferrer’ olarak belirtmeniz gerekir.

X-Content-Type-Options& MIME Sniffing

Web uygulamamızda jpeg yüklemeye izin veren bir sayfamız olabilir. Saldırgan bunu kullanarak html dosyasını bir jpeg gibi görünecek şekilde gizler. MIME sniffing destekleyen browserlar bunun aslında bir html dosyası olduğunu anlar ve hatta bu dosyadaki headerlere anlaşılmasını kolaylaştırmak için içerik eklenebilir. MIME scriptingi durdurmak için aşağıdaki http headerı kullanabiliriz;

X-Content-Type-Options: nosniff

app.UseXContentTypeOptions();

ASP.NET Version Header

Server tarafında Kestrel yazdığı için dotnet uygulaması olduğu anlaşıldığından, saldırganlara hangi headerlerı kullanacağına dair fikir vermiş oluruz. Bunu kapatmak için aşağıdaki kod dotnet5 ve öncesinde program.cs te usestartup altına 6 sonrasında aşağıdaki gibi eklenebilir.

builder.WebHost.ConfigureKestrel(serverOptions=>{serverOptions.AddServerHeader= false;});

Yukarıdaki kod ile server bilgilerini IIS arkasına saklasak ta X-Powerd-By headerinde hala ASP.NET görünüyor. Bunun için projeye IIS i yönetmek için bir web.config dosyası eklenebilir.

config dosyası

--

--