Estudo de caso F2F: Turtle P2P
Turtle
é uma arquitetura P2P de código aberto, baseada na
especificação F2F,
especialmente desenhada por Bogdan Popescu, Bruno Crispo e Andrew
Tanenbaum – pesquisadores da Vrije Universiteit (Amsterdã) –
para
transmitir de forma segura dados sensíveis através de uma
rede
potencialmente insegura.
A principal
diferença entre Turtle e as demais arquiteturas F2F é
que, em vez de
criar relações de amizade entre os pares, ela utiliza
relações reais de
amizade já existentes, criando uma rede superposta de
compartilhamento
de informações. Desta forma, assemelhando-se ao mundo
real, é possível
proteger as identidades tanto dos emissores quanto dos receptores e, ao
mesmo tempo, garantir a integridade das mensagens e a disponibilidade
dos recursos de rede, protegendo-as de ataquues como o do homem-do-meio
(man-in-the-middle attack) e o
de negação de sinal distribuída (Distributed
Denial
of Service, DDoS).
Como funciona
Cada par da rede tenta estabelecer uma conexão segura (através de criptografia assimétrica) com um outro par, que precisa aceitar a “amizade” para que a conexão, de fato, seja estabelecida. Como os pares Turtle são presumivelmente conhecidos na vida real, conhecimentos baseados em experiências conjuntas podem (e devem) ser utilizados para autenticar a identidade do requerente.
Uma vez estabelecida a conexão, os usuários passam a ter uma linha segura de troca e encaminhamento de mensagens. A busca de novas informações é feita através de consultas (queries) à rede, que requerem dois tipos de informações: o termo e o alcance de busca.
Cada busca é identificada por uma sequência (ID) de 128 bits, sendo os primeiros 64 um número aleatório e a segunda metade, formada a partir da criptografia do termo de consulta. A princípio, os pesquisadores escolheram o hash SHA-1 para esta tarefa, porém a descoberta de um algoritmo capaz de produzir colisões 500 milhões de vezes mais rápido que a força bruta forçou a substituição do hash por criptografia simétrica, já que os usuários se conhecem pessoalmente, neste caso específico.
Uma vez criada a sequência, o par
cria uma pacote contendo os dados necessários (termo, alcance, ID)
e envia para todos os pares coligados a ele. Cada par que recebe o
pacote faz uma busca em seus arquivos e, se encontra algum resultado,
retorna para onde veio (não necessariamente a origem) um pacote
com o
sucesso da busca e os resultados. Independentemente do sucesso na
busca, o pacote recebido é atualizado (o alcance decresce de uma
unidade) e encaminhado a todos os pares coligados.
É importante observar que, a cada pacote passado, o endereço do remetente é alterado. Portanto, a origem da consulta não é conhecida, pois não é possível saber se o par emissor é de fato a origem da consulta ou está apenas a encaminhando. Além disso, também não é possível descobrir quem retornou resultados, pelo mesmo motivo.
Por fim, como cada pacote deverá ser enviado através de todos os pares no caminho entre os emissores e os receptores, a velocidade de transferência tende a ser sigificativamente menor que em outras redes P2P de baixa segurança, como o BitTorrent e o Gnutella.
Desta forma, é possível notar que esta arquitetura foi baseada em três premissas:
-
Todos os pares estarão conectados a partir de uma rede estável, confiável e de alta velocidade;
-
Os pares deverão formar uma rede suficientemente grande para que todos estejam coligados de alguma forma (como na teoria dos seus graus de separação);
-
Cada usuário deve se ligar somente a usuários que ele conhece e confia pessoalmente.
Interface de usuário de uma
aplicação cliente Turtle (giFT for Linux,
num
ambiente OpenSuSE)
Contenção de falhas (failing well*)
Turtle foi planejada de forma a não apenas evitar falhas de segurança, mas, principalmente, a evitar que, caso aconteçam, a segurança da rede não seja comprometida.
Como não é possível rastrear a origem ou o destino dos pacotes compartilhados, o restante da rede F2F tende a continuar segura mesmo se um dos pares for comprometido. Além disso, a única forma de descobrir à distância que um usuário está compartilhando arquivos é através da análise de tráfego. Embora este seja um calcanhar-de-aquiles da maioria das redes P2P, é possível incorporar ferramentas de despistamento ao código da aplicação cliente, devido à sua natureza aberta.
As redes Turtle ainda estão protegidas de ataques comuns a redes sociais ou baseadas em reputação, como os ataques de Sybil (Sybil attacks), quando o atacante cria diversos perfis falsos interligados de forma a obter mais acesso aos recursos da rede.
A única forma conhecida de se infiltrar com sucesso numa rede Turtle é através de engenharia social, ou seja, convencendo vários pares estratégicos a aceitarem ligações com perfis maliciosos. Entretanto, como a rede é baseada em relacionamentos pessoais, o atacante precisaria convencer pessoalmente cada um destes pares, o que requeriria uma engenharia social demasiadamente intrincada e notadamente suscetível a riscos.
------------------------
*O termo failing well foi cunhado pelo especialista em segurança Bruce Scheneier, autor de vários livros e criador do Blowfish, que defende que os recursos reservados para segurança da informação sejam aplicados em evitar que erros se propaguem pelo sistema, ao invés de investi-los na utopia de torná-lo completamente seguro.