API IPSEC – VIABILIZANDO A SEGURANÇA DE REDES
Click here to load reader
-
Upload
julio-oliveira -
Category
Documents
-
view
39 -
download
6
description
Transcript of 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.
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
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.
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
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).