Segurança de Software

Objetivos

No final desta unidade curricular o estudante terá adquirido conhecimentos, aptidões e competências que lhe permitam:

  1. Conhecer os principais princípios, métodos e técnicas de desenvolvimento de software para garantir a segurança do software produzido.

  2. Conhecer as falhas de segurança mais frequentes em sistemas de software.

  3. Conhecer os conceitos básicos de segurança: confidencialidade, integridade e disponibilidade. 

  4. Conhecer os mecanismos básicos de autenticação, autorização, isolamento, privilégio mínimo.

  5. Saber construir software seguindo as boas práticas arquiteturais que garantem a segurança dos dados. 

  6. Saber implementar mecanismos de autenticação, autorização (controlo de acessos) e controlo de fluxo para garantir a segurança dos dados (confidencialidade e integridade) 

  7. Saber analisar software quanto ao comportamento de programas em relação a técnicas de controlo de acessos e a técnicas de fluxo de informação 

  8. Conhecer as estratégias de defesa baseadas em verificação de software, baseadas em linguagens de programação, Testes e Fuzzing.

Caracterização geral

Código

11553

Créditos

6.0

Professor responsável

Carla Maria Gonçalves Ferreira, João Ricardo Viegas da Costa Seco

Horas

Semanais - 4

Totais - 56

Idioma de ensino

Português

Pré-requisitos

A disponibilizar brevemente

Bibliografia

Secure Software Lifecycle, CyBok chapter by Laurie Williams, 2019

Software Security, CyBok chapter by Frank Piessens, 2018

Software Security. Principles, Policies, and Protection. Mathias Payer. July 2021

Avoiding the Top 10 Security Design Flaws, IEEE, 2014.

The Tangled Web: A Guide to Securing Modern Web Applications, Michał Zalewski, 2011


Método de ensino

As metodologias de ensino e aprendizagem desta unidade curricular são baseadas em uma combinação de aulas teóricas, teórico-práticas e trabalho prático em grupo. Durante as aulas teóricas, os alunos são expostos aos conceitos fundamentais da segurança de software, incluindo princípios e práticas que garantem a confidencialidade, integridade e disponibilidade dos dados. Estas aulas são complementadas por sessões práticas, nas quais os estudantes aplicam os conhecimentos adquiridos em exemplos e exercícios que simulam situações reais de desenvolvimento seguro de software.

As metodologias estão alinhadas com o modelo pedagógico, promovendo o desenvolvimento das competências técnicas e de trabalho colaborativo, preparando os alunos para a aplicação prática dos conceitos de segurança em sistemas de software.

Método de avaliação

A avaliação desta unidade curricular é bipartida:

  • A avaliação escrita (valorizada em 60% da nota final) é composta por dois testes com pesos iguais. Estes testes avaliam a compreensão dos princípios fundamentais de segurança, das metodologias de desenvolvimento seguro e das boas práticas apresentadas durante as aulas teóricas. A componente teórico-prática também pode ser realizada por exame (na época de recurso).

  • A componente prática (valorizada em 40% da nota final) consiste num projeto com duas entregas. A avaliação requer uma discussão com a equipa que inclui uma apresentação do trabalho e um relatório. 

  • Não há nota mínima em nenhuma das componentes, nem a noção de frequência.

Proibição de utilização de aparelhos electrónicos durante as provas de avaliação 

Durante uma prova de avaliação, um estudante não pode ter junto a si dispositivos electrónicos com capacidade de acesso à internet ou ligação bluetooth (e.g. smartphones, smartwatches, smartglasses, tablets, laptops, etc), ainda que desligados. A violação desta regra implica a reprovação liminar na unidade curricular por exclusão e será comunicada à Comissão Científica do respectivo Curso.



Conteúdo

A.Princípios de Segurança em Sistemas de Software. Apresentação dos princípios da segurança em software (confidencialidade, integridade e disponibilidade) e mecanismos de implementação (autenticação, autorização, isolamento, etc.) Princípio do privilégio mínimo. Vulnerabilidades.

B.Ciclo de Vida de Software Seguro. Desenho, implementação e teste de software. Evolução segura de software. Padrões arquiteturais para implementação de aplicações seguras.

C.Vetores de Ataques. Ataques à Stack de execução. Segurança da Memória. Segurança de tipos. Tipos de ataques: denial of service, fugas de informação, etc.

D.Estratégias de defesa. Verificação de software, controlo de fluxo de informação. Linguagens de programação e frameworks. Segurança de aplicações Web. Mecanismos de autenticação por terceiros. Modelos de Capabilities.

Cursos

Cursos onde a unidade curricular é leccionada: