Está en la página 1de 2

Coluna do Kurt

COLUNA

Programao
segura
Nosso especialista de segurana fala sobre os softwares
para auditar e garantir a segurana de seus programas.

m dos temas consistentes no livro Coders at


Work, de Peter Seibel, : Como ser um programador melhor? Essa ideia me muito interessante porque, no mundo da segurana, percebo as
pessoas cometendo sempre os mesmos erros.
Depois de certo tempo, de se esperar que as pessoas aprendessem a criar um arquivo temporrio com
segurana. Que ao menos aprendessem a criar, acessar
e apagar buffers de memria de forma segura; no entanto, no o caso de muitos programadores (incluindo
alguns muito bons). Portanto, a resposta prestar ateno s pessoas que escrevem cdigos seguros, copi-las e
aprender com elas. Mas como fazer isso, principalmente
quando no se tem tempo nem verba?
Muitos programadores gostam de compartilhar, e a
beleza do conhecimento e da informao que podemos transmitir o que sabemos sem perder nada. Felizmente, alguns programadores se deram ao trabalho de
organizar seu conhecimento e sabedoria em pacotes de
softwares; de fato, o nmero de bibliotecas disponveis
hoje impressionante (graas a essas pessoas, poucos
hoje precisaro escrever um cliente HTTP ou um parser HTML). Portanto, qual o programa necessrio para
desenvolver softwares melhores e mais seguros?

Valgrind

O Valgrind provavelmente a ferramenta de cdigo


aberto (licena GPL) mais madura para anlise de
binrios e de cdigo-fonte, no apenas com relao
segurana, mas tambm ao desempenho (os dois costumam caminhar juntos). Provavelmente o componente
mais eficaz para detectar e solucionar problemas de
segurana o memcheck.
O mdulo memcheck encontra posies de memria
que estejam sendo acessadas incorretamente, valores no
inicializados que estejam sendo usados de modo perigoso,
vazamentos de memria (sempre um potencial problema
16

de negao de servio) e uma liberao ruim de blocos


do heap (frees duplos ou desencontrados); alm disso,
ele pode detectar quando o programa informa blocos de
memria sobrepostos para origem e destino.

Instalao

A instalao trivial:
yum install valgrind

ou
apt-get install valgrind

A compilao do cdigo-fonte tambm fcil:


$
$
$
$
$
#

cd valgrind
./autogen.sh
./configure --prefix=/path
make
su make install

Uso

No uso do Valgrind, as coisas se complicam um pouco. O programa gera uma sada volumosa. Algumas so
falsos positivos (ou fatos no to perigosos) e separar o
joio do trigo pode ser bem trabalhoso. Isso nos remete
diretamente ao Debian Bug Report Log 363516.
De forma resumida, nesse caso famoso o Valgrind avisava sobre o uso de memria no inicializada e, em vez de
usar um arquivo de supresso (para fazer o Valgrind parar
de reclamar) ou simplesmente examinar atentamente o
cdigo, o desenvolvedor optou simplesmente por comentar
as linhas culpadas. Infelizmente, isso resultou em um pool
de entropia previsvel que acabou resultando em chaves
OpenSSL totalmente previsveis no Debian. Como acontece com vrias ferramentas poderosas, se elas forem usadas

http://www.linuxmagazine.com.br

Insegurana | COLUNA

sem a total compreenso, as consequncias podem ser negativas. Dois excelentes vdeos no SecurityTube mostram
os princpios do uso do Valgrind no Linux.
Se voc, assim como eu, precisa programar, mas no
confia muito nas suas habilidades com relao segurana e nem conhece muito bem programas como o
Valgrind, o que voc pode fazer?

Linguagem mais segura

H uma soluo realmente simples que d conta da


maioria dos problemas relacionados ao gerenciamento
de memria, tais como alocao correta (uso de memria
no inicializada etc.), uso seguro (estouro e underflow de
buffer etc.) e garantia de que a memria seja destruda
corretamente (free duplo, vazamentos de memria etc.):
use uma linguagem de programao com gerenciamento
de memria embutido (Python, Java, Perl etc.).
Com elas, no necessrio se preocupar com o
comprimento de uma string ou de um vetor ao cri-los.
Simplesmente, crie uma string ou vetor e jogue os dados
neles. O buffer se expande conforme necessrio e, ao
l-lo, no ser possvel ir alm do fim da string, pois o
interpretador do programa simplesmente retornar um
erro informando que no h mais dados ou itens para
leitura (em vez de ler reas aleatrias da memria). A
desvantagem, logicamente, que alguns problemas e
programas no se adaptam bem a essas linguagens (quase todas as implementaes dessas linguagens so em
C, que o pesadelo do gerenciamento de memria).

Auditoria de cdigo: PyChecker

Alm disso, por ser um fiel usurio do Unix, uso um


programa simples e eficiente para verificao de cdigo Python, o PyChecker. Trata-se de uma ferramenta
para conferir cdigo-fonte em Python. Embora o interpretador Python seja capaz de detectar vrios erros de
programao (e ento levantar uma exceo, imprimir
um erro e terminar o programa), alguns deslizes acabam escapando. O uso de uma varivel global em uma
classe, em vez de uma varivel self (que existe somente
naquela instncia da classe e , portanto, muito mais
segura em um ambiente com threads), pode gerar vrios tipos de problemas de difcil soluo. No entanto,
o PyChecker consegue detect-los e passar a informao imediatamente.
Instalar o PyChecker fcil:

$
$
$
$

wget http://download.site/pychecker-0.8.18.tar.gz
tar -xf pychecker-0.8.18.tar.gz
cd pychecker-0.8.18
python setup.py install

Aprenda programao segura

Mesmo com tudo isso, ainda no chegamos questo


da educao. Para uma programao segura necessrio entender, ou pelo menos conhecer, os vrios tipos
de falhas que comprometem essa questo. Desde as
questes mais simples, como os vrios tipos de estouros de buffer, at o esotrico Use of a Non-reentrant
Function in an Unsynchronized Context.
O projeto Common Weakness Enumeration (CWE
Enumerao das Falhas Comuns) foi desenvolvido
exatamente para isso. Ele organizou uma lista completa
das falhas de segurana dos softwares, com descrio,
informaes sobre as solues e exemplos das falhas.
Algumas das entradas do CWE possuem exemplos de
cdigos e, infelizmente, a maioria das entradas necessita de mais informaes sobre a soluo ou preveno
do problema. Mas, como j foi dito por algum, Agora
voc sabe, e saber j meio caminho andado.
O prximo passo, logicamente, aprender o comportamento e o mecanismo da programao segura. Apesar
das dezenas de livros disponveis atualmente, alguns muito bons, prefiro os recursos online. Um dos melhores e
mais abrangentes documentos o Secure Programming
for Linux and Unix HOWTO de David A. Wheeler.
Outro projeto que tenta melhorar a segurana dos
softwares o Open Web Application Security Project
(OWASP Projeto Aberto de Segurana de Aplicativos
Web). Apesar de se dedicar a aplicativos web, a maioria
do contedo dos guias de desenvolvimento, de reviso
de cdigo e de teste pode ser aplicado a softwares no
baseados na web. O mais importante que eles incluem
ferramentas de verdade e documentao especfica
para a programao segura, alm do WebGoat, um
aplicativo propositalmente inseguro que ensina atravs
de erros alheios.

Concluso

Programao segura no complicada. Ela basicamente


requer disciplina, o que significa enfrentar as dificuldades,
compreender o que as mudanas no cdigo iro gerar
(principalmente se o cdigo original no for seu). n

$ easy_install PyChecker

Caso isso no funcione, possvel instal-lo manualmente baixando o tarball do PyChecker, descompactando-o e executando a instalao manualmente:

Linux Magazine #63 | Fevereiro de 2010

Kurt Seifried consultor de segurana da informao especializado


em redes e Linux desde 1996. Ele frequentemente se pergunta como
a tecnologia funciona em grande escala mas costuma falhar em
pequena escala.

17

También podría gustarte