Bash Days | Linux | DevOps
23.4K subscribers
165 photos
24 videos
695 links
Авторский канал от действующего девопса

Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.

Автор: Роман Шубин
Реклама: @maxgrue

MAX: https://max.ru/bashdays

Курс: @tormozilla_bot
Блог: https://bashdays.ru
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Скрытые данные в эмодзи/символах

Тут некий деятель Paul Butler, запиздярил штуку, которая позволяет при помощи последовательностей ZWJ (Zero Width Joiner) закодировать в один эмодзи неограниченный объём данных.

Да чо далеко ходить, идем сюды, выбираем эмодзи или букву алфавита, пишем текст который нужно спрятать и готово.

Копируем получившийся эмодзи/символ и отправляем по назначению. На этом же ресурсе можно расшифровать, то что получилось.

Unicode представляет текст как последовательность кодовых точек — чисел, которым присвоено определённое значение. Каждая кодовая точка записывается в формате U+XXXX, где XXXX — это шестнадцатеричное число в верхнем регистре.

Для латинских символов каждой кодовой точке соответствует конкретный символ на экране. Например, кодовая точка U+0067 обозначает букву "g".

Однако в некоторых системах письма один видимый символ может состоять из нескольких кодовых точек. Например, символ "की" в деванагари формируется из кодовых точек U+0915 и U+0940, соединённых вместе.


Где можно применить?

Ну конечно же поиграться, изобрести что-то своё, попентестить формочки на отказ в ослуживании, либо вставлять метки «жучки», чтобы в случае утечки данных отследить отправителя и получателя.

Тут всё зависит от твоих потребностей и креативных идей. В телеге кстати нормально работает, но при условии если эмодзи отправлен без дополнительного текста и т.п. В других мессенджерах не проверял.

В комменты закину такой смайлик на потыкать. Перешли себе в Избранное и от туда уже правой мышкой - копировать текст.

🅰️🅰️

➡️ Технический подробности глянуть тут.

➡️ Исходники кодера/декодера на гитхабе.

Надо на Bash такую пепяку сделать, ради прикола.


tags: #security #crypt

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
33
Ща темку тебе интересную покажу…

Представим ситуацию — Писал ты код, который агрегирует файлы, рассчитывает их хеш по алгоритму MD5 и сохраняет в базу. Смысл - не сохранять повторно файл, который уже есть в базе.

То есть для каждого нового файла, оно считает MD5 и ищет его в базе, если такого хеша нет, значит файл новый.


Звучит пиздец банально. Ну дак вот.

В какой-то момент ты обнаруживаешь 2 файла, с разным содержимым, но с одним и тем же хешем. Да ёб твоб мать! А как такое возможно?

Возможно!

MD5 ― это криптографическая хеш-функция, придуманная в 1991 году Рональдом Ривестом. Её задача — брать произвольные данные и сжимать их в 128-битное число (32 hex-символа).


Как эта поебота работает описывать не буду, если интересно погугли, там это уже на 100500 разжевали и в рот положили.

Вернемся к баранам:

Создаём пару текстовых файлов:

printf 'TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak' > a.txt

printf 'TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak' > b.txt


Содержимое отличается одним символом (22 символ): В a.txt это A (ASCII 65, 0x41), в b.txtE (ASCII 69, 0x45).

Проверим, что так оно и есть:

xxd -g 1 a.txt | sed -n '1,2p'
xxd -g 1 b.txt | sed -n '1,2p'


xxd создаёт представление указанного файла или данных, прочитанных из потока стандартного ввода, в виде шестнадцатеричных кодов.


Либо сразу выводим различия:

cmp -l a.txt b.txt

22 101 105


- 22 → позиция (22-й байт в файле)
- 101 (восьмеричное) → 0o101 = 65 (десятичное) = 0x41 = 'A'
- 105 (восьмеричное) → 0o105 = 69 (десятичное) = 0x45 = 'E'

cmp — утилита, которая сравнивает два файла побайтово и сообщает о первом отличии, если оно есть.


Ага, видим разницу.

Едем дальше, считаем MD5:

md5sum a.txt b.txt


И видим:

faad49866e9498fc1719f5289e7a0269  a.txt
faad49866e9498fc1719f5289e7a0269 b.txt


Вот это нихуясебе! Наверное md5sum гличнулся…

Проверяем по другому:

openssl dgst -md5 a.txt b.txt


MD5(a.txt)= faad49866e9498fc1719f5289e7a0269
MD5(b.txt)= faad49866e9498fc1719f5289e7a0269


Да нет, все правильно… Хеш одинаковый для разных файлов.

И что это всё значит?

Это наглядная коллизия и практическая атака на MD5 алгоритм.

На первый взгляд кажется, что «достаточно поменять один байт и можно случайно попасть в коллизию». Но на деле случайно это практически невозможно провернуть (вероятность ≈ 1 к 2^128).

То, что я показал в примере с AE — это синтетическая пара, созданная криптографами специально с использованием дифференциального криптоанализа MD5.

То есть кто-то заранее просчитал, какой именно байт нужно поменять, чтобы скомпенсировать все внутренние изменения в состояниях MD5.

Практическая атака (2004–2008)

- В 2004 году Ван Сяоюнь с коллегами показали первую реальную коллизию для MD5 за считанные часы.
- В 2008 году был создан поддельный сертификат SSL с использованием MD5-коллизии (огромный скандал).

Вот с тех пор MD5 окончательно считается небезопасным.

Коллизии можно находить и создавать целенаправленно, поэтому не рекомендую использовать MD5 для проверки целостности, подписей, сертификатов и т.п.

Для этих задач лучше бери проверенный SHA-256 или что-то посильнее.

Вот такие пироги. Изучай!

🛠 #crypt #md5 #glitch

@bashdays @linuxfactory @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
1798
Как расшифровать бекапы TrueNAS

У меня в домашней лаборатории self-hosted торчит TrueNas и по шедуллеру заливает бекапы критичных файлов по протоколу webdav в облако.

В облаке каждый файл имеет расширение .bin, если скачать к себе на машину такой файл, то внутри будет мусор.

И тут возник логичный вопрос, если мой TrueNas пойдет по пизде, как мне забрать из бекапа файлы и расшифровать их без участия TrueNas?

Оказалось все довольно просто. Под капотом TrueNas установлен rclone, который и выполняет задачу резервирования данных. Получается имея на своей локальной машине rclone теоретически можно забрать шифрованные бекапы и легко их расшифровать.

Давай попробуем реализовать задуманное.

Бекапы шифруются с помощью Encryption Password и Encryption Salt, эти параметры задаются в TrueNas, соответственно нам понадобятся эти данные.

Для начала расшифруем один файл, посмотрим как всё проёдет.

Зашифрованный бекап файла я скачал к себе на машину и положил в папку /tmp/encrypted/file.jpg.bin

Если файл открыть на просмотр, увидим такое:

RCLONE......hx^..]]NN..
..=._.S...4:..b...P...3`.^u0yO Ҭ..)..fkMP...K..


Пишем конфиг ~/.config/rclone.conf:

[cryptbackup]
type = crypt
remote = /tmp/encrypted
filename_encryption = off
directory_name_encryption = false
password = ZK6U8CZRqP-vT5fK0HwjO_Q
password2 = -GGulJpRclHETHVhp1MMs


Этот конфиг сгенерился автоматически, после запуска rclone config и заполнения данных.

Чтобы получить зашифрованный пароль из командной строки, воспользуйся командой:

rclone obscure "<password>"
rclone obscure "<salt>"


Потом эти данные можешь подставить в конфиг.

Если в TrueNas включено шифрование имен, то в параметре filename_encryption нужно прописать standard. Не проебись, на конце буква «d».


Проверяем:

rclone ls cryptbackup:

1974875 file.jpg


Отлично! Что-то сработало. Давай наконец-то расшифруем этот файл:

rclone copy cryptbackup: /tmp/decrypted


Всё, задача решена, в папке /tmp/decrypted лежит расшифрованная картинка и прекрасно открывается.

Аналогично поступаешь и с другими файлами. Тут суть закинуть весь зашифрованный бекап в папку /tmp/encrypted и одной командой copy все прекрасно расшифруется в /tmp/decrypted сохраняя структуру папок.

По итогу имеем удобный и практичный способ восстанавливать такие штуки без участия TrueNas.

А так-же можно проверять такие бекапы после заливки их в облако, чтобы точно быть уверенным, что бекап точно рабочий.

Концепт проверки: автоматически забрать несколько контрольных файлов из бекапа, расшифровать, сверить внутренности с шаблоном и при проблемах — плюнуть в графану или в телегу алертом.

На этом всё. Хороших тебе выходных!

🔥 Да, забыл, до 01.01.26 действует промокод FACTORY_26 (1000р) на первый месяц в Linux Factory.


🛠 #selfhosting #backup #crypt

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
1040