Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20190525_GCPUG_KYOTO_登壇資料.pdf

 20190525_GCPUG_KYOTO_登壇資料.pdf

2e2c49f6f3fa33b8f5aad5841774c211?s=128

nezumisannn

May 25, 2019
Tweet

Transcript

  1. GKE + Vuls コンテナを用いた 脆弱性診断サーバ

  2. はじめに ▸ 普段は熱烈なA◦◦信者です ▸ 数週間前までKubernetes is 何状態でした ▸ 今回はGKEをちゃんと利用しました ▸

    生温かい目で見守っていただけると幸いです 2
  3. ねずみさん家。 Yuki.Teraoka@yktr_sre 株式会社ビヨンド システムソリューション部 SREチーム SRE4年目 サーバのことを全部丸投げされる人 3

  4. アジェンダ ▸ そもそも脆弱性って? ▸ 脆弱性との戦い ▸ 脆弱性対応の効率化 ▸ GKE for

    Vuls ▸ 使用ツールと仕組みの解説 4
  5. 脆弱性って? ▸ コンピュータソフトウェアの欠陥 ▸ セキュリティホールと呼ばれる ▹ 本来操作できないはずの操作が出来る ▹ 見えるべきではない情報が見える ▸

    攻撃されるとたちまち悪影響が ▹ 秘匿情報の外部への漏洩 ▹ システムの乗っ取り、破壊 5
  6. 脆弱性との戦い ▸ 脆弱性に対しては対策を打たなければならない ▹ 脆弱性情報の取得 ▹ 緊急性/影響範囲の把握 ▹ 修正パッチリリース情報の取得 ▹

    パッチの適用 6
  7. 脆弱性との戦い ▸ 都度対策したとしても。。。 ▹ 脆弱性自体は0にならない ▹ 対策した直後にまた新たな脆弱性 ▹ 正直いたちごっこ ▹

    それでも放置できないというジレンマ ▹ どげんかせんといかん 7
  8. 脆弱性対応の効率化 ▸ 問題点を洗い出してみると ▹ 監視対象のサーバが増えると追いきれない ▹ 種類ごとの緊急度が把握できない ▹ 影響を受ける環境を把握するのが難しい 8

  9. 脆弱性対応の効率化 ▸ 理想としては ▹ サーバが増えても情報を把握できる ▹ 緊急度に応じて対応の要否や対応までの時間を 決定できる ▹ サーバごとに該当する脆弱性がどれかわかる

    ▹ 定期的に自動で脆弱性診断が行える ▸ 手作業では厳しいので仕組みを考える必要がある 9
  10. GKE for Vuls ▸ 仕組みを考えました( ▹ インフラにGoogle Kubernetes Engineを採用 ▹

    Vulsを使って定期的リモートスキャン ▹ スキャンした結果をチャットに通知 10
  11. 使用ツールと仕組みの解説 ▸ Vulsとは ▹ Linux/FreeBSD向けの脆弱性スキャンツール ▹ OSSであり、Golangで開発されている ▹ エージェントレスで導入が簡単 ▹

    スキャン結果をSlackなどに通知できる 11
  12. 使用ツールと仕組みの解説 ▸ Vulsは公式のDocker Imageが用意されている ▸ go-cve-dictionary ▹ docker pull vuls/go-cve-dictionary

    ▸ goval-dictionary ▹ docker pull vuls/goval-doctionary ▸ gost ▹ docker pull vuls/gost ▸ vuls ▹ docker pull vuls/vuls 12
  13. 使用ツールと仕組みの解説 ▸ Docker ImageはGCRで管理する ▸ go-cve-dictionary ▹ docker push gcr.io/[prj

    id]/vuls/go-cve-dictionary ▸ goval-dictionary ▹ docker push gcr.io/[prj id]/vuls/goval-dictionary ▸ gost ▹ docker push gcr.io/[prj id]/vuls/gost ▸ vuls ▹ docker push gcr.io/[prj id]/vuls/vuls 13
  14. 使用ツールと仕組みの解説 ▸ GCPに構築しているリソースは以下の通り ▹ google_compute_network ▹ google_compute_subnetwork ▹ google_compute_router ▹

    google_compute_address ▹ google_compute_router_nat ▹ google_container_cluster ▹ google_container_node_pool 14
  15. 使用ツールと仕組みの解説 ▸ 特徴 ▹ PodのIPを固定するためCloud NATを利用 ▹ そのため限定公開クラスタになっている ▹ Nodeはプリエンプティブインスタンスで起動

    ▹ リソースは全てTerraformでコード化 15
  16. 使用ツールと仕組みの解説 16

  17. 使用ツールと仕組みの解説 17

  18. 使用ツールと仕組みの解説 18

  19. 使用ツールと仕組みの解説 19

  20. 使用ツールと仕組みの解説 20

  21. 使用ツールと仕組みの解説 21

  22. 使用ツールと仕組みの解説 22

  23. 使用ツールと仕組みの解説 ▸ Kubernetesのリソースは以下の通り ▹ PersistentVolumeClaim ▹ ConfigMap ▹ Secret ▹

    kubectl create secret generic vuls-scan-key --from-file=id_rsa=[path/to/secret/key/file] ▹ Job ▹ CronJob 23
  24. 使用ツールと仕組みの解説 ▸ 特徴 ▹ Vulsがスキャン時に利用するデータベース用に PersistentVolumeClaimで永続ボリュームを作成 ▹ ConfigMapで必要な設定ファイルを管理 ▹ vulsの設定ファイル(config.toml)

    ▹ SSHのconfigファイル 24
  25. 使用ツールと仕組みの解説 ▸ 特徴 ▹ SSH接続に必要な秘密鍵はyamlでは管理しない ▹ Secretリソースを利用している ▹ Jobでスキャンで使う脆弱性データベースを取得 ▹

    CronJobで定期スキャンと結果の送信を行う 25
  26. 使用ツールと仕組みの解説 26

  27. 使用ツールと仕組みの解説 27

  28. 使用ツールと仕組みの解説 28

  29. 使用ツールと仕組みの解説 29

  30. 使用ツールと仕組みの解説 30

  31. 使用ツールと仕組みの解説 31

  32. 使用ツールと仕組みの解説 32

  33. 使用ツールと仕組みの解説 33

  34. 使用ツールと仕組みの解説 34

  35. 使用ツールと仕組みの解説 35

  36. 使用ツールと仕組みの解説 36

  37. 使用ツールと仕組みの解説 37 ▸ 後はひたすらyamlの内容を反映 ▹ kubectl apply -f configmap_ssh_config.yaml ▹

    kubectl apply -f job_fetch_jvn.yaml ▹ kubectl apply -f job_fetch_oval_redhat.yaml ▹ kubectl apply -f job_fetch_gost_redhat.yaml ▹ etc… ▹ 作成したyamlとTerraformのコードは後日githubに アップロードするので良ければ見てみてください!
  38. 使用ツールと仕組みの解説 38

  39. まとめ 39 ▸ 脆弱性は0にならないけど見逃せない ▸ 少しでも効率化したいのでこの仕組みを作った ▸ Kubernetesを使っていると案の定yaml地獄に ▹ helmを使うとなお管理しやすくなるかも

    ▸ 気になった方は是非試してみてください! ▸ 皆様の脆弱性対応のお供になると幸いです
  40. Thank you for listening! 40