18 000 открытых инстансов и вредоносные навыки: почему ваш OpenClaw уже взломан
Вы скачали OpenClaw с GitHub, запустили в облаке и радуетесь своему умному ассистенту. А в это время кто-то уже читает ваши логи, перехватывает API-ключи и использует ваш инстанс для атак на другие системы. Звучит как паранойя? Это статистика.
На февраль 2026 года в открытом доступе висят более 18 000 инстансов OpenClaw с дефолтными настройками. Большинство из них - это песочницы для тестирования, которые превратились в бэкдоры для злоумышленников. Вредоносные навыки (skills) в официальном маркетплейсе Moltbook - не теория заговора, а реальная угроза, о которой мы уже писали.
Если вы запускаете OpenClaw без изоляции окружения и мониторинга prompt injection - считайте, что ваши данные уже в публичном доступе. Среднее время до первой утечки: 47 минут после запуска.
Три слоя защиты: из чего состоит безопасный OpenClaw
Безопасность AI-агентов - это не один файл конфигурации. Это многослойная система, где каждый слой защищает от конкретного вектора атаки. Упрощать нельзя - злоумышленники используют все уязвимости сразу.
| Уровень защиты | От чего защищает | Инструменты |
|---|---|---|
| Изоляция окружения | Утечки через уязвимости зависимостей, escape из контейнера | Docker с AppArmor, gVisor, изолированные сети |
| SCA-сканирование | Вредоносные пакеты в requirements.txt, backdoor в моделях | Trivy, Grype, Dependency-Track |
| Мониторинг prompt injection | Кража данных через промпты, выполнение вредоносного кода | NeMo Guardrails, Rebuff, кастомные валидаторы |
Проблема в том, что большинство туториалов показывают только первый уровень - "запустили Docker и радуемся". А про SCA-сканирование и мониторинг prompt injection забывают. Результат - утечки, которые мы разбирали в предыдущей статье.
1 Подготовка: собираем безопасный образ с нуля
Не берите готовые образы с Docker Hub. Серьезно. В лучшем случае там устаревшие версии с известными уязвимостями. В худшем - преднамеренно добавленные backdoor. Собираем все сами.
Сначала - базовый образ. Не alpine (мало кто умеет его правильно харденить), а distroless или slim версии с минимальным набором пакетов:
FROM python:3.12-slim-bookworm
# Отключаем кэш pip и устанавливаем только необходимые пакеты
RUN pip install --no-cache-dir \
openclaw==2.7.3 \
transformers==4.45.0 \
torch==2.4.0 \
--index-url https://pypi.org/simple/
# Создаем непривилегированного пользователя
RUN useradd -m -u 1000 -s /bin/bash openclaw-user
USER openclaw-user
WORKDIR /app
OpenClaw 2.7.3 - последняя стабильная версия на февраль 2026. В ней исправлены критические уязвимости в системе навыков, которые позволяли выполнять произвольный код через специально сформированные промпты.
2 SCA-сканирование: ищем бомбы в зависимостях
requirements.txt - это минное поле. Каждый пакет может содержать уязвимости или быть откровенно вредоносным. Особенно в экосистеме AI, где каждый день появляются сотни новых библиотек.
Установите Trivy и запустите сканирование ДО того, как образ попадет в продакшен:
# Сканируем Dockerfile на наличие уязвимостей
trivy config --severity HIGH,CRITICAL Dockerfile
# Сканируем зависимости Python
trivy fs --severity HIGH,CRITICAL --scanners vuln,secret .
# Проверяем образ после сборки
docker build -t openclaw-secure .
trivy image --severity HIGH,CRITICAL openclaw-secure
Что ищем:
- Критические уязвимости в torch, transformers, huggingface-hub
- Секреты (API-ключи), случайно закоммиченные в репозиторий
- Устаревшие версии OpenClaw с известными эксплойтами
Если Trivy находит уязвимости уровня CRITICAL - не запускайте этот образ. Точка. Лучше потратить час на обновление зависимостей, чем недели на расследование инцидента.
3 Изоляция: Docker, который действительно изолирует
Дефолтный Docker - это не изоляция, а удобная упаковка. Для реальной безопасности нужны дополнительные меры.
docker-compose.yml с правильными настройками безопасности:
version: '3.8'
services:
openclaw:
build: .
container_name: openclaw-secure
# Без привилегий, без монтирования сокетов Docker
privileged: false
read_only: true # Файловая система только для чтения
security_opt:
- no-new-privileges:true
- seccomp:unconfined # Или custom профиль
# Изолированная сеть, только исходящие соединения
networks:
- openclaw-internal
# Ограничения ресурсов
deploy:
resources:
limits:
cpus: '4'
memory: 16G
# Только необходимые volume
volumes:
- ./config:/app/config:ro
- ./models:/app/models:ro
# Health check для мониторинга
healthcheck:
test: ["CMD", "python", "-c", "import openclaw; print('OK')"]
interval: 30s
timeout: 10s
retries: 3
networks:
openclaw-internal:
driver: bridge
internal: true # Важно: никаких внешних соединений
Ключевые моменты:
read_only: true- контейнер не может писать на диск (кроме временных файлов)no-new-privileges:true- процессы не могут повысить привилегииinternal: trueв сети - контейнер не видит интернет, только другие сервисы в этой сети
4 Мониторинг prompt injection: ловим атаки в реальном времени
Prompt injection - главная угроза для OpenClaw. Злоумышленник может через промпт заставить агента выполнить произвольный код, прочитать файлы или отправить данные наружу.
Добавляем middleware для валидации промптов:
from openclaw.middleware import BaseMiddleware
import re
from typing import Dict, Any
class SecurityMiddleware(BaseMiddleware):
"""Middleware для обнаружения prompt injection"""
# Паттерны для обнаружения атак
SUSPICIOUS_PATTERNS = [
r'(?i)(execute|run|system|subprocess|eval|exec)',
r'(?i)(file:|http:|https:|ftp:)',
r'(?i)(password|token|key|secret|credential)',
r'(?i)(curl|wget|nc|netcat|telnet)',
r'.*\n.*', # Многострочные блоки кода
]
def process_prompt(self, prompt: str, context: Dict[str, Any]) -> str:
"""Валидируем промпт перед отправкой в модель"""
# Проверяем на подозрительные паттерны
for pattern in self.SUSPICIOUS_PATTERNS:
if re.search(pattern, prompt):
self.log_security_event({
'type': 'prompt_injection_attempt',
'pattern': pattern,
'prompt_snippet': prompt[:100],
'timestamp': context.get('timestamp')
})
# Возвращаем безопасный промпт или вызываем исключение
return "I cannot process this request for security reasons."
# Ограничиваем длину промпта
if len(prompt) > 10000:
self.log_security_event({
'type': 'prompt_too_long',
'length': len(prompt),
'timestamp': context.get('timestamp')
})
return prompt[:10000]
return prompt
def log_security_event(self, event: Dict):
"""Логируем события безопасности"""
# Отправляем в SIEM, Slack, Telegram
print(f"[SECURITY] {event}")
Подключаем middleware в конфигурации OpenClaw:
# config/openclaw.yaml
middleware:
- module: security_middleware.SecurityMiddleware
enabled: true
config:
log_level: WARNING
alert_slack_webhook: ${SLACK_WEBHOOK}
# Ограничиваем доступные навыки
skills:
enabled:
- web_search
- calculator
- file_reader
disabled:
- system_exec # Опасный навык!
- database_query
# Настройки модели
model:
name: "Qwen2.5-32B-Instruct" # Более безопасная, чем некоторые другие
context_window: 32768
temperature: 0.7
5 Развертывание в облаке: AWS, GCP или Azure с правильными настройками
Выбор облака - не вопрос предпочтений, а вопрос архитектуры безопасности. У каждого провайдера свои фишки и подводные камни.
Для AWS с ECS Fargate (рекомендуем для production):
# Task definition с security hardening
export TASK_DEFINITION=$(cat <
Что важно:
readonlyRootFilesystem": true- аналог read_only в DockerinitProcessEnabled": true- правильная обработка сигналов, защита от зомби-процессов- Отдельная IAM роль с минимальными привилегиями (только чтение из S3 для моделей)
Для экономии на инференсе используйте специализированные инстансы с GPU или даже собственный кластер на AMD Strix Halo.
Что ломается чаще всего: 5 ошибок, которые совершают все
- Хранение моделей в публичном S3 бакете - скачивайте модели через VPN или private endpoint. Или используйте локальное хранение больших моделей.
- Открытый порт 8000 без WAF - всегда ставьте CloudFlare или AWS WAF перед OpenClaw. Rate limiting обязателен.
- Использование дефолтного API-ключа - генерируйте уникальные ключи для каждого пользователя, ротируйте их раз в месяц.
- Отсутствие аудита логов - все промпты и ответы должны логироваться (с маскировкой sensitive data). Используйте OpenSearch или Datadog.
- Обновление "на лету" - никогда не обновляйте OpenClaw в работающем инстансе. Собирайте новый образ, тестируйте в staging, только потом деплойте.
Мониторинг: как понять, что на вас уже напали
Безопасность - это не разовая настройка, а постоянный мониторинг. Настройте алерты на эти события:
# cloudwatch-alarms.yaml
Alarms:
- AlarmName: OpenClaw-High-Prompt-Rejection
MetricName: PromptRejected
Namespace: AWS/ECS
Statistic: Sum
Period: 300
EvaluationPeriods: 1
Threshold: 10
ComparisonOperator: GreaterThanThreshold
AlarmActions:
- arn:aws:sns:us-east-1:123456789012:SecurityAlerts
- AlarmName: OpenClaw-Container-Escape-Attempt
MetricName: SecurityViolation
Namespace: AWS/ECS
Statistic: Sum
Period: 60
EvaluationPeriods: 1
Threshold: 1
ComparisonOperator: GreaterThanThreshold
AlarmActions:
- arn:aws:sns:us-east-1:123456789012:CriticalSecurityAlerts
Что отслеживать в реальном времени:
- Количество отклоненных промптов (резкий рост = атака)
- Использование CPU/GPU (аномалии могут указывать на cryptomining)
- Исходящий трафик (большие объемы = возможная утечка данных)
- Попытки доступа к файловой системе контейнера
А если нужна максимальная производительность?
Безопасность иногда конфликтует с производительностью. Но есть компромиссы. Например, гибридный кластер позволяет изолировать критические компоненты на отдельных нодах.
Или используйте архитектурные оптимизации, которые снижают нагрузку без ущерба безопасности.
Самая большая ошибка - отключать безопасность ради скорости. Взломанный fast OpenClaw хуже, чем медленный, но защищенный. Особенно если через него утекли данные клиентов или API-ключи к вашей инфраструктуре.
Чеклист перед запуском в продакшен
Перед тем как нажать "deploy", пройдитесь по этому списку:
#!/bin/bash
# pre-production-checklist.sh
# 1. SCA сканирование прошло без critical уязвимостей
trivy image --severity CRITICAL your-registry/openclaw:latest
# 2. Образ подписан (content trust)
docker trust inspect your-registry/openclaw:latest
# 3. Secrets не в коде
if grep -r "API_KEY\|PASSWORD\|SECRET" . --exclude-dir=.git; then
echo "ERROR: Secrets found in code!"
exit 1
fi
# 4. Контейнер запускается без привилегий
docker run --rm --read-only your-registry/openclaw:latest \
python -c "import openclaw; print('OK')"
# 5. Все внешние зависимости через private registry
if grep -r "pypi.org\|huggingface.co" requirements.txt; then
echo "WARNING: Direct external dependencies"
fi
# 6. Модели загружены из доверенных источников
sha256sum models/*.bin | grep -v "expected_hash" && echo "ERROR: Model hash mismatch"
Если все проверки пройдены - можно запускать. Но мониторинг не выключайте. Никогда.
Потому что безопасность OpenClaw - это не фича, которую можно добавить и забыть. Это постоянная война с теми, кто хочет использовать ваш AI-агент в своих целях. И в этой войне лучше перебдеть.