Press "Enter" to skip to content

Infraestrutura para Aplicações Web Seguras parte 2 – SGBDs ( Updated )

O 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

* SQLHack – Secure your 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

One Comment

  1. Raul Libório Raul Libório March 8, 2010

    Mestre, vi que o comando /usr/bin/mysql_secure_installation já ajuda bastante a implementar um pouco mais de segurança ao MySQL. Adicionando estas outras dicas que ele(o comando) não atende, vai otimizar ainda mais!
    Valeu!

Comments are closed.