「セキュリティ?うちの会社はきっと大丈夫だよ」

セキュリティ対策に関して*「ここまでやれば大丈夫」*という線引きが非常に難しくなっています。

最近では、セキュリティが万全だと見なされていた仮想通貨取引所から多額の仮想通貨が窃盗されたり、ハッカー集団によるサイバーテロなどが話題に上がっています。また、クレジットカード情報を含む顧客情報の漏洩や脆弱性に漬け込んだ攻撃もよく見られます。

特に、ログイン機能を実装しているWebサービスやWebメディアは、ログイン画面を入口として攻撃されることもしばしばあるので、ログイン機能のセキュリティを強化するだけでも、情報漏洩や脆弱性攻撃に対するリスクを未然に防ぐことができます。

今回は、Webサービス管理者が気をつけたい「ログイン」セキュリティ5つのポイントをご紹介します。最近はハッキングの手口が以前にも増して巧妙になっているので、いくつかの手法を組み合わせて用いるとさらに効果が発揮されるでしょう。

Webサービス管理者が気をつけたい「ログイン」セキュリティ5つのポイント

1. パスワードを高度に暗号化して保存する

1.jpg
イメージ画像 / Unsplash

パスワードをどのように保管するかというのは、思っている以上に重要な問題です。IT大手でさえも、パスワードの取り扱いに関してはシビアになっています。

2016年9月、米Yahoo!から5億件以上のハッシュ化(任意のアルゴリズムにより暗号化)されたパスワードを含むユーザーアカウントの情報が流出し、それに続いてDropboxからも6,800万件ものパスワードが流出していたことが明らかになりました。

参考:
米ヤフー、アカウント5億件以上の個人情報流出 - WSJ
Dropboxのアカウント情報流出、被害は6800万件超に - ITmedia エンタープライズ

パスワードをプレーンなテキストで保存するのは非常に危険です。一方、「パスワードをハッシュ化」すれば問題ないのでは、と思われた方もいらっしゃるでしょう。ところが、昨今では暗号化・ハッシュ化されたパスワードから元のパスワードが割り出されてしまうケースも多く発生しています。

任意の文字列をあらかじめ代表的なハッシュ関数のアルゴリズムでハッシュ化し、パスワードとなりうる適当な文字列のハッシュ値と照らし合わせるレインボー攻撃によって、パスワードの特定は容易になります。

参考:
レインボー攻撃とは | セキュリティ用語解説 | 日立ソリューションズの情報セキュリティブログ

そのため、パスワードをハッシュ化する前に、ユーザーごとに任意の文字列を付与してからハッシュ化する「SALT」を施したり、ハッシュ値の計算を何千、何万回と繰り返す*「ストレッチング処理」*を行ったりして、パスワードを高度に暗号化することが重要です。

2. サードパーティー製ログインツールを導入する

2.jpg
イメージ画像 / Unsplash

自社でログイン機能を実装するのにコスト上もセキュリティ上も要求を満たせない場合には、GoogleやFacebook、TwitterやAmazonなどの主要なWebサービスのアカウントでログインできるサードパーティー製のログインツールを使ってみるのがいいでしょう。これらを導入することのメリットはいくつかありますが、大きく以下の2点に収斂されます。

サードパーティー製のログインツールを使用することで、自社サーバーにパスワードを含むログイン情報を保存せずに済みます。API経由でユーザーが許可した情報にアクセスすることができるため、必要な情報をサーバーに保管する必要もありません。

しかし、まれにサードパーティー製ログインツールでログインしたあとに自社サービスの登録も促すケースがありますが、これはセキュリティ上あまり意味のないことです。

また、GoogleTwitterなどは2段階認証に対応しているため、仮にこうしたサービスのアカウント情報が流出してしまっても、乗っ取りを食い止めることができます。

ただし、ユーザーによっては“あえて2段階認証を設定していないケース”も考えられますので、セキュリティを高めたい場合はユーザーに2段階認証を推奨しましょう。

3. セッションやCookieの利用はHTTPS経由にする

3.jpg
イメージ画像 / Unsplash

HTTP通信自体に暗号処理をかけるHTTPSを行わなければ、Googleからの評価が下がることはすでにご存じの方もいるかもしれません。

しかし、残念なことに日本はインターネット先進国の中でHTTPSに対する関心が最も低いと言われていますが、HTTPSを行うのは、セキュリティ上も非常に大切なことです。

参考:
セキュリティを最優先事項と考えるGoogleのHTTPS要求に関する3つの事実

ログインを行なったあとに、ログイン情報を一時的に利用するためにセッションやCookieという技術が活用されるケースが多くあります。Cookieは、いくつかのデータをブラウザ側に記憶させることで、快適にページ遷移を行えるようにする技術です。

しかし、ページが暗号化されていないと、セッションIDやCooklieが通信経路上で漏洩してしまう危険性があります。

セッションIDが漏洩すると、セッションハイジャックと呼ばれる乗っ取りも行われます。もちろん、Cookieやセッション情報に機密情報を入れるべきではありませんが、万が一入れなければならない場合にも、HTTPS接続が望ましいです。

ただし、HTTSを活用しているから安全、というのは誤っているようです。旧NetScape社が開発したSSLというプロトコルは脆弱性が指摘されているため、TLSと呼ばれるプロトコルを使用するようにしましょう。

参考:
httpsだからというだけで安全?調べたら怖くなってきたSSLの話!? - Qiita

4. パスワードを定期的に変えさせる

4.jpeg
イメージ画像 / Unsplash

最近では、セキュリティ上の理由でパスワードの設定に*「英大文字、小文字、数字、記号をすべて使ってください」*という条件をつけているケースも多いようです。しかし、昨今ではこのような混合文字種を使っているから安全だという神話は否定されています。

多くのユーザーは、このような条件を面倒に思うようです。その結果、何人かのユーザーが*「Password!1」*のように、10文字もあり、大文字も小文字も記号も数字も使っているパスワードを使います。しかし、先述したレインボー攻撃では、この手のパスワードはハッカーが容易に思いつくものとして真っ先に攻撃されてしまいます

結局のところ、どれだけ複雑なパスワードを設定したところで、破られてしまうときはいつかやってくるのです。その場合に有効なのは、パスワードを定期的に変えさせることです。

もっとも、ユーザーが自主的にパスワードを変更してくれるということは、めったにないでしょう。3ヶ月ごとに強制的にパスワードを変えさせるようにすれば、面倒でもセキュリティ自体は向上します。

しかし、頻繁にパスワードを変えてもらうのがユーザー体験を損なうと考えるのであれば、後述するように2要素認証を用意してもいいでしょう。

5. Google Authenticatorで2要素認証を導入する

5b.png
イメージ画像 / Mockupr

2要素認証とは、パスワードとは別に認証コードを利用してユーザーを認証する方式で、2段階認証とも呼ばれます。単一のパスワードでログインする方法と違って、2要素認証のほうがセキュリティが破られにくいというメリットがあります。

2要素認証を設定する最も簡単な方法は、Googleが提供しているGoogle Authenticatorと呼ばれるサービスを利用することです。このサービスでは、ワンタイムパスワードと呼ばれる、時間ごとに変わるパスワードを2段階目として利用するため、セキュリティがうんと高まります。

Google AuthenticatorはAPI経由で利用することができるので、サービスにもマッシュアップしやすいでしょう。PHPやJava、RailsやPython、Node.jsなどで実装することができます。WordPressに2要素認証を設定できるプラグインもあるので、積極的に利用しましょう。

参考:
今すぐできる、Webサイトへの2要素認証導入 – yohgaki’s blog