Вопрос или проблема
Мне нужно сканировать системы Linux на наличие вирусов/вредоносных программ, просто всю файловую систему. Есть несколько вариантов, которые следует рассмотреть.
- Один из вариантов — это то, что обычно делают пользователи: использовать антивирус для сканирования системы раз в день.
- Второй вариант — найти файлы, измененные за последний день, и передать этот список антивирусной программе.
Я протестировал следующую команду bash find
в директории с 5 миллионами пустых файлов, и это крайне эффективно.
date;find /test/ -type f -ctime -1 -type f 1>./find_ctime.out 2>./find.errors;date
Это занимает всего около 5 секунд.
Я использую опцию -ctime
, просто чтобы обойти некоторые программы, изменяющие время модификации с помощью утилиты, такой как touch
.
Большинство администраторов, когда они говорят о сканировании системы, имеют в виду, что антивирус должен сделать полное сканирование.
Есть ли причина, по которой не следует использовать find
для получения списка измененных файлов и их сканирования?
Часто можно, и это одно из первых вещей, которые я бы сделал, если подозревал бы вторжение в систему. Это разумно, если нет подозрений, что злоумышленник получил доступ root.
Однако, если есть доказательства того, что доступ root был получен, я бы не доверял ничему, что происходит локально, будь то выполнение команды find или антивирус или проверка локально хранимых журналов на подозреваемой системе, потому что злоумышленник с доступом root мог это испортить. В таком случае я бы проверил удаленные журналы, которые я настроил заранее, а также загрузил бы систему с чистых носителей и запустил антивирус оттуда.
Также целесообразно проверять файлы не по их датам, а по их хешам, как это делает, например, rkhunter
. Это требует предварительной подготовки базы данных хешей, когда система чиста и хранится надежно (например, удаленно или с осторожной подписью), так что даже злоумышленник, получивший доступ root, не мог бы ее изменить.
Ответ или решение
Использование команды find
для сканирования файлов, изменённых за определённый период времени, может показаться эффективным способом для обнаружения потенциальных вирусов или вредоносных программ на Linux-системах. Однако существует несколько факторов, которые необходимо учитывать при принятии этого решения. Давайте подробнее рассмотрим, почему использование find
не всегда является оптимальным или безопасным решением.
1. Ограниченность метода
Использование find
для поиска файлов, изменённых за последний день, имеет свои ограничения. Метод основан на анализе временных меток файлов, которые могут быть подделаны при помощи утилит, таких как touch
. Это создаёт риск пропуска файлов, которые могли быть изменены злоумышленником, но не проявили активности за последние сутки.
2. Уязвимость к компрометации системы
Если есть подозрения на компрометацию системы или наличие рутовского доступа, доверять локально исполняемым командам, в том числе find
, небезопасно. Злоумышленник может модифицировать не только временные метки, но и файлы самой антивирусной программы или её параметры. В таких случаях рекомендуется использовать внешние средства для проверки состояния системы. Лучше всего:
- Просматривать удалённые логи, если они были заранее настроены.
- Загрузиться с чистого носителя и запустить антивирусную программу в безопасном режиме для полноценной проверки.
3. Альтернатива: использование хешей
Для более точного обнаружения изменений рекомендуется использовать хеширование файлов. Инструменты, такие как rkhunter
, осуществляют проверку файлов на основе заранее подготовленной базы данных хешей. Это позволяет более эффективно находить изменённые или поддельные файлы, поскольку хеши сложно подменить (особенно если база данных находится удалённо или защищена).
4. Тщательность и комплексный подход
При организации регулярного сканирования системы важно не ограничиваться лишь поверхностным подходом. Вместо ежедневного сканирования файлов на основе их времени изменения следует применять более комплексные меры безопасности, включая:
- Регулярное обновление антивирусного программного обеспечения.
- Постоянный мониторинг состояния системы.
- Настройку бэкп-апов и их хранение в защищённых местах.
Заключение
Использование find
для получения списка файлов с изменениями за последний день может быть полезным инструментом в определённых ситуациях, однако на практике это не всегда будет гарантией обнаружения всех угроз. Особое внимание следует уделять безопасности системы, особенно если существует вероятность рутовского доступа злоумышленника. Наилучшим подходом будет сочетание нескольких методов защиты для достижения максимальной безопасности вашей Linux-системы.