4 PROPOSTA DE SOLUÇÃO
4.2 MODELAGEM DO SISTEMA PROPOSTO
4.2.1 Loja Virtual
4.2.2.4 Diagrama de atividade
Segundo Booch (2006), um diagrama de atividades mostra o fluxo de uma atividade para outra em um sistema. Uma atividade mostra um conjunto de atividade, o fluxo sequencial ou ramificado de uma atividade para outra e objetos que realizam ou sofrem ações. Na figura 15 é apresentando o diagrama de sequência do bot.
Figura 15 – Diagrama de atividade bot.
DA001 – Ataque a loja.
O usuário inicia o bot definindo a quantidade de ataques.
1. O bot acessa a loja e gera uma lista com as urls dos produtos. 2. Ele gera uma pessoa falsa para a compra.
3. Finaliza a compra com um produto e dados gerados.
4.3 FERRAMENTAS UTILIZADAS
Nesta seção é apresentado as ferramentas utilizadas para o desenvolvimento da loja virtual e do bot.
4.3.1 Loja Virtual
Nesta secção é apresentada a linguagem e bibliotecas utilizadas para o desenvolvimento da loja virtual.
4.3.1.1 Java
Segundo Lemay (1996, p. 4) “Java é uma linguagem orientada a objetos desenvolvida pela Sun Microsystems. Utilizando influências do C++, o Java foi concebido para ser uma linguagem pequena, simples e portátil entre várias plataformas e sistemas operacionais”.
Lemay (1996, p. 6) complementa que como os objetivos do Java eram de ser pequeno, rápido, eficiente e a independência de plataforma estes mesmos objetivos tornaram a
linguagem ideal para o desenvolvimento de aplicações executáveis distribuídas pela World Wide Web.
4.3.1.2 Javalin
O Javalin é um micro framework escrito em Java e Kotlin para o desenvolvimento de aplicações web (principalmente aplicações REST) que busca simplicidade, flexibilidade e leveza. O framework utiliza atualmente o Jetty como servidor Http.
4.3.1.3 SQLite
O SQLite é uma database SQL embutida, autocontida, transacional que não utiliza uma arquitetura cliente-servidor. Ela suporta transações ACID e operações com valores em JSON. O código do SQLite está no domínio público e pode ser utilizado para qualquer propósito, seja público, comercial ou privado.
4.3.2 Bot
Nesta seção é apresentada a linguagem utilizada e ferramentas de auxílio ao desenvolvimento do bot.
4.3.2.1 Python
De acordo com Borges (2010, p. 13) O Python possui uma sintaxe clara e concisa, que favorece a legibilidade do código fonte, tornando a linguagem mais produtiva.
Segundo BORGES (2010, p. 14):
A linguagem foi criada em 1990 por Guido van Rossum, no Instituto Nacional de Pesquisa para Matemática e Ciência da Computação da Holanda (CWI) e tinha originalmente foco em usuários como físicos e engenheiros. O Python foi concebido a partir de outra linguagem existente na época, chamada ABC.
É importante ressaltar que “além de ser utilizado como linguagem principal no desenvolvimento de sistemas, o Python também é muito utilizado como linguagem script em vários softwares, permitindo automatizar tarefas e adicionar novas funcionalidades.” (BORGES, 2010, p. 13)
4.3.2.2 Selenium
O Selenium automatiza os navegadores. Comumente, é utilizado para automatizar aplicativos da Web para fins de teste, mas não se limita apenas a isso.
O Selenium tem o apoio de alguns dos maiores fornecedores de navegadores que tomaram medidas para tornar o Selenium uma parte nativa de seu navegador. É também a principal tecnologia em inúmeras outras ferramentas de automação de navegadores, APIs e frameworks.
4.3.2.3 GeckoDriver
GeckoDriver é um driver utilizado para abrir instancias do browser, para abrir os sites nos testes automatizados via Selenium WebDriver.
5 DESENVOLVIMENTO
Neste capítulo, são abordadas as definições do desenvolvimento, etapas, experimentos e resultados obtidos.
5.1 DINÂMICA DO DESENVOVIMENTO
Durante o processo de desenvolvimento da proposta, não foi encontrado uma base de dados pública e de utilização gratuita, contendo compras realizadas por humanos e por bots, logo uma dinâmica de desenvolvimento foi proposta pelo o orientador do trabalho visando a construção de uma base de dados para o treinamento do classificador bayesiano.
A dinâmica foi constituída de duas partes, uma versão mais simples da loja virtual, que seria utilizada para coletar e armazenar dados e métricas para o treinamento e um bot que ficaria responsável em atacar a loja para gerar compras fraudulentas. Cada um dos autores ficou responsável por desenvolver uma parte, um responsável pela loja e outro pelo bot. Ambos os autores não sabiam como estava sendo feito a implementação das partes para assim evitar que fosse realizado um experimento viciado.
Ao fim do desenvolvimento da loja simplificada a mesma foi divulgada entre amigos e colegas dos autores e em redes socias para a coleta de dados de treinamento.
5.2 ETAPAS DO DESENVOLVIMENTO
Nesta seção é apresentado o processo de desenvolvimento da loja virtual, do bot e do método de Bayes, explicando em detalhes cada etapa e dificuldades encontradas no desenvolvimento.
5.2.1 Loja
Para desenvolver a loja virtual era necessário escolher linguagens e bibliotecas para o desenvolvimento tanto da parte visual quanto da parte lógica.
Na parte lógica da loja foi utilizada a linguagem de programação Java pela a afinidade dos autores com a mesma, a biblioteca Javalin que é uma biblioteca para o desenvolvimento de aplicações web construído em cima do servidor web Jetty e como banco de dados foi escolhido o SQLite devido a sua facilidade de implementação e também por ser um banco de dados embutido, assim facilitando a implantação da loja virtual em um ambiente de produção.
Na figura 16, é apresentado como os componentes citados se relacionam Figura 16 - Componentes e Ferramentas Utilizadas na Loja Virtual
. Fonte: Autores
5.2.2 Bot
Para desenvolvimento do bot é necessário que ele agisse de forma mais autônoma, e também que abrisse navegadores web para simular ações de um usuário normal.
Sendo assim foi optado pela escolha do desenvolvimento em Python pela escalabilidade e velocidade de desenvolvimento. Para a navegação e manipulação dos objetos de html, foi utilizado uma biblioteca muito conhecida que é a Selenium. E por fim o Geckodriver que é um driver que possibilita abrir várias instâncias de um navegador.
Na figura 17 é apresentado a interação das ferramentas utilizadas para desenvolvimento do bot.
Fonte: Autores
Como ilustrado na figura 17, todo desenvolvimento feito na linguagem Python utilizando a biblioteca externa Selenium, juntos abrem e operam ações no navegador, e executando ações previamente definidas.
5.2.3 Bayes
Para a implementação do classificador naive bayes foram consideradas algumas bibliotecas prontas disponíveis publicamente como exemplo a biblioteca WEKA, desenvolvida pela universidade de Waikato, e algumas implementações encontradas no GitHub. Foi optado por uma das implementações encontradas no GitHub devido a sua facilidade de utilização e documentação direta e clara. O código fonte está disponível em https://github.com/ptnplanet/Java-Naive-Bayes-Classifier.
5.3 EXPERIMENTO
As aplicações foram desenvolvidas com uma dinâmica entre os autores do trabalho, um ficou responsável por desenvolver a loja virtual e o outro ficou responsável por desenvolver o bot, sendo que as partes não sabiam como e o que cada implementou.
A escolha da dinâmica entre os autores foi proposta pelo orientador do trabalho, para trazer um nível de realismo ao experimento. O fluxo do experimento pode ser observado no fluxograma apresentado na figura 18:
Figura 18 – Fluxograma das etapas do experimento.
Fonte: Autores
Como não foi encontrado uma base de dados disponível que se encaixasse no cenário proposto, uma primeira versão da loja virtual foi construída com intuito de coletar dados para o treinamento do classificador bayesiano.
Tanto a loja quanto o bot foram desenvolvidos em paralelo, sem que um autor soubesse o que o outro estava fazendo e parametrizando.
Após a conclusão do desenvolvimento da loja virtual, a mesma foi divulgada em redes sociais e entre colegas e amigos dos autores.
Concluindo três semanas de coletas de dados da loja, foi efetuado o ataque o ataque a mesma com o bot, assim encerrando o processo de coleta de dados.
Por fim foram compilados os dados que foram utilizados no treinamento do classificador bayesiano e também o mesmo foi implementado e integrado na loja virtual.
5.3.1 Loja
O desenvolvimento da loja virtual foi simples e direto e sem muitos problemas. Primeiramente foram elaboradas e codificadas as telas da página principal, do catálogo, do carrinho, dos detalhes do produto, do checkout e a de agradecimento. Na figura 19 é apresentado o catálogo de produtos da loja virtual.
Figura 19 – Catalogo de produtos da loja virtual.
Fonte: Autores
Após feita as telas, começou a implementação das interações do usuário com a tela, como por exemplo, a adição de um produto ao carrinho. Na figura 20 é apresentado o checkout da loja virtual.
Figura 20 – Checkout da loja virtual.
Fonte: Autores
Para finalizar foi escrita a parte de persistência das compras realizadas pelos usuários e foram realizados testes simples para garantir o funcionamento básico.
5.3.2 Bot
O desenvolvimento do bot foi dividido em algumas etapas. Primeiramente ele coleta todos os produtos que estão expostos na loja, depois baseado na quantidade de ataques que o usuário determinou ele gera usuários falsos e por fim ele faz a compra na loja para cada usuário gerado.
Inicialmente ele foi projetado para reutilizar a mesma janela do navegador, porém, descobriu-se que o Geckodriver não é “safe thread” pois notou-se que utilizar várias threads no mesmo driver ocorria muitos erros, então foi optado por subir 10 instâncias do driver por vez e efetuar o ataque e finaliza-los.
Durante o ataque o Bot salva em um arquivo “json” dados falsos utilizados no preenchimento do formulário de compra, e também ele gera um arquivo “log” descrevendo o que aconteceu em cada etapa do processo do ataque à loja.
5.3.3 Bayes
Para o treinamento do classificador bayesiano, a loja coletou diversos dados nas compras realizadas pelos usuários, entre eles:
As informações preenchidas nos campos. O tempo de foco em cada campo do formulário. Produtos que foram comprados.
Tempo desde o início da compra até a finalização. Quantidade de vezes que o catálogo foi visitado.
Quantidade de vezes que a página de detalhes do produto foi visualizada.
Entre os dados mencionados acima, foram utilizadas as informações de tempo do foco em cada campo do formulário e o tempo por caractere devido a notável diferença observada entre compras realizadas por humanos e pelo bot. A loja em si não acompanha o tempo por caractere, mas um tempo aproximado foi calculado utilizando o tempo de foco total no campo dividido pela quantidade de caracteres digitadas.
𝑇𝑒𝑚𝑝𝑜 𝑑𝑒 𝑓𝑜𝑐𝑜 𝑛𝑜 𝑐𝑎𝑚𝑝𝑜 𝑁𝑢𝑚. 𝑐𝑎𝑟𝑎𝑐𝑡𝑒𝑟𝑒𝑠 𝑑𝑜 𝑐𝑎𝑚𝑝𝑜
Uma problemática encontrada durante o preparo dos dados de treinamento foi que os dados escolhidos eram numéricos e o classificador bayesiano trabalha com dados categóricos. Para solucionar este problema foi realizada a categorização dos dados coletados, utilizando uma escala determinada pelos autores. As escalas utilizadas para o tempo de foco e o tempo por caractere foram as seguintes demonstradas na figura 19:
Figura 19 – Categorização dos dados coletados.
Fonte: Autores
Após determinar como os dados seriam categorizados, foi feita uma análise dos dados e foram extraídos cinquenta registros de compras realizados por pessoas reais.
Com estes registros, foi aplicado a classificação dos dados, utilizando a categorização apresentada anteriormente.
O mesmo processo de categorização foi feito com os registros de compras realizadas pelo bot.
Com as informações categorizadas, foram criados arquivos de texto simples para armazenamento dos dados de treinamento e foram anexados ao código da loja.
Ao iniciar, a loja carrega estas informações pré compiladas para o treinamento do classificador.
5.4 RESULTADOS
Nesta seção é apresentado os resultados gerados pelo desenvolvimento proposto, tabelas e análises.
5.4.1 Tempo de Foco
O tempo de foco representa quanto tempo em milissegundos o usuário levou para digitar uma informação em um dos campos do formulário. Nas figuras 20 e 21 são apresentados o menor, o maior e o tempo médio de focos em cada campo do formulário preenchido pelo bot e por humanos respectivamente.
Figura 20 – Estatística de compras realizadas pelo bot
Fonte - Autores
Figura 21 – Estatística de compras realizadas por humanos
Fonte – Autores
Observando as tabelas é possível observar uma grande discrepância entre pessoas reais e o bot em todas as colunas.
5.4.2 Matriz de Confusão
A matriz de confusão é uma tabela onde é possível observar a precisão de um algoritmo supervisionado. Na figura 22 é apresentada a matriz de confusão utilizando um esquema de teste 50/50, ou seja, 50% das tentativas foram realizadas por humanos e as outras 50% pelo bot.
Figura 22 – Matriz de confusão
Fonte: Autores
É possível observar que em duas instâncias o classificador bayesiano previu erroneamente a classe, no caso da classificação errônea do humano como bot foi devido a utilização da funcionalidade de autopreenchimento do formulário do navegador.