53
Universidade Federal do Rio Grande do Norte Instituto Metrópole Digital Smart Metropolis – Plataformas e Aplicações para Cidades Inteligentes WP5 - Middleware Evoluções sobre os Habilitadores Genéricos da Plataforma Fiware Natal-RN, Brasil Novembro de 2016

Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Universidade Federal do Rio Grande do Norte

Instituto Metrópole Digital

Smart Metropolis – Plataformas e Aplicações para Cidades Inteligentes

WP5 - Middleware

Evoluções sobre os Habilitadores Genéricos da Plataforma Fiware

Natal-RN, Brasil Novembro de 2016

Page 2: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Equipe Técnica Docentes Prof.ª Dra. Thais Vasconcelos Batista (Coordenadora) - DIMAp-UFRN Prof. Dr. Carlos Eduardo da Silva Discentes Gabriela Cavalcante da Silva

Page 3: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Sumário

1 Introdução.....................................................................................................................5

7 Security.........................................................................................................................57.1 Objetivos..............................................................................................................................57.2 Conceitos Básicos e Definições.............................................................................................6

7.2.1 Gerenciamento de Identidade e Acesso (Identity and Access Management)...................67.2.2 Segurança Cibernética (CyberSecurity).............................................................................87.2.3 Confiança e Gestão de Confiabilidade (Trust and Trustworthiness Management).........8

7.3 Aplicação de Exemplo........................................................................................................107.4 Visão arquitetural do Capítulo Técnico.............................................................................137.5 Descrição do Identity and Access Management GE..........................................................15

7.5.1 Visão Geral da Arquitetura do Keyrock.........................................................................157.5.2 APIs....................................................................................................................................177.5.3 Descrição do Exemplo da Aplicação................................................................................21

7.6 Descrição dos Componentes de Autorização (PEP Proxy GE e Authorization PDP GE).317.6.1. Conceitos Básicos sobre Controle de Acesso..................................................................317.6.2 Visão Geral da Arquitetura do Authorization PDP GE e PEP Proxy GE....................337.6.3 Representando Políticas de Controle de Acesso usando XACML.................................367.6.3. APIs...................................................................................................................................377.6.3.1. APIs para Administração de domínio de política.......................................................377.6.3.2. API para Administração de Política............................................................................387.6.4 Cenários de Uso.................................................................................................................39

7.7 Descrição do CyberSecurity..............................................................................................457.8 Descrição do Trustworthy Factory GE..............................................................................487.9 Considerações Finais.........................................................................................................52

7.9.1 Problemas Encontrados....................................................................................................527.9.2 Pendências..........................................................................................................................537.9.3 Próximos passos.................................................................................................................53

Page 4: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação
Page 5: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

1 Introdução

Esse documento é a continuidade do trabalho realizado no relatório RT2,

especificamente, no Capítulo de Segurança do FIWARE (que está representado pelo Capítulo

7 no RT2, por isso manteremos aqui o próximo capítulo como sendo o 7). Esse documento

descreve os cinco habilitadores genéricos do Capítulo de Segurança: Identity Management

GE, Authorization PDP GE, PEP Proxy GE, Cyber Security GE e Trustworthy Factory GE.

Apesar de ter trabalhado com todos eles, uma maior ênfase foi dada ao Gerenciamento de

Identidade e Acesso, mostrando um maior detalhamento sobre estes três primeiros GEs com

suas respectivas implementações de referência: KeyRock, AuthZForce e Wilma. Vale salientar

que os outros dois GEs estão classificadas como deprecated desde fevereiro do ano presente.

Também é apresentada uma aplicação como estudo de caso para a apresentação dos GEs de

Segurança, sendo esta formada por um componente back-end (definindo um webservice

REST) e um componente front-end (correspondente a uma aplicação Web para interação com

o usuário que realiza chamadas aos serviços definidos) que puderam ser utilizados de forma a

experimentar a integração dos GEs apresentados com seus componentes.

A próxima seção é identificada como seção 7 para se refereir a continuidade da seção

7 do RT2. 7 Security

7.1 Objetivos

Sabemos que é altamente desejado que aplicativos, softwares ou informações sejam

acessados somente por aqueles autorizados para tal. Para isso, existem vários mecanismos

que lidam com diferentes aspectos de segurança da informação, tais como autenticação,

políticas de segurança, entre outros. A plataforma Fiware foi projetada para considerar estes

aspectos em uma abordagem secure by design, onde atributos de segurança da plataforma em

si, e das aplicações que executem sobre ela, são considerados através de uma arquitetura de

segurança que engloba questões relacionadas a gestão de identidades, controle de acesso e

monitoramento de eventos de segurança. Isso é conseguido com um conjunto de Generic

Enablers (GEs) que podem ser integrados com outros GEs da plataforma.

Page 6: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Neste contexto, este capítulo apresenta um estudo sobre o Capítulo Técnico de

Segurança (Security) da plataforma Fiware que oferece GEs responsáveis pela autenticação,

autorização e confiabilidade de informações. Para uma maior compreensão do estudo deste

capítulo, iniciaremos com uma introdução de alguns conceitos básicos da literatura (Seção

7.2). Para demonstrar a aplicação desses conceitos, desenvolvemos uma aplicação de

exemplo (Seção 7.3) que será explorada ao longo deste estudo. Em seguida, apresentamos

uma visão geral da arquitetura do Capítulo Técnico de Segurança, identificando seus

componentes principais (Seção 7.4), que serão explorados nas seções subsequentes. Mais

especificamente, abordaremos os seguintes GEs: Identity Management GE (Seção 7.5),

Authorization PDP GE e PEP Proxy GE (Seção 7.6), Cyber Security GE (Seção 7.7) e

Trustworthy Factory GE (Seção 7.8).

Durante este estudo, maior ênfase foi dada aos GEs relacionados a controle de acesso,

mais especificamente Identity Management GE, Authorization PDP GE e PEP Proxy GE,

adotando um ponto de vista de desenvolvedor de aplicações que atuariam como clientes

desses GEs. É importante mencionar também que este estudo considera a versão 4 da

plataforma Fiware (R4).

7.2 Conceitos Básicos e Definições Esta seção apresenta alguns termos e definições utilizados na descrição do Capítulo

Técnico de Segurança da plataforma Fiware, que é construído em torno de três áreas

temáticas: Gerenciamento de Identidade e Acesso (Identity and Access Management);

Segurança Cibernética (CyberSecurity); e Confiança e Gestão de Confiabilidade (Trust and

Trustworthiness Management). Desse modo, a terminologia será apresentada em torno desses

tópicos.

7.2.1 Gerenciamento de Identidade e Acesso (Identity and Access Management)

● Identidade Digital (Digital Identity): Uma identidade digital é uma representação

digital de um conjunto de afirmações sobre um sujeito ou entidade. Essas afirmações,

também chamadas de atributos, podem ter sido feitas pelo próprio sujeito ou por

terceiros. Deve ser observado que para qualquer sujeito normalmente haverá múltiplas

identidades digitais.

Page 7: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

● Autenticação (Authentication): O ato de verificar a identidade de uma entidade ou

sujeito. A autenticação permite confirmar que um determinado sujeito ou entidade é

quem ele afirma ser. Ao utilizar o termo entidade, permitimos que não somente

humanos possam ser autenticados, mas também entidades genéricas, como um

sistema ou um equipamento.

● Credencial (Credential): Um conjunto de dados apresentados como evidência de

uma identidade e/ou direitos reivindicados. Normalmente utilizado para autenticação

(por exemplo, senha).

● Provedor de Identidades (Identity Provider - IdP): Um provedor de identidade é

uma entidade que atua como um serviço de autenticação para usuários finais, e como

fonte de dados de autenticação para provedores de serviços. Pode ser entendido como

uma base de usuários.

● Participante confiável (Relying party - RP): Uma entidade que confia em uma

representação de identidade ou afirmação (por exemplo, token de segurança) emitido

por uma outra entidade (ex: IdP) dentro de um contexto de requisição.

● Single Sign-On (SSO): Da perspectiva de uma entidade cliente (usuário ou

aplicação), o SSO é a capacidade de autenticar-se com alguma entidade do sistema

(um IdP), e ter a autenticação respeitada por outras entidades, denominados

provedores de serviços (um RP). Em outras palavras, é a capacidade de um cliente se

autenticar somente um vez e ter acesso a múltiplos serviços.

● Gestão de Identidades de Federadas (Federated Identity Management - FIM):

Capacidades de gerenciamento de identidade que permitem que os usuários de um

ambiente (organização, ou domínio de segurança, também conhecido como realm)

possa acessar os serviços de outro, sem a necessidade de se registrar na base de

usuários do domínio que provê o serviço. Uma federação é uma parceria confiável

entre diferentes domínios em uma relação produtor-consumidor, onde todos os

usuários de um domínio tem acesso a todos os serviços oferecidos pelos outros

domínios.

● Autorização (Authorization): Termo utilizado alternadamente para dois significados

próximos, mas distintos, dependendo do contexto:

○ Gestão de autorização (Authorization Management): Processo de atribuição

de permissões para entidades, também conhecida como user-permission

assignment. No Fiware, isso é feito através do IDM GE, de forma que o termo

é utilizado com esse significado.

Page 8: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

○ Aplicação de autorização (Authorization Enforcement): Processo de

determinar se uma entidade está autorizada a fazer algo quando do pedido de

acesso, seguido pela concessão ou não do acesso. No contexto da plataforma

Fiware, esse processo é realizado por dois componentes: o Authorization PDP

GE determina se o acesso deve ser permitido, e com base nesta decisão, o PEP

Proxy GE concede ou nega o acesso solicitado à entidade requerente.

7.2.2 Segurança Cibernética (CyberSecurity)

● CyberSecurity: O processo de proteger informação através da prevenção, detecção e

resposta a ataques.

● Risco (Risk): Uma medida de quanto uma entidade é ameaçada por um evento ou

circunstância potencial. Risco normalmente é calculado em função do impacto

adverso caso o evento ocorra, e a probabilidade/possibilidade do evento ocorrer.

● Gerenciamento e Correlação de Eventos de Segurança (SIEM - Security

Information and Event Managent): Sistema que permite a coleta, armazenamento e

análise de eventos de segurança gerados por diversos componentes de um rede,

incluindo aplicativos de segurança (como firewall e proxies), sistemas de detecção de

intrusão, e eventos de controle de acesso.

7.2.3 Confiança e Gestão de Confiabilidade (Trust and Trustworthiness Management)

● Confiança na aplicação - Trust in an application (software): O estado de

credibilidade que a parte interessada em utilizar o sistema credita neste. Por exemplo,

se um usuário não confia em um determinado sistema, a tendência será não utilizá-lo.

● Confiabilidade (Trustworthiness): Uma propriedade objetivo do aplicativo, com

base na existência (ou inexistência) de contramedidas adequadas que reduzam a

probabilidade de resultados inaceitáveis. Em outras palavras, as partes interessadas

(stakeholder) apresentam objetivos de confiabilidade (trustworthiness objective) para

o aplicativo.

● Atributo de confiabilidade (Trustworthiness attribute): Um atributo derivado de

atributos de qualidade de software, exemplo de tal atributo: segurança, capacidade de

Page 9: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

reutilização, confiabilidade, escalabilidade, confidencialidade, entre outros, para o

contexto de confiança que podem ser quantificados por métodos de medição aplicados

para a aplicação.

● Objetivo de confiabilidade (Trustworthiness objective): A definição de uma

pontuação mínima a ser atingida para um atributo de confiabilidade.

Perfil de confiabilidade (Trustworthiness profile): A lista de objetivos de confiabilidade fornecida por qualquer das partes interessadas para o desenvolvedor do aplicativo.

Page 10: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

7.3 Aplicação de Exemplo

Para demonstrar a utilização dos mecanismos de controle de acesso da plataforma

Fiware, desenvolvemos uma aplicação de exemplo como estudo de caso que será utilizada ao

longo deste documento. Nesta seção apresentamos a versão inicial da aplicação desenvolvida

como estudo de caso. Esta primeira versão não possui autenticação implementada, e é

formada por dois componentes: um componente back-end e um componente front-end. Sua

arquitetura é apresentada na Figura 7.1.

Figura 7.1 - Processo de chamada de operações no Web Service.

O componente back-end consiste em um Web Service REST que apresenta dois

serviços. Cada um desses serviços recebe uma chamada HTTP GET e retorna como resultado

da chamada um JSON contendo informações relevantes e resultados da chamada.

Abaixo, na Tabela 1, apresentamos a API da aplicação com a descrição das operações

que compõem os dois serviços implementados.

Tabela 1: API da Aplicação de estudo de caso

Operação Verbo HTTP Descrição

/service1 GET Ao ser chamado, o método retorna um JSON

contendo uma string simples de "Hello, World!".

/service1/<username> GET Ao ser chamado com parâmetro referente ao

nome a ser exibido (), o método retorna um JSON

contendo uma string formada pela junção das

strings "Hello, "e o texto do parâmetro recebido.

/service2 GET Ao ser chamado o método retorna em um JSON

uma lista contendo os nomes que atualmente

estão armazenados pelo servidor.

/service2/<username> GET O parâmetro recebido é salvo na lista de nomes

Page 11: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

armazenados pelo servidor. Como resultado da

sua chamada, nenhum JSON é retornado por esse

método.

O componente de front-end corresponde a uma aplicação Web para interação com o

usuário que realiza chamadas aos serviços definidos. Nessa interface web, uma vez inseridos

os dados e selecionada a operação a ser executada, é realizada uma chamada HTTP ao

serviço correspondente no Web Service com os dados necessários à sua execução. Após a

chamada ter sido processada pelo servidor, e tendo sido retornado o JSON resultante, a

interface recebe o JSON e o processa, atualizando a interface exibida ao usuário com os

dados resultantes da chamada.

A aplicação foi desenvolvida em JSF (Java Server Faces) e nela foi criada uma

interface que permite ao usuário escolher qual das chamadas realizar, com campos para

definição das informações necessárias para as chamadas do serviço, além de permitir também

a exibição dos resultados das chamadas para o usuário.

Figura 7.2 - Arquitetura da aplicação JSF. Na Figura 7.2, vemos a arquitetura da versão inicial da aplicação JSF. Podemos

visualizar a interação entre o componente Interface, composto pelo SecurityAppMBean e o

index.xhtml (responsáveis por interagir com o usuário), e o Web Service.

A Figura 7.3 apresenta um exemplo da interface Web, onde pode ser visualizado o

processo ocorrido durante uma chamada a uma das operações dos serviços pela aplicação

JSF, bem como a interface exibida ao usuário.

Figura 7.3 - Interface da aplicação JSF.

Page 12: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

O usuário pode escolher qual serviço vai utilizar, preenchendo os devidos campos

caso necessário, e ao final terá o resultado impresso na tela.

Estas aplicações serão utilizadas ao longo deste capítulo para exemplificar a utilização dos diferentes GEs disponibilizados pelo Capítulo Técnico de Segurança da plataforma Fiware. Desse modo, a evolução da versão inicial da aplicação será detalhada ao longo do texto.

Page 13: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

7.4 Visão arquitetural do Capítulo Técnico

Esta seção apresenta uma visão geral da arquitetura do Capítulo Técnico de Segurança

da plataforma Fiware, identificando os diferentes GEs que implementam os recursos de

segurança da plataforma, tais como como gerenciamento de identidade, controle de acesso ou

monitoramento de segurança. A arquitetura de segurança do Fiware, exibida na Figura 7.4 é

composta por cinco GEs que juntas fornecem um conjunto abrangente de serviços para

aplicações com o intuito de cumprir com os requisitos mais importantes de segurança, como

autenticação, autorização e confiabilidade. São estes Identity Management GE, Authorization

PDP GE, PEP Proxy GE, Cyber Security GE e Trustworthy Factory GE.

Figura 7.4 - Visão geral da arquitetura de segurança [3].

O Identity Management GE (IdM) é responsável pelo gerenciamento de identidades

de usuários, organizações e aplicações, assim como de suas respectivas credenciais, e da

autenticação dessas entidades. Este GE considera requisitos para a gestão de identidades de

“coisas” (IoT), e atende às especificações para o gerenciamento de identidades sobre

Page 14: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

diferentes domínios. Ele também oferece uma API REST para o gerenciamento de

identidades em ambientes multi-tenant, permitindo ainda a gestão de autorização, com

suporte a definição de papéis e permissões específicas de uma organização ou de uma

aplicação. Desenvolvedores interagem com este componente para registrarem suas aplicações

no IdM, e para gerenciar a segurança de suas aplicações (credenciais, papéis e políticas de

autorização). Usuário finais usam o IdM GE para se registrarem, e gerenciar seus respectivos

perfis e suas organizações, enquanto que todas as entidades clientes de aplicações utilizam o

IdM para fins de autenticação. A implementação de referência deste GE é o Keyrock.

O Authorization PDP GE (PDP) é o componente responsável por gerenciar políticas

de autorização na plataforma Fiware. Este componente utiliza a linguagem XACML para

representação de políticas, implementando a especificação XACML Core v3.0. As políticas

definidas pelos desenvolvedores por meio do IdM são gerenciadas pelo PDP, que é

responsável também por avaliar requisições de acesso, encaminhadas pelo PEP, para permitir

ou negar o acesso a serviços. A implementação de referência deste GE é o AuthZForce.

O PEP Proxy GE (PEP) atua como ponto de aplicação de políticas de segurança na

forma de um proxy-reverso HTTP, com o objetivo de proteger serviços REST. Este

componente intercepta as requisições para o serviço, interage com o IdM para autenticar a

requisição e o token da entidade cliente anexado à requisição, e em seguida interage com o

PDP que autoriza ou não o acesso ao serviço. Além de validar o token e a requisição por

meio do IdM, o PEP também recupera informações sobre o token, e seu usuário, deste mesmo

componente. Para tomar uma decisão de acesso, o PDP leva em consideração a política de

segurança definida, informações acerca da requisição do cliente, e informações acerca do

token enviado (tais como atributos do cliente obtidos do IdM). O PEP aplica a decisão do

PDP, e em caso positivo, encaminha a requisição ao serviço, e a resposta do serviço ao

cliente. A implementação de referência para este GE é o Wilma. A plataforma Fiware

suporta a utilização de outros PEPs, como por exemplo PEPs que protejam serviços não-

REST ou serviços que utilizem outros protocolos além de HTTP.

O CyberSecurity GE é uma ferramenta para a detecção, análise e resposta a incidentes

de segurança. Este componente apresenta mecanismos que permitem calcular e quantificar

vetores de ataque, realizando uma análise de vulnerabilidades e riscos, e sugerir possíveis

medições a partir de um catálogo de contra-medidas. O CyberSecurity GE depende de um

SIEM (não oferecido pela plataforma Fiware) para a coleta de eventos e informações de

segurança. A implementação de referência para este GE está classificada como deprecated no

catálogo de GEs do Fiware.

Page 15: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Além dos componentes apresentados na Figura 7.4, o Capítulo Técnico de Segurança

também contém um GE para questões de confiabilidade. O Trustworthy Factory GE oferece

um ambiente para o desenvolvimento de aplicações confiáveis, incluindo ferramentas

(baseada em análise estática e dinâmica de código-fonte) para a produção de evidências que

objetivos de confiabilidade foram alcançados, e uma plataforma de certificação de código

fonte, permitindo a assinatura digital de código entre outras funcionalidades. A

implementação de referência para este GE está classificada como deprecated no catálogo de

GEs do Fiware.

7.5 Descrição do Identity and Access Management GE

A gestão de identidades engloba alguns aspectos envolvidos com o acesso de usuários

a redes, serviços e aplicações, incluindo autenticação segura e privada de usuários para

dispositivos, redes e serviços, gestão de perfil de usuário e de autorização, Single Sign-On

(SSO) para domínios de serviço e federação de identidade para aplicações. Um sistema de

gestão de identidades visa realizar a tarefa complexa de lidar com as diversas tecnologias nos

domínios de segurança acima mencionados, e fornecer tecnologias de fácil utilização,

colocando o usuário final e suas necessidades diretamente no centro da arquitetura, enquanto

protege sua privacidade.

7.5.1 Visão Geral da Arquitetura do Keyrock

A Figura 7.4 apresenta a arquitetura de alto nível do Keyrock, a implementação de

referência do Identity Management GE. O Keyrock é formado por quatro componentes

principais, que oferecem um conjunto de APIs voltadas para o gerenciamento de diversos

aspectos, e uma API para fins de autenticação e autorização. A API de Gerenciamento de

Usuário (User Management API) fornece operações para criar contas de usuário, recuperar e

modificar atributos de usuário, excluir contas de usuário. A interface é compatível com API

SCIM 2.0. A API de Gerenciamento da Aplicação (Application Management API) fornece

operações para o gerenciamento de aplicações, tais como registro da aplicação, recuperar e

modificar dados da aplicação, por exemplo: credenciais e excluir a aplicação. A API de

Gerenciamento de Acesso (Access Management API) fornece operações para gerenciar

papéis globalmente ou para uma aplicação específica, definindo as permissões de papéis e

atribuindo os papéis para os usuários. As permissões de papéis formam uma política de

Page 16: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

autorização que pode ser enviada para a Authorization PDP GE através da sua PAP API. A

API de Autenticação e Autorização (Authentication & Authorization) segue as

especificações dos padrões SAML 2.0 e OAuth2, oferecendo serviços de autenticação e

recuperação de atributos para autorização, suportando cenários de SSO (Single Sign-On) e de

Federação de Identidades.

Figura 7.4 - Identity Management GE - Arquitetura em alto-nível [13].

Este componente oferece dois portais de interação para usuários. O Portal de

Usuário Final (End User Portal) é utilizado pelos usuários finais para registrarem sua conta

pessoal no KeyRock, informando o endereço de e-mail, senha, etc. Isto normalmente é

implementado como uma interface de usuário Web (não fornecida pelo Keyrock). Os

usuários finais podem modificar ou configurar os seus dados da conta pessoal. Por outro lado,

o Portal de Desenvolvedor de Aplicações (Application Developer Portal), mostrado na

Figura 7.5, é utilizado pelos desenvolvedores para registrar e gerenciar as suas aplicações,

especialmente as aplicações do cliente, incluindo as credenciais de aplicação, permitindo o

Page 17: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

aplicativo autenticar-se no IdM ou ainda definir os papéis de acessos específicos da

aplicação.

Figura 7.5 - Portal de Desenvolvedor de Aplicações (papéis e permissões)

7.5.2 APIs

O back-end do Keyrock é baseado no projeto Keystone do Openstack, por isso ele traz

consigo todas as APIs Keystone. Além disso, ele implementa algumas extensões

personalizadas que têm suas próprias APIs REST1.

Para gerenciar entidades que somente o Keyrock fornece, é necessário usar as

extensões personalizadas, com as APIs próprias, como citamos anteriormente. A seguir é

possível visualizar uma descrição das operações suportadas pelo conjunto de APIs fornecida

pela KeyRock:

● Consumidores (Consumers): Os consumidores são as aplicações registradas no

Keyrock a consumir recursos OAuth2. O componente que oferece esta API é o

Application Management API.

Tabela 2: REST API para acessar recursos das aplicaçõe

Operação Verbo HTTP

Descrição

1 https://github.com/ging/fiware-idm

Page 18: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

/OS-OAUTH2/consumers

GET Lista as informações (id, descrição,

link, imagem, etc) das aplicações registradas no Keyrock.

/OS-OAUTH2/consumers POST Cria uma aplicação, passando na requisição o name, description, client_type, redirect_uris, grant_type e scopes.

/OS-OAUTH2/consumers/consumer_id GET Recupera os detalhes de uma aplicação específica.

/OS-OAUTH2/consumers/consumer_id PATCH

Modifica uma aplicação, passando na requisição o campo que será atualizado (field_to_update).

/OS-OAUTH2/consumers/consumer_id DELETE Deleta a aplicação especificada pelo parâmetro consumer_id.

● Papéis (Roles): o componente responsável pela API de papéis é o Access Management API.

Tabela 3: REST API para acessar recursos relacionados aos papéis

Operação Verbo HTTP

Descrição

/OS-ROLES/roles

GET Lista os papéis.

/OS-ROLES/roles POST Cria um novo papel.

/OS-ROLES/roles/role_id GET Recupera os detalhes de um papel específico.

/OS-ROLES/roles/role_id PATCH

Modifica um papel.

/OS-ROLES/roles/role_id DELETE Deleta o papel especificado pelo parâmetro role_id.

Page 19: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

● Permissões (Permission): o componente Access Management API também será responsável pela API de permissões.

Tabela 4: REST API para acessar recursos relacionados as permissões

Operação Verbo HTTP

Descrição

/OS-ROLES/permissions

GET Lista as permissões.

/OS-ROLES/permissions POST Cria uma nova permissão.

/OS-ROLES/permissions/permission_id

GET Recupera os detalhes de uma permissão.

/OS-ROLES/permissions/permission_id

PATCH

Modifica uma permissão.

/OS-ROLES/permissions/permission_id

DELETE Deleta uma permissão.

● Relação Papel-Permissões (Role - Permission Relationship) Tabela 5: REST API para acessar recursos relacionados aos papéis e permissões

Operação Verbo HTTP

Descrição

/OS-

ROLES/roles/role_id/permissions

GET Lista as permissões associadas a um papel.

/OS-ROLES/roles/role_id/permissions/permission_id

PUT Atribui uma permissão a um papel.

/OS-ROLES/roles/role_id/permissions/permission_id

DELETE Remove uma permissão de um papel.

● Relação Papel-Usuário (Role - User Relationship) Tabela 6: REST API para acessar recursos relacionados aos papéis e usuários

Operação Verbo HTTP

Descrição

/OS-ROLES/users/role_assignments

GET Lista as atribuições de funções dos usuários.

Page 20: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

/OS-ROLES/users/user_id/applications/ application_id/roles/role_id

PUT Atribui um papel a um usuário.

/OS-ROLES/users/user_id/applications/ application_id/roles/role_id

DELETE Remove um papel atribuído a um usuário.

● Relação Papel-Organização (Role - Organization Relationship) Tabela 7: REST API para acessar recursos relacionados aos papéis e organizações

Operação Verbo HTTP

Descrição

/OS-

ROLES/organizations/role_assignme

nts

GET Lista as atribuições de funções das organizações.

/OS-ROLES/organizations/organization_id/ applications/ application_id/roles/role_id

PUT Atribui um papel à uma organização.

/OS-ROLES/organizations/organization_id/applications/application_id/roles/role_id

DELETE Remove um papel atribuído à uma organização.

Outra API fornecida no Keyrock é a SCIM em sua versão 2.0. Esta API é

disponibilizada somente para administradores e pode ser usada para a gerência de dados de

usuários e organizações. é importante destacar que assim com as extensões do Keystone, esta

API é exposta pelo back-end e não pelo front-end. A seguir, descrevemos na Tabela 8 a

REST API para gerenciar os usuários e na Tabela 9 a REST API para gerência de

organizações.

Tabela 8: REST API para gerência dos usuários.

Operação Verbo HTTP

Descrição

/v3/OS-SCIM/v2/Users/ GET Lista usuários.

Page 21: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

/v3/OS-SCIM/v2/Users/ POST Cria um usuário.

/v3/OS-SCIM/v2/Users/user_id GET Lê as informações de um usuário passando como parâmetro o user_id.

/v3/OS-SCIM/v2/Users/user_id PUT Modifica o registro de um usuários passando como parâmetro o user_id.

/v3/OS-SCIM/v2/Users/user_id DELETE Deleta o registro de um usuário passando como parâmetro o user_id que se deseja remover.

Tabela 9: REST API para gerência de organizações. Operação Verbo

HTTP Descrição

/v3/OS-SCIM/v2/Organizations GET Lista as organizações.

/v3/OS-SCIM/v2/Organizations POST Cria uma organização.

/v3/OS-SCIM/v2/Organizations/organization_id

GET Lê as informações sobre uma organização passando como parâmetro o organization_id.

/v3/OS-SCIM/v2/Organizations/organization_id

PUT Modifica o registro de uma organização passando como parâmetro o organization_id.

/v3/OS-SCIM/v2/Organizations/organization_id

DELETE Deleta o registro de uma organização passando como parâmetro o organization_id que se deseja remover.

7.5.3 Descrição do Exemplo da Aplicação

Page 22: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

A fim de exemplificar a realização da autenticação da aplicação anteriormente

descrita com o OAuth2, são descritas abaixo as modificações realizadas sobre a aplicação

original, inicialmente sem autenticação, a fim de ilustrar o seu uso. Serão apresentados dois

cenários de autenticação. Em ambos os cenários, é necessário registrar a aplicação junto ao

Keyrock, de forma que a seção 7.5.3.1 demonstra os passos para tal. O primeiro cenário,

apresentado na seção 7.5.3.2, envolve o uso do Keyrock para a realização de autenticação

básica para uma aplicação Web. O segundo cenário, apresentado na seção 7.5.3.3, considera

que uma aplicação Web, necessita de serviços oferecidos por alguma GE Fiware, e para tal

envia um token de acesso junto com sua requisição.

7.5.3.1 Registrando uma Aplicação no Keyrock

O primeiro passo realizado a fim de implementar o processo de autenticação na aplicação, foi

efetuar o registro da aplicação no IdM.

Ao acessar o endereço do IdM e realizar o login é possível ver na tela inicial uma

listagem de aplicações cadastradas e a opção para cadastro de uma nova aplicação. Para

cadastrar uma nova aplicação deve-se clicar em "Register"no canto superior direito da janela

de aplicações, como mostra a Figura 7.6.

Figura 7.6 - Opção de registro de uma nova aplicação. O cadastro é dividido em três partes: o registro das informações da aplicação (nome,

descrição, etc), a seleção de uma imagem de exibição, e o cadastro dos papéis e permissões

associados a aplicação.

Após clicar em "Register", será exibida então uma nova página onde devem ser

inseridas as informações básicas da aplicação a ser registrada. Nessas informações estão o

nome, descrição e URL da aplicação criada, assim como a Callback URL, como vemos a

seguir na Figura 7.7. A Callback URL deve ser declarada na aplicação do usuário. Após

autenticação, o IdM redireciona a sessão de navegação para onde a Callback URL estará

indicando.

Page 23: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Figura 7.7 - Informações para registro da aplicação.

Após preencher essas informações, é possível selecionar uma imagem de exibição

para a aplicação, como mostra a Figura 7.8, e se necessário, cortá-la para melhor se adequar

ao tamanho de exibição.

Figura 7.8 - Seleção da imagem de exibição da aplicação. Por fim, podem ser modificados na página exibida na Figura 7.9, os papéis e

permissões associados a aplicação sendo criada. Existirão inicialmente duas possibilidades de

papéis: provedor e comprador. É possível editar as permissões de cada papel ou criar novos

papéis, clicando em "New role" e escrevendo o nome do novo papel, e depois clicando em

"Save". Também é possível adicionar novas permissões clicando em "New Permission". Será

necessário informar o nome da permissão, a descrição, o verbo HTTP (GET, PUT, POST,

DELETE) e o caminho para a permissão. Como o exemplo em questão não utiliza políticas

de controle de acesso, nenhum papel/permissão foi cadastrado.

Page 24: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Figura 7.9 - Configuração de papéis e permissões da aplicação. Depois desses passos, ao clicar em "Finish" a aplicação é criada e suas informações

(definidas pelo usuário) podem ser acessadas, como na Figura 7.10, ao clicar na aplicação na

tela inicial do IdM ou na sessão de aplicações. Nesta tela, também teremos um Client Id e

Client Secret gerados para acesso ao IdM pela aplicação. Esse Client Id e Client Secret serão

utilizados pela a aplicação no momento em que fizer requisições para o Keyrock.

Figura 7.10 - Informações da aplicação cadastrada.

7.5.3.2 Autenticação Básica para uma Aplicação

A primeira modificação realizada na aplicação foi referente a inserção de elementos de

segurança que permitissem o acesso de informações de um usuário somente após a realização

do processo de autenticação, conforme ilustrado na Figura 7.11.

Page 25: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Figura 7.11 - Modelo de arquitetura para requisição do Web App [19]

No processo exibido na Figura 7.11, ao acessar uma funcionalidade da aplicação web

que requer autenticação, o usuário é inicialmente redirecionado à tela de login no IdM. Uma

vez feito o login com as informações de acesso cadastradas nesse, é solicitada a confirmação

de autorização do usuário para a aplicação na qual ele deseja se autenticar. Uma vez que

tenha autorizado a aplicação, um access-code é gerado e retornado à aplicação. Em posse do

access code, a aplicação realiza uma nova requisição ao IdM para obter o access token, que o

retorna, fazendo com que possa ser inserido pela aplicação em chamadas posteriores.

Tendo sido registrada a aplicação, em seguida, no projeto da aplicação JSF (Java),

responsável pela interação com o usuário e comunicação com o Web Service REST, foram

implementados alguns passos para o seu correto funcionamento.

O primeiro deles foi referente à inserção de um botão para realização da autenticação

do usuário na interface, assim como um para a chamada à uma nova operação que acessa e

exibe as informações de um usuário autenticado. A nova tela é apresentada na Figura 7.12.

Figura 7.12 - Interface JSF para autenticação e requisição de informações do usuário

Page 26: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Na Figura 7.13 podemos visualizar como os componentes da aplicação JSF interagem

entre si. O SecurityAppMBeam está associado a interface do usuário, e receberá a requisição

feita quando o botão Authenticate for pressionado, redirecionando o usuário para se

autenticar no Keyrock.

Figura 7.13 - Arquitetura da aplicação JSF

O trecho de código responsável por fazer esse redirecionamento é exibido na Figura

7.14. Nele é realizada uma requisição HTTP GET ao endereço do IdM, no caminho

/oauth2/authorize, com os parâmetros response_type, client_id e redirect_uri definidos. O

parâmetro response_type deve ter o seu valor definido como “code” e o valor dos demais

parâmetros podem ser obtidos nas informações da aplicação registrada no IdM. O

access_code gerado será retornado como parâmetro GET em uma chamada ao endereço

definido no redirect_uri.

Page 27: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Figura 7.14 - Código para obtenção do access_code.

O endereço informado em redirect_uri aponta para um servlet (AuthServlet), que é

responsável por recuperar o access_code gerado pelo Keyrock. Este servlet é responsável

também pela obtenção do access_token junto ao Keyrock. O trecho de código responsável

pela obtenção do access_token no servlet definido é exibido na Figura 7.15.

Figura 7.15 - Código para obtenção do access_token.

Page 28: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Vemos então a realização da requisição HTTP POST feita ao IdM, no caminho

/oauth2/token. São definidos os cabeçalhos Authorization (com o valor formado por "Basic

"+ base64(client_id:client_secret)) e Content-Type (com o valor “application/x-www-form-

urlencoded”). Tendo sido definida a requisição com seus parâmetros e cabeçalhos, uma

conexão é aberta com o IdM e é realizada a requisição, obtendo o JSON de resposta que

contém o access_token. O token obtido é então acessado e armazenado na sessão da

aplicação, juntamente com o tempo para expiração do token, para que possam ser usados em

requisições de operações posteriores. Por fim é realizado um redirecionamento à página

inicial da aplicação.

Uma vez obtido o access_token, requisições podem ser realizadas ao IdM enviando

como parâmetro para confirmar a autenticação o token recebido, como a solicitação das

informações de um determinado usuário. Na aplicação JSF o trecho de código responsável

pela obtenção de informações do usuário autenticado após a obtenção do access token é o

apresentado na Figura 7.16. Em posse do token, uma requisição HTTP GET é realizada ao

endereço /user, passando o access_token obtido como parâmetro da requisição, recebendo

como resposta um JSON contendo as informações de acesso e permissões do usuário

autenticado com o token enviado.

Figura 7.16 - Código para obtenção do access_token.

7.5.3.2 Envio de Requisições a um Fiware GE

O processo para autenticação da aplicação e interação com um GE Fiware pode ser

ilustrado pela imagem abaixo, sendo a primeira etapa (do primeiro redirecionamento até a

obtenção do access_token) igual à descrita na seção anterior. Em seguida o token obtido é

enviado ao GE Fiware e inserido em chamadas posteriores realizadas por essa ao IdM, a fim

de confirmar a sua autenticação.

Page 29: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Figura 7.17 - Modelo de arquitetura para requisição do Web App com Serviço de GE Fiware [20].

O Keyrock é a implementação do Fiware Identity Management Generic Enabler,

escolhido como GE a ser utilizado no desenvolvimento da aplicação que descrevemos nesta

seção. Nosso objetivo é enviar requisições a esta GE para gerenciar os dados dos usuários

através da API SCIM 2.0. O IDM fornece vários mecanismos de autenticação. Qualquer um

deles é válido para acessar a API SCIM 2.0. O acesso à API SCIM 2.0 só é permitido para os

administradores, as tentativas de acesso realizadas pelos usuários que não são

administradores serão respondidas com HTTP 401 (não autorizado)2. Assim como extensões

Keystone, essas APIs são expostas pelo back-end. Por isso, foi necessário fazer as requisições

não mais ao Horizon (front-end do Keyrock), como fazíamos para requisitar o access_code e

access_token, mas sim ao Keystone (back-end), que responde pela porta 5000.

Para fazer as solicitações ao Keystone, é necessário um Token do próprio Keystone,

que é enviado no cabeçalho X-Auth-Token da requisição. É importante notar que este token

não é o mesmo que recebemos quando o usuário se autentica pelo Horizon. Esse token

Keystone pode ser obtido por meio de uma solicitação POST para o endpoint de autenticação.

Como um dos métodos de autenticação com suporte no Keystone é OAuth2, é possível usar o

token de acesso que obteve a autenticação OAuth2 para obter um token Keystone: POST /v3/auth/tokens body: "auth": {

"identity": { "methods": [ "oauth2" ],

2 http://docs.keyrock.apiary.io/#reference/scim-2.0

Page 30: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

"oauth2": { 'access_token_id': access_token

} }

}

Agora é possível utilizar o token de Keystone para realizar solicitações à API SCIM

(ou a qualquer terminal da API para o qual o usuário autenticado tem permissões). O código

responsável por obter o Keystone token é mostrado abaixo:

Figura 7.18 - Código responsável por requisitar o Keystone token.

Com o Keystone token salvo, podemos fazer a requisição as informações dos usuários:

Figura 7.19 - Código responsável por requisitar a lista de usuários.

Page 31: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

7.6 Descrição dos Componentes de Autorização (PEP Proxy GE e Authorization PDP

GE)

Nesta seção, trabalharemos apenas com as GEs responsáveis pela parte de

autorização, são PEP Proxy GE e Authorization PDP GE, já que estes habilitadores genéricos

estão altamente interligados em suas funcionalidades, por se preocuparem com o tratamento

das solicitações e permissões de acesso.

7.6.1. Conceitos Básicos sobre Controle de Acesso

A seguir, conceituaremos alguns termos fundamentais de controle de acesso, que

servirão como base para este estudo do capítulo de segurança do Fiware de forma em geral, e

mais especificamente para as GEs desta seção.

O AuthZForce fornece um modelo de controle de acesso baseado em atributo (ABAC

- Attribute-Based Access Control), uma evolução do modelo de acesso baseado em papéis

(RBAC - Role-Based Access Control). Em seguida, conceituamos os elementos principais

desses modelos.

● Recurso (Resource): Entidade a ser protegida contra uso não autorizado. Ex.:

dispositivos, arquivos, registros, tabelas, processos, programas, redes ou domínios que

contenham ou recebam informações.

● Sujeito (Subject): O sujeito é um ator representando um usuário de um recurso. O

sujeito pode ser uma pessoa, um programa, um dispositivo ou outro elemento que

solicite acesso a um recurso.

● Ação (Action): Uma ação corresponde a uma função que pode ser realizada sobre

sobre um recurso. Ex.: ler, escrever, editar, apagar, copiar, executar e modificar.

● Permissão (Permission): É uma aprovação para a execução de uma ação em

particular em um recurso.

● Papel (Role): Estabelece permissões baseadas nos papéis funcionais na empresa,

atribuindo usuários para um papel ou conjunto de papéis. Pode representar tarefas,

responsabilidades e qualificações associadas com uma empresa.

● Atributos (Attributes): Características do sujeito, recurso ou condições ambiente.

Atributos contêm informações dadas por um par “nome-valor”.

Page 32: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

● Atributos do sujeito (Subject attributes): Os atributos de um sujeito corresponde à

suas propriedades, como por exemplo o ID de usuário, organização, papel, nível de

acesso.

● Atributos de recurso (Resource attributes): O recurso é uma entidade passiva que o

sujeito solicita agir sobre este. Este recurso pode ser, por exemplo: dados, pessoa,

dispositivo ou aplicação. Atributos de recurso são ID de recurso, URL, classificação,

por exemplo.

● Atributos de ação (Action attributes): Uma ação representa a operação que um

sujeito solicita executar sobre um recurso. Ações podem ser criar, ler, escrever,

deletar. Atributos de ação são ID de ação, parâmetro A, parâmetro B e entre outros.

● Atributos de ambiente (Environment attributes): Contexto operacional ou

situacional em que ocorrem as solicitações de acesso. Ex.: a hora atual, dia da semana,

a localização de um usuário, a carga da CPU do PEP / PDP, o nível de ameaça atual e

temperatura.

● Política (Policy): representação de regras ou relações que torna possível determinar se

um acesso solicitado deve ser permitido, levando em consideração os valores dos

atributos do sujeito, do recurso e das condições ambiente possivelmente.

● Controle de Acesso Baseado em Papel (Role Based Access Control - RBAC):

Método de controle de acesso baseado em papéis que restringe o acesso ao recurso

somente aos sujeitos autorizados, através da análise dos papéis que o sujeito exerce na

organização ou empresa. Permissões são atribuídas a papéis, enquanto que papéis são

atribuídos a sujeitos. As atribuições de papéis podem ser realizadas para um sujeito ou

para grupos.

● Controle de Acesso Baseado em Atributo (Attribute Based Access Control -

ABAC): Método de controle de acesso onde o sujeito solicita a execução de operações

em recursos, que são concedidos ou negados com base em atributos atribuídos ao

sujeito, atributos atribuídos ao recurso, condições ambientais e um conjunto de

políticas que são especificados no termos desses atributos e condições.

O modelo ABAC define um conjunto de componentes funcionais, que capturam os papéis

envolvidos em um mecanismo de autorização, que serão apresentados em seguida.

Figura 7.20 - Exemplo de Pontos Funcionais de Autorização [14]

Page 33: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

A relação entre os diversos componentes do modelo ABAC é apresentado na Figura

7.20, onde temos um sujeito (subject) que solicita acesso a um recurso protegido (object). A

requisição de acesso é interceptada pelo PEP (Policy Enforcement Point), que é responsável

por aplicar as decisões de política acesso, permitindo ou negando acesso ao sujeito. Decisão

de acesso são feitas pelo PDP (Policy Decision Point - PDP), que calcula a decisão de

acesso de acordo com as políticas de segurança que são armazenadas em um repositório. Para

isso, o PDP comunica-se com o PIP (Policy Information Point - PIP) que serve como fonte

de recuperação de atributos necessários para a avaliação das políticas de modo a fornecer a

informação necessária para o PDP tomar as decisões. O PAP (Policy Administration Point -

PAP) fornece uma interface de usuário para criar, testar e depurar as políticas, permite a um

administrador gerenciar as políticas do repositório. Uma vez que uma decisão é tomada, o

PDP manda uma resposta ao PEP permitindo ou negando o acesso ao recurso, e este, por

último, irá autorizar ou negar o acesso ao sujeito como decidido pelo PDP.

7.6.2 Visão Geral da Arquitetura do Authorization PDP GE e PEP Proxy GE

Nesta seção detalhamos a arquitetura das GEs Authorization PDP e PEP Proxy, cuja

implementações de referência são, respectivamente, o AuthZForce e Wilma.

Page 34: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

O AuthZForce fornece uma API para obter decisões de autorização com base em

políticas de autorização e os pedidos de autorização de PEPs, esta API segue o estilo de

arquitetura REST e está em conformidade com XACML na versão 3.0. Esta GE fornece duas

características principais:

1. Avaliação de decisão de políticas de autorização: Sua principal característica

consiste em avaliar as decisões de autorização com base em políticas e atributos

relacionados a uma requisição de acesso dada, por exemplo, identidade do solicitante,

recurso solicitado e ação solicitada, seguindo a lógica de avaliação da política

definida no padrão XACML.

2. Administração de políticas de autorização: utilizado para a criação, recuperação,

atualização e remoção de políticas XACML. Este recurso é fornecido para clientes

externos através de uma API REST denominada PAP (Policy Administration Point).

Estas características são implementadas pelo AuthZForce através das APIs PDP e

PAP, baseado nos componentes do modelo ABAC. A API PDP oferece serviços para a

tomada de decisão de autorização computadas por um mecanismo de controle de acesso

compatível com XACML (XACML-compliant), enquanto que a API PAP permite o

gerenciamento das políticas XACML que serão consideradas pelos serviços da API PDP.

A API PDP pode ser utilizada por qualquer implementação de PEP que siga a

especificação XACML para solicitar uma decisão de autorização do mecanismo de avaliação

de políticas. O PEP envia uma solicitação HTTP POST para a API com uma requisição

XACML como corpo da solicitação. Este pedido deve conter todos os atributos de

autorização necessários, referidos na política aplicada, para o PDP para ser capaz de avaliar

esta política. O PDP retorna uma resposta XACML que contém a permissão ou negação da

decisão. Ele também pode retornar Indeterminate se ocorreu um erro durante a avaliação, por

exemplo, se algum atributo estava faltando. É possível também definir a política de forma

que o PDP retorne Deny em vez de Indeterminate se ocorrer um erro deste tipo, para evitar

qualquer problema no lado do PEP.

A API PAP é utilizada pela Identity Management GE para gerenciar as políticas de

acesso, definidas por desenvolvedores para suas aplicações através da interface Web do

Keyrock. Esta API também pode ser utilizada diretamente por qualquer cliente de

administração de política, que por ventura venha ser desenvolvido especificamente para tratar

de aspectos específicos da política de controle de acesso que o portal do IdM GE não atenda.

Por outro lado, o PEP Proxy Wilma, atua como ponto de aplicação de decisões. Este

GE é um componente de back-end, sem interface de front-end, que permite proteger o acesso

Page 35: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

a serviços e aplicativos, adicionando filtros de autenticação e autorização para GEs do Fiware

e para qualquer serviço de back-end. Em suma, o PEP Proxy é capaz de interceptar cada

solicitação de acesso para um serviço e executar o fluxo de autenticação e autorização. No

PEP Proxy GE, o recurso protegido é um serviço REST, para o qual a GE desempenha o

papel de proxy reverso e é implantado como tal. Nesta configuração, é fundamental que

qualquer requisição de acesso passe através do PEP Proxy antes de chegar ao serviço

protegido.

Figura 7.21 - Authorization PDP -Visão geral da arquitetura [15]

A Figura 7.21 mostra como os componente AuthZForce e Wilma interagem para

garantir controle de acesso. Quando um usuário (Access Requester) deseja acessar um

determinado serviço, ele precisa se autenticar junto ao Identity Management GE, que retorna

um token de acesso (passo 1). Quando o PEP Proxy GE recebe uma requisição (passo 2), ele

recupera o token de autenticação do cabeçalho específico e valida-o com Identity

Management GE (passo 3), obtendo também informações acerca do usuário. Após a

autenticação, o PEP Proxy interage com o Authorization PDP GE para realizar a autorização

(passo 4). O PEP Proxy envia ao Authorization PDP as informações do usuário (ex: Id de

usuário, papel, atributos) e da requisição (ex: recurso a ser acessado, ação). Baseado nas

políticas de segurança configuradas o Authorization PDP toma uma decisão acerca de

Page 36: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

permitir ou negar o acesso. Caso o acesso seja permitido, o PEP Proxy GE então encaminha a

requisição para o serviço (passo 5).

Conforme apresentado na Figura 7.21, o Identity Management GE (Keyrock) interage

com a API PAP do Authorization PDP para o gerenciamento de políticas de acesso. Com

isso, um desenvolvedor é capaz de definir sua política de acesso utilizando o Portal de

Desenvolvedor de Aplicações do Keyrock, de forma que não é necessário ter conhecimentos

na linguagem XACML para a definição de políticas de acesso usando componentes Fiware.

7.6.3 Representando Políticas de Controle de Acesso usando XACML

XACML (eXtensible Access Control Markup Language) é uma linguagem de política

de controle de acesso padronizada pela OASIS que implementa o ABAC (Attribute-Based

Access Control ou Controle de Acesso Baseado em Atributos). Por ser um padrão aberto, a

linguagem traz diversos benefícios, tais como suporte de múltiplos fornecedores,

interoperabilidade entre plataformas e implementações, e um comitê que trabalha de forma

transparente para manter em linha o padrão com as crescentes demandas da indústria. A

primeira versão do XACML foi disponibilizada em 2003 (v1.0), e atualmente a mesma

encontra-se na versão 3.0 (disponibilizada em 2013).

O XACML pode ser sumarizado em 3 pontos principais:

● Domínio (Domain): A aplicação permite a criação de múltiplos domínios, estes são

instâncias para utilizar as políticas de autorização de forma independentes, permitindo

a definição de políticas para aplicações distintas, ou para uma organização.

● Linguagem para definição de politicas (Policy language): XACML (eXtensible

Access Control Markup Language) define um modelo de dados XML para a

definição de políticas de autorização, bem como a lógica a seguir para avaliá-las em

um contexto de solicitação de acesso. O XACML é estruturado principalmente nos

seguintes elemento: Regra, Política (conjunto de regras) e “PolicySet” (conjunto de

elementos de política). A Política, a “PolicySet”, combina várias regras ou políticas e,

portanto, várias decisões juntas de várias maneiras, que são definidas na norma, para

tomar a decisão final.

● Protocolo de Requisição-Resposta (Request-Response protocol): O padrão XACML

também define um modelo de dados XML para a solicitação de decisão de

autorização (XACML Request) que um PEP cria com todos os atributos solicitados de

Page 37: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

acesso necessários e envia para o API PDP para avaliação e a resposta resultante

(XACML Response), que contém a decisão final (permitir ou negar).

Mais detalhes sobre a linguagem podem ser encontrados em sua especificação3.

7.6.3. APIs

Nesta seção, apresentaremos uma descrição das APIs PAP oferecidas pelo

AuthZForce, que são aqueles APIs utilizadas por desenvolvedores interessados em manipular

políticas de acesso. É importante mencionar que as políticas de acesso podem ser

manipuladas pela interface Web oferecida pelo Keyrock, que utiliza-se das APIs que serão

apresentadas em seguida.

7.6.3.1. APIs para Administração de domínio de política

O AuthZForce pode ser utilizado para decisões de acesso de múltiplas

instâncias/domínios, permitindo que os usuários ou organizações utilizem as políticas de

autorização de forma que estejam completamente isoladas. Existem quatro operações

principais para a manipulação de domínio de política, que são criação, listagem, edição e

remoção de domínios de administração de política.

Tabela 10 - Tabela de Verbos HTTP para manipulação de domínio.

Operação Verbo HTTP

Cabeçalho Descrição

/domains POST Content-Type: application/xml; charset=UTF-8;

Accept: application/xml;

Adiciona domínio.

/domains/{domainId}/properties

PUT Content-Type: application/xml; charset=UTF-8;

Accept: application/xml; charset=UTF-8;

Atualiza propriedades do domínio.

3 https://docs.oasis-open.org/xacml/3.0/xacml-3.0-core-spec-os-en.html

Page 38: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

/domains/{domainId}/properties

GET Accept: application/xml; charset=UTF-8;

Obtém uma lista dos domínios existentes.

/domains/{domain_ID} DELETE Content-Type: application/xml; charset=UTF-8;

Accept: application/xml

Deleta domínio.

7.6.3.2. API para Administração de Política

A API para Administração de Política, chamada de PAP, é utilizada por

administradores de política para gerenciar o repositório de políticas a partir da qual o PDP

API carrega as políticas aplicadas. Também, importante saber que o PAP suporta múltiplas

instâncias na forma de domínios de administração genérico que são separados uns dos outros.

Cada administrador de política, exceto o super administrador, é de fato um administrador de

domínio, na medida em que ele está autorizado a administrar a política para um ou mais

domínios específicos. E assim, os domínios são normalmente utilizados para auxiliar no

isolamento de instâncias, deixando um domínio por instância.

As operações utilizadas para manipular as políticas de um domínio são chamadas de

Adding, Updating, Getting e Deleting no inglês, mas traduzindo-as ficariam: adicionando,

atualizando, listando e deletando.

Tabela 11 - Tabela de Verbos HTTP para manipulação de políticas de domínio.

Operação Verbo HTTP

Cabeçalho Descrição

/domains/{domainId}/pap/policies

POST Content-Type: application/xml; charset=UTF-8

Accept: application/xml; charset=UTF-8

Adiciona e atualiza políticas a um domínio.

No corpo é enviado um conjunto de Políticas XACML como definido no esquema XACML3.0

Page 39: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

- /domains/{domainId}/pap/policies/{policyId}

- /domains/{domainId}/pap/policies/{policyId}/{version}

- /domains/{domainId}/pap/policies

GET Accept: application/xml; charset=UTF-8

Obtém uma ou mais políticas, ou, ainda, as versões de políticas de um domínio.

- /domains/{domainId}/pap/policies/{policyId}

- /domains/{domainId}/pap/policies/{policyId}/{version}

DELETE

Accept: application/xml; charset=UTF-8

Deleta políticas ou todas as versões de uma política

7.6.4 Cenários de Uso

Nesta seção apresentaremos a evolução da aplicação de exemplo, que inicialmente

possuía apenas a Autenticação do Keyrock, para demonstrarmos a utilização dos

componentes de autorização da plataforma Fiware. Inicialmente explicaremos detalhes da

implementação necessária para adicionarmos a autorização básica com o PEP, e em seguida a

autorização básica com o PEP e PDP.

7.6.6.1 Autenticação com PEP

No primeiro nível, detalharemos o passo a passo somente da autenticação, utilizando

contas Fiware para os usuários e aplicações, neste nível, trabalharemos com IdM GE e PEP

Proxy GE.

Page 40: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Figura 7.22 - PEP Proxy - Nível 1: Autenticação [16]

De acordo com a Figura 7.22 exibida acima, após a autenticação do cliente com sua

conta Fiware, a aplicação de front-end (Web App) recebe um token de acesso (access_token).

Em seguida, ela realiza uma requisição ao PEP anexando o token de acesso. Para que essa

requisição ocorra, é necessário que o PEP seja registrado no Keyrock, junto a conta da

aplicação cliente, permitindo que as credenciais do PEP sejam geradas e a aplicação possa

utilizá-las para realizar as solicitações de acesso aos serviços back-end.

A solicitação REST (request) feita pelo front-end (Web APP) ao PEP, para acesso ao

serviço back-end (Back-end Apps), conterá um token OAuth2 (access-token) do usuário.

Esse access-token será enviado ao Fiware Account para ser validado. O Fiware Account

retornará o resultado da validação, e no caso do access-token ser válido, as informações do

usuários serão retornadas juntamente com o resultado da validação. Por fim, o Pep Proxy

poderá liberar o acesso ao serviço back-end.

Na Figura 7.23 vemos a tela de apresentação da aplicação cadastrada no Fiware, e na

seção PEP Proxy o botão ‘Register a new PEP Proxy’, que ao ser selecionado registra as

credenciais do PEP a aplicação.

Page 41: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Figura 7.23 - Tela de apresentação das informações da aplicação.

É necessário registrar as credenciais do PEP, pois elas não são cadastradas

automaticamente com a criação da aplicação. Depois do registro podemos ter acesso a elas,

como vemos na figura 7.24.

Figura 7.24 - Apresentação da aplicação e das credenciais PEP Proxy.

Outra configuração importante para o PEP são os dados contidos no configuração

config.js, onde devemos indicar as credenciais do PEP gerados pelo Fiware, o endpoint do

idm e do serviço Back-end, para onde o PEP vai redirecionar a requisição caso o

access_token recebido seja válido. Na Figura 7.25 vemos um exemplo de informações no

config.js.

Page 42: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Figura 7.25 – Método que envia a requisição ao Web Service

Do ponto de vista da implementação, devemos alterar todas as referências existentes ao

endereço do serviço back-end, para o endereço do PEP, o acesso ao back-end será visível

somente para o PEP.

O código responsável por realizar as requisições é mostrado na Figura 7.26. Nele,

vemos o HTTP Header: X-Auth-Token com o access token obtido do Keyrock.

Figura 7.26 - Método que envia a requisição ao Web Service

Quando o PEP Proxy recebe a solicitação, ele extrai o token do cabeçalho HTTP e

envia uma solicitação para o Servidor de Contas do Fiware (IdM GE) para validá-lo, como

Page 43: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

explicamos anteriormente. Lembre-se que a URL do servidor é definida no campo

"account_host" do arquivo de configuração. Se o token é válido, o PEP redireciona a

solicitação para o serviço back-end configurado no "app_host" e "app_port" do arquivo de

configuração.

7.6.6.2 Autorização Básica com PEP e PDP

O segundo nível utilizará uma autorização básica, isto é, além de realizar a parte de

autenticação, trabalha com configuração dos papéis e das permissões para um usuário do

aplicativo, através do uso do IdM GE, PEP Proxy GE e Authorization PDP.

Figura 7.27 - PEP Proxy - Nível 2: Autorização Básica [16]

Na figura 7.27, observamos que o nível 2 ocorre de forma semelhante ao nível 1, mas

com a adição de alguns parâmetros que também serão analisados pela GE discutida. Logo,

nesse nível 2, o primeiro passo é a criação de usuário e aplicativo na conta do Fiware, mas

além disso, também configurar os papéis e permissões para esse usuário que terá no

aplicativo.

O PEP Proxy irá verificar se o access_token é de um usuário autenticado numa conta

Fiware, caso afirmativo, o PEP receberá uma resposta com as informações do usuário, nestas

informações está incluída a lista de papéis que o usuário tem para esta aplicação. Além disso,

Page 44: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

o PEP Proxy interage com o Authorization PDP para saber se o usuário possui permissão ao

recurso (Back-end Apps) utilizando informações como os papéis do usuário, HTTP Verb e o

caminho do recurso.

Para que esta interação entre PEP e PDP ocorra, não é necessário registro do PDP no

Keyrock, porém o processo de configuração feito na aplicação anterior descrita na seção

7.6.6.1 é necessario, tendo que registrar a aplicaçao back-end no arquivo de configuraçoes

config.js. Também é necessário a associação dos usuários com determinadas Roles e

Permissions, como mostramos na Figura 7.9. Os papéis e políticas de cada usuários são

recuperadas pelo PDP quando o PEP é requisitado e recebe o token do usuário que está

solicitando um determinado serviço do back-end.

Além disso, é necessário editar o arquivo de configurações do PEP para liberar a

utilização do PDP, como mostramos na figura a seguir:

Figura 7.28 - Arquivo de configurações do PEP.

Para que o PDP seja utilizado, basta atribuir ‘true’ a enable, identificar o endereço

onde o AuthZForce está sendo executado, a sua porta, e a política.

Na Figura 7.29 podemos ver a arquitetura da aplicação de exemplo após a adição do

do PEP Proxy e do PDP. O PEP Proxy passa a ser uma camada de proteção para os serviços

oferecidos pelo back-end, e se comunica com o Keyrock, para a validação do access_token

enviado pelo front-end, e com o PDP, passando os papéis, o verbo HTTP e o path do recurso

que se deseja acessar para verificar a autorização do usuário a este recurso.

Figura 7.29 - Arquitetura da aplicação com o PEP Proxy e o PDP.

Page 45: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Durante os testes recebemos um erro do AuthZForce que nos notificou da falta de

domínio para a aplicação que desejávamos acessar. Após pesquisarmos soluções,encontramos

o registro de um erro similar causado por um bug no Keyrock.

7.7 Descrição do CyberSecurity

O CyberSecurity GE é um componente com foco na detecção e resposta a incidentes

de segurança. Este componente oferece mecanismos que tratam desde a análise de riscos até a

sugestão de possíveis respostas que permitam mitigar esse risco, tendo como público-alvo

organizações que desejam detectar e gerenciar risco de segurança em sistemas e aplicações,

como por exemplo, mantenedores de infraestrutura Fiware, e desenvolvedores de aplicações

baseada na plataforma Fiware.

A proposta do Cyber Security GE engloba (1) Coletar vulnerabilidades e avaliar

ameaças potenciais; (2) Identificar ataques mais prováveis e de maior impacto; (3) Avaliar

riscos e propor soluções de remediação; (4) Entregar um serviço de visualização centralizado

em nível de risco e custo; e (5) Prover recursos de compartilhamento de dados críticos que

preservem a privacidade da organização. De forma a atingir esses objetivos, a arquitetura do

CyberSecurity GE engloba um conjunto de componentes que atuam em conjunto com um

SIEM.

Page 46: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Figura 7.30 - Componentes de desenvolvimento e interações com Cyber Security GE [17].

O CyberSecurity GE trabalha em conjunto com outros componentes de segurança,

incluindo elementos de infraestrutura (tais como firewalls, roteadores e switches) e elementos

de controle de acesso (como o IdM KeyRock e o PDP AuthZForce do Fiware). Esses

componentes são monitorados através de um SIEM, através de probes.

O Cyber Data Extraction é o componente responsável por extrair e processar os

dados relevantes fornecidos pelo usuário sobre seu sistema: topologia de rede, regras de

firewall, resultados de analisadores de vulnerabilidades, etc. A saída deste componente é

utilizada como entrada pelos componentes Scored Attack Path e Remediation. Dois tipos de

dados são utilizados: O relatório de um analisador de vulnerabilidades (como por exemplo o

Nessus) e um arquivo descrevendo a topologia do sistema. Este XML descreve computadores

e suas interfaces de rede, endereços IP, VLAN, serviços de rede, firewall e configuração de

roteamento. Este arquivo pode ser gerado automaticamente a partir de ferramentas de

gerenciamento disponíveis. Para dar informações sobre vulnerabilidades e a topologia para

outros componentes, duas formas de saída podem ser geradas. A primeira é a informação

necessária para que o MulVAL Attack Graph Engine gere o grafo de ataque. Esse arquivo

contém tanto os dados sobre vulnerabilidades quanto sobre a topologia. O segundo arquivo é

gerado como um XML, necessário para a aplicação de remediação.

Page 47: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

O componente MulVAL Attack Graph Engine é um analisador topológico de

vulnerabilidades capaz de gerar, a partir da saída do Cyber Data Extraction, os possíveis

caminhos utilizados por ataques. Esta engine combina os conceitos de grafo de ataque4 com

CVSS (Common Vulnerability Score System) para prover uma analise qualitativa e

quantitativa de vulnerabilidades individuais. As interações entre múltiplos elementos de redes

devem ser considerados para determinar o impacto na segurança que as vulnerabilidades em

software possuem para um determinada rede. Desse modo, o MulVAL analisa: Quais

vulnerabilidades foram reportadas e se elas existem em meus servidores; Quais softwares e

serviços estão rodando em meus servidores e como eles estão configurados; Como meus

roteadores e firewalls estão configurados; Quem são os usuários da minha rede; Como esses

componentes interagem; e Quais acessos eu devo permitir. O MulVAL cria grafos lógicos

que apresentam os caminhos de ataque, passando pelas regras de segurança, dispositivos e

serviços de rede. Os administradores de redes podem definir suas preferências de pontuação.

Baseado no grafo de ataque o componente Scored Attack Paths analisa as principais

vias de ataque e computa uma pontuação para cada um dos caminhos de acordo com seu

impacto no negócio e probabilidade de ocorrência. Basicamente, define o nível de risco

associado com cada caminho possível em um grafo de ataque.

O componente Remediation Engine ajuda a mitigar os riscos e toma ações efetivas

de acordo com as políticas de segurança, computando diferentes formas de quebrar as vias de

ataque, estimando o custo de cada uma. Desta forma, o administrador de rede pode selecionar

o caminho de rede e verificar as alternativas de remediação. Para computar remediações, um

banco de remediações é necessário. Este banco faz a conexão entre as vulnerabilidades e uma

possível remediação. Diversos tipos de remediação podem ser utilizados, tais como correções

de configuração, e aplicação de patches em software. Outros tipos de remediações não podem

ser armazenados em um banco de dados, pois elas dependem de remediações em nível de

rede, como regras de firewall, mudança de regra de roteamento. Para isso, o Remediation

Engine necessita de uma simulação da topologia da rede. A lista de remediações apresenta o

custo estimado, operacional e impacto. Existe também a possibilita de remediação

automática, utilizando aprendizagem de máquina. Utilizando respostas análogas as tomadas

por administradores em caminhos de ataques parecidos.

4 http://forge.fiware.org/plugins/mediawiki/wiki/fiware/index.php/Fiware.OpenSpecification.Security.CyberSecurity

Page 48: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

O componente Visualization interface provê uma interface Web para o

administrador de rede para que ele possa interagir com os componentes, analisando

dinamicamente os riscos do sistema. O administrador pode utilizar a ferramenta para

visualizar os possíveis caminhos de ataques, ver o nível do risco e as opções de remediações

para resolvê-las.

O componente Privacy-Presenting Data Sharing possibilita que uma organização

possa compartilhar dados relativos a um ataque bem sucedido com grande impacto de

negócio com outros, sem expor informações confidenciais. As funcionalidades do Cyber

Security possibilita que a organização compreenda sua situação e reaja de forma apropriada,

particularmente durante fases críticas. Nessas fases pode ser crucial compartilhar informações

com instituições privadas ou companhias de consultoria. Privacy-Preserving Data Sharing

possibilita que essas informações sejam compartilhadas sem expor dados confidenciais e

críticos da organização. Isso é conseguido através dos princípios de Multi-Party

Computation, uma técnica baseada em criptografia onde entidades diferentes são capazes de

operar em um conjunto de informações com garantias de privacidade.

A implementação de referência do Cyber Security GE pode ser encontrada no

catálogo de GEs Fiware. Entretanto, a mesma está classificada como deprecated, tendo sua

última atualização em 02/02/2016.

7.8 Descrição do Trustworthy Factory GE

Há muita vulnerabilidade em sistemas disponibilizados na internet devido a malware,

spyware, hackers e falhas de segurança todos os dias, mas a maioria dessas vulnerabilidades

hoje são as vulnerabilidades dos aplicativos. Embora a confiança de um sistema seja algo

subjetivo, confiabilidade de um sistema pode ser medido de acordo com indicadores

quantificados. Portanto, foi desenvolvida a Trustworthy Factory GE para fornecer um

ambiente para desenvolver aplicativos confiáveis e para ajudar a sua certificação com base na

avaliação dos atributos de qualidade de software (baseado na ISO 25010). O ponto de partida

para esta GE é uma lista de objetivos de confiabilidade (trustworthiness profile).

A maioria dos habilitadores genéricos do Fiware fornece funções comuns que podem

ser integradas dentro de novas aplicações e efetivamente utilizadas em tempo de execução, ou

seja, quando o aplicativo é executado. Já a Trustworthy Factory GE não presta este tipo de

função comum no momento de execução do aplicativo, mas sim uma função comum para o

Page 49: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

desenvolvimento de novas aplicações Java confiáveis e, portanto, utilizada principalmente

durante a fase de desenvolvimento.

A Trustworthy Factory GE consiste em duas características principais:

● Static and Dynamic Application Trustworthiness Assessment: Este recurso

oferece um ambiente de desenvolvimento que auxilia um desenvolvedor a

escrever código-fonte Java com melhor qualidade, considerando aspectos de

projeto e melhores práticas. Além disso, outras ferramentas podem ser

utilizadas de forma a oferecer uma avaliação intermediária da confiabilidade

para os desenvolvedores. Com isso, desenvolvedores são capazes de consultar

o objetivo de confiabilidade dado como entrada pelo provedor de software e

compará-lo com uma avaliação atual.

● Semi-automated Workflow for Application Trustworthiness

Certification: Este recurso é usada pelo avaliador para preparar a fase de

certificação. Ele possui como entrada o código fonte da aplicação e diferentes

informações fornecidas pelo desenvolvedor de software, tais como contexto da

aplicação e o objetivo de confiabilidade). Um conjunto de ferramentas,

integradas de acordo com um workflow, auxiliam o avaliador a compreender o

contexto da aplicação, redefinir ou adicionar novos objetivos de

confiabilidade, além de avaliar os atributos de confiabilidade de uma aplicação

em relação a estes objetivos. Com isso, o avaliador é capaz de quantificar o

nível de confiabilidade de um aplicativo. Os resultados deste trabalho são

armazenadas em um arquivo XML, assinado pelo avaliador, chamado "Digital

Trustworthiness Certificate (DTwC)" e este arquivo será usado pela

certificadora para certificar a aplicação.

Figura 7.31 - Contexto de fabricação de confiança [18].

Page 50: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

Uma visão geral deste processo é apresentado na Figura 7.8.1. O ambiente de

desenvolvimento consiste na IDE Eclipse com um conjunto de plugins, apresentando visões

diferentes para o desenvolvedor e o avaliador. Um conjunto de plugins foram adicionados a

fim de combinar, agregar, fundir e transformar os resultados gerados por diversas ferramentas

de avaliação de código-fonte com um ponto de vista de confiabilidade. Uma vez pronta, a

aplicação passa por uma ferramenta de certificação, onde um avaliador verificar se o

aplicativo é compatível com os requisitos de confiabilidade especificadas como entrada.

O processo de certificação consiste em cinco etapas:

1. System description: Esta etapa consiste em declarar os diferentes componentes do

sistema e identificar qual componente está sob avaliação.

2. Trustworthiness Problem definition: Esta segunda etapa, define os problemas que

poderiam impactar um componente da aplicação. A lista de problemas é uma lista

predefinida, classificados por tipo. O avaliador seleciona um componente e verifica os

possíveis problemas que podem ocorrer neste recurso.

3. Trustworthiness Property Specification: Além do perfil de confiabilidade, ou seja,

a lista de objetivos, inicialmente passado para o desenvolvedor, o avaliador pode

associar atributos de confiabilidade extra para componentes específicos do aplicativo

e definir métricas diferentes para cada um.

4. Evidence collection: Esta etapa permite ao avaliador recolher as provas para calcular

as diferentes métricas e o valor para cada atributo de confiabilidade. A coleção pode

ser feito automaticamente usando ferramentas diferentes, exemplo análise estática e

em tempo de execução, ou podem ser recolhidos manualmente, no caso de algumas

provas serem fornecidas manualmente, por exemplo, os resultados de testes.

Page 51: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

5. DTwC (Digital Trustworthiness Certificate) creation and editing: Este passo é

usado para validar a geração do certificado. Todos os dados necessários são

verificados e validados, a fim de gerar um certificado completo. Esta visão mostra o

caminho em que o certificado está e onde componente deve ter sido gerado, isto é, o

seu caminho físico ou URL de mercado.

A implementação de referência do Trustworthy Factory GE pode ser encontrada no

catálogo de GEs Fiware. Semelhantemente a CyberSecurity GE, está classificada como

deprecated, tendo sua última atualização em 02/02/2016.

Page 52: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

7.9 Considerações Finais Neste capítulo de Segurança desenvolvemos um estudo detalhado da sua arquitetura,

trabalhando com os cinco habilitadores genéricos: Identity Management GE, Authorization

PDP GE, PEP Proxy GE, Cyber Security GE e Trustworthy Factory GE. Apesar de ter

trabalhado com todos eles, uma maior ênfase foi dada à área temática de Gerenciamento de

Identidade e Acesso, tendo um maior detalhamento sobre estes três primeiros GEs com suas

respectivas implementações de referência: KeyRock, AuthZForce e Wilma. Vale salientar

que os outros dois GEs estão classificadas como deprecated desde fevereiro do ano presente.

Também apresentamos uma aplicação como estudo de caso para a apresentação dos

GEs de Segurança, sendo esta formada por um componente back-end (definindo um

webservice REST) e um componente front-end (correspondente a uma aplicação Web para

interação com o usuário que realiza chamadas aos serviços definidos) que puderam ser

utilizados de forma a experimentar a integração dos GEs apresentados com seus

componentes. 7.9.1 Problemas Encontrados Surgiram diversos problemas durante o estudo do Capítulo de Segurança da

plataforma Fiware. Um dos problemas diz respeito ao acesso à um GE utilizado um token de

autenticação. Foi desenvolvido um cliente Web para acessar o Repository GE,

disponibilizado pelo capítulo técnico de aplicações (Applications, Services and Data

Delivery) após autenticação do usuário junto ao Keyrock. Entretanto, embora o token de

autenticação tenha sido obtido com sucesso, o mesmo não era aceito pelo GE. Uma tentativa

de identificar a causa do problema foi iniciada, mas não tivemos tempo hábil para um estudo

aprofundado do Repository GE e seus mecanismos de autenticação junto ao Keyrock.

Outro problema ocorreu quando tentamos acessar a API de gerência de usuários do

Keyrock. Inicialmente, quando tentamos acessar a API enviando o token recebido após a

autenticação pelo Horizon obtivemos a resposta de token não autorizado. Uma primeira

solução foi recuperar o token admin do Keystone, e depois acessar os recursos do back-end

do Keyrock. Depois de compartilharmos o problema no fórum stackoverflow5 conseguimos

5 http://stackoverflow.com/questions/39962726/access-scim-api-keyrock-fiware/40127254#40127254

Page 53: Smart Metropolis – Plataformas e Aplicações para Cidades … · 2017-03-24 · 7.6.3. APIs ... REST) e um componente front-end (correspondente a uma aplicação Web para interação

uma segunda solução, que foi requisitar um token válido para o Keystone utilizado o token de

acesso recebido através da autenticação por oauth.

Por fim, quando estávamos implementando a autorização com o PDP, surgiu uma

notificação feita pelo AuthZForce sobre a falta de domínio para a aplicação que estávamos

tentando acessar. Tentamos criar um domínio pelo AuthZForce, porém não obtivemos

sucesso para conectar esse domínio a aplicação. Ao consultar o repositório oficial do projeto,

foi confirmado por um de seus desenvolvedores que esse comportamento é causado por um

bug no Keyrock, que não configura as políticas de acesso corretamente no AuthZForce.

7.9.2 Pendências Devido às dificuldades enfrentadas no desenvolvimento das aplicações e com o fim

do prazo para a conclusão do relatório, o desenvolvimento de uma aplicação de exemplo que

utilize o PDP (AuthZForce) é uma pendência em aberto. É importante ressaltar que tal

dependência é causada por um bug no Keyrock, e que seus desenvolvedores já foram

contactados sobre o assunto.

Também é apresentada como pendência a utilização da linguagem XACML para o

gerenciamento de domínios e políticas de controle de acesso.

7.9.3 Próximos passos

Como próximos passos está a definição de uma solução para a utilização de políticas

de controle de acesso através do componente Keyrock e AuthZForce. Para tal, indicamos o

estudo sobre a administração de domínios e políticas com AuthZForce, o que exigirá um

estudo acerca da linguagem XACML. Tal estudo permitirá também que se explore de

maneira mais aprofundada os componentes Keyrock, Wilma, e AuthZForce. Tal estudo visa a

produção de material didático acerca da utilização das GEs mencionadas para proteger

aplicações que rodem em cima de uma infraestrutura Fiware.