セキュリティ関係に興味がある方は御存じかと思いますがRSA SecurIDは世界で最も使用されていると思う(The Registerの記事では4000万ユーザとか?)ワンタイムパスワードトークンという道具で、大きな企業のダイアルアップやVPNなどのログインの際に、IDパスワードの他に60秒おきに表示される6桁の数字(ワンタイムパスワード)を入力することによりリモートログインのセキュリティ強度を強化するものです。つまりワンタイムパスワードを生成する道具をもってないと結局ログインができない事になります。

ここ数日Twitterのタイムラインなどで「RSAのウェブサイトが攻撃されSecurIDが危うい」、「SecurID 40万(?)アカウントが盗まれた」「RSA SecurIDがAPT攻撃によって脆弱になった」みたいなつぶやきが流れたりブログで紹介されたりしました。かな〜り誤解してるんじゃないなかなぁと想像される節もあるので、ブログで書いてみたいと思います。

RSA SecurIDの仕組み

近年このようなワンタイムパスワード認証の仕組みを オープン標準化しようという動きがあり Initiative for Open Authentication(OATH)という認証ベンダーによる 業界団体で標準の策定がなされておりInformational RFCにもなっています。

RSAもそのメンバーになっています。仕様にはサンプルコードもついていますしアルゴリズムはすぐわかると思います。私も以前にOATH仕様のワンタイムパスワード生成アプリをiアプリ、.NET、Javaで作ってみました。

RSA SecurIDのワンタイムパスワード生成アルゴリズムはRSA社独自のプロプライエタリなものですが、OATHの仕様を見てみれば大枠は同じ仕組みだと思うので説明してみたいと思います。

ワンタイムパスワードの仕組みは認証サーバーと利用者に配るたくさんのトークンで構成されます。認証するためには双方が連携する必要がありますけど、物理的に分離されておりケーブルで繋いだり無線で通信するわけでもないので連携の工夫が必要です。その工夫の方式に大きく2種類あります。

  • 時刻同期方式:認証サーバーと利用者に配るトークンがそれぞれ持っている時刻により同期する方式
  • イベント同期方式:認証サーバーと利用者に配るトークンがそれぞれ持っているボタンを押した回数(イベント)により同期する方式

otp1

御存じの通りRSA SecurID はボタンを押す必要のない便利なもので、1分おきにワンタイムパスワードとなる6桁の数字の表示が自動的に切り替わる時刻同期方式によるものです。トークンが持っている時刻などを元に独自のアルゴリズムでワンタイムパスワードの値を計算し表示します。
otp2

あるアルゴリズムで利用者が所持するトークン毎に想定されるワンタイムパスワードの値を計算するわけですが、トークンを区別し、また偽造されることの無いように同期用の値(時刻またはイベント)と共通鍵(Shared Secret)を元にワンタイムパスワードを生成していると思います。

今回うけた攻撃は何なのか?

RSAのプレジデントのアートコビエロ氏のニュースリリースで攻撃を受けた事実をアナウンスしています。 RSAのサイトが受けた攻撃はAPT(Advanced Persistent Threat)攻撃だと書いていますがMcAfee Blogの解説IT用語辞典に にある通り、特別な攻撃手法ではなく「RSAに対象を特定して執拗なスパイ行為、攻撃行為」をしたと 言っているにすぎません。

RSA SecurID用の認証サーバー(RSA Authentication Manager)が攻撃を受けて、何らかの情報が漏えいした といった話ではないです。

RSAサイトの攻撃により漏えいしたものはRSA社の機密情報全般なんだと思いますが、RSA SecurIDに関して 漏えいして困るものは以下の2種類だと思います。

  • [情報1] RSA SecurID用のトークンと認証サーバー(RSA Authentication Manager/旧ACE Server)の設計情報、ソースコード、独自のワンタイムパスワード生成アルゴリズム、時刻同期の方式、認証サーバーに登録するトークンリスト情報(トークン毎の共通鍵を含む)の処理方法などの設計情報一般
  • [情報2] 世界中に導入されたお客様の認証サーバーにインポートするRSA SecurIDの認証サーバーに登録するトークンリスト情報(トークン毎の共通鍵を含む)

RSA SecurIDに関する情報が漏えいしたとして影響はどうか

漏えいした情報が[情報1]か[情報2]なのかによって影響は異なります。

漏えいしたのが[情報1]の設計情報であったとした場合、顧客が持っているSecurIDによる認証がすぐ脆弱になるということは無いと思います。顧客システムの管理者が持っているトークンリスト情報から別の偽トークンや偽サーバを作られという可能性は全くないわけではありませんが、コストはかかっても新しいトークンの発行により回避できますし、他のOATHベースのオープン仕様のトークンでも状況は変わらず、インポート用のパスワードやリストの仕組み知っていれば偽トークンを作れる可能性はあります。漏えいにより製品設計上の欠陥は見つかるかもしれませんが、システムのバージョンアップにより解決できる問題だと思いSecurIDそのものが危機的な状態にあるとは思えません。

RSA SecurIDのワンタイムパスワードの生成アルゴリズムはプロプライエタリで3DESベースのものだったと 記憶していますが、OATHではアルゴリズムあオープンですし、それ自体が漏えいし公開されてしまった事で SecurIDが脆弱になることは無いと思います。むしろ、初期セットアップ時の共通鍵を共有する仕組みの方が 重要でしょう。共通鍵共有の仕組みが漏れたとしても共通鍵が漏れないかぎり、またアルゴリズムの欠陥が見つからない限り 使われた共通鍵暗号やHMACと同等の暗号強度は失われることはありません。

ただ、方式が時刻同期方式であるために、偽トークンを作った場合に初回同期がしやすいという仕様上の欠点はあると思います。イベント同期方式ならば認証サーバーで保持しているトークン毎のカウンタ値は知りようもないので、数回の認証の失敗の後アカウントがロックされます。時刻同期の場合には現在の時刻をもとにサーバーで持っている時刻値を想定できますから、その意味では問題があります。

漏えいした情報が[情報2]の場合、これは顧客のための機密情報が漏えいしたことになるので、社会的責任は重大ですが、[情報1]、[情報2]とセットで流出していたとしても、RSA SecurIDは基本は二要素認証製品なので、一要素目の認証であるIDパスワードで保護されていますし、どのRSA SecurIDのトークンをどのIDのユーザが 使っているのかがわからなければ、認証に使うことはできないので影響は限定的なものになるでしょう。

コビエロ氏のニュースリリースは何が漏えいしたのか、影響範囲はどうなのか何も説明するものではない ため利用者や導入を検討している人、私のようなニュースリリースを見てブログを書いている人は 混乱していると思います。

幾つか関連したブログやニュース読んだ中では The RegisterのRSA breach leaks data for hacking SecurID tokens の記事が比較的正確に詳細に事実を述べており、RSAの情報公開が十分でないことを 非難するような内容となっています。

RSA SecurIDの利用顧客側の管理担当者には事態の説明のための ビジネスレターが届いてるんでしょうか。 セキュリティ技術者やRSA SecurIDの末端の利用者も気になるところだと思うので 早急に情報公開と対策がされると良いなぁと思っています。

このブログの記事はRSAの社員でも関係者でも利用者でもない私が書いています。 事実に間違いなどあればご指摘いただければありがたいです。

う〜む、天気の良いあたたかい土曜の朝に何やってんだろ、、、オレ、、、、
ではでは