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
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
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!