Infraestrutura para Aplicações Web Seguras parte 2 – SGBDs ( Updated )
25 de Fevereiro de 2010, 0:00 - sem comentários aindaO SGBD é ao mesmo tempo o bom e o mau elemento deste processo. Se bem configurado e mantido será um aliado poderoso, infelizmente isto nem sempre ocorre sendo bastante otimista.
As últimas noticias revelam que as boas práticas não estão sendo obedecidas. A técnica de ataque mais utilizada atualmente é o SQL Injection que é injectar código malicioso permitindo desde a criação de um simples usuário até a total indisponibilidade do serviço.
99.99% dos sites comprometidos ( defacements ) diariamente estão vulneráveis a este de ataque.Esta falha não está somente ligada ao SGBD, um código mau escrito abre esta e outras vulnerabilidades na aplicação como veremos na 3a. parte do nosso artigo.
Os SGBDs mais utilizados numa infraestrutura baseada em software livre são o MySQL e o Postgresql. Cada um destes sistemas possuem características que atendem a várias demandas de performance, produtividade, escalabilidade e segurança.
A implementação de uma infraestrutura segura para banco de dados inicia-se na modelagem do banco, uma modelagem bem feita permitirá que sua base de dados expanda mantendo a total integridade, escalabilidade e segurança. Evitando brechas de segurança e evitando as sempre presentes “gambiarras”.
Como definimos anteriormente o sistema de arquivos* e o tipo de redundância dos discos** serão itens criticos na performance e segurança na manipulação dos dados.
* Recomendo o uso do sistema de arquivos XFS
** Recomendo o uso do RAID 0+1
SGBD MySQL Seguro
1 – Amplie a segurança local
Desabilite o uso do comando LOAD DATA LOCAL INFILE prevenindo contra ataques que permitem a leitura dos arquivos locais. Isso é importante caso haja ataque de SQL Injection através de uma vulnerabilidade no código PHP.
Adicione o seguinte parâmetro na seção [mysqld] do arquivo /chroot/mysql/etc/my.cnf:
set-variable=local-infile=0
2 – Altere a senha do usuário root do banco
mysqladmin -u root password ‘NOVA_SENHA’ -p
3 – Remova usuários e bases padrões
mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host=”localhost” and user=”root”);
mysql> flush privileges;
4 – Renomeie a conta do admin ( root )
mysql> update user set user=”mydbadmin” where user=”root”;
mysql> flush privileges;
5 – Crie contas de usuários separadas para cada aplicação
mysql -u mydbadmin -p
mysql> CREATE DATABASE blog;
mysql> CREATE DATABASE guestbook;mysql> CREATE USER ‘blgu’@'localhost’ IDENTIFIED BY ‘SENHA’;
mysql> CREATE USER ‘gbu’@'localhost’ IDENTIFIED BY ‘OUTRASENHA’;mysql> GRANT ALL PRIVILEGES ON blog.* TO ‘blgu’@'localhost’ WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON guestbook.* TO ‘gbu’@'localhost’ WITH GRANT OPTION;mysql> FLUSH PRIVILEGES;
MySQL Tunning
Para fazer o tunning do MyQSL recomendo o uso do seguinte script:
MySQL Performance Tuning Primer Script
O uso desta ferrramenta é recomendado após 48 horas de uso do banco permitindo que o script detecte os valores corretos para o tunning do banco.
Links Recomendados:
* Making MySQL Secure Against Attackers
* Six steps to secure sensitive data in MySQL
SGBD Postgresql Seguro
No caso do Postgresql recomendo a leitura do material do Fernando Ike aka Fike, o cara é uma sumidade no assunto. Nesta apesentação ele aborda o tunning de performance e segurança do Postgresql
* Performance Tuning para banco de dados PostgreSQL
Links Recomendados:
* Securing your PostgreSQL Database
* PostgreSQL – Security
Auditoria – Ferramentas
* OWASP SQLiX Project
* Security Database
* SQL Injection Tools
* SQL Injection Vulnerability Online Test
* SQL Inject Me – Firefox Addon
Outros Links
* SQL Injection Prevention Cheat Sheet
* Database Security
* Blind SQL Injection
See also:
Infraestrutura para Aplicações Web Seguras parte 2 – SGBDs
25 de Fevereiro de 2010, 0:00 - sem comentários aindaO SGBD é ao mesmo tempo o bom e o mau elemento deste processo. Se bem configurado e mantido será um aliado poderoso, infelizmente isto nem sempre ocorre sendo bastante otimista.
As últimas noticias revelam que as boas práticas não estão sendo obedecidas. A técnica de ataque mais utilizada atualmente é o SQL Injection que nada mais é injectar código malicioso permitindo desde a criação de um simples usuário até a total indisponibilidade do serviço.
99.99% dos sites comprometidos ( defacements ) diariamente estão vulneráveis a este de ataque.Esta falha não está somente ligada ao SGBD, um código mau escrito abre esta e outras vulnerabilidades na aplicação como veremos na 3a. parte do nosso artigo.
Os SGBDs mais utilizados numa infraestrutura baseada em software livre são o MySQL e o Postgresql. Cada um destes sistemas possuem características que atendem a várias demandas de performance, produtividade, escalabilidade e segurança.
A implementação de uma infraestrutura segura para banco de dados inicia-se na modelagem do banco, uma modelagem bem feita permitirá que sua base de dados expanda mantendo a total integridade, escalabilidade e segurança. Evitando brechas de segurança e evitando as sempre presentes “gambiarras”.
Como definimos anteriormente o sistema de arquivos e o tipo de redundância dos discos serão itens criticos de performance e segurança na manipulação dos dados.
SGBD MySQL Seguro
1 – Amplie a segurança local
Desabilite o uso do comando LOAD DATA LOCAL INFILE prevenindo contra ataques que permitem a leitura dos arquivos locais. Isso é importante caso haja ataque de SQL Injection através de uma vulnerabilidade no código PHP.
Adicione o seguinte parâmetro na seção [mysqld] do arquivo /chroot/mysql/etc/my.cnf:
set-variable=local-infile=0
2 – Altere a senha do usuário root do banco
mysqladmin -u root password ‘NOVA_SENHA’ -p
3 – Remova usuários e bases padrões
mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host=”localhost” and user=”root”);
mysql> flush privileges;
4 – Renomei a conta do admin ( root )
mysql> update user set user=”mydbadmin” where user=”root”;
mysql> flush privileges;
5 – Crie contas de usuários separadas para cada aplicação
mysql -u mydbadmin -p
mysql> CREATE DATABASE blog;
mysql> CREATE DATABASE guestbook;mysql> CREATE USER ‘blgu’@'localhost’ IDENTIFIED BY ‘SENHA’;
mysql> CREATE USER ‘gbu’@'localhost’ IDENTIFIED BY ‘OUTRASENHA’;mysql> GRANT ALL PRIVILEGES ON blog.* TO ‘blgu’@'localhost’ WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON guestbook.* TO ‘gbu’@'localhost’ WITH GRANT OPTION;mysql> FLUSH PRIVILEGES;
MySQL Tunning
Para fazer o tunning do MyQSL recomendo o uso do seguinte script:
MySQL Performance Tuning Primer Script
O uso desta ferrramenta é recomendado após 48 horas de uso do banco permitindo que o script detecte os valores corretos para o tunning do banco.
Links Recomendados:
* Making MySQL Secure Against Attackers
* Six steps to secure sensitive data in MySQL
SGBD Postgresql Seguro
No caso do Postgresql recomendo a leitura do material do Fernando Ike aka Fike, o cara é uma sumidade no assunto. Nesta apesentação ele aborda o tunning de performance e segurança do Postgresql
* Performance Tuning para banco de dados PostgreSQL
Links Recomendados:
* Securing your PostgreSQL Database
* PostgreSQL – Security
Ferramentas
* OWASP SQLiX Project
* Security Database
* SQL Injection Tools
* SQL Injection Vulnerability Online Test
* SQL Inject Me – Firefox Addon
Links
* Database Security
* Blind SQL Injection
See also:
Infraestrutura para Aplicações Web Seguras parte 1 – Sistema ( Updated )
25 de Fevereiro de 2010, 0:00 - sem comentários aindaNeste artigo abordarei como montar/manter um servidor seguro. Uso o Debian GNU/Linux como sistema base mas todas as ferramentas e procedimentos listados servem para qualquer Unix-like.
Um dos grandes inimigos na implementação de qualquer solução é o tempo. Tudo tem que ser feito no menor tempo possível, com o menor gasto possível e com 0% de falha. Para respeitamos todas essas premissas as orientações apresentadas serão de rápida implementação e fácil manutenção.
Hardening
Trocando em miúdos o hardening é o fortalecimento de um sistema, serviço ou aplicação com o objetivo de minimizar ou dificultar a ação de hackers e crackers.
Iniciamos o hardening antes da instalação do sistema. Neste momento planejamos:
1 – Daemons/serviços que serão disponibilizados;
2 – Particionamento;
1 – Como o foco do nosso artigo são aplicações Web já sabemos que vamos trabalhar com o Quarteto Fantástico – Linux, Apache, PHP e MySQL ou Postgresql. De antemão já temos definidos os serviços que serão disponibilizados.
2 – Com isso definido recomendo que o diretório /var permaneca numa partição separada, lá ficarão os arquivos do site no /var/www e os arquivos do banco em /var/lib/mysql.
Dependendo da aplicação é possivel que o BD cresca rapidamente então recomendo separar a maior parte do disco para está partição e também recomendo a utilzação do sistema de arquivos XFS.
Quer saber porque recomendo o uso deste sistema de arquivos? CLIQUE AQUI
Feito todo o planejamento e com o S.O. instalado iniciaremos os procedimentos de pós-instalação:
1 – Atualizar todo o sistema. No caso do Debian recomendo antes de tudo ajustar o arquivo sources.list removendo todo o conteúdo e adicionado os seguintes repositórios:
deb http://ftp.us.debian.org/debian stable main contrib
deb http://security.debian.org/ stable/updates main contrib
Feito isso use o velho e bom aptitude update && aptitude safe-upgrade
2 – Remova todos os serviços desnecessários:
Recomendo a instalação do Nmap, assim de forma fácil e rápida descobriremos as portas abertas e os serviços em execução.
Exemplo:
nmap localhost
Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-25 00:53 BRT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000021s latency).
Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1
Not shown: 996 closed ports
PORT STATE SERVICE
xx/tcp open xxx
xxx/tcp open xxxx
xxx/tcp open xxx
xxx/tcp open xxxxxNmap done: 1 IP address (1 host up) scanned in 0.22 seconds
Você poderá remover a aplicação indesejada usando o comando aptitude remove [aplicação] ou apenas impedir que ela seja executada durante o boot, como por exemplo o MTA exim usando o comando update-rc.d -f exim remove. Dessa forma o exim permanecerá instalado, por ser dependência para outras aplicações, mas não será executado durante o boot.
3 – Use o sudo
Evite logar no sistema usando o usuário root e não deixe que membros da equipe façam o mesmo, assim é possivel fortalecer a auditoria de autenticação, instalação e remoção de pacotes e ações que podem danificar o sistema.
4 – Bloqueie o usuário root
Use o comando usermod -L root para bloquear o login usando o usuário root.
5 – Mude a porta padrão do ssh e bloqueie o login do usuário root
Segurança por obscuridade é uma das técnicas utilizadas para dificultar o footprinting, e o port scanning do seu sistema.
Para fazer estas modificações acesse o arquivo /etc/ssh/sshd_config e altere as seguintes linhas:
Port 22
para por exemplo
Port 3000
PermitRootLogin yes
para
PermitRootLogin no
Refinando o processo de Hardening
Algumas ferramentas podem ser utilizadas para ajudar no processo de hardening do sistema. Recomendo fortemente o uso das seguintes ferramentas:
Hntool
Este é um novo projeto do meu amigo sergipano Hugo Doria que vem crescendo bem rápido e vem contando com novas contribuições diariamente.
O objetivo desta ferramenta é facilitar a vida do Sysadmin informando as melhorias necessárias para fortalecer os serviços e o próprio sistema.
Como ele é totalmente modular fica muito fácil contribuir. Se você quer aprender a programar em Python essa é hora.
Contribua com o desenvolvimento do Hntool. A comunidade de brasileira de segurança da informação agradece.
Bastille
O Bastille protege o sistema operacional, configurando o sistema de maneira pro-ativa para aumentar sua segurança e reduzir as chances de comprometimento. Ele também pode ser usado para assessorar no processo de Hardening do sistema, reportando e detalhando cada configuração de segurança usada pelo programa.
Ele auxilia o usuário/administrador do sistema a escolher exatamente como fortalece-lo. No modo de operação/hardening padrão, ele interage com o usuário fazendo perguntas , explicando cada tópico para, então, criar uma política baseada nas respostas do usuário. Logo em seguida, aplica-se as políticas no sistema. No modo de auditoria, ele cria um relatório para ensinar o usuário sobre as configurações de segurança disponíveis, além de informar quais configurações foram definidas/ajustadas.
Para ajudar na instalação e configuração disponibilizo o capitulo referente ao Bastille que criei para minha aula na Pós em Segurança da Informação da Unijorge.
Monitoramento Seguro
Após todos os ajustes necessários é hora de monitorar e manter o ambiente sempre disponível e seguro. Para isso recomendo a instalação das seguintes ferramentas:
Ossec HIDS
O OSSEC é um escalável, multi-plataforma, e open source HIDS. Ele integra análise de log, checagem de integridade de arquivos, politica centralizada, detecção de rootkit, alerta em tempo real e resposta automática.
Para facilitar a implentação postei 03 artigos com a instalação do Ossec Server, o Agente e a Interface Web.
Lenbrando que existe a opção da instalação local ( standalone ) permitindo que você seja alertado através do email.
Munin
O Munin é uma ferramenta de gerência de desempenho muito simples de instalar e configurar. Ela permite que você obtenha informações em tempo real de como anda o seu sistema.
Veja o post que disponibilizei sobre está excelente ferramenta.
Apticron
O Apticron é um script que alerta via email diariamente sobre novas atualizações no seu servidor, no alerta você encontra a lista de pacotes que precisam ser atualizados e todo o changelog.
Acesse os links 1 ou 2 para obter informações de como instalar e configurar está ferramenta bastante útil.
Conclusão
Finalizo aqui a 1a. parte da nossa saga. Peço desculpas aos leitores que querem mais informações técnicas sobre os assuntos abordados, só que o objetivo destes artigos é trazer recomendações e referências rápidas. Prometo trazer informações mais técnicas sobre os assuntos abordados em breve.
See also:
Infraestrutura para Aplicações Web Seguras parte 1 – Sistema
25 de Fevereiro de 2010, 0:00 - sem comentários aindaNeste artigo abordarei como montar/manter um servidor seguro. Uso o Debian GNU/Linux como sistema base mas todas as ferramentas e procedimentos listados servem para qualquer Unix-like.
Um dos grandes inimigos na implementação de qualquer solução é o tempo. Tudo tem que ser feito no menor tempo possível, com o menor gasto possível e com 0% de falha. Para respeitamos todas essas premissas as orientações apresentadas serão de rápida implementação e fácil manutenção.
Hardening
Trocando em miúdos o hardening é o fortalecimento de um sistema, serviço ou aplicação com o objetivo de minimizar ou dificultar a ação de hackers e crackers.
Iniciamos o hardening antes da instalação do sistema. Neste momento planejamos:
1 – Daemons/serviços que serão disponibilizados;
2 – Particionamento;
1 – Como o foco do nosso artigo são aplicações Web já sabemos que vamos trabalhar com o Quarteto Fantástico – Linux, Apache, PHP e MySQL ou Postgresql. De antemão já temos definidos os serviços que serão disponibilizados.
2 – Com isso definido recomendo que o diretório /var permaneca numa partição separada, lá ficarão os arquivos do site no /var/www e os arquivos do banco em /var/lib/mysql.
Dependendo da aplicação é possivel que o BD cresca rapidamente então recomendo separar a maior parte do disco para está partição e também recomendo a utilzação do sistema de arquivos XFS.
Quer saber porque recomendo o uso deste sistema de arquivos? CLIQUE AQUI
Feito todo o planejamento e com o S.O. instalado iniciaremos os procedimentos de pós-instalação:
1 – Atualizar todo o sistema. No caso do Debian recomendo antes de tudo ajustar o arquivo sources.list removendo todo o conteúdo e adicionado os seguintes repositórios:
deb http://ftp.us.debian.org/debian stable main contrib
deb http://security.debian.org/ stable/updates main contrib
Feito isso use o velho e bom aptitude update && aptitude safe-upgrade
2 – Remova todos os serviços desnecessários:
Recomendo a instalação do Nmap, assim de forma fácil e rápida descobriremos as portas abertas e os serviços em execução.
Exemplo:
nmap localhost
Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-25 00:53 BRT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000021s latency).
Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1
Not shown: 996 closed ports
PORT STATE SERVICE
xx/tcp open xxx
xxx/tcp open xxxx
xxx/tcp open xxx
xxx/tcp open xxxxxNmap done: 1 IP address (1 host up) scanned in 0.22 seconds
Você poderá remover a aplicação indesejada usando o comando aptitude remove [aplicação] ou apenas impedir que ela seja executada durante o boot, como por exemplo o MTA exim usando o comando update-rc.d -f exim remove. Dessa forma o exim permanecerá instalado, por ser dependência para outras aplicações, mas não será executado durante o boot.
3 – Use o sudo
Evite logar no sistema usando o usuário root e não deixe que membros da equipe façam o mesmo, assim é possivel fortalecer a auditoria de autenticação, instalação e remoção de pacotes e ações que podem danificar o sistema.
4 – Bloqueie o usuário root
Use o comando usermod -L root para bloquear o login usando o usuário root.
5 – Mude a porta padrão do ssh e bloqueie o login do usuário root
Segurança por obscuridade é uma das técnicas utilizadas para dificultar o footprinting, e o port scanning do seu sistema.
Para fazer estas modificações acesse o arquivo /etc/ssh/sshd_config e altere as seguintes linhas:
Port 22
para por exemplo
Port 3000
PermitRootLogin yes
para
PermitRootLogin no
Refinando o processo de Hardening
Algumas ferramentas podem ser utilizadas para ajudar no processo de hardening do sistema. Recomendo fortemente o uso das seguintes ferramentas:
Hntool
Este é um novo projeto do meu amigo sergipano Hugo Doria que vem crescendo bem rápido e vem contando com novos contribuidores diariamente.
O objetivo desta ferramenta é facilitar a vida do Sysadmin informando as melhorias necessárias para fortalecer os serviços e o próprio sistema.
Como ele é totalmente modular fica muito fácil contribuir. Se você quer aprender a programar em Python essa é hora.
Contribua com o desenvolvimento do Hntool. A comunidade de segurança brasileira agradece.
Bastille
O Bastille protege o sistema operacional, configurando o sistema de maneira pro-ativa para aumentar sua segurança e reduzir as chances de comprometimento. Ele também pode ser usado para assessorar no processo de Hardening do sistema, reportando e detalhando cada configuração de segurança usada pelo programa.
Ele auxilia o usuário/administrador do sistema a escolher exatamente como fortalece-lo. No modo de operação/hardening padrão, ele interage com o usuário fazendo perguntas , explicando cada tópico para, então, criar uma política baseada nas respostas do usuário. Logo em seguida, aplica-se as políticas no sistema. No modo de auditoria, ele cria um relatório para ensinar o usuário sobre as configurações de segurança disponíveis, além de informar quais configurações foram definidas/ajustadas.
Para ajudar na instalação e configuração disponibilizo o capitulo referente ao Bastille que criei para minha aula na Pós em Segurança da Informação da Unijorge.
Monitoramento Seguro
Após todos os ajustes necessários é hora de monitorar e manter o ambiente sempre disponível e seguro. Para isso recomendo a instalação das seguintes ferramentas:
Ossec HIDS
O OSSEC é um escalável, multi-plataforma, e open source HIDS. Ele integra análise de log, checagem de integridade de arquivos, politica centralizada, detecção de rootkit, alerta em tempo real e resposta automática.
Para facilitar a implentação postei 03 artigos com a instalação do Ossec Server, o Agente e a Interface Web.
Lenbrando que existe a opção da instalação local ( standalone ) permitindo que você seja alertado através do email.
Munin
O Munin é uma ferramenta de gerência de desempenho muito simples de instalar e configurar. Ela permite que você obtenha informações em tempo real de como anda o seu sistema.
Veja o post que disponibilizei sobre está excelente ferramenta.
Apticron
O Apticron é um script que alerta via email diariamente sobre novas atualizações no seu servidor, no alerta você encontra a lista de pacotes que precisam ser atualizados e todo o changelog.
Acesse os links 1 ou 2 para obter informações de como instalar e configurar está ferramenta bastante útil.
Conclusão
Finalizo aqui a 1a. parte da nossa saga. Peço desculpas aos leitores que querem mais informações técnicas sobre os assuntos abordados, só que o objetivo destes artigos é trazer recomendações e referências rápidas. Prometo trazer informações mais técnicas sobre os assuntos abordados em breve.
See also:
Infraestrutura para Aplicações Web Seguras – Motivação
25 de Fevereiro de 2010, 0:00 - sem comentários aindaA Web é a porta de entrada de toda as empresas. Quando você deseja obter informações sobre uma cooporação ou um produto, intuitivamente você acessa o Google e busca o site da empresa/produto desejado.
Quem não disponibiliza informações sobre seus produtos/serviços na Internet está fadado ao fracasso, isso significa que a cada dia mais e mais administradores estão montando suas infra-estruturas com o único objetivo.
DISPONIBILIZAR INFORMAÇÕES NA INTERNET.
Para confirmar a observação acima leia a entrevista feita pela Information Week com o CIO da Casas Bahia Frederico Wanderley.
O grande questão é E A SEGURANÇA? Será que ao pensar em disponibilizar suas informações na internet estas cooporações se preocupam se elas estão disponíveis, integras e confidenciais?
Será que o administrador da rede está preocupado em fortalecer o sistema operacional e os serviços? Será que o desenvolvedor do site está preocupado que sua aplicação seja escrita obdecendo criterios básicos de segurança?
Vocês poderiam me responder antes de clicar nos links abaixo. Qual a relação existente entre Google, Microsoft, HSBC e Sony?
Resposta: Todas elas sofreram defacement. Todas elas tiveram sua porta de entrada invadidas e usavam Linux.
Antes que venham uma avalache de trolls, isso não significa que o Linux é inseguro pois todas as aplicações foram atacadas através SQL Injection .
Nesta série de 3 artigos quero ajudar meus irmãos SysAdmins passando uma série de referências de como manter uma infraestrutura para aplicações Web segura. Só que o SysAdmin não é nenhum mestre dos magos pois se o sistema estiver todo reforçado e a aplicação for desenvolvida “nas coxas” seu trabalho foi jogado no lixo.
Na 1a parte abordaremos como preparar o sistema básico ( S.O. ) seguindo boas práticas simples e efetivas. Na 2a. parte abordaremos como montar e manter um SGBD de forma segura e para finalizar abordaremos como desenvolver e testar aplicações web com foco em segurança.
OBS: O objetivo dessa série de artigos não é virar um tratado de segurança de aplicações web. A intenção é compartilhar minha experiência e aprender com a experiência dos leitores. Como não sou DBA, nem desenvolvedor posso me enganar em alguns destes assuntos e peço a toda a comunidade que contribua tornando estes artigos os mais completos possíveis.