Escolar Documentos
Profissional Documentos
Cultura Documentos
Inserir de Aqui
Inserir Título Aqui
Desenvolvimento
Seguro em Sistemas
Práticas de Desenvolvimento Seguro em Sistemas
Revisão Textual:
Prof. Esp. Claudio Pereira do Nascimento
Práticas de Desenvolvimento Seguro em Sistemas
Objetivos
• Conhecer as vulnerabilidades mais comuns em softwares e como corrigir, compreender o
conceito de codificação defensiva. Garantir a qualidade do produto entregue e os testes
de segurança necessários à uma aplicação.
Caro Aluno(a)!
Bons Estudos!
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Contextualização
Como garantir que um software é seguro?
6
Introdução
Ameaças exploram as vulnerabilidades presentes em softwares. Conhecer essas
vulnerabilidades e como as elas podem ser exploradas permitem às equipes de software
realizarem a prevenção adequada na codificação do produto.
Ataques de Injeção
Vulnerabilidades e ataques de injeção são os tipos de ataques mais comumente
utilizados na internet, esse tipo de ataque inclui e agrupa os seguintes tipos de
vulnerabilidades: SQL Injection, Injeções de Comandos, Buffer Overflow, XSS (Cross
Site Scripting), CSRF (Cross-Site Request Forgery).
SQL Injection
Neste tipo de vulnerabilidade o invasor explora o alvo através de técnicas de injeção
de códigos SQL para obter informações e por meio da manipulação das requisições
ao banco de dados e das aplicações para obter informações sobre versão do banco,
estruturas das tabelas, dados entre outras informações.
Injeção de Comandos
A injeção de comandos é uma vulnerabilidade similar ao SQL Injection, porém com
a diferença que ao invés de instruções em SQL, o invasor tenta executar comandos
arbitrários e remotos para obter acesso privilegiado ou executar comandos arbitrários
no servidor vulnerável.
7
7
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Buffer Overflow
A vulnerabilidade de Buffer Overflow avalia a capacidade de um sistema tratar
a capacidade de armazenamento de uma variável, ou seja, o invasor tentará inserir
mais dados que a capacidade de uma variável consegue suportar e desta forma fazer
com o software se comporte de maneira inadequada e sem previsibilidade de seu
comportamento no tratamento desta variável.
Path Transversal
A vulnerabilidade Path Transversal explora as falhas de configuração que permitem
acesso a diretórios e/ou áreas dentro de uma aplicação, utilizando-se de técnicas de
encode de caracteres para aproveitar e acessar as áreas restritas, fazendo a burla em
sistema de acesso.
XSS
A vulnerabilidade de XSS (Cross-Site Scripting) é uma vulnerabilidade em que o
atacante explora uma falha de segurança no tratamento das entradas de dados dos
usuários, tais como: autenticação, roubo de sessão, conteúdo hostil, configurações de
usuários, etc.
CSRF
O Cross-Site Raquiequest Forgery é uma vulnerabilidade que pode ser explorada
na forma em que as aplicações processam as informações.
Falhas de Criptografia
Criptografia é um recurso de extrema importância em aplicações e entre tantas
outras funções para garantir certa segurança na troca de informações entre compu-
tadores e softwares, porém implementações inadequadas e o uso de algoritmos de
criptografia não homologados ou desconhecidos podem ocasionar falhas de segurança
em qualquer software.
8
Credencias de Acesso em Código
Para facilitar o desenvolvimento de softwares, muitos desenvolvedores se utilizam
do recurso de comentários e/ou outras questões e colocam informações sensíveis fixas
como por exemplo: acesso ao código de usuários e senhas, conexões aos bancos de
dados, informações de caminhos, cálculos diversos e aos mais variados serviços.
Contra-medidas
As principais medidas para tratar vulnerabilidades expostas anteriormente são
apresentadas a seguir:
9
9
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Isso inclui cálculos ou resultados de cálculos de forma a evitar as falhas de buffer overflow
devido a capacidade do tamanho de variável, evita também a adulteração de dados.
Bootstrapping
Bootstrapping é uma técnica em que um software ao ser iniciado realiza uma série de
processos quando este está sendo iniciado, esse processo pode incluir rotinas de auto teste
(POST) no carregamento do boot e atividades que são iniciadas no sistema operacional.
Proteção Criptográfica
Códigos podem ser protegidos através de técnicas criptográficas e estas podem ser
utilizadas para proteção de código com propriedade intelectual, porém em alguns países
não são permitidos o uso de software criptografados por questões de segurança nacional.
Arquivos de Configuração
Arquivos de configuração podem alterar o comportamento da aplicação, porém
devem ser gerenciados de maneira adequada, no entanto o uso desse modelo pode
comprometer a segurança se for utilizado de maneira indiscriminada.
Devem avaliar quais os parâmetros que podem ser utilizados sem comprometer as
funções de gerenciamento de segurança, criptografia, permissões, etc.
Gerenciamento de memória
Gerenciamento de memória é ponto crucial no aspecto de segurança no código.
A memória é peça fundamental na operação de qualquer aplicação, porém não ge-
renciar o consumo de memória pode fazer com que uma aplicação consuma recursos
excessivos e com isso ocorra o travamento da aplicação, variáveis de sessão, conexões
de banco de dados, acesso a memória, etc., que devem ser observados durante a exe-
cução de uma aplicação.
10
A gestão da memória é uma parte importante tanto pelo sistema operacional quanto
pela aplicação.
Erros de Manipulação
Nenhuma aplicação pode ser considerada 100% perfeita, erros podem ser originados
por diversas fontes, ou seja, os erros devem ser tratados assim que são detectados, essa
ação tem como objetivo corrigir problemas que possam levar o usuário ao descobrimento
de localização de arquivos sensíveis, senhas de usuários, arquivos de configuração e
qualquer outra informação importante que possa ser descoberta.
Gerenciamento de Exceções
Softwares podem gerar erros de execução caracterizados como erros de exceção,
esse tipo de erro pode ser ocasionado por questões de gerenciamento de memória
inadequada e codificação. Essas ocorrências podem acontecer nas camadas de negócios
das aplicações onde está o core do objeto de negócio da aplicação.
Muitos desses erros acontecem sem aviso em um servidor e na maioria das vezes
esses erros não ocasionam problemas, porém ao realizar o desenvolvimento do software
e durante a fase de desenvolvimento devemos observar essas exceções e tratá-las de
forma adequada.
Interface de codificação
As novas e modernas interfaces de desenvolvimento de software permitem a interação
com diversos ambientes e interagem em diferentes níveis com o sistema operacional,
banco de dados, internet, etc. As API (Interfaces de Programação de Aplicação) são
uma forma que programadores utilizam para agilizar o desenvolvimento de software. A
análise sobre o ambiente de desenvolvimento de software deve fazer parte da análise de
superfície de ataque e também da modelagem de ameaças.
Mitigações em desenvolvimento
As mitigações que uma equipe de desenvolvimento deve observar na fase inicial de
desenvolvimento são as seguintes:
• Proteger seu ambiente de desenvolvimento;
• Estabilizar e manter controle sobre a entrada de dados;
• Estabilizar e manter controle sobre a saída de dados;
• Assumir que componentes externos podem expor a segurança do software;
• Uso de bibliotecas e frameworks devem ser avaliados com cuidado;
• As boas práticas e recomendações da indústria de segurança devem ser observadas;
• Integrar o modelo de segurança ao ciclo de vida do desenvolvimento seguro;
• Os métodos de desenvolvimento devem ser utilizados sempre pensando em
compreender e prevenir ameaças.
11
11
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Análise de Código
A análise de código é um termo utilizado para descrever o processo de inspeção de
código na busca de falhas de codificação que possam permitir as ameaças explorarem
as vulnerabilidades, isto envolve também a análise por ponto de função, requisitos e
funcionalidades.
Essa revisão/análise de código pode ser uma forma de aprendizado junto as equi-
pes de desenvolvimento para compreender as vulnerabilidades e aprender as técnicas
de mitigação.
Processo de Desenvolvimento
O ambiente de desenvolvimento é composto por diversos processos pelo qual um
software é desenvolvido, desde a codificação, compilação, linkedição, teste, homologa-
ção e produção.
Isso apresenta uma oportunidade adequada para definir o uso de bibliotecas seguras
e a definição de um ambiente adequado e seguro para o time de desenvolvimento.
Técnicas Anti-adulteração
Quando um software é desenvolvido para o ambiente web, existem diversos métodos
de testes para avaliar a integridade de um software através de controles ou ferramentas
de automação.
A questão é como garantir que o software que esteja rodando envia uma requisição
válida e que esta não tenha sido adulterada. Códigos podem ser assinados digitalmente
e devemos prover mecanismos para garantir a validade do código.
12
Gestão de Configuração
Em qualquer processo de desenvolvimento de software temos o uso do conceito de
código fonte e versionamento.
Garantir a qualidade do software entregue é algo que deve ser planejado com certo
grau de realidade. Desde o início de cada fase ou código concluído deve-se realizar os
testes necessários.
ISO 9216
A norma ISO/IEC 9216 visa estabelecer a qualidade no desenvolvimento de software.
Essa norma apresenta aspectos referentes aos testes, com o foco em qualidade sobre as
funcionalidades, confiabilidade e usabilidade.
13
13
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
ISO 21827
O processo de melhoria e maturidade organizacional da norma ISO/IEC 21827
é realizado por meio do modelo IDEAL que foi desenvolvido pelo SEI - Software
Engineering Institute e é usado para definir ações que capacitem as organizações na
melhora de seus processos. O modelo IDEAL serve como um guia para iniciar, planejar
e implementar ações de melhoria contínua. A palavra IDEAL é um acrônimo do inglês
para Iniciar (Initiating), Diagnosticar (Diagnosing), Estabelecer (Establishing), Agir (Acting)
e Aprender (Learning).
O modelo IDEAL forma uma infraestrutura de cinco fases para guiar organizações no
planejamento e na implementação de um efetivo programa de melhoria de processos.
OSSTMM
O Open Source Security Testing Metodologia Manual (OSSTMM) é uma metodologia
para a realização de testes de segurança e métricas. Os testes da OSSTMM estão
divididos em alguns pontos: informações e dados controles, os níveis de sensibilização
para a segurança pessoal, fraude e os níveis de controle social, engenharia de redes
informáticas e de telecomunicações, dispositivos sem fio, dispositivos móveis, controles
de acesso físico, segurança, segurança de processos e locais físicos, como edifícios,
perímetros, e bases militares.
OWASP
O Open Web Application Security Project (OWASP) é um projeto open-source de
segurança de aplicações web. A comunidade OWASP inclui corporações, organizações
educacionais e indivíduos em todo o mundo. Essa comunidade trabalha para criar artigos,
metodologias, documentação, ferramentas e tecnologias livres para uso.
Testes de Software
Os testes funcionais ajudam e validam os recursos que compõem os softwares, esses
testes tem por objetivo algumas questões importantes e relevantes:
• Testes de funcionalidades e características realizada pelo software;
• Característica da qualidade não-funcional, como a confiabilidade ou usabilidade;
• A estrutura ou arquitetura do software ou sistema;
• Avaliar mudanças ocorridas no software;
14
Testes não funcionais: Os testes não-funcionais exploram o sistema em aspectos
de performance, carga, teste de estresse, usabilidade, interoperabilidade, confiabilida-
de e portabilidade.
Rastreamento de Erros
O rastreamento de bug ou defeito em software permite que se controle os erros em
projetos de desenvolvimento de software. Pode ser considerada como uma forma de
gestão de problemas.
Todo e qualquer produto de software deve ser na medida do possível um produto livre
de erros ou defeitos, sabemos que é muito difícil para não citar impossível garantir uma
aplicação livre de defeitos, porém com as ferramentas adequadas estas podem se tornar
uma questão estratégica e de aprendizado contínuo nas equipes de software.
Testes de Segurança
Os testes de segurança visam explorar diferentes aspectos da segurança da informação,
sempre com o objetivo de garantir que o código esteja em funcionando adequado e livre
de códigos vulneráveis ou falhas de segurança não intencionais ou intencionais.
15
15
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Scanning
O teste de scanning visa identificar as características de uma aplicação ou rede, esse
teste pode obter diferentes resultados e características para o ambiente e as ameaças ou
vulnerabilidades que podem ser exploradas.
Seu uso permite implementar medidas de controles imediatas como por exemplo
não exibir informações sobre versão, capacidade, características do sistema operacional,
banco de dados, etc.
Testes de Invasão
O teste de invasão (pentest) é uma maneira que permite a avaliação da segurança de um
sistema de computador ou de uma rede, simulando ataques reais de uma fonte maliciosa.
16
Já no teste de invasão, os especialistas não só identificam as vulnerabilidades que
poderiam ser utilizadas pelos invasores, mas também exploram essas vulnerabilidades,
sempre que possível, para avaliar os danos e o impacto que os invasores poderiam
causar após uma exploração bem-sucedida dessas falhas.
Preparação
Nessa fase é necessário decidir o escopo do teste de invasão: os endereços de rede
dos equipamentos a serem testados, quais tipos de ações serão permitidos no teste, ou
para um melhor resultado realizar um teste completo no ambiente de desenvolvimento
do produto.
Coleta de Informações
Nessa fase será analisada livremente as fontes de informações disponíveis, um processo
conhecido como coleta OSINT (Open Source Intelligence, ou inteligência de fonte aberta).
Essa pesquisa é realizada através de motores de busca, como o Google, Bing e Yahoo,
redes sociais e demais fontes de informações públicas como registro de domínio.
Mapeamento de Rede
Deve-se verificar o ambiente onde o software está instalado, a possibilidade de
identificar os diferentes serviços que estão em funcionamento dentro do ambiente e o
quanto ele está exposto.
Enumeração de Serviços
Com a utilização de ferramentas específicas, pode-se realizar uma varredura de
serviços e portas abertas nas máquinas onde estão hospedadas as aplicações associadas
aos testes de invasão a fim de descobrir quais sistemas estão presentes na Internet ou na
rede interna, bem como quais softwares estão sendo executados.
17
17
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Análise de Vulnerabilidades
Uma vez identificado o conjunto de informações, softwares instalados e sistemas ativos,
é iniciado o processo de análise de vulnerabilidades utilizando scanners e banco de dados
de vulnerabilidades como apoio no auxílio em identificar falhas nos ativos que possam vir
a ser explorado, através da execução de exploits (códigos específicos para exploração de
falhas), permitir o acesso à rede, serviços, componentes, dados e computadores.
Exploração de Falhas
Essa é a fase onde são exploradas as vulnerabilidades identificadas na fase anterior,
como por exemplo: acessar remotamente uma máquina sem a necessidade de
autenticação através de login e senha ou por meio de tentativas de autenticação com
senhas padrão em determinados sistemas.
Pós-Exploração de Falhas
Nessa fase são reunidas informações sobre os resultados dos testes de invasão a
busca por arquivos relevantes ao teste de invasão, a criação de backdoors para posterior
acesso ao sistema e ampliar os limites desses testes da rede ganhando assim acesso aos
demais sistemas e ambientes.
Relatório
Ao final de todas as etapas do teste deve ser produzido um documento completo
contendo todo o resultado do teste realizado, nesse documento deve conter as informações
sobre como corrigir os problemas e mitigar certas ameaças inerentes ao software.
Conclusão
Nesta aula aprendemos sobre as principais vulnerabilidades conhecidas e as formas
de corrigir esses problemas e a importância de se realizar os testes de segurança, testes
de códigos e os diversos testes de forma a garantir que o produto entregue esteja livre de
falhas, erros e ao mesmo tempo que as questões relativas aos princípios da segurança
da informação estejam solucionadas.
18
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
Sites
OWASP Top 10 - Brazilian Portuguese
https://goo.gl/X1i1ri
CWE Mitre
https://goo.gl/oUZMu7
SANS Institute - Top 25 Software Error
https://goo.gl/P2dQ5i
Exploit Database
https://goo.gl/X0Q5fF
19
19
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Referências
HOGLUND, Greg; McGraw, Gary. Como Quebrar Códigos: a arte de explorar
(e proteger) software. Pearson 448 ISBN 9788534615464. (Livro Eletrônico).
SHEMA, Mike. Hack notes: segurança na web referência rápida / 2003 - (Livro)
referência rápida. São Paulo: Campus, 2003. 182 p. ISBN 8535213503.
20