コンテナ本番運用勉強会 18.04 セキュリティの春 レポート

こんにちは、ひろかずです。

2018/4/5にドリコム社で行われたコンテナ本番勉強会に行ってきましたので、一筆書きます。

k8sが注目を浴びている中、セキュリティについての感心も高まってきています。
今月はContainerのイベントが目白押しで業界の熱の高まりも感じます

ビールをプシュッとやってから元気にスタートです！

例によって、リアルタイム執筆ですので、表記ゆれや誤字脱字はご容赦下さい。
アルコールによる揺れもご勘弁を~

# お品書き
Session1. コンテナの守り方	@pottava SUPINF Inc.
Session2. aqua 概要 & デモ	Eric & Adrian Aqua Security Software Ltd.
SessionX. aqua Q&A / LT	調整中

# Session1. コンテナの守り方	
@pottava SUPINF Inc.

JAWS Daysで話した内容(AWS特化)ではなく、一般的なお話とのことです。

Macで素のまま使えないツールをDockerイメージにするのが趣味

Fortune100の71%が本番でコンテナを使っている。

DockerHub2015の状況
- 平均180の脆弱性
- 脆弱性は親子で引き継がれている
- 100日以上メンテされていないのはザラ
- officialでも状況は変わらない

今

- QUAYやDockerでもコンテナの脆弱性が見える化されている
- clairはコンテナの脆弱性をスキャンしてくれるツール

納品されたコンテナとその後の運用でのセキュリティ維持に自信がない

3つの話

- アプリケーションの詳細な挙動の把握
- コンテナに合うセキュアな構成と設計
- ポリシーにしたがってコンテナを守る方法

## アプリケーションの詳細な挙動の把握
コンテナの制限機能を活かして挙動を把握する
例: APIコンテナ
アプリケーションな必要なものの定義（ECSタスク定義 等)

リソース制約

- --ulimitsで使えるリソース上限設定
- --memoryを指定して、超えた時のコンテナ停止
- 必要なリソースを事前に定義、せっていできる

READ ONLY

- マウントしたディレクトリ以外の書き込み禁止
- マウントしたディレクトリを書き込み禁止
- AppArmorでパスベースでのアクセス制御

ルートユーザーは使わない

- 使わないで

実行ファイルの管理

- 使うバイナリだけをイメージに入れる(できれば静的リンク: ldd / strace で確認)
- 小さいコンテナ

通信の制限

- どこと通信するのかを先ず把握(クラスタ内部)
- タスク定義
- 今は、iptablesではなく、saasでもできる(!)

システムコールの制限

- straceでトレース
- --security-opt seccompでの生後
- --cap-add --cap-dorop

## コンテナに合うセキュアな構成と設計
守りやすい環境の整備

- セグメント
- ECSクラスタを分ける
- ネットワークを分割(ホストとコンテナ / コンテナ間通信)

スケールアップよりスケールアウト

- 全滅を避ける
- 稼働ホストを分散する

侵入口の削減

- 権限やネットワークの解放も最低限にする

ホスト

- 今までどおり守る
- インスタンスハードニング(ホワイトリスト: NIST SP800-167)
- バッチ管理

docker-bench-securityリポジトリを使って評価できる

- AWSなら、Lambdaを使ってやるスライドシェアが公開されている

## ポリシーにしたがってコンテナを守る方法
都度テスト

- に加えて、定期診断(ミドルウェアの新しい脆弱性の検出)

実行時スキャン

- 監視ツールをホスト単位出入れて、挙動を監視、レポート(脅威判定)

CI
OWASPにStatic Application Security Testingツールを利用する
source_corde_analysis
awesome-static-analysis
CoreOSのClir

GCPのcontainer-structure-test

- 超オススメ
- Dockerファイルのビルド時に検査して、OKならPushする

あるべきもの(コマンドとか環境変数とか)を定義しておいて、有無を判定してくれる

- Twistlockとかも

新たな脅威への対応

- イメージの静的解析

秘密情報の扱い

- 2016年: s3に使う
- 2017年: SSM パラメータストア、KMS、IAM roll
- 昨日: AWS Secret Manager

今はk8sのSecretもあるし、環境変数を使うことはもうない

## まとめ

- 静的解析は、ソースコードだけではなく、Dockerイメージも
- 依存ライブラリの新たな脅威に対応できるように定期スキャン
- SaaSサービスの活用

JAWSコンテナ支部においでよ！

# Session2. aqua 概要 & デモ	
Eric & Adrian Aqua Security Software Ltd.

お二方はこのイベントのために来日された!?とのこと
日本語より寿司が得意とのこと
ここからは、拙いヒアリングも交じるので、いろいろご容赦を＞＜

aquaセキュリティの哲学

- ホストで動いていたアプリケーションを更にセキュアにすること
- 一定のセキュリティ基準を満たしたコンテナのみ使える
- ランタイムまでスキャンする
- スキャンすることで知られざるセキュリティが見えてくる
- 定期的にスキャンすることで、ゼロデイや見えない脆弱性が見えてくる

DevOpsがコンテナを好む理由

- 秒で起動
- スケール
- どこでも動く

コンテナ is アプリケーション

- 脆弱性、乗っ取り、データ窃取、権限昇格の脅威にさらされている

セキュリティはどこで考慮する?

- Dev? Ops?

コンテナでも変わらず守るべきもの

- ネットワークセグメンテーション、FW、

アプリケーションのセキュリティ

- サーバーの直接利用では、コードとホストを別々にスキャンする必要がある
- どちらかの検査結果が、他方に影響することもある
- コンテナの方は、一緒に検査できるので、影響や手戻りが予測しやすい

インシデントレスポンス

- 問題があった時、サーバは止めるしかない(サービス稼働への影響)
- コンテナの場合は当該動作だけをshutdownできるので、全体の機能は継続できる

Aquaとは

- Aquaコマンドセンターがレジストリを評価する
- 評価するためのエンジンはクラウドにある
- Aquaコンテナをホスト内で稼働させる
- または、コンテナ内にmicroツールを入れる(CaaS/Fargateとかの場合)
- Gatewayコンテナを通じて、コマンドセンターと通信する
- コマンドセンターは、利用者のCI/CDと連携したり、SIEMや分析基盤と通信できる。
- オンプレでもクラウドでもどっちでも動く

デモ0

- デプロイ可能なスコアを定義して、スキャン結果が抵触した場合は、イメージの実行を止める事ができる
- docker runコマンドでスキャンを呼んでいる。
- リポジトリ内の検索についても、機密情報(秘密鍵)も確認できる。
- スクリプトを書いて、PIIデータが含まれるかをスキャンすることもできる。
- 加えて、マルウェアのスキャンも行う
- RBAC(人によって実行可否の制御)ができる

デモ1

- Dockerコマンドに割り込んでDB接続情報を書き込んでいる
- DBのパスワードを、予約語に指定しておいて、コンテナ内に伝える前に割り込んで、本当のパスワードをコンテナに足すイメージ。
- docker inspectコマンドで見ると予約語が表示される
- docker execでみると本当のパスワードが確認できた
- 動いているContainerの秘密情報を書き換えて、docker execでもう一度見ると、変更後の秘密情報が見えた(どうやってるかは企業秘密)

デモ2

- 稼働中のContainerを検査して、SuperUserで動いている事が検出できている。
- Outboundを拒否するようなポリシーを設定して検査することもできる
- runtimeのポリシーとして、動かしていいバイナリを設定できる
- 初めに定義するのは大変なので、先ずは動かして、それから不要な部分をブロックするやり方もできる
- 動いているバイナリや通信がモニタできる
- 新しいイメージが動く時に、モニタモードで起動することもでこる
- 動作可能なUIDも指定できる(UID:0を許可しなければ、rootも動作できない)
- touchも許可してないので、動かない

デモ3

- ネットワーク情報漏えいについて見てみよう
- Container起動後にどこと通信しているかを表示する
- 事前に設定するのが大変なので、同様に動作もモニタできる
- 通信が変化する度に図が更新される
- モニタ結果で、互いのContainerサービスを許可するようなファイアウォールを設定できる(トグルスイッチ的な感じ)

デモ4

- 監査ログは全部記録できるし、SplunkのようなSIEMに飛ばすこともできる。
- コンプライアンスレポートとして、Dockerイメージの脆弱性をレポートできる。(稼働イメージ、リポジトリ内のイメージ)

# SessionX. aqua Q&A / LT	
料金体系は？

- 従量課金
- ホスト単位。ボリュームが

日本法人はいつできるの？

- お客が増えれば日本ブランチができる
- 大きい案件案件

スクリプトでPIIデータを検出したっていうけど、どんなスクリプト？

- bash、PowerShell、OVENに対応している
- findで引っ掛けて、自分で正規表現書いて、検知条件を作るような方式

マルウェアスキャンのパターンファイルやイメージは、各コンテナが持ってるの？
Containerホストのインターネット通信が必須？

- ローカルにデータベースホストを用意することで、必ずしもインタネット通信は必要としない。

活発なQAが出る熱い会でした。
使ってみたくなる機能ですね。

今日はここまでです。
お疲れ様でした。