Programa desktop com socket - proteção contra ataques

4 respostas
A

Amigos, em um programa java desktop que se comunica com um servidor java utilizando socket, como podemos minimizar o risco de um ataque de negaçao do serviço ou algum outro possível ataque?

4 Respostas

ViniGodoy

Ataques de negação de serviço, especialmente os distribuídos, são indefensáveis. Não há nada que sua aplicação possa fazer, pois eles congestionam a rede antes mesmo dos pacotes chegarem à aplicação.

Quanto a “outros ataques”:

  1. Use certificados digitais para garantir a autenticidade do seu host;
  2. Use mecanismos de criptografia público/privada para evitar o ataque do man-in-the-middle;
  3. Certifique-se das mensagens terem timestamp para evitar ataques de record-replay;
  4. Use PreparedStatement e não Statement para evitar ataques de SQL injection;
  5. Mantenha senhas criptografadas em seu banco para evitar ataques de pessoal interno;
  6. Faça seu sistema negar todos os logins por um período “longo” de tempo (1 minuto, ou 30 segundos, por exemplo), caso um usuário erre a senha algumas vezes. Isso evita ataques por força bruta;
  7. Exija que seu usuário cadastre uma senha complexa (letras, números e símbolos). Isso evita ataques do dicionário. É uma boa solicitar que ele renove a senha de vez enquando também;
  8. Não envie links por e-mail sem que os usuários solicitem, para evitar phishing. Deixe bastante claro para o usuário essa política;
  9. Procure usar bons protocolos de criptografia, de preferência que tenham código fonte aberto. Certifique-se de negar protocolos fracos, para evitar ataques.
  10. Leia os livros do Bruce Schreiner, livros de segurança da informação e engenharia social.

Hoje os protocolos clássicos (como HTTPS) já validam os passos 1 até 3, caso você tenha um certificado digital. Por isso, é uma boa usar APIs com implementações desse protocolo.

A

Ataques de negação de serviço, especialmente os distribuídos, são indefensáveis. Não há nada que sua aplicação possa fazer, pois eles congestionam a rede antes mesmo dos pacotes chegarem à aplicação.

Quanto a “outros ataques”:

  1. Use certificados digitais para garantir a autenticidade do seu host;
  2. Use mecanismos de criptografia público/privada para evitar o ataque do man-in-the-middle;
  3. Certifique-se das mensagens terem timestamp para evitar ataques de record-replay;
  4. Use PreparedStatement e não Statement para evitar ataques de SQL injection;
  5. Mantenha senhas criptografadas em seu banco para evitar ataques de pessoal interno;
  6. Faça seu sistema negar todos os logins por um período “longo” de tempo (1 minuto, ou 30 segundos, por exemplo), caso um usuário erre a senha algumas vezes. Isso evita ataques por força bruta;
  7. Exija que seu usuário cadastre uma senha complexa (letras, números e símbolos). Isso evita ataques do dicionário. É uma boa solicitar que ele renove a senha de vez enquando também;
  8. Não envie links por e-mail sem que os usuários solicitem, para evitar phishing. Deixe bastante claro para o usuário essa política;
  9. Procure usar bons protocolos de criptografia, de preferência que tenham código fonte aberto. Certifique-se de negar protocolos fracos, para evitar ataques.
  10. Leia os livros do Bruce Schreiner, livros de segurança da informação e engenharia social.

Hoje os protocolos clássicos (como HTTPS) já validam os passos 1 até 3, caso você tenha um certificado digital. Por isso, é uma boa usar APIs com implementações desse protocolo.

Olá, Vini!

São muitos detalhes ligados à segurança, né? E, de fato, creio que não poderia ser diferente.
Corrija-me se eu estiver enganado, mas parece-me que alguns dos itens que você citou vão além da aplicação java, devendo ser providos por ferramentas dedicadas à segurança.
Os livros do Bruce Schreiner possuem tradução para o nosso português?
Você consegue indicar algum livro de java que trate do assunto segurança?
Já estou começando a perceber que terei que ler muito a respeito de segurança.

Você consegue detalhar um pouco os itens 1, 2 e 3?

Abraço.

ViniGodoy

andredf:
São muitos detalhes ligados à segurança, né? E, de fato, creio que não poderia ser diferente.
Corrija-me se eu estiver enganado, mas parece-me que alguns dos itens que você citou vão além da aplicação java, devendo ser providos por ferramentas dedicadas à segurança.

Sim. Alguns envolvem você forçar o usuário a adotar postura seguras ( 7, 8 ).
Outros você precisa de entidades externas (como o item 1).
E alguns envolvem criar segurança inclusive contra seu pessoal interno, ou contra alguém que chegue armado no seu escritório exigindo seu HD (item 5).

Sim. Procure por “Criptografia Aplicada” e “Segredos e mentiras”.



E aqui tem material online sobre a API de criptografia do Java:
http://docs.oracle.com/javase/1.4.2/docs/guide/security/CryptoSpec.html

Leia aqui sobre SSL:
http://www.gta.ufrj.br/ensino/eel879/trabalhos_vf_2008_2/leonardo/Definies.html
http://www.ourshop.com/resources/ssl.html

d34d_d3v1l

Falou tudo Vini.
:slight_smile:

Criado 14 de julho de 2012
Ultima resposta 14 de jul. de 2012
Respostas 4
Participantes 3