ALUNOS: EDER, HANANNY, ALEXANDRE Servidor Web Descrição O Projeto Apache HTTP Server é um esforço para desenvolver e manter um servidor HTTP de código aberto para os sistemas operacionais modernos, incluindo UNIX e Windows. O objetivo do projeto é fornecer um servidor seguro, eficiente e extensível que fornece serviços HTTP em sincronia com os padrões HTTP atuais. Apache httpd tem sido o servidor web mais popular na Internet desde abril de 1996, e comemorou seu aniversário de 17 anos como um projeto em fevereiro deste ano. O Apache HTTP Server ("httpd") é um projeto do The Apache Software Foundation. Configuração Instalando yum install httpd. Criando Virtual Host no ficheiro /etc/httpd/conf/httpd.conf:
Criando a pasta para a aplicação web no diretório /var/www/: Alterar o grupo da pasta para apache: Comando chrgrp apache loja/ Criando arquivo para teste:
Hardening HTTP Não é interessante que qualquer usuário tenha acesso aos detalhes técnicos do servidor então vamos fazer algumas alterações: Passo 1: Esconder a versão Apache. Acesse e edite o httpd.conf com vi /etc/httpd/conf/httpd.conf e encontre a linha ServerSignature e deixe como Off.
Passo 2: Ainda dentro do httpd.conf encontre a linha ServerTokens e coloque como Prod. (Valor que exibe menos informações). Passo 3: Agora vamos comentar a linha Options Indexes FollowSymLinks para que algum invasor não possa navegar pelos diretórios do Apache, é que links simbólicos não permita o acesso ao /, ou seja, ao sistema operacional. Passo 4:
Procure pelo parâmetro AllowOverride none e altere todos para all, existe mais de um AllowOverride. Isso irá otimizar o seu Apache e evitará que ao utilizar o.htaccess deixe caminhos abertos para invasões. Passo 5: Efetue o comando chown apache:apache /etc/httpd -R para que o diretório do Apache seja controlado pelo próprio usuário e dê a permissão 751 para que usuários que não sejam do servidor web, possam apenas executar os scripts, para isso, utilize o comando chmod 751 /etc/httpd -R. Reinicie o serviço com service httpd restart. OBS: No PHP, instalar o módulo do suphp para que cada site tenha um usuário igual ao Apache e os arquivos em PHP fiquem com a permissão máxima de 751 e html em 755 para evitar ataques pelo PHP.
Banco de Dados Descrição MySQL é a base de dados em código aberto número um, é a número um para web e uma excelente base de dados para embarcar. Configuração Instalando os pacotes do banco de dados e do PHP: Yum install php php-mysql mysql mysql-server Iniciando daemon: O comando abaixo instala algumas bases necessárias para o funcionamento interno do servidor, pois sendo um banco de dados, o MySQL usa a si próprio para armazenar informações de controle, tais quais como usuários e senhas.
Depois com o daemon parado inicie o MySQL pela primeira vez para a criação do banco:
Após entrar crie uma senha para o usuário root: Hardening MySQL Passo 1: Para uma maior segurança ao instalar o MySQL você pode executar o comando mysql_secure_installation :
Nas perguntas: Set root password? [Y/n] #Tecle Enter para setar a senha do usuário root do servidor MySQL New password: #Senha do root do SQL Re-enter new password: #Senha do root do SQL Remove anonymous users? [Y/n] #Tecle Enter para remover o acesso de usuários anônimos Disallow root login remotely? [Y/n] #Tecle Enter para remover o acesso remoto do root
Remove test database and access to it? [Y/n] #Tecle Enter para remover a tabela teste e seus acessos Reload privilege tables now? [Y/n] #Tecle Enter para recarregar os privilégios das tabelas Passo 2: Ative o log no arquivo /etc/my.cnf : Passo 3: Mude o diretório root no arquivo /etc/my.cnf :: Passo 4: Remover Histórico: Durante os procedimentos de instalação, há uma grande quantidade de informações sensíveis que podem ajudar um intruso para invadir um banco de dados. Esta informação é armazenada na história do servidor e pode ser muito útil se algo der errado durante a instalação. Devemos remover o conteúdo do arquivo MySQL history (~ /.mysql_history), onde todos os comandos SQL executados são armazenados (especialmente senhas, que são armazenados como texto simples):
Servidor DNS Descrição BIND é um software de código aberto que implementa o Sistema de Nomes de Domínio (DNS) protocolos para a Internet. É uma implementação de referência desses protocolos, mas é também o software de nível de produção, adequado para uso em aplicações de alto volume e de elevada fiabilidade. BIND é de longe o software DNS mais amplamente utilizado na Internet, fornecendo uma plataforma robusta e estável em cima do qual as organizações podem construir sistemas de computação distribuída com o conhecimento de que esses sistemas são totalmente compatíveis com os padrões de DNS publicados. Configuração Instalação: yum install bind bind-libs bind-utils Alterando arquivo de configuração /etc/named.conf: Any = para que o servidor possa receber requisições de qualquer host além do local.
Incluindo a zona: Criando o arquivo loja.db em /var/named: Alterando o arquivo loja.db: Use o comando chgrp named loja.db para alterar o grupo da base de dados: Testes em outra máquina:
Acessando o site pelo nome virtual:
Hardening DNS Configuração Servidor Master-Slave (Primário-Secundário): Configurando /etc/named.conf servidor máster para transferir a zona para o servidor 192.168.1.14: Configurando servidor slave para receber zona do máster: Acrescentando permissão de escrita para o diretório corrente /var/named/ :
Transferência: SERVIDOR 2 :
Servidor FTP O serviço de FTP do ambiente criado será o proftpd, entre outros existentes escolhemos esse pelo seu alto reconhecimento no mercado e pela sua fácil implementação, é na verdade um serviço que já vem quase pronto para se colocar em produção, somente com algumas configurações detalhadas visando maior segurança no ambiente criado. Comparados com os demais serviços decidimos fazer a utilização do mesmo para garantir maior segurança ao cenário ou ao menos reduzir o risco e ameaças que venham ser projetadas contra o ambiente. Configuração Iniciando a parte de configuração, o proftpd tem seu arquivo de configuração que fica em /etc/proftpd.conf lá iniciaremos sua parte de configuração visando o máximo de segurança no serviço, o servidor está rodando em modo standalone o que promove aos usuários disponibilidade do serviço de FTP, definindo também o access para que o administrador possa ter os resultados e verificar o dia e hora que o usuário acessou o serviço, olhe:
Com isso o administrador pode verificar usuário fulano logou no servidor" que é algo bastante útil quando o assunto se trata de segurança. Deixamos o acesso a raiz somente para o usuário root, isso também pode ser definido no arquivo de configuração, com isso temos a garantia de que somente o "super usuário" poderá acessar a raiz do serviço, já o usuário comum terá acesso a sua pasta home para maior integridade do serviço, veja: Descomentar essa linha é algo crucial, garantirá ao ambiente maior segurança ao ter cada usuário acessando a sua pasta home e não a raiz por completo. As definições da quantidade de usuários foram feitas conforme o ambiente já para evitar logon de algum usuário não autorizado e adequar o uso do serviço conforme o ambiente criado. Já as definições de logs no serviço, direcionamos para /var/log/proftpd, com isso o administrador tem a informação dos logs efetuados no sistema e o mesmo pode fazer a verificação se os logs estão em conformidade com o ambiente, após isso vamos configurar para que o serviço faça inicialização no boot, juntamente com o sistema, isso para ter mais uma garantia de segurança no serviço FTP, o usuário será criado no próprio servidor para que já temos a
listagem dos usuário que poderão ter acesso ao serviço e para que o administrador possa ter um controle maior do ambiente. Servidor E-mail O serviço de e-mail é o Postfix, tem a função de mensagens entre os usuários do ambiente, ele foi escolhido pelo alto reconhecimento no mercado e pela sua fácil implementação para atender o ambiente de trabalho. Configuração Configuração do serviço de e-mail foi feita no mesmo servidor que o FTP, ou seja, no primeiro servidor. Visando a segurança do serviço direcionamos os arquivos de logs para /var/log/maillog, dessa forma o administrador faz a análise do momento do log e também o horário em que o e-mail foi enviado dentro do ambiente, temos uma demonstração, veja:
Esse é uma mensagem colhida pelo administrador que mostra que o usuário alexandre@domain.com envia um e-mail para o usuário eder@domain.com no horário das 22:35 minutos, através dos logs tem como o administrador verificar o horário que o usuário enviou o e-mail, horário do seu log entre outras... Na verdade o serviço de e-mail não tem muitas ferramentas de segurança integradas no seu próprio serviço, então associamos o serviço de e-mail ao antivírus clamav e ao analisador de conteúdo de e-mail Amavis. Quando o serviço de correio eletrônico recebe uma mensagem, antes de disponha-la ao usuário destinatário, ele entrega ao Amavis para que o conteúdo da mensagem seja analisado. Caso alguma detecção de ameaça seja constatada, o Amavis envia a mensagem para o antivírus Clamav, este sim, o antivírus, tratará devidamente a mensagem conforme a sua configuração, lixeira, quarentena etc. Além desses dois softwares, foi utilizado também o Spamassassim, um software de detecção de spams. Fizemos o uso dessas ferramentas em conjunto justamente para garantir maior segurança na troca de e-mails no ambiente.
Pentests Após a demonstração do projeto chegamos a realizar alguns testes para verificar como anda a composição do local, para isso utilizamos alguns scanners conhecidos no mercado, utilizaremos nmap, nikto e OpenVAS contra o projeto acima mostrado para verificar o estado dos serviços depois de configurados, veja: Resultados com nmap: Resultados com nikto:
Resultados com OpenVAS: Vulnerabilidades:
Netsparker é um scanner de segurança de aplicações web, com suporte tanto para a detecção e exploração de vulnerabilidades. Tem como objetivo ser falso positivo-livre por apenas relatar vulnerabilidades confirmados após explorar com sucesso ou testá-los de outra forma.
Scans Resultados
Vulnerabilidades Detalhes Netsparker identificou uma injeção SQL baseada-booleano, que ocorre quando a entrada de dados por um usuário é interpretada como um comando SQL em vez de dados normais pelo banco de dados back-end. Netsparker confirmou a vulnerabilidade executando uma consulta SQL teste no banco de dados back-end.
Impacto Dependendo do banco de dados de back-end, as configurações de conexão de banco de dados e sistema operacional, um atacante pode montar um ou mais dos seguintes tipos de ataques com sucesso: Leitura, atualização e remoção de dados arbitrários / tabelas do banco de dados; A execução de comandos do sistema operacional subjacente. Ações à se tomar 1. Utilizar uma camada de acesso a banco de dados (DAL) ou usar ORM (Object Relational Mapping). A maioria dos sistemas de ORM utilizar apenas consultas parametrizadas e isso pode resolver todo o problema de injeção SQL. 2. Localizar todas as consultas SQL geradas dinamicamente e convertê-los para consultas parametrizadas. Prevenção A melhor maneira de proteger o seu código contra injeções SQL é usando consultas parametrizadas (declarações preparadas). Que todas as línguas modernas, oferecem bibliotecas internas para isso. Sempre que possível, não criar consultas SQL dinâmica ou consultas SQL com concatenação.
Detalhes Netsparker detectou que os dados senha estão sendo transmitidos através de HTTP. Impacto Se um atacante puder interceptar o tráfego de rede, ele / ela pode roubar as credenciais dos usuários. Ações à se tomar Mover todas as formas e páginas críticas para HTTPS e não atendê-los através de HTTP. Prevenção Todos os dados sensíveis devem ser transferidos através de HTTPS em vez de HTTP. Os formulários devem ser servidos através de HTTPS. Todos os aspectos da aplicação que aceitar a entrada do usuário, a partir do processo de login, só deve ser servido por HTTPS.