Академический Документы
Профессиональный Документы
Культура Документы
VALPARASO DE GOIS / GO
2015
1
Valparaso / GO
2015
VALPARASO DE GOIS / GO
2015
SUMRIO
Brainstorming.
Decomposio da poltica.
Classificao de dados.
Matriz de objeto-sujeito.
Independente da tcnica a ser usada, a elicitao de requisitos exige que pelo menos um dos
participantes na atividade tenha densidade em segurana de software, para que os fluxos
regulares que o software prover ou j provm sejam criticados, evidenciando maneiras de
subvert-los. A definio dos cenrios negativos, cuja realizao indesejada, resultar no
Transport Layer Security (TLS) como Secure Socket Layer (SSL) deve ser colocado em
prtica para proteger contra ameaas internas de Man in the Middle (MITM) para todas
as informaes de carto de crdito que seja transmitida.
1.2 Integridade
1.3 Disponibilidade
O software deve oferecer alta disponibilidade de oito (8) noves (9), como definido pelo
SLA.
O software deve estar preparado para atender capacidade mxima de 300 usurios
simultneos.
6
O software e seus dados devem ser replicados por todos os centros de dados para prover
balanceamento de carga e redundncia.
1.4 Autenticao
O software dever suportar single sign on a terceiros e fornecedores que esto definidos
na lista de interessados.
1.5 Autorizao
O acesso a arquivos secretos de alta sensibilidade deve ser restrito somente a usurios
com nveis de permisso secreto e supersecreto.
Os usurios no devem ser demandados a enviar suas credenciais sempre, uma vez que
ele tenha se autenticado com sucesso.
Os logs de auditoria devem ser mantidos de forma segura por um perodo de 3 anos.
Gerenciamento de Sesso
O software no deve solicitar as credenciais de acesso do usurio, uma vez que ele esteja
autenticado no Internet Banking.
As sesses devem ser explicitamente suspensas quando o usurio solicita o log off ou
fecha a janela do browser.
O logging uma dimenso muito importante de uma aplicao, mas que amplamente
negligenciada durante o seu processo de design, assim como a segurana de software. No a
toa que uma das prticas iniciais recomendadas pelo BSIMMv2 (AA1.1) d enfoque aos
mecanismos de segurana, contedo no qual o logging se enquadra.
Talvez seja o fato dos principais interessados: auditor, desenvolvedor e administrador
do sistema, no estarem to interessados assim, desde o princpio (abordagem build security
outside in). O administrador do sistema normalmente no estimulado a pensar nos sinais que
a aplicao deva lhe fornecer para atuar diante de questes de produo. O auditor s chega em
cena, depois que o circo comea a pegar fogo, ou por imposio regulatria. J o desenvolvedor,
se vale das ferramentas de debug para resolver os problemas de cdigo, desdenhando do log.
Mas considere que voc esteja numa situao privilegiada, na qual pode pensar em logging
antes que necessite de fato do log. Que caminho seguir? De forma bem objetiva e resumida
recomendaria as seguintes etapas para o sucesso da sua iniciativa de logging.
Qual a origem dos registros do log? Definio que lhe orientar quanto a dinmica
para consolidar os registros, alm de dar um tratamento homogneo independente da
origem.
o
Como o log ser armazenado? Sua infraestrutura ter que estar preparada para receber
os registros, garantir a sua segurana, oferecer acesso concorrente, etc.
o
Segmentao do arquivo.
Mudanas:
o
Problemas de disponibilidade:
o
10
Limites estourados.
Indicao de ameaas:
o
praticamente impossvel levantar todos os eventos de uma aplicao, mas quanto mais
ampla for a lista, mais condies se tem de conduzir a forma de elaborao do registro.
Definidos os eventos, voc pode estabelecer uma conveno de dados do registro relacionado
a cada evento. Essa uma forma de reduzir o poder discricionrio do desenvolvedor em definir
o contedo do log, fonte patente de problemas. Definidos os eventos, recomendvel usar uma
forma de categorizao dos registros do log. Tal categorizao lhe permite priorizar sua ateno
diante dos eventos produzidos pela aplicao. A maneira amplamente difundida pela sua
prioridade ou criticidade, que na maioria dos casos varia de trace, nvel menos crtico, at fatal,
nvel mais crtico. A justificativa para cada categoria segue abaixo:
FATAL apropriado para eventos que indiquem uma falha crtica de servio. Se um
servio emitir um erro FATAL, ele est completamente incapaz de responder. Ex.
Indisponibilidade total de um dos componentes-chave da aplicao.
AVISO apropriado para eventos que indiquem um erro no crtico em determinado servio.
Erros resumidos ou brechas menores em requisies recaem sobre essa categoria. A distino
entre AVISO e ERRO muito tnue. Um critrio simples se a falha resulta em chamada de
suporte pelo usurio. Caso a resposta seja positiva, escolha ERRO, caso contrrio use AVISO.
Os AVISOs podem ser tolerados pela aplicao, mas devem sempre ser justificados e
examinados. Ex. Aplicao operando em modo debug. O console da aplicao no impe
controle de acesso.
11
DEBUG apropriado para mensagens que incorporam informaes extras aos eventos
de ciclo de vida. Informao de desenvolvimento ou mais aprofundada necessria para
o suporte a base para esta prioridade. Pode-se considerar a pilha de execuo e
mensagens trocadas com sistemas externos a aplicao.
Gerenciamento de concorrncia.
Tais funcionalidades esto presentes em vrias bibliotecas como, por exemplo:
Enterprise Library, SLF4J e ESAPI. A ESAPI merece um destaque especial por este post,
12
pois foi concebida com pretenses muito ousadas no que se refere a segurana. Decorre da
a possibilidade de instrumentar de forma bastante simples a aplicao, para que ela se adapte
automaticamente diante de cenrios de ataque, a partir do uso do AppSensor. Uma vez que
se defina o que e como logar, para que se obtenha sucesso nessa iniciativa, o desenvolvedor
deve ser bombardeado de treinamento, orientao e acompanhamento para garantir o uso
adequado do mecanismo e, principalmente, que o contedo dos registros seja completo e
compreensvel para o fim a que ele se destina.
Apresentamos algumas etapas fundamentais no processo de estruturao do logging de
aplicaes. Cada fase mereceria diversos posts para contemplar assuntos to extensos, mas
por limitaes de tempo tivemos que nos limitar a elas.
Todos os erros e excees devem ser explicitamente manipulados a partir de blocos try,
catch e finally.
Parmetros de Configurao
13
vantagem de usar um buffer maior seria justamente ter mais espao para arquivos. A questo
que o sistema operacional tambm mantm um cache de leitura e gravao utilizando a memria
RAM que, por ser maior que o buffer do HD, acaba sendo mais eficiente e tambm mais rpido,
j que o buffer do HD tem sua velocidade de transferncia limitada velocidade da interface
IDE ou SATA, enquanto o cache feito pelo sistema operacional est limitado apenas
velocidade de acesso da prpria memria RAM.
realiza as chamadas de funes, registradores e dentre outras coisas. Ser utilizado um sistema
operacional software livre Ubuntu. Entretanto, todos os conceitos aqui tratados so similares
maioria dos sistemas operacionais existentes.
2.5.1 Processos
Um processo um programa em execuo, isto significa que o sistema operacional
carregou o executvel do programa em memria, providenciou para que ele tivesse acesso aos
argumentos por linha de comando, e o iniciou. Um processo dividido em memria em cinco
reas distintas (ROBINS, 2004). So elas:
1. Cdigo (text): essa a rea onde as instrues executveis residem. Essa rea
organizada de tal maneira que diversos processos do mesmo programa podem dividir a
mesma rea de cdigo, apenas uma cpia ficar na memria. Ela tipicamente marcada
como apenas para leitura, e qualquer tentativa de escrever sobre ela gera um erro de
segmentao;
2. Dados inicializados (Data): Variveis globais e estticas inicializadas com valores
diferentes de zero situam-se no segmento de dados, que uma rea nica para cada
processo em execuo.
3. Dados inicializados com zeros (BSS): Variveis globais e estticas inicializadas com
zero por padro so alocadas na rea conhecido por BSS, que tambm nico para cada
instancia de um programa em execuo. BSS, que tambm nico para cada instancia
de um programa em execuo. BSS mantido no segmento de dados quando um
programa inicia sua execuo. Linux/Unix organizado de tal maneira que apenas as
variveis que so inicializadas para valores diferentes de zero ocupem espao em
memria. Por exemplo, um array declarado static char buff [1024], que
automaticamente inicializado com zeros, no ocupam necessariamente 1K de memria;
4. Heap: a rea usada para alocao dinmica de memria (atravs do uso de funes
como malloc() e similares). O espao de endereamento reservada para o processo
cresce na medida em que mais memria alocada no Heap. dito que a memria
alocada nessa rea cresce para cima, pois cada item adicionado no Heap ser acrescido
em um endereo de memria superior aos que foram adicionados anteriormente.
5. Pilha (Stack): a rea onde se encontram as variveis locais do programa (aquelas
definidas dentro do escopo de uma funo). Aqui tambm se encontram parmetros de
16
Heap
BSS
Data
Text
17
18
2.5.2 Pilha
push ebp
pop ebp
A pilha organizada em blocos lgicos chamados de frames. Cada frame da pilha possui
dados como variveis locais e parmetros da funo, endereo de retorno para o frame anterior
e o valor do ponteiro de instruo (EIP, ou Extended Instruction Pointer) no momento da
chamada da funo. Um frame colocado na pilha na chamada de uma funo, e retirado no
seu retorno (ALEPHONE, 1996). A figura abaixo demonstra os elementos presentes em um
frame:
19
Variveis locais
20
Aps uma execuo da funo foo() e verificando os seus valores usando as ferramentas gdb e
Eclipse, podemos observar na pilha os seguintes valores:
21
Colocar parmetros na pilha: necessrio que a funo chamada tenha acesso aos
parmetros que lhe foram repassados. Para isso, a funo chamadora coloca os
parmetros da funo na pilha.
Chamar a funo: a instruo assembly call a responsvel por colocar o valor EIP
(endereo de retorno) na pilha e por desviar o fluxo de execuo para onde se
encontra a funo chamada. Esse passo realizado executando-se o seguinte
comando assembly:
22
receber o valor contido no Stack pointer, que aponta para o endereo de memria onde
se encontra o valor do EBP salvo no passo anterior. A instruo realizada :
mov %esp, %ebp
Alocar espao para variveis locais: conforme visto anteriormente, as variveis locais
de uma funo ficam armazenadas na pilha e logo aps o frame pointer. Para garantir
espao em memria para elas, necessrio aumentar o tamanho da pilha, e isso
realizado com a instruo assembly sub como no exemplo:
Sub $0x38, % esp
Aps executar o prlogo, o frame da pilha est pronto para execuo e a funo pode
seguir o seu processamento. Antes de retornar o controle ao procedimento chamador, a funo
deve seguir uma srie de instrues para liberar a memria da pilha e restaurar o frame anterior
(TENOUK, 2008). Esse processo chamado de eplogo, e suas etapas so detalhadas a seguir:
Destruir o frame da pilha: os Stack pointer recebe o valor do frame pointer, liberando
as variveis locais da funo. Devemos observar que os valores da rea da memria
onde se encontram as variveis no so alterados, apenas perde-se a referncia aos seus
dados. Aps isso, o valor do frame pointer da funo chamadora salvo na pilha
restaurado para o registrador EBP. A instruo assembly responsvel por executar esse
comando :
Leave
Restaurar o fluxo de execuo anterior; para que o controle possa ser retomado ao
procedimento anterior, a funo chamada deve buscar da pilha o endereo de retorno da
funo chamadora. Esse endereo ento copiado para o registrador EIP, que o
ponteiro para a prxima instruo. Essa etapa realizada pelo comando assembly:
Ret
Exemplo
Para facilitar o entendimento de como funciona a pilha em chamadas de funes,
ser apresentado a seguir um cdigo fonte em C e seu respectivo cdigo assembly
gerado.
23
24
26
Esse programa seta todos os 255 bytes da memria da varivel loc1 com valor A e a
passa como parmetro para a funo foo(). Nela, a varivel recebida por parmetro copiada
para um buffer local loc2 de 16 bytes usando-se a funo strcpy(). Porm, essa funo no
executa nenhuma checagem de limites para verificar se a varivel loc2 tem espao alocado para
armazenar toda string par, pois ela o copia at encontrar o caracter nulo \0. Se observarmos o
estado da pilha dentro da funo foo(), teremos:
27
28
programa C, shell code ser uma lista de caracteres em hexadecimal que representam os
comandos assembly que desejamos injetar na mquina alvo (ALEPHONE, 1996).
29
O programa acima simplesmente encerra a sua execuo com o cdigo de sada setado
para o valor 20. O trecho de cdigo assembly abaixo executa a chamada para a funo exit():
exit (20);
<main+17>: mov1 $0x14, (%eap)
<main+24>: call 0x80482f4 <exit@plt>
O trecho de cdigo acima executa uma chamada de sistema (ou system call, ou ainda
syscall). Chamada de sistema o mecanismo utilizado por aplicaes para requisitar um servio
no sistema operacional. O servio requisitado um ndice de uma tabela, passado pelo
registrador EAX, e o comando para executar a interrupo int 0x80. Logo, os comandos acima
executam uma chamada de sistema, requisitando a execuo do servio de ndice 0xfc (252, em
decimal). Verificando a que servio esse ndice se refere na tabela de syscall (usualmente, uma
se encontra em /usr/include/asm/unistd_32.h), vimos que o valor 252 se refere ao servio
_exit_group(). Esse servio, conforme descrito em sua pgina man, anlogo a exit(), porm
ele encerra a execuo no apenas de thread atual, mas de todas aquelas presentes no grupo de
threads correntes. Como nosso shell code possuir uma thread nica, esse trecho de cdigo
assembly desnecessrio.
<_exit=11>: mov $0x1, %eax
<_exit+16>: int $0x80
O trecho de cdigo acima tambm executa uma chamada de sistema, porm o servio
requisitado outro. Verificando na tabela de syscall qual servio corresponde ao ndice 1,
descobrimos que _exit() o correspondente esse ndice. Conforme sua pgina man a execuo
deste servio encerra um processo, e este efeito que desejamos reproduzir. Logo, esses
comandos assembly devem constar em nosso shell code.
Para reproduzir corretamente o efeito da chamada de servio _exit(), devemos:
1. Copiar o valor de sada para o registrador EBX.
2. Copiar o valor 0x1 para o registrador EAX referente ao ndice da tabela de syscall para
o servio _exit();
30
_start :
Mov1 $20 %ebx
Mov1 $1, %eax
Int $0x80
Compilamos e lincamos o cdigo acima com os comandos abaixo, respectivamente:
as o ExitShellcode.o ExitShellcode.s
ld o ExitShellcode ExitShellcode.o
Executando os comandos acima, o programa ExitShellcode ser criado. Se estiver
correto, o programa deve apenas terminar sua execuo, retornando o valor de sada 20. Para
confirmar que o programa escrito em assembly est realizando o esperado, o executamos
usando a ferramenta gdb.
uma operao insegura, como a cpia de uma string para outra sem checagem de limites de
buffer. Com isso, espera-se que o endereo de retorno localizado na pilha seja sobrescrito pelo
endereo de memria onde se encontra o shell code a ser executado (ALEPHONE, 1996).
Abaixo um esquemtico da pilha antes e depois do ataque que ser realizado.
32
O programa acima descreve uma string de entrada e o copia para a varivel buffer sem realizar
nenhuma checagem de limites. Isto , se a string passada como parmetro for maior que o
tamanho do buffer, dados da pilha sero sobrescritos. Para reproduzir uma explorao via
esmagamento de pilha, necessrio criar um programa que construa uma string conforme o
esquemtico abaixo tal que, ao ser passada essa string para o programa vulnervel, seja possvel
abrir um novo shell, e para tal temos trs problemas iniciais:
33
gerado. Tipicamente, essas tcnicas inserem um valor no local da pilha entre o endereo
de retorno e as variveis automticas, de forma que o seu valor for alterado durante a
execuo do procedimento, detecta-se um erro e o programa deve ser abortado.
Existem
diversas
tcnicas
criadas
para
dificultar
explorao
de
Reordenao das variveis locais, movendo todos os buffers para a rea de memria
aps a rea onde se localizam os ponteiros, para evitar a sua corrupo. Esses ponteiros
ponteiros poderiam ser usados para corromper ainda mais outras reas de memria;
35
Cpia dos ponteiros referentes aos argumentos da funo para um espao de memria
anterior aos buffers locais da funo, tambm para evitar a sua corrupo e seu possvel
uso para corromper ainda mais a integridade do sistema;
Endereo de retorno: o local mais usado para se explorar falhas de segurana. Atravs
dele, pode-se desviar o fluxo de execuo de uma funo aps o seu epilogo;
Ponteiro para o frame anterior: o atacante tambm pode injetar shell code alterando o
ponteiro para o frame da funo anterior. Isso se realiza criando-se um frame falso que
execute o cdigo shell, e alterar o valor de frame salvo na pilha para que aponte para o
indevido.
2.6.1 Canrios
Chamam-se canrios os valores conhecidos adicionados para possibilitar a deteco de
alteraes no endereo de retorno ou frame pointer da funo, causadas por estouros de buffer.
um valor gerado no prlogo da funo e testado no seu eplogo, posicionando-se na rea de
memria logo abaixo do frame pointer (no SSP) ou do endereo de retorno (no StackGuard).
Se houver alguma alterao no seu valor durante a execuo da funo, assume-se que houve
um estouro de buffer em algum ponto e o programa abruptamente encerrado (COWAN et al,
1998).
A sua terminologia foi herdada dos canrios usados em minas de carvo para deteco
de gases nocivos. Sendo esses pssaros mais sensveis, eles seriam afetados antes dos
mineradores e forneceriam uma forma de aviso de perigo. A primeira implementao dessa
tcnica foi em 1998 por Crispin Cowan, a ideia era de criar um mecanismo de proteo
executado pelo prprio compilador que garantisse uma maior segurana no cdigo gerado, sem
depender exclusivamente das habilidades dos desenvolvedores. A sua implementao no GCC
foi disponibilizada, porem posteriormente foi substitudo em favor do SSP.
Existem trs tipos de canrios atualmente em uso, so eles (GUPTA, SHARMA; 2008):
Canrios randmicos.
36
Canrios terminadores.
So aqueles compostos de caracteres terminadores como 0x0a (line feed), 0x0d
(carriage return), 0x00 (NULL), e 0xff (end of file). Sua idia baseada na observao
de que estouros de buffer geralmente so explorados em funes que manipulam strings.
Um ponto negativo que o valor do canrio conhecido. Assim se houvesse duas
situaes de estouros de buffer em uma mesma funo, a primeira poderia ser usada
para alterar o endereo de retorno enquanto que a segunda seria usada para restaurar o
valor do canrio.
37
38
exista algum ponteiro para uma funo, ele no seja sobrescrito e consequentemente
usado para a injeo de shell code.
Para alcanar esse novo modelo de organizao da pilha, o SSP necessita introduzir uma
srie de mudanas no cdigo gerado. A linguagem C no possui restries quanto a reordenao
das variveis automticas de uma funo, porm no permite a alterao da localizao dos
argumentos. Para burlar essa restrio, pode-se criar uma nova varivel local, copiar o valor do
argumento para ela e mudar a referncia do argumento para usar a nova varivel local protegida
(ETOH, 2002).
39
dinamicamente instrues SQL para fornecer ao usurio com os dados selecionados conhecida
comumente com jargo m higiene:
Cdigo servidor
TxtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
O exemplo acima, cria uma instruo select, adicionando uma varivel (txtUserId) para uma
cadeia de seleo. A varivel obtida a partir da entrada do usurio (Request) para a pgina.
Resultado servidor
SELECT * FROM Users WHERE UserId = 105 or 1=1
O SQL acima vlido. Ele ir retornar todas as linhas da tabela de usurios, uma vez que
1 = 1 sempre verdadeiro.
Ser que o exemplo acima parece perigoso? O que se a tabela de Usurios contm nomes
e senhas? A instruo SQL acima o mesmo que isto:
SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1
Um hacker inteligente pode ter acesso a todos os nomes de usurio e senhas em um
banco de dados, simplesmente inserindo 105 ou 1 = 1 na caixa de entrada, resumindo no houve
uma boa higienizao de cdigo, no momento de executar o motor SQL.
3.1.3 Injeo SQL baseado em sempre verdadeira.
Aqui uma construo comum, usado para verificar login de usurio para um site:
Nome de usurio:
Senha:
40
Cdigo Servidor
uName = getRequestString("UserName");
uPass = getRequestString("UserPass");
sql = "SELECT * FROM Users WHERE Name ='" + uName + "' AND Pass ='" + uPass + "'"
Um hacker inteligente pode ter acesso aos nomes de usurio e senhas em um banco de
dados, simplesmente inserindo "ou" = na caixa "" o nome de usurio ou senha texto.
O cdigo no servidor ir criar uma instruo SQL vlida como este:
Resultado
SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""
O SQL resultado vlido. Ele ir retornar todas as linhas da tabela de usurios,
desde onde "" = ""sempre verdade.
O cdigo no servidor iria criar uma instruo SQL vlida como este:
Resultado
SELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers
3.1.5 Parmetros para a Proteo (Higienizao)
Alguns desenvolvedores web usar uma "lista negra" de palavras ou caracteres para
pesquisar na entrada SQL, para evitar ataques de injeo SQL. Esta no uma idia muito
boa. Muitas destas palavras (like delete or drop) e caracteres (como o ponto e vrgula e aspas),
so utilizados em linguagem comum, e deve ser permitido em muitos tipos de entrada.
41
(Na verdade ele deve ser perfeitamente legal para introduzir uma instruo SQL em um campo
de banco de dados.)
A nica forma comprovada de proteger um site de ataques de injeo SQL, a utilizao
de parmetros SQL. Parmetros SQL so valores que so adicionados a uma consulta SQL em
tempo de execuo, de uma forma controlada.
FROM
Users
WHERE
UserId
@0";
db.Execute(txtSQL,txtUserId);
Note-se que os parmetros so representados na instruo SQL por um @ marcador.
O motor SQL verifica cada parmetro para garantir que ele est correto para sua coluna e so
tratados literalmente, e no como parte do SQL para ser executado.
Exemplo bsico:
txtNam=getRequestString("CustomerName");
txtAdd=getRequestString("Address");
txtCit=getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
db.Execute(txtSQL,txtNam,txtAdd,txtCit);
Voc aprendeu apenas para evitar a injeo SQL. Uma das vulnerabilidades de sites de
topo.
Exemplos em mais algumas linguagens:
Os exemplos a seguir mostram como criar consultas parametrizadas em algumas
linguagens web comuns.
Instruo select in asp.net:
txtUserId = getRequestString("UserId");
sql = "SELECT * FROM Customers WHERE CustomerId = @0";
command = new SqlCommand(sql);
command.Parameters.AddWithValue("@0",txtUserID);
command.ExecuteReader();
42
O Cdigo de Csar
Um dos cdigos secretos mais simples consiste em substituir uma letra do alfabeto pela
seguinte. Por exemplo, a mensagem AMO A OBMEP seria codificada como
BNPBPCNFQ:
Um cdigo semelhante a este foi usado, por exemplo, pelo ditador romano Jlio Csar
para comunicar-se com as legies romanas em combate pela Europa. Este parece ser o primeiro
exemplo de um cdigo secreto de que se tem notcia.
43
35%; muito acima dos usuais 0; 47%. J o A aparece uma s vez, o que d uma porcentagem
de cerca de 7%; portanto, abaixo dos 14% usuais.
Exerccio 1. Ser que voc notou que o pargrafo acima foi codificado?
Use o mtodo de contagem de frequncia para quebrar o cdigo e poder decodificar e ler o
pargrafo. Para no simplificar as coisas, foram eliminados espaos, acentos e pontuao.
Cdigos em Bloco
Por sorte, existe uma maneira simples de tornar invivel a aplicao de uma contagem
de frequncia. Para isso, subdividimos a mensagem em blocos de vrias letras e embaralhamos
estes blocos. Por isso este processo de criptografar uma mensagem conhecido como cdigo
de bloco. Por exemplo, considere a mensagem AMO A OBMEP. Para codific-la seguiremos
os seguintes passos:
45
enviar o processo de codificao a ser utilizado. Como fcil pr uma escuta na linha, uma
outra pessoa pode facilmente descobrir como meu computador vai codificar as informaes
sigilosas que sero enviadas loja. Usando a mesma escuta fcil interceptar tambm as
mensagens que contm os dados do carto. Mas isto basta porque, se sabemos como foi feito o
embaralhamento dos blocos, podemos facilmente desfaz-lo e ler os dados do carto!
A nica maneira de contornar este problema ter acesso ao que conhecido como um
canal seguro: uma maneira secreta de fazer a informao sobre o processo de codificao
chegar at o computador do usurio da loja. Talvez a loja pudesse mandar, pelo correio
registrado, um carto especial com os dados a serem usados para a codificao. O problema
que isto tornaria a transao lenta, j que seria necessrio esperar dias pela chegada do carto
nesse meio tempo eu talvez preferisse escolher uma loja real, mesmo que fosse longe da minha
casa. E ainda h outro problema, mais srio. Se o meu computador for invadido por um
hacker, o processo de codificao ser descoberto e qualquer mensagem enviada com ele
poder ser lida.
Vejamos um exemplo. Voc j viu uma dessas armadilhas usadas para pescar lagostas?
Elas consistem de uma gaiola com uma porta fechada atrs e uma entrada para a lagosta na
frente.
47
O segredo est na entrada, que tem a forma de um funil: larga na parte externa e cada
vez menor medida que a lagosta vai entrando na gaiola.
Para uma ilustrao da entrada da armadilha veja a figura.
A lagosta fica presa na gaiola porque, para poder sair, teria que encontrar e passar pela
parte estreita do funil, que um problema complicado demais para uma lagosta, cujo crebro
tem o tamanho aproximado de uma ervilha. No preciso dizer que uma armadilha desse tipo
no funcionaria para pegar um macaco, nem mesmo um passarinho. Muito interessante, mas
que problema matemtico satisfaz esta condio de ser fcil de fazer e difcil de desfazer,
para que possamos utiliz-lo em criptografia? Isto o que veremos na prxima seo. Por
enquanto, vamos s observar que tais cdigos so conhecidos como de chave pblica, j que o
processo (ou chave) de codificao pode ser conhecido de qualquer um sem comprometer a
segurana do cdigo.
Criptografia RSA
O mais conhecido dos mtodos de criptografia de chave pblica o RSA. Este cdigo
foi inventado em 1977 por R. L. Rivest, A. Shamir e L. Adleman, que na poca trabalhavam no
Massachussets Institute of Technology (M.I.T.), uma das melhores universidades americanas.
As letras RSA correspondem s iniciais dos inventores do cdigo. H vrios outros cdigos de
chave pblica, mas o RSA continua sendo o mais usado em aplicaes comerciais.
O Mtodo RSA
A descrio completa do funcionamento do RSA justamente o tema desta apostila.
Para entender como funciona precisaremos estudar vrias ideias e tcnicas novas de
matemtica. Nesta seo explicaremos apenas o suficiente sobre o RSA para que voc entenda
48
como possvel um problema ser fcil de fazer e difcil de desfazer. Isto tambm nos ajudar
a identificar os problemas matemticos que precisaremos abordar para poder discutir os
detalhes do funcionamento do RSA.
Digamos que voc vai criar uma implementao do RSA para uma determinada loja,
que vai us-lo na codificao de dados de clientes em compras pela internet. Para comear,
voc precisa escolher dois nmeros primos distintos e multiplic-los, obtendo um nmero
inteiro n. A loja manter secreta a informao sobre quais so os primos escolhidos, porque
isto que necessrio para decodificar as mensagens enviadas usando a verso do RSA que voc
est construindo. J n vai ser enviado para o computador de qualquer pessoa que compre nessa
loja pela web, porque dele que o computador do usurio necessita para codificar os dados
sobre o do carto de crdito e envi-los ao computador da loja. Portanto, no caso do RSA, o
problema fcil de fazer e difcil de desfazer simplesmente multiplicar dois primos.
J consigo imaginar voc pensando: S isso? Mas para desfazer o problema basta fatorar
o nmero e achar os primos! verdade, mas h um detalhe que esqueci de contar: estes nmeros
primos sero muito, muito grandes. Na prtica uma chave segura de RSA gerada a partir de
nmeros primos de cerca de 100 algarismos cada, de forma que n, que o produto destes
primos, ter cerca de 200 algarismos. Acontece que, como veremos na pgina 29, podem ser
necessrios zilhes de anos para fatorar um nmero deste tamanho e achar seus fatores primos
mesmo se usarmos os mais poderosos computadores existentes atualmente.
Resumindo:
Quebrar o RSA consiste em fatorar n, que leva muito tempo se n for grande.
Teoria de Nmeros
O que vimos acima sugere que os principais problemas matemticos relacionados ao RSA
so: como achar nmeros primos e como fatorar um nmero. A rea da matemtica a que estes
problemas pertencem conhecida como teoria de nmeros e tem por objetivo geral o estudo
49
das propriedades dos nmeros inteiros. Entre os problemas que teremos que estudar para
podermos descrever completamente o RSA tambm esto:
Como achar um nmero que deixa restos especificados quando dividido por uma srie
de nmeros dados;
H muitos outros problemas que so parte da teoria dos nmeros, mas dos quais no
trataremos aqui, entre eles:
1. calcular o mximo divisor comum entre dois nmeros dados;
2. determinar todos os inteiros a, b e c que satisfazem a2+b2 = c2;
3. mostrar que se trs inteiros a, b e c satisfazem an + bn = cn, onde n > 2 um inteiro positivo,
ento a, b ou c tm que ser iguais a zero;
4. provar que 22n + 1 composto se n > 4;
5. provar que todo nmero par soma de dois primos mpares;
6. determinar todos os inteiros consecutivos que so potncias de nmeros inteiros.
e sequer existiam h 50 anos atrs. A questo (4) outra que est ligada ao nome de Fermat.
Na verdade, o nmero F(n) = 22n + 1 conhecido como o n-simo nmero de Fermat porque,
em uma de suas cartas a um outro matemtico, Fermat props que F(n) seria sempre primo,
qualquer que fosse o valor de n. De fato, calculando F(n) para n de 0 a 4 obtemos os nmeros
listados na tabela 2, que so todos primos. Aparentemente, foi nessa tabela que Fermat baseouse para fazer a sua afirmao. Infelizmente, generalizar a partir de alguns casos sempre uma
prtica perigosa em matemtica e, neste caso, Fermat deu-se realmente mal. Nenhum nmero
primo da forma F(n) conhecido quando n > 4, da o problema enunciado em (4), que ningum
at hoje sabe como resolver.
Pr-codificao
O que fazemos para codificar uma mensagem no RSA calcular sua potncia mdulo n
relativamente a um expoente especialmente escolhido. Entretanto, para que isto seja vivel, a
mensagem deve ser um nmero inteiro. Mas no isto o que ocorre em geral: a maior parte das
mensagens um texto. Por isso, a primeira coisa a fazer, se desejamos usar o mtodo RSA,
inventar uma maneira de converter a mensagem em uma sequncia de nmeros. Suponhamos,
para simplificar, que a mensagem original um texto onde no h nmeros, apenas palavras, e
no qual todas as letras so maisculas. Portanto, em ltima anlise a mensagem constituda
pelas letras que formam as palavras e pelos espaos entre palavras. Chamaremos esta primeira
etapa de pr-codificao, para distingui-la do processo de codificao propriamente dito. Na
pr-codificao convertemos as letras em nmeros usando a seguinte tabela de converso:
O espao entre duas palavras ser substitudo pelo nmero 99, quando for feita a converso.
Por exemplo, a frase AMO A OBMEP convertida no nmero:
1022249910992411221425
Observe que precisamos fazer cada letra corresponder a um nmero de, pelo menos, dois
algarismos para evitar ambiguidades. Se fizssemos A corresponder ao nmero 1, B ao 2, e
assim por diante, no teramos como saber se 12 representa AB ou L, j que esta ltima a
dcima segunda letra do alfabeto. Antes de continuar precisamos determinar os parmetros do
sistema RSA que vamos usar. Estes parmetros so dois primos distintos, que vamos denotar
por p e q, e cujo resto na diviso por 6 tem que ser 5. Em seguida, ponha n = pq. A ltima fase
do processo de prcodificao consiste em quebrar em blocos o longo nmero produzido
anteriormente. Estes blocos devem ser nmeros menores que n. Por exemplo, se escolhermos p
= 17 e q = 23, ento n = 391. Neste caso, a mensagem, cuja converso numrica foi feita acima,
pode ser quebrada nos seguintes blocos:
102-224-99-109-92-41-122-142-5.
A maneira de escolher os blocos no nica e os blocos no precisam sequer ter o mesmo
tamanho. Contudo, certos cuidados devem ser tomados. Por exemplo, no permitido escolher
um bloco que comece por 0 porque isto traria problemas na hora de decodificar, j que, por
52
exemplo, no temos como distinguir o bloco 071 do bloco 71. Observe que os blocos em que
quebramos a mensagem no correspondem a nenhuma unidade lingustica, seja ela palavra,
letra ou qualquer outra. Isto muito bom, porque torna a decodificao por contagem de
frequncia essencialmente impossvel.
Segurana
Antes de prosseguir para a explicao de porque o RSA funciona, conveniente discutir
com um pouco mais de detalhes em que se fundamenta a segurana do RSA. Neste contexto, o
termo chave quebrar o cdigo. Digamos que algum, que vamos chamar de A, pe uma escuta
(tambm conhecida como um grampo) na linha que uma empresa usa para transmitir
mensagens codificadas a um banco. Se o cdigo utilizado for o RSA, ento A vai ter acesso no
apenas s mensagens codificadas que a empresa envia ao banco (obtidas pelo grampo), mas
tambm chave de codificao n usada pela empresa que, afinal de contas, pblica.
Lembre-se que a chave n igual ao produto de dois nmeros primos p e q que foram
escolhidos pela empresa no momento em que sua implementao do RSA foi feita. Em
princpio, A no deveria ter nenhuma dificuldade em decodificar a mensagem. De posse de n,
precisaria apenas fator-lo, descobrir p e q e us-los para calcular d. Uma vez obtido d, a receita
de decodificao
53
pode ser aplicada para reconstituir a mensagem original. Embora tudo isto parea muito simples
em princpio, na prtica totalmente invivel. A razo est em um problema de natureza
tecnolgica: no existem computadores rpidos o suficiente, nem algoritmos bons o suficiente,
que nos permitam fatorar um nmero inteiro muito grande que no tenha fatores relativamente
pequenos. Lembre-se que, o tempo necessrio para fatorar um nmero de uns cem algarismos
pelo mtodo usual de tentativa imenso, e excede, em muito, a idade estimada do universo.
Entretanto, a afirmao que acabamos de fazer muito mais forte: no existe nenhum
algoritmo conhecido capaz de fatorar inteiros grandes de modo realmente eficiente. Na verdade,
no se sabe nem mesmo se possvel que um tal algoritmo exista! Mas, o que significa a palavra
grande neste contexto? Mais precisamente, quo grande deve ser a chave n usada no RSA para
que, mesmo tendo interceptado a mensagem codificada pela empresa e conhecendo n, o agente
A no seja capaz de achar p e q e, assim, decodificar a mensagem? A resposta que, atualmente,
as implementaes comerciais do RSA usam chaves pblicas com cerca de 200 algarismos,
mas algumas destas implementaes chegam a permitir chaves pblicas com at 2 467
algarismos.
Durante algum tempo, o RSA Laboratory, que pertence empresa que detm os direitos
do sistema de codificao RSA, lanou desafios, que consistiam de uma possvel chave pblica
de RSA que deveria ser fatorada. A ltima destas chaves a ser fatorada tem 193 algarismos e
corresponde ao produto dos primos:
16347336458092538484431338838650908598417836700330
92312181110852389333100104508151212118167511579
e:
1900871281664822113126851573935413975471896789968
515493666638539088027103802104498957191261465571
tem a menor chance de ler a mensagem. Outro detalhe prtico importante que segue desta
argumentao que a empresa precisa calcular o valor de d a partir dos valores de p e q: se n
for calculado e p e q forem esquecidos, j no temos mais como determinar o valor de n, porque
ningum mais ser capaz de fatorar n. Portanto, primeiro escolhem-se p e q, que so usados
para calcular d; depois multiplicam-se p e q para determinar n. Uma vez de posse do par (n; d)
os valores de p e q podem at ser apagados por medida de segurana.
Pesquisa 1
Criptografia em PHP
Falaremos agora sobre segurana em PHP, sobre trs tipos de codificao/criptografia
(na verdade, hash) muito usados no PHP. Dois deles so hashes de mo nica ou one-way.
Com esse tipo de hash voc apenas codifica o texto.. No tem como, baseado no texto j
codificado, descobrir o texto original. O outro mo dupla, o que possibilita a criao de duas
funes: uma para codificar e outra para decodificar o texto.
MD5
A primeira que vou falar sem dvida a mais comum, chama md5 que um algoritmo
de um hash de 128 bits. No vou tentar explicar o que hash nem algoritmo agora S vou
explicar como voc pode usar o md5 na sua aplicao.
O md5 gera uma string alfanumrica de 32 caracteres, no importa se voc t gerando o
md5 de duas letras ou de um texto de 20 pargrafos O md5 gerado sempre vai ter 32
caracteres.
Voc pode usar o md5 na hora de salvar um dado sigiloso (senhas) o banco Com isso,
ningum tem acesso senha original do cliente. Depois s comparar o md5 do que foi digitado
no campo senha (na hora do login) com o que est armazenado no banco, se bater, t tudo certo.
Infelizmente o md5 tem um problema Voc pode, com muita dificuldade (preste ateno:
muita dificuldade), gerar dois md5 iguais. Duas strings diferentes que acabem como um mesmo
md5. Isso rarssimo, mas pode acontecer.
Pra usar o md5 no PHP s usar da seguinte forma:
SHA1
A outra hash de mo nica o sha1. Ele praticamente idntico ao md5, s que tem 160
bits, o que acaba criando uma string-resultado maior: 40 caracteres alfanumricos. Outro ponto
55
do sha1 que, por ser 160 bits e gerar uma cadeia de caracteres maior, uma coliso (encontrar
duas strings que, codificadas, sejam a mesma coisa) bem mais rara que numa chave de 128bits.
Usar o sha1 no PHP exatamente a mesma coisa que o md5, s que mudando o nome da funo:
BASE64
um mtodo para codificao dos dados para transferncia na Internet. Ela uma
codificao de mo dupla, e usando uma segunda funo voc pode descobrir a string original
de uma string codificada.
Para usar ela no PHP voc tem as duas formas:
Viram como simples? Com esses recursos possvel deixar a aplicao bem mais segura e,
por que no, organizada.
Documentao Oficial:
Funo [md5()](http://br.php.net/md5) Hash de mo nica
Funo [sha1()](http://br.php.net/sha1) Hash de mo nica
Funo [base64_encode()](http://br.php.net/base64_encode) Funo para codificar strings
usando base64
Funo [base64_decode()](http://br.php.net/base64_decode) Funo para decodificar strings
usando base64
Suporte ao bcrypt
O PHP suporta hashing via crypt () que est presente desde o PHP 4, e serve pra
trabalhar com hashings de mo nica (como o MD5 e SHA1).
Primeiro o cdigo completo da classe:
<?php
/**
* Bcrypt hashing class
*
* @author Thiago Belem <contato@thiagobelem.net>
* @link
https://gist.github.com/3438461
*/
class Bcrypt {
/**
* Default salt prefix
*
* @see http://www.php.net/security/crypt_blowfish.php
*
56
* @var string
*/
protected static $_saltPrefix = '2a';
/**
* Default hashing cost (4-31)
*
* @var integer
*/
protected static $_defaultCost = 8;
/**
* Salt limit length
*
* @var integer
*/
protected static $_saltLength = 22;
/**
* Hash a string
*
* @param string $string The string
* @param integer $cost
The hashing cost
*
* @see
http://www.php.net/manual/en/function.crypt.php
*
* @return string
*/
public static function hash($string, $cost = null) {
if (empty($cost)) {
$cost = self::$_defaultCost;
}
// Salt
$salt = self::generateRandomSalt();
// Hash string
$hashString = self::__generateHashString((int)$cost, $salt);
return crypt($string, $hashString);
}
/**
* Check a hashed string
*
* @param string $string The string
* @param string $hash
The hash
*
* @return boolean
*/
public static function check($string, $hash) {
return (crypt($string, $hash) === $hash);
}
/**
* Generate a random base64 encoded salt
*
* @return string
*/
public static function generateRandomSalt() {
57
// Salt seed
$seed = uniqid(mt_rand(), true);
// Generate salt
$salt = base64_encode($seed);
$salt = str_replace('+', '.', $salt);
return substr($salt, 0, self::$_saltLength);
}
/**
* Build a hash string for crypt()
*
* @param integer $cost The hashing cost
* @param string $salt The salt
*
* @return string
*/
private static function __generateHashString($cost, $salt) {
return sprintf('$%s$%02d$%s$', self::$_saltPrefix, $cost,
$salt);
}
}
Usando o bcrypt
58
importa que voc criptografe a mesma senha 100 vezes, se o salt for diferente nas 100
vezes, o resultado final ser sempre diferente. Para o bcrypt funcionar:
O salt precisa ser uma string de 22 caracteres que respeite a expresso regular. /0-9AZa-z. O custo deve ser um nmero inteiro entre 4 e 31, outro detalhe que o custo
precisa ter dois dgitos, ento nmeros menores que 10 precisam ter zero esquerda
Fiz alguns testes e meu computador quase parou quando usei um custo de 15 O custo
a potncia de 2, ento 2^15 equivale a 32.768 ciclos, j 2^31 equivaleria a 2.147.483.648
ciclos
O custo de processamento influencia diretamente nas tentativas de ataque de fora bruta,
quanto maior, mais lento, quanto mais lento, melhor.
pra
criptografar
senha
ol
mundo,
com
salt
O que fizemos foi passar dois valores para a funo crypt(): o valor a ser criptografado
(a senha em si), e uma string $2a$08$Cf1f11ePArKlBJomM0F6aJ$, que composta por
trs partes (separadas por cifro):
O mtodo de hashing -- 2a -- que far com que o bcrypt/blowfish seja usado
O custo -- 08
O salt -- Cf1f11ePArKlBJomM0F6aJ
Isso no vai gerar o seguinte hash:
$2a$08$Cf1f11ePArKlBJomM0F6a.EyvTNh6W2huyQi5UZst5qsHVyi3w5x.
Que o valor que voc deve salvar no banco de dados.
59
Caso essa mesma senha seja criptografada com o mesmo salt e o mesmo custo, o
resultado ser idntico caso voc mude o salt (que deve ser gerado de forma aleatria) o
resultado seria diferente.
Vale lembrar que o hash gerado ter sempre 60 caracteres, ento voc pode modelar a
sua coluna que armazena a senha como CHAR(60) ou VARCHAR(60) se voc estiver usando
o MySQL. ;)
60
Nos dias de hoje, a segurana da rede anda de mo dada com a segurana dos
computadores, sendo difcil separ-los. Desde a porta do hotel, aos telefones celulares, aos
computadores de secretria, tudo se encontra ligado em rede. Desta forma, a exposio dos
sistemas coloca em xeque qualquer poltica de segurana que a entidade tente implementar, por
esse motivo necessrio um alerta permanente pelos administradores de rede das mesmas.
61
62
63
sistema, neste caso a linha telefnica, interferindo com o trfego legitimo que queria usar o
servio, o patro.
Como se pode ver algo difcil de se defender, a resposta passaria pela redundncia do
sistema, uma segunda linha telefnica. Mas ser vivel economicamente ter uma segunda linha
telefnica s para situaes destas em que no se sabe quando acontecer se que alguma vez
acontecer.
Imaginem um ataque caixa de correio da sua casa, existe um vizinho seu que por
qualquer motivo no gosta da cor da sua gravata e ento decide inscrev-lo em todas as
64
65
Existem vrios tipos de ataques DoS. O primeiro passa por crashar o sistema ou rede.
Se um atacante poder enviar para a vtima, dados ou pacotes que o sistema no espera, vai levar
a que o computador tenha um comportamento para o qual no estava previsto, levando a
um crash ou shutdown, desta forma ningum ter acesso aos recursos do sistema. Do ponto de
vista do atacante, que se pode realizar este tipo de ataques tornando um sistema inacessvel
com poucos pacotes. Na maior parte das vezes, para reativar o sistema requer por vezes a
interveno do administrador da rede. Assim este primeiro tipo bastante prejudicial pois
requer pouco esforo para efetuar a interao humana para consertar.
O segundo tipo de ataque passa por inundar o sistema ou a rede com tanta informao
por forma ao sistema no possa dar resposta. Se um determinado sistema estiver dimensionado
para lidar com 100 pacotes por minuto, e um atacante enviar 10.000 ento quando os
utilizadores legtimos do sistema tentarem aceder no o podero fazer pois todos os recursos
esto exaustos. Quando o atacante parar de inundar o sistema ento este retoma a sua atividade
normal. Este tipo de ataque requer muita energia por parte do atacante pois este tem que estar
continuamente a inundar o sistema. Em alguns casos, este tipo de ataque pode crashar o sistema
mas no entanto para recuperar deste tipo de ataques requer uma interveno humana mnima.
Assim temos:
1. Consumo da largura de banda - Inundando a ligao da vtima, ou utilizando amplificadores
2. Escassez de Recursos
3. Falhas de Programao
4. Ataques de Routing e DNS
O mais importante a ter em conta que este tipo de ataques pode ser lanado a nvel
local ou utilizando a Internet.
Existem outros tipos de ataques de negao de servios. Alguns atacam computadores, como
os servidores de email ou servidores web, outros atacam os routers, outros servidores de bases
de dados, etc. A ideia sempre a mesma: inundar a vtima com uma quantidade de lixo que o
sistema vai abaixo.
Um exemplo o WinNuke, capaz de deitar abaixo uma verso do Windows95; algum
num nico ataque foi capaz de deitar abaixo, 6.000 computadores a correr o Windows95 na
Internet em Abril de 1999. Ataques deste tipo so comuns contra sites da web, servios como
o Akamai (um servio remoto em cache) torna estes ataques fceis de efetuar, e difceis de
detectar.
O Problema
66
Por vezes acontecem negao de servio, apenas porque houve uma ocorrncia anormal
de um fator com o qual no se esperava. O caso mais recente do servio SMS no natal, em que
toda a populao portuguesa decidiu utilizar este popular servio como forma de desejar votos
de feliz natal. Resultado, uma utilizao de pico no servio, levou a que os sistemas no
aguentassem a quantidade de pedidos, levando a um encerramento temporrio do servio. O
caso do resultado da candidatura universidade, um caso em que os candidatos tentavam ver
os resultados e esperaram alguns minutos, por vezes horas, para acederem listagem da sua
colocao. Poder ser isto considerado um ataque? Aqui ser apenas um erro de
dimensionamento, ou por vezes nem isso, apenas um gasto racional de recursos. No entanto
serve para demonstrar o problema que existe entre a distino de um ataque ou de um uso
anormal do servio provocado por uma situao extraordinria.
Solues
Alguns investigadores, propem a adopo de medidas que forcem o cliente a efetuar
um qualquer clculo para efetuar a ligao. A ideia que o cliente tenha que disponibilizar de
algum tempo computacional para efetuar a ligao, desta forma no poder inundar a vtima
com o nmero de ligaes. uma boa medida para ataques baseados na falha do protocolo
TCP/IP, no entanto no funciona contra um ataque de negao de servio distribudo.
Tenho lido afirmaes ou comentrios que uma das principais razes para estes ataques
ser a falta de autenticao na Internet. A meu ver serve apenas para possivelmente acusar meia
dzia de implicados num ataque que sero to vtimas como as prprias vtimas, no faz muito
sentido. Ataques de negao de servio fazem mossa nos sistemas apenas pela tentativa de
entregarem pacotes, se esses pacotes esto ou no autenticados irrelevante. Autenticao
mandatria no servir para prevenir estes ataques, ou para fazer o tracking dos atacantes.
Ajudaria isso sim se a autenticao se fizesse em cada ponto da rede por onde o pacote passa,
mas pensem s no possvel overhead a que um s pacote estaria sujeito. Isto implicaria uma
mudana no modo de funcionamento da Internet, reduziria consideravelmente a largura de
banda pois em vez de meramente encaminhar os pacotes, todos os switches e routers tinham
que os autenticar, isto para no falar nos hubs.
Outra soluo passaria por filtragem a larga escala efetuada pelos ISPs. se um rede
poder bloquear um ataque de negao de servio, este nunca atingiria o alvo. Aqui a
autenticao poderia ser til. No entanto filtragem de contedo a nvel do ISP requer um esforo
elevado financeiro e tcnico, reduzindo tambm a largura de banda. Similarmente, uma
67
No entanto estas medidas para evitar o flooding dos computadores poderiam no ser
muito eficazes. Isto porque a maioria dos ataques combinam oflooding com a explorao de
uma determinada vulnerabilidade. Podero ser evitados remediando a vulnerabilidade.
Mantendo os sistemas atualizados, estarem em alerta em relao s ltimas vulnerabilidades,
so algumas das solues. No entanto, e mais uma vez, no servir de grande coisa se o atacante
tiver poder de fogo superior, podendo sempre inundar a ligao.
Para uma empresa o maior risco de estar online a perca de reputao, a m imagem. E
para empresas com uma misso crtica de sistemas online, um ataque de negao de servios
pode colocar a vida de pessoas em risco. Imaginem um ataque de negao de servio perpetrado
a uma torre de controlo de um aeroporto!!!
Tipos de ataques DoS Negao de Servio (NdS no soa to bem como DoS)
Alguns dos ataques que irei debruar-me j c andam por algum tempo e j foi possvel
encontrar soluo para eles, no entanto so includos devido aos conceitos bsicos de como os
ataques so despoletados e do uma ideia muito precisa da gama de servios e protocolos que
podem ser usados para realizar um DoS.
68
Ping of Death
Tipo de ataque que passa pelo envio de um enorme pacote ping para a vtima.
Detalhes
Sistemas operativos: a maior parte dos sistemas operativos
Protocolos/Servios: ICMP Ping
Especifico que o tamanho do pacote a enviar de 500 bytes invs do standard 32.
Descrio detalhada
O protocolo TCP/IP permite o tamanho mximo de um pacote at 65536 octetos (1
octeto=8 bits), contendo um mnimo de 20 octetos para o IP header e 0 ou mais octetos para
informao adicional. conhecido que alguns sistemas reagem de uma forma imprevisvel
quando recebem pacotes de tamanho acima do estabelecido. Um host envia mquina um
ICMP_ECHO-REQUEST, e se a mquina estiver ativa envia de resposta um ICMP_ECHORESPONSE.
Os atacantes constroem datagramas ICMP acima do valor standard (que esto
encapsulados no pacote IP). Desta forma envia-se pacotes ping acima do valor de 65536 bytes.
Como se proteger?
A melhor forma de proteo atravs da aplicao do ltimo patch fornecido pelo
vendedor do SO. Quase todos os SO resolveram este problema. No entanto se tal no foi
possvel, pode-se bloquear os pacotes com um tamanho acima do especificado nos routers ou
firewall. O site da CERT mantm um tracking das mais recentes vulnerabilidades e fornece
informao detalhada de como se proteger contra tais ataques.
SSPing
Tipo de ataque que passa pelo envio de uma srie de pacotes ICMP acima do tamanho
permitido mas altamente fragmentados.
Detalhes
Sistemas operativos: Microsoft
Protocolos/Servios: ICMP Ping
SSPing utiliza os pacotes ICMP como uma forma de pendurar sistemas ligados
Internet ou numa rede que esteja a correr o Windows, bem como verses antigas do MAC.
Descrio Detalhada
Se uma mquina tentar enviar grandes pacotes pela rede ou pela Internet, existe uma
boa possibilidade de que os Routers que processam os pacotes venha a fragment-los em
bocados mais pequenos por forma a serem corretamente encaminhados pela rede at ao destino.
Quando tal ocorre a mquina de destino recebe os pedaos dos pacotes e depois faz a
remontagem deles. Este processo denominado de fragmentao.
Como a vtima enviou pacotes ICMP acima do tamanho e altamente fragmentados
atravs da rede, a vtima que recebe os pacotes vai tentar fazer essa remontagem, colocar os
fragmentos por ordem para formar o pacote. Pacotes altamente fragmentados exigem que a
stack TCP/IP mantenha o tracking da informao adicional por forma a remontar corretamente
o pacote. Se a stack TCP/IP no foi construda corretamente quando tenta manter o track por
forma a ordenar os diversos pacotes o resultado o denominado memory overflow, que leva a
que a mquina para de responder. Normalmente o atacante apenas precisa de enviar alguns
pacotes para paralisar a vtima. Quando a vtima reinicia o sistema a comunicao perde-se pelo
que o atacante permanece annimo.
70
O programa Jolt e Jolt2 permitem efetuar este tipo de ataques, mais adiante falarei destes
programas.
o ataque j conhecido
em: http://newdata.box.sk/neworder/xforces/sspingeggdrop.zip
O agressor outro programa que pode lanar diversos ataques de DoS incluindo o
SSPing e encontra-se disponvel emhttp://neworder.box.sk
Como se proteger?
Como este ataque tem impacto a nvel dos programas da Microsoft, bastar fazer
o download dos ltimos Service Packs e patches. Microsoft fez um update stack TCP/IP.
Land Attack
Este tipo de ataque envia um pacote TCP SYN em que o endereo de destino e de origem
so os mesmos bem como a porta.
Detalhes
Sistemas operativos: Maior parte dos sistemas operativos e routers
Protocolos/Servios: IP
O Land attack um programa que permite o envio de pacotes TCP SYN (que a
primeira parte do three-way handshake) em que o endereo de destino e de origem o da vtima
bem como a porta a mesma.
Descrio Detalhada
Os campos que compem o protocolo IP so bastantes no entanto existem alguns chave
para este tipo de ataque:
1. Source Address - endereo IP origem
2. Source port number - porta de origem
3. Destination Address - endereo IP origem
4. Destination port number - porta de destino.
71
Como o protocolo TCP um protocolo orientado para a ligao, que opera a nvel 4,
camada de transporte, logo como fivel requer que seja feito o denominado three-way
handshake para iniciar a comunicao. Quando uma ligao iniciada, utiliza pacotes de SYN
para sincronizar as duas mquinas. Os pacotes de SYN so iguais aos pacotes normais, s que
tem ativo o bit SYN, que indica os primeiros pacotes para iniciar a comunicao.
Quando um atacante utiliza este exploit, envia um pacote mquina para iniciar a
comunicao. O pacote tem como endereo IP de origem e porta de origem o endereo da
vtima, pela tcnica spoofed, o endereo IP de destino e a porta de destino o da vtima.
A mquina da vtima recebe o pacote e responde ao endereo de origem com a porta de
origem. Como o endereo o mesmo do da mquina vtima, o sistema crasha ou pendura pois
entra em roda-livre sem saber o que fazer ao pacote.
Aggressor e Spike so dois dos programas capazes de lanar diversos ataques de servios
de negao incluindo o land attack. Tambm ojuggernaut, programa capaz de "session
Hijacking" tem includo um gerador de pacotes includo.
Como se proteger?
Mais uma vez a melhor forma de proteo atravs da aplicao do
ltimo patch fornecido pelo vendedor do SO. Quase todos os SO resolveram este problema. No
72
entanto se tal no foi possvel, pode-se bloquear os pacotes spoofed nos routers ou firewall,
bloqueando os pacotes na fronteira, que tenham o mesmo endereo de origem os IP's da rede
interna.
Smurf Attack
Este tipo de ataque envolve um pacote ICMP forjado enviado para um endereo de broadcast.
Detalhes
Sistemas operativos: Maior parte dos sistemas operativos e routers
Protocolos/Servios: ICMP Ping
O Smurf attack uma categoria de ataques a nvel da rede perpetrado contra hosts com
o objetivo de negar servios a hosts. O atacante envia trfego ICMP echo requests (ping) pata
um IP de broadcast da rede utilizando um endereo de origem, IP spoofed, da vtima. Numa
rede multi-access broadcast, pode levar a que algumas centenas de computadores da rede
respondam ao pedido de cada pacote. O que faz com que os computadores da rede bombardeiem
a vtima com resposta ao pedido forjado.
Existe um "primo" chamado de "fraggle" que usa pacotes UDP echo da mesma forma
que pacotes ICMP echo. Atualmente as mquinas mais afetadas por este tipo de ataques so
servidores IRC e seus fornecedores. Este tipo de ataque tem impacto na maior parte de
equipamentos que processam pacotes.
Descrio Detalhada
Para se perceber este tipo de ataques necessrio entender como funciona o
endereamento ICMP broadcast. Um endereo de broadcast um simples endereo IP que envia
com um pacote serve para comunicar com todos os hosts num segmento de rede. Por exemplo,
o IP broadcast para a rede 12.0.0.0 o 12.255.255.255. Este endereo envia ento o pacote para
todas as mquinas da rede 12. Se existir um nmero elevado de mquinas nesse segmento de
rede, utilizando um endereo de broadcast leva a consumir uma elevada largura de banda da
rede, pois o sistema ir gerar pacotes individuais para cada mquina no segmento de rede.
Para comear o ataque, o atacante gera ICMP echo request (o mesmo que o ping),
utilizando endereos de origem forjados e o endereo de broadcast como destino. O
intermedirio recebe os ICMP echo requests, sendo redirecionados para o endereo de
73
broadcast da rede. Causando que o pacote seja enviado para todas as mquinas, no segmento
de rede, com cada mquina a responder aos pedidos e enviando de volta um ICMP echo reply.
Quando todas as mquinas na rede respondem ao pedido da rede, resulta numa degradao de
servio, ou mesmo negao de servios, para aquele segmento de rede dado o elevado volume
de trfego gerado.
Como os endereos de origem IP esto forjados, todas as respostas so dirigidas ao
endereo de origem especificado, que vem a ser o endereo da vtima. Devido ao elevado
nmero de pacotes gerados enviados para o computador vtima, pode causar congesto na rede
e potencialmente colocar a rede inacessvel.
Descrio de variantes
O Fraggle uma variao simples do ataque Smurf. Fraggle funciona da mesma forma
que o smurf, com exceo que usa pacotes de echo UDP em vez de pacotes echo ICMP.
Papa Smurf uma verso mais sofisticada e melhorada da verso Smurf, mas funciona da
mesma forma.
Amplificadores de Smurf
Um amplificador smurf realizado recorrendo a uma companhia cuja a rede no s
aceita ICMP echo requests enviados para um endereo de broadcast, mas que permite ICMP
echo replies enviados para fora. Como tem vindo a ser um elevado problema em ascenso na
Internet, existe um site que lista as companhias que podem ser usadas como amplificadores de
smurf. Este site http://www.pulltheplug.com.
Fyodor tambm arranjou uma maneira de utilizar o nmap para verificar se a rede pode
ser usada como smurf amplifier.
74
Como se proteger?
A proteo contra este tipo de ataques pode ser realizada de duas formas: protegendo o
intermedirio, e protegendo a vtima.
As solues para o intermedirio podem ser separadas em duas formas preventivas:
desativa o IP-directed broadcast no router, e configurar o sistema operativo por forma a evitar
responder a pedidos ICMP enviados para o endereo broadcast.
A proteo do lado da vtima, mais difcil de encontrar soluo, pois necessrio
arranjar uma forma de evitar receber um grande nmero de resposta a echo ICMP enviados para
um endereo broadcast.
SYN Flood
Este tipo de ataque realizado quando o atacante deliberadamente viola a three-wayhandshake, e abre uma elevada quantidade de meias ligaes TCP/IP.
Detalhes
Sistemas operativos: Maior parte dos sistemas operativos e routers
Protocolos/Servios: IP
75
um ataque que tem impacto na maioria dos sistemas operativos pois tem em
considerao a ligao fivel TCP/IP, atravs da abertura de um elevado nmero de meias
ligaes TCP/IP.
Qualquer sistema ligado internet, e disponibilizando uma rede TCP (tais como um
servidor Web, FTP, servidor email, routers, etc.), encontra-se sujeito a este tipo de ataque. As
consequncias deste tipo de ataque pode variar dependendo do sistema no entanto o ataque
baseia-se num procedimento fundamental para o protocolo TCP/IP.
Descrio Detalhada
Quando um sistema cliente tenta estabelecer uma comunicao com um sistema que
fornece o servio pretendido, o cliente e o servidor trocam uma srie de mensagens conhecidas
por o three-way-handshake. Esta tcnica aplica-se a todas as ligaes IP - telnet, web, echo, etc.
O cliente comea por enviar uma mensagem de sincronizao SYN ao servidor. O servidor
recebe a mensagem e de SYN e faz o acknowledge da mesma enviando ao cliente uma
mensagem SYN/ACK. O cliente finaliza o procedimento de estabelecimento da ligao
enviando ao servidor, e aps receber o SYN/ACK responde enviando uma mensagem de ACK.
76
A localizao do atacante mais uma vez difcil de saber, pois as meias ligaes so
realizadas forjando o endereo IP de origem, com endereos IP's de hosts que no
esto online. Desta forma no possvel identificar o agressor.
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
{ Message( NULL, "Cpu Hog", MB_OK);
SetThreadPriority( GetCurrentThread(),
THREAD_PRIORITY_TIME_CRITICAL);
while(1);
/nunca aki chegar
return 0;
}
Dado que um ataque j bastante conhecido e explorado, o cdigo fonte est disponvel em:
Cdigo fonte do Synflood.c: http://www.hackersclub.com
Cdigo para Synful.c e synk4.c SYN flooders: http://www.anticode.com
Como se proteger?
Atualmente no existe uma soluo consensual para este problema, devido atual
tecnologia IP. No entanto uma correta configurao do router e da Firewall podem reduzir a
probabilidade de um ataque ser prejudicial
Um router ou firewall pode bloquear ou limitar este tipo de ataque, permitindo um
nmero limitado de meias ligaes que podem estar ativas durante um determinado tempo. Por
exemplo, se um servidor apenas consegue gerir 50 ligaes, ento o router dever bloquear s
20 ligaes. No entanto esta soluo no perfeita pois utilizadores legtimos podem ser
bloqueados.
Utilizando o comando netstat possvel verificar o nmero de meias ligaes pendentes
por forma a detectar um ataque.
Linux e Solaris apareceram com uma ideia para evitar estes ataques de SYN flooding,
conhecida por SYN cookies. Funciona da seguinte maneira, depois que a fila do sistema comea
a ficar cheia de meias ligaes, para de armazenar a informao numa fila. E f-lo, ativando
77
uma sequncia inicial de nmero em funo do endereo IP de origem. Desta forma se for um
ataque de SYN flood, no ter sucesso uma vez que a mquina no ser sobrecarregada com
meias ligaes, pois no ficam armazenadas na fila. Se for uma ligao legitima, ento a terceira
parte da ligao concluda, e o servidor verifica o nmero da sequncia, menos um, e corre a
informao atravs da hash. Se eles coincidem, ento a ligao completada, se a
informao hash no coincidir, ento eliminada.
Mais informao
http://www.cert.org
http://www.hackersclub.com
http://www.anticode.com
http://www.cisco.com
CPU HOG
Este tipo de ataque dirigido a crashar uma mquina NT, levando exausto de todos
os recursos.
Detalhes
Sistemas operativos: Microsoft NT
Protocolos/Servios: Application priority levels
Descrio Detalhada
No Windows NT, quando uma aplicao corre, tem um nvel de prioridade. Quanto
maior o nmero, maior a prioridade. As aplicaes no Windows podem definir o seu nvel de
prioridade. Aplicaes a correr em modo de Administrador podem definir o nvel de prioridade
at 32, aplicaes com privilgios de utilizador podem definir nveis de prioridade at 16.
78
Programa fonte:
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
{ Message( NULL, "Cpu Hog", MB_OK);
SetThreadPriority (GetCurrentThread (),
THREAD_PRIORITY_TIME_CRITICAL);
while(1);
/nunca aqui chegar
return 0;
}
79
Como se proteger?
Para proteo basta aplicar os mais recentes patches e Service Packs da Microsoft.
Mais informao
http://www.microsoft.com
http://neworder.box.sk
Win Nuke
Este tipo de ataque passa pelo envio de band data a um sistema Windows. Band data
so pacotes que no tem nada a ver com o que o SO estava espera de receber naquela porta
especifica.
Detalhes
Sistemas operativos: Microsoft
Protocolos/Servios: porta 139, NetBIOS
Um ataque a nvel da rede, contra hosts com o objetivo de negar o servio. O atacante
envia band data para a porta 139, NetBIOS, e como so dados que o host no est espera, leva
a que a mquina pendure ou crash.
Descrio Detalhada
Os pacotes IP contm flags por forma a comunicar de como o pacote deve ser tratado
pelos routers ou processado pelos computadores. As mais comuns, so:
- SYN - Sincronizao, usada no estabelecimento da comunicao
- ACK - aceitao, acknowledge.
- URG - urgente, dados urgentes, tais como OOB (out of band data)
O atacante envia vtima, comando especiais TCP/IP conhecidos por OOB para a porta
139 de um computador a correr o Windows. Com um programa como o WIN Nuke o atacante
apenas precisa de digitar o endereo IP da vtima e depois carregar em nuke e j est. Quando
os utilizadores so 'nuked' o seu computador exibe o tradicional ecr azul.
80
Programa fonte:
#!/usr/bin/perl
use IO::Socket;
IO::Socket::INET
->new (PeerAddr=>"xxx.xxx.xxx.xxx:139"
->send("Adeus", MSG_OOB);
Como se proteger?
Para proteo basta aplicar os mais recentes patches e Service Packs da Microsoft.
Mais informao
http://www.cert.org
http://hackersclub.com
http://net.security.org
http://www.microsoft.com
RPC Locator
Este tipo de ataque faz com que o CPU da vtima trabalhe a 100%, passando pelo envio
de dados para a porta 135.
Detalhes
Sistemas operativos: Microsoft NT
Variantes: Inetinfo (porta 1031) e DNS (porta 53)
81
Descrio Detalhada
O atacante far telnet <endereo ip da vtima> 135 neste caso estar a ligar-se porta
135 e digitando aleatriamente ou lixo que o servio no esteja espera, o atacante pode levar
a que o sistema fique confuso e utiliza 100 do processador para tentar resolver os pedidos. Nesta
altura o atacante desligar a ligao pois o ataque foi bem sucedido. Para recuperar do ataque
o administrador ter que fazer reboot da mquina.
Variante do ataque
Este tipo de vulnerabilidade tambm se encontra presente se o atacante fizer o mesmo
porta 1031 (servio ISS, inetinfo.exe) ou ao servio DNS (dns.exe porta 53). Em ambos os
casos os servios param de responder e a mquina necessita de ser reiniciada.
Como se proteger?
Para proteo basta aplicar os mais recentes patches e Service Packs da Microsoft.
Mais informao
http://www.njh.com/latest/9701/970125-01.html
http://www.securityfocus.com
http://www.pancreas.com/wraith/hacking/cpuattacks.htm
http://www.ntsecurity.net/security/100CPU.htm
http://www.microsoft.com
Jolt2
Este tipo de ataque causa um DoS atravs do envio de um nmero elevado de fragmentos
IP idnticos.
83
Detalhes
Sistemas operativos: Windows95/98/NT4/2000, Be/OS 5.0, Cisco 26xx, Cisco 25xx,
Cisco 4500, Cisco 36xx, Network Associates Gauntlet, Webshield, Firewall-1 da CheckPoint
no Solaris, NT, Nokia FW, Bay router (Nortel) firewall, e mais....
O Jolt2 um programa que permite a utilizadores remotos espalhados pelas diferentes
redes, enviar pacotes IP especificamente fragmentados para DoS por forma a atacar mltiplos
sistemas operativos em que colocam o processador da mquina da vtima a 100% por forma a
tentar processar pacotes IP ilegais.
Este ataque que utiliza pacotes IP fragmentados idnticos, provocam que a mquina
remota pendure durante o ataque. A CPU fica exausta a 100% do seu tempo de processamento
ao tentar processar os pacotes IP, leva a que tanto a NIC bem como o GUI fique parado.
Descrio Detalhada
O site http://packetstormsecurity.nl tem a descrio de uma variao deste tipo de
ataque, o Jolt2mod.c. uma modificao simples ao Jolt2 que possui uma limitao em termos
de taxa de processos simultneos. recomendado correr vrios processos do Jolt2 em direo
ao alvo.
de notar como nos ataques anteriores que este tipo, apenas serve para que a mquina
fica inativa durante o ataque, no podendo aceder aos dados ou modificar privilgios, no entanto
uma boa ferramenta para obrigar um administrador incauto a fazer o shutdown a uma mquina
correndo dessa forma um processo previamente instalado por um atacante. Desta forma como
determinados servidores esto configurados para fazerem apenas o shutdown em modo local,
pode-se contornar esta segurana.
De volta a este tipo de ataque, o Jolt2 depende da fragmentao dos pacotes IP, em que
os datagramas so divididos em pequenos pacotes de dados durante o transito. Como o tamanho
mximo de uma frame varia de rede para rede, a fragmentao pode ser necessria pois toda a
arquitetura de rede efetua ou agrupa os dados em grupos chamados de frames. A fragmentao
ocorre sempre que um datagrama IP entra numa rede em que o tamanho mximo da frame
mais pequeno que o tamanho do datagrama. Neste momento, os datagramas so divididos em
fragmentos. O pacote fragmentado viaja separado dos restantes at ao destino. Ento o
computador destino, recebe os fragmentos e faz a re-assemblagem ou remontagem.
84
Como se processa
O acknowledgment de um pacote reportando um tamanho maior que o tamanho efetivo,
uma ocorrncia normal. Isto acontece sempre que um pacote truncado durante o transporte.
Como o header de 20 bytes, a quantidade dos dados 48 bytes devido ao tamanho total ser
de 68. Como o offset de 65520, e o tamanho IP dos dados 48 d 65568, resultando que o
tamanho IP ultrapassa o permitido que 65535. Notar, que os dados enviados (9 bytes) no
provocam overflow. Fragmentos so marcados como sendo "last fragments".
http://packetstorm.security.com/0005-exploits/jolt2.c
85
Como se proteger?
Nas firewalls do tipo stateful packet-filtering, o pacote falha os testes de integridade. Se
a firewall possui uma funcionalidade de re-assemblagem do pacote, ento no dever fazer
o foward de um nico pacote pois no existem fragmentos vlidos que precedam a sequncia
do ataque. Se a firewall mapear fragmentos para abrir as ligaes, dever detectar que no existe
nenhuma ligao aberta para este pacote em particular pelo que o ir abandonar.
Em firewall do tipo proxy, a funo proxy nunca deixar passar este tipo de padro de
ataque para uma rede protegida. No entanto se um proxy firewall estiver a correr sobre um
sistema operativo vulnervel, e no possui a sua prpria camada de rede (caso da MSFT que
fia-se na sua IP stack), o ataque pode causar um DoS contra a prpria firewall, levando a crashar
a prpria rede.
Em qualquer tipo de firewall, se a firewall fizer a re-assemblagem dos fragmentos de
um modo incorreto (mais uma vez por confiar na stack da MSFT por exemplo), ficar
vulnervel ao ataque qualquer que for o tipo de firewall utilizada.
Todos os fabricantes produziram patches para a os seus produtos, sugerindo solues para alm
da adopo dos patches.
No caso da Gauntlet, recomendado negar qualquer ligao porta 8999 da firewall.
Para a CheckPoint aconselhado que o log consola esteja desativado. Microsoft sugere a
instalao de um patch. Todos os router devero filtrar os fragmentos se possvel.
No caso de utilizar um IDS (Sistema Detector de Intruses - Intrusion Detection
System), dever ter a certeza que se encontra atualizado com os ltimos patches. No caso do
Snort existe uma regra especfica para os pacotes fragmentados. No caso de mquinas sensveis,
dever-se- adoptar por um IDS host based (ver o trabalho sobre o Snort) e ser bastante duro no
que respeita aos sistemas comeando por fechar todos as portas no utilizadas.
Mais informao
http://www.packetstorm.security.com
http://www.antionline.com
http://www.sans.org
http://packetstorm.security.com/DoS/jolt2mod.c
http://home13.inet.tele.dk/kruse/jolt2.txt
86
Bubonic
Este tipo de ataque realizado contra o Windows 2000 e certas verses do Linux
(funciona contra um Ultra5 a correr RedHat Zoot). O funcionamento passa pelo envio aleatrio
de pacotes TCP com parmetros aleatrios com o objetivo de aumentar a carga da mquina alvo
por forma a provocar o crash.
Detalhes
Sistemas operativos: Windows 98 e Windows 2000
Protocolos/Servios: IP&TCP
Escrito por: Andy Siske
O Bubonic utiliza a stack TCP/IP para realizar o ataque de DoS. O IP significa que os
dados viajam encapsulados pela internet, um protocolo orientado para datagramas,
conectionless, e que no se preocupa com a ligao. O header opera, no modelo OSI, ao nvel
da camada de network, e contm diversos componentes por forma a assegurar que so entregues
ao host apropriado.
O TCP por sua vez, um protocolo orientado ligao e utiliza uma sequncia de
nmeros de acknowledgment e controlo de fluxo por forma a assegurar que os dados so
entregues de forma correta. O TCP opera a nvel da camada do transporte (modelo OSI), o
header contm as portas de destino e de origem, bem como uma sequncia de nmeros de
acknowledge. Como o TCP no contem os endereos de destino e de origem, o TCP tem que
ser encapsulado dentro do IP datagrama por forma a chegar ao destino. Este por sua vez ainda
encapsulado numa frame Ethernet (no caso de ser uma rede ethernet), que opera ao nvel da
camada Data link do modelo OSI. Tudo isto transmitido em sries de bits que so enviados
atravs da camada fsica do modelo OSI. Recomendo a leitura das especificaes TCP
emhttp://www.rfc-editor.org em que o RFC0791 lida com o IP, enquanto o RFC0761 lida com
o TCP.
Descrio variante
Todos os DoS tem como objetivo a degradao do sistema que est a atacar. A respeito
da stack TCP/IP muitas ferramentas tem sido desenvolvidas ao longo dos anos, tendendo a
explorar as fases do SYN, SYN/ACK e o ACK. Outras implementam tcticas como o envio de
fragmentos mal formados, numa tentativa de crashar o sistema, outros mais rudes, enviam
87
Como se processa
O Bubonic uma ferramenta relativamente simples, que ainda d ao atacante a
possibilidade de fazer o spoof do endereo IP com a esperana de no ser detectado, escondendo
a sua identidade no de outro computador.
Uma pesquisa na Internet revelou a existncia de vrios web sites contendo o cdigo fonte do
Bubonic para realizar o download.
Para executar basta:
Size: tamanho do pacote que no dever exceder 1024, por forma a permitir extra info
header pelos routers.
number: nmero de pacotes a enviar.
No caso de uma mquina Windows 98, a mquina para de imediato, e mesmo fazendo
o reboot, mal ela se liga rede fica imediatamente parada. A nica forma a impedir ramificaes
do ataque desligando-o da rede ou parar o ataque rede de imediato.
O bubonic transmite um datagrama IP que contem 20 bytes de dados aleatrios. Outra
complicao que o bubonic envia um elevado nmero de pacotes sem se preocupar com as
colises, levando a que mquinas situadas no mesmo segmento de rede, mesmo que no
afetadas pelo programa, vem a sua performance afetada como resultado da elevada taxa de
colises.
Como se proteger?
Uma forma de se proteger, contra um ataque deste gnero com origem no exterior, passa
pelo uso do NAT (Network Address Translation). Torna a um atacante do exterior,
88
Detalhes
Sistemas operativos: Windows NT, Me, 9x
Protocolos/Servios: TCP/IP, porta 139
Descrio
Se um utilizador mal intencionado envia uma inundao de pacotes TCP/IP
especialmente-malformados para o computador da vtima na porta 139, duas coisas podem
acontecer. A inundao pode paralisar o recursos de rede, no computador afetado, impedindoo de responder aos pedidos dos clientes, quando o ataque para, volta a funcionar normalmente.
Segundo o sistema pode pendurar at que seja feito o reboot mquina.
Como se processa
Qualquer programa capaz de gerar mltiplos pacotes fragmentados TCP/IP para um alvo
especifico toma partido desta vulnerabilidade.
Como se proteger?
Podem ser usadas as seguintes tcticas por forma a prevenir estes ataques:
1. Usar um bloqueador de portas para bloquear a porta 139. No caso de firewalls
pessoais extremamente fcil de o fazer.
2. Desativar o servio no servidor File/Print sharing
3. Aplicar o patch da Microsoft para o SO.
89
Detalhes
Sistemas operativos: Sun Solaris 8.0, Sun Solaris 7.0, Sun Solaris 2.6, Windows NT 4.0
e 2000, HP-UX 10.20 e 11.0.
Protocolos/Servios: SNMP, HP Openview Network Node Manager 6.1
Descrio Detalhada
Se um pedido GET especialmente construdo, com o tamanho de 136 bytes for enviado
para os servios web na porta 80 atravs do interface Overview5 CGI, o servio SNMP ir
crashar. Esta vulnerabilidade, depende dos dados entrados, e permite a execuo arbitrria de
cdigo por um utilizador no autorizado.
Como se processa
Qualquer Web browser pode ser utilizado com a string apropriada.
Cdigo fonte
Existe o seguinte pseudo cdigo:
http://target/OvCgi/OpenView5.exe?Context=Snmp&Action=Snmp&Host=&0id=<string de
136 bytes>
Como se proteger?
Bastar aplicar os patches apropriados ao sistema operativo onde o HP Openview se
encontra instalado.
http://ovweb.external.hp.com:80/cpe
Mais informao
http://www.securityfocus.com
90
NetScreen Firewall
Um utilizador no autorizado pode realizar um DoS contra a Firewall NetScreen. Ao
fazer um pedido URL ao WebUI, que est disponvel na porta 80, far a firewall crashar. Tornase necessrio fazer o restart do servio para recuperar a funcionalidade normal.
Detalhes
Sistemas operativos: NetScreen OS 2.5r1, NetScreen Screen OS 2.1r6, NetScreen
Screen OS 2.10r3, NetScreen Screen OS 1.73r1
Protocolos/Servios: HTTP, TCP/IP
Descrio Detalhada
Se o pedido do URL ultrapassar os 1220 bytes, uma firewall NetScreen ir crashar
Cdigo fonte
Existe o seguinte pseudo cdigo:
Como se proteger?
Bastar aplicar os patches apropriados ao sistema: http://www.netscreen.com
Detalhes
Sistemas operativos: Sun Solaris 2.6 e 2.5.1
Protocolos/Servios: CheckPoint Firewall-1 4.1 (SP3, SP2)
Descrio Detalhada
91
Cdigo fonte
Este ataque pode ser levado a cabo, utilizando um programa capaz de gerar IP's
denominado de SynK4.c
Como se proteger?
No existem patches disponveis para esta vulnerabilidade, no entanto se executar o
comando:
Mais informao
http://www.securityfocus.com
Targa
Na sua terceira verso o Targa um programa que pode correr vrios ataques de DoS
diferentes.
Escrito
por
Mixter
pode
ser
feito
download
partir
de:
http://packetstormsecurity.nl/ ou de http://www.rootshell.com
O que Mixter fez, foi pegar no cdigo de cada uma das vulnerabilidades e colocar num
nico programa. O atacante tem a opo de lanar um tipo de ataque individualmente, ou ento
se quiser ser sdico, pode lanar toda a artilharia pesada contra a vtima. Desnecessrio ser
referir que o Targa um programa extremamente perigoso, podendo fazer graves mossas na
rede de contra quem estiver usando, o seu uso deve ser feito s quando devidamente autorizado.
93
Para instalar dever-se- compilar e para tal necessrio possuir as librarias arpa, netinet e sys
em C instaladas.
As opes para correr so vrias:
Esta uma das muitas ferramentas utilizadas na negao de servio. Bastar para tal
consultar alguns dos sites indicados para se perceber as ferramentas postas disposio.
Estrutura robusta
Quanto mais redundante e robusta a estrutura for, melhor. Se uma empresa tiver no seu
site um fator crtico para a empresa, e estiver dependente de um router, com apenas uma ligao
net, e o servidor web a correr num nico server, ento certo que mais cedo do que o previsto
ir ter problemas. Tudo depende do dinheiro que a empresa estiver disposta a investir, depois
de uma anlise realista ao risco envolvido que determinadas opes tero para a companhia. Se
94
uma companhia achar que ficar um ou dois dias com o site em baixo tolervel, mas o servidor
de correio deve ser robusto deve tomar as suas opes.
Bloquear endereos IP
Depois que uma empresa tome conscincia de que se encontra sob ataque, dever tentar
identificar de imediato o endereo IP de onde o ataque est a partir. O problema que mesmo
que bloqueie o trfego no router externo, no entanto o router continuar inundado com tanto
trfego que os utilizadores legtimos no podero aceder rede. Assim logo que uma companhia
reconhea assinatura de um ataque, o administrador dever logo informar o seu ISP por forma
a bloquear os pacotes. Como os ISP's tem uma largura de banda muito superior, e mltiplos
pontos de acesso, podem bloquear o trfego hostil e fazer com que o trfego legitimo flua.
95
96
mais ou menos como um ataque de pizzas: mais uma vez a vtima tem um vizinho que
por qualquer motivo no gosta dele. Esse vizinho sabe que a vtima, no dia seguinte, tem uma
reunio importante no trabalho, ento e com requintes de malvadez, telefona a encomendar
comida chinesa, entrega de pizzas, encomenda de moblias, compras no hipermercado, tudo
para ser entregue s 23:00 dando a direo da vtima. s 23:00 a campainha da casa da vtima
assaltada por um engarrafamento de entregas de pizzas, compras, moblias, comida, etc., todos
a pedirem para serem pagos para entregarem a mercadoria. No entanto o atacante no visto
nas imediaes, est em casa a ver pela janela.
Este tipo de ataques incrivelmente difcil, seno mesmo impossveis de defender ou
prever. No ataque de negao de servio tradicional, a vtima capaz de discernir qual a origem
do ataque, e desligar ou rejeitar a ligao, bloqueando o acesso ao seu sistema o atacante. Num
DDoS, no existe uma origem s, o sistema dever rejeitar todas as ligaes, mantendo apenas
aquelas que ele sabe serem de confiana, no entanto os endereos de confiana podem ser
forjados (um pouco mais difcil mas possvel), e tambm no resulta numa rede pblica.
97
Internet com endereos IP estticos, que so usados como rampas de lanamento deste tipo e
no s, de ataques. Os servios noticiosos focam os ataques s grandes empresas, no entanto o
verdadeiro problema reside nos sistemas individuais. Um utilizador v a notcia de ataques de
DDoS a uma empresa como a eBay ou a Yahoo sem suspeitar sequer que se calhar o seu
computador um dos que est a participar no ataque.
Novamente uma das solues passa pela adopo de alertar os utilizadores para a
manuteno dos seus sistemas. De notar que mesmo que 99% dos utilizadores adoptassem
firewalls pessoais, ainda sobrariam alguns milhares de sistemas desprotegidos.
J li, e assisti a algumas conferncias acadmicas acerca de ataques DDoS, e o consenso
que no existe uma defesa em geral. Monitorizar continuamente a rede ajuda, assim como a
capacidade de mudar para sistemas de backup, routers e servidores. Por vezes, e mais
frequentemente do que seria desejvel, so explorados bugs particulares dos sistemas e que
entretanto j foi lanado o respectivo patch, mas no foi aplicado, pelo que a vulnerabilidade
pode ser explorada.
Mais uma vez repito, que o uso destas ferramentas so extremamente perigosas, pelo
que totalmente desaconselhvel o uso das mesmas numa rede no controlada por ns ou sem
autorizao.
Existem um manancial enorme de ferramentas disponveis na Net para lanarem ataques
de DDoS. Vrias podem ser encontradas em
http://packetstormsecurity.nl/distributed/
http://packetstormsecurity.nl/distributed/
existindo duas componentes. O mdulo cliente e o modulo servidor. O mdulo cliente a parte
que controla os servidores, e que d a ordem de aos servidores para atacarem recorrendo a uma
dada vulnerabilidade. O mdulo servidor corre em modo de escuta, listening, e aguarda os
comandos a partir do lado cliente. No site indicado possui ainda um texto referente ao futuro
dos ataques DDoS.
Para instalar o programa basta:
de seguido de
make all
Trinoo
Trinoo uma das primeiras ferramentas a ser criada, pelo que no tem as
funcionalidades do TFN2k. Como o Trinoo, em oposio ao TFN2k utiliza ligaes TCP/UDP,
torna-se fcil de detectar com um port scanning regular rede. As portas utilizadas so as
seguintes:
Com o Trinoo, os daemons residem nos sistemas que lanam o ataque, o master controla
os vrios sistemas daemon.
Em Agosto de 1999, uma rede Trinoo de 200 computadores deitou abaixo a rede da
Universidade do Minnesota durante dois dias. O programa pode tambm ser encontrado
em http://packetstormsecurity.nl/distributed/.
Stacheldraht
mais uma ferramenta de DDoS que combina as potencialidades do TFN2k e as do
Trinoo, com algumas funcionalidades extras, tal como a comunicao encriptada entre
componentes e a atualizao automtica dos daemons. Tal como o TFN2k, utiliza o ICMP e
UDP:
Prevenindo DDoS
Como no ponto 1.6 debrucei-me sobre os ataques de negao de servio, que se aplicam
tambm aos de negao de servio distribudos, o mtodo de ataque basicamente o mesmo,
inundar a vtima, pelo que as defesas que um administrador de rede dever adoptar devero ser
praticamente as mesmas, quer esteja a ser atacado por um nico computador ou por vrios.
Como um DDoS implica o uso de outros sistemas comprometidos, as empresas devero
ter o cuidado de manter uma poltica de segurana, por forma a evitar que os seus sistemas
participem em ataques de DDoS. Alm da regra j citada, de manter o mnimo de privilgios e
servios, existem mais alguns pontos que gostaria de focar:
1. Manter a rede segura e atualizada
2. Instalar sistemas de deteco de intruso (IDS) - ver trabalho sobre o SNORT
3. Utilizar as ferramentas do atacantes, scanners, etc
4. Correr ferramentas de controlo dos zombies.
101
Shareware
Shadow
Snort
Courtney
ISS RealSecure
Commercial
Axent NetProwler
102
Ferramentas de scanning
fundamental que um administrador de rede faa regularmente um scanning sua rede
por forma a detectar portas abertas nos sistemas e que no deveriam estar, inclusive guardar os
resultados numa base de dados para posterior comparao. No entanto o que se pretende
encontrar programas DDoS server instalados, e para tal possvel encontrar algumas
ferramentas que ajudam nessa tarefa:
Find_ddos: Tem diferentes verses e corre em vrios sistemas operativos. Tendo por
norte o nmero de ataques DDoS ocorridos, o governo dos Estados Unidos, desenvolveu esta
ferramenta, por forma a procurar quer a gente quer server. Faz o scanning de vrios OS podendo
detectar vrios programas de DDoS.
SARA (Security Auditor's Research Assistant): um detector de vulnerabilidades capaz
de detectar uma variedade de vulnerabilidades no sistema. No link a seguir apresento os
resultados referentes a uma auditoria a uma mquina Linux RedHat 7.2 (Fujitsu), e o resultado
a um Windows 2000 Server com os ltimos Patches. Resultados
103
RID - mais um detector de DDoS, e configurvel, pelo que pode ser atualizado pelo
utilizador.
Para mais informaes acerca das ferramentas para detectar DDoS basta ir
a http://packetstormsecurity.nl/distributed/.
de notar que estas ferramentas s funcionam, ou detectam os agentes, se estes
estiverem instalados nas portas por defeito.
104
Este programa assume que os agentes foram instalados nas portas por defeito, e defende
contra o ataques que se pode ver na imagem.
Concluso
Os ataques DoS e DDoS, podem provocar um estrago elevado e so difceis de proteger.
assim, vital, seno mesmo critico, que uma empresa com uma misso-critica ligada Internet,
possa perceber os riscos associados com o que ir enfrentar, e o que poder fazer para minorar
o ataque. necessrio que a empresa faa uma anlise de risco associado e define quanto
dinheiro est disposta a gastar na reduo do risco. Pois pelo que aqui foi descrito, muito fcil
a um atacante lanar um ataque, a empresa que est em risco, pelo que ter que criar os
respectivos mecanismos de defesa.
105
106
REFERENCIAS BIBLIOGRAFICAS
DEITEL, Harvery M.; DEITEL, Paul J.; et al.. XML: Como Programar. 1 ed. Porto Alegre:
Bookman, 2003.
SILBERSCHATZ, A., Galvin, P., and Gagne, G. (2001). Sistemas Operacionais Conceitos
e Aplicaes. Campus.
[TANENBAUM, 2003] Tanenbaum, A. (2003). Sistemas Operacionais Modernos, 2a edio.
Pearson Prentice-Hall.
PATTERSON, D. and HENESSY, J. (2005). Organizao e Projeto de Computadores.
Campus.
ALEPHONE. Smashing the Stack For Fun and Profit. Volume 7, edio 49. Novembro de
1996. Disponvel em <http://www.phrack.com/issues.html?issue=49&id=14>. Acesso em:
maio de 2015.
TENOUK. Stack-based Buffer Overflow Vulnerability and Exploit Experimental
Demonstration, 2008.
Definio de SQL Inject Disponvel em http://www.w3schools.com/sql/sql_top.asp. Acessado
entre 05-05-2015 a 09-05-2015.
Definio e defesa de SQL Inject Disponvel em:
http://download.oracle.com/oll/tutorials/SQLInjection/index.htm. Acessado em 09-05-2015.
JUSTIN CLARKE. SQL Injection Attacks and Defense- First Edition: Winner of the Best
Book Bejtlich Read Award. 255 Wyman Street. Waltham. MA 02451.USA: Elsevier,2012
COELHO, S. P.; POLCINO MILIES, C. Nmeros: uma Introduo Matemtica. So
Paulo: Editora da Universidade de So Paulo, 2000.
COUTINHO, S. C. Nmeros inteiros e criptografia RSA. Srie de Computao e Matemtica
n. 2, IMPA e SBM, segunda edio (Revisada e ampliada), 2000.
HEFEZ, A. Elementos de Aritmtica. Sociedade Brasileira de Matemtica, 2005.
HOWARD, Michael; LEBLANC, David. Escrevendo Cdigo Seguro. 2 ed. Porto Alegre:
Bookman, 2005.
HOWARD, Michael; LEBLANC, David. Escrevendo Cdigo Seguro. 2 ed. Porto Alegre:
Bookman, 2005.
107