Небольшое предисловие


Стеганография, если кто не помнит, — это сокрытие информации в каких-либо контейнерах. Например, в картинках (обсуждалось тут и тут). Можно также скрыть данные в служебных таблицах файловой системы (об этом писалось тут), и даже в служебных пакетах протокола TCP. К сожалению, у всех этих методов есть один недостаток: чтобы незаметно «вкрапить» информацию в контейнер, нужны хитрые алгоритмы, учитывающие особенности внутреннего устройства контейнера. Да и с устойчивостью контейнера к манипуляциям возникают проблемы: например, если чуточку подредактировать картинку, скрытая информация теряется.

Можно ли как-то обойтись без хитрых алгоритмов и тонких манипуляций с данными, и при этом все-таки обеспечить работоспособность контейнера и приемлемый уровень сохранности скрытых данных? Забегая вперед скажу — да, можно! И даже утилитку предложу.

Кровавые подробности метода


Основная идея проста, как удар дубиной по лбу: на диске есть области, в которые операционная система никогда не пишет (или пишет в редких случаях). Чтобы не нужно было искать эти области хитрыми алгоритмами, воспользуемся избыточностью — то есть много-много раз продублируем нашу скрытую информацию по всем секторам диска. Затем прямо поверх всего этого благолепия можно создавать нужные разделы, форматировать файловые системы, писать файлы и ставить ОСи — все равно часть секретных данных сохранится и ее можно будет извлечь, а многократное дублирование поможет нам составить из кусочков исходное целое.

Достоинство такого метода очевидно: мы не зависим ни от формата файлов, ни даже от типа используемой файловой системы.

Недостатки тоже, думаю, очевидны:

  • Секретные данные можно будет изменить только полной перезаписью всего диска, с последующим воссозданием видимого пользователю содержимого. При этом нельзя пользоваться софтом, воссоздающим диск из образа: он воссоздаст и предыдущие секретные данные.
  • Чем больше объем секретных данных, тем больше вероятность потери части информации.
  • Извлечение данных с диска может занять много времени. От нескольких минут до нескольких дней (современные диски больши-ие).

Теперь перейдем к частностям.

Понятно, что если просто размазать секретные данные по всему диску, то скрыты они будут только от невооруженного взгляда. Если вооружить взгляд, скажем, редактором диска, то данные предстанут во всей красе. Поэтому данные неплохо бы зашифровать, чтобы не отсвечивали. Шифровать будем простенько, но со вкусом: по алгоритму aes256-cbc. Ключ шифрования спросим у пользователя, пусть хороший пароль придумывает.

Следующий вопрос — в том, как нам отличить «правильные» данные от испорченных. Тут нам поможет контрольная сумма, да не простая, а SHA1. А что? Для git'а она достаточно хороша, значит, и нам подойдет. Решено: снабжаем каждый сохраненный фрагмент информации контрольной суммой, и если после расшифровки она совпала — значит, расшифровка удалась.

Еще обязательно понадобится номер фрагмента и общая длина секретных данных. Номер фрагмента — чтобы отслеживать, какие кусочки мы уже расшифровали, а какие остались. Общая длина нам пригодится при обработке последнего фрагмента, чтобы не писать лишние данные (сиречь паддинг). Ну и раз уж у нас все равно наклевывается заголовок, то добавим туда имя секретного файла. Оно пригодится уже после расшифровки, чтобы не гадать, чем его открывать.

Проверяем метод на практике


Для проверки возьмем самый распространенный носитель — флэшку. У меня нашлась старенькая на 1 Гб, что вполне подойдет для экспериментов. Если вам, как и мне, пришла в голову мысль не париться с физическими носителями, а потестировать на файлике — образе диска, то сразу скажу: не выйдет. При форматировании такого «диска» линукс создает файл заново, и все неиспользуемые сектора будут заполнены нулями.

В качестве машины с линуксом, к сожалению, пришлось воспользоваться валяющейся на балконе метеостанцией на Raspberry Pi 3. Памяти там негусто, поэтому большие файлы прятать не будем. Ограничимся максимальным размером в 10 мегабайт. Слишком маленькие файлы тоже прятать смысла нет: утилитка пишет данные на диск кластерами по 4 Кб. Поэтому снизу ограничимся файлом в 3 кб — он влезает в один такой кластер.

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

  1. Быстрое форматирование в формате FAT16 с размером кластера 16 кб. Это то, что предлагает сделать Windows 7 с флэшкой, на которой отсутствует файловая система.
  2. Заполнение флэшки всяким мусором на 50%.
  3. Заполнение флэшки всяким мусором на 100%.
  4. «Долгое» форматирование в формате FAT16 (с перезаписью всего).

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

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile


Как видим, удалось успешно расшифровать только 158 кластеров (632 килобайта сырых данных, что дает 636424 байта полезной нагрузки). Понятно, что 10 мегабайт тут никак не наберется, а ведь среди этих кластеров явно есть дубликаты. Даже 1 мегабайт таким образом уже не восстановишь. Но зато можно гарантировать, что 3 килобайта секретных данных мы восстановим с флэшки даже после того, как ее отформатируют и запишут под завязку. Впрочем, опыты показывают, что с такой флэшки вполне возможно извлечь файл длиной 120 килобайт.

Последнее испытание, к сожалению, показало, что флэшка перезаписалась вся:

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile


Ни одного кластера не сохранилось… Печально, но не трагично! Попробуем перед форматированием создать на флэшке раздел, а уже в нем — файловую систему. Кстати, с завода она пришла именно с таким форматированием, так что ничего подозрительного мы не делаем.
Вполне ожидаемо, что доступное пространство на флэшке немного уменьшилось.

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

Total clusters read: 250752, decrypted: 405

Мегабайт, к сожалению, собрать из кусочков не получится, а вот килобайт двести — запросто.

Ну и весть о последней, 4-й проверке, на этот раз радостная: полное форматирование такой флэшки не привело к уничтожению всей информации! 120 килобайт секретных данных прекрасно влезло в неиспользуемое пространство.

Сводная таблица по тестированию:



Немного теоретизирования: о свободном месте и неиспользуемых секторах


Если вы когда-то разбивали жесткий диск на разделы, то могли обратить внимание, что далеко не всегда получается отвести все свободное пространство на диске. Первый раздел всегда начинается с некоторым отступом (обычно это 1 мегабайт, или 2048 секторов). За последним разделом тоже, бывает, остается небольшой «хвост» из неиспользуемых секторов. Да и между разделами иногда остаются промежутки, хотя и редко.

Другими словами, на диске есть сектора, к которым нет доступа при обычной работе с диском, но данные-то в эти сектора записать можно! А значит, и прочитать тоже. С поправкой на то, что есть еще таблица разделов и код загрузчика, которые как раз и расположены в пустой области в начале диска.

Отвлечемся на время от разделов и посмотрим на диск с высоты, так сказать, птичьего полета. Вот есть у нас на диске пустой раздел. Создадим в нем файловую систему. Можно ли сказать, что какие-то сектора на диске остались незатертыми?

И-и-и — барабанная дробь! Ответ практически всегда будет — да! Ведь в большинстве случаев создание файловой системы сводится к тому, что на диск записывается только несколько блоков служебной информации, а в остальном содержимое раздела не меняется.

А еще — чисто эмпирически — можно предположить, что файловая система не всегда может занять все отведенное ей пространство до последнего сектора. Например, файловая система FAT16 с размером кластера в 64 килобайта очевидно, не сможет полностью занять раздел с размером, не кратным 64 килобайтам. В конце такого раздела должен будет остаться «хвост» в несколько секторов, недоступный для хранения пользовательских данных. Впрочем, экспериментально это предположение подтвердить не удалось.

Итак, чтобы максимизировать место, доступное под стеганограмму, нужно использовать файловую систему с размером кластера побольше. Можно еще создать раздел, даже если это необязательно (на флэшке, например). Создавать пустые разделы или оставлять нераспределенные области не нужно — это привлечет внимание интересующихся граждан.

Утилита для экспериментов


Исходники утилиты можно пощупать здесь

Для сборки потребуется Qt версии 5.0 и выше и OpenSSL. Если что-то не собирается — возможно, придется подправить файл steganodisk.pro.

Можно поменять размер кластера с 4 Кб на, скажем, 512 байт (в secretfile.h). При этом вырастут расходы на служебную информацию: заголовок и контрольная сумма занимают фиксированные 68 байт.

Запускать утилиту нужно, естественно, с правами пользователя root, причем с осторожностью. Никаких вопросов перед перезаписью указанного файла или устройства не будет!

Наслаждайтесь.

Комментарии (54)


  1. vdem
    06.04.2019 18:05
    +3

    Это не стеганография, и такое «чудо» умели очень даже древние вирусы.

    И-и-и — барабанная дробь! Ответ практически всегда будет — да! Ведь в большинстве случаев создание файловой системы сводится к тому, что на диск записывается только несколько блоков служебной информации, а в остальном содержимое раздела не меняется.

    Неужели? Как же так! Мне было немногим больше ~10 лет и я уже это знал, это середина 90-х. Представляете? Интернета не было.

    P.S. Записывается (при быстром форматировании, а кто полное делает?) только FAT и ее резервная копия (как там с NTFS не знаю, но на флешках обычно FAT).


    1. berez Автор
      06.04.2019 18:40

      Это не стеганография,

      Обоснуйте.

      Неужели? Как же так! Мне было немногим больше ~10 лет и я уже это знал, это середина 90-х. Представляете? Интернета не было.

      Искренне рад за вас. Вы были очень развитым ребенком.

      Немного вас разочарую: я тоже в курсе всего этого и примерно с тех же времен.

      P.S. Записывается (при быстром форматировании, а кто полное делает?) только FAT и ее резервная копия (как там с NTFS не знаю, но на флешках обычно FAT).

      В NTFS точно так же. Более того, и в ext2-3-4 тоже так же.

      Собственно, вся статья — это развитие вот этого обсуждения: habr.com/ru/post/347604/#comment_10637312
      Давненько хотел попробовать на практике то, о чем мы все знаем в теории. Сейчас вот нашел на это время. Конкретно интересовали граничные случаи — т.е. сколько данных остается на диске, если его забить под завязку. Про то и статья.


      1. vdem
        06.04.2019 19:24

        Обоснуйте.

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

        Прятать же хищное тело злобного вируса (ну или сообщение) в тех местах, куда вряд-ли доберется драйвер файловой системы, ну и плюс многократно дублировать это (во избежание) — к стеганографии не относится. Так же, как, к примеру, и запись тела вируса в те самые куски исполняемых файлов, где для выравнивания остается куча «свободного» места, т.е. килобайты, в которых или 0 или повторяющиеся последовательности. Это всё НЕ стеганография.


        1. berez Автор
          06.04.2019 19:53

          Но для меня лично стеганография — это метод сокрытия секретных данных в общедоступных.

          Стеганография — это сокрытие самого факта передачи секретных данных. И в этом смысле нет особой разницы между тем, передается ли тайное сообщение посредством ложных опечаток или неиспользуемых секторов. И в том, и в другой случае цель — скрыть сам факт наличия секретных данных.


          1. R7R
            06.04.2019 20:33

            И в этом смысле нет особой разницы между тем, передается ли тайное сообщение посредством ложных опечаток или неиспользуемых секторов


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

            (Испытуемые* знали, что используется стеганография, им было предложено обнаружить стегосообщение в передаваемых файлах, но никто ничего не нашел :)

            Вообще, складывается впечатление, что чем проще — тем надежнее.

            * между прочим — это были проффи, чьей задачей является искать и пресекать :)


            1. zxweed
              07.04.2019 13:01

              их задачей является сбор денег, а отнюдь не «искать и пресекать»


              1. R7R
                08.04.2019 16:31

                их задачей является сбор денег, а отнюдь не «искать и пресекать»


                Не умея искать и пресекать — они денег собрать не смогут.
                Люди работают по разработанным для них методичкам, редко кто проявляет инициативу идти по непроторенным путям.
                (один из наших обучающих экспериментов был следующий: кулек с товарами из магазина: бытовая химия, разная мелочевка, DVD-диск и художественная книга. Задача — найти стеганографическое сообщение. Началось активное изучение диска и книги. Под подозрение попали даже штрих-коды на товарах. А разгадка была предельно простой — сообщение было напечатано на простенькой бумажной этикетке пластиковой бутылки с моющим средством. В разделе «Состав» — мелкими буквами с минимальным интервалом (слово с настоящей этикетки — слово из секретного сообщения — слово с этикетки и.т.д.)
                Этого детского шифра оказалось вполне достаточно)


                1. zxweed
                  08.04.2019 18:06

                  в условиях, когда у них есть сообщники в депутатах — им вообще не нужно ничего уметь для этого, даже читать и писать.


          1. vdem
            06.04.2019 20:33

            «Неиспользуемые» в определенных случаях секторы могут затираться, в зависимости от алгоритма работы драйвера ФС. Стеганография (опять же, в моем понимании) предполагает модификацию неких данных (файла с текстом, к примеру) таким образом, чтобы у читающего этот текст не было никаких поводов заподозрить наличие скрытой информации (с UTF-8 это вообще прелестно). Вы же рассуждаете о том, как спрятать секретные данные там, где их обнаружить можно (причем даже не утрудили себя тем, чтобы как-то скрыть этот факт: я ведь могу просто по секторам прочитать весь диск, простейшая программа на ассемблере, и найду всё что Вы спрятали). Уж лучше бы в Flash BIOS записывали, вдруг никто не догадается.


          1. vdem
            06.04.2019 20:45

            Хотя, впрочем, Вы несколько правы, — но только в том смысле, что Вы скроете секретные данные только на своем носителе, с известной Вам файловой системой. Только вот стеганографию как бы в передаче данных больше используют, а какой носитель и ФС будет использовать Ваш визави — бабка натрое гадала. Так что остается ориентироваться лишь на файлы — как поток байтов, а не на структуру ФС и её алгоритмы.


            1. berez Автор
              06.04.2019 21:04

              Вы же рассуждаете о том, как спрятать секретные данные там, где их обнаружить можно (причем даже не утрудили себя тем, чтобы как-то скрыть этот факт: я ведь могу просто по секторам прочитать весь диск, простейшая программа на ассемблере, и найду всё что Вы спрятали).

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

              Хотя, впрочем, Вы несколько правы, — но только в том смысле, что Вы скроете секретные данные только на своем носителе, с известной Вам файловой системой.

              Тип файловой системы не важен. По крайней мере, подойдет любая из тех, что широко используются на переносных носителях (fat16, fat32, ntfs, exFat). Главное, чтобы не все свободное место на ней было забито.

              Только вот стеганографию как бы в передаче данных больше используют, а какой носитель и ФС будет использовать Ваш визави — бабка натрое гадала.

              О об использовании стеганографии и пароле договориться, значит, можно, а о том, как флэшку потом форматировать — никак не получится? Почему? :)

              Так что остается ориентироваться лишь на файлы — как поток байтов, а не на структуру ФС и её алгоритмы.

              Образ диска — это ведь тоже файл. :)


              1. vdem
                06.04.2019 21:11

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

                Скажете это в ФСБ/ЦРУ/ФБР/СБУ.

                Вы так и не смогли понять, что то, о чём Вы говорите, к стеганографии относится чуть меньше чем вообще никак.


                1. berez Автор
                  06.04.2019 21:34

                  Скажете это в ФСБ/ЦРУ/ФБР/СБУ.

                  Ответ неконструктивен.

                  Я еще раз спрошу: вот попала к вам в руки флэшка. На ней — самая обычная файловая система, записана какая-то вполне банальная фигня. Никаких хитрых файлов, скрытых каталогов или криптоконтейнеров на флэшке не наблюдается. Таких флэшек в любой организации — десятки и сотни.
                  Вопрос: что может вас заставить насторожиться и начать изучать именно эту флэшку посекторно?

                  Вы так и не смогли понять, что то, о чём Вы говорите, к стеганографии относится чуть меньше чем вообще никак.

                  Почти каждое введение в стеганографию начинается с истории о том, что сообщение писали на бритой голове у раба, ждали, пока он обрастет, и отсылали его к адресату. Вас послушать, это к стеганографии относится чуть меньше чем вообще никак. Но жить-то как-то надо. :)


                  1. vdem
                    06.04.2019 21:49

                    А Вы демагогии где учились?


                  1. mk2
                    07.04.2019 18:05

                    Я бы сказал, что если «пустые» секторы записаны «случайным шумом», а не нулями или кусками когда-то удалённых файлов, то это повод изучить их повнимательнее.
                    Конкретно данная реализация может быть обнаружена при частотном анализе: если мы видим, что «случайный шум» состоит из некоторого количества одинаковых пакетов по 4к — тут явно что-то нечисто.

                    P.S. Прочитал комменты дальше — вы дописываете (в самое начало ведь, да?) совсем уникальный id блока. Тогда копий не будет, да.


                    1. berez Автор
                      07.04.2019 20:26

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

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

                      Можно, конечно, попытаться изобразить на диске какое-то непримечательное содержимое типа кусков былых файлов. Но тогда возникает две проблемы:
                      — надо как-то обеспечить разнообразие, потому что наличие в свободных секторах, например, только странных текстов подозрительно.
                      — надо как-то обеспечить распознавание «своих» данных. Если снабжать их какой-то контрольной суммой, то и любой интересующийся злодей сможет проверить, есть на диске скрытые данные или нет.

                      Посему я выбрал самый простой способ — шифровать. Ну да, наличие рандомных данных может выглядеть подозрительно, но это уже издержки. И кстати, есть у меня знакомый админ, который перед продажей б/у дисков из серверной заполнял их псевдослучайными данными из /dev/urandom :)

                      вы дописываете (в самое начало ведь, да?) совсем уникальный id блока

                      Да, в самое начало.


      1. aamonster
        06.04.2019 19:55

        А теперь попробуйте TRIM (для SSD).


        1. berez Автор
          06.04.2019 20:16

          Если предоставите экземпляр SSD для опытов (желательно не очень большого объема) — обязательно попробую. Гонять эксперименты на системном SSD я пока не готов. :)


  1. Zalechi
    06.04.2019 19:19

    Простите, но помимо плохой редакции статьи, главное с чем я столкнулся, так это с вопросом — а что мешает проверяющему органу понять, что Вы что-то спрятали, а потом затребовать пароль для вскрытия шифровки? По идее отказ будет воспринят следствием не в лучшую сторону для Вас. Или таки есть возможность отмахнуться, мол не моя флешка(если речь о флешке) или не помню пароль, канает, как Вы любите вырожаться. Выражение обоснуй я подглядел в вашем ответе к одному из комментариев.
    Хотя пока писал, до меня дошло, что прятат можно не только от следствия, но и вдругих случаях(тут как раз и проявилась неудачная на мой взгляд редакция статьи — немного бы пошаманить). Бизнес, коллеги, семья, и так далее. Но что если говорить именно о хитрых следаках и их возможностях технических.

    Спасибо.


    1. berez Автор
      06.04.2019 20:08

      Простите, но помимо плохой редакции статьи

      Что именно плохо?

      главное с чем я столкнулся, так это с вопросом — а что мешает проверяющему органу понять, что Вы что-то спрятали, а потом затребовать пароль для вскрытия шифровки?

      Шифрованные данные ничем не отличаются от случайных — там нет явно видимых заголовков или повторяющихся паттернов. Поэтому проверяющие органы не смогут найти на диске подозрительных «зацепок».
      Единственное, что может вызвать подозрение — это то, что в незанятых секторах не нули, а какие-то рандомные данные. Ну так всегда можно сказать, что раньше на флэшке были фильмы записаны. :)

      а потом затребовать пароль для вскрытия шифровки? По идее отказ будет воспринят следствием не в лучшую сторону для Вас.

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

      Или таки есть возможность отмахнуться, мол не моя флешка(если речь о флешке) или не помню пароль, канает, как Вы любите вырожаться.

      Вы меня с кем-то путаете. Я не люблю так выражаться.

      Хотя пока писал, до меня дошло, что прятат можно не только от следствия, но и вдругих случаях(тут как раз и проявилась неудачная на мой взгляд редакция статьи — немного бы пошаманить). Бизнес, коллеги, семья, и так далее. Но что если говорить именно о хитрых следаках и их возможностях технических.

      Статья не претендует на руководство по сокрытию данных. Ее цель — поделиться моими наблюдениями.
      Утилита написана для проверки концепции и для развлечения. Она не предназначена для использования в бизнесе или сокрытия информации от правоохранительных органов.


      1. Zalechi
        06.04.2019 21:09

        Спасибо. Говорю, особо не придераюсью но например: Немного теоретизирования. До этого Вы описывайте 4 способа проверки. После чего разбирайте каждый. Не мне советовать, но может перед каждым пунктом где Вы детально пишите, писать оглавлаление «болдом»? В принципе читается с юмором, легко, но мелкие моменты я уверен в будущем Вы сделайте информативней и ещё читабильней


        1. vdem
          06.04.2019 21:15

          придераюсью но например, Немного теоретизирования: оглавлаление «болдом» читабильней

          Вероятно, я таки придираюсь, но всё же оглавление читабельней.
          P.S. Даже без теоретизирования.
          P.P.S. Даже «болдом».
          Всегда Ваш, Grammar Nazi :)


      1. kinall
        06.04.2019 23:36

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

        Прям классика вспомнилась)


  1. panteleymonov
    06.04.2019 19:42

    Вы что-то спрятали, а потом затребовать пароль для вскрытия шифровки? По идее отказ будет воспринят следствием не в лучшую сторону для Вас.

    А «не пойман — не вор» не работает? Как они могут доказать что что то спрятано если нет пароля?


    1. remzalp
      06.04.2019 20:23
      +1

      терморектальный криптоанализ профилактически применят и внезапно смогут восстановить пароль.


    1. Zalechi
      06.04.2019 21:14

      Я к чему спросил! Помните известный случай с исламистом в США, которого спец службы местные разрабатывали? На его айфоне код стоял — естественно инфа вся зашифрована. Шумиха, все такое… Я так помню он отмахивался мол код забыл. Интересно, а в реалиях РФ в таких случаях как поступают?


      1. vdem
        06.04.2019 21:24
        +1

        Полагаю, обрабатывают пока не вспомнит и, вероятно, правильно делают. И в РФ, и в США (Гуантанамо же).


        1. Zalechi
          06.04.2019 21:28

          Тогда продолжим, о какой стеганографии идёт речь, если я толковый спец могу понять, что там что-то скрыто и остаётся выбить пароль от шифровки. Хотя можно отмахнуться, мол: « я не знал, только что у цыганки купил флэху..»?

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

          Вот что пишет википедия:

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


      1. panteleymonov
        07.04.2019 09:58

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


  1. remzalp
    06.04.2019 20:27

    Под стеганографией подразумевается факт сокрытия самого факта, что что-то спрятано.


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


    Так что ключевая задача стеганографии — избежать вопросов "а что это вы прячете" — не достигается.


    1. berez Автор
      06.04.2019 20:37

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

      Ошибаетесь.
      На диске не будет повторяющихся фрагментов. В заголовке каждого фрагмента — его уникальный порядковый номер на диске. Сверху все это шифруется AES-256 в режиме CBC. В результате каждый фрагмент будет отличаться от своего дубликата, ведь у того — другой порядковый номер в заголовке.

      АДД: Собственно, проверить не составляет труда: достаточно зашифровать короткий файлик, влезающий в один фрагмент целиком, и убедиться, что повторяющихся фрагментов нет. Для этого эксперимента даже диск не нужно искать — вполне подойдет обычный файл:
      # Создаем файлик на 10 мегабайт
      $ dd if=/dev/zero of=testfile.img bs=1M count=10
      # Создаем «секретный файл»
      $ echo «Megasecret» > secret.txt
      # прячем это все в «образ диска»
      $ ./steganodisk -e -s secret.txt -p password testfile.img

      Теперь можно просмотреть testfile.img в любом просмотрщике, умеющем показывать бинарные файлы (хоть в том же mcview), и убедиться, что никаких повторяющихся фрагментов там нет.


      1. vdem
        06.04.2019 20:48

        На диске не будет повторяющихся фрагментов

        А если ФС таки затрет фрагментик? Ведь если уж совсем-совсем прятаться, то надо так, чтоб ФС ничего про фрагментики не знала. А если она не знает, то и Вы особо не узнаете (да, можно пометить кластер как сбойный, но беда в том, что есть и реально сбойные кластеры, а не только фиктивные, а фиктивные каким-нибудь NDD обнаружатся). Вы не в ту сторону шифруетесь, ИМХО.


        1. berez Автор
          06.04.2019 21:15

          А если ФС таки затрет фрагментик?

          Если ФС затрет фрагментик, то утилита его пропустит как не содержащий секретных данных (не сойдется контрольная сумма после расшифровки). Для того и нужна избыточность.

          Ведь если уж совсем-совсем прятаться, то надо так, чтоб ФС ничего про фрагментики не знала. А если она не знает, то и Вы особо не узнаете (да, можно пометить кластер как сбойный, но беда в том, что есть и реально сбойные кластеры, а не только фиктивные, а фиктивные каким-нибудь NDD обнаружатся). Вы не в ту сторону шифруетесь, ИМХО.

          ФС и так ничего не знает про скрытые данные. И утилита ничего не знает про ФС. Мне кажется, вы упустили главную мысль статьи: обнаружение испорченных фрагментов происходит безо всякой помощи со стороны ФС, а восстановление целого файла происходит за счет избыточности (многократного дублирования фрагментов).


          1. vdem
            06.04.2019 21:22
            -3

            Да ёлки-палки! Неужто так сложно понять, что стеганография и сокрытие данных в неиспользуемых секторах/кластерах/недокументированных областях диска/файлов — разные вещи, совсем разные, совсем-совсем? Какие мудаки Вам плюсы за эту статью поставили? Пусть они меня заминусуют!


      1. Rulexec
        07.04.2019 21:36

        Вместо разделения данных по кускам лучше использовать фонтанные коды ( https://en.wikipedia.org/wiki/Fountain_code ). Тогда можно будет шифровать рандом и результат применения кодирования, плюс шансы, что пропадут все куски с одинаковым идентификатором уменьшатся.


        1. berez Автор
          07.04.2019 22:40

          Спасибо, очень интересная идея.


    1. Zalechi
      06.04.2019 21:39

      Поправьте если ошибаюсь, но во первых автор не претендует на исключительность своего метода, а лишь предлагает один из способов. Следовательно, если инфа и субъект который генерирует инфу, такая цель за которой «охотится» профессионал, то скорее всего эту инфу вскроют, или хотя бы найдут. Но в случае, если я храню фотки обнаженки любовницы, а жена или подруга нифига не айтишник, то очень даже сработает и нифига его подруга не догадается в жизни. Храни хоть на флешке, хоть на семейном компе, хоть…


      1. vdem
        06.04.2019 21:51
        -1

        Блеать, да это же НЕ стеганография!


        1. Zalechi
          06.04.2019 22:11

          Христа ради, объясните.
          — Вот вики:

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

          — А вот флешка, на ней Word-Файлы с работы. А ещё зашифрованная фотка голой любовницы спрятанная по методу из статьи.
          — Вот и жена с работы пришла. Флешка в компе, и как раз папка с содержимым открыта. Видит документ. Открыла. Не интересно… пошла готовить ужин.

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

          Потому что также вики вот что пишет:
          Стеганогра?фия (от греч. ???????? «скрытый» + ????? «пишу»; букв. «тайнопись») — способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (хранения). Этот термин ввел в 1499 году аббат бенедиктинского монастыря Св. Мартина в Шпонгейме[de] Иоганн Тритемий в своем трактате «Стеганография» (лат. Steganographia), зашифрованном под магическую книгу.


          1. vdem
            06.04.2019 23:10
            +2

            Христа ради, объясните.

            По субботам не подаю. В остальные дни недели тоже.

            стеганографифей

            Такого слова вообще нет. Но я понял, что Вы хотели сказать. Ответ — нельзя.

            P.S. Я всё расскажу Вашей жене. И стеганография не поможет уже.


            1. Zalechi
              07.04.2019 12:57

              Ябеда. Амин.


  1. Chosen_One
    06.04.2019 20:59

    Я тоже понял что повторяются данные «Чтобы не нужно было искать эти области хитрыми алгоритмами, воспользуемся избыточностью — то есть много-много раз продублируем нашу скрытую информацию по всем секторам диска»


    1. berez Автор
      06.04.2019 21:21

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


      1. vdem
        06.04.2019 21:29

        в результате фрагменты с одинаковым содержимым на диске будут разными

        А ключи для расшифровки где хранить? В каком-то очень-очень тайном секторе, и понятное дело с многократным дублированием.


        1. berez Автор
          06.04.2019 22:14

          А ключом для расшифровки является пароль, введенный пользователем. Точнее — переданный параметром командной строки.


          1. vdem
            06.04.2019 23:13

            А пароль Вы как передавать собираетесь? На ушко нашепчете?


            1. berez Автор
              07.04.2019 11:00

              А это уже выходит за рамки статьи.


  1. petropavel
    06.04.2019 22:56
    +1

    Хранить данные в неиспользуемом месте — это как скрытые криптоконтейнеры, что TrueCrypt, например, использует для plausible deniability.

    И TCHunt их умеет находить. Именно, потому что зашифрованные — если мусор в неиспользуемом месте диска подозрительно хорошо проходит тесты на случайность, то это неспроста.


    1. berez Автор
      06.04.2019 23:08

      А вот всегда было интересно: если мусор остался, скажем, от коллекции фильмов, закодированных каким-нибудь h264, то как у него будет с тестами на случайность? Как по мне, так вполне случайно выглядит.


      1. sim31r
        07.04.2019 01:05

        Пробую найти последовательность из восьми нулей в h264 файле, кроме заголовка есть по ходу файла целые области из нулей

        Заголовок спойлера

        7A 32 1E 21 00 05 00 A0 ¦ 1F 21 10 05 00 A0 1B DB
        C0 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 3F 21 10
        05 00 A0 1B FF C0 00 00 ¦ 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 ¦ 00 00 00 00 00 00 00 00


        1. berez Автор
          07.04.2019 10:46

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


    1. dartraiden
      07.04.2019 04:14
      +1

      github.com/antagon/TCHunt-ng/blob/master/README.md

      А можете показать, где там написано про скрытые контейнеры и правдоподобное отрицание? Я вижу там утилиту, которая делает совсем иное — позволяет определить «вот этот вполне себе видимый всем porno.mpg является криптоконтейнером или нет?»

      А то, о чем говорили вы (отрицаемое шифрование) выглядит совсем иначе. Это когда из меня вытряхнули пароль от этого контейнера (а он у меня лежит вполне открыто, его и искать не надо) но у контейнера может быть второе дно, скрытое в свободном месте внутри контейнера. Определить есть оно там или нет на основе анализа этого самого пустого места — невозможно (при использовании VeraCrypt невозможно, а вот с TrueCrypt есть способ, который в VeraCrypt запатчили, поэтому привет тем, кто пользуется устаревшим софтом), потому что пустое место в контейнере всегда забито рандомными байтами, неотличимыми от зашифрованного второго дна. Таким образом, придется пытать владельца контейнера пока он не выдаст пароль от второго дня, вот только второго дна может не быть, и атакующий никогда не может быть уверен, то ли его там реально нет, то ли пыточка недостаточно эффективна.

      Так что, единственное, что может TCHunt — это преодолеть совершенно детский способ защиты «я переименовал контейнер в resource.bin и спрятал среди ресурсов своей любимой игры». Но это не защита, а детский сад, годный только чтобы порнушку от родителей прятать.


  1. Daddy_Cool
    07.04.2019 10:49

    Вставлю пять копеек.
    1. Зашифрованные данные надо расшифровывать и зачем-то использовать. Ну там смотреть на фотку любовницы например. Для этого нужен софт для расшифровки, например та самая авторская утилита.
    2. Наличие утилиты для расшифровки привлекает внимание. Если на компьютере подозреваемого обнаружится дистрибутив Веры Криптовой, или что подозреваемый ходил на сайт за ним, то логично предположить, что утилита была использована, и вероятность применения метода ТРКА возрастает.
    3. Соответственно средства для расшифровки надо хранить в безопасном месте — в подполе на даче :) или в облаке в зашифрованном виде (если утилита собственная), тогда вопрос — почему бы там не хранить сами секретные данные? Лучше видимо использовать стандартные средства — ту же Веру, и при необходимости скачивать.
    4. Я мало вижу кейсов использования криптозащит файлов, кроме как если человек делает что-то незаконное, но тогда им будут интересоваться правоохранительные органы с соответствующими возможностями/ресурсами, прежде всего в виде ТРКА в различных его формах. А вот для так сказать частного использования… ну только что фотки любовниц прятать. Хотя возможно я слишком наивен — если хабровчане накидают случаев именно необходимости криптозащиты — буду благодарен.


    1. berez Автор
      07.04.2019 20:36

      Насчет криптозащиты не скажу, а вот если спрятать в неиспользуемых секторах диска сообщение типа «Этот компьютер — собственность ИП Иванов и Сыновья, г. Нижние Бурдюки, ИНН 1234567890», то можно будет доказать, например, факт кражи компьютера. Но тогда проще будет записать сообщение прямо в открытом виде и безо всяких заголовков и контрольных сумм, чтобы прямо в просмотрщике диска было все видно.