Organizações capazes de desenvolver seus próprios sistemas com certeza possuem uma vantagem competitiva com relação às demais. Entretanto, se medidas de segurança não forem adotadas, o processo de desenvolvimento pode trazer mais danos do que benefícios.

Objetivando a proteção tanto do projeto que está sendo desenvolvido, como das bases de dados que eventualmente interagem com o novo sistema, alguns requisitos de segurança no desenvolvimento de sistemas precisam ser considerados.

SEGREGAÇÃO DE AMBIENTES

Para evitar alterações indesejadas em arquivos ou sistemas, além de violações de confidencialidade que poderiam acarretar em danos ao negócio, o ideal é que toda organização que desenvolva seus próprios sistemas conte com três ambientes computacionais distintos.

O primeiro deles é o ambiente de desenvolvimento, responsável pela geração dos códigos dos sistemas. O segundo é o de homologação e testes, onde o sistema recém-desenvolvido precisará ser aprovado para que se chegue ao terceiro ambiente, o de produção, quando de fato o sistema passará a ser utilizado para a realização de atividades relacionadas ao negócio.

Uma segregação lógica e física dos ambientes vai impedir que pessoas responsáveis pelo desenvolvimento e testes dos sistemas tenham acesso aos dados da produção. Isso impede não só que os dados da produção sejam comprometidos por falhas nos sistemas, como impede também que essas informações, que são vitais para as atividades do negócio, sejam acessadas por funcionários não autorizados, deixando a organização exposta a fraudes. Quem não gostaria de acessar os dados da folha de pagamentos para aumentar o seu próprio salário? Por isso mesmo, e de forma análoga, quem trabalha no ambiente de produção não deve ter acesso aos códigos-fontes. E o acesso a um ambiente precisa ser sempre acompanhado de um registro de auditoria.

Em algumas situações, pode ser desejável que um mesmo usuário tenha autorização de acesso para mais de um ambiente computacional, o que pode ocasionar em distrações e erros por parte do usuário, uma vez que os ambientes costumam ser muito parecidos. Para casos assim, é conveniente que o nome de usuário e senha não sejam os mesmos para todos os ambientes. Além disso, o uso de telas diferenciadas para cada ambiente pode ajudar a prevenir enganos.

METODOLOGIA DE DESENVOLVIMENTO

É imprescindível o uso de alguma metodologia que oriente a empresa no desenvolvimento de sistemas, sob o risco de serem tomadas decisões erradas, gerando custos que poderiam ter sido evitados.

Uma boa metodologia para desenvolvimento de sistemas deve fornecer primeiramente padrões para que seja possível à organização especificar os requisitos do sistema (incluindo aí os de segurança), identificar os recursos necessários para o desenvolvimento e fazer a escolha por um banco de dados e uma linguagem de programação.

Em seguida, a metodologia, que deve se tornar de conhecimento de todos os desenvolvedores do projeto, deve abordar assuntos como a segregação de ambientes computacionais, interfaces entre sistemas, boas práticas de codificação (como a modularidade) e padrões para a documentação, que precisa ser suficientemente adequada para que a substituição de um desenvolvedor por outro no meio do projeto se faça sem maiores problemas.

Por fim, seu conteúdo deve tratar de testes, homologação, avaliação de resultados e treinamento.

Isso é o mínimo que se espera de uma metodologia para desenvolvimento de sistemas. E seja lá qual for a metodologia escolhida, ela não deve impedir que ações de segurança sejam adotadas no processo de desenvolvimento.

Com o objetivo de garantir que o sistema que está sendo desenvolvido está de acordo com o que se espera dele, é essencial que os usuários sejam consultados frequentemente.

DESENVOLVIMENTO TERCEIRIZADO

Caso a organização decida não desenvolver seus próprios sistemas, deixando que uma empresa terceirizada realize o serviço, ainda assim haverá requisitos de segurança a serem cumpridos.

Ambas as partes devem chegar a um acordo quanto ao licenciamento, código-fonte e direitos de propriedade intelectual. Questões de eficiência e eficácia devem estar estabelecidas no contrato, que também deve tratar da concessão dos direitos de acesso a auditorias especializadas responsáveis pela certificação da qualidade do sistema desenvolvido ou ainda em fase de desenvolvimento e da não existência de códigos maliciosos.

REALIZAÇÃO DE TESTES

Para verificar se o sistema desenvolvido está funcionando de acordo com o que foi especificado ou ainda para evitar que ele fique indisponível devido a incompatibilidades com outros sistemas, sobrecargas ou erros de programação, ele precisa ser testado e aprovado formalmente antes de ser utilizado em ambiente de produção.

É importante que o ambiente de testes seja o mais parecido possível com o de produção, embora, por medidas de segurança, os dados críticos da produção, como informações pessoais, não devem fazer parte do ambiente de testes.

Testes em ambiente de produção, só em casos de raríssimas exceções e com autorização formal dada pelo gestor da informação.

GERENCIAMENTO DE MUDANÇAS

Quando mudanças significativas são realizadas em um sistema, ele corre o risco de ser comprometido e, por isso, antes de se fazer qualquer alteração, é recomendável avaliar os riscos, analisar os impactos que serão provocados pelas mudanças e ainda fazer um levantamento dos controles de segurança que serão necessários nessa operação.

As mudanças, uma vez autorizadas, devem ser realizadas sob um controle de versão adequado, tanto dos códigos-fontes quanto da documentação, que precisará ser atualizada. O uso, por engano, de versões desatualizadas, poderia trazer uma série de problemas.

Testadas e aprovadas, as mudanças devem ser implementadas em horário apropriado para que não atrapalhem o transcorrer normal das atividades de negócio. E trilhas de auditoria devem registrar toda e qualquer mudança no ambiente de produção.


MACHADO, Marcel Jacques. Segurança da Informação: uma Visão Geral sobre as Soluções Adotadas em Ambientes Organizacionais. Curitiba: UFPR, 2012. Trabalho de Graduação – Bacharelado em Ciência da Computação, Universidade Federal do Paraná, Curitiba, 2012.