Red Hat Enterprise Linux 8 の セキュリティトピック

79c2f7db29ee6df3e1ceb85c6a0126d3?s=47 Kazuo Moriwaka
September 30, 2019

Red Hat Enterprise Linux 8 の セキュリティトピック

OSSセキュリティ技術の会 第六回勉強会 で使った資料です
https://secureoss-sig.connpass.com/event/145125/

79c2f7db29ee6df3e1ceb85c6a0126d3?s=128

Kazuo Moriwaka

September 30, 2019
Tweet

Transcript

  1. 2.

    2 Copyright Red Hat K.K. All rights reserved. このスライドの位置付けと目的 •

    対象 • Red Hat Enterprise Linux 8のセキュリティ関連のトピックが 気になる人 • 目的 • 目新しい要素を紹介して試してもらう
  2. 3.

    3 Copyright Red Hat K.K. All rights reserved. 概要 •

    RHEL8概要 • RHEL8のセキュリティトピック • 各トピックをもう少し紹介 • システム全体の暗号化ポリシー設定 • Web Consoleの権限管理 • 端末のセッション記録
  3. 5.

    5 Copyright Red Hat K.K. All rights reserved. Red Hat

    Enterprise Linux 8の概要 • Red Hat Enterprise Linux(RHEL)の7番目のリリース • Fedora 28をベースとして開発された企業むけOS • 複数ハードウェアアーキテクチャ、認定仮想化環境、および 認定クラウド環境での動作をサポート • 2019年5月7日出荷、2029年5月まで10年間サポート • 各種アドオンを提供 • 多数のシステムを統合管理(Smart Management) • 高可用性クラスタ(High Availability, Resilient Storage)
  4. 6.

    6 Copyright Red Hat K.K. All rights reserved. RHEL 7までと同じもの、変わるもの

    同じもの • エンタープライズ向けOS • 開発プロセス(Fedora) • ほとんどのコンポーネントを10 年間サポート • 提供製品、アドオン • Satelliteによる管理 変わるもの • ソフトウェア提供方式の統一 • 予想できるリリース頻度 • 一部コンポーネントのサポート 期間は短期間 • 頻繁なアプリケーションの更新 • Red Hat Insightsによるプロアク ティブサポート
  5. 7.

    7 Copyright Red Hat K.K. All rights reserved. 頻繁なアプリケーションの更新 •

    AppStreamのmoduleとして、RHELの10年ライフサイクル と同期しないソフトウェアを提供 • 開発ツールなどの新バージョンを頻繁に提供 • RHEL7までの Software Collections, Developer Toolsetの後継 RHEL 8 の 10年ライフサイクル Ver x.3 を3年 Ver x.5 を 3年 Ver x.7 を3年 ライフサイクル終了後は セキュリティfixも出ないので 要注意
  6. 8.

    8 Copyright Red Hat K.K. All rights reserved. Red Hat

    Insightsによるプロアクティブサポート RHEL 8のGAと同時に、従来は別製品 として販売していたRed Hat Insightsを RHELに同梱 全てのRHELユーザはRed Hat Insightsによ る診断サービスを利用できます エージェントでの 情報収集 ナレッジに基づく レポート レポートに 対応手順も記載
  7. 10.

    10 Copyright Red Hat K.K. All rights reserved. ストレージ •

    LUKSv2サポート • ストレージ暗号化のデフォルトフォーマットがLUKSv1から LUKSv2に変更 → RHEL 7で暗号化したストレージはRHEL 8で読めるが逆は 読めない https://gitlab.com/cryptsetup/cryptsetup/blob/master/docs/on-disk-format-luks2.pdf
  8. 11.

    11 Copyright Red Hat K.K. All rights reserved. 暗号化ポリシーの設定 •

    利用できる暗号化スイートの設定を簡単に実施したい • どこまで弱い暗号化を許容すべきか? • 相互運用性を重視して設定を行いたい→弱い暗号も許可 • セキュリティを重視して強度の高い暗号化を強制したい→強 い暗号のみを利用 • 暗号化を扱うソフトウェアをまとめて設定 • crypt-policies によりGnuTLS, OpenSSL, NSS, OpenJDK, libkrb5, BIND, OpenSSH をまとめて設定 https://gitlab.com/redhat-crypto/fedora-crypto-policies
  9. 12.

    12 Copyright Red Hat K.K. All rights reserved. Web Console

    サーバ管理用のWebUIを提供 • 仮想マシン • ファイアウォール • ストレージ暗号化 • アイデンティティ管理によるSSO対応 • ログ閲覧、サービス、ネットワーク、 ストレージの管理 など https://cockpit-project.org/
  10. 13.

    13 Copyright Red Hat K.K. All rights reserved. 端末のセッション記録 •

    端末への入出力をログに記録、再生するtlogを同梱 • 前述のWeb Consoleとも統合 • いろいろと制限はあるものの前提条件を揃えれば監査に使え そう
  11. 17.

    5 GENERAL Distribution 背景 背景 RHEL が利用する暗号化方式には複数の方式があります 接続時のプロトコル、暗号化のアルゴリズム、署名のアルゴリズム、ハッシュ関数 などそれぞれにバリエーションがあります。 暗号化スイートは時とともに弱くなります

    コンピュータの高速化や、暗号の研究が進んで攻撃手法が進化することで、暗号を 解くために必要な時間が短くなり、やがて実用的な意味がなくなります。 NIST などは推奨する暗号化スイートや、利用すべきでないアルゴリズムなどを発 表しています。 ( 攻撃する側からみると ) システムで一番弱い暗号化を利用し ている箇所がそのシステムの暗号強度 一部で強力な暗号化を利用し、別の箇所では弱い暗号化を利用している場合、一番 弱いところを狙われます
  12. 20.

    8 GENERAL Distribution crypto-policies とは何か ? crypto-policies とは何か ? システム全体の暗号化ポリシー設定を行うツール

    RHEL8.0 からの新機能です。 GnuTLS, OpenSSL, NSS, OpenJDK, libkrb5, BIND, OpenSSH, libreswan のデフォルトをまとめて設定します。これらのライブラリやア プリケーションのパッケージと連携しています。 (RHEL 8.1 で libssh に対応予定 ) あらかじめ定義されたプロファイルから選択する 以下から選択します • 現在の推奨 (DEFAULT) • 数年前のシステムとの互換性を提供するためのやや弱い設定 (LEGACY) • 近い将来でも安全であろう設定 (FUTURE) • FIPS140-2 要件 (FIPS)
  13. 21.

    9 GENERAL Distribution crypto-policies 関連コマンド crypto-policies 関連コマンド 管理者が利用するコマンド • update-crypto-policies

    利用例 # update-crypto-policies --show DEFAULT # update-crypto-policies --set LEGACY Setting system policy to LEGACY Note: System-wide crypto policies are applied on application start-up. It is recommended to restart the system for the change of policies to fully take place.
  14. 22.

    10 GENERAL Distribution ポリシーの基本的な選び方 ポリシーの基本的な選び方 特に何もなければ DEFAULT のまま DEFAULT ポリシーは現在推奨される暗号化の設定です

    古い機器との接続に問題がある場合には LEGACY にする LEGACY ではセキュリティ上推奨されないプロトコルやアルゴリズムが許可されます 特定の暗号化スイートが指名されている場合には アプリケーションを個別に設定する crypto-policies のデフォルト設定を無視してアプリケーション毎に設定します。 crypto-policies の upstream を見ると、将来のバージョンではポリシーを独自に作成 できるようになりそうです。
  15. 23.

    11 GENERAL Distribution LEGACY DEFAULT FIPS FUTURE IKEv1 no no

    no no 3DES yes no no no RC4 yes no no no DH min. 1024-bit min. 2048-bit min. 2048-bit min. 3072-bit RSA min. 1024-bit min. 2048-bit min. 2048-bit min. 3072-bit DSA yes no no no TLS v1.0 yes no no no TLS v1.1 yes no no no SHA-1 デジタル署名 yes yes no no CBC モード暗号 yes yes yes no 対称暗号 < 256 ビット鍵 yes yes yes no SHA-1 および SHA-224 の署名 を持つ証明書 yes yes yes no
  16. 24.

    12 GENERAL Distribution 参考 : RHEL8 で利用できないアルゴリズムとプロトコル 参考 : RHEL8

    で利用できないアルゴリズムとプロトコル RHEL8 から排除された暗号スイートとプロトコル 以下はソースコードに含まれないか、ビルド時に無効にされています。 設定によらず利用できません。 • DES (RHEL 7 以降 ) • すべてのエクスポートグレードの暗号化スイート (RHEL 7 以降 ) • 署名内の MD5 (RHEL 7 以降 ) • SSLv2 (RHEL 7 以降 ) • SSLv3 (RHEL 8 以降 ) • すべての ECC 曲線 < 224 ビット (RHEL 6 以降 ) • すべてのバイナリーフィールドの ECC 曲線 (RHEL 6 以降 )
  17. 26.

    14 GENERAL Distribution crypto-policies の注意点 crypto-policies の注意点 crypto-policies は全ての暗号化を網羅できていません 暗号化をあつかう全ての箇所を網羅できていません。

    gpg2 、 luks2 など暗号化を 扱うが crypto-policies で管理されていないものがあります。 アプリケーション個別での設定でオーバライドされます crypto-policies は各ライブラリやアプリケーションのデフォルト設定に影響します が強制力はありません。アプリケーションで明示的に設定が行われると、そちらが 優先されます。 オーバライドしたい場合 一部のソフトウェアは単純に設定を行うだけでオーバライドできないものがあり ます。 RHEL8 ドキュメント「セキュリティーの強化」内「アプリケーションをシ ステム全体のポリシーに従わないように除外」を参照ください。 https://red.ht/2I7gxz2
  18. 27.

    15 GENERAL Distribution まとめ まとめ • Red Hat Enterprise Linux

    8 でシステム全体の暗号化ポリ シー設定が追加されました • 簡単にまとめて設定が可能です • 通常は DEFAULT と LEGACY のみ考慮すれば十分です • 個別のアプリケーションでポリシーをオーバライドすること も可能です
  19. 28.

    1 Red Hat Enterprise Linux 8 の Web Console を守る技術

    森若 和雄 Solution Architect 2019-09-27
  20. 29.

    3 Copyright Red Hat K.K. All rights reserved. 概要 •

    Web Console(cockpit) • ログイン時の動作 • TCPポートの制限 • Identity Managementとの統合
  21. 30.

    4 Copyright Red Hat K.K. All rights reserved. Web Console

    サーバ管理用のWeb UIを提供 • サービス管理 • アカウント管理 • ネットワーク管理 • ファイアウォール管理 • ログ閲覧 • 仮想マシン管理 • 仮想端末 などの管理機能を提供 https://cockpit-project.org/
  22. 31.

    5 Copyright Red Hat K.K. All rights reserved. インストール •

    パッケージ導入 • yum install -y cockpit • ファイアウォール設定 • firewall-cmd --add-service=cockpit --permanent • firewall-cmd --reload • サーバ証明書配置 • /etc/cockpit/ws-certs.d/に証明書を配置(なければ自己署名証明書を自動生成) • 起動設定 • systemctl enable --now cockpit.socket • ブラウザで接続 • firefox https://example.com:9090/
  23. 32.

    6 Copyright Red Hat K.K. All rights reserved. よくある(?)「Webコンソール」のイメージ(偏見) •

    外部コマンド実行 やファイル変更を root権限で実施 • 「root権限で何で もできるプロセ ス」を実行 • 独自の権限管理設 定やDBが必要 root権限で 何でもできる プロセス httpd 権限 管理 外部プロセス 外部プロセス ファイル UI DB
  24. 33.

    7 Copyright Red Hat K.K. All rights reserved. cockpitは? •

    ログインしたユーザの権限で実施 • root権限はセッション開始のみ • OSの権限管理をそのまま使う cockpit-session root権限で動作 ログイン処理 外部プロセス 外部プロセス ファイル UI cockpit-bridge ユーザの 権限で 何でもやる cockpit-ws ログインと 接続 pam GSSAPI OSの 権限管理 生成 認証情報 リクエスト
  25. 34.

    8 Copyright Red Hat K.K. All rights reserved. ログイン時の動作 1.

    cockpit-wsがログイン 画面を表示 2. 認証情報を送付 • ID+Password • GSSAPI 3. cockpit-sessionを実行 4. PAMで認証 5. 認証ユーザでcockpit-bridgeを実行 6. 以下チェックのある場合pkexecで root権限のcockpit-bridgeを起動 cockpit-session root権限で動作 ログイン処理 cockpit-bridge ユーザの 権限で 何でもやる cockpit-ws ログインと 接続 pam GSSAPI 生成 リクエスト PolicyKit経由でroot権限で実行する デフォルト設定ではwheelグループの ユーザのみ成功 cockpit-bridge --privilege rootユーザの 権限で 何でもやる 生 成 認証情報
  26. 35.

    9 Copyright Red Hat K.K. All rights reserved. ログイン後 •

    ブラウザ上のjavascriptとcockpit-bridge(およびcockpit-bridge --privilege)が通信 • cockpit-bridge本体と、packageと呼ばれるプラグインがdbus, REST API, プロセス 実行など各種の操作を実施。通常のユーザ権限管理をそのまま利用。 cockpit-session セッション管理 だけ 外部プロセス 外部プロセス ファイル UI cockpit-bridge ユーザの 権限で 何でもやる cockpit-ws ログインと 接続 OSの 権限管理
  27. 36.

    10 Copyright Red Hat K.K. All rights reserved. ログイン関連について •

    権限を必要最小限に制限したプロセスに分割 • cockpit-wsプロセスはcockpit-wsユーザで待ちうけと接続、cockpit-session の起動とcockpit-bridgeとの通信を実行 • cockpit-sessionは認証を行いセッションを開始。ユーザ自身の権限(指定 によりroot権限も)で動作するcockpit-bridgeを起動するだけ • SELinuxのポリシーも準備されている • enforcingで使うことでcockpit-wsやcockpit-sessionに未知の脆弱性がある 場合にも任意プロセス実行などを予防 • 自己署名証明書の利用はお勧めしません • ブラウザとcockpit-ws間の通信路が信頼できてはじめて安全
  28. 37.

    11 Copyright Red Hat K.K. All rights reserved. TCPポートを制限したい •

    Cockpitは通常9090番ポートをlisten • Cockpit同士でsshによる通信を行う • cockpit-wsはssh経由で他サーバのcockpit-bridgeを起動・通信 • 踏み台サーバからsshで数珠繋ぎにすることで直接通信できない サーバを管理 HTTPS port 9090 SSH port 22 踏み台サーバ 管理対象サーバ cockpit cockpit
  29. 38.

    12 Copyright Red Hat K.K. All rights reserved. Identity Managementとの統合

    • RHEL同梱のRed Hat Identity Managementと統合されています • IdMが管理するドメインにサーバが参加していれば以下が可能 • Web Consoleを含めたシングルサインオン(SSO) • Web Consoleで利用するサーバ証明書を自動発行 • ドメイン内ではsshの鍵配布が不要になるため、sshを経由し て他サーバを参照する場合に準備が不要
  30. 39.

    13 Copyright Red Hat K.K. All rights reserved. まとめ •

    RHELの管理を簡単にするWeb Consoleは、簡単に利用 できるだけでなくセキュリティにも配慮して開発され ています • ログイン時に最小の特権だけを利用 • 長期間に渡る実績があるPolicyKitなど枯れた技術を活用 • ネットワーク接続ポートを増やせない場合はsshのみ許 可されていれば踏み台から接続可能 • Identity Managementと統合されています
  31. 40.
  32. 41.

    3 GENERAL Distribution 概要 概要 • 端末のセッション記録とは何か ? • tlog

    で何ができるか ? • tlog 利用時の注意点 • 参考資料
  33. 43.

    5 GENERAL Distribution 端末のセッション記録 とは 端末のセッション記録 とは 端末への入出力をログなどに保存してあとで見られるように します 利用目的は作業の記録、監査証跡の保存、デモンストレーション

    など RHEL 8 では端末のセッション記録機能が含まれます ログイン時に tlog-rec-session ユーティリティが動作して、端末への入出力をログ に記録します 制限 : Gnome 上の仮想端末セッションは自動記録できません Gnome( または任意のグラフィカルセッション ) ではデスクトップ全体で 1 つの セッションを共有するため端末を識別できず、自動的なセッション記録ができませ ん。
  34. 44.

    6 GENERAL Distribution セッション記録関連コマンドなど セッション記録関連コマンドなど ユーザが利用するコマンド • tlog-rec 端末入出力をログに出力する •

    tlog-play ログを端末で再生する セッション開始時に自動で記録を開始する • tlog-rec-session 端末入出力をログに出力し、シェルを起動する • sssd ユーザやグループにより tlog-rec-session の起動有無を 決める Web UI • cockpit-session-recording Web Console(cockpit) にセッション記録の設定機能と 再生機能を提供するプラグイン
  35. 45.

    7 GENERAL Distribution セッション記録概要図 セッション記録概要図 sssd は条件を満たす ログイン時には tlog- rec-session

    をシェルと して返す。 tlog-rec-session sssd login や sshd bash や zsh systemd-journal rsyslog fluentd など tlog-play cockpit tlog-rec-session は端 末入出力をログ出力す るよう接続した上で シェルを起動 login や sshd はユーザ 情報を sssd に問いあわせ ログにはセッション毎の ID がついているので抽出 して再生できる tlog-rec-session は 端末への入出力を json 形式でログへ出力
  36. 47.

    9 GENERAL Distribution tlog でできること tlog でできること 各ユーザによるセッション記録と再生 ユーザが自分のセッション内で端末操作をファイルへ記録し、再生できる。 強制的なセッション記録

    あるシステムにログインしたユーザが特定のグループに所属している場合、 端末セッションをログへ記録する。 ( 前述のとおり Gnome 環境では不可 ) ログ形式へ対応 独自ファイル (JSON 形式 ) だけでなく、 systemd-journal と syslog 形式に対応し ている。ログへ記録されたセッションも通常セッションと同様に再生できる。
  37. 48.

    10 GENERAL Distribution tlog と他のシステムを組み合わせるとできること tlog と他のシステムを組み合わせるとできること Red Hat Identity

    Management などと組み合わせる Red Hat Identity Management や LDAP サーバなどでユーザとグループを集中管理す ると、誰のセッションを記録するか集中管理できる ElasticSearch などと組みあわせる tlog は JSON 形式でログを出力するため、 Elasticsearch などと組みあわせやすい。 各システムの tlog のログを Elasticsearch に保存できる。 Auditd と組みあわせる 従来からある auditd によるコマンド実行やファイルアクセスのログと組み合わせると 見るべき範囲を絞り込みやすくなる。
  38. 50.

    12 GENERAL Distribution インストールと初期設定 インストールと初期設定 インストール # yum install tlog

    cockpit-session-recording 初期設定 セッションの強制的な記録を行う場合は最低限 SSSD の設定が必要 SSSD の設定 /etc/sssd/conf.d/sssd-session-recording.conf  scope=none ( 記録しない )/some( 条件により記録する )/all( 全部記録する )  users, groups( 記録対象ユーザ、グループの指定 ) tlog の設定 /etc/tlog/tlog-rec-session.conf  tlog-rec-session の子プロセスとして起動する shell の種類  ログ出力先を syslog にするか、 journal にするか、その場合の priority など
  39. 51.

    13 GENERAL Distribution Cockpit での利用 (1/2) Cockpit での利用 (1/2) 1.

    Session Recording を選択 2. Configuration で tlog-rec-session 設定 3. 時刻、文字列検索、ユーザー名で絞り込み
  40. 52.

    14 GENERAL Distribution Cockpit での利用 (2/2) Cockpit での利用 (2/2) 再生画面

    再生、一時停止、再生 速度変更、拡大縮小 ログ検索、ログのメタ データなど
  41. 53.

    15 GENERAL Distribution SSSD の設定例 SSSD の設定例 /etc/sssd/conf.d/sssd-session-recording.conf 例 :

    全て記録する [session_recording] scope=all users= groups= 例 : wheel グループのみ記録する [session_recording] scope=some users= groups=wheel 詳しくは man sssd-session-recording(5)
  42. 54.

    16 GENERAL Distribution tlog-rec-session の設定例 tlog-rec-session の設定例 /etc/tlog/tlog-rec-session.conf JSON フォーマットで設定をおこないます。

    例 : shell として zsh を使う { ”shell”: “/usr/bin/zsh” } 例 : ユーザ入力も保存 ( パスワード打鍵なども記録されるので要注意 ) { ”log”: { ”input”: true } } 詳しくは man tlog-rec-session.conf(5)
  43. 55.

    17 GENERAL Distribution journal の中から TLOG_REC をみつける journal の中から TLOG_REC

    をみつける journal に保存すると TLOG_REC が大事 TLOG_REC という属性でセッション毎に一意な ID が付与される journalctl の検索を利用して絞り込む $ journalctl -o json-pretty --output-fields TLOG_REC 検索条件 | grep TLOG_REC | uniq 検索条件でよく使うもの TLOG_USER=kmoriwak # ユーザ名 -S -20min # 検索範囲の開始時刻。 - で相対的な時刻を指定。 -S 2019-09-03 # 検索範囲の開始時刻。絶対的な時刻を指定。 -U -5min # 検索範囲の終了時刻。 -S と同様。
  44. 56.

    18 GENERAL Distribution ユーザによる記録・再生 ユーザによる記録・再生 ファイルヘ記録、再生する $ tlog-rec -o foobar.txt

    $ tlog-play -i foobar.txt $ tlog-play -i foobar.txt -s 3 # 3 倍速で再生 journal へ記録、再生する $ tlog-rec -w journal journal 内で TLOG_REC の値をみつける $ journalctl -o json-pretty --output-fields TLOG_REC TLOG_USER=kmoriwak | grep TLOG_REC | uniq $ tlog-play -r journal -M TLOG_REC=e93f93c169a04cabbe90fca8a5c86b4f-9bc- 1302f62
  45. 58.

    20 GENERAL Distribution tlog の注意点 tlog の注意点 直前数秒の記録は失われることがあります tlog はデフォルトで

    10 秒間入出力をバッファリングします。 tlog を含めて停止す るような操作は記録できない場合があります。 Gnome(GUI 全般 ) のセッションは記録されません 現在の tlog では Gnome や GUI 環境でのセッションは自動的に記録されません。 各ユーザが tlog-rec で記録することはできます。 tlog-play では端末サイズ変更はできません 記録時と再生時の端末サイズや端末エミュレータの種類が違うと表示が崩れます。 記録していることは簡単にわかります tlog-rec-session の子プロセスとして shell が起動されているので pstree などで容 易に記録されていることがわかります。
  46. 59.

    21 GENERAL Distribution tlog の注意点 tlog の注意点 journald はログが消えることがあります systemd-journald

    は logrotate 機能を内蔵しており、設定によりストレージの残容 量などの条件によって rotate された過去のログを自動的に削除します。また root 権限があれば削除することができます。監査証跡として利用したい場合にはログ サーバや Elasticsearch などの外部サーバに保存します。 場合によりログ容量が予測しづらいです たとえば root 権限で journalctl -f とすると「端末にログを表示した」ログが journal に追加されるループになり、簡単に大量のログを発生させられます。一定 レート以上ではログを drop する設定も可能ですが、その場合は記録が失われるた め判断が必要です。
  47. 60.

    22 GENERAL Distribution まとめ まとめ • Red Hat Enterprise Linux

    8 ではセッション記録の機能が追 加されました • 作業記録や監査証跡などに利用できます • 利用はかなり簡単です • 目的により制限と考慮するべき点があります