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

kubecon2018_recap_falco_deep_dive

makocchi
January 09, 2019

 kubecon2018_recap_falco_deep_dive

Recap of 「Falco Deep Dive」session at Cloud Native Meetup Tokyo #6

makocchi

January 09, 2019
Tweet

More Decks by makocchi

Other Decks in Technology

Transcript

  1. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 2 サイバーエージェント アドテク本部

    所属 普段はデータセンター運用や Private Cloud(OpenStack)を 構築・運用している 最近では Private Cloud 上に 簡単に Kubernetes を展開できる基盤(AKE)を開発している CKA (Certified Kubernetes Administrator) #150 CKAD (Certified Kubernetes Application Developper) #5 Japan Container Days v18.04 / v18.12 「Dockerだけじゃないコンテナ runtime 徹底比較」 「runc だけじゃない low level コンテナ runtime 徹底比較」 TWITTER / @makocchi Makoto Hasegawa FACEBOOK / makocchi0923 SELF INTRODUCTION
  2. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 3 Kubecon +

    CNCon 2018 NA recap ということで、今日はその中から 「Falco Deep Dive」 のセッション内容をご紹介します #じつは(半分)エアKubeConRecap
  3. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 5 Container Native

    Runtime Security つまり、コンテナ環境のセキュリティをモニタリングしてくれるソフトウェア オープンソース 最近 CNCF の sanbox プロジェクトになった Falco joins CNCF Sandbox https://sysdig.com/blog/falco-cncf-sandbox/ 主に開発しているのは sysdig 注意する点としては、モニタリングをするだけで実際に処理をブロックし たりすることはしない WHAT IS FALCO?
  4. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 8 Falco を実行すると

    DKMS(Dynamic Kernel Module Support) によって module が build & install される Install される module は falco_probe なので falco 自体をコンテナ環境で使う場合は privileged が必要 $ lsmod | grep falco falco_probe 622592 2 HOW TO MONITOR?
  5. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 9 Rule を

    yaml で記述することでモニタリングするイベントを定義する 例えばこんな感じの rule - rule: Write below binary dir desc: an attempt to write to any file below a set of binary directories condition: > bin_dir and open_write output: > File below a known binary directory opened for writing (user=%user.name command=%proc.cmdline file=%fd.name parent=%proc.pname pcmdline=%proc.pcmdline gparent=%proc.aname[2]) priority: ERROR tags: [filesystem] この場合は bin_dir を write 権限で open しようとすると検知してくれる ちなみに bin_dir は別の場所で定義されていて /bin, /sbin, /usr/bin, /usr/sbin が相当する HOW TO MONITOR?
  6. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 10 実際に /usr/bin

    以下に書き込もうとすると・・・ kenshiro $ sudo touch /usr/bin/you_are_shock # falco ͷ log 11:46:38.977124899: Error File below a known binary directory opened for writing (user=root command=touch / usr/bin/you_are_shock file=/usr/bin/you_are_shock parent=sudo pcmdline=sudo touch /usr/bin/you_are_shock gparent=bash) このように検知してくれる HOW TO MONITOR?
  7. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 12 Falco には検知した際にプログラムを実行する仕組みがある

    その仕組を使えば外部へ webhook とかすることでいろいろな通知が可能になる (slack等) やりかたは簡単 falco.yaml の設定を変更する # json Ͱͷ output Λ༗ޮʹ͢Δ json_output: true # program_output Ͱ slack ͷ webhook Λઃఆ͢Δ program_output: enabled: true keep_alive: false program: "jq '{text: .output}' | curl -d @- -X POST https://hooks.slack.com/services/foo/bar/baz" HOW TO NOTIFY?
  8. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 13 こんな感じに slack

    に通知されます さすがにこのままだと味もそっけもないので・・・もうすこし頑張ってみると・・・ HOW TO NOTIFY?
  9. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 15 詳しい設定とかはこちらを見てね Kubernetes

    に Falco を展開してアプリケーションの挙動をモニタリングする https://medium.com/@makocchi/falco-with-kubernetes-ja-1e2c045b3840 HOW TO NOTIFY?
  10. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 16 Falco で

    Kubernetes の audit log をモニタリングする
  11. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 18 Kubernetes API

    サーバーに対して行われた呼び出しを時系列で ログに記録することができる 怪しい API リクエストの調査、統計情報の収集、不要な API 呼び出しをモニタリングする為には audit logging を有効にする 必要がある ログの出力先はファイル以外にも対応している (Webhook 等) 最近の Falco (0.13.0) で audit log もモニタリングできるよう になった Falco 0.13.0 Released: Kubernetes Audit Events Support https://sysdig.com/blog/falco-0-13-released-kubernetes-audit-support/ K8S AUDIT LOGGING
  12. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 19 さっそく audit

    logging を有効にしてみよう ちなみに GKE では default で有効になっている Falco が port 8765 で webhook の endpoint として待ち 構えてくれるので、そこに対して audit log を投げつける! K8S AUDIT LOGGING ちなみに audit まわりの kube-apiserver の option はというと・・
  13. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 20 K8S AUDIT

    LOGGING --audit-dynamic-configuration --audit-log-batch-buffer-size --audit-log-batch-max-size --audit-log-batch-max-wait --audit-log-batch-throttle-burst --audit-log-batch-throttle-enable --audit-log-batch-throttle-qps --audit-log-format --audit-log-maxage --audit-log-maxbackup --audit-log-maxsize --audit-log-mode --audit-log-path --audit-log-truncate-enabled --audit-log-truncate-max-batch-size --audit-log-truncate-max-event-size --audit-log-version --audit-policy-file --audit-webhook-batch-buffer-size --audit-webhook-batch-max-size --audit-webhook-batch-max-wait --audit-webhook-batch-throttle-burst --audit-webhook-batch-throttle-enable --audit-webhook-batch-throttle-qps --audit-webhook-config-file --audit-webhook-initial-backoff --audit-webhook-mode --audit-webhook-truncate-enabled --audit-webhook-truncate-max-batch-size --audit-webhook-truncate-max-event-size --audit-webhook-version
  14. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 21 K8S AUDIT

    LOGGING --audit-dynamic-configuration --audit-log-batch-buffer-size --audit-log-batch-max-size --audit-log-batch-max-wait --audit-log-batch-throttle-burst --audit-log-batch-throttle-enable --audit-log-batch-throttle-qps --audit-log-format --audit-log-maxage --audit-log-maxbackup --audit-log-maxsize --audit-log-mode --audit-log-path --audit-log-truncate-enabled --audit-log-truncate-max-batch-size --audit-log-truncate-max-event-size --audit-log-version --audit-policy-file --audit-webhook-batch-buffer-size --audit-webhook-batch-max-size --audit-webhook-batch-max-wait --audit-webhook-batch-throttle-burst --audit-webhook-batch-throttle-enable --audit-webhook-batch-throttle-qps --audit-webhook-config-file --audit-webhook-initial-backoff --audit-webhook-mode --audit-webhook-truncate-enabled --audit-webhook-truncate-max-batch-size --audit-webhook-truncate-max-event-size --audit-webhook-version
  15. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 22 webhook の設定と

    policy は falco の repository にsample が用意されているのでそれを参考にすることが可能 例えば webhook の設定はこんな感じ (kube-apiserver と同じ host で falco が port 8765 で受け付ける場合) K8S AUDIT LOGGING apiVersion: v1 kind: Config clusters: - name: falco cluster: server: http://127.0.0.1:8765/k8s_audit contexts: - context: cluster: falco user: "" name: default-context current-context: default-context preferences: {} users: []
  16. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 23 audit policy

    は rbac に近い設定で定義する K8S AUDIT LOGGING apiVersion: audit.k8s.io/v1beta1 # This is required. kind: Policy # Don't generate audit events for all requests in RequestReceived stage. omitStages: - "RequestReceived" rules: # Log pod changes at RequestResponse level - level: RequestResponse resources: - group: "" # Resource "pods" doesn't match requests to any subresource of pods, # which is consistent with the RBAC policy. resources: ["pods", "deployments"] . . . .
  17. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 24 webhook と

    audit policy を有効にして kube-apiserver を再起動して設定を反映させる --audit-webhook-config-file=/etc/falco/webhook-config.yaml --audit-policy-file=/etc/falco/audit-policy.yaml あとは audit log を発火させれば OK “demo” user が kubectl get deployment をした時にはこんな感じで通知される K8S AUDIT LOGGING 10:20:20.540762112: Warning K8s Operation performed by user not in allowed list of users (user=demo target=<NA>/deployments verb=list uri=/apis/extensions/v1beta1/namespaces/ default/deployments?limit=500 resp=200) ね?簡単でしょ?
  18. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 26 audit の

    log を元に、rbac の manifest を自動生成してくれるツールも存在する https://github.com/liggitt/audit2rbac demo 動画もあって、是非見てもらいたい https://youtu.be/n2cD20moYe8 これを使えば足りない rbac を検知して、必要に応じて rbac を適用することができる クラスター管理者とかはけっこう嬉しいツールなんじゃないかな? K8S AUDIT LOGGING
  19. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 28 HOW TO

    INSTALL Helm の chart があるのでそれを使うのが楽 (stable/falco) https://github.com/helm/charts/tree/master/stable/falco Falco operator もある https://github.com/mumoshu/falco-operator さくっと入れられる!(Helm もしくは operator) Kubernetes 環境だけではなくて、もちろん docker run でも OK (falcosecurity/falco:tag) いろんなミドルウェアの rule を書いてくれている人も居る https://github.com/draios/falco-extras
  20. CLOUD NATIVE MEETUP TOKYO #6 | 2019/01/09 30 Monitoring Kubernetes

    Audit Log By Falco @makocchi ご清聴ありがとうございました!!