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

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

Проектирование микросервисной архитектуры для сканирования уязвимостей Android‑приложений в Termux

Подробный гид по построению микросервисной системы для автоматизированного сканирования уязвимостей Android‑приложений, полностью управляемой из Termux на Android‑устройствах.

Android‑платформа остаётся одной из самых популярных целевых сред для злоумышленников. Быстрая проверка приложений на уязвимости в мобильных условиях требует гибкой и масштабируемой инфраструктуры. В статье мы рассмотрим, как спроектировать микросервисную архитектуру, позволяющую выполнять сканирование из Termux – терминального эмулятора для Android, и управлять процессом через лёгкие контейнерные сервисы.

Почему Termux?

Termux предоставляет полноценный Linux‑окружение без root‑прав, включая apt, python, git, docker (через proot-distro) и другие инструменты. Это делает его идеальной площадкой для развёртывания небольших кластеров микросервисов непосредственно на смартфоне.

Общая архитектура

Схема состоит из пяти ключевых компонентов:

  • API‑gateway – точка входа, реализованная на FastAPI, принимает запросы на сканирование и распределяет их.
  • Task‑queue – очередь сообщений (RabbitMQ) для асинхронного планирования задач.
  • Scanner‑service – микросервис, который запускает инструменты MobSF, AndroBugs и QARK внутри контейнеров.
  • Result‑store – база данных (PostgreSQL) для хранения отчётов и метаданных.
  • Auth‑service – сервис аутентификации на Keycloak (опционально).

Все сервисы упакованы в Docker‑контейнеры и оркестрируются с помощью docker‑compose. При этом терминальный клиент Termux управляет жизненным циклом кластера и предоставляет CLI‑интерфейс для разработчиков.

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

1. Обновляем репозитории и устанавливаем необходимые пакеты:

pkg update && pkg upgrade -y
pkg install git python curl proot-distro -y

2. Устанавливаем Docker через termux‑docker (или используем proot‑distro install docker):

proot-distro install docker
proot-distro login docker

3. Инициализируем Docker‑демон:

dockerd &

После запуска демона можно проверять статус командой docker info.

Docker‑файлы микросервисов

Dockerfile для scanner‑service (используем образ python:3.11-slim и устанавливаем MobSF):

FROM python:3.11-slim

# Устанавливаем системные зависимости
RUN apt-get update && apt-get install -y \
    git openjdk-11-jdk wget unzip && \
    rm -rf /var/lib/apt/lists/*

# Клонируем MobSF
RUN git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git /opt/mobsf
WORKDIR /opt/mobsf
RUN ./setup.sh

# Устанавливаем зависимости Python
RUN pip install fastapi uvicorn pika psycopg2-binary

# Копируем исходный код сканера
COPY scanner.py /app/scanner.py
WORKDIR /app

EXPOSE 8001
CMD ["uvicorn", "scanner:app", "--host", "0.0.0.0", "--port", "8001"]

Аналогичные Dockerfile создаются для api‑gateway, auth‑service и result‑store.

docker‑compose.yml

Файл описывает взаимосвязи сервисов и монтирует тома для постоянного хранения данных:

version: "3.8"
services:
  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      RABBITMQ_DEFAULT_USER: user
      RABBITMQ_DEFAULT_PASS: password

  postgres:
    image: postgres:15
    environment:
      POSTGRES_USER: scanner
      POSTGRES_PASSWORD: scannerpwd
      POSTGRES_DB: scans
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  api-gateway:
    build: ./gateway
    ports:
      - "8000:8000"
    depends_on:
      - rabbitmq
      - postgres

  scanner-service:
    build: ./scanner
    depends_on:
      - rabbitmq
      - postgres
    environment:
      - RABBITMQ_HOST=rabbitmq
      - POSTGRES_HOST=postgres

volumes:
  pgdata:

Запуск происходит одной командой:

docker-compose up -d

Пример кода микросервиса‑сканера

Ниже – минимальный FastAPI сервис, принимающий URL‑или APK‑файл и ставящий задачу в очередь.

from fastapi import FastAPI, UploadFile, File
import pika, json, uuid

app = FastAPI()

connection = pika.BlockingConnection(pika.ConnectionParameters(host='rabbitmq'))
channel = connection.channel()
channel.queue_declare(queue='scan_tasks')

@app.post("/scan")
async def submit_scan(file: UploadFile = File(...)):
    task_id = str(uuid.uuid4())
    content = await file.read()
    # Сохраняем файл во временный каталог (можно использовать /tmp в контейнере)
    with open(f"/tmp/{task_id}.apk", "wb") as f:
        f.write(content)
    message = json.dumps({"task_id": task_id, "file_path": f"/tmp/{task_id}.apk"})
    channel.basic_publish(exchange='', routing_key='scan_tasks', body=message)
    return {"task_id": task_id, "status": "queued"}

Рабочий процесс сканера (worker) читает сообщения из очереди, запускает MobSF и сохраняет результаты в PostgreSQL.

Управление из Termux

Для удобного взаимодействия создаём небольшой CLI‑скрипт termux-scan:

#!/data/data/com.termux/files/usr/bin/bash

API_URL="http://127.0.0.1:8000"

if [[ -z "$1" ]]; then
  echo "Usage: termux-scan "
  exit 1
fi

RESPONSE=$(curl -s -F "file=@$1" "$API_URL/scan")
echo "Task submitted: $RESPONSE"

Скрипт сохраняем в ~/bin/termux-scan, делаем исполняемым chmod +x ~/bin/termux-scan и вызываем из любой директории.

Безопасность и изоляция

  • Каждый микросервис работает в отдельном контейнере с ограниченными правами (--cap-drop ALL, --read-only).
  • Для передачи артефактов используем только tmpfs‑тома, чтобы APK‑файлы не сохранялись на постоянной памяти.
  • Аутентификация через Keycloak (OAuth2) защищает API‑gateway.
  • SSL‑терминация может быть реализована через Traefik в отдельном сервисе.

Мониторинг и логирование

Для наблюдения за состоянием кластера удобно подключить Prometheus + Grafana. Метрики сервисов экспонируются через /metrics endpoint FastAPI.

Тестирование и CI/CD

В Termux можно запускать unit‑тесты с pytest и интеграционные сценарии через GitHub Actions (используя self‑hosted runner на Android). Это позволяет автоматически проверять новые версии сканеров.

Заключение

Создание микросервисной архитектуры для сканирования уязвимостей Android‑приложений полностью в Termux открывает новые возможности для мобильных исследований и быстрых прототипов. Благодаря контейнеризации, очередям сообщений и лёгкому API‑gateway система масштабируется от одного‑единственного устройства до небольшого кластера из нескольких Android‑смартфонов.

RybinskLab предлагает профессиональные услуги по проектированию, внедрению и поддержке подобных решений: от аудита безопасности до разработки кастомных микросервисов под ваши требования. Свяжитесь с нами, чтобы ускорить процесс обеспечения безопасности ваших Android‑приложений.

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

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

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

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