• Nenhum resultado encontrado

Aula 1_2

N/A
N/A
Protected

Academic year: 2021

Share "Aula 1_2"

Copied!
64
0
0

Texto

(1)

Thiago Augusto Alves

(2)

Professor

 Nome: Thiago Augusto Alves

 Graduação: Bacharelado em Sistemas de

Informação pela Faculdade COTEMIG – 2004-2007

 Pôs Graduação Lato Sensu:

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

(3)

Professor

 Atuação Profissional:

◦ Consultor Freelance de Analise de Sistemas

desde 2008;

◦ Consultor Freelance de Gerencia de Projetos

desde 2009;

(4)

Distribuição de Pontos

 Primeiro Bimestre  Segundo Bimestre Tipo Pontos Prova 7 Trabalhos + ATPS 3 Tipo Pontos Prova 7 Trabalhos + ATPS 3

(5)

Prova

 Matéria da Primeira Prova: Toda Disciplina

lecionada ate a realização da mesma;

 Matéria da Segunda Prova: Toda Disciplina

do Semestre;

 Matéria da Prova Substitutiva: Toda

Disciplina do Semestre; (Prova aberta de 20 Questões).

(6)

Contato

 https://sites.google.com/site/thiagoaalves/  [email protected]

No assunto especificar seu nome e o nome da disciplina e a sala.

(7)

Disciplina

(8)

Bibliografia Básica Padrão

 CAMPOS, André L.. Sistema de Segurança

da Informação : Controlando Os Riscos. 3ª ed. Florianópolis: Visual Books, 2014.

(9)

Bibliografia Básica Unidade: Faculdade

Anhanguera de Belo Horizonte (FAB)

 FERREIRA, Fernando Nicolau; ARAUJO,

Marcio (orgs.). Política de Segurança da Informação. 1ª ed. Rio de Janeiro: Ciência Moderna, 2008. 2)

 PAINE, Stephen; BURNETT, Steven.

Criptografia e segurança : o guia oficial RSA. 2ª ed. Rio de Janeiro: Campus - Elsevier,

2002. 3)

 HOWARD, Michael. Escrevendo codigo

seguro : : estratégias e técnicas práticas para codificação segura de aplicativos em um

mundo em rede. 2ª ed. Porto Alegre: Bookman, 2005.

(10)

Bibliografia Complementar: Faculdade

Anhanguera de Belo Horizonte (FAB)

 STALLINGS, William. Criptografia e segurança de

redes : princípios e práticas. 4ª ed. São Paulo: Pearson, 2010. 2)

 TORRES, Dennes. Segurança Máxima de Software

: Como Desenvolver Soluções Seguras. 1ª ed. Rio de Janeiro: Brasport, 2003. 3)

 CARUSO, Carlos A. A.. A Segurança em

Informática e de Informações. 2ª ed. São Paulo: Senac, 1999. 4)

 TERADA, Routo. Segurança de dados : criptografia

em redes de computador. 2ª ed. São Paulo: Edgard Blücher, 2008. 5)

 BURNETT, Steve; PAINE, Stephen. Criptografia e

Segurança : o guia oficial RSA. 1ª ed. São Paulo: Campus - Elsevier, 2002.

(11)

Bibliografia Complementar

 Noticias a relacionados ao tema;  Artigos relacionados ao tema;

(12)

Conteúdo Programático

 Apresentação da disciplina.  Segurança Atualmente.

 Técnicas Seguras de Codificação: Estouro

de Buffer, Controle de Acesso Apropriado.

 Técnicas Seguras de Codificação:

Privilégios de Execução: Executando com o Menor Privilégio.

 Técnicas Seguras de Codificação:

(13)

Conteúdo Programático

 Técnicas Seguras de Codificação: Protegendo

Dados Secretos.

 Técnicas Seguras de Codificação: Entrada

Mal-intencionada, Entrada no Banco de Dados, Entrada Específicas da Web.

 Técnicas Seguras de Codificação: Questões

de Internacionalização.

 Técnicas de Codificação ainda mais Seguras:

Segurança de Soquete.

 Técnicas de Codificação ainda mais Seguras:

(14)

Conteúdo Programático

 Técnicas de Codificação ainda mais

Seguras: Proteção de Ataques de Negação de Serviço.

 Teste de Segurança.

 Instalação de Softwares Seguros.  Escrevendo Documentação sobre

Segurança e Mensagens de Erro.

(15)

Datas Importantes – A definir

Data Tema

OBS. As datas estão com possíveis alterações de acordo com o calendário da faculdade.

(16)

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.

(17)
(18)

Reflexão

 O que vocês entendem por Segurança?  Por que ao se desenvolver Softwares e

importantes termos estes conceitos?

 Se não pensarmos na segurança quais podem

(19)

Segurança

 Segundo o Dicionário Aurélio podemos definir segurança como:

1 Ato ou efeito de segurar.

2 Qualidade do que é ou está seguro.

3 Conjunto das ações e dos recursos utilizados para proteger algo ou alguém.

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 força interior ou de crença em si mesmo.

7 Afoiteza, ousadia.

8 Força ou convicção nos movimentos ou nas ações.

9 Certeza demonstrada.

10 Caução.

11 Pessoa cuja atividade profissional consiste em proteger pessoas, instalações ou bens, ou em controlar o acesso de pessoas a determinado local.

12 segurança social: sistema público de proteção dos cidadãos, segundo a legislação produzidas, os direitos, os deveres e as contribuições efetuadas, notadamente em caso de doença, desemprego, reforma, etc.

(20)

Segurança Atualmente

 Necessidade de sistemas seguros;

 O processo desenvolvimento: segurança

preventiva;

(21)

Aplicativos na Internet

 Em Janeiro /2009 a Internet tinha

aproximadamente 1 trilhão usuários (CIA Word Factbook)

 Aplicativos

◦ Banco de dados: manipular, armazenar

e proteger dados confidenciais dos usuários e empresas;

◦ Dados de cartões de crédito;

◦ Infectados por vírus.

Invasão de privacidade

Tempo de inatividades e perda de dados

(22)

A Necessidade de uma Computação

Confiável

 A necessidade das empresas e da maioria

das pessoas estarem conectadas a Internet hoje é uma realidade imprescindível.

 Internet hoje é essencial, semelhante a energia

elétrica ou ao telefone.

 Os sistemas precisam estar sempre disponíveis e

executar tarefas exatamente para o que foram adquiridos.

 Os dados devem ser confiáveis.

 Não pode ocorrer o travamento do computador.  Não pode ocorrer um acesso não autorizado.

 É necessário uma “infra-estrutura forte“ em que o

(23)

A Necessidade de uma

Computação Confiável

Belo Horizonte São Paulo Rio de Janeiro Paris Itália Ganhei! !!!

(24)

A Necessidade de uma

Computação Confiável

Software de

Qualidade

Software Seguros Software Confiáveis Produto Seguro = Produto com Qualidade

(25)

Reflexão

 O que e considerado um Software

Seguro?

 O que e considerado um Software

(26)

A Necessidade de uma

Computação Confiável

 As pessoas fogem de produtos que não

funcionam adequadamente  Perda de clientes

 Corrigir a segurança de um sistema após seu

desenvolvimento tem um alto custo ◦ Coordenação da correção

◦ Desenvolvedores que descobrem o código vulnerável

◦ Desenvolvedores que corrigem o código

◦ Testadores que testam o código

◦ Publicar a correção no site

◦ Escrever a documentação de suporte

◦ Tratar as relações públicas arruinadas

 Microsoft Security Response Center 

(27)

A Cultura da Segurança

nas Empresas

 A cultura de segurança tem que

partir da alta administração.

 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 disponível. Quero que as pessoas utilizem nossa plataforma sem se preocuparem com ataques mal-intencionados que dominem a conta do administrador...”

◦ “A segurança do Windows XP é responsabilidade de todo mundo. Essa segurança não está relacionada apenas

aos recursos de segurança – é sobre a qualidade do código de todos os recursos”.

(28)

A Vantagem do Invasor e a Luta do

Defensor

It. Invasor Defensor

1 Pode escolher o ponto mais fraco Deve defender todos os pontos O castelo medieval 2 Investigar vulnerabilidades desconhecidas Defender somente de ataques conhecidos Cavalo de Tróia

3 Pode atacar a qualquer momento

Deve estar constantemente vigilante

Monitoramento do sistema

4 Pode jogar sujo Deve jogar de acordo com as regras

Firewalls Logs de auditoria

(29)

Aprimoramento do Processo

Fase de Projeto Fase de

Desenvolvimento Fase de Testes Fase de Distribuição e manutenção Educação sobre segurança Revisão da equipe de segurança Questões sobre segurança nas entrevistas Campanha de segurança Modelagem das ameaças Diretrizes seguras de codificação Revisão externa Processo de resposta

(30)

Fase de Projeto

Quem é o público do aplicativo? Quais as necessidades de comunicação do produto? O que você esta tentando proteger? Quem vai gerenciar o aplicativo? Onde o aplicativo será executado? O usuário precisa ser protegido de suas próprias ações?

(31)

Fase de Desenvolvimento

Diretrizes seguras codificação:

buffers, dados não

confiáveis, criptografia Revisão de segurança por outro analista Revisão externa da segurança Conscientização em segurança em toda equipe Acompanhamento de bugs de segurança

(32)

Fase de Testes

Verificar se o código e o projeto do sistema podem suportar um ataquePlano de Teste de Segurança

1. Decomponha o aplicativo em componentes fundamentais

2. Identifique as interfaces dos componentes

 Soquetes TCP, dados sem fio, arquivos, área de transferência, 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 segurança com mutação de dados

(33)

Fase de Manutenção e Distribuição

 Processo de Resposta

◦ Depois que o sistema foi

distribuído, falhas de segurança podem ser descobertas. É

necessário uma política e um

processo prontos para responder a essas questões à medida que

surgem.

◦ Não corrija apenas o bug

isoladamente, corrija todos os problemas relacionados ao bug.

(34)

Segurança por Projeto

 Nomeie um líder para a segurança do projeto.  Exija treinamento para toda a equipe.

 Analise se o aplicativo esta de acordo com a Lista

de Verificação para Segurança do Projeto. Por exemplo:

◦ Se criar novas contas de usuário, elas tem privilégios baixos e senhas fortes?

Falas de segurança registradas e, log para análise posterior

Corrija todos os bugs.

 Simplifique o código e o seu modelo de segurança.  Após o aplicativo pronto, instale servidores de

teste e convide uma equipe externa para tentar quebrá-lo.

(35)

Princípios de Segurança

Aprenda com os erros

Minimize sua área de ataque

◦ Número de páginas da WEB com conteúdo dinâmico

◦ Número de contas que você adiciona a um grupo administrador

◦ Número de arquivos e diretórios com listas fracas de controle de acesso

(36)

 Utilize a defesa com profundidade, por exemplo o

Banco:

◦ Sempre existe um guarda na porta do banco

◦ Sempre existem guardas dentro do banco

◦ Várias câmeras em circuito fechado monitoram os movimentos das pessoas

◦ Os caixa não tem acesso aos cofres privilégio

◦ Acesso ao cofre:

 Só abre em determinados horários

 É fabricado com metal grosso

 Múltiplos compartimentos para acesso dentro do cofre

(37)

 Utilize o menor privilégio

Se descobrir um bug no código de segurança,

corrija-o e procure outros semelhantes e relacionados.

 Assuma que sistemas externos são 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?

Princípios de Segurança

(38)
(39)

Arquitetura interna do computador

Placa Mãe

UNIDADE CENTRAL DE PROCESSAMENTO (CPU – Microprocessador) Unidade de Controle

Unidade Lógica e Aritmética

MEMÓRIA PRINCIPAL

RAM – Random Acess

Memory

ROM – Read Only

Memory

BARRAMENTO

UNIDADE DE ENTRADA E SAÍDA

(40)

Memória RAM

RAM (Random Acess Memory

Memória de acesso randômico, aleatório)

◦ Memória utilizada pelo processador para

guardar temporariamente os dados.

◦ É uma memória volátil, se desligarmos o

computador e não gravarmos em um dispositivo de armazenamento de dados, a informação será perdida.

(41)

Memória RAM

Sistema

Operacional Microsoft Word

Microsoft Excel

Buffer

(42)

Buffer

 É uma região de memória temporária

(RAM), utilizada para escrita e leitura de dados.

 Espaço alocado na memória RAM onde

os dados são armazenados

temporariamente até ser transferido para outra parte do sistema ou banco de

(43)

Estouro de Buffer

Buffer Overflow

Ocorre quando um processo tenta

armazenar dados além dos limites de um buffer de comprimento fixo. O

resultado é que os dados extras

sobrescrevem os locais da memória adjacente.

Os buffers são alocados com tamanhos fixos

de memória previamente determinados e a utilização deste espaço para armazenar uma quantidade de dados que ultrapasse este

(44)

Estouro de Buffer

Buffer Overflow

 Os dados sobrescritos podem incluir outros

buffers, variáveis, dados de fluxo do programa.

 Sobrescrever esses dados podem causar

problemas como:

◦ Comportamento errado do programa

◦ Exceções de acesso de memória

◦ Finalizações de programa

◦ Travamento do sistema e computador

◦ Resultados retornados incorretamente

(45)

Estouro de Buffer

Buffer Overflow

 Sistemas em linguagem C e C++ são

propensos a estouros, pois não fornecem nenhuma proteção para parar o acesso ou a sobrescrição de dados em qualquer parte da memória e não verificam

automaticamente se os dados gravados em uma matriz de buffer interna estão dentro dos limites dessa matriz.

(46)

Estouro de Buffer

Buffer Overflow

Dados do NIST (National Institute of Standards and

Technology) - Agência federal de tecnologia dos EUA

que trabalha com a indústria para desenvolver e aplicar tecnologias, medidas e normas), mostram que no ano de 2004 uma grande porcentagem dos problemas de segurança encontradas em sistemas é devida a má codificação dos mesmos.

De janeiro até agosto de 2004, 52% dos erros eram

devidos aos erro de validação de entradas, que envolvem problemas de estouro de buffers.

 Do total de vulnerabilidades encontradas, pelo menos

(47)

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 variáveis locais e parâmetros passados por valor em funções.

A alocação é estática porque acontece antes que o programa comece a ser executado:

(48)

Estouro de Buffer

Buffer Overflow

Alocadas dinamicamente (heap) 

armazenadas variáveis alocadas dinamicamente e variáveis globais.

Em determinado circunstâncias, a quantidade de memória a alocar só se torna conhecida

durante a execução do programa. Para lidar

com essa situação é preciso recorrer à alocação

dinâmica de memória. A alocação dinâmica é

gerenciada pelas funções malloc (memory

allocation) e free, que estão na biblioteca stdlib.

(49)

Estouro de Buffer

Buffer Overflow

Estouro de Pilha Estouro de Heap

Erros de indexação de array Bugs de string de formatação Estouro de números inteiros

(50)

Estouro de Pilha

 Ocorre quando um buffer declarado na

pilha é sobrescrito copiando-se um

(51)

Estouro de Pilha

#include <stdio.h> #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);

(52)

Estouro de Pilha

#include <stdio.h> #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);

(53)

Estouro de Heap (Memória

dinâmica)

Vamos imaginar a seguinte situação:

Sistema em Java de Controle de Patrimônio

◦ Após um determinado tempo de utilização do sistema o banco de dados fica com um

grande número de dados;

◦ A emissão de relatórios do sistema não tem filtro de dados que diminua a quantidade de informações retornadas

(54)

Estouro de Heap (Memória dinâmica)

 Quando o usuário emite o relatório sem a utilização de

um filtro de dados pode ocorrer um estouro no Heap, por causa da quantidade de dados retornados.

 A mensagem de exceção que aparece é a seguinte:

OutOfMemoryException: Java heap space.

 Para resolver o problema uma classe no Java

chamada JRFileVirtualizer cria arquivos swap em

disco rígido, evitando que todas as informações

sejam jogadas na memória e prevenindo que aconteça uma exceção do

(55)

Erros de Indexação 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 indexação.

A exceção ArrayBoundsError é lançada se

detectado em tempo de execução.

 O programa deve ser

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

(56)

Erros de Indexação de Array

 O programa correto deveria ser da forma

abaixo:

for (i = 0; i < array.length; i++) {

array[i] = 5; }

(57)

Bugs de string de formatação

 O bug ocorre quando o desenvolvedor deseja

imprimir uma String que contém dados fornecidos pelo usuário.

Se for utilizado o comando printf (buffer), o

sistema interpreta o buffer como uma string de formatação e obedece a qualquer informação de formatação 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 usuário antes de utiliza-la

(58)

Estouro de Nº Inteiros- Turbo C++

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

Este programa

funcionou !!!!!

(59)

Estouro de Nº Inteiros- Turbo C++

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

Este programa não

funcionou !!!!!

O tipo inteiro vai do valor

-32.768 até 32.767. O resultado foi truncado, ou seja, houve um

overflow no resultado Qual é o problema?

(60)

Estouro de Nº Inteiros – Visual

Studio C#

private void button1_Click(object sender, EventArgs e)

{ int a, b, c; a = 2147483646; b = 1; c = a + b; tbC.Text = c.ToString(); }

Este programa

funcionou !!!!!

E agora no Visual Studio C# o problema foi resolvido?

(61)

Estouro de Nº Inteiros – Visual

Studio C#

Prof: Virgil Almeida 61

private void button1_Click(object sender, EventArgs e)

{ 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

Este programa

(62)

Referências

 Barbato, Luiz Gustavo C.; Duarte, Luiz Otávio, Montes, antônio.

Artigo: Programação Segura: Um estudo de falhas e

ferramentas de auxílio. Instituto Nacional de Pesquisas Espaciais

– INPE, São José dos Campos, SP.

Catching Integer Overflows in C. Disponível em:

<http://www.fefe.de/intof.html>. Acesso em: 14/03/2011.

CWE - Common Weakness Enumeration. Disponível em:

<http://nvd.nist.gov/cwe.cfm> Acesso em: 14/03/2011.

Howard, Michael; LeBlanc, David. Escrevendo Código Seguro. 2.

Ed.

Porto Alegre: Bookman, 2005.

Improper Restriction of Operations within the Bounds of a

Memory Buffer. Disponível em:

<http://cwe.mitre.org/data/definitions/119.html>. Acesso em: 14/03/2011.

Turbo C++

(63)

Referências

 Howard, Michael; LeBlanc, David.

Escrevendo Código Seguro. 2. Ed. Porto

Alegre: Bookman, 2005

 Material Professor Kleber Netto Fonseca

2011

 Material Professor Virgil Almeida

(64)

Referências

Documentos relacionados