[遂にきた!]脆弱性管理ツールFutureVulsから直接SSMを利用してパッチ適用ができるようになったのでやってみた

378件のシェア(そこそこ話題の記事)

こんにちは、臼田です。

全世界のサーバ管理をしている皆様、朗報です。

脆弱性管理ツールのFutureVulsがAWS Systems Manager(SSM)と連携する機能を発表しました!

具体的には下記2つの機能を提供しています。

  • SSM連携パッケージアップデート
    • FutureVulsの画面上からパッケージのアップデートを行うことができます。
  • SSM連携スキャン実行
    • FutureVulsの画面上からサーバのスキャンを実行します。

前者のパッケージのアップデートは、脆弱性のあるパッケージ(apacheのようなミドルウェア等)をサーバにログインせずyum等のパッケージ管理をベースにアップデートする機能でいわゆるパッチ適用です。

これまでは発見した脆弱性の対処を行う際に、一個一個のサーバにログインして適用していたところを

オペレーションをFutureVulsの中で完結することができるようになりました!これは素晴らしい!

そして、パッチ適用後に再度スキャンを行うと思いますが、これまではスキャンもcronで実行するか、手動でサーバにログインしてスキャンしていたところを、SSM連携機能ですぐにスキャンを開始することができます。手間いらず!

というわけで早速やってみました。

SSMのセットアップ

FutureVulsとSSMを連携するための前提としてAWS環境では下記のようになっている必要があります。

  • EC2にSSMエージェントをインストールしている(Amazon Linux 2等はデフォルトでインストールされている)
  • EC2にAmazonEC2RoleforSSMのポリシーがついたIAM Roleをアタッチしている

このあたりは標準的なSSMのセットアップなので割愛します。詳細は下記の前半をご確認ください。

Systems ManagerのRunCommandでSSHを使わずにShellライクにコマンドを実行する

今回は少し古いAmazon Linux 2を用意しました。

FutureVulsのセットアップ

アカウントの登録はこちらから可能です。

登録後はサーバにスキャナーをインストールする必要があります。

インストール方法はこちら

サーバが一覧に表示されれば大丈夫です。今回は初回のスキャンを終え、脆弱性が見つかっている状態から説明します。

AWS/SSM連携

AWS/SSMと連携していきます。手順は下記にあります。

実際にやっていきます。

AWSとの連携

まずはFutureVulsの右上「グループ設定」から「外部連携」を開き、AWSとの連携を「追加」します。

連携方法はIAM Roleを利用する方法と、IAM UserのAPIキー(アクセスキー)を利用する方法の2種類ありますが、AWSのベストプラクティスとしてもFutureVulsの推奨としてもIAM Roleの利用が推奨されているのでこちらを利用します。通常アクセスキーを発行することはセキュリティリスクになるのでIAM Role一択でしょう。

連携するAWSのアカウントIDを入力して「次へ」進みます。

CloudFormationを利用してFutureVulsと連携するIAM Roleをセットアップする画面になります。右下の「CloudFormationの設定画面へ」を押すと必要な値が入力された状態で開きます。なお、事前にAWSマネジメントコンソールにログインしておくといいでしょう。

スタック作成画面になります。IAMの作成になるので下の方でチェックを入れて「作成」します。

しばらくしてから画面をリロードするなどしてCREATE_COMPLETEになっていることを確認したらFutureVulsの画面に戻ります。

元の画面で「次へ」を押します。

確認が通れば登録完了です。「閉じる」を押します。

SSM経由パッケージアップデート設定

続いてSSM経由パッケージアップデートの設定も行います。AWS連携が完了していれば下記のようになるので「設定する」を押します。

SSMドキュメントを作成するコマンドが表示されます。このコマンドはawscliを利用しています。ローカルPC等の対象のAWSアカウントに対してawscliを実行できる環境にて実行します。実行する内容は右下の「テンプレート詳細」に書かれていますので気になる方はご確認ください。

SSMドキュメントは、SSMにて行う処理を定義したテキストで、今回の内容はSSM RunCommandを利用したyum updateやapt-get installを行うドキュメントの内容になっています。

コマンドを実行すると下記のように処理されていきます。

$ curl -s https://s3-ap-northeast-1.amazonaws.com/vuls-public-file/FutureVulsSSMPkgSetting.sh | bash
+ aws ssm delete-document --name FutureVulsConfigureYumPackage
+ aws ssm create-document --name FutureVulsConfigureYumPackage --content https://s3-ap-northeast-1.amazonaws.com/vuls-public-file/FutureVulsConfigureYumPackage.yaml --document-type Command --document-format YAML
{
    "DocumentDescription": {
        "Hash": "xxxxxxxxxxxxxxxxxxx6fd36a976b83de74187a14082c0b5acca4377295de",
        "HashType": "Sha256",
        "Name": "FutureVulsConfigureYumPackage",
        "Owner": "999999999999",
        "CreatedDate": 1559812531.771,
        "Status": "Creating",
        "DocumentVersion": "1",
        "Description": "FutureVuls: Install the latest version or specified version of a package.",
        "Parameters": [
            {
                "Name": "name",
                "Type": "String",
                "Description": "(Required) The package to install."
            }
        ],
        "PlatformTypes": [
            "Linux"
        ],
        "DocumentType": "Command",
        "SchemaVersion": "2.2",
        "LatestVersion": "1",
        "DefaultVersion": "1",
        "DocumentFormat": "YAML",
        "Tags": []
    }
}
...

正常に完了したら、FutureVulsの画面に戻って「確認する」を押します。

「サーバ一覧から確認」がでるので「閉じる」を押します。

SSM経由スキャン設定

SSM経由パッケージアップデートが設定済みとなったら、次はSSM経由スキャンの設定を行います。「設定する」を押します。

同じくSSMドキュメントを作成するコマンドが発行されるため、同じようにawscliが使える環境から実行します。内容を確認したい場合には「テンプレート詳細」を開きます。

内容としてはvulsスキャナーを実行するSSMドキュメントの作成です。

コマンド実行が完了したら「確認する」を押します。

2つとも設定済みとなれば、準備は完了です。

FutureVulsからパッケージアップデートを実行する

FutureVulsの「サーバ」タブにて対象のEC2を確認していきます。一覧画面のカラムに「SSM連携」というカラムを表示できるので追加します。上部の左右の矢印アイコンを押します。

「表示項目の編集」画面で「未使用のカラム」の中に「SSM連携」があるので適当な場所にドラッグアンドドロップします。適当にウインドウの外側を押したら適用されます。

「SSM連携」がになっていれば準備完了です。うまく反映されていない場合には一回画面をリロードするか、ログアウト/ログインするといいでしょう。

パッチの適用を実行していきます。サーバを選択すると脆弱性の一覧を確認できます。今回は「タスクx脆弱性」タブから実行していきます。このタブから脆弱性一覧を表示し、アップデートを行いたい脆弱性を選択します。

今回は特にクリティカルなCVSS3スコア9.8の3種類を選択します。marinadb-libs, perl等, python-urllib3の脆弱性です。選択したら上部にある「SSMアップデート」を押します。

実行されるコマンドが表示されます。選択したパッケージについてyum install --assumenoで確認するようになっています。最初はDRY RUNが有効となっており、動作の確認ができます。まずはこのまま実行するために「OK」を押します。

AWSタブでステータスが確認できます。実行するとRUNNINGとなり、しばらくするとSSMドキュメントの実行が完了しREADYのステータスになります。

実際にAWS上の動作も見てみましょう。マネジメントコンソールにログインしてSSMの画面に移動します。

RunCommandのコマンド履歴に実行した内容があります。コマンドIDで詳細を確認できます。

実行したyumコマンドのログが残っていて、選択したパッケージについて実行されていることが確認できます。

FutureVulsの画面でも、READYステータスになった履歴から同様の内容が確認できます。AWS画面で確認できる項目がこちらでも見れるため、オペレーションをFutureVulsのみで実施できることがわかります。

そして、実際にパッチの適用を実行するためには右上の「実際にアップデートする」を押します。

同じようにRunCommandで実行され、しばらくするとステータスが「SUCCESS」となり完了します。

パッチの適用ができたので、状況が改善されているかスキャンします。「サーバ」タブに戻り対象サーバを選択します。詳細画面で少し下にスクロールすると「SSM経由スキャン」が表示されます。(表示されない場合は画面をリロードするかログアウト/ログインで表示されると思います)

これを押してスキャンを実行します。この実行内容も「AWS」タブで確認可能です。

しばらくしてスキャンが終わると、ステータスが更新されます。「タスクx脆弱性」タブで確認すると、選択したCVSS3スコア9.8の3つがpatch_appliedとなっていることが確認できます。(ついでにmaria-dbの他の脆弱性も適用されています)

FutureVulsの画面からパッチの適用まで完了することができました。

まとめ

脆弱性管理ツールであるFutureVulsから、パッチの適用を行いました。

本当に頑張っている方は似たような仕組みを作って自前で行っていたかもしれませんが、これからはFutureVulsというSaaS上で簡単に実行することができます。

FutureVulsの強みは日本語でとにかく正確な脆弱性情報を沢山扱うことができて、1つの管理画面上で脆弱性の発見から優先度の判断、タスクの割り振りやステータス管理まで一通りのワークフローに対応できることでした。

そこにこの機能が追加されたことにより、最後のステップであるパッチ適用まで行えるようになったため、脆弱性管理のフローを全てFutureVulsで行えるようになったと言っても過言ではないのでは無いでしょうか。

しかもライセンスはお安く一台あたり 月額 4,000円となっており、他のSaaSと比べてもかなり安いです。破格

1台無料キャンペーンとかもやっているので詳細は公式ページをチェック。2週間無料のトライアルも可能です。(2019/06/07現在)

SSM連携は追加費用なしですぐに利用できます。

これまでパッチ適用のオペレーションに苦労されていた方、パッチ適用をずっと放置してきた方はぜひこの機会にトライアルから始めてみましょう。