Neusa Meneses Beltrão
1 Escola Superior de Tecnologia e Gestão de Viseu Instituto Politécnico de Viseu limite texto Fábio Dias Francisco Gestão de Recursos e Processos em Rede Tese de Mestrado Sistemas e Tecnologias de Informação para as Organizações Professor Doutor Paulo Tomé Janeiro de 2013
2 A AtodaA toda a minha família e amigos, a todos os que me apoiaram, dedico este trabalho i
4 RESUMO Hoje em dia deparamo-nos com sistemas informáticos cada vez mais desenvolvidos e complexos, mas ao desenvolver mais uma certa tecnologia, abrem-se por vezes mais falhas na segurança o que torna o sistema mais vulnerável a tentativas de invasão, e por vezes à destruição do próprio sistema. Nos sistemas operativos modernos, o problema reside, não na totalidade, mas na sua maioria, no controlo/monitorização de processos em execução em determinado momento. No sistemas baseados em Unix, este problema não surte tantos efeitos nefastos, pois o controlo é feito de uma forma mais elaborada, obrigando o utilizador a autorizar com as suas próprias credenciais a execução de determinado processo. No caso do Windows, como é simples ignorar este pedido, o problema cresce exponencialmente, podendo-se exemplificar, com a quantidade de malware existente para este ambiente. O problema mencionado multiplica-se ainda mais, quando se fala em redes Windows, e nas várias máquinas ligadas a uma destas. Para a resolução deste problema, é necessário desenvolver um sistema que seja capaz de monitorizar, e atuar sobre os processos em execução nas máquinas de uma rede de forma remota, dando o controlo ao Administrador para ditar o que pode estar em execução em cada máquina. Concluindo, o tema escolhido para esta tese de mestrado Gestão de Recursos e Monitorização de Processos em Rede, visa a construção de uma ferramenta que consiga fazer esta gestão, trazendo melhorias em relação a software já existente e possivelmente características novas, tudo isto para que o gestor de uma rede informática assente em sistemas Windows, possa executar um trabalho complexo de forma simples e dinâmica. iii
5 ABSTRACT Today, IT systems get more and more evolved and complex; but sometimes, while you develop a part of a system, you sometimes forget about the other ones, and you leave vulnerabilities that someone can explore, leading to the destruction of the system. In modern operating systems, the problem resides, not totally, but partially, in the control/monitoring of processes executing in a given time. On Unix based systems, this problem isn't that major, due to the control done by the OS, that makes the user insert his credentials to execute a process. In Windows, as it is simple to skip this step, the problem grows exponentially, as an example, we have the massive quantity of malware that exists to bring this environment down. The problem grows even more, when we get into Windows networks, and the machines connected to one of these. To solve this problem, a system that is able to monitor and act on the executing processes of all the machines of a network remotely is needed, giving the control do the Administrator to dictate what may and may not execute in each machine. Therefore, the chosen theme for this master thesis, "Network Resources Management and Process Monitoring", searches to build a software that can manage the network, bringing up improvements to the already existent software, and possibly new characteristics; all this work is done, so that a Windows network Administrator, may do a complex job easily and dynamically. iv
7 PALAVRAS CHAVE Processos Windows Rede Ferramentas Software vi
9 KEY WORDS Processes Windows Network Tools Software viii
11 AGRADECIMENTOS Pela paciência demonstrada, e pelo apoio incondicional, agradeço aos meus Pais, pois sem eles nada disto seria possível. Aos meus amigos, pelos momentos de descontração proporcionados, quando nem tudo corria bem, e à Diana Lucena, por se dar ao trabalho de me desenhar o ícone da aplicação. A todos, o meu muito obrigado. x
13 ÍNDICE GERAL Conteúdo Índice Geral... xii Índice De Ilustrações... xv ABREVIATURAS E SIGLAS... xvi 1. Introdução Enquadramento Objetivos Estado da Arte Mecanismos de segurança Arquitetura P2P Arquitetura Cliente-Servidor Técnicas de Cifragem AES Merkle-Helmann Sockets de Rede Vista Geral Tipos de Socket Estados de Socket e o modelo Cliente-Servidor Linguagens de Programação Visual Studio Software existente no mercado Aplicação Quimera Tecnologias e ferramentas escolhidas Explicação da cifragem utilizada, no contexto do programa AES Merkle-Hellman xii
14 ÍNDICE GERAL 3.3 Diagrama de Caso de uso Aspeto geral e funcionamento do programa servidor Aspeto geral e funcionamento da aplicação móvel Explicação a nível funcional Programa Cliente Programa Servidor Aplicação a um caso real e apresentação de resultados Explicação da experiência Análise de resultados da Parte 1. Elaboração da lista de conformidade Análise de resultados da Parte Conclusão da experiência Conclusão e trabalho futuro Análise crítica Trabalho futuro Referências xiii
16 ÍNDICE DE ILUSTRAÇÕES Ilustração 1 - passo SubBytes (McCaffrey,2002)... 9 Ilustração 2 - Passo TrocaLinhas (McCaffrey,2002) Ilustração 3 - Passo MisturaColunas (McCaffrey,2002) Ilustração 4 - Tipos de projetos Windows Phone Ilustração 5 - Aspeto geral do programa Ilustração 6 - Escolha de password no cliente Ilustração 7 - Aspeto geral do programa Ilustração 8 - Introdução do endereço IP da máquina remota Ilustração 9 - Apresentação do ecrã principal, com uma máquina inserida Ilustração 10 - Remote task manager Ilustração 11 - Terminal remoto Ilustração 12 - Iniciação do progrma Ilustração 13 - Encerramento do programa Ilustração 14 - Enviar Texto Ilustração 15 - Receber texto Ilustração 16 - Diagrama de caso de uso Ilustração 17 - Diagrama caso de uso Ilustração 18 - Janela Log in Ilustração 19 - Janela Principal Ilustração 20 - Janela Processos em Execução Ilustração 21 - Janela Processos Não Autorizados Ilustração 22 - Aspeto aplicação móvel Ilustração 23 - Janela Processos em Execução Ilustração 24 - Funcionamento Programa Cliente Ilustração 25 - Pedido de execução de processo Ilustração 26 - Pedido de processos Ilustração 27 - funcionamento aplicação móvel Ilustração 28 - Pedido de processos xv
17 ABREVIATURAS E SIGLAS AES Advanced Encryption Standard API Application Programming Interface CSS Cascading Style Sheets IP Internet Protocol P2P Peer-to-Peer SCTP Stream Control Transmission Protocol SDK Software Development Kit TCP Transmission Control Protocol UDP User Datagram Protocol VB Visual Basic VNC Virtual Networking Computing WPF Windows Presentation Foundation xvi
18 1. Introdução 1.1 Enquadramento Nos dias que correm, com as constantes mudanças no mundo da informática, algo considerado seguro e impenetrável pode tornar-se obsoleto de um dia para o outro. Isto pode acontecer, por exemplo, com medidas de segurança embutidas em sistemas operativos. Nas versões modernas destes, talvez devido à sua complexidade, um dos maiores problemas detectado, é a execução de software malicioso, que apesar de ter necessidade de elevação (autorização de nível administrador), para poder efetuar as modificações para o qual foi desenhado, os utilizadores garantem-na. Por vezes por desconhecimento, outras vezes por este se fazer passar por algo conhecido, ou mesmo por falta de tempo para ler informação sobre o que está a autorizar, o utilizador garante ao malware, tudo o que este necessita para danificar o sistema. Nos sistemas baseados em Unix, como Linux e Mac OSX, existe uma medida de segurança, na qual os próprios utilizadores são obrigados a ler, e a dar autorização ao processo, sob a forma de autenticação, para este correr. Este método é mais seguro, que aquele utilizado em máquinas Windows, onde o utilizador apenas necessita de responder à pergunta sobre a execução de um processo que requer elevação, com um simples "Sim" ou "Não". É sobre este último sistema que esta tese se vai debruçar, pois sendo o Windows, o Sistema Operativo moderno que mais falhas de segurança apresenta, pode-se dar como exemplo a quantidade massiva de vírus existente para este, torna-se interessante contribuir com uma ferramenta que possa de alguma forma ajudar a colmatar esta falha. Posto isto, este trabalho enquadra-se no âmbito da segurança em sistemas informáticos, de uma forma geral, e na segurança em redes informáticas Windows no particular. 1
19 1.2 Objetivos Tendo enquadrado o projeto na área da segurança de sistemas informáticos, torna-se fundamental identificar os objetivos desta tese, e de que forma será concluída. O objetivo principal, será produzir uma ferramenta que seja capaz de monitorizar/atuar sobre os processos em execução nas várias máquinas de uma qualquer rede Windows. Ou seja, tornar possível ao Administrador duma qualquer rede, filtrar os processos em execução em máquinas remotas e dar autorização, ou não, a certos processos para serem executados. O Administrador não será responsável por filtrar todos os processos existentes em todas as máquinas, pois o software irá trabalhar tendo em conta uma lista de conformidade. Esta lista contém todos os processos autorizados a executar em determinado computador, sendo que esta é fornecida pelos responsáveis da empresa que implementa o software. O papel do administrador será, portanto, o de interagir com a lista das várias máquinas e possivelmente efetuar alterações. Outro dos objetivos será também fazer um estudo do estado da arte, de forma a poder identificar ferramentas existentes no panorama atual que possam de alguma forma contribuir para a resolução do problema, e também para demonstrar que este tema é válido para tese de Mestrado, através da mostra de aplicações de software já existentes, que de alguma forma, poderão competir com a aplicação a desenvolver. O documento será organizado em capítulos, sendo que no primeiro capítulo será feita uma abordagem introdutória, onde se encontra um enquadramento do projeto na área da informática, e se apresentam os objetivos da tese de mestrado. No segundo capítulo, fala-se sobre o estado da Arte, começando pelas várias técnicas utilizadas na área da segurança em informática, passando pelas arquiteturas que poderiam ser usadas para o desenvolvimento da aplicação e concluindo com as diferentes aplicações já existentes no mercado, que poderão de alguma forma estar relacionadas com a aplicação a desenvolver. No terceiro capítulo é feita a introdução à aplicação, falando-se das técnicas utilizadas, bem como demonstrando o funcionamento desta com esquemas e explicação de algoritmos utilizados. No quarto capítulo, falar-se-á da aplicação do projeto a uma situação real, e aos resultados obtidos. No quinto e último capítulo, está presente a conclusão, acompanhada de uma análise crítica e uma projeção de trabalho futuro que poderá ser feito para enriquecer a aplicação ainda mais. 2
20 2. Estado da Arte Após uma abordagem inicial ao tema, apresentar-se-ão de seguida um estudo comparativo de algumas tecnologias que estão intimamente relacionadas com o tema, bem como algum software presente no mercado, que poderia de alguma forma, substituir a aplicação a desenvolver em alguns aspetos. 2.1 Mecanismos de segurança Autenticação de utilizadores (Rouse,2005) - As funções de autenticação estabelecem a identidade de utilizador e/ou de sistemas, tendo em vista a determinação das ações e das capacidades permitidas. Estas funções estão na base do controlo do tipo de acesso aos recursos. Depois de validada a palavra-chave durante o login, os utilizadores podem ter tipos de acesso diferenciados aos recursos. Por exemplo, alguns utilizadores poderão apenas consultar certos ficheiros, imprimir para determinadas impressoras ou modificar determinados ficheiros. Outros utilizadores poderão não ter capacidade para copiar ou apagar determinados ficheiros. 3
21 Cifragem (Rouse, 2005) - Este é um processo que "modifica" os dados através de uma chave secreta, conhecida somente por partes autorizadas. O processo de modificação da mensagem denomina-se cifragem sendo a sua função transformar texto simples num criptograma. O processo de recuperação da mensagem original a partir do criptograma denomina-se decifragem. Os algoritmos de criptografia, também denominados cifras, são funções matemáticas responsáveis pela cifragem e decifragem. Existem portanto dois componentes nestes algoritmos, o da codificação e da descodificação. Firewalls (Microsoft, 2004-a) - Uma firewall é, basicamente, um equipamento computacional colocado na zona de fronteira de uma rede cujo principal objetivo é o controlo de acesso a essa rede por parte de utilizadores sediados noutras redes. Tipicamente, as firewalls são utilizadas para controlar o acesso a uma intranet, protegendo-a de acessos não autorizados oriundos da internet. No entanto, podem ser usadas para proteger uma rede de acessos a partir de qualquer outra rede. Esta serve para proteger o sistema de ataques externos, sendo ineficaz para tentativas de acesso internas. Assinatura Digital (Rouse, 2005-c) - Consiste num conjunto de dados cifrados associados a um documento. As assinaturas digitais garantem a integridade do documento, e identificam quem o envia. Não garantem, no entanto confidencialidade, pois os documentos circulam não cifrados. Isto não constitui qualquer problema, pois na maior parte dos casos, o que se pretende garantir é a autenticidade do documento, independentemente de ser público ou não. Logs (techterms.com, 2008)- Os logs são medidas básicas de segurança, pelo facto de serem simples na sua natureza. São registos gerados pelos sistemas ou aplicações com informações dos eventos ocorridos. É uma ferramenta muito útil para auditorias de acessos, para verificação do que está a ser utlizado, possíveis falhas do sistema, etc. Dependendo do sistema e do hardware, a geração de logs poderá tornar- -se lenta. A manutenção de logs detalhados é importante quando for necessário investigar uma invasão na rede, além de servir como prova contra um possível invasor detectado. 4
22 Antivírus(Microsoft, 2004-b) - Trata-se de um software que verifica a existência de vírus em computadores, pastas ou ficheiros e, ao encontrá-lo, tenta removê-lo. O modo de remoção pode ser configurado pelo utilizador. Normalmente, o antivírus tenta remover apenas o vírus e, caso não o consiga, remove também o ficheiro, depois da autorização do utilizador. Uma vez instalado, o antivírus pode ser configurado, dependendo das suas características, para ficar ativo e analisar todos os ficheiros que forem abertos. Caso apareça algum vírus, avisa imediatamente o utilizador. Como surgem diariamente novos tipos de vírus, o utilizador deve atualizar esta ferramenta sempre que possível. Políticas de Segurança - Uma política de segurança é um conjunto formal de regras que devem ser seguidas pelos utilizadores dos recursos de uma organização. Deverá, também, ser suficientemente flexível para se adaptar a alterações desta. É necessário que as regras sejam facilmente acessíveis a todos os membros da empresa, para que estes não possam negar o conhecimento destas, e possam também segui-las com facilidade. É necessário definir objetivos de segurança, como listas de conformidade por exemplo, pois sem linhas guia, qualquer um pode cometer um erro crasso a nível de segurança sem sequer saber que o está a cometer. Definir objectivamente todos os aspetos abordados, não deixar a opinião pessoal enevoar a visão objetiva do problema. Definir a posição da empresa em cada questão, ou seja, esclarecer de forma simples e objetiva qual vai ser o comportamento da empresa perante cada situação prevista. Definir circunstâncias em que é aplicada cada uma das regras, isto é, explicar como cada membro se deverá comportar perante certa situação, ou como o sistema irá reagir a cada momento, dependendo do que se está a passar naquele espaço de tempo. Definir os papéis de cada membro da organização, atribuindo comportamentos padrão que cada membro, segundo a suas características dentro da organização, tem de seguir. Especificar as consequências do não cumprimento das regras, isto engloba as consequências para os sistema, e para o membro que não as cumprir. Definir o nível de privacidade garantido aos utilizadores, atribuir um maior nível de privacidade àqueles que possuem um trabalho de maior sensibilidade. Identificar os contactos para o esclarecimento de questões, no caso de surgirem dúvidas de última hora. 2.2 Arquitetura P2P P2P (An Overview of Peer-to-Peer Computing, 2003), é um conceito tecnológico que é aplicável a vários níveis de arquiteturas de sistemas. A sua característica típica é a existência de comunicação simétrica e troca de dados entre nós; cada nó é em simultâneo, cliente e servidor. É a base para computação distribuída descentralizada. Alguns benefícios da arquitetura incluem melhoria na dimensionalidade evitando pontos centralizados; a eliminação de infraestruturas custosas, permitindo a comunicação entre nós e a partilha de 5
23 informação e recursos. Tendo referenciado as suas características mais importantes, explicarse-ão de seguida, esses termos de forma mais aprofundada. Decentralização Um dos principais objetivos desta característica é dar ênfase ao controlo de dados e recursos a cada utilizador. Num sistema completamente decentralizado, cada nó assume o mesmo papel de um qualquer outro nó. Isto torna a implementação deste modelo difícil, já que não existe um servidor central que tenha a visibilidade sobre toda a rede e possa fornecer informação sobre os dados disponíveis para partilha. Esta é a razão do porquê de muitas redes P2P serem na verdade híbridas, onde existe uma localização central, que contém a informação sobre todos os dados e recursos prontos a partilhar, mas cada nó faz o download dos ficheiros, não a partir da pasta central, mas sim dos outros nós que possuem tal informação. Dimensionalidade Um benefício imediato da decentralização é a dimensionalidade. Esta é limitada apenas pelo número de operações centralizadas que necessitam de execução, o paralelismo herdado que é demonstrado por uma aplicação, e o modelo de programação que é usado para representar o resultado da computação. O Napster atacou o problema da dimensionalidade fazendo com que os nós descarregassem os ficheiros de música diretamente dos nós que possuíam os ditos ficheiros. Consequentemente, esta rede foi capaz de crescer até mais de 6 milhões de utilizadores no pico da sua utilização. Tolerância a falhas Como o objetivo principal da arquitetura passa pela descentralização, não existe um ponto central que, em caso de falha, afete toda a rede, como no paradigma cliente-servidor. Esta é uma vantagem enorme neste tipo de rede, pois é possível recuperar devido à redundância existente dentro da rede, podendo cada nó ligar-se a um qualquer outro que possua a informação desejada (ligações Ad-Hoc). 2.3 Arquitetura Cliente-Servidor A arquitetura Cliente-Servidor (Mendes, 2002) permite, além de comunicação fluída e permanente entre as 2 aplicações, passar também toda a carga de processamento ou a maior parte desta, para o servidor, equipamento este, que possui normalmente hardware muito superior a uma simples workstation. Passando a explicar de forma mais profunda, o modelo cliente servidor, é um modelo computacional que separa clientes e servidores, sendo interligados entre si, geralmente, 6
24 através de uma rede de computadores. Cada cliente envia pedidos ao servidor e espera por uma resposta deste. Enquanto isto o servidor recebe os pedidos, pode aceitar processá-los, e retornar o resultado para os clientes que efetuaram o pedido. Apesar de ser utilizado em muitas aplicações, a arquitetura é praticamente a mesma em todas elas. Apesar desta levar a pensar que o cliente e o servidor residem em hardware distinto, estas aplicações podem residir na mesma máquina. A maior diferença entre as duas aplicações é o facto do servidor partilhar recursos com os clientes, enquanto que o cliente não partilha recursos com nenhum outro nó, só efetua pedidos ao servidor. Falando mais aprofundadamente nas características das diferentes aplicações, começar-se-á pelo cliente. As características do cliente incluem, por exemplo, iniciar pedidos ao servidor, ou seja, como esta arquitetura pressupõe comunicação entre os dois tipos de aplicação, sendo suposto este possuir a menor capacidade de processamento, o cliente apenas executa pedidos ao servidor, para que este lhe forneça dados necessários à sua execução. O cliente espera por respostas, após iniciar os pedidos, sendo que para poder continuar a sua execução necessita que o servidor lhe envie os dados pedidos. Recebe respostas estando à espera destas desde o momento que envia o pedido, esperando que o servidor processe o pedido, e lhe envie os dados. Normalmente, este tipo de aplicação, liga-se a um, ou a um número reduzido de servidores de uma só vez, devido à sua configuração de fraco impacto na máquina onde está implementada, este possui características simples que apenas permitem a ligação a um número reduzido de aplicações servidor. O usual neste tipo de aplicações é interagir diretamente com os utilizadores finais através de uma UI, pois é esta a aplicação que interage diretamente com o utilizador, embora exista exceção à regra em que se passa exatamente o contrário, sendo o servidor a interagir com o utilizador ( o software desenvolvido nesta tese, é um desses casos); por fim, utiliza recursos de rede, pois esta arquitetura pressupõe comunicação entre as duas aplicações. O servidor, ao contrário do cliente, que envia pedidos, está sempre à espera de receber pedidos de informação do cliente, para que consiga decidir o que é necessário e responder ao cliente com os dados solicitados. Caso o pedido do cliente tenha uma natureza complexa, pode comunicar com outros servidores, de forma a conseguir responder ao pedido do cliente corretamente. Por fim, fornece recursos de rede, pois a ligação do cliente é feita diretamente ao servidor. Esta arquitetura apresenta vantagens tais como, na maioria dos casos, melhorar a capacidade de manutenção de uma rede, pois os papéis e responsabilidades do sistema, ficam subdivididos e distribuídos por vários computadores conhecidos entre si. Todos os dados importantes são guardados nos servidores, que por norma, possuem uma maior segurança que uma workstation cliente, podendo assim controlar melhor o acesso a recursos, a clientes cujas credenciais permitam acesso a estes. Visto que o armazenamento de dados é centralizado, este sistema torna-se mais fácil de atualizar, ao contrário do paradigma P2P (Peer-to-Peer), que pressupõe a atualização de cada nó da rede, o que leva a grande consumo de tempo, e a um aumento na probabilidade de ocorrência de erros. Por último, funciona com clientes de várias capacidades, pois o poder de processamento tem de estar alocado no servidor. 7
25 Como foi visto nas características do servidor, este recebe comunicações do cliente, no caso destas excederem o limite para o qual o servidor está preparado, o programa poderá deixar de responder. Há uma clara falta de robustez, pois no caso de falhar o servidor, não existe mais ninguém que consiga processar os pedidos dos clientes, ao contrário das redes P2P, em que caso falhe um dos nós os outros conseguem processar os vários pedidos, ou seja, existe redundância, o que neste caso, não existe. 2.4 Técnicas de Cifragem Sendo este um dos pontos fulcrais na segurança informática, procedeu-se à identificação e consequente descrição de algumas técnicas de cifragem utilizadas nos dias de hoje. A cifragem, é a capacidade de transformar algo legível em algo que não é reconhecível com o uso de uma cifra específica AES Em criptografia, o AES (McCaffrey,2002), é uma cifra de bloco adotada pelos EUA. Esperase que a sua adopção seja geral e analisada extensivamente, de forma a poder descobrir se se trata de algo impenetrável. Descrição da cifra Esta cifra é baseada num princípio conhecido como rede de permutação-substituição, e é rápido, quer em software, quer em hardware. O AES tem um tamanho de bloco fixo de 128 bits, e uma chave que varia entre os 128, 192 e 256 bits. Esta cifra opera numa matriz de 4x4 bytes, apelidada de estado. O tamanho da chave é importante, pois especifica o número de ciclos de repetição das rondas de transformação que convertem os dados de entrada, apelidado de texto simples, nos dados de saída, denominados de texto cifrado. O número de ciclos de repetição são os seguintes: dez ciclos de repetição para a chave de 128 bits; doze ciclos de repetição para chaves de 192 bits; catorze ciclos de repetição para chaves de 256 bits. Cada ronda consiste em vários passos de processamento, incluindo um que depende da própria chave de cifragem. Um conjunto de rondas invertidas, são utilizadas, de forma a transformar texto cifrado em texto simples utilizando a mesma chave de cifragem. 8
26 Descrição de alto nível do algoritmo Os passos para cifrar algo, utilizando esta técnica, encontram-se enunciados abaixo. 1 - ExpansãoChave - são geradas "round keys" derivadas da chave de cifragem, utilizando o algoritmo de escalonamento de chaves de Rjandael's; 2 - Ronda inicial 1 - AdicionaChave - Cada byte do estado é combinado com a roundkey utilizando uma operação XOR; 3 - Rondas SubBytes - um passo de substituição não-linear onde cada byte é substituído por outro de acordo com uma tabela; TrocaLinhas - um passo de transposição, onde cada linha do estado é mudada de sítio ciclicamente um certo número de passos; MisturaColunas - uma operação de mistura que opera nas colunas do estado, combinando os 4 bytes em cada coluna; Adiciona Chave 4 - Ronda final (sem MisturaColunas) SubBytes; TrocaLinhas; AdicionaChave; O passo de SubBytes Neste passo cada byte da matriz de estado é substituído com um SubByte utilizando uma caixa de substituição de 8-bit, também conhecida como caixa-s de Rijndael. Esta operação fornece não linearidade à cifra. Ilustração 1 - passo SubBytes (McCaffrey,2002) 9
27 O passo TrocaLinhas Este passo opera sobre as linhas do estado; ele muda ciclicamente os bytes de cada linha um certo número posições. No AES, a primeira linha é deixada inalterada. Cada byte da segunda linha, é mudado uma posição para a esquerda, da mesma forma os bytes da terceira e quarta linha são mudados duas e três posições para a esquerda, respetivamente, Para tamanhos de blocos de 128 e 192 bits, o padrão de mudança é o mesmo. A linha n é mudada para a esquerda n-1 bytes. Desta forma, cada coluna do estado de saída passo ShiftRows é composto de bytes de cada coluna do estado de estrada. Para cada bloco de 256 bit, a primeira fila fica inalterada, e a mudança para a segunda, terceira e quarta fila é de 1 byte, 3 bytes e 4 bytes respetivamente - esta mudança aplica-se apenas para a cifra de Rijndael quando se usa um bloco de 256 bit, já que a AES não usa blocos deste tamanho. O passo MisturaColunas Ilustração 2 - Passo TrocaLinhas (McCaffrey,2002) Neste passo, os quatro bytes de cada coluna do estado, são combinados utilizando uma transformação linear invertível. A função MixColumns, pega em quatro bytes de entrada, e tranforma-os em 4 bytes de saída, onde cada byte afecta cada um dos 4 bytes de saída. Juntamente com o ShiftRows, este passo fornece difusão à cifra. Ilustração 3 - Passo MisturaColunas (McCaffrey,2002) 10
28 O passo AdicionaChave Neste passo, a subchave é combinada com o estado. Para cada ronda, a subchave é derivada da chave principal; cada subchave é do mesmo tamanho do estado. A subchave é somada combinando cada byte do estado com o byte correspondente da subchave utilizando uma operação XOR bit a bit Merkle-Helmann Esta cifra é um cripto sistema de chave assimétrica (Agarwal, Ashish. 2011), significando que para a comunicação, são necessárias duas chaves: uma chave privada, e uma chave pública. Este sistema é baseado no problema da soma dos subconjuntos. O problema é o seguinte: dado um conjunto de números A e um número b, encontrar um subconjunto de A, cuja soma entre os seus elementos seja b. No geral, este problema é conhecido como sendo NP completo. Contudo, se o conjunto de números for super crescente - isto é, cada elemento do conjunto é maior que a soma dos anteriores - o problema é fácil e solúvel em tempo polinomial com um simples algoritmo "greedy". Geração da chave Na cifra de Merkle-Hellman, as chaves são "mochilas" (do problema complexo da mochila). A chave pública é uma "mochila" hard, e a chave privada é uma "mochila" 'easy', ou supercrescente, combinado com dois números adicionais, um multiplicador e um módulo, que são usados para converter a mochila supercrescente, na mochila "hard". Estes mesmos números são usados para transformar a soma do subconjunto da mochila hard, na soma do subconjunto da mochila 'easy', que é solúvel em tempo polinomial. Cifragem A ideia por trás da cifragem Merkle-Hellman (Agarwal, Ashish. 2011), é criar um subconjunto que possa ser resolvido facilmente e esconder a natureza supercrescente, utilizando multiplicação modular e permutações. O array transformado forma uma mensagem cifrada e o vetor original supercrescente, forma a chave privada e é utilizada para decifrar a mensagem. 11
29 Decifragem A decifragem (Princeton, 2007) é possível devido ao multiplicador e módulo utilizados para transformar a mochila 'easy' supercrescente, na chave pública, também podem ser usados para transformar o número representando o texto cifrado na soma dos elementos correspondentes da mochila supercrescente. Depois, utilizando um simples algoritmo 'greedy', este pode ser resolvido utilizando operações aritméticas de ordem n, que decifram a mensagem. Exemplo: Primeiro cria-se uma sequencia supercrescente, por exemplo: w = {2, 7, 11, 21, 42, 89, 180, 354} Esta é a base para a chave privada. Daqui calcula-se o somatório: Em seguida, escolhe-se um número q, maior que a soma, por exemplo q = 881. Escolhe-se também um número r, que seja primo entre si com q (um número diz primo entre si com outro numero se o único divisor comum entre os dois for 1), e se encontre entre [1,q[, por exemplo r=588. A chave privada consiste em q, w e r. Para calcular a chave pública, gera-se a sequencia B, multiplicando cada elemento em w, por r mod q, obtendo-se o seguinte: B = {295, 592, 301, 14, 28, 353, 120, 236} A sequencia B, é a chave pública. Digamos que se pretende cifrar a letra 'a'. Primeiro é necessário converter essa letra para binário: a =
30 Em seguida, multiplica-se cada bit correspondendo cada um deles com o numero do conjunto B respetivo, e somando os vários produtos: a = * * * * * * * * 236 = 1129 Este número, 1129, é o resultado da cifragem de 'a'. para decifrar, mutiplica-se 1129 pelo inverso do módulo utilizado para obter a chave pública, ou seja 1129 * r -1 mod q * 442 mod 881 = 372 Agora, decompõe-se 372 selecionando o maior número em w que é menor ou igual a 372. Selecionando posteriormente o elemento maior, menor ou igual ao resultado, até que a diferença seja 0: = = = 0 Os elementos que foram utilizados da chave privada, correspondem aos bits com valor 1 na mensagem: Quando traduzido para binário, este 'a' será a mensagem final decifrada. 13
31 2.5 Sockets de Rede Um socket de rede (Princeton, 2009) é a paragem final de um fluxo de processos de comunicação que atravessa uma rede de computadores. Hoje em dia, a maior parte da das comunicações feitas entre computadores, tem como base o IP; daí a maioria dos sockets serem sockets de internet. Um endereço de socket, é portanto, a combinação de um endereço IP, e um número de porto, tal como uma ligação telefónica é a combinação de um número, com o código da área onde se encontra o número. Baseado neste endereço, os sockets entregam a informação, ao processo ou thread da aplicação apropriada Vista Geral Um socket de internet, é composto por uma combinação única de um endereço IP e um porto; endereço remoto de socket, apenas para sockets TCP estabelecidos. Tal como será mostrado abaixo na parte de cliente servidor, muitos servidores TCP servem múltiplos clientes de forma concorrente, o que leva à necessidade do servidor criar um socket para cada cliente, e estes partilharem o mesmo endereço local. O protocolo de transporte é também um fator a ter em conta, podendo ser TCP, UDP, ou até mesmo IP. A porta TCP 53 é diferente da Porta UDP 53, daí a serem sockets completamente diferentes. Dentro do sistema operativo e da aplicação que criou o socket, este é referenciado por um identificador único constituído por um inteiro, apelidado de identificador de socket ou número de socket Tipos de Socket Existem vários tipos de sockets, sendo a diferença entre estes, o protocolo utilizado. Existem portanto sockets Datagram, também conhecidos por sockets "sem ligação", que utilizam o protocolo UDP; os sockets de tipo stream, também conhecidos por sockets orientados à ligação, que utilizam o protocolo TCP ou o SCTP; por fim existem os sockets Raw, tipicamente disponíveis em router e outros equipamentos de rede. Aqui salta-se a camada de transporte, e os cabeçalhos dos pacotes são disponibilizados à aplicação. 14
32 2.5.3 Estados de Socket e o modelo Cliente-Servidor Processos que fornecem serviços aplicacionais são chamados de servidores, e criam sockets ao iniciar que estão num estado de escuta. Estes sockets estão à espera da iniciativa dos programas clientes. Um servidor TCP (Figueira, 2010), pode servir vários clientes de forma concorrente, criando um processo filho para cada cliente e estabelecendo uma ligação TCP entre o cliente e o processo filho. Sockets únicos e dedicados, são criados para cada ligação. Estes encontram-se em estado estabelecido, quanto uma ligação ou circuito virtual, é estabelecido com o socket remoto, fornecendo um stream de bytes duplex (comunicação nos dois sentidos, um terminal de cada vez). Um servidor pode criar vários sockets concorrentes com o mesmo numero de porto e endereço IP local, cada um mapeado para o seu próprio processo filho, servindo o seu próprio terminal. Estes são tratados pelo sistema operativo como sockets diferentes, pois o endereço remoto de cada um é diferente (endereço cliente ou porto). Um socket UDP (Figueira, 2010), não pode estar num estado estabelecido, pois o UDP não estabelece ligações. Logo o netstat, não mostra o estado de um socket UDP. Um socket UDP, não cria processos filhos para cada nova ligação, este responde aos vários pedidos de forma sequencial através do mesmo socket. Isto implica que os sockets UDP não são identificados pelo endereço remoto, mas apenas pelo endereço local, embora cada mensagem tenha um endereço remoto associado. 2.6 Linguagens de Programação Entre uma infinidade de linguagens de programação que poderiam ser tidas em conta para este projeto, faria sentido que se escolhesse algo que funcionasse bem em conjunto com os API do Windows. Sendo que foi escolhida a plataforma.net da Microsoft por esta razão, poder-se-ia escolher entre C++, C# (Microsoft, 2002) e Visual Basic. Pela simplicidade da sua programação, e por permitir um desenvolvimento rápido de aplicações robustas, a escolha recaiu sobre a segunda. Passando a explicar um pouco as origens desta linguagem, como já foi referenciado, esta linguagem está incluída num grupo de linguagens utilizadas na plataforma.net da Microsoft, sendo que esta foi criada pela própria empresa, para concorrer com outras soluções, criadas por outros. Assim a Microsoft ficaria com uma solução caseira para a criação rápida de aplicações. Criada tendo por base o C++, a sua sintaxe recebe influências de outras, tais como o Java e o Object Pascal. Entre as suas características, sobressaem as operações aritméticas típicas (adição, subtracção, etc), o uso de ponteiros, embora não aconselhado, pois os blocos de código que os usam 15
33 necessitam muitas vezes de permissões de segurança muito altas para serem executados. Suporta também coletores de lixo, sendo a função destes recuperar blocos de memória que já não estão a ser utilizados pelo programa, de forma a impedir paragens na execução dos programas devido à falta de recursos. Falando de bibliotecas, esta linguagem, ao contrário de outras muito utilizadas, não inclui qualquer conjunto de implementação de classes ou funções de execução; isto é, o código é organizado em conjuntos de "namespaces" (do Português, espaços de nome), que agrupam as classes com funções semelhantes. Por exemplo, System.Console, é utilizado para entrada/saída de dados. Existe contudo um sistema de referências, em que se podem incluir nomes de espaço através da chamada de ficheiros.dll (dynamic link library). A política de gestão desta linguagem, ao contrário de outras linguagens proprietárias da Microsoft, tal como o Visual Basic, inclui a submissão do C# a um processo de normalização. No entanto é a empresa que continua a ser a maior força por trás da inovação da linguagem. Além disso, a Microsoft fez questão de frisar a importância do C#, na sua estratégia de software. 2.7 Visual Studio De todos os IDE (integrated development environment, ambiente de desenvolvimento integrado) existentes no mercado, foi escolhido o Visual Studio da Microsoft, pois seria o único a permitir o desenvolvimento de forma simples e dinâmica na linguagem escolhida, o C#. Este IDE inclui um editor de código, que além de suportar IntelliSense, suporta também code refactoring, ou refactoração de código. O debugger incluído, suporta tanto código fonte das aplicações como código máquina. Outra ferramenta incluída, e bastante utilizada no desenvolvimento da aplicação informática presente nesta tese, é o designer gráfico de janelas, utilizado primariamente para dar uma interface visual ao utilizador, de forma a este poder interagir com o programa de forma simples. Esta ferramenta suporta muitas linguagens de programação além da escolhida, através de serviços de linguagem, que permitem ao editor de código e ao debugger suportar praticamente qualquer linguagem, desde que exista um serviço específico à linguagem escolhida. Nas linguagens incluídas na ferramenta, figuram o C/C++ (através do Visual C++), o VB.NET, C# e F#, este último só apareceu a partir da versão 2010 do Visual Studio. Existe suporte a linguagens como Ruby e Python, através da instalação de pacotes de linguagem. Suporta também XML/XSLT, HTML/XHTML, JavaScript e CSS. Como esta ferramenta possui imensas características, vão ser explicadas algo por alto, as que foram necessárias ao desenvolvimento da aplicação, começando pelos designers de janelas. Existem vários tipos de designer, como o Windows Forms designer, o WPF designer, Web 16
34 Designer, etc. Aquele que foi utilizado para o desenvolvimento desta aplicação foi o designer WPF. Este designer, nome de código Cider, foi introduzido pela primeira vez na versão 2008 do Visual Studio. É utilizado para editar interfaces gráficos de aplicações, gerando código XAML no processo de edição, para cada elemento novo colocado na interface, através do paradigma "drag and drop", introduzido no Windows Forms aquando da sua criação. Este paradigma permite ao utilizador, selecionar de uma caixa de ferramentas os elementos que pretende colocar na janela da aplicação, tais como, botões, listas, checkboxes, etc. Ao clicar duas vezes em cima deste elemento, uma classe é automaticamente criada pelo editor de código, permitindo facilmente identificar o local onde as alterações ao código terão de ser feitas, de forma àquele elemento efetuar alguma ação quando se interage com ele, como por exemplo, clicar num botão. Outra característica muito importante, além do editor de código e debugger já referenciado no início deste subcapítulo, é o explorador da solução, pois é o que permite navegar entre os vários ficheiros.cs, que possuem o código editado no editor de código, sem esta funcionalidade, ter-se-ia de ter tantas instancias do Visual Studio abertas, quantas classes isoladas existissem (ficheiros.cs). Por fim, e não menos importante, a característica que permitiu o desenvolvimento da aplicação móvel, o SDK Windows Phone 7. Esta ferramenta, é um pacote adicional, que é instalado após a instalação do Visual Studio. Este permite, tal como o próprio nome indica, utilizar o Visual Studio como ferramenta de desenvolvimento de aplicações móveis para Windows Phone. Este possibilita o desenvolvimento de diversas aplicações para este sistema operativo móvel, como pode ser vislumbrado na Ilustração 4, abaixo. Ilustração 4 - Tipos de projetos Windows Phone 17
35 Entre estes projetos, destaca-se o Windows Phone Silverlight, que permite, entre outras coisas, a utilização de Sockets na aplicação móvel, para a comunicação entre as várias aplicações presentes no projeto desenvolvido nesta tese. 2.8 Software existente no mercado Existe uma miríade de programas que se propõem a resolver este problema da gestão de recursos remota. Uns mais completos que outros, uns mais caros que outros (alguns como freeware), todos resolvem o problema à sua maneira. Começar-se-á pelos programas com custo fixo, neste caso o Remote Task Manager (DeviceLock, 2003). Este permite, por exemplo, monitorizar tarefas e serviços que se encontram a correr em máquinas remotas, saber as características dos processos, terminar corretamente tarefas, modificar prioridades de processos, arquivar logs de eventos, e oferece a possibilidade de monitorizar os processos à distância. Pela Ilustração 5 em baixo, pode-se ver que é possível criar logs sombra, ou seja, monitorizar o sistema com o registo de eventos de forma a que o utilizador não se aperceba, verificar processos em execução, etc. Contudo, o ambiente apresentado, é algo confuso, o que pode levar o utilizador a não se sentir tão atraído por este software, quando existem programas que oferecem uma apresentação mais cuidada tornando mais simples a sua utilização. 18 Ilustração 5 - Aspeto geral do programa
36 O segundo programa chama-se Remote utilities(usoris systems, 2009), este programa possui características mais complexas, permitindo desligar/reiniciar computadores remotos, efetuar a gestão de inventários, realizar instalação remota, execução remota de programas, monitorização remota de processos, linha de comandos remota. Possui também a característica de Remote Desktop, ou seja ver o ambiente de trabalho do computador remoto em questão. Para utilizar o programa, primeiramente, procede-se à instalação do cliente nas máquinas remotas, configurando-se para tal, uma palavra passe, de forma a atribuir um nível de segurança à comunicação entre estas e o servidor, tal pode ser vislumbrado na Ilustração 6 abaixo. Ilustração 6 - Escolha de password no cliente Após isto, é necessário proceder ao adicionamento dos clientes ao programa servidor, clicando no botão "add computer", para adicionar uma nova máquina, botão esse que pode ser identificado, no canto superior esquerdo da imagem 7 em baixo. Ilustração 7 - Aspeto geral do programa 19
37 Após clicar no botão, é necessário introduzir o endereço da máquina que se pretende adicionar, no campo IP Address, como se pode ver na Ilustração 8. Ilustração 8 - Introdução do endereço IP da máquina remota. No final, o nome da máquina irá aparecer em baixo da barra de ferramentas (Ilustração 9), e poderá fazer uma ligação a esta, para controlar o desktop remoto, ou então, controlar os processos remotamente (Ilustração 10), ou ainda abrir o terminal remoto (Ilustração 11), entre outras. Ilustração 9 - Apresentação do ecrã principal, com uma máquina inserida 20
38 Ilustração 10 - Remote task manager Ilustração 11 - Terminal remoto Como se pode ver pelas Ilustrações apresentadas, é possível ver e executar processos, e também pará-los; também é possível modificar o tempo até à próxima atualização dos processos em execução, já que a recepção desta informação é feita quando se clica no botão e vai sendo atualizada conforme o tempo que esta estiver aberta, ou seja, neste caso está selecionado o valor de 20 segundos, se esta janela se fechar em menos de 20 segundos, esta nunca será atualizada. 21
: a) Conceito b) Equipamentos c) Aplicações Criptografia, Redes de Computadores e Internet Recordar: TI; Hardware; Software; Redes de computadores; Computadores e redes de computadores ligados (Internet).
MERC. Aplicações e Implementações de Algoritmos Criptográficos. Relatório Pormenorizado. Grupo 1 : Bernardo Simões 63503 Guilherme Vale 64029
MERC Aplicações e Implementações de Algoritmos Criptográficos Relatório Pormenorizado Grupo 1 : Bernardo Simões 63503 Guilherme Vale 64029 Introdução No projecto de AISS foi nos pedido para desenvolver