Мобильные устройства становятся всё более мощными, и их можно превратить в полноценную лабораторию для тестирования безопасности. В этой статье мы рассмотрим, как с помощью Termux и простых curl-скриптов выполнить автоматизированное тестирование API, не прибегая к тяжёлым фреймворкам.
Что понадобится
- Устройство под управлением Android (версии 8.0 и выше).
- Установленное приложение
Termuxиз Google Play или F-Droid. - Базовые навыки работы с командной строкой и знание HTTP‑протокола.
Установка и подготовка окружения
После установки Termux откройте его и выполните базовые обновления:
pkg update && pkg upgrade -y
Установим необходимые пакеты:
pkg install curl jq git -y
Для удобного редактирования скриптов рекомендуется установить nano или vim:
pkg install nano -y
Структура проекта
Создадим отдельную директорию для тестов и разместим в ней скрипты, конфигурацию и файлы отчётов.
mkdir -p ~/api-security-tests/{scripts,reports,config}
cd ~/api-security-tests
В папке config будем хранить файл targets.txt со списком эндпоинтов:
cat > config/targets.txt <<'EOF'
https://api.example.com/v1/users
https://api.example.com/v1/orders
EOF
Базовый curl‑скрипт
Создадим скрипт scripts/check_status.sh, который проверяет доступность эндпоинтов и возвращает HTTP‑код.
cat > scripts/check_status.sh <<'EOF'
#!/usr/bin/env bash
TARGET=$1
if [[ -z "$TARGET" ]]; then
echo "Usage: $0 "
exit 1
fi
STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$TARGET")
echo "{\"url\": \"$TARGET\", \"status\": $STATUS}" | jq .
EOF
chmod +x scripts/check_status.sh
Тесты на уязвимости
Ниже представлены несколько типовых проверок, которые можно реализовать в виде отдельных curl-скриптов.
1. Проверка аутентификации
Скрипт scripts/auth_test.sh пытается получить доступ без токена и с неправильным токеном.
cat > scripts/auth_test.sh <<'EOF'
#!/usr/bin/env bash
URL=$1
INVALID_TOKEN="invalid-token"
# Без токена
RESPONSE1=$(curl -s -o /dev/null -w "%{http_code}" "$URL")
# С неверным токеном
RESPONSE2=$(curl -s -H "Authorization: Bearer $INVALID_TOKEN" -o /dev/null -w "%{http_code}" "$URL")
echo "{\"url\": \"$URL\", \"no_auth\": $RESPONSE1, \"invalid_auth\": $RESPONSE2}" | jq .
EOF
chmod +x scripts/auth_test.sh
2. Инъекция SQL в параметры
Скрипт scripts/sql_injection.sh отправляет типичную payload‑строку и проверяет реакцию сервера.
cat > scripts/sql_injection.sh <<'EOF'
#!/usr/bin/env bash
URL=$1
PAYLOAD="' OR '1'='1"
RESPONSE=$(curl -s -G -d "search=$PAYLOAD" "$URL" -w "%{http_code}" -o /dev/null)
echo "{\"url\": \"$URL\", \"payload\": \"$PAYLOAD\", \"status\": $RESPONSE}" | jq .
EOF
chmod +x scripts/sql_injection.sh
3. Тест на ограничение скорости (rate limiting)
Скрипт scripts/rate_limit.sh посылает несколько запросов подряд и фиксирует коды ответов.
cat > scripts/rate_limit.sh <<'EOF'
#!/usr/bin/env bash
URL=$1
COUNT=10
RESULTS=()
for i in $(seq 1 $COUNT); do
CODE=$(curl -s -o /dev/null -w "%{http_code}" "$URL")
RESULTS+=("$CODE")
sleep 0.2
done
echo "{\"url\": \"$URL\", \"responses\": $(printf '%s,' "${RESULTS[@]}")}" | jq .
EOF
chmod +x scripts/rate_limit.sh
Автоматизация запуска тестов
Для периодического выполнения тестов в Termux удобно использовать termux-job-scheduler или crontab. Ниже пример настройки cron‑задачи, которая каждый день в 02:00 запускает набор скриптов.
# Установим cron, если он ещё не установлен
pkg install cronie -y
# Добавим задачу в crontab
crontab -e <<'EOF'
0 2 * /data/data/com.termux/files/home/api-security-tests/run_all.sh >> /data/data/com.termux/files/home/api-security-tests/reports/$(date +\%F).log 2>&1
EOF
# Создадим wrapper‑скрипт run_all.sh
cat > run_all.sh <<'EOF'
#!/usr/bin/env bash
while read -r ENDPOINT; do
./scripts/check_status.sh "$ENDPOINT"
./scripts/auth_test.sh "$ENDPOINT"
./scripts/sql_injection.sh "$ENDPOINT"
./scripts/rate_limit.sh "$ENDPOINT"
done < config/targets.txt
EOF
chmod +x run_all.sh
После сохранения crontab запустим сервис:
sv-enable crond
sv up crond
Сбор и визуализация результатов
Все выводы скриптов формируются в формате JSON, что упрощает их последующую агрегацию. Например, собрать все результаты за день в один файл и преобразовать в CSV:
cat reports/$(date +%F).log | jq -s '.' > reports/$(date +%F).json
jq -r '.[] | [.url, .status // ., .no_auth // ., .invalid_auth // ., .payload // ., .responses // .] | @csv' reports/$(date +%F).json > reports/$(date +%F).csv
Полученный CSV‑файл можно открыть в любой таблице (Google Sheets, Excel) для дальнейшего анализа.
Лучшие практики
- Изоляция окружения. Используйте отдельный пользовательский токен с ограниченными правами.
- Логирование. Храните как сырые ответы, так и агрегированные метрики.
- Обновление скриптов. Регулярно актуализируйте payload‑библиотеки и добавляйте новые типы проверок.
- Безопасность самого Termux. Защитите доступ к устройству паролем и используйте шифрование файлов (например,
gpg).
Заключение
Termux в сочетании с curl предоставляет лёгкую и гибкую платформу для автоматизированного тестирования безопасности API прямо на мобильном устройстве. Благодаря простоте скриптов, возможности планирования задач и удобному формату вывода JSON, вы можете быстро интегрировать такие проверки в CI/CD‑цепочки или использовать их для периодических аудитов.
Если вам требуется более глубокий аудит, разработка кастомных тест‑сьютов или профессиональная поддержка в области кибербезопасности, обращайтесь в RybinskLab. Мы предоставляем услуги по проведению комплексных тестов безопасности, разработке автоматизированных решений и обучению персонала. Наши эксперты помогут выстроить надёжную защиту ваших API и инфраструктуры.