Skip to content

Social Network Badges

Posts Tagged ‘güvenlik ’

Eskiden virüslerin de bir ahlakı vardı. Kendilerini dosyaların sonuna ekler ya da boot sektöre yazarlardı. İyi bir düşük seviye programlama bilgisi gerektirirlerdi. CrazyBoot gibi bölümleme tablosunu siler, Çernobil gibi anakart üzerindeki çipi bile temizlerlerdi.

Windows çıktığından beri virüsler basitleşti, sistemin açıklarından faydalanarak bulaşır hale geldi. I Love You virüsü gibi VBScript’le yazılmış, basit ama yıkıcı; birçok W32… virüsü gibi yaptığı tek şey kendisini kopyalamak ve mail ile göndermek olan bir sürü virüs türedi.

Son dönemde ise bayrağı Autorun virüsleri devraldı. Bu virüsler, aslında Microsoft’un bir güzellik olarak icat ettiği; CD’yi ya da USB bellekleri bilgisayara takınca otomatik olarak içindeki kurulum programlarını çalıştırmasını sağlayan Autorun.inf dosyasını kullanarak kendilerini bilgisayara bulaştırır oldular.

Bu yöntemi kullanan virüsler öyle arttı ki, neredeyse bilgisayarımıza taktığımız her USB bellekte virüs var. Hatta geçenlerde bu virüslerden birinin NASA’nın bilgisayarında uzay istasyonuna gittiğini anlatan bir haber vardı. Geçtiğimiz sene bu sıralarda USB belleklerden bulaşan virüs oranı %2.5 iken Nisan ayında %11’e ulaşmıştı. Eylül ayında ise Trend Micro, yeni bulunan virüslerin %53.7’sinin bu tür virüsler olduğunu açıkladı.

Yani artık kaçış yok. Önümüzdeki dönemde bu tür virüslerle bol miktarda karşılaşacağız. Peki ne yapmak lazım? Hayır bu virüsleri nasıl temizleyeceğimizi anlatmayacağım. Önemli olan virüslerin bilgisayarımıza hiç bulaşmaması…

  • Öncelikle, güvenlik bir çalışma tarzıdır. Alışkanlıklarınızı değiştirin.
    Mesela dosyaları açmak için Bilgisayarım simgesine çift tıklıyor, sonra da oradan USB sürücüsünün ismine çift tıklıyorsanız; Autorun virüsü harekete geçer. Vazgeçin bu alışkanlığınızdan. XP kullanıyorsanız, Bilgisayarım penceresine girince üstten Klasörler yazan yere tıklayın ve solda açılan ağaçtan USB sürücüsünün ismine tıklayın. Vista kullanıyorsanız bu ağaç zaten gelecektir.
  • Bilgisayarınızda ücretli ya da ücretsiz bir antivirüs muhakkak kurulu ve güncel olsun. Yalnız, önemli olan antivirüs olması değil, güncel olmasıdır. Her ay ortalama 60 yeni virüs çıkıyor. Eski tarihli bir program sizi korumaz. Antivirüs programınızı Internet’ten ya da başka yollarla sürekli güncelleyin.
  • Windows’un gizli dosyaları ve sistem dosyalarını görüntülemesini sağlayın. Normalde bu dosyalar güvenlik sebebiyle görüntülenmez. Ama neredeyse tüm virüsler kendilerini saklamak için gizli ya da sistem dosyası özelliğini kullanıyor. Klasör seçenekleri penceresini açın. (XP’de Bilgisayarım-Araçlar menüsünden, Vista’da Denetim Masası-Klasik Görünüm seçerek) Görünüm sekmesine gelin. Gizli dosya ve klasörleri göster seçeneğini işaretleyin. Korunan işletim sistemi dosyalarını gizle seçeneğinin işaretini kaldırın.

    Aynı pencerede Bilinen dosya türleri için uzantıları gizle seçeneğinin işaretini kaldırırsanız, resim.jpg.exe tarzı virüslere karşı da bir koruma sağlamış olursunuz.

  • Bilgisayarınızdaki disk sürücülerinin otomatik çalışma özelliğini kapatın. Böylece virüslerin kendiliğinden çalışmasını engellemiş olacaksınız. Nasıl yapacağınızı bu makale anlatıyor.
  • Bir USB bellek taktığınızda içindeki dosyalara (ilk anlattığımız yöntemle) bakıp autorun.inf dosyasını ve eğer biliyorsanız virüs dosyalarını silin.

Eğer bu yöntemleri uyguluyorsanız, çok büyük bir ihtimalle bilgisayarınıza autorun virüsleri bulaşmayacaktır. Ama bir kez bile ihmal ettiğinizde başa döneceğinizi unutmayın.

Not: Başlıktaki ifadenin aslı Fuzuli’nin “Beni candan usandırdı, cefâdân yâr usanmaz mı?” adlı mısrasıdır. Eğer yazıdaki teknik ağırlıktan sıkıldıysanız, şu yazıyı okuyun keyfiniz yerine gelsin. 😉

Java ile yazdığınız uygulamanın kaynak kodlarında bir satır bile değiştirmeden kullanıcı adı ve şifre kontrolünü, akıllı kart kullanımını ya da parmak izi kullanımını nasıl eklersiniz?

JAAS (Java Authentication and Authorization Service) paketleri Java’nın içindeki güvenlik sistemini biraz daha geliştiriyor ve farklı kaynaklar kullanılarak güvenlik sistemleri oluşturmayı mümkün hale getiriyor.

Java SDK içindeki java.security.* paketleri bir uygulamanın güvenliğinin sağlanması için temel metotları içeriyor. Bunlar arasında byte-code doğrulayıcısı (byte-code verifier), sınıf yükleyicisi (class loader), güvenlik yöneticisi (security manager), erişim denetleyicisi (access controller), politikalar (policy) ve koruyucu alanlar (protecting domain) sayılabilir.

Bunlara ek olarak genişletme kütüphaneleri (extension API) sayesinde uygulamaların güvenliği istenilen seviyelerde arttırılabiliyor. JAAS bunlardan birisi…

JAAS temel olarak uygulamaya kimlik bilgisi döndürecek bir LoginContext ve bu kimlik bilgisinin çeşitli yollarla elde edilmesini sağlayan bir LoginModule‘den oluşuyor.

LoginModule sınıfından genişletilerek oluşturulan modüller kimlik bilgisi için bir veritabanına bağlanan, Kerberos ya da LDAP dizininden kullanıcı bilgisi alan, akıllı kart okuyucudan veya parmak izi okuyucudan bilgi aktaran bir yapıda tasarlanabilir. Uygulamadan bağımsız olarak modüller tasarlamak bize eklenip çıkarılabilir bir kimlik denetimi yapısı sağlar.

jaas.jpg

Uygulamamızda JAAS kullanmak için şöyle bir yol izliyoruz:

Öncelikle bir konfigürasyon dosyası oluşturuyoruz. Daha sonra uygulamayı çalıştırırken parametre olarak bu dosyayı vereceğiz.

jaas.config

Ornek 
{
   DBLoginModule required 
        debug="true" 
        url="jdbc:mysql://localhost/jaasdb?user=root&password=pass" 
        driver="org.gjt.mm.mysql.Driver";
};

Uygulamayı çalıştırırken kullanımı:

 java -Djava.security.auth.login.config=jaas.config JaasTest 

Burada kullanacağımız modül, bir MySql veritabanına bağlanarak kullanıcı adı kontrolü yapıyor.

JaasTest uygulamamıza bu modüllere erişip kullanacak LoginContext’i tanımlıyoruz.

JaasTest.java

...
/* JAAS sınıfları */
import java.security.*;
import javax.security.auth.*;
import javax.security.auth.login.*;

...

        try {
            // LoginModule ile haberleşecek olan sınıf
            ConsoleCallbackHandler cbh = new ConsoleCallbackHandler();
	 
            LoginContext lc = new LoginContext("Ornek", cbh);

            try {
            	// LoginModule içinde login metodunu kendimize uygun şekilde
            	// tanımlayacağız.
                lc.login();

		// Subject : kimlik denetimi bilgilerini içeren nese 
                subject = lc.getSubject();

		// Principal : Yetkili olan kişiler vb.
                Iterator it = subject.getPrincipals().iterator();

		// Credential : Yetkiler, haklar vb.
                it = subject.getPublicCredentials(Properties.class).iterator();

		...
		// Programın çalışma rutinleri
		
		// Program çıkışında 
                lc.logout();
            } catch (LoginException lex) 
	    {
              ....
            }

        } catch (Exception ex) 
	{
            ...
        }

        System.exit(0);
    }

Temel anlamda kullanılan sınıf ve metotlar böyle…
Şimdi MySQL veritabanına bağlanıp kontrol yapan login modülümüze bakalım.

DBLoginModule.java

...

import java.security.*;
import javax.security.auth.spi.LoginModule;
import javax.security.auth.login.LoginException;
import javax.security.auth.Subject;
import javax.security.auth.callback.*;

...

public class DBLoginModule implements LoginModule 
{

    // initial state
    CallbackHandler callbackHandler;
    Subject  subject;

...

    public void initialize(Subject subject, CallbackHandler callbackHandler,
            Map sharedState, Map options) 
    {
      // ön işlemler
    }
    
    public boolean login() throws LoginException 
    {
	// veritabanına bağlanıp yapılacak kontroller
	// Buraya akıllı kart, parmak izi okuyucu vb. 
	// kontrolleri eklenebilir
    }

    public boolean commit() throws LoginException 
    {
       // Otomatikmen çalışır
       // login işlemi doğru yapıldı ise true, değilse false döndürür
    }

    public boolean abort() throws javax.security.auth.login.LoginException 
    {
      // işlem başarısız  olduğunda burası çalışır
    }

    public boolean logout() throws javax.security.auth.login.LoginException 
    {
      // uygulamadan çıkışta yetkileri temizler 
    }
}

Bu örnekte veritabanına bağlandık. Sadece LoginModule ve jaas.config dosyalarında değişiklik yapılarak istenen kontrol yöntemi uygulanabilir. Böylelikle uygulamamızın kaynak koduna müdahale etmeden güvenlik kontrolü ekleyebiliriz.

JAAS konusunda bilgilenmek isteyenler için maalesef Türkçe doküman yok. Ancak İngilizce olarak şu bilgilendirici sunum, şu yazı, Sun sitesindeki orijinal kılavuz faydalı olabilir. Ayrıca veritabanına bağlanan, akıllı kart okuyucudan bilgi alan, parmak izi okuyucuya bağlanan örnekler incelenebilir.

11 Aralık 2007

Programlama