Programação Segura

A segurança de um sistema previne que usuários maliciosos atinjam seus objetivos através de acessos não autorizados ou uso não autorizado de computadores e redes (Howard 1997). Este artigo irá mostrar algumas boas práticas em programação no quesito segurança.

[ Hits: 9.541 ]

Por: Bruno Cunha em 28/11/2016


Controlando o acesso



Determinar se um diretório é seguro ou não

Se sua aplicação precisa armazenar dados confidenciais em uma pasta, precisamos saber se estamos armazenando em uma pasta que realmente é segura, e só pode ser acessada por usuários permitidos.

Antes de armazenar dados confidenciais em um diretório, devemos validar as permissões em toda a árvore de diretórios, e não apenas no diretório que será armazenado. Devemos validar toda a arvore porque, por exemplo: se vou armazenar os dados no diretório home/user/coisa/dadosConf e se o diretório home/user/coisa é editável por algum outro usuário, ele poderia renomear o diretório dadosConf e quebrar todo o programa e os dados não estarão mais accessíveis ao programa.

Uma maneira de prevenir este problema é utilizar a função spc_is_safedir( ) que verifica toda a arvore do diretório e valida que cada pasta contem acesso de escrita apenas para o superuser. A função retorna -1 se houve algum erro, 0 se o diretório não é seguro e 1 se o diretório é seguro.

Apagando arquivos com segurança

Se em sua aplicação, um dado que não pode ser recuperado por conter informações confidenciais, deve ser removido com segurança para que ele não possa ser restaurado com ferramentas que podem recuperá-los até mesmo quando deletados permanentemente. Para resolver este problema devemos antes de apagar o arquivo, adicionar dados randômicos a ele e então após isto deleta-lo.

Quando deletamos um arquivo do sistema, ele libera o espaço da memória mas ainda podemos recuperar o arquivo, então por isso dados sem sentido devem ser adicionados antes da deleção. O Linux disponibiliza uma ferramenta para fazer isto, o shred, este comando adiciona dados aleatórios ao arquivo selecionado.

Removendo arquivos com segurança

Se em sua aplicação, um dado que não pode ser recuperado por conter informações confidenciais, deve ser removido com segurança para que ele não possa ser restaurado com ferramentas que podem recuperá-los até mesmo quando deletados permanentemente. A maioria das operações de remoção de arquivos não fazem nada com os dados, apenas liberam espaço na memória.

Para resolver este problema, em seu programa uma lógica poderia ser adicionada para que antes do arquivo ser removido, preencha ele com dados aleatórios, geralmente essas operações preenchem todo o arquivo com zeros. O Linux oferece alguns comandos para remover um arquivo com mais segurança, por exemplo o "shred", este comando destrói o conteúdo do arquivo de uma maneira que fica praticamente impossível de ser recuperado, até mesmo com ferramentas avançadas.

Exemplo de um arquivo antes do comando shred e depois:
Linux: Programação Segura

Conclusão

Apenas algumas pequenas boas práticas foram apresentadas aqui neste artigo. Hoje em dia possuímos milhares de diferentes formas para se proteger de ameaças em nosso programa, mas também cada vez mais vemos usuários maliciosos tentando invadir o sistema das mais diferentes formas possíveis, por isso a segurança de um programa deve ser levada a sério quando se tem dados sensíveis envolvidos.

Bibliografia

(Howard 1997) Howard, J. D. An Analysis of Security Incidents on the Internet 1989-1995. PhD Diss., Carnegie Mellon

Robert C. Seacord Secure Coding in C and C++ Second Edition 2013

Matt Messier, John Viega Secure Programming Cookbook for C and C++ 2003

Página anterior    

Páginas do artigo
   1. Introdução
   2. Controlando o acesso
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Como prevenir o Buffer Overflow

Brute force de senhas no Linux com loncrack

Biometria digital - Sistemas AFIS em Gnu/Linux

Tratamento de exceções na linguagem C

Aprendendo a utilizar o GNU Debugger (parte 1)

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts