CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
こんにちはー。野田貴子です。 海外のコラムで面白いものがあったので、意訳してお届けします。 ご参考ください。
###
残念なことに、2018年も情報漏洩のニュースは枚挙にいとまがありませんでしたね。今回は、機密情報をRuby on Railsで保護する方法をまとめたブログをご紹介します。元のページではコードの書き方など詳しい方法が載っていますが、文字数の都合上、こちらでは簡単な紹介にとどめました。詳しい方法についてはぜひリンク先をたどってください。
Securing Sensitive Data in Rails
https://ankane.org/sensitive-data-rails
毎週のように情報漏洩のニュースを見かけている気がします。もしみなさんがまだ機密情報の格納方法を見直していないならば、今がおそらく良いチャンスでしょう。ユーザーの信頼は自分の情報のプライバシーとセキュリティに基づいています。
このガイドでは、機密情報とは何か、機密情報を保存するためのベストプラクティス、そして避けるべき落とし穴について説明していきます。
アメリカ国立標準技術研究所は、個人を特定できる情報(PII)を次のように定義しています。
そしてGDPRは、個人データを「識別された、または識別可能な自然人に関するあらゆる情報」と定義してします。
個人を特定できるデータの例をいくつか示します。
そして以下の例は、必ずしもそれ自体が機密情報ではありませんが、人にリンクされている場合がある情報です。
この2種類の間の境界線は必ずしも明確ではありません。たとえば、位置情報を使用して人物を特定できるケースもあります。
これらのデータはまた、引き起こす可能性がある被害のレベルに応じてそれぞれ機密レベルがあります。被害とは、金銭的(本人詐称など)、社会的(混乱など)、あるいは身体的なものまであります。みなさんは状況に応じたレベルの定義をする必要がありますが、以下を参考に始めてみてください。
もし今の時点でこれらのデータすべてに対する強力な保護策が取られていない場合は、最も機密レベルが高いものから始めて順に対応してください。
ユーザーは通常、ブラウザやネイティブアプリを通じて情報を送信します。データが転送中に暗号化されていることを確認してください。最も人気のあるブラウザであるGoogle Chromeは、HTTPSを使用していないWebサイトにアクセスしたときにアドレスバーに警告を表示するようになりました。
参考
データが送信されたら、それを保存する場所が必要です。一般的な保存場所は3つあります。
それぞれのベストプラクティスを見ていきましょう。
機密データの保存を専門とするサービスがあります。 可能であれば、これらのサービスのいずれかを使用しましょう。
データを自分で保存する必要がある場合は、データベースが適切であることがあります。保存時にデータを暗号化することが重要です。これを実現する方法はさまざまなセキュリティ上の観点からいくつかあります。
最も簡単なのはフルディスク暗号化です。これにより、保存中のすべてのデータが暗号化されます。データベースはデータが暗号化されていることを認識する必要すらありません。
このアプローチはデータを物理的な盗難から保護します。ただしデータベースへの接続に成功した攻撃者から保護することはできません。
そのためには、データベースにデータを送信する前にデータを暗号化する必要があります。これはアプリケーションレベルの暗号化として知られています。すべてのデータにストレージレベルの暗号化を使用し、機密データにはアプリケーションレベルの暗号化を使用します。
参考
復号化を制限することは、優れたセキュリティにとって不可欠です。システムの一部は暗号化だけをできるようにしておくべきです。ユーザーに表示する必要がない限り、データベースのデータを復号化する必要はありません。
参考
これまで説明してきた両方のアプローチの大きな欠点は、セキュリティにとって重要な信頼できる監査証跡がないことです。違反が発生した場合にどのデータがアクセスされたかを確実に知る必要があります。攻撃者がキーにアクセスすると、追跡なしでオフラインですべてのデータを復号化できてしまいます。Rubyに監査証跡を追加することもできますが、攻撃者がデータベースをダウンロードし、キーを盗み、オフラインで復号化すればよいだけなので、これは簡単に迂回されます。他に何か必要です。
これを解決する1つの方法は、サービスを使用して暗号化と復号化をすることです。このサービスはキー、監査、そして権限を管理できます。これらはキー管理サービス(KMS)として知られています。
参考
データが暗号化されていると検索がはるかに困難になりますが、いくつかのテクニックがあります。
参考
パスワードは元に戻せてはいけないため、パスワードに暗号化を使用しないでください。代わりにbcryptを使用してパスワードをハッシュします。
参考
has_secure_password
(Railsの機能)暗号化せずにデータを保護する1つの方法は匿名化です。
参考
まだ議論していない選択肢の1つは、データベースの組み込み機能を暗号化に使用することです。ただし、鍵と暗号化されていないデータの両方が短時間の間データベースサーバーに存在し、そこで全アクセス権を持つユーザーがそれらを傍受する可能性があります。代わりにアプリケーションレベルの暗号化を使用してください。
バックアップも必ず暗号化してください。また、誰がバックアップにアクセスできるかを制限しましょう。
ファイルは、機密情報を格納できるもう1つの場所です。データベースと同様に、すべてのデータにストレージレベルの暗号化を使用し、機密データにはアプリケーションレベルの暗号化を使用します。
ストレージサービスはこれをサーバー側の暗号化と呼びます。繰り返しますが、これは物理的な盗難の場合に役立ちます。また、直接アップロードするのにもいい方法です。
参考
いつファイルがアクセスされるかを確認するためにロギングをオンにしておきましょう。
アプリケーションレベルで暗号化すると、ストレージサービスは暗号化されていないファイルを見ることができなくなります。これにより、データが漏洩するような設定ミスを防ぐことができます。誰かが中を覗いても、鍵なしでデータにアクセスすることはできません。ストレージサービスはこれをクライアント側の暗号化と呼びます。
機密データに関する主な懸念事項の1つは、漏洩です。データが漏れるよくある場所は次のとおりです。
ログにはたくさんの情報があります。ログはかなりの期間保存されることがあるため、妥協される可能性があります。
Railsは各リクエストとそのパラメータを記録します。機密項目をconfig/initializers/filter_parameter_logging.rb
に追加しましょう。これにより、ログ内の機密データが[FILTERED]
に置き換えられます。
参考
Auditedのような監査ライブラリを使用している場合は、機密性の高いデータを取り込まないようにしてください。特定の項目を監査から除外することができます。
分析、計測、エラー報告サービスはすべて、データが漏れる可能性がある場所です。GDPRのおかげでこれらのサービスの多くにはこれを防ぐための選択肢が用意されています。
誤って機密情報をキャッシュしないようにしてください。
機密情報を電子メールに含めないでください。代わりに、URLリンクを使用しましょう。これは管理者への電子メールにも当てはまります。
ruby-security-annを購読して、Ruby、Rails、Rubygems、Bundler、その他のRubyエコシステムプロジェクトに関するセキュリティアナウンスを入手しましょう。
参考
内部ネットワーク上のすべてのトラフィックを暗号化することを検討してください。これは盗聴から保護します。前述したように、機密情報はデータベースやジョブキューに渡す前にアプリで暗号化する必要がありますが、これはすべてのデータを保護するための優れた方法です。多くのホストサービスプロバイダでは簡単な設定でこの機能を使えます。
ユーザーデータには大いなる責任が伴います。機密情報をアプリケーションレベルで暗号化し、残りのデータをストレージレベルで暗号化します。 鍵、監査、権限を管理するためのサービスモデルとして暗号方式を使用してください。 ログ、監査、サードパーティー、キャッシュストア、電子メールに情報を漏らさないように注意してください。機密情報にアクセスできる人を制限し、問題を検出するための適切な監視を設定しましょう。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes