Académique Documents
Professionnel Documents
Culture Documents
Joinville
2012
Ildomar Gomes de Carvalho Junior
Joinville
2012
Ildomar Gomes de Carvalho Junior
Aprovado em
BANCA EXAMINADORA
Guilherme Koslovski
Doutor
"It seems you’ve forgotten my very first
lesson, Doctor. When you open your
mind to the impossible, sometimes you
find the truth."
Walter Bishop
Agradecimentos
Agradeço primeiramente aos meus pais, não apenas pelo que fizeram e sacrificaram
por mim durante minha graduação, mas porque absolutamente tudo o que consegui até
hoje na minha vida foi por causa de vocês. Vocês me deram força e foram minha inspiração
até agora, e continuarão a ser por toda a minha vida.
Agradeço ao meu orientador Rafael Rodrigues Obelheiro pela paciência, pelo com-
panheirismo, pelos sábios conselhos e pelos puxões de orelha quando foram necessários.
Em cada e-mail trocado, cada encontro e cada reunião você conseguiu me fazer sentir que
as madrugadas que passei acordado fazendo este trabalho valeram a pena. Não consigo
imaginar um tutor melhor para me guiar durante o desenvolvimento deste trabalho.
Agradeço aos meus avós Angelo Brandalise e Cecília Menezes que sempre me mostra-
ram que a vida é o resultado muito trabalho e muito estudo. Meu único arrependimento
foi não ter concluído esta etapa da minha vida a tempo, para que vocês pudessem ver que
seus incentivos valeram a pena.
Agradeço aos [iTn] por me darem apoio, força e por não me deixar enlouquecer durante
estes anos de graduação. Obrigado por me escutar durante meus momentos de insanidade,
por aturar meus longos desabafos e pelo enorme incentivo que me deram para que eu nunca
desistisse.
Agradeço aos meus colegas de graduação pela ajuda mútua durante este período, em
especial ao Christian Juliano Pereira e a Gabriela Salvador Thumé. Juntos formamos
uma grande equipe e levarei para sempre comigo esse espírito de união e de parceria. Sem
todos vocês, estes anos seriam insuportáveis.
Agradeço também a todos os outros que fizeram parte desta etapa da minha vida e
que porventura não mencionei aqui. Professores, amigos, família, todos vocês foram peças
deste quebra cabeça bizarro.
Resumo
1 Introdução 8
2.5.1 Microcontroladores . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3 Reconhecimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.5.1 Cabeçalho IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.5.4 Fuzzing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.7 Ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.7.1 Nmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.7.2 Nessus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.7.3 Wireshark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.7.5 BED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.7.6 Scapy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4 Resultados 44
4.3 Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.4 IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.5 UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.6 TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.6.1 Flooding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.7 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.7.2 Flooding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.7.4.2 Telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.7.4.3 DS Manager . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5 Conclusão 68
A Apêndice 71
Referências Bibliográficas 86
8
1 Introdução
Apesar de a comunicação via porta serial estar quase extinta nos atuais desktops e
notebooks (SALES, 2009), ela ainda é muito utilizada no meio industrial (CHEN; JIANG,
2009), como por exemplo em servomotores, módulos biométricos e sensores RFID (Radio
Frequency Identification). A conversão do sinal serial para Ethernet estende recursos,
facilitando a administração, monitoramento, comunicação e organização física e virtual de
dispositivos e máquinas que utilizam este meio de comunicação, o que acabou integrando
este dispositivo às indústrias (TIBBO, 2012b).
Aplicando este risco aos conversores e microcontroladores, caso uma brecha na segu-
rança dos equipamentos seja encontrada, o atacante poderia acabar tomando controle dos
dispositivos, alterando mensagens e comandos que são enviados por intermédio destes.
Ele também poderia utilizá-los para roubar informações que passam por eles ou mesmo
impedir o funcionamento dos módulos e conversores, desativando-os remotamente.
Estas falhas são perigosas, se considerarmos que muitas vezes esses dispositivos estão
inseridos em sistemas que deveriam ser à prova de erros. Por exemplo, em um sistema de
controle de acesso, a invasão a um conversor ou microcontrolador poderia fornecer acesso
indevido a uma pessoa não autorizada, roubo de informações sobre acesso a um setor
ou travamento do sistema, causando a negação do acesso a todos. Em um servomotor
conectado a um destes dispositivos usados, o atacante poderia usar brechas de segurança
para alterar os parâmetros de configuração, enviar comandos não autorizados ou causar
o travamento do servomotor. Visto que este tipo de motor é inserido em máquinas que
necessitam de alta precisão como máquinas de controle numérico computadorizado (CNC),
guilhotinas e prensas, erros e falhas podem levar à perda do produto fabricado, da máquina
na qual ele está inserido ou até oferecer riscos à integridade física de quem a opera.
Para este trabalho foi desenvolvida uma pesquisa sobre as principais técnicas de in-
jeção de ataques e das ferramentas disponíveis na Internet que melhor se adequarem ao
equipamento escolhido para testes, a saber, o módulo embarcado EM1206 fabricado pela
Tibbo. O motivo da escolha deste módulo é que a empresa Neoyama1 de Joinville, Santa
Catarina, o fornecerá para este trabalho.
No capítulo 3 é feita uma introdução sobre injeção de falhas e ataques, técnica utilizada
neste trabalho para descobrir vulnerabilidades no módulo Tibbo. Ainda neste capítulo é
feita uma descrição sobre técnicas de identificação de sistema operacional, varredura de
portas TCP/IP, ataques explorando pacotes malformados, ataques utilizando exaustão de
recursos e as ferramentas utilizadas para executar estas técnicas.
Por fim, no capítulo 5 são apresentadas as conclusões obtidas através deste trabalho.
1
http://www.neoyama.com.br
11
Sensores: São dispositivos que recebem estímulos do meio no qual estão inseridos e os
convertem em sinais elétricos que são utilizados para monitorar o estado de um
determinado processo (FUENTES, 2005).
Um SCI completo pode conter não apenas um, mas sim vários elementos de cada
tipo que se comunicam através de diversos protocolos de rede. Um sistema central de
monitoramento, o qual será descrito na seção 2.2.1, é o responsável por monitorar várias
vezes estes dispositivos durante o processo fabril (FALCO, 2002).
2.2 Componentes Chave de um SCI 13
Componentes de controle são hardwares que têm por objetivo executar as várias tare-
fas responsáveis por produzir o processo do sistema. Alguns dos principais componentes
de controle de um SCI são:
Unidade Terminal Remota (UTR): É uma estação remota que tem a função de con-
trolar sensores e atuadores. Pode ser utilizada pelos operadores do sistema para
realizar operações de diagnóstico e reparo no sistema (FALCO, 2002).
O SCM armazena e processa as informações que vêm dos UTRs e CLPs, e responde
a eles de acordo com estes dados processados. Os UTRs e CLPs então controlam os
processos localmente, de acordo com a ordem recebida do SCM (HART, 2004).
Além de obedecer ao controle feito pelo SCM, sensores e atuadores podem tomar
2.4 Sistemas de Controle Distribuídos (SCD) 16
decisões por si próprios, através de dispositivos eletrônicos inteligentes. Isso é importante
em sistemas onde o tempo de resposta é um fator crítico, visto que em sistemas distribuídos
podem ocorrer atrasos na transmissão de dados e até mesmo perda de comunicação.
SCDs são utilizados para controlar sistemas de produção que comunicam-se por meio
de uma rede local (HART, 2004) como refinarias de óleo, estações de geração de energia
elétrica e estações de tratamento de esgoto.
Esta seção é dedicada a explicar as características das firmware que dão a capacidade
dos módulos serem microcontroladores programáveis ou conversores serial-Ethernet, as
características específicas de cada módulo que são relevantes ao trabalho e os motivos de
o EM1206 ser escolhido.
2.5 Módulos Embarcados Tibbo 18
(a) Módulo Embarcado Tibbo (b) Módulo (c) Módulo Embarcado Tibbo
EM203 Embarcado EM1206
Tibbo EM500
Fonte: (TIBBO, 2012a).
2.5.1 Microcontroladores
Para armazenar os códigos criados pelo usuário, os módulos possuem uma memó-
ria não volátil tipo flash, e para armazenar suas configurações permanentes, como por
exemplo o endereço MAC, os módulos possuem uma memória não volátil do tipo EE-
PROM (TIBBO, 2012f). Assim como o número de portas de E/S, o tamanho destas duas
memórias varia de acordo com cada módulo.
Os módulos ainda possuem internamente um pequeno servidor web, o que lhes permite
hospedar pequenas páginas HTML e criar e manter sessões HTTP (TIBBO, 2012f). Estas
páginas podem ser criadas para monitoramento do estado dos dispositivos e também para
enviar comandos e dados aos módulos, e funcionam como IHMs dedicadas para aquele
módulo.
2.5 Módulos Embarcados Tibbo 19
Portas E/S 4 8 17
Memória flash Não informado 512 KB 1024 KB
Memória EEPROM Não informado 200 bytes 2 KB
Servidor WEB Sim Sim Sim
Comunicação Wi-fi Não Sim Sim
LCD e Teclado Não Não Sim
A tabela 2.1 resume as características dos módulos Tibbo mencionados neste trabalho.
Conforme pode ser observado através dela, o EM1206 é superior em todas as características
quando comparado com os módulos EM203 e EM500. Por este motivo ele foi escolhido
para o desenvolvimento deste trabalho.
2.5 Módulos Embarcados Tibbo 20
2.5.2 Conversores Serial-Ethernet
Dispositivos como CLPs, sensores RFID ou sensores biométricos são alguns equipa-
mentos que podem ser utilizados em sistemas SCADA ou DCS. Estes equipamentos, entre
outros não mencionados aqui, normalmente possuem comunicação serial, mas em sistemas
SCADA/DCS geralmente se baseiam em protocolos de rede, como Ethernet. Então, como
obter uma comunicação via rede a estes dispositivos? Uma resposta pode ser a utilização
de conversores serial-Ethernet como os fornecidos pela Tibbo. É por isso que é importante
conhecer o nível de segurança destes módulos, para que seja possível tomar medidas de
segurança quanto às limitações do equipamento.
Internet Protocol (IP): Protocolo da camada de rede utilizado para transmitir pacotes
de um dispositivo na rede (rementente) a outro dispositivo na rede (destinatário)
(KUROSE; ROSS, 2006).
Cliente: Quando neste modo, o módulo rejeita qualquer conexão de entrada, permitindo
apenas conexão de saída. Isto quer dizer que o módulo se conecta a outro dispositivo
através de um IP e uma porta pré-definidos pelo desenvolvedor.
Servidor: Quando neste modo, o módulo nunca tenta se conectar, ele apenas aceita
conexões vindas de outros dispositivos. O desenvolvedor pode aceitar conexões
vindas de qualquer dispositivo ou escolher qual IP pode se conectar ao Tibbo e por
qual porta eles irão comunicar-se, através das opções do módulo embarcado.
A injeção de faltas é uma técnica experimental que consiste em provocar faltas delibe-
radas em um sistema sob teste e observar suas respostas, analisando se as faltas injetadas
fazem com que o funcionamento do sistema desvie de sua especificação (ou seja, se o sis-
tema falha) (ARLAT et al., 1990), (CLARK; PRADHAN, 1995), (HSUEH et al., 1997).
O propósito da injeção de faltas é avaliar as propriedades de confiança no funcionamento
(dependability) (AVIZIENIS et al., 2004) do sistema.
A injeção de faltas é uma técnica que permite testar sistemas após a fase de desen-
volvimento, sejam sistemas em sua versão final ou protótipos (ARLAT et al., 1990). O
uso da injeção de faltas permite complementar outras técnicas, como modelagem ana-
lítica de confiabilidade, para obter uma validação mais completa do sistema (CLARK;
PRADHAN, 1995). A análise dos resultados observados em um estudo de injeção de
faltas permite compreender o comportamento do sistema em situações adversas e avaliar
a eficácia de seus mecanismos de proteção e recuperação, além de ajudar a identificar
eventuais deficiências que permitam que o sistema falhe (o que é primordial para que se
possa corrigi-las) (CLARK; PRADHAN, 1995), (HSUEH et al., 1997).
No contexto deste trabalho, foram injetadas faltas nos dispositivos Tibbo através da
rede, enviando tráfego malicioso com o propósito de avaliar a robustez e a segurança de
sua pilha TCP/IP.
2. Análise do grau de aleatoriedade dos números iniciais de sequência do TCP, que visa
avaliar a suscetibilidade a ataques de sequestro de conexões TCP (TCP hijacking)
(GONT, 2012);
3.3 Reconhecimento
Esta atividade não é de um ataque propriamente dito, porém é útil para descobrir
vulnerabilidades que poderão ser exploradas. Mas por que detectar o sistema operacional
do dispositivo? Segundo (LYON, 2009a), algumas das razões podem ser:
Softwares que detectam o sistema operacional de dispositivos têm uma base de as-
sinaturas com características específicas de diversos sistemas operacionais diferentes, em
especial as particularidades de como a pilha TCP/IP implementa aspectos deixados em
aberto ou ambíguos nas especificações dos protocolos. Por exemplo, o Nmap (LYON,
2009a), uma ferramenta conhecida que oferece esse tipo de detecção, envia vários pacotes
TCP e UDP para o dispositivo e então analisa as respostas que recebe do mesmo. A partir
destas respostas o Nmap consulta sua base de assinaturas e então decide qual provavel-
mente é o sistema operacional do dispositivo analisado. Por depender destas informações,
este tipo de software contém apenas informações sobre os sistemas operacionais mais
conhecidos, sendo difícil manter uma base de dados atualizada com todos os sistemas
operacionais existentes.
• A base de assinaturas dos softwares de detecção, além de ser atualizada pela própria
equipe de desenvolvimento, normalmente também é atualizada por informações que
os usuários enviam, portanto, podemos concluir que caso o sistema Tibbo OS seja
identificado, ao menos uma pessoa o analisou. Também é possível que esta pessoa
tenha procurado por alguma vulnerabilidade, encontrado e tenha feito algum tipo
de registro sobre ela.
Devido a estas possibilidades, é interessante que seja feita uma análise de como um
módulo embarcado com o sistema Tibbo OS é reconhecido por softwares identificadores
de sistemas operacionais.
Existem serviços de rede que vêm instalados por padrão em vários dispositivos e que
são comuns à maioria destes, por exemplo, o serviço de Telnet tem por padrão estar
disponível na porta TCP 23. A varredura de portas é uma técnica que tem por objetivo
detectar serviços disponíveis em um determinado alvo. Ela consiste em enviar tráfego
para diferentes portas TCP/UDP em um host com o intuito de descobrir quais delas
estão sendo usadas por servidores (portas abertas) e quando não estão em uso (portas
fechadas).
Determinar quais serviços estão disponíveis pode ser utilizado para dizer ao atacante
o que atacar. Para isso, ele envia pacotes ao alvo e, de acordo com a resposta recebida,
3.3 Reconhecimento 28
é possível descobrir se um serviço está disponível (GATES et al., 2006). Esta seção tem
por objetivo descrever quais são as principais técnicas de varredura de portas TCP/IP.
1. O cliente envia para uma porta específica do servidor um segmento SYN, que contém
o valor do seu ISN (número inicial de sequência). Resumidamente, o ISN é um
número gerado aleatoriamente na criação de um socket TCP e que é responsável,
entre outras coisas, por ordenar os pacotes TCP (GONT, 2012).
2. Caso a porta do servidor esteja aberta, ele envia um segmento SYN-ACK, que
contém o valor do ISN gerado pelo próprio servidor e o ACK, o valor do SYN
enviado pelo cliente, somado de 1. Caso a porta esteja fechada, o servidor responde
com um pacote RST.
3. Por fim, caso a porta esteja aberta, o cliente envia ao servidor um segmento ACK,
o qual será o valor do ISN do servidor somado de 1.
O processo de handshake em uma porta aberta é mostrado pela figura 3.1, enquanto
o processo de handshake em uma porta fechada é mostrado pela figura 3.2.
As sequências de mensagens do protocolo TCP são usadas como base para a descoberta
de quais portas estão em uso por um serviço (abertas) e quais não estão sendo utilizadas
(fechadas).
Varredura SYN: Neste modo de varredura o atacante envia um pacote SYN para o alvo,
como se ele estivesse querendo realmente estabelecer uma conexão com ela. Caso a
porta com a qual o atacante tentou conectar-se esteja aberta, a vítima responderá
com um SYN-ACK e então o atacante responderá automaticamente com um pacote
RST, fechando a conexão. Caso a vítima responda com um pacote RST, isso indica
que esta porta está fechada (ARKIN, 1999).
Visto que para este trabalho temos acesso direto aos dispositivos, um varredura SYN
é o suficiente para descobrir quais portas estão abertas e quais estão fechadas. No entanto
em outras situações, dispositivos podem estar protegidos por firewalls que podem filtrar
este tipo de varredura. Para casos assim, existem outras técnicas que exploram outras
vulnerabilidades do TCP, descritas por (ARKIN, 1999), a saber, varreduras ACK, FIN,
XMAS e NULL.
Diferente do protocolo TCP, no protocolo UDP não é estabelecida uma conexão entre
cliente e servidor antes de começar a transferência dos dados, nem há uma verificação no
envio destes. Quando algo necessita ser transmitido, o cliente simplesmente envia o dado
para uma porta específica do servidor, sem garantia de que os dados foram recebidos
corretamente. Por este motivo, as mesmas características exploradas pelos varreduras
TCP não podem ser exploradas no UDP.
Devido a este fator, outra abordagem deve ser utilizada para realizar a varredura
de portas UDP. Neste trabalho é utilizada a proposta sugerida por (MESSER, 2008):
explorar o protocolo ICMP.
A característica a ser explorada do ICMP é a que foi citada por último. Por padrão,
quando um pacote UDP é enviado para uma porta de um host que está fechada, o emissor
recebe uma resposta ICMP do tipo port unreachable. Este comportamento é apresentado
pela figura 3.3.
Caso uma porta UDP esteja aberta, poderão acontecer duas coisas: a primeira é que
não haverá qualquer resposta para o emissor, apresentada pela figura 3.4, e a segunda
é que a aplicação que recebe este pacote pode responder ao emissor com algum tipo de
dado, apresentada pela figura 3.5. Vale a pena lembrar que esta resposta não provém do
protocolo UDP, mas sim porque a aplicação foi programada de modo que respondesse a
3.3 Reconhecimento 31
pacotes UDP.
Figura 3.4: Varredura UDP em uma porta aberta que não responde.
Um atacante pode interceptar dados de uma conexão TCP legítima entre dois dispo-
sitivos que comunicam-se em rede ou injetar dados nesta conexão TCP, adivinhando o
número inicial de sequência (ISN) de um dos dispositivos. Quanto mais fraco o grau de
aleatoriedade de geração do ISN, mais fácil este ataque é executado (POTHAMSETTY;
BALINSKY, 2003).
Visto que estes pacotes estão errados ou malformados, não faz sentido que eles sejam
processados pelo receptor, devendo ser descartados o mais breve possível, sem que ocupem
muito dos recursos que são destinados aos pacotes corretos. Porém, nem sempre é isso
o que acontece. Algumas implementações podem acabar não sabendo como tratar estes
pacotes errados, causando travamentos ou outras reações indesejadas no sistema.
Esta seção tem por objetivo destacar quais características dos protocolos IP, TCP
e UDP podem gerar este tipo de vulnerabilidade e que foram avaliadas nos módulos da
Tibbo.
3.5.1 Cabeçalho IP
Um pacote IP é formado de duas partes: uma são os dados a ser enviados, enquanto
a outra é seu cabeçalho, que são informações que serão utilizadas para garantir que um
pacote seja transmitido de um host para outro. Além disso, o destinatário poderá utilizar
estas informações para que os dados possam ser processados de forma correta. O formato
3.5 Pacotes Malformados 33
deste cabeçalho é apresentado pela figura 3.6.
Alguns destes campos, caso modificados, podem fazer com que o pacote não possa
ser entregue ao seu destino, enquanto outros podem ser modificados com o objetivo de
confundir o receptor, sem prejudicar a transmissão. Nesta seção, descreveremos as opções
do cabeçalho que se encaixam neste segundo caso, conforme (BYKOVA; OSTERMANN,
2002).
Checksum: O checksum serve para detectar erros na transmissão de pacotes, sendo que
um pacote com o valor do checksum incorreto deve ser imediatamente descartado.
Quando o descarte não ocorre deste modo, recursos do dispositivo, como memória e
processamento, são consumidos desnecessariamente, o que pode causar o travamento
do sistema.
Flag: Este campo do cabeçalho IP possui 3 bits. O bit 0 é reservado para uso futuro que,
por padrão, deve estar sempre com o valor zero. O bit 1 diz se um pacote pode ser
fragmentado ou não. Por fim, o bit 2 indica se este pacote é o fragmento final de
um pacote fragmentado, ou não.
Caso seja necessário, um pacote IP pode ser fragmentado para que seu envio seja
facilitado, e então ele é remontado quando atinge seu destino. Segundo (KENNEY,
1996), o último pacote pode ser alterado para que seu tamanho exceda o tama-
nho tradicional. Visto que os pacotes IP são processados somente após todos os
fragmentos chegarem, o sistema pode sofrer um overflow no seu buffer.
Apesar de ser descoberto com o ping, pacotes TCP e UDP também podem ser ex-
plorados para que causem a mesma falha. O fato mais preocupante é que o atacante
necessita apenas saber o IP da vítima para que funcione, inclusive (KENNEY, 1996)
realizou este teste com sucesso onde o atacante estava em Berkeley, Califórnia e a
vítima em Londres, Inglaterra.
3.5 Pacotes Malformados 35
3.5.2 Cabeçalho TCP
Esta seção descreve quais características do cabeçalho TCP foram exploradas nos
testes realizados com os dispositivos Tibbo, seguindo a linha de raciocínio do artigo (BY-
KOVA; OSTERMANN, 2002).
Número das Portas: De acordo com (POSTEL, 1981c), a porta de origem ou destino
de um pacote TCP não pode ser zero. Pacotes com esta característica devem ser
imediatamente descartados.
Flags: Nem todas as combinações de flags TCP são aceitas segundo (POSTEL, 1981c).
Um pacote não pode conter as flags URG e PUSH ligadas se ele não contiver dados.
As combinações de flags SYN e URG ou SYN e PUSH também não são aceitas.
Estas combinações inválidas formam a varredura XMAS, citado na seção 3.1.2.1.
Bits Reservados: A especificação original do TCP, dada por (POSTEL, 1981c), reserva
seis bits para uso futuro, portanto por padrão devem estar setados como zero. Ape-
sar de existirem estudos para o uso destes bits, nenhum deles foi implementado e
por isso, configurar estes bits com valores arbitrários pode prejudicar certas imple-
mentações TCP que não sabem lidar com este tipo de caso.
3.5 Pacotes Malformados 36
Checksum: Sofre do mesmo problema dos checksums de pacotes IP, conforme explicado
na seção anterior.
Esta seção indica quais características de um cabeçalho UDP podem ser exploradas
por ataques realizados com pacotes malformados.
Número das Portas: Assim como os pacotes TCP não podem ter como porta de origem
ou destino a porta zero, segundo (POSTEL, 1980) um pacote UDP também não
pode.
3.5.4 Fuzzing
Fuzzing é uma técnica de injeção de falhas que tem por objetivo expor falhas em
aplicações inserindo nelas entradas mistas de dados válidos e inválidos (BANKS et al.,
2006).
Fuzzing requer três operações básicas: gerar entradas aleatórias ou inesperadas que
poderiam levar a aplicação a um estado inválido, injetar essas entradas na aplicação e,
por fim, observar se esta entrada causou algum tipo de falha à aplicação (BANKS et al.,
2006). Este fluxo é apresentado pela figura 3.9.
Mutação usa uma série de entradas válidas, que, por exemplo, podem ser extraídas
do uso normal da aplicação e então estas entradas são modificadas para que se obtenha
valores de entrada inválidos ou semi-inválidos (BANKS et al., 2006).
Na maioria dos sistemas, as entradas são dadas por arquivos, interface do usuário
e registros, porém qualquer parte do sistema que recebe dados é um candidato a falhar
ao receber dados inválidos. Para este trabalho o foco foi em aplicar técnicas fuzzing na
interface Ethernet de dois modos: fuzzing dos protocolos de base e de fuzzing de HTTP.
O motivo da escolha do protocolo HTTP para este ataque, é que ele é o único protocolo
da camada de aplicação que vem instalado de fábrica nos módulos embarcados Tibbo.
3.5 Pacotes Malformados 38
3.5.4.1 Fuzzing de Protocolos de Base
Cada protocolo tem um conjunto de parâmetros e uma estrutura que podem ser
testados, o mesmo é válido para os protocolos de rede de quaisquer dispositivos. Os
protocolos de rede são especificados através das Request for Comments, ou RFCs, que são
documentos considerados padrão para este tipo de protocolo.
Conforme foi apresentado nas seções 3.5.1, 3.5.2 e 3.5.3, os protocolos IP, TCP e UDP
possuem uma série de campos no seu cabeçalho que devem atender a certas especificações.
Casos os pacotes de rede que o dispositivo receba não atendam a estas especificações, os
mesmos devem ser descartados sem que isso cause uma falha crítica no sistema. Neste
trabalho foi utilizado o conjunto de ferramentas ISIC, o qual é apresentado na seção 3.7.4
para descobrir qual o comportamento do EM1206 diante deste tipo de teste.
Os módulos EM500 e EM1206 possuem uma página HTTP instalada por padrão para
a parametrização do conversor serial-Ethernet. Além disso, quando em modo de microcon-
troladores programáveis, todos os módulos da Tibbo citados neste trabalho possuem um
pequeno servidor WEB interno. Por estes motivos, foi testado o comportamento destes
dispositivos diante do fuzzing de HTTP através do software Bruteforce Exploit Detector
(BED), o qual é apresentado na seção 3.7.
As requisições HTTP são formadas por uma sequência de linhas de texto usando um
conjunto de caracteres ASCII. A primeira linha é chamada de linha de requisição e contém
três campos (KUROSE; ROSS, 2006):
3.6 Inundação de Pacotes 39
Método: O método indica qual o modo de envio dos dados, sendo que os métodos mais
utilizados são GET, POST e HEAD. Através do GET é solicitado que o servidor
envie ao cliente o objeto descrito no campo URL, o qual é descrito no próximo
item; o POST é frequentemente usado no envio de dados para o servidor quando
um usuário preenche algum formulário; e o HEAD é semelhante ao GET, onde o
servidor responde com uma mensagem HTTP, sem enviar o objeto solicitado.
Versão do Protocolo: Indica qual versão do protocolo HTTP está sendo utilizada nesta
requisição, sendo a versões 1.0 e 1.1 as mais utilizadas atualmente (KUROSE; ROSS,
2006).
As linhas seguintes são chamadas de linhas de cabeçalho, as quais não tem um nú-
mero específico, pois dependem dos requisitos da aplicação. Através delas o cliente envia
informações adicionais para o servidor, como por exemplo se a conexão é persistente, qual
navegador o usuário utilizou, qual o idioma que o cliente prefere receber as informações,
entre outros.
Para o protocolo HTTP os testes foram feitos com pacotes legítmos, através da fer-
ramenta BED descrita na seção 3.7.5. O resultado normal deste teste é que, quando o
3.7 Ferramentas 40
número de pacotes supera os recursos do servidor web, novos pacotes HTTP são ignorados
e o serviço é negado a outros hosts (LU; YU, 2006).
A figura 3.10 apresenta um exemplo de ataque HTTP Flood, onde o cliente envia
várias requisições do tipo GET, com o objetivo de consumir os recursos do servidor que
hospeda a página.
Visto que o termo flood é mais utilizado do que sua tradução para o português (inun-
dação de pacotes), deste ponto em diante será utilizado o termo em inglês.
3.7 Ferramentas
Para o desenvolvimento dos testes deste trabalho, certas ferramentas de busca de vul-
nerabilidades e de análise de pacotes de rede foram utilizadas. Este capítulo é responsável
por dar uma breve descrição destes softwares.
3.7.1 Nmap
3.7.2 Nessus
O Nessus é composto de diversos plugins, sendo que cada um destes representa uma
vulnerabilidade já conhecida e inserida no banco de dados oficial da ferramenta. Quando
o Nessus inicia seus testes buscando por vulnerabilidades, ele executa cada um dos plugins
selecionados pelo usuário e, ao final dos testes, gera um relatório quantitativo e qualitativo
das vulnerabilidades encontradas (ANDERSON, 2003).
Para este trabalho, o módulo EM1206 da Tibbo foi escaneado pelo Nessus utilizando
todos os plugins disponíveis, para que fosse possível descobrir se ele possui alguma dessas
vulnerabilidades conhecidas pelo software.
3.7.3 Wireshark
Suas ferramentas são: ESIC, que gera frames Ethernet; ISIC que gera pacotes IPv4;
ISIC6 que gera pacotes IPv6; TCPSIC que gera pacotes TCP para o protocolo IPv4;
TCPSIC6 que gera pacotes TCP para o protocolo IPv6; UDPSIC que gera datagramas
UDP para o protocolo IPv4; UDPSIC6 que gera datagramas UDP para o protocolo IPv6;
ICMPSIC que gera pacotes ICMP para o protocolo IPv4; ICMPSIC6 que gera pacotes
ICMP para o protocolo IPv6; e MULTISIC que gera pacotes multicast.
Todas as ferramentas geram pacotes de acordo com opções selecionadas pelo usuário.
Estas opções podem alterar o tamanho dos pacotes, a versão do protocolo utilizado,
checksums e a porcentagem de pacotes fragmentados, utilizando para isso valores que o
usuário deseja ou mesmo gerando valores pseudo-aleatórios. Após o usuário configurar os
parâmetros, o software envia estes pacotes modificados ao dispositivo testado e monitora
o comportamento do mesmo (POTHAMSETTY; BALINSKY, 2003).
Neste trabalho o conjunto de ferramentas ISIC foi utilizado para estudar qual o com-
3.7 Ferramentas 43
portamento dos sistemas embarcados Tibbo diante de ataques fuzzing dos protocolos
Ethernet, IP, TCP, UDP e ICMP, e de ataques de inundação de pacotes, ambos mencio-
nados no capítulo anterior.
3.7.5 BED
Algumas das vulnerabilidades que podem ser encontradas por ele são: buffer overflows,
overflow de variáveis inteiras, bugs de formato de strings, entre outros. Atualmente, o
BED suporta os protocolos FINGER, FTP, HTTP, SMTP, IMAP, IRC, LDP, PJL, POP,
SOCKS4 e SOCKS5 (DAMAYE, 2012).
O conversor serial-Ethernet EM1206 da Tibbo possui por padrão uma aplicação web
hospedada dentro do mesmo, para que o usuário possa configurar todos os parâmetros do
conversor. Visto que o BED pode fazer testes fuzzing do protocolo HTTP, ele foi utilizado
para buscar vulnerabilidades na implementação da aplicação web.
3.7.6 Scapy
Scapy é uma ferramenta open source escrita na linguagem Python por Philippe Biondi
que facilita ao usuário a construção, captura e análise de pacotes de rede, suportando um
número abrangente de diferentes protocolos (BIONDI, 2007).
O Scapy foi desenvolvido com o objetivo de que, a partir da sua flexibilidade, o usuário
possa montar exatamente os pacotes que ele queira, sem muitas restrições. Além disso ele
fornece informações bem completas. Por exemplo, enquanto algumas ferramentas dizem
"Esta porta está aberta"quando recebem um SYN-ACK, o Scapy informa exatamente o
que ocorreu, o pode ajudar a evitar falsos positivos (WEBER, 2011).
4 Resultados
Este capítulo é responsável por apresentar os resultados obtidos neste trabalho. As
próximas seções descrevem quais os protocolos de quais camadas da pilha TCP/IP foram
testados, como estes testes foram executados e quais foram os resultados que estes testes
forneceram.
Os protocolos analisados foram: Ethernet, IP, UDP, TCP e HTTP. A tabela 4.1
apresenta quais foram as vulnerabilidades encontradas em cada protocolo, assim como a
seção onde estão descritos os testes que as comprovam.
O segundo cenário utilizado é o da figura 4.2, onde há dois hosts: um host A, que
poderá ter o endereço IP 192.168.25.3 ou 192.168.25.4, dependendo do teste, e o host B
com o endereço 192.168.25.10, ambos conectados via Wi-Fi com o roteador 192.168.25.1.
Por fim, novamente temos o EM1206 com o IP 192.168.25.5 conectado ao roteador via
Ethernet.
Figura 4.3: Varredura de portas TCP e UDP do EM1206 com detecção de sistema ope-
racional, através no Nmap.
Este resultado mostra que o Nmap não conseguiu reconhecer o sistema operacional
Tibbo OS (TIBBO, 2012h), conforme previsto na seção 3.3.1. Além disso, a varredura de
portas mostra três TCP portas abertas: porta 23 a qual, ao contrário do que o Nmap diz,
4.3 Ethernet 47
não roda o serviço Telnet, mas sim um serviço que é melhor detalhado na seção 4.7.4.2;
porta 80, a qual roda o servidor web; e a porta 1001, que é a porta utilizada para conversão
serial-Ethernet. Esta última pode ser alterada pelo usuário para que seja a porta que ele
desejar.
4.3 Ethernet
Foram realizados dois testes para realizar a busca de vulnerabilidades neste protocolo,
sendo que o primeiro foi realizado com o software ESIC, descrito na seção 3.7.4 e o
ambiente de testes foi o apresentado pelo cenário 1 na figura 4.1.
Ao contrário das outras ferramentas do IPSIC (algumas delas são mostradas nas
próximas seções), o ESIC não possui a opção de especificar como os campos do cabeçalho
do protocolo analisado serão alterados, sendo que ele aplica fuzzing em todos os campos
possíveis do cabeçalho Ethernet, em uma taxa de dados de aproximadamente 6 MB/s. O
ESIC pode ser executado através da seguinte linha de comando:
Este teste foi repetido 10 vezes, sendo que em cada uma delas o ESIC foi executado
durante aproximadamente cinco minutos, porém o EM1206 não mostrou-se vulnerável aos
ataques fuzzing.
A RFC 1042 (POSTEL, 1988) especifica um tamanho mínimo para os quadros Ether-
net. Caso o conteúdo do quadro não preencha este tamanho mínimo necessário, devem
ser adicionados zeros a ele até que o quadro seja preenchido completamente. A vulnera-
bilidade chamada Etherleak acontece quando dispositivos de rede não implementam essa
RFC corretamente, sendo que os dados que preenchem esse espaço restante vêm de buf-
fers do sistema, como pedaços da memória do kernel, ou dados dos buffers de rede. Visto
que estes dados podem não ser filtrados, informações importantes podem ser transmitidas
abertamente (ARKIN; ANDERSON, 2003).
4.3 Ethernet 48
O módulo EM1206 da Tibbo possui essa vulnerabilidade. Foi verificado que, quando
uma requisição ARP é feita ao Tibbo, dados do buffer de rede são acrescentados ao quadro
Ethernet. Os próximos parágrafos descrevem o teste executado, onde foi possível obter
dados sigilosos a partir desta vulnerabilidade.
O teste que apresentou esta vulnerabilidade foi feito da seguinte maneira: utilizando
o cenário 2, apresentado pela figura 4.2, foram feitas requisições ARP do host A ao
EM1206. Estas requisições ARP foram feitas a partir do software Arping (HABETS,
2003), utilizando o seguinte comando:
Após terem sido iniciadas as requisições ARP, a página web de configuração do con-
versor foi acessada por um usuário legítimo no host B e então este usuário ficou navegando
no sistema, gerando um tráfego de rede.
Feito isso, no host A foi iniciada uma captura do tráfego de rede através do software
Wireshark, descrito na seção 3.7.3. A partir desta captura foi possível obter a senha do
conversor, que foi configurada como tst. A figura 4.4 mostra em destaque o momento
desta captura.
O ambiente de testes foi o apresentado pelo cenário 1 na figura 4.1. Os ataques fuzzing
utilizando a ferramenta ISIC, podem ser iniciados através do seguinte comando:
Nos primeiros testes, foi observado que o EM1206 parou de funcionar após o início
dos ataques. Notou-se também que, após cessados os ataques, o dispositivo não voltou
ao seu funcionamento normal, sendo necessário reiniciá-lo manualmente.
Visto que o fluxo de dados gerado pelo ISIC é relativamente alto (cerca de 4 MB/s),
surgiu a suspeita de que o módulo não estivesse travando devido aos ataques fuzzing, mas
sim devido a um ataque flooding executado pelo software. Para testar esta hipótese, os
testes foram repetidos limitando este fluxo para 1 KB/s. Para que isso seja possível, o
ISIC possui um parâmetro que limita o fluxo de dados: o parâmetro -m. O novo comando
executado foi:
Quando os testes foram repetidos dessa maneira, o EM1206 não travou, o que indica
que anteriormente o módulo havia travado devido a um ataque flooding.
Mais alguns testes foram executados, desta vez utilizando os parâmetros -F, -V e
-I: o parâmetro -F que tem a função de indicar a porcentagem de pacotes que serão
fragmentados, o parâmetro -V que indica a porcentagem de pacotes que terão um número
inválido de versão IP nos seus cabeçalhos e o parâmetro -I determina o número de pacotes
IP que terão o campo dos seus cabeçalhos, Tamanho do Cabeçalho, alterados.
Cada um destes parâmetros foi testado com os valores 25%, 50%, 75% e 100%. De to-
das as combinações possíveis de parâmetros e valores, 20 foram escolhidas aleatoriamente
4.5 UDP 50
e utilizadas nos testes, porém novamente o EM1206 não mostrou-se vulnerável aos ata-
ques fuzzing. Três exemplos de como estes parâmetros podem ser utilizados encontram-se
abaixo.
Com o resultado destes testes, a conclusão obtida foi que o protocolo IP do módulo
EM1206 não é vulnerável aos ataques fuzzing do ISIC, porém é vulnerável a ataques
flooding.
4.5 UDP
Para testar o protocolo UDP do EM1206, foi utilizado o software UDPSIC, apresen-
tado na seção 3.7.4. Assim como aconteceu nos testes com a ferramenta ISIC, o EM1206
não mostrou-se vulnerável aos ataques fuzzing executados pelo UDPSIC, porém mostrou-
se vulnerável ao flooding gerado. Os testes que geraram este resultado são descritos a
seguir.
Visto que as ferramentas ISIC e UDPSIC funcionam de uma forma bastante similar
mudando apenas o protocolo no qual elas atuam, os resultados obtidos foram bastantes
similares aos obtidos na seção 4.4. Para a execução destes testes, o ambiente também é o
cenário 1, mostrado pela figura 4.1.
A sintaxe utilizada pelo UDPSIC é a mesma que a do IPSIC, com a diferença de que
os números que estão separados por vírgula dos endereços IP, indicam as portas UDP
de origem e destino do ataque, respectivamente. O fluxo de dados gerado pelo UDPSIC
também foi igual ao gerado pelo ISIC.
Visto que há a liberdade de configurar as portas TCP e UDP do EM1206 que estarão
abertas, a porta UDP 1001 foi aberta e utilizada para a execução dos testes.
4.6 TCP 51
Assim como nos testes do protocolo IP, o protocolo UDP do Tibbo não mostrou-se
vulnerável aos ataques fuzzing, porém mostrou-se vulnerável ao ataque flooding executado
pela ferramenta. Para filtrar o real motivo do travamento, o tráfego da ferramenta foi
limitado a 1 KB/s utilizando o parâmetro -m. Visto que o EM1206 não travou com este
tráfego, a conclusão é que o erro foi causado por flooding.
4.6 TCP
O segundo teste foi feito para verificar o quão eficiente é o gerador de números inici-
ais de sequência, teste executado pelos softwares Nmap (descrito na seção 3.7.1) e pelo
software Nessus. Houve uma divergência entre os resultados.
O terceiro teste também foi feito pelo Nessus, sendo que este encontrou uma vulne-
rabilidade onde diz que o EM1206 é vulnerável a ataques de reset spoofing.
A descrição detalhada destes três testes é apresentada nas seções 4.6.1, 4.6.2 e 4.6.3.
4.6.1 Flooding
Visto que as ferramentas TCPSIC e UDPSIC funcionam de uma forma bastante pa-
recida, inclusive atuando na mesma camada da pilha TCP/IP, os resultados obtidos aqui
foram bastantes similares aos obtidos na seção 4.5.
Assim como nos testes com IPSIC e UDPSIC, os testes foram repetidos com o tráfego
limitado a 1 KB/s e o EM1206 não travou.
Por fim, foram feitos testes com os parâmetros -F, -V e -I, já apresentados na seção
4.4. Além destes, o TCPSIC tem alguns parâmetros exclusivos: -T, -u e -t. O parâmetro
-T indica a porcentagem de pacotes que terão as flags TCP alteradas, o parâmetro -u
diz a porcentagem de pacotes que terão a flag URG ligada e -t diz a porcentagem de
pacotes que terão o valor de checksum alterados. Os resultados mantiveram-se os mesmos,
o EM1206 resistiu a todas as 20 combinações de parâmetros testadas.
Utilizando o Nessus o resultado foi diferente. De acordo com o relatório gerado por
ele e que pode ser encontrado no apêndice A.2, o Nessus avalia a aleatoriedade do gerador
de ISN como fraca.
Devido a esta divergência entre os resultados, foi necessário fazer uma análise manual
dos pacotes para descobrir qual está correto. Para isso foi criado um script com o Scapy,
o qual está no apêndice A.5. Este script envia, por aproximadamente dois segundos,
segmentos SYN para o EM1206 e imprime na tela qual foi o número de sequência utilizado
na resposta SYN-ACK.
4.6 TCP 53
Através deste script foi constatado que o gerador de números iniciais de sequência do
EM1206 simplesmente incrementa seu valor em 64000 a cada 500 ms. Esse comportamento
viola a RFC 6528 (GONT, 2012), que especifica que os ISNs devem ser aleatorizados. As
figuras 4.6, 4.7, 4.8 e 4.9 mostram a captura do tráfego destes pacotes feita pelo Wireshark,
onde é possível ver o momento em que o gerador do número de sequência é incrementado.
Dado o fato de que o EM1206 gera seus números iniciais de sequência de uma forma
incremental utilizando um valor fixo, o resultado gerado pelo Nessus foi o correto.
Um ponto a ser destacado sobre a análise feita por este plugin do Nessus é que ele
pode gerar falsos positivos. Conforme pode ser visto em seu código fonte (DERAISON,
2002), o Nessus envia dois segmentos SYN, captura o número de sequência das respostas
SYN-ACK e os compara: se eles forem iguais a aleatoriedade é dada como fraca, caso
contrário ela é dada como forte. Se, no momento desta captura, o gerador do EM1206
4.6 TCP 54
fosse incrementado, a aleatoriedade teria sido dada como forte, o que é um falso positivo.
De acordo com o relatório emitido pelo Nessus que pode ser visualizado no apêndice
A.3, é possível encerrar uma conexão já estabelecida entre o EM1206 e outro dispositivo
enviando pacotes RST ilegítimos, fazendo uma aproximação do número de sequência da
conexão.
Este script foi testado no cenário 2, onde havia uma conexão TCP na porta 1001 do
EM1206 entre este e o host A. A figura 4.10 mostra a execução deste script: o pacote 135
e os anteriores mostram o tráfego normal entre o host A e o EM1206; o pacote 227 mostra
o momento em que o host B envia o segmento RST para o EM1206, com seu IP alterado
para que parecesse ser um pacote legítimo do host A; o pacote 274 mostra o momento em
4.7 HTTP 56
que o host A envia mais um pacote legítimo ao EM1206; e por fim, o pacote 275 mostra
o momento em que o EM1206 finaliza a conexão com o host A.
Para que fosse possível demonstrar este resultado, os tráfegos dos hosts A e B foram
capturados separadamente e depois mesclados através do Wireshark.
4.7 HTTP
4.7.2 Flooding
O software BED, descrito na seção 3.7.5, foi utilizado neste teste para avaliar o com-
portamento do servidor web embarcado do conversor EM1206 diante de ataques fuzzing
na camada de aplicação. Os parâmetros HTTP testados por esta ferramenta foram a
linha de requisição e as linhas de cabeçalho User-Agent, Host, Accept, Accept-Encoding,
Accept-Language, Connection, Referer, Authorization, From, Charge-To, Authorization,
If-Modified-Since e Pragma, sendo que o ambiente de testes foi o cenário 1, mostrado pela
figura 4.1. Os testes foram iniciados através do comando abaixo:
Através do parâmetro -s, o usuário diz ao BED qual dos protocolos ele quer atacar.
O parâmetro -t indica o endereço IP do alvo e -p indica em qual porta está rodando o
serviço a ser atacado. Quando o teste é iniciado, a ferramenta envia strings de diversos
tamanhos em cada um dos parâmetros HTTP mencionados.
Quando isolados, os parâmetros GET e POST que antes causavam o travamento não
causaram mais a falha, mesmo utilizando strings de tamanho 219 .
De acordo com estes resultados, a conclusão obtida é que o que realmente causou
o travamento do servidor web foi um ataque flooding e não um buffer overflow. Um
fato interessante é que este ataque flooding funcionou apenas com os parâmetros GET e
4.7 HTTP 58
POST, não tendo sido efetivo nos testes com as linhas de cabeçalho HTTP mencionadas
no primeiro parágrafo desta seção.
Toda vez que este usuário já autenticado acessa alguma página do sistema, em vez
de informar novamente a senha, ele apresenta ao EM1206 o cookie. A figura 4.11 mostra
uma captura feita pelo Wireshark, onde o cookie está em destaque.
O problema é que este recurso traz consigo uma vulnerabilidade. Qualquer um que
consiga obter este cookie pode usá-lo para ter acesso completo as páginas de configuração
do conversor. Isso é perigoso, visto que essa vulnerabilidade pode ser usada para obter a
senha de administrador do EM1206.
Para comprovar esta vulnerabilidade, foram criados dois scripts com a ferramenta
Scapy, os quais foram testados no cenário 2, apresentado pela figura 4.2. Estes scripts,
que estão nos apêndices A.7 e A.8, têm dois objetivos: o primeiro é obter o cookie e o
segundo é fazer com que um host B obtenha a senha do EM1206 utilizando este cookie.
Quando o host B recebe o cookie, ele inicia o processo de handshake para estabelecer
uma conexão com o EM1206, enviando um segmento SYN através do Scapy. O problema
é que o Scapy faz este handshake de modo independente do kernel do Linux, portanto,
4.7 HTTP 59
quando o host B recebe o segmento SYN-ACK do EM1206, o sistema operacional não o
reconhece e envia automaticamente um segmento RST ao EM1206. Para que este RST não
seja enviado, antes de iniciar a execução dos scripts é necessário fazer duas configurações
no Iptables do host B (WEBER, 2010):
Após configurar o Iptables, o script A.7 deve ser iniciado no host B através do seguinte
comando:
1 # python rouba-cookie-servidor.py
A partir deste momento, o host B está esperando que o host A inicie a conexão com
o conversor e lhe envie o cookie utilizado. O próximo passo é executar o script A.8 no
host A, através do comando:
Quando o host B recebe o número da sessão, ele conecta-se ao EM1206, faz um GET
da página settings.html do conversor utilizando o cookie recebido e salva os dados recebidos
desta requisição. A figura 4.13 mostra o momento em que o host B faz a requisição GET.
4.7 HTTP 60
Esta requisição GET poderia ser feita para qualquer página do sistema do EM1206.
A página settings.html foi escolhida pois ela contém a senha de administrador do con-
versor. A figura 4.14 mostra o momento em que o EM1206 envia esta senha para o host
B.
Os resultados deste teste mostram que, através do roubo do cookie, é possível obter
qualquer parâmetro de configuração do EM1206, inclusive a senha de administrador do
mesmo, sendo esta uma vulnerabilidade grave.
Um ponto a ser considerado sobre este teste é que, se o atacante tem a liberdade de
executar scripts no host A, existem métodos mais fáceis de obter acesso ao EM1206 do que
o apresentado aqui, porém devido ao curto tempo para o desenvolvimento deste trabalho
não foi possível executar este teste em um cenário real. Por este motivo, a melhor opção
foi demonstrar em um ambiente ideal que a vulnerabilidade existe.
4.7 HTTP 61
Estes recursos possuem em comum uma mesma vulnerabilidade: eles enviam a senha
pela rede de forma aberta, sem nenhum tipo de criptografia. Esta é uma vulnerabilidade
grave pois, se um usuário não autorizado tiver acesso a esta senha, ele pode obter controle
total do sistema.
As seções 4.7.4.1, 4.7.4.2 e 4.7.4.3 descrevem mais detalhadamente este assunto. Ape-
sar de o software DS Manager e a aplicação Telnet não usarem o protocolo HTTP, elas
estão descritas aqui pois tratam da mesma vulnerabilidade.
O conversor EM1206 da Tibbo possui por padrão uma página web que pode ser
utilizada para a parametrização do mesmo. A figura 4.15 mostra a tela de login desta
página.
4.7 HTTP 62
Este recurso traz consigo uma vulnerabilidade: quando o usuário digita a senha e
clica no botão Login, a senha é enviada sem nenhum tipo de criptografia, sendo possível
vê-la de forma aberta na rede. A figura 4.16 mostra a captura da senha, comprovando a
vulnerabilidade.
4.7.4.2 Telnet
Esta aplicação serve para que o usuário possa parametrizar os conversores da Tibbo
via linha de comando, porém traz consigo uma vulnerabilidade. Visto que para alguns
comandos é necessário que o usuário se autentique, o usuário deve enviar junto com o
comando a senha do conversor. Como a senha não pode ser criptografada antes de ser
enviada, é possível capturar esta senha monitorando o tráfego da rede.
Figura 4.17: Captura da senha do EM1206 enviada pela aplicação “Telnet” do Tibbo.
4.7.4.3 DS Manager
O DS Manager é um software que provê uma interface gráfica para que os usuários
dos conversores serial-Ethernet da Tibbo possam configura-los (TIBBO, 2012g). A figura
4.18 mostra a tela principal deste programa.
Toda vez que alguém utiliza esta aplicação para obter acesso às configurações dos
conversores, é necessário informar ao DS Manager a senha de acesso para que ele possa
autenticar-se com o módulo. Essa autenticação é feita através da porta UDP 65535. Este
recurso traz consigo uma vulnerabilidade, pois a senha é enviada através dessa porta sem
nenhum tipo de criptografia, podendo ser vista de forma aberta no tráfego da rede.
Além do fato de que o DS Manager envia a senha pela rede sem nenhuma criptografia,
através desta figura é possível ver que este software também transmite a senha por broad-
cast pelas camadas de enlace e de rede. Essa pode ser considerada uma vulnerabilidade
gravíssima, visto que todos os hosts da rede recebem a senha do EM1206, e não só o host
que está se autenticando.
4.8 Discussão dos Resultados 65
4.8 Discussão dos Resultados
Começando das mais leves para os mais graves, existe a vulnerabilidade de autocom-
pletar senha descrita na seção 4.7.1, a qual é uma vulnerabilidade que, apesar de ter o
potencial de proporcionar acesso completo para o atacante, é difícil de ser reproduzida,
sendo que o atacante tem que primeiro obter acesso a um host que já acessou o EM1206
para depois poder explorar esta falha.
Como vulnerabilidade média, foi detectado o Etherleak descrito na seção 4.3. Segundo
o relatório do Nessus no apêndice A.1 esta é uma vulnerabilidade leve, porém no contexto
deste trabalho esta vulnerabilidade foi capaz de mostrar a senha do EM1206, além de ter o
potencial de mostrar todas as configurações do módulo através de simples requisições ARP.
Vale lembrar também que o teste foi executado através de um host diferente do que tinha
acesso a página web do EM1206, e que o atacante não necessita de nenhuma informação
sobre esta conexão legítima. Mesmo com estes argumentos, esta vulnerabilidade não foi
classificada como grave porque, apesar de o teste ser de fácil execução, é muito difícil
obter algum dado relevante através das requisições ARP, visto que os dados são obtidos
aleatoriamente do buffer de rede. Para o desenvolvimento deste relatório foi necessário
manter um fluxo ativo de dados, além de várias tentativas até enfim obter a senha do
módulo, situação que dificilmente aconteceria em um cenário real. Apesar disso, há sempre
a possibilidade de o atacante obter algum dado relevante com poucas tentativas.
Um detalhe sobre este teste é que, visto que o flooding é um ataque de exaustão
de recursos, é possível que nos testes dos protocolos UDP, TCP e HTTP as ferramentas
utilizadas tenham exaurido os recursos do protocolo IP que está abaixo destes nas camadas
4.8 Discussão dos Resultados 66
da pilha TCP/IP, e esta exaustão tenha se refletido nas outras camadas.
Por um lado, os recursos em qualquer sistema são finitos, portanto todos os sistemas
são vulneráveis a ataques flooding, quanto mais sistemas embarcados que possuem recursos
limitados. Por outro lado este dispositivo é normalmente utilizado embarcado em circuitos
eletrônicos, o que faz com que na maioria das vezes ele esteja em máquinas fechadas,
onde pode ser impossível desligar e ligar apenas o EM1206, sendo necessário reiniciar o
sistema inteiro. É importante que o administrador de rede leve isto em conta na hora de
implementar o sistema, tomando as precauções necessárias para minimizar este tipo de
ataque.
A transmissão sem criptografia pela página web e pelo “Telnet” são vulnerabilidades
graves que possuem o potencial de mostrar todas as configurações do módulo, inclusive a
sua senha, porém dependem da possibilidade de o atacante conseguir interceptar o tráfego
entre o EM1206 e o host que o está acessando no exato momento em que a senha esteja
sendo transmitida, portanto sua execução não é tão fácil.
5 Conclusão
Dispositivos embarcados como conversores serial-Ethernet e microcontroladores são
bastante disseminados em sistemas de controle industrial modernos, especialmente em
sistemas de controle distribuídos e sistemas SCADA. A crescente dependência desse tipo
de sistema para o controle de infraestruturas críticas, como fornecimento de energia,
água e gás, e para o controle dos mais variados tipos de processos industriais torna os
componentes com acesso à rede alvos preferenciais de indivíduos ou organizações que
queiram comprometer o bom funcionamento dessas infraestruturas e processos. Por conta
disso, é importante que esses dispositivos operem de forma correta mesmo quando sujeitos
a ataques. Com isso em mente, o objetivo deste trabalho foi avaliar a segurança contra
ataques de rede de um dispositivo deste tipo, o módulo embarcado EM1206 da Tibbo.
Para o desenvolvimento deste trabalho foi aplicada uma técnica conhecida como In-
jeção de Faltas. A injeção de faltas, que consiste na introdução proposital de faltas em
um sistema sob teste e na observação das respostas fornecidas por esse sistema, é uma
técnica que permite avaliar experimentalmente a robustez do sistema diante de cenários
adversos.
A confiança nos resultados obtidos por injeção de faltas está intrinsecamente ligada ao
uso de uma metodologia que garanta que um amplo espectro de faltas seja aplicado, exer-
citando um conjunto suficiente de funcionalidades do sistema avaliado. Para garantir isso,
foi adotada uma metodologia de testes baseada na proposta de (POTHAMSETTY; BA-
LINSKY, 2003), que tem por foco testar a robustez de implementações da pilha TCP/IP.
Uma dificuldade encontrada durante o desenvolvimento deste trabalho foi achar mate-
riais sobre testes de vulnerabilidades de rede especificamente em dispositivos embarcados.
Além da metodologia proposta pelos analistas da Cisco Systems, nenhum outro material
do tipo foi encontrado. Para contornar este problema, foi utilizado o scanner de vulnera-
bilidade Nessus. Este encontrou as seguintes vulnerabilidades: Etherleak, Aleatoriedade
fraca do ISN, Reset Spoofing, Autocompletar Senha e Transmissão de Senha Não Cripto-
grafada. Além destas, através da interpretação do tráfego do EM1206 pelos autores deste
trabalho, foi detectada a vulnerabilidade quanto ao Roubo de Cookies.
Para confirmar estas vulnerabilidades, primeiro foi feita a captura dos pacotes de rede
que as indicavam para que estes pudessem ser analisados detalhadamente. Utilizando
estas informações, foram escritos scripts na linguagem Python utilizando a ferramenta
Scapy, para que estas vulnerabilidades pudessem reproduzidas. Todas as vulnerabilidades
descobertas pelo Nessus e descritas no relatório foram reproduzidas com sucesso, sendo
que o código fonte destes scripts está disponível no apêndice.
Este tipo de análise voltada a dispositivos com poder computacional reduzido, nor-
malmente usados em aplicações dedicadas e específicas, pode ser executada em outros
5.1 Sugestão de Trabalhos Futuros 70
equipamentos do mesmo gênero que possuem comunicação em rede, para que os resulta-
dos possam ser comparados e, a partir destes, novas metodologias de testes sejam criadas.
Alguns exemplos são os outros módulos embarcados fabricados pela Tibbo, o Raspberry
Pi1 e o microcontrolador Arduino2 , que possui comunicação em rede através do uso de
shields específicos.
Além destes, poderiam ser criadas métricas para medir o quão robusto é um dispositivo
deste gênero diante de ataques flooding. Estas informações podem ser úteis para que os
responsáveis pela infraestrutura de rede onde estes equipamentos estão inseridos possam
tomar precauções, com o objetivo de minimizar o impacto deste tipo de ataque.
1
http://www.raspberrypi.org/
2
http://www.arduino.cc/
71
A.1 Relatório do Nessus - Etherleak 72
A Apêndice
Synopsis
The remote host appears to leak memory in network packets.
Description
The remote host uses a network device driver that pads ethernet frames with data which vary from
one packet to another, likely taken from kernel memory, system memory allocated to the device
driver, or a hardware buffer on its network interface card.
Known as 'Etherleak', this information disclosure vulnerability may allow an attacker to collect
sensitive information from the affected host provided he is on the same physical subnet as that host.
See Also
http://www.nessus.org/u?719c90b4
Solution
Contact the network device driver's vendor for a fix.
Risk Factor
Low
References
BID 6535
CVE CVE-2003-0001
XREF OSVDB:3873
Plugin Information:
Publication date: 2003/01/14, Modification date: 2011/03/21
A.1 Relatório do Nessus - Etherleak 73
Hosts
192.168.25.5 (icmp/0)
Padding observed in one frame :
0x00: 45 00 02 16 71 F3 40 00 FF 06 54 8E C0 A8 19 05 E...q.@...T.....
0x10: C0 .
0x00: 6C 6F 72 3A 23 45 30 44 36 42 38 3B 0D 0A 66 6F lor:#E0D6B8;..fo
0x10: 6E n
A.2 Relatório do Nessus - Número de Sequência Inicial 74
A.2 Relatório do Nessus - Número de Sequência Inicial
Synopsis
The remote device seems to generate predictable TCP Initial Sequence Numbers.
Description
The remote host seems to generate Initial Sequence Numbers (ISN) in a weak manner which seems
to solely depend on the source and dest port of the TCP packets.
An attacker may exploit this flaw to establish spoofed connections to the remote host.
The Raptor Firewall and Novell NetWare are known to be vulnerable to this flaw, although other
network devices may be vulnerable as well.
See Also
http://archives.neohapsis.com/archives/bugtraq/2002-07/0492.html
http://securityresponse.symantec.com/avcenter/security/Content/2002.08.05.html
Solution
If you are using a Raptor Firewall, install the TCP security hotfix described in Symantec's advisory.
Otherwise, contact your vendor for a patch.
Risk Factor
High
References
BID 5387
BID 8652
CVE CVE-2002-1463
XREF OSVDB:199
A.2 Relatório do Nessus - Número de Sequência Inicial 75
Plugin Information:
Publication date: 2002/08/02, Modification date: 2011/03/21
Hosts
192.168.25.5 (tcp/0)
A.3 Relatório do Nessus - Reset Spoofing 76
A.3 Relatório do Nessus - Reset Spoofing
Synopsis
It may be possible to send spoofed RST packets to the remote system.
Description
The remote host might be affected by a sequence number approximation vulnerability that may
allow an attacker to send spoofed RST packets to the remote host and close established connections.
This may cause problems for some dedicated services (BGP, a VPN over TCP, etc).
See Also
https://downloads.avaya.com/elmodocs2/security/ASA-2006-217.htm
http://www.kb.cert.org/vuls/id/JARL-5ZQR4D
http://www-01.ibm.com/support/docview.wss?uid=isg1IY55949
http://www-01.ibm.com/support/docview.wss?uid=isg1IY55950
http://www-01.ibm.com/support/docview.wss?uid=isg1IY62006
http://www.juniper.net/support/security/alerts/niscc-236929.txt
http://technet.microsoft.com/en-us/security/bulletin/ms05-019
http://technet.microsoft.com/en-us/security/bulletin/ms06-064
http://www.kb.cert.org/vuls/id/JARL-5YGQ9G
http://www.kb.cert.org/vuls/id/JARL-5ZQR7H
http://www.kb.cert.org/vuls/id/JARL-5YGQAJ
http://www.nessus.org/u?9a548ae4
http://isc.sans.edu/diary.html?date=2004-04-20
Solution
Contact the vendor for a patch or mitigation advice.
Risk Factor
Medium
References
BID 10183
CVE CVE-2004-0230
XREF OSVDB:4030
XREF CERT:415294
XREF EDB-ID:276
XREF EDB-ID:291
Plugin Information:
Publication date: 2004/04/25, Modification date: 2012/12/28
Hosts
192.168.25.5 (tcp/0)
A.4 Relatório do Nessus - Autocompletar Senha 78
A.4 Relatório do Nessus - Autocompletar Senha
Synopsis
Auto-complete is not disabled on password fields.
Description
The remote web server contains at least HTML form field containing an input of type 'password'
where 'autocomplete' is not set to 'off'.
While this does not represent a risk to this web server per se, it does mean that users who use the
affected forms may have their credentials saved in their browsers, which could in turn lead to a loss
of confidentiality if any of them use a shared host or their machine is compromised at some point.
Solution
Add the attribute 'autocomplete=off' to these fields to prevent browsers from caching credentials.
Risk Factor
None
Plugin Information:
Publication date: 2009/10/07, Modification date: 2011/09/28
Hosts
192.168.25.5 (tcp/80)
Page : /
Destination Page : login.html
Input name : pw
Page : /index.html
Destination Page : login.html
Input name : pw
A.5 Código Fonte - Teste do Gerador de ISN 79
A.5 Código Fonte - Teste do Gerador de ISN
28 sock.close()
29
22 while(True):
23 try:
24 dados_capturados.write(str(resposta[Raw]))
25 if str(resposta[Raw]).find(’</html>’) != -1:
26 dados_capturados.close()
27 print "Dados capturados com sucesso."
28 return
A.8 Código Fonte - Rouba Cookie, lado servidor 84
29
30 except:
31 pass
32
33 try:
34 ack = IP(dst=ip_tibbo) / TCP(dport=80, sport=resposta[TCP].dport, seq
=resposta[TCP].ack, ack=resposta[TCP].seq + len(resposta[Raw]),
flags=’A’)
35
36 except:
37 ack = IP(dst=ip_tibbo) / TCP(dport=80, sport=resposta[TCP].dport, seq
=resposta[TCP].ack, ack=resposta[TCP].seq, flags=’A’)
38
39 finally:
40 print "\nEnviando ACK..."
41 resposta = sr1(ack)
42 print "\nResposta recebida"
43
44 def recebe_dados():
45 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
46
50 sock.listen(1)
51 conexao, ip_cliente = sock.accept()
52
53 dados = conexao.recv(1024)
54 ip_tibbo, sessao = dados.split(’|’)
55
56 conexao.close()
57
61 conecta(ip_tibbo, sessao)
62
63 recebe_dados()
Referências Bibliográficas
ANTUNES, J.; NEVES, N.; NEVES, R.; CORREIA, M.; VERÍSSIMO, P. Diagnóstico
de vulnerabilidades através da injeção de ataques. Universidade de Lisboa, Covilhã,
Portugal, 2004.
AVIZIENIS, A.; LAPRIE, J.; RANDELL, B.; LANDWEHR, C. Basic Concepts and
Taxonomy of Dependable and Secure Computing. IEEE TDSC, Institute of Electrical
and Electronics Engineers, v. 1, n. 1, p. 11–33, 2004.
BANKS, G. et al. Snooze: toward a stateful network protocol fuzzer. v. 4176, p. 343,
2006. Disponível em: <http://imj.gatech.edu/papers/139.pdf>.
CÁRDENAS, A.; AMIN, S.; SASTRY, S. Research challenges for the security of
control systems. In: USENIX ASSOCIATION. Proceedings of the 3rd conference on Hot
topics in security. 2008. p. 6. Disponível em: <http://citeseerx.ist.psu.edu/viewdoc-
/download?doi=10.1.1.145.338&rep=rep1&type=pdf>.
CHEN, S.; JIANG, S. Design of embedded network interface controller based on ARM9
and ARMLinux. v. 34, p. 142, 2009.
DROMS, R. RFC 2131: Dynamic Host Configuration Protocol. 1997. Disponível em:
<http://www.ietf.org/rfc/rfc2131.txt>.
REFERÊNCIAS BIBLIOGRÁFICAS 88
FALCO, J. IT security for industrial control systems. 2002. Disponível em: <http:/-
/citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.13.9422&rep=rep1&type=pdf>.
FAUST, S. Web application testing with SPI fuzzer. SPI Dynamics Whitepaper, 2004.
Disponível em: <http://anythingyoutype.rmccurdy.com/scripts/docs/spidynamics-
/SPIFuzzer.pdf>.
GONT, F. RFC 6528: Defending against sequence number attacks. 2012. Disponível em:
<http://rsync.tools.ietf.org/html/rfc6528>.
GU, S.; SONG, Y.; ZHAO, X.; LI, W. Fuzzing test data generation based on message
matrix perturbation with keyword reference. In: IEEE. Military Communications
Conference, (MILCOM 2011). [S.l.], 2011.
HSUEH, M.; TSAI, T.; IYER, R. Fault Injection Techniques and Tools. IEEE Computer
Society, Institute of Electrical and Electronics Engineers, v. 30, n. 4, p. 75–82, 1997.
LEWIS, R.; LEWIS, R. Modelling Distributed Control Systems Using IEC 61499:
Applying Function Blocks to Distributed Systems. Stevenage, UK, UK: Institution of
Electrical Engineers, 2001. (IEE control engineering series). ISBN 9780852967966.
LU, W.; YU, S. An HTTP flooding detection method based on browser behavior. In:
IEEE. Computational Intelligence and Security, 2006 International Conference on. [S.l.],
2006. v. 2, p. 1151–1154.
LYON, G. F. Nmap network scanning. Acessado em 29 out. 2012, s.n.t. Disponível em:
<http://nmap.org/book/man.html>.
M3LT. The LAND attack (IP DoS). 1997. Disponível em: <http://insecure.org/sploits-
/land.ip.DOS.html>.
MAMAKOS, L. et al. RFC 2516: A method for transmitting PPP over Ethernet. 1999.
Disponível em: <http://tools.ietf.org/html/rfc2516>.
OEHLERT, P. Violating assumptions with fuzzing. Security & Privacy, IEEE, IEEE,
2005. Disponível em: <http://www.ida.liu.se/˜TDDC90/papers/violating05.pdf>.
ONLINE, F. Prejuízo de ataque virtual equivale a R$ 3,3 milhões ao ano para empresas.
Acessado em 27 fev. 2012, 2010. Disponível em: <http://www1.folha.uol.com.br/folha-
/informatica/ult124u700866.shtml>.
PEREIRA, C. Prejuízo com ataque virtual é de US$ mil por empresa. Acessado em 27
fev. 2012, 2010. Disponível em: <http://www.brasileconomico.com.br/noticias/nprint-
/77485.html>.
POSTEL, J. RFC 768: User Datagram Protocol. 1980. Disponível em: <http://www-
.ietf.org/rfc/rfc768.txt>.
POSTEL, J. RFC 792: Internet Control Message Protocol. 1981a. Disponível em:
<http://tools.ietf.org/html/rfc792>.
RALSTON, P.; GRAHAM, J.; HIEB, J. Cyber security risk assessment for SCADA and
DCS networks. ISA transactions, Elsevier, v. 46, n. 4, p. 583–594, 2007.
TIBBO. EM203 Ethernet Module. Acessado em 27 fev. 2012, 2012d. Disponível em:
<http://tibbo.com/products/modules/x20x/em203.html>.
TIBBO. Our Very Own Operating System. Acessado em 27 fev. 2012, 2012h. Disponível
em: <http://tibbo.com/basic/product/tios.html?swln=en>.
TIBBO. Telnet TCP Programming. Acessado em 13 mai. 2013, 2013. Disponível em:
<http://docs.tibbo.com/soism/index.html?command telnet.htm>.
XIAO, S.; FRANTZEN, M. ISIC – IP stack integrity checker. Acessado em 29 out. 2012,
s.n.t. Disponível em: <http://isic.sourceforge.net/>.