2022/12/13

テクノロジー

WPScanとElasticStackを利用して、WPサイトの脆弱性を検知する

この記事の目次

    はじめに

    マイナビではマネージドなWordPress基盤「SMEW」が社内向けに提供されており、WordPressを使ったサイトの多くがSMEW上で稼働しています。

    ご存知の通り、WordPressは多くの脆弱性が報告されます。脆弱性に迅速に対応できるよう、WPScanとElastic Stackを使って、SMEW上で稼働している各サイトのWordPress脆弱性を自動でスキャンするシステムを開発しました。本記事で簡単に紹介します。

    ▼SMEWについての詳細はこちらをご覧ください

    WPScanとは

    オープンソースのWordPressの脆弱性スキャンツールです。

    WPScanを利用してみる

    WPScanは Kali Linux に標準で入っています。

    wpscan --url "https://hogehoge/" --api-token "{token}" -format json

    オプション

    • url
      • サイトのURL
    • api-token
      • WPScanにユーザ登録した時に発行されるトークン
    • format
      • 出力結果のフォーマット

    実行結果(一部抜粋)

    スキャン結果の「vulnerabilities」のフィールドに、脆弱性名、CVE、Fixのバージョン等の詳細情報が出力されます。
    下記、スキャン結果から、All in One SEO Packというプラグインに脆弱性があることがわかります。

    ▼スキャン結果

    {
        "main_theme": null,
        "plugins": {
          "all-in-one-seo-pack": {
            "confidence": 30,
            "confirmed_by": {},
            "directory_listing": null,
            "error_log_url": null,
            "found_by": "Comment (Passive Detection)",
            "interesting_entries": [],
            "last_updated": "2022-03-30T17:01:00.000Z",
            "latest_version": "4.1.9.4",
            "location": "https://hogehoge/webroot/plugins/all-in-one-seo-pack/",
            "outdated": true,
            "readme_url": null,
            "slug": "all-in-one-seo-pack",
            "version": {
              "confidence": 60,
              "confirmed_by": {},
              "found_by": "Comment (Passive Detection)",
              "interesting_entries": [
                "https://hogehoge/, Match: 'All in One SEO Pack 2.6.1 by'"
              ],
              "number": "2.6.1"
            },
            "vulnerabilities": [
              {
                "fixed_in": "3.6.2",
                "references": {
                  "cve": [
                    "2020-35946"
                  ],
                  "url": [
                    "https://www.wordfence.com/blog/2020/07/2-million-users-affected-by-vulnerability-in-all-in-one-seo-pack/"
                  ],
                  "wpvulndb": [
                    "528fff6c-54fe-4812-9b08-8c4e47350c83"
                  ],
                  "youtube": [
                    "https://www.youtube.com/watch?v=2fqMM6HRV5s"
                  ]
                },
                "title": "All in One SEO Pack < 3.6.2 - Authenticated Stored Cross-Site Scripting"
              }
            ]
          }
        },
        "requests_done": 186,
        "start_memory": 52584448,
        "start_time": 1648701772,
        "stop_time": 1648701796,
        "target_ip": "198.51.100.0",
        "target_url": "https://hogehoge/",
        "used_memory": 219262976,
        "used_memory_humanised": "209.105 MB"
                    -略-
    }

    Elastic Stackとは

    Elasticsearch、Kibana、Beats、Logstashの総称。
    ログをリアルタイムに検索、分析、可視化することができます。

    Kibanaのアラート機能を利用して、特定の条件のログがあったら、SLACK等に通知できます。

    自動化の取り組み

    処理の流れ

    1. SMEW上で管理されたサイト一覧を取得し、DynamoDBに格納する。
    2. スキャン対象キューに入れる
    3. ECSTaskを起動し、スキャンを実行する。
    4. 脆弱性があるログを検知したら、Slackに通知する。

    構成図

    通知結果(例)

    まとめ

    今後もSMEWだけでなく、マイナビの全てのサイトのセキュリティを高めるための技術開発に取り組んでいきます。

    ※本記事は2022年12月時点の情報です。

    著者:マイナビエンジニアブログ編集部