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
Desenvolvimento de software seguro
Bem-vindo/a à subunidade dedicada à proteção de terminais, um aspeto essencial para todas as Pequenas e Médias Empresas (PME) na atual era digital. Esta secção é dedicada à importância, conceitos básicos e princípios do desenvolvimento de software seguro. São explicados os conceitos de segurança de software, sublinhando as etapas básicas do processo de desenvolvimento de software seguro. Além disso, ao centrar-se nas competências necessárias para a prática do desenvolvimento de software seguro, os participantes serão incentivados a reduzir as vulnerabilidades de segurança e a criar software mais resistente às ameaças cibernéticas.
Compreender o desenvolvimento de software seguro
Trata-se de uma abordagem à criação de software informático que realça a importância de considerar a segurança em todas as fases do processo de desenvolvimento. É uma estratégia proativa e abrangente para evitar que as vulnerabilidades e ameaças à segurança afetem as aplicações de software. Eis um olhar mais aprofundado sobre o conceito:
- – aspetos-chave do desenvolvimento de software seguro: as questões de segurança são integradas desde as primeiras fases da conceção e da arquitetura, em vez de serem uma reflexão posterior;
- – análise de riscos: os programadores e as equipas de segurança avaliam os potenciais riscos e ameaças ao software e aos seus dados, o que ajuda a priorizar as caraterísticas e controlos de segurança;
- – práticas de codificação segura: os programadores seguem normas e diretrizes de codificação que ajudam a evitar vulnerabilidades comuns, como injeção de SQL, XSS (cross-site scripting) e sobrecargas de memória intermédia;
- – revisão do código e análise estática: o código deve ser revisto regularmente por pares e devem ser utilizadas ferramentas de análise estática para detetar potenciais problemas de segurança;
- – testes e análises dinâmicas: o software é submetido a uma análise dinâmica e a testes de segurança, incluindo testes de penetração, para identificar e corrigir vulnerabilidades em tempo de execução;
- – gestão de dependências: as bibliotecas e dependências de terceiros devem ser constantemente atualizadas e verificadas quanto a vulnerabilidades conhecidas;
- – resposta a incidentes: deve existir um plano para responder a incidentes de segurança, incluindo a gestão de correções e estratégias de comunicação;
- – educação e formação: os programadores e o pessoal que seja pertinente devem receber formação em práticas de codificação seguras e estar a par das mais recentes ameaças à seguranç
Importância do desenvolvimento de software seguro:
- -proteger dados sensíveis;
- -manter a confiança;
- -garantir a conformidade regulamentar;
- -reduzir os custos;
- -evitar interrupções de serviço;
- -assegurar uma vantagem competitiva;
- -prevenir as consequências legais.

Figura-1
(Fonte: https://integrio.net/blog/improving-software-security)
A importância da segurança no Ciclo de Vida do Desenvolvimento de Software (SDLC)
A segurança no SDLC é um aspeto fundamental, que exige atenção em todas as fases do desenvolvimento. A integração da segurança no SDLC garante que o software é concebido com uma forte defesa contra potenciais ciberameaças, que são cada vez mais sofisticadas e estão em constante mudança. Ao priorizar a segurança desde o início, os programadores podem identificar e atenuar as vulnerabilidades numa fase precoce, o que é muito mais económico do que resolver estes problemas depois de o software ter sido implementado. A deteção precoce não só poupa dinheiro, como também reduz a complexidade das correções e o risco de introdução de novos problemas durante a mesma.

Figura 2
(Fonte: https://softprodigy.com/secure-software-development-life-cycle-navigate-your-way-to-security/)
Princípios do desenvolvimento seguro
O desenvolvimento seguro é um aspeto essencial da engenharia de software moderna que se concentra na incorporação de princípios de segurança em todas as fases do SDLC. Ao seguir princípios de desenvolvimento seguro, as organizações podem produzir software resistente a ciberameaças, capaz de proteger os dados do utilizador e manter a funcionalidade mesmo quando está sob ataque. Eis alguns dos princípios fundamentais do desenvolvimento seguro:
-integração proativa da segurança: implica considerar os pressupostos de segurança durante a fase de conceção, escolher estruturas e bibliotecas seguras e assegurar que os requisitos de segurança são definidos juntamente com os requisitos funcionais;
-privilégio mínimo: o software deve funcionar com o nível mínimo de privilégios necessário para realizar as suas tarefas. Este princípio limita os danos potenciais que podem ocorrer se o software for comprometido. Aplica-se não só ao próprio software, mas também aos utilizadores e sistemas que interagem com ele;
-defesa em profundidade: nenhuma medida de segurança é infalível, pelo que a utilização de vários níveis de controlos de segurança (físicos, técnicos, administrativos) pode proporcionar redundância e reduzir o risco de um único ponto de falha;
-falha segura: quando o software encontra um erro, deve falhar de uma forma que não comprometa a segurança;
-segurança desde a conceção: a segurança deve ser uma parte integrante da conceção do software;
-testes de segurança regulares: devem ser um processo contínuo e não apenas um evento único antes da implementação;
-princípio da menor divulgação (POLK): estabelece que um sistema não deve expor mais informações ou funcionalidades do que as necessárias para o objetivo pretendido;
-predefinições seguras: as definições de configuração predefinidas do software devem ser seguras logo à partida, exigindo que os utilizadores optem por configurações menos seguras apenas se assim o desejarem;
-conceção aberta: a conceção do software deve estar aberta à análise de peritos, uma vez que a transparência pode conduzir a soluções de segurança mais robustas;
-validação e verificação de entradas: podem evitar ataques comuns, como injeção de SQL, XSS (cross-site scripting) e outros;
-gestão de patches: manter o software atualizado é crucial para a segurança. Deve ser implementado um processo para aplicar rapidamente patches e atualizações quando são descobertas vulnerabilidades;
-resposta e recuperação de incidentes: as organizações devem ter planos para responder a incidentes de segurança;
-formação e consciencialização: todos os intervenientes, incluindo os programadores, os testadores e os utilizadores finais, devem ser informados sobre a importância da segurança.

Figura-3
(Fonte: https://www.semanticscholar.org/paper/SECURE-SOFTWARE-DEVELOPMENT-FRAMEWORK-%3A-PRINCIPLES)
