読者です 読者をやめる 読者になる 読者になる

たごもりすメモ

コードとかその他の話とか。

fluent-plugin-secure-forwardの脆弱性とアップデートのお知らせ

(追記 5/29 13:15)
この更新の際、設定ファイルの shared_key についても変更されることをお勧めします。また変更をいくつか追加した v0.3.2 をリリースしましたので、このバージョンをお使いください。

これは v0.2.x を使用していたときに shared_key_digest を(あるいはshared_keyそのものを)攻撃者に入手されていた場合、認証情報をリプレイ送信されることで攻撃者が input plugin に接続できてしまう可能性があるためです。
深刻度は高くありませんが、念のため shared_key の変更をお勧めします。
また v0.3.2 は認証プロトコルに input plugin から送信するナンスをひとつ増やし、この種の攻撃可能性を排除するための変更を含んでいます。
(追記ここまで)

fluent-plugin-secure-forward v0.3.0 をリリースしました。これは v0.2.x およびそれ以前の全てのバージョンに存在する脆弱性に対処するためのものです。
古いバージョンはSSLの扱いに問題があり、中間者攻撃が可能な脆弱性がありました。これを利用すると output plugin から送信されるデータの取得および改竄が可能となります。安全な通信を目的とする場合は必ず fluent-plugin-secure-forward を v0.3.0 にアップデートし、サーバ証明書、もしくはプライベートCAを用いるいずれかの方法に設定を変更してください。

なお、いずれの方法でも新しく追加された secure オプションの設定を記述する必要があります。これを含めて設定パラメータに一部互換性がなくなっているため、アップデート時には設定ファイルを更新しなければ Fluentd が起動に失敗することに注意してください。

脆弱性に関して報告をいただいたことがこの修正に直接のきっかけになりました。ありがとうございました。

パブリックCAから発行されたサーバ証明書を用いる

適当なドメインおよびそのドメインFQDNを用いたサーバ証明書を用意できる場合は、それを input plugin で設定して用いることができます。*1
ただしパブリックCAから発行された証明書を用いる場合、output plugin側でFQDNの検証が必要です。これを enable_strict_verification パラメータで有効にしてください。無効では起動できません。

https://github.com/tagomoris/fluent-plugin-secure-forward#using-ssl-certificates-issued-from-trusted-ca

プライベートCA証明書を作成して用いる

サーバ証明書や適当なドメイン名などを設定して用いるのが難しい場合には fluent-plugin-secure-forward 専用のプライベートCA証明書と秘密鍵を作成して用いることができます。v0.3.0 はそのためのユーティリティ secure-forward-ca-generate を同梱しています。
この方法による場合、プライベートCAの証明書および秘密鍵ファイルを input plugin を起動するFluentdのホストに安全な方法でコピーし、またプライベートCAの証明書ファイルを output plugin を起動するFluentdのホストにもコピーする必要があります。

この場合 in_secure_forward v0.3.0 はサーバ証明書を自動生成し、このプライベートCAの証明書および秘密鍵(とそのパスフレーズ)を用いてサーバ証明書に署名します。
また out_secure_forward v0.3.0 はこのプライベートCAによる署名が行われていることをもって証明書検証を行い、SSL通信を有効なものだと判断します。このためプライベートCAの秘密鍵およびパスフレーズが外部に漏れた場合は即座に使用中の証明書と秘密鍵を破棄し、新しいものを生成して入れ替えてください。

https://github.com/tagomoris/fluent-plugin-secure-forward#using-private-ca-file-and-key

セキュアでない方法で通信する

証明書などの設定をいっさい追加しない場合、安全なSSL通信路を確立できません。この場合第三者によりデータの読み取りや改竄が行われる可能性があります。
v0.3.0 およびそれ以降のバージョンでも v0.2.x およびそれ以前と同じ方法で通信を行う方法は存在していますが、使うべきではありません。この方法を有効にする場合は secure false という指定を設定に追加する必要があります。

https://github.com/tagomoris/fluent-plugin-secure-forward#using-insecure-self-signed-certificates

まとめ

fluent-plugin-secure-forward を使っている人は可能な限り迅速に v0.3 にアップデートしてください。設定の変更等が必要です。バグなどについては tagomoris までご連絡ください。よろしくお願いします。

*1:が、この場合に output plugin 側で適切なルート証明書のセットを指定する方法を作り忘れていたことに気付きました。あとで再度アップデートします。