Рейтинг:0

Сравнение хэшей для обнаружения шифрования файлов программ-вымогателей

флаг br

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

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

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

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

Что мне здесь не хватает?

DannyNiu avatar
флаг vu
Во всяком случае, ПУоСУ. Продемонстрируйте свою идею/находку, реализовав ее.
флаг br
Я сделал. Другой вопрос связан с рецензией.
Рейтинг:3
флаг kr

я этого не понимаю

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

Единственный надежный способ обнаружить шифрование — прочитать файлы с помощью другая система. Загрузитесь с USB-накопителя, создайте хэши файлов, повторяйте это время от времени, например. ежедневно или еженедельно. Конечно, это отличается от вашего стремления немедленно обнаруживать изменения.

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

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

что значения хеш-функции для файла могут варьироваться в зависимости от времени шифрование с открытым ключом

  1. Не хэш обычного файла, но результат шифрования может различаться. Как следствие, для разных файлов вы получите разные хэши.
  2. Результаты шифрования одного и того же файла могут различаться, но не из-за времени. Например, вы можете запустить шифрование AES GCM для тем же файл с тем же пароль на 100 параллельных потоков на тем же компьютер в тем же время, все они будут производить разные Результаты. Но при расшифровке все они дадут тем же исходный файл.
флаг br
Мой предыдущий вопрос связан с моей процедурой сравнения хэшей файлов на исходном диске Windows с хэшами файлов из более ранней резервной копии, рассчитанной в системе Linux. Комментарий, который послал меня сюда, отвечая на этот предыдущий вопрос, казалось, говорил, что это сравнение хэшей было бы бессмысленным. Похоже, вы согласны с моим первоначальным подходом. Предыдущий вопрос: https://security.stackexchange.com/questions/259716/hash-based-technique-to-detect-ransomware-повреждение-на-лету?noredirect=1. Исходное сообщение: https://raywoodcockslatest.wordpress.com/2021/12/08/ransomware-hash/
флаг kr
@RayWoodcock: Нет, я с тобой не согласен. Извините, это мой ответ был не ясен. Сначала вы вычисляете хэш в чистой системе и сохраняете его где-то снаружи. Тогда ваша система заражена программами-вымогателями. Он зашифровал некоторые из ваших файлов. Когда вы читаете их для вычисления хэша, программы-вымогатели расшифровывают его, и вы получаете тот же хэш, что и раньше. Вы получите тот же хеш, что и раньше. Но не может знать, есть ли «промежуточный слой», который прозрачно шифрует и расшифровывает данные. Таким образом, когда вы работаете в зараженной системе, вычисляя хэши, вы не можете определить, зашифрованы ли они на диске.
флаг br
Спасибо за продолжение. Да, вы поняли мой вопрос. Что меня озадачивает, так это файлы, зашифрованные пользователем. Инструмент хэширования «читает их для вычисления хэша»? Я думаю, что ответ заключается в том, что инструмент считывает их внешний вид: он получает случайные символы и вычисляет хэш на основе этих символов. Почему бы (или, может быть, вопрос должен быть, почему не мог) инструмент хеширования также заметил, что файл, зашифрованный программой-вымогателем, отличается от того, чем он был раньше?
флаг kr
1) *"Считывает ли их инструмент хэширования для вычисления хэша"?* - Да. Хэш — это не то, что вычисляется автоматически. Без чтения файла невозможно вычислить хэш. Нет никакого **хэша**. Может быть бесконечное количество алгоритмов для вычисления хэша. Вы сами решаете, какой хэш вам нужен: MD5, SHA-256, SHA-512, BLAKE и т. д.
флаг kr
2) *"Почему... не мог... инструмент хеширования также заметить...?"* - Потому что, чтобы заметить разницу, инструмент должен вычислить хэш. Для этого инструмент должен прочитать файл. Инструмент не может получить доступ к хранилищу напрямую. Это можно сделать только косвенно, через ОС. ОС заражена. Вымогатель перехватывает все запросы к хранилищу. Вот почему инструмент хеширования получает то, что предоставляет программа-вымогатель. Программа-вымогатель расшифровывает файл после его чтения из хранилища и перед передачей в ОС. Таким образом, инструмент хеширования не может узнать, что действительно хранится на жестком диске или твердотельном накопителе.
флаг br
ХОРОШО. Спасибо за терпеливость. Я думаю, что понял. Похоже (этот тип) программ-вымогателей повреждает ОС (Windows, в моей установке), делая хэши ее файлов подозрительными.Но если файлы были зашифрованы программой-вымогателем, это должно быть очевидно при сравнении хэшей Windows с хэшами тех же файлов, рассчитанными на предположительно чистой машине Linux. Если это правда, то схема, изложенная в другом посте (ссылка, указанная в начале моего вопроса выше), кажется законной.
флаг kr
@RayWoodcock: Боюсь, вы все еще неправильно понимаете, как работает ОС и программы-вымогатели. Вы упоминаете powershell, который обнаруживает изменения файлов. Но есть множество инструментов, которые обнаруживают изменения файлов на лету. Windows предоставляет класс *FileSystemWatcher*, который вы можете использовать для этого. Или вы можете просто сравнить размеры файлов и временные метки. Все эти инструменты замечают *реальные* изменения содержимого файлов. Но ни один из этих подходов не замечает шифрование/дешифрование, выполняемое программами-вымогателями.
флаг br
Что касается PowerShell: спасибо, я это вижу. Другой пост предшествует этому, как и мой пост в блоге. Я буду обновлять последний. Но мой последний комментарий (выше) неверен? Сценарий: инструмент хэширования Windows обманом сообщает об отсутствии изменений в файле. Но инструмент хэширования в незараженной системе Linux, проверяющий тот же файл, не ошибается: он оценивает файл как измененный программой-вымогателем и вычисляет другой хэш. (Можно надеяться, что программы-вымогатели не являются кросс-платформенными.) Затем сравнение хэшей Windows и Linux обнаруживает несоответствие. Нет?
флаг kr
@RayWoodcock: * «Тогда сравнение хэшей Windows и Linux обнаруживает несоответствие» * - Правильно. Но это слишком сложно. Достаточно просто сравнить хэши во внешней системе (назовите ее Linux): Сравните хэши текущего состояния с хешами предыдущего состояния.
флаг br
Пока я уверен, что заражена система Windows.
Рейтинг:2
флаг ng

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

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

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

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

флаг br
Этот ответ мне более понятен, чем другой. Кажется, это говорит о том, что моя первоначальная (выложенная в блоге) идея была на правильном пути: хеширование обнаружит разницу между зашифрованной и незашифрованной версией файла. Я все еще озадачен тем, что комментарий к моему другому вопросу (ссылка выше) был не только уверенным, но и получил одобрение. Что касается вашего второго пункта: должна ли программа-вымогатель быть написана для каждого конкретного инструмента хэширования, или можно ли «подключиться к считываемому коду всех программ» в общем порядке, что приведет к повреждению операций чтения файлов любой программой?
fgrieu avatar
флаг ng
@RayWoodcock: я думаю, [за этот комментарий] (https://security.stackexchange.com/questions/259716/#comment536553_259716) проголосовали, потому что он указывает, что сам вопрос предполагает: «преобладающая форма программы-вымогателя шифрует файл ** * а затем расшифровывает его на лету ***, чтобы сделать его доступным для пользователя, не предупреждая пользователя о том, что файл может быть постоянно зашифрован в любой момент», похоже на второй пункт в моем ответе. Если это правда (что _неочевидно), это побеждает метод хеширования, потому что он хеширует расшифрованные данные, которые идентичны оригиналу, поэтому имеют тот же хэш.
флаг br
Мое чтение показало, что это правда о преобладающей форме программ-вымогателей, но это нормально, если я ошибаюсь. Несмотря на это, я не думаю, что есть какие-либо споры о том, что этот вид программ-вымогателей действительно существует. Я думаю, что ваш второй пункт и обновление говорят о том, что инструмент хеширования не видит зашифрованный файл, если системе было приказано игнорировать, по крайней мере, на данный момент, все шифрование файлов типа X.Зашифрованный файл, возможно, не остров сам по себе; это одна тюремная камера в ряду камер, каждая из которых может быть разблокирована одновременно с помощью одного электронного переключателя. Но это не "на лету".

Ответить или комментировать

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