Привіт Хабр.
Хочу представити вам невеликий проект з
Я зробив проект із прихованого зберігання інформації у файловій системі (далі ФС).
Це можна застосувати для крадіжки конфіденційної інформації у освітніх цілях.
У вигляді дослідного зразка була обрана старенька лінуксова ФС
Реалізація
Міркування про реалізацію
Якщо добре «роздраконити» стандарт ext2, можна замінити, що у ФС існує так званий
Якщо зберігати інформацію, що приховується, без шифрування, то, навіть незважаючи на її розмитість по ФС, вона все одно занадто впадатиме в очі, особливо якщо програміст знатиме, що слід шукати. Тому було ухвалено рішення шифрувати всі блоки вихідного файлу. Я вибрав блоковий шифр
Для відділення необхідних блоків від інших при читанні у кожен блок було вирішено додати по спеціальному маркеру початку блоку. Цей маркер шифрувався залежно від номера блоку вихідного файлу. Такий прийом відразу дозволив не тільки знаходити потрібні блоки, але і впізнавати їх правильний порядок.
Загальний принцип роботи системи.
Алгоритм запису
По пунктам:
- Спочатку записати у вихідну файлову систему будь-яку інформацію;
- Видалити цю інформацію (не обов'язково всю);
- Файл для приховання розбити на блоки однакової довжини додавши маркер;
- Зашифрувати ці блоки;
- Помістити зашифровані блоки у порожні блоки ФС.
Для любителів блок-схем
Нижче наведено блок-схему алгоритму запису. На вхід алгоритм отримує чотири файли:
-Образ змінної файлової системи;
-Файл, що підлягає стеганографії;
-Файл із ключом шифрування для AES;
-Файл із маркером.
Відразу варто зазначити, що цей алгоритм має один недолік: після запису файлу у ФС, не можна записувати у ФС щось нове, оскільки будь-яка нова інформація може потрапити в ті блоки, які ми відвели нашому застеганографованому файлу, правда це відкриває можливість «швидкого замітання слідів».
Але досить очевидно, як це можна виправити: необхідно перезаписати алгоритм запису блоків у ФС. Це зрозуміле, але неймовірно трудомістке завдання.
Для Proof Of Consept я це не реалізовував.
В результаті вийдуть наступні зміни до ФС, так виглядає ФС до стеганографії (попередньо було записано аудіофайл).
А так виглядає ФС із уже застеганографованою інформацією.
Алгоритм читання
По пунктам:
- Зі знанням ключа та способу побудови маркерів скласти перші N маркерів, з гарантією що N, помножене на довжину блоку файлової системи більше за застеганографований файл;
- Здійснити пошук блоків у ФС, що починаються з маркерів;
- Розшифрувати отримані блоки та відокремити маркери;
- Зібрати отримані блоки у правильному порядку та отримати вихідний файл.
Для любителів блок-схем
Нижче наведено блок-схему алгоритму запису. На вхід алгоритм отримує три файли:
-Образ файлової системи;
-Файл із ключом шифрування для AES;
-Файл із маркером.
Після роботи програми з'являється файл Read, який і буде витягнутим із файлу стеганографованої ФС, якщо ключ або маркер були вказані неправильно, то файл Read буде порожній.
(Для любителів красивостей можна вкраплювати не тільки файл, але «шапку», що містить метаінформацію: ім'я файлу, права, час останньої зміни і т.д.)
Автоматизація запуску
Для зручності було написано bash скрипти, що автоматизують запуск на Linux (тестувалося на Ubuntu 16.04.3 LTS).
Розберемо запуск по кроках.
запис:
- sudo Copy_Flash.sh "DEVICE" - отримуємо образ ФС з DEVICE (флеш);
- ./Write.sh “FILE” “KEY” “MARKER” – створюємо віртуальне оточення, завантажуємо необхідні бібліотеки та запускаємо скіпт на запис;
- sudo ./Write_Flash.sh “DEVICE” – записуємо змінену ФС знову на DEVICE.
читання:
- sudo Copy_Flash.sh "DEVICE" - отримуємо образ ФС з DEVICE (флеш);
- ./Read.sh “KEY” 'MARKER” — створюємо віртуальне оточення, завантажуємо необхідні бібліотеки та запускаємо скіпт на читання;
- У поточному каталозі відкриваємо файл Read - це і є інформація, що застеганографована.
Висновок
Даний метод стеганографії, ймовірно, потребує доопрацювання, додаткового тестування та розширення на більш популярні файлові системи, такі як
Але метою даної роботи було показати принцип, за допомогою якого можна здійснити приховане зберігання інформації у файловій системі.
За допомогою подібних алгоритмів можна безбоязно зберігати інформацію, і якщо при знанні ключа таку систему зламати можливо не повним перебором (але дуже довгим алгоритмом), то без знання ключа дана система мені є абсолютно стійкою, проте це може бути приводом для окремої статті.
Весь код реалізовано мовою Python версії 3.5.2.
(Так-так, я знаю, що для production версії потрібно писати на чомусь «швидкому», наприклад на Сі 😉 )
У цій реалізації розмір вхідного файлу для стеганографії ні перевищувати 1000 кБ.
Хочу висловити подяку користувачеві
Джерело: habr.com