最近、管理アカウントのパスワードが弱いことが原因と思われるDiscourseサイトの侵害が2件報告されました。そこで、以下の点について文書化したいと思います。
- 侵害が発生した場合の対処法
- 今後、より良く防止するためにできること
データベース
Discourseには、数年前からサイトデータベースに関して以下の保護対策が導入されていますのでご注意ください。
-
データベースの完全なバックアップのダウンロードリンクは、サイト管理者の有効なメールアドレスにのみ送信されます。したがって、ログイン(ショルダーハックやログアウトし忘れることによる)だけでなく、サイト管理者のメールアドレスを制御している必要があります。そして、メールには2要素認証を設定していますよね?

-
スタッフのメールアドレスを変更するには、旧メールアドレスと新メールアドレスの両方の制御を検証する必要があります。一方、一般ユーザーは新しいメールアドレスの制御を検証するだけで済みます。これにより、スタッフのメールアドレスの変更がはるかに困難になります。
-
ジオロケーションデータベースAPIキーを設定している場合(サインアップが必要で無料です)、スタッフが前回ログインした場所から物理的に離れた場所からログインした際に、積極的に警告が表示されます。
-
1年以上ログインしていない管理者は、攻撃対象領域を減らすためにメールアドレスの再検証が義務付けられています。このサイト設定は
invalidate inactive admin email after daysであり、デフォルト値は365です。
それでも、侵害が発生した場合は、不正な管理アカウントがサイトデータベース/バックアップの完全なコピーをダウンロードしたと常に想定する必要があります。
したがって、次のコマンドを使用して、直ちにすべてのアカウントパスワードをリセットする必要があります。
./launcher enter app
rails r 'UserPassword.update_all(password_hash: SecureRandom.hex * 2)'
さらに、必ずすべてのユーザーをログアウトさせる必要があります。
./launcher enter app
rails r 'UserAuthToken.destroy_all'
最後に、必ずすべてのAPIキーを削除する必要があります。
./launcher enter app
rails r 'UserApiKey.destroy_all'
rails r 'ApiKey.destroy_all'
データベース内のアカウントパスワード
セキュリティドキュメントによると、Discourseはデータベースに保存されるパスワードに対して、非常に強力で攻撃に時間のかかるハッシュを使用しています。
Discourseは、ソルト付きパスワードの暗号化にPBKDF2アルゴリズムを使用します。このアルゴリズムはNISTによって推奨されています。ウェブ上のセキュリティ専門家は、PBKDF2は安全な選択肢であるという点で概ね合意しています。
ユーザーのデフォルトの最小パスワード長は10文字、管理者は15文字であるため、パスワードハッシュを逆引きしてハッシュを取得するのは困難になります。しかし、これはユーザーが強力なハッシュを使用しても password1password1 のような簡単に逆引きできるパスワードを設定することを妨げるものではありません。
データベース内のメールアドレス
攻撃者は、サイト上のすべてのユーザーのすべてのメールアドレスを見ることができます。これは通常、モデレーターでさえボタンをクリックして初めて表示できる機密情報です。
データベース内のメッセージ内容
攻撃者はデータベースのコピーを持っているため、すべての投稿に保存されているすべての情報を見ることができます。
-
公開または非公開の返信で外部のパスワードやアカウント情報が転送されている場合は、直ちにそれらのパスワードを変更する必要があります。
-
公開または非公開の返信に機密情報が含まれている場合は、攻撃者がその情報を閲覧できることを認識してください。
暗号化されたメッセージ
Discourse Encrypt プラグインを使用している場合、暗号化されたメッセージはエンドツーエンドで暗号化されます。これは、データベースが漏洩した場合でも、攻撃者が暗号化されたメッセージの内容にアクセスできなくなることを意味します。
規制
ご自身の法的義務については、専門の法律顧問にご相談ください。GDPRやCCPAなどの特定の規制では開示が義務付けられる場合があります。
将来のために
サイトが攻撃を受ける可能性があると思われる場合は、スタッフユーザーに二要素認証を要求することを検討するかもしれません。必要なサイト設定は「二要素認証を強制する (enforce second factor)」です。
enforce second factor
ユーザーに二要素認証の有効化を強制します。「all」を選択すると全ユーザーに強制されます。「staff」を選択するとスタッフユーザーのみに強制されます。