Обнаружение и извлечение документов с пользовательского компьютера

Популярная тема: антивирус, установленный на компьютере пользователя, обычно имеет полный доступ к дискам и оперативной памяти – соответственно, может забирать произвольные файлы, наверняка “секретные”, и отправлять их “куда-то в облако”. Отдельный вопрос: кто держит конфиденциальные или даже секретные файлы на компьютере, работающем под управлением антивируса; как ни странно, такое случается нередко, поэтому оставим вопрос за рамками записки. Вообще не будем привязывать дальнейшие рассуждения именно к антивирусу. Предположим, что есть некоторое условное программное обеспечение, работающее на компьютере пользователя с полными правами и возможностью занимать сколько угодно локальных вычислительных ресурсов. С тем же успехом это может быть не антивирус, а ядро операционной системы. Насколько сложно найти интересные файлы на компьютере пользователя в автоматическом режиме? Понятно, что отправлять на внешние серверы гигабайтные “дампы” дисков для ручного анализа – это слишком затратный вариант. Особенно, если пользователей очень много.

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

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

С другой стороны, можно и не сужать выборку, нацеливаясь только на определённые ПК, а наоборот – использовать всё разнообразие данных для определения точных целей. Например, интересны только редкие документы со словом missile (пример, понятно, условный), тогда отнесём к “редким” такие документы, для которых совсем не найдено похожих или дублей на других доступных ПК (напомню: подразумевается, что пользователей очень много). Сравнение документов, да ещё удалённое, представляет отдельную, весьма непростую, проблему: вычисление хеш-суммы для всего файла позволит обнаружить только в точности совпадающие – даже две версии PDF-файла, содержащие идентичный текст, но отличающиеся форматированием, дадут разное значение хеш-функции. То есть, для определения того, насколько один документ похож на другой, необходимо ввести некоторую сложную метрику (сложную – в плане реализации, значение может быть элементарным, например, вектор из нескольких 64-битных целых значений). Это до сих пор большая прикладная проблема, хотя и хорошо разработанная. Тем не менее, некоторые практически полезные метрики придумать вполне реально, например, если у вас есть возможность запускать на машине пользователя сложные алгоритмы обработки файлов.

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

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

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

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

Адрес записки: https://dxdt.ru/2018/01/27/8448/

Похожие записки:



Далее - мнения и дискуссии

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

Написать комментарий

Ваш комментарий:

Введите ключевое слово "D11U5" латиницей СПРАВА НАЛЕВО (<--) без кавычек: (это необходимо для защиты от спама).

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