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

【OpsJAWS】踏み台サーバーって何がうれしいんだっけ?

 【OpsJAWS】踏み台サーバーって何がうれしいんだっけ?

2024/5/29 OpsJAWS Meetup #29 発表資料

Hisashi Hibino

May 29, 2024
Tweet

More Decks by Hisashi Hibino

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 ⽇⽐野 恒 - Hisashi Hibino Security Architect CISSP, CCSP,

    CISA, PMP, 情報処理安全確保⽀援⼠(000999) [執筆] Ø Elastic Stack 実践ガイド [Logstash/Beats 編](インプレス刊) Ø AWS 継続的セキュリティ実践ガイド (翔泳社刊) [略歴] l 2018 年まで 10 年間 IT コンサルティング会社に在籍 l 2019 年より株式会社リクルートのセキュリティ組織に所属 ログ基盤やクラウドセキュリティに関するプロジェクトを推進 l 2024 年にログスペクト株式会社を設⽴し、現在に⾄る 2
  2. 本⽇伝えたいこと 3 • EC2 への接続⽅式によって 監査に使えるログの⾒るべき ポイントが違う • EC2 シリアルコンソールと

    Cloud 9 経由での EC2 操作の場合 どのようなログが出るのか • 踏み台サーバーの必要性を含め セキュリティ要件に応じたログ 運⽤について改めて考えてみた
  3. アジェンダ 4 1. 踏み台サーバーとは 2. 今どきの踏み台環境 3. EC2 の監査に利⽤するログ 4.

    EC2 シリアルコンソール接続 5. Cloud9 経由での接続 6. EC2 への接続に関するログ 7. EC2 での操作に関するログ 8. 総括
  4. 踏み台サーバーとは 5 • ネットワーク内の重要なデータを保護するなどのセキュリティを強化するために配置する中継サーバーのこと (操作ログを適切に監査することで内部不正に対する牽制にも予防効果を発揮する) AWS Cloud VPC Private subnet

    Public subnet 保守端末 踏み台サーバー (Bastion) 保守対象サーバー SSH SSH/RDP ❶ アクセス制御 ❷ ログ管理 ❶ アクセス制御: 外部接続可能なサーバーの限定、利⽤者の限定、認証認可の制御など ❷ ログ管理: 接続ログおよび操作ログ(画⾯操作の録画含む)の保全、監査など
  5. AWS Cloud (本番環境) AWS Cloud (ログイン管理) 今どきの踏み台環境 6 保守端末 Management

    Console Management Console スイッチロール Session Manager Fleet Manager Cloud9 EC2 Instance Connect Endpoint Service VPC 保守対象サーバー (Windows) 保守対象サーバー (Linux) 接続 接続 接続 EC2 シリアル接続 ❶ アクセス制御 ❷ ログ管理 ログイン(MFA) 踏み台相当の役割 接続 ※ 保守端末から保守対象サーバーへ直接ログイン可能な経路は記載していない 接続 接続
  6. EC2 の監査に利⽤するログ 7 # 接続先 OS 接続⽅式 マネジメント コンソール操作 (ConsoleLogin)

    取得できるログ 1 Linux SSH クライアント なし セキュアログ ※1 , audit.log Windows 2 セッションマネジャー あり CloudTrail 監査ログ (StartSession) 3 SSH over セッションマネジャー なし CloudTrail 監査ログ (StartSession) 4 EC2 Instance Connect どちらも可 CloudTrail 監査ログ (SendSSHPublicKey) 5 EC2 シリアルコンソール あり 今回説明する内容 (Cloud9 は気になったのでオマケ的な感じ) 6 Cloud9 経由での EC2 接続(SSH)※2 あり 7 RDP クライアント なし Windows イベントログ 8 Fleet マネージャー あり CloudTrail 監査ログ (StartSession) 9 セッションマネジャー(PowerShell) あり CloudTrail 監査ログ (StartSession) 接続ログ 操作ログ(DBに対する操作など) script コマンド, 3rd Party Tool Session Activity Logging script コマンド, 3rd Party Tool script コマンド, 3rd Party Tool 3rd Party Tool 3rd Party Tool Session Activity Logging ※1 セキュアログ(RHEL系:/var/log/secure, Debian系: /var/log/auth.log, 今どきは journal ログ) ※2 既存インスタンスに対する接続の場合は、SSH 接続のみ(新規インスタンスの場合はセッションマネジャーでの接続も選択可) EC2 Instance Connect Endpoint なし CloudTrail 監査ログ (OpenTunnel) 3rd Party Tool 10 11 EC2 シリアルコンソール 【対象外】利⽤⽤途が緊急事態のシステム復旧となるため
  7. 【参考】OS にログインすれば journal ログは出る 10 # journalctl -f May 25

    15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal audit[9782]: USER_AUTH pid=9782 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:local_login_t:s0-s0:c0.c1023 msg='op=PAM:authenticationgrantors=pam_unix acct="root" exe="/usr/bin/login" hostname=ip-10-0-15- 250.ap-northeast-1.compute.internal addr=? terminal=/dev/ttyS0 res=success' May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal audit[9782]: USER_ACCT pid=9782 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:local_login_t:s0-s0:c0.c1023 msg='op=PAM:accounting grantors=pam_unix acct="root" exe="/usr/bin/login" hostname=ip-10-0-15- 250.ap-northeast-1.compute.internal addr=? terminal=/dev/ttyS0 res=success' May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal audit[9782]: CRED_ACQ pid=9782 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:local_login_t:s0-s0:c0.c1023 msg='op=PAM:setcred grantors=pam_unix acct="root" exe="/usr/bin/login" hostname=ip-10-0-15-250.ap- northeast-1.compute.internal addr=? terminal=/dev/ttyS0 res=success' May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal audit[9782]: USER_ROLE_CHANGE pid=9782 uid=0 auid=0 ses=2 subj=system_u:system_r:local_login_t:s0-s0:c0.c1023 msg='pam: default-context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 selected- context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 exe="/usr/bin/login" hostname=ip-10-0-15-250.ap-northeast-1.compute.internal addr=? terminal=/dev/ttyS0 res=success' May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal systemd[1]: Starting [email protected] - Refresh policy routes for ens5... May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal systemd-logind[1405]: New session 2 of user root. May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal systemd[1]: Started session-2.scope - Session 2 of User root. May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal login[9782]: pam_unix(login:session): session opened for user root(uid=0) by (uid=0) May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal login[9782]: DIALUP AT ttyS0 BY root May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal login[9782]: ROOT LOGIN ON ttyS0 May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal audit[9782]: USER_START pid=9782 uid=0 auid=0 ses=2 subj=system_u:system_r:local_login_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_selinux,pam_loginuid,pam_selinux,pam_namespace,pam_keyinit,pam_keyinit,pam_limits,pam_systemd,pam_unix,pam_umask,pam_lastlog acct="root" exe="/usr/bin/login" hostname=ip-10-0-15-250.ap-northeast-1.compute.internal addr=? terminal=/dev/ttyS0 res=success' May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal audit[9782]: CRED_REFR pid=9782 uid=0 auid=0 ses=2 subj=system_u:system_r:local_login_t:s0-s0:c0.c1023 msg='op=PAM:setcred grantors=pam_unix acct="root" exe="/usr/bin/login" hostname=ip-10-0-15-250.ap- northeast-1.compute.internal addr=? terminal=/dev/ttyS0 res=success' May 25 15:36:03 ip-10-0-15-250.ap-northeast-1.compute.internal audit[9782]: USER_LOGIN pid=9782 uid=0 auid=0 ses=2 subj=system_u:system_r:local_login_t:s0-s0:c0.c1023 msg='op=login id=0 exe="/usr/bin/login" hostname=ip-10-0-15-250.ap-northeast-1.compute.internal addr=? terminal=ttyS0 res=success'
  8. Cloud9 経由での接続(1/2) 11 # イベント名 サービス名 操作者 件数 説明 •

    [Cloud9 で開く] をクリックすると以下のイベントが件数に記載の回数だけ実⾏される (Decrypt と EnvironmentTokenSuccessfullyCreated は 接続後、画⾯を閉じるまで 4 分間隔でログが出⼒され続ける) KMS IAM ユーザー名 4 KMS キーによって暗号化された暗号テキストを復号化 1 Decrypt 2 GetEnvironmentConfig 3 EnvironmentTokenSuccessfullyCreated 4 ListNotificationHubs 5 DescribeEnvironmentStatus 6 DescribeRegions 7 UpdateEnvironmentSettings 8 UpdateMembershipSettings 9 UpdateUserSettings SNS EC2 Cloud9 - IAM ユーザー名 1 2 2 1 2 1 1 1 Cloud9 IDE の初期化に使⽤される設定情報を取得する許可を付与 Cloud9 IDE とユーザーの環境間を接続する認証トークンの作成成功 Cloud9 開発環境のステータス情報を取得する許可を付与 指定された開発環境の Cloud9 IDE 設定を更新する許可を付与 指定された環境メンバーの Cloud9 IDE 設定を更新する許可を付与 Cloud9 ユーザーの IDE 固有の設定を更新する許可を付与 NotificationHub を⼀覧表⽰するアクセス許可を付与 AWS アカウント内で有効になっているリージョンのリストを表⽰
  9. Cloud9 経由での接続(2/2) 12 May 26 22:15:02 ip-10-0-15-250.ap-northeast-1.compute.internal sshd[49848]: Accepted publickey

    for ec2-user from 18.179.48.128 port 26998 ssh2: RSA SHA256:yg1gXDnmfQAjooq77IcP7vbF/hmEnRazI6VqdqIxWQg May 26 22:15:02 ip-10-0-15-250.ap-northeast-1.compute.internal systemd-logind[2092]: New session 63 of user ec2-user. May 26 22:15:02 ip-10-0-15-250.ap-northeast-1.compute.internal systemd[1]: Started session-63.scope - Session 63 of User ec2-user. May 26 22:15:02 ip-10-0-15-250.ap-northeast-1.compute.internal sshd[49848]: pam_unix(sshd:session): session opened for user ec2-user(uid=1000) by (uid=0) May 26 22:15:02 ip-10-0-15-250.ap-northeast-1.compute.internal sshd[49851]: Received disconnect from 18.179.48.128 port 26998:11: disconnected by user May 26 22:15:02 ip-10-0-15-250.ap-northeast-1.compute.internal sshd[49851]: Disconnected from user ec2-user 18.179.48.128 port 26998 May 26 22:15:02 ip-10-0-15-250.ap-northeast-1.compute.internal sshd[49848]: pam_unix(sshd:session): session closed for user ec2-user May 26 22:15:02 ip-10-0-15-250.ap-northeast-1.compute.internal systemd[1]: session-63.scope: Deactivated successfully. May 26 22:15:02 ip-10-0-15-250.ap-northeast-1.compute.internal systemd-logind[2092]: Session 63 logged out. Waiting for processes to exit. May 26 22:15:02 ip-10-0-15-250.ap-northeast-1.compute.internal systemd-logind[2092]: Removed session 63. • 接続すると数秒間にセッション開始 4 回、セッション終了 2回、 EC2 の journal ログにイベントが出⼒される。 【セッション開始ログ(4回)】 【セッション終了ログ(2回)】
  10. EC2 への接続に関するログ(1/2) 13 • EC2 への接続において、CloudTrail 監査ログで⾒るべき主要なイベントは以下の通り AWS Cloud (本番環境)

    AWS Cloud (ログイン管理) 保守端末 Management Console Management Console Session Manager Fleet Manager Cloud9 EC2 Instance Connect Endpoint Service VPC 保守対象サーバー (Windows) 保守対象サーバー (Linux) EC2 シリアル接続 接続 ログイン(MFA) スイッチロール SwitchRole 接続 接続 接続 StartSession SendSSHPublicKey SendSerialConsoleSSHPublicKey 接続 接続 CheckMfa ※1 OpenTunnel ※1 MFA 有効時 ConsoleLogin 接続
  11. EC2 への接続に関するログ(2/2) 14 • それぞれのイベントにおける「いつ」「誰が」「どこから」「どこに」を記したフィールド名 # 1 2 3 4

    6 イベント名 ConsoleLogin SwitchRole StartSession SendSSHPublicKey OpenTunnel いつ eventTime 誰が UserIdentity.arn どこから SourceIPAddress どこに recipientAccountId requestParameters.target requestParameters.instanceId SourceIPAddress additinalEventData.SwitchFrom 5 SendSerialConsoleSSHPublicKey requestParameters.privateIpAddress
  12. EC2 での操作に関するログ 15 • 機密データを保存している DB に対する操作を追跡するには実⾏結果も含めて操作を記録する必要がある (下記表は、よく利⽤される代表的なツール/製品を主観で記載している ※1) #

    操作対象 OS 操作ログ 2 • script コマンド ※3 3 4 5 6 7 ツール名/製品名 URL https://manpages.ubuntu.com/manpages/jammy/ja/man1/script.1.html • Proofpoint ITM https://www.softbank.jp/biz/services/security/proofpoint-itm/ • CyberArk PSM https://www.macnica.co.jp/business/security/manufacturers/cyberark/ - iDoperation SC https://www.ntt-tx.co.jp/products/idoperationsc/ • ESS REC6 https://product.et-x.jp/rec6/ - Password Manager Pro https://www.manageengine.jp/products/Password_Manager_Pro/ - • • • • • テキスト 画⾯録画 • • • - • • - • • • • • Linux Windows ※1 PC 操作ログ取得ツール(SKYSEA、LANSCOPE など)、Journal ログは操作の実⾏結果をすべて追跡できないため、対象外とする ※2 Windows の場合は、PowerShellの操作のみ記録可能です ※3 script コマンドは Session Activity Logging と同等レベルのログが取得可能です(Session Activity Logging は script コマンドで実装されている) 1 • Session Activity Logging https://docs.aws.amazon.com/ja_jp/systems- manager/latest/userguide/session-manager-logging.html - • ※2
  13. 総括 16 • 以下、総括です。 1. SSH/RDP クライアントでの直接接続以外は CloudTrail 監査ログに何らかの接続ログが出る。 2.

    Cloud9 はおまけだが、既存インスタンスに SSH 接続する場合は CloudTrail 監査ログに接続ログは出ない。 3. 操作ログが必要な場合は踏み台サーバーに 3rd Party Tool を導⼊した⽅が運⽤管理性が⾼い。 (セッションマネジャーだけは Session Activity Log で集中管理が可能) 本番環境で機密性の⾼い DB 操作などをログ監査するには 踏み台サーバの導⼊は今でも必要になる (逆に接続ログだけで良いならログ観点での踏み台は必須ではない)
  14. 参考URL script コマンドで作業ログを記録 https://dev.classmethod.jp/articles/scriptcommand/ script コマンドでログを⾃動取得する https://qiita.com/sugar_salt75/items/4d35f1de7b174e80dde1 EC2 Instance Connect

    のアップデートを受けて、EC2インスタンスへのログイン⽅法を整理してみる https://blog.serverworks.co.jp/ec2-instance/how-to-connect パブリックな EC2 Instance Connect (Endpoint未使⽤)と EC2 Instance Connect Endpoint でログは変わるのか検証してみた https://dev.classmethod.jp/articles/ens-instance-connect-log-survey/ 新しい EC2 Serial Console による、起動とネットワーク問題のトラブルシューティング https://aws.amazon.com/jp/blogs/news/troubleshoot-boot-and-networking-issues-with-new-ec2-serial-console/ AWS Cloud9 で既存の EC2 インスタンスに接続する https://blog.akanumahiroaki.com/entry/2019/03/09/235000 【CloudTrail解説編】AWSマネージメントコンソールのログイン監視 https://qiita.com/hssh2_bin/items/b71da0455cf21e4c823d StartSession https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartSession.html SendSerialConsoleSSHPublicKey https://docs.aws.amazon.com/ec2-instance-connect/latest/APIReference/API_SendSerialConsoleSSHPublicKey.html SendSSHPublicKey https://docs.aws.amazon.com/ec2-instance-connect/latest/APIReference/API_SendSSHPublicKey.html 28