O documento descreve um curso de capacitação em codificação segura. O objetivo do curso é ensinar habilidades e conhecimentos em programação segura. O público-alvo inclui qualquer pessoa interessada em desenvolvimento de software seguro ou auditoria de segurança. O curso aborda tópicos como autorização, configuração, gerenciamento e registro de erros.
2. O objetivo deste curso é capacitar os treinandos em Codificação
Segura – Fundamentos, com habilidades e conhecimento em
Secure Programming - Foundation.
Objetivo do Curso
“A revolução começa com a informação e termina
com o resultado."
(Bernardo Morais)
Público-Alvo
Todos que desejam ter conhecimento em Fundamentos de Programação
Segura
Todos que tenham interesse no desenvolvimento de softwares seguros e
auditores que irão trabalhar com o Framework Secure Software.
3. Alcyon Junior
Gestor de Segurança da
Informação no
SEBRAE
Três graduações
Redes de
Computadores
Pós em Redes pela
Cisco | MBA em
Governança de TI |
Pós em
CyberSecurity
Mestrado em
Segurança
Cibernética
Autor de livros
sobre Segurança
Cibernética
EHF | ISO27002
| ITILF | CNAP |
CEH | MVM |
LPIC-1
Instrutor
credenciado
pela EXIN e
Líder da OWASP
BSB
#WHOAMI
6. DISCLAIMER
The information contained in this document may be privileged
and confidential and protected from disclosure. If the reader of
this document is not the intended recipient, or an employee
agent responsible for delivering this document to the
intended recipient, you are hereby notified that any
dissemination, distribution or copying of this communication is
strictly prohibited.
8. Objetivos
Reconhecer a diferença entre autorização horizontal e vertical.
Reconhecer a diferença entre referências diretas e indiretas.
Reconhecer envenenamento de sessão e condições de corrida.
9. Autorização de horizontal e Vertical
Editor Jornalista A Jornalista B
Criar X
√ √
Leitura
√ √ √
Modificar
√ √ √
Publicar
√
X X
11. Condições de corrida (ataque TOCTOU)
if (!access("/tmp/mydata.txt",W_OK)) {
// TOC: verifica se tem permissões de
escrita
// ...
// JANELA DE ATAQUE
f = fopen("/tmp/mydata.txt","w+");
// TOU: abre o arquivo para edição
write_data_to_file(f);
} else {
fprintf(stderr,“Não é permitido abrir o
arquivo!n");
}
12. Revisão
Autorização Horizontal e Vertical
Escalada de Privilégios
Problemas de Autorização e Como Mitigar estes Problemas
Condições de Corrida
Envenenamento de Sessão
13. Exercício
Qual a diferença entre Autorização e Autenticação?
A. Autorização é o processo de verificar a identidade de alguém e Autenticação é
o processo de verificar se alguém tem permissão para realizar uma operação.
B. Autenticação é o processo de verificar a identidade de alguém e Autorização é
o processo de verificar se alguém tem permissão para realizar uma operação.
C. Autenticação e Autorização são processos para verificar a identidade de
alguém.
D. Autenticação e Autorização são processos para verificar se alguém tem
permissão para realizar uma operação.
15. Objetivos
Justificar a necessidade de endurecimento.
Reconhecer métodos de endurecimento.
Reconhecer diferentes vazamentos de informação.
Explicar a importância do registro para a segurança.
Explicar o princípio de 'Falhar com Segurança'.
Reconhecer ataques por recusa de serviço e mitigações.
16. Componentes de Terceiros, Configuração e
Endurecimento
Aplicando os patches ou correções de segurança
mais recentes
Restringir o acesso a funcionalidades perigosas
Configurando privilégios de acesso
Desativar ou remover recursos de depuração (debug)
Removendo arquivos desnecessários
Alterando senhas padrão
17. Vazamentos de informações
• Inocente?
• Não ajude o hacker.
• Exemplos de vazamento:
• Comentários HTML
• Informações sobre a versão
• Rastreamento de Pilha, IP e servidores em Produção
• Endereços de e-mail pessoais
18. Como evitar definitivamente o
Vazamentos de informações
• Os cabeçalhos de resposta HTTP vazam informações de versão, permitindo ao
invasor procurar por vulnerabilidades específicas.
• As páginas de erro pode exibir exatamente como o erro aconteceu, dando ao
atacante pistas de como a vulnerabilidade poderia ser explorada.
• Endereços IP internos e caminhos de servidores ajudam o atacante a definir
novas metas depois que um sistema tenha sido comprometido ou se o
atacante usa o browser de alguém para realizar ataques de dentro.
• Comentários nas páginas HTML mostrando os nomes e emails ajudam a
realizar o ataque de engenharia social.
• Arquivos de gerenciamento de versão podem vazar informações do código
fonte da aplicação.
19. Manejo e Registro de erros
• Falhar de forma segura!
• Guarde todas as informações necessárias para detectar um ataque. (Logs)
• Tratamento de Erros
• Registro de Erros ou Logs
21. 5 dicas para mitigar o dDos
•Mitigar:
- Limitar a quantidade de recursos que podem ser alocados
- Utilizar ferramentas que auxiliam contra o DoS ou DDoS
- Aplicar patches de segurança
- Limitar o tamanho da banda
- Construir um plano de contingência
23. Exercício
Qual a diferença entre Autorização e Autenticação?
A. Autorização é o processo de verificar a identidade de alguém e Autenticação é
o processo de verificar se alguém tem permissão para realizar uma operação.
B. Autenticação é o processo de verificar a identidade de alguém e Autorização é
o processo de verificar se alguém tem permissão para realizar uma operação.
C. Autenticação e Autorização são processos para verificar a identidade de
alguém.
D. Autenticação e Autorização são processos para verificar se alguém tem
permissão para realizar uma operação.
24. Exercício
Qual das alternativas lista um meio de endurecimento, visando reduzir a
superfície de ataque de um software ?
A. Evitar aplicar patches ou pacotes de correção;
B. No caso de erro, exibir registro com todos os IPs utilizados, inclusive dos
servidores de produção internos;
C. Alterar senhas padrão;
D. Manter acesso as funcionalidades perigosas ou desnecessárias.
Notas do Editor
Page 1
Page 2
Objetivos
Reconhecer a diferença entre autorização horizontal e vertical.
Reconhecer a diferença entre referências diretas e indiretas.
Reconhecer envenenamento de sessão e condições de corrida.
Especificação
4.1.1 Reconhecer a diferença entre autorização horizontal e vertical.
4.1.2 Reconhecer a diferença entre referências diretas e indiretas.
Explicar a autorização horizontal e vertical:
Autorização Horizontal:
Diagrama Azul: Jornalista A trabalha num artigo que pertence ao Jornalista B. Na autorização horizontal, é verificado se uma certa operação pode ser realizada por um certo objeto. Por exemplo: o editor do jornal só tem a permissão de ler, modificar e publicar artigos dentro de uma certa seção do jornal. (Acesso não autorizado ao objeto).
Fique atento: o Jornalista A não pode pegar a identidade do Jornalista B (problema de autorização), porque pode alterar um artigo que não é o seu.
Autorização Vertical:
Cenário Amarelo: o Jornalista A publica seu próprio artigo, o que não poderia ser permitido. Na autorização vertical, é verificado se alguém é permitido a executar uma certa ação, independentemente dos objetos que esta ação afeta. Por exemplo: ao editor do jornal é permitido ler, modificar e publicar artigos, enquanto que ao jornalista só é permitido ler e modificar artigos, mas não publicá-los. (Escalação de Privilégios).
Veja a seção 4.1 do workbook.
Autenticação é o processo de verificar a identidade de alguém e Autorização é o process de verificar se alguém tem permissão para realizar uma operação.
Na autorização vertical verificamos se alguém tem permissão de executar uma determinada ação. Enquanto que na autorização horizontal é verificado se uma operação pode ser realizada por um determinado objeto.
Escalonamento de Privilégio
Permite a um usuário privilégios de acesso concedidos a outro usuário, potencialmente criando uma vulnerabilidade em que um hacker pode reconfigurar um sistema e executar operações ilegais.
Acesso a Objetos Não Autorizados
Quando ocorre a falta de implementação de problemas de autorização
Como Mitigar estes problemas?
Verificar as autorizações
Garantir que o código seja executado com o menor privilégio possível
Cuidar das referências diretas e indiretas
Especificação
4.2.1 Reconhece o envenenamento de sessão e condições de corrida.
Discute o ataque TOC TOU, ver a seção 4.1.6 do Workbook.
Um recurso é acessado sob certas condições de permissões.
Criar e configurar as permissões adequadas antes de gravar dados sensíveis.
Tempo de verificação – TOC
Tempo de Uso – DOU
A condição de corrida é uma situação indesejável quando um dispositivo ou sistema tenta executar duas operações ao mesmo tempo;
Operação atômica é quando se combina o TOC e o TOU em uma única operação atômica.
Falar sobre o Ataque de Envenenamento de Sessão
- Ataque que aproveita um problema no fluxo de trabalho em um aplicativo web quando executado fora da ordem.
Revisar conceitos e termos.
Resposta - B
Objetivos
Justificar a necessidade de endurecimento.
Reconhecer métodos de endurecimento.
Reconhecer diferentes vazamentos de informação.
Explicar a importância do registro para a segurança.
Explicar o princípio de 'Falhar com Segurança'.
Reconhecer ataques por recusa de serviço e mitigações.
Especificações
5.1.1 Justificar a necessidade de endurecimento.
5.1.2 Reconhecer os métodos de endurecimento.
Ver a sessão 5.1 do Workbook.
Boas práticas recomendam a reutilização de software, que acabam utilizando aplicativo ou software de terceiros e precisamos ajustá-los para um ambiente específico.
Este processo é chamado de Endurecimento, visa reduzir a sua vulnerabilidade, reduzir as áreas de ataque, retirando funcionalidade ou código desnecessário, usernames ou logins desnecessários.
Endurecimento visa reduzir a superfície de ataque.
Especificação 5.2.1 Reconhecer as diferenças de vazamento de informações.
Veja alguns exemplos:
Os cabeçalhos de resposta HTTP vazam informações de versão, permitindo ao invasor procurar por vulnerabilidades específicas.
As páginas de erro pode exibir exatamente como o erro aconteceu, dando ao atacante pistas de como a vulnerabilidade poderia ser explorada.
Endereços IP internos e caminhos de servidores ajudam o atacante a definir novas metas depois que um sistema tenha sido comprometido ou se o atacante usa o browser de alguém para realizar ataques de dentro.
Comentários nas páginas HTML mostrando os nomes e emails ajudam a realizar o ataque de engenharia social. (Neste tipo de ataque, o atacante explora as fraquezas no ser humano para convencer pessoas a realizar ações específicas que ajudam o atacante.
Arquivos de gerenciamento de versão podem vazar informações do código fonte da aplicação.
O vazamento de informações ajudam o atacante a atacar de forma mais efetiva.
Ver a sessão 5.2 do Workbook
Frequentemente o vazamento de informação é considerado de baixo risco, porém é preciso ter cuidado.
Especificação 5.2.1 Reconhecer as diferenças de vazamento de informações.
Veja alguns exemplos:
Os cabeçalhos de resposta HTTP vazam informações de versão, permitindo ao invasor procurar por vulnerabilidades específicas.
As páginas de erro pode exibir exatamente como o erro aconteceu, dando ao atacante pistas de como a vulnerabilidade poderia ser explorada.
Endereços IP internos e caminhos de servidores ajudam o atacante a definir novas metas depois que um sistema tenha sido comprometido ou se o atacante usa o browser de alguém para realizar ataques de dentro.
Comentários nas páginas HTML mostrando os nomes e emails ajudam a realizar o ataque de engenharia social. (Neste tipo de ataque, o atacante explora as fraquezas no ser humano para convencer pessoas a realizar ações específicas que ajudam o atacante.
Arquivos de gerenciamento de versão podem vazar informações do código fonte da aplicação.
O vazamento de informações ajudam o atacante a atacar de forma mais efetiva.
Ver a sessão 5.2 do Workbook
Frequentemente o vazamento de informação é considerado de baixo risco, porém é preciso ter cuidado.
Especificações
5.3.1 Explicar a importância de guardar os logs por segurança.
5.3.2 Explicar o princípio do “Falhar de Forma Segura”.
Explicar o princípio de falhar de forma segura: não dar aos usuários mais informações do que eles precisam. Não ajude os hackers.
Veja a seção 5.3 do Workbook.
Descreva como e porquê guardar os logs dos problemas: tenha certeza que você possa identificar novos ataques.
Veja a seção 5.4 do Workbook
- Uso do try – catch – finally para tratamento de erros
- Checar se os recursos usados são suficientes, como disco e memória em uso
Registros ou Logs
- Ajudam a diagnosticar problemas e detectar ataques em um sistema, desde que a informação adequada esteja registrada.
- Informações que devem ser registradas são: registro das tentativas e falhas de login, registro de logins bem sucedidos.
- Não registrar as senhas dos usuários
- Deve conter data e hora de cada registro
- Os registros devem ser armazenados em discos do tipo escreve uma vez ou podem ser automatizados por alguma ferramenta;
Especificação 5.4.1 Reconhecer o Ataque de Recusa de Serviço e suas mitigações.
Explicar como o ataque de DDoS funciona: o atacante assegura que vários atacantes façam a requisição de um simples servidor web, deixando o servidor indisponível.
Por exemplo, criando criando computadores escravos para aumentar seu número de requisições.
Veja a seção 5.5 do Workbook.
Recusa ou Negação de Serviço é quando se consome muitos recursos do sistema até que o sistema não consiga continuar disponível ou oferecendo seus serviços.
Mitigar:
Limitar a quantidade de recursos que podem ser alocados
Utilizar ferramentas que auxiliam contra o DoS ou DDoS
Aplicar patches de segurança
Limitar o tamanho da banda
Construir um plano de contingência