Yazmayı düşündüğüm güvenlik uygulaması için programlama dili önerisi

Başlatan S3CT0R, 22 Eylül 2012 - 00:13:02

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

S3CT0R

Aklımda bir proje var ve bu projeye en uygun dili seçmek istiyorum.Yapacağım yazılım hakkında biraz bilgi aktarayım size o zaman en uygunu hangisi olucaktır öneride bulunabilirsiniz.Öncelikle yazılım güvenlik alanına yönelik geliştirilecek,Tam işlevli Penetrasyon test studyosu..
Aklımda bu projeye uygun 4 dil bulunmaktaydı C,C++,Java,C# .Öncelikle C#'ı platform bağımsızlık sorunu nedeniyle elemeyi düşündüm ben,C dilini ise yapısal programlama tekniğinin büyük projelerde zorluk çıkartacağını düşünürekten bunuda eledim.Geriye C++ ve Java programlama dilleri kalıyor,bu diller hakkında neler düşünüyorsunuz ? GUI konusunda C++ ve QT kullanmalıyım diye düşünüyorum ama Java'yıda bir kenara atamıyorum sonuçta köklü bir dil..
Sizce güvenlik yazılımında hangisini kullanmalıyım C++,Java veya diğerleri ? GUI'ye [Arayüze sahip bir yazılım *olacak] Önerilerinizi bekliyorum.Neden bunu seçmelisin,neden şunu seçmen gerekir diye açıklama da yaparsanız sevinirim. :)
Not: Ticari bir proje..

sem

Sistem programlama daha yatkın olduğunu sandığım için C++ önereceğim. Hatta bazı noktalarda C++ API'si bulamayıp C kodlamanız gerekeceğinizi de düşünerek doğrudan C++'ı önerdim...

Örnek Linux üzerinde Java ile sistem programlama ne kadar esneklik sağlıyor araştırma yapmış mıydınız? (bilmediğim için sorduğum bir soru). Ama sistem ile ilgili olarak C/C++ (C++ derleyicileri C de derlediği için birbirinden ayırmadan söyledim) tüm API'lere ulaşabileceğinizi düşünüyorum.

Hatta 6. hissim diyor ki =) sanırım bunu hissetmek için GURU olmaya gerek yok; en azından şöyle diyebilirim (hissettiğimi söylüyorum) Java ile kullanılması mümkün olmayan C API'leri vardır ama Java için aynı şeyi söyleyemeceğim.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

ersinkandemir

Metasploit Ruby kullanıyorsa vardır bir hikmeti, onu da göz önünde bulundurmalı diye düşünüyorum. Arayüz olarak yetersiz gelebilir. GUI'yi de Python, Vala gibi dillerle giydirebilirsiniz belki.
Where there's a shell, there's a way.



S3CT0R

Cevaplarınız için teşekkür ederim.
sem0900; Java [JVM - Java Virtual Machine]'ye bağımlı olduğu için o olmadan çalışmaz bu nedenle sistem programlama Java ile yapılması düşünülemez. [Bence]
Ersin Kandemir; Modüler bir yazılım olacağından dolayı dinamik dilleride kullanabilirim ama kök dil olarak dinamik dil kullanmak bana yanlış geliyor,gerek performans gerek kararlılık açısından.
----------
Öncelikle C++ kullanmayı seçtim ama GUI olarak QT'ye baktığımda QT'nin Nokia'dan Digia'ya geçtiğini gördüm; http://qt.digia.com/ .Galiba bu platform ücretli olmuş yada ben yanlış anladım o yüzden QT'ye yol verip Java'ya yollarımız açılacak gibi ? Siz bu konuda ne düşünüyorsunuz ? Yani uygulama yazmak için Java yeterli olurmu yoksa C++'dan şaşmamalımıyım ? Bunu sormamın sebebi QT'de lisans ücreti ödeniyor galiba artık..

heartsmagic

Alıntı yapılan: S3CT0R - 23 Eylül 2012 - 15:03:26
Bunu sormamın sebebi QT'de lisans ücreti ödeniyor galiba artık..

Hayır, gerekmiyor.
http://forum.ubuntu-tr.net/index.php?topic=35256.msg424463#msg424463

Orada da kısaca izah edildiği gibi kendisini kullanabilir, kaynak kodunu kapatabilir, ticari olarak satabilirsin. Tek şart kütüphaneleri dinamik olarak bağlamış olman ve QT kullandığını belirtmen.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

ersinkandemir

Bence Metasploit'i incelerseniz sistemle ilgili diye düşük seviyeli bir dil kullanmak zorunda olduğunuz fikri değişebilir. Nasıl çözümler üretilmiş bir bakın derim. :)
Where there's a shell, there's a way.



WhiteScars

Aslında problem dil'de değil nasıl bir sistem dizayn edeceğinde

Benim tavsiyem şöyle:

Örneğin programın arayüzünü java ile yapabilirsin hatta php yada istediğin bir dil :)
Her bir penetrasyon testini plugin olarak yapabilirsin ve istediğin dili kullanabilirsin hatta bu modülleri çalışacağı platforma göre derleyebilirsin. Dil ve platform problemin ortadan kalkar.


Nasıl mı şöyle bir şey kabaca yazayım :)

Örneğin program java ile bütün platformlarda çalışacak şekilde geliştirilir. Java ornek tabi istersen php kullan  sana kalmış
her bir test için küçük yazılımlar geliştirilir. Dil veya platform'a bağlı olarak. ve bunlara plugin dersin :)
ve bu pluginleri çalıştıracak küçük programlara ihtiyacın olacak bunada client dersin. Dil veya platform'a bağlı olarak.

Örneğin şöyle bir plugin tasarlarsın
plugin: cpu_fibonacci_test
geliştirebileceğin diller: c olabilir.
bunu hem windows'ta hemde linux'te çalışacak şekilde derlersin
sonra şöyle isim verirsin

linux için: cpu_fibonacci_test
windows için: cpu_fibonacci_test.exe

Peki bu pluginler ve ana yazılım nasıl haberleşecek (Client ve Server arası iletişim):
1. SSH olabilir
2. Kendin TCP socket üzerinden belli porttan çalıştırabilirsin. Hatta SSL desteği falanda ekleyebilirsin. Plugin ve ana makina arasındaki trafiğin şifrelenmesi için.
3. Bir adette client'e ihtiyacın olacak bu pluginleri uzaktaki hostta çalıştırıp cevabını ana makinaya dönebilecek.

Tamam biraz karışık oldu :)

Şöyle düşün:

1 tane server var bunun üzerinde ana program çalışıyor. Buna server diyelim
2. 2 tane remote host'un var. bunların biri linux biri windows.
3. Server'ın linux remote hostu üzerinde fibonacci testi uygulamasını istediğini farzedelim ve linux client'e şöyle bir komut gönderir "run cpu-fibonacci"
4. Mesajı alan client kendi üzerindeki cpu-fibonacci plugin'i çalıştırır ve sonucunu (varsayalımki sonuç: "cpu-fibonacci -score: %89") server'a gönderir. ve server bu data ile grafik çizdirir. isterse database'e kaydeder.
5. Diyelimki aynı seneryo bu sever windows üzerinde çalışacak bu sefer windows üzerinde çalışan client cpu_fibonacci_test.exe plugin'ini çalıştırıp server'a sonucunu gönderecek.

Client üzerinde çalışan pluginlere  local plugin diyebilirsin. Bazı testlerde mesela remote'taki bir makinanın x portuna yüklü trafik göndereceksin. Bu durumda bu işlemi server üzerinde çalışan bir plugin bu testi yapıp direk cevabını database'e kaydeder vs. Server üzerinde çalışanlarada remote plugin diyebilirsin.

Server yazılımı deamon şeklinde çalışabilir. Sende arayüzünü php ile tasarlayabilirsin ve bu deamon'u bir iş yaptıracağın zaman tetikleyebilirsin. Yada bildiğin düz bir uygulama olur. Eğer deamon şeklinde yaparsan başka x makinadan server'a bağlanıp ana programı kullanabilirsin.

Peki bu sistemin getirileri nedir?

1. Ana program herhangi bir makinada çalışabilir.
2. çok özelleştirilebilir bir sistem
3. Ana program, client ve pluginler bir birinden bağımsız olduğu için rahat çok problemleri bulup düzeltebilirsin.
4. En önemlisi çok scalable bir sistem. Yani 2 gün sonra solaris'e de penetration uygulayabilirsin yada macos'a sadece o platform'a göre client ve plugin geliştirmen gerekecek.

peki sıkıntıları nedir?

1. Deli gibi kod yazman gerekecek
2. Tek kişi ile bütün plugin, client, ana program kodlarını geliştirmen zaman alır.

İnsanoğluna bırakabileceğiniz en güzel miras tecrübelerinizdir.