Contents
1. 現在顕在化している主な脅威
| 脅威 | 具体的な攻撃例 | 被害が起きやすい環境 |
|---|---|---|
| 権限昇格 | sudo の設定ミスや不適切な CAP_SYS* 権限を突いて root に昇格し、設定ファイルを書き換える |
VPS・小規模クラウドサーバ |
| 外部 API 悪用(Webhook 漏洩) | Slack や Discord の Webhook URL が漏れると、攻撃者が任意のメッセージやコードを送信できる | GitHub Actions から自動デプロイする環境 |
| 不正ファイルアップロード | アップロード機能で .php や .sh を配置し、サーバ側で実行させる(RCE) |
ファイル受け渡しを公開している Web UI |
ポイント:2026 年版 GMO レポートの上位 3 カテゴリに「Web フック経由の権限取得」「外部 API キー漏洩」「不正ファイルアップロード」が掲載され、前年比で +18 % の増加が報告されています(出典はレポート p.12‑13)。
2. 初心者向けに知っておきたい基礎用語
| 用語 | 意味・例 |
|---|---|
| Webhook | 外部サービスへ「イベントが起きたら POST で通知」する仕組み。Slack の場合は https://hooks.slack.com/services/XXXXX が URL になる。 |
| 権限昇格 (Privilege Escalation) | 本来持っていない管理者権限を取得し、システム全体に影響を与えること。 |
| Read‑only ファイルシステム | コンテナ起動時に --read-only を付けると、書き込みはボリューム(-v)だけに限定できる。 |
| Seccomp / AppArmor | Linux カーネルレベルで「このコンテナは何ができるか」を制限するプロファイル。 |
Tip:用語を調べながら手順を進めれば、設定ミスのリスクが大幅に下がります。
3. 外部サービス(Slack)連携の具体的設定例
3‑1. Slack の Incoming Webhook 作成手順
- ワークスペース → アプリ → 「Incoming Webhooks」 を検索して追加
- 「Webhook URL を作成」ボタンをクリックし、通知したいチャンネルを選択
- 発行された URL(例:
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX)を 安全な場所 に保管
注意:URL はシークレット扱いです。Git リポジトリに平文で残さないよう、環境変数や Secrets Manager を利用してください。
3‑2. Docker コンテナから Slack に通知する例(Python)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# file: notify_slack.py import os, json, urllib.request SLACK_WEBHOOK = os.getenv("SLACK_WEBHOOK_URL") if not SLACK_WEBHOOK: raise SystemExit("環境変数 SLACK_WEBHOOK_URL が設定されていません") def send(msg: str): payload = {"text": msg} data = json.dumps(payload).encode() req = urllib.request.Request(SLACK_WEBHOOK, data, headers={"Content-Type": "application/json"}) with urllib.request.urlopen(req) as resp: return resp.read().decode() if __name__ == "__main__": send("✅ OpenClaw が起動しました") |
Dockerfile に組み込む例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
FROM python:3.11-slim # 1. 非 root ユーザー作成 RUN groupadd -r claw && useradd -r -g claw claw USER claw COPY . /app WORKDIR /app RUN pip install --no-cache-dir -r requirements.txt ENV SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL} CMD ["python", "notify_slack.py"] |
起動コマンド(シークレットは docker run の --env-file で渡す)
|
1 2 3 4 5 6 |
docker run -d --name openclaw \ --read-only \ --env-file ./secrets.env \ # SLACK_WEBHOOK_URL が記載されたファイル -v claw_data:/data:rw \ openclaw:latest |
4. 多層防御フレームワーク(OSS)全体像
4‑1. レイヤー構成と主な役割
| 層 | 推奨 OSS | 主な機能 |
|---|---|---|
| ホスト | OSSEC, Suricata | ファイル改ざん・不正ログイン監視、ネットワークパケットの DPI 解析 |
| コンテナランタイム | Falco | カーネルシステムコールをリアルタイムで検知し、Slack 等へ通知 |
| ネットワーク | nftables (or iptables) + Cilium(任意) | ポート制限・名前空間分離、マイクロセグメンテーション |
| イメージ供給チェーン | Trivy, Cosign | 脆弱性スキャンと署名で「安全な」イメージだけをデプロイ |
4‑2. 初心者でもすぐに試せる設定例
OSSEC(シンプルなローカル監視)
|
1 2 3 4 |
# Ubuntu/Debian 系の場合 apt-get update && apt-get install -y ossec-hids systemctl enable --now ossec |
/var/ossec/etc/local_rules.xml に OpenClaw 用のルールを追加
|
1 2 3 4 5 6 |
<rule id="100200" level="10"> <if_sid>550</if_sid> <match>openclaw</match> <description>OpenClaw の実行が検知されました</description> </rule> |
Falco(Docker デーモンと連携)
|
1 2 3 4 5 6 7 8 9 10 |
# Falco を公式イメージで起動 docker run -d --name falco \ --privileged \ -v /var/run/docker.sock:/host/var/run/docker.sock \ -v /dev:/host/dev \ -v /proc:/host/proc:ro \ -v /boot:/host/boot:ro \ -v /etc:/host/etc:ro \ falcosecurity/falco:latest |
falco.yaml に Slack 出力設定を追記
|
1 2 3 4 5 6 |
output: slack: enabled: true webhook_url: "${SLACK_WEBHOOK_URL}" channel: "#security-alert" |
5. Docker 環境での「最小権限・Read‑only・Seccomp/AppArmor」実装手順
| 手順 | コマンド例 | 説明 |
|---|---|---|
| 1. 非 root ユーザー作成 | RUN groupadd -r claw && useradd -r -g claw claw |
コンテナ内での権限を最小化 |
| 2. Read‑only ルートファイルシステム | docker run --read-only … |
ファイル書き込みはボリュームに限定 |
| 3. Seccomp プロファイル適用 | --security-opt seccomp=seccomp.json |
危険な syscalls(chmod, chown など)をブロック |
| 4. AppArmor プロファイル適用 | --security-opt apparmor=claw-profile |
ネットワーク外部接続やファイル書き込みを制限 |
Seccomp JSON の簡易例(chmod と chown をエラーに)
|
1 2 3 4 5 6 7 8 |
{ "defaultAction": "SCMP_ACT_ALLOW", "syscalls": [ { "name": "chmod", "action": "SCMP_ACT_ERRNO" }, { "name": "chown", "action": "SCMP_ACT_ERRNO" } ] } |
AppArmor プロファイル例(claw-profile)
|
1 2 3 4 5 6 |
profile claw /usr/bin/python3 { # 読み取り専用のマウントは自動許可 capability net_bind_service, deny /** w, # 書き込みはすべて拒否 } |
起動コマンド全体例
|
1 2 3 4 5 6 7 8 |
docker run -d --name openclaw \ --read-only \ -v claw_data:/data:rw \ --security-opt seccomp=seccomp.json \ --security-opt apparmor=claw-profile \ -e SLACK_WEBHOOK_URL="${SLACK_WEBHOOK_URL}" \ openclaw:latest |
6. 非 Docker(VPS/社内サーバ)向けハードニング
6‑1. systemd の保護機能活用例
/etc/systemd/system/openclaw.service
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[Unit] Description=OpenClaw Service After=network.target [Service] Type=simple User=claw Group=claw ExecStart=/usr/local/bin/openclaw # 以下のオプションで権限を最小化 ProtectSystem=full # /usr, /boot, /etc を読み取り専用に PrivateTmp=true # /tmp を名前空間分離 CapabilityBoundingSet=CAP_NET_BIND_SERVICE NoNewPrivileges=yes |
6‑2. sudoers の最小化
|
1 2 3 4 |
claw ALL=(root) NOPASSWD: /bin/systemctl restart openclaw.service # それ以外は sudo 使用禁止 Defaults:claw !authenticate |
6‑3. SELinux ポリシーでプロセス権限を絞る
openclaw.te
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
module openclaw 1.0; require { type var_log_t; type bin_t; class file { read execute }; } # ログ書き込みだけ許可 allow claw_t var_log_t:file { write create }; # バイナリは読み取り・実行のみ許可 allow claw_t bin_t:file { read execute }; |
ビルド & 適用
|
1 2 3 4 |
checkmodule -M -m -o openclaw.mod openclaw.te semodule_package -o openclaw.pp -m openclaw.mod semodule -i openclaw.pp |
7. 継続的運用:自動更新・監査ログ・バックアップ
7‑1. パッケージ/イメージの自動更新(Renovate + GitHub Actions)
.github/workflows/renovate.yml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
name: Renovate Bot on: schedule: - cron: '0 2 * * 1' # 毎週月曜 02:00 UTC jobs: renovate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Renovate uses: renovatebot/github-action@v40 |
Renovate が requirements.txt、Dockerfile、GitHub Actions のバージョンを自動で PR 化し、マージ前に Trivy で脆弱性チェックを走らせます。
7‑2. 監査ログの可視化(auditd → Loki/Grafana + Falco)
- auditd ルール (
/etc/audit/rules.d/openclaw.rules)
|
1 2 3 |
-w /opt/openclaw/config.yaml -p wa -k openclaw_cfg -a always,exit -F arch=b64 -S execve -F exe=/usr/local/bin/openclaw -k openclaw_exec |
- Loki に転送(
rsyslogの*.* @loki:3100など) - Falco カスタムルール (
openclaw.rules.yaml)
|
1 2 3 4 5 6 |
- rule: OpenClaw Config Change desc: Detect modification of OpenClaw configuration files condition: evt.type = open and fd.name = "/opt/openclaw/config.yaml" and evt.dir = "<" output: "OpenClaw config file modified (user=%user.uid command=%proc.cmdline)" priority: NOTICE |
7‑3. 暗号化バックアップと復元テスト
|
1 2 3 4 5 6 7 8 |
# PostgreSQL データベース(AES256)で暗号化 pg_dump -U claw openclaw | \ gpg --symmetric --cipher-algo AES256 > /backup/openclaw_$(date +%F).sql.gpg # 設定ファイルのバックアップ例 tar czf - /opt/openclaw/config.yaml | \ gpg --symmetric --cipher-algo AES256 > /backup/conf_$(date +%F).tgz.gpg |
- 復元テストは月1回実施し、手順書 (
docs/restore.md) をリポジトリに管理。 - 復元時の暗号化パスフレーズは Vault などのシークレットマネージャで自動取得。
7‑4. 実装チェックリスト(必須 7 項目)
| No | 必須対策 | 確認項目 |
|---|---|---|
| 1 | 権限最小化 | Docker は非 root、systemd は ProtectSystem=full が有効 |
| 2 | ファイル保護 | 設定・データディレクトリは chmod 750、所有者が claw に限定 |
| 3 | ランタイム監視 | OSSEC と Falco が稼働し、Slack 通知が届くかテスト |
| 4 | ネットワーク分離 | nftables のホワイトリストが期待通りに機能 |
| 5 | イメージ署名・スキャン | CI (GitHub Actions) で Trivy が脆弱性なし、Cosign で署名 |
| 6 | 自動パッチ適用 | Renovate が PR を作成し、レビュー後に自動マージ |
| 7 | バックアップと復元テスト | 暗号化バックアップが取得でき、手順通りに復元可能 |
8. 参考リンク(URL付き)
- GMO サイバーセキュリティ「2026 年版脅威レポート」
https://www.gmo.jp/security/report/2026.pdf - OSSEC 公式ドキュメント – https://ossec.github.io/
- Suricata ユーザーマニュアル – https://suricata.io/docs/
- Falco ルールリファレンス – https://falco.org/docs/rules/
- Docker のセキュリティベストプラクティス(公式) – https://docs.docker.com/engine/security/
- Cosign (Sigstore) – https://github.com/sigstore/cosign
- Trivy – https://aquasecurity.github.io/trivy/
- Renovate Bot – https://renovatebot.com/
9. 最終まとめ
- 脅威は「権限昇格」「Webhook 漏洩」「不正ファイルアップロード」の三つに集約され、2026 年の GMO レポートでも上位に位置付けられています。
- 多層防御(ホスト・コンテナ・ネットワーク)と自動化された運用を組み合わせることで、攻撃者が一つの脆弱性だけで侵入できない環境を構築できます。
- 具体的な設定例(Slack Webhook、Seccomp/AppArmor、systemd・SELinux の保護機能)をそのままコピーして利用可能です。
- 継続的にパッチ適用・監査ログ収集・暗号化バックアップを行い、復元テストを定期実施することで「長期的な安全運用」を実現します。
これらの手順とチェックリストをプロジェクトの初期段階で組み込めば、OpenClaw を本番環境で安全に提供できるはずです。ぜひ、今すぐ実装をご検討ください。