Segurança de Software (2019/2020) - Departamento de Informática
Descrição

Nesta unidade curricular, o estudante aprende os principais princípios, métodos e técnicas para garantir a segurança do software durante o desenvolvimento e a construção. A UC complementa, mas tem âmbito muito diferente de outras UCs da área de segurança, as quais abordam diferentes aspectos da segurança no nível de comunicação do sistema ou da rede. A principal competência de engenharia ensinada na UC é a criação de aplicaçõe seguras, competênciamuito importante na indústria moderna de desenvolvimento de software.

Objectivos

Nesta unidade curricular, o estudante aprende os principais princípios, métodos e técnicas para garantir a segurança do software durante o desenvolvimento e a construção. A UC complementa, mas tem âmbito muito diferente de outras UCs da área de segurança, as quais abordam diferentes aspectos da segurança no nível de comunicação do sistema ou da rede. A principal competência de engenharia ensinada na UC é a criação de aplicaçõe seguras, competência muito importante na indústria moderna de desenvolvimento de software.

Embora a segurança nos sistemas computacioais possa ser em grande parte reforçada ao nível da pilha do sistema operacional, a segurança a nível sistema concentra-se na mitigação de ataques de baixo nível (políticas de controle de acesso, proteção de repositórios de dados específicos ou protocolos de comunicação criptográfica), mas muitas violações de segurança surgem ao nível das aplicações.

Muitas falhas de segurança, como fluxos de dados inseguros, também são frequentemente causadas por erros de design ou de programação no nível das aplicações.

A ênfases da UC é pois nos aspetos relacioados com a construção de aplicações seguras, e cobrem aspectos relacionados tanto com o código como com os dados.

Durante a UC, os estudantes desenvolvem, de forma supervisionada, o projeto de uma aplicação completa,centrado em dados e totalmente segura de acordo com um conjunto bem definido de requisitos gerais e políticas específicas, expressas ao nível da aplicação. O esqueleto e o código fonte de uma aplicação bem projetada é fornecida aos estudantes, como ponto de partida.

Programa

1. Conceitos gerais de segurança de software. Propriedades de segurança. Definição e modelação de ameaças e atacantes. Como expressar propriedades e políticas de segurança. Propriedades de segurança como invariantes do sistema.

2. Princípios de design de software seguro. Princípios básicos (mínimo privilégio; padrões de segurança; economia de mecanismos; mediação completa; separação de tarefas; mecanismo menos comum) e como são mapeados em conceitos de programação / arquitetura. Preservação de segurança entre os módulos e manter a confiabilidade: algumas técnicas gerais para definir uma arquitetura de software segura.

3. Autenticação. Modelos e objetivos da autenticação. Técnicas básicas de autenticação em aplicações Web; Rest e baseado em sessões. Mecanismos de delegação.

4. Autorização. Modelos de autorização e controle de acesso. Políticas e regras de controle de acesso. Linguagens e estruturas para expressar e aplicar autorização. Assinaturas e certificados. Autorização baseada nas linguagens: autorização em sistemas de suporte à execução, inspeção de pilha, código portador de provas, código assinado (Java). Permissões e modelos de capacidades de objetos (Google Caja).

5. Fluxos de Informação. Confidencialidade e Integridade. Reticulados de segurança. Não interferência. Desclassificação. Canais encobertos e fluxos indiretos. Compartimenos de isolamento e contaminação. Monitores de referência. Segurança do fluxo de informações com base nas liguagens: análise de fluxo de dados. Análise baseada em tipos. IFLOW - Java, JSFlow - JavaScript.

6. Ameaças de segurança específicas do domínio. Dois exemplos de cenários: aplicações Web (injeção de código, scripting cruzado entre sites, falsificação de pedidos entre sites e seqüestro de sessões). Linguagens inseguras (exploração de inseguranças para violar integridade - corrupção de memória, esmagamento da pilha). Contramedidas para ameaças usando princípios e técnicas gerais (análise de fluxo de informação, capacidades, monitores).

7. Segurança e proveniência de dados. Segurança orientada a esquemas e segurança orientada a linhas em bases de dados relacionais. Controle de acesso em modelos de dados. Equilíbrios entre privacidade e utilidade; segurança estatística de bases de dados; k-anonimato; privacidade diferencial, idiomas de privacidade. Modelos e linguagens para expressar e monitorizar a proveniência.

Bibliografia Principal

Secure Software Lifecycle, CyBok chapter by Laurie Williams, 2019

Software Security, CyBok chapter by Frank Piessens, 2018

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

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

Papers and web links.

Requisitos Prévios

Conhecimentos de principios de desenho de software e linguagens de programação, sistemas distribuidos, algoritmos e estruturas de dasos,, bases de dados, e programação web básica.

Esforço do Aluno
  Horas por crédito 28
  Horas p/ semana Semanas Horas
Total de Horas 0
ECTS 6.0