Статьи

Быстрое обнаружение взломанных файлов с помощью CRON / PHP: SuperScan

защита вашего сервера

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

Некоторое время назад я представил скрипт под названием hashscan , предназначенный для отслеживания изменений на сайте. Выполненный через ежедневный CRON, скрипт считывает файлы для указанного каталога (например, каталога public_html учетной записи на сервере), генерирует хэши (для файлов с определенными расширениями файлов) и сравнивает их с хешами предыдущего сканирования, хранящимися в базе данных. , Это отличный способ для владельцев сайтов получать уведомления о файлах, которые были добавлены, изменены или удалены хакером.

В этой статье я представлю обновленную версию скрипта, которая называется SuperScan .

Преимущества SuperScan

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

Поскольку проверка учетной записи 1500 файлов занимает ~ 0,75 секунды, SuperScan можно часто запускать, не влияя на производительность сервера.

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

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

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

Наконец, любопытным дополнительным преимуществом является то, что изменения в (errorless) файлах error_log регистрируются и могут направить внимание веб-мастера на проблемы с кодированием, которые возникли в ходе процедур тестирования.

SuperScan Logic

Логический поток SuperScan:

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

База данных, переменные и рабочие массивы

Вместо того, чтобы утомлять вас подробностями, я вставил комментарии во все сценарии.

Таким образом, вкратце, существует три таблицы базы данных:

  • baseline : содержит $file_path , хеш файла и дату и время последнего изменения файла. Я также добавил учетную запись, чтобы несколько учетных записей могли использовать одну базу данных)
  • история : регистрирует каждое обнаруженное изменение — или его отсутствие — в каждом сканировании.
  • отсканировано : эта запись сканирует итоговую дату и время, а также количество изменений и связанной учетной записи.

Предупреждение № 1 :
Я не могу не подчеркнуть, что переменная $testing установленная с помощью configure.php , вызовет огромное количество выходных данных, поэтому она должна использоваться только для тестирования, а не во время задания CRON!

Предупреждение № 2 :
Поскольку путь / к / файлу используется в качестве ключа, он должен быть уникальным. Это означает, что несколько учетных записей никогда не могут сканировать одни и те же файлы.

Предупреждение № 3 :
Кроме того, серверы Windows будут использовать обратную косую черту, которая немедленно заменяется на косую черту, потому что символы пропадают в базе данных. Кроме того, использование апострофа в имени файла вызовет проблемы с запросами к базе данных.

Рабочие массивы предназначены для использования функций PHP, которые обращаются к ключу ( $file_path ; это также итератор файловой структуры, поэтому никогда не $file_path $iter‐>key() ).

$baseline считывается перед началом сканирования, $current является результатом сканирования, а массивы $added , $altered и $deleted накапливают изменения от $baseline и используются для обновления $baseline для следующего сканирования.

файлы

Файл superscan.zip содержит 7 файлов:

  • CreateTables.sql , который можно использовать для настройки ваших таблиц
  • ReadMe.txt , который предоставляет обзор скрипта SuperScan
  • scanner.php , скрипт сканирования, который требует configure.php и scandb.php (который подключается к вашему серверу MySQL и возвращает дескриптор $scandb )
  • reporter.php , который предоставит сводку последних сканирований через CRON
  • CRON.txt , который предоставляет примеры инструкций CRON для scanner.php и reporter.php

уборка

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

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

Резюме

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

Загрузите код SuperScan с GitHub

Подтверждение

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

Хан был достаточно любезен, чтобы предоставить копию своего старта по этому проекту, и между нами это переросло в SuperScan. Без мягкого подталкивания и помощи Хэна SuperScan никогда бы не взлетел и не стал бы исключительным инструментом, которым он является сегодня.

Я хотел бы знать, как вы найдете этот сценарий, или если у вас есть какие-либо вопросы об этом или отзывы.