Você está na página 1de 32

PROGRAMAO

SEGURA
Segurana da Informao
Leonardo Viena
Instituto Federal de Braslia
Programao Segura
Motivao
Principais Bugs de Segurana
Recursos para conteno
Motivao
A maioria dos profissionais de Sistemas de Informao
acredita que segurana responsabilidade exclusiva
dos profissionais de infraestrutura de redes e
administrao de sistemas
A maioria dos gerentes de Tecnologia da Informao
acredita que a simples instalao de firewalls, IDS, anti-
vrus e outras ferramentas automatizadas garante que
suas intranets e extranets estejam imunes a ataques.
Mitos e Fatos
O firewall fechou das as portas de acesso minha rede,
portanto no h como invadir, a no ser que o prprio
firewall seja hackeado mas neste caso eu tenho o IDS
para me prevenir
Um acesso porta 80 (web) do site pblico inseriu
informaes no guest book autorizado pelo firewall e
dentro do trfego normal para o IDS que mais tarde
provocaram adulteraes nos dados no banco de
dados de vendas.
Como Construir Uma Aplicao Segura?
Critique todas as entradas
Estruture corretamente os programas
Chame recursos externos com cuidado
Devolva apenas as informaes necessrias
Minimize as permisses necessrias
Seja paranoico!
A regra clara
Nunca busque identificar os usos incorretos (ou
maliciosos) de uma aplicao, mas sim garanta que ela
s possa ser utilizada nica e exclusivamente do modo
correto
Sempre ser possvel bolar uma situao de uso
incorreta que o desenvolvedor no se lembrou de
verificar
Cuidados com a Web
O usurio no est dentro do universo de pessoas
conhecidas e treinadas pela empresa
No se pode garantir a rastreabilidade de um usurio na
Internet
muito fcil escrever um programa que simule um
usurio, mas envie requisies impossveis de serem
digitadas ou clicadas por um usurio em seu navegador
A facilidade de programao permite a busca aleatria de
grande quantidade de alvos fceis em pouco tempo
Buffer Overflows
Ocorrem quando um bloco de dados copiado para uma
rea de memria muito pequena para recebe-la.
Ou seja, quando um programa no verifica limites de
tamanho dos dados recebidos de alguma fonte
Pode simplesmente derrubar um programa, ou pode
inserir cdigo executvel em sua rea de memria
Afeta especialmente cdigo compilado para linguagem de
mquina (C, Delphi)
Usar Linguagens Interpretadas Resolve?
No, porque bibliotecas (compiladas) externas
linguagem podem conter estes bugs
Estruturas de dados que crescem automaticamente so
fontes para ataques DoS
Toda linguagem permite Strings e Arrays com tamanho
pr fixado e que portanto tem o potencial de gerar um
buffer overflow
O que fazer?
Incluir sempre a lgica para testar tamanhos e limites de
dados e variveis
Verificar, para cada funo de biblioteca utilizada, se ela
faz estas verificaes
Data Tampering
Consiste no envio de dados cuidadosamente preparados
para serem aceitos pela aplicao mas gerar um efeito
colateral no previsto pelo desenvolvedor
Exemplos tpicos envolvem montar comandos na
linguagem de script, comandos SQL, comandos
JavaScript ou tags HTML que sero executados pela
aplicao
Ou ento enviar chaves de registros, comandos da
aplicao, identificadores de sesso e
outros parmetros utilizados internamente pela aplicao
Requisies HTTP
Dados armazenados em cookies, URLs ou
formulrios HTML (mesmo em campo escondidos) esto
sob o controle do cliente, no da aplicao ou do servidor
web, e portanto podem ser adulterados por um usurio
malicioso
O protocolo HTTP stateless (sem memria): cada
requisio envolve uma nova conexo TCP, de modo que
fcil entrar no meio de uma conversao de um
usurio legtimo e inserir uma requisio com dados pr-
fabricados e que nunca poderiam ter sido gerados pela
aplicao
Controle de Acesso x HTTP
Uma pgina relaciona registros criados pelo usurio (ele
no pode editar registros dos outros usurios
select id, nome, ... from vendas
where idusuario = $login
Cada item na pgina inclui um link para um formulrio de
edio, baseado no identificador do registro
<a href=editaRegistro?id=$id>
Controle de Acesso x HTTP
O cracker, aps visitar a pgina anterio ento envia uma
requisio para o formulrio de edio, mas passando um
outro identificador do produto
http://www.empresa.com/editaRegistro?id=99
Assim ele consegue editar um registro pertencente a
outro usurio, e ao qual ele no teria acesso pela
aplicao
Simples assim?
Pode parecer um artifcio simples (e fcil de ser evitado;
basta criticar o usurio a cada nova requisio) mas pode
se manifestar de diversas maneiras sutis e no
imaginadas pelo desenvolvedor
Script Injection
Se algum dado fornecido pelo usurio posteriormente
exibido em uma pgina HTML, o cracker pode inserir
dados contendo comandos JavaScript, tags HTML ou
comandos da linguagem de script do servidor (ASP, PHP,
etc)
Desta forma ele pode:
Iludir o usurio, fazendo-o pensar que est em outra pgina
Criar links que fazem o usurio executar uma ao quando pensa
estar fazendo outra coisa
Script Injection
Com JavaScript podese realizar aes sem depender da
iniciativa do usurio
Vrias tags HTML provocam aes imediatas, ex: <img>
<iframe>
Alm de atributos como onLoad, onMouseOver
Se a linguagem de script do servidor suportar avaliao
de expresses em texto (a maioria suporta) possvel
inserir cdigo a ser executado no prprio servidor que
hospeda a aplicao, e no no navegador do usurio
Soluo
Elimine do texto digitado pelo usurio tudo o que se
parecer com tags HTML e comandos de Script
Antes de exibir em uma pgina qualquer informao
obtida de uma fonte externa, quote a informao para
eliminar o significado especial de smbolos como
< & $ ; `
Considere como fontes externas no
apenas os campos digitados pelo usurio, mas tambm
cookies, variveis de ambiente, arquivos anexados,
campos de banco de dados, etc
SQL Injection
Muitas linguagens de programao constroem
comandos SQL pela concatenao de strings
A maioria dos bancos de dados capaz de receber um
lote de comandos em uma nica mensagem e executar a
todos
Desta forma, o cracker pode modificar os comandos SQL
da aplicao e fazer praticamente qualquer coisa!
SQL Injection
A aplicao espera receber:
http://www.servidor.com/listaRegistros?regiao=RJ
E ento executa:
select id, nome, ... from vendas
where regiao = '$regiao
SQL Injection
O cracker envia:
http://www.servidor.com/listaRegistros?regiao=RJ';+delete+
from+vendas+where+regiao='SP
A aplicao ento executa:
select id, nome, ... from vendas
where regiao =
'RJ';delete+from+vendas+where+regiao='SP'
Cross-Site Scripting
Para prevenir o uso de Data Tampering e Script Injection
no navegador, o Internet Explorer, Mozilla, Netscape,
Opera e outros trabalham com o conceito de zonas de
segurana
Basicamente, uma pgina pode ou no realizar
operaes dependendo do seu servidor de origem
Por exemplo, pginas da rede local da empresa podem
executar cdigo JavaScript abitrrio, enquanto pginas
provenientes da Internet tem restrita sua capacidade de
abrir janelas, consultar cookies, etc
Cross-Site Scripting
Ento, o cracker usa Data Tampering e Script Injection
para colocar seus scripts e tags HTML em uma pgina na
rede local da empresa
Uma forma fcil de fazer isso por email HTML
O ataque de CrossSite Scripting pode envolver
vrias etapas intermedirias, at conseguir inserir o
cdigo (ou tags) na pgina desejada
Uma nica aplicao na intranet que contenha o bug
pode ser utilizada como meio de inserir o cdigo
malicioso!
Cross-Site Scripting
Frequentemente, os mecanismos de validao do
navegador deixam de validar alguma situao,
executando cdigo de uma zona de segurana restrita
com os privilgios de uma zona de segurana confivel
Portanto, no confie unicamente na proteo oferecida
pelo navegador; garanta que suas aplicaes quotam
qualquer informao inserida em uma pgina
Recursos para conteno
Algumas linguagens de programao, servidores de
aplicao e sistemas operacionais oferecem
mecanismos que, se no previnem os bugs descritos,
pelo menos limitam o seu alcance
Utilize-os sempre que possvel!
Recursos para conteno
Safe Mode do PHP
Tainted values do Perl (perl wT)
Classloaders e Security Managers do Java
Limites de recursos do Unix
Capabilities do Linux
Chroot jails do Unix
Infelizmente, o Windows, IIS e ASP so pobres nesta arena
Dicas
Sempre critique os parmetros de uma requisio GET
ou POST, mesmo que eles j tenham sido criticados por
cdigo JavaScript no navegador ou seja impossvel ao
usurio digitar um valor errado (um elemento <select>,
por exemplo)
Estabelea tamanhos mximos para todos os dados
recebidos
Garanta que qualquer arquivo de dados utilizado por uma
pgina esteja fora da rvore de documentos acessvel ao
navegador
Dicas
Toda informao textual deve ser quotada antes de ser
concatenada ou armazenada em outro meio, para
garantir que nenhum smbolo seja interpretado como
tendo significado especial pela linguagem de script,
banco de dados ou pelo navegador do usurio
Sempre imponha limites mandatrios ao uso de
recursos (memria, processador, espao em disco,
largura de banda) para todas as pginas
Dicas
Garanta que pginas capazes de modificar
informaes s possam ser acessadas por meio de
requisies POST
Nunca deixe informaes de autenticao no navegador,
seja em cookies ou campos escondidos; utilize um tipo de
sessid no reutilizvel e no sequencial para indexar esta
informao dentro do servidor web
Dicas
No dependa do controle de acesso a pginas (URLs)
pelo servidor web para autorizar o acesso a
informaes por uma pgina
Nunca confie que o identificador (chave) recebido em
uma requisio represente um registro autorizado ao
usurio; refaa este tipo de verificao em
todas as pginas
Dicas
No utilize a mesma senha de acesso aplicao para
outras conexes de rede, por exemplo a um banco de
dados
Utilize os privilgios mnimos em todas as operaes, em
especial no rode aplicaes e servidores com logins de
sistema ou administrador, e no acesse um banco com
roles de dba
Dicas
No confie em cdigo assinado para aumentar o nvel de
privilgio de uma pgina
Evite depender de plugins e outros componentes de
cdigo nativo
No reinvente a roda uma biblioteca de larga utilizao
tem mais chances de ter bugs identificados e
corrigidos do que o cdigo criado internamente em sua
empresa

Você também pode gostar