こんにちは、サーバーエンジニアの土井です。
サーバーエンジニアのみなさん、脆弱性対策どうしてますか?
私がこれまで経験したことのある対策は、こんな感じでした。
- 外部の会社に調査を依頼
- CVEとかJVNとかを定期的にチェックして、思い当たる所があったら調査する
- OSやソフトウェアの管理台帳を作り、CVEと照らし合わせて調査する
- 脆弱性スキャナを使って定期的にチェックする
AWSには、脆弱性検査をするためのマネージド・サービスがあり、それを使えばかんたんに検査ができちゃいます。
-
今回対象となる脆弱性
- OSやミドルウェア自体の脆弱性
- OS設定、ルーティング設定
-
対象とならない脆弱性
- アプリケーション自体の脆弱性(SQLインジェクション、CSRF等)
Amazon Inspector
https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_introduction.html
Amazon Inspectorでは、EC2に対するネットワーク設定の妥当性や、インスタンスで実行されるアプリケーションのセキュリティを検査できます。
- 評価項目
- Network Reachability
- ネットワークが到達可能かを検査する
- ポートやセキュリティグループ設定のミスを見つけることができる
- 共通脆弱性識別子
- CVEのリストに乗っている脆弱性が無いか検査する
- Center for Internet Security (CIS) ベンチマーク
- CIS セキュリティベンチマークを行う
- Amazon Inspector のセキュリティのベストプラクティス
- Amazonのセキュリティベストプラクティスに則っているかの検査を行う
- Network Reachability
これらを組み合わせて使用できます。
設定
Amazon Inspectorのページから、「評価ターゲット」「評価テンプレート」の順で作成します。
-
Inspectorページ
-
評価ターゲットの設定
All Instancesにチェックを入れると全てのEC2インスタンスに対して実行します。
チェックを外すとタグ指定したインスタンスにのみ実行。なんかもできます。
- 評価テンプレート
さきほど作成したターゲットを選択し、実行したいルールパッケージを選んでいきます。
作成が終われば、テンプレートを選択し、実行することができます。
実行
-
評価の実行
-
結果
結果は、重要度別に表示してくれます。
詳細を見てみると、どういう対処をすべきかなどのアドバイスも書いてくれています。
コンテナイメージの脆弱性検査
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/image-scanning.html
ECS等を利用している場合、Amazon Inspectorでは脆弱性検査ができません。
しかし、ECRにイメージのスキャナが提供されているので、そちらで代用できます。
- 評価項目
- CVEのリストに乗っている脆弱性が無いか検査する
※あくまでコンテナイメージの検査なので、ネットワーク等の評価項目はありません。
- CVEのリストに乗っている脆弱性が無いか検査する
設定
ECRのページにより、pushしているイメージを選択し、右上のほうにある「スキャン」ボタンがあるのでそれを押すだけです。
実行
Inspectorと同じように、重要度やアドバイスなども記載があるので、それを見つついい感じに対処していくと良いでしょう。
さいごに
CloudwatchEventやChatbotを使い、これらの検査の定期実行&レポートを行えば、これまで個々人の努力と経験により行っていた脆弱性検査を、ある程度自動化できると思います。
しかし、あたりまえの話ですが毎秒検査を行うわけにはいかない都合上、速報ベースの脆弱性情報は、次の実行タイミングまでひっかかることはありません。
ですので、脆弱性情報にアンテナを張り続けることは、これからも重要だと思います。
また、オープンソースの脆弱性スキャナ(ClairやValus)を使えば、似たようなことはできます。
しかしそれでもAWSのサービスを使う理由としては
-マネージド・サービスになっているので、スキャナ自体のメンテは不要
- 通知や定期実行などのAWSのサービスと親和性が高い
- とにかく設定がかんたん
などの理由があります。
最後まで読んでいただきありがとうございます。