• Nenhum resultado encontrado

UNIGUAÇU UNIDADE DE ENSINO SUPERIOR VALE DO IGUAÇU FACULDADES INTEGRADAS DO VALE DO IGUAÇU SEGURANÇA DA INFORMAÇÃO PROF. CLEVERSON BÚSSOLO KLETTENBERG

N/A
N/A
Protected

Academic year: 2021

Share "UNIGUAÇU UNIDADE DE ENSINO SUPERIOR VALE DO IGUAÇU FACULDADES INTEGRADAS DO VALE DO IGUAÇU SEGURANÇA DA INFORMAÇÃO PROF. CLEVERSON BÚSSOLO KLETTENBERG"

Copied!
29
0
0

Texto

(1)

UNIGUAÇU – UNIDADE DE ENSINO SUPERIOR VALE DO IGUAÇU FACULDADES INTEGRADAS DO VALE DO IGUAÇU

SEGURANÇA DA INFORMAÇÃO

PROF. CLEVERSON BÚSSOLO KLETTENBERG

União da Vitória 2017

(2)

SUMÁRIO

1. INTRODUÇÃO...3

1.1. Características Básicas da Segurança da Informação...3

1.2. Criptografia...4

1.2.1. Criptografia de chave única (simétrica)...4

1.2.2. Criptografia de chave privada (assimétrica)...4

1.3. Certificado Digital...5

1.4. Assinatura Digital...6

2. POLÍTICAS DE DEFINIÇÃO DE SENHA...7

2.1. Criptografia de Senha...7

3. SEGURANÇA EM AMBIENTE UNIX...9

3.1. Sistema de Segurança de Arquivos e Pastas...9

3.1.1 Alterando permissões e usuários...9

3.2. Open SSH...10

3.2.1. Conexão Via SSH...10

3.2.2. Conexão SSH sem senha...10

3.2.3. Rsync Via SSH...11

4. ROTINAS DE BACKUP...12

4.1. Backup Completo...12

4.2. Backups Incrementais...12

4.3. Implementando Rotinas de Backup...12

4.3.1. Definindo a agenda de backup...13

4.3.2. Script de backup...13

5. WEB-SERVER COM CERTIFICADO DE SEGURANÇA...15

5.1. Instalação...15

5.2. Configurações Básicas...15

5.3. Configurando Aliases...15

5.4. Apache com SSL...16

5.4.1. Implementando um modelo...16

6. FIREWALLCOM DHCP+SQUID...19

6.1. Criando o Ambiente...19

6.2. DHCP Server...19

6.3. Servidor Proxy com SQUID...20

6.3.1. Instalação e Configuração no Cliente...21

6.3.1. Instalação e Configuração no Servidor...22

6.3.2. Configuração do Cache...23

7. VULNERABILIDADE DE APLICAÇÕES WEB...24

7.1. Cross Site Scripting...24

7.2. Injeção de SQL...24

7.3. Execução Maliciosa de Arquivo...25

8. ALTA DISPONIBILIDADE DE SERVIÇOs...26

9. REPLICAÇÃO EM BANCO DE DADOS...29

(3)

A Segurança Informação se torna fundamental ao profissional de TI por proteger um conjunto de informações, no sentido de preservar o valor que possuem para um indivíduo ou uma organização. A segurança não é restrita somente a sistemas computacionais, informações eletrônicas ou sistemas de armazenamento. O conceito se aplica a todos os aspectos de proteção de informação e dados.

O Plano de Segurança da Informação - PSI varia em função do estágio de maturidade, grau de informatização, área de atuação, cultura organizacional, necessidade requerida, entre outros.

Desta forma, cabe ao profissional de TI gerenciar o “peso” deste investimento mantendo o equilíbrio entre o custo, desempenho e segurança dos dados.

1.1. Características Básicas da Segurança da Informação

Confidencialidade: limita acesso a informação àquelas autorizadas pelo proprietário da informação. Exemplos de quebra da confidencialidade: quebra de senha ou de criptografia;

exposição de uma informação sem o devido acesso.

Integridade: garante que a informação manipulada mantenha todas as características originais estabelecidas pelo proprietário da informação, incluindo controle de mudanças e garantia do seu ciclo de vida. Exemplos de quebra de integridade: alteração de uma informação sem permissão devida; uma rotina executada por um usuário não autorizado pelo proprietário.

Disponibilidade: garante que a informação é proveniente da fonte anunciada e que não houve mutações ao longo de um processo. Exemplos de quebra de disponibilidade: falha de comunicação com o sistema; impossibilidade de retornar uma informação excluída por engano.

CUSTO DESEMPENHO SEGURANÇA

(4)

Autenticidade: garante que os dados fornecidos são verdadeiros ou que o usuário é o legítimo. Exemplos de quebra de Autenticidade: um relatório com informações incorretas.

Não Repúdio: garante que uma pessoa não consiga negar um ato ou documento de sua autoria necessária para a validade jurídica de documentos e transações digitais. Exemplo: Um software desenvolvido pelos próprios funcionários da empresa que impedem acesso a outros funcionários para dar continuidade ao serviço.

1.2. Criptografia

Criptografia é a ciência ou arte de escrever mensagens em forma cifrada ou em código.

Basicamente, altera os caracteres originais de uma mensagem por outros caracteres, ocultando a mensagem. Suas finalidades são:

• Autenticar a identidade de usuários;

• Autenticar e proteger o sigilo de comunicações pessoais e de transações comerciais e bancárias

• Proteger a integridade de transferências eletrônicas de fundos.

1.2.1. Criptografia de chave única (simétrica)

Utiliza a mesma chave para criptografar e descriptografar mensagens. Apesar de ser eficiente em relação ao tempo de processamento tem como principal desvantagem a necessidade de um meio seguro para que a chave seja compartilhada entre as partes.

1.2.2. Criptografia de chave privada (assimétrica)

Utiliza duas chaves distintas, uma para codificar e outra para decodificar mensagens.

Chave pública: todos conhecem ou tem acesso a esta chave. Até mesmo o invasor, pois é utilizada apenas para criptografar.

Chave privada: apenas o dono conhece e não pode divulgar. Ela é utilizada para descriptografar as mensagens gerada pela chave pública.

(5)

Exemplificando passo a passo uma troca de mensagens entre Wagner e Letícia.

1. Wagner deseja enviar uma mensagem sigilosa, ou seja, secreta, para Letícia. Sabendo que a Internet não oferece um ambiente seguro, contrataram um serviço de segurança e ganharam duas chaves para trocar informações pela Internet.

2. Wagner pede a chave pública da Letícia, que pode ser enviada de qualquer maneira, pois mesmo que seja lida por outra pessoa, não teriam problemas (a chave pública permite apenas criptografar mensagens).

3. Após receber a chave púbica da Letícia, Wagner escreve, criptografa utilizando a chave pública da Letícia e envia a mensagem pela Internet;

4. Letícia recebe a mensagem criptografada e descriptografa a mensagem utilizando sua chave privada, que é apenas de seu conhecimento;

5. Agora, se Letícia quiser responder a mensagem, deverá realizar o mesmo procedimento, só que utilizando a chave pública do Wagner.

1.3. Certificado Digital

O certificado digital é um arquivo eletrônico que contém dados de uma pessoa ou instituição, utilizados para comprovar sua identidade.

Exemplos semelhantes a um certificado digital são o CNPJ, RG, CPF e carteira de habilitação de uma pessoa. Cada um deles contém um conjunto de informações que identificam a instituição ou pessoa e a autoridade (para estes exemplos, órgãos públicos) que garante sua validade.

Algumas das principais informações encontradas em um certificado digital são:

• Para quem foi emitido (nome, número de identificação, estado, etc);

• Por quem foi emitido (Autoridade Certificadora (AC));

• O número de série e o período de validade do certificado;

• A assinatura digital da Autoridade Certificadora.

(6)

O objetivo da assinatura digital no certificado é indicar que outra entidade (a Autoridade Certificadora) garanta a veracidade das informações nele contidas. Destaca-se o princípio da Autenticidade e Integridade.

A partir de um certificado digital podemos afirmar que o site é legítimo e que seu conteúdo não foi alterado.

1.4. Assinatura Digital

A assinatura digital consiste na criação de um código, através da utilização de uma chave privada, de modo que a pessoa ou entidade que receber uma mensagem contendo este código possa verificar se o remetente é mesmo quem diz ser e identificar qualquer mensagem que possa ter sido modificada. Destaca-se o princípio da Autenticidade e Integridade.

Desta forma, é utilizado o método de criptografia de chaves pública e privada, mas em um processo inverso. Essa é simples, vamos inverter as chaves no processo usando o mesmo exemplo e perceba como é enviada uma mensagem assinada.

1. Wagner deseja enviar uma mensagem assinada, ou seja, autêntica (garantir que a mensagem é enviada por ele e que não sofrerá alterações durante o envio), para Letícia. Sabendo que a Internet não oferece um ambiente seguro e muitos podem se passar por ele, Wagner contratou um serviço de segurança e ganhou duas chaves para trocar informações pela Internet.

2. Wagner escreve, criptografa utilizando a sua chave privada, onde será gerado um código (a assinatura digital), e envia a mensagem pela Internet;

3. Letícia recebe a mensagem criptografada e descriptografa a mensagem utilizando a chave pública do Wagner;

4. Neste momento será gerado um segundo código (assinatura digital), que será comparado com o primeiro;

5. Se os dois códigos (assinaturas digitais) forem idênticos, Letícia saberá que o remetente foi realmente o Wagner e que o conteúdo da mensagem não foi alterado.

(7)

2. POLÍTICAS DE DEFINIÇÃO DE SENHA

Este assunto faz parte da rotina do profissional de TI e cabe a ele gerenciar estas políticas e orientar os usuários. A senha é um dos métodos mais utilizados na Internet ou sistemas computacionais para autenticar um usuário.

2.1. Criptografia de Senha

Bancos de dados normalmente são acessados por diversos profissionais e sistemas dentro da empresa, alguns com acesso somente leitura. Por isto, armazenar sem criptografia pode ser algo arriscado.

A senha criptografada pode ser unidirecional, ou seja, sem descriptografia, exigindo a redefinição da senha em caso de perda.

Senhas fáceis podem ser facilmente violadas utilizando técnicas de força bruta e bancos de palavras conhecidas. A elaboração de uma boa senha pode minimizar ou em alguns casos anular qualquer tentativa de obtenção desta senha. Elaborar uma boa e longa (mínimo de 8 caracteres) senha, mesclando letras (maiúsculas e minúsculas), números e caracteres especiais, pode retardar estas técnicas fora de um tempo hábil, podendo levar meses ou anos.

Exemplo de senhas inseguras e seguras:

Inseguras: 80210, luly123, forever, 1a2m3o4r, 123eja, aq1sw2, etc.

Seguras: ?F2eR7##u5a, #Pu63j?#fP!, etc.

Veja como é fácil quebrar uma senha insegura: Procure na internet os valores

“eff6d455fe3ec6b452972b580fb797ec md5” e diga qual é a senha.

Para criptografar uma senha em md5, utilize o programa:

http://www.edubox.com.br/download/seguranca/md5.php?senha=suasenha

Uma criptografia bastante utilizada para isto é a md5 embora já esteja sendo considerada fraca. Veja exemplos de inserção de logins:

INSERT INTO usuario (login,senha) VALUES (‘maria’,md5(‘Zulu*84’));

//ou

INSERT INTO usuario (login,senha) VALUES (‘maria’,md5(‘maria’+‘Zulu*84’));

(8)

A validação da senha ficaria da seguinte maneira:

SELECT * FROM usuario WHERE login=’maria’ and senha=md5(‘Zulu*84’);

//ou

SELECT * FROM usuario WHERE login=’maria’ and senha=md5(‘maria’+‘Zulu*84’);

Se preferir usar uma criptografia mais forte que md5, veja as opões para o PHP:

<?php

     echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";

     echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n";

     echo 'MD5:      ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";

     echo 'Blowfish:      ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";

     echo 'SHA­256:         ' . crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . "\n";

     echo 'SHA­512:         ' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . "\n";

?>

(9)

3. SEGURANÇA EM AMBIENTE UNIX

3.1. Sistema de Segurança de Arquivos e Pastas

Cada arquivo ou pasta possui três conjuntos de permissões: o dono; o grupo; todos. Cada um deste 3 conjuntos possuem 3 níveis de acesso: r (read); w (write) e x (execução). Por isto, 9 itens de permissão, mais 1 que fica no início indicando se é uma pasta, link ou arquivo. Como exemplo, o comando ls -ls exibe o seguinte resultado:

3.1.1 Alterando permissões e usuários

O comando chmod altera permissões de arquivos e pastas.

g Significa grupo u Significa usuário o Significa outros + Adicionar permissões - Remover permissões

Desta forma, o uso do chmod fica:

#chmod g+r file

//adiciona permissão de leitura ao grupo

#chmod go+rw folder

//adicionar permissão de leitura e escrita para o grupo e outros

#chmod u+x folder ­R 

//adiciona execussão para o usuários a pasta folder e a tudo dentro dela

#chmod 755 folder

//pode ser usado números de 0 a 7 (octal) indicando o nível de permissão. Os três números 755 são dono,grupo e outros

(10)

Também podemos alterar o dono e o grupo dos arquivos e pastas com o comando chown.

Exemplos:

#chown fulano:aluno pasta ­R

//altera para o usuário fulano do grupo aluno recursivo

3.2. Open SSH

O OpenSSH (Open Secure Shell) é um conjunto de utilitários de rede criado pela OpenBSD que provê conexão secura entre computadores Linux usando criptografia.

3.2.1. Conexão Via SSH

Pré-requisitos: o openssh-server deve estar instalado na máquina que receberá a conexão;

para receber a conexão como root, deve ser habilitado o parâmetro “PermitRootLogin yes” do arquivo normalmente em /etc/ssh/sshd_config e reiniciar o serviço com service sshd restart.

#ssh laboratorio@192.168.0.111

//conecta usando o usuario remoto laboratorio ao ip

#ssh ­p 30 root@www.edubox.com.br //conecta usando a porta 30

#ssh teste@10.0.0.1  'cd ~/Desktop ; ./script.sh' //conecta e executa um comando e um script.

Também é possível conectar uma pasta remota na interface gráfica usando um navegador de arquivos. Basta digitar:

sftp://usuario@host

3.2.2. Conexão SSH sem senha

A conexão sem senha é ideal para executar rotinas automáticas de backup. O processo consiste em criar uma chave pública criptografada na máquina local e enviá-la para o servidor:

#ssh­keygen ­t rsa  

//gera a chave pública. Só pressione <enter>

#ssh­copy­id ­i ~/.ssh/id_rsa.pub usuario@ip 

//copia a chave pública para o computador remoto. Digite a senha da conexão ssh para enviar a chave criada para o servidores, em seguida, teste a conexão com ssh usuario@ip

(11)

3.2.3. Rsync Via SSH

Rsync, como o nome sugere, é um programa que sincroniza remotamente os dados entre duas máquinas. Por ser baseado no antigo rcp (remote copy), o software herdou as propriedades de criptografia do protocolo SSH, o que torna sua transmissão de dados mais segura que o FTP.

Além das propriedades de segurança, o rsync utiliza o protocolo remote-update, o que aumenta assustadoramente sua velocidade e diminui a quantidade de dados transferidos, pois são trocados entre os servidores somente as diferenças entre dois grupos de arquivos.

#rsync ­av /home/usuario1/data /home/usuario2/

//copia localmente arquivos (­a) no modo verbose (v) a pasta data do usuario1 para o usuario2

#rsync ­av /var/www/sistema root@edubox.com.br:/var/www/

//copia a pasta /var/www/sistema para /var/www do servidor de host edubox.com.br usando o usuário root

Dica: é possível definir um comando rsync no agendador de tarefas do linux (crontab) para ser executado em intervalos curtos e desta forma ter um backup automático.

(12)

4. ROTINAS DE BACKUP

O Backup ajuda a proteger os dados de perdas acidentais se ocorrerem falhas de hardware ou de mídia de armazenamento no sistema. Se os dados originais do disco rígido forem apagados ou substituídos acidentalmente ou se ficarem inacessíveis devido a um defeito do disco rígido, você poderá restaurar facilmente os dados usando a cópia arquivada.

4.1. Backup Completo

O backup completo é simplesmente fazer a cópia de todos os arquivos para o diretório de destino (ou para os dispositivos de backup correspondentes), independente de versões anteriores ou de alterações nos arquivos desde o último backup. Este tipo de backup é o tradicional e a primeira ideia que vêm à mente das pessoas quando pensam em backup: guardar TODAS as informações.

Vantagens: fácil de implementar; fácil localizar arquivos a restaurar;

Desvantagens: lentidão; tráfego na rede aumentado;

4.2. Backups Incrementais

O primeiro backup deve ser completo e os sequentes são copiados apenas os arquivos que a origem é diferente do último backup. Os backups incrementais pode ser usados em conjunto com um backup completo frequente (ex.: um backup completo semanal, com incrementais diários).

Vantagens: mais rápidos; menor tráfego; economia de espaço de armazenamento

Desvantagens: exige um pouco mais de conhecimento para implementar pois é necessário e uso de ferramentas de backup ou compactadores.

4.3. Implementando Rotinas de Backup

Nesta apostila, vamos usar como base Sistemas Operacionais Unix.

(13)

4.3.1. Definindo a agenda de backup

A periodicidade em que as cópias são realizadas dependem de fatores como: tipo de backup; espaço disponível e número de cópias mantidas.

No Linux, existe uma ferramenta chamada CRON onde são agendadas tarefas do sistema.

O arquivo de configuração fica em /etc/crontab. A agenda é feita da seguinte maneira:

Exemplo:

0   1   *   *   *       root    /backup/backup.sh //executa as 1:00 

4.3.2. Script de backup

1|#!/bin/bash

2|mes=`date +%Y%m`

3|dia=`date +%Y%m%d`

4|/opt/pgsql/bin/pg_dump ­i ­h localhost ­U postgres ­F t ­f "/repositorio/pgbanco_${dia}.backup" "pgbanco"

5|mysqldump ­­user root ­psenha mybanco >"/repositorio/mybanco_${dia}.sql"

6|tar ­cf "/repositorio/www_${mes}.rar" "/var/www"

7|rsync ­av /home/usuario/ root@ip:/repositorio/usuario_${mes}

Linha 1: interpretador do código

Linha 2: define a variável contendo ano e mês, exemplo: 201705

Linha 3: define a variável contendo o ano, mês e dia, exemplo: 20170501

Linha 4: faz backup completo e diário de um banco de dados postgresql usando compactação tar (-F t).

(14)

Linha 5: faz um backup completo e diário de um banco mysql sem compactação Linha 6: faz um backup completo; compactado em tar e mensal da pasta /var/www

Linha 7: faz um backup completo a cada mês e incremental a cada execução para uma máquina remota. Necessita de conexão sem senha.

(15)

5. WEB-SERVER COM CERTIFICADO DE SEGURANÇA

Um servidor web é um software que permite aos usuários, o acesso às páginas da web, ou seja, aos arquivos no formato HTML a partir de um navegador (também chamado de browser), instalado em um computador remoto.

Um servidor web é, então, um “simples” software, capaz de interpretar as consultas (ou pedidos) HTTP que chegam na porta associada ao protocolo HTTP (por padrão, porta 80), e de fornecer uma resposta com este mesmo protocolo.

Os principais servidores web são, entre outros: Apache; Microsoft IIS (Internet Information Server); NginX (Engine X)

5.1. Instalação

#apt­get install apache2

//instala o apache e caso deseje o php:

#apt­get install php7.0 //instala o PHP

#apt­get install libapache2­mod­php*

//configura o módulo de ligação entre o apache e o php

#tail ­f /var/log/apache2/error.log

//ver erros do apache. Também existe access.log

5.2. Configurações Básicas

O arquivo principal de configuração do apache fica em /etc/apache2/apache2.conf. Não se assuste com o tamanho do arquivo. A maioria esta comentada e indicam o que podem ser feito.

httpd.conf (parte 1) - parâmetros ServerName, Listen e VirtualHost com exemplos

ServerName <nome do servidor>: Esta diretiva fala como o servidor conhece a si mesmo.

ServerName edubox ServerName edubox:80 ServerName edubox.com.br

Listen <porta>: Qual porta de resposta do servidor. O padrão é 80.

5.3. Configurando Aliases

Para configurar outras pastas a serem publicadas pelo apache, crie um novo arquivo em

(16)

/etc/apache2/sites-enabled. O arquivo deve ter o conteúdo conforme exemplo:

Alias /estoque /var/www/sce

<Directory /var/www/sce>

    Options FollowSymLinks Indexes     AllowOverride all

    order allow,deny     allow from all

</Directory>

Para fazer o teste, reinicie o apache e no browser coloque o host/alias, ou seja, http://192.168.0.111/estoque.

Para o apache não exibir o conteúdo da pasta como um ls, remova a opção Indexes.

5.4. Apache com SSL

A aplicação de Apache com SSL é conhecida como um servidor web capaz de fornecer por padrão criptografia baseada no protocolo SSL, utilizando o OpenSSL e SSLeay.

O dialogo entre os navegadores e os servidores acontece da seguinte forma: os navegadores mandam mensagens para os servidores e as mesmas são criptografadas de forma que somente os destinatários decifrem o seu conteúdo, com isso se agrega mais segurança entre a comunicação cliente servidor.

Para implementarmos um modelo é importante algumas definições:

SSL: é o protocolo que suporta uma variedade de diferentes algoritmos criptográficos, ou ciphers, para uso em operações de autenticação e do cliente, transmissão de certificados, e estabelecimento de conexões.

Apache2: é um servidor web que quando combinado com o protocolo SSL se torna mais confiável pela questão da segurança de criptografia utilizada pelo protocolo.

HTTPS: É um protocolo ou conjunto de regras e códigos com uma camada de segurança que torna a navegação a internet mais segura, diferente do HTTP, que não dispõe do mesmo nível de segurança a navegação.

5.4.1. Implementando um modelo

Com o apache instalado, siga os seguintes passos:

(17)

Passo 1: Instale o OpenSSL. Esta ferramenta é uma implementação de código aberto dos protocolos SSL e TLS e está disponível para outros sistemas operacionais.

#apt­get install openssl

Passo 2: Habilitar o módulo SSL do apache. Para isto o próprio apache disponibiliza um comando, basta informar o módulo:

#a2enmod ssl

Passo 3: Obter o certificado da fonte certificadora (conforme item 1.3 desta apostila) ou criar seu próprio certificado seguindo os passos:

Passo 3.1: Para gerar o certificado (CSR) será necessário a criação de uma chave, essa chave deverá conter no mínimo 8 caracteres, a criptografia usada nessa chave é a DES3, essa chave ficará no arquivo server.key. De dentro do diretório onde ela ficará armazenada, o "/etc/ssl/private", o usuário deve digitar o comando abaixo para criação da chave:

# cd /etc/ssl/private

# openssl genrsa ­des3 ­out server.key 1024  //digite uma chave para criptografia

Passo 3.2: Com a chave criada é importante acrescentar informações, após digitar o comando abaixo ele pedirá a chave e para preencher alguns dados, são os dados que serão visualizados referentes ao criador do certificado:

# openssl req ­new ­key server.key ­out server.csr

Passo 3.3: Toda vez que o usuário reiniciar o Apache2 ele pedirá a chave, isso faz com que caso haja um restart por algum motivo, o serviço não suba pois dependerá da presença humana para a digitação. Os comandos abaixo fazem com que o Apache2 não peça a chave em caso de restart do serviço, ou seja, ele faz a autenticação automaticamente.

# cd /etc/ssl/private

# openssl rsa ­in server.key ­out server.key.insecure

# mv server.key server.bak

# mv server.key.insecure server.key

Passo 3.4. Criar e instalar o certificado com o comando abaixo:

# openssl x509 ­req ­days 365 ­in server.csr ­signkey server.key ­out server.crt 

# cp server.crt /etc/ssl/certs

# cp server.key /etc/ssl/private

Passo 4: Configurar o apache para receber conexões na porta segura. O local do arquivo de configuração dependa da distribuição do Linux usada. No Ubuntu normalmente está em /etc/apache2/sites-enabled/000-default. Localize a configuração <VirtualHost

*:80>...</VirtualHost>. Duplique-a e altere a duplicada para a porta 443 e adicione as configurações

(18)

SSL. Exemplo:

<VirtualHost *:443>

        ServerAdmin webmaster@localhost         DocumentRoot /var/www

        SSLEngine on

        SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire         SSLCertificateFile /etc/ssl/certs/server.crt

        SSLCertificateKeyFile /etc/ssl/private/server.key         ErrorLog ${APACHE_LOG_DIR}/error.log

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Reinicie o serviço do apache (service apache2 restart) e teste com o link https://localhost.

Será pedido para aceitar o certificado, pois o certificado criado no tutorial não será reconhecido automaticamente pelo navegador como seguro. Para haver esse reconhecimento o criador da chave deve contratar uma autoridade certificadora para gerar o certificado a partir da chave gerada, essa autoridade de certificação é uma empresa autorizada e emitir, renovar e cancelar certificados digitais após verificar a identidade e a legitimidade da parte solicitante através de uma autoridade de registro. A principal autoridade de certificação é a VeriSign

Note que ao reiniciar o apache a key é requerida. Se desejar remover este pedido da chave, faça o seguinte:

#cd /etc/ssl/private

#openssl rsa ­in server.key ­out server.key.insecure

#mv server.key server.bak

#mv server.key.insecure server.key

(19)

6. FIREWALLCOM DHCP+SQUID

6.1. Criando o Ambiente

O servidor deve ter duas placas de rede para wan e lan. Para descobrir o nome das placas de rede e configurar, use os comandos:

#cat /var/log/syslog |grep “renamed from eth”

//exibe o log da inicialização das placas de rede e para qual nome foi renomeado

#vim /etc/network/interfaces

//abre a configuração das placas de rede. Este arquivo deve ficar parecido com:

==============================================================

#aqui os nomes das placas de rede são eth0 e eth1. Mas podem ser outros nomes auto eth0    #configura eth0 ao iniciar

iface eth0 inet dhcp #ip automático

auto eth1 #configura eth1 ao iniciar iface eth1 inet static #ip estático

     address 172.16.0.1      netmask 255.255.255.0

==============================================================

#ifup eth1

//levanta eth1 para não precisar reiniciar

#ifup eth0

//levanta placa eth0

#ifconfig

//ver se deu certo

6.2. DHCP Server

DHCP é um protocolo de Nível de Aplicação da arquitetura TCP/IP e usa UDP a Nível de Transporte. Permite que o hospedeiro (cliente) obtenha um endereço IP temporário quando se

(20)

conecta a uma rede. Além do endereço IP ele fornece o Roteador, o servidor DNS e a máscara de sub-rede.

A instalação é simples:

#apt­get install isc­dhcp­server

O DHCP não pode servir IP para a rede wan, então, vamos configurar a placa de rede que o Dhcp vai funcionar:

#vim /etc/default/isc­dhcp­server

//modificar INTERFACES=”” para INTERNFACES=”eth0”

Agora, vamos configurar o DHCP:

#vim /etc/dhcp/dhcpd.conf

Deixe o conteúdo do arquivo no seguinte formato:

authoritative  

  ...

 

subnet 172.16.0.0 netmask 255.255.255.0 {      range 172.16.0.10 172.16.0.200;

     option domain­name­servers 8.8.8.8;

     option domain­name “dhcp.local”;

     option routers 172.168.0.1;

     option broadcast­address 172.16.0.255;

     default­lease­time 600;

     max­lease­time 7200;

}

==========================================================

#service isc­dhcp­server restart //reinicia o serviço

6.3. Servidor Proxy com SQUID

Squid significa “Lula” e no mundo open-source talvez seja o mais comum servidor proxy do mundo utilizado para gerenciar o acesso a internet (rede externa). Ele implementa um controle sobre o conteúdo que deve ou não ser acessado pelas máquinas clientes e suporta HTTP, HTTPS, FTP e outros.

O Squid também conta com um cache que serve para armazenar sites visitados, dando a impressão ao usuário de estar navegando mais rapidamente, que de fato é verdade, pois ele está buscando um site ou uma parte do site que já está salva dentro do servidor e as outras partes ou sites

(21)

que ainda não estão, o servidor irá buscá-los e armazená-los até um certo limite.

O Squid trabalha com ACLs (Listas de Controle de Acesso). Existem vários tipos de ACL que podemos utilizar, abaixo temos os mais comuns:

time - usado para especificar dias da semana e horários.

src - tipo utilizado para indicar endereços IP de origem. Pode-se especificar um endereço de rede, como 192.168.16.0/24, um endereço de um determinado host, como 192.168.16.10/24 ou uma faixa de endereços, como 192.168.16.10-192.168.16.20/24;

dst - semelhante ao tipo anterior, mas está relacionada ao endereço de destino;

url_regex - este tipo percorre a URL à procura da expressão regular especificada. Deve ser observado que a expressão é case-sensitive, para que seja case-insensitive deve ser usada a opção -i. É o tipo mais comum de ACL, dada a flexibilidade proporcionada pelo uso de expressões regulares;

port - realiza o controle pela porta de destino do servidor, neste tipo deve ser especificado o número da porta;

proto - serve para especificar o protocolo, como por exemplo FTP ou HTTP;

ident - Realiza o controle de acesso baseado no nome do usuário. Este tipo requer um servidor Ident rodando na máquina do cliente;

proxy_auth - tipo usado para implementar autenticação de usuários no proxy. A autenticação é feita com uso de softwares externos. Podem ser passados os nomes dos usuários ou usada a opção REQUIRED para que seja autenticado qualquer usuário válido;

arp - tipo usado para construir lista de acesso baseada no MAC Address da interface de rede do cliente, ou seja, em vez de endereço IP da placa, usa-se o seu endereço MAC.

6.3.1. Instalação e Configuração no Cliente

Basta adicionar o servidor proxy no navegador com ip 172.16.0.1 e porta 3128. Ao tentar acessar uma página, o browser fica “pensando”… rs…

(22)

6.3.1. Instalação e Configuração no Servidor

Para instalar, use os comandos:

#apt­get install squid //instala o squid

#service squid restart //reinicia o serviço

#tail ­f /var/log/squid/access.loc //fica “ouvindo” o log de acessos

Após o serviço do executando, o browser do cliente deve responder com “access deined”

Agora vem a parte mais crucial, que é a edição do arquivo que nos garantirá todo o controle entre as máquinas clientes e o mundo externo:

#cp /etc/squid/squid.conf /etc/squid/squid.conf_backup //fazer backup do arquivo original

# vim /etc/squid/squid.conf //editar o arquivo

Note que o arquivo é gigantesco (8000 linhas) pois parece um “manual” do squid, muito está comentado.

As linhas que devem ser editadas ou criadas são as seguintes:

http_port 3128 # porta para receber conexões. Ela já existe, confira se não está comentado //depois de acl CONNECT method CONNECT crie as acls:

acl maquinas src 172.16.0.0/24 # define a acl da rede (todas as maquinas).

acl lab1 src 172.16.0.0/24 # define a acl das máquinas a liberar 

acl proibido url_regex “/etc/squid/proibido” #define a acl da lista de sites proibidos http_access deny maquinas proibido  #tudo fica proibido de início

http_access allow lab1 #então, libera as maquinas do grupo lab1

Agora vamos criar o arquivo de sites proibidos:

#vim /etc/squid/proibido

//edita (cria) o arquivo. Coloque o seguinte conteúdo:

===============================================================

uol bol.com.br

===============================================================

#service squid restart

Agora, faça o teste no cliente.

(23)

6.3.2. Configuração do Cache

Edite o arquivo /etc/squid/squid.conf e configure os itens a seguir:

cache_dir ufs /var/spool/squid 100 16 256 # Indica ao servidor que deve reservar um espaço em disco para o cache

# o 100 indica 100Mb / 0 16 é o núm. de pastas / 256 o núm. de arquivos cache_mem 8MB # 8 Mb de cache ficarão em memória RAM (acesso rápido)

===============================================================

#service squid restart

(24)

7. VULNERABILIDADE DE APLICAÇÕES WEB

Vulnerabilidades em sistemas web são uma realidade cada vez mais crescente na internet e nascem quando determinadas partes oriundas da requisição HTTP, são processadas sem o devido tratamento pelo servidor. Estas partes podem ser cookies mal configurados, o ID de uma sessão exposta no navegador e até mesmo os parâmetros passados pela URL ou um formulário de login.

7.1. Cross Site Scripting

Mais conhecido com XSS, é de fato um subconjunto de inserções HTML. Os furos XSS ocorrem em aplicações quaisquer que receba dados originados do usuário e o envie ao navegador sem primeiramente validar ou codificando aquele conteúdo. Esta vulnerabilidade permite atacantes executarem script no navegador da vítima, que pode sequestrar sessões de usuários, desfigurar web sites, inserir conteúdo hostil, conduzir ataques de roubo de informações pessoais (phishing).

Como acontece: o servidor recebe o dado hostil, armazena em banco de dados ou arquivos e então, em um estágio avançado, mostra o dado a outro usuário sem nenhum filtro.

Como proteger: utilizar validação de entrada de informação; usar caixas de textos onde scripts não são executados; validar a saída com funções que transformam html em texto como htmlentities() do php.

7.2. Injeção de SQL

As falhas de injeção são muito comuns em aplicações web e existem muitas variações e tipos. Mais conhecida como SQL Injection é uma ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados SQL. Estas falhas habilitam o atacante a criar, ler, atualizar ou apagar arbitrariamente qualquer dado disponível par a aplicação. No pior cenário estes furos permitem ao atacante comprometer completamente a aplicação até pelo contorno de ambientes controlados por firewall.

Como acontece: O atacante modifica o script, url ou campo manipulando o interpretador e redefinindo a string do comando SQL. Exemplo:

Link original: grava.php?codigo=4

(25)

Link malicioso: grava.php?codigo=4’; delete from produto

Como proteger: valide a entrada aceitando apenas dados inteiros ou funções que modificam aspas e outros caracteres; evite mensagens de erro detalhadas; imponha mais segurança na comunicação com o banco de dados;

Quanto um parâmetro inteiro é passado:

settype($_GET[codigo],”int”); //garante que o código passado por get seja um código.

$res=pg_query(“select * from tabela where codigo=’$_GET[codigo]’”);

Quando se recebe vários dados de um formulário:

function antiinjection($dados) {

    foreach ($dados as $key => $value) {

       $dados[$key]=str_replace(array(‘from’,’drop’,’show tables’,’where’,’delete’,’insert’,”’”,’\\’),’’,$dados[$key]);

       $dados[$key]=strip_tags($dados[$key]);

       $dados[$key]=addslashes($dados[$key]);

    }

    return $dados;

}

/////////////////////////////////////////

$_POST=antiinjection($_POST);

//print_r($_POST);

$res=pg_query(“insert into tabela (campo1,campo2) values (‘$_POST[campo1]’,‘$_POST[campo2]’”);

7.3. Execução Maliciosa de Arquivo

O desenvolvedor tem por hábito usar diretamente ou concatenar entradas potencialmente hostis com funções de arquivo ou stream, ou confiar de maneira imprópria em arquivos de entrada.

Quando o dado é insuficiente verificado, isto pode levar a uma inclusão arbitrária remota que será processado ou invocado um conteúdo hostil pelo servidor web.

Como acontece: a inclusão de código proveniente de $_POST ou $_GET

require (“$_POST[file]”);

file(“$_POST[lang]”);

Como proteger: Não utilize dados vindos de requisições para inclusão ou abertura de arquivos. Se não for possível faça uma validação ou aceite apenas uma lista de valores, exemplo:

if($_POST[file]==’include.php’){

      require(“include.php”);

}elseif($_POST[file]==’outro.php’){

      require(“outro.php”);      

}else{

      die(“arquivo inválido”);

}

(26)

8. ALTA DISPONIBILIDADE DE SERVIÇOS

Alguns, ou melhor: “a maioria” dos serviços oferecidos numa rede não devem parar pelo prejuízo que causam a entidade que as mantém. E “todos” serviços não podem parar quando a credibilidade do profissional do TI está em jogo.

Os serviços que necessitam de HA – High Available, são muitos, dentre eles proxy, dns, http, arquivos, banco de dados etc.

Com heartbeat (coração batendo) uma nó fica em standby aguardando o serviço principal falhar, e quando falha, habilita o mesmo ip do servidor principal, assumindo seus serviços.

Segue os passos que exemplifica a alta disponibilidade com o servidor http apache.

Passo 1: Configurando o ambiente

Ha1

//mude o host para ha1. Reinicie o computador efetivar a mudança

#echo “ha1” > /etc/hostname  //verifique o nome do dominio.

#hostname

//mude o ip ou considere o ip dado por dhcp 172.16.0.10 para este host

#vim /etc/network/interfaces //configurar ips do servidor (server) auto eth0

iface eth0 inet static address 172.16.0.10 netmask 255.255.255.0 gateway 172.16.0.1

//ou configure via interface gráfica (desktop)

//usando o arquivo /etc/hosts adicione caminhos para resolver domínios dos servidores vim /etc/hosts

127.0.0.1 localhost 172.16.0.10 ha1 172.16.0.11 ha2 Ha2

//mude o host para ha2. Reinicie o computador efetivar a mudança

#echo “ha2” > /etc/hostname  //verifique o nome do dominio.

#hostname

//mude o ip ou considere o ip dado por dhcp 172.16.0.11 para este host

#vim /etc/network/interfaces //configurar ips do servidor (server) auto eth0

iface eth0 inet static address 172.16.0.11 netmask 255.255.255.0 gateway 172.16.0.1

//ou configure via interface gráfica (desktop)

(27)

vim /etc/hosts

127.0.0.1 localhost 172.16.0.10 ha1 172.16.0.11 ha2

Passo 2: Serviço de HA

Ha1 e Ha2 //instalar serviço

sudo apt­get install apache2  

Passo 3: Mirror

Este passo depende muito do serviço que está sendo mantido em HA. No caso deste exemplo do apache, basta fazer uma cópia dos arquivos das páginas do no1 para no 2. Este pode ser agendado para ser executado de hora em hora.

Ha1

//copiar dados modificados no ha1 para ha2 Rsync ­av /var/www ha2:/var/ 

//agenda esta cópia no crontab (necessário conexão sem senha)

Passo 4: Instalar o heartbeat

Ha1 e Ha2

#sudo apt­get install heartbeat

Passo 5: Configurando ha.cf

Este arquivo contém a configuração inicial do heartbeat.

Ha1 e Ha2

#vim /etc/ha.d/ha.cf

logfacility local0   #define os log do heartbeat junto aos logs de sistema

keepalive 1 #intervalo   em   segundo   da   verificação   de   falha   (ping) deadtime 3 #após 3 segundos de queda, considere que o no 1 falhou

udpport 694  #porta que o heartbeat excuta bcast enp0s3 #placa de rede de uso do heartbeat 

node ha1  #hostname dos nós

node ha2

auto_failback on  #recureração automatica ligado

Passo 6: Configurando authkeys

Este arquivo contém a senha para conexão entre os nós usada pelo heartbeat

Ha1 e Ha2

#vim /etc/ha.d/authkeys auth 1

1 md5 ca0cd09a12abade3bf0777574d9f987f

(28)

//utilize permissão somente para o usuário root neste arquivo.

#chmod 600 authkeys

//para obter a senha em md5 use o link 

http://www.edubox.com.br/download/seguranca/md5.php?senha=senhadoroot //pode ser usado sha1 no lugar de md5

Passo 7: Configurando haresources

Este arquivo contém informações do serviço e IP que deverá estar sempre ativo. O IP de alta disponibilidade é diferente do IP dos dois nós.

Ha1 e Ha2

#vim /etc/ha.d/haresources ha1 IPaddr::172.16.0.13 apache2

Passo 8: Testes

//reinicie o serviço do heartbeat

#/etc/init.d/heartbeat restart

//caso houver algum erro, verifique o log do sistemas tail ­f /var/log/syslog

//veja se o IP HA foi criado no ha1 ifconfig

Teste o serviço abrindo o IP HA no browser.

Desconecte o cabo do nó ha1 simulando uma falha. Aguarde uns 5 segundos e veja se o IP HA foi criado no ha2 e teste se o serviço está disponível.

(29)

9. REPLICAÇÃO EM BANCO DE DADOS

Referências

Documentos relacionados

pontos obtidos, observando o item 4.1 deste Edital (à EXCEÇÃO dos candidatos as vagas do Biocor Instituto (Cardiologia, Clínica Médica, Hematologia e Medicina Intensiva

Como já foi dito neste trabalho, a Lei de Improbidade Administrativa passa por uma releitura doutrinária e jurisprudencial, visando delimitar de forma precisa os tipos ímprobos,

O objetivo deste trabalho foi realizar o inventário florestal em floresta em restauração no município de São Sebastião da Vargem Alegre, para posterior

§ 7º O empregado deverá apresentar o comprovante de pagamento até o 5º (quinto) dia útil de cada mês para receber o reembolso na mesma competência, sendo permitido o reembolso

Preliminarmente, alega inépcia da inicial, vez que o requerente deixou de apresentar os requisitos essenciais da ação popular (ilegalidade e dano ao patrimônio público). No

PRIORIDADES PARA O ANO LETIVO O momento de planejamento é importante para tratar de várias questões referentes às ações. relativas ao

Por sua vez, Franco (2002) classifica as atribuições dos coordenadores em funções políticas, gerenciais, acadêmicas e institucionais. Sendo assim, sem uma formação,

Concebeu-se estudar os casos de mastocitoma canino quanto à raça, idade, sexo, região corpórea acometida (RCA), método de diagnóstico (MD), grau histológico (GHT),