TG Yii Framework

78
FACULDADE DE TECNOLOGIA DE CARAPICUÍBA ANTONIO CARLOS DE OLIVEIRA EVERTON CHAGAS WAGNER GUTIERREZ SEGURANÇA EM APLICAÇÕES WEB: IMPLEMENTAÇÃO DO ALGORITMO BLOWFISH NA AUTENTICAÇÃO DE USUÁRIOS EM AMBIENTE PHP COM SGBDR MYSQL TRABALHO DE GRADUAÇÃO Carapicuíba, 2013

Transcript of TG Yii Framework

Page 1: TG Yii Framework

FACULDADE DE TECNOLOGIA DE CARAPICUÍBA

ANTONIO CARLOS DE OLIVEIRA

EVERTON CHAGAS

WAGNER GUTIERREZ

SEGURANÇA EM APLICAÇÕES WEB: IMPLEMENTAÇÃO DO ALGORITMO BLOWFISH NA AUTENTICAÇÃO

DE USUÁRIOS EM AMBIENTE PHP COM SGBDR MYSQL

TRABALHO DE GRADUAÇÃO

Carapicuíba, 2013

Page 2: TG Yii Framework

ANTONIO CARLOS DE OLIVEIRA

EVERTON CHAGAS

WAGNER GUTIERREZ

SEGURANÇA EM APLICAÇÕES WEB: IMPLEMENTAÇÃO DO ALGORITMO BLOWFISH NA AUTENTICAÇÃO

DE USUÁRIOS EM AMBIENTE PHP COM SGBDR MYSQL

Trabalho apresentado como exigência para

obtenção do Título de Tecnólogo em Segurança

da Informação da Faculdade de Tecnologia de

Carapicuíba.

Orientador: Prof. Luciano Deluqui Vasques

Carapicuíba, 2013

Page 3: TG Yii Framework

ANTONIO CARLOS DE OLIVEIRA

EVERTON CHAGAS

WAGNER GUTIERREZ

SEGURANÇA EM APLICAÇÕES WEB IMPLEMENTAÇÃO DO ALGORITMO BLOWFISH NA AUTENTICAÇÃO

DE USUÁRIOS EM AMBIENTE PHP COM SGBDR MYSQL

Essa pesquisa foi julgada e aprovada para obtenção do Título de Tecnólogo em

Análise de Sistemas e Tecnologia da Informação, da Faculdade de Tecnologia

de Carapicuíba.

Carapicuíba, 11 de dezembro de 2013.

Prof. Dr. Walter Aloísio Santana

Diretor da Fatec - Carapicuíba

Banca examinadora

______________________________

Prof. Luciano Deluqui Vasques

______________________________

Profª. Patrícia Lima Rocha

______________________________

Prof. Renato Fava Martelli

Page 4: TG Yii Framework

“Dedicamos esse trabalho primeiramente a Deus Todo Poderoso, a todos nossos familiares (pais, irmãos e esposas), amigos e professores que nos instruíram e apoiaram para chegarmos até aqui, principalmente ao prof. Deluqui que nos deu uma direção em meio às dificuldades encontradas.”

Page 5: TG Yii Framework

“Uma pessoa inteligente resolve um problema, um sábio o previne.”

Albert Einstein

Page 6: TG Yii Framework

RESUMO

Devido ao avanço da tecnologia, houve um ganho significativo no desempenho dos componentes computacionais, tais como processador e memória RAM. Esse fato facilitou a execução de ações danosas realizadas por malfeitores, como por exemplo, no processo de decifrar informações sigilosas criptografadas. Pois, com um computador pessoal (Desktop) atual e utilizando técnicas 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 implementação do framework Yii para criação de uma aplicação web, juntamente como algoritmo de criptografia Blowfish, que proporcionará uma maior segurança contra invasão em sistemas de aplicações web que utilizam bancos de dados para armazenamento de senhas de seus respectivos usuários. Com isso pretende-se trocar os algoritmos nativos utilizados no MySQL (que de acordo com diversas pesquisas são vulneráveis) por um algoritmo mais robusto, alterando-se poucas linhas de código. Palavras-chave: Framework. Criptografia. Segurança em aplicações web.

Page 7: TG Yii Framework

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.

Page 8: TG Yii Framework

LISTA DE FIGURAS Figura 1–Cifrando um texto .......................................................................................................... 18

Figura 2–Algoritmo de Hash ......................................................................................................... 21

Figura 3–Função Crypt – Exemplo de entrada .............................................................................. 25

Figura 4–Função Crypt – Exemplo de saída ................................................................................. 25

Figura 5–Banco de dados – Modelo de abstração de dados .......................................................... 33

Figura 6–Banco de dados – Modelo de abstração de dados mais detalhado ................................. 33

Figura 7–Simbologia - Banco de dados – Modelo de abstração de dados .................................... 34

Figura 8–Modelo relacional........................................................................................................... 35

Figura 9–Modelo de entidade/relacionamento .............................................................................. 35

Figura 10–Modelo de dados baseado em objetos .......................................................................... 36

Figura 11–Modelo de dados semi-estruturado .............................................................................. 36

Figura 12–Modelo ORM ............................................................................................................... 40

Figura 13–Estrutura comum dos frameworks ............................................................................... 42

Figura 14–Comparação entre frameworks – Socialcompare ......................................................... 44

Figura15–Yii Framework .............................................................................................................. 46

Figura 16–Base do Yii ................................................................................................................... 47

Figura 17–Estrutura MVC ............................................................................................................. 51

Figura 18–Instalação Yii framework ............................................................................................. 55

Figura 19–Configuração Yii – Editando arquivo .bat do Yii ........................................................ 56

Figura 20–Criando uma aplicação web ......................................................................................... 56

Figura 21–Testando a aplicação web............................................................................................. 57

Figura 22–Aplicação web – Criando banco de dados ................................................................... 58

Figura 23–Configuração Yii – Acessando o shell do Yii .............................................................. 60

Figura 24–Configuração Yii – Criando o Model de uma tabela ................................................... 60

Figura 25–Configuração Yii – Criando o CRUD de uma tabela ................................................... 60

Figura 26–Senha não criptografada ............................................................................................... 66

Figura 27–Senha cifrada com o algoritmo SHA1 ......................................................................... 66

Figura 28–Senha cifrada com o algoritmo MD5 ........................................................................... 66

Figura 29–Senha cifrada com o algoritmo Blowfish ..................................................................... 66

Figura 30–Decifração do hash MD5 com o MD5MyAddr ........................................................... 67

Figura 31–Decifração do hash SHA1 com o MD5Decrypter ....................................................... 68

Figura 32–Comunicado Microsoft................................................................................................. 70

Figura 33–Comunicado PHP ......................................................................................................... 71

Page 9: TG Yii Framework

LISTA DE TABELAS

Tabela 1 – Tabela simples ............................................................................................................. 31 Tabela 2 – Visão dos dados ........................................................................................................... 32

Tabela 3 – Ligação entre tabelas 1 ................................................................................................ 37 Tabela 4 – Ligação entre tabelas 2 ................................................................................................ 38 Tabela 5 – Ligação entre tabelas 3 ................................................................................................ 38 Tabela 6 – Comparação entre frameworks .................................................................................... 45

Page 10: TG Yii Framework

LISTA DE ABREVIATURAS, SIGLAS E SÍMBOLOS

Abreviaturas CMD - Command Ex. = exemplo MB = Megabyte GB = Gigabyte GHz = Giga hertz TB = Terabyte p. = página Siglas ABNT - Associação Brasileira de Normas Técnicas AES - Advanced Encryption Standard API - Interface de Programação de Aplicativos AR - Active Record ASTI - Análise de Sistemas e Tecnologia da Informação CERT.br - Centro de Estudos, Resposta e Tratamento de Incidentes de Segurança 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 - Don’t 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

Page 11: TG Yii Framework

NASA - National Aeronautics and Space Administration NBR - Norma Brasileira OO - Orientação à Objetos ORM - Object-Relational Mapping PC - Personal Computer PDF - Portable Document Format PDO - PHP Data Object PHP - Hypertext Preprocessor PK - Primary Key POO - Programação 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 - Segurança da Informação 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 Informação UDP – User Datagram Protocol UI - User Interface WAMP - Acrônimo para a combinação: Windows, Apache, MySQL e PHP WEB - Termo utilizado para referenciar o WWW WWW - World Wide Web XML - Extensible Markup Language XOR - OR Exclusive (Programação) YII - Acrônimo de yes, representa os adjetivos fácil, eficiente e extensível Símbolos ® - Marca Registrada 1:1 = Um pra um 1:N = Um pra vários N:1 = Vários para um N:N = Vários para vários

Page 12: TG Yii Framework

SUMÁRIO 1 INTRODUÇÃO .......................................................................................................................... 14

1.1. OBJETIVO GERAL ........................................................................................................... 14

1.2. OBJETIVO ESPECÍFICO .................................................................................................. 15

1.3. JUSTIFICATIVA ............................................................................................................... 15

2 SEGURANÇA EM APLICAÇÕES WEB ................................................................................. 16

2.1. SEGURANÇA DA INFORMAÇÃO ................................................................................. 16

2.1.1. Segurança na internet................................................................................................... 17

2.1.2. Exploração de vulnerabilidades ................................................................................... 17

2.1.3. Contas e senhas ............................................................................................................ 18

2.2. CRIPTOGRAFIA ............................................................................................................... 18

2.2.1. Algoritmos de Chave Simétrica ................................................................................... 19

2.2.2. Algoritmos de Chave Assimétrica ............................................................................... 19

2.2.3. Função Hash ................................................................................................................ 20

2.2.4. Função Crypt ............................................................................................................... 23

2.3. TIPOS DE ATAQUES COMUNS ..................................................................................... 28

2.4. FERRAMENTAS E TÉCNICAS PARA DECIFRAR SENHAS ...................................... 30

2.5. BANCO DE DADOS ......................................................................................................... 31

2.5.1. Visão dos dados ........................................................................................................... 32

2.5.2. Abstração 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. História do Yii ............................................................................................................. 46

Page 13: TG Yii Framework

2.6.8. Características do Yii .................................................................................................. 46

2.6.9. Como o Yii Funciona? ................................................................................................. 48

2.6.10. Ligação do Yii com o banco de dados ....................................................................... 51

3 METODOLOGIA ....................................................................................................................... 53

3.1. DESENVOLVIMENTO DE APLICAÇÃO WEB COM ACESSO A BANCOS DE DADOS ..................................................................................................................................... 53

3.2. DEFINIÇÃO 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. CRIAÇÃO DA APLICAÇÃO WEB .................................................................................. 55

Instalando o framework Yii ................................................................................................... 55

3.5. TESTE ................................................................................................................................ 57

3.6. ESTRUTURA DO BANCO DE DADOS .......................................................................... 58

3.6.1. Criação do banco de dados no MySQL ....................................................................... 58

3.6.2. Criação das tabelas no MySQL ................................................................................... 59

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

3.7.1. Geração da estrutura MVC .......................................................................................... 60

3.7.2. Personalizar o menu da página principal ..................................................................... 61

3.7.3. Alterando o método de autenticação ........................................................................... 62

3.7.4. Configurando a função bCrypt .................................................................................... 62

3.7.5. Validando usuário e senha no formato Blowfish......................................................... 64

3.7.6. Testando o novo método de autenticação do web site ................................................. 64

3.8. LINHA DE TRABALHO ................................................................................................... 65

3.8.1. VISUALIZAÇÃO DOS USUÁRIOS E SENHAS CRIADOS ................................... 65

3.8.2. TESTANDO A SEGURANÇA DOS ALGORITIMOS SHA1, MD5 E BLOWFISH 67

4 DISCUSSÃO E RESULTADOS................................................................................................ 69

4.1. DIFICULDADES E LIMITAÇÕES ENCONTRADAS .................................................... 69

4.2. INDICADORES ANALISADOS ...................................................................................... 70

5 CONSIDERAÇÕES FINAIS ..................................................................................................... 72

TRABALHOS FUTUROS ............................................................................................................ 73

ANEXO A: LISTA DE SITES PARA DECIFRAR HASHES MD5 E SHA1 ............................. 74

REFERÊNCIAS ............................................................................................................................ 76

Page 14: TG Yii Framework

14

1 INTRODUÇÃO

Nestes últimos tempos houve um considerável aumento no número de aplicações web, desde sua utilização para sistemas complexos como CMS, e-commerce ou até mesmo para web sites caseiros.

Porém, ocorreu também a evolução 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 força de uma senha também conta muito para a dificuldade de decifração da mesma, porém, as pessoas que a utilizam, normalmente criam senhas fracas, fáceis para sua memorização, o que as tornam de fácil dedução, sendo esse é o principal fator para descobri-las, mesmo estando criptografadas.

Neste contexto, surge então a necessidade de escolher um algoritmo de criptografia altamente confiável para assegurar que dados confidenciais e valiosos estejam preservados contra ataques de malfeitores.

Este trabalho consiste em implantar da maneira mais simples possível o framework Yii, que incorpora o algoritmo de criptografia Blowfish, para então criar um modelo de aplicação web que servirá como base para projetos similares.

Este trabalho está dividido em capítulos da seguinte forma: O capítulo 1, contendo introdução, objetivos gerais, objetivos específicos e a justificativa. O capítulo 2 contém os conceitos básicos sobre de segurança da informação, banco de

dados, frameworks baseados nos padrões MVC com destaque para criptografia e seus principais algoritmos.

O capítulo 3, onde será mostrada toda a metodologia utilizada para criar um cenário de uma aplicação web feita com o framework Yii e integrada ao banco de dados MySQL.

No capítulo 4 são apresentadas análises e discussões a respeito deste trabalho, das pesquisas e testes realizados.

E por fim no capítulo 5 são apresentadas as conclusões e recomendações relacionadas a este estudo.

1.1. OBJETIVO GERAL

O objetivo geral deste trabalho é implementar um algoritmo de criptografia na sessão de login de uma aplicação web, com a pretensão de aumentar a segurança para as senhas que trafegarão pela rede e que ficarão armazenadas em um banco de dados.

Page 15: TG Yii Framework

15

1.2. OBJETIVO ESPECÍFICO

Criar uma aplicação web com todas as características de um sistema seguro e funcional, porém, sem as dificuldades e complexidade da criação de classes, funções e de outras configurações na linguagem PHP, o que necessitaria um longo tempo e experiência em programação Orientada a Objetos (OO). Por isso recomenda-se o uso de um framework para facilitar e tornar prático o processo de desenvolvimento de uma aplicação web.

Demonstrar por meio de ferramentas e métodos como decifrar senhas criptografadas pelos algoritmos SHA1 ou MD5 e substituí-los pelo robusto algoritmo de criptografia Blowfish.

1.3. JUSTIFICATIVA

Devido à falta de segurança nos ambientes de internet, é necessário que as rotinas de

autenticação em aplicações web sejam seguras o suficiente para impedir que malfeitores consigam decifrar as senhas criptografadas que protegem os dados confidenciais de login. Esta falta de segurança requer a utilização de um algoritmo de criptografia robusto.

Este trabalho destina-se aos profissionais do ramo de desenvolvimento de aplicações web e também a usuários comuns que tenham interesse em aprender conceitos básicos e importantes, relacionados ao tema deste projeto.

Page 16: TG Yii Framework

16

2 SEGURANÇA EM APLICAÇÕES WEB 2.1. SEGURANÇA DA INFORMAÇÃO

De acordo com a [ABNT 05], informação é um ativo essencial para os negócios de uma organização e necessita ser adequadamente protegido. Não somente para uma organização, a informação pode também pertencer a um individuo qualquer e pode ser armazenada eletronicamente, impressa, escrita em papel e transmitida por diversos meios.

Segurança da informação é a proteção da informação por meio da implementação de um conjunto de controles adequados, incluindo políticas, procedimentos, estruturas organizacionais e funções de software e hardware.

Segundo [STALLINGS 08], Ataques à segurança são classificados como: • Ataques passivos - que incluem leitura não autorizada de uma mensagem de arquivo e

análise de tráfego. • Ataques ativos - como modificação de mensagens ou arquivos e negação de serviço.

Um mecanismo de segurança é qualquer processo (ou um dispositivo incorporado a tal processo) projetado para detectar, impedir ou permitir a recuperação de um ataque à segurança. Alguns exemplos de mecanismos são algoritmos de criptografia, assinaturas digitais e protocolos de autenticação.

Os atributos que devem ser protegidos em segurança da informação são:

Autenticidade - propriedade que garante a origem e a identidade de quem está enviando a informação e que esta não foi alterada ao longo de um processo. Confidencialidade - propriedade que limita o acesso a informação somente para usuários autorizados pelo proprietário desta informação. Disponibilidade - propriedade que garante que a informação esteja sempre disponível para o uso, por aqueles usuários autorizados pelo proprietário da informação. Integridade - propriedade que garante que a informação manipulada mantenha todas as características originais estabelecidas pelo proprietário, incluindo controle de mudanças e garantia do seu ciclo de vida (nascimento, manutenção e destruição). Irrevogabilidade - propriedade que garante a impossibilidade de negar a autoria em relação a uma transação anteriormente feita.

Este trabalho irá explanar sobre segurança da informação no quesito confidencialidade da

senha de login, transmitida de uma aplicação web e armazenada em um banco de dados.

Page 17: TG Yii Framework

17

2.1.1. Segurança na internet

Atualmente a internet tornou-se indispensável para realização de diversas tarefas do dia-a-dia, desde a comunicação entre pessoas até a realização de transações bancarias.

De acordo com pesquisas, a maioria das pessoas tem uma falsa sensação de segurança, pensando que não serão alvos de ataques de malfeitores. Com essa sensação de segurança acabam não tomando as devidas precauções 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 estão expostos, para assim tomarem as medidas preventivas necessárias. [CSI 12]

Os tipos de ameaças podem ser: Naturais – Ameaças decorrentes de fenômenos da natureza, como incêndios naturais,

enchentes, terremotos, tempestades, poluição, etc. Involuntárias – Ameaças inconscientes, quase sempre causadas pelo desconhecimento.

Podem ser causados por acidentes, erros, falta de energia, etc. Voluntárias – Ameaças propositais causadas por agentes humanos como hackers,

invasores, espiões, ladrões, criadores e disseminadores de vírus de computador, incendiários. Neste trabalho o tipo de ameaça a ser explorada é a voluntária, os ataques deste tipo

normalmente ocorrem com diversos propósitos, visando diferentes alvos e usando variadas técnicas. Qualquer computador conectado a internet pode ser alvo.

Os motivos destes ataques vão de simples atos de diversão até a execução de ações criminosas. Um dos principais motivos de ataque é capturar e utilizar informações confidenciais de usuários para aplicar golpes. [CSI 12]

2.1.2. Exploração de vulnerabilidades

Exploração de vulnerabilidades pode ser vista como uma situação, que quando explorada por um malfeitor, pode resultar em uma violação de segurança.

Vulnerabilidades podem ser falhas de segurança no projeto, na implementação ou na configuração de softwares ou equipamentos de rede.

Neste trabalho a vulnerabilidade envolve os algoritmos de criptografia utilizados para a proteção da senha de login dos usuários de uma aplicação web. Este ataque acontece quando o malfeitor, utilizando-se de métodos e ferramentas sofisticadas consegue interceptar o envio dos dados ou acessar diretamente o banco onde estes dados ficam armazenados. [CSI 12]

Page 18: TG Yii Framework

2.1.3. Contas e senhas

Segundo [TANENBAUMidentificação única que representaatrelada a uma lista de controle de acesso

Existem 3 tipos de

� Aquilo que o usuárioindividuo.

Ex. Impressão digi� Aquilo que o usuário

Ex. Cartão de identificação, � Aquilo que o usuário

possa identificáEx. Senha, frase de segurança, etc Este último mecanismo

internet. [TAN 02] Neste trabalho o tipo de mecanismo de autenticação que será estudado será “

usuário sabe”, mais especificamente no fator senha. 2.2. CRIPTOGRAFIA

A palavra criptografia vem das palavras gregasque significam "escrita secreta". São técnicas em que aoriginal para outra ilegível, este processo é chamado cifragem.decifragem.

A informação é codificada usando uma fórmula (algoritmo), que também será utilizada depois para decodificar a mesma mensagem. a chave secreta não conseguirá

A mensagem original

Figura 1–Cifrando um texto

Fonte: Autoria própria, baseada na imagem

28/11/2013.

TANENBAUM 02], uma conta de usuário,como o próprio nome sugere, é uma que representa um usuário em um sistema ou serviço

atrelada a uma lista de controle de acesso define o que o usuário pode acessar

Existem 3 tipos de mecanismos de autenticação.

Aquilo que o usuário é: qualquer parte do corpo que possa identificar um

igital, identificação de retina, sequência de DNA, padrão de voz, Aquilo que o usuário tem: qualquer objeto que possa identificar um individuo.

Cartão de identificação, SecurityToken, software token ou telefone celularAquilo que o usuário sabe: uma informação que somente a pessoa saibapossa identificá-la.

Senha, frase de segurança, etc.

mecanismo é o mais utilizado para o acesso a serviços

trabalho o tipo de mecanismo de autenticação que será estudado será “sabe”, mais especificamente no fator senha.

A palavra criptografia vem das palavras gregas kryptós, "escondido" e gráphein, "escrita",ficam "escrita secreta". São técnicas em que a informação é transformada da sua for

original para outra ilegível, este processo é chamado cifragem. O processo inverso chama

A informação é codificada usando uma fórmula (algoritmo), que também será utilizada depois para decodificar a mesma mensagem. Portanto, após essa transformação

não conseguirá decifrá-la. [TAN 02]

original é chamada de "texto claro".

na imagem:<http://conteudo.imasters.com.br/4802/figura1.gif

18

ma conta de usuário,como o próprio nome sugere, é uma ou serviço. Uma conta de usuário

acessar ou modificar.

é: qualquer parte do corpo que possa identificar um

, sequência de DNA, padrão de voz, etc. tem: qualquer objeto que possa identificar um individuo.

oken ou telefone celular, etc. sabe: uma informação que somente a pessoa saiba e que

para o acesso a serviços disponibilizados na

trabalho o tipo de mecanismo de autenticação que será estudado será “Aquilo que o

kryptós, "escondido" e gráphein, "escrita", transformada da sua forma processo inverso chama-se

A informação é codificada usando uma fórmula (algoritmo), que também será utilizada Portanto, após essa transformação, quem não possuir

http://conteudo.imasters.com.br/4802/figura1.gif>.Acessado em

Page 19: TG Yii Framework

19

Criptografia é um ramo da matemática e parte da criptologia. A criptografia vai além da cifragem e decifragem. Criptoanálise é a técnica de tentar descobrir o conteúdo de mensagens cifradas, e seus praticantes são 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 são: chaves simétricas e chaves assimétricas, que serão explicadas no próximo tópico.

2.2.1. Algoritmos de Chave Simétrica

Algoritmos de Chave Simétrica, também conhecidos como Algoritmos de Chave Única, utilizam uma mesma chave tanto para cifrar como para decifrar uma informação. Os algoritmos simétricos exigem que a chave seja mantida em segredo, apenas quem a enviou e o receptor devêm possuí-la. Com isso, utilizar este método é um pouco complicado, pois, deve-se ter um canal seguro para transmitir a chave para o receptor. [STA 08] Algoritmos de Chave Simétrica em destaque

• AES (Rijndael) • Blowfish • MARS • RC6 • Serpent

2.2.2. Algoritmos de Chave Assimétrica

Algoritmos de Chave Assimétrica (chave-pública) utilizam chaves distintas, uma para cifrar e outra para decifrar uma informação, contudo, a chave para decifrar não pode ser conseguida apenas com a chave que cifrou a informação, porém, as duas têm relação entre si.

Nos algoritmos assimétricos, as chaves são sempre geradas aos pares: uma para cifrar e outra para decifrar. Com os algoritmos assimétricos podemos tornar a chave de cifração pública, disponibilizando-a em um site de acesso ao público, resolvendo o problema das chaves simétricas.

Tendo a chave pública em posse qualquer pessoa pode enviar uma mensagem cifrada por esta chave, porém, somente o destinatário (aquele que disponibilizou a chave pública) poderá decifrá-la com sua chave privada. [STA 08]

Algoritmos simétricos são mais eficientes que os assimétricos em relação à velocidade para cifrar os dados, permitindo altas taxas de cifração, um algoritmo de chave assimétrica pode ser centenas ou milhares de vezes mais lento do que um algoritmo de chave simétrica de qualidade equivalente. Já os algoritmos assimétricos têm a vantagem de poder compartilhar a chave pública

Page 20: TG Yii Framework

20

sem problemas. Sendo assim, para ter um melhor aproveitamento, devem-se utilizar os dois algoritmos em conjunto, primeiro cifrar os dados que geralmente são mais pesados com chave simétrica, após isso, cifrar a chave simétrica com a assimétrica, para poder utilizar o conceito de chave pública.

Este trabalho focará somente na utilização de algoritmos de chave simétrica. Algoritmos de Chave Assimétrica em destaque

• RSA • ElGamal • Diffie-Hellman

2.2.3. Função Hash

Uma função hash é um algoritmo que cria e retorna um conteúdo de tamanho fixo, formado por letras e números a partir de uma entrada com qualquer tamanho, que pode ser desde um único caractere até de milhares de páginas, também pode ser qualquer tipo de arquivo.

O conteúdo criado ou a saída recebe várias denominações tais como hash-code, messagedigest, hashvalue e resumo, dependendo da aplicação da função hash. O processamento na função que cria a saída é conhecido como hashing, este deve ser computacionalmente viável de ser calculado para que qualquer computador comum possa executá-la rapidamente.

Qualquer alteração na origem, entrada, documento, mensagem, senha ou arquivo por menor que seja a alteração, até mesmo em um único bit é suficiente para que código hash gerado seja totalmente diferente do original, garantindo que, a partir de um valor de hash não seja possível retornar à informação de origem.

Considerando que o tamanho do conteúdo criado pela função de hash é fixo, sendo sempre do mesmo tamanho, e o conteúdo da informação de entrada ser praticamente infinito, existe a possibilidade de haver um mesmo hash para dois conteúdos diferentes de entrada. Essas entradas de conteúdos diferentes representados pelo mesmo hash são denominadas colisões. Uma boa função de hash é aquela cujas colisões não podem ser calculadas intencionalmente e que tenha uma possibilidade muito baixa de acontecer. No entanto, algoritmos também podem apresentar vulnerabilidades.

Page 21: TG Yii Framework

Figura 2–Algoritmo de Hash

Fonte: Autoria própria, baseada

28/11/2013.

Nota: O método de verificação é feito pela comparação de dois senha armazenada na base de dados Funções One-Way

Funções One-Way

relativamente fácil calcularou seja, não é reversiva.

Um exemplo simples fragmentos, só que praticamente impossível reconstruir o prato fielmente a partir dos fragmentos.

Funções hash One

funções de contração, resumo de mensagem (checksum criptográfico, check de integridade de mensagem (MIC) ou código de detecção de manipulação (MDC).

A maioria dos algoritmos

2.2.3.1. Funções de Hash mais conhecidas

• MD4 É uma função hash

pela primeira vez em outubro de 1990. Foi especificada1992.

O algoritmo usa como entrada uma mensagem de comprimento variável e produz uma

baseada na imagem:<http://conteudo.imasters.com.br/4802/figura1.gif

O método de verificação é feito pela comparação de dois hashes

base de dados com o hash da senha digitada no login

Way (mão única) são aquelas na qual dado um determinado valor x é relativamente fácil calcular (y=f(x)), porém computacionalmente impossível

Um exemplo simples seria quebrar um prato, é fácil quebrar um prato em pequenos fragmentos, só que praticamente impossível reconstruir o prato fielmente a partir dos fragmentos.

One-Way são também são conhecidas como funções de compressão, funções de contração, resumo de mensagem (messagedigest), impressão digital (checksum criptográfico, check de integridade de mensagem (MIC) ou código de detecção de

os algoritmos hash utiliza a função One-Way.

mais conhecidas

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

O algoritmo usa como entrada uma mensagem de comprimento variável e produz uma

21

http://conteudo.imasters.com.br/4802/figura1.gif>. Acessado em

hashes. Compara-se o hash da login.

(mão única) são aquelas na qual dado um determinado valor x é computacionalmente impossível obter x a partir de y,

fácil quebrar um prato em pequenos fragmentos, só que praticamente impossível reconstruir o prato fielmente a partir dos fragmentos.

mbém são conhecidas como funções de compressão, ), impressão digital (fingerprint)

checksum criptográfico, check de integridade de mensagem (MIC) ou código de detecção de

foi projetada por Ronald Rivest e publicada oficialmente no RFC 1186 e aprimorada no RFC1320 de

O algoritmo usa como entrada uma mensagem de comprimento variável e produz uma

Page 22: TG Yii Framework

22

"impressão 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 rápido em máquinas de 32 bits. Além disso, não necessita

de grandes tabelas de substituição e pode ser facilmente programado de forma compacta. O algoritmo é de domínio público.

É usado para calcular o NTLM que é um conjunto de protocolos de segurança da Microsoft que fornece autenticação, integridade e confidencialidade aos usuários 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 pública. [MD4 92]

• MD5 É uma função criada por Ronald Rivest em 1991, descrito na RFC 1321. É uma versão

melhorada e mais robusta do MD4, é basicamente o MD4 com maiores recursos de segurança, os cálculos são mais lentos, mas, em compensação, é muito mais seguro. Este algoritmo produz um valor hash de 128 bits, com ele é possível gerar uma hash de 32 caracteres independente do formato, nome ou tamanho do arquivo.

Por ser um algoritmo unidirecional, um hash MD5 não pode ser transformado novamente na senha ou qualquer outra informação 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 diferença entre as duas fontes do hash for apenas um número.

Foi projetado para máquinas de 32 bits, podendo ser facilmente programado de forma compacta. O autor colocou o algoritmo no domínio público em abril de 1992.

A função hash MD5 é um padrão mundial usado principalmente em sistemas de senhas, teve grande aceitação e foi o algoritmo de hash mais utilizado até alguns anos atrás.

Algoritmos também podem apresentar vulnerabilidades. No caso do MD5, foram descobertos vários tipos de ataques, tais como, Ataque de Colisão com Prefixo Escolhido, Ataque do Prefixo Idêntico, Ataque por Força Bruta, entre outros. [MD5 92]

• SHA1

Os algoritmos SHA foram projetados pela National Security Agency (NSA) e publicados

como um padrão do governo Norte-Americano, descrito na RFC 3174. O SHA1 foi considerado o sucessor do algoritmo MD5 (também produz um hash baseado

nos princípios do algoritmo MD5), mas ambos têm vulnerabilidades comprovadas. O SHA1 é a função mais usada da sua família (SHA) e foi publicado em 1995.

Produz um valor de hash de 160 bits e tem o tamanho de 40 dígitos em base hexadecimal. É amplamente utilizado e suporta os protocolos TLS e SSL, PGP, SSH, S/MIME eIPsec.

[SHA1 01]

Page 23: TG Yii Framework

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 "força-bruta" com o passar do tempo, pois conforme a tecnologia evolui o hash também pode ser otimizado. Ele implementa a variável "custo" que é proporcional à quantidade de processamento necessário para criptografar a senha, com isso gera um nível de segurança maior em relação à quase todos os outros métodos criptográficos. Configurando custos maiores de processamento, a senha pode passar por mais de 2 bilhões de ciclos para se chegar ao hash, isso para compensar a evolução de hardware. Atualmente um padrão altamente seguro não passa de 128 ciclos. [CRY 13]

O PHP realiza o hashing com o Blowfish através da função crypt() que está presente desde o PHP 4, e serve pra trabalhar com hashes de mão única. Para funcionar ele deve receber dois parâmetros: o salt (salto) e o cost (custo).

O salto deverá ser gerado de forma aleatória, 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 força bruta, quanto maior, mais lento e quanto mais lento, melhor.

O algoritmo Blowfish também foi incorporado em muitas outras linguagens importantes como C#, C++, Java, Perl, Python, etc. [BCRY 13] 2.2.4. Função Crypt

É uma função de criptografia própria do PHP, essa função realiza o hashing de senhas acrescentando codificação 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 obtém acesso as tabelas com as senhas e logins, caso a senha esteja criptografada com a função Crypt, este malfeitor não conseguirá descobrir quais dados são estes. [CRY 02]

A função Crypt é uma função genérica, diferentemente do MD5 e SHA1, pois, ela pode escolher qual algoritmo será utilizado. As opções de algoritmos para a função crypt são: 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-numéricos. Ex. df • CRYPT_EXT_DES – Salto de 9 caracteres, que são: 1 underscore + 4 bytes (indicando o número de iterações) + 4 bytes alfa-numéricos. Ex. _k7..silm

Page 24: TG Yii Framework

24

• CRYPT_MD5 – Salto de 12 caracteres, iniciado em “$1$” + 8 bytes (salto) + final “$”. Ex. $1$lkjhgfds$ • CRYPT_BLOWFISH – Salto iniciado em “$2a$” + 2 dígitos (custo) + símbolo “$” + 22 caracteres alfa-numéricos 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 estão instalados e se a classe de configuração do formato crypt_set_format ( ) foi chamada para mudar o padrão. [CRY 01]

O primeiro fator a criptografar são os dados para usar o hash. O segundo é o salto, em uma de três formas: DES Extended Format: se ele começar 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) são utilizados para formar a chave DES. O primeiro grupo de 56 bits torna-se a chave inicial DES. O XOR de cifração da chave DES com a própria corrente e os bits de grupo tornam-se a seguinte chave DES para cada grupo a mais.

O salto é uma sequência de nove caracteres que consiste em um sublinhado seguido por 4 bytes de contagem de iteração e 4 bytes do salto. Estes são codificados como caracteres imprimíveis, 6 bits por caractere, com o caractere menos significativo em primeiro lugar. Os valores de 0 e 63 são 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 possíveis se for configurado para 24 bits, ou 4096 maneiras se utilizar 12 bits, se o bit i do salto está definido, então os bits i e i+24 são trocados na saída E-box DES.

O valor retornado é uma string de 20 ou 13 bytes de comprimento terminados em null, composta do salto seguido pela codificação da criptografia de 64 bits.

Criptografia Modular: se o salto começa com a string “$digito$”, então esse formato de

criptografia é usado. O dígito representa qual algoritmo será utilizado na criptografia. Após o cifrão está o valor do salto para utilizar na codificação. O comprimento do salto está limitado a oito caracteres, pois o comprimento da saída retornado também é limitado.

Criptografia tradicional: O algoritmo utilizado vai depender se a função

crypt_set_format() foi chamada e se um formato padrão mundial foi especificado. Quem definirá esse padrão de codificação é a função crypt_get_format(), que retorna uma string que representa o nome do algoritmo. Os valores válidos são 'des', 'lf ', 'md5', 'sha256', 'sha512' e 'nth'. Se não constar em nenhuma das opções acima, ele assume o formato tradicional, que é o formato DES, se ele não estiver disponível, será o formato MD5, usando toda a cadeia como o salto ou sua primeira parcela.

Page 25: TG Yii Framework

25

Exemplo de entrada: $senha = "senha123" DES Padrão: 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 3–Função Crypt – Exemplo de entrada

Fonte: Autoria própria, baseada na imagem: <http://fazer-site.net/criptografia-no-php-com-sha1-md5-hash-e-crypt/>.

Acessado em 28/11/2013.

Exemplo de saída: DES Padrão: 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 4–Função Crypt – Exemplo de saída

Fonte: Autoria própria, baseada na imagem: <http://fazer-site.net/criptografia-no-php-com-sha1-md5-hash-e-crypt/>.

Acessado em 28/11/2013.

Page 26: TG Yii Framework

26

2.2.4.1 Utilizando o algoritmo Crypt (Blowfish)

Para a utilização do algoritmo Blowfish, deve-se configurá-lo na função crypt(). Como explicado na sessão anterior, o código 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 função crypt(): foram passados dois valores para serem criptografados, a própria senha e a string ‘$2a$08$Cf1f11ePArKlBJomM0F6aJ$‘, que é a junção dos parâmetros passados anteriormente e separados em três partes pelo símbolo “$”, no caso, o parâmetro “2a” é que identifica a função Blowfish, os outros dois são o custo e o salto.

O custo deve ser um número inteiro entre 4 e 31, outro detalhe é que o custo precisa ter dois dígitos, com isso números menores que 10 precisam ter zero à esquerda. O custo é a potência de 2, então 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-numéricos, ou “.” ou “/”. [BCRY 13]

Saída: $2a$08$Cf1f11ePArKlBJomM0F6a.EyvTNh6W2huyQi5UZst5qsHVyi3w5x.

Prefixo do hash senha cifrada

Observe que o valor codificado também tem como prefixo o próprio salto. O hash gerado terá o tamanho de 60 caracteres, 29 do prefixo configurado e os 31 restantes serão da senha propriamente hasheada. Valor este que será enviado pela aplicação web e ficará armazenado no banco de dados.

Page 27: TG Yii Framework

27

IMPORTANTE! A função Blowfish sempre receberá como parâmetro 29 dígitos, o que ultrapassar disto será ignorado. Então, caso a senha codificada no banco for usada como parâmetro da função 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 usuário, 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!'; }

Demonstração mais detalhada

senha_digitada = 1234 senha_armazenada=$2a$08$Cf1f11ePArKlBJomM0F6a.EyvTNh6W2huyQi5UZst5qsHVyi3w5x. Se utilizarmos a função: (crypt($senha_digitada, $senha_armazenada) === $ senha_armazenada) Será como:

(crypt(1234, $2a$08$Cf1f11ePArKlBJomM0F6a.) E a saída desta função gerará novamente o mesmo hash que está armazenado no banco: $2a$08$Cf1f11ePArKlBJomM0F6a.EyvTNh6W2huyQi5UZst5qsHVyi3w5x.

Page 28: TG Yii Framework

28

2.3. TIPOS DE ATAQUES COMUNS

Existem quatro tipos principais de ataques, estes são:

Ataque de interrupção: caracteriza-se pela possibilidade de tornar um bem ou ativo indisponível, inutilizável. Ataque de interceptação: caracteriza-se pela obtenção de informações por meio do acesso não-autorizado de pessoa, sistema ou programa. Ataque de modificação: representa situações em que dados são alterados por pessoas não-autorizadas.

Ataque de fabricação: difere um pouco da modificação, por representar situações em que dados falsos são produzidos e inseridos nos ativos de uma organização.

O tipo de ataque que este trabalho foca é o de interceptação. Como o nome indica, um

ataque com interceptação de terceiros ocorre quando um malfeitor está monitorando, capturando e controlando a comunicação entre dois equipamentos que estejam se comunicando, sem o conhecimento dos usuários. Por exemplo, esse malfeitor poderia capturar uma senha cifrada que trafega pela rede e tentar decifrá-la para ter acesso a um sistema ou serviço. [ATAQ 10]

Abaixo estão alguns dos ataques mais comuns do tipo interceptação: Ataque de Prefixo Idêntico - usando essa técnica, é possível 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, não há controle sobre a alteração, ou seja, no fim das contas os arquivos apenas vão diferir nos 128 últimos bytes. [CRIP 13]

Ataque de Colisão 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 técnica leva cerca de um dia para os cálculos saírem com as duas sequências de 1kb. [CRIP 13]

Page 29: TG Yii Framework

29

Rainbow Table – é uma tabela de consulta que utiliza um algoritmo de transação

memória-tempo, dando a possibilidade de recuperar o valor original de uma senha através de uma senha criptografada com hash. O malfeitor gera uma tabela com o resultado da cifração de todas as palavras de um dicionário, combinando palavras e até adicionando símbolos e dígitos à essas palavras. [HACK13]

Ataque de Dicionário – o ataque com uso de dicionário utiliza palavras, nomes, apelidos,

datas de nascimento registradas em seu dicionário armazenado em banco de dados. Com isso, podem-se obter senhas de sistemas utilizando tentativa e erro de senhas. [HACK13]

Força bruta (Brute force) - um ataque de força bruta consiste em adivinhar, por tentativa

e erro, um nome de usuário e senha e, assim, executar processos e acessar sites, computadores e serviços em nome e com os mesmos privilégios deste usuário. [CSI 12]

Se um malfeitor tiver posse destes dados, ele pode efetuar ações maliciosas em seu nome como, tais como, trocar a sua senha, invadir o seu computador e executar ações, como apagar arquivos, obter informações confidenciais, etc. As tentativas de adivinhação costumam ser baseadas em:

• Dicionários 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;

• Substituições óbvias de caracteres, como trocar “a” por “@” e “o” por “0”;

• Sequências numéricas e de teclado, como “123456” e “qwert”;

• Informações pessoais, de conhecimento prévio do malfeitor ou coletadas na internet em redes sociais e blogs, como nome, sobrenome, datas e números de documentos.

Page 30: TG Yii Framework

30

2.4. FERRAMENTAS E TÉCNICAS PARA DECIFRAR SENHAS

Existem diversas maneiras de decifrar uma senha criptografada, praticamente todas consistem em tentativa e erro. Qualquer computador, equipamento ou serviço que seja acessível à rede, com um nome de usuário e senha, pode ser alvo de um ataque. Há vários métodos que qualquer individuo que esteja mal intencionado pode recorrer com facilidade, ainda mais com o auxílio da internet. Existem centenas de scripts, programas, tutoriais e tantas outras ferramentas para a decifração dos algoritmos MD5 e SHA1, essas ferramentas são simples em questão de interface, porém são muito potentes e dependendo do tipo de senha, pode ser que elas consigam decifrá-la em questão 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 função do Hydra, também voltado para decifração de senhas de protocolos web.

• Bruter - para decifração de senhas de rede e web, parecido com o Brutus, porém

consegue decifrar senhas de mais protocolos além dos citados: MSSQL, MySQL, PgSQL, SMB-NR, SNMP, SSH2.

• Advanced zip password - voltado para decifração 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 - decifração de senha dos sistemas operacionais, especificamente Windows.

Há também na internet muitos sites contendo uma lista imensa de senhas e hashes SHA1 e

MD5 para consulta. Para fazerem isso são executados scripts que geram combinações 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. Então, uma simples consulta SQL por um específico hash pode trazer a senha originária deste. Estes sites não têm todas as combinações existentes, porque seria impossível armazenar todas as combinações de hash e senha, pois o tamanho do banco seria imensurável. Mas somados, estes sites possuem um número extraordinário de senhas armazenadas. Somente o site md5decrypter.co.uk possui atualmente cerca de 44bi de senhas em sua base de dados.

Page 31: TG Yii Framework

31

2.5. BANCO DE DADOS

Um banco de dados consiste em uma coleção de dados inter-relacionados que representam informações sobre um domínio específico. O objetivo principal de um sistema de banco de dados é possibilitar um ambiente que seja adequado e eficiente para uso na recuperação e armazenamento de informações. O gerenciamento dos dados envolve definir estruturas para o armazenamento das informações e fornecer mecanismos para a manipulação destas informações. Também precisa garantir a segurança destas informações contra falhas de sistema e tentativas de acesso não autorizado.

A utilização de bancos de dados hoje em dia é essencial para as organizações, 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 eletrônico, criam uma conta ou postam fotos no Facebook, etc.

A revolução da internet na década de 90 aumentou consideravelmente o acesso direto de usuários a banco de dados. [SIL06]

Dado - conjunto de símbolos organizados de forma que represente a informação fora da

mente humana. Elemento de Dado - subconjunto de símbolos que compõem um dado com significado

específico, mas não representa a informação completa.

No exemplo: O nº de pessoas cadastradas no projeto Construfácil em abril de 2014 é de 9692239. Dado:

Tabela 1 – Tabela simples Fonte: Autoria própria

Elementos de dados: Projeto: Construfácil Período: abril/2104 Matriculados: 9692239

Projeto Período Matriculados Construfacil 04/2014 9692239

Page 32: TG Yii Framework

32

2.5.1. Visão dos dados

Um sistema de banco de dados tem a finalidade de fornecer uma visão abstrata dos dados aos usuários, ele oculta certos detalhes de como os dados são armazenados e mantidos. [SIL06]

Exemplos de banco de dados: Lista Telefônica Acervo de uma biblioteca Registro de estoque Exemplo de visão de um registro de estoque:

Ficha de controle de estoque – Janeiro/2014

Data Item Entrada Saída Saldo

Quant. R$ Total Quant. R$ Total Quant. R$ Total 25/02/2014 Vaso 10 10,00 100,00 10 10,00 100,00

Tabela 2 – Visão dos dados Fonte: Autoria própria 2.5.2. Abstração dos dados

Como a maioria dos usuários não tem conhecimento em linguagem de banco de dados, os desenvolvedores ocultam a complexidade para os usuários sob vários níveis de abstração, para simplificar a iteração usuário-sistema. [SIL06]

Estes níveis são:

• Físico - (nível mais baixo) descreve como os dados são realmente armazenados. • Lógico - (nível médio) descreve que dados estão armazenados e que relação existe entre

eles. • View - (nível mais alto) descreve apenas parte do banco de dados, apenas o que o usuário

precisa visualizar. O sistema pode apresentar várias visões de um mesmo banco de dados.

Visão de quantidades de itens disponíveis em estoque

Item Quant. Vaso 10

Page 33: TG Yii Framework

Modelo de abstração de dados:

Figura 5–Banco de dados – Modelo de abstração de dados

Fonte: Autoria própria, baseada na

<http://www.devmedia.com.br/imagens/sqlmagazine/mar2006/ORA_RR_02.JPG

Modelo de abstração dos dados mais detalhado

Figura 6–Banco de dados – Modelo de abstração de dados

Fonte: Autoria própria, baseada na imagem:

<http://www.devmedia.com.br/imagens/sqlmagazine/mar2006/ORA_RR_02.JPG

e abstração de dados:

Modelo de abstração de dados

na imagem:

http://www.devmedia.com.br/imagens/sqlmagazine/mar2006/ORA_RR_02.JPG>. Acessado em 28/11/2013.

bstração dos dados mais detalhado:

Modelo de abstração de dados mais detalhado

na imagem:

http://www.devmedia.com.br/imagens/sqlmagazine/mar2006/ORA_RR_02.JPG>. Acessado em 28/11/2013.

33

Acessado em 28/11/2013.

Acessado em 28/11/2013.

Page 34: TG Yii Framework

2.5.3. Modelo de dados

Um modelo de dados oferece uma maneira de descrever o projeto de um banco de dados nos níveis físico, lógico e view. É uma coleçrelações de dados, semântica de dados e restrições de con Características:

Figura 7–Simbologia - Banco de dados

Fonte: Autoria própria, baseada na imagem: <http://www.gsigma.ufsc.br/~popov/aulas/bd1/trabalho_matriculas.png

Existem quatro categorias de modelos de dados, estas são:

• Modelo relacional • Modelo de entidade/relacionamento (E• Modelo de dados baseado em objetos• Modelo de dados semi

2.5.3.1. Modelo relacional

O Modelo relacional usa uma coleção de tabelas para representar os dados e a relação entre eles. Cada tabela possui diversas colunas, e cada coluna possui um é baseado em registros, também é o mais usado.

Um modelo de dados oferece uma maneira de descrever o projeto de um banco de dados nos níveis físico, lógico e view. É uma coleção de ferramentas conceituais para descrever dados, relações de dados, semântica de dados e restrições de consistência. [SIL06

Banco de dados – Modelo de abstração de dados

na imagem: http://www.gsigma.ufsc.br/~popov/aulas/bd1/trabalho_matriculas.png>Acessado em 28/11/2013.

categorias de modelos de dados, estas são:

Modelo de entidade/relacionamento (E-R) elo de dados baseado em objetos

Modelo de dados semi-estruturado

Modelo relacional usa uma coleção de tabelas para representar os dados e a relação entre eles. Cada tabela possui diversas colunas, e cada coluna possui um é baseado em registros, também é o mais usado. [SIL06]

34

Um modelo de dados oferece uma maneira de descrever o projeto de um banco de dados rramentas conceituais para descrever dados,

SIL06]

Acessado em 28/11/2013.

Modelo relacional usa uma coleção de tabelas para representar os dados e a relação entre eles. Cada tabela possui diversas colunas, e cada coluna possui um nome único. Este modelo

Page 35: TG Yii Framework

Figura 8–Modelo relacional

Fonte: Autoria própria, baseada na imagem: <http://www.devmedia.com.br/imagens/sqlmagazine/abr2006/30 2.5.3.2. Modelo de entidade/relacionamento (E

O Modelo de entidade/relacionamento é baseado em uma percepção do mundo real que consiste em uma coleção de objetos básicos, chamados entidades, e as relações entre estes objetos[SIL06]

Figura 9–Modelo de entidade/relacionamento

Fonte: Autoria própria, baseada na imagem: <http://www.devmedia.com.br/imagens/articles/178719/mer.JPG

2.5.3.3. Modelo de dados baseado em objetos

O Modelo de dados baseado em objetos modelo E-R com noções de encapsulamento, métodos (funções) e identidade de objeto.

na imagem: http://www.devmedia.com.br/imagens/sqlmagazine/abr2006/30-05pic02.JPG >. Acessado em

Modelo de entidade/relacionamento (E-R)

Modelo de entidade/relacionamento é baseado em uma percepção do mundo real que consiste em uma coleção de objetos básicos, chamados entidades, e as relações entre estes objetos

Modelo de entidade/relacionamento

na imagem: http://www.devmedia.com.br/imagens/articles/178719/mer.JPG>. Acessado em 28/11

Modelo de dados baseado em objetos

Modelo de dados baseado em objetos pode ser concebido como uma extensão ao R com noções de encapsulamento, métodos (funções) e identidade de objeto.

35

Acessado em 28/11/2013.

Modelo de entidade/relacionamento é baseado em uma percepção do mundo real que consiste em uma coleção de objetos básicos, chamados entidades, e as relações entre estes objetos.

11/2013.

pode ser concebido como uma extensão ao R com noções de encapsulamento, métodos (funções) e identidade de objeto. [SIL06]

Page 36: TG Yii Framework

Figura 10–Modelo de dados baseado em objetos

Fonte: Autoria própria, baseada na imagem: < http://blog.locaweb.com.br/wp

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

O Modelo de dados semidados individual do mesmo tipo possam ter diferentes tipos de atributos. Isto é o oposto dos modelos mencionados anteriormente, em que precisam ter o mesmo conjunto de atributos.

Figura 11–Modelo de dados semi

Fonte: Autoria própria, baseada na imagem: <http://www.devmedia.com.br/images/articles/130099/f1.JPG >. Acessado em 28/11/2013.

dados baseado em objetos

na imagem: < 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.

Modelo de dados semi-estruturado

Modelo de dados semi-estruturado permite a especificação dos dados em que itens de 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]

Modelo de dados semi-estruturado

na imagem: http://www.devmedia.com.br/images/articles/130099/f1.JPG >. Acessado em 28/11/2013.

36

content/uploads/2008/05/mvc.png>. Acessado em 28/11/2013.

Nota: Neste trabalho o modelo utilizado será o de dados baseados em objetos.

permite a especificação dos dados em que itens de individual do mesmo tipo possam ter diferentes tipos de atributos. Isto é o oposto dos

todos os itens de dados de um determinado tipo

http://www.devmedia.com.br/images/articles/130099/f1.JPG >. Acessado em 28/11/2013.

Page 37: TG Yii Framework

37

2.5.4. Sistema de Gerenciamento de Banco de Dados

Um Sistema de Gerenciamento de Banco de Dados (SGBD) é uma coleção de programas para acessar os dados do banco. São softwares que permitem a definição de estruturas para armazenamento de informações e fornecimento de mecanismos para manipulá-las. A maioria destes sistemas utiliza a linguagem Structured Query Language (SQL), que é um padrão internacional ANSI-SQL. O principal objetivo é retirar da aplicação cliente a responsabilidade de gerenciar o acesso, manipulação e organização 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 são armazenados em linhas e colunas, os dados descrevem um assunto tal como: clientes, fornecedores, etc. Visões – como mencionado anteriormente o sistema fornece uma visão abstrata dos dados aos usuários. Índices – É uma ferramenta que facilita a busca de linhas dentro de uma tabela, pode ser uma referência associada a uma chave primária para otimizar o processo de busca. 2.5.5. Bancos de Dados Relacionais

Bancos de Dados Relacionais usam tabelas para armazenar informações. Os campos e registros padrão são 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 relação 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 então vem sendo um tipo de banco de dados padrão. [SIL06]

Cada tabela tem uma ou mais colunas, onde outras tabelas poderão ter acesso às informações desta tabela a partir de chaves estrangeiras.

Exemplo:

Tabela cadastro de usuários ID Nome Endereço Cidade UF

1 Wagner Av. Dom Pedro I 1 1 2 Deluqui R. dos Professores 2 3 Tabela 3 – Ligação entre tabelas 1 Fonte: Autoria própria

Page 38: TG Yii Framework

38

Tabela cadastro de cidades ID Cidade UF

1 Osasco 1 2 Cascavel 2 3 Santa Fé 3 Tabela 4 – Ligação entre tabelas 2 Fonte: Autoria própria

Tabela cadastro de Estados ID UF

1 SP 2 MG 3 PR Tabela 5 – Ligação entre tabelas 3 Fonte: Autoria própria 2.5.6. Sistema de Gerenciamento de Bancos de Dados Relacionais

Sistemas de Gerenciamento de Bancos de Dados Relacionais (SGBDR) têm a mesma função dos SGBDs, porém, trabalham em cima de bancos de dados relacionais.

Em bancos de dados relacionais a interface é constituída pela Application Programming Interface (API) ou drivers do SGBDR. [SIL06]

2.5.6.1. Principais características de um SGBDR

� Integridade - garante que os dados estarão sempre íntegros � Disponibilidade - garante que os dados estejam sempre atuais e disponíveis � Confidencialidade - restrição de acesso aos dados para usuários não autorizados � Autenticidade - somente usuários logados poderão realizar operações no banco de dados � Irrevogabilidade - todas as alterações feitas no banco terão registro do autor, hora, etc. � Compartilhamento de dados entre múltiplos usuários � Diferentes tipos de interface para os diferentes usuários � Controle de redundância dos dados � Mecanismos de segurança, tal como backup e recuperação dos dados � Flexibilidade na mudança das estruturas de dados

Page 39: TG Yii Framework

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, níveis de segurança, variação de preço, etc. Sendo assim, fica difícil 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, porém, para se utilizar de todas suas funcionalidades e total desempenho paga-se um preço alto por suas licenças de uso. Estes também consomem muito processamento e RAM, exigindo um computador potente para executá-los. Existem suas versões gratuitas, porém, estas têm seus recursos limitados.

Há também outros SGBDs totalmente gratuitos, que não consomem muita memória nem CPU, como o Postgresql e o SQLite, porém só suportam aplicações leves e simples.

A solução ideal que existe hoje no mercado é o MySQL, que além de ter licença GPL (que é gratuita), não exige uma máquina tão robusta e ainda consegue suportar aplicações das mais complexas. Tem como vantagem sua portabilidade, podendo ser otimizado e customizado com outros recursos, suporta o modelo ORM, diversas linguagens de programação, 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 coleção abstrata de classes que capturam os padrões de interação entre objetos, geralmente possui funcionalidades comuns de várias aplicações, serve como uma base de código fonte genérico para a criação de web sites.

Frameworks auxiliam no desenvolvimento e manutenção de aplicações, pois, já vêm com o núcleo pronto e uma estrutura pré-definida, ficando pendentes apenas ajustes básicos, como, layout, regras de negócio, entre poucas outras configurações. Transformando rapidamente seu projeto de aplicação web em código funcional, pronto para produção.

O melhor é que pode ser flexível e extensível, podendo ser complementado com outros recursos e linguagens de programação, o que acaba se tornando um poderoso grupo de ferramentas trabalhando em conjunto. [WIN 12]

Page 40: TG Yii Framework

Alguns exemplos de compatibilidade: Java, C #, .NET, PHP, Yii.Com o uso de um framework

Algumas características co

• Reutilizável, extensível, eficiente e completo.• Aplicações semelhantes: sistemas de gestão, portais, fóruns, CMS, e• Modularização: organização de componentes relacionados• Possuem uma coleção de bibliotecas• Acesso a APIs (Interface de Programação de Aplicativos) de outros serviços• Serviços de autenticação e autorização

2.6.1. ORM (Object-Relational

O ORM (em português: Mapeamentogarantir que programação compatível.

As tabelas do banco de dadostabela como instâncias destas classes.

A persistência dos dados se faz com o uso de uma io programador não precisa se preocupar com comandos de linguagem do banco utilizado para manipular os dados.

A maior parte das aplicaçõestabelas de um banco de dad

Bibliotecas de mapeamento de objetobanco de dados para classes de objetos de domínio.

Normalmente o ORM de dados correspondem a propriedades em nossos objetos na memória.

Figura 12–Modelo ORM

Fonte: Autoria própria, baseada na imagem: < http://www.edzynda.com/media/orm.jpg>. Acessado em 28/11/201

Alguns exemplos de compatibilidade: Java, C #, .NET, PHP, Yii.framework, não há razão para codificar sua aplicação

Algumas características comuns entre frameworks:

vel, extensível, eficiente e completo. Aplicações semelhantes: sistemas de gestão, portais, fóruns, CMS, eModularização: organização de componentes relacionados

oleção de bibliotecas (Interface de Programação de Aplicativos) de outros serviços

autenticação e autorização

Relational Mapping)

O ORM (em português: Mapeamento Objecto-Relacional) é um método utilizado para garantir que programação orientada aos objetos utilizando bancos de dados relacionais seja

banco de dados são representadas através de classestabela como instâncias destas classes.

A persistência dos dados se faz com o uso de uma interface de acesso amigável, com isso o programador não precisa se preocupar com comandos de linguagem do banco utilizado para

maior parte das aplicações web é construída como armazenamentoum banco de dados relacional.

Bibliotecas de mapeamento de objeto-relacional fornecem o mapeamento das tabelas do banco de dados para classes de objetos de domínio.

ORM tem em seu código a parametrização de como os campos no banco de dados correspondem a propriedades em nossos objetos na memória. [WIN 12]

na imagem: < http://www.edzynda.com/media/orm.jpg>. Acessado em 28/11/2013.

40

Alguns exemplos de compatibilidade: Java, C #, .NET, PHP, Yii. ua aplicação web desde o zero.

Aplicações semelhantes: sistemas de gestão, portais, fóruns, CMS, e-commerce, etc.

(Interface de Programação de Aplicativos) de outros serviços

é um método utilizado para bancos de dados relacionais seja

são representadas através de classes e os registros de cada

nterface de acesso amigável, com isso o programador não precisa se preocupar com comandos de linguagem do banco utilizado para

como armazenamento dos seus dados em

mapeamento das tabelas do

como os campos no banco [WIN 12]

Page 41: TG Yii Framework

41

2.6.2. Estrutura MVC (Model-View-Controller)

O MVC (em português: Modelo-Visão-Controlador) é um modelo de arquitetura de aplicação que faz a separação de funcionalidades em camadas, isso facilita a manipulação dos dados para a apresentação ao usuário.

� O Modelo trabalha com os dados da aplicação, regras de negócios, lógica e funções.

� A Visão é a representação dos dados, como uma tabela ou imagens. É possível ter várias

visões do mesmo dado. Um exemplo: apresentação de dados numéricos, tal como sua representação convertida em gráfico.

� O Controlador faz intermediação entre o Modelo e a Visão. Ele recebe os dados de entrada

direciona para o tratamento adequado e retorna a visualização para o usuário se necessário.

A principal função do MVC é a reutilização de código e separação de conceitos. [WIN 12]

Vantagens: � Separação entre interface de usuário, regras de negócio e modelo de dados � Reduzir custos de manutenção � Fatoração de funcionalidades � Comportamento padrão

Com isso obtemos versatilidade, pois, qualquer tipo de alterações em uma das camadas

não interfere nas demais, facilitando a atualização de layouts, alteração nas regras de negócio e adição de novos recursos.

2.6.3. Estrutura RBAC (Role Base Access Control)

O RBAC (em português: Regras Baseadas em Controle de Acesso) constitui de regras para limitar o acesso da aplicação aos usuários autenticados baseado em suas funções.

Assim, os usuários irão apenas executar determinadas operações, pré-definidas pelo seu perfil, tais como manipulação de dados, criação de outros usuários, visualização dos dados, entre outras.

Essas restrições são associadas com os papéis desempenhados (funções). Para cada usuário atribuí-se um papel e através dessa associação, o usuário adquire as

permissões definidas para o papel. [WIN 12]

Page 42: TG Yii Framework

42

2.6.4. Atuais frameworks PHP no Mercado:

• CakePHP • CodeIgniter • Synfony • Yii • Zend

2.6.5. Estrutura comum dos frameworks

Figura 13–Estrutura comum dos frameworks

Fonte: Autoria própria, 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 é responsável por disponibilizar as páginas e todos os demais recursos que possam ser acessados, tais como, postagem de fotos, envio de e-mail via formulário, etc.

Sua principal função é processar e executar solicitações HTTP, HTTPS, SSL, FTP, etc. O Apache Server é um software livre, no que diz respeito a ter seu código-fonte disponível

para alterações, além 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 código em PHP, Perl, Shell Script e até em ASP. Sua utilização mais conhecida é a combinação 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 domínio de mais de 60%. Isso porque provê alta performance, segurança, compatibilidade com diversas plataformas e inúmeros recursos. [APA 13]

Page 43: TG Yii Framework

43

2.6.5.2. Linguagem web PHP5

A PHP5 uma das mais importantes linguagens de programação de páginas e aplicações web da atualidade, capaz de gerar conteúdo dinâmico na internet baseada em bases de dados, ela é também uma linguagem orientada a objetos (POO). É compatível com quase todos os sistemas operacionais, banco de dados, protocolos e outras linguagens de programação, tais como, C++, Pearl, Java, etc. É licenciada gratuitamente sob a PHP License, uma licença diferente da GNU General Public License (GPL) devido a restrições no uso do termo PHP. É linguagem extremamente modularizada, o que a torna ideal para instalação e uso em servidores web, o código é interpretado no lado do servidor pelo módulo PHP, que também gera a página 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 é compatível com os principais sistemas operacionais e também é de licença gratuita (GPL), porém se o programa que o acessar não for de licença GPL, deverá então ser adquirida uma licença para o uso do MySQL. Seu enorme sucesso é devido seu desempenho e estabilidade, entretanto exige uma máquina com poucos recursos de hardware. Sua vasta compatibilidade de integração a outros sistemas e suporte a várias linguagens de programação, drivers e frameworks também contribui para sua reputação. Alguns de seus utilizadores de renome são: NASA, Wikipédia, 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 fácil utilização, eficiente, possui centenas de recursos e é rigorosamente bem documentado. O Yii foi meticulosamente projetado para comportar gerenciar aplicações web complexas, desde o começo.

É a combinação da vasta experiência de seus criadores em desenvolvimento web e da investigação e reflexão dos frameworks PHP e aplicações web mais populares atualmente.

Além de prover de recursos para a segurança da informação, possibilitando criptografar seus dados, principalmente senhas, com os melhores algoritmos da atualidade. [WIN 12]

Algumas de suas características que vão além do padrão dos outros algoritmos:

� Funcionalidades genéricas e customizáveis � Alto-desempenho � Baseado em componentes � Desenvolvimento em larga escala

Page 44: TG Yii Framework

44

� Tratamento de erros: facilita associação de erros ao tratador correto � Internacionalização: tradução de mensagens, formatos de data, hora e números � Extensível e compatível com muitos outros recursos

Uma das principais razões para se utilizar o Yii é que ele Possui licença BSD, que é uma

licença livre e de código aberto, considerado como de domínio público e pode ser modificado sem nenhuma restrição. A licença BSD permite que o software distribuído sob a licença, seja incorporado a produtos proprietários. Trabalhos baseados no material podem até ser liberados com licença proprietária. Alguns exemplos notáveis são: o uso de código do BSD em produtos da Microsoft, como a pilha TCP/IP, e também 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 características. [FRAM 13]

Uma dessas pesquisas foi a realizada no site http://socialcompare.com/en, que compara e mostra as principais funções de cada framework, onde foram selecionados os cinco melhores frameworks atuais do mercado. Estes são: CakePHP, CodeIgniter, Symfony, Yii e Zend.

Figura 14–Comparação entre frameworks – Socialcompare

Fonte: <http://socialcompare.com/en>. Acessado em 03/12/2013.

Page 45: TG Yii Framework

45

Outros sites de comparação 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 endereço: http://iisit.org/Vol10/IISITv10p095-109Chao0092.pdf

Realizada por renomados pesquisadores do ramo de Tecnologia da Informação, 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 aplicações 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 atuação dos

frameworks, desde popularidade, até suas principais funções e características. 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 – Comparação 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 pontuação nos critérios estabelecidos. Apesar de ser novo, o Yii vem ganhando notoriedade no mercado, devido a sua

simplicidade, eficiência, robustez, entre outros aspectos que o tornam um dos melhores frameworks para se trabalhar. [FRAM 13]

Page 46: TG Yii Framework

46

2.6.7. História do Yii

Figura15–Yii Framework

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

O framework Yii começou 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 experiência própria e feedbacks de usuários em relação ao projeto PRADO indicaram a necessidade da criação de um framework baseado em PHP5 que fosse de manipulação mais fácil, mais extensível e mais eficiente.

A versão alpha do Yii foi oficialmente lançada para atender a essas necessidades, em outubro de 2008.

Em 3 de dezembro de 2008 o Yii 1.0 foi lançado oficialmente. A partir de então o Yii vêm evoluindo e tem sua última versão 1.1.14 disponibilizada para download, lançada em 11/08/2013.

O Yii conta com uma equipe de desenvolvedores renomados no ramo de ambiente web e também 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 evolução não para, a versão 2 do Yii está sendo desenvolvida e está sendo construída completamente para o PHP 5.3.0+ e tem por objetivo se tornar o estado da arte da nova geração de frameworks PHP. [WIN 12]

2.6.8. Características do Yii

O Yii é um framework em PHP de alto desempenho que trabalha com componentes para o desenvolvimento de grandes aplicações web. Sua máxima reutilização de código na programação web pode alavancar rapidamente o processo de desenvolvimento. Ele pode desenvolver praticamente todos os tipos de aplicações desde e-Commerce até portais com alto tráfego, devido a sua generalidade, ser leve e pode ser combinado com sofisticadas soluções em caching.

Seu nome é um acrônimo para YES (Sim), e é pronunciado como Yee que representa os adjetivos para descrevê-lo, como Easy, Eficient and Extensible (fácil, eficiente e extensível). [WIN 12]

Page 47: TG Yii Framework

47

Figura 16–Base do Yii

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

Fácil: Para criar uma aplicação web é preciso apenas ter uma máquina com os serviços básicos

de hospedagem, estes são: servidor web apache, PHP 5.1.0 ou superior e um banco de dados relacional. Após isso é só copiar os arquivos do framework Yii no diretório web raiz e pronto.

Com algum conhecimento em PHP e orientação a objetos o usuário está pronto para começar a desenvolver aplicações, não é preciso aprender linguagem de modelagem.

O Yii já vem com classes de componentes que são estendidas a partir do núcleo. Seguindo suas convenções prescritas, o usuário pode escrever menos código e gastar menos tempo desenvolvendo sua aplicação. Mas também ele permite que o usuário personalize todos os seus padrões e também dá instruções de como fazer isso.

Como o Yii é o resultado de uma avaliação e reciclagem de outros frameworks bem conhecidos, é provável que o usuário o ache bem familiar e fácil de manusear.

Eficiente: Para agilizar a criação e manutenção de suas aplicações, ele tem como principio o modelo

de desenvolvimento DRY (Don’t Repeat Yourself). Estas aplicações são construídas usando a arquitetura MVC. Isso reduz a duplicação e promove a reutilização de código.

É também extremamente rápido e pode ser configurado com otimização de desempenho, aliás, este foi um dos principais quesitos desde o início de sua formulação.

É um framework de alto desempenho, baseado em componentes que podem ser usados para o desenvolvimento de aplicações web em qualquer escala. Se o usuário utilizar as convenções internas do Yii, ele terá o aplicativo instalado e funcionando com pouca ou nenhuma configuração manual.

Extensível: O Yii já vem com recursos para atender a todas as demandas oriundas das aplicações web

de hoje. Widgets habilitados para AJAX, integração de serviços web, RESTful e SOAP, reforçado com uma arquitetura MVC, DAO e camada de banco de dados relacional ActiveRecord, caching sofisticado, hierarquia de controle de acesso baseado em função e muito mais.

O Yii foi meticulosamente projetado para permitir que quase todos os blocos do seu

Page 48: TG Yii Framework

48

código sejam estendidos e personalizados para atender a qualquer exigência de projeto. Não tem como não aproveitar este benefício, que é a extensibilidade do Yii, o usuário

estende ou otimiza as classes já prontas. O Yii auxilia no processo de otimização de classes para criação de funções específicas, isto também ajuda a contribuir para a crescente lista de recursos do Yii e participar ativamente da comunidade para a extensão do Yii.

No site do Yii pode ser encontrada uma lista de extensões disponíveis, contribuídas por usuários. Há também um repositório de extensões não-oficiais, feito para grandes aplicações, o que realmente demonstra a extensibilidade e a força da comunidade deste projeto.

Normalmente na metodologia RBAC, um usuário é atribuído a uma ou mais funções e este usuário herda as permissões referentes essas funções. No Yii, além dessa opção, podemos associar usuários a qualquer item de autorização, isso garante uma enorme flexibilidade ao trabalhar com hierarquia de papéis.

Além do mais, o Yii tem uma ferramenta de geração automática de código, o Gii, com ele podemos implementar qualquer atribuição MVC para que nossa aplicação possa interagir com o banco de dados, onde, apenas informamos as tabelas do banco que receberão o mapeamento para atribuição da função, a partir daí ele gera o código para a criação das classes automaticamente. 2.6.9. Como o Yii Funciona?

O Yii utiliza as padronizações como ORM, MVC, RBAC, entre outras, isso nos dá um

extremo poder para criar e manter nossas aplicações com máximo reaproveitamento de código. [WIN 12]

Para facilitar sua organização e configuração, a estrutura padrão de suas funcionalidades fica armazenada nos diretórios relacionados abaixo: _ assets: recursos publicados _ css: recursos de layout _ images: arquivos de imagens _ themes: temas para extensão _ protected: arquivos protegidos da aplicação _ components: componentes adicionais _ config: configuração da aplicação _ controllers: regras de negócio _ data: sql de criação/configuração do banco de dados _ extensions: extensões para o framework _ messages: tradução de mensagens para UI _ models: modelo de dados _ runtime: arquivos temporários _ tests: scripts de teste da aplicação _ views: interface gráfica da aplicação

Page 49: TG Yii Framework

49

2.6.9.1. ORM no Yii

O Yii fornece uma camada ORM na forma do padrão Active Record (AR). O AR (em português: Registro Ativo) é um esquema padrão usado para acessar o banco de

dados abstrato usando orientação a objetos. Ele mapeia as tabelas em classes, linhas em objetos e colunas em propriedades de classe.

Ele também abriga a lógica de negócios necessária 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 instância de uma classe AR representa uma única linha em uma tabela do banco de

dados. O AR gera as instruções em SQL necessárias para criar, ler, atualizar e excluir dados. Ele

também permite ao desenvolvedor acessar os dados armazenados no banco de dados de forma orientada a objetos. Com isso não precisamos escrever qualquer código em SQL ou outra forma de lidar com o banco de dados.

Um exemplo seria usar a AR para operar em um site que contém postagens, cujo ID interno 15 também é usado como chave primária da tabela. Primeiramente ele recupera a postagem usando a chave primária. Logo depois ele muda o título e as atualizações do banco de dados para salvar as alterações:

$post=Post::model()->findByPk(15); $post->title='Postagem_15'; $post->save();

O AR no Yii também se integra perfeitamente com muitos outros aspectos da estrutura do

Yii. Há muitos campos de formulário auxiliares de entrada que ligam diretamente para seus respectivos atributos de classe. Desta maneira, o AR extrai os valores dos campos do formulário de entrada diretamente para o Model (MVC). Ele também suporta validação automática de dados, e se a validação falhar a classe View do Yii facilmente exibirá os erros de validação para o usuário. [WIN 12] 2.6.9.2. MVC no Yii

Como citado antes, o Yii é um framework que suporta o padrão MVC e fornece uma clara estrutura de diretório para cada Model, View e Controller. [WIN 12]

Model: um Model no Yii representa a informação e regras de negócio, é responsável pela

manutenção do estado, e deve encapsular estas regras que se aplicam aos dados que definem este estado. Pode ser qualquer instância da classe CModel ou de suas classes subjacentes.

Os dados que compõem os atributos na classe de Model podem ser obtidos a partir de uma

Page 50: TG Yii Framework

50

linha de uma tabela de banco de dados ou dos campos de um formulário de entrada do usuário. A classe de Model é normalmente composta de atributos de dados que podem ser

validados com um conjunto de regras definidas. Dois tipos de Modelos são utilizados pelo Yii, o modelo de formulário (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 formulário HTML. Ela engloba toda a lógica para a validação do campo de formulário. E então armazena esses dados na memória 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 contém os elementos da User Interface (UI), como texto, ícones e

campos de formulário. Construído em HTML e pode conter declarações em código PHP. É responsável por fazer esse processamento, na maioria das vezes, com base nos dados do Model.

As declarações PHP dentro do View na maioria das vezes são dos tipos: • Condicional

• Métodos auxiliares de classe HTML

• Declarações de repetição

• Referem-se a outros elementos da UI

• Widgets

Controller: no Yii o Controller é uma instância de CController ou uma de suas classes subjacentes, ele gerencia comunicação entre Model e o View e cuida da validação e da filtragem de dados.

O Controller é o responsável pelo tratamento de uma solicitação encaminhada pelo usuário, interagindo com o Model, e instruindo o View a fim de atualizar e exibir os dados adequadamente.

Juntamente com o esquema MVC, o Yii também trabalha com outro método para a execução dos processos requisitados pelo usuário, chamado aplicação (application). A aplicação recebe a solicitação 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 serviços para fornecer pré e pós-processamento sofisticado sobre os pedidos, implementar regras básicas de controle de acesso para limitar o acesso a certas ações, gerenciar o layout de todo o aplicativo e repassar a renderização dos arquivos, gerenciar a paginação de dados e muitas outras funções. [WIN 12]

Page 51: TG Yii Framework

Como mostrado na figura abaixo:

Figura 17–Estrutura MVC

Fonte: Autoria própria, baseada na imagem: <http://www.yiiframework.com/tutorial/image?type=guide&version=1.1&lang=pt&file=structure.pngem 28/11/2013.

Um esquema MVC

ciclo de vida:

1. O navegador envia um pedido2. O roteador analisa o pedido e decide em qual lugar da aplicação deve ser encaminhado,3. Muitas vezes o roteador identifica um método de ação específico de

Controller, ao qual o pedido é repassado.4. O Controller processa o pedido e provavelmente interage com o Model para realizar outra

lógica de negócios necessária.5. Dependendo das regras do Model, 6. O View formata os dados

exibição

2.6.10. Ligação do Yii com o banco de dados

O Yii fornece uma Os Data Access Objects

Objects (PDO). [WIN 12] 2.6.10.1. DAO

DAO: (em português, Objeto de Acesso aos Dados) base de dados, é utilizada para fazer a conexão entre os objetos da camadadestes no banco, separando as regras de negócios (MVC) das regras de acesso a banco de dados. Porém, o DAO pode ser usado fora do modelo MVC, embora não seja recomendado.

Como mostrado na figura abaixo:

na imagem: http://www.yiiframework.com/tutorial/image?type=guide&version=1.1&lang=pt&file=structure.png

m esquema MVC no framework Yii, uma solicitação web tem

navegador envia um pedido para o servidor web, este é recebidoO roteador analisa o pedido e decide em qual lugar da aplicação deve ser encaminhado,Muitas vezes o roteador identifica um método de ação específico deController, ao qual o pedido é repassado. O Controller processa o pedido e provavelmente interage com o Model para realizar outra lógica de negócios necessária. Dependendo das regras do Model, este prepara os dados e os encaminha para

os dados para ficarem de acordo com o layout e devolve

Ligação do Yii com o banco de dados

a gama de utilidades para a programação em banco de dados. Data Access Objects (DAO) do Yii são construídos em cima da

(em português, Objeto de Acesso aos Dados) Esta é uma camada de abstração de é utilizada para fazer a conexão entre os objetos da camada

destes no banco, separando as regras de negócios (MVC) das regras de acesso a banco de dados. Porém, o DAO pode ser usado fora do modelo MVC, embora não seja recomendado.

51

http://www.yiiframework.com/tutorial/image?type=guide&version=1.1&lang=pt&file=structure.png>. Acessado

em geralmente o seguinte

recebido pelo roteador O roteador analisa o pedido e decide em qual lugar da aplicação deve ser encaminhado, Muitas vezes o roteador identifica um método de ação específico dentro de uma classe do

O Controller processa o pedido e provavelmente interage com o Model para realizar outra

este prepara os dados e os encaminha para o View. devolve ao navegador para

banco de dados. (DAO) do Yii são construídos em cima da extensão PHP Data

Esta é uma camada de abstração de é utilizada para fazer a conexão entre os objetos da camada Model e a persistência

destes no banco, separando as regras de negócios (MVC) das regras de acesso a banco de dados. Porém, o DAO pode ser usado fora do modelo MVC, embora não seja recomendado.

Page 52: TG Yii Framework

52

Todos os SGBDRs são encobertos por trás de uma única interface. Desta maneira, a base de dados pode permanecer independente e as aplicações desenvolvidas usando DAO também podem ser facilmente trocadas para usar outros SGBDRs. [WIN 12] 2.6.10.2. PDO

PDO: (em português: Objeto de dados PHP) é uma classe exclusiva da linguagem PHP. Cria uma camada de abstração dos drivers que fazem a conexão entre a aplicação em PHP e a sua persistência em um banco de dados relacional. Isso permite que, com poucas configurações o usuário transfira toda a sua aplicação para um novo SGBDR. [WIN 12]

2.6.10.3. Diferença 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 questão. [WIN 12]

Page 53: TG Yii Framework

53

3 METODOLOGIA

Através de pesquisas bibliográficas foram colhidas informações referentes ao nível de segurança 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 exploratória com análise 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 estratégia utilizada foi a pesquisa metodológica aplicada ao objeto, como a análise documental e observação direta. Também foram realizadas pesquisas para comparar e escolher qual o melhor framework atual do mercado para se trabalhar, em relação a diversos aspectos funcionais. O tratamento e análise dos dados foram realizados sobre o conteúdo estudado, onde análise 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 são vulneráveis 2° - Dificuldade para decifrar as senhas criptografadas com os algoritmos em ambiente de teste 3.1. DESENVOLVIMENTO DE APLICAÇÃO WEB COM ACESSO A BANCOS DE DADOS

3.2. DEFINIÇÃO DO AMBIENTE DE TESTES

Será utilizado um “Desk Server” para ser o servidor web de testes tendo em vista que não foi possível ter acesso a um servidor de produção real, também pelo motivo que para nossa aplicação web de demonstração não seria necessário uma máquina tão robusta.

Com nosso servidor em funcionamento poderemos analisar os algoritmos de criptografia mais utilizados e fazer um estudo prático comparativo entre as situações possíveis de invasão.

Para demonstração do desempenho do algoritmo Blowfish configurado no framework Yii, criaremos uma aplicação web qualquer que exija login com autenticação e funções para criar e atualizar usuários.

Para facilitar todos os processos, utilizaremos a ferramenta WAMP, que já tem em sua estrutura as aplicações, Servidor Web Apache, PHP5, MySQL e PhpMyAdmin, necessárias para o funcionamento de um servidor web. Com esse grupo de ferramentas rodando em conjunto, poderemos por em prática nosso projeto, um protótipo funcional de uma estrutura de aplicação web que nos mostre especificamente o envio e armazenamento de senha no banco com todas as seguintes possibilidades:

Page 54: TG Yii Framework

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 � Placa–mãe: Intel JAL50 LA-4105P - Socket 478 � Memória RAM: 4 GB DDR3 � Disco Rígido: 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 – versão 2.4

Apache - versão 2.2.4 PHP – versão 5.4.12 MySQL– versão 5.6.12 PhpMyAdmin– versão 4.0.4

Framework PHP: Yii Framework – versão 1.1.14

3.3. PRÉ-REQUISITOS DO FRAMEWORK YII

Para executar uma aplicação Web que utilize o Yii, o usuário precisará de um servidor

Web com suporte a PHP 5.1.0 ou superior. O Yii não precisa ser instalado em um diretório acessível à Web. Uma aplicação Yii tem uma entrada de script que normalmente é o único arquivo que precisa ser exposto para os usuários da Web. Outros scripts de PHP, incluindo os do Yii, devem ter o acesso protegido, uma vez que podem ser explorados por malfeitores.

Page 55: TG Yii Framework

55

3.4. CRIAÇÃO DA APLICAÇÃO WEB

Instalando o framework Yii

Baixe a aplicação Yii no site oficial, no endereço: http://www.yiiframework.com. Após isso descompacte o arquivo, entre na pasta descompactada selecione todos os

arquivos, copie e cole dentro do diretório onde o Wamp foi instalado, como no exemplo abaixo:

Figura 18–Instalação Yii framework

Fonte: Instalação Yii framework

Page 56: TG Yii Framework

56

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

Figura 19–Configuração Yii – Editando arquivo .bat do Yii

Fonte: Instalação 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 20–Criando uma aplicação web

Fonte: Instalação Yii framework

Obs. Utilizaremos o nome site_fatec para referenciarmos a nossa aplicação web.

Após este comando o Yii irá criar toda uma estrutura pré-configurada e pronta para

apresentação ao usuário, que ficará armazenada dentro do diretório web, em nosso caso “c:\wamp\www”.

Nesse diretório conterá os subdiretórios listados abaixo:

• Assets • Css • Images • Protected

o Comands o Components o Config o Controllers o Data o Extensions o Messages

Page 57: TG Yii Framework

o o o o o o

• Themes

Obs. Estes foram descritos anteriormente no tópico “Como o Yii funciona?”

3.5. TESTE

Para testar abra um browser e digite “localhost/site_fatec”Se tudo foi seguido corretamente

Figura 21–Testando a aplicação web

Fonte: Instalação Yii framework

Migrations Models Runtime Tests Vendor Views

Themes

Obs. Estes foram descritos anteriormente no tópico “Como o Yii funciona?”

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

Testando a aplicação web

Instalação Yii framework

57

Obs. Estes foram descritos anteriormente no tópico “Como o Yii funciona?”

Page 58: TG Yii Framework

58

3.6. ESTRUTURA DO BANCO DE DADOS

3.6.1. Criação do banco de dados no MySQL

Criando o banco pelo phpMyAdmin

1. Acesse o endereço: “http://localhost/phpmyadmin/” 2. Entre com o usuário “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, então clique no botão “Criar”

Figura 22–Aplicação web – Criando banco de dados

Fonte: PhpMyAdmin

Criando o banco por linha de comando:

1. Acesse o endereço: http://localhost/phpmyadmin/ 2. Entre com o usuário “root” e com a senha em branco 3. Clique na aba “SQL”, depois, no campo principal digite o código abaixo, então clique no

botão “Executar” CREATE DATABASE site_fatec;

Page 59: TG Yii Framework

59

3.6.2. Criação das tabelas no MySQL

Tabela User

No PhpMyAdmin clique na aba “SQL”, depois, no campo principal digite o código abaixo, então clique no botão “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 parâmetro senha para CHAR(60) ou VARCHAR(60), pois a função Crypt retornará este tamanho. 3.7. CONFIGURANDO O YII PARA INTERAGIR COM BANCO CRIADO NO MYSQL

Acesse o arquivo “main.php” no diretório “c:\wamp\www\site_fatec\protected\config\”, e comente o bloco em que está a configuração para o SQLite que vem como padrão, como no exemplo abaixo: /* 'db'=>array( connectionString'=>'sqlite:'.dirname(__FILE__).'/../data/testdrive.db', ), */ Descomente o bloco de código para iteração 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', ),

Page 60: TG Yii Framework

3.7.1. Geração da estrutura MVC

No programa Executarpressione “Enter”, execute os comandos abaixo para criar a estrutura da aplicação: c:\wamp\framework\yiic shell

Figura 23–Configuração Yii – Acessando o shell do Yii

Fonte: Prompt de comando do Windows

Digite “model + nome da tabela”, Exemplo de saída do model:

Figura 24–Configuração Yii – Criando o Model de uma tabelaFonte: Prompt de comando do Windows

Digite “crud + nome da tabela”, uma tabela Exemplo de saída do crud:

Figura 25–Configuração Yii – Criando o CRUD de uma tabelaFonte: Prompt de comando do Windows

Obs. É de suma importância que seja realizado na sequência: primeiro gerar o MODEL, depois o CRUD.

Geração da estrutura MVC

Executar do Windows (tecla de atalho do Windows + “r”), digite “execute os comandos abaixo para criar a estrutura da aplicação:

yiic shell c:\wamp\www\site_fatec\index.php

Acessando o shell do Yii

Prompt de comando do Windows

tabela”, pressione a tecla “Enter” para gerar o MODEL de uma tabela

Exemplo de saída do model:

Criando o Model de uma tabela Prompt de comando do Windows

tabela”, pressione a tecla “Enter” para gerar o VIEW/CONTROLLER de

Criando o CRUD de uma tabela Prompt de comando do Windows

Obs. É de suma importância que seja realizado na sequência: primeiro gerar o MODEL, depois o CRUD.

60

do Windows (tecla de atalho do Windows + “r”), digite “CMD” e execute os comandos abaixo para criar a estrutura da aplicação:

para gerar o MODEL de uma tabela

para gerar o VIEW/CONTROLLER de

Obs. É de suma importância que seja realizado na sequência: primeiro gerar o MODEL, depois o CRUD.

Page 61: TG Yii Framework

61

3.7.2. Personalizar o menu da página principal

Personalizar o menu da página principal, para acessar as tabelas com as funções do CRUD. Edite o arquivo main.php no diretório c:\wamp\www\site_fatec\protected\views\layouts\” Em ‘label’ coloque o nome que deseja que apareça no menu e em ‘array’ digite o nome da tabela que deseja interagir.

Exemplo do código 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)

),)); ?>

Page 62: TG Yii Framework

62

3.7.3. Alterando o método de autenticação

1. Acesse seu web site pelo endereço “http://localhost/site_fatec” e faça login com o usuário “admin” e com a senha “admin”.

2. Edite o arquivo “userIdentity.php” no diretório “c:\wamp\www\site_fatec\protected\components\”, troque todo código 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 função bCrypt

Configurando a função bCrypt para quando os usuários 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 diretório “c:\wamp\www\site_fatec\protected\config\”, dentro de 'import'=>array insira esta linha 'application.vendor.*', Exemplo do código atualizado (em destaque):

'import'=>array(

'application.vendor.*', 'application.models.*',

'application.components.*',

),

Page 63: TG Yii Framework

63

Crie o arquivo “bCrypt.php” no diretório “c\wamp\www\site_fatec\protected\vendor\“, inserindo o código 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;

}

}

?>

Page 64: TG Yii Framework

64

3.7.5. Validando usuário e senha no formato Blowfish

Edite o arquivo “user.php” no diretório “c:\wamp\www\site_fatec\protected\models\”, introduza estes blocos de código 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 método de autenticação do web site

1. Com usuário “Admin” logado, clique na aba “Usuario”, depois clique no link “Create”. 2. No campo “user”, digite o nome do usuário que deseja criar e no campo “password” digite

a senha desejada. 3. Clique em “Create” 4. Clique em logoff e faça login com o novo usuário e senha para testar.

Page 65: TG Yii Framework

65

3.8. LINHA DE TRABALHO

Nesta sessão aplicaremos todo o conceito de segurança mencionado nos capítulos anteriores com a implementação dos algoritmos de criptografia sobre nossas informações de login que ficarão armazenados no banco de dados.

Para demonstrar o objetivo deste trabalho, criaremos quatro possibilidades para salvar as senhas de autenticação no banco de dados.

Após a criação dos usuários e senhas utilizaremos algumas ferramentas e métodos para testar a dificuldade de decifração das senhas e vulnerabilidade dos algoritmos de criptografia citados acima.

Nota: Para cifrar as senhas com os algoritmos MD5 e SHA1 utilizamos as funções nativas do MySQL. No PhpMyAdmin criamos os usuários e suas senhas manualmente e na coluna da senha selecionamos a função do algoritmo escolhido para gerar o hash da mesma.

3.8.1. VISUALIZAÇÃO DOS USUÁRIOS E SENHAS CRIADOS

Conforme demonstrado neste capitulo, criamos quatro tipos de usuários, 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 endereço: “http://localhost/phpmyadmin/” 2. Entrar com o usuário root e com a senha em branco 3. No canto esquerdo, clicar no símbolo “+” do banco “site_fatec”, depois, clique na tabela

“user”

Na tela mostrará cada usuário criado e sua respectiva senha no formato em que foi criptografada (campo password). Veremos abaixo cada uma das situações.

Page 66: TG Yii Framework

Autenticação sem nenhum algoritmo de criptografia (texto claro)

Figura 26–Senha não criptografada

Fonte: PhpMyAdmin

Autenticação com o algoritmo nativo SHA1

Figura 27–Senha cifrada com o algoritmo SHA1

Fonte: PhpMyAdmin

Autenticação com o algoritmo nativo MD5

Figura 28–Senha cifrada com o algoritmo

Fonte: PhpMyAdmin Autenticação com o algoritmo Blowfish

Figura 29–Senha cifrada com o algoritmo

Fonte: PhpMyAdmin

Autenticação sem nenhum algoritmo de criptografia (texto claro)

Senha não criptografada

Autenticação com o algoritmo nativo SHA1

Senha cifrada com o algoritmo SHA1

Autenticação com o algoritmo nativo MD5

Senha cifrada com o algoritmo MD5

Autenticação com o algoritmo Blowfish

Senha cifrada com o algoritmo Blowfish

66

Page 67: TG Yii Framework

3.8.2. TESTANDO A SEGURANÇA DOS ALGORITIMOS SHA1, MD5 E BLOWFISH

Neste projeto utilizaremos apenas uma daSHA1 e MD5.

Esta técnica baseiarespectivos hashes armazenados em seus bancos de dados. que queremos obter no campo de busca sua senha originadora.

Um exemplo destes sites é o MD5 MYhttp://md5.my-addr.com/md5_decrypt

Realizamos testes com várias senhas original. Uma dessas senhas foi “senha123”, que muitas pessoas utilizam. Criptografamos ela em nosso banco de dados MySQL e gerou o este hash no campo e consulta do site e ele nos devolveu a mesma senha osegundos.

De acordo com o site, o mesmo possuí quase cinco bilhões de com suas respectivas chaves origina

Figura 30–Decifração do hash

Fonte: <http://md5.my-addr.com/md5_decrypt15/09/2013.

Um segundo site para

endereço http://md5decrypter.co.uk/

atualmente em sua base de dados aproximadamente 44 bi de

armazenadas.

TESTANDO A SEGURANÇA DOS ALGORITIMOS SHA1, MD5 E BLOWFISH

Neste projeto utilizaremos apenas uma das demais técnicas para

Esta técnica baseia-se em sites que contém uma lista gigantescaarmazenados em seus bancos de dados. Sendo assim,

que queremos obter no campo de busca do site e se existir este hash armazenado, o site retornará

Um exemplo destes sites é o MD5 MY-addr, acessado a partir do link:addr.com/md5_decrypt-md5_cracker_online/md5_decoder_tool.php

Realizamos testes com várias senhas comuns, todos os hashes

original. Uma dessas senhas foi “senha123”, que muitas pessoas utilizam. Criptografamos ela em nosso banco de dados MySQL e gerou o hash “e7d80ffeefa212b7c5c55700e4f7193e”, inserimos

no campo e consulta do site e ele nos devolveu a mesma senha o

De acordo com o site, o mesmo possuí quase cinco bilhões de hashes

com suas respectivas chaves originais.

MD5 com o MD5MyAddr

addr.com/md5_decrypt-md5_cracker_online/md5_decoder_tool.php>. Acessado em

Um segundo site para decifrar hashes MD5 e SHA1 é o MD5Decrypter encontrado no

http://md5decrypter.co.uk/. Este é nove vezes mais eficiente que o primeiro, pois, te

atualmente em sua base de dados aproximadamente 44 bi de hashes e suas respectivas senhas

67

TESTANDO A SEGURANÇA DOS ALGORITIMOS SHA1, MD5 E BLOWFISH

técnicas para decifrar os algoritmos

gigantesca de senhas e seus Sendo assim, inserimos o hash da senha

armazenado, o site retornará

addr, acessado a partir do link: nline/md5_decoder_tool.php.

hashes retornaram a senha original. Uma dessas senhas foi “senha123”, que muitas pessoas utilizam. Criptografamos ela em

212b7c5c55700e4f7193e”, inserimos no campo e consulta do site e ele nos devolveu a mesma senha original em questão de

hashes MD5 armazenados

md5_cracker_online/md5_decoder_tool.php>. Acessado em

MD5Decrypter encontrado no

iciente que o primeiro, pois, tem

e suas respectivas senhas

Page 68: TG Yii Framework

68

Realizamos outro teste, porém, neste utilizamos hashes do tipo SHA1, testamos várias

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 também

em questão de segundos.

Figura 31–Decifração 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, porém, ao invés dos algoritmos MD5 e SHA1, utilizamos o Blowfish. Além de realizarmos os testes de busca de hash nos sites anteriores, também os fizemos em outros sites que têm a mesma função.

O resultado foi que nenhum deles conseguiu decifrar qualquer senha criptografada com o algoritmo Blowfish.

Page 69: TG Yii Framework

69

4 DISCUSSÃO E RESULTADOS

Atualmente a segurança da informação é um tema de extrema importância no ramo computacional, principalmente na estruturação de aplicações web, que terão seus dados o tempo todo trafegando pela rede.

Não somente para organizações, mas também para indivíduos comuns que utilizam aplicações web para diversos fins. A cada dia que passa fica mais difícil proteger a integridade, confidencialidade, disponibilidade, autenticidade e irrevogabilidade de nossos dados.

Neste contexto, o ideal é utilizar criptografia com alto nível de segurança para manter estes dados confidenciais a salvo contra malfeitores. Verificamos que os algoritmos SHA1 e MD5 foram criados para hashing genérico, pois, tinham que ser rápidos para poder criptografar desde arquivos de texto até dados bem mais pesados, não especificamente senhas. Estes algoritmos usam pouca memória e fazem operações aritméticas de 32 bits, que é uma das maiores especialidades das Unidades de Processamento Gráfico (GPU). Isso se tornou um problema, pois, muitas organizações utilizam estes algoritmos, que estão ficando obsoletos, para guardar nossos dados sigilosos.

Um algoritmo robusto deve levar tanto tempo para ser decifrado que se tornaria impraticável 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) variável que pode ser alterado para compensar a evolução do poder de processamento. Isso significa que podemos aumentar o grau de complexidade do algoritmo quando for necessário, mudando apenas uma constante do seu código fonte, com isso acompanhando a evolução computacional.

Outro ponto positivo é que não há registros de que o Blowfish tenha sido decifrado. 4.1. DIFICULDADES E LIMITAÇÕES ENCONTRADAS

Percebemos que existe uma escassez do material de ajuda em português (e até mesmo de inglês), detalhando a implementação do algoritmo blowfish pelo framework Yii. Dificultando assim o processo de aplicação do framework para os usuários que gostariam de utilizar ou até mesmo testar para fins de aprendizado.

Page 70: TG Yii Framework

70

4.2. INDICADORES ANALISADOS

Os indicadores analisados foram pesquisas relacionadas ao nível de segurança dos algoritmos de criptografia MD5 e SHA1, que são os mais utilizados atualmente. Foi verificado que esses padrões de algoritmos mundialmente utilizados estão se tornando ineficientes, pelo fato de existir hoje uma gama de ferramentas e técnicas para decifrar senhas criptografadas por esses algoritmos. Com uma máquina usual conseguimos testar milhares de combinações por segundo. Tanto MD5 com SHA1 são funções de cifração de caminho único, ou seja, só é possível cifrar e não há função para decifrar, porém, como já havíamos explicado, existem diversas técnicas para gerar e comparar senhas criptografadas com estes algoritmos.

Outro indicador que foi a principal constatação de que esses algoritmos estão ultrapassados é que nos sites oficiais da Microsoft e do MySQL, foi divulgado o comunicado da substituição destes algoritmos, que eram utilizados na base de suas aplicações. Também no site oficial do PHP, existem informativos de que não é recomendável a utilização dos algoritmos MD5 e SHA1 por serem vulneráveis.

Figura 32–Comunicado Microsoft

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

Page 71: TG Yii Framework

71

Figura 33–Comunicado PHP

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

Além das pesquisas bibliográficas realizamos diversos testes para comprovar na prática se

realmente eram condizentes as informações obtidas nas pesquisas. Criamos diversas situações onde os algoritmos Md5 e SHA1 se mostraram ineficazes em vários 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 além de ser altamente complexo, possui mecanismos que dificultam e impedem a decifração de uma senha, mesmo que esta seja fraca. Funções próprias como o custo e o salto ajudam a reforçar a segurança do algoritmo.

Page 72: TG Yii Framework

72

5 CONSIDERAÇÕES FINAIS

Aplicamos neste trabalho conceitos sobre segurança da informação em frameworks para desenvolvimento web com utilização 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 análise dos resultados obtidos através das ferramentas para decifração de senhas criptografadas com os algoritmos MD5, SHA1 e Blowfish para as situações propostas neste trabalho de conclusão de curso. Claramente pôde-se observar que em um ambiente de desenvolvimento web, alguns algoritmos de criptografia se tornaram falhos, devido ao avanço computacional, ferramentas sofisticadas e novas técnicas que os malfeitores estão utilizando para acessar essas informações.

O MySQL conta também com o algoritmo de criptografia AES, que é seguro o suficiente para guardar nossos dados, porém, estamos disponibilizando mais esta alternativa, para não termos apenas uma opção de escolha de algoritmo de criptografia segura.

Mostramos que com a alteração no código das classes do framework Yii, conseguimos implantar um esquema de criptografia reforçada, o que faz uma total diferença na questão de assegurar que a identificação de login e outros dados não serão descobertos por malfeitores.

Com isso, conseguimos comprovar a eficiência, eficácia e facilidade de configuração do Blowfish, um dos algoritmos mais conceituados no mercado.

Pela experiência vivida neste projeto concluímos que, é altamente recomendado utilizar o algoritmo de criptografia Blowfish para substituir outros algoritmos que já vêm empacotados como nativos do MySQL e que são vulneráveis, caso do MD5 e SHA1.

Page 73: TG Yii Framework

73

TRABALHOS FUTUROS

Neste trabalho, foram realizadas pesquisas relacionadas às questões de segurança de algoritmos hashes amplamente conhecidos e utilizados para cifrar senhas de login em aplicações web.

Foram utilizados o framework Yii juntamente com o banco de dados MySQL para a criação de uma aplicação web. Neste caso as falhas de segurança estudadas foram vulnerabilidades dos algoritmos MD5 e SHA1.

Para dar continuidade a este trabalho seria interessante realizar trabalhos futuros relacionados à:

• Segurança da informação em redes • Segurança da informação em banco de dados

Pois, para se obter a senha armazenada no banco de dados o malfeitor teria que conseguir o acesso à rede, além é claro do acesso ao banco. Então os trabalhos futuros direcionados a esses temas colaborariam mais ainda para a segurança de dados confidenciais, indicando as possíveis vulnerabilidades e fornecendo ferramentas e técnicas para anular ou reduzir os riscos do acesso não autorizado dos malfeitores.

Page 74: TG Yii Framework

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

Page 75: TG Yii Framework

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/

Page 76: TG Yii Framework

76

REFERÊNCIAS

[ABNT 05] NORMA BRASILEIRA ABNT NBR ISO/IEC 17799:2005 –Tecnologia da informação - Técnicas desegurança — Código de prática para a gestão da segurança da informação. - 2. ed.2005. 132 p. [BUR 02] BURNETT, S.; PAINE, S; Criptografia e Segurança - O Guia Oficial RSA. Tradução 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. Tradução Arlete Simille Marques. São Paulo: Pearson Education do Brasil. 2008 [SIL 06] SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S.;Sistema de Banco de Dados; Tradução Daniel Vieira. - 5. ed. – Rio de Janeiro: Elsevier Editora Ltda, 2006. 781 p. [STA 08] STALLINGS, William; Criptografia e segurança de redes - Princípios e práticas; Tradução Daniel Vieira. - 2. ed. – São 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 Disponível em: <http://www.infowester.com/servapach.php>. Acessado 05/11/2013. [ATAQ 10] Por que se preocupar com a segurança. Novembro, 2010 Disponível em: <http://imasters.com.br/artigo/18556/>. Acessado 06/12/2013.

Page 77: TG Yii Framework

77

[BCRY 13] Função Bcrypt. 2013 Disponível em: <http://blog.thiagobelem.net/criptografando-senhas-no-php-usando-bcrypt-blowfish/>. Acessado 20/09/2013. [CRIP 13] Introdução a criptografia. 2013 Disponível em: < http://www.reocities.com/SiliconValley/park/2516/criptografia.pdf>. Acessado 13/11/2013. [CRY 13] Crypt_Blowfishsecurityfixdetails. 2013 Disponível em: <http://www.php.net/security/crypt_blowfish.php>. Acessado 17/09/2013. [CRY 13-2] Função Crypt. 2013 Disponível em: <http://kithomepage.com/kit/tutorial/php/function.crypt.php>. Acessado 20/09/2013. [CSI 12] Cartilha de Segurança para Internet. 2012. Disponível em: <http://cartilha.cert.br/livro/cartilha-seguranca-internet.pdf>. Acessado em 20/10/2013. [FRAM 13] Comparação dos melhores frameworks. 2013 Disponível em: <http://iisit.org/Vol10/IISITv10p095-109Chao0092.pdf>. Acessado 06/12/2013. [HACK 13] Tipos de ataques hackers. 2012 Disponível 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 Disponível em: <http://www.ietf.org/rfc/rfc1320.txt>. Acessado 25/11/2013. [MD5 92] MD5. Abril, 1992 Disponível em: <http://www.ietf.org/rfc/rfc1321.txt>. Acessado 25/11/2013.

Page 78: TG Yii Framework

78

[MYSQL 13] MySQL. 2013 Disponível em: <http://www.mysql.com/>Acessado 05/11/2013. [PHP 13] PHP5. 2013 Disponível em: <http://php.net/manual/pt_BR/faq.migration5.php>Acessado 05/11/2013. [SCH 13] SCHNEIER, Bruce; The BlowfishEncryptionAlgorithm. Disponível em: <https://www.schneier.com/blowfish.html>. Acessado 05/08/2013. [SHA1 01] SHA1. Setembro, 2001 Disponível em: <http://www.ietf.org/rfc/rfc3174.txt>. Acessado 25/11/2013. [TAN 02] TANENBAUM, Andrew S.; Computer Networks. Tradução VandenbergD. de Souza. 4. ed. 2002. 632 p. Disponível em: <http://www-usr.inf.ufsm.br/~rose/Tanenbaum.pdf>. Acessado 16/09/2013.