Buscar

Sala de Aula5_ Estacio

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Segurança de aplicações
Aula 5: Melhores práticas de desenvolvimento de software
seguro: O que é segurança de software e gerenciamento de
riscos e Engenharia reversa e técnicas de análise de caixa cinza
Apresentação
Os sistemas computacionais estão presentes em diversas situações da vida cotidiana: Aplicações �nanceiras, de
entretenimento, educacionais, médicas, entre muitas outras. As pessoas, cada vez mais, estão tendo acesso à internet e a
dispositivos móveis. Se, de um lado, é um grande avanço, de outro é um grande desa�o, em especial, do ponto de vista da
segurança da informação.
Atualmente, há muita informação disponível sobre segurança da informação. Entretanto, tão veloz como a evolução da
complexidade dos sistemas é o aumento da quantidade e dos tipos de ataque. Isto, na prática, exige que as pessoas
envolvidas com desenvolvimento de software se quali�quem para desenvolver aplicações seguras.
Além de se preocupar com a construção de novos sistemas, existe a questão de manter sistemas legados. Muitos desses
sistemas foram desenvolvidos sem levar em consideração questões de segurança, com documentação precária, exigindo
a aplicação de processos complexos para resolver problemas e documentar esses sistemas.
Objetivos
Descrever segurança de software e gerenciamento de riscos;
Identi�car engenharia reversa e técnicas de análise de caixa cinza.
Segurança de software e gerenciamento de riscos
A expressão “Segurança de software” é utilizada para indicar que o software
continue funcionando de modo correto sob ataques (MCGRAW, 2003). O
tema “Segurança de Software” cada vez mais tem sua importância
reconhecida, em especial, porque a demanda por serviços eletrônicos tem
aumentado.
Portanto, é necessário que a segurança integre o planejamento do desenvolvimento do software de modo estratégico, com
treinamento das equipes de desenvolvimento e direcionamento objetivo de ações para atingir tal meta, com a aplicação das
melhores práticas de segurança de software.
Apesar da crescente necessidade de aplicar níveis de segurança aos sistemas, ainda há muito a ser estudado e aperfeiçoado,
pois trata-se de um tema relativamente novo. Tanto os desenvolvedores como os arquitetos de software precisam estudar
como criar um produto seguro.
Saiba mais
Defeitos de software (bugs) aumentam as chances de problemas com a segurança. Muitos desses defeitos são bem
conhecidos, como, por exemplo, estouros de buffer e tratamento inconsistente de erros. Os invasores de sistemas –
conhecidos como crackers – tentam explorar defeitos do software. (HOGLUND & MCGRAW, 2004)
Todos os sistemas estão expostos a riscos, mas aqueles que operam na internet e em aplicações móveis apresentam um risco
de segurança mais alto. Isto ocorre porque nesses ambientes a complexidade dos projetos é grande, além de se integrarem a
outros sistemas para os quais a equipe de desenvolvimento tem pouco controle.
Outro ponto que deve ser considerado é que muitas vulnerabilidades já são bem documentadas e, portanto, tanto os
desenvolvedores responsáveis pela implementação de níveis de proteção para os sistemas como os atacantes têm acesso a
elas.
Semelhante a outras questões que devem ser consideradas ainda no início do projeto, a aplicação das melhores práticas de
segurança de software também deve estar incluída no início do ciclo de vida de seu desenvolvimento, contemplando desde o
entendimento do ambiente em que o sistema vai ser usado, ameaças mais comuns, projeção e uso de artefatos de software
especí�cos para proteção e análise de riscos objetivos e detalhados.
Comentário
A forma mais simples de garantir a segurança de um sistema é que ele esteja livre de vulnerabilidades. Obviamente, essa é
uma meta que exige bastante planejamento e trabalho para ser atingida. Como é necessário projetar o software para que ele
seja seguro desde o início do planejamento, faz parte desse processo capacitar os desenvolvedores e arquitetos.
Uma outra etapa que também deve fazer parte das preocupações das equipes de desenvolvimento é sobre a operação do
sistema depois que estiver pronto. Os usuários devem ser educados para fazer uso adequado dos sistemas e cuidar da
segurança das suas informações.
Em relação a controles de proteção que devem ser incluídos no sistema, quando em operação, estão:
A segurança de sistemas deve ser implementada no próprio software, como também devem ser aplicados recursos externos.
No caso dos aspectos internos, o planejamento do projeto deve contemplar testes especí�cos para identi�car e corrigir
vulnerabilidades, enquanto nos aspectos externos devem ser consideradas con�gurações de �rewalls, sistemas de detecção de
intrusões e mecanismos antivírus.
Recursos como SSL, TLS e HTTPS (para proteger as comunicações
por criptogra�a) são importantes para tratar o problema de
segurança. A segurança do software, de modo geral, é um problema
em todo o sistema. Devemos considerar os mecanismos de segurança
(como controle de acesso) e o projeto de segurança.
Um conjunto de práticas recomendadas ao ciclo de vida da segurança de um software envolve: Caso de abuso, requisitos de
segurança, análise de risco, revisão externa, testes de segurança baseados em risco, análise estática, análise de risco, teste de
penetração (teste de intrusão) e quebras de segurança. (HOWAR & LIPNER, 2006),
A segurança deve estar explicitamente no nível de requisitos. No nível de projeto e arquitetura, um sistema deve apresentar
uma arquitetura de segurança que trate dos princípios de segurança, como o princípio do menor privilégio. (BISHOP et al, 2019)
No nível do código, o foco é na identi�cação e correção de defeitos na implementação. O teste de segurança deve abranger
duas estratégias: Testar a funcionalidade de segurança com técnicas padrão de teste funcional e teste de segurança com base
em riscos e com base em padrões de ataque, bem como modelos de ameaças.
Saiba mais
Outro teste que deve ser feito é o de penetração, também conhecido como teste de intrusão. Ele fornece uma boa
compreensão do software em seu ambiente real através da busca de alguma vulnerabilidade que tenha como origem uma má
con�guração do sistema.
Os ataques sempre vão acontecer, especialmente, em sistemas que trabalhem com dados pessoais e �nanceiros. Portanto, é
necessário fazer o monitoramento contínuo do comportamento do software. Os riscos relacionados à segurança estão em
todos os estágios do ciclo de vida do produto; logo, trata-se de um trabalho interdisciplinar que envolve arquitetos,
desenvolvedores e testadores de software.
Conclusão
Aspectos de segurança de sistemas são uma área multidisciplinar que devem ser abordados pelos desenvolvedores,
arquitetos, testadores e operadores do software. Os integrantes desses times devem receber treinamentos que passam pela
conscientização e aplicação de técnicas das melhores práticas que direcionam decisões sobre a arquitetura, o projeto e
construção de planos de testes.
Engenharia reversa e técnicas de análise de caixa cinza
O ciclo de vida de desenvolvimento de software é um processo progressivo, ou seja, parte-se de um modelo abstrato com o
levantamento dos requisitos do sistema, planejamento das etapas de desenvolvimento, da arquitetura, da implementação do
projeto até a implantação do sistema.
A engenharia reversa de software é um processo que funciona exatamente
ao contrário: A partir do sistema já implementado, faz a recuperação do
código fonte, reconstrói o projeto de software e as especi�cações dos
requisitos do sistema.
Trata-se de um processo muito adequado compreender e produzir documentação para um sistema legado (UMAR, 1997).
Desse modo, o trabalho de manutenção �ca mais simples.
Esse processo também pode ser utilizado para explorar vulnerabilidades dos sistemas, melhorando o processo de criação e
direcionando ações corretivas, mas também pode ser usado por atacantes para traçar planos de ataque.
Quando a reengenharia de software é aplicada para melhoraro sistema com impacto na programação, ou na arquitetura, é
chamada de Reengenharia reversa. Entre as etapas da engenharia reversa de software estão (PRESSMAN, 2011):
Clique nos botões para ver as informações.
Levantamento de todas as informações possíveis sobre o software, tais como documentação do código e de arquitetura.
Coleta de dados 
Caso não seja possível ter acesso ao código-fonte, pode-se fazer uso de ferramentas que recuperam os códigos a partir
dos arquivos binários. Obviamente, essa atividade deve ser realizada com a devida autorização, pois pode ter implicações
legais.
Obtenção do código-fonte 
Identi�car as estruturas do sistema.
Extração de estruturas 
Relacionar o funcionamento do sistema às suas estruturas.
Compreensão do �uxo de controle 
 Teste cinza
 Clique no botão acima.
Teste cinza
Entre os diversos tipos de teste de software estão os que são aplicados para compreender o comportamento dinâmico
do código analisado. Os testes que compõem essa categoria são:
Teste da caixa branca: Para serem executados é necessário que haja acesso ao código fonte. Desse modo, os
testes podem ser elaborados para veri�car partes especí�cas do sistema;
Teste de caixa preta: Baseado nos requisitos do software. Os módulos são testados sem que suas estruturas
internas sejam exploradas, ou seja, o sistema é analisado do ponto de vista funcional, em que uma entrada é
fornecida e espera-se por uma determinada resposta;
Teste de caixa cinza: Envolve aspectos dos testes de caixa branca e preta.
O teste de caixa cinza é realizado com conhecimento limitado da estrutura interna do sistema. O testador utiliza a
especi�cação do software e testa se a lógica do código está tratando-a corretamente.
A aplicação do teste de caixa-cinza utiliza engenharia reversa, pois, a partir da análise dos resultados, pode ser
necessário voltar ao código-fonte para entender a lógica, identi�car e corrigir possíveis defeitos. É imparcial e não
intrusivo, pois o papel do testador é procurar por possíveis inconsistências. As alterações, caso sejam necessárias,
devem ser feitas pelo desenvolvedor.
A seguir estão alguns subtipos de teste de caixa cinza. (KHAN & KHAN, 2012)
Teste de matriz ortogonal: Aplicado como subconjunto de todas as combinações possíveis;
Teste de matriz: Apresentado o relatório de status do projeto;
Teste de regressão: Se novas alterações forem feitas no software, implica na execução de casos de teste;
Teste de padrão: veri�ca a arquitetura e o projeto do sistema.
Entre as vantagens e desvantagens do teste cinza estão (KHAN & KHAN, 2012):
Construir cenários de testes nunca é uma tarefa trivial, mas deve ser feita, pois é mais simples corrigir um problema
ainda em um ambiente controlado do que quando o sistema já está em operação.
Vantagens
A combinação dos
benefícios das técnicas
dos testes de caixa branca
e preta;
A elaboração de cenários
pode considerar tanto
aspectos relacionados ao
código como aos
requisitos do sistema;
O teste é imparcial.
Desvantagens
A cobertura do teste é
limitada, pois o acesso ao
código fonte não está
disponível;
Muitas situações podem
não ser cobertas pelo
teste;
Os casos de teste podem
ser redundantes.
Conclusão
Garantir que um sistema atenda aos requisitos do usuário é muito importante, mas não é tudo. Outras considerações devem
ser tratadas, como a segurança, por exemplo.
Além de aplicar as melhores práticas que já são de domínio público, é necessário realizar muitos testes, que devem ser
precedidos de elaboração de cenários que re�itam as situações a que o sistema será exposto.
O teste mostra apenas a presença de erros, não a falta deles. Portanto, os desenvolvedores devem ser treinados tanto nos
aspectos teóricos como nos técnicos, para desenvolver sistemas com qualidade e, portanto, reduzir os bugs e a exposição a
riscos.
Atividades
1 - A segurança é um item essencial para qualquer software e deve ser uma preocupação constante, pois a ausência de um
tratamento especí�co permite que atacantes explorem as vulnerabilidades que possam existir no sistema.
Nesse sentido, selecione a opção correta que justi�ca a incômoda existência de vulnerabilidades nos sistemas, mesmo quando
a segurança faz parte do planejamento da equipe de desenvolvimento.
a) Os sistemas estão cada vez mais complexos e, além disso, já existem muitas informações disponíveis sobre como explorar
vulnerabilidades.
b) Os projetos de software estão preocupados com modelos conceituais e não têm como implementar recursos de proteção.
c)Devido à limitação de recursos financeiros, recursos de segurança só são implementados no final do projeto.
d) Não existem recursos que possam garantir a segurança de um sistema.
e) As aplicações desenvolvidas para dispositivos móveis oferecem segurança, desde que o usuário faça uso de senhas.
2 -  As questões relacionadas à segurança dos sistemas devem fazer parte de todo o ciclo de desenvolvimento; inclusive, devem ser
contempladas quando o sistema estiver em operação. A respeito dos mecanismos de proteção de software, selecione a opção correta:
a) Devem esconder o código-fonte completamente e obrigar o usuário a usar um software antivírus.
b) Devem incluir muitas etapas de verificação da identidade do usuário para garantir que não é um atacante que está usando o sistema.
c) Devem ter testes para evitar que sejam incluídas instruções que mudem o comportamento para o qual o sistema foi projetado.
d) Nunca devem expor mensagens de erros para os usuários, pois podem ser usadas para explorar vulnerabilidades no sistema.
e) Sempre que uma vulnerabilidade for detectada deve ser resolvida, bem como disponibilizada uma nova versão do sistema.
3 - A segurança de um software deve ser vista de forma holística, ou seja, contemplar questões intrínsecas ao sistema, bem
como sua interação com os sistemas e os usuários. Nesse sentido, selecione a opção correta sobre itens que auxiliam para
aumentar a segurança da operação de um sistema.
a) Desde que consideradas na arquitetura do software, as questões relacionadas à segurança devem ficar concentradas em ataques
externos.
b) A utilização de protocolos como SSL, TLS e HTTPS elimina ataques externos que tenham como objetivo roubar dados.
c) O firewall, junto com sistemas antivírus, elimina ataques de programas externos.
d) Para aumentar a proteção de um software devem ser consideradas questões que envolvem a arquitetura do software e tratamento de
erros, como a configuração de recursos de proteção externos.
e) Devido à complexidade dos sistemas e da interação que fazem com outros programas, é necessário que as decisões e implementações
relacionadas à segurança sejam tratadas por uma equipe específica.
4 - A engenharia reversa encontra especial importância para documentar sistemas legados. Trata-se de um processo complexo
que exige bastante planejamento. Selecione a opção correta sobre a engenharia reversa:
a) Tem como objetivo revisar a arquitetura do projeto de software.
b) Tem como objetivo detectar vulnerabilidades.
c) Uma das etapas da engenharia reversa é extrair as estruturas do sistema.
d) Por ter como objetivo a melhoria contínua do sistema, trata-se de um processo progressivo.
e) Sempre deve fazer parte do ciclo de vida de desenvolvimento do software.
5 - A engenharia reversa é um processo complexo que, entre outras coisas, exige planejamento, treinamento e disponibilidade
de recursos, bem como programas para obter o código-fonte a partir dos arquivos do sistema. Selecione a opção correta que
justi�ca a aplicação de engenharia reversa:
a) Dada a sua complexidade, é uma forma de qualificar a equipe de desenvolvimento.
b) No planejamento do projeto, existe a possibilidade de superestimar o tempo de entrega de um projeto; então, se for esse o caso, é
uma forma de manter a equipe ocupada.
c) Auxilia na identificação de vulnerabilidades.
d) Deve ser aplicada apenas para sistemas legados.
e) É um processo que melhora a qualidade dos sistemas, além de documentá-los.6- Os testes de software são importantes para detectar vulnerabilidades e, desse modo, facilitar o processo de melhoria do
sistema. O teste cinza possui algumas características que auxiliam nesse processo de melhoria. Selecione a opção correta que
re�ete uma vantagem desse teste:
a) Ele cobre todos os caminhos que o sistema pode fazer.
b) Reduz os custos do projeto, pois o testador também atua como um desenvolvedor.
c) Deve ser aplicado apenas para capturar vulnerabilidades de segurança.
d) Melhoram a qualidade do projeto, pois os testadores podem fazer alterações pontuais no código.
e) São mais confiáveis, pois separam as responsabilidades do desenvolvedor e do testador.
Notas
CNE 1
Conselho Nacional de Educação.
Título modal 1
Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente
uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da
indústria tipográ�ca e de impressos.
Referências
BISHOP, M.; SULLIVAN, E.; RUPPEL, M. Computer Security: Art and Science. Addison-Wesley/Pearson Education, Year: 2019. pp
457 - 464.
HOGLUND, G.; MCGRAW, G. Exploiting Software: How to Break Code, Addison-Wesley, 2004.
HOWAR, M.; LIPNER, S. The Security Development Lifecycle. Microsoft Press, Redmond, WA, 2006.
KHAN, M.E.; KHAN, F. A Comparative Study of White Box, Black Box and Grey Box Testing Techniques. International Journal
of Advanced Computer Science and Applications (IJACSA), 3(6), 2012.
MCGRAW, G. Software security. in IEEE Security & Privacy, vol. 2, no. 2, pp. 80-83, March-April 2004, doi:
10.1109/MSECP.2004.1281254.
PRESSMAN, R.S. Engenharia de Software - Uma Abordagem Pro�ssional, 7.ed. Porto Alegre: AMGH, 2011. pp. 670-674.
UMAR, A. Application (Re)Engineering: Building Web Based Applications and Dealing with Legacies. Prentice Hall, 1997.
Próxima aula
Exploração de software servidor e software cliente;
Gerenciamento de correção de bugs e Documentação do software e da arquitetura.
Explore mais
Leia os textos:
Leia o texto Reverse Engineer and Analyze Your Source Code
https <https://www.imagix.com/> ://www.imagix.com/ <https://www.imagix.com/>
 
Leia o texto Visualize Your Code
https://scitools.com/ <https://scitools.com/>
 
Leia o texto Teste de software
https://pt.wikipedia.org/wiki/Teste_de_software
https://www.imagix.com/
https://www.imagix.com/
https://scitools.com/

Continue navegando