安全ではない暗号の保存とセキュリティSecure Code Warrior

2019年03月07日掲載
ジャープ・カラン・シン著
ケーススタディ

安全ではない暗号の保存とセキュリティSecure Code Warrior

2019年03月07日掲載
ジャープ・カラン・シン著
リソースを見る
リソースを見る

データはビジネスの活力源です。生き残るために、お金を稼ぐために、そしてお客様にサービスを提供するために必要な基礎情報です。デジタル化が進む社会では、開発者はこの貴重な情報の管理者として、計り知れない責任を負っています。開発者が機密データを保護しないと、ビジネスは安全でない暗号ストレージの餌食になってしまいます。

ここでは、データを安全に保存する方法と、そうしない場合に起こることを見てみましょう。

安全でない暗号化ストレージの理解

攻撃者はシステムにアクセスすると、通常、価値のあるデータを探します。誰かのアカウントを乗っ取ったり、別の攻撃を実行したりするのに利用できるデータです。このようなデータは、単にブラックマーケットで売られて現金化されることもあります。

安全でない暗号化ストレージは、SQLインジェクションやXSSのような単一の脆弱性ではありません。保護すべきデータを、保護すべき方法で保護していないことの結果なのです。

機密情報は保護しなければなりません。パスワードやクレジットカードの情報を平文で保存していると、ビジネスでロシアンルーレットをしているようなものです。

ハッカーがデータベースに侵入し、SQLインジェクションXMLインジェクションなどの攻撃でデータを盗み出せば、彼らはすべてを手に入れることができます。しかし、データを暗号化しておけば、ハッカーがデータを実際に利用することは非常に困難になります。

侵入は必ずしも悪意のある外部の人間によるものではないことに注意する必要があります。データが暗号化されていなければ、悪質な内部の人間も簡単にデータを盗むことができます。会社の従業員がデータベースのすべてを見る必要はありません。不十分なアクセスコントロールや機密データの露出は、明らかな窃盗につながります。

また、すべての暗号は同じではないことを忘れないでください。誤った暗号化アルゴリズムを使用することは、まったく使用しないのと同じくらい危険です。脆弱なアルゴリズムを知っていても、熟練した攻撃者にはほとんど抵抗できません。

安全でない暗号化ストレージが危険な理由

多くの企業は、別の脆弱性(SQLインジェクションなど)によって危険にさらされ、結局、盗まれたデータを隠すことができません。これでは、ひどい状況がさらに悪化してしまいます。

  • Adult Friend Finderが侵入され、4億1200万のアカウントが流出しました。これらのアカウントのパスワードは、脆弱なSHA-1ハッシングアルゴリズムで保護されていました。このパスワードは、1ヶ月以内に攻撃者によって簡単に解読されました。
  • Uberが侵入され、5700万人のユーザー記録と60万人のドライバー記録が流出。個人情報が失われたのです。UberのGitHubアカウントに、UberのAWSアカウントのユーザー名とパスワードを含むリポジトリが公開されていたために起こったもので、良いアイデアではありませんでした。Uberの評価額は200億ドルも下がりましたが、これは主にこの情報漏洩が原因です。
  • ソニーの「プレイステーション・ネットワーク」が侵害され、7,700万のアカウントが流出しました。そのうち1,200万件のアカウントには、暗号化されていないクレジットカード情報が含まれていました。ソニーは後に、この情報漏洩に関する1,500万ドルの集団訴訟で和解しました。

センシティブなデータを適切に保管しないと、明らかに深刻な結果を招きます。

ソニーは提訴されましたが、これは大きなペナルティです。しかし、たとえ訴えられなかったとしても、風評被害や規制面でのダメージは、企業にとって壊滅的なものになる可能性があります。

安全でない暗号化ストレージを倒す

開発者は、上記のようなデータ漏洩をどのようにして防ぐことができるのでしょうか?

最初のステップは、そもそもどのデータに暗号化が必要なのかを特定することです。結局のところ、すべてのデータが同じではありません。データを分類し、必要に応じて暗号化を行います。

一般的には、社会保障番号、パスワード、クレジットカードの詳細などの個人情報を保護する必要があります。ビジネスの性質によっては、健康記録やその他の個人情報を保護する必要があるかもしれません。

保護すべきデータがわかったら、次のステップは、適切なツールを使ってそのセキュリティを確保することです。一般的には、時の試練に耐え、強力だと考えられている暗号アルゴリズムを使用するのが良いでしょう。

何があっても、自分で暗号化関数を書かないでください。そのような関数には、攻撃者が暗号を解読するために使用できる欠陥が含まれている可能性があります。

社会保障番号やクレジットカード情報などのデータを暗号化するには、AESを使用します。AESにはさまざまな動作モードがありますが、本稿執筆時の推奨モードはGCM(Galois/Counter Mode)です。また、パディングの選択を求められるライブラリでは、パディングを使用しないようにするのがコツです。

パスワードの場合、ハッシュは元に戻せないため、ハッシュアルゴリズムを使用してパスワードをハッシュ化します。強力にハッシュ化された値があれば、攻撃者はその値を作った元のテキストを取り出すことはできません。パスワードのハッシュ化には、Argon2Bcryptが適していると考えられます。ハッシュ化する前に、必ずランダムな値でパスワードを「ソルト」することを忘れないでください。

これらの関数は、すべての主要なプログラミング言語/フレームワークに対応した実装が用意されています。これらの関数を効果的に使用する方法については、それぞれの言語やフレームワークのドキュメントを確認してください。

鍵の生成、保管、管理は、暗号技術の重要な要素です。鍵の管理が不十分だと、データが漏洩して解読されてしまう可能性があります。ASP.NET の Data Protection API のように、鍵の管理を支援するフレームワークもあります。鍵の管理に関する一般的なベストプラクティスについては、OWASP のチートシートを参照してください。

データを安全に保管することで、コストがかさみ、恥ずかしい思いをするようなデータ漏洩を防ぐことができます。最悪の場合、攻撃者があなたのデータを盗むことができたとしても、それを見たり、悪意のある目的に使用したりすることははるかに困難です。

データを見えないところに隠す

データを守るための方法を早速確認してみましょう。

  • データを分類して、保護が必要なものを把握する
  • 機密データの暗号化には、業界で検証された強力なアルゴリズムを使用する。
  • 強力なワンウェイハッシュを使ってパスワードを保存する

さらに詳しく知りたい方は、ラーニングリソースをご覧ください。また、実際に使ってみたいという方は、お好きな言語のプラットフォームをお試しください。多くの言語をカバーしています。

これらのツールを使えば、データが盗まれることを防ぎ、企業の損失や評判の低下を防ぐことができます。

安全でない暗号化ストレージを見つけて修正する準備はできていますか?アリーナに行って自分のスキルを試してみましょう [start here]

リソースを見る
リソースを見る

著者

Jaap Karan Singh

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

安全ではない暗号の保存とセキュリティSecure Code Warrior

2024年1月22日発行
Jaap Karan Singh著

データはビジネスの活力源です。生き残るために、お金を稼ぐために、そしてお客様にサービスを提供するために必要な基礎情報です。デジタル化が進む社会では、開発者はこの貴重な情報の管理者として、計り知れない責任を負っています。開発者が機密データを保護しないと、ビジネスは安全でない暗号ストレージの餌食になってしまいます。

ここでは、データを安全に保存する方法と、そうしない場合に起こることを見てみましょう。

安全でない暗号化ストレージの理解

攻撃者はシステムにアクセスすると、通常、価値のあるデータを探します。誰かのアカウントを乗っ取ったり、別の攻撃を実行したりするのに利用できるデータです。このようなデータは、単にブラックマーケットで売られて現金化されることもあります。

安全でない暗号化ストレージは、SQLインジェクションやXSSのような単一の脆弱性ではありません。保護すべきデータを、保護すべき方法で保護していないことの結果なのです。

機密情報は保護しなければなりません。パスワードやクレジットカードの情報を平文で保存していると、ビジネスでロシアンルーレットをしているようなものです。

ハッカーがデータベースに侵入し、SQLインジェクションXMLインジェクションなどの攻撃でデータを盗み出せば、彼らはすべてを手に入れることができます。しかし、データを暗号化しておけば、ハッカーがデータを実際に利用することは非常に困難になります。

侵入は必ずしも悪意のある外部の人間によるものではないことに注意する必要があります。データが暗号化されていなければ、悪質な内部の人間も簡単にデータを盗むことができます。会社の従業員がデータベースのすべてを見る必要はありません。不十分なアクセスコントロールや機密データの露出は、明らかな窃盗につながります。

また、すべての暗号は同じではないことを忘れないでください。誤った暗号化アルゴリズムを使用することは、まったく使用しないのと同じくらい危険です。脆弱なアルゴリズムを知っていても、熟練した攻撃者にはほとんど抵抗できません。

安全でない暗号化ストレージが危険な理由

多くの企業は、別の脆弱性(SQLインジェクションなど)によって危険にさらされ、結局、盗まれたデータを隠すことができません。これでは、ひどい状況がさらに悪化してしまいます。

  • Adult Friend Finderが侵入され、4億1200万のアカウントが流出しました。これらのアカウントのパスワードは、脆弱なSHA-1ハッシングアルゴリズムで保護されていました。このパスワードは、1ヶ月以内に攻撃者によって簡単に解読されました。
  • Uberが侵入され、5700万人のユーザー記録と60万人のドライバー記録が流出。個人情報が失われたのです。UberのGitHubアカウントに、UberのAWSアカウントのユーザー名とパスワードを含むリポジトリが公開されていたために起こったもので、良いアイデアではありませんでした。Uberの評価額は200億ドルも下がりましたが、これは主にこの情報漏洩が原因です。
  • ソニーの「プレイステーション・ネットワーク」が侵害され、7,700万のアカウントが流出しました。そのうち1,200万件のアカウントには、暗号化されていないクレジットカード情報が含まれていました。ソニーは後に、この情報漏洩に関する1,500万ドルの集団訴訟で和解しました。

センシティブなデータを適切に保管しないと、明らかに深刻な結果を招きます。

ソニーは提訴されましたが、これは大きなペナルティです。しかし、たとえ訴えられなかったとしても、風評被害や規制面でのダメージは、企業にとって壊滅的なものになる可能性があります。

安全でない暗号化ストレージを倒す

開発者は、上記のようなデータ漏洩をどのようにして防ぐことができるのでしょうか?

最初のステップは、そもそもどのデータに暗号化が必要なのかを特定することです。結局のところ、すべてのデータが同じではありません。データを分類し、必要に応じて暗号化を行います。

一般的には、社会保障番号、パスワード、クレジットカードの詳細などの個人情報を保護する必要があります。ビジネスの性質によっては、健康記録やその他の個人情報を保護する必要があるかもしれません。

保護すべきデータがわかったら、次のステップは、適切なツールを使ってそのセキュリティを確保することです。一般的には、時の試練に耐え、強力だと考えられている暗号アルゴリズムを使用するのが良いでしょう。

何があっても、自分で暗号化関数を書かないでください。そのような関数には、攻撃者が暗号を解読するために使用できる欠陥が含まれている可能性があります。

社会保障番号やクレジットカード情報などのデータを暗号化するには、AESを使用します。AESにはさまざまな動作モードがありますが、本稿執筆時の推奨モードはGCM(Galois/Counter Mode)です。また、パディングの選択を求められるライブラリでは、パディングを使用しないようにするのがコツです。

パスワードの場合、ハッシュは元に戻せないため、ハッシュアルゴリズムを使用してパスワードをハッシュ化します。強力にハッシュ化された値があれば、攻撃者はその値を作った元のテキストを取り出すことはできません。パスワードのハッシュ化には、Argon2Bcryptが適していると考えられます。ハッシュ化する前に、必ずランダムな値でパスワードを「ソルト」することを忘れないでください。

これらの関数は、すべての主要なプログラミング言語/フレームワークに対応した実装が用意されています。これらの関数を効果的に使用する方法については、それぞれの言語やフレームワークのドキュメントを確認してください。

鍵の生成、保管、管理は、暗号技術の重要な要素です。鍵の管理が不十分だと、データが漏洩して解読されてしまう可能性があります。ASP.NET の Data Protection API のように、鍵の管理を支援するフレームワークもあります。鍵の管理に関する一般的なベストプラクティスについては、OWASP のチートシートを参照してください。

データを安全に保管することで、コストがかさみ、恥ずかしい思いをするようなデータ漏洩を防ぐことができます。最悪の場合、攻撃者があなたのデータを盗むことができたとしても、それを見たり、悪意のある目的に使用したりすることははるかに困難です。

データを見えないところに隠す

データを守るための方法を早速確認してみましょう。

  • データを分類して、保護が必要なものを把握する
  • 機密データの暗号化には、業界で検証された強力なアルゴリズムを使用する。
  • 強力なワンウェイハッシュを使ってパスワードを保存する

さらに詳しく知りたい方は、ラーニングリソースをご覧ください。また、実際に使ってみたいという方は、お好きな言語のプラットフォームをお試しください。多くの言語をカバーしています。

これらのツールを使えば、データが盗まれることを防ぎ、企業の損失や評判の低下を防ぐことができます。

安全でない暗号化ストレージを見つけて修正する準備はできていますか?アリーナに行って自分のスキルを試してみましょう [start here]

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。