Você está na página 1de 68

Thiago Augusto Alves

Apresentao

Professor
Nome:

Thiago Augusto Alves


Graduao: Bacharelado em
Sistemas de Informao pela
Faculdade COTEMIG 2004-2007
Ps

Graduao Lato Sensu:


Gerenciamento de Projetos de
Software pela PUC Minas 2009Junho de 2010.

Professor
Atuao

Profissional:

Consultor Freelance de Analise de


Sistemas desde 2008;
Consultor Freelance de Gerencia de
Projetos desde 2009;
Professor de Informtica.

Mudanas nas Notas


A

mdia passou de 5 para 6.


O Arredondamento agora e
somente de uma casa decimal,
ou seja 5.6 e 5.6, 5.75 passa para
5.8.

Distribuio de Pontos
Primeiro

Bimestre

Tipo

Pontos

Prova

ATPS

Trabalhos Prticos e Exerccios

Pesquisas Complementares

0,5*

Segundo

Bimestre

Tipo

Pontos

Prova

ATPS

Pesquisas Complementares

0,5*

Contato
thiagoaalves@gmail.com
No assunto utilizar:
Funalodetal_Diciplina_Turma(Ou dia da
semana que temos aula).

Disciplina
Desenvolvimento

Seguro

de Software

Bibliografia Bsica Padro


CAMPOS,

Andr L.. Sistema de


Segurana da Informao :
Controlando Os Riscos. 3 ed.
Florianpolis: Visual Books, 2014.
PLT do Curso.

Bibliografia Bsica Unidade: Faculdade Anhanguera de Belo Horizonte (FAB)

FERREIRA,

Fernando Nicolau; ARAUJO,


Marcio (orgs.). Poltica de Segurana da
Informao. 1 ed. Rio de Janeiro: Cincia
Moderna, 2008. 2)
PAINE, Stephen; BURNETT, Steven.
Criptografia e segurana : o guia oficial
RSA. 2 ed. Rio de Janeiro: Campus Elsevier, 2002. 3)
HOWARD, Michael. Escrevendo codigo
seguro : : estratgias e tcnicas prticas
para codificao segura de aplicativos em
um mundo em rede. 2 ed. Porto Alegre:
Bookman, 2005.

Bibliografia Complementar: Faculdade Anhanguera de Belo Horizonte (FAB)

STALLINGS,

William. Criptografia e segurana de


redes : princpios e prticas. 4 ed. So Paulo:
Pearson, 2010. 2)
TORRES, Dennes. Segurana Mxima de Software
: Como Desenvolver Solues Seguras. 1 ed. Rio
de Janeiro: Brasport, 2003. 3)
CARUSO, Carlos A. A.. A Segurana em
Informtica e de Informaes. 2 ed. So Paulo:
Senac, 1999. 4)
TERADA, Routo. Segurana de dados :
criptografia em redes de computador. 2 ed. So
Paulo: Edgard Blcher, 2008. 5)
BURNETT, Steve; PAINE, Stephen. Criptografia e
Segurana : o guia oficial RSA. 1 ed. So Paulo:
Campus - Elsevier, 2002.

Bibliografia
Complementar
Noticias

a relacionados ao tema;
Artigos relacionados ao tema;
Sites de autores relacionados ao
tema.

Contedo Programtico
Apresentao

da disciplina.
Segurana Atualmente.
Tcnicas Seguras de Codificao:
Estouro de Buffer, Controle de Acesso
Apropriado.
Tcnicas Seguras de Codificao:
Privilgios de Execuo: Executando
com o Menor Privilgio.
Tcnicas Seguras de Codificao:
Criptografia.

Contedo Programtico
Tcnicas

Seguras de Codificao:
Protegendo Dados Secretos.
Tcnicas Seguras de Codificao: Entrada
Mal-intencionada, Entrada no Banco de
Dados, Entrada Especficas da Web.
Tcnicas Seguras de Codificao:
Questes de Internacionalizao.
Tcnicas de Codificao ainda mais
Seguras: Segurana de Soquete.
Tcnicas de Codificao ainda mais
Seguras: RPC, Controles ActiveX e DCOM.

Contedo Programtico
Tcnicas

de Codificao ainda
mais Seguras: Proteo de
Ataques de Negao de Servio.
Teste de Segurana.
Instalao de Softwares Seguros.
Escrevendo Documentao sobre
Segurana e Mensagens de Erro.

Datas Importantes A definir


semana que vem trago completo
Data

Tema
Entrega e Apresentao das
Etapas 1,2 e 3 do ATPS
Primeira Avaliao
Entrega e Apresentao das
Etapas 4,5 e 6 do ATPS
Segunda Avaliao
Prova Substituta

OBS. As datas esto com possveis alteraes de acordo com o


calendrio da faculdade.

ATPS
Grupos

com de 2 a 4 pessoas;
Entregar os nomes dos
integrantes do grupo por e-mail;
Cada grupo deve escolher um nome
para o Projeto, Ex: Projeto XYZ;
Livro

Texto da Disciplina.
PLT do Curso.

ATPS - Desafio
O

processo de desenvolvimento de
software aborda diversas prioridades para
produzir um produto com excelncia, para
atender aos requisitos de seus usurios,
interface inteligente e intuitiva, boa
usabilidade alm de implementar requisitos
de Segurana da Informao.
A Segurana da Informao visa garantia
da integridade e confiabilidade de sistemas
e dados de uma organizao, evitando que
informaes importantes sejam danificadas
ou acessadas de forma indevida.

ATPS - Desafio
Para

evitar problemas de Segurana da


Informao, h diversos conceitos e tcnicas a
serem utilizados no desenvolvimento de
softwares seguros. Essas tcnicas so utilizadas
tanto nas fases de projeto e anlise do sistema
quanto na sua implementao.
No desafio proposto, verifica-se a situao em
que uma empresa de desenvolvimento de
software sofreu diversos ataques em seus
sistemas de informaes, esses ataques
causaram vrios prejuzos materiais,
comprometendo sua credibilidade no mercado de
softwares. Para corrigir as falhas de segurana
dos sistemas, essa empresa contratou uma
equipe de consultores para auxili-la.

ATPS - Desafio
Essa

equipe, tem como objetivo, identificar


e corrigir possveis falhas de segurana nos
sistemas da empresa e implantar os
conceitos de desenvolvimento de software
seguro desde as primeiras fases de criao
de seus Sistemas de Informaes. A
atividade deve ser realizada em grupo para
troca de conhecimento e experincias e,
para isso, o professor ir definir o nmero
de integrantes. Considere que a equipe foi
contratada por um colaborador da empresa
representada pelo professor.

ATPS - Desafio
Produo

Acadmica

Relatrio 1: Desenvolvendo Softwares


Seguros.
Relatrio 2: Evitando Estouro de Buffer.
Relatrio 3: Utilizando Criptografia.
Relatrio 4: Evitando Ataques SQL
INJECTION.
Relatrio 5: Evitando ataques RPC E
DDOS.
Relatrio 6: Testes de Segurana e
Instalao de Softwares Seguros.

Reflexo
O

que vocs entendem por Segurana?

Por

que ao se desenvolver Softwares e


importantes termos estes conceitos?

Se

no pensarmos na segurana quais


podem ser os problemas?

Segurana
Segundo

o Dicionrio Aurlio podemos definir segurana

como:
1 Ato ou efeito de segurar.
2 Qualidade do que ou est seguro.
3 Conjunto das aes e dos recursos utilizados para proteger
algo ou algum.
4 O que serve para diminuir os riscos ou os perigos.
5 Aquilo que serve de base ou que d estabilidade ou apoio.
6 Sentimento de fora interior ou de crena em si mesmo.
7 Afoiteza, ousadia.
8 Fora ou convico nos movimentos ou nas aes.
9 Certeza demonstrada.
10 Cauo.
11 Pessoa cuja atividade profissional consiste em proteger
pessoas, instalaes ou bens, ou em controlar o acesso de
pessoas a determinado local.
12 segurana social: sistema pblico de proteo dos
cidados, segundo a legislao produzidas, os direitos, os
deveres e as contribuies efetuadas, notadamente em caso
de doena, desemprego, reforma, etc.

Segurana Atualmente
Necessidade

de sistemas

seguros;
O processo desenvolvimento:
segurana preventiva;
Princpios de Segurana a serem
seguidos.

Aplicativos na Internet
Em

Janeiro /2009 a Internet tinha


aproximadamente 1 trilho usurios
(CIA Word Factbook)
Aplicativos
Banco de dados: manipular, armazenar
e proteger dados confidenciais dos
usurios e empresas;
Invaso de
privacidade
Dados de cartes de crdito;
Tempo de
Infectados por vrus.
inatividades e
perda de dados

A Necessidade de uma
Computao Confivel
A

necessidade das empresas e da maioria


das pessoas estarem conectadas a Internet
hoje uma realidade imprescindvel.
Internet hoje essencial, semelhante a energia
eltrica ou ao telefone.
Os sistemas precisam estar sempre disponveis e
executar tarefas exatamente para o que foram
adquiridos.
Os dados devem ser confiveis.
No pode ocorrer o travamento do computador.
No pode ocorrer um acesso no autorizado.
necessrio uma infra-estrutura forte em que o
cliente possa confiar.

A Necessidade de uma
Computao Confivel

Belo
Horizonte
So
Paulo

Rio de Janeiro

Ganhei!
!!!

Itlia

Paris

A Necessidade de uma
Computao Confivel
Produto Seguro =
Produto com
Qualidade

Software de
Qualidade
Software
Seguros

Software
Confiveis

Reflexo
O

que e considerado um
Software Seguro?

que e considerado um
Software Confiaveis?

A Necessidade de uma
Computao Confivel
As

pessoas fogem de produtos que no funcionam


adequadamente Perda de clientes
Corrigir a segurana de um sistema aps seu
desenvolvimento tem um alto custo

Coordenao da correo
Desenvolvedores que descobrem o cdigo vulnervel
Desenvolvedores que corrigem o cdigo
Testadores que testam o cdigo
Publicar a correo no site
Escrever a documentao de suporte
Tratar as relaes pblicas arruinadas

Microsoft

Security Response Center US$100.000

A Cultura da Segurana
nas Empresas
A cultura

de segurana tem que


partir da alta administrao.
E-mail de Jim Allchin, vice-presidente
do Grupo Windows na Microsoft:
Quero que os clientes esperem que o Windows XP seja o mais
seguro sistema operacional disponvel. Quero que as pessoas
utilizem nossa plataforma sem se preocuparem com ataques
mal-intencionados que dominem a conta do administrador...
A segurana do Windows XP responsabilidade de todo
mundo. Essa segurana no est relacionada apenas
aos recursos de segurana sobre a qualidade do cdigo
de todos os recursos.

A Vantagem do Invasor e a Luta


do Defensor
It.

Invasor

Defensor

Pode escolher o ponto


mais fraco

Deve defender
todos os pontos

O castelo medieval

Investigar
vulnerabilidades
desconhecidas

Defender somente de
ataques conhecidos

Cavalo de Tria

Pode atacar a qualquer


momento

Deve estar constantemente


vigilante

Monitoramento do
sistema

Pode jogar sujo

Deve jogar de acordo com


as regras

Firewalls
Logs de auditoria

Aprimoramento do
Processo
Questes sobre
segurana nas
entrevistas
Fase de Projeto

Modelagem
das ameaas

Diretrizes
seguras de
codificao

Processo de
resposta
Reviso
externa

Fase de
Desenvolvimento

Fase de Testes
Fase de Distribuio e
manuteno
Educao
sobre
segurana

Reviso da
equipe de
segurana

Campanha
de segurana

Fase de Projeto
Quem o
pblico do
aplicativo?

Onde o
aplicativo ser
executado?

O usurio precisa
ser protegido de
suas prprias
aes?

O que voc
esta tentando
proteger?
Quais as necessidades
de comunicao do
produto?

Quem vai
gerenciar o
aplicativo?

Fase de Desenvolvimento
Reviso de
segurana
por outro
analista

Diretrizes seguras
codificao:
buffers, dados no
confiveis,
criptografia

Conscientizao
em segurana
em toda equipe
Acompanhamento
de bugs de
segurana

Reviso
externa da
segurana

Fase de Testes
Verificar se o cdigo e o projeto do

sistema podem suportar um ataque


Plano de Teste de Segurana
1. Decomponha o aplicativo em componentes fundamentais
2. Identifique as interfaces dos componentes
Soquetes TCP, dados sem fio, arquivos, rea de
transferncia, slots de correio e outros
3. Classifique as interfaces por vulnerabilidade em potencial
4. Determine as estruturas de dados em cada interface
5. Localize os problemas de segurana com mutao de
dados

Fase de Manuteno e
Distribuio
Processo

de Resposta

Depois que o sistema foi


distribudo, falhas de segurana
podem ser descobertas.
necessrio uma poltica e um
processo prontos para responder
a essas questes medida que
surgem.
No corrija apenas o bug
isoladamente, corrija todos os
problemas relacionados ao bug.

Segurana por Projeto


Nomeie

um lder para a segurana do projeto.


Exija treinamento para toda a equipe.
Analise se o aplicativo esta de acordo com a Lista de
Verificao para Segurana do Projeto. Por exemplo:
Se criar novas contas de usurio, elas tem privilgios baixos
e senhas fortes?
Falas de segurana registradas e, log para anlise posterior
Corrija

todos os bugs.
Simplifique o cdigo e o seu modelo de segurana.
Aps o aplicativo pronto, instale servidores de teste e
convide uma equipe externa para tentar quebr-lo.

Princpios de Segurana
Aprenda com os erros
Minimize sua rea de ataque

Nmero de pginas da WEB com contedo


dinmico
Nmero de contas que voc adiciona
a um grupo administrador
Nmero de arquivos e diretrios com listas
fracas de controle de acesso

Princpios de Segurana
Utilize a defesa com profundidade, por exemplo o

Banco:
Sempre existe um guarda na porta do banco
Sempre existem guardas dentro do banco
Vrias cmeras em circuito fechado monitoram os
movimentos das pessoas
Os caixa no tem acesso aos cofres privilgio
Acesso ao cofre:
S abre em determinados horrios
fabricado com metal grosso
Mltiplos compartimentos para acesso dentro do cofre

Princpios de Segurana
Utilize o menor privilgio
Se descobrir um

bug no cdigo de segurana,


corrija-o e procure outros semelhantes e
relacionados.
Assuma que sistemas externos so inseguros
arquivos de clientes, servidores externos e
aplicativos
Planeje-se para falhas
O que acontece se o site for desconfigurado?
O que acontece se o aplicativo estiver comprometido?

Estouro

de Buffer

Arquitetura interna do
computador Placa Me
UNIDADE CENTRAL
DE PROCESSAMENTO

(CPU Microprocessador)
Unidade de Controle
Unidade Lgica e Aritmtica

MEMRIA PRINCIPAL
ROM Read Only
Memory
RAM Random
Acess Memory

BUFFER
BARRAMENTO
UNIDADE DE ENTRADA E SADA

Memria RAM
RAM

(Random Acess Memory


Memria de acesso randmico,
aleatrio)
Memria utilizada pelo processador
para guardar temporariamente os
dados.
uma memria voltil, se
desligarmos o computador e no
gravarmos em um dispositivo de
armazenamento de dados,
a informao ser perdida.

Memria RAM

Sistema
Operacion
al

Microsoft
Word

Buffer

Microsoft Excel
Sistema Folha de Pagamento

Buffer

uma regio de memria


temporria (RAM), utilizada para
escrita e leitura de dados.
Espao alocado na memria RAM
onde os dados so armazenados
temporariamente at ser
transferido para outra parte do
sistema ou banco de dados.

Estouro de Buffer
Buffer Overflow
Ocorre

quando um processo tenta


armazenar dados alm dos limites de
um buffer de comprimento fixo. O
resultado que os dados extras
sobrescrevem os locais da memria
adjacente.
Os buffers so alocados com tamanhos
fixos de memria previamente
determinados e a utilizao deste espao
para armazenar uma quantidade de dados
que ultrapasse este tamanho causa o
estouro de buffer

Estouro de Buffer
Buffer Overflow
Os

dados sobrescritos podem incluir


outros buffers, variveis, dados de fluxo
do programa.

Sobrescrever

esses dados podem causar


problemas como:
Comportamento errado do programa
Excees de acesso de memria
Finalizaes de programa
Travamento do sistema e computador
Resultados retornados incorretamente
Quebra de segurana.

Estouro de Buffer
Buffer Overflow
Sistemas

em linguagem C e C++
so propensos a estouros, pois
no fornecem nenhuma proteo
para parar o acesso ou a
sobrescrio de dados em
qualquer parte da memria e no
verificam automaticamente se os
dados gravados em uma matriz
de buffer interna esto dentro
dos limites dessa matriz.

Estouro de Buffer
Buffer Overflow
Dados do NIST (National Institute of Standards and

Technology) - Agncia federal de tecnologia dos EUA que


trabalha com a indstria para desenvolver e aplicar tecnologias,
medidas e normas), mostram que no ano de 2004 uma grande
porcentagem dos problemas de segurana encontradas em
sistemas devida a m codificao dos mesmos.
De janeiro at agosto de 2004, 52% dos erros eram devidos

aos erro de validao de entradas, que envolvem problemas


de estouro de buffers.
Do total de vulnerabilidades encontradas, pelo menos

74% eram decorrentes de falhas de codificao

Estouro de Buffer
Buffer Overflow
Os

estouros de buffer podem ser classificados


de duas formas de acordo com a forma em
que foram criados:
Alocados estaticamente (stack)
utilizada para o armazenamento de
variveis locais e parmetros passados por
valor em funes.
A alocao esttica porque acontece antes
que o programa comece a ser executado:
char c; int i; int v[10];

Stack
Overflow

Estouro de Buffer
Buffer Overflow
Alocadas dinamicamente (heap)
armazenadas variveis alocadas
dinamicamente e variveis globais.
Em determinado circunstncias, a
quantidade de memria a alocar s se
torna conhecida durante a execuo
do programa. Para lidar com essa
situao preciso recorrer alocao
dinmica de memria. A alocao
dinmica gerenciada pelas funes
malloc (memory allocation)
e free,
Heap Overflow

Estouro de Buffer
Buffer Overflow
Estouro de Pilha
Estouro de Heap
Erros de indexao de array
Bugs de string de formatao
Estouro de nmeros inteiros

Estouro de Pilha
Ocorre

quando um buffer
declarado na pilha sobrescrito
copiando-se um volume de dados
maior do que o buffer.

Estouro de Pilha
#include <stdio.h>
#include <string.h>
int main()
{ char palavra[10];
char destino[5];
printf ("Digite uma palavra: ");
gets (palavra);
strcpy(destino,palavra);
printf ("\n\nVoce digitou: %s",palavra);
printf ("\n\nDestino tem agora: %s",destino);
printf ("\n\nA primeira letra: %c\n",palavra[0]);
return(0);
}

Estouro de Pilha
#include <stdio.h>
#include <string.h>
int main()
{ char palavra[10];
char destino[5];
printf ("Digite uma palavra: ");
gets (palavra);
strcpy(destino,palavra);
printf ("\n\nVoce digitou: %s",palavra);
printf ("\n\nDestino tem agora: %s",destino);
printf ("\n\nA primeira letra: %c\n",palavra[0]);
return(0);
}

Estouro de Heap (Memria


dinmica)
Vamos imaginar a seguinte situao:

Sistema em Java de Controle de Patrimnio


Aps um determinado tempo de utilizao do
sistema o banco de dados fica com um
grande nmero de dados;
A emisso de relatrios do sistema no tem
filtro de dados que diminua a quantidade de
informaes retornadas

Estouro de Heap (Memria


dinmica)
Quando o usurio emite o relatrio sem a utilizao de

um filtro de dados pode ocorrer um estouro no Heap,


por causa da quantidade de dados retornados.
A mensagem de exceo que aparece a seguinte:

OutOfMemoryException: Java heap space.


Para resolver o problema uma classe no Java chamada

JRFileVirtualizer cria arquivos swap em disco rgido,


evitando que todas as informaes sejam jogadas na
memria e prevenindo que acontea uma exceo do
tipo OutOfMemoryException.

Erros de Indexao de
Array

Se um ndice de array est fora dos


limites, ou seja, um ndice que menor que 0
ou maior que o comprimento do array, ocorre
um
erro de indexao.
A exceo ArrayBoundsError lanada se
detectado em tempo{de execuo.

for (i = 0; ; i++)
O programa deve ser
{
desenvolvido verificando
array[i] = 5;
os limites do array,
}
o programa ao lado
}
est incorreto:

Erros de Indexao de
Array
O

programa correto deveria ser


da forma abaixo:
for (i = 0; i < array.length; i+
+)
{
array[i] = 5;
}

Bugs de string de
formatao

O bug ocorre quando o desenvolvedor deseja


imprimir uma String que contm dados
fornecidos pelo usurio.
Se for utilizado o comando printf (buffer), o
sistema interpreta o buffer como uma string de
formatao e obedece a qualquer informao de
formatao que essa contiver
Se for utilizado o comando printf(%s, buffer),
o sistema imprime a string na tela, exatamente
como o desenvolvedor desejava
Para evitar ataques por essa falha, o programador
deve formatar a entrada do usurio antes de
utiliza-la

Estouro de N Inteiros- Turbo C+


+
#include <stdio.h>
Este
int main()
programa
{ int a, b;
funcionou
a = 32766;
b = 1;
!
printf("\n%d + %d %d\n", a, b, a+b);
return 0;
}

!!!!

Estouro de N Inteiros- Turbo C+


+
#include <stdio.h>
Este programa
int main()
no
{ int a, b;
funcionou !!!!!
a = 32766;
b = 2;
Qual o problema?
printf("\n%d + %d %d\n", a, b, a+b);
O tipo inteiro vai do valor
return 0;
-32.768 at 32.767. O
}
resultado
foi truncado, ou
seja, houve um overflow no
resultado

Estouro de N Inteiros Visual


Studio C#
private void button1_Click(object sender,
Este
EventArgs e)

programa
funcionou !!!!
!

int a, b, c;
a = 2147483646;
b = 1;
c = a + b;
tbC.Text = c.ToString();
} no Visual Studio
E agora
C#
o problema foi resolvido?

Estouro de N Inteiros Visual


Studio C#

Este
programa
private void button1_Click(object sender,
no
EventArgs e)
{
funcionou !!!!!
int a, b, c;
a = 2147483646;
b = 10;
c = a + b;
tbC.Text = c.ToString();

}
O resultado foi truncado
novamente, houve um
overflow no resultado

Prof: Virgil Almeida

65

Referncias
Barbato, Luiz Gustavo C.; Duarte, Luiz Otvio, Montes, antnio. Artigo:

Programao Segura: Um estudo de falhas e ferramentas de auxlio.


Instituto Nacional de Pesquisas Espaciais INPE, So Jos dos Campos,
SP.
Catching Integer Overflows in C. Disponvel em:
<http://www.fefe.de/intof.html>. Acesso em: 14/03/2011.
CWE - Common Weakness Enumeration. Disponvel em:
<http://nvd.nist.gov/cwe.cfm> Acesso em: 14/03/2011.
Howard, Michael; LeBlanc, David. Escrevendo Cdigo Seguro. 2. Ed.
Porto Alegre: Bookman, 2005.
Improper Restriction of Operations within the Bounds of a Memory
Buffer. Disponvel em:
<http://cwe.mitre.org/data/definitions/119.html>. Acesso em: 14/03/2011.
Turbo C++
Microsoft Visual Studio C#

Referncias

Howard, Michael; LeBlanc, David.

Escrevendo Cdigo Seguro. 2. Ed. Porto


Alegre: Bookman, 2005
Material Professor Kleber Netto
Fonseca 2011
Material Professor Virgil Almeida
Prof: Virgil Almeida

67

Obrigado

Você também pode gostar