
Eu tenho um aplicativo de desktop conectado diretamente ao SQL Server, vejo muitas postagens dizendo que você não deve expor o SQL Server diretamente à Internet, mas ninguém diz por quê. Alguns antecedentes:
- Escalabilidade, balanceamento de carga e outros critérios de desempenho não são um problema para o meu cenário
- Meu aplicativo precisa funcionar localmente (com SQL Server local) ou com um repositório remoto para que vários usuários possam compartilhar dados (SQL Server hospedado, que é minha pergunta)
Percebi que a conexão com o SQL Azure se parece muito com um SQL Server remoto padrão (http://www.windowsazure.com/en-us/develop/net/how-to-guides/sql-database/#using-sql-server)
Entendo que abrir qualquer porta é uma vulnerabilidade herdada, mas esse não pode ser o único motivo. Devo estar faltando alguma coisa, mas não tenho certeza do quê?
Qual é uma alternativa real além de implantar a metade inferior do meu aplicativo como um serviço web?
Responder1
Existem vários motivos para isso, mas o mais relevante é que alguém que não tem experiência em SQL Server e segurança de rede provavelmente cometerá um ou mais erros comuns.
Por exemplo, você pode usar o login SQL "sa" para se conectar, que é a conta sysadmin padrão e tem controle total sobre o servidor SQL.
Ou você pode estar usando outro login do SQL Server, que possui uma senha fraca, para que um invasor possa tentar um ataque de força bruta para elevar seus privilégios.
Ou você pode ter deixado alguma conta de usuário padrão somente leitura habilitada (para este ou qualquer outro aplicativo), que será ativamente verificada por invasores e scripts de exploração, para que possam recuperar dados de seu banco de dados.
Algumas boas medidas para se proteger dos ataques remotos mais básicos:
- limite a conectividade aos IPs e clientes em que você confia
- use a autenticação integrada do Windows sempre que possível e desative todos os logins com senhas fracas
- se você precisar usar a autenticação do SQL Server, renomeie/desative o login sa e defina senhas fortes (>10 caracteres) em todos os logins