Software de Telecomunicações. Verificação de modelos com a ferramenta Murphi



Documentos relacionados
Programação Básica em Arduino Aula 2

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

Testes Baseados na Implementação. (fluxo de controle) Baseado em notas de aula da profa. Eliane Martins

Hugo Pedro Proença, 2007

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

PHP. Hypertext Pre-Processor

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

Conjunto (set) O tipo estruturado set representa, em Pascal, um conjunto de objectos de um dado tipo;

Sintaxe e Semântica. Fases da Compilação. programa fonte

Variáveis Compostas Heterogêneas. Variável Composta Heterogênea. Variável Composta Heterogênea

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

IFTO TÉCNICO EM INFORMÁTICA DESENVOLVIMENTO DE SISTEMAS AULA 01

Programação por Objectos. Java

Busca em Espaço de Estados

INTRODUÇÃO OBJECT PASCAL/DELPHI

Um sistema SMS 1 simplificado

Planificação Anual da disciplina de TIC 9ºANO

Ferramentas de Modelação e Análise de Sistemas baseadas em Redes de Petri (RdP)

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário

Algoritmo. Prof. Anderson Almeida Ferreira. Agradeço ao prof. Guilherme Tavares de Assis por fornecer slides que fazem parte desta apresentação

Reconhecer alguns dos objectos VBA Automatizar bases de dados recorrendo à programação VBA e scripts SQL

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Calculador de preços e prazos de encomendas

MANUAL DO UTILIZADOR DE REDE

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

2.3. PHP Tipos de dados e operadores

Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos.

O código JavaScript deve ser colocado entre tags de comentário para ficar escondido no caso de navegadores antigos que não reconhecem a linguagem.

INTRODUÇÃO À LINGUAGEM C++

e à Linguagem de Programação Python

Variáveis e estruturas de controlo. Introdução à Programação André L. Santos

Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução. (procedimentos e funções)

Sincronização. Cooperação entre Processos

Programação Estruturada e Orientada a Objetos REVISÃO

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Projeto de Banco de Dados

ISCAP. Algoritmia. Pág. 1. Ana Paula Teixeira

Aluísio Eustáquio da Silva

Introdução. A verificação de tipos pode ser estática e dinâmica

Python: Comandos Básicos. Claudio Esperança

O comando if. O comando condicional permite incluir no programa trechos de código que dependem de uma ou mais condições para sua execução.

Laboratório de Banco de Dados II Aula 1. Stored Procedures

Curso de Iniciação ao Access Basic (I) CONTEÚDOS

Programação Concorrente

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

O dono de uma livraria cuja base de dados é administrada por si pediu-lhe para efectuar as seguintes alterações ao preço dos livros:

Árvores e Árvores Binárias

Módulo III. Folhas de Cálculo

Expressões. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Algoritmos e Programação

INF 1005 Programação I

1. O DHCP Dynamic Host Configuration Protocol

#define SIM 1 equivale a definição de constantes; a palavra SIM é substituída por 1 toda vez que é utilizada no programa.

Estruturas de Controle em PHP

A4 Projeto Integrador e Lista de Jogos

Compiladores. Análise léxica. Plano da aula. Vocabulário básico. Motivação para análise léxica. Estrutura de um compilador

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Programação 2ºSemestre MEEC /2011. Programação 2º Semestre 2010/2011 Enunciado do projecto

Informática de Gestão 1º ano / 1º semestre Ano letivo: 2014/2015. Visual Basic VBA

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Guia de Fatores de Qualidade de OO e Java

PL/SQL. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados PL/SQL

OPERADORES E ESTRUTURAS DE CONTROLE

Manual Gespos SMS. (ultima revisão 20 Fev. 2003)

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Capítulo 2: Introdução à Linguagem C

Bases de Dados 2007/2008. Aula 9

Introdução aos cálculos de datas

Busca. Pesquisa sequencial

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Introdução ao Modelos de Duas Camadas Cliente Servidor

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos.

3 Classes e instanciação de objectos (em Java)

Escola Secundária de Camarate

4 Criação de macros e introdução à linguagem VBA

Javascript 101. Parte 2

A VISTA BACKSTAGE PRINCIPAIS OPÇÕES NO ECRÃ DE ACESSO

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Análise Semântica e Tratamento de Erros Dependentes de Contexto

3.º e 4.º Anos de Escolaridade Competências Conteúdos Sugestões metodológicas Articulações

Grupo I [4v] b. [0,6v] De que forma é que o escalonador do Linux tenta minimizar o impacto desta limitação?

Sistemas de Informação

Estrutura de Dados Pilha (Stack)

PROGRAMAÇÃO II 3. PILHA DINÂMICA

LaSiD/UFBA. Raimundo J. de A. Macêdo

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

Direcção Regional de Educação do Algarve

DICIONÁRIOS. template<class K,class T> class Par { public: K chave; T valor; Par():chave(),valor()

1 Lógica de Programação

9 Comandos condicionais

ENSINO BÁSICO CURSO DE EDUCAÇÃO E FORMAÇÃO Praticas Administrativas

Questões de Concursos Públicos sobre Orientação a Objetos e UML

Grupo I [4v] executaprograma();

Transcrição:

Software de Telecomunicações Verificação de modelos com a ferramenta Murphi Prof RG Crespo Software de Telecomunicações Murphi : 1/38 Introdução (1) Passos na análise da segurança de protocolos, baseados em modelos Descrição protocolo Requisitos protocolo (modelo) Modelo intruso Falhas de segurança Analisador Propriedades de segurança (especificação) Prof RG Crespo Software de Telecomunicações Murphi : 2/38

Introdução (2) Várias técnicas têm sido exploradas na verificação formal da segurança de protocolos Varrimento dos estados finitos Blast, programas escritos em C Murϕ, programas escritos em Pascal SMV SPIN, Programas escritos em Promela Modelo de estados infinitos (SRI) Álgebra de processos (cálculo π) Modelos probabilísticos (PRISM) Na disciplina usa-se a ferramenta Murϕ, Univ. Stanford/US, acessível em http://sprout.stanford.edu/dill/murphi.html Prof RG Crespo Software de Telecomunicações Murphi : 3/38 Murϕ: introdução (1) O sistema é descrito por Variáveis de estado inicializadas (tabelas de dispersão usadas, para evitar repetição de estados) Regras de transição para cada participante no protocolo Comunicação implementada por variáveis partilhadas O Murϕ varre os estados, por onde o sistema pode passar, terminando quando identificar violação das regras de segurança. bloqueio ( deadlock ) por o estado não ter transições para outro Nota: directiva ndl não verifica bloqueio Prof RG Crespo Software de Telecomunicações Murphi : 4/38

Murϕ: introdução (2) Actuais ferramentas permitem analisar até 10 8-10 10 estados. Nota1: Para variáveis com 10 valores, 10 8 é coberto por 8 variáveis. Se o espaço de variáveis for reduzido para 3 valores, 10 3*3 e 10 8 é coberto por 16 variáveis. Nota2: normalmente, os protocolos não cobrem todos os estados gerados pelos espaços das variáveis (certas combinações não têm significado). Para reduzir espaço de pesquisa, adoptadas simplificações: Número finito de participantes (ex: 2 clientes, 2 servidores) Números aleatórios representados por constantes (r1, r2, ) Prof RG Crespo Software de Telecomunicações Murphi : 5/38 Murϕ: introdução (3) Passos na análise de segurança em protocolos 1. Representação do protocolo Definir tipo de dados para cada mensagem. Descrever o comportamento de cada participante, por uma máquina de estados finitos. Descrever a condição de segurança como invariante de estado. 2. Adição do intruso Acede a todas as mensagens ( buffer partilhados) Murϕ tenta todas as combinações possíveis de intercepção, divisão e guarda de mensagens geração de novas mensagens a partir dos dados observados e conhecimentos iniciais (ex: chaves públicas) Prof RG Crespo Software de Telecomunicações Murphi : 6/38

Murϕ: introdução (4) O programa a submeter ao Murϕ é formado por 3 partes: 1. Declarações i. Constantes (const) ii. Tipos de dados (type) iii. Variáveis globais (var) 2. Rotinas não aninhadas 3. Comportamento do sistema: Regras de transição Definição dos estados iniciais Invariantes a terem de ser satisfeitos em todos os estados Prof RG Crespo Software de Telecomunicações Murphi : 7/38 Murϕ: introdução (5) Um estado é definido pelo valor das variáveis globais. As falhas de segurança ocorrem quendo o sistema entre num estado que não satisfaz o invariante. Problema Down Benchmark: Numa tabela de inteiros é aplicada uma função de decrementar todas as posições até ao índice máximo. O invariante é detwerminado pela condição da soma da tabela ter de ser positiva (>0). O problema é incluído na distribuição do Murϕ no ficheiro Murphi3.1/ex/toy/down.m Prof RG Crespo Software de Telecomunicações Murphi : 8/38

Murϕ: declarações (1) A. Bloco de constantes const {id: expressão-inteira;} Zero, uma, ou mais Ex: Down Benchmark const INITIAL_VAL: 5; -- valor inicial da tabela L: 1; H: 6; -- índices inferior e máximo MAX_VAL:(H-L+1)*INITIAL_VAL; Prof RG Crespo Software de Telecomunicações Murphi : 9/38 Murϕ: declarações (2) B. Tipos type {id: tipo;} O Murϕ suporta os seguintes tipos de dados: boolean -- booleanos, constantes true e false <expr>.. <expr> -- gama de valores enum { id {,id} } -- enumerados scalarset( <expr> {,<expr>} ) -- conjunto de valores, não ordenados e não identificados union { tipo {, tipo} } -- grupos de scalarset record { decl-var } end -- estruturas array [ tipo ] of tipo -- tabelas de objectos multiset [ DIM ] of tipo -- colecções não ordenadas de objectos de -- determinado tipo e tamanho máximo DIM Prof RG Crespo Software de Telecomunicações Murphi : 10/38

Murϕ: declarações (3) Nota1: não há inteiros, devido ao elevado espaço ocupado pelos literais. Nota2: limites dos enumerados e dimensão do scalarset devem poder ser calculados na altura da declaração. Nota3: não existem literais nos scalarset. Valores podem ser atribuídos a variável id de tipo scalarset pelas instruções forall, exists, for, ruleset ou atribuição de outra variável de tipo scalarset. Ex: Down Benchmark type ind_t: L..H; val_t: 0..INITIAL_VAL; arr_t: Array[ ind_t ] Of val_t; sum_t: 0.. MAX_VAL; Prof RG Crespo Software de Telecomunicações Murphi : 11/38 Murϕ: declarações (4) C. Variáveis de estado var {id: tipo;} Ex: Down Benchmark var a: arr_t; Prof RG Crespo Software de Telecomunicações Murphi : 12/38

Murϕ: instruções (1) <stmts> ::= <stmt> {; <stmt> } --- as instruções são separadas por ; A. Atribuição id := <expr> B. Retorno de função return [ <expr>] C. Condicional if <expr> then [ <stmts> ] { elsif <expr> then [ <stmts> ] } [ else [ <stmts> ] ] endif Prof RG Crespo Software de Telecomunicações Murphi : 13/38 Murϕ: instruções (2) D. Escolha valores switch <expr> { case <expr> then [ <stmts> ] } [ else [ <stmts> ] ] endswitch E. Varrimento for <quantif> do [ stmts ] endfor <quantif> ::= id:<tipo> id := <expr> to <expr> [by <expr>] F. Ciclo while <expr> do [ stmts ] end Prof RG Crespo Software de Telecomunicações Murphi : 14/38

Murϕ: instruções (3) G. Geração erro error <string> --- termina verificação e imprime string H. Asserção assert <expr> [ <string> ] --- equivale if!<expr> then error <string> end I. Chamada a procedimento id ( <expr> {, <expr> }) J. Impressão put ( <expr> <string> ) Prof RG Crespo Software de Telecomunicações Murphi : 15/38 Murϕ: instruções (4) As expressões podem ser formadas por Operadores inteiros (+, -, *, /, %) Operadores relacionais (=,!=, >, >=, <, <=) Operadores lógicos (!,, &, ->) Chamada a funções Quantificador universal forall <quantif> do <expr> endforall Quantificador existencial exists <quantif> do <expr> endforall Localização id {. id [ <expr> ] } Nota: nos quantificadores, <expr> deve ser de tipo booleano Prof RG Crespo Software de Telecomunicações Murphi : 16/38

Murϕ: rotinas (1) As rotinas (procedure ou function), não aninhadas, são todas declaradas entre as declarações e o programa. procedure id( [ par {; par} ]); [ <decl> begin ] [ <stmts> ] opcional function id ([ par {; par} ]) <tipo>; [ <decl> begin ] [ <stmts> ] Prof RG Crespo Software de Telecomunicações Murphi : 17/38 Murϕ: rotinas (2) Parâmetros podem ser passados por referência ou por valor Ex: Down Benchmark procedure Decrement( var dec : val_t ); begin if dec >= 1 then dec := dec-1; Function Sum( a : arr_t ): sum_t; var sum : sum_t; begin sum := 0; for i : ind_t do sum := sum+a[i]; return sum; Prof RG Crespo Software de Telecomunicações Murphi : 18/38

Murϕ: scalarset Seja a declaração var id:multiset[dim] of type; mutisetadd(<expr>,loc) -- armazena valor ismember(<expr>,type) -- verifica se expressão está armazenada multisetcount(i:loc,<expr>) -- devolve numero de valores armazenados, que satisfazem -- condição indicada pela expressão booleana Prof RG Crespo Software de Telecomunicações Murphi : 19/38 Murϕ: regras (1) As regras de comportamento identificam as transições no autómato. Cada regra é dividida em condição e acção. O Murϕ armazena os estados percorridos, por omissão em largura. Os estados visitados são marcados, bem como todas as transições percorridas. O verificador executa todos os traços possíveis. Se for atingido um estado que não satisfaça o invariante, ou um estado sem transições, termina execução. O Murϕ é formado por regras simples. Outros construtores facilitam a especificação do protocolo. ruleset e startstate Invariante Choose Prof RG Crespo Software de Telecomunicações Murphi : 20/38

Murϕ: regras (2) A. Simples <simplerule> ::= rule [<string>] [ <expr> ==> ] [ {<decl>} ] begin [ stmts ] -- normalmente altera estado do sistema end Nota: a expressão tem de ser de tipo booleano e determina a pré-condição para execução da transição Prof RG Crespo Software de Telecomunicações Murphi : 21/38 Murϕ: regras (3) B. Conjunto <ruleset> ::= ruleset <quantif> { ; <quantif> } do <regras> end As <regras> são duplicadas, com a substituição dos identificadores por cada um elementos do scalarset ou intervalo de valores. Prof RG Crespo Software de Telecomunicações Murphi : 22/38

Murϕ: regras (4) Ex: Down Benchmark ruleset i : L.. H do rule a[i] > 0 ==> begin Decrement( a[i] ); if i+1 < H then if a[i+1] > 0 then Decrement(a[i+1]); Prof RG Crespo Software de Telecomunicações Murphi : 23/38 Murϕ: regras (5) C. Início <startstate> ::= startstate [ <string> ] [ { <decl> } ] begin <stmts> end As regras <startstate> são executada apenas no início da verificação. As instruções devem inicializar as variáveis. Prof RG Crespo Software de Telecomunicações Murphi : 24/38

Murϕ: regras (6) Ex: Down Benchmark startstate begin for i : ind_t do a[ i ] := INITIAL_VAL; Prof RG Crespo Software de Telecomunicações Murphi : 25/38 Murϕ: regras (7) D. Invariantes <invariant> ::= invariant [ <string> ] <expr> O invariante corresponde à regra rule end!<expr> ==> error <string> Ex: Down Benchmark invariant "Positive sum" Sum(a) > 0; Prof RG Crespo Software de Telecomunicações Murphi : 26/38

Murϕ: regras (8) E. Choose choose i:loc do O Murϕ selecciona um elemento de uma localização de tipo multiset Prof RG Crespo Software de Telecomunicações Murphi : 27/38 Modelo intruso Dolev-Yao As capacidades de um intruso são descritas no modelo proposto por Dolev e Yao*. No modelo, o intruso pode Pode interceptar e emitir mensagens Pode dividir e formar pares Pode cifrar/decifrar mensagens desde que conheça a chave. * On the security of public key protocols; D. Dolev and A. Yao; IEEE Transations on Information Theory 29(2), pp 198-208; Mar 1983. Prof RG Crespo Software de Telecomunicações Murphi : 28/38

Exemplo (1) Consideremos um protocolo inseguro de envio de uma mensagem secreta As chaves são conhecidas apenas pelos donos. I {M}K I {M}K I K R R Nota: protocolo falha, porque as mensagens não são autenticadas I E R {M}K R {M}K I {M}K I K E {M}K E {O}K E {O}K E K R {O}K R Prof RG Crespo Software de Telecomunicações Murphi : 29/38 Exemplo (2) 1. Canais de comunicação implementados por uma variável global de tipo multiset Const NetworkCap: 2; -- max number of outstanding msgs in the net Type Message: record -- message contents Var net: multiset[networkcap] of Message; -- network Prof RG Crespo Software de Telecomunicações Murphi : 30/38

Exemplo (3) 2. Estado do agente determinado por variável de tipo enumerado. O estado de partida deve ser testado na précondição Type InitiatorStates: enum{i_sleep,i_wait, I_COMMIT}; Initiator:record state: InitiatorStates; Var ini: array[initiatorid] of Initiator; Prof RG Crespo Software de Telecomunicações Murphi : 31/38 Exemplo (4) 3. Intercepção implementada por envio de mensagens do nó para todos os restantes agentes Type InitiatorId: scalarset(numinitiators); ResponderId: scalarset(numresponders); EavesdropperId: scalarset(numeavesdroppers); AgendId: union{initiatorid, ResponderId, EavesdropperId}; Prof RG Crespo Software de Telecomunicações Murphi : 32/38

Exemplo (5) ruleset i:initiatorid do ruleset d:agentid do rule 01 "Initiator sends ciphered message ini[i].state=i_sleep &!ismember(d,initiatorid) -- only to Responder and Intruder ==> var outm: Message; -- outgoing message begin -- constructs message mutisetadd(outm,net); -- message sent! Prof RG Crespo Software de Telecomunicações Murphi : 33/38 Exemplo (6) 4. Intruso guarda mensagens num multiset Const MaxKnowledge:5; -- max number of msgs intruder can remember Type Intruder:record gotit: boolean; store: mutiset[maxknowledge] of Messages; Var int: array[eavesdropperid] of Intruder; Prof RG Crespo Software de Telecomunicações Murphi : 34/38

Verificação (1) Para gerar o ficheiro de verificação, executar o Makefile MU = /usr/local/share/murphi3.1/bin/mu.x86 INCLUDE = /usr/local/share/murphi3.1/include/ CXX = g++ CFLAGS = -DCATCH_DIV -fno-default-inline -Wnodeprecated test: test.c ${CXX} ${CFLAGS} -I${INCLUDE} test.c -o test lm test.c: test.m ${MU} -c test.m clean: rm -f test test.c Prof RG Crespo Software de Telecomunicações Murphi : 35/38 Verificação (2) Verificação executada directamente no programa gerado Opções disponíveis -h imprime lista de comandos -ndl não verifica bloqueio -p muito mais verboso Exemplo de verificação com opção -p ------------------------------ Unpacking state from queue: ini[initiatorid_1].state:i_sleep res[responderid_1].state:r_sleep res[responderid_1].deliver:undefined int[eavesdropperid_1].gotit:false Prof RG Crespo Software de Telecomunicações Murphi : 36/38

Verificação (3) The following next states are obtained: Firing rule Initiator sends ciphered message, d:responderid_1, i:initiatorid_1 Obtained state: net{0}.mtype:m_inicipher net{0}.data:valid net{0}.source:initiatorid_1 Mensagem inserida na rede net{0}.dest:responderid_1 net{0}.key1:initiatorid_1 net{0}.key2:undefined ini[initiatorid_1].state:i_wait res[responderid_1].state:r_sleep res[responderid_1].deliver:undefined int[eavesdropperid_1].gotit:false Prof RG Crespo Software de Telecomunicações Murphi : 37/38 Verificação (4) Firing rule Initiator sends ciphered message, d:eavesdropperid_1, i:initiatorid_1 Obtained state: net{0}.mtype:m_inicipher net{0}.data:valid net{0}.source:initiatorid_1 net{0}.dest:eavesdropperid_1 net{0}.key1:initiatorid_1 net{0}.key2:undefined ini[initiatorid_1].state:i_wait res[responderid_1].state:r_sleep res[responderid_1].deliver:undefined int[eavesdropperid_1].gotit:false Prof RG Crespo Software de Telecomunicações Murphi : 38/38