Публикации HashWatch от NEMTYREV AI для Linux

Всероссийский сборник статей и публикаций института развития образования, повышения квалификации и переподготовки.


Скачать публикацию
Язык издания: русский
Периодичность: ежедневно
Вид издания: сборник
Версия издания: электронное сетевое
Публикация: HashWatch от NEMTYREV AI для Linux
Автор: Немтырев Алексей Валерьевич

IntegrityMonitor или HashWatchЧто это такое?Этот код на Python представляет собой простой мониторинговый инструмент, который следит за изменениями в файлах в указанных каталогах. Он вычисляет хэш-сумму каждого файла и сравнивает ее с сохраненной хэш-суммой в базе данных. Если хэши не совпадают, программа обнаруживает аномалию и отправляет уведомление в Telegram.## Как это работает?1. **Конфигурация:** - Указываются каталоги, которые нужно отслеживать (`MONITORED_DIRS`). - Задается токен бота и идентификатор чата для отправки уведомлений в Telegram (`TELEGRAM_BOT_TOKEN` и `TELEGRAM_CHAT_ID`). - Создается файл базы данных для хранения хэшей файлов (`DB_FILE`).2. **Вычисление хэшей:** - Для каждого файла вычисляется хэш-сумма с использованием алгоритма SHA-256.3. **Обнаружение аномалий:** - Программа проходит по всем файлам в отслеживаемых каталогах. - Сравнивает текущий хэш с сохраненным в базе данных. - Если хэши не совпадают, добавляет аномалию в список.4. **Уведомления в Telegram:** - Если обнаружены аномалии, программа формирует сообщение и отправляет его в Telegram.## Зачем это нужно?Этот инструмент полезен для мониторинга целостности файлов на серверах, обнаружения внезапных изменений и быстрой реакции на потенциальные угрозы.‘’’import osimport hashlibimport loggingimport requestsimport sqlite3# КонфигурацияMONITORED_DIRS = ['/etc', '/usr/bin', '/var/www']TELEGRAM_BOT_TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'TELEGRAM_CHAT_ID = 'YOUR_TELEGRAM_CHAT_ID'DB_FILE = 'changes.db'# Настройка журналированияlogging.basicConfig(filename='anomaly_detector.log', level=logging.INFO)def calculate_hash(file_path):"""Вычисляет хэш-сумму файла"""with open(file_path, 'rb') as f: def detect_anomalies():"""Обнаруживает аномалии в отслеживаемых каталогах"""anomalies = []changes = []for directory in MONITORED_DIRS: if anomalies: log_changes(changes)def get_stored_hash(file_path):"""Получает сохраненную хэш-сумму файла из базы данных"""conn = sqlite3.connect(DB_FILE)c = conn.cursor()c.execute("SELECT new_hash FROM changes WHERE file = ?", (file_path,))result = c.fetchone()conn.close()return result[0] if result else Nonedef store_hash(file_path, hash_value):"""Сохраняет хэш-сумму файла в базу данных"""conn = sqlite3.connect(DB_FILE)c = conn.cursor()c.execute("""CREATE TABLE IF NOT EXISTS changes c.execute("INSERT INTO changes VALUES (?, ?, ?, ?)", ( ))conn.commit()conn.close()def send_notification(anomalies):"""Отправляет уведомление о найденных аномалиях в Telegram чат"""message = "\n".join([ ])url = f"{TELEGRAM_BOT_TOKEN}/sendMessage"data = { }requests.post(url, data=data)def log_changes(changes):"""Записывает изменения в базу данных"""conn = sqlite3.connect(DB_FILE)c = conn.cursor()c.execute('''CREATE TABLE IF NOT EXISTS changes for change in changes: conn.commit()conn.close()def main():"""Точка входа программы"""detect_anomalies()if __name__ == "__main__":main()‘’’ Разберем этот код по шагам:
  • Конфигурация:
  • MONITORED_DIRS: Список каталогов, которые нужно отслеживать.
  • TELEGRAM_BOT_TOKEN и TELEGRAM_CHAT_ID: Токен бота и идентификатор чата для отправки уведомлений в Telegram.
  • DB_FILE: Имя файла базы данных для хранения хэшей файлов.
  • Функция calculate_hash(file_path):
  • Вычисляет хэш-сумму файла, используя алгоритм SHA-256.
  • Функция detect_anomalies():
  • Проходит по каждому файлу в отслеживаемых каталогах.
  • Сравнивает хэш текущего файла с сохраненным хэшем в базе данных.
  • Если хэши не совпадают, добавляет аномалию в список и обновляет хэш в базе данных.
  • Функции get_stored_hash(file_path) и store_hash(file_path, hash_value):
  • Получают и сохраняют хэш-сумму файла в базе данных.
  • Функция send_notification(anomalies):
  • Формирует сообщение о найденных аномалиях.
  • Отправляет уведомление в Telegram.
  • Функция log_changes(changes):
  • Записывает изменения в базу данных.
  • Точка входа main():
  • Запускает обнаружение аномалий.
  • Этот код предназначен для мониторинга файлов в указанных каталогах, обнаружения изменений и отправки уведомлений в Telegram.