Termux — мощная терминальная среда для Android, предоставляющая доступ к репозиториям пакетов через apt. Регулярный аудит установленных пакетов на наличие известных уязвимостей (CVE) — критически важная практика безопасности. В этой статье мы создадим автоматизированный сканер, который проверяет установленные пакеты против актуальных баз данных уязвимостей.
Подготовка окружения
Установим необходимые зависимости: curl для запросов к API, jq для парсинга JSON и apt утилиты для работы с пакетами.
pkg update && pkg upgrade -y
pkg install curl jq -y
Архитектура сканера
Сканер будет выполнять следующие шаги:
- Получить список установленных пакетов с версиями через
apt list --installed. - Для каждого пакета запросить данные об уязвимостях из открытой базы (например, OSV.dev или NVD).
- Сопоставить версии и вывести отчёт.
Используем 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) и запуск сканера — база гигиены кибербезопасности на мобильном устройстве.
РыбинскЛАБ оказывает услуги по аудиту безопасности, разработке автоматизированных инструментов защиты и консультированию по защите информации. Обращайтесь за профессиональной поддержкой.