C# Sql İnjection

kirisci

Katılımcı Üye
30 Eyl 2017
384
0
İnternet olmayan bir pc de kullanılabilecek bir program yazdım. Bu program da bir database mevcut bunun için databaseyi şifrelemek gerekir mi?

Kullanıcının görmesi durumu neyi etkiler? İnjection yapılmasına izin verir mi ? C# ile bunun arasındaki bağı bilmiyorum çünkü.


(Programın amacı normal kullanıcı için dosya işlemleri word işlemleri ile alakalı database de de ne yaptığı ettiği kaydediliyor. İçindeki bazı veriler kaydediliyor. )
 

zztri

Yaşayan Forum Efsanesi
9 Tem 2015
10,053
4
390
Ankara
Injection kurallarına uyman gerekli.. C# demişsin, demek ki System.Data.xxxx.xxxCommand ile komutları oluşturuyorsun. Kullanıcı tarafından girilen herhangi bir şeyi komut stringinin içine direkt olarak asla atma, parametreler kullan.

Bu arada tabii ki veritabanının kullanıcı adı ve şifresi olmalıdır ama veritabanı türünü söylersen müşterinin bunu bypass etmek için neler yapabileceğini de anlatırım.

En nihayetinde bu C#, azmeden bir kullanıcı senin programını disassemble eder, şifreyi alır. Yapabileceklerin ancak bu işi zorlaştırmaktır; imkansızlaştıramazsın.
 

kirisci

Katılımcı Üye
30 Eyl 2017
384
0
Injection kurallarına uyman gerekli.. C# demişsin, demek ki System.Data.xxxx.xxxCommand ile komutları oluşturuyorsun. Kullanıcı tarafından girilen herhangi bir şeyi komut stringinin içine direkt olarak asla atma, parametreler kullan.

Bu arada tabii ki veritabanının kullanıcı adı ve şifresi olmalıdır ama veritabanı türünü söylersen müşterinin bunu bypass etmek için neler yapabileceğini de anlatırım.

En nihayetinde bu C#, azmeden bir kullanıcı senin programını disassemble eder, şifreyi alır. Yapabileceklerin ancak bu işi zorlaştırmaktır; imkansızlaştıramazsın.




Sqlite kullanıyorum.


cmd.Parameters.AddWithValue("@tc", txttcno);
şeklinde parametre dediğiniz muhtemelen. Komplesi bu şekilde.




Bu arada tabii ki veritabanının kullanıcı adı ve şifresi olmalıdır ama veritabanı türünü söylersen müşterinin bunu bypass etmek için neler yapabileceğini de anlatırım.


Bu kısımla alakalı bunu kullanıcıya belirletmek ya da bunu elde tutmak yazılım açısından bize ne fayda veya zarar sağlar. Yazılım piyasasında bu işler nasıl ilerliyor. Şimdi aklıma şu geliyor bi hata olur diyelim bunu ücrete tabi kılıp şifre zaten bilindiği için ek ücret mi alınıyor nasıl oluyor piyasa bilmiyorum.


En nihayetinde bu C#, azmeden bir kullanıcı senin programını disassemble eder, şifreyi alır. Yapabileceklerin ancak bu işi zorlaştırmaktır; imkansızlaştıramazsın.
stackta baktığım yazılar da da durum aynı idi c# için kişiyi bıktırmak hatta sizin bi paaylaşım vardı sabah ki bir konuya yazılan bunu yapacak kişiyi bıktırmak amaç imiş.
 

kirisci

Katılımcı Üye
30 Eyl 2017
384
0
https://social.msdn.microsoft.com/F...exe-yi-koruma-yntemleri-yardm-?forum=csharptr
Burada bulunan şunun mantığı nedir mesela?


Merhaba.
Güvenlik çözümünü halen obfuscation da arıyorsunuz. "Security through obscurity" sizin durumunuzda geçersiz bir yaklaşım. Şu an kullandığınız obfuscaterin yaptığı işlem tersine çevrilebildiği gibi deneyecek olduğunuz yazılım da çözülebiliyor. Obfuscate ettikten sonra da connection stringinize kolayca ulaşılabiliyor.
Obfuscation harici connection stringinizi gizleyebileceğiniz farklı yollar da var. "App.Config içinde tutup enrypt etmek ve kullanım anında decrypt gerçekleştirmek" gibi bazı yollar var ancak azıcık meraklı ve ilgili birisi hiç bir şey yapmasa sadece bellekten yine çözülmüş haldeki connection stringinizi alabilir.
O yüzden sizin yazılımınız gibi dağıtılanlarda yapılması gereken tek kesin yol connection stringi vermemek. Yani cliente doğrudan veritabanı bağlantısı kurdurmamak. Uzaktaki bir makineye yazacağınız web servis ya da sunucu uygulama üzerinden şu an gerçekleştirdiğiniz işlemleri yapmanız tek güvenli çözüm görünüyor.


Bu kod gizlenmiş ise kodun tamamına ulaşmak mümkün değil ama bunun önemi yok galiba şimdi anladım.


Kodun connection bağlantısına ulaşıp kendisi zaten yazabilir daha farklı amaçlar için.
 

zztri

Yaşayan Forum Efsanesi
9 Tem 2015
10,053
4
390
Ankara
Üstad veritabanında kullanıcının kesinlikle görmemesi gereken bir şey yoksa, açık açık yap bağlantını ve de şifreyi de bilsin. ETA, Netsis gibi yazılımlar öyle yapardı. Böylece yedekleme gibi işleri de müşteriye yıkarlardı. Eğer şifreyi vermezsen, bir de yedekleme protokolü vermen gerekir.

Eğer lisans bilgilerini saklamak istiyorsan, elinden geldiğince obfuscate et, 3 ayrı şifreleme kullan, programın 3 ayrı yerinde kontrol et. Cracker'ın canını yeterince sıkarsın, büyük ihtimalle pes eder.

Amaç, aynen senin de dediğin gibi, "ben bunu kırana kadar baştan yazarım yahu!" dedirtmek. Yoksa işin içinde çok para olunca ben anti-debugger'lı, control flow obfuscation yapılmış C++ applikasyonunu bile kırdım. Ve ben acemiyim bu konuda.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.