Segurança no desenvolvimento de sofware

A qualidade de software pode ser medida de várias formas. Entre as informações de qualidade, a NBR ISO/IEC 9126-1 destaca diversos itens, entre eles o de confiabilidade, que está relacionado a maturidade, tolerância a falha e recuperabilidade. Além disso, há no item 6.1.4 Segurança da Informação, que é a capacidade do produto de software de proteger informações e dados, de forma que pessoas ou sistemas não autorizados não possam lê-los nem modificá-los e que não seja negado o acesso às pessoas ou sistemas autorizados. Estes itens fazem parte não apenas do desenvolvimento de software, mas também da segurança da informação como um todo.

A segurança da informação é essencial para as organizações. O Brasil, segundo o IPEA, é um dos países mais vulneráveis do mundo, por tanto, é necessária a implementação de processos de segurança e boas práticas de desenvolvimento com foco em segurança. A NBR ISO/IEC 27002 é um guia para as práticas de segurança, servindo tanto para o desenvolvimento como para o administrador de redes. A norma define segurança como sendo o conjunto de preservação da confidencialidade, integridade e disponibilidade, além disso, especialistas adicionam a autenticidade, formando a sigla ACID.

O objetivo é proteger um dos ativos mais importantes da organização, a informação, e para isso, é importante saber o valor da informação, para determinar o investimento em tempo e recurso para proteger tal informação. Mas para os desenvolvedores, é sempre importante desenvolver focado na segurança, evitando-se assim que incidentes de segurança ocorram.

“Um incidente de segurança da informação é indicado por um simples ou por uma série de eventos de segurança da informação indesejados ou inesperados, que tenham uma grande probabilidade de comprometer as operações do negócio e ameaçar a segurança da informação” ABNT NBR ISO/IEC 27002, pag. 2.

Para evitar os incidentes, devemos desenvolver buscando atender aos critérios dos pilares da segurança, para isso, vamos entender o que significa cada um dos pilares:

Segundo Alex:

Confidencialidade: É a garantia de que a informação é acessível somente por pessoas autorizadas;

Integridade: É a salvaguarda da exatidão da informação e dos métodos de processamento;

Disponibilidade: É a garantia de que os usuários autorizados obtenham acesso à informação e aos ativos correspondentes sempre que necessário;

Além dos três citados, temos a autenticidade, que completa a confidencialidade, visa estabelecer a validade da transmissão, da mensagem e do seu remetente. O objetivo é que o destinatário possa comprovar a origem e autoria de um determinado documento.

Atendendo os pilares dentro da aplicação

Mesmo sabendo quais são os pilares, a preocupação agora é como desenvolver sistema em conformidade com as normas de segurança?

Vamos iniciar pela disponibilidade, ou seja, a aplicação deve estar disponível. Isto quer dizer que se a empresa trabalha 24 horas, o sistema estará disponível 24 horas. Parte desta disponibilidade está vinculada a rede, servidores, etc., mas podemos utilizar também sistemas em nuvem, de forma que a preocupação seja apenas ter Internet no momento do acesso.

Entre as soluções mundiais de nuvem mais conhecidas temos a Amazon e a mais nova solução Livre, com recursos gratuitos, disponibilizada pela RedHat, a OpenShift.

Outra solução é a implementação de cluster´s Java, neste artigo, é possível aprender como configurar um cluster Tomcat: Configurando um Cluster de Tomcat com Balanceamento de Carga. Além disso, temos no artigo de Abraham como montar cluster JEE: J2EE clustering.

Claro que sempre é necessário analisar os pontos positivos de cada solução, manter a aplicação em clusters dentro da empresa ou em nuvem?

Agora que já temos a disponibilidade, é necessário ampliar a integridade.

Esta implementação, pode ser criada em diversos pontos da aplicação, entre os locais temos a integridade dos dados para a persistência, que pode ser utilizado o Beans Validation. No artigo Beans Validation - Solucionando problemas de integridade dos dados persistentes da Francieli, é apresentado como utilizar este recurso.

Além disso, é possível a implementação de recursos de validação de integridade no banco de dados e através de regras nos métodos.

Passado a integridade e a disponibilidade, vamos ao próximo pilar a confiabilidade, que serve para garantir que apenas pessoas autorizadas acessem informações. Isto é possível criando sistemas de login. O Thiago apresenta algumas formas de criar login em Java e também há a possibilidade de utilização do Spring Security que permite a customização da autenticidade e controle de acesso. Acesse:

Por último, mas não menos importante a autenticidade, para isso, é possível utilizar certificados e assinaturas digitais, neste artigo é possível ver a implementação de certificados digitais (Autenticação de Usuários com Certificados Digitais, Certificação Digital com Java - Revista Java Magazine 110 ) e para a assinatura digital veja ASSINATURA E VALIDAÇÃO DIGITAL DE DOCUMENTOS EM JAVA.

Conclusão

Vimos que segurança é importante e que o Brasil necessita evoluir muito no quesito implementação e gestão de segurança, foi apresentado então como atender aos pilares da segurança com o objetivo de melhorar as segurança da informação.

Referência

  • ABNT NBR ISO/IEC 27002.