Você está na página 1de 54

CENTRO PAULA SOUZA

ESCOLA TÉCNICA ESTADUAL BENTO QUIRINO


Curso Técnico em Desenvolvimento De Sistemas

MURILO LOUREDO DO CARMO


MATHEUS FERREIRA SANTANA
GUSTAVO HENRIQUE CREVELARIO LEITE
GUILHERME GIMENES MAYER

PROJETO JERÔNIMO: Desenvolvimento de um site para ensino sobre


segurança da informação e web hacking

Campinas
2022
MURILO LOUREDO DO CARMO
MATHEUS FERREIRA SANTANA
GUSTAVO HENRIQUE CREVELARIO LEITE
GUILHERME GIMENES MAYER

PROJETO JERÔNIMO: Desenvolvimento de um site para ensino sobre


segurança da informação e web hacking

Trabalho de Conclusão de Curso


apresentado à Etec “Bento
Quirino”, do Centro Estadual de
Educação Tecnológica Paula
Souza, orientado pelo Prof.
Adriano Cilhos Doimo, como
requisito parcial para obtenção
do título de técnico em
Desenvolvimento de Sistemas.

Campinas
2022
Dedicatória

Dedicamos o nosso TCC aos nossos familiares que nos apoiaram em todo
decorrer do curso. E também a todos os professores do Colégio Bento Quirino, que
fizeram o possível e o impossível para nos ensinar mesmo em um momento
conturbado, em especial para o coordenador e professor Adriano e para o professor
Felipe que estiveram conosco em todos os momentos.
Agradecimentos

Queremos agradecer a todos funcionários do colégio pela paciência e


persistência em um momento assombroso como o cenário em que iniciamos nossa
caminhada aqui, agradecemos também aos professores e colegas que nos
ajudaram sempre ao máximo possível, mesmo com tanta dificuldade e momentos
de turbulência. Por fim, queremos agradecer imensamente ao nosso querido amigo
Jerônimo, a inspiração para o nome do nosso projeto, que proporcionou diversos
momentos de felicidade e descontração em momentos tensos no laboratório de
informática, sempre proporcionando momentos únicos e marcantes.
RESUMO

Com o grande avanço de todos os tipos tecnologias em geral, as pessoas se


acostumaram a utilizar internet diariamente, sabendo disso diversas dessas
tecnologias também são utilizadas de forma maliciosa, portanto, as pessoas que
não conseguem acompanhar o desenvolvimento intenso e constante do seu avanço
são favoráveis a serem afetadas diretamente ao utilizar a web incorretamente.
Consequentemente a necessidade de se atualizar e de se proteger de perigos
diários encontrados na internet está cada vez mais vigente, para combater essas
forças, é importante conhecer exatamente como se defender e prevenir, e para isso
não há forma melhor do que aprender e reconhecer métodos de se evitar estes
problemas. Com isso o intuito deste trabalho é demonstrar através de um site,
desenvolvido através do conhecimento adquirido ao decorrer do curso, conceitos
básicos sobre segurança da informação e web hacking com o propósito de educar e
exemplificar como se proteger e reconhecer como são executados os ataques.

Palavras-chave: web. segurança da informação. web hacking. Site. Tecnologia


proteger. prevenir.
ABSTRACT

With the great advancement of all types of technologies in general, people


have become accustomed to using the internet daily, knowing that several of these
technologies are also used maliciously, therefore, people who cannot keep up with
the intense and constant development of their advancement are favorable to be
directly affected by using the web incorrectly. Consequently, the need to update and
protect yourself from daily dangers found on the internet is increasingly in force, to
combat these forces, it is important to know exactly how to defend and prevent
yourself, and for that there is no better way than to learn and recognize methods. to
avoid these problems. With that, the purpose of this work is to demonstrate, through
a website developed through the knowledge acquired during the course, basic
concepts about information security and web hacking with the purpose of educating
and exemplifying how to protect yourself, and recognize how attacks are executed.

Keywords: web. information security. web hacking. Site. Technology protects. to


prevent.
SUMÁRIO
1. Introdução.......................................................................................................8
1.1. Tema...............................................................................................8
1.2. Problematização…………….……………………………………...…8
1.2.1. Pesquisa de Campo Inserindo o sumário ...............................9
1.3. Justificativa………………….……………………………………….13
1.4. Hipótese……..……………….……………………………………….13
2. Desenvolvimento..........................................................................................14
2.1. Aplicação.....................................................................................14
2.2. Corpo do site……….………………………………………………..14
2.3. SPA (Single Page Application) e Tecnologias de
Desenvolvimento Modernas……………………………………………...…….13
2.4. Modularização e Otimização......................................................17
2.5. Introduzindo React......................................................................17
2.6. Estrutura base de um projeto React.........................................19
3. Conceitos de S.I ...........................................................................................21
3.1. Introdução SI...............................................................................21
3.2. Os Pilares…………...………………………………………………..21
3.2.1. Confiabilidade.…...………………………………………………..22
3.2.2. Integridade…...…...………………………………………………..23
3.2.2.1. Integridade Física……………………….….…………………..23
3.2.2.2. Integridade Lógica………………………...……………………23
3.2.3. Disponibilidade……………………………………………………25
3.2.4. Autenticidade………………………………………………………26
3.2.5. Não repúdio………………………………………………………...26
3.3. Cartilhas de Segurança para Internet……………………………26
3.3.1. Temas……………………………….…….………………………...27
3.3.1.1. Backup……….……………………..…………………………….27
3.3.1.2. Boatos…………………………………………………………….29
3.3.1.3. Códigos Maliciosos…………………………………………….29
3.3.1.4. Comércio Eletrônico……………………………………………29
3.3.1.5. Privacidade e segurança………………………………………30
3.3.1.6. Dispositivos Móveis……………………………………………30
3.3.1.7. Internet Banking………………………………………………...31
3.3.1.8. Proteção de Dados…………………………………………..…32
3.3.1.9. Redes……………………………………………………………...33
3.3.1.10. Redes Sociais……………………………………………….....34
4. Hacking……………………………………………………………………………..35
4.1. Introdução às aplicações web…………………………………….35
4.2. Principais Vulnerabilidades……………………………………….35
4.2.1. SQL Injection………………………………………………………37
4.2.2. Cross-site Scripting (XSS)......................................................39
4.2.2.1. Detectando e protegendo contra XSS………………………40
4.2.3. CROSS-SITE REQUEST FORGERY (CSRF)...........................41
4.2.4. Session Hijacking…………………………………………………42
5. Testes de Penetração e Ataques………………………………………………43
5.1. Kali Linux…………………………………………………………….45
5.2. Websploit……………………………………………………………..45
5.3. Ataques de força bruta (Redes Wi-fi)........................................46
5.4. Ataque de gerenciamento de Sessões………………………….48
5.5. Gerenciamento de ataques cibernéticos (Metasploit).............49
6. Conclusão………………………………………………………………………….50
7. Referências Bibliográficas……………………………………………………...51
LISTA DE FIGURAS
Figura 1 – Questão 1.................................................................................................9
Figura 2 – Questão 2...............................................................................................10
Figura 3 – Questão 3...............................................................................................10
Figura 4 – Questão 4...............................................................................................11
Figura 5 – Questão 5...............................................................................................11
Figura 6 – Questão 6...............................................................................................12
Figura 7 – Questão 7...............................................................................................12
Figura 8 – Questão 8...............................................................................................13
Figura 9 – HTML......................................................................................................15
Figura 10 – Exemplo de HTML...............................................................................15
Figura 11 – Resultado de um JSX.........................................................................18
Figura 12 – Diretórios Jerônimo............................................................................20
Figura 13 – Demonstrando SQL Injection............................................................35
Figura 14 – SELECT SQL......................................................................................35
Figura 15 – Exemplo de inserção de javascript em uma entrada GET (XSS)...37
Figura 16 – XSS Exemplo......................................................................................37
Figura 17 – Exemplo de XSS com hexadecimais................................................37
Figura 18 – Exemplo de requisição HTTP............................................................39
Figura 19 – Exemplo de ataque utilizando o web killer do Websploit...............43
Figura 20 – Encerramento de processos Airmon-Ng..........................................44
Figura 21 – Criação de uma interface de rede virtual com Airmon-Ng.............44
Figura 22 – Resultado do comando wlan0mon do Airodump-Ng......................45
Figura 23 – Resultado do comando wlan0mon do Airodump-Ng......................45
Figura 24 – Comando para realização do ataque a rede wlan............................45
Figura 25 – Comando Aireplay-Ng –deauth realizando a desconexão dos
usuários da rede......................................................................................................45
9

1. INTRODUÇÃO

1.1. Tema

Com o passar dos anos a internet começou a ser muito utilizada, logo,
diversas pessoas acessam no seu cotidiano, logo, essa utilização em massa
chamou a atenção de mal intencionados, portanto, este trabalho irá apresentar
através de um site informativo/educativo métodos de se defender e proteger através
dos conteúdos apresentados no mesmo, sendo eles: o que é segurança da
informação, seus princípios, como ela impacta no cotidiano, do que a segurança da
informação visa nos proteger e como suas metodologias influenciam e permitem
sistemas serem mais seguros. E para acompanhar a segurança da informação
temos o Web Hacking, o que ele é, seus perigos, o que é possível fazer e aprender
com web hacking.

1.2. Problematização

Atualmente existem diversos meios diferentes de sermos atacados ao utilizar


a web, muitas formas de ataques ainda pouco conhecidas pelas pessoas, que por
conta da falta de conhecimento ou má instrução são facilmente afetadas pelos mal
intencionados. Com isso a vulnerabilidade dessas pessoas é consequentemente
mais elevada, e este fato pode trazer a eles problemas como roubo de dados,
danificação em suas máquinas, além de poderem ser manipuladas através de
golpes e fraudes efetuados através dos ataques.
Em virtude a estes problemas o projeto tem como propósito de expor um
conteúdo base ou ensinar as pessoas, que podem ou não serem do grupo
vulnerável, apresentando o que ela é segurança da informação, como ela protege
os sistemas, como ela impacta no nosso dia-a-dia, como a sua utilização de forma
indevida pode prejudicar etc. Além disso, para aprimorar o conhecimento e
aprendizado será retratado também web hacking a fim de conhecer um pouco os
riscos e perigos das tecnologias que estão na web. Todo conteúdo abordado será
através de exemplos e conceitos teóricos.
10

1.2.1. Pesquisa de campo


-
Para melhor precisão da situação atual do conhecimento dos possíveis
usuários, foi realizada uma pesquisa através da plataforma forms, do Google, com o
intuito de analisar e modelar a profundidade dos temas que serão abordados no
projeto. A partir disso, foram realizadas oito questões para uma população de
aproximadamente quarenta pessoas, entre elas, programadores, não
programadores, pessoas cultas e leigas.
Link:https://docs.google.com/forms/d/1_tZ_eLN6yjRmq5C-
TkBbaWuHR0HrNTFTym9u2jaiNzo/edi
De acordo com os resultados obtidos, que serão apresentados a seguir,
adaptamos os conteúdos para que se encaixa-se de acordo com a demanda
expressa nas respostas:
Questão 1:

Figura 1 - Questão 1.

Questão 2:
11

Figura 2 - Questão 2.

Questão 3:

Figura 3 - Questão 3.

Questão 4:
12

Figura 4 - Questão 4.

Questão 5:

Figura 5 - Questão 5.

Questão 6:
13

Figura 6 - Questão 6.

Questão 7:

Figura 7 - Questão 7.

Questão 8:
14

Figura 8 - Questão 8.

1.3. Justificativa

Por conta do vultoso avanço das tecnologias que englobam a internet,


diversas pessoas não conseguem acompanhar o seu avanço e sucessivamente não
conseguem se proteger por conta disso é necessário o aprendizado para
acompanhar este avanço, para ser favorável a estas pessoas que são afetadas pela
inocência em conceitos tecnológicos, o trabalho tem o intuito de sanar essas
necessidades de quem está mais precisando ou até mesmo informar e servir como
uma base para interessados nos tópicos abordados. Portanto, em virtude disso, a
elaboração do site tem como objetivo de esclarecer e introduzir esses tópicos de
uma forma transparente, clara e desenvolvida até o limite do possível.

1.4. Hipótese

O mundo tecnológico atual vive em constante mudança, e com sistemas,


nunca é diferente. Com as mudanças, novas features, novas ameaças e
vulnerabilidades são detectadas. A importância na escrita do código de aplicações,
conceitos de interação com usuário e manipulação de dados, devem ser feitos com
atenção. O projeto Jerônimo tem como objetivo a criação de uma aplicação web
expositiva, que apresente um conteúdo introdutório a segurança de sistemas e da
informação e conceitos básicos de Web Hacking de maneira acessível. É esperado
que a aplicação web a ser desenvolvida consiga suprir uma necessidade
reconhecida de desmistificar o que é um software seguro e ataques a aplicações
web.
15

2. DESENVOLVIMENTO

2.1. Aplicação

Para exemplificar e introduzir todos os conteúdos mencionados no tópico


anterior, será elaborado uma página web baseado nas tecnologias que englobam o
front-end para uma melhor visualização organização e dos temas propostos para o
projeto, e para isso, iremos utilizar múltiplas tecnologias para distintas funções que
irão executar de forma com o objetivo de apresentar os tópicos do trabalho, esse
processo será feito levando em consideração as tecnologias utilizadas atualmente
visando utilizá-las juntamente com base no material de referência, pesquisas e
conteúdos aprendidos ao decorrer com curso.
Contudo, é importante iniciar pelo escopo do projeto, e para isso será
necessário somente a linguagem de marcação de hipertexto, também conhecida
como HTML, o elemento fundamental para a elaboração e definição do corpo do
site.
16

2.2. Corpo do site


Para a elaboração da aplicação como foi dito anteriormente será utilizado a
tecnologia HTML, utilizando seus comandos e tags para introduzir diversos
elementos no site, conforme a necessidade e para melhor desenvolvimento do
mesmo. A partir deste componente poderemos estruturar e em seguida esboçar o
projeto e materiais para o desenvolvimento e exposição da ideia apresentada
Para exemplificar e apresentar um progresso parcial do desenvolvimento do
projeto. Algumas ilustrações a seguir apresentam como está o processo de
desenvolvimento da aplicação.

Figura 9 - HTML.

Figura 10 - Exemplo de HTML


17

<!-- a parte a seguir e apenas um rascunho – fontes que usei: https://pt-


br.reactjs.org/docs/introducing-jsx.html => a doc do →

2.3. SPA (Single Page Application) e Tecnologias de Desenvolvimento


Modernas.
Aplicações de página única, ou SPA, é um tipo de aplicação ou site web que
possui carregamento em página única. Em um SPA, todo carregamento e
processamento de dados de UI ocorrem em uma única página que define endpoints
para requisições de usuários. Neste modelo de aplicação, todo o conteúdo existente
no corpo do site pode ser composto de elementos visuais (componentes) que
podem ser carregados, removidos, substituídos ou atualizados de forma
independente. Isso permite que a página não precise ser recarregada a cada
requisição de um cliente. Portanto, o modelo de aplicações SPA é focado em
interatividade que usabilidade rica com o usuário, de maneira que a interatividade e
design inteligente não gere uma demanda por grande processamento no runtime.
Durante o período dos anos 90 até meados dos os anos 2000, a maneira
como as aplicações Web funcionavam evoluiu de simples páginas com conteúdo em
texto representado por algum Markup Language como HTML, que eram ancorados
por links que permitiam a navegação para outras páginas, e esse foi o começo dos
sites e aplicações web. Entretanto, foi constatado com o passar dos anos que
imagens, estilos CSS, vídeos e outros são muitos Assets demoram muito para ser
baixados e exibidos pelo navegador. Colocar todos Assets dentro de um diretório
público e manter a aplicação desta maneira passou a ser um problema, porém,
surgiram alternativas para solucionar esse problema como Grunt, Gulp e no caso
do React o Webpack e o Babel. O Webpack funciona como empacotador de
módulos, ou seja, os assets, dividindo-os em módulos para serem lidos sob
demanda. Além de tecnologias como Webpack, outras como Babel são muito
interessantes para projetos modernos, pois funcionam como um transcompilador
para ECMAScript, para versões anteriores ou distintas do Javascript que cada
navegador em específico pode utilizar, sendo que, um transcompilador é um tipo de
software que recebe um código fonte de determinada linguagem com entrada e
devolve como saída o mesmo código fonte de maneira que atenda a um critério que
o transcompilador em específico se propõe a atender. A combinação dessas duas
18

tecnologias trabalhando em conjunto gera um ambiente de produção mais seguro,


seguindo o princípio de que todas dependências estáticas do programa possam ser
otimizadas para o Browser.

2.4. Modularização e Otimização


O conceito de modularização em desenvolvimento de softwares não é uma
grande novidade, surge em meados dos anos 1960. Os processos de
desenvolvimento de software sentiam a necessidade de criar procedimentos,
funcionalidades ou códigos que pudessem ser utilizados em outros programas com
o mesmo propósito ou semelhante. A linguagem C é bem conhecida por ser pioneira
em tal conceito. Acontece que foi constatado que práticas modulares na construção
de programas gera um resultado mais legível e um código mais fácil de manipular e
realizar reparos, onde se houver um erro, esse será descrito no módulo codificado
como individual. O conceito de codificação modular utiliza como base uma técnica
de algoritmos chamada de “Divide and conquer”. A técnica de dividir um problema
que tem como entrada uma matriz, em pequenos problemas com soluções menores
combinando as soluções desses problemas subsequentes para formular uma
solução final. Como observado, a técnicas modulares no desenvolvimento de
algoritmos como um todo é um conceito fundamental, beirando a trivialidade.
A ideia de otimização dentro de computação é sempre muito debatida e
dissecada conforme novas tecnologias surgem, segurança e performance, sempre
quando debatidos pela comunidade de desenvolvedores, chega-se ao consenso
que trata-se de um tradeoff. Uma aplicação muito focada em performance geral,
geralmente, possui mais falhas e brechas de segurança, sendo assim, o modo mais
apropriado de desenvolver um código seria visando a escalabilidade e manutenção
do código.

2.5. Introduzindo React


A partir dos resultados de UI obtidos com HTML puro, o time do projeto
Jerônimo decidiu utilizar um Framework ou Biblioteca que atendesse nossos
requisitos para construção de uma aplicação responsiva e com uma estrutura de
código modular, para facilitar a manutenção do código como um todo. Por estes
motivos, escolhemos o React criado e mantido pelo Facebook, pois se trata de uma
19

biblioteca Javascript para criação de Interfaces de Usuário. O React também é uma


biblioteca muito utilizada no mercado de desenvolvimento de aplicações Web
atualmente.
Com o React podemos criar componentes modularizados de UI com uma
sintaxe chamada JSX, ou Javascript XML. como sabemos o Javascript é a
linguagem padrão utilizada nos dias atuais na web, e XML é uma tecnologia bem
antiga para armazenamento de dados em linguagem de marcação. A criação de
componentes com JSX funciona como uma mistura de linguagem de marcação
como HTML e acoplamento lógico para alterações de estados com sintaxe
Javascript, surgindo então, o JSX.

Figura 11 – Resultado de um JSX.

Cada componente JSX se comporta de maneira individual e independente,


sendo assim, reutilizáveis. Para criar um componente com propriedades moldáveis,
é possível utilizar uma feature do React, onde é possível a realizar a criação de
variadas instâncias de um mesmo componente, até certo modo, semelhante ao
processo de instanciação de um sistema com arquitetura orientada a objetos. Um
design pattern muito utilizado em projetos de aplicações desenvolvidas em React se
baseia na criação de componentes JSX, onde uma entrada de um usuário pode
alterar um atributo ou propriedade de um componente. O React useState é uma
feature que atua desta forma, definindo um valor e seu referencial setter, que pode
ser entendido como um método ou procedimento para inserção de valor e alteração
de estado ou valor de um atributo. Com base em tais conceitos básicos sobre a
criação de componentes React, é possível a criação de simples interfaces de
usuário, entretanto, somado a outra tecnologia consolidada e universal na web,
como o CSS3, uma interface de usuário React, pode se tornar responsiva e com
estilos que possuem lógica própria.
20

2.6 Estrutura base de um Projeto React


De início deve-se criar a aplicação React utilizando o script create-react-app.
O comando npx create-react-app cria uma aplicação base com um esquema de
diretórios padrão para começar o desenvolvimento. Esse script quando executado
cria uma aplicação com as dependências necessárias para criação de um projeto
React. A partir dela, deve-se criar o código dentro do diretório src. Esses diretórios
criados, serão essenciais para utilizar um dos conceitos mais importantes do React,
A modularização e comportamento independente de cada componente criado. A
modularização consiste em dividir a UI em componentes isolados e independentes,
sendo que um componente não interfere no outro como comportamento natural,
somente se exportado é chamado dentro do contêiner principal. Essa característica
de modularização da UI, permite uma melhor manutenção e modificação do código
a ser pensado, desenvolvido e implementado.
A estrutura pensada para o desenvolvimento do Projeto Jerônimo, utiliza
como parâmetro de desenvolvimento uma metodologia utilizada para
desenvolvimento de projetos web chamada de metodologia dos doze fatores, que é
perfeitamente acoplada na maneira com o framework React funciona, pois as
dependências são declaradas e isoladas, todos os serviço se comportam de
maneira independente e as configurações da aplicação permite que ela funcione em
dispositivos distintos. Uma das propostas de desenvolvimento basea também se
baseia na singularidade de design de componentes JSX, preferindo uma aplicação
mais simples e com menos funcionalidades independentes em nível de design, mas
sempre buscando um padrão de desenvolvimento onde cada bloco de código não
seja completamente distintos uns dos outros. Fred Brooks (1975) em seu livro The
Mythical Man-Month, Diz sua tese sobre projetos de sistemas:
(...) Defenderei que a integridade conceitual é a mais importante
consideração no projeto do sistema. É melhor ter um sistema omitir certos
recursos e melhorias anômalas, mas para refletir um conjunto de ideias de
design, do que ter um que contém muitos bons, mas ideias independentes e

descoordenadas.

Com embasamento nestes conceitos abordados, o projeto Jerônimo utiliza


de recursos como create-react-app, um script de criação de sistema de diretórios,
código fonte e dependências bases de um projeto React. Deste modo o código
21

fonte do projeto utiliza da padronização da notação simples JSX e Javascript com


tecnologias server side Node JS. Cada página ou componente da aplicação possui
um diretório com seu respectivo nome, estilos CSS puro ou por meio de
dependências declaradas no arquivo package.JSON, além de possuírem seu
próprio index para evocação dentro da página a ser utilizada.

Figura 12 - Diretórios Jerônimo.


22

3. Conceitos de S.I.

Com a finalidade de complementar o site, é necessário preenchê-lo com os


temas mencionados na introdução do trabalho, para isso o conteúdo será
posicionado na página principal do projeto estilizado e posicionado de acordo com o
tópico que foi trabalhado anteriormente, juntamente com outros elementos e
informações sobre o trabalho, desenvolvimento do mesmo e elementos extras.
Levando em consideração os tópicos que serão apresentados e transferidos
para a aplicação sequencialmente conforme estabelecido a partir deste ponto.

● Introdução sobre Segurança da informação;


● Pilares da segurança da informação;
● Boas práticas na web.

3.1. Introdução SI

A segurança da informação como sugere o nome são procedimentos e


métodos que englobam diversos aspectos do termo, e por se tratar de um
tópico amplo, podemos resumi-lo e dizer que seu principal objetivo é defender
um sistema a partir de estratégias e táticas desenvolvidas e colocadas em
prática no desenvolvimento de um programa. Essa segurança de acordo com
o que foi estabelecido como prioridade a partir dos desenvolvedores do
mesmo. O profissional responsável por elaborar sistemas seguros tem em
base princípios que estabelecem alguns critérios a serem seguidos de acordo
com o que é necessário. Esses princípios são chamados de “Pilares da
Segurança da Informação” e é o que será analisado a seguir:

3.2. Os Pilares
Os pilares da segurança da informação são os principais responsáveis
por sustentar e dizer se a segurança da informação está em condizente com
a atualidade mediante ao mundo da tecnologia. Eles são os encarregados
por separar as necessidades e qualificá-las de acordo com suas
23

características distintas, esta etapa é como uma meta a ser seguida ou


alcançada, futuramente no desenvolvimento do sistema essas características
têm que compor o sistema elaborado seguindo conforme os princípios
estabelecidos.
Como exemplo pode-se fazer uma analogia, nos dias atuais, uma
grande parcela das pessoas possuem dados bancários, cartões e fazem
transferências bancárias, e é claro que ninguém gostaria de ter seus dados
bancários vazados por aí, ou qualquer outro dado. Diante a isso, existe um
pilar que indica a proteção/sigilo dos dados onde somente o usuário poderia
ter acesso.
Após isso é possível trazer uma analogia para cada pilar, pois eles se
aproximam muito da rotina de pessoas comuns, por isso é importante sempre
tratá-lo com total relevância para se elaborar um sistema funcional e que
passe confiança e proteção aos usuários da aplicação.

3.2.1. Confiabilidade

A confiabilidade consiste em um pilar que determina que os dados dos


usuários sejam de conhecimento e devidamente acessados somente pelos donos
dos dados, quando, onde e como ele desejar mantendo seu dado protegido de
terceiros que queiram ter o contato com essa informação. Portanto a confiabilidade
está diretamente ligada com a privacidade e segurança desses elementos, sendo
eles muito ligados a dados bancários e dados mais comuns como senhas e
documentos. Por isso é um pilar muito importante que impacta diretamente todos os
sistemas de segurança, por conseguinte caso a confiabilidade dos sistema seja
comprometida, é possível haver diversos problemas com vazamento de dados.
Como ocorreu em 2021 com o grupo de hackers Lapsus$, que obtiveram dados dos
usuários do ConecteSUS, diversas pessoas e a própria aplicação ficou inacessível
sendo afetadas.

3.2.2. Integridade
24

A integridade é um pilar que o próprio nome define muito bem, pois é


estipulado à conservação, controle e cuidado as modificações e
atualizações constantes dos dados durante toda a vida útil do mesmo no
sistema ou banco de dados no qual está inserido, como por exemplo,
senhas e números de identificação. Em virtude disso, a relevância deste
pilar em relação aos usuários é de enorme imprescindibilidade, pois
novamente, o pilar está conectado a quem depende da funcionalidade do
sistema desenvolvido.
Mas para que exista integridade na aplicação é necessário
mecanismos de controle, que serão responsáveis por gerenciar os dados de
uma forma mais qualificada e organizada de acordo com a necessidade
estipulada, provendo assim maior precisão e eficiência neste processo, e
como resultado é previsto uma margem de exclusão e alteração de dados
pequena. Ou seja, a função da integridade de dados é conservar essas
informações para que nada seja perdido ou comprometido seja qual for a
forma possível de perda, entretanto pode-se perder ou ocorrerem confusões
desses dados por quaisquer motivos, erros humanos, do sistema, causas
naturais, ataques, etc. Por conta disso, existem gêneros de integridades
distintas, que consequentemente exercem funções específicas.

3.2.2.1. Integridade física

Essa categoria de integridade consiste em manter e proteger com


máximo primor os dados de elementos externos, sendo eles, desastres
naturais, quedas de energia, ataques de hackers, etc. Para isso pode-se
utilizar recursos que podem ser armazenados em nuvem ou até mesmo
backups.

3.2.2.2. Integridade Lógica

Outra categoria de integridade é a integridade lógica, que leva consigo


algumas subdivisões, mas antes é necessário conhecer do que se trata este
25

pilar ao todo, para em seguida explicar sobre as suas ramificações. Levando


em conta o tópico anterior, onde trata-se de soluções externas ao sistema ou
banco de dados, a integridade lógica visa manter a ordem e racionalidade
dentro de especificamente banco de dados relacionais, por exemplo. Essa
definição abrange o conceito de forma vaga e breve e não apresenta o que
de fato é estabelecido internamente.
Logo ela é repartida e complementada por outros quatro conceitos de
integridade que se interligam, e aprimoram o pilar. Sendo todos eles aspectos
da integridade lógica, com características distintas que se remetem a base ou
a definição de integridade lógica e si:

● Integridade de entidade:
A integridade da entidade garante precisão dos dados e
informações contidas no banco de dados, nas suas linhas,
colunas, tabelas, mas para isso, os fatores devem grandes
quantidades.

● Integridade referencial:
A integridade referencial está interligado a processos que
asseguram os dados armazenados de forma uniforme, isso de
acordo com as regras e procedimentos estabelecidos ao banco
de dados, neste contexto temos as criações de chaves de
acesso, onde possibilita que sejam realizadas dentro do banco
somente as determinadas execuções de comandos corretos,
sendo elas de alteração, exclusão e ou adição.
As regras e procedimentos limitam e articulam diversos
erros internos ou procedimentos que facilitam no
desenvolvimento do banco de dados, podendo evitar a entrada
de dados duplicados e precisão nos dados adicionados ou
qualquer outro fator que possa ser estabelecido previamente ao
início do processo.

● Integridade de domínio:
26

Essa integridade é um processo diversificado que


assegura a precisão completa de cada etapa dos dados de um
determinado domínio, isso é, ela regula e rege quais valores
são compatíveis com determinadas colunas. Este
procedimento, assim como o anterior, pode ser totalmente
regrado e estabelecido antes de sua aplicação.

● Integridade definida pelo usuário:


Assim como as integridades anteriores, o usuário pode
preferir criar uma própria que encaixe com o que ele reconhece
ser importante proteger e ou sanar a necessidade em
particular.

3.2.3. Disponibilidade

Esse pilar como o próprio nome sugere a grosso modo se diz respeito
à garantia de disponibilidade dos dados que permitem o acesso aos
mesmos a qualquer momento de forma ágil pelos usuários e colaboradores.
Para que isso ocorra, o sistema e a aplicação que provém os dados deve
possuir total acesso às informações contidas em si, para que possa
eventualmente, apresentar as mesmas a quem deseja acessá-las. Mas para
que isso ocorra são etapas de manutenção veloz e contínuo, tanto de
hardware quanto de software e sendo assim, permitindo que o programa
responsável por organizar os dados na aplicação tenha o funcionamento
fluído, constante e imediato para estar disponível o sempre que possível,
entretanto isso tudo não é o suficiente, para complementar é pertinente
manter o projeto atualizado, ativo, online, seguro e salvo para que esteja
sempre a disposição para uso em qualquer momento independente da
situação atual na qual a aplicação esteja em funcionamento.
Exemplificando podemos novamente apresentar algo presente no
nosso dia-a-dia como qualquer sistemas empresariais, sistemas públicos e
outros que transmitem a disponibilidade de dados.

3.2.4. Autenticidade
27

A autenticidade é pilar responsável pelo gerenciamento e controle das


validações e permissões de acesso aos dados dos usuários, que podem vir
a alterá-los e utilizados pelo mesmo, este pilar portanto será o responsável
pela determinação de quem está ou não liberado a ter acesso e
manipulação dos dados e do sistemas de determinada aplicação ou pessoa.
Logo toda informação ou dado é sugestivo a provável ataque, portanto é de
suma importância que a autenticidade garanta a total controle desta
informações que podem ser as mais variadas possíveis, desde de nomes,
números, senhas, etc.

3.2.5. Não repúdio

Por fim o último pilar, que possui dois nomes, Irretratabilidade e Não
Repúdio, ele tem como objetivo solucionar possíveis problemas futuros,
principalmente em relação ao aspecto jurídico do processo inserido, o Não
Repúdio garante que corporações, empresas, entidades ou alguém não
possa negar o domínio na divulgação de informações, isso é, com intuito de
ter um documento, que possa provar que houve algo feito em um sistema
isso tudo a fim de se defender de possíveis acusações e processos feitos
pessoas mal intencionadas.
Como exemplo da área de atuação deste pilar podemos citar
assinaturas de documentos online, um exemplo que não é raro de se
acontecer e tem uma relevância significativa.
É notável a presença dos pilares em sistemas mais comuns que estão
em contatos frequentes com os usuários, fornecedores, ajudantes e até
mesmo desenvolvedores.

3.3. Cartilhas de Segurança para Internet

Junto com a evolução da internet foram planejados e registrados ao


longo dos anos diversos guias e documentos que auxiliam e fornecem
melhor orientação e direcionamento para os usuários informando sobre
utilização mais adequada dos recursos que a web provém, com segurança e
28

resguardado de qualquer tipo de ataque direto ou indireto, entretanto essas


não são de conhecimento dos usuários mais leigos, por pretextos diversos,
desconhecimento do mesmo, explicações complexas, dupla interpretação
etc.
Entretanto antes de direcionarmos se exemplificar e apresentar as
soluções, é necessário introduzir o problema que impacta diretamente os
diversos usuários dos dias atuais, muitos ataques que ocorrem no dia-a-dia
são muitas vezes causados, não por uma brecha em um sistema, mas sim
através da engenharia social. "Mas qual é o significado de engenharia
social?”
A engenharia social são conjuntos de técnicas utilizadas pelos hackers
para extrair o máximo possível de informações pertinentes de determinadas
pessoas, as técnicas utilizam diversos meios, podendo ser Quid pro quo,
Phishing, Isca e outros diversos meios. Muitos utilizados de forma externa
mas também alguns agem através da web como o Phishing por exemplo.
Todos os métodos de engenharia social exploram as atitudes humanas. Por
tanto as cartilhas além de protegerem contra ataques também protege
contra esse tipo de ocorrência, onde é algo inesperado e pode-se desdobrar
e se transformar em uma situação mais complexa do que o normal.

3.3.1. Temas

Os diversos problemas e soluções propostos a seguir, para não serem


mal interpretados ou apresentar outro sentido, serão separados e
introduzidos em tópicos conforme sua finalidade e objetivo. Portanto os
temas das cartilhas apresentam vasto conhecimento ao abordar
adversidades e ocorrências do cotidiano do meio comum, todos os
conteúdos relacionados aos temas das cartilhas foram baseadas segundo o
Centro de Estudos, Respostas e Tratamentos de Incidentes de Segurança
no Brasil(CERT)(2012)

3.3.1.1. Backup
29

O backup traduzido do inglês cópia de segurança, é uma válvula de


escape para quaisquer situações onde possa haver perda de arquivos nos
dispositivos. E para evitar essas perdas ocasionadas por quaisquer motivos,
é recomendável manter os equipamentos seguros e para isso é necessário
adotar uma postura preventiva, protetiva e de constante cuidado, e
principalmente realizar cópias de segurança de todos os arquivos
importantes.

3.3.1.2. Boatos

Os boatos são elementos que circulam dentre a internet que tem o


intuito de propagar determinado assunto de forma duvidosa por se tratar de
boatos, se torna duvidoso e a disseminação acaba por propagar uma má
conduta e desconfiança em relação ao remetente.

3.3.1.3. Códigos maliciosos

Os códigos maliciosos os malwares são grandes perigos que agem de


forma traiçoeira que tem o intuito de danificar ou afetar negativamente o
dispositivo através de softwares que aparentam ser seguros e confiáveis,
muitas vezes passam despercebidos e possibilitam e facilitam diversos
golpes e ataques.
Além de desktops ou notebooks não são os únicos propícios a
ataques, smartphones, tablets e celulares também são favoráveis a sofrerem
com malwares.

3.3.1.4. Comércio Eletrônico

Com a expansão da internet logo o comércio seria um fator que


entraria como elemento importante e essencial como resultado dessa
expansão. Essas negociações através da web trouxeram praticidade e
flexibilidade para realizar compras e vendas, entretanto consigo ela facilitou a
execução de golpes por conta de suas características. Esses pontos
permitem facilidade para golpistas e desconfiança para os consumidores,
30

portanto as boas práticas irão auxiliar para que possa haver mais experiência
e conhecimento ao negociar na internet

3.3.1.5. Privacidade e segurança

É de extrema importância manter nossos dispositivos seguros e


reservados somente para nós ou para quem temos confiança, afastando e
dificultando a vida de possíveis invasores ou eliminando chances de
possíveis golpes contra nossos dispositivos. Logo é necessário de boas
práticas e cuidados, e para isso alguns requisitos são necessários.
Os requisitos se trata de cuidados essenciais para uma boa vida útil do
dispositivo, sendo alguns deles:

● Instalação de atualizações(principalmente de segurança e


software);
● Manter os programas e aplicativos atualizados;
● Usar programas de fontes confiáveis;
● Atenção na utilização de aplicativos e softwares;
● Utilizar mecanismos de defesa;
● Manter contas e senhas protegidas;
● Evitar a utilização de redes públicas;

Essas são algumas atitudes que podem ser feitas para garantir a
proteção e privacidade em relação ao dispositivo.

3.3.1.6. Dispositivos móveis

Outros elementos que vieram a tona com o avanço da tecnologia


foram os dispositivos móveis, principalmente os celulares, nos dias atuais é o
eletrônico mais utilizado dentre todos que conhecemos, consequentemente
acabou se tornando alvo de vários e vários tipos diferentes de adversidades e
ataques, e para se aplicar as boas práticas nessas situações é importante
31

levar em conta todos os fatores estabelecidos a partir da existência deste tipo


de aparelho.
Por se tratar de aparelho portátil suas capacidades técnicas são mais
limitadas em relação à de desktops, por exemplo. Portanto é necessário se
atentar a:

● Mecanismos de segurança, para melhor proteção e


desempenho;
● Aplicativos e conteúdos maliciosos, a disseminação e os efeitos
de malwares não ficam de fora dessa e podem encurtar e afetar
a vida útil e a manipulação do aparelho;
● Fatores externos são pontos que podem afetar seu aparelho
podendo trazer a perda total, parcial e até mesmo
preocupações em relação aos conteúdos, pois caso o
dispositivo seja furtado, existe a possibilidade de seus dados,
arquivos e os demais conteúdos do seu aparelho estarem a
mercê de criminosos;
● Origem do aparelho, é importante se atentar onde se comprar,
vender e/ou trocar somente com instituições, pessoas ou locais
confiáveis;
● Proteção de dados e privacidade, os dados no aparelho podem
ser facilmente interceptados caso sejam vistos por alguém mal
intencionado que esteja no mesmo ambiente, portanto é
recomendável atenção ao se utilizar o aparelho em
determinados lugares, também são recomendados tomar
cuidado com o que posta e transmite, geolocalização, dados
pessoais e informações devem sempre serem repensadas e
apresentadas com cuidado;

3.3.1.7 Internet Banking

Hoje é muito mais simples realizar qualquer atividade bancária através


da web, e claramente e infelizmente os perigos cresceram na mesma medida,
32

e consequentemente foram necessários reconhecer e policiar em relação aos


cuidados e boas práticas.

● Ao utilizar aplicativos ou sites verificar se pertence mesmo ao


banco que deseja acessar;
● Evite utilizar aparelhos de terceiros e redes públicas;
● Verificar se a página possui conexões seguras e oferecem a
proteção necessária;
● Sempre verifique origem de mensagens, e-mails e outros
elementos que possam se tratar fraudes ou golpes;
● Manter os dados atualizado e correspondentes a sua pessoa e
suas informações;
● Consultar o banco em momentos de dúvidas ou possíveis
problemas;

3.3.1.8. Proteção de Dados

A proteção de dados é algo essencial para ter uma vida segura e


saudável na web, e existem diversos aspectos que devem ser levados em
conta em relação ao se proteger dados, pois existem também vários meios
de exploração aos dados, portanto entre todos tópicos abordados este é o
mais relevante, e que deve ser seguido e interpretado da melhor forma
possível.
Como foi dito anteriormente, abundantes momentos em que os nossos
dados são explorados em diferentes aspectos e formas, essas condições
tornam tudo até aqui mais significativo ainda . E para apresentar e introduzir
de que métodos os nossos dados sofrem riscos é possível citar algumas
ocasiões:

● Perda de dados:
Diversos dados são perdidos e alterados muitas vezes por
malwares ou por ocasiões de ataques que possam acabar
afetando os nossos dados, alterando-os ou apagando-os.
● Acesso indevido:
33

Os dados são elementos explorados por inúmeros motivos,


finalidades informativas, por atacantes e/ou malwares ou em
vazamentos de dados.

Mesmo com todos esses motivos, existem formas de se defender e


evitar situações semelhantes, e para isso existem diversas formas de se
prevenir, através de criptografia, backups, elaboração de senhas e métodos
de proteção que auxiliam na defesa de contas e dados, entretanto o controle
parcial das nossas contas e dados garantem maior contato com qualquer
alteração e problema que possa vir a ocorrer durante a vida útil dos nosso
dados, por isso o gerenciamento dos nossos dados são importantes para
facilitar e evitar problemas futuros em relação a essas situações.
Entre esse gerenciamento também se aplicam medidas propostas que
são consideradas bons modos, e podemos reforçar:

● Evitar a divulgação de informações pessoais ou dados


relevantes, administrar contas com responsabilidade;
● Atenção ao aplicativos, e-mails, mensagens e conteúdos que
acessa;
● Cuidado com elementos externos como redes públicas e
equipamentos que podem acabar impactando negativamente
seu aparelho, e consequentemente podendo ocasionar em
problemas com alguma adversidades nos dados;

Diante da imensidão e complexidade que se discute ao se falar de


dados, foi elaborado e criado uma lei que se trata dessas situações, a lei
geral de proteção de proteção de dados(LGPD) defende e propõe diversos
elementos que protegem e asseguram as pessoas enquanto a seus dados,
apresentando como eles devem ser tratados em todos os tipos de relações.
De acordo com a LGPD são considerados dados pessoais, qualquer
informação que seja relacionada a pessoa em seu estado natural, ou seja,
algum registro, por exemplo, como o CPF. A LGPD é um elemento de
extrema importância, pois transmite conteúdos que servem para informar e
educar qualquer um sobre seus dados durante sua utilização na web.
34

3.3.1.9. Redes

As redes são pontos que demandam atenção, pois dependemos delas


para uma utilização mais apropriada e eficiente, como os outros elementos,
ela tem pontos que devem ser levados em conta e precauções a serem
tomados, iniciado pelos cuidados que devem ser sempre redobrados mesmo
que de conhecimento do meio-comum:

● Proteger equipamentos de rede, físicos e virtuais, através dos


exemplos citados nos tópicos anteriores;
● Gerencie a sua rede, para isso existem diversos passos que
são recomendados, em primeiro lugar é em relação ao
gerenciamento da rede doméstica e aparelhos a ele
conectados. Em primeiro lugar é necessário desabilitar o
gerenciamento do equipamento(roteador) de rede através da
internet, isso fará com que as funções de manutenção e
controle só possam ser feitas através da rede local;
● Retirar as funções de reconexão automática, isso para evitar
ataques caso as redes tenham sofrido alterações por hackers;
● Evitar conexão com redes públicas;
● Procurar a utilização de redes que possuam criptografia
WPA2(Wi-fi Protected Access II);

3.3.1.10. Redes sociais

As redes sociais são atualmente um dos principais meios de


comunicação e entretenimento, está bem próximo do cotidiano do seus
usuários e como resultado disso os mesmos possuem riscos que estão entre
linhas e disfarçados no meio de tantos conteúdos agradáveis, logo os
problemas passam despercebidos o que torna a situação mais conturbada e
perigosa ainda.
35

Os principais riscos oferecidos pelas redes sociais, estão diretamente


ligados com suas principais qualidades, que são a praticidade, fácil acesso e
intuitivo, conteúdos etc.

● Mal-intencionados podem facilmente criar perfis e simplesmente


estar mais próximo do usuário do que ele menos espera;
● A facilidade em relação a criação, manipulação e uso de perfis
torna possíveis diversos problemas, como furto de identidade,
invasão de contas e difamação da imagem a partir de
conteúdos postados em relação ao perfil;
● Conteúdos ofensivos e impróprios, são comuns nas diversas
redes sociais e acabam sendo de diversos tipos;
● Uso indevido de informações é um elemento muito perigoso
pois pode afetar a pessoa tanto através da rede quanto fora
dela através das atitudes geradas a partir da informação
repassada;
Existem algumas formas de se prevenir e se defender de situações
como essas, tudo depende da boa prática e intenção do usuário:

● Cuidado e elaboração de senhas mais fortes;


● Habilitar funções para recuperação da conta;
● Utilizar opções e funções oferecidas pela rede social, para
ajudar a tornar a rede social um ambiente mais saudável;
● Monitorar e gerenciar a conta sempre que possível;
● Cuidado e atenção ao postar conteúdos indevidos que possam
afetar alguém ou si mesmo;

O vasto conteúdo apresentado, apresenta características semelhantes


em todos os tópicos, o que fornece grande aprendizado a partir da
elaboração ser fundamentada nas mesmas bases tendo consigo o mesmo
intuito, isso torna todos os tópicos uma grande rede, conectados através do
mesmo princípio e mesmas “fórmulas”, facilitando o entendimento e aplicação
das boas práticas no dia-a-dia.
36

4. Hacking

4.1. Introdução às aplicações Web

Durante toda a história da computação , sempre houveram revoluções, afinal,


toda tecnologia tem dias contados. Quando a internet surgiu, muitos perceberam
que a web seria o futuro, e de fato, têm sido. No presente, a web está presente em
todos os tipos de dispositivos, desde relógios, celulares, computadores até carros. A
adaptabilidade de aplicações web, já não é mais novidade, e agora temos até
mesmo frameworks que permitem o desenvolvimento de uma aplicação que possa
funcionar em celular e computador como aplicação desktop. Frameworks como
React-Native ou Electron tem se tornado populares por estes motivos. Como os
navegadores estão presentes em todos os lugares, cada vez mais pessoas se
tornam usuários. O número de usuários em 2022, estaria em torno de 5 bilhões de
pessoas segundo o estudo “Digital 2022: Global Overview Report”, publicado pelo
site Datareportal. Esse número de pessoas representa mais da metade de todas
existentes no planeta. Como tantas pessoas estão na web, isso acaba requisitando
a existência de regulamentação, ou mesmo leis para que empresas produtoras de
software sigam especificações de segurança ao manipular dados de usuários.
Existem também, muitas outras questões, como boas práticas no processo de
escrita do código do software, para evitar ao máximo, as vulnerabilidades. Como
nem sempre é possível, atender a demanda de desenvolvimento em períodos de
tempo limitado, muitos frameworks têm sido desenvolvidos, para proteger de
vulnerabilidades mais previsíveis, como SQL Injection, CSRF, Session Hijacking,
Replay Attack e muito mais. As aplicações web muitas vezes manipulam dados de
usuários, dados que podem ser documentos, informações pessoais, senhas
simples, senhas bancárias, senhas de cartão, ou até mesmo, informações
governamentais confidenciais. Portanto é possível concluir que mecanismos de
proteção desde a aplicação, até a utilização de protocolos seguros de comunicação,
e uma segurança e confiabilidade em uma base de dados são de extrema
importância. Nunca em computação um software será completamente seguro.
37

4.2. Principais Vulnerabilidades

Construir aplicação segura é de fato uma tarefa difícil, pois nos dias atuais
existem diversos tipos de ataques, e com o passar do tempo, novas
vulnerabilidades acabam surgindo.
Grande parte dos ataques possui relação com conceitos de engenharia social
e vulnerabilidades presentes na infraestrutura da aplicação. As vulnerabilidades
presentes na infraestrutura da aplicação. As vulnerabilidades podem ser
encontradas em softwares utilizados no desenvolvimento da aplicação, como SGBS
ou mesmo servidores de aplicação. Entretanto, grande parte das vulnerabilidades
são causadas pelos próprios desenvolvedores da aplicação, muito embora, em dias
atuais, muitos frameworks tentam consertar a maior parte dessas vulnerabilidades.
Muitas das Vulnerabilidades possuem classificações especiais dentro do campo das
vulnerabilidades, entretanto, o termo code injection será frequentemente
encontrado ao explorar sobre as principais vulnerabilidades, pois trata-se de
ataques onde um tipo de código é injetado ou inserido dentro do código da
aplicação, onde a aplicação passa a interpretar esse código gerado, o que pode
gerar mudança no comportamento ou até mesmo a o não funcionamento da
aplicação.

4.2.1. SQL Injection


O SQL Injection é uma vulnerabilidade muito conhecida e antiga dentro do
desenvolvimento de software, contudo, continua a ser frequentemente encontrado
em grande amplitude nos dias atuais. Em suma, um SQL Injection, consiste em um
tipo de ataque onde o atacante insere um comando SQL personalizado através de
uma entrada de dados disponível na aplicação, ou por url. Como grande parte das
aplicações web ou desktop, precisam manter as informações dos usuários
armazenadas em bases de dados, SGBDs são requeridas, e as mais tradicionais
utilizam o modelo relacional de dados, que em sua maioria, fazem o uso do SQL, e
Grandes SGBDs como PostgreSQL, SQL Server, MySQL DB2 e MariaDB, tornam
38

a sintaxe SQL cada vez mais universalizada. Existem dois tipos de procedimentos
envolvendo comandos SQL comuns. Instruções estáticas e instruções dinâmicas,
sendo uma instrução SQL detentora de parâmetros, de maneira lógica, quase
sempre requisitará uma inserção desses parâmetros para realizar a rotina em que
se insere.

Figura 13 - Demonstrando SQL Injection.

Quando uma instrução SQL tem os valores de pesquisa concatenados com


esses valores inseridos pelo usuário, o usuário será redirecionado para dentro da
aplicação, significando que o ataque SQL Injection foi bem sucedido.

Figura 14 - SELECT SQL.

Muitas vezes, features de login utilizam dessas instruções dinâmicas para realizar a
consulta dinâmica, onde o valor inserido pelo usuário é concatenado em uma SQL
query. Isso é exatamente o que acaba gerando a vulnerabilidade, onde o usuário
pode utilizar das entradas do sistemas para inserir uma instrução SQL qualquer.
Uma possível solução para a prevenção simples de ataques SQL Injection é
a validação e tratamento dos valores obtidos por meio de inserção do usuário.
Existem técnicas específicas para sistemas de conexão com banco de dados que
utilizam o paradigma da orientação a objetos, como o ORM (Object Relational
Mapping), a técnica consiste em reduzir ao máximo vulnerabilidades no sistema
CRUD, ondes tabelas do banco de dados são representadas através de classes e
os registros de cada tabela são representados como instâncias das classes
correspondentes. Com esta técnica, não é necessário se preocupar com os
39

comandos em linguagem SQL, já que será utilizada uma interface de programação


simples que faz todo o trabalho de persistência.

4.2.2. Cross-site Scripting (XSS)

Os ataques de XSS, são um tipo de Code Injection, onde um script


malicioso é injetado em sites obtidos como funcionais. Os ataques XSS ocorrem
quando um invasor usa um aplicativo da web para enviar o código malicioso ,
geralmente na forma de um script do lado do navegador, para um usuário final
diferente. As vulnerabilidades permitem que esses ataques sejam bem-sucedidos,
são bastante difundidas e ocorrem em qualquer lugar em que uma aplicação web
usa a entrada de um usuário em uma saída, sem utilização de codificação ou
validação. Aplicações web com blogs, redes sociais ou qualquer site que permite
que o usuário adicione conteúdo ao site para personalização individual, ou seja,
trechos de HTML e CSS. Sites assim são alvos frequentes de hackers ou script
kiddies, que utilizam de brechas e vulnerabilidades para inserir código dentro da
aplicação. Esse código injetado pode colher dados de usuários que acreditam que
estão simplesmente disponibilizando dados para a aplicação de maneira confiável.
Assim como o SQL Injection, o XSS procede da vulnerabilidade que consiste
no não tratamento de inputs e seus respectivos valores inseridos pelos usuários.
Entretanto, os ataques XSS não utilizam da injeção de instruções SQL, e sim uma
injeção de conteúdo diretamente na aplicação, geralmente com Javascript, para
executar comandos javascript, mudar a UI, modificar sessions e alterar o conteúdo
visível para o usuário.
40

Figura 15 - Exemplo de inserção de javascript em uma entrada GET (XSS).

Outro fator sobre códigos javascript para realização de ataques XSS, mesmo
que haja um mecanismo que inibe a incrementação de código javascript pelo cliente
na aplicação, existem formas bem triviais e convencionais para blindar o código
javascript de ser detectados por mecanismos de defesa. Um deles consiste em
inserir o código javascript em atributos de elementos HTML.

Figura 16 - XSS Exemplo.

Além desse tipo de inserção, existem outras vias, como converter o código
javascript em hexadecimal, tendo como ideia mascarar esse código javascript para
que algoritmos de tratamento de XSS não consigam detectar a presença de sintaxe
javascript, e, ainda sim, o navegador interpreta esse código javascript escrito em
hexadecimal normalmente.

Figura 17 - Exemplo de XSS com hexadecimais.

4.2.2.1. Detectando e protegendo contra XSS


41

A maneira mais simples de testar se uma aplicação é testar se as entradas


de formulários de pesquisa, login ou cadastro executam código javascript quando
inseridos.
Para tratar um possível ataque, deve-se partir do princípio de que as
informações de entrada devem ser validadas, ou seja, deve haver um tratamento de
informações em todas as entradas do programa, de mesmo modo, que as
informações devem ter um tratamento quando forem para um processo de saída ou
exibição do usuário final. Só é possível definir de que maneira esses dados devem
ser tratados ou que procedimentos devem ser utilizados a partir da legislação a
respeito de segurança de dados do local onde esteja sendo desenvolvido o
software, e tendo em consideração a regra de negócio a ser utilizada. Entretanto,
existem APIs e bibliotecas que podem facilitar no que se diz respeito a
estabelecimento de patterns ou rotinas de tratamentos de dados. Existe uma API
disponibilizada pelo OWASP chamado AntiSamy Project, que pode ser descrito
como uma API que garante que HTML e CSS fornecido pelo usuário, em caso de
aplicações que utilizam de features que recebem entradas de código dos usuários,
estejam de acordo com as regras de negócio de determinada aplicação. Isso
garante que os usuários não forneçam código malicioso nas entradas de HTML ou
CSS. O AntiSamy possui uma biblioteca que aceita um arquivo de configuração no
qual é possível trechos e patterns de código que devem ser filtrados e patterns que
podem ser aceitos na aplicação ou não. As regras de validação podem ser escritas
em um arquivo de marcação como XML e importados com uso de linguagens de
programação aceitas pelo projeto.
Cada instância de problema possui particularidades, assim como cada
sistema possui requisitos, dilemas e características de desenvolvimento
particulares. Cabe sempre aos líderes de desenvolvimento decidir qual framework
ou API pode ser mais interessante, para garantir um software que possua mais
segurança, ou mesmo, se for pertinente, desenvolver um sistema próprio para
tratamento e validação de entradas.

4.2.3. CROSS-SITE REQUEST FORGERY (CSRF)


42

A maioria das aplicações web que são produzidas em tempos atuais


possuem funcionalidades de autenticação, impedindo assim que usuários não
cadastrados não consigam ter acesso ao sistema. Em um cenário onde um invasor
tenta acessar o sistema com as credenciais de outro usuário, em uma situação onde
trata-se de uma aplicação justa e clara, ele será redirecionado a uma tela de
cadastro, ou receberá uma mensagem de que os dados são inválidos.
Um invasor pode tentar utilizar técnicas de falsificação de solicitações entre
sites, onde em um cenário comum, hackers podem enviar e-mails, links, mensagens
ou imagens para uma alvo, e quando estes estivessem ativados, uma requisição
HTTP seria disparada para a aplicação.

Figura 18 - Exemplo de requisição HTTP

Sites modernos contam com mecanismos de autenticação e utilizam, em sua


maioria, um recurso chamado Cookie. Um Cookie é uma informação enviada pela
aplicação para o navegador, onde o navegador armazena essa informação para
acessos futuros, não necessitando assim de fazer Login todas as vezes que uma
requisição for feita pelo navegador do próprio usuário. Muitos sistemas utilizam o
recurso de Cookies, já que, dentro de uma lógica para validação de entrada de
dados dentro da maiorias das aplicações, é verificado se o usuário foi autenticado,
caso seja, um Cookie é disparado para o navegador, permitindo assim que não seja
necessário fazer Login em requisições locais futuras.
Embora esses recursos sejam tecnologias convencionais, simples e
tradicionais, existem grandes riscos, pois a utilização de Cookie é pouco segura.
Como as informações enviadas por Cookies ficam armazenadas no próprio
navegador do usuário, é pouco seguro, pois qualquer um com acesso ao dispositivo
utilizado para navegar possui acesso a essas informações, podendo fazer
alterações. Outra forma bem comum de armazenamento de informações obtidas
via autenticação, são as Sessions, que são informações obtidas pela autenticação
de um usuário, entretanto essas são armazenadas em servidor. Nesse cenário,
cada usuário possui uma Session no servidor, e o servidor gera um ID para cada
Session criada, onde um Cookie é gerado e enviado para o navegador, sendo
43

assim, cada vez que uma requisição no navegador local é disparada, o Cookie
correspondente é verificado no servidor e então a página com conteúdo é devolvida.
Os ataques de CSRF consistem em requisições forçadas para caminhos de
páginas com formulários, referenciando seus parâmetros HTTP com a tentativa de
acessar funcionalidades de uma aplicação que não possui um cadastro ou
autenticação necessária. Dessa maneira, um Hacker, em sistemas onde se possui
mecanismo de autenticação onde Sessions ou Cookies são utilizados, para ter
acesso é necessário lançar uma isca, para obter essas informações de um usuário,
forjando uma requisição, sendo muitas vezes utilizadas cópias do formulário original
para obter essas informações. Uma das formas mais comuns de proteção contra
ataques CSRF é utilizando token. Esses tokens podem ser inputs de um
formulário HTML que são escondidos no navegador do usuário, onde a cada
usuário cadastrado em um sistema, um número aleatório com letras é gerado.
Sendo assim, o Token é contido dentro do código de validação da aplicação.

4.2.4 Session Hijacking

As aplicações atuais utilizam de formas de autenticação bem uniformes e


mecanismos conhecidos há bastante tempo. Desenvolver funcionalidades de
lembrança de dados para cada usuário em específico utilizando sessions é uma
método de desenvolvimento utilizado há bastante tempo, onde dentro de uma
aplicação cada usuário cadastrado, quando efetuar autenticação em seu navegador
independente de dispositivo, será criado, em uma aplicação utilizando sessions, um
identificador único, um SESSION ID, utilizado como cookie de autenticação, que é
enviado para o servidor para verificar se o cookie de autenticação já é existente
dentro do sistema, e se existente, o usuário é lembrado e conectado sem a
necessidade de se autenticar novamente. O Sequestro de sessões consiste na
captura de uma sessão ativa e o disparo de uma requisição forçada para o servidor,
que não difere qual dispositivo está sendo solicitada a conexão, mas bastando a
existência de igualdade na requisição HTTP no Cookie de requisição, bastando que
o Hacker capture os Cookies de sessão, utilizando ataque de XSS, SQL Injection
ou mesmo Clickjacking.
44

5. Testes de Penetração e Ataques

O mercado de desenvolvimento de software atualmente oferece serviços


para especificidades complexas ou densas de para cada tipo de software. Questões
como segurança em aplicações web são sempre complexas, quase sempre uma
escolha entre entrega rápida e mais segurança. Existem muitas organizações que
oferecem serviços de segurança como auditorias. Entretanto, existem diferenças em
auditorias de segurança e teste de penetração são coisas distintas. Um teste de
penetração serve para indicar onde está a vulnerabilidade da aplicação por meio de
ataques, e não a torna mais segura. Uma aplicação se torna segura à medida que
são detectadas vulnerabilidades e seu código é moldado, sendo produzidas
funcionalidades para sanar esses problemas. Um teste de penetração revela pode
revelar diversas vulnerabilidades, podendo apontar onde estão os erros na
infraestrutura da aplicação.
Existem três níveis básicos de testes de penetração, sendo caixa preta, caixa
branca e caixa cinza. Caixa preta é um termo utilizado para partir da pressuposição
de que o atacante do sistema não possua mínimo conhecimento prévio sobre o
sistema, às vezes sendo necessário longos períodos de estudo e avaliação do
sistema em particular. Caixa cinza é utilizado para se referir quando o atacante
possui um pequeno conhecimento sobre o sistema, sendo detalhes básicos. A
Caixa Branca se refere a quando o atacante possui um conhecimento avançado
sobre o sistema, sendo redutor de pesquisas ou ao mesmo tempo, já que os
serviços e a infraestrutura já são muito conhecidos pelo atacante.
Para realizar um Pentest (Teste de penetração), são necessárias algumas
fases e um trabalho organizado, diferindo-os assim, da simples prática deliberada
de script kiddies de tentar invadir um sistemas.

● Reconhecimento: Essa etapa se inicia na coleta do máximo de


informação possível sobre o sistema, que pode incluir pesquisa
na internet sobre um alvo, monitoramento de serviços e
pessoas envolvidas e o máximo de informação possível sobre a
45

infra-estrutura da aplicação alvo, como os aplicativos de uso


comercial, portas utilizadas, serviços e documentos
importantes. A fase de reconhecimento, é também utilizada
para deixar o escopo de um teste bem definido. Quando o
escopo é bem claro, os processos de obtenção de inteligência e
elaboração de métodos e procedimentos ficam mais claros e
fáceis de serem elaborados.

● Avaliação: Na etapa de avaliação, as informações e os


diagnósticos obtidos devem ser necessários para determinar as
possíveis vulnerabilidades da aplicação, determinado os alvos
para avaliação de fraqueza, além de identificar e priorizar os
sistemas vulneráveis.

● Exploração: O passo de exploração explora as


vulnerabilidades detectadas e verifica se são existentes de fato,
além de definir o quanto de informação ou de acesso pode ser
obtido através da vulnerabilidade em foco. Existem diversas
ferramentas de exploit para várias vulnerabilidades, cada uma
em específico. É necessário então, utilizar a ferramenta que
melhor se encaixe com base na ordem de prioridades de
vulnerabilidades determinada na fase de avaliação. Outra
abordagem complementar, é utilizar de engenharia social
agressiva e captura máxima de dados e informações de acesso
restrito.

● Escalonamento de privilégios: Muitas vezes, ferramentas de


exploit oferecem acesso a privilégios de maneira limitada
dentro de um sistema. A partir dos privilégios previamente
obtidos, esses privilégios devem ser escalados de modo a obter
dados sensíveis sobre infra-estrutura ou permissão dentro da
aplicação. O Escalonamento de privilégios geralmente inclui
acesso a parte de uma aplicação não autorizada, quebramento
46

de senhas e decriptação, ou mesmo acesso completo a conta


de usuários não autenticados.

Sendo assim, por meio de uma divisão simples em quatro fases, é possível realizar
testes de penetração de maneira mais objetiva que um simples ataque em isolado.

5.1. Kali Linux


Conhecidos os conceitos e fases simples de um teste de invasão, emerge
uma questão sobre qual plataforma e onde encontrar conjuntos de ferramentas para
exploits, pentests, privilege escalation e ataques dos mais variados, como
senhas a infra-estrutura de redes. Um dos sistemas operacionais para trabalhos
com testes de invasão é o Kali Linux, um sistema operacional baseado no Debian
Linux, que vem com muitas ferramentas com taxas frequentes de atualização. O
Kali possui ferramentas dos mais variados tipos para diversos propósitos. A seguir
serão apresentados alguns ataques com softwares no Kali Linux.

5.2. Websploit
O Websploit trabalha coletando informações sobre portas, serviços e
aplicações rodando em um servidor. Cada servidor web possui diversas portas TCP
abertas e executando serviços distintos, onde a informação trafega de maneira
criptografada
O Websploit permite a realização de exploração de vulnerabilidades e
analisar sistemas remotos. Ao iniciar, basta digitar o comando use utilizando a
referência TARGET para referenciar o url do alvo.

Figura 19 - Exemplo de ataque utilizando o web killer do Websploit.

5.3. Ataques de força bruta (Redes Wi-Fi)


47

Um ataque de força bruta consiste em tentar quebrar a criptografia de um


dado ou pacote por meio da descoberta de uma chave secreta, todas as
possibilidades são verificadas até que a chave correta seja encontrada. Conforme
uma senha cresce em possibilidades de caracteres, maior o tempo, e menos efetivo
tende ser um ataque de força bruta. Sendo assim um atacante deve testar todas as
palavras de um dicionário separado obtido previamente que se encaixe com o
contexto do ataque. Existem ferramentas do Kali chamadas Aircrack-Ng e Airmon-
Ng, que permitem a utilização de ataque por força bruta para quebra de chaves
utilizadas na proteção de redes wifi, como WPA2. O Aircrack-Ng permite um
ataque de força bruta que busca por um aperto de mão, utilizando o Airodump e o
Airmon-Ng.
Primeiro, é necessário verificar e fechar os processos indesejados.

Figura 20 - Encerramento de processos Airmon-Ng

Durante o período dos processos iniciados pelo ataque, é necessário que a


placa Wireless do dispositivo de uso fique em modo de monitoramento, para
monitorar o tráfego de informações entre os dispositivos que estão conectados.
Para isso, é necessário a criação de uma interface de rede virtual com o Airmon-
Ng.

Figura 21 - Criação de uma interface de rede virtual com Airmon-Ng.

O Airodump-Ng possui um comando que, quando a interface de rede virtual


para monitoramento é criada, permite a visualização em tempo real de uma rede,
utilizando o BSSID ou endereço MAC de um dispositivo, que pode ser um roteador
alvo. Abreviações com CH fazem referência ao canal onde o roteador está sendo
48

monitorado e PWR refere-se à distância física entre os dois dispositivos, o


disparador do ataque e o alvo.

Figura 22 - Comando para monitoramento Airodump-Ng

Figura 23 - Resultado do comando wlan0mon do Airodump-Ng.

Figura 24 - Comando para realização do ataque a rede wlan.

Quando estabelecidos o canal de comunicação entre os dispositivos em uma


interface de rede virtual, o comando especificando o BSSID, realiza de fato o ataque
onde o é referenciado um arquivo para registro de possíveis resultados.
O passo seguinte do ataque é realizar um procedimento para que todos os
usuários da rede wlan se desconecte, e nesse processo, o Aireplay do Aircrack-
Ng captura a senha quando os usuários se autenticarem novamente na rede.

Figura 25 - Comando Aireplay-Ng –deauth realizando a desconexão dos usuários da rede.

Quando o comando para desconexão e perda de autenticação do usuários de


uma determinada rede ocorrer, o terminal onde o Airodump-Ng estiver sendo
executado, uma nova informação surge, confirmando que um Handshake (Aperto
de mão) ocorreu. Um aperto de mão determina que uma comunicação entre dois
49

computadores foi reconhecida e realizada, entretanto, a senha recebida está


criptografada, e é necessário utilizar o Aircrack-Ng com o argumento “-w” utilizando
uma wordlist como referência para decriptação da senha criptografada da rede.

5.4 Ataque gerenciamento de sessões

O gerenciamento de sessão e a autenticação compõem todos aspectos da


interatividade com usuário de maneira individual das aplicações web. As sessões
são o período de tempo que um usuário gasta em um site.
Um verificador de penetração identifica contas que são permitidos o acesso a
sessões com privilégios de alto nível, permitindo o acesso como tempo ilimitado. As
ferramentas fornecidas pelo Kali, permitem diversos ataques como, ataque de
fixação de sessão, sequestrando sessões de usuários. Além de ataques de
Clickjacking, que é uma técnica para induzir usuários a clicarem em algo que pode
ser utilizado para revelar informações confidenciais. O Clickjacking funciona com
um código incorporado a uma aplicação que quando clicado sequestra informações
do usuário em foco, obtidas em forma de sequestro de sessões ou mesmo
sequestro de Cookies. Ferramentas com Wireshark ou mesmo Cookie Cadger
são bastante úteis para realização de sequestramento de sessões

5.5. Gerenciamento de ataques cibernéticos (Metasploit)

O Metasploit vem instalado por padrão no Kali Linux, sendo uma


ferramenta para ser utilizada primordialmente na fase de reconhecimento, sendo
utilizado para teste de penetração, para realizar exploração não autorizada. O
Metasploit é utilizado para exploração no server-side.
50

6. Conclusão

Com o intuito de apresentar diversos conteúdos e experiências através de


exemplos e explicações com o intuito de servir como uma base de fundamentos
para explicações de elementos relacionados à tecnologia, segurança, web hacking.
Fundamentamos a partir das necessidades reconhecidas diversos conteúdos
adaptativos que se encaixassem com as necessidades vigentes.
A principal atividade de um Hacker consiste em estar sempre aprendendo
novas tecnologias e sempre reparando ou explorando erros dentro de softwares,
com a finalidade de melhorar sistemas existentes ou a construção de novos
sistemas menos vulneráveis. Diante desses conceitos é necessário o entendimento
básico de conceitos de segurança da informação, ataques e ferramentas de
exploração de vulnerabilidades.
Grande parte de novos potenciais desenvolvedores possui um conhecimento
pobre sobre o básico sobre segurança de sistemas e vulnerabilidades, onde este
projeto tenta por meio de uma pesquisa de campo dentro da instituição onde o
curso em foco é ministrado, e o desenvolvimento de um site para exposição de um
conteúdo introdutório sobre hacking e segurança da informação.
Durante a realização dessa pesquisa, os fatores que limitaram a qualidade ou
melhor atenção em conceitos que tinha objetivo de serem apresentados com maior
ênfase, foram principalmente a complexidade de conceitos dentro de segurança e
hacking como criptografia e a especificidade distinta de muitos softwares e
ferramentas utilizados nesse meio.
51

Com base nos resultados obtidos, em trabalhos futuros é de desejo dos membros
deste projeto, a criação de aplicações para web com um código menos vulnerável e
um infra-estrutura mais resistente a ataques, sendo que mesmo com muitos
frameworks que minimizam as falhas de segurança, é muito importante desenvolver
aplicações com o máximo de atenção, para não permitir que essas falhas ocorram.
Também é de pretensão dos membros desse projeto adquirir experiência com
sistemas operacionais distintos, para compreender as suas diferenças e
vulnerabilidades do lado do cliente, e do lado do servidor. E por fim para
complementar desejamos e esperamos que os conteúdos apresentados tenham
sido abordados de forma que os usuários de quaisquer meio de tecnologia,
principalmente a web possam ter extraído conhecimento, novos aprendizados e
reforçar caso seja de conhecimento do usuário.
52

7. Referências bibliográficas

BAARS, Hans et al. Fundamentos da Segurança da Informação:: com base na ISO


27001 e na ISO 27002. 1ª. ed. atual. [S. l.]: Brasport, 2018. 256 p. ISBN
9788574528601.

Brooks, Fred. 1975. The Mythical Man-Month. 1975. p. 23-44.

CERT (Brasil). Centro de Estudos: Resposta e Tratamento de Incidentes de


Segurança no Brasil (CERT.br). Cartilha de Segurança para a Internet, São
Paulo, ano 2012, ed. 2ª, p. 17-125, 3 out. 2012. Disponível em:
https://cartilha.cert.br/livro/cartilha-seguranca-internet.pdf. Acesso em: 9 jun. 2022.
Developer Mozilla. Documentação HTML 2022. Disponível em:
https://developer.mozilla.org/pt-BR/docs/Web/HTML. Acesso em: 15 junho. 2022.

Create React App. 2022. Disponível em: https://create-react-app.dev/. Acesso em:


15 junho. 2022.

Ferreira, Rodrigo. 2017. Segurança em aplicações Web. Capítulos: Cross-Site


Scripting is my hero! Cross-Site Request Forgery. Session Hijacking. p. 13-71.

GAT INFOSEC (Brasil). 5 pilares de Segurança da Informação nas empresas. In:


5 pilares de Segurança da Informação nas empresas. São Paulo, 20 jul. 2020.
Disponível em: https://www.gat.digital/blog/5-pilares-da-seguranca-da-informacao/.
Acesso em: 23 maio 2022.

Kali Linux. Disponível em: https://www.kali.org/docs/. Acesso em: 15 junho. 2022.

Muniz, Joseph. Lakhani, Aamir. Web Penetration Test With Kali Linux. Capítulos:
Conceitos de testes de penetração de aplicativos Web, Conceitos Kali testes de
penetração, Ataques do lado do servidor, Cracking de Senhas, A engenharia social,
Kal: ferramentas de quebra de senhas, Autenticação Atacar. 2022.
53

React Org. Introdução React 2022. Disponível em:


https://pt-br.reactjs.org/docs/getting-started.html. Acesso em: 17 maio. 2022.

The Twelve Factor App. Disponível em: https://12factor.net/pt_br/. Acesso em: 15


Junho. 2022

Você também pode gostar