Você está na página 1de 22

PráticasTítulo

Inserir de Aqui
Inserir Título Aqui
Desenvolvimento
Seguro em Sistemas
Práticas de Desenvolvimento Seguro em Sistemas

Responsável pelo Conteúdo:


Prof. Esp. Allan Piter Pressi

Revisão Textual:
Prof. Esp. Claudio Pereira do Nascimento
Práticas de Desenvolvimento Seguro em Sistemas

Nesta unidade, trabalharemos os seguintes tópicos:


• Contextualização
• Introdução
• As Vulnerabilidade Mais Comuns

Fonte: iStock/Getty Images


• Conclusão
• Material Complementar

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)!

Nesta aula vamos aprender como implementar a codificação segura, compreender o


que é vulnerabilidade, as mais comuns e as contramedidas necessárias para a mitigação
dessas mesmas vulnerabilidades.

Conhecer as metodologias de testes de software garante que o software desenvolvido


esteja em conformidade com os requisitos de segurança e as boas práticas de segurança
em desenvolvimento.

Bons Estudos!
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas

Contextualização
Como garantir que um software é seguro?

A única forma de se garantir que um software segue os princípios de segurança da


informação é através de testes de segurança, esses testes devem ser realizados através
de técnicas com base em frameworks disponíveis no mercado.

A garantia do software está diretamente associada à produção do software e que ao


longo do desenvolvimento o software esteja em acordo e compliance com as principais
normas e metodologias que possam vir a garantir a segurança do produto.

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.

Aprender a identificar e conhecer onde essas vulnerabilidades são divulgadas per-


mitem ao desenvolvedor estar antenado com os principais centros de pesquisas de
vulnerabilidades.

As Vulnerabilidade Mais Comuns


Anualmente o CWE/SANS, uma organização com foco em segurança da
informação, publica uma lista com as vulnerabilidades mais comuns em softwares dos
mais diversos fabricantes, além deste, temos o OWASP, uma organização que também
publica a sua lista de vulnerabilidades com foco em aplicações web.

A seguir vamos listar as vulnerabilidades mais comuns e suas contramedidas:

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.

Ao explorar essa vulnerabilidade, por exemplo, o invasor procurar explorar proble-


mas em requisições pela aplicação e como essa vulnerabilidade trata essas requisiçõ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.

Os algoritmos de criptografia e recursos atuais são de extrema importância e sem-


pre devem ser considerados em qualquer projeto de software, principalmente naquilo
que se refere a dados sensíveis.

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.

Documentar o código fonte é muito importante para compreender os elementos,


variáveis, funções, etc., de um produto de software, porém as informações que devem
compor o código fonte de qualquer produto devem sempre passar por uma análise de
segurança sobre as informações constantes no código.

Dados Sensíveis não Criptografados


Dados sensíveis como senhas de usuários, informações de cartões de crédito entre ou-
tros, muitas vezes são armazenadas no banco de dados de forma desprotegida, esses da-
dos por vezes ficam expostos e podem ser exploradas por injeção de código SQL, como
também por falhas de softwares que acabam expondo esses dados desnecessariamente.

Download de Código sem Verificação de Integridade de Código


Atualmente com a infinidade de recursos disponíveis ao alcance das equipes de
desenvolvimento, existe a possibilidade de se utilizar códigos fontes disponibilizados
na internet para as diversas funções, tais como, gráficos, dashboards, funções espe-
cíficas, etc., e muitas vezes esse tipo de recurso é utilizado sem regras ao não se criar
critérios de uso de códigos de terceiros, sem um pleno entendimento do que aquele
código pode fazer. Uma equipe de desenvolvimento pode comprometer componentes
importantes e com isso ferir os pilares da segurança da informação. 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.

Contra-medidas
As principais medidas para tratar vulnerabilidades expostas anteriormente são
apresentadas a seguir:

Validação das entradas de dados


Um ponto fundamental que deve ser um critério dentro de projetos de software é
considerar que todas as entradas de dados são vulneráveis e que devem ser tratadas,
ou seja, antes que qualquer requisição seja processada ou armazenada ela deve possuir
mecanismo de validação, tanto no lado do cliente quanto do lado do servidor, de forma
que não sejam encaminhadas requisições com dados inválidos ou com códigos maliciosos.

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.

Convém validar os caracteres que são digitados em determinados campos, a maior


parte dos campos de entrada de dados recebem apenas letras ou números.

Devem ser previstos também dentro de nossas aplicações mecanismos de defesas


para ameaças e/ou falhas desconhecidas, de forma a cobrir uma maior superfície de
segurança no software.

Prática de Codificação Defensiva


Segurança de código é muito mais que apenas um código seguro livre de falhas/
defeitos e vulnerabilidades, ele pode se validar de outras técnicas complementares que
elevam o nível de segurança.

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.

Nesta técnica são consideradas também as variáveis de ambiente e configurações do


sistema, pode também utilizar arquivos de configurações com parâmetros de inicialização
que devem ser bem gerenciados e protegidos contra acesso indevido.

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.

A organização desses processos deve estar claramente definida durante o ciclo de


vida de desenvolvimento de software. Determinar o conjunto certo de ferramentas e
configurações necessárias a este ambiente não é uma tarefa fácil.

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.

A interface de desenvolvimento de software pode ser outro ponto de atenção,


porém muitas vezes que cada programador gosta de utilizar suas próprias ferramentas
de trabalho, por facilidade e conhecimento, e deve ser levado em consideração as
ferramentas que permitem a equipe um maior controle sobre a produtividade, segurança
e confiabilidade sem abrir mão da praticidade do desenvolvimento ágil.

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.

O serviço de atualização da Microsoft (Windows Update) utiliza uma assinatura de


código que garante que seu produto é assinado digitalmente e que a execução deste
código será permitida dentro do ambiente em questão.

O uso de técnicas de assinatura de código permite que possamos garantir a integri-


dade do código entregue, como também garantir a qualidade do código instalado em
nosso servidor.

12
Gestão de Configuração
Em qualquer processo de desenvolvimento de software temos o uso do conceito de
código fonte e versionamento.

O versionamento de código permite que possamos restaurar o ponto anterior de


desenvolvimento de algum código que por algum motivo tenha dado problemas.

A gestão da configuração de um ambiente é muito importante, visto que um software


tem por característica crescer ao longo de seu ciclo de vida com novas funcionalidades
ou recursos e que isso requer um controle mais adequado.

Isso envolve o controle do versionamento de código e os ambientes de desenvolvimentos


modernos estão integrados às principais plataformas de controle e versionamento de
código como também ferramentas e soluções de nuvem.

As equipes de desenvolvimento devem estar capacitadas para o uso dessas


ferramentas de gerenciamento de versões. Essas ferramentas e processos precisam ser
definidas em conjunto com o time padronizando para evitar problemas de conflitos e de
entendimentos sobre o funcionamento de determinadas versões ou o uso de diferentes
versões da mesma ferramenta. A padronização garante um ambiente homogéneo para
o time e dessa maneira permite a compatibilidade entre os códigos gerados.

Testes de Segurança de Software


O teste de qualquer software é uma parte importante e crítica dentro do processo de
desenvolvimento. Desenhar segurança é uma coisa, codifica-la é outra totalmente diferente.

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.

A validação e verificação dos requisitos só pode ser garantido através de testes


adequados, a partir deste ponto vamos entender como realizar esses testes.

Padrões de garantia de software


A garantia de um software está associada ao atendimento dos requisitos de
desenvolvimento do produto, lições valiosas podem ser aprendidas quando garantimos
essa segurança através do uso e aprendizado das normas internacionais. Esses padrões
são amplamente utilizados de forma a garantir certos padrões de qualidade e segurança
no desenvolvimento.

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

Adicionalmente questões referentes a eficiência, manutenção e portabilidade são


incluídas nesse modelo também.

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;

Os tipos de testes de software são os seguintes:

Testes funcionais: Os testes funcionais são baseados nas funções do software,


e devem ser executados em todas as fases de testes. O teste funcional considera o
comportamento externo do software (teste de caixa-preta).

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.

Testes estruturais: O teste estrutural é a execução de código e a análise de dados


coletados com o propósito de identificar erros e aprimorar a qualidade do software.

Testes de regressão: Consiste em aplicar, a cada versão ou atualização todos os


testes que já foram aplicados anteriormente do sistema.

Em todos esses tipos de testes existem ferramentas que podem aumentar a


produtividade e a viabilidade dos testes, é altamente recomendado a utilização de
ferramentas de automação de testes, de forma que a cada nova versão ou atualização
todo o ciclo de teste é coberto.

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.

Atualmente existem sistemas de rastreamento de bugs, que permitem aos usuários


finais gerenciar as suas necessidades e solicitações de correções de bugs diretamente aos
times de desenvolvedores.

Um sistema de gerenciamento de bugs é um componente importante em equipes de


desenvolvimento de software e de infraestrutura, seu uso é recomendado na tratativa,
manutenção, base de conhecimento de defeitos e também pode atuar como uma
ferramenta de gerenciamento de incidentes.

O sistema de gerenciamento de erros e problemas permite às equipes adicionar


garantia de qualidade de desenvolvimento de produtos, e dessa maneira avaliar o custo
real do desenvolvimento de um produto, o custo da manutenção e correção de erros.

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.

Em todos esses tipos de testes existem ferramentas que podem aumentar a


produtividade e a viabilidade dos testes, é altamente recomendado a utilização de
ferramentas de automação de testes, de forma que a cada nova versão ou atualização
todo o ciclo de teste é coberto.

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

Os testes têm por objetivo permitir avaliar diferentes aspectos de um produto de


software, pois eles podem avaliar a infraestrutura, o serviço de banco de dados, os
serviços relacionados as funcionalidades do software, etc.

Os testes de segurança são fundamentais e devem fazer parte do escopo do projeto de


desenvolvimento do software. Os possíveis testes que podem ser realizados são explicados
a seguir e podem abranger técnicas distintas e recursos diferentes na sua realização:

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.

O scanning pode ser utilizado para descobrir as características sobre o software


desenvolvido, o ambiente onde a aplicação está funcionando, a versão de determina-
do produto, a validação de credenciais de acesso, entre outros recursos que esse teste
pode proporcionar.

Análise da superfície de ataque


Um atacante busca através da análise de superfície de ataque identificar as características
sobre o ambiente onde o software está funcionando, este tipo de teste permite avaliar a
configuração do ambiente e se está sendo exposto para ambiente externo.

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.

O processo envolve a análise das atividades do sistema operacional, seus serviços


ativos e versões para identificar e descobrir alguma vulnerabilidade que possa ser
explorada por alguma técnica de invasão.

Esse processo visa identificar falhas de configuração do sistema, falhas em hardwares/


softwares até então desconhecidas, deficiências no sistema operacional, questões de
controle ou falhas na implementação da política de segurança.

Todas as análises submetidas e os resultados obtidos pelos testes escolhidos são


apresentadas junto com uma avaliação do seu impacto e muitas vezes com uma proposta
de resolução ou de uma solução técnica.

Testes de Invasão x Análise de Vulnerabilidades


A avaliação de vulnerabilidades tem por objetivo identificar as vulnerabilidades e
documentá-las com as formas de se corrigir essas falhas. Não são tratadas nesse caso se
as vulnerabilidades são possíveis de serem exploradas por uma ameaça.

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.

Como Realizar um Teste de Invasão


Um teste de invasão é realizado com a execução de algumas etapas descritas a
seguir, porém, antes de iniciar um pentest, é necessário que o cliente esteja ciente de
todo o processo para que não haja nenhum tipo de problema ou incidente sobre os
resultados dos testes.

É necessário conhecer os objetivos e o ambiente de negócio onde software está inserido


e compreender as motivações do teste, um bom teste deve observar as seguintes fases:

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.

Serviços como o DNS (Domain Name System ou sistema de nomes de domínio) é


um sistema de gerenciamento de nomes para qualquer recurso conectado à internet ou
em uma rede privada. Através do DNS é possível descobrir como a rede está desenhada
entre outras informações relevantes.

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.

Acessar dados sensíveis dentro da aplicação, mudar a configuração do ambiente e


dos produtos.

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.

Outros tipos de testes


Outros tipos de testes podem ser aplicados ao ambiente de desenvolvimento e/ou ao
software, entre eles: Testes de simulação, Testes para Falhas, Validação de Criptografia,
FIPS 140-2, Testes de Regressão.

Em todos os diversos testes e/ou metodologias de testes existentes, a principal


questão sempre será a de mitigar o Impacto e implementar ações corretivas.

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).

STALLINGS, William. Criptografia e Segurança de Redes: princípios e práticas -


4ª edição. Pearson 512 ISBN 9788576051190.(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

Você também pode gostar