FACULDADE SALESIANA DE VITÓRIA
PÓS-GRADUAÇÃO EM SEGURANÇA DE
REDES DE COMPUTADORES
ANDRÉ LUIZ PERCIANO FANELI
VANDERLEI CARLOS MARCHEZINI
OPENVPN: IMPLEMENTAÇÃO DE VPN ATRAVÉS DE SSL
EM AMBIENTE DE SOFTWARE LIVRE
VITÓRIA
2007
ANDRÉ LUIZ PERCIANO FANELI
VANDERLEI CARLOS MARCHEZINI
OPENVPN: IMPLEMENTAÇÃO DE VPN ATRAVÉS DE SSL
EM AMBIENTE DE SOFTWARE LIVRE
Monografia apresentada ao Curso de Pósgraduação em Segurança de Redes de
Computadores da Faculdade Salesiana de
Vitória, como requisito final para obtenção
do título de Especialista em Segurança de
Redes de Computadores.
Orientador: Prof. M. Sc. Ádrian Bonfá Drago
VITÓRIA
2007
Dados Internacionais de Catalogação-na-publicação (CIP)
(Biblioteca da Faculdade Salesiana de Vitória, Espírito Santo, Brasil)
F211o
Faneli, André Luiz Perciano, 1963; Marchezini, Vanderlei Carlos, 1959
Openvpn : implementação de VPN através de SSL em ambiente de
software livre / André Luiz Perciano Faneli, Vanderlei Carlos Marchezini.
– 2007.
133 f. : il.
Orientador: Ádrian Bonfá Drago.
Monografia (Pós-graduação em Segurança de Redes de
Computadores) – Faculdade Salesiana de Vitória.
1. Rede de Computadores – Segurança. 2. Rede Virtual Privada. 3.
OpenVPN. I. Marchezini, Vanderlei Carlos. II. Teixeira, Sérgio. III.
Faculdade Salesiana de Vitória. IV. Título.
CDU: 004.7
ANDRÉ LUIZ PERCIANO FANELI
VANDERLEI CARLOS MARCHEZINI
OPENVPN: IMPLEMENTAÇÃO DE VPN ATRAVÉS DE SSL
EM AMBIENTE DE SOFTWARE LIVRE
Monografia apresentada ao Curso de Pós-graduação em Segurança de Redes de
Computadores da Faculdade Salesiana de Vitória, como requisito final para obtenção do
título de Especialista em Segurança de Redes de Computadores.
Aprovada em 19 de junho de 2007.
COMISSÃO EXAMINADORA
_________________________________________
Prof. M. Sc. Adrian Bonfá Drago
Orientador
_________________________________________
Prof. M. Sc. Sérgio Teixeira
Faculdade Salesiana de Vitória
_________________________________________
Prof. D.Sc. Davidson Cury
Universidade Federal do Espírito Santo
AGRADECIMENTOS
Às famílias, pelo incentivo e paciência com que enfrentaram as inúmeras ausências dos
finais de semana. Ao orientador, Adrian Bonfá Drago, pela atenção, dedicação,
ensinamentos e paciência. Aos demais orientadores e professores do curso de pósgraduação, que colaboraram por meio de críticas e sugestões, contribuindo dessa forma
para a melhoria da qualidade deste trabalho.
RESUMO
Este trabalho objetiva examinar o conceito de VPN (Virtual Private Network) nos aspectos
de aplicabilidade, funcionalidade, segurança, custos e benefícios, valendo-se de algumas
ferramentas de software livre em ambiente Linux. Para tanto, escolheu-se a solução
OpenVPN, que tem como base o protocolo TLS/SSL. A idéia central dessa escolha foi
buscar uma alternativa qualitativamente capaz de equiparar-se às soluções de VPN baseadas
no protocolo IPSec, tecnologia onipresente no mercado e com ampla predominância na
literatura sobre o tema. O OpenVPN é um projeto open source, disponível para diversos
ambientes computacionais e sistemas operacionais, incluindo Linux e Windows, e se
beneficia da maturidade reconhecida do protocolo TLS/SSL, cuja evolução e fortalecimento
decorrem da forma exaustiva com que tem sido analisado à procura de falhas. Ao final, é
apresentada uma proposta de implementação de uma VPN através do OpenVPN num
cenário matriz-filiais e feita a apresentação dos resultados obtidos.
Palavras-chave: Redes de Computadores – Segurança, Rede Virtual Privada, OpenVPN.
ABSTRACT
This work wishes to evaluate the concept of VPN (Virtual Private Network) on applicability,
functionality, safety, costs and benefits, using some free software tools on Linux
environment.
Therefore, the chosen solution was OpenVPN, which is based on the
TLS/SSL protocol. The main idea on this alternative was to search for a capable way of
equaling the solutions of VPN based on the IPSec protocol, technology that is omnipresent
on the market with a wide prevalence on the related literature. The OpenVPN is an open
source project, available for several computational environments and operating systems,
including Linux and Windows, and benefits itself on the maturity recognized on the
TLS/SSL protocol, of wich’s evolution and strengthening come from the exhausting way
with wich has been analyzed in search of flaws.
In the end it is introduced an
implementation proposal of a VPN through the OpenVPN on a matrix-branch scenery and it
is done and presentation of the obtained results.
Keywords: Computer Networks – Security, Virtual Private Network, OpenVPN.
LISTA DE ILUSTRAÇÕES
Figura 1: Rede de computadores ................................................................................... 20
Figura 2: Fluxo normal de dados .................................................................................. 24
Figura 3: Interceptação.................................................................................................. 24
Figura 4: Interrupção ..................................................................................................... 24
Figura 5: Modificação ................................................................................................... 25
Figura 6: Fabricação ...................................................................................................... 25
Figura 7: TCP handshake.............................................................................................. 29
Figura 8: SYN flooding .................................................................................................. 30
Figura 9: Ataque man-in-the-middle............................................................................. 31
Figura 10: Ataque smurf................................................................................................ 33
Figura 11: O modelo de quatro camadas do TCP/IP .................................................... 34
Figura 12: Fluxo de dados entre as camadas da pilha TCP/IP ..................................... 35
Figura 13: Processo de handshake do TCP................................................................... 38
Figura 14: Redes com interligação via roteadores ........................................................ 41
Figura 15: Localização de endereços num frame Ethernet. .......................................... 43
Figura 16: Exemplo de um firewall ............................................................................. 46
Figura 17: Gateway VPN dentro de um firewall. ............................................................ 48
Figura 18: Gateway VPN paralelo ao firewall. .......................................................................................... 48
Figura 19: Gateway VPN atrás de um firewall ............................................................ 49
Figura 20: Processo de cifragem e decifragem ............................................................. 50
Figura 21: Processo de criptografia simétrica......................................................................................... 51
Figura 22: Criptografia simétrica. ................................................................................ 51
Figura 23: Processo de criptografia assimétrica........................................................... 55
Figura 24: Criptografia assimétrica .............................................................................. 56
Figura 25: Representação do algoritmo RSA............................................................... 58
Figura 26: Processamento da função hash.................................................................... 59
Figura 27: Processo de assinatura digital...................................................................... 62
Figura 28: Túnel virtual entre duas redes ..................................................................... 65
Figura 29: Topologia host-host..................................................................................... 69
Figura 30: Topologia host-rede .................................................................................... 70
Figura 31: Topologia rede-rede. ................................................................................... 71
Figura 32: Formato do pacote L2TP.............................................................................. 74
Figura 33: Modos do protocolo IPSec........................................................................... 78
Figura 34: Localização da camada de segurança TLS/SSL na pilha TCP/IP................ 79
Figura 35: Frame Ethernet detalhando os protocolos superiores.................................. 80
Figura 36: TLS/SSL – processo de handshake.............................................................. 82
Figura 37: Diagrama de conexões do laboratório ......................................................... 86
Figura 38: Menu de opções do OpenVPN para Windows .............................................116
LISTA DE QUADROS
Quadro 1: Portas padronizadas .............................................................................................. 37
Quadro 2: Comparação entre protocolos de VPN ................................................................. 84
Quadro 3: Características de uso e localização de chaves e certificados .............................. 98
LISTA DE ABREVIATURAS E SIGLAS
3DES – Triple Data Encryption Standard
ADSL – Asymmetric Digital Subscriber Line
AES – Advanced Encryption Standard
AH – Authentication Header
ANSI – American National Standards Institute
API – Application Programming Interface
ARP – Address Resolution Protocol
ATM – Asynchronous Transfer Mode
BSD – Berkeley Software Distribution
CA – Certificate Authority
CBC – Cipher Block Chaining
CEF – Caixa Econômica Federal
CFB – Cipher Feedback
CRL - Certificate Revogation List
DES – Data Encryption Standard
DHCP – Dynamic Host Configuration Protocol
DNS – Domain Name System
DoS – Denial of Service
ECB – Eletronic Codebook
ESP – Encapsulating Security Payload
FTP – File Transfer Protocol
GPL – General Public License
GRE – Generic Routing Encapsulation
HMAC – Hash Message Authentication Code
ICMP – Internet Control Message Protocol
IDC – International Data Corporation
IDEA – International Data Encryption Algorithm
IETF – Internet Engineering Task Force
IKE – Internet Key Exchange Protocol
IP – Internet Protocol
IPSec – Internet Protocol Secutity
IPv4 – Internet Protocol version 4
IPX – Interwork Packet Exchange
ISO – International Organization for Standardization
ISAKMP – Internet Security Association and Key Management Protocol
ISP – Internet Service Provider
ITU-T – International Telecommunication Union - Telecommunication Standard Sector
L2F – Layer Two Forwarding
L2TP – Layer Two Tunneling Protocol
LAN – Local Area Network
LPCD – Linha Privativa de Comunicação de Dados
LZO - Lempel-Ziv-Oberhumer
MAN – Metropolitan Area Network
MD-5 – Message Digest 5
MHz - Megahertz
MPPE – Microsoft Point-to-Point Encryption
MS-CHAP – Microsoft-Challenge Handshake Authentication Protocol
NAT – Network Address Translation
NetBEUI – NetBIOS Extended User Interface
NIST – National Institute of Standards and Technologies
NSA - National Security Agency
OSI – Open Systems Interconnection
PAM - Pluggable Authentication Modules
PKI – Public Key Infrastructure
POP3 – Post Office Protocol 3
PPP – Point-to-Point Protocol
PPTP – Point-to-Point Tunneling Protocol
RARP – Reverse Address Resolution Protocol
RC6 - Rivest Cipher 6 ou Ron's Code 6
RFC – Request For Comments
RIP – Routing Information Protocol
RSA – Rivest Shamir Adleman
SA – Security Association
SAD – Security Association Database
SERASA – Centralização dos Serviços dos Bancos S.A
SERPRO – Serviço Federal de Processamento de Dados
SHA – Secure Hash Algorithm (SHA-1, SHA-2, SHA-224, SHA-256, SHA-384, SHA-512)
SKEME - Secure Key Exchange Mechanism
SMTP – Simple Mail Transfer Protocol
SNMP – Simple Network Management Protocol
SPD – Security Policy Database
SPI – Security Parameters Index
SRF – Secretaria da Receita Federal
SSH - Secure Shell
SSL – Secure Sockets Layer
TAP - Terminal Access Point Interface
TCP – Transmission Control Protocol
TI – Tecnologia da Informação
TLS – Transport Layer Security
TTL – Time to Live
TUN – Tunneling Interface
UDP – User Datagram Protocol
URL – Uniform Resource Locator
VPN – Virtual Private Network
WAN – Wide Area Network
WEB – World Wide Web
Wi-Fi – Wireless Fidelity
WINS – Windows Internet Name Service
SUMÁRIO
1 INTRODUÇÃO ................................................................................. 15
1.1 Objetivo geral ....................................................................................... 16
1.2 Objetivo específico ............................................................................... 17
1.3 Metodologia de trabalho ........................................................................ 17
1.4 Organização do texto ............................................................................. 18
2 PRINCÍPIOS DE SEGURANÇA DA INFORMAÇÃO NAS REDES .......19
2.1 Redes de computadores..............................................................................20
2.2 Protocolos de comunicação ........................................................... 21
2.3 Fatores de segurança da informação na comunicação ..................... 21
2.4 Ameaças ...................................................................................... 23
2.4.1 Processo normal ................................................................. 24
2.4.2 Interceptação ..................................................................... 24
2.4.3 Interrupção ........................................................................ 24
2.4.4 Modificação ....................................................................... 25
2.4.5 Fabricação ......................................................................... 25
2.5 Principais ameaças e ataques às redes de computadores ................. 26
2.5.1 Vírus ................................................................................. 26
2.5.2 Verme (Worm) ................................................................... 26
2.5.3 Cavalo de Tróia (Trojan horse) .......................................... 26
2.5.4 Back door (Porta dos fundos) ............................................. 26
2.5.5 Bomba lógica (Logic bomb)................................................ 27
2.5.6 Port scanning (varredura de portas) .................................... 27
2.5.7 Estouro de buffer (buffer overflow)..................................... 27
2.5.8 Quebra de senha (password cracking)................................. 28
2.5.9 Engenharia social ............................................................... 28
2.5.10 Sniffing (monitoramento, “grampo”) ................................... 28
2.5.11 DoS – Denial of service (Interrupção de serviços) ............... 29
2.5.12 SYN flooding (Inundação de SYN) ...................................... 29
2.5.13 Ping da morte (Ping of death) ............................................. 30
2.5.14 Spoofs................................................................................ 30
2.5.14.1 IP spoofing ......................................................... 30
2.5.14.2 Sequence number spoofing .................................. 31
2.5.14.3 Man-in-the-middle (homem no meio) .................. 31
2.5.14.4 Redirecionamento............................................... 31
2.5.14.5 DNS spoofing ..................................................... 32
2.5.14.6 Envenenamento de DNS (DNS poisoning)........... 32
2.5.14.7 Smurf ................................................................. 32
3 A ARQUITETURA TCP/IP DE QUATRO CAMADAS ................................34
3.1 Camada de aplicação ..................................................................................36
3.2 Camada de transporte .................................................................................37
3.2.1 Portas .............................................................................................. 37
3.2.2 Sockets ............................................................................................ 37
3.2.3 TCP – Transmission Control Protocol ..........................................38
3.2.4 UDP – User Datagram Protocol ................................................... 39
3.3 Camada de Internet..................................................................................... 40
3.3.1 IP (Internet Protocol) .....................................................................40
3.4
3.3.2 ICMP (Internet Control Message Protocol) ..................................42
Camada de acesso à rede............................................................................43
4 MÉTODOS DE DEFESA......................................................................................... 45
4.1 Firewall ......................................................................................................45
4.2 Firewall e VPN .......................................................................................... 47
4.3 Criptografia ................................................................................................ 49
4.3.1 Criptografia simétrica.....................................................................50
4.3.1.1 Data Encryption Standard (DES) ...................................52
4.3.1.2 Triple Data Encryption Standard (3DES) ...................... 53
4.3.1.3 Advanced Encryption Standard (AES) ........................... 53
4.3.1.4 International Data Encryption Algorithm (IDEA) .........53
4.3.1.5 Blowfish/Twofish ............................................................. 54
4.3.2 Criptografia assimétrica .................................................................54
4.3.2.1 RSA (Rivest, Shamir e Adleman) ...................................57
4.3.2.2 Diffie-Hellman ................................................................ 58
4.3.3 Função hash.................................................................................... 59
4.3.3.1 Message Digest (MD-5)..................................................60
4.3.3.2 Secure Hash Algorithm 1 (SHA-1) .................................60
4.3.4 Assinatura digital............................................................................61
4.3.5 Certificado digital...........................................................................62
5 CONCEITOS SOBRE VPNS................................................................................... 64
5.1 Tunneling ........................................................................................................64
5.2 Autenticação nas extremidades......................................................................65
5.3 Vantagens das VPNs ......................................................................................65
5.3.1 Segurança ...........................................................................................65
5.3.2 Transparência .....................................................................................66
5.3.4 Custos .................................................................................................66
5.3.4 Flexibilidade.......................................................................................66
5.4 Desvantagens das VPNs.................................................................................66
5.5 Comparação com outras tecnologias de acesso remoto................................68
5.5.1 VPN x linhas dedicadas .....................................................................68
5.5.2 VPN x servidor de acesso remoto .....................................................68
5.6 Topologias.......................................................................................................69
5.6.1 Host-host.............................................................................................69
5.6.2 Host-gateway......................................................................................70
5.6.3 Gateway-Gateway..............................................................................70
5.7 Protocolos utilizados nas VPNs .....................................................................71
5.7.1 PPTP – Point to Point Tunneling Protocol.......................................72
5.7.2 L2F – Layer 2 Forwarding................................................................73
5.7.3 L2TP – Layer 2 Tunneling Protocol .................................................73
5.7.4 IPSec – Internet Protocol Security....................................................75
5.7.4.1 Negociação do nível de segurança.....................................76
5.7.4.2 Autenticação e integridade.................................................77
5.7.4.3 Confidencialidade...............................................................78
5.7.5 TLS/SSL – Transport Layer Security / Secure Sockets Layer .......79
5.8 Comparação entre protocolos de tunneling ................................................84
6 IMPLEMENTAÇÃO DE UMA VPN ATRAVÉS DO OPENVPN ...............85
6.1 Estudo de caso .............................................................................................85
6.1.1 Cenário .............................................................................................86
6.1.2 Instalação............................................................................................88
6.1.2.1 Decisão quanto ao modo de operação desejado (router ou
bridge) e do nível de segurança requerido ........................................88
6.1.2.2 Download dos módulos necessários para a plataforma
operacional, arquitetura de processador e nível de segurança
adotado ...........................................................................................89
6.1.2.3 Preparação do kernel dos gateways Linux ......................89
6.1.2.4 Instalação dos módulos baixados nos gateways..............90
6.1.2.5 Criação da infra-estrutura de geração e gerenciamento
de chaves de criptografia e outros elementos de segurança..............91
6.1.2.5.1 Geração da PKI.................................................92
6.1.2.5.2 Matriz ..............................................................95
6.1.2.5.3 Filiais e micro standalone (Windows) ..............97
6.1.2.5.4 Geração de parâmetros Diffie-Hellman............97
6.1.2.5.5 Resumo das características de utilização das
chaves e certificados gerados ...........................98
6.1.2.6 Preparação do arquivo de configuração da Matriz e
setup dos demais elementos necessários ao funcionamento do
OpenVPN ...........................................................................................99
6.1.2.7 Preparação dos arquivos de configuração das Filiais e
setup dos demais elementos necessários ao funcionamento do
OpenVPN ....................................................................................107
6.1.2.8 Instalação e configuração do OpenVPN no micro
standalone (ambiente Windows).................................................. 112
7
CONSIDERAÇÕES FINAIS E FUTUROS TRABALHOS..........................119
REFERÊNCIAS........................................................................................................... 123
ANEXOS .........................................................................................................................125
ANEXO I - O algoritmo Diffie-Hellman..........................................................125
APÊNDICES........................................................................................................................127
APÊNDICE A - Comparativos entre OpenVPN e VPNs IPSec ......................127
APÊNDICE B - Características do OpenVPN .................................................128
15
1 INTRODUÇÃO
Nos últimos anos têm ocorrido grandes mudanças na área de tecnologia da informação,
abrangendo tanto o hardware, o software e a infra-estrutura de comunicações, como também
as formas de distribuição de conteúdos através da Internet.
Inicialmente as redes locais de computadores eram utilizadas basicamente para o
compartilhamento de seus recursos e aplicações, sem muita preocupação com aspectos de
segurança. As razões para isso eram diversas: a abrangência física da rede era limitada, o
número de usuários era pequeno, as aplicações eram menos críticas no quesito
disponibilidade, etc.
Com o advento da internet comercial e com a.crescente necessidade de comunicação entre as
redes locais, incluindo o acesso a sistemas remotos, tornou-se necessária a adoção de uma
política de segurança que garantisse o funcionamento desse conjunto de forma segura e
confiável. Vários métodos foram desenvolvidos com este objetivo, entre eles a VPN (Virtual
Private Network - Rede Privada Virtual.).
Antes do surgimento do conceito de VPN, as comunicações entre as várias localidades de uma
empresa eram feitas através de serviços de frame relay, linhas privadas, servidores de acesso
remoto e modems. Apesar de serem seguras e apresentarem grande disponibilidade, essas
tecnologias tinham um custo elevado e pouca escalabilidade.
A cada nova filial a ser
conectada à rede da empresa, entre outras situações possíveis, uma nova conexão dedicada
deveria ser adicionada.
A tecnologia utilizada pela VPN consiste em criar "túneis virtuais" de comunicação entre as
redes que se deseja interligar, fazendo com que os dados trafeguem por eles de forma
criptografada. A criptografia é imprescindível, uma vez que o meio físico de interligação, por
questões de custo e abrangência geográfica, é a própria Internet.
Como benefício adicional, a VPN permite expandir a quantidade de computadores que podem
ter acesso a essa rede, sem investimentos em infra-estrutura extra. Permite também o suporte a
usuários móveis, sem a utilização de modems ou servidores de acesso remoto, ajudando a
16
aumentar a flexibilidade e diminuir os gastos com equipamentos extras.(SCRIMGER et al,
2002).
1.1 Objetivo geral
Este trabalho propõe-se a demonstrar a funcionalidade e a segurança da tecnologia VPN, em
ambiente Linux, utilizando a solução de software livre OpenVPN, Para isso, será utilizado um
cenário de integração matriz-filial com links de comunicação ADSL.
A configuração de uma VPN requer inicialmente a escolha do sistema operacional dos
gateways e a ferramenta que será usada para implementar os protocolos adotados. Existem
várias ferramentas disponíveis no mercado, com preços variados ou totalmente gratuitas. Este
estudo preocupou-se com três fatores básicos: segurança, usabilidade e baixo custo de
implementação. Por isso, foi utilizado o Linux, sistema operacional bastante flexível, podendo
ser configurado com o mínimo de opções necessárias, de forma a garantir maior segurança da
rede. Além disso, por ser de livre distribuição e estar disponível gratuitamente através da
Internet, reduz drasticamente os gastos com licenças, o que se reflete no custo total de
propriedade.
A distribuição escolhida foi a Fedora, derivada do Red Hat, pois além de ser largamente
utilizada em servidores do mundo inteiro, sendo reconhecida por sua estabilidade, foi a
utilizada nos exercícios de laboratório do curso de pós-graduação ao qual se relaciona este
trabalho, o que garante bastante familiaridade com suas particularidades.
Em relação à solução de VPN, foi observado inicialmente uma predominância quase absoluta
de soluções baseadas no protocolo IPSec. Percebeu-se um market share1, entre soluções
proprietárias e livres, em torno de 60% (RENDON, 2004). Na literatura sobre VPNs foi
observada a mesma predominância. Analisadas as razões, constatou-se que requisitos como
robustez, segurança, aderência a padrões de mercado, variedade de recursos, entre outros,
justificavam tal posição. No mundo do software livre o IPSec estava representado pelo
OpenS/Wan (derivado do antigo FreeS/Wan), tendo sido a solução de VPN utilizada nos
exercícios de laboratório do curso de pós-graduação citado. A partir dessas observações, e da
1
Participação de mercado.
17
rejeição à idéia de produzir apenas mais um trabalho sobre o tema, foi levantado o seguinte
questionamento: EXISTE OUTRO PROTOCOLO CAPAZ DE FAZER FRENTE AO IPSEC
EM RELAÇÃO ÀS CARACTERÍSTICAS CITADAS, COM DISPONIBILIDADE DE
SOLUÇÕES OPEN SOURCE? A resposta foi SIM, obtida através de pesquisas na Internet,
quando travou-se contato com o OpenVPN, solução baseada no protocolo TLS/SSL. Pelas
características básicas exigidas (as mesmas citadas antes para as soluções IPSec), aliadas a
facilidade de configuração, disponibilidade como freeware para vários sistemas operacionais,
incluindo o Microsoft Windows e, principalmente e por conviver de forma amigável com
redes baseadas em NAT e IP dinâmico, a ferramenta adotada acabou sendo o OpenVPN.
Como é comum em se tratando de softwares open source e completamente gratuitos (Linux e
OpenVPN), as orientações para instalação e configuração foram obtidas principalmente da
Internet, através de material disponível on-line.
1.2 Objetivo específico
Sedimentar e ampliar os conhecimentos adquiridos no curso pós-graduação em segurança de
redes com Linux, ministrado pela FACULDADE SALESIANA no período de 2004 a 2006, e
que se relacionam com o projeto proposto: segurança de redes, métodos de criptografia,
criptografia de chave pública, geração e utilização de certificados digitais, protocolos de
segurança, conceitos de firewall, conceitos de VPN, entre outros.
1.3 Metodologia de trabalho
Após tomada a decisão sobre o tema VPN e escolhida a ferramenta OpenVPN, o trabalho
voltou-se para a construção de um estudo de caso envolvendo um cenário de interligação
matriz-filial, com suporte adicional a micros isolados acessando a matriz.
Procurou-se
conceituar os aspectos relevantes de implementação, o que exigiu algumas escolhas entre as
alternativas suportadas.
Foram então aferidos os aspectos escolhidos para análise de
resultados: flexibilidade de uso, segurança e comportamento nas condições adversas adotadas
(links com IP dinâmico em todas as pontas). Ao longo do trabalho, foram conceituados os
18
diversos elementos utilizados no projeto: redes, protocolos de rede, TCP/IP, ataques comuns
na Internet, segurança na Internet, protocolos de segurança, etc.
1.4Organização do texto
Este capítulo trata da introdução do trabalho, dos seus objetivos, da metodologia adotada e
resume o conteúdo dos diversos capítulos.
O capítulo 2 aborda os princípios de comunicação nas redes de computadores, bem como
questões de segurança, conceituando os fatores de segurança e descrevendo os tipos de ataque
mais comuns.
O capítulo 3 explica o modelo de quatro camadas do TCP/IP, expondo de forma resumida
cada uma delas. Os conceitos abordados neste capítulo são fundamentais para o entendimento
do funcionamento da VPN, e de algumas decisões de implementação adotadas.
O capítulo 4 contém informações relevantes a respeito dos métodos de defesa adotados nas
VPNs, sendo abordados temas como criptografia, protocolos de cifragem, protocolos
para troca de chaves, mecanismos de hashing, assinaturas e certificados digitais, entre
outros.
O capítulo 5 trata exclusivamente dos conceitos concernentes as VPNs, sendo observadas as
suas principais características, seus elementos, as topologias e as vantagens e desvantagens do
seu uso em comparação com outras tecnologias. Também aborda e compara alguns dos
principais protocolos usados no estabelecimento de VPN´s.
O capítulo 6 mostra em detalhes como uma VPN experimental utilizando o OpenVPN foi
implementada, descrevendo o ambiente de testes e os aspectos relevantes de sua configuração,
além dos resultados obtidos.
Por fim, no capítulo 7, vêm as considerações finais e sugestões para trabalhos futuros
relacionados ao tema.
19
2 PRINCÍPIOS DE SEGURANÇA DA INFORMAÇÃO NAS REDES
Este capítulo trata dos princípios da segurança que se aplicam às atividades da área de
tecnologia da informação, através dos quais se busca, utilizando ferramentas adequadas de
hardware e de software, evitar os riscos de vazamento de dados, uso indevido ou roubo de
informações, interceptação de senhas, indisponibilização de serviços, ou qualquer outro tipo de
ameaça que possa causar prejuízo e descontinuidade de serviços para as organizações.
As redes de computadores surgiram como resposta à necessidade da troca de informações,
permitindo o acesso a dados localizados fisicamente a distâncias consideráveis.
Com as sucessivas reduções no custo dos insumos de informática observadas nos últimos anos,
é comum que uma empresa possua uma ou várias filiais com suas próprias redes de
computadores. Em geral, porém, elas não têm qualquer ligação entre si, fato que se deve
principalmente ao fator custo. Este, por sua vez, está relacionado, em alguns casos, à grande
distância geográfica existente entre elas. Apesar disso, a troca de informações, boa parte das
quais sigilosas, é essencial. Com o objetivo de dar suporte a essa necessidade, diversos
métodos foram desenvolvidos para interligar essas redes de forma segura.
Atualmente, a Internet é o meio público mais utilizado para a troca de informações entre
organizações ou entre diferentes localidades de uma mesma empresa. A VPN constitui uma
das principais formas de interligação dessas redes, sendo comum a utilização de meios
públicos de transmissão de dados, dentre eles a Internet . A principal característica da VPN é a
criação de “túneis virtuais” de comunicação entre as redes, de tal forma que os dados
trafeguem embaralhados ou criptografados.
De acordo com Cyclades “A principal motivação para a implementação de VPNs é financeira
[...]”. Tal percepção tem despertado um interesse crescente de empresas com diversas filiais
que necessitam de uma forma econômica de comunicação, a adotarem esta tecnologia.
(CYCLADES, 2000)
Outra característica que as VPNs possuem é a escalabilidade. Uma vez implantado um site de
acesso (matriz ou filial), pode-se adicionar novos computadores à rede local, com pleno
acesso aos demais sites que fazem parte da VPN, sem investir em infra-estrutura extra.
20
O suporte a usuários móveis também é garantido pela tecnologia, que dispen s a a
m anut enção de i números modems, linhas telefônicas e servidores de acesso remoto.
A correta utilização das ferramentas de VPN, combinada com outras ferramentas de
segurança e com medidas de controle adequadas, proporciona um ambiente seguro e
organizado e concede benefícios diversos: aumento de produtividade, funcionamento
contínuo e sem interrupção das aplicações e ambiente seguro para as informações da
empresa.
2.1 Redes de computadores
Para Tanenbaum, “uma rede de computadores é um conjunto de computadores autônomos
interconectados, trocando informações entre si, através de fios de cobre, fibras ópticas, links
de rádio, microondas, satélites de comunicação, entre outros”, a Figura 1, composta por cinco
computadores, uma impressora e um hub2, demonstra um exemplo de rede de computadores.
(TANENBAUM, 1997)
Figura 1 – Rede de computadores
A tecnologia de interligação de computadores e periféricos em redes foi criada objetivando
inicialmente compartilhar recursos entre os seus usuários, tais como aplicações, equipamentos
2
Dispositivo de baixo custo, responsável por concentrar as conexões dos equipamentos de uma rede local,
repetindo os sinais recebidos para todas as suas portas. Assim, sua forma de trabalho é mais simples se
comparada à de um switch ou de um roteador.
21
e dados.
Tal compartilhamento deveria se dar de forma transparente, independendo da
localização física dos usuários ou dos próprios recursos.
Três itens foram fundamentais para o desenvolvimento das redes: a confiabilidade (duas ou
mais fontes alternativas de fornecimento do mesmo dado), a escalabilidade (possibilidade de
aumentar os recursos gradualmente, à medida que isso se mostra necessário) e a economia de
custos (troca de caríssimos computadores de grande porte – mainframes – por um maior
número de computadores pessoais de preço accessível).
Um exemplo de rede mundialmente difundida é a Internet, que possui milhões de
computadores interconectados trocando as mais diversas informações, tais como email,
arquivos, páginas web pessoais e corporativas, blogs, vídeos, etc...
2.2 Protocolos de comunicação
A família de protocolos TCP/IP, por se constituir no protocolo básico da Internet desde a sua
criação, é amplamente utilizado para a comunicação tanto na rede local quanto entre redes.
Por razões históricas, o projeto do TCP/IP não deu ênfase às questões de segurança. Trata-se,
portanto, de um protocolo muito inseguro. As aplicações que demandam algum nível de
segurança devem agregar novas funcionalidades ao protocolo original. Isso pode ser feito
adicionando novos cabeçalhos ou novas camadas, o que, em ambos os casos, significa
introduzir um novo protocolo. Dada sua importância, no capítulo seguinte é mostrado em
detalhes o TCP/IP, com todos os seus principais protocolos e conceitos associados.
2.3 Fatores de segurança da informação na comunicação
Dado que o TCP/IP por si só não provê mecanismos para uma comunicação segura e
confiável entre dois nós de rede, foram desenvolvidas ao longo dos anos ferramentas que
buscam fechar essa lacuna. Essas ferramentas serão mais detalhadas no capítulo 4.
Além dos problemas intrínsecos do TCP/IP, outros fatores de risco existem, situando-se no
22
âmbito do sistema operacional, dos protocolos e dos aplicativos: falhas de programação que se
traduzem em vulnerabilidades exploráveis por atacantes. As principais origens das
vulnerabilidades são:
-
Deficiências de projeto: provocam brechas de segurança no hardware ou no software;
-
Deficiências de implementação: instalação/configuração incorreta, por inexperiência, falta de
treinamento ou desleixo;
-
Deficiências de gerenciamento: procedimentos inadequados, verificações e monitoramentos
insuficientes.
Exemplos de situações que podem ter como conseqüência o surgimento de vulnerabilidades:
-
Software: limites mal definidos, bugs no projeto ou na programação, algoritmos deficientes em
função de situações não previstas;
-
Instalação física: má proteção física de equipamentos e de mídias contendo dados;
-
Mídia: roubo, perda, danificação, desgaste não controlado de discos, fitas etc...
-
Transmissão: interceptação de sinal, monitoramento, grampo;
-
Humana: incompetência técnica, desleixo, preguiça, ganância, revolta, e outras.
Assim, considerando que o meio de comunicação e os dispositivos que possibilitam o acesso a
ele são vulneráveis, as entidades envolvidas na troca de informações pela rede devem garantir
a segurança e o sigilo, além de estar preparadas para se defender de atacantes que conhecem e
exploraram tais vulnerabilidades.
Quando se fala em Internet, essa preocupação torna-se ainda maior. Com sua popularização
crescente nas empresas, o risco das informações serem acessadas ou alteradas é grande, pois,
em tese, qualquer pessoa conectada à rede pode vir a tomar posse delas, caso não estejam bem
protegidas.
Segundo Margi, as principais funções de segurança são: (MARGI, 2000)
-
Autenticidade: Procura certificar-se que a pessoa com quem se está trocando
informações sigilosas é quem realmente deveria ser. A verificação de autenticidade é
necessária após qualquer processo de identificação, seja de usuário para sistema, de
sistema para usuário ou de sistema para sistema;
23
-
Confidencialidade: Consiste em proteger a informação contra leitura ou cópia por alguém
que não tenha sido explicitamente autorizado pelo seu proprietário. Isso é feito geralmente
através do uso de criptografia;
-
Integridade: D e v e a ssegurar que os dados não serão alterados durante s u a
transmissão;
-
Controle de acesso: Limita o acesso e a utilização de recursos apenas a pessoas
autorizadas. Acessos desconhecidos ou feitos por elementos não autorizados colocam a
necessidade de uma verificação em todos os recursos envolvidos em busca de possíveis
danos que possam ter sido causados ao sistema, mesmo que nenhuma evidência disso tenha
sido percebida;
-
Disponibilidade: Consiste na proteção dos serviços prestados pelo sistema de forma que
eles não sejam degradados ou tornem-se indisponíveis sem autorização. Deve manter os
recursos disponíveis, mesmo em caso de ataques;
-
Não-repúdio: Impede que uma entidade (computador, pessoa, etc.) envolvida em uma
transação de transmissão ou de recepção de dados, negue a sua participação nela;
-
Auditoria: Consiste na capacidade de verificação das atividades do sistema e
determinação do que foi feito, quando, por quem e o que foi afetado. Aplica-se não apenas
à verificação das atividades de usuários não autorizados, mas também de usuários
autorizados, que podem cometer erros ou executar ações maliciosas no sistema.
2.4 Ameaças
Para tornar uma rede mais segura e confiável, deve-se estar atento às principais ameaças que
podem comprometer a integridade das informações nela existentes. Ao contrário do que se
pensa, nem sempre o inimigo está fora da rede, como um hacker3 ou cracker 4, mas
event ualm ente dentro dela, como por exemplo um funcionário mal intencionado, que
geralmente possui livre acesso aos recursos disponíveis.
As ameaças são classificadas em dois tipos: passivas e ativas. Uma ameaça é dita passiva
quando o sistema continua sua operação sem a percepção de ter um invasor na rede e,
geralmente, tem como conseqüência o roubo de informações. Uma ameaça ativa ocorre
quando o invasor prejudica o sistema, atingindo os dados ou degradando os serviços.
(BATISTA, 2002)
3
4
Indivíduo hábil em enganar os mecanismos de segurança de sistemas de computação.
O mesmo que hacker, mas com o intuito de roubar, alterar ou apagar as informações da rede invadida.
24
Os principais tipos de ataques, descritos por Margi, são mostrados a seguir de forma
esquemática. (MARGI, 2000)
2.4.1 Processo Normal
A Figura 2 ilustra um processo normal para efeito de comparação.
Figura 2 – Fluxo normal de dados
2.4.2 Interceptação
Ataca a confidencialidade. É um ataque passivo, conforme a Figura 3.
Figura 3 – Interceptação
2.4.3 Interrupção
Ataca a disponibilidade. É um ataque ativo como demonstrado na Figura 4 a seguir.
Figura 4 – Interrupção
25
2.4.4 Modificação
Ataca a integridade. É um ataque ativo, conforme a Figura 5.
Figura 5 - Modificação
2.4.5 Fabricação
Ataca a autenticidade. O invasor se faz passar por uma origem conhecida do destino e simula
uma comunicação falsa. É um ataque ativo como ilustrado na Figura 6.
Figura 6 – Fabricação
26
2.5 Principais ameaças e ataques às redes de computadores
A World Wide Web (Web) foi projetada sem muita, ou quase nenhuma, preocupação, com
segurança. O objetivo principal era disponibilizar informações de uma forma mais amigável
que os recursos disponíveis na época. Com o rápido crescimento da Web e com a
diversificação de sua utilização, a segurança se tornou um ponto de importância crucial.
2.5.1 Vírus
É um programa ou fragmento de código, incapaz de funcionar de forma autônoma, requerendo
por isso um programa hospedeiro, ao qual se anexa. Uma vez instalado num sistema, entra em
operação quando o programa infectado é executado. Utiliza uma técnica de autopropagação,
sendo capaz de infectar outros programas presentes no mesmo sistema ou alcançar outros
sistemas através de emails com anexos infectados.
2.5.2 Verme (Worm)
Em geral, é um programa independente (autônomo), característica que o diferencia dos vírus.
Sua concepção faz com que se propague procurando outros sistemas através das conexões de
redes acessíveis ao sistema infectado. Atualmente existem programas de intrusão que reúnem
características de vírus e worms.
2.5.3 Cavalo de Tróia (Trojan horse)
Programa que se apresenta com tendo uma determinada finalidade, que realmente tem, mas,
adicionalmente e de forma secreta, possui uma segunda função cujo objetivo é abrir o
computador para invasões, acessos remotos ou roubo de informações (senhas, por exemplo).
2.5.4 Back door (Porta dos fundos)
Função não documentada de um programa de conexão ou autenticação, criada secretamente
por quem o projetou ou programou. Em geral, objetiva permitir ou facilitar o acesso a um
27
sistema, ou ainda permitir o acesso privilegiado a alguém. É comum que um hacker, após
invadir um sistema, instale uma back door que lhe permita retornar futuramente caso o usuário
ou administrador do sistema invadido descubra que sua segurança foi violada. Pode estar na
forma de um programa executável, de um script (muito comum no mundo Unix) ou de
elementos do sistema (exemplo: uma conta de usuário com nome comum, mas com
privilégios de administrador). Essas várias formas da back door a diferenciam dos trojans,
que são sempre arquivos executáveis.
2.5.5 Bomba lógica (Logic Bomb)
Programa ou seção de um programa projetado para executar alguma atividade ilegal
relacionada com intrusão, mas com a característica particular de ser ativado por determinada
condição lógica.
2.5.6 Port scanning (Varredura de portas5)
Técnica de reconhecimento bastante utilizada por hackers. Consiste num programa que
procura descobrir as portas associadas aos daemons em execução no sistema que se deseja
invadir. De posse dessas informações, o hacker pode planejar o ataque utilizando alguma
vulnerabilidade daquele daemon.
2.5.7 Estouro de buffer (Buffer overflow)
Consiste em enviar para um programa que espera a digitação de um dado qualquer uma
informação que excede o tamanho previsto, ou que seja inconsistente com o padrão de
armazenamento requerido para aquele dado. Isso só é possível em programas que não tratam
ou tratam de forma inadequada a consistência dos dados de entrada. A conseqüência é a
desestruturação do código em execução, permitindo que código estranho seja introduzido e
executado. Esse “código estranho” pode fazer parte da entrada de dados não consistida. Outra
5
Porta (port) é representada por um número situado entre 1 e 65535 cuja função é identificar a aplicação à qual o
processo de comunicação se refere (vide capítulo 3 – item 3.2.1)
28
possibilidade é que esses dados entrados de forma maliciosa forneçam uma chamada para a
execução de um programa já presente no sistema ou localizados remotamente. Nas formas
mais comuns de buffer overflow, cujas vítimas são servidores web ou ftp, o atacante submete
uma URL6 muito grande (acima de 150 caracteres) que faz com que os servidores parem de
responder.
2.5.8 Quebra de senha (Password cracking)
Também conhecido como ataque de força bruta. Ocorre quando se tenta várias possibilidades
de senha para ver se uma delas coincide. É comum o uso de “dicionário” de
palavras/expressões comuns para balizar as tentativas. Existem muitos programas quebrasenha disponíveis para a maioria dos sistemas operacionais e de rede.
2.5.9 Engenharia social
Utiliza métodos não-técnicos para obter acesso a um sistema, em geral através de processos de
persuasão, que levam alguém a revelar informação sigilosa. Exemplo típico: ligar para alguém
pertencente ou com acesso aos sistemas de uma empresa, identificando-se de forma
convincente como um elemento pertencente à área de suporte técnico, e inventar uma história
para solicitar a senha de acesso da vítima.
2.5.10 Sniffing (Monitoramento, “grampo”)
Consiste no monitoramento dos pacotes transitando na rede. É um processo passivo. Muitas
vezes são usadas ferramentas de fabricantes ou comerciais, criadas com propósitos legítimos
(gerenciamento e manutenção). As informações obtidas são endereços IP, senhas, usernames,
etc. Baseia-se no fato de que algumas aplicações (telnet, por exemplo) não criptografam as
senhas digitadas pelo usuário, fazendo com que trafeguem livremente até o servidor.
6
Uniform Resource Locator – Define o protocolo de acesso e o endereço de uma informação na Internet, sendo
utilizada nas aplicações, incluindo os web browsers, para fins de endereçamento.
29
2.5.11 DoS - Denial of Service (Interrupção de Serviço)
Ação que interrompe um serviço ou impede totalmente seu uso por usuários/entidades
legítimos. O objetivo principal é “tirar do ar” (indisponibilizar) um serviço, apenas para
causar transtorno/prejuízo, ou para eliminar uma proteção que assim permitiria ao hacker
utilizar outras formas de acesso não autorizadas.
Os tipos de ataques DoS mais comuns são:
-
Consumo da banda de rede: o atacante possui banda maior que a da rede alvo ou vários
atacantes atuam simultaneamente para provocar a sobrecarga;
-
Consumo de recursos de sistema: visa criar situações de abuso ou sobrecarga que
ultrapassem o limite de determinado recurso (buffer, HD...);
-
Adulteração de rotas/DNS: ao invés de desativar um serviço, impede o acesso ao serviço
legítimo (DNS Poisoning, já visto anteriormente).
A exploração de falhas conhecidas do ambiente ou do software que têm como conseqüência a
interrupção de determinado serviço.
2.5.12 SYN Flooding (Inundação de SYN7)
Ataca o handshake de 3-vias (3-way handshake) do estabelecimento de conexão TCP. O
cliente envia uma sequüência SYN; o servidor o reconhece e responde com um SYN-ACK; o
cliente reconhece a resposta enviando ACK8 e inicia a transferência de dados. A Figura 7
mostra o processo normal de estabelecimento de uma conexão TCP.
Figura 7 – TCP Handshake
7
SYN (Synchronize sequence number) – pacote enviado por um dispositivo de rede ao seu destinarário para
indicar que deseja iniciar uma conexão TCP.
8
ACK (Aknowledgement packet) – pacote de confirmação que o destino envia à origem para sinalizar que
recebeu corretamente os dados enviados através de uma rede.
30
O ataque consiste em enviar SYNs e não responder aos SYN-ACK, deixando em aberto os
processos de estabelecimento de conexão até ocupar todos os buffers de conexão do servidor.
Com isso, outros clientes não conseguem iniciar conexões legítimas e o ataque pode derrubar
o sistema operacional se a situação consumir toda a memória livre do servidor. A Figura 8
mostra esse processo.
Figura 8 – SYN Flooding
2.5.13 Ping da Morte (Ping of Death)
O ping é um comando do TCP/IP que envia um pacote IP para um endereço, para testar se ele
existe e está “vivo”. Um sistema vulnerável não trata adequadamente pacotes ICMP (pacote
de controle da camada IP) maiores do que o normal. O ataque é feito enviando uma seqüência
de pings com tamanho máximo (muito maior que o comum), que sobrecarregam o sistema
atacado. Portanto, trata-se de um tipo de ataque que explora uma vulnerabilidade.
2.5.14 Spoofs
São ataques baseados na falsificação ou disfarce da identidade do atacante. Existem vários
ataques desse tipo desse tipo, sendo os principais mostrados a seguir.
2.5.14.1 IP Spoofing
Conforme será detalhado no capítulo 3, todo dispositivo em rede TCP/IP tem um endereço IP
único, que é sua identificação (ex: 141.31.48.18). A técnica consiste em atribuir à máquina
31
invasora um IP que possa ser aceito pelos sistemas de validação (roteador, firewall) da rede
na qual se situa o servidor alvo do ataque.
2.5.14.2 Sequence Number Spoofing
Também conforme será detalhado no capítulo 3, conexões de rede TCP/IP usam números de
seqüência, incluídos nas transmissões e incrementados por transação. Se o algoritmo de
geração de números é previsível, um hacker pode monitorar a conexão, gravar a troca de
números de seqüência e prever os próximos para se inserir na conexão.
2.5.14.3 Man-In-the-middle (Homem no meio)
Consiste numa técnica em que o invasor se interpõe entre dois computadores que se
comunicam. O tráfego entre os dois computadores é interceptado, de forma imperceptível
para ambos. O invasor então altera os dados transmitidos de forma a atingir seus objetivos. É
um ataque difícil de ser implementado por exigir do invasor grande conhecimento de
programação e das características das redes nas quais se inserem os computadores alvo. A
Figura 9 a seguir ilustra como isso acontece.
Figura 9 – Ataque man-in-the-middle
2.5.14.4 Redirecionamento
Consiste em inserir links para destinos falsos. O usuário pensa que está se comunicando com
determinada entidade, quando na verdade foi redirecionado para outro servidor que se
32
comporta aparentemente como o original. O exemplo mais corriqueiro desse tipo de ataque é
aquele em que os usuários de home banking são direcionados para uma página falsa que
emula o layout e forma de interação da página original. Com isso, o invasor consegue capturar
a senha e outros dados do usuário.
2.5.14.5 DNS spoofing
Consiste em alterar o endereço IP associado a determinado hostname9, no servidor DNS do
domínio daquele hostname. Exemplo: quando alguém fizer um acesso ao host identificado
pelo hostname www.bancodobrasil.com.br, a consulta ao servidor DNS do domínio
bancodobrasil.com.br retornará um IP que não corresponde ao IP do site do Banco do Brasil,
mas a outro site previamente preparado para isso. Tal ataque requer a invasão do servidor
DNS do domínio do servidor alvo.
2.5.14.6 Envenenamento de DNS (DNS Poisoning)
Baseia-se no fato de que as consultas mais freqüentes feitas a um servidor DNS são
armazenadas em cache para facilitar futuras consultas (da próxima vez, não será mais
necessário um acesso físico para obter a resposta, uma vez que ela já se encontra disponível).
O ataque consiste em alterar o IP da máquina alvo no cache DNS, de forma a se obter uma
resposta que direciona o acesso para uma máquina previamente preparada, tal como ocorre no
DNS spoofing.
2.5.14.7 Smurf
O atacante envia uma mensagem ICMP do tipo ECHO REQUEST fazendo spoofing do
endereço de origem (substituindo-o pelo endereço IP da máquina alvo do ataque) e solicitando
uma resposta (ICMP ECHO REPLY) a todas as máquinas da rede escolhida para desferir o
ataque. A rede inteira responde para a máquina alvo real enviando o ECHO REPLY, o que
sobrecarrega a rede e o sistema alvo. A Figura 10 ilustra o que ocorre.
9
Hostname - Nome que identifica um computador ou outro recurso na rede.
33
Figura 10 – Ataque Smurf
34
3 A ARQUITETURA TCP/IP DE QUATRO CAMADAS
O TCP/IP é um conjunto de protocolos de interconexão de sistemas que utiliza uma
arquitetura de quatro camadas. Cada camada desse modelo consiste de um conjunto de
protocolos que são referenciados como “conjunto de protocolos TCP/IP” (TCP/IP protocol
suíte). As quatro camadas são: acesso à rede, internet, transporte e aplicação.
A Figura 11 mostra a disposição das quatro camadas, sendo suas posições relativas importante
porque definem o interfaceamento entre elas e delas com as aplicações de rede e com a rede
física.
Figura 11 – O modelo de quatro camadas do TCP/IP
Cabe observar que não existe uma correspondência exata em termos de agrupamento das sete
camadas do modelo OSI nas quatro camadas da arquitetura TCP/IP. Por exemplo, a camada 3
do modelo OSI (rede) corresponde à camada 2 do TCP/IP (internet), enquanto a camada de
transporte e parte da camada de sessão do modelo OSI correspondem à camada de transporte
do TCP/IP.
35
O funcionamento do modelo de camadas baseia-se na adição de cabeçalhos aos dados
transmitidos pela aplicação, em cada camada, e, no lado receptor, pela sua extração à medida
em que ocorre o processamento nas respectivas camadas. Os dados contidos nos cabeçalhos
contêm informações importantes para o transporte físico e para o processamento. No lado
emissor, cada camada, começando pela de aplicação, insere o seu cabeçalho, e trata a
mensagem recebida da camada superior como se fossem apenas dados. Assim, a mensagem
vai ganhando novos cabeçalhos de controle à medida em “desce” pela pilha TCP/IP, até ser
transmitida pelo meio físico.
No lado receptor, os cabeçalhos vão sendo retirados e
processados por cada camada, na medida em que “sobem” pela pilha. Quando a mensagem
chega à aplicação de destino, está livre de cabeçalhos de controle e corresponde exatamente à
informação transmitida pelo emissor.
A Figura 12 ilustra o fluxo de dados pela pilha TCP/IP entre dois hosts (A e B) com um
roteador entre eles.
Figura 12 – Fluxo de dados entre as camadas da pilha TCP/IP
36
3.1 Camada de aplicação
Funciona como uma interface de ligação entre os processos de comunicação de rede e as
aplicações utilizadas pelo usuário. Não se deve confundir a camada de aplicação com as
aplicações do usuário propriamente ditas.
Por exemplo, o protocolo SMTP situa-se na
camada de aplicação, mas um usuário não o utiliza diretamente. Ao invés disso, faz uso de
um programa cliente de correio eletrônico, que por sua vez utiliza o protocolo SMTP para
enviar emails. Cabe observar também que elementos da camada de aplicação podem estar
implementados no próprio sistema operacional, e não necessariamente em ferramentas de
terceiros.
É de vital importância perceber que as aplicações de rede normalmente requerem dois
programas separados: um módulo servidor (server) e um módulo cliente (client). O módulo
servidor geralmente é executado em background e é iniciado quase sempre junto com o
sistema operacional, sendo referenciado pelo termo “daemon”. Do outro lado do link de rede,
um usuário executa o módulo cliente.
Nesta camada, os hosts são referenciados (endereçados) por um nome, conhecido como
hostname.
Em aplicações voltadas para a Internet, utiliza-se uma hierarquia de nomes
baseada em domínios e sub-domínios. Exemplo de um hostname completamente identificado
(fully qualified hostname) seria: ftp.milmicroscorp.com.br, cuja interpretação seria: o host
“ftp” pertence à organização “milmicroscorp”, que situa-se no sub-domínio “com” e no
domínio “br”. Em outras palavras, identifica o servidor de ftp da empresa milmicroscorp, que
pertence ao mundo das empresas comerciais (.com) e situa-se no Brasil (.br). Esse host ftp
possui um endereço IP, que está associado ao seu hostname. Essa associação é mantida por
um sistema de abrangência global chamado DNS (Domain Name Service).
Exemplos de protocolo: File Tranfer Protocol (FTP), Telnet, Simple Network Management
Protocol (SNMP).
37
3.2 Camada de Transporte
Fornece serviços de entrega fim-a-fim, entre servidor e cliente. Entre suas principais funções
pode-se citar a organização das mensagens recebidas das camadas mais altas em segmentos de
tamanho menor, o controle de erros e o controle de fluxo fim-a-fim. Os protocolos dessa
camada são o UDP e o TCP.
3.2.1 Portas
Um conceito importante do mundo TCP/IP é o número de porta (port number) ou
simplesmente porta. A cada aplicação de rede rodando num determinado computador (host) é
associada uma única porta. Essa associação ocorre na camada de transporte. De forma
simplificada, a porta pode ser vista como o endereço da aplicação dentro do host.
O
cabeçalho dessa camada especifica sempre uma porta de origem e uma porta de destino. Se,
por exemplo, um host deseja estabelecer uma sessão telnet com outro host, ele definirá a porta
de destino como 23 (porta padrão da aplicação telnet) e a de origem como um número acima
de 1.023 (as portas abaixo de 1.024 são reservadas para serviços padronizados). Os números
de porta podem ir até 65.535. Assim existem 65.535 portas TCP e 65.535 portas UDP.
Algumas portas padronizadas são mostradas no Quadro 1.
Serviço
FTP
DNS
SMTP
POP3
SNMP
Descrição
File Transfer Protocol
Domain Name Service
Simple Mail Transfer Protocol
Post Office Protocol
Simple Network Management Protocol
Porta
21
53
25
110
161
Protocolo
TCP
UDP
TCP
TCP
UDP
Quadro 1 – Portas padronizadas
3.2.2 Sockets
Outro conceito importantíssimo é o de soquete (socket). Os sockets são a base para o
estabelecimento da comunicação numa rede TCP/IP. Cada conexão possui um socket
associado, que é composto de três informações: 1º) os endereços IP de origem e destino; 2º)
As portas de origem e destino e 3º) protocolo de transporte utilizado. Exemplo de um socket
38
seria: IP de origem 201.23.234.5, IP de destino 201.39.124.35, porta de origem 2.345, porta
de destino 22, protocolo de transporte TCP. O socket é único para cada conexão.
3.2.3 TCP – Transmission Control Protocol
É um protocolo orientado a conexão (connection-oriented protocol). A comunicação que um
protocolo desse tipo oferece é dita segura com entrega garantida (reliable data delivery).
Nela, os dados são formatados em pacotes (packets) que são seqüenciados e submetidos a um
processo de confirmação de recebimento (acknowledgement), estabelecendo um circuito
virtual de comunicação entre o servidor e o cliente. Caso o emissor do pacote não receba uma
mensagem de confirmação de recebimento (ACK), ocorrerá uma retransmissão. A segurança
da comunicação é garantida por esse mecanismo.
Por questões de desempenho (diminuição do overhead10), não se utiliza acknowledgements
para cada pacote transmitido.
Ao invés disso, os pacotes são agrupados e os
acknowledgements ocorrem por grupo, e não para pacotes individuais.
Esse conceito é
conhecido como “windowing”. Os algoritmos que implementam essa técnica dentro do TCP
são bastante sofisticados e não cabe descrevê-los aqui.
Antes que dados possam ser transmitidos, deve ser estabelecida uma conexão TCP, e o
processo que faz isso recebe o nome de “three-way handshake”. Uma descrição bem resumida
desse processo é ilustrado na Figura 13.
Figura 13 – Processo de handshake do TCP
10
Overhead diz respeito a utilização excessiva de um recurso computacional (processamento, memória, espaço
em disco, largura de banda, etc), provocando uma queda perceptível no desempenho do sistema afetado.
39
Passo 1 - O host que deseja iniciar a comunicação transmite um pacote SYN (Synchronize
Sequence Numbers) para o outro host com o objetivo de informar que uma nova conexão está
sendo requisitada e para estabelecer que número será usado como ponto de partida para
numeração seqüencial das mensagens transmitidas. Esses números seqüenciais são utilizados
pelo protocolo para garantir que os pacotes recebidos serão processados na ordem correta.
Passo 2 - Para que o processo possa prosseguir, o host receptor deve confirmar o
recebimento do pacote SYN e definir o número seqüencial que será usado para o envio de
dados. Isso se dá pelo envio de um pacote SYN, ACK de volta para o host emissor.
Passo 3 - Finalmente, o host emissor envia um pacote ACK para informar ao host receptor
que recebeu sua confirmação do pedido de conexão, e junto com ele envia os primeiros dados.
A partir daí, a comunicação continua com o envio e recepção efetivo de dados.
A comunicação prossegue até que todos os dados tenham sido enviados. Ocorre então um
processo de desconexão semelhante ao de conexão, também em três fases, com o pacote FIN
substituindo o pacote SYN.
Exemplos de aplicações que utilizam TCP são: Telnet, FTP e SMTP.
3.2.4 UDP – User Datagram Protocol
Fornece serviços de entrega sem conexão (connectionless) e sem garantia de sucesso. Ele
transmite os dados pela rede especificando um endereço de destino e assume que eles
chegarão lá. A rede se esforçará para manter os dados intactos e na ordem correta, mas se
existem múltiplos caminhos entre o emissor e o receptor, os pacotes poderão chegar fora de
ordem. Também podem ocorrer perdas ou adulteração dos dados à medida que eles viajam
pela rede. Não há meios de saber se uma mensagem chegou ao seu destino, ou se chegou na
ordem correta. O UDP não se preocupa com essas possibilidades, assumindo que devem
existir mecanismos na camada de aplicação capazes de cuidar desses problemas e de outros.
Tal como o TCP, o UDP também utiliza portas para identificar as aplicações. Uma diferença
importante entre os dois protocolos é que o UDP permite o uso de broadcast de pacotes
(envio de um pacote para todos os hosts de uma rede), ao passo que o TCP não.
40
A decisão sobre usar TCP ou UDP é uma tarefa do desenvolvedor da aplicação de rede. O
TCP, a princípio, parece ser uma melhor escolha, já que ele garante a entrega dos dados.
Entretanto, o overhead decorrente da necessidade de acknowledgements pode tornar a
implementação de certos sistemas impossível. Assim, por ser mais rápido, o UDP pode ser
uma opção melhor para esses sistemas. Exemplos de aplicações que usam UDP são: DNS,
SNMP e OpenVPN.
3.3 Camada de Internet
A principal função dessa camada é rotear pacotes entre diferentes hosts, o que é feito através
de um esquema de endereçamento fornecido pelo protocolo IP (Internet Protocol). Este é o
protocolo principal da camada de internet (equivalente à camada de rede do modelo OSI).
Além do IP, mais um protocolo dessa camada será brevemente descritos: o ICMP (Internet
Control Message Protocol).
3.3.1 IP (Internet Protocol)
O protocolo IP é um protocolo não orientado a conexão e incapaz de garantir a entrega de
pacotes na rede. Se serviços orientados a conexão forem necessários, eles deverão estar
implementados na camada de transporte ou de aplicação. Suas principais funções são:
endereçamento de pacotes entre hosts, roteamento de pacotes entre redes, fragmentação e
remontagem de mensagens e movimentação de dados entre a camada de transporte e a camada
de acesso à rede.
O cabeçalho IP contém muitos campos, sendo os principais o endereço de origem, o endereço
de destino e o TTL (time to live).
41
Para ilustrar o processo de envio de pacotes entre dois hosts, pode-se utilizar como exemplo a
Figura 14 a seguir. Primeiro, PC111 deseja enviar um pacote para PC2. Em seguida, para
PC3. Interessa aqui analisar a diferença entre as duas situações.
Figura 14 – Redes com interligação via roteadores
No primeiro caso (de PC1 para PC2) o exame do endereço de destino do pacote mostra que
PC2 está na mesma rede que PC1 (Rede A). Neste caso, o pacote é enviado diretamente para
PC2.
No segundo caso (de PC1 para PC3), o protocolo IP implementado em PC1, ao analisar o
endereço de destino do pacote, percebe que PC3 não está em sua própria rede (Rede A). O
pacote é então encaminhado para o gateway padrão (default gateway), que nesse caso é o
roteador 2. O roteador 2, por sua vez, também analisando o endereço de destino e sua tabela
de roteamento encaminha o pacote para o roteador 1. O roteador 1 finalmente faz a entrega do
pacote ao seu destino, já que tem uma de suas portas conectadas à Rede C, onde está o PC3.
A definição de gateway padrão ou default gateway é: endereço IP para qual deve ser
encaminhado um pacote cujo endereço de destino não faz parte da própria rede do host
emissor.
11
PC - Personal computer ou computador pessoal. Refere-se a um microcomputador utilizado de forma isolada
(standalone) ou em rede, caso em que é chamado também de estação de trabalho.
42
Conforme pode ser percebido, a função do roteador é encaminhar pacotes de uma rede para
outra. Dito de outra forma, rotear pacotes entre redes físicas diferentes.
O campo TTL do pacote IP é usado para garantir que um pacote não se perca em loops de
roteamento, isto é, fique circulando entre os roteadores da rede eternamente, nunca
alcançando seu destino. A regra que garante isso é que cada vez que um pacote atravessa um
roteador, seu campo TTL é reduzido de uma unidade. Quando esse valor chega a zero, o
pacote é descartado pelo roteador. O valor inicial do campo TTL depende do protocolo de
roteamento utilizado. No caso do RIP (Routing Internet Protocol), esse valor é 15.
Foge aos propósitos deste trabalho um detalhamento maior do esquema de endereçamento IP.
Basta saber que um endereço IP é formado por 32 bits, divididos em quatro partes de 8 bits
cada, sendo cada parte representada por um número decimal na faixa de 0 a 255. Na notação
mais comum, os quatro números são separados por um ponto. Exemplo: 200.276.0.34.
3.3.2 ICMP (Internet Control Message Protocol)
O protocolo ICMP permite que roteadores e hosts enviem mensagens de erro e de controle
entre si. Executa quatro funções principais: 1) Controle de fluxo (flow control) – Quando o
receptor da mensagem está muito ocupado para processar os pacotes que chegam, ele envia
uma “source quench message” para o emissor solicitando uma interrupção temporária do
envio de dados. 2) Alerta de destino inalcançável (unreachable destination) – Enviado
quando é detectado que um endereço IP de destino não é alcançável, ou porque o IP não
corresponde a uma máquina existente na rede, ou devido a uma falha no link de comunicação.
3) Redirecionamento de rota (redirecting routes) – Solicita á máquina emissora que utilize um
outro gateway. Exemplo: um roteador sabe, a partir de sua tabela de rotas, que um pacote
pode alcançar seu destino mais rapidamente através de uma outra rota que não passa por ele.
4) Verificação de host remoto (checking remote hosts) – Através de “ICMP echo messages”
uma máquina pode checar se existe conexão física entre ela e outra através da rede. Para isso,
envia um pacote “ICMP echo request” (conhecido como ping). O destinatário se for
alcançado, responde com um “ICMP echo reply”.
43
3.4 Camada de Acesso à Rede (Network Access)
A camada de acesso à rede relaciona a camada de internet com o harware que efetivamente
efetua o transporte físico dos dados (infra-estrutura composta por cabos, conectores, switches,
etc). É a camada mais baixa da pilha TCP/IP (diferentemente do modelo OSI , nela não foi
definida camada física). O ponto chave a ser entendido aqui é que endereços de rede (IP) não
fazem sentido para essa camada. Os endereços utilizados endereçam os dispositivos
fisicamente e têm significado apenas dentro do segmento de rede no qual o pacote foi
transmitido. Em outras palavras, os endereços da camada de acesso à rede não atravessam
roteadores.
Outro ponto importante é que, diferentemente das camadas superiores, essa
camada precisa conhecer detalhes da infra-estrutura física da rede, a fim de que possa preparar
corretamente os dados para transmissão, o que inclui a utilização de protocolos que definem
as características elétricas e mecânicas da transmissão.
Ainda em relação aos endereços utilizados nessa camada, eles recebem vários nomes que
dependem da tecnologia utilizada: MAC address, para redes locais ethernet ou token-ring, e
hardware address ou physical address para outras tecnologias. O MAC address tem o
tamanho de 6 bytes, e vem gravado de fábrica nas ROMs das interfaces de rede (placas de
rede, portas de switches, portas LAN de roteadores, etc). O exemplo abaixo mostra a notação
mais utilizada para representar esses endereços:
08:CA:00:31:56:AE (seis números hexadecimais de dois dígitos cada)
A figura abaixo ilustra, de forma simplificada, os vários endereços presentes num pacote
ethernet, situando as camadas responsáveis pela adição dos mesmos como parte de seus
respectivos cabeçalhos.
Figura 15 – Localização de endereços num frame Ethernet
44
Uma observação importante diz respeito ao que ocorre com os endereços da camada de acesso
à rede quando o endereço IP de destino localiza-se fora da rede do dispositivo emissor.
Conforme visto anteriormente, os endereços dessa camada não atravessam roteadores, só
sendo reconhecidos na própria rede do emissor. Nesse caso, o roteador alterará os MAC
address de origem e destino, substituindo-os pelo MAC address da sua porta de saída, e pelo
MAC address do destinatário. Portanto, à medida que o pacote “viaja” pela Internet, os
endereços físicos da camada de acesso à rede vão mudando. Os IPs de origem e destino, no
entanto, permanecem inalterados.
45
4 MÉTODOS DE DEFESA
Foi visto no capítulo 3 que as redes conectadas à Internet estão sujeitas a uma gama de
ataques que exploram a diversidade de elementos que compõem o ambiente de TI12 da
empresa: o hardware composto por roteadores, switches, servidores, links de comunicação,
etc; o software, desde os aplicativos voltados para o usuário final, até o sistema operacional e
os protocolos de rede e de segurança; e por fim, os fatores relacionados ao elemento humano:
procedimentos, normas de segurança, regras de acesso, segurança física, etc...
Do ponto de vista tecnológico, de acordo com Scrimger et al “Há dois aspectos da segurança
de uma rede – proteger o acesso aos dados e proteger a transmissão dos dados”. Dessa
forma, a base da segurança de uma VPN está na autenticação entre as partes que se comunicam e
na criptografia das informações que trafegam entre elas. (SCRIMGER et al, 2002)
Além desses dois aspectos, que o software de VPN deve ser capaz de suprir, existem
outros métodos de defesas disponíveis para os mais variados tipos de ataque, que passam
por outras tecnologias que devem atuar de forma complementar. Dada a extensão do assunto,
este trabalho irá limitar-se a explicar de forma simplificada aquelas que são úteis à
implementação de uma VPN.
4.1 Firewall
É uma combinação de hardware e software que tem por objetivo controlar o fluxo de
informações entre as redes privadas e a Internet, comportando-se como uma barreira entre
as duas redes capaz de impedir os acessos não autorizados, conforme mostra a Figura 16 a
seguir.
12
Tecnologia da Informação – Diz respeito ao conjunto de todas as atividades e soluções providas por recursos
de computação.
46
Figura 16 – Exemplo de um Firewall.
Fonte: Adaptadade Scrimger (SCRIMGER et al, 2002)
Uma das possíveis classificações para os firewalls define três tipos: filtros de pacotes,
inspeção de pacotes com tratamento do estado das conexões e aplicativos de firewalls e de
proxy 13 .
O filtro de pacotes é o tipo mais comum de firewall e tem como objetivo permitir ou negar a
entrada de um determinado pacote em uma rede, levando em consideração apenas o
endereço IP e/ ou a porta de origem e de destino. Por atuar apenas sobre as informações
existentes no cabeçalho do pacote IP, não se interessando pelo conteúdo do pacote em si, é
mais barato e rápido que os outros tipos de firewall. Essas seriam as suas vantagens.
Entretanto, por fazer uma filtragem apenas superficial, apresenta a desvantagem de ser mais
inseguro e menos flexível.
O firewall por inspeção de pacotes com tratamento do estado das conexões, além de
desempenhar as funções do filtro de pacotes, é capaz de checar e armazenar o estado de cada
conexão, e tomar decisões com base nele. Apenas as conexões válidas que cumprem as
condições estabelecidas pelo firewall, têm acesso à rede. Essa característica relativa ao
estado das conexões torna-o bastante flexível e poderoso, além de simplifica o projeto das
regras de acesso.
13
Proxy é um servidor que oferece serviços de rede que permitem que computadores clientes façam acessos a
outros servidores de forma indireta, atuando assim como um procurador ou intermediário.
47
Os aplicativos de firewall e de proxy são os mais complexos, pois verificam todos os dados
que passam por eles, podendo bloquear pacotes com base em critérios associados ao seu
conteúdo.
Possuem como vantagens oferecer a maior segurança, além de apresentar a
habilidade de autenticar as atividades dos usuários. P or s erem mais complexos, s ão
também mais lentos e mais caros que os outros dois tipos. São conhecidos também pela
denominação “filtro de conteúdo”.
4.2 Firewall e VPN
Uma VPN permite interligar duas ou mais redes de computadores, provendo um
mecanismo seguro de comunicação, conforme será abordado no capítulo seguinte. Constituise numa ferramenta muito útil para proteger os dados de empresas que necessitam
interconectar suas redes espalhadas geograficamente. Entretanto, ela não é capaz de sozinha
dar conta de todos os aspectos de segurança de uma rede. É imprescindível a utilização de um
firewall, que deve atuar em conjunto com o gateway 14 VPN. Aqui surge uma questão: qual a
localização correta do gateway VPN em relação ao firewall?
Pode-se afirmar que é
necessário um planejamento cuidadoso antes de escolher a melhor das três opções
existentes: gateway VPN e firewall na mesma máquina, em máquinas separadas e em paralelo
ou em máquinas separadas com o gateway VPN atrás do firewall.
O gateway VPN dentro de um firewall, ou seja, ambos no mesmo servidor, parece ser a opção
mais natural, uma vez que toda a segurança da rede é feita em apenas um computador,
conforme ilustra a Figura 17 a seguir. Entretanto, para que isso seja viável, o firewall
deve ser extremamente seguro, uma vez que qualquer configuração imprópria e m s u a s
regras a b r e e s p a ç o p a r a que o tráfego vindo da Internet penetre na rede utilizando
endereços de VPN, sem ser percebido.
14
Gateway é uma máquina intermediária geralmente destinada a interligar redes e com capacidade de traduzir
os protocolos entre elas. O proxies, os firewalls e os “servidores” de VPN atuam como gateways.
48
Figura 17: Gateway VPN dentro de um firewall.
Fonte: Adaptada de Koleniskov e Hatch (KOLENISKOV e HATCH, 2002)
A opção de gateway VPN e m paralelo c o m o firewall, separa o tráfego da VPN do tráfego
da Internet em dois ou mais computadores, c o n f o r m e m o s t r a d o n a F i g u r a 1 8 . Uma
das vantagens da separação é que, devido ao fluxo das informações transmitidas a VPN não
passar pelo firewall, nenhuma configuração extra é necessária no f i r e w a l l para permitir a
passagem de pacotes VPN. P o r o u t r o l a d o, o gateway VPN torna-se vulnerável a ataques
externos.
Figura 18: Gateway VPN paralelo ao firewall.
Fonte: Adaptadaa de Koleniskov e Hatch (KOLENISKOV e HATCH, 2002)
49
A terceira opção, gateway VPN atrás de um firewall, força todo o tráfego vindo da Internet a
passar primeiramente pelo firewall, conforme a Figura 19. Isso deixa a rede mais segura.
Em conseqüência, deve-se configurar regras no firewall para redirecionar o tráfego de VPN
vindo da Internet para o gateway VPN. Esta topologia possui como desvantagem uma perda
de performance pelo fato de todo o conteúdo da VPN passar antes pelo firewall.
Figura 19: Gateway VPN atrás de um firewall.
Fonte: Adaptada de Koleniskov e Hatch (KOLENISKOV e HATCH, 2002)
4.3 Criptografia
A palavra criptografia vem do grego, onde Kryptos s i gni fi c a “ escondido, oculto” e
Grafia significa “escrita”. Pode ser definida como a arte ou ciência de garantir a segurança
de mensagens, de forma que apenas pessoas autorizadas a leiam.
Seu uso vem dos
primórdios da civilização. O imperador romano Júlio César utilizava uma técnica de gravar
uma mensagem na cabeça raspada de um escravo para, após o crescimento do cabelo, enviálo como mensageiro. No local de destino, a cabeça do escravo era novamente raspada, de
forma que a mensagem pudesse ser lida. O detalhe aqui é que apenas o destinatário da
mensagem conhecia o “segredo” do processo (cabeça contendo mensagem sob os cabelos).
Há também inúmeros registros de uso da ciência da criptologia na área militar, durante a
primeira e segunda guerras mundiais. A título de ilustração, através de uma técnica que
substitui cada letra de um texto pela terceira letra subseqüente do alfabeto, a seqüência
ANDRÉ E VANDERLEI seria criptografada como DQGUH H YDQGHUOHL. O crédito
desta técnica também pertence ao imperador romano Júlio César, q u e há mais de 2000
50
anos, inventou o método de criptografia por substituição. Como se pode perceber, trata-se
de uma técnica é extremamente simples, mas o importante aqui é o segredo ou chave de
criptografia e como fazer com que os dois lados saibam como utilizá-la (SARLO, 2003).
A criptografia garante confidencialidade, autenticidade, integridade e não-repúdio
(SCHNEIER, 1996).
Uma breve descrição do processo de criptografia s eri a: um emissor gera a mensagem
original, chamada de “texto plano” e, utilizando uma chave e um algoritmo de cifragem, gera
um “texto cifrado”, incompreensível para quem não está autorizado a lê-lo. Chagando ao
receptor, este “texto cifrado” passa pelo processo inverso, chamado decifragem, o que resulta
no “texto plano” original. O processo está ilustrado na Figura 20 abaixo.
Figura 20: Processo de cifragem e decifragem.
Fonte: Adaptadaa de Brocardo (BROCARDO, 2001)
Uma chave é uma seqüênci a de bits e quanto maior for esta s eqüênci a, maior será a
segurança resultante. Dependendo do tipo de chave utilizada, a criptografia classifica-se em
dois tipos: criptografia simétrica e criptografia assimétrica.
4.3.1 Criptografia simétrica
A criptografia simétrica utiliza uma única chave. A mesma chave utilizada para a cifragem
será usada para a decifragem. Como vantagem comparativa em relação ao processo
assimétrico, pode-se citar o melhor desempenho. Por outro lado, a vulnerabilidade a ataques
do tipo força bruta ou quebra de senha (password cracking) é maior.
51
O processo, de acordo com a Figura 21 abaixo, é o seguinte: a chave simétrica é previamente
trocada entre o emissor e o receptor por um canal de comunicação seguro. Utilizando essa
chave, ocorre o processo de cifragem no lado emissor, quando o “texto plano” é convertido
em “texto cifrado”. O “texto cifrado” é enviado. No lado receptor, utilizando a mesma chave,
é feita a decifragem, que retorna o “texto cifrado” a “texto plano”.
Figura 21: Processo de criptografia simétrica.
Fonte: Adaptadaa de Brocardo (BROCARDO, 2001)
As desvantagens deste processo devem-se ao fato de que como apenas uma chave é utilizada
para cada par de entidades que se comunicam, o sigilo exigido deve ser extremamente rígido.
Se o número de entidades que necessitam comunicar-se de forma segura for muito grande,
serão necessárias inúmeras chaves, o que dificultará ainda mais seu processo de
gerenciamento. Na Figura 22 é mostrado novamente o processo de criptografia simétrica,
reforçando alguns dos elementos envolvidos.
Figura 22: Criptografia simétrica.
Fonte: Carmo (CARMO, 2005)
52
Conforme se pode observar na figura, um elemento importante do processo é o algoritmo de
criptografia utilizado.
Os algoritmos simétricos modernos são baseados em cifras de blocos. Isso significa que
durante o seu processamento, o objeto a ser criptografado é dividido em blocos, em geral
com tamanhos de 64 ou 128 bits. Existem vários modos de operação sobre os blocos, cada
um deles apresentando vantagens sob determinado aspecto. Alguns atuam sobre os blocos
tomando-os de forma independente uns dos outros, outros executam operações lógicas entre
o bloco que está sendo processado e seu antecessor, e assim por diante. Os modos mais
comuns são: CBC (Cipher Block Chaining), ECB (Electronic Codebook), CFB (Cipher
Feedback) e OFB (Output Feedback). Cada algoritmo possibilita escolher entre alguns
desses vários modos.
A seguir serão descritos brevemente alguns algoritmos simétricos com as principais
características das chaves envolvidas.
4.3.1.1 Data Encryption Standard (DES)
É um dos algoritmos de criptografia simétrica mais antigos e difundidos, tendo se
desenvolvido a partir de um projeto da IBM de 1974. Em 1977 foi adotado como p a d r ã o
pelo ANSI (American National Standards Institute) para aplicações não sensíveis.
Utiliza chaves c om comprimento de 56 bits. Na verdade, a chave tem 64 bits, mas apenas 56
são utilizados para cifragem (o restante é utilizado para funções de controle). Opera sobre
blocos de 64 bits. Um problema com o DES é que os critérios de projeto não foram totalmente
revelados pelos desenvolvedores, o que causou, durante anos, desconfiança de que o
algoritmo contivesse armadilhas secretas que permitiriam à comunidade de informação acesso
às mensagens cifradas dos usuários.
O DES é considerado vulnerável desde meados dos anos 90, tendo sua chave sido quebrada
1997, em um desafio lançado na Internet, e novamente em 1998, em apenas dois dias de
processamento. A explicação é que em função dos avanços obtidos na capacidade de
processamento dos computadores nos anos recentes, a chave de 56 bits tornou-se pequena
demais.
53
4.3.1.2 Triple Data Encryption Standard (3DES)
O 3DES foi uma tentativa de fortalecer DES. A idéia foi efetuar a cifragem múltiplas vezes
utilizando chaves diferentes. Pode ser usado com duas ou três chaves, o que equivale a um
comprimento efetivo de chave de 112 ou 168 bits, respectivamente. Quando utilizadas três
chaves, os dados são cifrados com a primeira chave, decifrados com a segunda chave, o que
não retorna o texto original, e então novamente cifrados, agora com a terceira chave. Isto faz
com que o 3DES seja seguro, mas lento demais para um algoritmo que tinha a pretensão de se
tornar um padrão de mercado. Ainda assim, é bastante utilizado.
4.3.1.3 Adanced Encryption Standard (AES)
O DES e sua variante 3DES foi a cifra padrão oficial dos Estados Unidos entre 1976 e 2001,
quando foi substituído pelo AES. A história do AES começa em 1977, quando o NIST
(National Institute of Standard and Technology) iniciou um projeto que visava promover um
substituto para o DES como algoritmo de criptografia padrão. Criou então um concurso para
escolha do novo algoritmo. Os finalistas foram os algoritmos: Serpent, Mars, RC6, Twofish e
Rinjdael, em 2 de dezembro de 2001 foi anunci ado o vencedor: o algoritmo Rijndael,
c r i a d o p e l o s belgas Joan Daemen e Vicent Rijmen.
Esta nova geração de algoritmos criptográficos agrega fatores que combinam segurança,
desempenho, eficiência, facilidade de implementação e flexibilidade em diversas plataformas de
hardware e software (SARLO, 2003).
O AES utiliza chaves de 128, 192 ou 256 bits e opera sobre blocos de 128 bits, tendo uma
expectativa de vida entre 20 e 30 anos. Até o momento não existem ataques bem sucedidos a
este protocolo.
4.3.1.4 International Data Encryption Algorithm (IDEA)
O protocolo IDEA foi criado em 1991 por James Massey e Xuejia Lai, sendo patenteado pela
empresa suíça Ascom Systec. Sua chave tem comprimento de 128 bits. O algoritmo segue as
54
mesmas linhas gerais do DES. Mas na maioria dos microprocessadores, uma implementação
por software do IDEA é mais rápida do que uma implementação por software do DES. O
IDEA é utilizado principalmente no mercado financeiro e no PGP, programa mais
disseminado no mundo para criptografia de email pessoal.
4.3.1.5 Blowfish/Twofish
O Blowfish é um algoritmo desenvolvido por Bruce Schneier. Oferece a escolhe entre maior
segurança ou desempenho através de chaves de tamanho variável. As chaves podem ter de 32
a 448 bits, em incrementos de 128. O tamanho do bloco é de 64 bits.
Mais recentemente, o Blowfish foi aperfeiçoado, dando origem ao Twofish, que atualmente é
concorrente do AES (Conforme visto no item 4.3.1.3 acima, o twofish foi finalista do
concurso para escolha do AES).
Utiliza chave de comprimento variável até o limite de 256 bits, tamanho considerado eficiente
para execução até mesmo em softwares que rodam em pequenos processadores tais como
aqueles embutidos em smart cards ou tokens. O algoritmo é processado em blocos de dados
de 128 bits. É um algoritmo não patenteado, de uso livre e gratuito.
Não existem ataques bem sucedidos a nenhum desses dois algoritmos.
Uma vez estudados os algoritmos simétricos, cabem duas observações.
Primeiro, a
criptografia simétrica não resolve um problema básico: o estabelecimento seguro da chave
secreta entre as duas partes que se comunicam. Segundo: nos sistemas desse tipo, as partes
são incapazes de demonstrar a autoria de uma mensagem a uma terceira parte. Não existe um
mecanismo equivalente a assinaturas para suprir essa deficiência. A criptografia de chave
pública tem resposta a esses dois problemas.
4.3.2 Criptografia assimétrica
A criptografia assimétrica, em contraposição à simétrica estudada no item 4.3.1, faz uso de duas
chaves distintas, matematicamente relacionadas, uma privada e outra pública. Pode-se utilizar
55
qualquer uma das chaves para cifrar a mensagem. Entretanto, somente a chave inversa associada
pode ser utilizada para decifrá-la. Exemplo, se um emissor utiliza a chave pública do receptor
para cifrar a mensagem, o receptor deve utilizar a sua chave privada para decifrá-la, conforme a
Figura 23. Dessa forma, garante-se autenticidade e confidencialidade.
Figura 23: Processo de criptografia assimétrica.
Fonte: Adaptada de Brocardo (BROCARDO, 2001)
Contudo, se o emissor utilizar sua chave privada para cifrar a mensagem, qualquer pessoa que
conheça sua chave pública poderá decifrá-la, uma vez que a chave pública é de livre
divulgação. Neste caso, estará garantida apenas a autenticidade da mensagem, já que
todos que a decifraram terão certeza absoluta que foi cifrada por quem detinha a chave privada
correspondente à chave pública que utilizaram.
Basicamente o processo ocorre como se a chave é fosse dividida em duas partes: uma
privativa e secreta que não pode ser divulgada para ninguém, e outra pública e aberta, que
pode
ser
entregues
a
qualquer pessoa c o m
a
qual
se
deseje
efetuar
t r a n s a ç õ e s q u e e n v o l v a m c o n f i d e n c i a l i d a d e o u a u t e n t i c i d a d e . Para que o
processo seja bi-direcional, garantindo as duas funções nos dois sentidos, é necessário que as
duas partes envolvidas tenham seu par de chaves e divulguem à outra parte a sua chave pública.
Conforme se pode deduzir das explicações acima, nos sistemas de chave pública o “dono” do
par de chaves usadas numa comunicação tem controle da situação. O nome assimétrico vem do
fato de se usaram chaves distintas no mesmo processo de cifragem e decifragem.
Para que um sistema de chave pública seja efetivo, é necessário que duas premissas sejam
atendidas: 1ª) a função de ciframento seja difícil de inverter; 2ª) seja muito difícil descobrir a
chave privada, apesar do conhecimento da chave pública.
56
Sistemas assimétricos poderiam substituir completamente sistemas simétricos, exceto por dois
aspectos importantes: performance e segurança na obtenção da chave pública. Os algoritmos de
chave pública são extremamente mais lentos que os de chave simétrica. Em relação à chave
pública, é necessário que se tenha absoluta certeza de que ela de fato pertence a uma
determinada entidade ou pessoa.
Na prática, sistemas de chave pública são usados apenas para estabelecer uma chave secreta de
um sistema simétrico, num processo que se dá a cada sessão de comunicação. Essa chave secreta
é denominada chave de sessão. Após o encerramento da sessão, a chave deixa de existir. Desta
forma, uma sessão de comunicação fica dividida em duas fases: a primeira utiliza um algoritmo
assimétrico para gerar e distribuir uma chave secreta. Esse processo se dá com confidencialidade
e autenticidade. Uma vez que os dois lados estejam de posse dessa chave, ocorre um
chaveamento para um algoritmo simétrico de criptografia e vem então a segunda fase: uso da
mesma chave secreta pelos dois lados para troca de dados.
Procura-se com isso combinar a flexibilidade dos sistemas assimétricos com a eficiência dos
sistemas simétricos.
A Figura 24 mostra o processo de cifragem e decifragem via uso da criptografia assimétrica.
.
Figura 24: Criptografia assimétrica.
Fonte: Carmo (CARMO, 2005)
A seguir serão estudados dois algoritmos de chave pública: RSA e Diffie-Hellman.
57
4.3.2.1 RSA (Rivest, Shamir e Adleman)
O RSA utiliza chaves de 512, 768, 1024 ou 2048 bits. Este algoritmo é ut i l i z ad o p el a
maioria das aplicações de criptografia assimétrica em uso atualmente.
RSA vem dos sobrenomes de seus inventores, Ron Rivest, Adi Shamir e Leonard Adleman,
tendo sido criado em 1997, nos EUA. Atualmente, é o algoritmo de chave pública mais
utilizado no mundo todo, além de ser uma das mais poderosas formas de criptografia de
chave pública conhecidas até o momento.
Matematicamente, o RSA baseia-se no fato de que é fácil multiplicar dois números primos
para obter um terceiro número, mas muito difícil executar o caminho inverso, isto é, fatorar
esse terceiro número para recuperar os dois primos que deram origem a ele. Por exemplo, os
fatores primos de 3.337 são 47 e 71. Gerar a chave pública envolve multiplicar dois primos
grandes (isso é fácil e qualquer um pode fazer). Obter a chave privada a partir da chave
pública envolve fatorar um número grande. Se o número for grande o suficiente e bem
escolhido, ninguém conseguirá fazer isto em um espaço de tempo razoável. Assim, a
segurança do RSA baseia-se na dificuldade de fatoração de números grandes.
Em 1999, uma chave RSA de 512 bits foi quebrada pelo Instituto Nacional de Pesquisa da
Holanda. Esta tarefa contou com a participação de cientistas de mais seis países e levou cerca
de sete meses, tendo sido utilizadas 300 estações de trabalho no processo. A primeira vista
pode não parecer, mas é preocupante que cerca de 95% dos sites de comércio eletrônico
utilizem chaves RSA de 512 bits.
Este algoritmo não faz a geração de senhas, mas usa as chaves geradas previamente por uma
infra-estrutura de chaves publicas (PKI – Public Key Infrastructure), cifrando e
d e c i f r a n d o com o par de chaves de cada usuário, conforme ilustrado na próxima Figura
25.
58
Figura 25 - Representação do algoritmo RSA
As chaves públicas podem ficar disponíveis na Internet, administradas por órgãos
certificadores ou por uma CA (Certificate Authority), ou ficar em um servidor interno à
rede local para uso exclusivo da empresa (SARLO, 2003).
4.3.2.2 Diffie-Hellman
Sua matemática difere da utilizada no RSA, mas também envolve a manipulação de grandes
quantidades numéricas. Sua segurança advém de uma questão matemática denominado
problema do logaritmo discreto.
Os princípios básicos da tecnologia de chave pública foram propostos em meados da década
de 70 por Whitfield Diffie e Martin Hellman no artigo “New directions in Cryptography”, que
tornou-se um marco na história da criptografia moderna.
O algoritmo Diffie-Hellman constitui um método que permite estabelecer uma chave secreta
usando um canal inseguro para isso. Diferentemente do algoritmo RSA, ele não possibilita
cifragem, decifragem ou assinatura digital.
A obtenção de uma chave secreta compartilhada se dá por método puramente matemático, sem
os processos de cifragem e decifragem utilizando chaves públicas e privadas que ocorrem no
algoritmo RSA. A descrição completa do método encontra-se no Anexo 1.
59
4.3.3 Função hash
Consiste em um algoritmo que mapeia uma entrada de tamanho variável para uma saída de
tamanho fixo. Dada uma mensagem original, a função hash tem como objetivo produzir um
número, conhecido como resumo, que representa de forma única esta mensagem. Uma
propriedade desta função diz que o caminho inverso deverá ser computacionalmente inviável,
isto é, não deverá ser possível obter a mensagem original a partir do seu resumo. Também é
verdade que pequenas alterações na mensagem original (um bit que seja) produzirá um resumo
completamente diferente.
A idéia de uso das funções hash é que elas funcionem como um mecanismo de garantia de
integridade nas transmissões de mensagens pela Internet. Na origem, calcula-se o resumo da
mensagem. A mensagem, juntamente com o resumo, é transmitida. No destino, a partir da
mensagem recebida, calcula-se novamente o resumo, utilizando o mesmo algoritmo hash.
Compara-se o resumo calculado com o recebido. Se forem iguais, conclui-se que a mensagem
recebida corresponde àquela que foi transmitida. Tem-se então garantia de integridade.
A Figura 26 abaixo mostra o funcionamento de um algoritmo hash puro, sem criptografia
associada.
Figura 26: Processamento da função hash.
Fonte: Adaptada de Carmo (CARMO, 2005)
Os dois principais algoritmos de hash utilizados atualmente são: MD-5 e o SHA-1.
60
4.3.3.1 Message Digest (MD-5)
Criada por Ron Rivest, um dos criadores do algoritmo RSA. Produz um valor hash de 128 bits
para qualquer mensagem de entrada de tamanho arbitrário. Foi inicialmente proposto em 1991,
após alguns ataques terem sido descobertos contra a função de hashing criada anteriormente
por Rivest: a MD4. O algoritmo foi projetado para ser rápido, simples e seguro. Entretanto, o
fato dele produzir um resumo de apenas 128 bits causa preocupação a alguns especialistas em
criptoanálise.
4.3.3.2 Secure Hash Algorithm 1 (SHA-1)
Foi criada pela NSA (National Security Agency), em 1995. Gera um valor hash de 160 bits,
também a partir de um tamanho arbitrário de mensagem. O funcionamento interno do SHA-1
é baseado no MD-4, com melhorias na parte de segurança. Atualmente, não se conhece
nenhum ataque de criptoanálise contra o SHA-1. Ataques da força bruta são impraticáveis,
devido ao seu valor hash de 160 bits.
A principal diferença entre os dois é que o primeiro é mais rápido por retornar um resumo de
ap en as 128 bits, enquanto que o segundo retorna um número de 160 bits, sendo, por isso,
mais seguro.
O SHA-1 já tem seus sucessores, capazes de retornar resumos maiores. São os protocolos
SHA-224, SHA-256, SHA-384 e SHA-512, conhecidos coletivamente pela denominação
SHA-2.
Outro ponto a frisar é que os algoritmos de hash são normalmente utilizados em conjunto com
algoritmos criptográficos. Assim, a transmissão do texto junto com seu resumo, de forma não
criptografada, como já mostrado na Figura 26, teve intenção apenas didática, buscando não
misturar a função hash com outras técnicas, o que tornaria a figura confusa.
61
4.3.4 Assinatura Digital
É uma tecnologia que permite autenticar o conteúdo de uma mensagem, garantido sua
integridade e a autenticidade de sua origem. Utiliza criptografia assimétrica associada a
funções de hash.
Autenticar, na definição de Albuquerque (2001) é “[...] confirmar a identidade de uma
entidade com o objetivo de se garantir que a entidade é quem ela diz ser”.
(ALBUQUERQUE, 2001)
As técnicas mais comuns de autenticação fazem uso de informações sigilosas (como senhas),
meios físicos como cartões magnéticos (smart cards ou tokens), verificação de informações
biométricas (como impressões digitais) ou uma combinação delas. Um exemplo desta
combinação está no cartão de crédito, onde, além do cartão físico, é exigida também uma
senha para efetuar a transação.
A assinatura digital faz uso da criptografia assimétrica, pois utiliza um par de chaves, uma
privada e outra pública. A chave privada serve para assinar o documento, enquanto a pública
é usada para verificar a assinatura. Conforme explicado no item 4.3.3, o processo de geração
da assinatura utiliza uma função hash para obtenção do resumo do documento, que, em
seguida, é cifrado, juntamente como o documento a ser assinado, com a chave privada do
emissor. Os dois itens são então enviados ao receptor. O receptor utilizará a chave pública do
emissor para decifrar a mensagem e o resumo recebidos, e a mesma função hash para
recalcular o resumo a partir do documento, comparando-o com o resumo recebido. Se houver
igualdade no conteúdo dos dois resumos, a integridade do documento estará garantida. A
autenticidade também, pois o fato de conseguir decifrar os textos com a chave pública do
emissor garante que a cifragem só poderia ter sido feita por ele. Não há sigilo neste processo,
uma vez que outras entidades ou pessoas além do receptor podem ter conhecimento da chave
pública do emissor. A próxima Figura 27 ilustra o processo descrito.
62
Figura 27: Processo de assinatura digital.
Fonte: Adaptadaa de Brocardo (BROCARDO, 2001)
4.3.5 Certificado digital
O certificado digital é um arquivo assinado eletronicamente por uma entidade confiável,
denominada
“Autoridade
Cerificadora”
ou
CA
(Certificate
Authority).
Representa um documento digital e contêm informações de identificação do seu proprietário
tais como nome, email, chave pública e validade da chave pública, além do nome e assinatura
da CA que o emitiu, do número de série do certificado, entre outros dados. Um certificado
tem co m o fi nal idade prover aut enti cação, int egridade, confi denci al idad e e
i rret rat abili dade, ao associar uma chave pública a uma pessoa ou entidade. Constitui
também um mecanismo para a divulgação da chave pública.
Qualquer entidade que conheça a chave pública da CA pode examinar o conteúdo dos
certificados assinados por ela e confirmar assim a sua autenticidade, uma vez que a CA
assina os certificados utilizando sua chave privada.
A recomendação mais aceita e utilizada para a produção de certificados digitais é a X.509 v3,
formulada pela Internacional Telecommunication Union – Telecommunication Standard
Sector (ITU-T). Portanto o padrão X.509 é aceito como base para a estruturação da Public
Key Infrastructure (PKI), ou Infra-estrutura de chaves públicas, ambiente onde são definidos
os formatos de dados e procedimentos relativos à distribuição de chaves públicas usando
certificados assinados digitalmente. Formalmente trata-se de um conjunto composto por
hardware, software, pessoas, políticas e procedimentos necessários para criar, gerenciar,
armazenar, distribuir e revogar certificados baseados em criptografia de chave pública.
63
Para ilustrar como são estruturadas as PKIs, em 24 de Agosto de 2001, foi editada no Brasil a
medida provisória nº 2.200-2 pela qual foi instituída a ICP-Brasil (Infra-estrutura de Chaves
Públicas Brasileira), órgão vinculado à Presidência da República que resumidamente objetiva
prover um conjunto de técnicas, práticas e procedimentos, a serem implementados pelas
organizações governamentais brasileiras (SERPRO, CEF, SRF e outras) e privadas
(SERASA, CertiSign, etc)
com o objetivo de estabelecer os fundamentos técnicos e
metodológicos de um sistema de certificação digital baseado em chaves públicas.
Este capítulo introduziu os conceitos básicos de segurança, mostrando as principais ameaças,
os tipos mais comuns de ataques e os mecanismos de defesa comumente utilizados,
compostos por firewalls, criptografia, assinaturas e certificados digitais. Todos são
importantes para um entendimento satisfatório das VPNs.
O próximo capítulo abordará os principais conceitos sobre VPNs, explicando cada uma de
suas características e citando alguns dos protocolos utilizados, com ênfase no TLS/SSL,
protocolo principal do OpenVPN.
64
5 CONCEITOS SOBRE VPNS
VPNs são redes de computadores que estão separadas fisicamente e, que através de um meio
público de comunicação – geralmente a Internet – comunicam-se de forma segura, por meio do
uso de criptografia.
As VPNs possuem seus próprios protocolos de comunicação que atuam em conjunto com
o TCP/IP, fazendo com que um túnel virtual seja estabelecido e os dados trafeguem por
ele criptografados.
Dentre eles, podemos destacar o Point-to-Point Tunneling Protocol
(PPTP), o Layer Two Tunneling Protocol (L2TP), IPSec (Secure IP) e o Transport Layer
Security / Secure Sockets Layer (TLS/SSL), que serão abordados no próximo capítulo.
Alguns dos dispositivos que implementam uma VPN são: roteadores15, módulos específicos de
VPN implementados em hardware e softwares de VPN instalados em servidores de uso geral,
conhecidos como gateways de VPN.
5.1 Tunneling
Uma VPN tem como principal elemento a criação de um túnel virtual encriptado, técnica
conhecida como tunneling ou, numa tradução um tanto estranha, tunelamento.
As informações transmitidas entre as redes que compõem uma VPN trafegam de forma
cifrada, dando a idéia da existência de um túnel virtual no qual os dados perecem
ininteligíveis para quem não faz parte dele.
Dessa forma, se alguma informação for
capturada, será quase impossível entendê-la, a menos que se descubra a chave de criptografia
utilizada, como mostra a próxima Figura 28.
15
Roteadores ou routers são dispositivos capazes de interligar redes com diferentes padrões de endereçamento
na camada de Internet (rede).
65
Figura 28: Túnel virtual entre duas redes.
Fonte: Adaptadaa de Cyclades (CYCLADES, 2000)
A técnica de tunneling consiste em encapsular um pacote de dados de um certo protocolo em
um pacote de outro protocolo. Numa extremidade do túnel os dados são encapsulados, a
seguir transmitidos, e, na extremidade oposta, desencapsulados. Para as estações das duas
redes, o processo é transparente. Apenas os gateways VPN têm conhecimento do que ocorre,
e todos os protocolos utilizados (troca de chave de sessão, criptografia, hashing, etc) são
implementados neles.
5.2 Autenticação das extremidades
As mensagens devem ser autenticadas como meio de garantir que vieram de usuários
válidos. Isso deve ocorrer em ambas as extremidades do túnel e é feito utilizando protocolos
de autenticação associados a algoritmos de hash.
5.3 Vantagens das VPNs
Entre os principais benefícios que as VPNs proporcionam estão aqueles relacionados a custo,
transparência, flexibilidade e segurança.
5.3.1 Segurança
Uma VPN fornece funções vitais de segurança, como autenticidade, confidencialidade,
integridade e controle de acesso. Os riscos de ataques externos ficam minimizados (IP
Spoofing e man-in-the-middle, por exemplo, já estudados no capítulo 3).
66
5.3.2 Transparência
A transparência consi st e
em
dot ar
a
VP N
de
m ecanis mos
que
to rn em
des necess ário que usuários, aplicações e computadores precisem conhecer a localização
física dos recursos que estão sendo utilizados na rede, permitindo que sejam acessados de
locais remotos como se estivessem presentes localmente. Tal característica facilita o
gerenciamento, diminui a necessidade de treinamento para os administradores e elimina a
necessidade de treinar os usuários.
5.3.3 Custos
A redução de custos é uma das maiores vantagens de se implementar uma VPN, pois
p o d e s e r f e i t a utilizando conexões locais de Internet, d i s p e ns an d o, por exemplo, a
co ntrat ação de linhas de comunicação dedicadas (LPCDs - linhas privativas de
comunicações de dados) ou a ut iliz ação de servidores para acesso remoto, que são
relativamente mais caros de se manter em comparação com uma VPN.
5.3.4 Flexibilidade
As VPNs apresentam-se bastante flexíveis em relação a aspectos como escalabilidade,
absorção de novas tecnologias, utilização de novos protocolos, etc. Como exemplo podemos
citar a inserção de uma nova filial à rede de uma empresa. No lado da matriz, basta alterar a
configuração do gateway VPN para autenticar a nova rede e, se necessário, efetuar um
upgrade no link de Internet. No caso de novos protocolos, como são implementados nos
gateways VPN, basta que sejam instalados e configurados nessas máquinas.
5.4 Desvantagens das VPNs
Em contraposição a todas as vantagens citadas anteriormente, as VPNs, de forma geral, são
complexas, demandam grande tempo de implantação, exigem um bom planejamento préimplantação, apresentam certa dificuldade na localização de defeitos, e s t a b e l e c e m u m a
67
relação de confiança entre as redes interconectadas, podem apresentar deficiências de
desempenho e dependem da disponibilidade da Internet.
Os problemas de planejamento dizem respeito principalmente à gerência das chaves e é
particularmente importante que se tenha um bom conhecimento de como as redes que se
pretende interligar estão funcionando, assim como d e suas configurações, pois qualquer
imperfeição pode resultar em mais tempo gasto em sua correção.
Em razão dos dados trafegarem de forma cifrada em uma VPN, a localização de defeitos,
como a falta de sincronismo entre as chaves, falhas nos processos de autenticação, excesso de
pacotes perdidos e a sobrecarga dos gateways VPN pode constituir um grande problema.
A relação de confiança entre as redes que a VPN interliga é de fundamental importância para o
bom funcionamento do conjunto, e deve ser muito bem planejada, pois os recursos
compartilhados por uma das redes ficarão acessíveis às outras. P or i s s o , se uma das redes
não possuir uma segurança adequada, ela está vulnerável a ataques externos e,
conseqüentemente, toda a VPN também estará.
A segurança da VPN é equivalente à
segurança de sua rede mais vulnerável.
Pelo fato das VPNs serem dependentes da Internet para conectar suas redes, o que representa o
principal fator de baixo custo dessa tecnologia, é necessário que ela esteja sempre disponível,
o que nem sempre é possível, devido às falhas existentes nos provedores de serviços de
Internet.
Em aplicações onde o tempo de transmissão é crítico, o uso de VPNs deve ser analisado com
cuidado. Os problemas de desempenho e atrasos na transmissão, sobre os quais a empresa não
tem nenhum tipo de gerência ou controle, podem comprometer a qualidade desejada nos
serviços corporativos.
68
5.5 Comparação com outras tecnologias de acesso remoto
Uma forma de analisar a validade de se utilizar a tecnologia VPN é compará-la diretamente
com outras tecnologias que têm a mesma finalidade: as linhas dedicadas e os servidores de
acesso remoto.
5.5.1 VPN x Linhas Dedicadas
Quando se fala em conexão de redes a longa distância para a troca e a atualização diária de
informações entre banco de dados, pensa-se primeiramente e m l i n k s dedicados. Um dos
benefícios dessa abordagem está na disponibilidade da conexão, pois nesse caso os
equipamentos que permitem a comunicação são controlados pela própria empresa.
No
entanto, os custos de implantação de linhas dedicadas poderão inviabilizar seu uso. Utilizar
uma solução de VPN certamente reduzirá esse custo.
5.5.2 VPN x Servidor de Acesso Remoto
Nos tempos atuais, existe uma tendência no mundo empresarial de flexibilizar o trabalho dos
seus funcionários, tanto em termos de horário quanto da possibilidade de exercerem suas
funções em suas próprias residências, principalmente quando há grande distância entre a
empresa e as residências, ou em grandes centros urbanos em que se perde boa parte do dia no
trânsito. Outra situação de trabalho a distância ocorre nas viagens de negócio.
Existem duas opções tradicionais que buscam solucionar as questões colocadas acima: abrir os
recursos da rede interna da empresa para a Internet ou manter um pool de modems em
quantidade suficiente para permitir o acesso remoto dos usuários.
A primeira opção causa enormes riscos à segurança, pois se por uma situação qualquer os
recursos da rede ficarem comprometidos, informações confidenciais da empresa também
ficarão.
O mesmo ocorrerá com os servidores. Tudo isso poderá gerar grandes perdas
financeiras, tanto pelo roubo de informações quanto por uma eventual indisponibilidade de
serviços da rede invadida.
69
A outra opção eleva bastante os custos, pois são necessários servidores dedicados, placas
multiseriais de boa qualidade, linhas telefônicas exclusivas, ligações interurbanas se o
funcionário estiver em outra cidade.
5.6 Topologias
As VPNs admitem três layouts básicos de integração: host-host, host-gateway e gatewaygateway.
5.6.1 Host-host
Neste trabalho, podemos definir host como sendo um computador que possui acesso à Internet.
Esta topologia permite comunicar dois hosts separados fisicamente, fornecendo a segurança
necessária para a troca de informações via Internet. Estes hosts podem ou não fazer parte de
uma rede. A Figura 29 abaixo mostra dois hosts pertencentes a duas filiais de uma mesma
empresa, sincronizando suas informações. Deve fi car cl ar o que, n este caso, o objetivo
não era interligar as redes inteiras, o que exigiria um esforço maior e desnecessário, além de
acarretar custos extras.
Figura 29: Topologia host-host.
Fonte: Carmo (CARMO, 2005)
70
5.6.2 Host-Gateway
Também chamada de acesso remoto VPN, esta topologia permite a conexão de um host
móvel a uma determinada rede através da Internet. Para isso, basta ao usuário ter um
software para conexões remotas VPN instalado neste host. Esta opção é bastante utilizada
por funcionários que viajam constantemente ou passam bom tempo fora da empresa e
precisam manter de alguma forma o contato.
Nesta topologia, também chamada de client-to-gateway, a VPN é usada para criar um túnel
entre uma máquina standalone e a rede da empresa. Exemplo: funcionário em viagem usa
seu notebook em um hotspot (acesso wireless) de aeroporto e acessa a rede da empresa para
fazer o upload dos pedidos vendidos até aquele momento. Nestas situações, é sempre o
cliente que inicia a conexão com o gateway VPN. (NAKAMURA, 2002), (SARLO, 2003)
A Figura 30 a seguir ilustra esse caso.
Figura 30 - Topologia host-rede.
Fonte: Adaptada de Kolesnikov e Hatch (KOLENISKOV e HATCH, 2002)
5.6.3 Gateway-gateway
Nesta configuração existe um gateway VPN nas extremidades de duas ou mais redes,
conforme mostrado na próxima Figura 31 Esta topologia é indicada para interligar redes de
71
uma mesma empresa geograficamente distante entre si. Pode ser utilizada também para
compartilhar recursos específicos entre parceiros de negócios, como fornecedores, principais
consumidores e outras companhias.
Neste tipo de VPN o recurso de transparência visto
anteriormente se reveste de especial importância.
Figura 31 - Topologia rede-rede
Fonte: Carmo (CARMO, 2005)
5.7 Protocolos usados nas VPNs
Esta seção apresenta os principais protocolos utilizados nas VPNs. Para manter a sintonia com
os objetivos desse trabalho, eles serão vistos de forma breve, com ênfase um pouco maior para
TLS/SSL.
Tomando por referência o modelo OSI, o tunneling pode ocorrer na camada 2 (enlace) ou na
camada 3 (rede). Conforme visto no capítulo 3, na pilha TCP/IP corresponderiam às camadas
de acesso à rede e internet, respectivamente.
referência baseada no modelo OSI.
Neste capítulo será utilizada a primeira
72
Os protocolos de camada 2 são o PPTP, o L2F e o L2TP. O objetivo do tunneling de camada
2 é transportar protocolos de camada 3 tais como AppleTalk, IP e IPX na Internet. Até
mesmos protocolos não roteáveis podem ser encapsulados dessa forma (por exemplo, o
Netbeui, da Microsoft) e transportados. Para conseguir isto, seus projetistas se basearam no
protocolo de camada 2 PPP (Point to Point Protocol), que foi concebido originalmente para
transportar diferentes protocolos de nível 3 em canais seriais. Na estratégia adotada os
pacotes de camada 3 são encapsulados em pacotes PPP, que por sua vez são re-encapsulados
em pacotes IP, o que possibilita seu transporte via Internet. O OpenVPN, objeto de estudo
deste trabalho, também implementa túneis de camada 2 quando instalado no modo bridge
usando a interface virtual TAP.
Como protocolo de camada 3 pode-se citar o IPsec. Seu funcionamento baseia-se no
encapsulamento de IP sobre IP.
Isso é feito tomando os pacotes IP que devem ser
transmitidos e aplicando a eles as funções de segurança estudadas no capítulo 4, com objetivo
de prover privacidade, autenticação e integridade. A seguir, esses pacotes, já protegidos, são
encapsulados em outros pacotes IP para transmissão pela Internet. O IPsec engloba também
funções de gerenciamento de chaves. O transporte de outros protocolos de camada 3, como
IPX e Appletalk, pode ser realizado dentro do IPSec através do encapsulamento de protocolos
de nível 3.
Além do IPSec, o OpenVPN instalado no modo router através da interface virtual TUN
também implementa túneis de camada 3.
Na seqüência serão vistas algumas características dos protocolos citados.
5.7.1 PPTP – Point to Point Tunneling Protocol
Foi desenvolvido pelo Fórum PPTP - consórcio formado pelas empresas US Robotics,
Microsoft, 3Com, Ascend e ECI Telematic. Sua implementação mais conhecida é a da
Microsoft, utilizada em sistemas Windows.
Utiliza os mesmos mecanismos de autenticação do PPP para fazer as conexões através da
73
Internet. As funções de encapsulamento são feitas através do protocolo GRE (Generic
Routing Encapsulation).
No PPTP a autenticação é feita através do MS-CHAP (Microsoft - Challenge Handshake
Authentication Protocol) e a criptografia por meio do MPPE (Microsoft Point to Point
Encryption), que utiliza chaves de 40, 56 ou 128 bits.
Apresenta as vantagens já citadas de um protocolo de tunneling de camada 2, mas seu ponto
mais fraco relaciona-se a segurança. Sem entrar em detalhes de funcionamento, pode-se citar:
a negociação do túnel não é protegida; as chaves de criptografia são geradas utilizando a
senha do usuário como base (se esta senha for fraca, a chave também será) e o processo de
autenticação é feito após a negociação do túnel.
5.7.2 L2F – Layer 2 Forwarding
Foi um dos protocolos pioneiros para VPNs. De forma semelhante ao PPTP, o L2F foi
concebido para ser um protocolo de tunneling entre usuários remotos e redes locais.
Diferentemente do PPTP, no entanto, o L2F não depende do protocolo IP, sendo, por isso,
capaz de trabalhar diretamente com outros protocolos como Frame Relay ou ATM.
A autenticação de usuários remotos utiliza conexões PPP, mas provê também suporte para
TACACS+ e RADIUS, o que possibilita uma autenticação desde o inicio da conexão. Na
verdade, esse processo de autenticação é feito em dois níveis: primeiro, no momento em que a
conexão é solicitada pelo usuário ao provedor de acesso à Internet; depois, quando o túnel se
estabelece, o gateway VPN da rede também exigirá autenticação.
Uma grande vantagem desse protocolo é que os túneis podem suportar mais de uma conexão,
o que não é possível no protocolo PPTP. Outro ponto já citado: por ser um protocolo de
camada 2, o L2F permite encapsular diferentes protocolos de camada 3: IP, IPX, NetBEUI,
etc. Atualmente, está praticamente em desuso.
5.7.3 L2TP – Layer 2 Tunneling Protocol
Foi criado pela Cisco Systems e, mais tarde, homologado pela IETF (Internet Engineering
Task Force) como protocolo padrão.
Seu projeto foi desenvolvido a partir do L2F com o
74
objetivo de resolver alguns problemas do PPTP, sendo por isso considerado o seu
herdeiro. Algumas características, como a utilização do PPP para fornecer o acesso remoto e
a capacidade de encapsular protocolos como NetBEUI e IPX, foram mantidas do PPTP e do
L2F. Pode funcionar com IP, Frame Relay, ATM e X.25.
Uma diferença importante em relação a seu predecessor PPTP relaciona-se à forma de
autenticação, que é feita em dois níveis, como no L2F. No primeiro, o usuário é autenticado
pelo provedor de acesso à Internet antes do túnel ser instalado e, no segundo, quando a
conexão é estabelecida entre os gateways VPN. Outro ponto positivo: no L2TP os dados são
criptografados antes da conexão ser estabelecida.
Por se tratar de um protocolo padrão, é permitido a qualquer fabricante criar produtos que o
utilizem. Para os usuários, significa liberdade de escolha pela não dependência de produtos
fornecidos por uma única empresa.
O L2TP utiliza o protocolo UDP para manter o túnel através da porta 1701. Uma vez que o
protocolo UDP não garante a entrega dos pacotes, normalmente é usado com o IPSec.
O
formato do pacote L2TP é ilustrado pela Figura 32.
Figura 32: Formado do pacote L2TP.
Como no protocolo PPTP, o protocolo L2TP também possui alguns níveis de tunneling, sendo
eles:
Encapsulamento L2TP - O pacote é encapsulado, recebendo um cabeçalho PPP, em seguida
um cabeçalho L2TP;
Encapsulamento UDP - O pacote L2TP é encapsulado pelo protocolo UDP, e enviado à
porta 1701;
Encapsulamento IPSec – Nesta fase o pacote ganha segurança. Os dados são criptografados
e autenticados;
75
Encapsulamento IP - Aqui o pacote ganha um cabeçalho com informações referentes ao
destino e à origem;
Encapsulamento de camada de transporte – Por último, o pacote recebe um cabeçalho que
representa os padrões utilizados pela rede na camada de transporte.
Apesar de ser um protocolo atual, o L2TP não possui um mecanismo eficiente de
encapsulamento. Para realizar esta tarefa, ele necessita do protocolo IPSec, de forma que em
conjunto possam garantir a segurança da VPN.
5.7.4 IPSec – Internet Protocol Security
O IPSec foi desenvolvido pela IETF (Internet Engineering Task Force) para ser o protocolo
padrão de endereçamento da próxima versão do IP (IPv6) que está em fase de testes em
diversas instituições no mundo inteiro. Foi adaptado ao IPv4 atualmente em uso, tornando-se
assim uma das opções mais robustas para implementar VPNs. Seus serviços podem ser
utilizados para quaisquer protocolos das camadas superiores como TCP, UDP, etc...
Segundo Kolesnikov e Hatch, IPSec é "[...] um conjunto de protocolos desenvolvidos para
proteger o tráfego dos pacotes IP". (KOLESNIKOV e HATCH, 2002)
O IPSec foi projetado para suportar múltiplos protocolos de criptografia, dando aos projetistas
da VPN a possibilidade de escolha do nível de segurança desejado.
Os requisitos de segurança podem ser divididos em três grupos:
- Negociação do nível de segurança;
- Autenticação e Integridade;
- Confidencialidade.
Os dois últimos são independentes entre si, podendo ser utilizados de forma conjunta ou
isoladamente, de acordo com as necessidades colocadas pelo projeto.
76
Para implementar estas características, o IPSec é composto de três mecanismos adicionais:
- AH - Autentication Header;
- ESP - Encapsulation Security Payload;
- ISAKMP - Internet Security Association and Key Management Protocol.
Esses mecanismos serão mostrados a seguir, situando-os em relação aos requisitos de
segurança citados acima.
5.7.4.1 Negociação do nível de segurança
O protocolo ISAKMP combina conceitos de autenticação, gerenciamento de chaves e outros
itens de segurança necessários à comunicação através da Internet. O ISAKMP possibilita que
duas máquinas negociem os métodos de autenticação e segurança dos dados, executem a
autenticação mútua e gerem a chave de sessão que permitirá criptografar os dados.
Além da geração da chave de sessão, o ISAKMP define os procedimentos e os formatos de
pacotes necessários para estabelecer, negociar, modificar e excluir as SAs (Security
Associations ou Associações de Segurança). SAs constituem um dos conceitos fundamentais
do IPSec, podendo ser definidas como conexões que viabilizam o tráfego de serviços seguros.
As SAs ficam armazenadas num banco de dados denominado SAD (Security Association
Dtabase). As SAs contêm todas as informações necessárias para execução dos diversos
serviços de segurança, que é garantida pela utilização dos protocolos AH, ESP ou dos dois em
conjunto. Quando utilizados AH e ESP simultaneamente, mais de uma SA deve ser utilizada.
Uma SA é definida de modo único por três parâmetros: o SPI (Security Parameter Index), o
endereço IP de destino e o identificador do protocolo de segurança (AH ou ESP). O SPI é um
número que identifica uma SA, sendo criado durante a negociação que antecede o
estabelecimento da SA. Todos os serviços pertencentes a uma SA devem conhecer o SPI
correspondente e utilizá-lo durante a comunicação.
Além do SAD, existe uma outra database importante denominado SPD (Security Policy
Database), responsável pela ação mais importante a ser feita sobre o pacote, que consiste em
determinar se o mesmo será descartado, seguirá apenas em frente ou seguirá adiante
aplicando-se o protocolo IPSec.
77
O ISAKMP pretende dar suporte para protocolos de segurança em todas as camadas da pilha
TCP/IP. Centralizando o gerenciamento das SAs, o ISAKMP minimiza as redundâncias
funcionais dentro de cada protocolo de segurança e possibilita uma redução do tempo gasto
durante as conexões efetuando a negociação da pilha completa de serviços de uma só vez.
Outra questão importante diz respeito ao gerenciamento de chaves. Em redes pequenas, com
poucos computadores, pode-se configurar as SAs e os SPDs manualmente. Entretanto, se a
rede for grande, a configuração manual torna-se inviável. O recomendado então é configurálos automaticamente, o que significa usar o gerenciamento de chaves automático. Dentre os
protocolos que implementam de forma satisfatória este gerenciamento, o principal deles é o
Internet Key Exchange Protocol (IKE), que combina os protocolos ISAKMP, SKEME e
Oakley Key Determination Protocol. O IKE negocia automaticamente as SAs, permitindo
maior proteção contra ataques.
5.7.4.2 Autenticação e integridade
Conforme visto no capítulo 2, a autenticação garante a identidade do emissor, enquanto a
integridade significa que os dados transmitidos chegam ao seu destino sem alterações,
eliminando a possibilidade modificações não percebidas no caminho entre emissor e receptor.
O AH é um mecanismo que fornece garantia de integridade e autenticação dos datagramas IP.
A segurança é garantida pela inclusão de informações para autenticação no pacote. Essas
informações são obtidas por meio de um algoritmo aplicado sobre o conteúdo dos campos do
datagrama IP, excluindo-se aqueles passíveis de mudanças durante o processo de transmissão.
Esses campos abrangem não só o cabeçalho IP como todos os outros cabeçalhos e os dados da
aplicação propriamente ditos. O campo time-to-live (TTL) do IPv4 não é utilizado, pois,
conforme visto no capítulo 3, sofre mudanças ao longo da transferência.
Para algumas aplicações, o uso de autenticação pode ser suficiente, não sendo necessária a
confidencialidade. Neste caso, o protocolo AH pode ser utilizado sozinho, sem necessidade
do ESP.
78
5.7.4.3 Confidencialidade
Recapitulando o conceito, explicado no capítulo 2, confidencialidade é uma propriedade da
comunicação que garante que apenas usuários autorizados possam entender o conteúdo
transportado. Na hipótese de usuários não autorizados, via captura de pacotes, conseguirem
acesso aos dados, eles não serão entendidos pelo fato de terem sido criptografados na origem.
O serviço que garante a confidencialidade no IPSec é o ESP. O ESP também provê a
autenticação da origem dos dados e a integridade da conexão. A confidencialidade independe
dos demais serviços e pode ser implementada nos dois modos de utilização do IPSec transporte e túnel. No primeiro modo, o pacote da camada de transporte é encapsulado dentro
do ESP. No segundo, o datagrama IP é encapsulado inteiro dentro do cabeçalho do ESP.
A Figura 33 mostra os pacotes nos dois modos de utilização.
Figura 33 – Modos do protocolo IPSec
Mais informações sobre o IPSec podem ser encontradas nas RFCs 2401 (S.Kent; R.Atkison,
1998) e 2411 (R.Thayer; N. Doraswamy; R. Glenn, 1998), disponíveis em <http://www.ietf.
org/rfc/ rfc2401.txt e http://www.faqs.org/rfcs/>.
79
5.7.5 TLS/SSL – Transport Layer Security / Secure Sockets Layer
O protocolo TLS é uma versão atualizada do SSL versão 3, originalmente criado pela
Netscape. Os dois protocolos são bastante semelhantes, embora não possam interoperar
diretamente entre si. O TLS/SSL fornece um serviço de comunicação segura entre cliente e
servidor, permitindo autenticação mútua e garantindo a integridade dos dados pelo uso de
assinaturas digitais e privacidade pelo uso de criptografia. Ele é implementado como uma
camada adicional entre o TCP/IP e os protocolos de nível superior tais como HTTP, SMTP,
etc. Sua implementação em web browsers é a mais conhecida dos usuários da Internet,
oferecendo autenticação e encriptação baseada em sessão.
Um dos pontos fortes do TLS/SSL é que ele atua diretamente no topo dos sockets TCP/IP e se
relaciona com eles de forma muito mais fácil que os protocolos das camadas superiores.
Como resultado, torna-se muito mais fácil construir aplicações de rede utilizando o TLS que
programando diretamente sobre sockets.
O termo sockets refere-se ao método utilizado para troca de dados entre os módulos cliente e
servidor de uma aplicação de rede ou entre camadas de programas em um mesmo
computador.
O TLS/SSL é implementado de modo a atuar como uma subcamada da camada aplicação,
posicionada entre ela e a camada de transporte, conforme mostra a Figura 34.
Figura 34 – Localização da camada de segurança TLS/SSL na pilha TCP/IP
80
Já a estrutura do quadro transmitido pode ser observada na Figura 35.
Figura 35 – Frame Ethernet detalhando os protocolos superiores
Diferentemente do IPSec, visto na sessão anterior, que fornece segurança a todos os
datagramas IP, o TLS/SSL é implementado na própria aplicação (ex.: browsers Internet
Explorer ou Mozilla), sendo portanto uma porção do seu código. Isto possibilita à aplicação
determinar que dados deverão ser protegidos, o que representa uma vantagem em relação ao
IPSec, pois elimina o overhead resultante da proteção desnecessária de certos dados.
O protocolo foi projetado de modo a suportar diversos algoritmos de criptografia e assinatura
digital, permitindo a seleção dos mais convenientes para cada situação, assim como a
incorporação de novos algoritmos, à medida que forem surgindo. A escolha desses protocolos
é negociada entre o cliente e o servidor durante o estabelecimento de uma sessão.
O protocolo TLS começa com um ‘handshake’, no qual cliente e servidor tentam chegar a um
acordo sobre que cipher suíte (grupo de algoritmos criptográficos) eles irão utilizar para
autenticação e criptografia de sessão. Uma vez feita essa negociação, cliente e servidor
poderão se autenticar mutuamente e gerar uma premaster secret, que será usada como base
para a construção da chave de sessão propriamente dita. A chave de sessão será utilizada
então para encriptar e decriptar todo o tráfego entre cliente e servidor, sendo válida apenas
enquanto durar aquela sessão. O truque desse processo é que cliente e servidor estabelecem
uma chave secreta para troca de informações sem nunca precisar enviar um texto aberto
(plaintext) pela rede, o que garante a confidencialidade da comunicação.
Para facilitar o entendimento desse processo, segue abaixo o diálogo entre cliente e servidor
durante a fase de handshake, traduzido para linguagem comum:
81
Cliente: Hello, aqui está a lista de cifradores (cipher suíte) que eu posso usar.
Servidor: Hello, aqui está o cifrador (cipher suíte) que eu escolhi a partir da sua lista. E aqui
está também um certificado X.509v3 que contem minha chave pública RSA.
Cliente: [Vasculha o certificado e verifica se ele está assinado por uma autoridade
certificadora conhecida e confiável. Gera também uma premaster secret e a partir dela a chave
de sessão].
Servidor: OK, obrigado. Aqui está a premaster secret, encriptada com sua chave pública. A
próxima coisa que eu disser para você estará encriptada com a chave de sessão.
Cliente: [Encriptado] Eu já terminei o handshake.
Servidor: [Decripta a premaster secret enviada pelo cliente usando sua chave privada e então
gera a chave de sessão.]. A próxima coisa que eu disser para você também estará encriptada
com a chave de sessão.
Servidor: [Encriptado] Eu também já terminei o handshake.
No processo acima, o cliente envia a premaster secret encriptada com a chave pública do
servidor. O servidor pode ser então considerado autenticado, porque só sua chave privada
pode ser utilizada para decriptar a premaster secret enviada pelo cliente. Mesmo que o
servidor já tenha enviado seu certificado para o cliente, ele só prova que tem a chave privada
correspondente à chave pública existente no certificado (e assim confirma sua identidade) no
momento em que consegue decriptar a premaster secret enviada pelo cliente. Partindo da
mesma premaster secret, cliente e servidor, independentemente um do outro, geram a mesma
chave de sessão.
TLS também suporta o protocolo de troca de chaves Diffie-Hellman. O processo de troca de
chaves com ele é ligeiramente diferente do utilizado no exemplo acima, baseado no algoritmo
RSA. Mas o resultado final é que ambos os lados terão a mesma a mesma chave de sessão.
82
Variações em relação ao exposto são possíveis. Em sistemas que implementam autenticação
bidirecional, por exemplo, o servidor pode solicitar ao cliente que envie seu certificado. Mas
a idéia central é a mesma: autenticação, negociação de protocolos que ambos os lados
suportem e troca segura da chave de sessão.
O processo de handshake entre o cliente e o servidor visto acima utiliza três protocolos:
- SSL Handshake Protocol - Promove o estabelecimento da sessão entre cliente e servidor;
- SSL Change Cipher Spec Protocol - Estabelece o mecanismo de criptografia a ser utilizado
na sessão;
- SSL Alert Protocol - Composto por eventuais mensagens de erro entre cliente e servidor.
A Figura 36 abaixo mostra o processo de handshake com mais detalhes, situando nas
mensagens os protocolos acima.
Figura 36 – TLS/SSL – processo de handshake
Uma vez estabelecida a conexão, cliente e servidor podem trocar dados de forma segura. Cada
registro de dados é individualmente encapsulado em um SSL Record Protocol e um valor hash
83
é calculado, com objetivo de garantir a integridade dos dados. Caso os dados sofram
alterações durante a transmissão, um valor hash inválido será gerado no destino,
possibilitando a identificação do problema.
Para encerrar a conexão, uma das partes envia uma mensagem comunicando o fato (Close
Notify).
O TLS/SSL suporta também o restabelecimento de conexão. Caso o cliente queira estabelecer
outra sessão com o servidor, ele pode dar continuidade a uma sessão anterior fornecendo seu
identificador de sessão em sua mensagem Hello. Isto faz com que protocolo de handshake
seja executado de forma reduzida, de modo que os parâmetros de segurança e a chave de
sessão estabelecida anteriormente sejam reutilizados. Reduz-se assim o overhead com o
estabelecimento de sessões, visto que o tráfego de dados via web browser é tipicamente
caracterizado por várias sessões, simultâneas ou consecutivas, entre um cliente e um servidor.
84
5.8 Comparação entre protocolos de tunneling
O Quadro 2 abaixo mostra a potencialidade de cada protocolo de VPN.
Propriedades
Autenticação
de
Usuário
Autenticação
de
Computadores
Suporte a
NAT
Suporte a
MultiProtocolo
Atribuição
Dinâmica de
Endereço IP
Encriptação
Uso de PKI
Autenticação
de
Pacotes
Descrição
PPTP
Consegue autenticar os
usuários que queiram
estabelecer uma conexão.
SIM
SIM
SIM
Autentica computadores
envolvidos na conexão.
SIM
SIM
SIM
SIM
SIM
SIM
SIM
NÃO
NÃO
SIM
SIM
SIM
SIM
Implementação em
andamento.
SIM
Passa por meio de um
NAT para esconder os
pontos finais da conexão.
Define um método padrão
para o tráfego IP e não IP
Define uma negociação
de endereçamento IP
entre o servidor VPN e
seus clientes. Isso elimina
configurações manuais do
protocolo IP.
Pode criptografar o tráfego corrente.
Usa infra-estrutura de
chave pública para imple
mentar a criptografia e a
autenticação.
Provê um método de
autenticação que garante
que os pacotes não foram
alterados durante a
transmissão.
L2F
L2TP/IPSec
IPSec
Implementação em
andamento.
TLS/SSL
SIM
Implementação em
andamento.
SIM
SIM
SIM
SIM
SIM
SIM
SIM
SIM
SIM
SIM
SIM
SIM
SIM
NÃO
NÃO
SIM
SIM
SIM
Quadro 2: Comparação entre protocolos de VPN
SIM
85
6 IMPLEMENTAÇÃO DE UMA VPN ATRAVÉS DO OPENVPN
A configuração de uma VPN requer a escolha do sistema operacional dos gateways e da
ferramenta que será usada para implementar os protocolos adotados. Existem várias
ferramentas disponíveis no mercado, com preços variados ou totalmente gratuitas.
Este trabalho preocupou-se com três fatores básicos: segurança, usabilidade e baixo custo de
implementação. Por isso, foi utilizado o Linux, sistema operacional bastante flexível, podendo
ser configurado com o mínimo de opções possíveis, de forma a garantir maior segurança da
rede. Além disso, por ser de livre distribuição e estar disponível gratuitamente pela Internet,
reduz drasticamente os gastos com licenças e custo total de propriedade.
A distribuição escolhida foi a Fedora, derivada do Red Hat, pois além de ser largamente
utilizada em servidores do mundo inteiro, sendo reconhecida por sua estabilidade, foi a
utilizada nos exercícios de laboratório do curso de pós-graduação, o que garante bastante
familiaridade com suas particularidades.
Dentre as ferramentas gratuitas de VPN consideradas nas pesquisas efetuadas, duas se
destacaram por sua robustez, por seguir padrões de mercado e por sua variedade de recursos:
o OpenS/Wan, sucessor do FreeS/Wan, que implementa o protocolo IPSec, e o OpenVPN,
baseado no protocolo TLS/SSL. A ferramenta adotada acabou sendo o OpenVPN, pela sua
facilidade de configuração, disponibilidade como freeware para vários sistemas operacionais,
incluindo Microsoft Windows e, principalmente, por conviver bem com redes baseadas em
NAT e IP dinâmico, que são realidade incontestável no mundo de hoje. O APÊNDICE A
mostra um breve comparativo entre essas duas ferramentas de VPN, mostrando os prós e
contras de cada uma.
Por tratar-se de softwares open source e completamente gratuitos (Linux e OpenVPN), as
orientações para instalação e configuração foram obtidas principalmente da Internet, através
de material disponível on-line.
6.1 Estudo de caso
A seguir será mostrado como a VPN experimental foi implementada, descrevendo o ambiente
86
de testes e os aspectos relevantes de sua configuração, bem como os resultados obtidos.
6.1.1 Cenário
Com base na Figura 37, os testes foram conduzidos simulando-se três redes distintas de uma
mesma empresa, cujas denominações adotadas foram “matriz”, “filial1” e “filial2”, onde cada
uma delas possui um gateway VPN e um host. Um quarto elemento foi considerado: um
equipamento standalone (não ligado a uma rede e, portanto, sem um gateway de Internet para
implementar o túnel VPN) com necessidade de acesso à rede Matriz, rodando o sistema
operacional Microsoft Windows e o software OpenVPN para Windows. Para esse micro foi
adotada a denominação Windows. Foram utilizados links ADSL (Velox da Telemar) para a
conexão das três redes e do computador Windows à Internet. Todos os modems ADSL estão
configurados no modo router.
Figura 37 – Diagrama de conexões do laboratório
87
Os gateways foram configurados com duas placas de rede, sendo uma voltada para a rede
interna da empresa e a outra para a Internet. Os hosts, por sua vez, possuem apenas uma placa
de rede e funcionam em ambientes Windows (escolhemos Windows por ser mais comum, mas
poderia ser um desktop Linux ou um MacIntosh, já que o OpenVPN roda também nessas
plataformas). Da mesma forma, o computador Windows citado possui uma única placa de
rede que possibilita sua conexão a VPN através de link ADSL (alternativamente, poderia ser
uma linha discada com acesso à Internet através de um ISP – Internet Service Provider ou
uma conexão a cabo através de um cable modem, entre outras opções). Os três gateways
Linux desempenham também o papel de firewall das respectivas redes.
O acesso à matriz se dará através do identificador labvpn-matriz.dyndns.org, que estará
dinamicamente associado ao IP do seu link ADSL. Os IPs das filiais não precisam ser
conhecidos nem mapeados dinamicamente, já que elas não se acessam mutuamente.
Os IPs utilizados são:
Modems ADSL – IP porta LAN: 192.168.254.254
Matriz –IP da interface Internet (eth0):
IP da interface local
(eth1):
IP da interface de host-m
:
192.168.254.1
192.168.0.250
192.168.0.1
Filial 1 –IP da interface Internet (eth0):
IP da interface local
(eth1):
IP da interface de host-f1
:
192.168.254.1
192.168.1.250
192.168.1.1
Filial 2 –IP da interface Internet (eth0):
IP da interface local
(eth1):
IP da interface de host-f2
:
192.168.254.1
192.168.2.250
192.168.2.1
Windows - IP da interface local
192.168.254.250
:
88
6.1.2 Instalação
Definido o ambiente de trabalho, será visto a seguir os procedimentos para instalação do
OpenVPN, que requer a execução dos seguintes passos:
-
Decisão quanto ao modo de operação desejado (router ou bridge) e do nível de
segurança requerido;
-
Download dos módulos necessários para a plataforma operacional, arquitetura de
processador e nível de segurança adotado;
-
Preparação do kernel dos gateways Linux;
-
Instalação dos módulos baixados nos gateways;
-
Criação da infra-estrutura de geração e gerenciamento de chaves de criptografia e
outros elementos de segurança;
-
Preparação do arquivo de configuração da Matriz e setup dos demais elementos
necessários ao funcionamento do OpenVPN;
-
Preparação dos arquivos de configuração das Filiais e setup dos demais elementos
necessários ao funcionamento do OpenVPN;
-
Instalação e configuração do OpenVPN no micro standalone (ambiente Windows).
6.1.2.1 Decisão quanto ao modo de operação desejado (router ou bridge) e do nível de
segurança requerido.
O OpenVPN admite dois modos de funcionamento:
Router
ou Brigde.
No cenário
estabelecido neste trabalho, será usado o modo Router. O modo Bridge seria obrigatório se:
-
A VPN tivesse necessidade de suportar protocolos não-IP, tais como IPX, por
exemplo;
89
-
Fosse necessário dar suporte a aplicações baseadas em broadcasts de rede, tais
como LAN games.
-
Fosse necessário permitir browsing, através da VPN, de recursos compartilhados
pelas estações Windows, sem o suporte de um servidor SAMBA ou WINS.
Em relação ao nível de segurança da VPN, serão utilizados todos os recursos suportados pela
solução, o que engloba autenticação baseada em certificados, encriptação de chave pública e
distribuição dinâmica de chaves.
6.1.2.2 Download dos módulos necessários para a plataforma operacional, arquitetura de
processador e nível de segurança adotado.
Conforme já visto, o OpenVPN roda em várias plataformas operacionais e suporta uma
variedade de arquiteturas de
processador.
Este trabalho foi desenvolvido em Linux
(distribuição Fedora) rodando em plataforma Intel x86. Assim, os downloads necessários são:
-
Fonte do OpenVPN: openvpn-2.0.9.tar.gz
Link para download: http://openvpn.net/download.html
Biblioteca LZO
: lzo-2.02.tar.gz
Link para download: http://www.oberhumer.com/opensource/lzo/download/
A biblioteca LZO provê funções de compressão em tempo real dos dados que trafegam no
túnel VPN, permitindo otimizar a utilização do link.
A biblioteca OpenSSL já está incluída na distribuição Linux Fedora.
Obs: Não foi considerado aqui o módulo para ambiente Windows necessário para instalar o
OpenVPN no micro standalone [vide item 8 - Instalação e configuração do OpenVPN no
micro standalone (ambiente Windows)].
6.1.2.3 Preparação do kernel dos gateways Linux.
Do ponto de vista do kernel do Linux, o único pré-requisito para instalação do OpenVPN é
que o suporte aos drivers TUN e/ou TAP esteja disponível. Isso é necessário para permitir
que programas rodando no espaço do usuário, que é o caso do OpenVPN, conforme mostrado
90
no APÊNDICE B deste trabalho, possam controlar dispositivos virtuais IP ponto-a-ponto
(virtual point-to-point IP devices ) ou dispositivos virtuais Ethernet (virtual Ethernet devices).
O driver virtual TUN é utilizado no modo de operação “router” do OpenVPN, também
chamado de modo túnel. O driver TAP apenas no modo “bridge”. No cenário adotado, será
considerado o driver TUN (interface tun0 no Linux).
No caso da distribuição Fedora, adotada no cenário de implementação descrito anteriormente,
os drivers TUN/TAP já estão presentes no kernel. Em outras distribuições em que isso não
ocorra, o kernel deverá ser recompilado.
6.1.2.4 Instalação dos módulos baixados nos gateways
Antes de descrever o processo de instalação do OpenVPN a partir do fonte baixado
anteriormente, tarefa extremamente simples, cabe estabelecer que a instalação do Fedora deve
ser a mais simples possível, partindo da regra básica de segurança que diz que todo software
contém falhas de programação e que estas falhas podem se traduzir em vulnerabilidades, e
que, portanto, quanto menos software, menos riscos. Assim, não se deve utilizar interface
gráfica e módulos desnecessários. O firewall utilizado neste trabalho já está contido no kernel
(Netfilter/Iptables).
Os passos para instalação podem ser descritos pela execução dos seguintes comandos, em
sessão com privilégio de root:
1ª parte – Instalar a biblioteca de compactação LZO
cd /root
tar –xzvf lzo-2.02.tar.gz
cd lzo-2.02
./configure
make
make install
91
2ª parte – Instalar o OpenVPN
cd /root
tar –xvzf openvpn-2.0.9.tar.gz
cd /openvpn-2.09
./configure
make
make install
A instalação cria o diretório /etc/openvpn, com todos os subdiretórios necessários ao
funcionamento do software.
6.1.2.5 Criação da infra-estrutura de geração e gerenciamento de chaves de criptografia e
outros elementos de segurança.
O OpenVPN, em sua implementação mais segura, suporta autenticação bi-direcional baseada
em certificados, o que significa que o cliente (Filial ou micro standalone) deve autenticar o
certificado do servidor, e o servidor (Matriz) deve autenticar o certificado do cliente, antes
que se estabeleça uma relação de confiança mútua que permita a criação do túnel VPN. Para
tornar tal processo possível, torna-se necessário construir uma PKI – Public Key
Infrastructure, que consiste em:
-
Um certificado individual (que contêm uma chave pública) e uma chave privada
para o servidor e para cada cliente;
-
Um certificado mestre da autoridade certificadora (CA) e uma chave privada
mestre que será utilizada para assinar cada certificado emitido para o servidor e
para cada cliente;
Servidor e cliente deverão se autenticar mutuamente primeiramente verificando se o
certificado apresentado pela outra parte está assinado pela autoridade certificadora mestre
(CA) e em seguida checando as informações existentes no cabeçalho (header) do mesmo
(common name, que identifica a entidade proprietária do certificado e o “type” do certificado
– servidor ou cliente).
Este modelo de segurança apresenta algumas características importantes sob a perspectiva da
VPN:
92
-
O servidor necessita apenas de seu próprio certificado e chave privada. Ele não
precisa conhecer os certificados individuais de cada cliente que possa vir a
conectar-se a ele;
-
O servidor somente aceita clientes cujos certificados tenham sido assinados pela
autoridade certificadora mestre (CA). E, pelo fato do servidor poder efetuar essa
verificação de assinatura sem necessidade de acesso à chave privada mestre da CA,
é possível que essa chave (o elemento mais sensível e importante de toda a PKI)
fique armazenada numa máquina completamente diferente, inclusive sem nenhuma
conexão de rede, o que garantiria maior segurança;
-
Se uma chave privada tornar-se comprometida por alguma razão, ela pode ser
desabilitada adicionando-se seu certificado a uma CRL (certificate revogation list).
A CRL possibilita que certificados comprometidos sejam seletivamente rejeitados
sem necessidade de reconstruir a PKI inteira. A CRL deve ter uma cópia no
servidor, para que a checagem possa ser feita;
-
O servidor pode considerar direitos de acesso específicos dos clientes com base em
campos embutidos em seus certificados (Common Name, por exemplo).
Apresentado o overview acima, pode-se agora gerar a PKI no próprio servidor (Matriz), tendo
em mente que num ambiente de produção ela deveria ficar num equipamento isolado de rede
por motivos de segurança.
Uma vez que já foi instalado o OpenVPN no passo anterior, existem duas opções para
construir uma PKI. A primeira seria trabalhar diretamente com as diretivas da biblioteca
OpenSSL, disponível no Linux, e que é quem dá suporte efetivo à criação e gerenciamento da
PKI. A segunda é utilizar a interface disponibilizada pelo OpenVPN para simplificar as
diretivas do OpenSSL. Será utilizada esta última opção.
6.1.2.5.1 Geração da PKI
A instalação a partir do arquivo.tar.gz utilizada anteriormente cria um diretório easy-rsa em
/root/openvpn-2.09. Para facilitar o gerenciamento da VPN, deve-se mover esse diretório
para /etc/openvpn.
cp –Rv /root/openvpn-2.09/easy-rsa /etc/openvpn/
cd /etc/openvpn/easy-rsa
93
Deve-se em seguida editar o arquivo ‘vars’, existente neste diretório alterando as seguintes
linhas (os números no início de cada linha não fazem parte do arquivo) para os valores
mostrados:
01
02
03
04
05
06
07
08
09
10
11
export EASY_RSA="/etc/openvpn/easy-rsa"
export KEY_CONFIG="$EASY_RSA/openssl.cnf"
export KEY_DIR="$EASY_RSA/keys"
export KEY_SIZE=1024
export CA_EXPIRE=365
export KEY_EXPIRE=365
export KEY_COUNTRY="BR"
export KEY_PROVINCE="ES"
export KEY_CITY="Vitoria"
export KEY_ORG="labvpn"
export KEY_EMAIL="[email protected]"
Este arquivo é um script que contém parâmetros que serão utilizados pelo OpenVPN para seu
próprio controle e para geração dos certificados. Segue uma breve explicação sobre cada uma
das linhas acima:
Linha 01:
Linha 02:
Linha 03:
Linha 04:
Linha 05:
Linha 06:
Linha 07:
Linha 08:
Linha 09:
Linha 10:
Linha 11:
Diretório onde será construída a estrutura PKI
Arquivo de configuração do OpenSSL que será alimentado pelos parâmetros
informados neste arquivo e por outros complementares obtidos em tempo de
execução dos comandos de geração dos certificados.
Diretório onde serão colocados os certificados criados.
Tamanho das chaves geradas em bits.
Número de dias em que a chave privada da CA irá expirar.
Número de dias em que os certificados irão expirar.
Campo COUNTRY do certificado.
Campo PROVINCE do certificado.
Campo CITY do certificado.
Campo ORGANIZATION do certificado.
Campo EMAIL do certificado.
Feita essa parte, pode-se partir para a inicialização da PKI executando os seguintes
comandos/scripts:
./vars
./clean-all
./build-ca
O primeiro script já foi visto. O segundo inicializa os arquivos necessários para começar a
geração da PKI do zero. O terceiro irá gerar o certificado mestre da CA e a chave mestre
privada da CA.
94
A execução de ‘build-ca’ invocará interativamente o comando openssl, cujos resultados estão
reproduzidos abaixo:
Generating a 1024 bit RSA private key
............++++++
...........++++++
writing new private key to 'ca.key'
----You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----Country Name (2 letter code) [BR]:
State or Province Name (full name) [ES]:
Locality Name (eg, city) [Vitória]:
Organization Name (eg, company) labvpn}:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:CA
Email Address [[email protected]]:
Deve-se observar na seqüência interativa acima que os valores default de alguns campos são
aqueles informados no arquivo ‘vars’. O campo Organizational Unit Name é opcional e foi
deixado em branco e o campo Common Name foi preenchido com a seqüência “CA”. Este
último campo não existe em vars e deve ser informado explicitamente, pois deve ser único
para cada par certificado/chave privada gerada.
Os arquivos resultantes do script acima são:
ca.crt ca.key index.txt serial.txt -
Certificado mestre da CA.
Chave privada mestre da CA.
Campo de controle
Campo de controle
Com isso, a PKI foi inicializada e os arquivos mestre da CA criados. Pode-se agora partir
para a criação dos certificados/chaves privadas para a matriz, as filiais e o micro standalone
(Windows).
95
6.1.2.5.2 Matriz
./build-key-server
Como no passo anterior, os parâmetros default devem ser aceitos e em Common Name deve
ser informado “matriz”. Duas outras perguntas devem ser respondidas positivamente: "Sign
the certificate? [y/n]" e "1 out of 1 certificate requests certified, commit? [y/n]". A primeira
estabelece que o certificado deve ser assinado pela CA e a segunda confirma que o conjunto
certificado/chave privada gerados deve ser criado.
Os arquivos resultantes do script acima que nos interessam são:
matriz.crt
matriz.key
- Certificado da matriz assinado
- Chave privada da matriz
Abaixo, uma reprodução do certificado da matriz.
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=BR, ST=ES, L=Vitoria, O=labvpn, OU=, CN=CA /[email protected]
Validity
Not Before: Out 17 20:29:25 2006 GMT
Not After : Out 16 20:29:25 2007 GMT
Subject: C=BR, ST=ES, L=Vitoria, O=labvpn, OU=, CN=matriz
/[email protected]
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:9c:35:d9:4c:15:66:ec:3d:6d:7f:84:9b:e7:97:
8c:3f:9d:0d:ad:06:45:7d:9b:0b:6d:75:4f:71:89:
0e:85:e6:34:29:26:a0:8f:13:3e:6e:f3:1a:fb:8a:
9b:68:1f:d1:f7:5c:80:19:ba:5a:97:68:98:7f:c4:
80:d3:b2:1a:cb:a8:bc:0f:2e:4f:51:2c:1a:df:7b:
22:57:2d:94:a7:3a:a6:61:68:7c:26:63:2a:e0:07:
b1:4f:82:27:79:ca:a3:bf:e1:e6:48:71:50:bd:2a:
df:d5:20:b0:6d:24:82:af:1a:27:9c:eb:5b:9a:8e:
ef:45:1f:5c:a2:a2:0b:2e:63
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
OpenSSL Generated Server Certificate
96
X509v3 Subject Key Identifier:
00:1C:82:7F:CF:AA:95:37:95:C5:57:32:37:A1:EA:01:6F:A2:FE:BE
X509v3 Authority Key Identifier:
keyid:2E:3F:B3:2E:6E:17:12:48:A1:00:C1:93:75:75:CF:99:2C:8F:48:F2
DirName:/C=BR/ST=ES/L=Vitoria/O=labvpn/OU=/CN=CA/
[email protected]
serial:00
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Key Usage:
Digital Signature, Key Encipherment
Signature Algorithm: md5WithRSAEncryption
8a:e2:91:51:b1:ba:8e:fe:de:93:49:98:63:a0:27:62:5b:f5:
0c:bf:0b:bb:5b:45:7e:0e:1f:2f:9d:08:52:b0:3d:b6:60:84:
2e:fe:45:65:d4:4d:52:6e:2c:ae:15:e5:4d:c7:00:0b:08:37:
14:d9:a5:ff:0d:69:17:92:5a:c3:69:a1:ad:0e:cd:0d:21:eb:
71:1a:a6:a7:f5:18:db:e4:58:6a:b4:77:3b:2f:c7:6b:e2:00:
ef:5d:87:02:9b:40:74:45:4d:7e:02:13:15:c2:9f:c9:c1:51:
5f:65:86:ff:5b:8f:c1:99:8b:2b:17:5e:ad:3f:60:8b:26:9f:
44:2e
-----BEGIN CERTIFICATE----MIID/TCCA2agAwIBAgIBATANBgkqhkiG9w0BAQQFADCBljELMAkGA1UEBhMCQlIx
CzAJBgNVBAgTAkVTMRAwDgYDVQQHEwdWaXRvcmlhMRMwEQYDVQQKEwpIZWxwY2Vu
dGVyMQswCQYDVQQLEwJIQzEWMBQGA1UEAxMNSGVscGNlbnRlciBDQTEuMCwGCSqG
SIb3DQEJARYfdmFuZGVybGVpQGhlbHBjZW50ZXItdml4LmNvbS5icjAeFw0wNjA3
MTcyMDI5MjVaFw0xNjA3MTQyMDI5MjVaMIGPMQswCQYDVQQGEwJCUjELMAkGA1UE
CBMCRVMxEDAOBgNVBAcTB1ZpdG9yaWExEzARBgNVBAoTCkhlbHBjZW50ZXIxCzAJ
BgNVBAsTAkhDMQ8wDQYDVQQDEwZtYXRyaXoxLjAsBgkqhkiG9w0BCQEWH3ZhbmRl
cmxlaUBoZWxwY2VudGVyLXZpeC5jb20uYnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
MIGJAoGBAJw12UwVZuw9bX+Em+eXjD+dDa0GRX2bC211T3GJDoXmNCkmoI8TPm7z
GvuKm2gf0fdcgBm6WpdomH/EgNOyGsuovA8uT1EsGt97IlctlKc6pmFofCZjKuAH
sU+CJ3nKo7/h5khxUL0q39UgsG0kgq8aJ5zrW5qO70UfXKKiCy5jAgMBAAGjggFe
MIIBWjAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDAzBglghkgBhvhCAQ0E
JhYkT3BlblNTTCBHZW5lcmF0ZWQgU2VydmVyIENlcnRpZmljYXRlMB0GA1UdDgQW
BBQAHIJ/z6qVN5XFVzI3oeoBb6L+vjCBwwYDVR0jBIG7MIG4gBQuP7MubhcSSKEA
wZN1dc+ZLI9I8qGBnKSBmTCBljELMAkGA1UEBhMCQlIxCzAJBgNVBAgTAkVTMRAw
DgYDVQQHEwdWaXRvcmlhMRMwEQYDVQQKEwpIZWxwY2VudGVyMQswCQYDVQQLEwJI
QzEWMBQGA1UEAxMNSGVscGNlbnRlciBDQTEuMCwGCSqGSIb3DQEJARYfdmFuZGVy
bGVpQGhlbHBjZW50ZXItdml4LmNvbS5icoIBADATBgNVHSUEDDAKBggrBgEFBQcD
ATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQEEBQADgYEAiuKRUbG6jv7ek0mYY6An
Ylv1DL8Lu1tFfg4fL50IUrA9tmCELv5FZdRNUm4srhXlTccACwg3FNml/w1pF5Ja
w2mhrQ7NDSHrcRqmp/UY2+RYarR3Oy/Ha+IA712HAptAdEVNfgITFcKfycFRX2WG
/1uPwZmLKxderT9giyafRC4=
-----END CERTIFICATE-----
Além do nível de segurança garantido pelo protocolo SSL/TLS, o OpenVPN possui um
recurso que torna possível criar uma de espécie de firewall interno ao daemon para ajudar no
bloqueio de ataques DoS e de inundação (flooding) de pacotes UDP. Esse recurso utiliza-se
de uma chave estática que deve ser gerada através do comando:
openvpn --genkey --secret ta.key
97
Essa chave deve ser copiada para o servidor e para os clientes da VPN. Sua ativação deve ser
feita através da diretiva tls-auth nos arquivos de configuração do OpenVPN (vide arquivos de
configuração nos tópicos seguintes).
6.1.2.5.3 Filiais e micro standalone (Windows)
./build-key filial1
./build-key filial2
./build-key Windows
De forma análoga à da matriz, os Common Names são filial1, filial2 e Windows,
espectivamente.
6.1.2.5.4 Geração de parâmetros Diffie-Hellman
./build-dh
O arquivo gerado é o ‘dh1024.pem’.
Conforme visto no capítulo 2, o algoritmo Diffie-Hellman foi o primeiro algoritmo de chave
pública descoberto, em 1976. Ele é usado até hoje para a distribuição de chaves, mas não é
capaz de cifrar ou decifrar mensagens. Seu objetivo é permitir a troca de chaves entre duas
entidades remotas através de um meio de comunicação não seguro. Matematicamente, baseiase na aplicação de funções unidirecionais. Deve-se observar que o Algoritmo Diffie-Hellman
é usado somente para a troca segura de chaves. Uma vez feita a troca, a comunicação passa a
utilizar a criptografia tradicional baseada em chaves simétricas.
98
6.1.2.5.5 Resumo das características de utilização das chaves e certificados gerados
Resumidamente, os pares certificado/chave privada e o arquivo de parâmetros DiffieHellman têm as seguintes características de utilização conforme ilustrado no Quadro 3.
Arquivo
Secreto
Necessário para
Propósito
Ca.crt
Servidor + todos os
clientes
Certificado mestre da CA
NÃO
Ca.key
Máquina que assina
somente
Chave mestre da CA
SIM
Dh1024.pem
Servidor apenas
Parâmetros Diffie Hellman
NÃO
Matriz.crt
Servidor apenas
Certificado do Servidor
NÃO
matriz.key
Servidor apenas
Chave privada do servidor
SIM
filial1.crt
Cliente 1 apenas
Certificado do Cliente 1
NÃO
Filial1.key
Cliente 1 apenas
Chave privada do Cliente
1
SIM
Filial2.crt
Cliente 2 apenas
Filial2.key
Cliente 2 apenas
Chave privada do Cliente
2
SIM
Windows.crt
Micro Windows apenas
Certificado do micro
Windows
NÃO
Windows.key
Micro Windows apenas
Chave privada do micro
Windows
SIM
Certificado do Cliente 2
Quadro 3 - Características de uso e localização de chaves e certificados
NÃO
99
O passo final desse processo é copiar todos os arquivos indicados na tabela para seus
respectivos locais de utilização, tomando o cuidado básico de transferir os arquivos secretos
através de um meio de transmissão seguro.
6.1.2.6 Preparação do arquivo de configuração da Matriz e setup dos demais elementos
necessários ao funcionamento do OpenVPN.
Uma vez definida a estrutura de PKI e geradas as chaves e certificados necessários, deve-se
preparar o servidor da VPN (Matriz), cuja configuração estará inteiramente contida num
arquivo de configuração localizado em /etc/openvpn.
A seguir é mostrado o arquivo de configuração que dará suporte ao cenário proposto, no lado
do servidor, com os devidos comentários sobre as principais opções. Este arquivo não é
obrigatório, podendo-se especificar cada uma de suas linhas como parâmetro do comando que
carrega o daemon openvpn (cada linha constitui uma opção co comando e deve ser precedida
de dois hífens). Entretanto, a utilização do arquivo de configuração permite uma melhor
visualização e organização das opções utilizadas, sendo a forma adotada neste trabalho.
#====================================
# Arquivo de configuração do OpenVPN versão 2
# (multi-client server)
#
# MATRIZ
#
# Este arquivo configura o lado server (Matriz)
# de uma configuração vários-clientes <-> um
# servidor.
#
# Esta configuração se aplica a sistemas baseados
# no Windows ou em Linux/BSD.
#
# Comentários são precedidos de '#' ou ';' e
# são permitidas linhas em branco.
#=====================================
# Define o IP local que o OpenVPN deve monitorar (opcional).
local 192.168.254.1
# Este é o endereço IP associado à placa eth0 do servidor
# openvpn da matriz.
# Define a porta TCP/UDP o OpenVPN deve monitorar. # Se por
# alguma razão se deseja executar múltiplas instâncias do
# OpenVPN na mesma máquina, deve-se utilizar um número de
# porta diferente para cada uma delas. Será necessário ainda
# abrir essa porta no firewall da rede. Valor default: 1194.
port 5100
100
# TCP ou UDP?
;proto tcp
proto udp
# "dev tun" irá criar um túnel IP roteado. "dev tap" irá criar
# um túnel ethernet. Em muitos sistemas a VPN não funcionará
# a menos que seja desabilitada parcial ou completamente o
# firewall para a interface.
# TUN/TAP.
;dev tap
dev tun
# SSL/TLS: certificado mestre da CA (ca), certificado (cert) e
# chave privada (key). Cada cliente ou servidor deve ter seu
# próprio arquivo de certificado e de chave privada. O servidor
# e todos os clientes irão utilizar o mesmo arquivo "ca".
#
# No diretório "easy-rsa" existe uma série de scripts para a
# geração de certificados RSA e chaves privadas. Deve-se
# utilizar Common Names exclusivos para os certificados do
# servidor e de cada cliente.
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/matriz.crt
key /etc/openvpn/keys/matriz.key # Deve ser mantido secreto
# Parâmetros Diffie-Hellman. Podem ser gerados pelo comando
# ‘./build-dh’ do OpenVPN ou ‘openssl dhparam -out dh1024.pem
# 1024’ da biblioteca OpenSSL. 1024 deve ser substituído por
# 2048 quando se deseja usar chaves de 2048 bits.
dh /etc/openvpn/keys/dh1024.pem
# A configuração abaixo fornece uma sub-rede VPN para o OpenVPN
# a partir da qual serão gerados outros endereços para os
# clientes. O servidor irá tomar o primeiro endereço (10.8.0.1)
# para si e os endereços a seguir serão disponibilizados para
# os clientes. cada cliente estará apto a encontrar o servidor
# em 10.8.0.1.
server 10.8.0.0 255.255.255.0
# A próxima opção mantém um registro das associações cliente
# x endereço IP virtual no arquivo especificado. Se OpenVPN
# fica indisponível ou é reiniciado, na reconexão dos clientes
# o mesmo endereço IP virtual que estava previamente associado
# é mantido.
ifconfig-pool-persist ipp.txt
# Envia rotas para os clientes para possibilitar que eles
# encontrem outra ou outras sub-redes privadas atrás do servidor
# (nesse caso, conectadas a eth1). Deve-se lembrar que estas
# sub-redes privadas (nesse caso apenas uma) também precisarão
# saber como rotear o pool de endereços dos clientes do OpenVPN
# de volta para o servidor.
push "route 192.168.0.0 255.255.255.0"
# OBS: 192.168.0.0 é o endereço de rede local da matriz.
# Para associar endereços IP específicos a determinados
# clientes ou se um cliente da VPN possui uma sub-rede
# privada atrás de si cujos micros também devam ter acesso
# à VPN, deve-se utilizar o subsdiretório "clients-config"
# para manter arquivos de configuração específicos para cada
101
# cliente.
# Neste estudo de caso, os clientes com certificados
# de common name "filial1" e "filial2" têm atrás de si as
# sub-redes 192.168.1.0 e 192.168.2.0, respectivamente.
client-config-dir clients-config
route 192.168.1.0 255.255.255.0
# CN=filial1
route 192.168.2.0 255.255.255.0
# CN=filial2
route 192.168.254.250 255.255.255.0 #CN=Windows
# Então, deve-se criar no diretório clients-config da matriz
# os arquivos "filial1", “filial2" e “Windows”(nomes idênticos aos
# common names de seus respectivos certificados) com as
# seguintes linhas:
# filial1
--> iroute 192.168.1.0 255.255.255.0 # filial1
#
ifconfig-push 10.8.0.3 10.8.0.4 # filial1
# filial2
--> iroute 192.168.2.0 255.255.255.0 # filial2
#
ifconfig-push 10.8.0.5 10.8.0.6 # filial2
# Windows --> iroute 192.168.2.0 255.255.255.0 # Windows
#
ifconfig-push 10.8.0.7 10.8.0.8 # Windows
# Isto possibilitará às máquinas existentes em cada uma das
# duas sub-redes acessar a VPN e também fixará seus IPs
# virtuais (10.8.0.3/10.8.0.4, 10.8.0.5/10.8.0.6 e 10.8.0.7/
# 10.8.0.8) respectivamente).
# A diretiva abaixo deve ser descomentada para permitir que
# os clientes da VPN estejam aptos a se enxergar mutuamente.
# Por default, os clientes podem ver apenas o servidor.
# Nesse estudo de caso, será mantida a opção default, e
# a diretiva permanecerá comentada.
;client-to-client
# Se for desejado que múltiplos clientes se conectem com os
# mesmos arquivos de certificado, chaves privadas e common
# names, a diretiva abaixo deve ser descomentada. Tal opção
# só deve ser usada para fins de teste. Em ambiente de
# produção cada cliente deve ter seu próprio par certificado/
# chave. Assim foi feito neste trabalho.
;duplicate-cn
# A opção keepalive faz com que mensagens similares ao ping
# sejam enviadas através do link para que cada lado saiba
# quando outro lado caiu. Os valores especificados informam
# que são enviados “pings” a cada 10 segundos e assumido que
# o outro lado caiu se nenhum “ping” for recebido durante o
# intervalo de tempo de 120 segundos.
keepalive 10 120
# Para um nível de segurança além daquele proporcionado pelo
# protocolo SSL/TLS, é possível criar um “firewall HMAC" para
# ajudar no bloqueio de ataques DoS e “UDP port flooding”.
# Para isso deve ser gerada uma chave estática através do
# comando:
#
# openvpn --genkey --secret ta.key
#
# O servidor e cada cliente devem ter uma cópia desta chave.
# O segundo parâmetro da diretiva deve ser “0” para o servidor
# e “1” para os clientes.
tls-auth ta.key 0 # Este arquivo é secreto
# OpenVPN permite escolher o cifrador criptográfico. Esta
102
# escolha # deve ser reproduzida nos arquivos de configuração
# dos clientes. As opções são Blowfish, AES e 3DES.
cipher BF-CBC
# Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
# Esta diretiva habilita a compressão no link VPN. Se for
# habilitada no servidor, é obrigatório que também seja nos
# clientes.
comp-lzo
# Número máximo de clientes conectados concorrentemente.
max-clients 100
# Por questões de seguranças, é uma boa idéia reduzir os
# privilégios do daemon OpenVPN após sua inicialização
# (válido apenas para sistemas não-Windows). Significa que
# o OpenVPN é inicializado com direitos de root e a seguir
# sofre um “rebaixamento”. Assim, em caso de um ataque
# bem sucedido, o invasor terá direitos limitados.
user nobody
group nobody
# As opções “persist” irão tentar evitar que certos recursos
# sejam acessados durante eventuais restarts, uma vez que eles
# poderão não estar mais disponíveis em função do downgrade
# de privilégios ocasionado pelas duas opções anteriores.
persist-key
persist-tun
# A opção abaixo gera um pequeno arquivo de status mostrando
# as conexões ativas (é reescrito a cada minuto).
status openvpn-status.log
# Por default, as mensagens do OpenVPN serão enviadas ao syslog,
# no Linux. No Windows, se o OpenVPN estiver rodando como um
# serviço, as mensagens serão gravadas no diretório “\Arquivos
# de Programas\OpenVPN\log". As opções log e log-append mudarão
# a definição default.
# "log" irá reiniciar o arquivo de log a cada startup do OpenVPN.
# "log-append" irá adicionar mensagens no final do arquivo de
# log. Deve ser utilizado um ou outro, mas não os dois.
;log
openvpn.log
log-append openvpn.log
# A diretiva “verb” estabelece o nível apropriado de detalhes que
# será relatado nos logs.
# 0 é silêncio, exceto para erros fatais.
# 3 e 4 são níveis razoáveis para uso geral.
# 5 e 6 podem ajudar na depuração de problemas de conexão.
# 9 é o nível mais detalhado.
verb 3
# A opção abaixo estabelece que no máximo 20 mensagens seqüenciais
# da mesma categoria serão direcionadas para os logs. Visa evitar
# que o log se torne “inchado” pela repetição exaustiva de
# mensagens.
mute 20
103
Além do arquivo de configuração principal (matriz.conf), processado diretamente pelo
daemon OpenVPN durante sua carga, existem ainda os arquivos por ele referenciados, a
saber:
/etc/openvpn/keys/ca.crt
/etc/openvpn/keys/matriz.crt
/etc/openvpn/keys/matriz.key
/etc/openvpn/keys/dh1024.pem
/etc/openvpn/ipp.txt
/etc/openvpn/clients-config/filial1
/etc/openvpn/clients-config/filial2
/etc/openvpn/keys/ta.key
/etc/openvpn/openvpn.log
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
A função de todos eles já foi detalhada anteriormente, no item sobre PKI e nos comentários do
próprio arquivo matriz.conf. Resumidamente, os três primeiros são gerados pelo sistema PKI
a partir de parâmetros informados durante o processo de geração dos certificados e chaves. O
mesmo ocorre com o 4º e 8º arquivos, que também são gerados através do OpenSSL. O
arquivo 5 é para controle do OpenVPN, sendo gerado e atualizado em tempo de operação da
VPN, automaticamente.
O arquivo 9 é o log do OpenVPN e também é gerado
automaticamente. Restam então os arquivos 6 e 7, que são construídos manualmente, estando
reproduzidos abaixo.
# Filial 1
iroute 192.168.1.0 255.255.255.0
ifconfig-push 10.8.0.3 10.8.0.4
# Filial 2
iroute 192.168.2.0 255.255.255.0
ifconfig-push 10.8.0.5 10.8.0.6
# Windows
iroute 192.168.254.250 255.255.255.0
ifconfig-push 10.8.0.7 10.8.0.8
Definida a estrutura de arquivos, é necessário ainda preparar o Linux para executar algumas
tarefas necessárias e complementares ao correto funcionamento do OpenVPN. São elas:
No arquivo /etc/rc.d/rc.local, incluir as seguintes linhas:
104
echo 1 > /proc/sys/net/ipv4/ip_forward
(1)
route add default gw 192.168.254.254
(2)
/usr/bin/inadyn -u labvpn -p LabVPN2006 –a
labvpn-matriz.dyndns.org --syslog --background
(3)
/etc/firewall/iptables.conf
(4)
/usr/local/sbin/openvpn --config /etc/openvpn/matriz.conf
--daemon -–float
(5)
Como é sabido, este arquivo contém comandos ou chamadas de scripts que devem ser
executados em tempo de carga do Linux. As linhas acima têm os seguintes significados:
(1)
Ativa o roteamento entre as interfaces de rede do Linux, que por default está
desabilitado.
(2)
Define a rota default do gateway matriz, apontando-a para a interface LAN do modem
ADSL.
(3)
Executa o aplicativo inadyn, responsável pela associação do identificador labvpnmatriz.dyndns.org ao IP público do link ADSL. Esse aplicativo monitora as mudanças
de IP e quando ocorrem providencia sua atualização junto ao serviço DYNDNS. Os
cinco parâmetros especificados na linha significam: 1º) nome do usuário responsável
pelo identificador junto ao serviço DYNDNS (-u labvpn), 2º) senha do usuário (-p
LabVPN2006), 3º) identificador do gateway matriz na Internet (-a labvpn.dyndns.org),
4º) direciona o log do aplicativo para o syslog e 5º) executa a aplicação inadyn em
background, tornado-a residente em memória e apta a efetuar o monitoramento do IP.
O aplicativo é um freeware e pode ser baixado do link http://www.softpicks.net/
software/inadyn-22675.htm.
(4)
Executa o script /etc/firewall/iptables.conf, que contem os comandos que constituem o
firewall da rede matriz (entre esses comandos estão os necessários para liberar o
tráfego através da VPN (vide detalhamento abaixo).
(5)
Executa o daemon openvpn. Os três parâmetros do comando significam: 1º) arquivo
de configuração que deve ser utilizado (--config /etc/openvpn/matriz.conf), 2º)
estabelece que a finalização do processo de carga do OpenVPN seja retardada até que
as funções de inicialização capazes de gerar erros fatais estejam completas (--daemon),
3º) É importante quando se trabalha com IPs dinâmicos, como é o caso aqui (links
ADSL), e define que nas mudanças de IP dos clientes haverá um novo processo de
autenticação e o novo endereço passará a ser considerado na mesma sessão, sem perda
da comunicação. É útil também em conexões dial-up.
105
No script que contém os comandos de firewall do servidor matriz (no caso o arquivo
/etc/firewall/iptables.conf), devem ser incluídos os comandos para liberação do tráfego da
VPN através da interface virtual tun0. No script utilizado, reproduzido a seguir, foram
omitidas as linhas não relacionadas à VPN, representadas por seqüências de três pontos (...). A
designação tun+ especifica todas as interfaces tun possíveis: tun0, tun1, tun2, etc).
# Firewall do Servidor Matriz – Implementação para o laboratório labvpn
#
# Internet -------> eth0
# Rede interna ---> eth1
#
LAN=192.168.0.0/24
...
...  declaração de outras variáveis
...
#
iptables.conf()
{
#
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#
...
...  outros comndos do firewall (tabela filter)
...
# Permite tráfego para conexões já existentes
iptables -A FORWARD -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# Permite conexões através da interface "tun" (OpenVPN)
iptables -A INPUT
-i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
#
# Abre a porta UDP 5100 para conexoes ao OpenVPN Server
iptables -A INPUT
-p udp --dport 5100 -j ACCEPT
iptables -A FORWARD -p udp --dport 5100 -j ACCEPT
#
#
...
...  outros comndos do firewall (tabela filter)
...
#
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
#
#
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#
106
...
...  outros comndos do firewall (tabela nat)
...
#
# Efetua NAT dos pacotes originados na rede interna
iptables -t nat -A POSTROUTING -s $LAN -j MASQUERADE
#
}
iptables.conf
#
# -------------------------------------------------------------------
Uma vez iniciado o OpenVPN, pode-se visualizar sua presença através de alguns comandos
do Linux, como ifconfig e route, reproduzidos a seguir. O ifconfig reporta a presença da
interface virtual tun0 (destacada em negrito), onde pode-se observar os IPs 10.8.0.1 e 10.8.0.2.
No comando route pode-se observar referências a esses IPs virtuais, bem como aos IPs reais,
tanto da matriz quanto das filiais 1 e 2.
[root@labvpn-matriz vanderlei]# ifconfig
eth0
Encapsulamento do Link: Ethernet Endereço de HW 00:0A:E6:6B:E0:46
inet end.: 192.168.254.1 Bcast:192.168.254.255 Masc:255.255.255.0
endereço inet6: fe80::20a:e6ff:fe6b:e046/64 Escopo:Link
UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1
RX packets:4538183 errors:0 dropped:0 overruns:0 frame:0
TX packets:4249691 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:2848927465 (2716.9 Mb) TX bytes:613270031 (584.8 Mb)
IRQ:11 Endereço de E/S:0xae00
eth1
Encapsulamento do Link: Ethernet Endereço de HW 00:40:F4:61:81:AC
inet end.: 192.168.0.250 Bcast:192.168.0.255 Masc:255.255.255.0
endereço inet6: fe80::240:f4ff:fe61:81ac/64 Escopo:Link
UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1
RX packets:4529129 errors:0 dropped:0 overruns:0 frame:0
TX packets:4529779 errors:0 dropped:0 overruns:3 carrier:0
colisões:0 txqueuelen:1000
RX bytes:2773409343 (2644.9 Mb) TX bytes:2978568558 (2840.5 Mb)
IRQ:12 Endereço de E/S:0xe800
lo
Encapsulamento do Link: Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:6642 errors:0 dropped:0 overruns:0 frame:0
TX packets:6642 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:1490177 (1.4 Mb) TX bytes:1490177 (1.4 Mb)
107
tun0
Encapsulamento do Link: Protocolo Ponto-a-Ponto
inet end.: 10.8.0.1 P-a-P:10.8.0.2 Masc:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Métrica:1
RX packets:485919 errors:0 dropped:0 overruns:0 frame:0
TX packets:389266 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:100
RX bytes:239529196 (228.4 Mb) TX bytes:69509712 (66.2 Mb)
[root@labvpn-matriz vanderlei]#_
[root@labvpn-matriz vanderlei]# route -n
Tabela de Roteamento IP do Kernel
Destino
Roteador
MáscaraGen. Opções MétricaRef
10.8.0.2
0.0.0.0
255.255.255.255 UH
0
0
192.168.2.0 10.8.0.2
255.255.255.0 UG
0
0
192.168.1.0 10.8.0.2
255.255.255.0 UG
0
0
10.8.0.0
10.8.0.2
255.255.255.0 UG
0
0
192.168.0.0
0.0.0.0
255.255.255.0 U
0
0
192.168.254.0 0.0.0.0
255.255.255.0 U
0
0
127.0.0.0
0.0.0.0
255.0.0.0
U
0
0
0.0.0.0
192.168.254.254 0.0.0.0
UG
0
0
Uso Iface
0 tun0
0 tun0
0 tun0
0 tun0
0 eth1
0 eth0
0 lo
0 eth0
[root@labvpn-matriz vanderlei]#_
6.1.2.7 Preparação dos arquivos de configuração das Filiais e setup dos demais elementos
necessários ao funcionamento do OpenVPN.
Nesta etapa, deve-se preparar as filiais que têm gateway Linux (Filial1 e Filial2), cujas
configurações estarão inteiramente contidas num arquivo de configuração localizado em
/etc/openvpn/clients-config. Este diretório foi criado na estrutura do OpenVPN da matriz, e
para efeito de padronização, será mantido também nas filiais.
De forma análoga à Matriz, a seguir é mostrado o arquivo de configuração da Filial1
(filial1.conf).
#=======================================================
# Arquivo de configuração do OpenVPN versão 2
# (multi-client server)
#
# FILIAL 1
#
# Este arquivo configura o lado cliente(Filial1)
# de uma configuração vários-clientes <-> um
# servidor do OpenVPN. Cada cliente deve ter seu
# próprio arquivo de configuração e seu certificado
# e chave privada.
#
# Esta configuração se aplica a sistemas baseado
# no Windows ou em Linux/BSD.
108
#
# Para ambiente Windows, este arquivo deve ter
# entensão .ovpn.
#
# Comentárioss são precedidos de '#' ou ';' e
# são permitidas linhas em branco.
#====================================
# Especifica que este arquivo refere-se a um lado cliente e
# que irá puxar certas diretivas do arquivo de configuração
# do servidor.
client
# Aqui deve ser utilizada a mesma configuração definida para o
# servidor.
# "dev tun" irá criar um túnel IP roteado. "dev tap" irá criar
# um túnel ethernet. Em muitos sistemas a VPN não funcionará
# a menos que seja desabilitada oarcial ou completamente o
# firewall para a interface.
;dev tap
dev tun
# Aqui deve ser utilizada a mesma configuração definida para o
# servidor.
# A conexão será feita com um servidor TCP ou UDP?
;proto tcp
proto udp
# Configuração do hostname ou IP e porta do servidor. Pode-se
# ter múltiplas entradas nesta opção, o que estabeleceria
# um balanceamento de carga entre os servidores especificados.
#remote <servidor> 1194
remote labvpn.dyndns.org 5100
# Define a escolha do servidor randomicamente a partir de uma
# lista para fins de balanceamento de carga. Não será utilizado
# neste projeto.
;remote-random
# Define que o cliente deve tentar indefinidamente resolver o
# hostname do servidor OpenVPN. Muito útil em máquinas que não
# permanecem conctadas à Internet full time (exemplo: notebooks).
resolv-retry infinite
# A opção abaixo pode ser usada se o cliente não necessita de
# ligação (bind) a uma porta local específica.
nobind
# Por questões de seguranças, é uma boa idéia reduzir os
# privilégios do daemon OpenVPN após sua inicialização
# (válido apenas para sistemas não-Windows).
user nobody
group nobody
# As opções “persist” irão tentar evitar que certos recursos
# sejam acessados durantes os restarts, uma vez que eles
# poderão não estar mais disponíveis em função do downgrade
# de privilégios ocasionado pelas duas opções anteriores.
persist-key
persist-tun
109
# Se a conexão ao servidor OpenVPN deve ser feita através de
# um proxy http, coloque o IP e a porta do proxy aqui.
# Se o proxy requer autenticação, consulte a “man page” para
# mais informações.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
# Redes wireless diversas vezes produzem uma grande
# quantidade de pacotes duplicados. Esta opção deve ser
# utilizada para evitar as advertências a respeito de
# pacotes duplicados.
mute-replay-warnings
# SSL/TLS: certificado mestre da CA (ca), certificado (cert) e
# chave privada (key). Cada cliente ou servidor deve ter seu
# próprio arquivo de certificado e de chave privada. O servidor
# e todos os clientes irão utilizar o mesmo arquivo "ca".
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/filial1.crt
key /etc/openvpn/keys/filial1.key
# A opção abaixo verifica o certificado do servidor checando
# se o campo nsCertType está setado para "server". Esta é
# uma importante precaução contra um potencial ataque
# discutido no site http://openvpn.net/howto.html#mitm.
# Para utilizar esse recurso, é necessário gerar o certificado
# do servidor com o campo nsCertType setado para “server”.
ns-cert-type server
# Para um nível de segurança além daquele proporcionado pelo
# protocolo SSL/TLS, é possível criar um “firewall HMAC" para
# ajudar no bloqueio de ataques DoS e “UDP port flooding”.
# Para isso deve ser gerada uma chave estática através do
# comando:
#
# openvpn --genkey --secret ta.key
#
# O servidor e cada cliente devem ter uma cópia desta chave.
# O segundo parâmetro da diretiva deve ser “0” para o servidor
# e “1” para os clientes.
#
# Se a opção tls-auth key é usada no servidor, então todos os
# clientes também deverão stilizá-la.
tls-auth ta.key 1 # Este arquivo é secreto
# OpenVPN permite escolher o cifrador criptográfico. Esta
# escolha deve reproduzir aquela feita no arquivo de
# configuração do servidor.
cipher BF-CBC
# Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
# Esta diretiva habilita a compressão no link VPN. Se for
# habilitada no servidor, é obrigatório que também seja nos
# clientes.
comp-lzo
# A diretiva “verb” estabelece o nível apropriado de detalhe que
# será relatado nos logs.
110
# 0 é silêncio, exceto para erros fatais.
# 3 e 4 são níveis razoáveis para uso geral.
# 5 e 6 podem ajudar na depuração de problemas de conexão.
# 9 é o nível mais detalhado.
verb 3
# A opção abaixo estabelece que no máximo 20 mensagens seqüenciais
# da mesma categoria serão direcionadas para os logs.
mute 20
O arquivo da Filial 2 é idêntico, mudando apenas a sessão relativa ao certificado e à chave
privada, que são individualizadas para cada filial. Na reprodução deste arquivo, as partes
idênticas às da Filial 1 estão representadas por uma seqüência de três pontos (...).
#====================================
# Arquivo de configuração do OpenVPN versão 2
# (multi-client server)
#
# FILIAL 2
#
# Este arquivo configura o lado cliente(Filial1)
# de uma configuração vários-clientes <-> um
# servidor do OpenVPN. Cada cliente deve ter seu
# próprio arquivo de configuração e seu certificado
# e / chave privada.
#
# Esta configuração se aplica a sistemas baseado
# no Windows ou em Linux/BSD.
#
# Para ambiente Windows, este arquivo deve ter
# entensão .ovpn.
#
# Comentárioss são precedidos de '#' ou ';' e
# são permitidas linhas em branco.
#====================================
...
...
...
# SSL/TLS: certificado mestre da CA (ca), certificado (cert) e
# chave privada (key). Cada cliente ou servidor deve ter seu
# próprio arquivo de certificado e de chave privada. O servidor
# e todos os clientes irão utilizar o mesmo arquivo "ca".
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/filial2.crt
key /etc/openvpn/keys/filial2.key
...
...
...
Também de forma análoga à Matriz, além do arquivo de configuração principal (filialx.conf),
processado diretamente pelo daemon OpenVPN durante sua carga, existem ainda os arquivos
por ele referenciados:
111
/etc/openvpn/keys/ca.crt
/etc/openvpn/keys/filialx.crt
/etc/openvpn/keys/filialx.key
/etc/openvpn/keys/dh1024.pem
/etc/openvpn/ipp.txt
/etc/openvpn/keys/ta.key
/etc/openvpn/openvpn.log
(1)
(2)
(3)
(4)
(5)
(6)
(7)
Os arquivos filialx em (2) e (3) referem-se a filial1 e filial2.
A função de todos eles já foi
detalhada anteriormente, e não serão repetidas aqui. Cabe apenas chamar a atenção para a
inexistência dos arquivos filial1 e filial2, necessários apenas no servidor da Matriz.
Também aqui, além dessa estrutura de arquivos, é necessário preparar o Linux para executar
algumas tarefas adicionais, que são:
No arquivo /etc/rc.d/rc.local, incluir as seguintes linhas:
echo 1 > /proc/sys/net/ipv4/ip_forward
(1)
route add default gw 192.168.254.254
(2)
/etc/firewall/iptables.conf
(3)
/usr/local/sbin/openvpn --config /etc/openvpn/clientesconfig/filialx.conf --daemon -–float
(4)
As explicações são as mesmas feitas para a Matriz, e deve-se notar a ausência da linha de
execução do inadyn. Conforme já frisado, apenas o servidor precisa ser referenciado através
da Internet, e daí a necessidade de associar um identificador fixo ao IP variável da conexão
ADSL. Pode-se observar no arquivo de configuração das filiais a referência a esse
identificador, bem como à porta UDP utilizada, na linha “remote labvpn.dyndns.org 5100”.
Os scripts de firewall das filiais (/etc/firewall/iptables.conf), também devem conter comandos
para liberação do tráfego da VPN através da interface virtual tun0. A única linha diferente,
em relação à Matriz, no que diz respeito à VPN, é aquela que define a variável LAN, que deve
ser:
Para a Filial 1  LAN=192.168.1.0/24
Para a Filial 2  LAN=192.168.2.0/24
112
Uma vez iniciado o OpenVPN na filial1, as estações de sua rede interna já conseguem
“enxergar” a matriz. O comando tcpdump executado na matriz para a interface tun0, cujo
resultado é visto abaixo, mostra os pacotes ‘echo request’ e ‘echo reply’ correspondentes à
execução do comando ping 192.168.0.1 na estação host-f1. É importante observar o campo
‘link type’ mostrando LINUX_SSL, o que confirma o uso de protocolo TLS/SSL no túnel
VPN.
[root@labvpn-matriz vanderlei]# tcpdump -i tun0
tcpdumo: verbose output supressed, use -v or -vv for full protocol decode
listening on tun0, link type LINUX_SSL (Linux cooked), capture size 96 bytes
12 packets captured
12 packets received by filter
0 packets dropped by kernel
15:08:20.622317 IP 10.8.0.3 > 192.168.0.1: icmp 64: echo request seq 235
15:08:20.623667 IP 192.168.0.1 > 10.8.0.3: icmp 64: echo reply seq 235
15:08:21.622614 IP 10.8.0.3 > 192.168.0.1: icmp 64: echo request seq 236
15:08:21.623614 IP 192.168.0.1 > 10.8.0.3: icmp 64: echo reply seq 236
15:08:22.626053 IP 10.8.0.3 > 192.168.0.1: icmp 64: echo request seq 237
15:08:22.627056 IP 192.168.0.1 > 10.8.0.3: icmp 64: echo reply seq 237
15:08:23.622067 IP 10.8.0.3 > 192.168.0.1: icmp 64: echo request seq 238
15:08:23.623047 IP 192.168.0.1 > 10.8.0.3: icmp 64: echo reply seq 238
15:08:24.619606 IP 10.8.0.3 > 192.168.0.1: icmp 64: echo request seq 239
15:08:24.620586 IP 192.168.0.1 > 10.8.0.3: icmp 64: echo reply seq 239
15:08:25.624525 IP 10.8.0.3 > 192.168.0.1: icmp 64: echo request seq 240
15:08:25.625537 IP 192.168.0.1 > 10.8.0.3: icmp 64: echo reply seq 240
[root@labvpn-matriz vanderlei]#_
6.1.2.8 Instalação e configuração do OpenVPN no micro standalone (ambiente Windows).
Para obter o arquivo de instalação do OpenVPN para Windows, deve-se efetuar o download a
partir do endereço http://openvpn.se/download.htm.
O módulo para instalação em Windows é o openvpn-2.0.9-gui-1.0.3-install.exe. Ele está
escrito em código C win32 puro, e não requer nenhuma biblioteca run-time para executar. Até
este momento, a versão 1.03 é a última versão estável da interface gráfica para Windows e já
traz consigo a versão 2.0.9 do OpenVPN.
O OpenVPN para Windows é suportado nas versões 2000, XP e posteriores. Sua instalação
requer basicamente a execução do arquivo executável baixado. Nesse processo é criado um
diretório openvpn sob a pasta ‘arquivos de programas’. O restante da estrutura de pastas e do
113
processo de instalação é bem parecido com o do Linux: adaptar o arquivo de configuração
para as características estabelecidas no cenário descrito em 6.1.1 para a máquina standalone,
copiar os certificados e chaves geradas para a máquina Windows e definir os mecanismos de
carga do software (manual ou automático).
O arquivo de configuração é:
#====================================
# Arquivo de configuração do OpenVPN versão 2
# (multi-client server)
#
# MICRO STANDALONE WINDOWS
#
# Este arquivo configura o lado cliente (Windows)
# de uma configuração vários-clientes <-> um
# servidor do OpenVPN. Cada cliente deve ter seu
# próprio arquivo de configuração e seu certificado
# e chave privada.
#
# Esta configuração se aplica a sistemas baseado
# no Windows ou em Linux/BSD.
#
# Para ambiente Windows, este arquivo deve ter
# entensão .ovpn.
#
# Comentárioss são precedidos de '#' ou ';' e
# são permitidas linhas em branco.
#====================================
# Especifica que este arquivo refere-se a um lado cliente e
# que irá puxar certas diretivas do arquivo de configuração
# do servidor.
client
# Aqui deve ser utilizada a mesma configuração definida para o
# servidor.
# "dev tun" irá criar um túnel IP roteado. "dev tap" irá criar
# um túnel ethernet. Em muitos sistemas a VPN não funcionará
# a menos que seja desabilitada oarcial ou completamente o
# firewall para a interface.
;dev tap
dev tun
# Aqui deve ser utilizada a mesma configuração definida para o
# servidor.
# A conexão será feita com um servidor TCP ou UDP?
;proto tcp
proto udp
# Configuração do hostname ou IP e porta do servidor. Pode-se
# ter múltiplas entradas nesta opção, o que estabeleceria
# um balanceamento de carga entre os servidores especificados.
#remote <servidor> 1194
remote labvpn.dyndns.org 5100
114
# Define a escolha do servidor randomicamente a partir de uma
# lista para fins de balanceamento de carga. Não será utilizado
# neste projeto.
;remote-random
# Define que o cliente deve tentar indefinidamente resolver o
# hostname do servidor OpenVPN. Muito útil em máquinas que não
# permanecem conctadas à Internet full time (exemplo: notebooks).
resolv-retry infinite
# A opção abaixo pode ser usada se o cliente não necessita de
# ligação (bind) a uma porta local específica.
nobind
# Por questões de seguranças, é uma boa idéia reduzir os
# privilégios do daemon OpenVPN após sua inicialização
# (válido apenas para sistemas não-Windows).
#user nobody
#group nobody
# As opções “persist” irão tentar evitar que certos recursos
# sejam acessados durantes os restarts, uma vez que eles
# poderão não estar mais disponíveis em função do downgrade
# de privilégios ocasionado pelas duas opções anteriores.
persist-key
persist-tun
# Se a conexão ao servidor OpenVPN deve ser feita através de
# um proxy http, coloque o IP e a porta do proxy aqui.
# Se o proxy requer autenticação, consulte a “man page” para
# mais informações.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
# Redes wireless diversas vezes produzem uma grande
# quantidade de pacotes duplicados. Esta opção deve ser
# utilizada para evitar as advertências a respeito de
# pacotes duplicados.
mute-replay-warnings
# SSL/TLS: certificado mestre da CA (ca), certificado (cert) e
# chave privada (key). Cada cliente ou servidor deve ter seu
# próprio arquivo de certificado e de chave privada. O servidor
# e todos os clientes irão utilizar o mesmo arquivo "ca".
ca c:\\arquiv~1\\openvpn\\keys\\ca.crt
cert c:\\arquiv~1\\openvpn\\keys\\Windows.crt
key c:\\arquiv~1\\openvpn\\keys\\Windows.key
# A opção abaixo verifica o certificado do servidor checando
# se o campo nsCertType está setado para "server". Esta é
# uma importante precaução contra um potencial ataque
# discutido no site http://openvpn.net/howto.html#mitm.
# Para utilizar esse recurso, é necessário gerar o certificado
# do servidor com o campo nsCertType setado para “server”.
ns-cert-type server
# Para um nível de segurança além daquele proporcionado pelo
# protocolo SSL/TLS, é possível criar um “firewall HMAC" para
# ajudar no bloqueio de ataques DoS e “UDP port flooding”.
115
# Para isso deve ser gerada uma chave estática através do
# comando:
#
# openvpn --genkey --secret ta.key
#
# O servidor e cada cliente devem ter uma cópia desta chave.
# O segundo parâmetro da diretiva deve ser “0” para o servidor
# e “1” para os clientes.
#
# Se a opção tls-auth key é usada no servidor, então todos os
# clientes também deverão stilizá-la.
tls-auth ta.key 1 # Este arquivo é secreto
# OpenVPN permite escolher o cifrador criptográfico. Esta
# escolha deve reproduzir aquela feita no arquivo de
# configuração do servidor.
cipher BF-CBC
# Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
# Esta diretiva habilita a compressão no link VPN. Se for
# habilitada no servidor, é obrigatório que também seja nos
# clientes.
comp-lzo
# A diretiva “verb” estabelece o nível apropriado de detalhe que
# será relatado nos logs.
# 0 é silêncio, exceto para erros fatais.
# 3 e 4 são níveis razoáveis para uso geral.
# 5 e 6 podem ajudar na depuração de problemas de conexão.
# 9 é o nível mais detalhado.
verb 3
# A opção abaixo estabelece que no máximo 20 mensagens seqüenciais
# da mesma categoria serão direcionadas para os logs.
mute 20
Deve-se observar um detalhe importante de sintaxe entre os arquivos de configuração do
OpenVPN para Linux e para Windows: na especificação dos caminhos de localização dos
certificados e chaves, a barra “\” deve ser grafada em duplicidade “\\” e o diretório “arquivos
de programas” deve ser escrito com “arquiv~1” (nome DOS no formato 8.3). Seguidas essas
regras, a grafia ficou:
ca c:\\arquiv~1\\openvpn\\keys\\ca.crt
cert c:\\arquiv~1\\openvpn\\keys\\Windows.crt
key c:\\arquiv~1\\openvpn\\keys\\Windows.key
Também de forma análoga à Matriz, além do arquivo de configuração principal (c:\arquivosde
programas\openvpn\config\Windows.ovpn), processado diretamente pelo OpenVPN durante
sua carga, existem ainda os arquivos por ele referenciados:
116
c:\arquivos de programas\openvpn\keys\ca.crt
c:\arquivos de programas\/openvpn\keys\Windows.crt
c:\arquivos de programas\openvpn\keys\Windows.key
c:\arquivos de programas\openvpn\keys\dh1024.pem
c:\arquivos de programas\openvpn\ipp.txt
c:\arquivos de programas\openvpn\keys\ta.key
(1)
(2)
(3)
(4)
(5)
(6)
A função de todos eles já foi detalhada anteriormente, cabendo apenas chamar a atenção para
a inexistência do arquivo Windows, necessário apenas no servidor da Matriz. O log do
OpenVPN fica integrado ao sistema de logs do Windows, inexistindo o arquivo openvpn.log.
Também aqui, além dessa estrutura de arquivos, é necessário preparar o Windows para
executar algumas tarefas adicionais, que são:
-
Tornar o firewall do Windows (ou de terceiros, se for o caso) ON para a interface
TAP. OBS: No Windows, mesmo utilizando “tun” no arquivo de configuração do
OpenVPN, a interface virtual da VPN será mostrada como TAP.
-
A escolha do modo de carga do OpenVPN é feita durante a instalação. A escolha
dependerá do uso do host. Se for necessária conexão com a Matriz em regime fulltime, deve-se escolher start automático. Senão, manual. Neste último caso, podese utilizar um ícone criado pelo instalador na bandeja do sistema (system tray).
Um clique com o botão direito do mouse exibe um menu com as opções, conforme
Figura 38.
Figura 38 – Menu de opções do OpenVPN para Windows
117
As opções “Connect” e “Disconnect” podem ser usadas a qualquer momento que se
deseje. Além delas, tem-se outras opções de gerenciamento do OpenVPN (View Log,
Edit Config, Change Password, Proxy Settings, About e Exit), todas auto-explicativas.
A disponibilidade das opções no menu depende do nível de privilégios do usuário
logado.
O log de uma conexão bem sucedida está mostrado abaixo, com as linhas que
referenciam elementos de segurança e dos protocolos de compactação do link em
negrito.
Sun Nov 19 16:04:45 2006 OpenVPN 2.0.9 Win32-MinGW [SSL] [LZO] built on Oct 1 2006
Sun Nov 19 16:04:45 2006 IMPORTANT: OpenVPN's default port number is now 1194, based on an
official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default
port.
Sun Nov 19 16:04:45 2006 LZO compression initialized
Sun Nov 19 16:04:45 2006 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Sun Nov 19 16:04:46 2006 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0
AF:3/1 ]
Sun Nov 19 16:04:46 2006 Local Options hash (VER=V4): '41690919'
Sun Nov 19 16:04:46 2006 Expected Remote Options hash (VER=V4): '530fdded'
Sun Nov 19 16:04:46 2006 UDPv4 link local: [undef]
Sun Nov 19 16:04:46 2006 UDPv4 link remote: 201.78.227.1:5100
Sun Nov 19 16:04:47 2006 TLS: Initial packet from 201.78.227.1:5100, sid=674d6008 f38bf356
Sun Nov 19 16:04:52 2006 VERIFY OK: depth=1, /C=BR/ST=ES/L=Vitoria/O=labvpn
/OU=/CN=windows/[email protected]
Sun Nov 19 16:04:52 2006 VERIFY OK: depth=0, /C=BR/ST=ES/L=Vitoria/O=labvpn
/OU=/CN=matriz/[email protected]
Sun Nov 19 16:04:59 2006 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Sun Nov 19 16:04:59 2006 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC
authentication
Sun Nov 19 16:04:59 2006 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Sun Nov 19 16:04:59 2006 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC
authentication
Sun Nov 19 16:04:59 2006 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256SHA, 1024 bit RSA
Sun Nov 19 16:04:59 2006 [server] Peer Connection Initiated with 201.78.227.1:5100
Sun Nov 19 16:05:00 2006 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Sun Nov 19 16:05:01 2006 PUSH: Received control message: 'PUSH_REPLY,route 192.168.0.0
255.255.255.0,route 10.8.0.1,ping 10,ping-restart 120,ifconfig 10.8.0.1 10.8.0.8'
Sun Nov 19 16:05:01 2006 OPTIONS IMPORT: timers and/or timeouts modified
Sun Nov 19 16:05:01 2006 OPTIONS IMPORT: --ifconfig/up options modified
Sun Nov 19 16:05:01 2006 OPTIONS IMPORT: route options modified
Sun Nov 19 16:05:01 2006 TAP-WIN32 device [Conexão local 2] opened: \\.\Global\{26D1FB41E7C0-4038-BB3D-3AFD6C1D8FCF}.tap
Sun Nov 19 16:05:01 2006 TAP-Win32 Driver Version 8.4
Sun Nov 19 16:05:01 2006 TAP-Win32 MTU=1500
Sun Nov 19 16:05:01 2006 Notified TAP-Win32 driver to set a DHCP IP/netmask of
10.8.0.7/255.255.255.252 on interface {26D1FB41-E7C0-4038-BB3D-3AFD6C1D8FCF} [DHCP-serv:
10.20.0.2, lease-time: 31536000]
Sun Nov 19 16:05:01 2006 Successful ARP Flush on interface [65540] {26D1FB41-E7C0-4038-BB3D3AFD6C1D8FCF}
Sun Nov 19 16:05:01 2006 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
118
Sun Nov 19 16:05:01 2006 Route: Waiting for TUN/TAP interface to come up...
Sun Nov 19 16:05:03 2006 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Sun Nov 19 16:05:03 2006 Route: Waiting for TUN/TAP interface to come up...
Sun Nov 19 16:05:04 2006 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Sun Nov 19 16:05:04 2006 Route: Waiting for TUN/TAP interface to come up...
Sun Nov 19 16:05:05 2006 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Sun Nov 19 16:05:05 2006 Route: Waiting for TUN/TAP interface to come up...
Sun Nov 19 16:05:06 2006 TEST ROUTES: 2/2 succeeded len=2 ret=1 a=0 u/d=up
Sun Nov 19 16:05:06 2006 route ADD 192.168.0.0 MASK 255.255.255.0 10.8.0.8
Sun Nov 19 16:05:06 2006 Route addition via IPAPI succeeded
Sun Nov 19 16:05:06 2006 route ADD 10.8.0.1 MASK 255.255.255.255 10.8.0.8
Sun Nov 19 16:05:06 2006 Route addition via IPAPI succeeded
Sun Nov 19 16:05:06 2006 Initialization Sequence Completed
Nesse ponto fica concluído o capítulo de implementação da VPN proposta, utilizando
o OpenVPN como ferramenta principal. No capítulo seguinte será feita a conclusão
do trabalho expondo os aspectos mais relevantes de todo o estudo efetuado, bem como
apresentadas sugestões de novas pesquisas sobre features suportadas pelo OpenVPN
que não puderam ser abordadas nesta oportunidade.
119
7 CONSIDERAÇÕES FINAIS E FUTUROS TRABALHOS
As pesquisas feitas ao longo do desenvolvimento deste trabalho permitiram constatar que
VPN é uma tecnologia em franco crescimento. Dados do IDC mostram que as vendas de
soluções proprietárias de VPN baseadas em IP comercializadas pelas principais empresas da
área (Nortel, Check Point, Cisco, Lucent, Axent, Nokia, Citrix, etc) subiram de U$ 5,4 bilhões
em 2001 para U$ 14,7 bilhões em 2006, ficando as projeções para 2009 em U$ 34,6 bilhões.
Pode-se inferir daí que tais crescimentos de demanda aplicam-se também às soluções open
source. As principais razões para esta crescente procura estão relacionadas à segurança,
flexibilidade e economia no tráfego de informações que o estágio atual da tecnologia já
proporciona. (IDC, 2002)
Esta segurança, conforme ficou demonstrado neste trabalho, é obtida principalmente pela
utilização de algoritmos de criptografia e protocolos específicos, que interpõem grandes
obstáculos às tentativas de invasão. Conforme foi visto, nesse campo as VPNs, e notadamente
o OpenVPN, incorporam o estado da arte dessas tecnologias.
Entre as funções de segurança oferecidas pela tecnologia de VPN estão a garantia de
integridade e confidencialidade das informações transmitidas, bem como a autenticação e o
controle de acesso aos gateways, itens que conferem maior confiança às empresas e
organizações interessadas neste tipo de solução.
Este trabalho mostrou também que a combinação do sistema operacional Linux com o
OpenVPN e outras ferramentas open source é bastante eficaz, tornando-se, pela sua qualidade
e ampla gama de recursos,
uma solução atrativa para qualquer organização, mas
especialmente para aquelas que dispõem de recursos financeiros insuficientes para investir em
softwares de VPN proprietários. Também a característica de portabilidade do OpenVPN para
os mundos Unix/Linux, Windows e Mac torna-o uma solução muito flexível: implementações
comuns que misturam servidores Linux e Windows a estações de trabalho Windows, Linux ou
Mac estariam completamente cobertas, mesmo considerando a utilização de notebooks
remotos efetuando acessos do tipo “road warrior”16.
16
Road warrior é um termo que designa um computador com acesso à VPN a partir de local remoto onde não há
um gateway de VPN disponível. Esse computador deve ser capaz por si só de estabelecer a conexão com o
gateway da VPN que deseja acessar.
120
Ficou evidente também, em comparação com as VPNs baseadas em IPSEc, a vantagem do
OpenVPN em relação a redes que implementam NAT e IP dinâmico. Em relação à questão
do NAT, é indiferente ao OpenVPN a localização do gateway de VPN relativamente ao
firewall da rede. Nas soluções baseada em IPSec, torna-se obrigatória a utilização do modo
túnel quando o gateway de VPN situa-se atrás do firewall, o que acarreta alguns sacrifícios de
funcionalidade, como por exemplo a perda de transparência na comunicação entre dois nós
quaisquer que implementem IPSec. Em relação à utilização de links com IP variável (ADSL,
por exemplo), o OpenVPN oferece grande resiliência17 através das opções de configuração -ifconfig-pool, --push e --pull, que permitem, entre outros usos, enviar endereços para o lado
remoto (quando o endereço IP muda, seja no servidor ou no cliente, o fato é prontamente
comunicado à outra ponta, restabelecendo-se imediatamente o link).
Outros pontos importantes dizem respeito à facilidade de configuração e utilização e à
estabilidade do código executável. As VPNs baseadas em IPSec são complexas quando se
deseja um ajuste criterioso dos aspectos de segurança. Conforme Hosner, “VPNs basedas em
IPSec ou são muito caras ou muito difíceis de utilizar de forma segura. IPSec é denso e
contém uma grande quantidade de opções a serem configuradas e administradas. Por
operarem no espaço do kernel, oferecem a oportunidade de falhas catastróficas. OpenVPN
rejeita a complexidade do IPSec utilizando um protocolo exaustivamente testado, o TLS/SSL,
e bibliotecas de criptografia que provêem igual ou melhor funcionalidade, tudo isso num
único e simples pacote. OpenVPN opera no espaço do usuário, o que aumenta a segurança e a
estabilidade”.(HOSNER, 2004)
Do ponto de vista da configuração da VPN, foi visto e testado com sucesso que o OpenVPN é
capaz de exportar (push) rotas, endereços de servidores DNS e outros detalhes de
configuração para os clientes. Como conseqüência, a configuração de clientes móveis (“road
warriors”) fica extremamente facilitada, pois pode ser modificada sem necessidade de acesso
físico aos computadores remotos. Isso vale para notebooks em trânsito, por exemplo, mas
também para gateways clientes (o gateway de VPN de uma filial, por exemplo). Outro item
facilitador é que o código do servidor e dos clientes é o mesmo: a configuração é que
determina a função, conforme pôde ser constatado no capítulo 6 (vide a semelhança entre os
arquivos de configuração da matriz, das filiais e do cliente Windows).
17
Resiliência é um termo da física que expressa a propriedade que alguns materiais têm de acumular energia,
quando exigidos e estressados, e voltar ao seu estado original sem qualquer deformação.
121
De tudo o que foi visto, chega-se à conclusão que as VPNs, em conjunto com outras
ferramentas de segurança, são capazes de garantir integridade, confidencialidade, autenticação
e controle de acesso, permitindo uma comunicação tão segura quanto o estágio atual da
tecnologia possibilita. Entretanto, para usufruir de todos os benefícios hoje disponíveis, a
implementação deve ser cuidadosamente planejada, procurando-se ajustar os recursos
existentes às diversas situações possíveis do cenário prático real. Isso envolve políticas
rígidas de segurança tanto para a parte física quanto lógica da rede, aplicáveis aos diversos
elementos que a compõem: servidores, proxies, firewalls, gateways, gateways de VPN,
estações de trabalho, anti-vírus, anti-spyware, anti-spam, etc.
Além dos aspectos citados acima, a execução deste trabalho permitiu um contato mais estreito
com os conceitos e teorias relacionadas aos temas segurança de redes e VPN, vistos no curso
de pós-graduação. Foi possível visualizar com clareza a utilização dos diversos mecanismos
de segurança e as questões envolvidas em sua escolha, dada a variedade de opções oferecidas:
TCP ou UDP, tamanho de chave versus performance versus nível de segurança, DiffieHelmann ou RSA, modo túnel ou modo bridge, e assim por diante.
Pesquisas de mercado indicam um crescimento significativo das VPNs baseadas em
TLS/SSL, onde o OpenVPN se destaca como a melhor solução open source. Levantamento
da Sinergy Research feito no início de 2007, que compara o crescimento de 2006 sobre 2005,
aponta um avanço de 8% nas vendas de soluções proprietárias de fireawall/VPN e de 41% nas
vendas de soluções de VPN baseadas em TLS/SSL. (SINERGY, 2007)
A conclusão final é que o OpenVPN é uma solução importante, apresentando vantagens
significativas sobre outras soluções em diversos aspectos. A aliança de suas características
técnicas a uma relativa facilidade de implementação torna-a uma solução bastante indicada.
Espera-se que este trabalho contribua para sua maior divulgação e funcione como um guia,
inclusive de instalação, para aqueles que se interessarem em implementá-la na prática.
Tomando os dados do parágrafo anterior como referência, pode-se prever uma demanda
crescente e significativa para soluções baseadas no OpenVPN. Pode-se considerar também
que haverá boas perspectivas profissionais para quem domine bem essa tecnologia, podendo
este trabalho servir de ponto de partida para os interessados. Entretanto, dada a amplitude do
tema, muitas questões com as quais houve contato durante a realização do trabalho ficaram
122
em aberto. A sugestão é que se dê continuidade ao trabalho, complementando-o com alguns
dos seguintes tópicos, entre tantos outros possíveis:
-
Implementar na VPN detalhada neste trabalho a possibilidade de browsing SMB. O
objetivo é permitir que estações Windows ou Linux com Samba possam “enxergar” as
estações localizadas nos outros lados dos túneis VPN criados, utilizando ferramentas de
browsing tais como “ambiente de rede” ou “meus locais de rede” do Windows, por
exemplo, ou comandos de mapeamento do tipo “net use”.
-
Implementar uma VPN com OpenVPN no modo bridge, de forma a possibilitar o tráfego
de pacotes de camada 3 não-IP. Os testes podem ser feitos com Netbeui do Windows ou
IPX/SPX da Novell.
-
Implementar VPNs com OpenVPN e IPSec, estabelecendo comparações relativas a
facilidade de configuração, facilidade de utilização e desempenho. Os testes podem ser
feitos em rede local, se não houver facilidade com links ADSL.
-
Efetuar modificações na VPN detalhada neste trabalho de forma a explorar outros
protocolos de autenticação, compressão e cifragem. Deve-se lembrar que foram utilizados
Os protocolos Diffie-Hellman, Blowfish, SHA-1 e LZO, mas o OpenVPN suporta um
amplo leque de opções, incluindo túneis UDP sem cifragem.
123
REFERÊNCIAS
ALBUQUERQUE, Fernando. TCP/IP Internet: Protocolos e Tecnologias. 3. ed.. Rio de
Janeiro: Axcel Books, 2001. 362 p.
BATISTA, Thaís Vasconcelos. Segurança em Redes de Computadores. Natal, 2002. Aula 1.
Disponível em: <http://www.dimap.ufrn.br/~thais/Seguranca/home.html>. Acesso em: 22 mai
2006.
BROCARDO, Marcelo Luiz. I2AC: Um Protocolo Criptográfico para Análise Segura de
Crédito. 2001. 122 f. Dissertação de Mestrado em Ciência da Computação - Universidade
Federal de Santa Catarina, Florianópolis, 2001.
CARMO, Alexandre Pereira. Guia VPN em Linux – Apostila Gerência de Segurança de
Redes Linux. Vitória: FACULDADE SALESIANA, 2005. 48 p.
CYCLADES. Guia Internet de Conectividade. 6. ed. São Paulo: SENAC, 2000. 167 p.
D’ÁVILA, Márcio. Segurança de Redes. FUMEC, 2001. Disponível em: <http://www.
mhavila.com.br/aulas/seguranca/material/segredes01.pdf>. Acesso em: 17 set 2006.
FREES/WAN, Version 1.99. FreeS/WAN. [S.l.], 2002. Disponível em: <http://www.
freeswan.org/download.html>. Acesso em: 09 jul 2006.
HOSNER, Charlie. OpenVPN and the SSL VPN Revolution. SANS Institute, 2004.
Disponível em <http://www.sans.org/reading_room/whitepapers/vpns/1459.php>. Acesso
em 13 Jan 2007.
IDC. IP VPN Services: U.S. Market Forecast and Analysis, 2001-2006. IDC #25861,
2002. Referência disponível em: <http://www.vpnlabs.com/vpn-categories/MarketResearch/143/ index.html> sob o título IP-VPN Market Forecast. Acesso em 28 Mar 2007.
KOLENISKOV, Oleg; HATCH, Brian. Building Linux Virtual Private Networks (VPNs).
1. ed. EUA: New Riders, 2002. 385 p.
LEWIS, Chris. Cisco TCP/IP Routing Professional Reference. [S.l.]: McGraw Hill,
1997. 402 p.
MARGI, Cíntia Borges;RUGGIERO, Wilson Vicente.Tutorial sobre segurança de
redes – Networld + Interop Brasil. EPUSP, 2000. Disponível em: <http://
www.larc.usp.br/~cbmargi/pdf/Tutorial-comdex-ot.pdf>. Acesso em 14 Out 2006.
MENDES, Hammurabi Chagas.Usando OpenSSL - Uma implementação livre do
protocolo SSL. Universidade de Brasília, 2003. Disponível em: <http://www.cic.unb.br/
docentes/pedro/trabs/hammurabi.htm>. Acesso em: 25 Jul 2006.
MONTEIRO, Edmundo. Segurança em Redes. Coimbra, Portugal, 1999. Capítulo 1.
Disponível em: <http://eden.dei.uc.pt/~sr/Teoricas/>. Acesso em: 08 abr 2006.
124
NAKAMURA, Emilio Tissato; GEUS, Paulo Licio de. Segurança de Redes em Ambientes
Cooperativos. 3. ed. São Paulo: Editora Futura, 2002.
OPENSSL, Página Oficial do projeto. Disponível em : <http://www.openssl.org>. Acesso
em: 25 Jul 2006.
OPENVPN, Página Oficial do projeto. Disponível em : <http://www.openssl.org>.
Acesso em: 10 Jun 2006.
RENDON, Jim. VPN market makes room for IPsec and SSL. 2004. Disponível em:
<http://searchnetworking.techtarget.com/originalContent/0,289142,sid7_gci996711,00.html
>. Acesso em 24 mar 2007.
SARLO, Lino, da Silva. Virtual Private Network. Aprenda a construir redes privadas
virtuais em plataformas Linux e Windows. Rio de Janeiro: Editora Novatec, 2003.
SCHNEIER, Bruce. Applied Cryptography. New York, NY: John Wiley & Sons, 1996.
SCRIMGER, Rob et al. TCP/IP: A Bíblia. 1. ed. Rio de Janeiro: Campus, 2002. 642 p.
SETTING up a VPN Gateway. [S.l.], 2002. Disponível em: <http://www.Linuxjournal.
com/ article.php?sid=4772>. Acesso em: 09 jun 2006.
SINERGY. Decision Report: Soluções de segurança de rede movimentam US$ 5 bi. ed.
23/02/2007, 2007, Disponível em: <http://www.decisionreport.com.br/publique/cgi/
cgilua.exe/sys/start.htm?infoid=910&sid=23>. Acesso em: 28 mar 2007.
SOARES, L. F. G.; LEMOS, G.; COLCHER, S. Redes de computadores: das LANs,
MANs e WANs às Redes ATM. 2. ed. rev. aum. Rio de Janeiro: Campus, 1995. 705 p.
TANENBAUM, Andrew S. Redes de Computadores. 3. ed. Rio de Janeiro: Campus,
1997. 923 p.
125
ANEXO I
O ALGORITMO DIFFIE-HELLMAN
É um algoritmo é bastante interessante por permitir o estabelecimento de uma chave secreta
(criptografia simétrica) num processo de comunicação segura entre dois hosts, sem utilizar
nenhum algoritmo de chave pública para alcançar esse objetivo, a exemplo do que o RSA faz.
O texto abaixo foi transcrito do site da RSA, cujo acesso pode ser feito pela URL
<http://www.rsasecurity .com/rsalabs/node.asp?id=2248>.
[…] What is Diffie-Hellman?
The Diffie-Hellman key agreement protocol (also called exponential key agreement) was
developed by Diffie and Hellman [DH76] in 1976 and published in the ground-breaking
paper "New Directions in Cryptography." The protocol allows two users to exchange a secret
key over an insecure medium without any prior secrets.
The protocol has two system parameters p and g. They are both public and may be used by
all the users in a system. Parameter p is a prime number and parameter g (usually called a
generator) is an integer less than p, with the following property: for every number n between
1 and p-1 inclusive, there is a power k of g such that n = gk mod p.
Suppose Alice and Bob want to agree on a shared secret key using the Diffie-Hellman key
agreement protocol. They proceed as follows: First, Alice generates a random private value a
and Bob generates a random private value b. Both a and b are drawn from the set of integers
. Then they derive their public values using parameters p and g and their private values.
Alice's public value is ga mod p and Bob's public value is gb mod p. They then exchange
their public values. Finally, Alice computes gab = (gb)a mod p, and Bob computes gba = (ga)b
mod p. Since gab = gba = k, Alice and Bob now have a shared secret key k.
The protocol depends on the discrete logarithm problem for its security. It assumes that it is
computationally infeasible to calculate the shared secret key k = gab mod p given the two
public values ga mod p and gb mod p when the prime p is sufficiently large. Maurer [Mau94]
126
has shown that breaking the Diffie-Hellman protocol is equivalent to computing discrete
logarithms under certain assumptions.
The Diffie-Hellman key exchange is vulnerable to a man-in-the-middle attack. In this attack,
an opponent Carol intercepts Alice's public value and sends her own public value to Bob.
When Bob transmits his public value, Carol substitutes it with her own and sends it to Alice.
Carol and Alice thus agree on one shared key and Carol and Bob agree on another shared
key. After this exchange, Carol simply decrypts any messages sent out by Alice or Bob, and
then reads and possibly modifies them before re-encrypting with the appropriate key and
transmitting them to the other party. This vulnerability is present because Diffie-Hellman
key exchange does not authenticate the participants. Possible solutions include the use of
digital signatures and other protocol variants.
The authenticated Diffie-Hellman key agreement protocol, or Station-to-Station (STS)
protocol, was developed by Diffie, van Oorschot, and Wiener in 1992 [DVW92] to defeat
the man-in-the-middle attack on the Diffie-Hellman key agreement protocol. The immunity
is achieved by allowing the two parties to authenticate themselves to each other by the use of
digital signatures (see Question 2.2.2) and public-key certificates (see Question 4.1.3.10).
Roughly speaking, the basic idea is as follows. Prior to execution of the protocol, the two
parties Alice and Bob each obtain a public/private key pair and a certificate for the public
key. During the protocol, Alice computes a signature on certain messages, covering the
public value ga mod p. Bob proceeds in a similar way. Even though Carol is still able to
intercept messages between Alice and Bob, she cannot forge signatures without Alice's
private key and Bob's private key. Hence, the enhanced protocol defeats the man-in-themiddle attack.
In recent years, the original Diffie-Hellman protocol has been understood to be an example
of a much more general cryptographic technique, the common element being the derivation
of a shared secret value (that is, key) from one party's public key and another party's private
key. The parties' key pairs may be generated anew at each run of the protocol, as in the
original Diffie-Hellman protocol. The public keys may be certified, so that the parties can be
authenticated and there may be a combination of these attributes. The draft ANSI X9.42 (see
Question 5.3.1) illustrates some of these combinations, and a recent paper by Blake-Wilson,
Johnson, and Menezes provides some relevant security proofs.
127
APÊNDICE A
COMPARATIVOS ENTRE OPENVPN E VPNS IPSEC
Na Internet existem diversos artigos que ressaltam aspectos diversos das duas tecnologias,
fornecendo visões interessantes sobre determinados pontos de vista, alguns de caráter
meramente prático, outros mais teóricos ou voltados para situações específicas. Os links de
acesso são:
SSL VPNs and OpenVPN: A lot of lies and a shred of truth
September 2005
Charlie Hosner
Acesso pela URL <http://software.newsforge.com/software/05/09/22/164231.shtml?tid=78>
OpenVPN and the SSL VPN Revolution
August 2004
Charlie Hosner
Acesso pela URL <http://www.sans.org/reading_room/whitepapers/vpns/1459.php>
SSL Remote Access VPNs: Is this the end of IPSec?
October 2003
Steven Ferrigni
Acesso pela URL < http://www.sans.org/reading_room/whitepapers/vpns/1285.php>
Linux's answer to MS-PPTP
September 2003
Peter Gutmann
Acesso pela URL <http://www.cs.auckland.ac.nz/~pgut001/pubs/Linux_vpn.txt>
SSL VPNs dissected
December 2005
Joel Snyder
Acesso pela URL <http://www.networkworld.com/reviews/2005/121905-ssl-test-intro.html?review=sslvpn>
Meet OpenVPN
December 2004
Hans-Cees Speel
Acesso pela URL <http://www.Linuxjournal.com/article/7949>
128
APÊNDICE B
CARACTERÍSTICAS DO OPENVPN
Introdução
O OpenVPN é uma solução completa de VPN baseada no protocolo SSL que suporta uma
grande variedade de configurações, incluindo acesso remoto, acessos LAN-to-LAN,
Segurança Wi-Fi e soluções de acesso remoto em escala enterprise, com balanceamento de
carga, failover e controle de acesso granular.
O OpenVPN implementa extensões de segurança de rede nas camadas OSI 2 ou 3 usando o
protocolo padrão da indústria TLS/SSL, que apresenta flexibilidade nos métodos de
autenticação de clientes (suporta certificados digitais, smart cards, etc) e permite políticas de
controle de acesso por usuários ou grupos usando regras de firewall aplicadas à interface
virtual VPN (TUN/TAP).
O OpenVPN não é um proxy web e não opera através de um browser web.
OpenVPN é um projeto open source e é licenciado sob a forma GPL. Também pode ser
licenciado comercialmente para empresas que desejem redistribuí-lo como parte de sua
aplicação proprietária.
Portabilidade
OpenVPN roda nos seguintes sistemas operacionais: Linux, Windows 2000/XP e versões
posteriores, OpenBSD, FreeBSD, NetBSD, Mac OS X
e Solaris. As famílias de
processadores suportados incluem: Intel x86, Alpha, Sparc, AMD64 e ARM.
Recursos
Com OpenVPN é possível:
-
Efetuar tunneling de qualquer sub-rede IP ou adaptador virtual ethernet através de uma
única porta UDP ou TCP.
129
-
Configurar servidores VPN com escalabilidade e balanceamento de carga, usando uma ou
mais máquinas, que serão capazes de manusear milhares de conexões dinâmicas
provenientes de clientes VPN.
-
Utilizar todos os recursos de encriptação, autenticação e certificação da biblioteca
OpenSSL para proteger os dados das redes privadas quando em trânsito pela Internet.
-
Utilizar qualquer algoritmo de cifragem (cipher), tamanho de chave ou digestor HMAC
(para checagem de integridade) suportados pela biblioteca OpenSSL.
-
Escolher entre utilizar encriptação convencional baseada em chave estática ou encriptação
de chave pública baseada em certificados digitais.
-
Usar chaves estáticas pré-compartilhadas ou distribuição dinâmica de chaves através do
protocolo TLS/SSL.
-
Utilizar compressão de link em tempo real e de forma adaptativa e gerenciar a utilização
da largura de banda disponível.
-
Fazer tunneling de redes cujos pontos de conexão com a Internet utilizem IPs dinâmicos
tais como clientes DHCP ou dial-in.
-
Fazer tunneling de redes através de firewalls stateful orientados a conexão sem
necessidade de utilizar regras de firewall explícitas.
-
Fazer tunneling de redes sobre NAT.
-
Criar bridges ethernet seguras usando “virtual tap devices”. Isso permitirá o tráfego pelo
túnel de outros protocolos de camada 3 tais como sobre IPX, Appletalk, Netbeui, etc.
-
Controlar e gerenciar o OpenVPN usando uma interface gráfica em ambiente Windows ou
Mac OS X.
Diferenciais em relação a outros softwares de VPN
Os principais pontos fortes do OpenVPN incluem portabilidade para diversas plataformas
conhecidas do universo computacional (PC, Mac, Sun, etc), grande estabilidade,
escalabilidade para centenas ou milhares de clientes, instalação relativamente fácil e suporte
para IP dinâmico e NAT.
130
-
O OpenVPN fornece um framework para VPN projetado para permitir customizações
diversas, tais como capacidade para distribuir pacotes de instalação pré-configurados para
clientes ou suporte a métodos alternativos de autenticação através de plugins (por
exemplo, o módulo “openvpn-auth-pam” permite que o OpenVPN autentique clientes
usando qualquer método de autenticação PAM), que podem ser usados exclusivamente ou
combinados com certificados X509.
-
O OpenVPN oferece uma interface de gerenciamento que pode ser utilizada para controlar
remotamente ou gerenciar de forma centralizada o daemon OpenVPN. A interface de
gerenciamento pode também ser utilizada para desenvolver um front end gráfico ou web
para o OpenVPN.
-
No ambiente Windows, o OpenVPN pode ler certificados ou chaves privadas a partir de
smart cards que suportem a API Crypto do Windows.
-
O OpenVPN utiliza um modelo de segurança que protege as redes contra ataques passivos
e ativos. Esse modelo é baseado do uso de SSL/TLS para autenticação de sessão.
OpenVPN suporta X509 PKI (public key infrastructure) para autenticação de sessão, o
protocolo TLS para distribuição de chaves, uma interface cipher-independent para
encriptação dos dados enviados pelo túnel e o algoritmo HMAC SHA-1 para autenticação
dos dados enviados pelo túnel.
-
O OpenVPN foi construído para ser portável. Atualmente, OpenVPN roda em Linux,
Solaris, OpenBSD, FreeBSD, NetBSD, Mac OS X e Windows 2000/XP. Em função do
OpenVPN ser escrito como um daemon que roda no espaço do usuário (user-space
daemon) e não como um módulo do kernel ou uma complexa modificação da camada IP,
os esforços requeridos para portá-lo ficam dramaticamente menores.
-
O OpenVPN é fácil de usar. Em geral, um túnel pode ser criado e configurado com um
simples comando (e sem nenhum arquivo de configuração ser necessário). A
documentação do OpenVPN contém exemplos ilustrativos de sua utilização.
-
O OpenVPN é projetado e testado com rigor para operar de forma robusta em redes não
confiáveis. O principal objetivo do design do OpenVPN é que ele deve ser o responsável,
tanto na operação normal quanto em situações de recuperação de erros, pela continuidade
e restabelecimento do túnel. Isso significa que, se a camada IP cai por 5 minutos, quando
ela voltar, o tráfego no túnel será imediatamente retomado, sem intervenção humana.
131
-
O OpenVPN tem um projeto fortemente modular. Toda a criptografia é manuseada pela
biblioteca OpenSSL e todas as funcionalidades de IP tunneling são providas pelo driver de
rede virtual TUN/TAP. Os benefícios dessa modularidade podem ser vistos, por exemplo,
na forma como o OpenVPN pode ser dinamicamente linkado com novas versões da
biblioteca SSL e imediatamente ter acesso a qualquer nova funcionalidade trazida pelo
novo release. Por exemplo, quando o OpenVPN foi construído com a versão 0.9.7 da
biblioteca OpenSSL, ele automaticamente ganhou acesso a novos encriptadores (ciphers)
tais como AES-256 (Advanced Encryption Standard com chave de 256 bits). De forma
semelhante, o design para rodar no espaço do usuário permite portabilidade direta para
qualquer sistema operacional para o qual exista o driver de rede virtual TUN/TAP.
-
O OpenVPN é rápido. Rodando em Red Hat 7.2 num PC Pentium II 266 MHz, usando
autenticação de sessão baseada em TLS, o cifrador Blowfish, autenticação de dados no
tunnel SHA-1 e fazendo tunneling de uma sessão FTP com arquivos grandes e précomprimidos, OpenVPN alcançou uma taxa de envio/recebimento de 1,455 megabytes por
segundo de tempo de CPU.
-
Ainda que o OpenVPN possua um vasto número de opções para controlar os parâmetros
de segurança do túnel VPN, ele provê também opções para proteger a segurança do
servidor propriamente dito, o que inclui --chroot para restringir a parte do filesystem que
o daemon OpenVPN tem acesso, --user e --group para diminuir os privilégios do daemon
após a inicialização e --mlock para garantir que seqüências relativas às chaves e aos dados
que trafegam no túnel nunca sejam paginados para o disco rígido, de onde poderiam ser
recuperados posteriormente.
Uso do protocolo TLS para autenticação e negociação de chaves
O TLS é a última evolução da família de protocolos SSL e foi desenvolvida originalmente
pela Netscape para o seu primeiro web browser seguro. O TLS e seus predecessores SSL
têm se espalhado pela web ao longo dos anos e têm sido extensivamente analisados à procura
de falhas. Isso tem permitido sua evolução e fortalecimento, de forma que nos dias de hoje
TLS/SSL é considerado um dos mais robustos e maduros protocolos disponíveis.
132
Compatibilidade com IPSec ou PPTP
Existem três famílias de implementações de VPN IP usadas extensivamente nos dias de hoje:
SSL, IPSec e PPTP. OpenVPN é uma VPN SSL e como tal não é compatível com IPSec e
PPTP.
O protocolo IPSec foi projetado para ser implementado como uma modificação da pilha IP no
espaço do kernel, e, dessa forma, cada sistema operacional requer sua própria implementação
do IPSec.
Em contraste, a implementação do OpenVPN no espaço do usuário permite portabilidade
entre sistemas operacionais e arquiteturas de processador.
Existem vantagens e desvantagens nas duas abordagens. A principal vantagem da abordagem
do OpenVPN é a portabilidade, facilidade de configuração e compatibilidade com NAT e
endereçamento dinâmico. A curva de aprendizado para instalar e usar o OpenVPN é parecida
com a de outros daemons relacionados a segurança, tais como SSH.
Historicamente, uma das vantagens do IPSec tem sido o suporte multi-vendor, o que começa
ocorrer também com o OpenVPN, com o surgimento de dispositivos de hardware dedicados
que o utilizam internamente.
A vantagem do protocolo PPTP é ter um cliente pré-instalado na plataforma Windows.
Entretanto, análises feitas por especialistas em criptografia têm revelado muitas
vulnerabilidades, o que não recomenda sua utilização em situações onde a segurança seja um
fator crítico.
Padrões seguidos pelo OpenVPN
Como um daemon que roda no espaço do usuário, OpenVPN é compatível com TLS/SSL,
certificados RSA e X509, PKI, NAT, DHCP e TUN/TAP virtual devices.
OpenVPN não é compatível com IPSec,
IKE (Internet Key Exchange, que negocia
associações de segurança entre duas entidades e realiza a troca de chaves), PPTP e L2TP.
133
Uso de web browser como cliente OpenVPN
Não é possível. Ainda que o OpenVPN use o protocolo TLS/SSL para segurança, ele não é
uma aplicação web proxy. Ele é uma solução de tunneling de camada 2 ou 3 e requer que o
OpenVPN esteja instalado nos lados servidor e cliente.
Construção do OpenVPN
OpenVPN pode ser facilmente construído a partir dos fontes para as variantes Linux e BSD.
Construir OpenVPN para Windows é mais complexo, entretanto um instalador pré-construído
está disponível no site de download do OpenVPN.
OpenVPN pode ser construído:
-
Com as bibliotecas OpenSSL Crypto e SSL
(versão 0.9.6 ou superior requerida),
oferecendo autenticação baseada em certificados, encriptação de chave pública e
distribuição dinâmica de chaves baseada em TLS.
-
Só com a biblioteca OpenSSL Crypto, oferecendo encriptação e autenticação
convencional baseadas em chaves estáticas.
-
Sozinho, com suporte a túneis UDP não criptografados.
OpenVPN pode também ser “linkado” com a biblioteca de compressão em tempo real LZO.
Suporta também compressão adaptativa (adaptive compression), significando que irá habilitar
a compressão somente quando os dados que trafegam no túnel forem comprimíveis.
OpenVPN roda inteiramente no espaço do usuário e não requer nenhum componente especial
do kernel além do driver de rede virtual TUN/TAP, disponíveis para Linux, Windows e
variantes do BSD.
Download

FACULDADE SALESIANA DE VITÓRIA PÓS