こんにちは、じゃすてぃです。
最近、 peingのTwitterトークンの漏洩や、宅ファイル便の情報漏えいでセキュリティに関する話題がネット上で盛り上がっていますね。
情報漏えいは運営としてももちろん注意しなければなりませんが、そもそもシステム上の脆弱性をなくさないと危険。
ユーザーの大事な個人情報を流出させてしまったり、大切なデータを書き換えられたりしてしまうことの無いように、セキュリティについて最低限の知識は持っておくべきです。
目次
セキュリティ対策を知らずに独立するのは危険
最近では駆け出しエンジニアが企業経験を積まずにフリーランスになったり起業をしたりするケースがよく見られます。
それ自体は素晴らしいことだと思いますが、駆け出しのうちは開発技術に手一杯で意外とセキュリティについてしっかり学んでいない人が多いです。
独立すると、セキュリティリスクはすべて自分の身に降り掛かってきます。
せっかくプログラミングを学んで独立したのに、セキュリティの問題で大変な事件を起こしてしまわぬようにしましょう。
今回は、駆け出しエンジニアに最低限知っておいてほしいセキュリティの話をしようと思います。
具体的な攻撃方法や対策については以下の記事を参考にしてみてください。
なぜセキュリティに注意しなければならないのか
Webサービスは世の中に多種多様のものが無数に存在していますが、その中には個人情報を取得しているサービスが多くあります。
例えばAmazonやZOZOなどのショッピングサイトでは、ユーザーは自分の氏名・住所・クレジットカード情報など、不正利用されると大変な重要情報を保存しています。
そんな情報が世に流出してしまうとどうなるでしょう?
例えば、クレジットカードが不正利用され、犯罪に利用されます。
ほかにも、住所を特定されて恨みを持つ人間に攻撃される恐れもあります。
このように、個人情報それ自体が悪用されかねない情報、流出を防ぐためにもセキュリティ対策は開発者にとっては必須のスキルなのです。
また、個人情報以外の例であれば、例えばSlackやチャットワークといったチャットサービスを例に考えてみましょう。
じゃすてぃが友人Aに対して「ありがとう」という返事をしたとします。
しかし、セキュリティが甘く、クラッキングされた結果、その「ありがとう」が「ファック・ユー」などのメッセージに書き換えられてしまう可能性もゼロではないのです。
この例だと金銭的な被害はありませんが、例えばこれが主要取引先へのメッセージだった場合、結構困りますよね。笑
なぜ情報が漏洩するのか
なぜセキュリティ対策が必要になるのかは上記で述べたとおりです。
しかし、そもそもなぜ情報が漏洩したり、サイトに不正アクセスされてしまったりするのでしょうか。
情報が漏洩する理由①:悪意を持った内部関係者による情報流出
こちらは人的要因です。
組織内部に不満を持つ従業員や、悪意を持ったスタッフが情報を流出させるケースがあります。
こちらは開発者によるセキュリティ対策では対処できませんが、運営上しっかりと対策を行う必要があります。
情報が漏洩する理由②:人的エラー
人的要因ではありますが、こちらは悪意がないミスによる情報流出です。
スタッフによるシステム操作のミスによって情報が流出してしまうケースなどが考えられます。
こちらも開発者によるセキュリティ対策では対処が難しいですが、誤操作しにくいUIの設計やオペレーションの改善など、運営していく上での対策が必要になります。
情報が漏洩する理由③:クラッカーによる不正アクセス
世の中にはクラッカーと呼ばれ、クラッキングを行ってビジネスにしている人間がいます。
一般的に言われる「ハッカー」というものです。
(実際はハッカーとクラッカーは区別される用語ですが、ここではその違いについての解説は割愛します。)
個人情報を大量に手に入れ、その情報を犯罪組織に売ったり、悪用して金儲けをしたりする人間がいるのです。
そういった悪意のある攻撃者からユーザーを守るためにも、開発者はセキュリティ対策をしっかりと行う必要があります。
脆弱性とはセキュリティ上の抜け穴のこと
そもそも脆弱性とはなんでしょうか。
脆弱性(ぜいじゃくせい)とは、コンピュータのOSやソフトウェアにおいて、プログラムの不具合や設計上のミスが原因となって発生した情報セキュリティ上の欠陥のことを言います。脆弱性は、セキュリティホールとも呼ばれます。脆弱性が残された状態でコンピュータを利用していると、不正アクセスに利用されたり、ウイルスに感染したりする危険性があります。
国民のための情報セキュリティサイト – 総務省
こういった脆弱性をクラッカーに発見されると、個人情報が一気に流出してしまう原因になるのです。
最近でもPeingでのTwitterトークンを公開してしまっていた脆弱性や、宅ふぁいる便での情報流出事件がありました。
悪意を持って攻撃を仕掛けるクラッカーという存在がいる以上、開発者であるエンジニアは責任を持ってセキュリティ対策を施さなければなりません。
セキュリティ対策をした上で、保険をかける
いくらセキュリティ対策をしっかりしたとしても、情報流出をしてしまうケースがあります。
例えば人的エラーによる情報流出は、セキュリティ対策だけでは防ぎようがありません。
そのため、万が一情報が流出してしまったときのために、個人情報の中でもとりわけ重要なデータであるパスワードについては、一般的にはハッシュ化という処理が施されます。
ハッシュ化とは
では、ハッシュ化とはどういったものでしょうか。
ハッシュ化とは、文字列を変換するアルゴリズムを使うことで、入力されたもとのデータをランダムな値に変換することを言います。
ハッシュ化された文字列は「不可逆変換」され、一度変換された値をもとに戻すことはできません。
それではどのようにパスワードが正しいかを担保しているかと言うと、ハッシュ化をする際に、同じ元データを入力すると、常に同じハッシュ値が出力されるようになっています。
そのおかげで、パスワード自体がどんな文字列かを完全に隠すことができるのです。
- ハッシュ化とは
- 入力された値をランダムな値に変換する
- 同じ入力が合った場合、常に同じ文字列を出力する
- 出力された値は不可逆変換され、もとの入力された値に変換し直すことはできない
- もとの文字列を隠すことができる
万が一メールアドレスや氏名などの個人情報が流出したとしても、パスワードがわからなければ、直接金銭的被害が出てしまったり、他のサービスにアクセスできないので被害は最小限ですみます。
パスワードをデータベースに保存する際は、必ずハッシュ化の処理を行いましょう。
よく耳にする暗号化とは
暗号化とは、ハッシュ化とは仕組みが異なります。
ハッシュ化が不可逆変換を行うのに対し、暗号化は秘匿変換を行います。
秘匿変換とは、元データを使用するけれど隠しておきたい情報を隠す際に用いられます。
パスワードは、そもそもWebサイトの運営者が知る必要がないため、変換された前のデータに変換する必要がありません。そのため不可逆変換されるハッシュ化を使用します。
一方で、例えば氏名や住所などの個人情報は、サイトの運営者が知る必要がある場合があり、ときには元のデータに復元する必要があります。
暗号化とハッシュ化は異なる概念・用途であることをしっかり理解しておきましょう。
セキュリティ概論まとめ
今回は、セキュリティ対策についての具体的事例には触れませんでしたが、ざっくりとなぜセキュリティ対策が必要なのかについて概論を解説しました。
- なぜセキュリティ対策が必要なのか
- 悪意のある攻撃者によって個人情報などの重要データが漏洩する危険がある
- 脆弱性と呼ばれるセキュリティの抜け穴から攻撃される
- セキュリティ対策だけではヒューマンエラーによる情報流出を完全には阻止できない
- そのため、セキュリティ対策をした上で情報を守る保険をかける
- ハッシュ化や暗号化を用いて、万が一の情報流出から個人情報を守る
Webアプリケーションを制作してお客様に会員登録してもらうことは、その時点でお客様のデータをしっかりと管理する責任が生じます。
たとえ個人サービスを運営する場合でもそれは同様。
しっかりとセキュリティについても頭に入れ、サービス開発を行っていってください。
具体的な攻撃方法や対策については以下の記事を参考にしてみてください。