Este documento fornece uma introdução aos fundamentos da segurança de software, discutindo conceitos-chave, apontamentos relevantes, estratégias de gestão e desenvolvimento seguro de software. O foco é ajudar os leitores a entenderem melhor as origens das falhas de software e por onde começar a desenvolver software de forma mais segura.
2. Este é um conteúdo independente e pessoal.
Meu empregador não tem qualquer responsabilidade sobre
o que será apresentado aqui.
3. André Henrique, União Geek, 2020.
Who am I
● Entusiasta de Segurança da Informação e
Cofundador da Startup União Geek;
● Apaixonado por GNU/Linux, Programador,
Blogueiro, Gamer e Professor e eterno aluno;
● Pentester e Consultor em Segurança
Cibernética;
● Leader Writer na União Geek;
● Escritor de artigos (nacional e internacional) nos
portais União Geek, Medium e Hacking Articles;
● Competidor de CTF.
4. André Henrique, União Geek, 2020.
Who am I
● Formação Acadêmica:
– Redes de Computadores;
– Análise e Desenvolvimento de Sistemas;
● Especialista Pós-graduado:
– Segurança de Redes de Computadores com
ênfase em Análise de Tráfego Malicioso;
– Ethical Hacking & Cybersecurity com ênfase
em Segurança Ofensiva.
● Certificações internacionais em infraestrutura de
redes e ethical hacking.
5. ( 5 pg. )O que veremos hoje?
●
Conceitos e Fundamentos de Segurança da Informação
●
Apontamentos Relevantes sobre a Segurança
●
Estratégias de Gestão: Metodologia de Segurança
●
Investimento em Desenvolvimento Seguro
●
O Software no Contexto Atual
●
Contexto da Insegurança de Software
●
Origem das Falhas de Software
●
Desenvolvimento Seguro de Software
●
Por onde começar?
7. ( 7 pg. )
“A proteção oferecida para um sistema de informação
automatizado a fim de alcançar os objetivos de preservar
a integridade, a disponibilidade e a confidencialidade
dos recursos do sistema [...]”
- William Stallings
Manual de Segurança de Computadores do National Institute of Standards and Technology.
Livro Criptografia e Segurança de Redes, Pearson.
Segurança da Informação é…
8. ( 8 pg. )O que é Segurança da Informação?
Proteção
Preservar
Conjunto de Informações
O valor que estas informações possuem
9. ( 9 pg. )O que é informação segura?
Você sabe definir
o que são
“informações seguras”?
Para que fosse possível
definir uma informação como sendo
segura, criou-se três princípios
de Segurança da Informação.
Tais princípios
são conhecidos como
“Tríade CIA”
11. ( 11 pg. )Os Pilares: Tríade CIA
Confidencialidade
Disponibilidade
Integridade
• garantir que apenas a pessoa correta
tenha acesso à informação que
queremos distribuir
• garantir que os dados não sofram
alterações, tendo atenção com o seu ciclo
de vida (criação, manutenção e descarte)
• deve garantir que a informação esteja
sempre disponível para uso quando
usuários autorizados necessitarem
13. ( 13 pg. )
“The only truly secure system is the one that is off,
inside a concrete block and guarded in a room with
armed guards, and yet I have my doubts.”
- Gene Spafford
Diretor de Operações de Computador, Auditoria e Tecnologia de Segurança
Purdue University, França
Apontamentos relevantes...
14. ( 14 pg. )Apontamentos relevantes...
Não existe HARDWARE ou
SOFTWARE que possa garantir
100% de segurança
a uma rede ou sistema.
Segurança não é um estado
que se pode alcançar, é a
direção em que se pode
navegar, mas que não
chegaremos ao seu destino.
15. ( 15 pg. )Apontamentos relevantes...
Segurança é um
processo dinâmico,
resultado de um
trabalho contínuo
em sua rede ou
Sistema.
Segurança é a percepção
de se estar protegido de
riscos, perigos e perdas, onde
o que devemos fazer é
administrar um nível
aceitável de risco.
16. ( 16 pg. )
“A segurança então, é definida como a proteção contra
as ameaças.”
Apontamentos relevantes...
A má notícia é que é praticamente impossível criar uma lista
completa de ameaças para um determinado sistema.
17. ( 17 pg. )
“A segurança então, é definida como a proteção contra
as ameaças.”
Apontamentos relevantes...
A boa notícia é que, felizmente, muitas ameaças já são ‘manjadas’
pelos desenvolvedores e testadores e, assim, dá para reverter a
situação e saber como se proteger delas.
18. ( 18 pg. )
“A Segurança não é um produto que se pode comprar
de prateleira, mas que consiste de políticas, pessoas,
processos e tecnologia.”
- Kevin David Mitnick
Hacker, Engenheiro Social
Considerado pelo FBI e NSA, como o maior Hacker de seu tempo
Apontamentos relevantes...
19. ( 19 pg. )Apontamentos relevantes...
Como planejar de uma forma correta?
A partir de uma política de segurança
Utilizando técnicas de gerenciamento e boas práticas
Planejando cada ação
20. ( 20 pg. )Apontamentos relevantes...
O estabelecimento de um Programa de
Segurança da Informação em sua
empresa ou residência deve passar sempre
por ações que norteiem os pilares.
Tal modelo deve estar amparado
por um Sistema de Gestão de
Segurança da Informação que
precisa ser planejado e
organizado, implementado,
mantido e monitorado.
22. ( 22 pg. )
Seguindo a citação de Mitnick, para que se alcancem
resultados consistentes a partir de uma política de
segurança de software...
Gestão de Vulnerabilidades
23. ( 23 pg. )
...a estratégia da empresa deve incluir algum
planejamento para integrar com sucesso os três
elementos essenciais do Processo de Gerenciamento de
Vulnerabilidades...
Gestão de Vulnerabilidades
24. ( 24 pg. )
Pessoas, Tecnologias e
Metodologias
Gestão de Vulnerabilidades
25. ( 25 pg. )Gestão de Vulnerabilidades
●
Definir o grupo de segurança de software,
que são todos os profissionais envolvidos no
processo de melhoria da segurança das
aplicações.
Pessoas
Tecnologia
●
Adotar uma ferramenta eficiente para executar
testes de avaliação de segurança nas aplicações
e nos servidores web com recursos de gerenciamento
de processo.
26. ( 26 pg. )Gestão de Vulnerabilidades
●
Definir os ambientes a serem testados, as
oportunidades de teste, análise de
resultados, o encaminhamento dos
relatórios, e acompanhamento das melhorias.
Metodologias
Gerenciar vulnerabilidades permite
identificar falhas de segurança antes de
um agente malicioso, e, ao promover
ações imediatas de melhoria no
desenvolvimento, a empresa antecipa-se
ao risco de ataques.
28. ( 28 pg. )Investindo em segurança...
●
Cibercrime, vazamento de dados e
segurança de informações recebem
mais atenção que nunca nos
noticiários.
●
Governos e empresas dedicam mais e
mais recursos a essas áreas.
29. ( 29 pg. )Investindo em segurança...
●
No entanto, a maioria dessa atenção parece
estar focada em medidas reativas:
– Como pegar os criminosos cibernéticos?
●
em vez de em medidas preventivas:
– Como podemos tornar nossos sistemas
seguros?
30. ( 30 pg. )Investindo em segurança...
Embora seja difícil medir,
relatórios de pesquisa
indicam que a construção da
segurança vale o
investimento.
31. ( 31 pg. )Investindo em segurança...
●
A educação é fundamental no
processo de construção de
software.
●
Se os programadores não
entendem a segurança do
software que estão construindo,
qualquer investimento adicional
no processo poderá ser inútil.
33. ( 33 pg. )Características
●
Software é onipresente, é ubíquo;
●
Ele afeta todos os aspectos de nossas vidas pessoais e
profissionais;
●
Dependemos do software nos diversos aspectos da nossa vida;
●
Funções críticas de negócio dependem de software;
●
Software está cada vez mais exposto à Internet;
●
Exposição aumentada torna o software visível para terceiros;
●
Nem todas as pessoas são bem intencionadas.
34. ( 34 pg. )Características
●
A economia e as defesas das nações dependem, em grande parte, da
execução de software confiável;
●
Vulnerabilidades de software também são ubíquas, comprometendo:
– identidades pessoais
– propriedade intelectual
– confiança do consumidor
– serviços empresariais e operações
– infraestruturas críticas e governo
35. ( 35 pg. )Características
●
Complexidade:
– Maioria dos ataques exploram bugs designados por vulnerabilidades;
– Estima-se entre 5-50 bugs por 1000 linhas de código;
Windows XP tinha aproximadamente 40 milhões de linhas de código
●
Extensibilidade:
– O que é o software nos nossos computadores?
S.O. + software em produção + patches + bibliotecas + drivers de
dispositivos + plugins + etc...
36. ( 36 pg. )Características
●
Conectividade:
– Internet (bilhões de utilizadores) + sistemas de controle +
smartphones, ATMs + eletrodomésticos + etc...
38. ( 38 pg. )
“We wouldn’t have to spend so much time,
money, and effort on network security if we
didn’t have such bad software security.”
- John Viega, CTO of Secure Software Solutions
- Gary McGraw, Cigital's CTO
Building Secure Software, Editora Addison Wesley, 2001.
Um pensamento...
39. ( 39 pg. )...e quais as soluções?
Para solucionar o problema da segurança nas aplicações é
necessário atuar na sua fonte, que está na falta de
critérios de segurança durante o ciclo de desenvolvimento
de software adotado pela empresa ou contratado de terceiros.
• ou seja, não basta adquirir uma ferramenta de testes...
• ...e colocá-la nas mãos da equipe de segurança de
de T.I. e achar que isso resolverá tudo.
40. ( 40 pg. )
“Uma ferramenta por si só não pode resolver o
que fundamentalmente é um problema de
processo no desenvolvimento”
- Neil MacDonald, Gartner Group
...e mais um pensamento ;)
41. ( 41 pg. )Causas de software inseguro
Então por que não focar no
desenvolvimento seguro desde o início
do projeto?
42. ( 42 pg. )Causas de software inseguro
●
A velocidade que são desenvolvidos para atender a demanda do
mercado;
●
Nossa dificuldade de focar na medição de riscos;
●
O cliente também acaba decidindo não precisar de segurança
contra certos tipos de ameaça;
●
Falta de conhecimento;
●
Intenção maliciosa.
43. ( 43 pg. )Causas de software inseguro
Imagina se alguém vai
se atrever a perder seu
tempo, atacando um
software que foi
desenvolvido por
mim...
45. ( 45 pg. )Origem das falhas
Maioria das
vulnerabilidades em
softwares são causadas
por erros de
programação.
46. ( 46 pg. )Origem das falhas
● Segundo a ENISA (European Union
Agency for Cybersecurity) +64% das
vulnerabilidades da base do NIST
correspondem a erros de
programação (State of Vulnerability
Report 2018/2019, Dec 2019);
● +50% dessas são originadas em
erros clássicos como buffer
overflows, cross-site scripting e
outras falhas de injeção.
47. ( 47 pg. )Origem das falhas
● Vulnerabilidades mais comuns incluem:
➔Integer overflow
➔Buffer overflow
➔Format string
➔Autenticação ausente
➔Autorização ausente ou incorreta
➔Confiar em entradas não-confiáveis
48. ( 48 pg. )CWE
Top Common Vulnerabilities in Softwares 2018/2019
CWE: Common Weakness Enumeration
49. ( 49 pg. )CAPEC
Top 20 most frequent CAPECs for exploitable critical vulnerabilities
CAPEC: Common Attack Pattern Enumeration and Classification is
a list of software weaknesses.
51. ( 51 pg. )Desenvolvimento Seguro de Software
●
Começa com o entendimento de práticas de codificação inseguras e como
podem ser exploradas;
●
Projetos inseguros podem levar a “erros não intencionais”, ou seja, o código
está corretamente implementado, mas o software resultante é vulnerável;
52. ( 52 pg. )Desenvolvimento Seguro de Software
●
Projetos seguros exigem um entendimento dos requisitos de software
funcionais e não-funcionais;
●
Codificação segura exige um entendimento específico de cada linguagem
de programação e tecnologia e/ou plataformas envolvidas no desenvolvimento.
53. ( 53 pg. )Fontes de Insegurança em Software
●
Considerações mínimas ou ausentes de segurança
durante todo o ciclo de vida do software;
●
Complexidade, mudanças, suposições incorretas;
●
Não pensar como um atacante;
●
Especificações e projetos falhos;
●
Implementação “pobre” das interfaces de software;
●
Interações inesperadas e não-intencionais;
●
Conhecimento inadequado de práticas de codificação
segura.
55. ( 55 pg. )Por onde começar?
●
Para saber do que precisamos nos proteger e como devemos nos proteger,
precisamos entender quais são as vulnerabilidades mais encontradas em
softwares.
●
No cenário atual de segurança da informação, percebemos que devemos estar
preparados contra os possíveis ataques.
●
Nesse contexto, um grande aliado contra as ameaças na integração de
segurança no ciclo de desenvolvimento é a metodologia OWASP Software
Security Assurance Process, também descrita pela sigla OSSAP.
56. ( 56 pg. )Por onde começar?
●
Ele apresenta o guia Open Web Application Security Project, mais conhecido
como OWASP.
– Por ele temos a lista das 10 vulnerabilidades mais comuns que são
exploradas nas aplicações web.
●
Mas, este guia não é o único que podemos encontrar. Há outro também muito
conhecido e mundialmente explorado que é o Top 25 CWE do MITRE.
●
Além disso, também vários outros projetos e instituições elaboram e
divulgam relatórios dos mais diversos tipos de ataques, como é o caso da
White-Hat Security.
57. ( 57 pg. )
Top 25 Most Dangerous Errors (CWE)
1. Improper Restriction of Operations within the Bounds of a
Memory Buffer
2. Improper Neutralization of Input During Web Page
Generation ('Cross-site Scripting')
3. Improper Input Validation
4. Information Exposure
5. Out-of-bounds Read
6. Improper Neutralization of Special Elements used in an SQL
Command ('SQL Injection')
7. Use After Free
8. Integer Overflow or Wraparound
9. Cross-Site Request Forgery (CSRF)
10.Improper Limitation of a Pathname to a Restricted Directory
('Path Traversal')
11.Improper Neutralization of Special Elements used in an OS
Command ('OS Command Injection')
12. Out-of-bounds Write
13. Improper Authentication
14. NULL Pointer Dereference
15.Incorrect Permission Assignment for Critical Resource
16.Unrestricted Upload of File with Dangerous Type
17.Improper Restriction of XML External Entity Reference
18.Improper Control of Generation of Code ('Code
Injection')
19.Use of Hard-coded Credentials
20.Uncontrolled Resource Consumption
21.Missing Release of Resource after Effective Lifetime
22.Untrusted Search Path
23.Deserialization of Untrusted Data
24.Improper Privilege Management
25.Improper Certificate Validation
59. ( 59 pg. )
O que fazer?
●
Conhecer as principais vulnerabilidades de sistemas
(pode utilizar o projeto OWASP Top 10 ou CWE Top 25)
●
Implemente boas práticas durante o ciclo de
desenvolvimento do software
●
Leia a documentação da linguagem/tecnologia
escolhida (utilize como guia de cabeceira)
●
Leia livros e artigos sobre a área e sua linguagem
●
Mantenha contato com programadores mais experientes
60. ( 60 pg. )
O que fazer?
●
Estar sempre atualizado sobre o tema
●
Participe de eventos e treinamentos que
abordam a programação segura
●
Utilize o bom senso e mantenha seu código limpo,
legível e de fácil manutenção