EC2からKubernetesへの移行をセキュリティから考える

Aa438786215088ca65d9d0b42ef37675?s=47 Eiji Sugiura
February 23, 2019

 EC2からKubernetesへの移行をセキュリティから考える

JAWS DAYS 2019 E track 2019-02-23 14:10-14:40 の登壇資料です。

freeeが扱う情報の恐さを体験していただいたのち、Cyber Kill Chainフレームワークに沿って、EC2 instanceからKubernetesにサービスを移行する作業を、可能な限りの最高速でシステムを実装しつつセキュリティを担保するために、どう考えてきたかを紹介します。

後半の「EC2からKubernetesへの移行をモニタリングから考える」は、以下です。
https://speakerdeck.com/atk/freeeniokeru-kubernetesjian-shi-ji-pan

Aa438786215088ca65d9d0b42ef37675?s=128

Eiji Sugiura

February 23, 2019
Tweet

Transcript

  1. freee 株式会社 EC2->k8s移行をセキュリティから考える JAWS2019

  2. 10年間、受託開発。TCP/IPとかLinux Kernel netfilter 10年間、MSSPでUTMのOSとサービス基盤を開発。 2017年12月にfreeeにjoin。 Eiji Sugiura 杉浦 英史 freee株式会社

    CSIRT専属エンジニア 2 Incident Response SRE
  3. Overview  03 freee の Kubernetesとは?  02 freee は EC2をどう運用してきたのか?  01 freee の 直面する恐怖

  4. 01 freee の直面する恐怖 4 Section

  5. 創業からIPOまで、中小企業活性化のためのサービスを一気通貫で提供 freee会社概要 ❂ 納税する ↗ 育てる ↻ 運営する ✩ はじめる

    会社設立 freee 開業 freee クラウド会計ソフト freee 人事労務 freee (マイナンバー管理 freee 含む) クラウド申告 freee 161億603万円 (資本準備金等含む) 従業員数 事業内容 クラウド型バックオフィスサービスの開発・販売 資本金 設立年月日 2012年7月 505名(2019年1月末時点) 2017年「働きがいのある会社」 ランキング3位
  6. 会計・給与共に法人シェアNo.1 クラウド給与ソフト 市場 40% クラウド会計ソフト 市場 35.2% 100万 事業所 以上

    10万 事業所 以上 * BCN調べ * MM総研調べ * 2017年8月より、クラウド給与計算ソフト freeeは、機能を強化し、新たに 「人事労務 freee」というサービス名に変更しました。  
  7. 最新テクノロジーでリアルタイムデータ収集 7 クレジット 金融機関 決済サービス 業務データ freee Core Engine

  8. 8 金融機関・ 各種サービス連携数 3,822 POSレジ 金融機関 ログイン・ 認証 業務システム ECサイト

    共有ツール 決済サービス ファイル取込 クラウド会計ソフト 業界最多の連携数を実現
  9. 253/260 の信用金庫とAPI連携契約を締結 業界初 *2019年1月30日時点  *業界団体である全国信用金庫協会の取り次ぎ方式による信用金庫とフィンテック企業とのAPI連携は、今回が初の取り組みです。 

  10. 生の経営情報 深刻な情報漏洩 金融機関サイトからのスクレイピング、API連携

  11. 1/30より提供開始! https://app.secure.freee.co.jp/ freeeアプリストア

  12. アプリストア→プラットホームへ ユーザー 開発者 アプリストア

  13. 電子決済等代行業 第1号登録

  14. freeeの失敗=Fintech業界の危機 一企業を超えた悪影響 Fintech業界のセキュリティにおいて重要な役割を担っている

  15.   あらゆるツールを用い証憑を電子取り込み 複合機・スキャナ 【API連携】 ファイル取込

  16. 機械学習で文字認識した結果をチェックし高速処理 OCR結果 推測結果 OCR結果

  17. 生の画像データ 確実な情報漏えいの証左 匿名化が難しい

  18.   いつでもどこでも推測された仕訳をチェック

  19. 19   機械学習でモレ・ダブリ・ミスを自動検知(AI月次監査)  【監査例】 ◦ 仕訳修正時の類似仕訳を推薦 ◦ 受取利息の源泉税未登録アラート ◦ 固定資産計上アラート

    ◦ 同期した明細の仕訳登録漏れ ◦ 源泉仕訳の登録漏れ ◦ 定期発生する仕訳の補助科目の入力漏れ
  20. 自動で売掛金の消込を推測

  21. 1010001110110101010101 0100010110101001010100 0100010011010101010100 10100010110010111010100 1010001110110101010101 0100010110101001010100 0100010011010101010100 10100010110010111010100 機械学習を用い作業の自動化を促進 自動で経理

    -テキスト情報処理- 銀行やクレジットカードなど、お金の管理をするサービスと連 携。日々の入出金情報を自動取得、さらに人工知能が仕訳 を推測し、業務量を大幅に削減可能に。 連続取引登録 -画像情報処理- 紙として発生してしまう領収書などは、OCR技術で分析。画 像データから、日付や金額、勘定科目を推測し、手入力の負 担を削減可能に。 機械学習で仕訳を推測し ルール化 決済サービス 預金データ クレジット POS・レジ 各種データ 推測 推測 推測 =金額:1840円 =日付:3月15日 =電話番号:旅費交通費 画像から文字を推測し ルール化 機械学習で モレ・ダブリ・ミスを検知 AI月次監査 -異常検知- 試算表及び月次推移の閲覧・確認時に「処理モレ、仕訳のダ ブリ・記帳ミス」を自動的に発見し、対処事項をリコメンド。  
  22. データの集約 大規模情報漏洩 機械学習のためにデータを集約

  23. 恐怖 生の経営情報 リアルタイムで把握 Fintech業界の危機 業界のセキュリティを担う 生の画像データ 匿名化が難しい 集積されたデータ 機械学習へのインプット

  24. スタートアップらしくリスクは取り、 高いセキュリティも実現する あえて、二兎を追う

  25. 02 freee は EC2をどう運用してきたのか? 25 Section

  26. AWS=責任共有モデル 26 OSから上は、自分達で護る

  27. IaaSとしてのAWS 2018-01-04 MeltDown/Spectre -> 2018-01-12 EC2対処完了 CPUの投機的実行の脆弱性 最悪の場合、隣のInstanceのRAMが見えてしまう可能性 2019-02-11 CVE-2019-5736

    Docker containerを管理するruncの脆弱性 最悪の場合、host OSのroot権限を奪取されてしまう可能性
  28. security group EC2 instance上にSaaS構築可能! 2012年 AWS Tokyo region ELB web

    instances Amazon RDS Amazon S3 log users
  29. CloudNative AWS Tokyo regionと共に 物理的な制限からの解放

  30. Cloud vs On-Premisses クラウドとオンプレどちらが安全? 安全かどうかは運用する人に依存する問題

  31. security group 外部と内部からの侵入を想定 想定攻略経路/Cyber Kill Chain ELB web instances Amazon

    RDS Amazon S3 log intruder Office intruder 侵入 輸送 探索 潜伏 奪取
  32. Passive Defense/Active Defense 多層防御の考え方 Passive Defense Discover logをとる、履歴を残しておく Detect 異常値を検知する

    Active Defense Deny 止める : Firewall/IPS packet drop Disrupt 妨害する : AntiMalware Degrade 時間稼ぎ : Ratelimit Deceive 撹乱する : HoneyPot Destroy 破壊する : 警察に連絡
  33. 多層防御 銀の弾丸は無い Logを取ってAlert出さないと、そもそも防御できない 攻略段階の全てで、Passive/Active Defense!

  34. Availability Zone 2 security group AWS中心の話 多層防御 with EC2 Auto

    Scaling group Availability Zone 1 ELB web instances Amazon RDS Amazon Redshift Amazon S3 secure.freee.co.jp log log GuardDuty users Multi Factor Authentication Risk Based Authentication Network Segmentation Address Space Layout Randomization Host Audit Application Log Access Log VPC Flow Log AWS WAF
  35. 多層防御 with EC2 攻略手順 Passive/Active Defense 輸送 Web access/Console access

    SecurityGroup WAF IPS 侵入 EC2 instance RAM access AccessLog PackageUpdate ASLR 潜伏 EC2 instance File access AuditLog AntiMalware FileACL 探索 VPC内の探索 VPC flow log NetworkSegmentation 奪取 RDSやS3からの情報略取 QueryLog ObjectLog SecurityGroup AWSが用意してくれるもの EC2 instanceを守るのは自分達
  36. インターネットからの攻略 HTTP request regex filter WAF ELB TCP port restriction

    IPS = HTTP request signature filter Ratelimit/session/URI Application Logic AntiMalware
  37. SSH consoleからの侵入 MFA security group IP restriction Office Login/Logout Remote

    copy restriction Amazon S3 Console logging
  38. account B account A Management Console/awscliからの侵入 export AWS_ACCESS_KEY_ID=AK... export AWS_SECRET_ACCESS_KEY=....

    AWS CloudTrail user A user B user A user B Web Console awscli Username/Password Secretの文字列を渡してしまうと...
  39. Management Console/awscliからの侵入 SAML Assumed Role AWS CloudTrail admin account A

    user admin account B user MFA Web Console awscli Secretの文字列を渡さない
  40. 侵入を防いだら終わりではありません 侵入されることを前提に 探索や奪取も検知する体制を整えることが重要です。

  41. security group security group [WIP]内部探索 VPC flow logでRejectは最低限取っておく CloudWatch virtual

    private cloud VPC flow log
  42. [WIP]インターネットへの情報漏洩 DNS query virtual private cloud intruder NTP REST API

    JSON RPC SMTP security group CloudWatch VPC flow log Security GroupのOutbound any openしてませんか? Start/End Timestamp Src/Dst IP Src/Dst Port
  43. 想定攻略経路 インターネットから 普通にSign Upしてから、侵入開始 Consoleから Web、SSH、awscliからの侵入 内部探索 外部からの接続を確保しつつ探索 情報漏洩 HTTP、DNS、NTPなど通

    常の通 信を偽 装
  44. S3 Centric/Passive Defense S3にログを集めて、SlackでAlert! AWS WAF Amazon S3 VPC flow

    logs Engineer/CSIRT
  45. Incident Response Alert 調査/解析 修正 Triage 評価/予測 Event driven Intelligence

    driven deployの影響? 潜在bug発見? resource不足? 誤検知? 45 対処必要? Application Signature ACL 脅威検知 お客様 問い合わせ OSINT 定常監視
  46. 実際のところ... 最近のお話 全てが、うまくいくわけではありません。

  47. AWS WAFの進化 Sample Log -> 2018-09 Full Log対応! managed signatureはblackbox

    payloadのどこが検知されたのかは、わ からない AWS WAF Amazon S3 ELB WafCharmはsignatureがwhitebox! Requestのどこを検知したかをFullLogから理 解することができる
  48. DeepSecurity 20分ほどかかる Amazon SQS fluentd Amazon S3 syslog 1分以内に通知 Alertの配送方法

  49. GuardDutyは、転ばぬ先の杖 Pros 外部からのPort Scan検知 内部からmalicious site A recordへのDNS Query検知 IAM

    Userの不審な動きの検知 Cons 検知までに数時間かかる、即時性は無い Stagingの運用を確認してから、Productionを建てること DNS query logは残っていない、自分たちで取っておかないと... GuardDuty
  50. 03 freee の Kubernetesとは? Section

  51. なぜKubernetesなのか? 大きすぎるアプリケーション 開発環境構築に時間がかかる deployに時間がかかる 2時間 role backにも時間がかかる 1時間 そうだMicro Serviceだ

    開発環境構築はcontainerを持って来るだけ deployを15分 role back は20秒
  52. Lock in? or vs. AWS WAF Amazon S3 ELB Amazon

    RDS CloudWatch い い とこどり
  53. Kubernetes on AWS AWSでk8s 1年ほど前の時点では...

  54. Fargate & ECS Pod≒Taskを管理 Pod Worker Node Cluster WorkerNode+Podを管理 2018-07

    Tokyo region利用可能
  55. kube-aws AWSでk8s Cluster

  56. Kubernetes on AWS (2018 ver.) Pod Worker Node Controller Node

    Cluster kube-aws helm helmfile Cluster
  57. kube-aws Pros Fargateとの違い Multi-AZ対応 既存VPN/Subnetにdeploy Public/Private Network etcd冗長化: 最低3台でclusterを組む Node

    Pool: Role別のOn-demand, Reserved, Spotの使い分け ClusterAutoScaling: 負荷に応じてNode ScaleOut/In
  58. account A Secretの暗号化 KMSでencrypt/decrypt、手元に鍵を置かない admin MFA AWS KMS https://github.com/mozilla/sops Private

    key Secret data ... Secret Assumed Role encrypt decrypt SOPS
  59. kube-aws Cons 解決しなければならない問題

  60. DeepSecurityが動かない not compatible with

  61. security group 外部と内部からの侵入を想定 想定攻略経路/Cyber Kill Chain ELB web instances Amazon

    RDS Amazon S3 log intruder Office intruder 侵入 輸送 探索 潜伏 奪取
  62. 多層防御 with Kubernetes on EC2 攻撃 防御 輸送 Web access/Console

    access NetworkPolicy IPS 侵入 k8s pod/container RAM access AccessLog RollingUpdate ASLR 潜伏 k8s node File access AuditLog AntiMalware FileACL 探索 k8s namespacesの探索 SystemCallLog NamespaceIsolation 奪取 DBやS3からの情報略取 QueryLog ObjectLog NetworkPolicy なくなってしまったもの AWSが用意してくれるもの
  63. インターネットからの攻略 HTTP request regex filter WAF ELB TCP port restriction

    IPS = HTTP request signature filter Ratelimit/session/URI Application Logic AntiMalware
  64. k8s API Serverからの侵入 MFA IP restriction Office Login/Logout Remote copy

    restriction Amazon S3 Console logging 443/tcp経由で直接podに入れてしまう API server kubectl exec -it $POD /bin/bash
  65. Cluster : Namespace = 1 : N Namespaceの制御は、RBACやNetworkPolicyで行う Pod Worker

    Node Namespace Namespace Namespace Controller Node Cluster security group
  66. k8s <-> AWS Role mapping kiam k8s Pod -> EC2

    Instance Profile aws-iam-authenticator k8s Role -> IAM Role IAM
  67. 神Clusterの懸念 Cluster内で扱う対象が複雑すぎて、気軽に変更できない、消せない Pod Worker Node Namespace Namespace Namespace Controller Node

    Cluster security group Network Policy RBAC  IAM Security Group AutoScaling
  68. Amazon EKS managed k8s control plane

  69. 69 Kubernetes on AWS (2019 ver.) Pod Worker Node 2018-12-20

    Tokyo regionにやってきた! Managed Controller Node Cluster Cluster
  70. 70 Amazon EKS Pros kube-awsとの違い Nodeに公式のAMIが利用できる etcd、api-gatewayをmanagedで提供 Clusterの追加削除が簡単 Pod Worker

    Node Managed Controller Node Cluster
  71. 71 DeepSecurityが動く compatible with

  72. 72 AWS Session Managerの導入 MFA IP restriction Office Login/Logout Remote

    copy restriction Amazon S3 Console logging aws ssm-agent start-session -t i-XXXXXXXX Session Manager AWS CloudTrail Systems Manager
  73. 73 [WIP]内部探索/インターネットへの情報漏洩 system call logging + alert CiliunNetworkPolicy Namespace Namespace

    DNS query Web API SMTP
  74. eks cluster 公式のgetting startが辛い https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/getting-started.html

  75. 75 kubectlの嵐 aws eks create-cluster --name devel --role-arn arn:aws:iam::111122223333:role/eks-service-role-AWSServiceRoleForAmazonEKS-EXAMPLEBKZRQR --resources-vpc-config

    subnetIds=subnet-a9189fe2,subnet-50432629,securityGroupIds=sg-f5c54184 aws eks update-kubeconfig --name cluster_name curl -O https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2018-11-07/aws-auth-cm.yaml kubectl apply -f aws-auth-cm.yaml kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.10/nvidia-device-plugin.yml kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-controller.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-service.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-slave-controller.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/guestbook-controller.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/guestbook-service.json
  76. eksctl EKS向けのCLI wrapper kubectlからの解放

  77. Cluster : Namespace = 1 : 1 Single Namespace Pod

    Worker Node Managed Controller Node Namespace Cluster security group Namespace Namespace
  78. 78 Single Cluster NetworkPolicy ingress=1サービスに必要なものだけ egress = 閉じる IAM/RBAC 1:1でmapping!

    ClusterAutoScaling 1サービスのことだけ考えればよい
  79. 79 [WIP] Cluster Blue-Green deploy Clusterごと新しいものに入れ替える! Namespace Route 53 ELB

    Namespace deploy rollback
  80. eksctl k8sに移行中 絶賛deploy中

  81. まとめ CloudNative freeeはAWSと共に kube-aws multi namespace 多層防御 ログを取り、アラートを出して Incident Response

    EKS/eksctl single namespace
  82. managedでできるものはmanagedで 本質的(マジ)価値のあるものへの開発に集中 車輪の再発明はしない

  83. スモールビジネスを、 世界の主役に。

  84. おまけ Visualize/可視化 多量のログ、アラートの管理をどうやって楽に行うか https://developers.freee.co.jp/entry/cyber-kill-chain-security-hub-deepsecurit y

  85. 85 Caution! 本sessionでの見解は、現時点の私見です。 3ヶ月後、半年後には、別の見解を述べる可能性が大いにあります。