Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/elastic/supply-chain-monitor
Анализ уязвимостейАнализ КодаАнализ вредоносных программРазведка угрозБезопасность Цепочки ПоставокРеагирование на Инциденты
GitHubelastic/supply-chain-monitor

supply-chain-monitor

Автоматизированный монитор безопасности цепочки поставок, который опрашивает реестры PyPI и npm, сравнивает новые релизы с предыдущими и использует анализ LLM для обнаружения вредоносных изменений кода с уведомлениями в Slack.

Репозиторий
52961576 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Мониторинг цепочек поставок

Лицензия: MIT

Автоматизированный мониторинг популярных пакетов PyPI и npm на предмет компрометации цепочки поставок. Опрашивает оба реестра на наличие новых релизов, сравнивает каждый новый релиз с предыдущим и использует LLM (через Cursor Agent CLI) для классификации изменений как безвредные или вредоносные. Вредоносные находки вызывают оповещение в Slack.

По умолчанию мониторинг ведется для обеих экосистем. Используйте --no-pypi или --no-npm, чтобы отключить одну из них.

Как это работает

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

         ┌─── PyPI ──────────────────────┐   ┌─── npm ───────────────────────┐
         │                               │   │                               │
         │ changelog_since_serial()      │   │ CouchDB _changes feed         │
         │       │                       │   │       │                       │
         │       ▼                       │   │       ▼                       │
         │  ┌────────────┐               │   │  ┌────────────┐               │
         │  │ Все PyPI   │─┐             │   │  │ Все npm    │─┐             │
         │  │ события    │ │             │   │  │ изменения  │ │             │
         │  └────────────┘ ▼             │   │  └────────────┘ ▼             │
         │ hugovk ──► Список наблюдения  │   │ download-counts ─► Список наблюдения│
         │       │                       │   │       │                       │
         │ только события "new release"   │   │ новые версии с последней эпохи│
         └───────────────┬───────────────┘   └───────────────┬───────────────┘
                         │                                   │
                         ▼                                   ▼
               ┌───────────────────┐               ┌───────────────────┐
               │ Загрузить старую +│               │ Загрузить старый +│
               │ новую (sdist +    │               │ новый (tarball)   │
               │ wheel)           │               │                   │
               └───────────────────┘               └───────────────────┘
                         │                                   │
                         └─────────────────┬─────────────────┘
                                           ▼
                                   ┌───────────────┐
                                   │ Unified diff  │
                                   │ report (.md)  │
                                   └───────┬───────┘
                                           ▼
                                   ┌───────────────┐  ◄── Анализ LLM
                                   │ Cursor Agent  │      (только чтение)
                                   │ CLI (ask mode)│
                                   └───────┬───────┘
                                           │
                                       вердикт?
                                           │
                                 вредоносный │
                                           ▼
                                   ┌───────────────┐
                                   │ Оповещение в  │
                                   │ Slack         │
                                   └───────────────┘

Цели обнаружения

Анализ LLM нацелен на поиск:

  • Обфусцированного кода (base64, exec, eval, XOR, закодированные строки)
  • Сетевых вызовов на неожиданные хосты
  • Записи в файловую систему в места автозагрузки/постоянства
  • Запуска процессов и shell-команд
  • Стеганографии или скрытия данных в медиафайлах
  • Кражи учетных данных и токенов
  • Признаков typosquatting'а

Предварительные требования

  • Python 3.9+ — установите зависимости времени выполнения с помощью pip install -r requirements.txt (стандартная библиотека покрывает большую часть инструмента; requests используется для загрузки в Slack)
  • Cursor Agent CLI — отдельный бинарный файл agent, а не IDE

Установка Cursor Agent CLI

Windows (PowerShell):

irm 'https://cursor.com/install?win32=true' | iex

macOS / Linux:

curl https://cursor.com/install -fsS | bash

Проверьте с помощью:

agent --version

Вы должны быть аутентифицированы в Cursor (agent login или установите CURSOR_API_KEY).

Настройка Slack

Поместите ваш токен бота Slack в etc/slack.json:

{
    "url": "https://hooks.slack.com/services/...",
    "bot_token": "xoxb-...",
    "channel": "C01XXXXXXXX"
}

Боту требуется область chat:write для целевого канала. Поле channel — это ID канала Slack, куда публикуются оповещения.

Быстрый старт

# Однократный запуск: проанализировать релизы за последние ~10 минут
python monitor.py --once

# Непрерывный мониторинг: отслеживать топ-1000 пакетов (обе экосистемы), опрос каждые 5 мин
python monitor.py --top 1000 --interval 300

# Продакшн: мониторинг топ-15000, оповещение в Slack
python monitor.py --top 15000 --interval 300 --slack

# Только npm, топ-5000
python monitor.py --no-pypi --npm-top 5000

# Только PyPI
python monitor.py --no-npm

Обзор файлов

ФайлНазначение
monitor.pyОсновной оркестратор — опрос PyPI + npm, сравнение, анализ, оповещение (параллельные потоки)
pypi_monitor.pyАвтономный опросчик журнала изменений PyPI (используется для исследования)
package_diff.pyЗагрузка и сравнение двух версий любого пакета PyPI или npm
analyze_diff.pyОтправка различий в Cursor Agent CLI, разбор вердикта
top_pypi_packages.pyПолучение и вывод списка топ-N пакетов PyPI по количеству загрузок
slack.pyКлиент API Slack (SendMessage, PostFile)
etc/slack.jsonУчетные данные бота Slack
last_serial.yamlСохраненное состояние опроса (серийный номер PyPI + последовательность/эпоха npm)
logs/Ежедневные файлы журнала (monitor_YYYYMMDD.log)

Детали использования

monitor.py — Основной оркестратор

python monitor.py [ОПЦИИ]

Опции:
  --top N          Количество отслеживаемых пакетов в каждой экосистеме (по умолчанию: 15000)
  --interval SECS  Интервал опроса в секундах (по умолчанию: 300)
  --once           Однократный проход по последним событиям, затем выход
  --slack          Включить оповещения Slack для вредоносных находок
  --model MODEL    Переопределить модель LLM (по умолчанию: composer-2-fast)
  --debug          Включить отладку (включает необработанный вывод агента)

Опции PyPI:
  --no-pypi        Отключить мониторинг PyPI
  --serial N       Серийный номер журнала изменений PyPI, с которого начинать

Опции npm:
  --no-npm         Отключить мониторинг npm
  --npm-top N      Количество отслеживаемых пакетов npm (по умолчанию: совпадает с --top)
  --npm-seq N      Последовательность репликации npm, с которой начинать

PyPI и npm работают каждый в своем потоке опроса. Состояние опроса (серийный номер PyPI, последовательность + эпоха npm) сохраняется в last_serial.yaml, чтобы монитор возобновлял работу с места остановки после перезапуска.

Конвейер PyPI:

  1. Загружает топ-N пакетов из набора данных hugovk/top-pypi-packages в качестве списка наблюдения
  2. Подключается к XML-RPC API PyPI и получает текущий серийный номер
  3. Каждые --interval секунд вызывает changelog_since_serial() — один вызов API, который возвращает все события с момента последней проверки
  4. Фильтрует события "new release", соответствующие списку наблюдения
  5. Для каждого нового релиза: загружает старую + новую версии (sdist и wheel, если оба существуют), сравнивает, анализирует через LLM и отправляет оповещение в Slack, если вредоносно
Скачать инструмент