You are on page 1of 78

FACULDADE DE TECNOLOGIA DE CARAPICUBA

ANTONIO CARLOS DE OLIVEIRA EVERTON CHAGAS WAGNER GUTIERREZ

SEGURANA EM APLICAES WEB: IMPLEMENTAO DO ALGORITMO BLOWFISH NA AUTENTICAO DE USURIOS EM AMBIENTE PHP COM SGBDR MYSQL

TRABALHO DE GRADUAO

Carapicuba, 2013

ANTONIO CARLOS DE OLIVEIRA EVERTON CHAGAS WAGNER GUTIERREZ

SEGURANA EM APLICAES WEB: IMPLEMENTAO DO ALGORITMO BLOWFISH NA AUTENTICAO DE USURIOS EM AMBIENTE PHP COM SGBDR MYSQL

Trabalho apresentado como exigncia para obteno do Ttulo de Tecnlogo em Segurana da Informao da Faculdade de Tecnologia de Carapicuba.

Orientador: Prof. Luciano Deluqui Vasques

Carapicuba, 2013

ANTONIO CARLOS DE OLIVEIRA EVERTON CHAGAS WAGNER GUTIERREZ

SEGURANA EM APLICAES WEB IMPLEMENTAO DO ALGORITMO BLOWFISH NA AUTENTICAO DE USURIOS EM AMBIENTE PHP COM SGBDR MYSQL

Essa pesquisa foi julgada e aprovada para obteno do Ttulo de Tecnlogo em Anlise de Sistemas e Tecnologia da Informao, da Faculdade de Tecnologia de Carapicuba.

Carapicuba, 11 de dezembro de 2013.

Prof. Dr. Walter Alosio Santana Diretor da Fatec - Carapicuba

Banca examinadora ______________________________ Prof. Luciano Deluqui Vasques

______________________________ Prof. Patrcia Lima Rocha

______________________________ Prof. Renato Fava Martelli

Dedicamos esse trabalho primeiramente a Deus Todo Poderoso, a todos nossos familiares (pais, irmos e esposas), amigos e professores que nos instruram e apoiaram para chegarmos at aqui, principalmente ao prof. Deluqui que nos deu uma direo em meio s dificuldades encontradas.

Uma pessoa inteligente resolve um problema, um sbio o previne. Albert Einstein

RESUMO

Devido ao avano da tecnologia, houve um ganho significativo no desempenho dos componentes computacionais, tais como processador e memria RAM. Esse fato facilitou a execuo de aes danosas realizadas por malfeitores, como por exemplo, no processo de decifrar informaes sigilosas criptografadas. Pois, com um computador pessoal (Desktop) atual e utilizando tcnicas especializadas, estes podem conseguir descobrir senhas criptografadas por algoritmos hashes renomados, que trafegam pela rede ou que ficam armazenadas em bancos de dados. Neste contexto, o objetivo principal deste trabalho a implementao do framework Yii para criao de uma aplicao web, juntamente como algoritmo de criptografia Blowfish, que proporcionar uma maior segurana contra invaso em sistemas de aplicaes web que utilizam bancos de dados para armazenamento de senhas de seus respectivos usurios. Com isso pretende-se trocar os algoritmos nativos utilizados no MySQL (que de acordo com diversas pesquisas so vulnerveis) por um algoritmo mais robusto, alterando-se poucas linhas de cdigo.

Palavras-chave: Framework. Criptografia. Segurana em aplicaes web.

ABSTRACT

Due to advancement in technology, there was a significant gain in performance computer components such as CPU and RAM. This fact facilitated the execution of harmful actions carried out by malefactors, for example, in the process to decipher encrypted sensitive information. Because, with a current personal computer (Desktop) and using specialized techniques, they can get find out passwords encrypted with renowned hashes algorithms, that travels over the network or that are stored in databases. In this context, the main objective is the implementation of the Yii framework for creating a web application, along with the Blowfish encryption algorithm, which will provide greater security against intrusion in systems of the web applications that use the database to store users and passwords. Thus it is intended to replace the native algorithms used in the MySQL (Wich according to several researches are vulnerable) for a more robust algorithm, by changing a few lines of code.

Keywords: Framework. Encryption. Web application security.

LISTA DE FIGURAS Figura 1Cifrando um texto .......................................................................................................... 18 Figura 2Algoritmo de Hash ......................................................................................................... 21 Figura 3Funo Crypt Exemplo de entrada .............................................................................. 25 Figura 4Funo Crypt Exemplo de sada ................................................................................. 25 Figura 5Banco de dados Modelo de abstrao de dados .......................................................... 33 Figura 6Banco de dados Modelo de abstrao de dados mais detalhado ................................. 33 Figura 7Simbologia - Banco de dados Modelo de abstrao de dados .................................... 34 Figura 8Modelo relacional........................................................................................................... 35 Figura 9Modelo de entidade/relacionamento .............................................................................. 35 Figura 10Modelo de dados baseado em objetos .......................................................................... 36 Figura 11Modelo de dados semi-estruturado .............................................................................. 36 Figura 12Modelo ORM ............................................................................................................... 40 Figura 13Estrutura comum dos frameworks ............................................................................... 42 Figura 14Comparao entre frameworks Socialcompare ......................................................... 44 Figura15Yii Framework .............................................................................................................. 46 Figura 16Base do Yii ................................................................................................................... 47 Figura 17Estrutura MVC ............................................................................................................. 51 Figura 18Instalao Yii framework ............................................................................................. 55 Figura 19Configurao Yii Editando arquivo .bat do Yii ........................................................ 56 Figura 20Criando uma aplicao web ......................................................................................... 56 Figura 21Testando a aplicao web............................................................................................. 57 Figura 22Aplicao web Criando banco de dados ................................................................... 58 Figura 23Configurao Yii Acessando o shell do Yii .............................................................. 60 Figura 24Configurao Yii Criando o Model de uma tabela ................................................... 60 Figura 25Configurao Yii Criando o CRUD de uma tabela ................................................... 60 Figura 26Senha no criptografada ............................................................................................... 66 Figura 27Senha cifrada com o algoritmo SHA1 ......................................................................... 66 Figura 28Senha cifrada com o algoritmo MD5 ........................................................................... 66 Figura 29Senha cifrada com o algoritmo Blowfish ..................................................................... 66 Figura 30Decifrao do hash MD5 com o MD5MyAddr ........................................................... 67 Figura 31Decifrao do hash SHA1 com o MD5Decrypter ....................................................... 68 Figura 32Comunicado Microsoft................................................................................................. 70 Figura 33Comunicado PHP ......................................................................................................... 71

LISTA DE TABELAS

Tabela 1 Tabela simples ............................................................................................................. 31 Tabela 2 Viso dos dados ........................................................................................................... 32 Tabela 3 Ligao entre tabelas 1 ................................................................................................ 37 Tabela 4 Ligao entre tabelas 2 ................................................................................................ 38 Tabela 5 Ligao entre tabelas 3 ................................................................................................ 38 Tabela 6 Comparao entre frameworks .................................................................................... 45

LISTA DE ABREVIATURAS, SIGLAS E SMBOLOS

Abreviaturas CMD - Command Ex. = exemplo MB = Megabyte GB = Gigabyte GHz = Giga hertz TB = Terabyte p. = pgina Siglas ABNT - Associao Brasileira de Normas Tcnicas AES - Advanced Encryption Standard API - Interface de Programao de Aplicativos AR - Active Record ASTI - Anlise de Sistemas e Tecnologia da Informao CERT.br - Centro de Estudos, Resposta e Tratamento de Incidentes de Segurana no Brasil CMS - Content Management System CPU - Central Processing Unit CRUD - Create-Read-Update-Delete CSS - Cascading Style Sheets DAO - Data Access Objects DB - Data Base DES - Data Encryption Standard DRY - Dont Repeat Yourself ER - Entidade Relacionamento FATEC - Faculdade de Tecnologia FK - Foreign Key FTP - File Transfer Protocol GPL - General Public Licence HTTP - Hypertext Transfer Protocol HTTPS - Hypertext Transfer Protocol Secure IBM - International Business Machines IEC - International Electrotechnical Commission IMAP - Internet Message Access Protocol ISO - International Organization for Standardization MD5 - Message-Digest algorithm 5 MVC - Model-View-Controler

NASA - National Aeronautics and Space Administration NBR - Norma Brasileira OO - Orientao Objetos ORM - Object-Relational Mapping PC - Personal Computer PDF - Portable Document Format PDO - PHP Data Object PHP - Hypertext Preprocessor PK - Primary Key POO - Programao Orientada a Objetos POP3 - Post Office Protocol RAM - Random Access Memory RBAC - role-based access control SGBD - Sistema de Gerenciamento de Banco de Dados SGBDR - Sistema de Gerenciamento de Banco de Dados Relacionais SHA Secure Hash Algorithm SI - Segurana da Informao SMTP - Simple Mail TransferProtocol SO - Sistema Operacional SOAP - Simple Object Access Protocol SQL - Structured Query Language SSH - Secure Shell SSL - Secure Socket Layer TI - Tecnologia da Informao UDP User Datagram Protocol UI - User Interface WAMP - Acrnimo para a combinao: Windows, Apache, MySQL e PHP WEB - Termo utilizado para referenciar o WWW WWW - World Wide Web XML - Extensible Markup Language XOR - OR Exclusive (Programao) YII - Acrnimo de yes, representa os adjetivos fcil, eficiente e extensvel

Smbolos - Marca Registrada 1:1 = Um pra um 1:N = Um pra vrios N:1 = Vrios para um N:N = Vrios para vrios

SUMRIO 1 INTRODUO .......................................................................................................................... 14 1.1. OBJETIVO GERAL ........................................................................................................... 14 1.2. OBJETIVO ESPECFICO.................................................................................................. 15 1.3. JUSTIFICATIVA ............................................................................................................... 15 2 SEGURANA EM APLICAES WEB ................................................................................. 16 2.1. SEGURANA DA INFORMAO ................................................................................. 16 2.1.1. Segurana na internet................................................................................................... 17 2.1.2. Explorao de vulnerabilidades ................................................................................... 17 2.1.3. Contas e senhas ............................................................................................................ 18 2.2. CRIPTOGRAFIA ............................................................................................................... 18 2.2.1. Algoritmos de Chave Simtrica................................................................................... 19 2.2.2. Algoritmos de Chave Assimtrica ............................................................................... 19 2.2.3. Funo Hash ................................................................................................................ 20 2.2.4. Funo Crypt ............................................................................................................... 23 2.3. TIPOS DE ATAQUES COMUNS ..................................................................................... 28 2.4. FERRAMENTAS E TCNICAS PARA DECIFRAR SENHAS ...................................... 30 2.5. BANCO DE DADOS ......................................................................................................... 31 2.5.1. Viso dos dados ........................................................................................................... 32 2.5.2. Abstrao dos dados .................................................................................................... 32 2.5.3. Modelo de dados .......................................................................................................... 34 2.5.4. Sistema de Gerenciamento de Banco de Dados .......................................................... 37 2.5.5. Bancos de Dados Relacionais ...................................................................................... 37 2.5.6. Sistema de Gerenciamento de Bancos de Dados Relacionais ..................................... 38 2.5.7. SGBDRs mais utilizados ............................................................................................. 39 2.5.8. Por que Escolher o MySQL? ....................................................................................... 39 2.6. FRAMEWORK DE DESENVOLVIMENTO WEB ......................................................... 39 2.6.1. ORM (Object-Relational Mapping)............................................................................. 40 2.6.2. Estrutura MVC (Model-View-Controller) .................................................................. 41 2.6.3. Estrutura RBAC (Role Base Access Control) ............................................................. 41 2.6.4. Atuais frameworks PHP no Mercado: ......................................................................... 42 2.6.5. Estrutura comum dos frameworks ............................................................................... 42 2.6.6. Por que Escolher o Framework Yii?............................................................................ 43 2.6.7. Histria do Yii ............................................................................................................. 46

2.6.8. Caractersticas do Yii .................................................................................................. 46 2.6.9. Como o Yii Funciona?................................................................................................. 48 2.6.10. Ligao do Yii com o banco de dados ....................................................................... 51 3 METODOLOGIA....................................................................................................................... 53 3.1. DESENVOLVIMENTO DE APLICAO WEB COM ACESSO A BANCOS DE DADOS ..................................................................................................................................... 53 3.2. DEFINIO DO AMBIENTE DE TESTES..................................................................... 53 3.2.1. Hardware utilizado ...................................................................................................... 54 3.2.2. Softwares utilizados..................................................................................................... 54 3.3. PR-REQUISITOS DO FRAMEWORK YII .................................................................... 54 3.4. CRIAO DA APLICAO WEB .................................................................................. 55 Instalando o framework Yii ................................................................................................... 55 3.5. TESTE ................................................................................................................................ 57 3.6. ESTRUTURA DO BANCO DE DADOS .......................................................................... 58 3.6.1. Criao do banco de dados no MySQL ....................................................................... 58 3.6.2. Criao das tabelas no MySQL ................................................................................... 59 3.7. CONFIGURANDO O YII PARA INTERAGIR COM BANCO CRIADO NO MYSQL 59 3.7.1. Gerao da estrutura MVC .......................................................................................... 60 3.7.2. Personalizar o menu da pgina principal ..................................................................... 61 3.7.3. Alterando o mtodo de autenticao ........................................................................... 62 3.7.4. Configurando a funo bCrypt .................................................................................... 62 3.7.5. Validando usurio e senha no formato Blowfish......................................................... 64 3.7.6. Testando o novo mtodo de autenticao do web site................................................. 64 3.8. LINHA DE TRABALHO................................................................................................... 65 3.8.1. VISUALIZAO DOS USURIOS E SENHAS CRIADOS ................................... 65 3.8.2. TESTANDO A SEGURANA DOS ALGORITIMOS SHA1, MD5 E BLOWFISH 67 4 DISCUSSO E RESULTADOS................................................................................................ 69 4.1. DIFICULDADES E LIMITAES ENCONTRADAS.................................................... 69 4.2. INDICADORES ANALISADOS ...................................................................................... 70 5 CONSIDERAES FINAIS ..................................................................................................... 72 TRABALHOS FUTUROS ............................................................................................................ 73 ANEXO A: LISTA DE SITES PARA DECIFRAR HASHES MD5 E SHA1 ............................. 74 REFERNCIAS ............................................................................................................................ 76

14

1 INTRODUO

Nestes ltimos tempos houve um considervel aumento no nmero de aplicaes web, desde sua utilizao para sistemas complexos como CMS, e-commerce ou at mesmo para web sites caseiros. Porm, ocorreu tambm a evoluo da tecnologia computacional. Uma velocidade maior de processamento ajudou e aumentou mais ainda as chances de um malfeitor decifrar as senhas codificadas pelos algoritmos de hash mais utilizados atualmente, tais como MD5 e SHA1. A fora de uma senha tambm conta muito para a dificuldade de decifrao da mesma, porm, as pessoas que a utilizam, normalmente criam senhas fracas, fceis para sua memorizao, o que as tornam de fcil deduo, sendo esse o principal fator para descobri-las, mesmo estando criptografadas. Neste contexto, surge ento a necessidade de escolher um algoritmo de criptografia altamente confivel para assegurar que dados confidenciais e valiosos estejam preservados contra ataques de malfeitores. Este trabalho consiste em implantar da maneira mais simples possvel o framework Yii, que incorpora o algoritmo de criptografia Blowfish, para ento criar um modelo de aplicao web que servir como base para projetos similares. Este trabalho est dividido em captulos da seguinte forma: O captulo 1, contendo introduo, objetivos gerais, objetivos especficos e a justificativa. O captulo 2 contm os conceitos bsicos sobre de segurana da informao, banco de dados, frameworks baseados nos padres MVC com destaque para criptografia e seus principais algoritmos. O captulo 3, onde ser mostrada toda a metodologia utilizada para criar um cenrio de uma aplicao web feita com o framework Yii e integrada ao banco de dados MySQL. No captulo 4 so apresentadas anlises e discusses a respeito deste trabalho, das pesquisas e testes realizados. E por fim no captulo 5 so apresentadas as concluses e recomendaes relacionadas a este estudo.

1.1. OBJETIVO GERAL

O objetivo geral deste trabalho implementar um algoritmo de criptografia na sesso de login de uma aplicao web, com a pretenso de aumentar a segurana para as senhas que trafegaro pela rede e que ficaro armazenadas em um banco de dados.

15

1.2. OBJETIVO ESPECFICO

Criar uma aplicao web com todas as caractersticas de um sistema seguro e funcional, porm, sem as dificuldades e complexidade da criao de classes, funes e de outras configuraes na linguagem PHP, o que necessitaria um longo tempo e experincia em programao Orientada a Objetos (OO). Por isso recomenda-se o uso de um framework para facilitar e tornar prtico o processo de desenvolvimento de uma aplicao web. Demonstrar por meio de ferramentas e mtodos como decifrar senhas criptografadas pelos algoritmos SHA1 ou MD5 e substitu-los pelo robusto algoritmo de criptografia Blowfish.

1.3. JUSTIFICATIVA

Devido falta de segurana nos ambientes de internet, necessrio que as rotinas de autenticao em aplicaes web sejam seguras o suficiente para impedir que malfeitores consigam decifrar as senhas criptografadas que protegem os dados confidenciais de login. Esta falta de segurana requer a utilizao de um algoritmo de criptografia robusto. Este trabalho destina-se aos profissionais do ramo de desenvolvimento de aplicaes web e tambm a usurios comuns que tenham interesse em aprender conceitos bsicos e importantes, relacionados ao tema deste projeto.

16

2 SEGURANA EM APLICAES WEB

2.1. SEGURANA DA INFORMAO

De acordo com a [ABNT 05], informao um ativo essencial para os negcios de uma organizao e necessita ser adequadamente protegido. No somente para uma organizao, a informao pode tambm pertencer a um individuo qualquer e pode ser armazenada eletronicamente, impressa, escrita em papel e transmitida por diversos meios. Segurana da informao a proteo da informao por meio da implementao de um conjunto de controles adequados, incluindo polticas, procedimentos, estruturas organizacionais e funes de software e hardware. Segundo [STALLINGS 08], Ataques segurana so classificados como: Ataques passivos - que incluem leitura no autorizada de uma mensagem de arquivo e anlise de trfego. Ataques ativos - como modificao de mensagens ou arquivos e negao de servio. Um mecanismo de segurana qualquer processo (ou um dispositivo incorporado a tal processo) projetado para detectar, impedir ou permitir a recuperao de um ataque segurana. Alguns exemplos de mecanismos so algoritmos de criptografia, assinaturas digitais e protocolos de autenticao. Os atributos que devem ser protegidos em segurana da informao so: Autenticidade - propriedade que garante a origem e a identidade de quem est enviando a informao e que esta no foi alterada ao longo de um processo. Confidencialidade - propriedade que limita o acesso a informao somente para usurios autorizados pelo proprietrio desta informao. Disponibilidade - propriedade que garante que a informao esteja sempre disponvel para o uso, por aqueles usurios autorizados pelo proprietrio da informao. Integridade - propriedade que garante que a informao manipulada mantenha todas as caractersticas originais estabelecidas pelo proprietrio, incluindo controle de mudanas e garantia do seu ciclo de vida (nascimento, manuteno e destruio). Irrevogabilidade - propriedade que garante a impossibilidade de negar a autoria em relao a uma transao anteriormente feita. Este trabalho ir explanar sobre segurana da informao no quesito confidencialidade da senha de login, transmitida de uma aplicao web e armazenada em um banco de dados.

17

2.1.1. Segurana na internet

Atualmente a internet tornou-se indispensvel para realizao de diversas tarefas do dia-a-dia, desde a comunicao entre pessoas at a realizao de transaes bancarias. De acordo com pesquisas, a maioria das pessoas tem uma falsa sensao de segurana, pensando que no sero alvos de ataques de malfeitores. Com essa sensao de segurana acabam no tomando as devidas precaues e ficam sujeitas a terem seus dados supervisionados, capturados ou modificados por malfeitores. Por esse motivo importante que todos estejam informados dos riscos aos quais esto expostos, para assim tomarem as medidas preventivas necessrias. [CSI 12] Os tipos de ameaas podem ser: Naturais Ameaas decorrentes de fenmenos da natureza, como incndios naturais, enchentes, terremotos, tempestades, poluio, etc. Involuntrias Ameaas inconscientes, quase sempre causadas pelo desconhecimento. Podem ser causados por acidentes, erros, falta de energia, etc. Voluntrias Ameaas propositais causadas por agentes humanos como hackers, invasores, espies, ladres, criadores e disseminadores de vrus de computador, incendirios. Neste trabalho o tipo de ameaa a ser explorada a voluntria, os ataques deste tipo normalmente ocorrem com diversos propsitos, visando diferentes alvos e usando variadas tcnicas. Qualquer computador conectado a internet pode ser alvo. Os motivos destes ataques vo de simples atos de diverso at a execuo de aes criminosas. Um dos principais motivos de ataque capturar e utilizar informaes confidenciais de usurios para aplicar golpes. [CSI 12]

2.1.2. Explorao de vulnerabilidades

Explorao de vulnerabilidades pode ser vista como uma situao, que quando explorada por um malfeitor, pode resultar em uma violao de segurana. Vulnerabilidades podem ser falhas de segurana no projeto, na implementao ou na configurao de softwares ou equipamentos de rede. Neste trabalho a vulnerabilidade envolve os algoritmos de criptografia utilizados para a proteo da senha de login dos usurios de uma aplicao web. Este ataque acontece quando o malfeitor, utilizando-se de mtodos e ferramentas sofisticadas consegue interceptar o envio dos dados ou acessar diretamente o banco onde estes dados ficam armazenados. [CSI 12]

18

2.1.3. Contas e senhas

Segundo [TANENBAUM TANENBAUM 02], uma ma conta de usurio,como o prprio nome sugere, uma identificao nica que representa um usurio em um sistema ou servio. servio Uma conta de usurio atrelada a uma lista de controle de acesso define o que o usurio pode acessar ou modificar. Existem 3 tipos de mecanismos de autenticao. Aquilo que o usurio : qualquer parte do corpo que possa identificar um individuo. Ex. Impresso digi igital, identificao de retina, , sequncia de DNA, padro de voz, etc. Aquilo que o usurio tem: qualquer objeto que possa identificar um individuo. Ex. Carto de identificao, SecurityToken, software token oken ou telefone celular, celular etc. Aquilo que o usurio sabe: uma informao que somente a pessoa saiba e que possa identific-la. identific Ex. Senha, frase de segurana, etc. etc Este ltimo mecanismo o mais utilizado para o acesso a servios disponibilizados na internet. [TAN 02] Neste trabalho o tipo de mecanismo de autenticao que ser estudado ser Aquilo que o usurio sabe, mais especificamente no fator senha.

2.2. CRIPTOGRAFIA

A palavra criptografia vem das palavras gregas krypts, "escondido" e grphein, "escrita", que significam ficam "escrita secreta". So tcnicas em que a informao transformada da sua forma for original para outra ilegvel, este processo chamado cifragem. O processo inverso chama-se chama decifragem. A informao codificada usando uma frmula (algoritmo), que tambm ser utilizada depois para decodificar a mesma mensagem. Portanto, aps essa transformao transformao, quem no possuir a chave secreta no conseguir decifr-la. [TAN 02] A mensagem original chamada de "texto claro".

Figura 1Cifrando um texto Fonte: Autoria prpria, baseada na imagem:<http://conteudo.imasters.com.br/4802/figura1.gif imagem http://conteudo.imasters.com.br/4802/figura1.gif>.Acessado em 28/11/2013.

19

Criptografia um ramo da matemtica e parte da criptologia. A criptografia vai alm da cifragem e decifragem. Criptoanlise a tcnica de tentar descobrir o contedo de mensagens cifradas, e seus praticantes so chamados criptoanalistas ou malfeitores. [TAN 02] A criptografia serve principalmente para proteger dados contra acessos inapropriados, tanto os que trafegam pela internet como os j gravados o computador. Basicamente a criptografia dividida em dois tipos, estes so: chaves simtricas e chaves assimtricas, que sero explicadas no prximo tpico.

2.2.1. Algoritmos de Chave Simtrica

Algoritmos de Chave Simtrica, tambm conhecidos como Algoritmos de Chave nica, utilizam uma mesma chave tanto para cifrar como para decifrar uma informao. Os algoritmos simtricos exigem que a chave seja mantida em segredo, apenas quem a enviou e o receptor devm possu-la. Com isso, utilizar este mtodo um pouco complicado, pois, deve-se ter um canal seguro para transmitir a chave para o receptor. [STA 08]

Algoritmos de Chave Simtrica em destaque


AES (Rijndael) Blowfish MARS RC6 Serpent

2.2.2. Algoritmos de Chave Assimtrica

Algoritmos de Chave Assimtrica (chave-pblica) utilizam chaves distintas, uma para cifrar e outra para decifrar uma informao, contudo, a chave para decifrar no pode ser conseguida apenas com a chave que cifrou a informao, porm, as duas tm relao entre si. Nos algoritmos assimtricos, as chaves so sempre geradas aos pares: uma para cifrar e outra para decifrar. Com os algoritmos assimtricos podemos tornar a chave de cifrao pblica, disponibilizando-a em um site de acesso ao pblico, resolvendo o problema das chaves simtricas. Tendo a chave pblica em posse qualquer pessoa pode enviar uma mensagem cifrada por esta chave, porm, somente o destinatrio (aquele que disponibilizou a chave pblica) poder decifr-la com sua chave privada. [STA 08] Algoritmos simtricos so mais eficientes que os assimtricos em relao velocidade para cifrar os dados, permitindo altas taxas de cifrao, um algoritmo de chave assimtrica pode ser centenas ou milhares de vezes mais lento do que um algoritmo de chave simtrica de qualidade equivalente. J os algoritmos assimtricos tm a vantagem de poder compartilhar a chave pblica

20

sem problemas. Sendo assim, para ter um melhor aproveitamento, devem-se utilizar os dois algoritmos em conjunto, primeiro cifrar os dados que geralmente so mais pesados com chave simtrica, aps isso, cifrar a chave simtrica com a assimtrica, para poder utilizar o conceito de chave pblica. Este trabalho focar somente na utilizao de algoritmos de chave simtrica.

Algoritmos de Chave Assimtrica em destaque

RSA ElGamal Diffie-Hellman

2.2.3. Funo Hash

Uma funo hash um algoritmo que cria e retorna um contedo de tamanho fixo, formado por letras e nmeros a partir de uma entrada com qualquer tamanho, que pode ser desde um nico caractere at de milhares de pginas, tambm pode ser qualquer tipo de arquivo. O contedo criado ou a sada recebe vrias denominaes tais como hash-code, messagedigest, hashvalue e resumo, dependendo da aplicao da funo hash. O processamento na funo que cria a sada conhecido como hashing, este deve ser computacionalmente vivel de ser calculado para que qualquer computador comum possa execut-la rapidamente. Qualquer alterao na origem, entrada, documento, mensagem, senha ou arquivo por menor que seja a alterao, at mesmo em um nico bit suficiente para que cdigo hash gerado seja totalmente diferente do original, garantindo que, a partir de um valor de hash no seja possvel retornar informao de origem. Considerando que o tamanho do contedo criado pela funo de hash fixo, sendo sempre do mesmo tamanho, e o contedo da informao de entrada ser praticamente infinito, existe a possibilidade de haver um mesmo hash para dois contedos diferentes de entrada. Essas entradas de contedos diferentes representados pelo mesmo hash so denominadas colises. Uma boa funo de hash aquela cujas colises no podem ser calculadas intencionalmente e que tenha uma possibilidade muito baixa de acontecer. No entanto, algoritmos tambm podem apresentar vulnerabilidades.

21

Figura 2Algoritmo de Hash Fonte: Autoria prpria, baseada na imagem:<http://conteudo.imasters.com.br/4802/figura1.gif http://conteudo.imasters.com.br/4802/figura1.gif>. Acessado em 28/11/2013.

Nota: O mtodo de verificao feito pela comparao de dois hashes. hashes Compara-se o hash da senha armazenada na base de dados com o hash da senha digitada no login. Funes One-Way Funes One-Way Way (mo nica) so aquelas na qual dado um determinado valor x relativamente fcil calcular (y=f(x)), porm computacionalmente impossvel obter x a partir de y, ou seja, no reversiva. Um exemplo simples seria quebrar um prato, fcil quebrar um prato em pequenos fragmentos, s que praticamente impossvel reconstruir o prato fielmente a partir dos fragmentos. Funes hash One-Way One so tambm mbm so conhecidas como funes de compresso, funes de contrao, resumo de mensagem (messagedigest), impresso digital (fingerprint) checksum criptogrfico, check de integridade de mensagem (MIC) ou cdigo de deteco de manipulao (MDC). A maioria dos os algoritmos hash utiliza a funo One-Way.

2.2.3.1. Funes de Hash mais conhecidas

MD4

uma funo hash One-Way, foi projetada por Ronald Rivest e publicada oficialmente pela primeira vez em outubro de 1990. Foi especificada no RFC 1186 e aprimorada no RFC1320 de 1992. O algoritmo usa como entrada uma mensagem de comprimento varivel e produz uma

22

"impresso digital" ou um "digesto de mensagem" de 128 bits. O algoritmo influenciou modelos posteriores, como o MD5, SHA-1 e RIPEMD. Foi projetado para ser bastante rpido em mquinas de 32 bits. Alm disso, no necessita de grandes tabelas de substituio e pode ser facilmente programado de forma compacta. O algoritmo de domnio pblico. usado para calcular o NTLM que um conjunto de protocolos de segurana da Microsoft que fornece autenticao, integridade e confidencialidade aos usurios do Microsoft Windows NT, XP, Vista e Seven. O MD4 foi criado para ser utilizado em assinaturas digitais no qual um texto longo precisa ser "comprimido" de forma segura antes de ser cifrado com uma chave privada secreta por uma criptografia de chave pblica. [MD4 92] MD5

uma funo criada por Ronald Rivest em 1991, descrito na RFC 1321. uma verso melhorada e mais robusta do MD4, basicamente o MD4 com maiores recursos de segurana, os clculos so mais lentos, mas, em compensao, muito mais seguro. Este algoritmo produz um valor hash de 128 bits, com ele possvel gerar uma hash de 32 caracteres independente do formato, nome ou tamanho do arquivo. Por ser um algoritmo unidirecional, um hash MD5 no pode ser transformado novamente na senha ou qualquer outra informao que lhe deu origem. A vantagem desse tipo de algoritmo que cada hash gerada de um arquivo ser totalmente diferente do hash gerado de outro, mesmo se a diferena entre as duas fontes do hash for apenas um nmero. Foi projetado para mquinas de 32 bits, podendo ser facilmente programado de forma compacta. O autor colocou o algoritmo no domnio pblico em abril de 1992. A funo hash MD5 um padro mundial usado principalmente em sistemas de senhas, teve grande aceitao e foi o algoritmo de hash mais utilizado at alguns anos atrs. Algoritmos tambm podem apresentar vulnerabilidades. No caso do MD5, foram descobertos vrios tipos de ataques, tais como, Ataque de Coliso com Prefixo Escolhido, Ataque do Prefixo Idntico, Ataque por Fora Bruta, entre outros. [MD5 92] SHA1

Os algoritmos SHA foram projetados pela National Security Agency (NSA) e publicados como um padro do governo Norte-Americano, descrito na RFC 3174. O SHA1 foi considerado o sucessor do algoritmo MD5 (tambm produz um hash baseado nos princpios do algoritmo MD5), mas ambos tm vulnerabilidades comprovadas. O SHA1 a funo mais usada da sua famlia (SHA) e foi publicado em 1995. Produz um valor de hash de 160 bits e tem o tamanho de 40 dgitos em base hexadecimal. amplamente utilizado e suporta os protocolos TLS e SSL, PGP, SSH, S/MIME eIPsec. [SHA1 01]

23

Blowfish

O Blowfish foi desenvolvido por Bruce Schneier em 1993, Hash adaptativo s melhorias futuras de hardware o termo utilizado para identific-lo, pois pode permanecer resistente a ataques do tipo "fora-bruta" com o passar do tempo, pois conforme a tecnologia evolui o hash tambm pode ser otimizado. Ele implementa a varivel "custo" que proporcional quantidade de processamento necessrio para criptografar a senha, com isso gera um nvel de segurana maior em relao quase todos os outros mtodos criptogrficos. Configurando custos maiores de processamento, a senha pode passar por mais de 2 bilhes de ciclos para se chegar ao hash, isso para compensar a evoluo de hardware. Atualmente um padro altamente seguro no passa de 128 ciclos. [CRY 13] O PHP realiza o hashing com o Blowfish atravs da funo crypt() que est presente desde o PHP 4, e serve pra trabalhar com hashes de mo nica. Para funcionar ele deve receber dois parmetros: o salt (salto) e o cost (custo). O salto dever ser gerado de forma aleatria, para que cada vez que a senha for hasheada com um novo salto, ela sempre tenha um retorno diferente. Se a mesma senha for digitada 100 vezes, cada hash gerado ser diferente, diferentemente dos algoritmos MD5 e SHA1. O custo de processamento influencia diretamente nas tentativas de ataque de fora bruta, quanto maior, mais lento e quanto mais lento, melhor. O algoritmo Blowfish tambm foi incorporado em muitas outras linguagens importantes como C#, C++, Java, Perl, Python, etc. [BCRY 13] 2.2.4. Funo Crypt

uma funo de criptografia prpria do PHP, essa funo realiza o hashing de senhas acrescentando codificao especial para impedir que malfeitores utilizem ferramentas de busca de senha. Este processo enviar a senha criptografada com o algoritmo escolhido no banco de dados, o que ajudar a torn-la mais segura. Por exemplo, se algum malfeitor consiga interceptar a senha enviada ou descobre uma falha em algum servidor de banco de dados e obtm acesso as tabelas com as senhas e logins, caso a senha esteja criptografada com a funo Crypt, este malfeitor no conseguir descobrir quais dados so estes. [CRY 02] A funo Crypt uma funo genrica, diferentemente do MD5 e SHA1, pois, ela pode escolher qual algoritmo ser utilizado. As opes de algoritmos para a funo crypt so: DES Standard, DES Extended, MD5, Blowfish, SHA1 e SHA2. Abaixo o modo de como utilizar cada algoritmo:
CRYPT_STD_DES Salto de 2 caracteres alfa-numricos. Ex. df CRYPT_EXT_DES Salto de 9 caracteres, que so: 1 underscore + 4 bytes (indicando o nmero de iteraes) + 4 bytes alfa-numricos. Ex. _k7..silm

24

CRYPT_MD5 Salto de 12 caracteres, iniciado em $1$ + 8 bytes (salto) + final $. Ex. $1$lkjhgfds$ CRYPT_BLOWFISH Salto iniciado em $2a$ + 2 dgitos (custo) + smbolo $ + 22 caracteres alfa-numricos ou . ou / (salto) + final$ CRYPT_SHA256 Salto de 16 caracteres, iniciado em $5$ + 12 bytes (salto) + final $ CRYPT_SHA512 Salto de 20 caracteres, iniciado em $6$ + 16 bytes (salto) + final $

O algoritmo utilizado vai depender do formato do Salto (seguindo o Formato de Criptografia Modular (MCF)), se o Blowfish ou o DES esto instalados e se a classe de configurao do formato crypt_set_format ( ) foi chamada para mudar o padro. [CRY 01] O primeiro fator a criptografar so os dados para usar o hash. O segundo o salto, em uma de trs formas: DES Extended Format: se ele comear com um sublinhado (_), o DES de formato estendido usado para interpretar ambos, a chave e o salto. A chave dividida em grupos de oito caracteres e os de ordem inferior 7 bits de cada caractere (56 bits por grupo) so utilizados para formar a chave DES. O primeiro grupo de 56 bits torna-se a chave inicial DES. O XOR de cifrao da chave DES com a prpria corrente e os bits de grupo tornam-se a seguinte chave DES para cada grupo a mais. O salto uma sequncia de nove caracteres que consiste em um sublinhado seguido por 4 bytes de contagem de iterao e 4 bytes do salto. Estes so codificados como caracteres imprimveis, 6 bits por caractere, com o caractere menos significativo em primeiro lugar. Os valores de 0 e 63 so codificados como 0-9, A-Z, a-z. Isso permite 24 bits, tanto para contagem quanto para o salto. O salto desorganizar o algoritmo DES em uma das 16777216 maneiras possveis se for configurado para 24 bits, ou 4096 maneiras se utilizar 12 bits, se o bit i do salto est definido, ento os bits i e i+24 so trocados na sada E-box DES. O valor retornado uma string de 20 ou 13 bytes de comprimento terminados em null, composta do salto seguido pela codificao da criptografia de 64 bits. Criptografia Modular: se o salto comea com a string $digito$, ento esse formato de criptografia usado. O dgito representa qual algoritmo ser utilizado na criptografia. Aps o cifro est o valor do salto para utilizar na codificao. O comprimento do salto est limitado a oito caracteres, pois o comprimento da sada retornado tambm limitado. Criptografia tradicional: O algoritmo utilizado vai depender se a funo crypt_set_format() foi chamada e se um formato padro mundial foi especificado. Quem definir esse padro de codificao a funo crypt_get_format(), que retorna uma string que representa o nome do algoritmo. Os valores vlidos so 'des', 'lf ', 'md5', 'sha256', 'sha512' e 'nth'. Se no constar em nenhuma das opes acima, ele assume o formato tradicional, que o formato DES, se ele no estiver disponvel, ser o formato MD5, usando toda a cadeia como o salto ou sua primeira parcela.

25

Exemplo de entrada:
$senha = "senha123" DES Padro: crypt($senha, Ox) DES Estendido: crypt($senha, _5D2s/..s) MD5: crypt($senha, $1$l.vi.5/ks) Blowfish: crypt($senha, $2a$07$eisaqu/umaSenhArealbo.) SHA-256: crypt($senha, $5$rounds=5000$umcod1g.Show5S2Z) SHA-512: crypt($senha, $6$rounds=5000$umcod/g.Show5S2Z)

Figura 3Funo Crypt Exemplo de entrada Fonte: Autoria prpria, baseada na imagem: <http://fazer-site.net/criptografia-no-php-com-sha1-md5-hash-e-crypt/>. Acessado em 28/11/2013.

Exemplo de sada:
DES Padro: Ox3Y5Fya7XF5w DES Estendido: _5D2s/..sDW6cb.k2v6c MD5: $1$l.vi.5/k$jniCb3UJAftmHGjihtW291 Blowfish: $2a$07$eisaqu/umaSenhArealbo.nz9zoBr8hWs4dQTPO8RNtL8WrB056fG SHA-256: $5$rounds=5000$umcod1g.Show5S2Z$zwYkD4VvpivMMkevXF9YIRTIYkrkrJ64g1bqbpG/Lu2 SHA-512:$6$rounds=5000$umcod/g.Show5S2Z$vh9cbTzlAjbn7OQPMNUkMRpqrFW3bFG0k4h86FIm.FsRF5 hQOk9QYNHcv0Zzi59fpEEG2DJgGMcsKESpeOT3o/0a81023cfd1b9661c66724eb24b8a10a

Figura 4Funo Crypt Exemplo de sada Fonte: Autoria prpria, baseada na imagem: <http://fazer-site.net/criptografia-no-php-com-sha1-md5-hash-e-crypt/>. Acessado em 28/11/2013.

26

2.2.4.1 Utilizando o algoritmo Crypt (Blowfish)

Para a utilizao do algoritmo Blowfish, deve-se configur-lo na funo crypt(). Como explicado na sesso anterior, o cdigo abaixo serve para criptografar a senha 1234, com o salto Cf1f11ePArKlBJomM0F6aJ e um custo de processamento de 8.

<?php $senha = '1234'; $custo = '08'; $salt = 'Cf1f11ePArKlBJomM0F6a.'; $hash = crypt($senha, '$2a$' . $custo . '$' . $salt .'$');

Nesta funo crypt(): foram passados dois valores para serem criptografados, a prpria senha e a string $2a$08$Cf1f11ePArKlBJomM0F6aJ$, que a juno dos parmetros passados anteriormente e separados em trs partes pelo smbolo $, no caso, o parmetro 2a que identifica a funo Blowfish, os outros dois so o custo e o salto. O custo deve ser um nmero inteiro entre 4 e 31, outro detalhe que o custo precisa ter dois dgitos, com isso nmeros menores que 10 precisam ter zero esquerda. O custo a potncia de 2, ento 2^8 equivale a 256 ciclos, j 2^31 equivaleriam a 2.147.483.648 ciclos. O salto deve conter exatamente 22 caracteres que sejam alfa-numricos, ou . ou /. [BCRY 13] Sada: $2a$08$Cf1f11ePArKlBJomM0F6a.EyvTNh6W2huyQi5UZst5qsHVyi3w5x.

Prefixo do hash

senha cifrada

Observe que o valor codificado tambm tem como prefixo o prprio salto. O hash gerado ter o tamanho de 60 caracteres, 29 do prefixo configurado e os 31 restantes sero da senha propriamente hasheada. Valor este que ser enviado pela aplicao web e ficar armazenado no banco de dados.

27

IMPORTANTE! A funo Blowfish sempre receber como parmetro 29 dgitos, o que ultrapassar disto ser ignorado. Ento, caso a senha codificada no banco for usada como parmetro da funo novamente, ela recupera apenas o prefixo, ignorando o restante do valor codificado (que seria a senha hasheada). Portanto, para checar se uma senha codificada no BD a mesma que uma informada pelo usurio, basta fazer:
senha_digitada = 1234 senha_armazenada = $2a$08$Cf1f11ePArKlBJomM0F6a.EyvTNh6W2huyQi5UZst5qsHVyi3w5x.

<?php if (crypt($senha_digitada, $senha_armazenada) === $ senha_armazenada){ echo 'Senha OK!'; } else { echo 'Senha incorreta!'; }

Demonstrao mais detalhada senha_digitada = 1234 senha_armazenada=$2a$08$Cf1f11ePArKlBJomM0F6a.EyvTNh6W2huyQi5UZst5qsHVyi3w5x. Se utilizarmos a funo: (crypt($senha_digitada, $senha_armazenada) === $ senha_armazenada) Ser como: (crypt(1234, $2a$08$Cf1f11ePArKlBJomM0F6a.) E a sada desta funo gerar novamente o mesmo hash que est armazenado no banco: $2a$08$Cf1f11ePArKlBJomM0F6a.EyvTNh6W2huyQi5UZst5qsHVyi3w5x.

28

2.3. TIPOS DE ATAQUES COMUNS

Existem quatro tipos principais de ataques, estes so: Ataque de interrupo: caracteriza-se pela possibilidade de tornar um bem ou ativo indisponvel, inutilizvel.

Ataque de interceptao: caracteriza-se pela obteno de informaes por meio do acesso no-autorizado de pessoa, sistema ou programa.

Ataque de modificao: representa situaes em que dados so alterados por pessoas no-autorizadas. Ataque de fabricao: difere um pouco da modificao, por representar situaes em que dados falsos so produzidos e inseridos nos ativos de uma organizao. O tipo de ataque que este trabalho foca o de interceptao. Como o nome indica, um ataque com interceptao de terceiros ocorre quando um malfeitor est monitorando, capturando e controlando a comunicao entre dois equipamentos que estejam se comunicando, sem o conhecimento dos usurios. Por exemplo, esse malfeitor poderia capturar uma senha cifrada que trafega pela rede e tentar decifr-la para ter acesso a um sistema ou servio. [ATAQ 10] Abaixo esto alguns dos ataques mais comuns do tipo interceptao:

Ataque de Prefixo Idntico - usando essa tcnica, possvel obter, a partir de dois arquivos iguais, dois conjuntos 128 bytes distintos que, adicionados (ou sobrepondo-os no final) aos arquivos iniciais, obtemos o mesmo hash para ambos. Note que, neste caso, no h controle sobre a alterao, ou seja, no fim das contas os arquivos apenas vo diferir nos 128 ltimos bytes. [CRIP 13]

Ataque de Coliso com Prefixo Escolhido - consiste em pegar dois arquivos do mesmo tamanho, mas que podem ser completamente diferentes, e em seguida adicionar cerca de 1kb pr-calculado em cada um deles de forma que o hash final dos dois fique igual. Esta tcnica leva cerca de um dia para os clculos sarem com as duas sequncias de 1kb. [CRIP 13]

29

Rainbow Table uma tabela de consulta que utiliza um algoritmo de transao memria-tempo, dando a possibilidade de recuperar o valor original de uma senha atravs de uma senha criptografada com hash. O malfeitor gera uma tabela com o resultado da cifrao de todas as palavras de um dicionrio, combinando palavras e at adicionando smbolos e dgitos essas palavras. [HACK13]

Ataque de Dicionrio o ataque com uso de dicionrio utiliza palavras, nomes, apelidos, datas de nascimento registradas em seu dicionrio armazenado em banco de dados. Com isso, podem-se obter senhas de sistemas utilizando tentativa e erro de senhas. [HACK13]

Fora bruta (Brute force) - um ataque de fora bruta consiste em adivinhar, por tentativa e erro, um nome de usurio e senha e, assim, executar processos e acessar sites, computadores e servios em nome e com os mesmos privilgios deste usurio. [CSI 12] Se um malfeitor tiver posse destes dados, ele pode efetuar aes maliciosas em seu nome como, tais como, trocar a sua senha, invadir o seu computador e executar aes, como apagar arquivos, obter informaes confidenciais, etc. As tentativas de adivinhao costumam ser baseadas em:

Dicionrios de diferentes idiomas e que podem ser facilmente obtidos na Internet; Listas de palavras comumente usadas, como personagens de filmes e nomes de times de futebol; Substituies bvias de caracteres, como trocar a por @ e o por 0; Sequncias numricas e de teclado, como 123456 e qwert; Informaes pessoais, de conhecimento prvio do malfeitor ou coletadas na internet em redes sociais e blogs, como nome, sobrenome, datas e nmeros de documentos.

30

2.4. FERRAMENTAS E TCNICAS PARA DECIFRAR SENHAS

Existem diversas maneiras de decifrar uma senha criptografada, praticamente todas consistem em tentativa e erro. Qualquer computador, equipamento ou servio que seja acessvel rede, com um nome de usurio e senha, pode ser alvo de um ataque. H vrios mtodos que qualquer individuo que esteja mal intencionado pode recorrer com facilidade, ainda mais com o auxlio da internet. Existem centenas de scripts, programas, tutoriais e tantas outras ferramentas para a decifrao dos algoritmos MD5 e SHA1, essas ferramentas so simples em questo de interface, porm so muito potentes e dependendo do tipo de senha, pode ser que elas consigam decifr-la em questo de segundos. [HACK13] Abaixo uma pequena lista de programas para decifrar senhas: Hydra - consegue decifrar senhas dos protocolos: FTP, HTTP, IMAP, POP3, SMTP, entre outros. Brutus - Mesma funo do Hydra, tambm voltado para decifrao de senhas de protocolos web. Bruter - para decifrao de senhas de rede e web, parecido com o Brutus, porm consegue decifrar senhas de mais protocolos alm dos citados: MSSQL, MySQL, PgSQL, SMB-NR, SNMP, SSH2. Advanced zip password - voltado para decifrao de senha de arquivos do tipo word, rar, pdf, zip, etc. Advancedrarpassword - Idem ao Advanced zip password. Advancedpdfpassword - Especializado em decifrar senhas de arquivos pdf. OPHCRACK - decifrao de senha dos sistemas operacionais, especificamente Windows.

H tambm na internet muitos sites contendo uma lista imensa de senhas e hashes SHA1 e MD5 para consulta. Para fazerem isso so executados scripts que geram combinaes de senhas, depois as convertem para o hash SHA1 ou MD5, e por fim salvam o par de senha e hash em seus bancos de dados. Ento, uma simples consulta SQL por um especfico hash pode trazer a senha originria deste. Estes sites no tm todas as combinaes existentes, porque seria impossvel armazenar todas as combinaes de hash e senha, pois o tamanho do banco seria imensurvel. Mas somados, estes sites possuem um nmero extraordinrio de senhas armazenadas. Somente o site md5decrypter.co.uk possui atualmente cerca de 44bi de senhas em sua base de dados.

31

2.5. BANCO DE DADOS

Um banco de dados consiste em uma coleo de dados inter-relacionados que representam informaes sobre um domnio especfico. O objetivo principal de um sistema de banco de dados possibilitar um ambiente que seja adequado e eficiente para uso na recuperao e armazenamento de informaes. O gerenciamento dos dados envolve definir estruturas para o armazenamento das informaes e fornecer mecanismos para a manipulao destas informaes. Tambm precisa garantir a segurana destas informaes contra falhas de sistema e tentativas de acesso no autorizado. A utilizao de bancos de dados hoje em dia essencial para as organizaes, pois um meio muito eficiente de organizar e gerenciar seus ativos. A maioria das pessoas utiliza um banco de dados sem saber, fazem isso quando, quando usam um caixa eletrnico, criam uma conta ou postam fotos no Facebook, etc. A revoluo da internet na dcada de 90 aumentou consideravelmente o acesso direto de usurios a banco de dados. [SIL06]

Dado - conjunto de smbolos organizados de forma que represente a informao fora da mente humana. Elemento de Dado - subconjunto de smbolos que compem um dado com significado especfico, mas no representa a informao completa. No exemplo: O n de pessoas cadastradas no projeto Construfcil em abril de 2014 de 9692239.

Dado:

Projeto Construfacil

Perodo Matriculados 04/2014 9692239

Tabela 1 Tabela simples Fonte: Autoria prpria

Elementos de dados: Projeto: Construfcil Perodo: abril/2104 Matriculados: 9692239

32

2.5.1. Viso dos dados

Um sistema de banco de dados tem a finalidade de fornecer uma viso abstrata dos dados aos usurios, ele oculta certos detalhes de como os dados so armazenados e mantidos. [SIL06] Exemplos de banco de dados: Lista Telefnica Acervo de uma biblioteca Registro de estoque Exemplo de viso de um registro de estoque:
Ficha de controle de estoque Janeiro/2014 Entrada Sada Quant. R$ Total Quant. R$ Total 10 10,00 100,00

Data 25/02/2014

Item Vaso

Quant. 10

Saldo R$ Total 10,00 100,00

Viso de quantidades de itens disponveis em estoque Item Quant. Vaso 10


Tabela 2 Viso dos dados Fonte: Autoria prpria

2.5.2. Abstrao dos dados

Como a maioria dos usurios no tem conhecimento em linguagem de banco de dados, os desenvolvedores ocultam a complexidade para os usurios sob vrios nveis de abstrao, para simplificar a iterao usurio-sistema. [SIL06] Estes nveis so: Fsico - (nvel mais baixo) descreve como os dados so realmente armazenados. Lgico - (nvel mdio) descreve que dados esto armazenados e que relao existe entre eles. View - (nvel mais alto) descreve apenas parte do banco de dados, apenas o que o usurio precisa visualizar. O sistema pode apresentar vrias vises de um mesmo banco de dados.

33

Modelo de e abstrao de dados:

Figura 5Banco de dados Modelo de abstrao de dados Fonte: Autoria prpria, baseada na imagem: <http://www.devmedia.com.br/imagens/sqlmagazine/mar2006/ORA_RR_02.JPG http://www.devmedia.com.br/imagens/sqlmagazine/mar2006/ORA_RR_02.JPG>. Acessado em 28/11/2013.

Modelo de abstrao bstrao dos dados mais detalhado: detalhado

Figura 6Banco de dados Modelo de abstrao de dados mais detalhado Fonte: Autoria prpria, baseada na imagem: <http://www.devmedia.com.br/imagens/sqlmagazine/mar2006/ORA_RR_02.JPG http://www.devmedia.com.br/imagens/sqlmagazine/mar2006/ORA_RR_02.JPG>. Acessado em 28/11/2013.

34

2.5.3. Modelo de dados

Um modelo de dados oferece uma maneira de descrever o projeto de um banco de dados nos nveis fsico, lgico e view. uma cole coleo de ferramentas rramentas conceituais para descrever dados, relaes de dados, semntica de dados e restries de consistncia. con [SIL06 SIL06] Caractersticas:

Figura 7Simbologia - Banco de dados Modelo de abstrao de dados Fonte: Autoria prpria, baseada na imagem: <http://www.gsigma.ufsc.br/~popov/aulas/bd1/trabalho_matriculas.png http://www.gsigma.ufsc.br/~popov/aulas/bd1/trabalho_matriculas.png>Acessado Acessado em 28/11/2013.

Existem quatro categorias de modelos de dados, estas so: Modelo relacional Modelo de entidade/relacionamento (E (E-R) Modelo elo de dados baseado em objetos Modelo de dados semi-estruturado semi

2.5.3.1. Modelo relacional

O Modelo relacional usa uma coleo de tabelas para representar os dados e a relao entre eles. Cada tabela possui diversas colunas, e cada coluna possui um nome nico. Este modelo baseado em registros, tambm o mais usado. [SIL06]

35

Figura 8Modelo relacional Fonte: Autoria prpria, baseada na imagem: <http://www.devmedia.com.br/imagens/sqlmagazine/abr2006/30 http://www.devmedia.com.br/imagens/sqlmagazine/abr2006/30-05pic02.JPG >. Acessado em 28/11/2013.

2.5.3.2. Modelo de entidade/relacionamento (E (E-R)

O Modelo de entidade/relacionamento baseado em uma percepo do mundo real que consiste em uma coleo de objetos bsicos, chamados entidades, e as relaes entre estes objetos. objetos [SIL06]

Figura 9Modelo Modelo de entidade/relacionamento Fonte: Autoria prpria, baseada na imagem: <http://www.devmedia.com.br/imagens/articles/178719/mer.JPG http://www.devmedia.com.br/imagens/articles/178719/mer.JPG>. Acessado em 28/11 11/2013.

2.5.3.3. Modelo de dados baseado em objetos

O Modelo de dados baseado em objetos pode ser concebido como uma extenso ao modelo E-R R com noes de encapsulamento, mtodos (funes) e identidade de objeto. [SIL06]

36

Figura 10Modelo de dados baseado em objetos Fonte: Autoria prpria, baseada na imagem: < http://blog.locaweb.com.br/wp-content/uploads/2008/05/mvc.png>. http://blog.locaweb.com.br/wp content/uploads/2008/05/mvc.png>. Acessado em 28/11/2013.

Nota: Neste trabalho o modelo utilizado ser o de dados baseados em objetos. 2.5.3.4. Modelo de dados semi-estruturado semi

O Modelo de dados semi-estruturado semi permite a especificao dos dados em que itens de dados individual do mesmo tipo possam ter diferentes tipos de atributos. Isto o oposto dos modelos mencionados anteriormente, em que todos os itens de dados de um determinado tipo precisam ter o mesmo conjunto de atributos. [SIL06]

Figura 11Modelo Modelo de dados semi-estruturado semi Fonte: Autoria prpria, baseada na imagem: <http://www.devmedia.com.br/images/articles/130099/f1.JPG http://www.devmedia.com.br/images/articles/130099/f1.JPG >. Acessado em 28/11/2013.

37

2.5.4. Sistema de Gerenciamento de Banco de Dados

Um Sistema de Gerenciamento de Banco de Dados (SGBD) uma coleo de programas para acessar os dados do banco. So softwares que permitem a definio de estruturas para armazenamento de informaes e fornecimento de mecanismos para manipul-las. A maioria destes sistemas utiliza a linguagem Structured Query Language (SQL), que um padro internacional ANSI-SQL. O principal objetivo retirar da aplicao cliente a responsabilidade de gerenciar o acesso, manipulao e organizao dos dados. O SGBD disponibiliza uma interface para que os seus clientes possam incluir, alterar ou consultar dados. [SIL06] Principais Objetos de um SGBD Tabelas um objeto criado para armazenar os dados fisicamente, onde estes so armazenados em linhas e colunas, os dados descrevem um assunto tal como: clientes, fornecedores, etc. Vises como mencionado anteriormente o sistema fornece uma viso abstrata dos dados aos usurios. ndices uma ferramenta que facilita a busca de linhas dentro de uma tabela, pode ser uma referncia associada a uma chave primria para otimizar o processo de busca. 2.5.5. Bancos de Dados Relacionais

Bancos de Dados Relacionais usam tabelas para armazenar informaes. Os campos e registros padro so representados com colunas (campos) e linhas (registros) em uma tabela. Este tipo de banco de dados baseado no modelo relacional e usa um conjunto de tabelas para representar os dados e a relao entre eles. um conceito abstrato que define maneiras de armazenar, manipular e recuperar dados, construindo um banco de dados. Foi criado em 1970 pelo pesquisador da IBM, E. F. Codd, desde ento vem sendo um tipo de banco de dados padro. [SIL06] Cada tabela tem uma ou mais colunas, onde outras tabelas podero ter acesso s informaes desta tabela a partir de chaves estrangeiras. Exemplo:
Tabela cadastro de usurios Nome Endereo Wagner Av. Dom Pedro I Deluqui R. dos Professores

ID 1 2

Cidade 1 2

UF 1 3

Tabela 3 Ligao entre tabelas 1 Fonte: Autoria prpria

38

Tabela cadastro de cidades ID Cidade UF 1 Osasco 1 2 Cascavel 2 3 Santa F 3


Tabela 4 Ligao entre tabelas 2 Fonte: Autoria prpria

Tabela cadastro de Estados ID UF 1 SP 2 MG 3 PR


Tabela 5 Ligao entre tabelas 3 Fonte: Autoria prpria

2.5.6. Sistema de Gerenciamento de Bancos de Dados Relacionais

Sistemas de Gerenciamento de Bancos de Dados Relacionais (SGBDR) tm a mesma funo dos SGBDs, porm, trabalham em cima de bancos de dados relacionais. Em bancos de dados relacionais a interface constituda pela Application Programming Interface (API) ou drivers do SGBDR. [SIL06]

2.5.6.1. Principais caractersticas de um SGBDR

Integridade - garante que os dados estaro sempre ntegros Disponibilidade - garante que os dados estejam sempre atuais e disponveis Confidencialidade - restrio de acesso aos dados para usurios no autorizados Autenticidade - somente usurios logados podero realizar operaes no banco de dados Irrevogabilidade - todas as alteraes feitas no banco tero registro do autor, hora, etc. Compartilhamento de dados entre mltiplos usurios Diferentes tipos de interface para os diferentes usurios Controle de redundncia dos dados Mecanismos de segurana, tal como backup e recuperao dos dados Flexibilidade na mudana das estruturas de dados

39

2.5.7. SGBDRs mais utilizados

Microsoft SqlServer MySql Oracle

2.5.8. Por que Escolher o MySQL?

Com tantas possibilidades de produtos no mercado, existem hoje bancos de dados com os mais diversos tipos de estrutura, nveis de segurana, variao de preo, etc. Sendo assim, fica difcil escolher um banco de dados que trabalhe com alto desempenho, que exija baixo consumo de CPU e RAM, tenha suporte e o mais importante, que consiga assegurar que os dados estejam protegidos contra qualquer tipo de acesso malicioso. Atualmente existem muitos SGBDs bons, tais como, SQL, Oracle, porm, para se utilizar de todas suas funcionalidades e total desempenho paga-se um preo alto por suas licenas de uso. Estes tambm consomem muito processamento e RAM, exigindo um computador potente para execut-los. Existem suas verses gratuitas, porm, estas tm seus recursos limitados. H tambm outros SGBDs totalmente gratuitos, que no consomem muita memria nem CPU, como o Postgresql e o SQLite, porm s suportam aplicaes leves e simples. A soluo ideal que existe hoje no mercado o MySQL, que alm de ter licena GPL (que gratuita), no exige uma mquina to robusta e ainda consegue suportar aplicaes das mais complexas. Tem como vantagem sua portabilidade, podendo ser otimizado e customizado com outros recursos, suporta o modelo ORM, diversas linguagens de programao, drivers, StorageEngines, frameworks e at mesmo algoritmos de criptografia, e nestes dois ltimos quesitos que esse projeto ir aprofundar-se. [MYSQL 13]

2.6. FRAMEWORK DE DESENVOLVIMENTO WEB

Um framework de desenvolvimento web uma coleo abstrata de classes que capturam os padres de interao entre objetos, geralmente possui funcionalidades comuns de vrias aplicaes, serve como uma base de cdigo fonte genrico para a criao de web sites. Frameworks auxiliam no desenvolvimento e manuteno de aplicaes, pois, j vm com o ncleo pronto e uma estrutura pr-definida, ficando pendentes apenas ajustes bsicos, como, layout, regras de negcio, entre poucas outras configuraes. Transformando rapidamente seu projeto de aplicao web em cdigo funcional, pronto para produo. O melhor que pode ser flexvel e extensvel, podendo ser complementado com outros recursos e linguagens de programao, o que acaba se tornando um poderoso grupo de ferramentas trabalhando em conjunto. [WIN 12]

40

Alguns exemplos de compatibilidade: Java, C #, .NET, PHP, Yii. Com o uso de um framework, no h razo para codificar sua ua aplicao web desde o zero. Algumas caractersticas comuns co entre frameworks: Reutilizvel, vel, extensvel, eficiente e completo. Aplicaes semelhantes: sistemas de gesto, portais, fruns, CMS, e e-commerce, etc. Modularizao: organizao de componentes relacionados Possuem uma coleo oleo de bibliotecas Acesso a APIs (Interface de Programao de Aplicativos) de outros servios Servios de autenticao e autorizao

2.6.1. ORM (Object-Relational Relational Mapping)

O ORM (em portugus: Mapeamento Objecto-Relacional) um mtodo utilizado para garantir que programao orientada aos objetos utilizando bancos de dados relacionais seja compatvel. As tabelas do banco de dados so representadas atravs de classes e os registros de cada tabela como instncias destas classes. A persistncia dos dados se faz com o uso de uma i interface nterface de acesso amigvel, com isso o programador no precisa se preocupar com comandos de linguagem do banco utilizado para manipular os dados. A maior parte das aplicaes web construda como armazenamento dos seus dados em tabelas de um banco de dados dad relacional. Bibliotecas de mapeamento de objeto-relacional objeto fornecem o mapeamento das tabelas do banco de dados para classes de objetos de domnio. Normalmente o ORM tem em seu cdigo a parametrizao de como os campos no banco de dados correspondem a propriedades em nossos objetos na memria. [WIN 12]

Figura 12Modelo ORM Fonte: Autoria prpria, baseada na imagem: < http://www.edzynda.com/media/orm.jpg>. Acessado em 28/11/2013. 28/11/201

41

2.6.2. Estrutura MVC (Model-View-Controller)

O MVC (em portugus: Modelo-Viso-Controlador) um modelo de arquitetura de aplicao que faz a separao de funcionalidades em camadas, isso facilita a manipulao dos dados para a apresentao ao usurio. O Modelo trabalha com os dados da aplicao, regras de negcios, lgica e funes. A Viso a representao dos dados, como uma tabela ou imagens. possvel ter vrias vises do mesmo dado. Um exemplo: apresentao de dados numricos, tal como sua representao convertida em grfico. O Controlador faz intermediao entre o Modelo e a Viso. Ele recebe os dados de entrada direciona para o tratamento adequado e retorna a visualizao para o usurio se necessrio. A principal funo do MVC a reutilizao de cdigo e separao de conceitos. [WIN 12] Vantagens: Separao entre interface de usurio, regras de negcio e modelo de dados Reduzir custos de manuteno Fatorao de funcionalidades Comportamento padro Com isso obtemos versatilidade, pois, qualquer tipo de alteraes em uma das camadas no interfere nas demais, facilitando a atualizao de layouts, alterao nas regras de negcio e adio de novos recursos.

2.6.3. Estrutura RBAC (Role Base Access Control)

O RBAC (em portugus: Regras Baseadas em Controle de Acesso) constitui de regras para limitar o acesso da aplicao aos usurios autenticados baseado em suas funes. Assim, os usurios iro apenas executar determinadas operaes, pr-definidas pelo seu perfil, tais como manipulao de dados, criao de outros usurios, visualizao dos dados, entre outras. Essas restries so associadas com os papis desempenhados (funes). Para cada usurio atribu-se um papel e atravs dessa associao, o usurio adquire as permisses definidas para o papel. [WIN 12]

42

2.6.4. Atuais frameworks PHP no Mercado:

CakePHP CodeIgniter Synfony Yii Zend

2.6.5. Estrutura comum dos frameworks

Figura 13Estrutura comum dos frameworks Fonte: Autoria prpria, baseada na imagem: < http://josmx.com/files/apache_php_mysql_logo.JPG>. Acessado em 28/11/2013.

2.6.5.1. Servidor web Apache

Todos os sites trabalham em cima de um servidor web, e este responsvel por disponibilizar as pginas e todos os demais recursos que possam ser acessados, tais como, postagem de fotos, envio de e-mail via formulrio, etc. Sua principal funo processar e executar solicitaes HTTP, HTTPS, SSL, FTP, etc. O Apache Server um software livre, no que diz respeito a ter seu cdigo-fonte disponvel para alteraes, alm de poder utiliz-lo gratuitamente. Com isso muitas comunidades de desenvolvedores o otimizam e fazem dele o servidor web mais utilizado. O servidor Apache capaz de executar cdigo em PHP, Perl, Shell Script e at em ASP. Sua utilizao mais conhecida a combinao do Apache com a linguagem PHP e o banco de dados MySQL. At o momento o Apache o servidor Web mais utilizado no mundo, tendo um domnio de mais de 60%. Isso porque prov alta performance, segurana, compatibilidade com diversas plataformas e inmeros recursos. [APA 13]

43

2.6.5.2. Linguagem web PHP5

A PHP5 uma das mais importantes linguagens de programao de pginas e aplicaes web da atualidade, capaz de gerar contedo dinmico na internet baseada em bases de dados, ela tambm uma linguagem orientada a objetos (POO). compatvel com quase todos os sistemas operacionais, banco de dados, protocolos e outras linguagens de programao, tais como, C++, Pearl, Java, etc. licenciada gratuitamente sob a PHP License, uma licena diferente da GNU General Public License (GPL) devido a restries no uso do termo PHP. linguagem extremamente modularizada, o que a torna ideal para instalao e uso em servidores web, o cdigo interpretado no lado do servidor pelo mdulo PHP, que tambm gera a pgina web a ser visualizada no lado do cliente. [PHP 13]

2.6.5.3. Banco de dados Relacional - MySQL

O MySQL um dos mais populares sistemas de gerenciamento de banco de dados que utiliza a linguagem SQL. Esse SGBD compatvel com os principais sistemas operacionais e tambm de licena gratuita (GPL), porm se o programa que o acessar no for de licena GPL, dever ento ser adquirida uma licena para o uso do MySQL. Seu enorme sucesso devido seu desempenho e estabilidade, entretanto exige uma mquina com poucos recursos de hardware. Sua vasta compatibilidade de integrao a outros sistemas e suporte a vrias linguagens de programao, drivers e frameworks tambm contribui para sua reputao. Alguns de seus utilizadores de renome so: NASA, Wikipdia, Yahoo, entre tantos outros. [MYSQL 13]

2.6.6. Por que Escolher o Framework Yii?

O framework Yii se sobressai aos seus concorrentes na medida em que de fcil utilizao, eficiente, possui centenas de recursos e rigorosamente bem documentado. O Yii foi meticulosamente projetado para comportar gerenciar aplicaes web complexas, desde o comeo. a combinao da vasta experincia de seus criadores em desenvolvimento web e da investigao e reflexo dos frameworks PHP e aplicaes web mais populares atualmente. Alm de prover de recursos para a segurana da informao, possibilitando criptografar seus dados, principalmente senhas, com os melhores algoritmos da atualidade. [WIN 12] Algumas de suas caractersticas que vo alm do padro dos outros algoritmos: Funcionalidades genricas e customizveis Alto-desempenho Baseado em componentes Desenvolvimento em larga escala

44

Tratamento de erros: facilita associao de erros ao tratador correto Internacionalizao: traduo de mensagens, formatos de data, hora e nmeros Extensvel e compatvel com muitos outros recursos Uma das principais razes para se utilizar o Yii que ele Possui licena BSD, que uma licena livre e de cdigo aberto, considerado como de domnio pblico e pode ser modificado sem nenhuma restrio. A licena BSD permite que o software distribudo sob a licena, seja incorporado a produtos proprietrios. Trabalhos baseados no material podem at ser liberados com licena proprietria. Alguns exemplos notveis so: o uso de cdigo do BSD em produtos da Microsoft, como a pilha TCP/IP, e tambm o uso de muitos componentes do FreeBSD no sistema MacOS X da Apple Computer. [WIN 12] Outro fator importante para a escolha do framework Yii, que foram realizadas diversas pesquisas referentes quais os melhores frameworks do mercado atual e suas principais caractersticas. [FRAM 13] Uma dessas pesquisas foi a realizada no site http://socialcompare.com/en, que compara e mostra as principais funes de cada framework, onde foram selecionados os cinco melhores frameworks atuais do mercado. Estes so: CakePHP, CodeIgniter, Symfony, Yii e Zend.

Figura 14Comparao entre frameworks Socialcompare Fonte: <http://socialcompare.com/en>. Acessado em 03/12/2013.

45

Outros sites de comparao e pesquisas dos frameworks:


http://www.phpframeworks.com/ http://www.phpwact.org/php/mvc_frameworks http://www.sheldmandu.com/php/php-mvcframeworks/choosing-the-best-php-mvc-framework-part-1

A pesquisa principal foi a Navigating the Framework Jungle for Teaching Web Application Development, de volume 10 do ano2013. Disponibilizada no endereo: http://iisit.org/Vol10/IISITv10p095-109Chao0092.pdf Realizada por renomados pesquisadores do ramo de Tecnologia da Informao, os professores Joseph T. Chao, Kevin R. Parker e Bill Davey. Com o objetivo de orientar qual o melhor framework para se criar e gerenciar aplicaes web. [FRAM 13] Foram selecionados os 5melhores frameworks atuais, abaixo a lista destes: CakePHP CodeIgniter Symfony Yii Zend

Nesta pesquisa foram realizados diversos testes, em diversas reas de atuao dos frameworks, desde popularidade, at suas principais funes e caractersticas. Onde para cada teste realizado, eram gerados pontos para cada framework de acordo com seu desempenho. Ao final dos testes foram somados os pontos de todos os testes, indicando qual o melhor framework.

Tabela 6 Comparao entre frameworks Fonte: http://iisit.org/Vol10/IISITv10p095-109Chao0092.pdf

Como se pode ver nos resultados finais na tabela acima, o Yii conseguiu superar todos os outros frameworks em pontuao nos critrios estabelecidos. Apesar de ser novo, o Yii vem ganhando notoriedade no mercado, devido a sua simplicidade, eficincia, robustez, entre outros aspectos que o tornam um dos melhores frameworks para se trabalhar. [FRAM 13]

46

2.6.7. Histria do Yii

Figura15Yii Framework Fonte: Yii Framework. Logo<http://yiiframework.com>. Acessado em: 13/09/2013.

O framework Yii comeou seu desenvolvimento em 1 de janeiro de 2008 e Qiang Xue o nome do seu fundador. Anos antes, Qiang j havia desenvolvido e mantido por um longo tempo outro projeto de framework denominado PRADO. O tempo de experincia prpria e feedbacks de usurios em relao ao projeto PRADO indicaram a necessidade da criao de um framework baseado em PHP5 que fosse de manipulao mais fcil, mais extensvel e mais eficiente. A verso alpha do Yii foi oficialmente lanada para atender a essas necessidades, em outubro de 2008. Em 3 de dezembro de 2008 o Yii 1.0 foi lanado oficialmente. A partir de ento o Yii vm evoluindo e tem sua ltima verso 1.1.14 disponibilizada para download, lanada em 11/08/2013. O Yii conta com uma equipe de desenvolvedores renomados no ramo de ambiente web e tambm possui crescentes comunidades de desenvolvedores PHP ao redor do mundo e continua a ganhar notoriedade e popularidade. Logo ficou visado pelo impressionante alto desempenho quando comparado a outros frameworks baseados em PHP5. Como a evoluo no para, a verso 2 do Yii est sendo desenvolvida e est sendo construda completamente para o PHP 5.3.0+ e tem por objetivo se tornar o estado da arte da nova gerao de frameworks PHP. [WIN 12]

2.6.8. Caractersticas do Yii

O Yii um framework em PHP de alto desempenho que trabalha com componentes para o desenvolvimento de grandes aplicaes web. Sua mxima reutilizao de cdigo na programao web pode alavancar rapidamente o processo de desenvolvimento. Ele pode desenvolver praticamente todos os tipos de aplicaes desde e-Commerce at portais com alto trfego, devido a sua generalidade, ser leve e pode ser combinado com sofisticadas solues em caching. Seu nome um acrnimo para YES (Sim), e pronunciado como Yee que representa os adjetivos para descrev-lo, como Easy, Eficient and Extensible (fcil, eficiente e extensvel). [WIN 12]

47

Figura 16Base do Yii Fonte: Yii Framework. Logo<http://yiiframework.com>. Acessado em: 13/09/2013.

Fcil: Para criar uma aplicao web preciso apenas ter uma mquina com os servios bsicos de hospedagem, estes so: servidor web apache, PHP 5.1.0 ou superior e um banco de dados relacional. Aps isso s copiar os arquivos do framework Yii no diretrio web raiz e pronto. Com algum conhecimento em PHP e orientao a objetos o usurio est pronto para comear a desenvolver aplicaes, no preciso aprender linguagem de modelagem. O Yii j vem com classes de componentes que so estendidas a partir do ncleo. Seguindo suas convenes prescritas, o usurio pode escrever menos cdigo e gastar menos tempo desenvolvendo sua aplicao. Mas tambm ele permite que o usurio personalize todos os seus padres e tambm d instrues de como fazer isso. Como o Yii o resultado de uma avaliao e reciclagem de outros frameworks bem conhecidos, provvel que o usurio o ache bem familiar e fcil de manusear. Eficiente: Para agilizar a criao e manuteno de suas aplicaes, ele tem como principio o modelo de desenvolvimento DRY (Dont Repeat Yourself). Estas aplicaes so construdas usando a arquitetura MVC. Isso reduz a duplicao e promove a reutilizao de cdigo. tambm extremamente rpido e pode ser configurado com otimizao de desempenho, alis, este foi um dos principais quesitos desde o incio de sua formulao. um framework de alto desempenho, baseado em componentes que podem ser usados para o desenvolvimento de aplicaes web em qualquer escala. Se o usurio utilizar as convenes internas do Yii, ele ter o aplicativo instalado e funcionando com pouca ou nenhuma configurao manual. Extensvel: O Yii j vem com recursos para atender a todas as demandas oriundas das aplicaes web de hoje. Widgets habilitados para AJAX, integrao de servios web, RESTful e SOAP, reforado com uma arquitetura MVC, DAO e camada de banco de dados relacional ActiveRecord, caching sofisticado, hierarquia de controle de acesso baseado em funo e muito mais. O Yii foi meticulosamente projetado para permitir que quase todos os blocos do seu

48

cdigo sejam estendidos e personalizados para atender a qualquer exigncia de projeto. No tem como no aproveitar este benefcio, que a extensibilidade do Yii, o usurio estende ou otimiza as classes j prontas. O Yii auxilia no processo de otimizao de classes para criao de funes especficas, isto tambm ajuda a contribuir para a crescente lista de recursos do Yii e participar ativamente da comunidade para a extenso do Yii. No site do Yii pode ser encontrada uma lista de extenses disponveis, contribudas por usurios. H tambm um repositrio de extenses no-oficiais, feito para grandes aplicaes, o que realmente demonstra a extensibilidade e a fora da comunidade deste projeto. Normalmente na metodologia RBAC, um usurio atribudo a uma ou mais funes e este usurio herda as permisses referentes essas funes. No Yii, alm dessa opo, podemos associar usurios a qualquer item de autorizao, isso garante uma enorme flexibilidade ao trabalhar com hierarquia de papis. Alm do mais, o Yii tem uma ferramenta de gerao automtica de cdigo, o Gii, com ele podemos implementar qualquer atribuio MVC para que nossa aplicao possa interagir com o banco de dados, onde, apenas informamos as tabelas do banco que recebero o mapeamento para atribuio da funo, a partir da ele gera o cdigo para a criao das classes automaticamente.

2.6.9. Como o Yii Funciona? O Yii utiliza as padronizaes como ORM, MVC, RBAC, entre outras, isso nos d um extremo poder para criar e manter nossas aplicaes com mximo reaproveitamento de cdigo. [WIN 12] Para facilitar sua organizao e configurao, a estrutura padro de suas funcionalidades fica armazenada nos diretrios relacionados abaixo: _ assets: recursos publicados _ css: recursos de layout _ images: arquivos de imagens _ themes: temas para extenso _ protected: arquivos protegidos da aplicao _ components: componentes adicionais _ config: configurao da aplicao _ controllers: regras de negcio _ data: sql de criao/configurao do banco de dados _ extensions: extenses para o framework _ messages: traduo de mensagens para UI _ models: modelo de dados _ runtime: arquivos temporrios _ tests: scripts de teste da aplicao _ views: interface grfica da aplicao

49

2.6.9.1. ORM no Yii

O Yii fornece uma camada ORM na forma do padro Active Record (AR). O AR (em portugus: Registro Ativo) um esquema padro usado para acessar o banco de dados abstrato usando orientao a objetos. Ele mapeia as tabelas em classes, linhas em objetos e colunas em propriedades de classe. Ele tambm abriga a lgica de negcios necessria para ser aplicada a esses dados. O resultado disto uma classe que definir tudo o que ser escrito e lido em nosso banco de dados. Cada instncia de uma classe AR representa uma nica linha em uma tabela do banco de dados. O AR gera as instrues em SQL necessrias para criar, ler, atualizar e excluir dados. Ele tambm permite ao desenvolvedor acessar os dados armazenados no banco de dados de forma orientada a objetos. Com isso no precisamos escrever qualquer cdigo em SQL ou outra forma de lidar com o banco de dados. Um exemplo seria usar a AR para operar em um site que contm postagens, cujo ID interno 15 tambm usado como chave primria da tabela. Primeiramente ele recupera a postagem usando a chave primria. Logo depois ele muda o ttulo e as atualizaes do banco de dados para salvar as alteraes: $post=Post::model()->findByPk(15); $post->title='Postagem_15'; $post->save(); O AR no Yii tambm se integra perfeitamente com muitos outros aspectos da estrutura do Yii. H muitos campos de formulrio auxiliares de entrada que ligam diretamente para seus respectivos atributos de classe. Desta maneira, o AR extrai os valores dos campos do formulrio de entrada diretamente para o Model (MVC). Ele tambm suporta validao automtica de dados, e se a validao falhar a classe View do Yii facilmente exibir os erros de validao para o usurio. [WIN 12]

2.6.9.2. MVC no Yii

Como citado antes, o Yii um framework que suporta o padro MVC e fornece uma clara estrutura de diretrio para cada Model, View e Controller. [WIN 12] Model: um Model no Yii representa a informao e regras de negcio, responsvel pela manuteno do estado, e deve encapsular estas regras que se aplicam aos dados que definem este estado. Pode ser qualquer instncia da classe CModel ou de suas classes subjacentes. Os dados que compem os atributos na classe de Model podem ser obtidos a partir de uma

50

linha de uma tabela de banco de dados ou dos campos de um formulrio de entrada do usurio. A classe de Model normalmente composta de atributos de dados que podem ser validados com um conjunto de regras definidas. Dois tipos de Modelos so utilizados pelo Yii, o modelo de formulrio (classe CFormModel) e o Registro Ativo (classe CActiveRecord). Ambos se estendem desde a classe base CModel. A classe CFormModel representa um modelo de dados que coleta entradas de formulrio HTML. Ela engloba toda a lgica para a validao do campo de formulrio. E ento armazena esses dados na memria ou, com a ajuda de um modelo de Registro Ativo, que armazena os dados em um banco de dados. A classe CActiveRecord envolve todo o esquema do AR, propriamente dito anteriormente. View: uma View no Yii contm os elementos da User Interface (UI), como texto, cones e campos de formulrio. Construdo em HTML e pode conter declaraes em cdigo PHP. responsvel por fazer esse processamento, na maioria das vezes, com base nos dados do Model. As declaraes PHP dentro do View na maioria das vezes so dos tipos: Condicional Mtodos auxiliares de classe HTML Declaraes de repetio Referem-se a outros elementos da UI Widgets

Controller: no Yii o Controller uma instncia de CController ou uma de suas classes subjacentes, ele gerencia comunicao entre Model e o View e cuida da validao e da filtragem de dados. O Controller o responsvel pelo tratamento de uma solicitao encaminhada pelo usurio, interagindo com o Model, e instruindo o View a fim de atualizar e exibir os dados adequadamente. Juntamente com o esquema MVC, o Yii tambm trabalha com outro mtodo para a execuo dos processos requisitados pelo usurio, chamado aplicao (application). A aplicao recebe a solicitao e a envia para um controlador adequado para ser processada. Quando nos referimos ao Controller no Yii, h muito mais processos envolvidos do que apenas chamar o Model e renderizar as Views. As classes do Controller podem gerenciar servios para fornecer pr e ps-processamento sofisticado sobre os pedidos, implementar regras bsicas de controle de acesso para limitar o acesso a certas aes, gerenciar o layout de todo o aplicativo e repassar a renderizao dos arquivos, gerenciar a paginao de dados e muitas outras funes. [WIN 12]

51

Como mostrado na figura abaixo:

Figura 17Estrutura MVC Fonte: Autoria prpria, baseada na imagem: <http://www.yiiframework.com/tutorial/image?type=guide&version=1.1&lang=pt&file=structure.png http://www.yiiframework.com/tutorial/image?type=guide&version=1.1&lang=pt&file=structure.png Acessado http://www.yiiframework.com/tutorial/image?type=guide&version=1.1&lang=pt&file=structure.png>. em 28/11/2013.

Um m esquema MVC no framework Yii, uma solicitao web tem em geralmente o seguinte ciclo de vida: 1. O navegador envia um pedido para o servidor web, este recebido pelo roteador 2. O roteador analisa o pedido e decide em qual lugar da aplicao deve ser encaminhado, 3. Muitas vezes o roteador identifica um mtodo de ao especfico dentro de de uma classe do Controller, ao qual o pedido repassado. 4. O Controller processa o pedido e provavelmente interage com o Model para realizar outra lgica de negcios necessria. 5. Dependendo das regras do Model, este prepara os dados e os encaminha para o View. 6. O View formata os dados para ficarem de acordo com o layout e devolve ao navegador para exibio

2.6.10. Ligao do Yii com o banco de dados

O Yii fornece uma a gama de utilidades para a programao em banco de dados. Os Data Access Objects (DAO) do Yii so construdos em cima da extenso PHP Data Objects (PDO). [WIN 12]

2.6.10.1. DAO

DAO: (em portugus, Objeto de Acesso aos Dados) Esta uma camada de abstrao de base de dados, utilizada para fazer a conexo entre os objetos da camada Model e a persistncia destes no banco, separando as regras de negcios (MVC) das regras de acesso a banco de dados. Porm, o DAO pode ser usado fora do modelo MVC, embora no seja recomendado.

52

Todos os SGBDRs so encobertos por trs de uma nica interface. Desta maneira, a base de dados pode permanecer independente e as aplicaes desenvolvidas usando DAO tambm podem ser facilmente trocadas para usar outros SGBDRs. [WIN 12]

2.6.10.2. PDO

PDO: (em portugus: Objeto de dados PHP) uma classe exclusiva da linguagem PHP. Cria uma camada de abstrao dos drivers que fazem a conexo entre a aplicao em PHP e a sua persistncia em um banco de dados relacional. Isso permite que, com poucas configuraes o usurio transfira toda a sua aplicao para um novo SGBDR. [WIN 12]

2.6.10.3. Diferena entre DAO e PDO

DAO um objeto de acesso direto aos dados e PDO um objeto de dados. Com esse esquema a classe DAO utiliza o PDO para entregar os dados do objeto em questo. [WIN 12]

53

3 METODOLOGIA

Atravs de pesquisas bibliogrficas foram colhidas informaes referentes ao nvel de segurana dos algoritmos hash MD5, SHA1 e Blowfish. Com isso foi realizado um levantamento dos riscos e vulnerabilidades contidos nestes algoritmos. A pesquisa principal realizada foi a exploratria com anlise qualitativa. Logo em seguida, foi realizada a pesquisa experimental, onde foram feitos alguns testes para constatar se existiam vulnerabilidades nos algoritmos acima citados, dando assim mais nfase pesquisa anterior. A estratgia utilizada foi a pesquisa metodolgica aplicada ao objeto, como a anlise documental e observao direta. Tambm foram realizadas pesquisas para comparar e escolher qual o melhor framework atual do mercado para se trabalhar, em relao a diversos aspectos funcionais. O tratamento e anlise dos dados foram realizados sobre o contedo estudado, onde anlise de risco ser realizada baseando-se na norma ABNT NBR ISO/IEC 17799:2005.

Os pontos-chave investigados e avaliados foram: 1 - Fontes indicativas de que os algoritmos MD5 e SHA1 so vulnerveis 2 - Dificuldade para decifrar as senhas criptografadas com os algoritmos em ambiente de teste

3.1. DESENVOLVIMENTO DE APLICAO WEB COM ACESSO A BANCOS DE DADOS

3.2. DEFINIO DO AMBIENTE DE TESTES

Ser utilizado um Desk Server para ser o servidor web de testes tendo em vista que no foi possvel ter acesso a um servidor de produo real, tambm pelo motivo que para nossa aplicao web de demonstrao no seria necessrio uma mquina to robusta. Com nosso servidor em funcionamento poderemos analisar os algoritmos de criptografia mais utilizados e fazer um estudo prtico comparativo entre as situaes possveis de invaso. Para demonstrao do desempenho do algoritmo Blowfish configurado no framework Yii, criaremos uma aplicao web qualquer que exija login com autenticao e funes para criar e atualizar usurios. Para facilitar todos os processos, utilizaremos a ferramenta WAMP, que j tem em sua estrutura as aplicaes, Servidor Web Apache, PHP5, MySQL e PhpMyAdmin, necessrias para o funcionamento de um servidor web. Com esse grupo de ferramentas rodando em conjunto, poderemos por em prtica nosso projeto, um prottipo funcional de uma estrutura de aplicao web que nos mostre especificamente o envio e armazenamento de senha no banco com todas as seguintes possibilidades:

54

Sem criptografia Utilizando o algoritmo nativo SHA1 Utilizando o algoritmo nativo MD5 Utilizando o algoritmo Blowfish

3.2.1. Hardware utilizado

Processador: Pentium(R) Dual Core T4300 @ 2.10Ghz Placame: Intel JAL50 LA-4105P - Socket 478 Memria RAM: 4 GB DDR3 Disco Rgido: WD Scorpio Black - WD3200BEKT - SATA - 320 GB Placa de Rede: NIC Fast Ethernet PCI-E Realtek Internet: Speedy 5 MB

3.2.2. Softwares utilizados

Sistema operacional: Windows Seven Ultimate - 64 bits Servidor Web: Plataforma: WampServer verso 2.4 Apache - verso 2.2.4 PHP verso 5.4.12 MySQL verso 5.6.12 PhpMyAdmin verso 4.0.4 Framework PHP: Yii Framework verso 1.1.14

3.3. PR-REQUISITOS DO FRAMEWORK YII

Para executar uma aplicao Web que utilize o Yii, o usurio precisar de um servidor Web com suporte a PHP 5.1.0 ou superior. O Yii no precisa ser instalado em um diretrio acessvel Web. Uma aplicao Yii tem uma entrada de script que normalmente o nico arquivo que precisa ser exposto para os usurios da Web. Outros scripts de PHP, incluindo os do Yii, devem ter o acesso protegido, uma vez que podem ser explorados por malfeitores.

55

3.4. CRIAO DA APLICAO WEB

Instalando o framework Yii

Baixe a aplicao Yii no site oficial, no endereo: http://www.yiiframework.com. Aps isso descompacte o arquivo, entre na pasta descompactada selecione todos os arquivos, copie e cole dentro do diretrio onde o Wamp foi instalado, como no exemplo abaixo:

Figura 18Instalao Yii framework Fonte: Instalao Yii framework

56

1. Edite o arquivo yiic.bat no diretrio c:/wamp/framework/, no final do arquivo, insira o caminho c:\wamp\bin\php\ antes de php5.4.16

Figura 19Configurao Yii Editando arquivo .bat do Yii Fonte: Instalao Yii framework

2. No programa Executar do Windows (tecla de atalho do Windows + r), digite CMD e pressione a tecla Enter, no CMD digite o comando abaixo:

c:\wamp\framework\yiic webapp c:\wamp\www\site_fatec


Figura 20Criando uma aplicao web Fonte: Instalao Yii framework

Obs. Utilizaremos o nome site_fatec para referenciarmos a nossa aplicao web. Aps este comando o Yii ir criar toda uma estrutura pr-configurada e pronta para apresentao ao usurio, que ficar armazenada dentro do diretrio web, em nosso caso c:\wamp\www. Nesse diretrio conter os subdiretrios listados abaixo:

Assets Css Images Protected o Comands o Components o Config o Controllers o Data o Extensions o Messages

57

o Migrations o Models o Runtime o Tests o Vendor o Views Themes

Obs. Estes foram descritos anteriormente no tpico Como o Yii funciona?

3.5. TESTE

Para testar abra um browser e digite localhost/site_fatec Se tudo foi seguido corretamente, corretamente dever aparecer a imagem abaixo:

Figura 21Testando Testando a aplicao web Fonte: Instalao Yii framework

58

3.6. ESTRUTURA DO BANCO DE DADOS

3.6.1. Criao do banco de dados no MySQL Criando o banco pelo phpMyAdmin 1. Acesse o endereo: http://localhost/phpmyadmin/ 2. Entre com o usurio root e com a senha em branco 3. Clique na aba Base de Dados, depois, no campo Create database digite o nome do banco, que no nosso caso site_fatec, ento clique no boto Criar

Figura 22Aplicao web Criando banco de dados Fonte: PhpMyAdmin

Criando o banco por linha de comando: 1. Acesse o endereo: http://localhost/phpmyadmin/ 2. Entre com o usurio root e com a senha em branco 3. Clique na aba SQL, depois, no campo principal digite o cdigo abaixo, ento clique no boto Executar

CREATE DATABASE site_fatec;

59

3.6.2. Criao das tabelas no MySQL Tabela User No PhpMyAdmin clique na aba SQL, depois, no campo principal digite o cdigo abaixo, ento clique no boto Executar USE site_fatec; CREATE TABLE `user` ( `id` INTEGER NOT NULL auto_increment, `username` varchar(30) NOT NULL, `password` varchar(60) NOT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; Nota: Sempre configure o parmetro senha para CHAR(60) ou VARCHAR(60), pois a funo Crypt retornar este tamanho.

3.7. CONFIGURANDO O YII PARA INTERAGIR COM BANCO CRIADO NO MYSQL

Acesse o arquivo main.php no diretrio c:\wamp\www\site_fatec\protected\config\, e comente o bloco em que est a configurao para o SQLite que vem como padro, como no exemplo abaixo:
/* 'db'=>array( connectionString'=>'sqlite:'.dirname(__FILE__).'/../data/testdrive.db', ), */

Descomente o bloco de cdigo para iterao com o MySQL e coloque o nome da sua base de dados na linha: mysql:host=localhost;dbname=site_fatec, como no exemplo abaixo.
'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=site_fatec', 'emulatePrepare' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8', ),

60

3.7.1. Gerao da estrutura MVC

No programa Executar do Windows (tecla de atalho do Windows + r), digite CMD e pressione Enter, execute os comandos abaixo para criar a estrutura da aplicao: c:\wamp\framework\yiic yiic shell c:\wamp\www\site_fatec\index.php
Figura 23Configurao Yii Acessando o shell do Yii Fonte: Prompt de comando do Windows

Digite model + nome da tabela, pressione a tecla Enter para gerar o MODEL de uma tabela Exemplo de sada do model:

Figura 24Configurao Yii Criando o Model de uma tabela Fonte: Prompt de comando do Windows

Digite crud + nome da tabela, pressione a tecla Enter para gerar o VIEW/CONTROLLER de uma tabela Exemplo de sada do crud:

Figura 25Configurao Yii Criando o CRUD de uma tabela Fonte: Prompt de comando do Windows

Obs. de suma importncia que seja realizado na sequncia: primeiro gerar o MODEL, depois o CRUD.

61

3.7.2. Personalizar o menu da pgina principal

Personalizar o menu da pgina principal, para acessar as tabelas com as funes do CRUD. Edite o arquivo main.php no diretrio c:\wamp\www\site_fatec\protected\views\layouts\ Em label coloque o nome que deseja que aparea no menu e em array digite o nome da tabela que deseja interagir.

Exemplo do cdigo atualizado (em destaque):

<?php $this->widget('zii.widgets.CMenu',array('items'=>array( array('label'=>'Home', 'url'=>array('/site/index')), array('label'=>'Usuario', 'url'=>array('/user')), array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest), array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest) ),)); ?>

62

3.7.3. Alterando o mtodo de autenticao

1. Acesse seu web site pelo endereo http://localhost/site_fatec e faa login com o usurio admin e com a senha admin. 2. Edite o arquivo userIdentity.php no diretrio c:\wamp\www\site_fatec\protected\components\, troque todo cdigo existente por este:
<?php Class UserIdentity extends CUserIdentity { private $_id; public function authenticate() { $record=User::model()->findByAttributes(array('username'=>$this->username)); if($record===null) $this->errorCode=self::ERROR_USERNAME_INVALID; else if((crypt($this->password, $record->password))!==$record->password){ $this->errorCode=self::ERROR_PASSWORD_INVALID; } else { $this->_id=$record->id; $this->username=$record->username; $this->errorCode=self::ERROR_NONE; } return $this->errorCode==self::ERROR_NONE; } public function getId() { return $this->_id; }}

3.7.4. Configurando a funo bCrypt

Configurando a funo bCrypt para quando os usurios forem criados ou atualizados a senha seja criptografada com o algoritmo Blowfish e enviada para o banco de dados. Edite o arquivo main.php no diretrio c:\wamp\www\site_fatec\protected\config\, dentro de 'import'=>array insira esta linha 'application.vendor.*', Exemplo do cdigo atualizado (em destaque):
'import'=>array(

'application.vendor.*',
'application.models.*', 'application.components.*', ),

63

Crie o arquivo bCrypt.php no diretrio c\wamp\www\site_fatec\protected\vendor\, inserindo o cdigo abaixo dentro do arquivo criado:

<?php class bCrypt { private $rounds; private $prefix; public function __construct($prefix = '', $rounds = 12) { if(CRYPT_BLOWFISH != 1) { throw new Exception("bcrypt not supported in this installation. See http://php.net/crypt"); } $this->rounds = $rounds; $this->prefix = $prefix; } public function hash($input) { $hash = crypt($input, $this->getSalt()); if(strlen($hash) > 13) return $hash; return false; } public function verify($input, $existingHash) { $hash = crypt($input, $existingHash); return $hash === $existingHash; } private function getSalt() { returnsprintf('$2a$%02d$%s', $this->rounds, substr(strtr(base64_encode($this->getBytes()), '+', '.'), 0, 22)); } private function getBytes() { $bytes = ''; if(function_exists('openssl_random_pseudo_bytes') && (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')) { // OpenSSL slow on Win $bytes = openssl_random_pseudo_bytes(18); } if($bytes === '' &&is_readable('/dev/urandom') && ($hRand = @fopen('/dev/urandom', 'rb')) !== FALSE) { $bytes = fread($hRand, 18); fclose($hRand); } if($bytes === '') { $key = uniqid($this->prefix, true); for($i = 0; $i < 12; $i++) { $bytes = hash_hmac('sha512', microtime() . $bytes, $key, true); usleep(10); } } return $bytes; } } ?>

64

3.7.5. Validando usurio e senha no formato Blowfish

Edite o arquivo user.php no diretrio c:\wamp\www\site_fatec\protected\models\, introduza estes blocos de cdigo no final do arquivo user.php, antes do ltimo }.

public function validatePassword($password) { return $this->password = $this->encrypt($this->password)===$this->password; }

protected function afterValidate() { $this->password = $this->encrypt($this->password); return parent::afterValidate(); }

public function encrypt($value) { $enc = NEW bCrypt(); return $enc->hash($value); }

3.7.6. Testando o novo mtodo de autenticao do web site

1. Com usurio Admin logado, clique na aba Usuario, depois clique no link Create. 2. No campo user, digite o nome do usurio que deseja criar e no campo password digite a senha desejada. 3. Clique em Create 4. Clique em logoff e faa login com o novo usurio e senha para testar.

65

3.8. LINHA DE TRABALHO

Nesta sesso aplicaremos todo o conceito de segurana mencionado nos captulos anteriores com a implementao dos algoritmos de criptografia sobre nossas informaes de login que ficaro armazenados no banco de dados. Para demonstrar o objetivo deste trabalho, criaremos quatro possibilidades para salvar as senhas de autenticao no banco de dados. Aps a criao dos usurios e senhas utilizaremos algumas ferramentas e mtodos para testar a dificuldade de decifrao das senhas e vulnerabilidade dos algoritmos de criptografia citados acima. Nota: Para cifrar as senhas com os algoritmos MD5 e SHA1 utilizamos as funes nativas do MySQL. No PhpMyAdmin criamos os usurios e suas senhas manualmente e na coluna da senha selecionamos a funo do algoritmo escolhido para gerar o hash da mesma.

3.8.1. VISUALIZAO DOS USURIOS E SENHAS CRIADOS

Conforme demonstrado neste capitulo, criamos quatro tipos de usurios, cada um com a senha 1234 cifrada com um algoritmo diferente, como no esquema abaixo: Sem criptografia Com criptografia SHA1 Com criptografia MD5 Com criptografia Blowfish Para visualizar como as senhas criptografadas foram armazenadas no banco de dados, seguimos os seguintes passos: 1. Acessar o endereo: http://localhost/phpmyadmin/ 2. Entrar com o usurio root e com a senha em branco 3. No canto esquerdo, clicar no smbolo + do banco site_fatec, depois, clique na tabela user Na tela mostrar cada usurio criado e sua respectiva senha no formato em que foi criptografada (campo password). Veremos abaixo cada uma das situaes.

66

Autenticao sem nenhum algoritmo de criptografia (texto claro)

Figura 26Senha Senha no criptografada Fonte: PhpMyAdmin

Autenticao com o algoritmo nativo SHA1

Figura 27Senha Senha cifrada com o algoritmo SHA1 Fonte: PhpMyAdmin

Autenticao com o algoritmo nativo MD5

Figura 28Senha Senha cifrada com o algoritmo MD5 Fonte: PhpMyAdmin

Autenticao com o algoritmo Blowfish

Figura 29Senha Senha cifrada com o algoritmo Blowfish Fonte: PhpMyAdmin

67

3.8.2. TESTANDO A SEGURANA DOS ALGORITIMOS SHA1, MD5 E BLOWFISH

Neste projeto utilizaremos apenas uma das da demais tcnicas para decifrar os algoritmos SHA1 e MD5. Esta tcnica baseia-se baseia em sites que contm uma lista gigantesca de senhas e seus respectivos hashes armazenados em seus bancos de dados. Sendo assim, inserimos o hash da senha que queremos obter no campo de busca do site e se existir este hash armazenado, o site retornar sua senha originadora. Um exemplo destes sites o MD5 MY-addr, MY addr, acessado a partir do link: http://md5.my-addr.com/md5_decrypt addr.com/md5_decrypt-md5_cracker_online/md5_decoder_tool.php nline/md5_decoder_tool.php. Realizamos testes com vrias senhas comuns, todos os hashes retornaram a senha original. Uma dessas senhas foi senha123, que muitas pessoas utilizam. Criptografamos ela em nosso banco de dados MySQL e gerou o hash e7d80ffeefa212b7c5c55700e4f7193e, 212b7c5c55700e4f7193e, inserimos este hash no campo e consulta do site e ele nos devolveu a mesma senha original o em questo de segundos. De acordo com o site, o mesmo possu quase cinco bilhes de hashes MD5 armazenados com suas respectivas chaves originais. origina

Figura 30Decifrao

do hash MD5 com o MD5MyAddr

Fonte: <http://md5.my-addr.com/md5_decrypt addr.com/md5_decrypt-md5_cracker_online/md5_decoder_tool.php>. md5_cracker_online/md5_decoder_tool.php>. Acessado em 15/09/2013.

Um segundo site para decifrar hashes MD5 e SHA1 o MD5Decrypter encontrado no endereo http://md5decrypter.co.uk/. http://md5decrypter.co.uk/ Este nove vezes mais eficiente iciente que o primeiro, pois, tem te atualmente em sua base de dados aproximadamente 44 bi de hashes e suas respectivas senhas armazenadas.

68

Realizamos outro teste, porm, neste utilizamos hashes do tipo SHA1, testamos vrias senhas, uma delas foi administrador, que muitas pessoas utilizam. Criptografamos ela em nosso banco de dados MySQL e gerou o hash 9DBF7C1488382487931D10235FC84A74BFF5D2F4, inserimos este hash no campo e consulta do site e ele nos devolveu a mesma senha original tambm em questo de segundos.

Figura 31Decifrao

do hash SHA1 com o MD5Decrypter

Fonte: <http://md5decrypter.co.uk/>>. Acessado em 15/09/2013.

Realizamos testes com outras senhas tais como: superman, administrador1234, 10203040506070, w0man1, entre outras. A maioria das senhas que testamos foi encontrada com sucesso. Por ltimo, criptografamos as mesmas duas senhas utilizadas, porm, ao invs dos algoritmos MD5 e SHA1, utilizamos o Blowfish. Alm de realizarmos os testes de busca de hash nos sites anteriores, tambm os fizemos em outros sites que tm a mesma funo. O resultado foi que nenhum deles conseguiu decifrar qualquer senha criptografada com o algoritmo Blowfish.

69

4 DISCUSSO E RESULTADOS

Atualmente a segurana da informao um tema de extrema importncia no ramo computacional, principalmente na estruturao de aplicaes web, que tero seus dados o tempo todo trafegando pela rede. No somente para organizaes, mas tambm para indivduos comuns que utilizam aplicaes web para diversos fins. A cada dia que passa fica mais difcil proteger a integridade, confidencialidade, disponibilidade, autenticidade e irrevogabilidade de nossos dados. Neste contexto, o ideal utilizar criptografia com alto nvel de segurana para manter estes dados confidenciais a salvo contra malfeitores. Verificamos que os algoritmos SHA1 e MD5 foram criados para hashing genrico, pois, tinham que ser rpidos para poder criptografar desde arquivos de texto at dados bem mais pesados, no especificamente senhas. Estes algoritmos usam pouca memria e fazem operaes aritmticas de 32 bits, que uma das maiores especialidades das Unidades de Processamento Grfico (GPU). Isso se tornou um problema, pois, muitas organizaes utilizam estes algoritmos, que esto ficando obsoletos, para guardar nossos dados sigilosos. Um algoritmo robusto deve levar tanto tempo para ser decifrado que se tornaria impraticvel consegui-lo, tempo este avaliado em milhares de anos e ainda assim com os melhores computadores trabalhando em conjunto em modo cluster. O Blowfish foi especificamente criado para o atributo senha e tem um fator de dificuldade (custo) varivel que pode ser alterado para compensar a evoluo do poder de processamento. Isso significa que podemos aumentar o grau de complexidade do algoritmo quando for necessrio, mudando apenas uma constante do seu cdigo fonte, com isso acompanhando a evoluo computacional. Outro ponto positivo que no h registros de que o Blowfish tenha sido decifrado.

4.1. DIFICULDADES E LIMITAES ENCONTRADAS

Percebemos que existe uma escassez do material de ajuda em portugus (e at mesmo de ingls), detalhando a implementao do algoritmo blowfish pelo framework Yii. Dificultando assim o processo de aplicao do framework para os usurios que gostariam de utilizar ou at mesmo testar para fins de aprendizado.

70

4.2. INDICADORES ANALISADOS

Os indicadores analisados foram pesquisas relacionadas ao nvel de segurana dos algoritmos de criptografia MD5 e SHA1, que so os mais utilizados atualmente. Foi verificado que esses padres de algoritmos mundialmente utilizados esto se tornando ineficientes, pelo fato de existir hoje uma gama de ferramentas e tcnicas para decifrar senhas criptografadas por esses algoritmos. Com uma mquina usual conseguimos testar milhares de combinaes por segundo. Tanto MD5 com SHA1 so funes de cifrao de caminho nico, ou seja, s possvel cifrar e no h funo para decifrar, porm, como j havamos explicado, existem diversas tcnicas para gerar e comparar senhas criptografadas com estes algoritmos. Outro indicador que foi a principal constatao de que esses algoritmos esto ultrapassados que nos sites oficiais da Microsoft e do MySQL, foi divulgado o comunicado da substituio destes algoritmos, que eram utilizados na base de suas aplicaes. Tambm no site oficial do PHP, existem informativos de que no recomendvel a utilizao dos algoritmos MD5 e SHA1 por serem vulnerveis.

Figura 32Comunicado Microsoft Fonte: <http://technet.microsoft.com/pt-br/security/advisory/2862973?altTemplate=SecurityAdvisoryPF>. Acessado em 28/11/2013.

71

Figura 33Comunicado PHP Fonte: <http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash>. Acessado em 28/11/2013.

Alm das pesquisas bibliogrficas realizamos diversos testes para comprovar na prtica se realmente eram condizentes as informaes obtidas nas pesquisas. Criamos diversas situaes onde os algoritmos Md5 e SHA1 se mostraram ineficazes em vrios momentos, somando ao fato de que geralmente as pessoas utilizam senhas fracas e comuns, fator que facilita ainda mais a descoberta desta senha. J o algoritmo Blowfish alm de ser altamente complexo, possui mecanismos que dificultam e impedem a decifrao de uma senha, mesmo que esta seja fraca. Funes prprias como o custo e o salto ajudam a reforar a segurana do algoritmo.

72

5 CONSIDERAES FINAIS

Aplicamos neste trabalho conceitos sobre segurana da informao em frameworks para desenvolvimento web com utilizao de algoritmos de criptografia. Classificamos e descrevemos os principais componentes para se conseguir implementar o framework Yii baseado na estrutura MVC, juntamente com o algoritmo de criptografia Blowfish, que altamente robusto. Finalizado o processo de anlise dos resultados obtidos atravs das ferramentas para decifrao de senhas criptografadas com os algoritmos MD5, SHA1 e Blowfish para as situaes propostas neste trabalho de concluso de curso. Claramente pde-se observar que em um ambiente de desenvolvimento web, alguns algoritmos de criptografia se tornaram falhos, devido ao avano computacional, ferramentas sofisticadas e novas tcnicas que os malfeitores esto utilizando para acessar essas informaes. O MySQL conta tambm com o algoritmo de criptografia AES, que seguro o suficiente para guardar nossos dados, porm, estamos disponibilizando mais esta alternativa, para no termos apenas uma opo de escolha de algoritmo de criptografia segura. Mostramos que com a alterao no cdigo das classes do framework Yii, conseguimos implantar um esquema de criptografia reforada, o que faz uma total diferena na questo de assegurar que a identificao de login e outros dados no sero descobertos por malfeitores. Com isso, conseguimos comprovar a eficincia, eficcia e facilidade de configurao do Blowfish, um dos algoritmos mais conceituados no mercado. Pela experincia vivida neste projeto conclumos que, altamente recomendado utilizar o algoritmo de criptografia Blowfish para substituir outros algoritmos que j vm empacotados como nativos do MySQL e que so vulnerveis, caso do MD5 e SHA1.

73

TRABALHOS FUTUROS

Neste trabalho, foram realizadas pesquisas relacionadas s questes de segurana de algoritmos hashes amplamente conhecidos e utilizados para cifrar senhas de login em aplicaes web. Foram utilizados o framework Yii juntamente com o banco de dados MySQL para a criao de uma aplicao web. Neste caso as falhas de segurana estudadas foram vulnerabilidades dos algoritmos MD5 e SHA1. Para dar continuidade a este trabalho seria interessante realizar trabalhos futuros relacionados : Segurana da informao em redes Segurana da informao em banco de dados

Pois, para se obter a senha armazenada no banco de dados o malfeitor teria que conseguir o acesso rede, alm claro do acesso ao banco. Ento os trabalhos futuros direcionados a esses temas colaborariam mais ainda para a segurana de dados confidenciais, indicando as possveis vulnerabilidades e fornecendo ferramentas e tcnicas para anular ou reduzir os riscos do acesso no autorizado dos malfeitores.

74

ANEXO A: LISTA DE SITES PARA DECIFRAR HASHES MD5 E SHA1 http://bokehman.com/cracker/ http://code.google.com/p/hash-identifier http://hackerscity.free.fr/ http://ice.breaker.free.fr/ http://ivdb.org/search/md5/ http://linardy.com/md5.php http://md5.benramsey.com/ http://md5.c.la/ http://md5.idiobase.de/ http://md5.khrone.pl/ http://md5.my-addr.com/ http://md5.netsons.org/ http://md5.rednoize.com/ http://md5.wkeys.info/sigla.html/ http://md5.xpzone.de/ http://md5crack.it-helpnet.de/index.php?op=add http://md5search.deerme.org/ http://nz.md5.crysm.net/ http://passcracking.com/ http://passwordsecuritycenter.com/in...;products_id=7 http://rainbowcrack.com/ http://schwett.com/md5/ http://search.cpan.org/~blwood/Digest-MD5-Reverse-1.3/ http://sha1search.com/ http://shm.hard-core.pl/md5/ http://shm.pl/md5/ http://www.csthis.com/md5/index.php http://www.gdataonline.com/seekhash.php http://www.hashchecker.com/index.php?_sls=search_hash

75

http://www.hashreverse.com/ http://www.md5.org.cn/index_en.htm http://www.md5database.net/ http://www.md5-db.com/ http://www.md5decrypt.com/ http://www.md5decrypter.com/ http://www.md5encryption.com/ http://www.md5this.com/ http://www.milw0rm.com/md5/ http://www.mmkey.com/md5/ http://www.neeao.com/md5/ http://www.rainbowcrack-online.com/ http://www.securitydb.org/cracker/ http://www.securitystats.com/tools/hashcrack.php http://www.tmto.org http://www.tydal.nu/article/md5-crack/ http://www.und0it.com/ http://www.xmd5.org/index_en.htm https://www.w4ck1ng.com/cracker/

76

REFERNCIAS

[ABNT 05] NORMA BRASILEIRA ABNT NBR ISO/IEC 17799:2005 Tecnologia da informao - Tcnicas desegurana Cdigo de prtica para a gesto da segurana da informao. - 2. ed.2005. 132 p.

[BUR 02] BURNETT, S.; PAINE, S; Criptografia e Segurana - O Guia Oficial RSA. Traduo Edson Furmankiewicz. Rio de Janeiro: Campus Ltda, 2002.

[FEI 73] FEISTEL, H.; Cryptographyand Computer Privacy. Scientific American. May 1973.

[KUR 08] KUROSE, J. F.; ROSS, K. W. Redes de Computadores e a Internet - Uma Abordagem Top-Down. Traduo Arlete Simille Marques. So Paulo: Pearson Education do Brasil. 2008

[SIL 06] SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S.;Sistema de Banco de Dados; Traduo Daniel Vieira. - 5. ed. Rio de Janeiro: Elsevier Editora Ltda, 2006. 781 p.

[STA 08] STALLINGS, William; Criptografia e segurana de redes - Princpios e prticas; Traduo Daniel Vieira. - 2. ed. So Paulo: Pearson Prentice Hall, 2008. 494 p.

[WIN 12] WINESETT, Jeffrey; Web Application Development with Yii and PHP. 2. ed. Birmingham: PacktPublishingLtd, 2012. 332 p.

Material obtido ou consultado na WEB

[APA 13] Apache Server. 2013 Disponvel em: <http://www.infowester.com/servapach.php>. Acessado 05/11/2013.

[ATAQ 10] Por que se preocupar com a segurana. Novembro, 2010 Disponvel em: <http://imasters.com.br/artigo/18556/>. Acessado 06/12/2013.

77

[BCRY 13] Funo Bcrypt. 2013 Disponvel em: <http://blog.thiagobelem.net/criptografando-senhas-no-php-usando-bcrypt-blowfish/>. Acessado 20/09/2013.

[CRIP 13] Introduo a criptografia. 2013 Disponvel em: < http://www.reocities.com/SiliconValley/park/2516/criptografia.pdf>. Acessado 13/11/2013.

[CRY 13] Crypt_Blowfishsecurityfixdetails. 2013 Disponvel em: <http://www.php.net/security/crypt_blowfish.php>. Acessado 17/09/2013.

[CRY 13-2] Funo Crypt. 2013 Disponvel em: <http://kithomepage.com/kit/tutorial/php/function.crypt.php>. Acessado 20/09/2013.

[CSI 12] Cartilha de Segurana para Internet. 2012. Disponvel em: <http://cartilha.cert.br/livro/cartilha-seguranca-internet.pdf>. Acessado em 20/10/2013.

[FRAM 13] Comparao dos melhores frameworks. 2013 Disponvel em: <http://iisit.org/Vol10/IISITv10p095-109Chao0092.pdf>. Acessado 06/12/2013.

[HACK 13] Tipos de ataques hackers. 2012 Disponvel em: <http://www.tecmundo.com.br/ataque-hacker/19600-os-4-ataques-hackers-mais-comuns-da-web. htm>. Acessado 26/11/2013.

[MD4 92] MD4. Abril, 1992 Disponvel em: <http://www.ietf.org/rfc/rfc1320.txt>. Acessado 25/11/2013.

[MD5 92] MD5. Abril, 1992 Disponvel em: <http://www.ietf.org/rfc/rfc1321.txt>. Acessado 25/11/2013.

78

[MYSQL 13] MySQL. 2013 Disponvel em: <http://www.mysql.com/>Acessado 05/11/2013.

[PHP 13] PHP5. 2013 Disponvel em: <http://php.net/manual/pt_BR/faq.migration5.php>Acessado 05/11/2013.

[SCH 13] SCHNEIER, Bruce; The BlowfishEncryptionAlgorithm. Disponvel em: <https://www.schneier.com/blowfish.html>. Acessado 05/08/2013.

[SHA1 01] SHA1. Setembro, 2001 Disponvel em: <http://www.ietf.org/rfc/rfc3174.txt>. Acessado 25/11/2013.

[TAN 02] TANENBAUM, Andrew S.; Computer Networks. Traduo VandenbergD. de Souza. 4. ed. 2002. 632 p. Disponvel em: <http://www-usr.inf.ufsm.br/~rose/Tanenbaum.pdf>. Acessado 16/09/2013.