Currículo
- 4 Sections
- 7 Lessons
- 6 Hours
- Introdução ao desenvolvimento de software seguro3
- Práticas de desenvolvimento seguro: técnicas de codificação segura, modelação de ameaças e avaliação de riscos3
- Implementação e manutenção: implementação de software seguro e práticas de segurança pós-implementação3
- Leituras adicionais1
Fundamentos e base teórica
Técnicas de codificação segura
As técnicas de codificação segura são essenciais para os programadores criarem aplicações resistentes a ataques e que protejam os dados dos utilizadores. Estas técnicas correspondem a um subconjunto de práticas de desenvolvimento seguro que se concentram especificamente na escrita de código de uma forma que protege contra a introdução de vulnerabilidades de segurança. Segue-se uma visão geral de algumas das principais técnicas de codificação segura:
- -validação de entrada: assegure que todas as entradas recebidas de utilizadores, ficheiros, bases de dados ou qualquer fonte externa são validadas quanto ao tipo, comprimento, formato e intervalo antes de serem utilizadas na aplicação;
- -codificação de saída: ao apresentar ou transmitir dados, codifique-os adequadamente para evitar ataques de injeção, como o Cross-Site Scripting (XSS). Por exemplo, a saída HTML deve ser codificada para evitar que o navegador execute scripts maliciosos;
- -consultas parametrizadas: utilize consultas parametrizadas ou instruções preparadas ao aceder a bases de dados para evitar ataques de injeção de SQL;
- -privilégio mínimo: aplique este princípio, executando processos e acedendo a recursos com as permissões mínimas necessárias;
- -autenticação e autorização: implemente mecanismos de autenticação fortes e aplique verificações de autorização rigorosas para garantir que apenas os utilizadores legítimos podem aceder a funções e dados sensíveis;
- -gestão de palavras-passe: armazene as palavras-passe de forma segura, utilizando algoritmos de hashing fortes e adaptáveis, como o bcrypt ou o Argon2;
- -gestão de sessões: armazene dados de sessão de forma segura e garanta que os tokens de sessão são transmitidos de forma segura, normalmente em cabeçalhos HTTP com a utilização correta de HTTPS;
- -tratamento de erros: implemente um tratamento de erros robusto que não exponha informações sensíveis ao utilizador;
- -encriptação: utilize a encriptação para proteger os dados em trânsito (com TLS/SSL) e em repouso. Certifique-se de que as implementações de encriptação estão atualizadas e utilizam algoritmos e chaves fortes;
- -assinatura de código: assine o seu código para garantir a sua integridade e origem. Tal ajuda a evitar adulterações e pode alertar os utilizadores para alterações não autorizadas;
- -operações de ficheiros seguras: ao manipular ficheiros, certifique-se de que as operações de ficheiros são executadas de forma segura para evitar ataques de passagem de diretórios e de que as permissões de ficheiros são definidas adequadamente;
- -gestão de memória: para linguagens que não gerem automaticamente a memória, como o C e o C++, seja diligente na atribuição, utilização e libertação de memória para evitar fugas de memória e transbordos de memória intermédia;
- -tratamento de condições de corrida: escreva código que seja seguro para a execução simultânea e que trate as condições de corrida, para evitar problemas como bugs de tempo de verificação para tempo de utilização (TOCTOU);
- -sanitização de dados: verifique o conteúdo dos dados que serão passados para intérpretes ou shells de comando para evitar ataques de injeção;
- -revisões de código e análise estática: efetue regularmente revisões de código centradas na segurança e utilize ferramentas de análise estática para detetar automaticamente potenciais vulnerabilidades no código;
- -segurança de dependências: mantenha as bibliotecas e dependências de terceiros atualizadas e verifique se existem vulnerabilidades conhecidas utilizando ferramentas de análise de composição de software.

Figura-4
(Fonte: https://securityboulevard.com/2022/01/7-security-coding-guidelines-to-keep-in-mind/)
Modelação de ameaças e avaliação de riscos
A modelação de ameaças e a avaliação de riscos são processos proativos utilizados na cibersegurança e no desenvolvimento de software para identificar, priorizar e mitigar potenciais ameaças a um sistema. Estas práticas fazem parte de uma abordagem mais alargada à segurança conhecida como segurança desde a conceção, que realça a importância de incorporar medidas de segurança desde as primeiras fases de desenvolvimento. A modelação de ameaças é uma abordagem estruturada para identificar e tratar potenciais ameaças a um sistema.

Figura-5
(Fonte: https://www.security-analyst.org/threat-analysis-and-risk-assessment/)
Boas práticas para modelação de ameaças e avaliação de riscos
- começar cedo: inicie a modelação das ameaças e a avaliação dos riscos na fase de conceção e repita-a ao longo do ciclo de vida do desenvolvimento;
- envolver equipas multidisciplinares: inclua membros com perspetivas diversas, como programadores, profissionais de segurança, pessoal de operações e analistas comerciais;
- utilizar estruturas e metodologias padrão: aplique estruturas estabelecidas (como NIST, ISO ou OCTAVE) e metodologias (como STRIDE ou PASTA) para orientar o processo;
- manter a documentação atualizada: assegure que todas as conclusões e ações estão bem documentadas e facilmente acessíveis;
- integrar no processo de desenvolvimento: integre a modelação de ameaças e a avaliação de riscos no SDLC e torne-o parte das práticas de desenvolvimento regulares;
- educar e formar: disponibilize formação a todos os intervenientes do processo para garantir que compreendem a importância e os métodos de modelação de ameaças e avaliação de riscos;
- reavaliar regularmente: a segurança não é um esforço único. Reavalie regularmente as ameaças e os riscos em resposta a novas vulnerabilidades, alterações no sistema ou ameaças emergentes.
Testes de segurança
Os testes de segurança são uma componente fundamental do SDLC e da estratégia global de cibersegurança. Envolvem a avaliação das caraterísticas de segurança de um sistema para garantir que protegem os dados e mantêm a funcionalidade conforme pretendido. Segue-se uma visão geral dos vários tipos de testes de segurança e da forma como são normalmente efetuados:
a) análise de vulnerabilidades: ferramentas automatizadas analisam sistemas, redes e aplicações para detetar vulnerabilidades conhecidas;
b) testes de penetração (Pen Testing): simulam um ciberataque para identificar e explorar vulnerabilidades em sistemas, redes e aplicações. É normalmente realizado por hackers éticos que utilizam as mesmas técnicas que os atacantes maliciosos, mas fazem-no de forma controlada e autorizada;
c) auditoria de segurança: trata-se de uma avaliação sistemática dos controlos e processos de segurança para garantir que são aplicados de forma correta e eficaz;
d) avaliação da segurança: uma avaliação mais alargada que engloba a análise de vulnerabilidades, os testes de penetração, a auditoria de segurança e a avaliação de riscos. Fornece uma visão global da posição de segurança de uma organização;
e) avaliação de riscos: implica a identificação, quantificação e priorização dos riscos para os ativos da organização;
f) hacking ético: semelhante aos testes de penetração, consiste em atacar deliberadamente os sistemas de uma organização para encontrar vulnerabilidades, na perspetiva de um atacante;
g) revisão do código: as revisões de código podem ser efetuadas manualmente ou através de ferramentas automatizadas e constituem uma parte essencial da segurança do processo de desenvolvimento de software;
h) revisão da gestão da configuração: é fundamental garantir que os sistemas e as aplicações são configurados de forma segura;
i) auditoria de conformidade: verifica se os sistemas e processos cumprem as normas e regulamentos de segurança relevantes (como o Regulamento Geral sobre a Proteção de Dados – RGPD – e outros);
j) red teaming: uma simulação de ataque a vários níveis que testa até que ponto o pessoal, as redes, as aplicações e os controlos de segurança física de uma organização podem resistir a um ataque de um adversário real;
k) testes de engenharia social: testam a suscetibilidade do pessoal de uma organização a táticas de engenharia social, como phishing, pretexting, baiting ou tailgating;
l) avaliação da postura: consiste em analisar e compreender o estado de segurança dos sistemas informáticos, redes e outros ativos de informação para identificar vulnerabilidades de segurança.

Figura-6
