Web Application
Apache
O Apache é um servidor web open source, que está no primeiro lugar no ranking dos servidores web mais utilizados do mundo. Provavelmente assim como eu, você já deve ter acessado alguma página web que utiliza o Apache ou até mesmo já teve que, em algum momento da carreira profissional, trabalhar diretamente com o Apache.
O que poucas pessoas sabem, é que o Apache (assim como toda tecnologia), pode apresentar falhas de segurança, o que nos leva a necessidade de realizar determinadas configurações para melhorar a segurança do nosso servidor.
Ocultando Banners
Esse sem dúvida é o primeiro ponto a ser visto, pois é através do banner que um atacante consegue definir qual o tipo do servidor web, a sua versão e, com base nessas informações, montar um plano de ataque mais preciso. Esse banner pode ser visto em páginas default, response headers e páginas de erro.
Para ocultarmos o banner, iremos alterar o arquivo de configuração de segurança que está localizado em /etc/apache2/conf-available/security.conf
e alterar ServerTokens OS
para ServerTokens Prod
. Agora reinicie o Apache com o comando:
Dessa forma, o banner será apenas apache
, mas podemos ainda deixar um banner falso, por exemplo, podemos deixar o banner de um IIS. Nesse caso, vamos alterara ServerTokens OS
para ServerTokens Full
e vamos adicionar também, uma linha com conteúdo SecServerSignature Microsoft-IIS
. Reinicie o apache novamente.
Devemos também ocultar o banner do servidor nas mensagens de erro (página 404) default, então para resolver esse problema, altere ServerSignature On
para ServerSignature Off
.
Ocultando ETag
Etag é usado para realizar um cache eficiente. É um ID exclusivo gerado para o recurso e não muda até o momento em que o recurso correspondente é alterado. Isso ajuda os caches a saber se o recurso em uma URL específica foi alterado ou não, apenas acompanhando os Etags.
O servidor da web Apache tem uma vulnerabilidade de divulgação de informações relacionada a Etags (na configuração padrão). Etag para um arquivo específico pode conter um valor i-node
. Esta informação sozinha é inofensiva, mas pode levar a certos ataques quando combinada com NFS.
Abra o arquivo /etc/apache2/conf-available/security.conf
e adicione a linha FileETag None
.
Desativando Directory Listing
Dos itens citados aqui, considero essa a que apresenta maior risco, pois a listagem de diretórios (Directory Listing) é um recurso que, quando habilitado, os servidores da web listam o conteúdo de um diretório quando não há arquivo de índice presente, como index.php ou index.html. Caso tenho arquivos sensíveis como arquivos de backup, configuração de banco de dados, senhas e/ou chaves de acesso, serão entregues de bandeja para um atacante.
Dessa vez iremos trabalhar com o arquivo /etc/apache2/apache2.conf
, simplesmente alterando Options Indexes FollowSymLinks
para Options FollowSymLinks
.
Bloqueando acesso ao .git e svn
Muitos sites e/ou aplicações web utilizam o git ou svn para realizar o versionamento de códigos. Mesmo depois de bloquear Directory Listing, é possível acessar diretamente arquivos como http://site.com.br/.git/config
ou http://site.com.br/.git/HEAD
, o que se torna uma vulnerabilidade alta.
Vamos abrir o arquivo /etc/apache2/conf-enabled/security.conf
, adicionar o seguinte conteúdo e depois reiniciar o apache.
Desativando HTTP Methods
Abra o arquivo /etc/apache2/sites-available/000-default.conf
, comente a linha DAV On
e reinicie o apache. Com isso, os métodos PUT
e DELETE
serão desativados. Essa alteração é para desativar o WebDAV (Web-based Distributed Authoring and Versioning) fornecido pelo módulo mod_dav
. Esta extensão permite criar, mover, copiar e excluir arquivos.
Note que essa alteração não desativou o Método TRACE, que pode levar à divulgação de informações como cabeçalhos de autenticação de proxy. Para resolver essa questão, abra o arquivo /etc/apache2/conf-enabled/security.conf
, altere TraceEnable On
para TraceEnable Off
e reinicie o apache.
Protegendo contra XSS e Clickjacking
Ataques de XSS e Clickjacking são muito comuns e podem apresentar um certo risco a segurança. O lado bom dessa história que isso pode ser corrigido facilmente acessando o arquivo /etc/apache2/conf-enabled/security.conf e adicionando as seguintes linhas:
Após isso, ative o módulo executando o seguinte comando no terminal:
Por último, reinicie o apache e note que em todas as requisições válidas, irá conter os 2 novos itens no Response Headers.
Desabilitando HTTP 1.0
HTTP 1.0 é conhecido por ter uma falha de segurança relacionada ao sequestro de sessões. Portanto, deve ser desativado para proteger os usuários.
Abra o arquivo /etc/apache2/apache2.conf
e na seção <Directory/var/www/>
, adicione as seguintes linhas:
Habilite o módulo com o comando abaixo e depois reinicie o apache
IP Whitelisting
Uma boa prática de segurança é criar uma lista de IP's válidos para acessar uma aplicação. Sabemos que, essa regra não pode ser generalizada, pois determinadas aplicações realmente precisam ser acessíveis por todos, então utilize somente se for necessário.
Abra o arquivo /etc/apache2/sites-available/000-default.conf
, adicione o conteúdo abaixo, dentro da seção <VirtualHost *:80>
e reinicie o apache.
Ativando o TLS (Transport Layer Security)
Utilizar criptografia nas requisições se tornou algo essencial devido a quantidade de dados sensíveis que são transitados a todo momento. Os atacantes podem por exemplo, interceptar requisições através de um ataque MITM (Man-In-The-Middle) e ter acesso a credenciais de acesso a uma determinada aplicação. Já pensou no que poderia acontecer se você for vítima desse tipo de ataque ao acessar sua conta bancária pela aplicação web? Obviamente os bancos utilizam TLS por medidas de segurança, então podemos ficar mais tranquilos referente a esse ponto, mas nem todas as empresas seguem boas práticas. É sempre bom ficar atento a isso.
Vamos então corrigir isso, abrindo o arquivo /etc/apache2/sites-available/default-ssl.conf
(crie, caso não exista) e adicionando o seguinte conteúdo:
Abra o arquivo /etc/apache2/sites-available/000-default.conf
e adicione o conteúdo abaixo na raíz do nó <VirtualHost *.80>
.
Agora precisamos executar os seguintes comandos para ativar os módulos de suporte ao SSL:
Por último, reinicie o apache e verifique que a aplicação pode ser acessada na porta 443 (https).
Utilizando somente o TLS v1.3
Abra o arquivo /etc/apache2/mods-available/ssl.conf
e procure pela linha SSLProtocol all -SSLv3
(pode ser que já esteja configurada em outra versão) e substitua por SSLProtocol TLSv1.3
. Feito isso, reinicie o apache e execute o comando abaixo para validar se está utilizando o TLS v1.3. Teste também as demais versões do TLS/SSL.
Desabilitando Módulos desnecessários
Primeiro vamos listar todos os módulos ativos.
Os módulos cache_module
e cache_disk_module
, podem ser desativados, executando os comandos:
Código Seguro em PHP
O código abaixo é um exemplo de boa validação de arquivos. Isso irá bloquear diversos tipo de ataques de file upload, evitando assim que um atacante envie arquivos maliciosos para o nosso server
Last updated