API IPSEC – VIABILIZANDO A SEGURANÇA DE REDES

5

Click here to load reader

description

Resumo – Neste artigo é apresentado o desenvolvimento de uma aplicação baseada no protocolo IPSEC utilizando como linguagem de programação o C++. O objetivo desta aplicação é viabilizar uma maior segurança nas comunicações de rede, assim como nas conexões de rede, em especial para a camada de aplicação.

Transcript of API IPSEC – VIABILIZANDO A SEGURANÇA DE REDES

Page 1: API IPSEC – VIABILIZANDO A SEGURANÇA DE REDES

API IPSEC – VIABILIZANDO A SEGURANÇA DE REDES Sérgio Henrique Vital de C. Silva, Milena B. P. Carneiro, Antônio Cláudio P. Veiga, Edna Lúcia Flôres

Universidade Federal de Uberlândia – FEELT - BR

INPG – Institut National Polytechnique de Grenoble – ENSIMAG - FR

Uberlândia -MG, [email protected], [email protected]

Resumo – Neste artigo é apresentado o

desenvolvimento de uma aplicação baseada no protocolo

IPSEC utilizando como linguagem de programação o

C++. O objetivo desta aplicação é viabilizar uma maior

segurança nas comunicações de rede, assim como nas

conexões de rede, em especial para a camada de

aplicação.

Palavras-Chave - IPsec, Network Security, open-

source, IKEv2 , openIKEv2.

IPSEC API - TO FACILITATE NETWORK

SECURITY

Abstract – This article presents the development of an

application based on the IPsec protocol, using C++ as the

program language. The objective of this application is to

make possible a high security for network

communication and also for network connections,

especially in the application layer.

Keywords - IPsec, Network Security, open-source,

IKEv2 , openIKEv2.

I. INTRODUÇÃO

Atualmente a segurança nas conexões de rede esta em

constante debate. Novas formas de tornar a comunicação

mais segura, como por exemplo, de dados bancários vem

sendo desenvolvidas, assim como uma evolução nas técnicas

de criptografia.

Com a intensa utilização da Internet para o comércio,

assim como Intranets e o início do B2B (Business to

Business), a utilização de protocolos de segurança de redes

teve um aumento considerável.

Grande parte dos dados que trafegam pelas redes de

computadores atualmente necessitam de uma forte

segurança, uma vez que representam um valor de capital

convertido em bits.

Empresas investem grande parte de seus lucros na

segurança de seus dados e informações inerentes a trocas

comerciais e a banco de dados de seus clientes. Não só

empresas tentam tornar suas redes internas mais seguras,

como também governos e nações.

Mas o usuário final desta tecnologia esta também no típico

usuário de email, ou utilizador de bate papos virtuais. São

eles que efetuam compras online, ou acessam sua conta

bancária através do seu computador pessoal.

O objetivo de pesquisadores da área de Segurança de

Redes se torna então o desenvolvimento de aplicações e

protocolos que auxiliam qualquer usuário, viabilizando na

prática uma rede segura.

Na prática, falamos de rede segura não só aquela protegida

por criptografia, mas toda associação de segurança em que as

duas partes da comunicação recebam seus dados de maneira

completa, confiável e sem interferências.

No próximo item será descrito o protocolo IPSec e sua

arquitetura. Posteriormente no item III o protocolo IKEv2

será abordado e explicado. Na seqüência, o item IV

exemplifica a API_IPSec , concluindo com explicações,

melhorias, e propostas futuras no item V.

II. IPSEC

O IPSec é um protocolo definido pelo IETF(Internet

Engineering Task Force) que permite tornar seguras as trocas

de dados na camada de redes. Ele foi desenvolvido para

preencher uma falta desta camada como a autenticação, a

confidencialidade das trocas de dados assim como sua

integridade. Para efetuar a troca de chaves de criptografia e

dos protocolos utilizados pelo IPSec existem dois métodos.

Um é uma troca manual, a qual não é pratica e nem

suficientemente correta, outro é utilizar o recurso de um

protocolo de gestão de associações de segurança, como o

IKE (Internet Key Exchange). Este protocolo utiliza para

autenticação, uma chave compartilhada ou um certificado

digital.

Na prática, a grande parte dos internautas que são de

empresas ou proprietários de uma PN (Private Network) não

possui certificados eletrônicos, entretanto, estes últimos

podem utilizar uma chave compartilhada. O problema deste

método é que ele não garante o critério de não repudiação a

mais do problema de gestão e de registro das diferentes

chaves que serão utilizadas entre diferentes destinatários.

Page 2: API IPSEC – VIABILIZANDO A SEGURANÇA DE REDES

Fig. 1 – Arquitetura do IPsec

Para que sejam alcançados os objetivos do IPSec é

necessária a utilização de protocolos de tráfegos seguros, que

são: Authentication Header(AH) e Encapsulating Security

Payload(ESP), e de procedimentos e protocolos de gerência

de chaves (IKE). Porém, por ter uma arquitetura aberta,

como mostrado na Fig. 1, o IPSec possibilita a inclusão de

outros algoritmos de autenticação e criptografia.

Seu propósito principal esta no seu modo de tunneling, que

vem a ser o encapsulamento do IP que lhe permite entre

outras coisas de criar redes privadas virtuais - VPN (Virtual

Private Network). Ele garante também, para seu sistema de

encapsulamento, alguns serviços de segurança requisitados

ao nível IP. Estes protocolos têm por objetivo uma

comunicação segura entre duas entidades separadas por uma

rede não segura, como a Internet. A segurança desta

comunicação é garantida pelo fato do IPsec apresentar

diferentes serviços como:

- Autenticação: é a autenticação mútua de duas entidades

em questão. Evidentemente a autenticação é garantida no

nível 3 do modelo OSI onde se encontram os protocolos

IPsec.

- Confidencialidade: O IPSec pode garantir que nenhuma

pessoa dentro da rede intermediária ira ler o conteúdo do

pacote enviado.

- Autenticidade dos dados: O IPsec permite assegurar

para cada pacote trocado, que ele foi gerado pela máquina

exata e que ele esta na direção da segunda máquina.

- Integridade: Graça aos algoritmos de Hash

implementados no IPSec, este permite verificar se os dados

sofreram alterações ao longo do caminho.

- Proteção contra a escuta e análise do trafico: IPsec

permite criptografar os endereços IP atuais da fonte e do

destino, assim como o cabeçalho IP. É o modo tunneling, que

impede todo invasor que esteja na escuta da rede de

adivinhar as informações sobre as entidades atuais nas

extremidades do túnel.

- Proteção contra reutilização: é o fato de capturar um ou

vários pacotes com o objetivo de enviá-los de novo (sem tê-

los decodificado). O IPsec permite prevenir-se contra este

tipo de ataque.

III. IKEV2

O protocolo IKE (Internet Key Exchange) foi

desenvolvido para automatizar o estabelecimento da

Associação de Segurança (SA - Security Association) do

IPSec. Sua primeira versão foi liberada em 1998 como uma

coleção de três RFCS do IETF (RFC 2407, RFC 2408, e

RFC 2409). A primeira versão do IKE (IKEv1)[RFC 2407]

sofria de algumas limitações e complexidades, assim o IETF

decidiu propor uma segunda versão que fosse possível

resolver estas limitações e simplificar o protocolo. O

resultado foi o protocolo IKEv2 .

O protocolo IKEv2 usa um protocolo de transporte não

confiável (UDP utilizando portas 500 e 4500) e é realizado

entre duas partes: initiator (iniciador) e responder. Como

seus nomes indicam, o initiator inicia o protocolo IKEv2

enquanto o responder atua como um servidor durante a

negociação. O protocolo é composto de um bem definido

conjunto de quatro trocas (request-response), denominadas:

IKE_SA_INIT, IKE_AUTH, CREATE_CHILD_SA e

INFORMATIONAL. O conceito de trocas permite assegurar

uma confiabilidade ao protocolo IKEv2, pois há uma

resposta (response) esperada e bem definida para cada

requisição (request).

O IKEv2 pode ser usado nos cenários IPSec mais comuns,

como Security Gateway-TO-Security Gateway tunnel,

Endpoint-TO-Endpoint transport e Endpoint to Security

Gateway tunnel (também denominado de Road-Warrior).

Adicionalmente, o IKEv2 introduz um bom conjunto de

melhoramentos com respeito a sua primeira versão. Por

exemplo, uma das principais vantagens do IKEv2 em relação

ao IKEv1 é a inclusão de novos recursos como NAT

transversal, o transporte do Protocolo de Autenticação

Extensiva (EAP - Extensible Authentication

Protocol)[RFC3748] para um mecanismo de autenticação

flexível e suporte para configuração de endereço remoto.

Para resumir, os principais motivos para desenvolver esta

segunda versão são: reduzir o número de round-trips,

simplificar o protocolo e fornecer novos recursos como NAT

transversal, suporte EAP e configuração interna de

endereços. Estas novas capacidades permitiram a

incorporação do protocolo IKEv2 em um grande número de

cenários. Além disso, algumas fraquezas da criptografia do

IKEv1 foram corrigidas sendo que, no geral, o protocolo foi

simplificado.

IV. IPSEC API

O principal propósito desta API é permitir que qualquer

aplicação possa interagir com a camada IPSec e aproveitar da

segurança proporcionada por esta ferramenta. O IPSec

[RFC4301] [RFC4302] [RFC4306] [RFC4307] foi

desenvolvido para tornar segura a comunicação entre dois

nós. A segurança é efetuada na camada de redes, e não há

quase nenhuma interação entre aplicações e a camada IPSec.

Este documento lista alguns requerimentos da aplicação em

relação ao IPSec, tentando não limitá-la aos requerimentos

Page 3: API IPSEC – VIABILIZANDO A SEGURANÇA DE REDES

das aplicações atuais, mas também considerar requerimentos

para futuras aplicações.

Com o IP os dados transportados dentro do pacote estão

contidos transparentemente. Então é possível, através da

escuta do tráfico de redes, ler e modificar os pacotes segundo

o conteúdo (dados) ou o cabeçalho (endereço da fonte). As

necessidades clássicas de segurança, as quais a camada IP

deve apresentar são: confidencialidade, autenticação,

integridade, e as soluções atuais como algoritmos de

codificação com chave simétrica (como DES e AES) ou

chaves assimétricas (como RSA ou algoritmo de Diffie-

Hellman).

Para implementar as funcionalidades de segurança, o

protocolo IPSec (IP Security Protocol) foi especificado e

normalizado pela IETF através de RFCs desde 1995. Foi

decidido que o IPSec seria obrigatório dentro do IPv6 e

facultativo no IPv4, mais com um mecanismo idêntico. O

IPSec agrupa três mecanismos independentes (no nível da

camada de redes):

- AH (Authentication Header) que serve para validar a

integridade das mensagens.

- ESP (Encapsulation Security Payload) que serve para

assegurar a confidencialidade das mensagens.

- IPcomp (IP compression) que comprime os dados que

transitam.

A configuração do IPsec é baseada em dois banco de

dados:

- SPD (Security Policy Database) para especificar o

comportamento (utilizar ou não IPSec, com ESP, AH, ou os

dois) que o sistema deve apresentar com relação as

comunicações externas (definidas no nível da camada de

transporte: TCP, UDP, ICMP).

- SAD (Security Association Database) para dar um

contexto a cada conexão IPSec unidirecional agrupando o

conjunto destas informações abaixo:

=> numero de conexão SPI(Security Parameter Index),

@source , @destination

=> mecanismo IPSec utilizado (ESP ou AH) e algoritmos

utilizados por elas.

Existem dois modos para o IPSec: modo transporte, onde

somente os dados são protegidos, e modo túnel , onde o

cabeçalho também está protegido. O IKE se encarrega da

gestão de chaves e da autenticação de entidades, além da

negociação e de implementação de SAs.

O grande sucesso do IPSec foi que ele torna segura toda as

aplicações e suas comunicações acima da camada IP de

forma transparente. Vários protocolos utilizam o IPSec para

segurança. As duas especificações mais importantes são

(RFC 2401 - IPSec v1, e RFC 4301 - IPSec v2). Estas

normas descrevem o funcionamento do IPSec mas não

fornecem interfaces que permitam as aplicações de

interagirem e beneficiarem-se da camada IPSec. Esta

limitação permite, assim, configurar somente uma segurança

IPSec tendo em conta os parâmetros de redes e não da

aplicação. A ausência de interações entre a camada de redes

e de aplicação conduz a situações onde uma proteção, ou

seja, uma autenticação pode ser efetuada muitas vezes ao

nível da camada de aplicação (TLS) e ao nível da camada de

redes (IKE). Esta proteção dobrada é entendida como inútil.

O grupo de trabalho BTNS(Better-than-nothing secured)

da IETF desenvolveu soluções que permitem habilitar uma

comunicação IPSec sem autenticação. A partir de certos

esboços recentes do grupo, vamos melhor definir as

interações entre as aplicações e a camada IPSec. Iremos

refletir para criar as funções da API que permitam ao mesmo

tempo a utilização do IPSec e de mecanismos de segurança

de camadas de nível mais alto.

A) Descrição da API

A Fig. 2 nos permite visualizar o funcionamento global da

API IPSec. Ela possui três tipos de interface.

Fig. 2 – Interfaces do API IPsec

- Uma interface com a camada aplicativa: Esta camada

permite que a API comunique-se com as aplicações de nível

mais alto. Um exemplo de diálogo entre uma aplicação e a

API IPSec poderia ser uma aplicação que delega à camada

IPSec a autenticação do nó. Outro tipo de aplicação

detalhada mais tarde pode gerar a mobilidade ou

multihoming.

- Uma interface entre as diferentes API-IPSec: Esta

interface permite que o nó distante comunique à também

distante API-IPSec as operações que a mesma deve efetuar,

ou informe a API-IPSEc de um evento para que as ações de

cada parte possam ser tomadas. A utilização de uma

mensagem IKE por esta comunicação entre API-IPSec será

estudada mais tarde. Um exemplo típico da utilização desta

interface é quando um nó muda de endereço IP dentro de um

quadro Multihoming. Ele pode avisar o nó distante desta

mudança, e dizer ao mesmo de qual maneira as associações

de segurança devem ser consideradas de acordo com o novo

endereço IP.

- Uma interface com a camada IPSec: Esta camada

permite que a API-IPSec traduza ao nível de SPD, SAD e

IKE as requisições provindas das interfaces precedentes.

Page 4: API IPSEC – VIABILIZANDO A SEGURANÇA DE REDES

Fig. 3 – Funcionamento da API IPsec

A fig. 3 coloca em evidência as diferentes bases e o

daemon que interage com o API-IPSec. A camada IPSec é

composta das bases SPD, ASD e PAD. Podemos distinguir

então a SPD correlacionada que se encontra dentro do kernel

e a SPD descorrelacionada que se encontra dentro da ilha do

usuário. IKEv2 e o daemon que permite a negociação das

associações de segurança entre dois endereços IP. A Base

IKEv2 contém o conjunto de contextos ligados a cada canal

IPSec. Estas informações são geralmente utilizadas em caso

de renegociação de chaves para uma associação de segurança

estabelecida.

A API-IPSec mantém atualizado uma base de dados que

contém as informações sobre a SA, as SPs, os contextos IKE,

os contextos de Mobilidade, os contextos de Multihoming.

Em função destas diferentes informações, a API-IPSec vai

poder gerenciar os diferentes casos de atualização ou de

herança de associação de segurança.

B) Vantagens da API IPSec

A API IPSec traz facilidades de segurança para aplicações.

Normalmente, as pessoas que projetam as aplicações não

estão cientes da segurança que as mesmas devem

proporcionar. Com isso o IPsec pode agir como uma caixa de

ferramentas para confidencialidade / autenticação /

integridade das informações, e ajudar na interação entre as

aplicações e as camadas IPSec.

Múltiplas autenticações diminuem o desempenho global.

Um método de autenticação pode ser utilizado em diferentes

camadas, diferentes aplicações paralelas. Isso adiciona

excessos, de tempo de processamento do CPU sem adicionar

segurança se baseado no mesmo pedaço de software, ou no

mesmo certificado.

O IPSec pode ser um recurso compartilhado por todas as

camadas. A API IPsec armazena as informações de

segurança da camada IPsec para evitar dupla autenticação,

assim como múltiplas codificações dos dados.

Quando a segurança é considerada em relação à camada de

nível mais baixo, melhor será a associação de segurança. A

segurança na camada de aplicação fornece segurança para as

camadas de transporte e aplicação. A API IPsec habilita as

aplicações para estipularem a segurança na camada de redes.

O IPSec é um canal de segurança entre dois usuários, e a

negociação geralmente é efetuada por hosts finais. A API

IPsec fornece uma interface remota com confiança em ambas

as partes. Os operadores podem autenticar dois usuários e

conectá-los.

O tunnelling / implantação do IPsec pode ser usado para

migração do Ipv4 para o Ipv6, uma vez que podem ser

usados túneis IPsec ao invés de novos mecanismos para

implantação, o protocolo IPsec já esta implantado na maioria

dos sistemas operacionais como Windows, Linux e MacOSx.

A API IPsec fornece facilidades de migração para as

aplicações, onde a implantação pode ser efetuada nos

próprios sistemas, ao invés de implementadas em sistemas

dedicados.

O IPsec pode ser usado para autenticar fluxos. Isto habilita

a mobilidade e o multihoming, evita múltiplos IKE e

negociações de conexão TCP. A API IPsec facilita o controle

do fluxo. Formalmente os fluxos SS7 são fluxos IP e

precisam ter uma segurança garantida e igualar requisitos de

intercepção legais.

A segurança MIPv6 é baseada no IPsec. O IPsec é

definitivamente a camada a considerar segurança em

ambientes complexos, ele deve ser entendido e

considerado para regras de filtragem. A API IPsec ajuda na

administração das políticas do IPsec.

C) API IPSec e Aplicações

A API fornece facilidades para as aplicações dos usuários

finais, onde as mesmas não têm um nível fixo de segurança.

Não precisamos de confidencialidade quando queremos

perguntar ao jornaleiro o preço do jornal. Mas já uma

empresa multinacional, ou um banco precisa de autenticação

para sua home page publica (para evitar o chamado hijacking

de web site), necessita de confidencialidade quando estamos

digitando códigos secretos (PIN codes), ou nosso número de

cartão de credito.

A API IPsec fornece ferramentas para sintonizar a

segurança como: Administradores podem demandar uma

interface de controle, aplicações podem usar uma simples

interface com palavras chave como NO SECURITY,

AUTHENTICATION,CONFIDENTIALITY, INTEGRITY,

entre outras, além de ser fácil sua utilização não estipulando

a aplicação de ter nenhuma ou total segurança.

D) Continuação das Pesquisas

Em 2008 o MAPS/NSS se posicionou claramente sobre a

utilização do IPSec e sobre a expansão de suas possibilidades

uma vez dentro de novos ambientes mais complexos e

abrindo as possibilidades do IPSec às camadas superiores. Os

ambientes considerados são a mobilidade e o multihoming, e

usos considerados de interação com as aplicações

normalizadas.

Estes estudos são realizados dentro do quadro de

atividades de normalização no âmbito do IEFT assim como

uma participação em projetos colaborativos europeus como o

Page 5: API IPSEC – VIABILIZANDO A SEGURANÇA DE REDES

3MING (projeto ANR), Feel@Home e também como tema

de uma tese.

V. CONCLUSÃO

Para a segurança de redes, o IPsec se torna vantajoso em

alguns termos. Foi normalizado pela IETF, um grupo

renomado perante os protocolos de telecomunicação,

cuidadosamente implementado através de códigos open

source. Além disso, as pessoas que trabalham na construção

de aplicações IPsec são pessoas de segurança, desta forma

pode-se confiar no design assim como na sua

implementação.

Por outro lado, a configuração do IPsec não é fácil, como

podemos verificar quando vamos efetuar a autenticação da

conexão ou troca de chaves de criptografia. Não existem

muitas interações com a camada de aplicação, e ele é muito

centrado na camada de redes. É mais destinado aos

administradores de segurança de redes, do que aos usuários

finais.

Os primeiros protocolos compreendendo IP seguro,

autenticação e cifragem de datagramas, foram publicados em

1995 nas RFC 1825 à RFC 1829. Esses protocolos que

estabeleceram os fundamentos da arquitetura do IPSec,

foram posteriormente superpostos pelas RFC 2401 à RFC

2406, entre outras. Estas RFC previam o uso de dois tipos de

cabeçalhos para serem utilizados no datagrama IP.

A API IPSEC visa assim, fornecer uma segurança para as

conexões e comunicações de redes, através do uso prático do

protocolo IPSEC[RFC 2407] em conjunto com o protocolo

IKEv2 [RFC 4306].

REFERÊNCIAS BIBLIOGRÁFICAS

[1] D.Piper, RFC 2407 - “The Internet IP Security Domain

of Interpretation for ISAKMP”, November 1998.

[2] D. Maughan, M. Schertler, M. Schneider, J. Turner, RFC

2408 - “Internet Security Association and Key Management

Protocol (ISAKMP)”, November 1998.

[3] D. Harkins, D. Carrel, RFC 2409 – “The Internet Key

Exchange (IKE)”, November 1998.

[4] C. Kaufman, RFC 4306 – “Internet Key Exchange

(IKEv2) Protocol”, December 2005.

[5] B. Aboba, L. Blunk, J. Vollbrecht, J. Carlson, H.

Levkowetz, RFC 3748 - “Extensible Authentication Protocol

(EAP)”, June 2004.

[6] S. Kent, K. Seo, RFC 4301 – “Security Architecture for

the Internet Protocol”, December 2005.

[7] S. Kent, RFC 4302 – “IP Authentication Header”,

December 2005.

[8] J. Schiller, RFC 4307 – “Cryptographic Algorithms for

Use in the Internet Key Exchange Version 2 (IKEv2)”,

December 2005.

DADOS BIOGRÁFICOS

Sérgio Henrique Vital de Carvalho Silva, nascido em

28/05/1986 em Uberlândia-MG, é estudante de engenharia

elétrica com ênfase em eletrônica e telecomunicações pela

Universidade Federal de Uberlândia.Realizou um

intercâmbio na França onde fez um Master Recherche

(Mestrado de Pesquisa) na área de Aplicações Repartidas e

Redes no INPG (Instituto Nacional Politécnico de Grenoble

(2008) e um estágio de 6 meses na empresa France Telecom

no centro MAPS de Segurança de Redes (2009).