We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Создание автоматизированного сканера уязвимостей для пакетов apt в Termux

Termux — мощная терминальная среда для Android, предоставляющая доступ к репозиториям пакетов через apt. Регулярный аудит установленных пакетов на наличие известных уязвимостей (CVE) — критически важная практика безопасности. В этой статье мы создадим автоматизированный сканер, который проверяет установленные пакеты против актуальных баз данных уязвимостей.

Подготовка окружения

Установим необходимые зависимости: curl для запросов к API, jq для парсинга JSON и apt утилиты для работы с пакетами.

pkg update && pkg upgrade -y
pkg install curl jq -y

Архитектура сканера

Сканер будет выполнять следующие шаги:

  1. Получить список установленных пакетов с версиями через apt list --installed.
  2. Для каждого пакета запросить данные об уязвимостях из открытой базы (например, OSV.dev или NVD).
  3. Сопоставить версии и вывести отчёт.

Используем API OSV.dev — открытую базу уязвимостей с поддержкой экосистем Linux/Debian.

Реализация скрипта

Создадим файл vuln_scanner.sh:

cat > vuln_scanner.sh << 'EOF'
#!/bin/bash
# Автоматизированный сканер уязвимостей для пакетов apt в Termux
# Автор: Усачёв Денис Евгеньевич, РыбинскЛАБ

set -euo pipefail

OSV_API="https://api.osv.dev/v1/query"
REPORT_FILE="vuln_report_$(date +%F_%H-%M-%S).txt"

log() {
    echo "[$(date +'%H:%M:%S')] $" | tee -a "$REPORT_FILE"
}

error() {
    log "ОШИБКА: $" >&2
}

log "=== Запуск сканирования уязвимостей ==="
log "Сбор списка установленных пакетов..."

# Получаем список пакетов: имя версия
mapfile -t packages < <(apt list --installed 2>/dev/null | tail -n +2 | awk -F'[/ ]+' '{print $1 " " $2}')

if [[ ${#packages[@]} -eq 0 ]]; then
    error "Не найдено установленных пакетов."
    exit 1
fi

log "Найдено пакетов: ${#packages[@]}"
log ""

vuln_found=0

for pkg_line in "${packages[@]}"; do
    pkg_name=$(echo "$pkg_line" | awk '{print $1}')
    pkg_version=$(echo "$pkg_line" | awk '{print $2}')
    
    # Формируем запрос к OSV API
    query=$(jq -n --arg name "$pkg_name" --arg version "$pkg_version" \
        '{package: {name: $name, ecosystem: "Debian"}, version: $version}')
    
    response=$(curl -s -X POST -H "Content-Type: application/json" \
        -d "$query" "$OSV_API" 2>/dev/null || echo "{}")
    
    # Проверяем наличие уязвимостей
    vulns=$(echo "$response" | jq -r '.vulns // [] | length')
    
    if [[ "$vulns" -gt 0 ]]; then
        vuln_found=1
        log "⚠ УЯЗВИМОСТЬ: $pkg_name $pkg_version"
        echo "$response" | jq -r '.vulns[] | "  - \(.id): \(.summary // "Нет описания") [\(.severity[0].score // "N/A\)]"' | tee -a "$REPORT_FILE"
        log ""
    else
        log "✓ OK: $pkg_name $pkg_version"
    fi
    
    # Небольшая задержка чтобы не перегружать API
    sleep 0.1

done

log "=== Сканирование завершено ==="
if [[ $vuln_found -eq 1 ]]; then
    log "НАЙДЕНЫ УЯЗВИМОСТИ. Подробности в $REPORT_FILE"
    exit 1
else
    log "Уязвимостей не обнаружено."
    exit 0
fi
EOF

Сделаем скрипт исполняемым и запустим:

chmod +x vuln_scanner.sh
./vuln_scanner.sh

Автоматизация через cron

Для регулярной проверки добавим задачу в crontab (требуется termux-services и запущенный crond):

pkg install termux-services -y
sv-enable crond
crontab -e

Добавьте строку для ежедневной проверки в 03:00:

0 3   * /data/data/com.termux/files/home/vuln_scanner.sh >> /data/data/com.termux/files/home/cron_vuln.log 2>&1

Расширение функционала

  • Интеграция с Telegram: отправка отчёта через бота (используйте curl к Bot API).
  • Фильтрация по критичности: игнорировать LOW/MEDIUM, алертить только HIGH/CRITICAL.
  • Кэширование: сохранять ответы API локально для офлайн-анализа.
  • Проверка зависимостей: рекурсивный анализ зависимостей пакетов через apt-cache depends.

Ограничения и правовые аспекты

Сканер предназначен исключительно для аудита собственных систем и образовательных целей. Использование подобных инструментов для сканирования чужой инфраструктуры без письменного согласия владельца запрещено ст. 272 УК РФ («Неправомерный доступ к компьютерной информации»). Все действия должны проводиться в рамках закона РФ.

Заключение

Созданный сканер позволяет автоматизировать мониторинг безопасности пакетов в Termux, своевременно выявляя уязвимые версии. Регулярное обновление пакетов (pkg upgrade) и запуск сканера — база гигиены кибербезопасности на мобильном устройстве.

РыбинскЛАБ оказывает услуги по аудиту безопасности, разработке автоматизированных инструментов защиты и консультированию по защите информации. Обращайтесь за профессиональной поддержкой.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект