De que se trata o artigo?

Este artigo demonstra como funciona a criação de serviços no WCF (Windows Communication Foundation). A ideia é entender como criar serviços seguros para garantir os sigilos de possíveis informações.


Em que situação o tema é útil

O tema é útil quando for necessário aplicar técnicas de segurança para serviços no WCF, tornando possível restringir o acesso a usuários não autorizados e criptografando mensagens apara que outras pessoas não autorizadas possam ver, por exemplo.

Segurança no WCF

Os sistemas e aplicativos estão cada dia mais expostos a riscos e ameaças que podem se aproveitar de pequenas vulnerabilidades dos projetos e colocar em perigo dados confidenciais e de grande valor ao seu proprietário. No sentido de entender e apresentar diferentes formas de como aplicar segurança no WCF, esse artigo aborda o contexto segurança da informação em vários cenários e necessidades. Para isso, vamos estudar e aplicar recursos de proteção no nível de transporte, mensagens e autenticação.

Ao se falar em software distribuído, estamos falando em informações que são trafegadas por caminhos que não são de responsabilidade das empresas, como a internet, por exemplo. Este é um cenário repleto de riscos e ameaças, pois pessoas mal intencionadas podem ter acesso a informações sigilosas. Porém, para facilitar o desenvolvimento de soluções que atendam a essas e outras necessidades do mundo real foi implementado no .NET Framework um recurso chamado de Windows Communication Foundation.

O objetivo deste artigo é abordar as questões mais importantes na segurança de serviços desenvolvidos no WCF. Serão mostrados na prática os tipos de segurança suportados pelo mesmo. Para isso, iremos desenvolver um serviço que recupere uma lista de clientes para um parceiro (consumidor) e entender como aplicar uma proteção para garantir a integridade e confidencialidade desses dados transportados pelo serviço.

Segurança no WCF

Podemos dizer que a segurança no WCF se preocupa com a proteção dos serviços e dados trafegados entre os participantes. Em geral, o aspecto mais comum de proteção é o conceito de autenticação.

Entretanto, em um ambiente distribuído a segurança se divide em diversos fatores:

Garantir o sigilo - proteger as comunicações entre fornecedores de serviços e consumidores. Por exemplo, um serviço exposto na internet e que trafega dados confidenciais de uma organização pode ser consumido por pessoas não autorizadas ou até mesmo, ter suas mensagens interceptadas por programas ou pessoas mal intencionadas. Normalmente, se consegue preservar esses dados com mensagens criptografadas.

Impedir adulteração ou corrupção das mensagens: em um cenário vulnerável, usuários maliciosos podem se aproveitar de falhas de segurança e corromper ou adulterar mensagens transitadas antes que cheguem ao seu destino, causando um grande impacto na qualidade da informação e integridade dos dados. Uma maneira de solucionar esse problema seria utilizar técnicas como hashing de mensagens e geração de assinaturas digitais. O hashing consiste de um embaralhamento e codificação do conteúdo de uma mensagem, resultando em um valor criptográfico. Por exemplo, em uma operação de hashing o texto “DevMedia” poderia ser transformado na seguinte cadeia de caracteres: “DFD 7558 7D88”. Esse valor também pode ser utilizado para verificar se o conteúdo de uma mensagem sofreu alteração, visto que qualquer modificação feita no texto original, irá gerar um valor hash diferente.

Garantir a entrega das mensagens: mesmo que uma mensagem seja interceptada e o usuário malicioso não consiga decifrar o código de segurança, ele pode interceptar a mensagem repetidamente com “ataque de repetição” e evitar a entrega dos dados, resultando em erro de funcionamento. Um ataque de repetição consiste da técnica de bombardear um determinado servidor/serviço com milhares de acessos simultâneos, sobrecarregando sua capacidade de resposta e consequentemente tirar o serviço atacado de operação.

Criando o projeto base

Vamos agora criar uma solução com três projetos que irão servir de base para implementação de segurança no serviço com WCF. Para isso, considere uma empresa chamada EContratante que queira fazer uma pesquisa de satisfação de seus clientes, então esta decide contratar os serviços de uma empresa especializada em pesquisas, a qual chamaremos de EPesquisa. A empresa EPesquisa irá precisar da relação de todos os clientes da EContratante para realizar a pesquisa de satisfação. O projeto então deve ficar conforme ilustrado na Figura 1.

Figura 1. Projeto da solução

Os projetos serão divididos em:

· WCFConsumer: projeto do tipo Windows Form, responsável por conter o formulário que apresenta ao usuário a relação de todos os clientes da empresa EContratantes para a empresa EPesquisa.

· WCFService: responsável por implementar o serviço que fornece a lista com todos os clientes da empresa EContratante.

· DataCliente: responsável por conter o mapeamento do banco de dados da empresa EContratante.

O projeto base

Os exemplos foram criados e implementados com as ferramentas apresentadas a seguir:

· Visual Studio 2010 Professional;

· SQL Server 2008 Express;

· Internet Information Services (IIS) 7.5;

· Microsoft Windows 7 Professional (Users/Groups).

Deve ser criado um banco de dados que irá conter uma tabela que armazenará todos os clientes da empresa EContratante. Assim, foi criado no SQL Server um novo banco de dados chamado “WCFSecurity” e nele foi adicionada uma tabela com o nome “Clientes” e os campos conforme apresentados na Tabela 1.

Coluna

Tipo

Permite nulo

ID

int

NOME

nvarchar(100)

ü

CIDADE

nvarchar(50)

ü

...
Quer ler esse conteúdo completo? Tenha acesso completo