QR-коды повсюду: от оплаты кофе в вендинговых аппаратах до квитанций ЖКХ. Но задумывались ли вы, что на самом деле скрывается за черно-белыми квадратами? Мошенники давно освоили «квишинг» (QR-фишинг), подменяя наклейки на терминалах.
Сегодня мы разберем, как с помощью стандартных инструментов Linux (Astra, Debian, Ubuntu) провести полный аудит подозрительного кода и заглянуть «под капот» обычного JPEG-файла.
1. Расшифровка без телефона
Первым делом нам нужно вытащить содержимое QR-кода, не переходя по ссылке. Если у вас есть скриншот или фото кода, используйте zbarimg:
Bash
zbarimg -q --raw my_qr_code.jpg
На выходе мы получим «голый» URL. Например: https://kaspi.kz/pay/Se......nding?...ice_id=5241&....
На что смотреть: Проверяйте домен. kaspı.kz (с турецкой ı) — это не kaspi.kz. Если видите сокращатели ссылок (bit.ly, t.co) там, где их быть не должно — это красный флаг.
(Краткая шпаргалка:
Прочитать QR zbarimg -q —raw img.jpgzbar-tools. Утилита — zbar-tools
Создать QR из текста qrencode -o img.png «текст» . Утилита — qrencode
Создать QR из файла qrencode -o img.png < file.txt . Утилита — qrencode )
2. Разведка серверов через curl
Прежде чем открывать ссылку в браузере, узнаем, куда она нас ведет и какие заголовки отдает сервер. Обычный запрос может «подвиснуть», так как крупные сервисы блокируют роботов. Притворимся браузером:
Bash
curl -I -L -A "Mozilla/5.0" 'https://ссылка-из-qr-кода'
- -I: Только заголовки.
- -L: Следовать за редиректами.
- -A: Подмена User-Agent.
Ищите заголовок Strict-Transport-Security (HSTS). Его наличие — хороший знак того, что сервис заботится о шифровании.
3. Стеганография: Когда картинка — это не только картинка
Файлы JPEG — отличный контейнер для скрытых данных. Злоумышленник может просто приклеить вредоносный скрипт в «хвост» изображения: cat image.jpg virus.sh > fake_image.jpg.
Для поиска таких «закладок» мы используем утилиту strings, которая вытаскивает текстовые строки из бинарных файлов.
Проблема кодировок (ASCII vs UTF-8)
Многие сталкиваются с тем, что strings молчит, хотя в файле точно есть русский текст. Проблема в том, что старая добрая strings по умолчанию ищет только английские символы (7-бит ASCII).
Чтобы найти кириллицу в UTF-8, используйте «грубую силу» grep:
Bash
grep -aE "[а-яА-ЯёЁ]{4,}" suspect_file.jpg
Или заставьте strings сканировать всё:
Bash
strings -a -e s suspect_file.jpg | grep -i "пароль"
(Если вам прислали файл или ссылку в мессенджере и вы сомневаетесь:
Проверка через терминал: Если это файл, прогоните его через команду strings. Она вытащит из любого бинарного файла все читаемые текстовые строки.
Bash
strings -e S fake_photo.jpg | tail -n 5
Если в конце картинки вы видите странные ссылки или команды — файл «заряжен».)
(strings -e s,ASCII / UTF-8, - Обычный английский и стандартный русский текст.
strings -e l,16-bit Little Endian, - Так часто хранятся строки в Windows и в современных скриптах.
strings -e b,16-bit Big Endian, - Встречается в сетевых протоколах и некоторых типах файлов.)
-
4. Автоматизируем проверку: Скрипт «SecureScan»
Чтобы не вводить команды вручную, можно набросать простой Bash-скрипт, который прогонит файл по всем фронтам: и по разным кодировкам (ASCII, UTF-16), и по базе Base64-строк.
Bash
#!/bin/bash
# Простой сканер для deblinux.ru
FILE=$1
echo "=== Анализ $FILE ==="
# Ищем кириллицу напрямую в бинарнике
grep -aE "[а-яА-ЯёЁ]{4,}" "$FILE"
# Проверяем разные кодировки текста
for enc in s l b; do
echo "--- Кодировка $enc ---"
strings -a -e $enc "$FILE" | grep -iE "http|pass|token|пароль" | head -n 5
done
5. Как «стерилизовать» файл?
Если вам прислали подозрительную картинку, и вы хотите очистить её от любых потенциальных внедрений, просто пересохраните её через ImageMagick:
Bash
convert infected.jpg clean.jpg
Эта команда заново пересчитает пиксели и создаст новый файл, отбросив всё лишнее, что было приписано в конец файла.
Итог
Безопасность в Linux — это не только фаерволы и права доступа. Это еще и умение вовремя заметить лишние байты там, где их быть не должно. Проверяйте, что сканируете, и не доверяйте «хвостам» своих JPEG-файлов.
Stay tuned, stay secure.