tg yii framework
TRANSCRIPT
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
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
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
“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.”
“Uma pessoa inteligente resolve um problema, um sábio o previne.”
Albert Einstein
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.
ABSTRACT
Due to advancement in technology, there was a significant gain in performance computer components such as CPU and RAM. This fact facilitated the execution of harmful actions carried out by malefactors, for example, in the process to decipher encrypted sensitive information.
Because, with a current personal computer (Desktop) and using specialized techniques, they can get find out passwords encrypted with renowned hashes algorithms, that travels over the network or that are stored in databases.
In this context, the main objective is the implementation of the Yii framework for creating a web application, along with the Blowfish encryption algorithm, which will provide greater security against intrusion in systems of the web applications that use the database to store users and passwords. Thus it is intended to replace the native algorithms used in the MySQL (Wich according to several researches are vulnerable) for a more robust algorithm, by changing a few lines of code. Keywords: Framework. Encryption. Web application security.
LISTA DE FIGURAS Figura 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
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
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
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
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
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
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.
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.
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.
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]
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
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
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.
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
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]
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
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.
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.
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.
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.
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]
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.
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.
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
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
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.
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
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]
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.
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
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
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]
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]
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]
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]
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
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.
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]
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]
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
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
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
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]
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.
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]
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:
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.
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
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
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?”
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;
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', ),
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.
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)
),)); ?>
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.*',
),
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;
}
}
?>
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.
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.
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
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
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.
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.
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.
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.
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.
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.
74
ANEXO A: LISTA DE SITES PARA DECIFRAR HASHES MD5 E SHA1
http://bokehman.com/cracker/
http://code.google.com/p/hash-identifier
http://hackerscity.free.fr/
http://ice.breaker.free.fr/
http://ivdb.org/search/md5/
http://linardy.com/md5.php
http://md5.benramsey.com/
http://md5.c.la/
http://md5.idiobase.de/
http://md5.khrone.pl/
http://md5.my-addr.com/
http://md5.netsons.org/
http://md5.rednoize.com/
http://md5.wkeys.info/sigla.html/
http://md5.xpzone.de/
http://md5crack.it-helpnet.de/index.php?op=add
http://md5search.deerme.org/
http://nz.md5.crysm.net/
http://passcracking.com/
http://passwordsecuritycenter.com/in...;products_id=7
http://rainbowcrack.com/
http://schwett.com/md5/
http://search.cpan.org/~blwood/Digest-MD5-Reverse-1.3/
http://sha1search.com/
http://shm.hard-core.pl/md5/
http://shm.pl/md5/
http://www.csthis.com/md5/index.php
http://www.gdataonline.com/seekhash.php
http://www.hashchecker.com/index.php?_sls=search_hash
75
http://www.hashreverse.com/
http://www.md5.org.cn/index_en.htm
http://www.md5database.net/
http://www.md5-db.com/
http://www.md5decrypt.com/
http://www.md5decrypter.com/
http://www.md5encryption.com/
http://www.md5this.com/
http://www.milw0rm.com/md5/
http://www.mmkey.com/md5/
http://www.neeao.com/md5/
http://www.rainbowcrack-online.com/
http://www.securitydb.org/cracker/
http://www.securitystats.com/tools/hashcrack.php
http://www.tmto.org
http://www.tydal.nu/article/md5-crack/
http://www.und0it.com/
http://www.xmd5.org/index_en.htm
https://www.w4ck1ng.com/cracker/
76
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.
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.
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.