[-]=======================================================================[-] Wizard Bible vol.64 (2017,4,12) [-]=======================================================================[-] x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第0章:目次 --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○第1章: Microsoft Office 365の仕様を逆手に取ったフィッシングについて 黒林檎 著 ○第2章: ディスクディテイナー錠の破錠 IPUSIRON 著 ○第3章: 基礎暗号学講座・第27回 〜RSA暗号に対する実装攻撃〜 IPUSIRON 著 ○第4章: お知らせ ○第5章: 著者プロフィール x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第1章: Microsoft Office 365の仕様を逆手に取ったフィッシングについて --- 著者:黒林檎 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) 最初に  お久しぶりです、黒林檎です。  2017年4月に発売される『ハッカーの学校 ハッキング実験室』を書かせて頂き ました。 サポートサイト(目次など含む) : http://ruffnex.net/kuroringo/TwitterHack/ Amazon : https://www.amazon.co.jp/dp/4781702279/  ハッキング実験室では、Twitterを対象にし、『アカウントの自動作成・フィッ シングサイトの作成・キーロガー・ボットネットの作成』などを書いています。  Twitter本というとTwitter APIを用いた本が多いですが、特徴としてTwitter APIを一切使用しないハッキング初心者のプログラミング入門本をイメージしまし た。  ハッキング以外にも、そういう非APIプログラミングなどを学びたい方は是非一 度書店などで手をとっていただけると幸いです。  今回は本書にちなんで、今回はMicrosoft Office 365(以下:Office365)の仕様 を逆手に取ったフィッシングについて考えていきます。 ■0x02.) Office365とOneLogin  ウィキペディアには、Office365は以下のように説明されています。 =ここから=  Microsoft Office 365はマイクロソフトから提供される商用のソフトウェア プ ラス サービス型クラウド サービスで、デスクトップ アプリケーションである Microsoft Officeスイートの月額課金バージョンと、マイクロソフト サーバー 製品であるExchange Server、SharePoint Server、Skype for Business Server をマイクロソフトがホスティングして提供されるクラウド サービスをセットに した製品。[1][2] Office 365 は BPOSの次期バージョンという位置づけであり、 [3]ベータ バージョンの提供を経て、2011年6月28日(29日)に正式版が提供さ れた。 Link:https://ja.wikipedia.org/wiki/Microsoft_Office_365 =ここまで=  おそらく、Office365とOneLoginの両者は、多くの企業・団体で活用されている と思われます。  一例として、クラウド型シングルサインオン・アクセスコントロール(IDaaS)で ある、OneLoginと連携して社内などで管理している場合も多いでしょう。  そこで、Office365のウェブログインページに注目してみましょう。 ■0x03.) Office365のログインページについて  Office365のログインページは、以下になります。 https://login.microsoftonline.com/login.srf?wa=wsignin1.0&rpsnv=4&ct=1490360011&rver=6.7.6640.0&wp=MCMBI&wreply=https%3a%2f%2fportal.office.com%2flanding.aspx%3ftarget%3d%252fdefault.aspx&lc=1041&id=501392&msafed=0&client-request-id=63935b31-ecfc-4540-a81d-c4597b82c6a3  一見普通のログインサイトですが、Office365を使用している企業・団体などの ドメイン名を入力します。  入力値は、以下のような文字列で問題ありません。 ユーザー名 : test@[Office365を使用しているドメイン] パスワード : 適当な文字列  正しいOffice365を使用しているドメインであった場合、「お客様の組織のサイ ンイン ページに移動しています。」という文面が表示され、対象の企業・団体の ログイン画面にリダイレクトされます。  おそらく、リダイレクトされた画面は企業・団体の人間が普段使用しているロ グイン画面だと思います。  多くの場合に、このログイン画面は先ほど説明した通りに、OneLoginなどの簡 易なシステムで普段ログインしていると思われます。  その場合、Office365の仕様を逆手に取ったハッキングはもう少し問題として大 きくなります。  次で説明しますが、Office365をOneLoginで簡易的に活用している場合、特定の サブドメイン名が機能する場合があります。 有効になっている場合、digコマンドなどで以下の結果が得られます。 =パターンA ここから= ;; ANSWER SECTION: autodiscover.[組織・団体名].co.jp. 3599 IN CNAME autodiscover.outlook.com. autodiscover.outlook.com. 288 IN CNAME autodiscover.geo.outlook.com. autodiscover.geo.outlook.com. 288 IN CNAME autodiscover.outlook.com.g.outlook.com. autodiscover.outlook.com.g.outlook.com. 288 IN CNAME autodiscover-apacsouth.outlook.com. autodiscover-apacsouth.outlook.com. 288 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 288 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 288 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 288 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 288 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 288 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 288 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 288 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 288 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 288 IN A [IPアドレス] =パターンA ここまで= =パターンB ここから= ;; ANSWER SECTION: autodiscover.[組織・団体名].co.jp. 3599 IN CNAME autodiscover.outlook.com. autodiscover.outlook.com. 30 IN CNAME autodiscover.geo.outlook.com. autodiscover.geo.outlook.com. 30 IN CNAME autodiscover.outlook.com.g.outlook.com. autodiscover.outlook.com.g.outlook.com. 30 IN CNAME autodiscover-apacsouth.outlook.com. autodiscover-apacsouth.outlook.com. 30 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 30 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 30 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 30 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 30 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 30 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 30 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 30 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 30 IN A [IPアドレス] autodiscover-apacsouth.outlook.com. 30 IN A [IPアドレス] =パターンB ここまで= =パターンC ここから= ;; AUTHORITY SECTION: [組織・団体名].jp. 299 IN SOA ns1-05.azure-dns.com. azuredns-hostmaster.microsoft.com. 2017031501 28800 7200 604800 300 =パターンC ここまで=  autodiscover.[組織・団体名].co.jpとautodiscover.outlook.com.となぜ紐付 けているか疑問を抱く方もいると思います。  Office365で自社ドメインを使用する場合、Office 365のDNSホスティングプロ バイダでDNSレコードを作成する必要があります。  調べた限りで、設定パターン2通りでパターンA・Bは同じ方法です。  こちらは後述しますが、パターンA・Bの場合は設定したサブドメインを使うこ とで簡単に自社社員ログイン画面までリダイレクトされる可能性があります。  パターンCに関しては、Azure DNSを使用して設定しており、autodiscover.[組 織・団体名].jpというサブドメインで紐付けていません。  よって、この設定パターンの場合は今回の話の対象になりません。  攻撃者は、この設定を上手く扱いフィッシングに活用する可能性があります。 Office 365のDNSホスティングプロバイダでDNSレコードを作成する 参考リンク : https://support.office.com/en-us/article/Create-DNS-records-at-any-DNS-hosting-provider-for-Office-365-7b7b075d-79f9-4e37-8a9e-fb60c1d95166?ui=en-US&rs=en-US&ad=US#bkmk_add_cname Azure CLI 2.0でAzure DNSの使用を開始する 参考リンク : https://docs.microsoft.com/ja-jp/azure/dns/dns-getstarted-cli ※今回、企業・団体にご迷惑をおかけしないため実際に筆者が調べたドメイン名 などは発表しません。 ■0x04.) フィッシング視点で対象システムを見る  先ほどのステップで、自社のシステムが該当した場合に攻撃者視点で考えてみ ましょう。  Office365やOneLoginで使用されているドメイン名は、企業・団体などの自身の ドメインではありません。  まず、Office365と何かしらのドメインをDNS設定で紐付けているパターンが多 いと思われます。 そのため、普段のフィッシングサイトなどで見極める基準である情報で判断する には難しくなります。 ・ドメイン名 ・EV証明書  多くの場合に、Office365とOneLoginのURLを所属している組織の多くの人間が 把握していないという問題があります。  理由として、業務進行の最適化などの理由でログイン認証などをOneLoginで終 わらせているため社員や組織の人間がログインページの存在について詳しく知ら ないというパターンがあります。  例えば、OneLoginでOffice365を統括している場合に、以下のようなURLでログ イン画面にリダイレクトされる場合があります。 [*]http://autodiscover.[Office365を使用しているドメイン]  上記のドメインでリダイレクトされる先は、調べた限りで下記のようなドメイ ンになりました。 ・https://ap.ssso.hdems.com/ ・https://hoge.onelogin.com/login  しかし、OneLoginはログインできる機器を制限できるはずなので、フィッシン グで抜き取った情報で社員システム内部にアクセスするには難しいと思われます。  ただ、Office365(POP/SMTP)に関しては、メール受信端末の制限が甘い可能性が 高いため、フィッシングでユーザー名とパスワードを取得できれば、公開されて るメールサーバーの情報から自分の端末でメールの受信設定を行えばメールを盗 み取る事が可能と考えられます。 =メールの設定値 ここから= 受信メール (IMAP) サーバー:outlook.office365.com ポート:993 SSL (TLS) が必要:あり 受信メール (POP) サーバー:outlook.office365.com ポート:995 SSL (TLS) が必要:あり 送信メール (SMTP) サーバー:smtp.office365.com ポート:587 SSL (TLS) が必要:はい =メールの設定値 ここまで= ■0x05.) フィッシングサイトの構築  ここからは、Office365に直接的な関係性はありません。  書籍内で用いてる手法をOffice365に応用した場合について書いてみます。  構築するフィッシングサイトは、HTTPステータスコードなどの作りが標準的な 作りのため正規のアカンウトのみのフィッシングが可能です。  まず、2サイトのログイン時のステータスコードを見てみましょう。 =ここから= OneLoginを使用しているAサイト ログイン失敗時StatusCode: 200 OneLoginを使用しているBサイト ログイン失敗時StatusCode: 403 =ここまで= 正しい、アカウント情報を入力した際に302でリダイレクトされると想定できるの で以下のようになると思われます。 =ここから= OneLoginを使用しているAサイト ログイン成功時StatusCode: 302 OneLoginを使用しているAサイト ログイン失敗時StatusCode: 200 OneLoginを使用しているBサイト ログイン成功時StatusCode: 200 or 302 OneLoginを使用しているBサイト ログイン失敗時StatusCode: 403 =ここまで=  フィッシングサイトで被害者の入力値(ユーザー名 / パスワード)を取得すれば、 フィッシングサイトの裏側で対象のシステムに不正にログインリクエストを送信 し、HTTPステータスコードを比較すれば正しいアカウントを確認することができ ます。  Pythonのrequestsモジュールでログインリクエストを送信する場合以下のよう なコードになります。  また、このソースコードをFlackアプリに埋め込むことでFlackで生成したフィ ッシングサイトで簡単に有効なアカウントかのチェックが可能です。 =擬似フィッシングサイトリクエスト送信箇所 ここから= import requests session = requests.Session() # ツイートPOST送信のリクエスト headers = { "User-Agent": "Mozilla/5.0", "accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "accept-language":"ja,en-US;q=0.8,en;q=0.6", "content-type":"application/x-www-form-urlencoded" } payload = { "ogin_user":"ユーザー名", "login_pwd":"パスワード", "show_remember":"0", "state_string":"XXXXXXXXX", "continue":" } # 組織・団体のウェブサイトのユーザーIDをリクエストパラメータに設定 payload[ogin_user] = self.username # 組織・団体のウェブサイトのユーザーPasswordをリクエストパラメータに設定 payload[ogin_user] = self.password try: login = session.post('https://twitter.com/sessions', headers=headers, data=payload, allow_redirects=True) if login.status_code == 302: print "[+] ログイン完了 HTTPステータスコード: ", print login.status_code else: print "[+] ログイン失敗 HTTPステータスコード: ", print login.status_code except: "[+] ログイン中に通信エラー" ※ソースコードは実際に実行できるコードから省略しています。 =擬似ソースコード ここまで=  フィッシングサイトの生成に関しては詳細な説明は、ここで省きます。  OneLoginでも送信するパラメータは違う可能性があります。  一部のOneLoginを用いた組織・団体では、以下のような送信パラメータでした。 =ここから= authenticity_token:+TOKhzGVIUOKUDBJKBJjkbkjFcAbqGuMwszWp8= email:ユーザー名 password:パスワード commit:ログイン _: =ここまで=  仮にHTTPステータスコードが302のアカウントを釣ることに成功すれば、今回の プログラムであれば「[+] ログイン完了 HTTPステータスコード: 200」という文 がコンソールに出てプログラムが終了します。  しかし、RequestsモジュールはHTTPライブラリでセッションを保持するため、 システムを知り尽くしている攻撃者であればログインが成功した次の処理でパス ワードの強制変更などを書くことできます。  その様なパスワード強制変更などはログイン機器などの制限をすることで、防 ぐことはできますが「フィッシング視点で対象システムを見る」で話とおり、メ ール受信端末の制限は甘い可能性が高くパスワードを盗みとった攻撃者であれば メールの不正受信を確かめる可能性は高いと思われます。 ■0x05.) おわりに  今回のお話はここまでになります。  かなり狭いレベルですが、中小企業などを狙うフィッシング攻撃の増加など近 年問題視されています。  小規模でも情報量が多く時間を掛けてクラッキングするメリットがある組織・ 団体であれば、入り組んだフィッシング攻撃のターゲットにあう可能性もあるの ではないでしょうか? x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第2章: ディスクディテイナー錠の破錠と構造 --- 著者:IPUSIRON x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  ディスクディテイナー錠は、回転する円形のディスクタンブラーを備える錠前 です。  本記事では、ページ数の関係上『ハッカーの学校 鍵開けの教科書』(以降、鍵 開け本と略す)に掲載できなかった「ディスクディテイナー錠の破錠」と「実物 のディスクタンブラーとその構造」について紹介します。  手元に本がない方や、ディスクディテイナー錠をイメージできない方は、次の Webページの「ディスクディテイナー錠の仕組み」を参照してください。 http://s-akademeia.sakura.ne.jp/main/books/lock/reading.html ■0x02.) ディスクディテイナー錠の破錠  「ディスクディテイナー錠の鍵穴」は、長方形であり、構造的に比較的大きく なっています。ここから鍵が入り、ディスクの中央を貫通する形で鍵が挿入され ます。つまり、「ディスクの中央の切り欠き」も、同様に大きくなっています。 よって、そのため、奥まで道具を挿入しやすく、破錠には弱いといえます。  ディスクディテイナー錠を破錠する動画がYoutubeで公開されています。 http://videolike.org/view/yt=.r-gi$gzAPz  この動画ではタガネを鍵穴に挿入して、てこの原理を利用して、内筒をおさめ ている蓋を取り外しています。 ■0x03.) BUFFALO製のBSLO1Nの破錠  ここではBUFFALO製のBSLO1Nというディスクディテイナー錠を破錠する方法を紹 介します。BUFFALO製なので、ノートPCの盗難防止用の錠前といえます。 1:ディスクディテイナー錠本体を逆さにして、シャックルを万力で固定します。 万力は固定されていると作業しやすいですが、そうではなくても問題ありません。 2:丈夫なニッパーで蓋を徐々に削りつつ、太いマイナスドライバーで蓋を取り除 きます(図1参照)。 (図1:http://wizardbible.org/64/images/DiskDetainer41.jpg)ニッパーによる破壊 3:蓋を取り外すと、その下にCリングが見えます(図2参照)。 (図2:http://wizardbible.org/64/images/DiskDetainer42.jpg)蓋の下のCリング  ラジオペンチを用いて、Cリングを取り除くと、中蓋を取り除けます。中蓋の奥 には(ディスクとスペーサーを内包する)内筒とサイドバーが存在します。錠前 を逆さにすれば、中身をすべて取り除くことができます(図3参照)。以上で破錠 が完了しました。 (図3:http://wizardbible.org/64/images/DiskDetainer43.jpg)BSLO1Nの中身 ■0x04.) BSLO1Nの内部構造 ●ディスクとスペーサー  8枚のディスクと7枚のスペーサーは、内筒に内包されています。中蓋は、内筒 からディスクとスペーサーの脱落を防ぎます。鍵穴に近い方から「ディスク→ス ペーサー→ディスク→…→ディスク→内筒の奥」となっています(図1参照)。こ の図では、右側から鍵を挿入することになります(右から左に入っていく)。 (図1:http://wizardbible.org/64/images/DiskDetainer44.jpg)ディスクとスペーサーの位置関係  すべてのスペーサーは、共通の形状になります。また、ディスクは、いくつか の形状を持ちます。この形状によって、対応する鍵山の高さが異なります(図2参照)。 (図2:http://wizardbible.org/64/images/DiskDetainer45.jpg)ディスクの形状 ●内筒  内筒は次のように、大きくカットされている部分と小さくカットされている部 分があります(図3参照)。 (図3:http://wizardbible.org/64/images/DiskDetainer46.jpg)内筒の外観  大きくカットされている部分において、ディスクの凸部がスライドします。ス ペーサーは、この部分で固定されます。  小さくカットされている部分には、サイドバーが入ります。ディスクとスペー サーのどちらも、サイドバーが入る切り欠きを持ちます。内筒の小さくカットさ れている部分において、ディスクとスペーサーの切り欠きが揃うことで、サイド バーが入ります。  内筒に合鍵を挿入すると、次の状態になります(図4参照)。ここではディスク とスペーサーを取り外しており、鍵山の位置がわかるようにしています。 (図4:http://wizardbible.org/64/images/DiskDetainer47.jpg)内筒に合鍵を挿入したところ ●シャックルと連動する部分  錠前は内筒を格納するため筒状にくりぬかれています。その中に外筒がはめ込 まれており、固定されています。外筒の奥には、シャックルを固定する機構が組 み込まれています(図5参照)。内筒が回転することで、シャックルの固定が外 れます。その結果、シャックルを引き抜くことができます。 (図5:http://wizardbible.org/64/images/DiskDetainer48.jpg)シャックルを固定する機構 ●外筒  ところで、外筒の上部には一直線の凹みがあります。施錠時にはここにサイド バーが存在します。サイドバー全体が格納されるわけではなく、一部だけが格納 されています。つまり、サイドバーの一部は外筒と内筒の間のシアライン上に存 在することになります。このときは内筒を完全に回転することができず、解錠で きません。 ●シアラインが揃った場面  すでに取り上げた画像ですが、もう一度確認してください(図6参照)。ディス クの凸部は反時計回り側に揃っています。このときは施錠状態です。 (図6:http://wizardbible.org/64/images/DiskDetainer44.jpg)反時計周り側に揃えたところ  また、ディスクの凸部を時計回り側に揃えたところです(図7参照)。この状態 は、ピッキングの初期状態に相当します。内筒が外筒の中でこれ以上回転するた めには、サイドバーがディスクの切り欠きに完全に入り込む必要があります。 (図7:http://wizardbible.org/64/images/DiskDetainer49.jpg)時計周り側に揃えたところ  このとき、ディスクの切り欠きは揃っていないため、サイドバーが内筒から若 干飛び出します(図8参照)。そのため、サイドバーがシアライン上に存在し、内 筒の回転を邪魔します。つまり、まだ解錠できません。 (図8:http://wizardbible.org/64/images/DiskDetainer50.jpg)ディスクとサイドバーの状態(施錠状態)  ピッキングを行ったり、合鍵を挿入したりして、ディスクの切り欠きを揃った とします。すると、サイドバーが内筒の中に完全に入り込みます(図9参照)。 その結果、内筒は外筒の中を回転でき、最終的にシャックルが飛び出ます。 (図9:http://wizardbible.org/64/images/DiskDetainer51.jpg)ディスクとサイドバーの状態(解錠状態) ■0x05.) おわりに  今回の記事では、実物のディスクディテイナー錠を破錠し、内部構造を確認し ました。より詳細な仕組みやピッキング方法については、「鍵開け本」の第10章 を参照してください。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第3章: 基礎暗号学講座・第27回 〜RSA暗号に対する実装攻撃〜 --- 著者:IPUSIRON x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  久しぶりの暗号理論の記事です。ここ数年の間、錠前ばかり追いかけていたの で、新鮮に感じます。色々忘れていることも多かったので、自分の忘備録ついで にWBの記事にしました。  今回は、実装攻撃の概要とRSA暗号に対する攻撃例を紹介します。 ■0x02.) 実装攻撃  実装攻撃とは、アルゴリズムが実装されたソフトウェアやハードウェアを対象 にした攻撃です。理論的に安全である暗号アルゴリズムであっても、それを利用 するためにコンピュータに適切に実装しないと、実装方法や利用環境に依存した 脆弱性が生まれることがあります。こうした実装攻撃を考慮した防衛技術を総称 して耐タンパー技術といいます。また、耐タンパー性を持つデバイスのことを耐 タンパーデバイスといいます。  例えば、ICカードはICチップを内蔵されており、暗号処理ができるようになっ ています。本記事ではICカードのような暗号装置に対する実装攻撃や耐タンパー 技術について解説します。 ■0x03.) 守るべき情報  暗号装置は様々な情報を保持しており、実装攻撃から守る必要があります。例 えば、守るべき情報としては次が挙げられます。 ・プライバシの高い個人情報 ・秘密鍵 ・機密情報 ・価値の高い情報 ■0x04.) 中見出し:実装攻撃者の分類  攻撃者は実装攻撃を通じて、秘密情報(特に秘密鍵)を解読しようとします。 攻撃者の能力は3つのレベルに分類できます。 ○クラスⅠ ・対象のシステムに対して十分な知識を持っていないが、標準的な解析設備を利 用できる攻撃者。 ・例:技術系の学生 ○クラスⅡ ・解読経験も持っており、高度な能力と高性能な設備を利用できる攻撃者。 ・例:経験値が高い技術者・専門家 ○クラスⅢ ・巨額の資金源に支えられており、洗練された解読を実現できる攻撃者。 ・解読結果が費用を上回るのであれば、解読時間は数箇月から数年といった長期 間にわたっても攻撃を行うことがある。 ・例:専門家集団、国家組織、マフィアあるいはそのつながりを持つ技術者集団  例えば、クレジットカードのような磁気カードは、スキマーと呼ばれるハード ウェアによって情報を読み取ったり、複製したりできます。そのため、クラスⅠ でも解読に成功します。  一方、ICカードは、少なくともクラスⅠの攻撃者に耐性を持つように設計され ます。加えて、耐タンパー技術により、クラスⅡ〜Ⅲの攻撃者に対しても耐えう るように設計されるのが望ましいといえます。 ■0x05.) 実装攻撃の分類  暗号アルゴリズムが実装されたモジュールに対して実装攻撃を行う際には、 「入力」「出力」「モジュール内部」が攻撃対象となりえます。入力と出力は、 モジュールから出ている正規のI/O(Input/Output)端子です。モジュール内部に アクセスするには、物理的・化学的・機械的な手段でモジュールを変形させます。  また、入力に与える信号やエネルギーとしては正規のものと非正規のものがあ ります。例えば、サイドチャネル攻撃は、正規の処理中に漏洩する情報を解析し ます。 ●破壊するか否かによる分類 ○破壊型解析  破壊型解析とは、暗号装置を破壊して実現する実装攻撃のことです。物理解析 とも呼ばれます。もっとも原始的な手法ですが、非常に有効な解析といえます。 例えば、次の解析手法が挙げられます。 ・顕微鏡解析 ・プローブ解析  ICカードの場合は、ICチップを覆っている絶縁体を削り、その内側にある信号 線などに直接アクセスして情報を取り出したり、回路を複製したりできます。こ うした破戒型攻撃を成功に導くためには、ICチップの製造工程、回路設計、暗号 化アルゴリズムについての知識が事前に必要といえます。一般に特殊な解析装置 や解析技術が必要とされています。  破壊型解析の後で再度ICモジュールを使うことができません。同種の暗号装置 であれば、同様の回路構造を持つはずです。1つのデバイスは破壊型解析で秘密情 報の抽出方法を解析し、他のデバイスは非破壊型解析を行うことで秘密情報を得 ることができます。 ○破壊型解析の耐タンパー技術  破壊型解析の対策は、破壊の予防・対策に分けられます。破壊の予防は破壊し にくい素材で覆ったり、破壊する場所を隠したりします。ただし、こうした方法 はクラスⅠの攻撃者に対しても時間稼ぎに過ぎません。  そもそも攻撃者が破壊する目的は、内部回路のレイアウトを確認したり、配線 にアクセスしたりするためです。そこで、規則的なレイアウトを止めたり、ダミ ーの配線を追加したりして、回路を解析しにくくします。特に、プリント基板設 計ソフトなどは配線やモジュールの位置を最適化してくれるため、装置の開発者 にとって非常に便利ですが、顕微鏡解析の観点からは望ましくない結果になる恐 れがあります。また、ダミーの配線は見た目だけでなく、実際にダミーのデータ を流すことでより効果的に攻撃者をだますことができます。  破壊を検知したときにメモリに記録された情報を消去したり、書き換えたりす ることも有効です。破壊を検知するためには、絶縁体の中に網状にセンサー回路 を設置することで実現できます。チップ表面が空気に触れると記録内容が消滅す るメモリチップや、信号を読み出すプローブを取り付けると動作できなくなる回 路などもあります。  他のアプローチとして、クロック信号を不規則にするという手法があります。 プローブ解析によって、動作中の情報を読み取るときはクロック信号にもとづい てタイミングを合わせます。クロック信号が不規則であれば、こうした解析を妨 害できることが期待できます。 ○非破壊解析  非破壊型解析とは、暗号装置を破壊しないで実現する実装攻撃のことです。例 えば、次の解析手法が挙げられます。 ・処理時間解析(タイミング解析) ・消費時間解析(電力解析解析) ・放射電磁解析(テンペスト解析) ・故障利用解析(フォールトベース解析)  ICチップが暗号処理を行う際には、消費電力・処理時間・電磁波などの情報( サイドチャネル情報という)を外部から観測できます(*1)。ICカードはメモリ内 に秘密鍵を保持していることがあります。秘密情報とサイドチャネル情報の関連 性が高い場合、サイドチャネル情報から秘密情報(あるいはその部分情報)が漏 れる恐れがあります。こうしたサイドチャネル情報に注目した攻撃をサイドチャ ネル解析といいます。  理論的に提案された当初は、攻撃の実現性が疑問視されていました。しかし、 現在では具体的な攻撃手法が提案されており、脅威として考えられます。 脚注 *1:それらの物理的な情報の伝送経路をサイドチャネルといいます。 ●顕微鏡解析  顕微鏡解析は、回路のパターンや配置を解析します。レイアウト解析とも呼ば れます。光学顕微鏡でICチップの内部を拡大して撮影して、見た目から構造を解 析します。この段階では、CPU、コプロセッサ、メモリ、配線などの位置を調べて、 次の解析の足掛かりとします。 ●プローブ解析  プローブ解析は、プローブ(探針)を用いて、メモリや配線の電位を調べたり、 逆に電荷を与えたりして動作を解析します。プローブ解析を行うためには、顕微 鏡解析でメモリや配線の位置を特定しておく必要があります。ICチップの設計・ 製造する現場では、設計通りに動作しないICチップをデバッグする際に、これと 同様なことが行われています。  回路パターンまで特定できないときは、暗号装置を動作させながらプローブ解 析を行うことで、配線を追跡したり、攻撃ポイントを特定したりします。攻撃ポ イントが特定できれば、暗号化アルゴリズムに相当する回路部の入出力のレジス タからビット情報を読み取れることがあります。 ●処理時間解析  アルゴリズムや回路は入力の差によって、出力が得られるまでの時間に差が生 じます。差が生じる理由は、回路やアルゴリズム、キャッシュの有無などです。 出力値が得られる時間差があることをうまく利用することで鍵を推定できます。 処理時間解析(タイミング解析)は、「予想した鍵を用いた場合の処理時間」と 「実際の処理時間」が等しいかどうかにより、鍵を推定する攻撃です。  例えば、公開鍵暗号は復号時に秘密鍵が使用するため、復号にかかる処理時間 が一定でない場合、処理時間解析により解読される恐れがあります。 ●処理時間解析の対策  鍵情報や入力データによって処理時間が平均化するように回路設計を行います。 また、プロセス内の乱数を用いて復号処理に要する時間をランダム化する方法が あります。この手法をブラインド化(blinding)といいます。OpenSSLには、ブラ インド化を使ってタイミング攻撃を無効にするAPIが用意されています。 ●電力解析  回路の消費電力は、演算の種類や書き込むデータの値に関係して変動します。 電力解析では、ICチップが消費する電力を外部からモニタリングして、そのとき に処理した秘密情報を推定する攻撃です。  電力解析は、次の2種類に大別されます。 ・単純電力解析(SPA:Simple Power Analysis) ・差分電力解析(DPA:Differential Power Analysis)  SPAは消費電力だけから秘密情報を推定する方法であり、統計的分析を行いませ ん。一方、DPAは、積極的に統計的分析を用います。多くのデータを暗号装置に入 力して、消費電力の値を集めます。次に、入力データをビット列で場合分けして、 全データの平均値との差分を取り、秘密情報と相関のある消費電力の変化を探し 出します。  いずれに解析方法においても、暗号装置や測定機器から発生するノイズの存在 を考慮しなければなりません。一般にこれらから発生するノイズは高周波成分を 多く含んでいることが知られており、高周波をカットするフィルタが有効といえ ます。 ○電力解析の対策  電力解析の対策の基本は、消費電力を下げることです。さらに、意図的にノイ ズを発生させる回路を設けます。ノイズが大きい状態で、消費電力の差が小さく なれば、解析はより困難になるためです。  他のアプローチとしては、攻撃者に暗号装置の内部データを容易に推測されな いようにするために、データをランダム化するという手法もあります。 ●放射電磁波解析  放射電磁波解析は、暗号装置から発生する電磁波から秘密情報を推定する攻撃 です。基本的な考え方は電力解析と同様です。 ●故障利用解析  故障利用解析とは、故意に誤作動を引き起こして処理結果を得て、正しい処理 結果と比較することで、秘密情報を解析する攻撃です。誤作動を引き起こすため に、次のようなアプローチが採用されます。これらの攻撃を総称してフォールト 攻撃といいます。 ・異常値の入力 ・異常な電源供給 ・規定外の周波数クロックの供給 ・電磁照射 ・ストロボフラッシュ ・レーザ照射 ○故障利用攻撃の対策  周波数・供給電圧・温度などのセンサーを搭載しておき、異常な状況を検知し ます。検知したら誤作動する前にシステムの動作を停止させます。こうすること で結果的に誤作動を引き起こすことを防止します。 ■0x06.) RSA暗号に対する実装攻撃  暗号装置にRSA暗号が実装されていたとき、採用しているアルゴリズムやハード ウェアによって様々な実装攻撃が可能となります。ここでは代表例のみを紹介し ます。 ●RSA暗号の復習  RSA暗号については、WB34で解説しているので、参考にしてください。 http://wizardbible.org/34/34.txt ●べき乗剰余計算とバイナリ法  暗号化アルゴリズムや復号アルゴリズムではべき乗剰余計算が登場します。べ き乗剰余計算とは、a^x mod Nという計算です。これはRSA暗号に限らず、他の多 くの公開鍵暗号でも同様です。  a, x, Nはkビットとします。そして、3つのパラメータの合計ビット数をnとす ると、n=3kになります。  もっとも単純なアプローチは、最初にx-1回乗算してから、Nで割った余りを求 めるという方法です。しかし、この方法ではx-1≒2^k=2^(n/3)=(2^(1/3))^n回の 乗算が必要となり、入力サイズnの指数関数になっています。さらに、Nで割る前 に巨大な数になってしまい、計算過程を保存するメモリ領域の観点からも非効率 です。場合によっては、通常のコンピュータが扱えるサイズを超えてしまう恐れ があります。  次のアプローチは、最後に剰余を計算するのではなく、乗算をしながらにこま めに剰余を計算するという方法です。a=c mod Nかつb=d mod Nならば、ab=cd mod N であることはすでに見ました。「aをNで割った余りc」と「bをNで割った余りb」 を掛けたcdは、Nで割った余りに等しくなることを意味します。この方法であれ ば、計算過程を保存するメモリ領域はそれほど気にする必要がありません。また、 乗算で扱う数が小さいということは1回の乗算当たりの計算時間も効率化できて います。しかしながら、乗算の回数は依然として入力サイズnの指数関数のまま です。 ○バイナリ法  乗算の回数を改善化するために、高速べき乗剰余法と呼ばれるアルゴリズムが 存在します。 入力: ・a:底 ・x:指数 ・N:法 出力: ・y:ax mod Nの計算結果  アルゴリズムの動作は、以下の通りです。 1:xの2進表現を求めます。 その結果、x={2^(k-1)}*{x_(k-1)}+{2^(k-2)}*{x_(k-2)}+…+2*x1+x0であったとします。 ただし、xk-1=1です。 2:i=k-2とします。 3:y=aとします。 4:i≧0の間、次の処理を繰り返します。  4a:y=y2 mod Nとします。  4b:xi=1ならば、y=y×a mod Nとします。  4c:i=i-1とします。 5:yを出力します。  kビットの最大値はx=1…1bになります。このxに対してバイナリ法を適用すると、 常にステップ4bを実行することになります。ステップ4bの乗算回数は2回であり、 k-1回ループするので、合計の乗算回数は2(k-1)=2(n/3-1)=2n/3-2/3回になります。 これはもっとも乗算回数が多い状況ですが、入力サイズnの多項式になっています。 ○RSA暗号とバイナリ法  RSA暗号の暗号化アルゴリズムではme mod Nを計算します。eは非常に大きいの で、eを2進表現したとき1の個数は平均して約k/2程度といえます。よって、バイ ナリ法による計算時間は、平均してLen(e)に比例します(*1)。また、ステップ4a の「y=y2 mod N」、ステップ4bの「y=y×a mod N」は、両方ともAB mod Nの形の 計算です。A, B, Nのビット長は大体kビットと考えられます。高速な乗算剰余計 算を実現するモンゴメリ法を用いると、この計算時間はk2に比例することが知ら れています。よって、暗号化処理はk2*Len(e)に比例します(復号処理も同じ形な ので、同様の議論ができる)。 脚注 *1:Len(・)は長さを返す関数です。 ●プローブ解析による秘密情報の読み取り  ここではコプロセッサ(*1)で乗算剰余計算AB mod N(A, B, Nはnビット)が行 われており、高速べき乗剰余計算がバイナリ法で実装されているものとします。  コプロセッサで乗算剰余計算が行われていれば、コプロセッサはA, B, Nのレジ スタを持っており、これらのレジスタを使って「A←AB mod N」という処理が行わ れます。  復号処理に注目します。なぜならば、公開鍵暗号では復号の際に秘密鍵を使用 するからです。RSA暗号の復号アルゴリズムは、Dec(sk, c)=cd mod Nという動作 をします。そのため、Nには公開鍵に含まれるRSAモジュール、Bにはcが格納され ていると想定できます。また、乗算剰余の途中の演算結果は、随時Aに上書きされ ます。  プローブ解析により、レジスタAの値を読み取り続けます。バイナリ法は指数の バイナリ表現した結果、0か1かにより動作が変わります。つまり、Aの値の変化を 読み取ることで、dの情報が1ビットずつ判明します。  しかしながら、プローブで同時に観察できる配線はせいぜい8本程度といわれて います。しかも、1本はクロック信号を読み取るために用いられることが多いとい えます。つまり、読み取れるビット数は7程度になります。その一方で、レジスタ Aはnビットであり、到底すべての配線をカバーできません。  そこで攻撃者は未知の復号指数dが使われて復号されたときの7ビットを観測し ます。乗算剰余計算はLen(d)の比例回数分だけ実行され、その度に観測値が変化 します。その変化を系列とすると、1ビットの7系列が得られたことになります。 次に、推測した復号指数d'を使って、どうようにして7系列を得ます。後は両者の 系列を比較します。もし、d=d'であれば、両者の系列は完全に一致するはずです。 逆に、両者の系列が一致しても、必ずしもd=d'と言い切れませんが、その可能性 は高いことが知られています。 脚注 *1:コプロセッサとは、CPUの補助するプロセッサのことです。一部の暗号装置は よく登場する計算用のコプロセッサを搭載して、高速化を図っています。例えば、 乗算剰余計算や特定の暗号化・復号処理などでコプロセッサの力を借ります。 ●故障利用解析によるRSA暗号の解読  RSA暗号の復号アルゴリズムにおいて、中国人剰余定理を応用すると高速に計算 できることが知られています。べき乗計算が約1/4で済むことが期待できます。  アルゴリズムで計算される処理を抜粋すると、次の通りです。 c1=c mod p, c2=c mod q a=p^(-1) mod q d1=d mod p-1, d2=d mod q-1 m1=c1^d1 mod p, m2=c2^d2 mod q m={a(m2-m1) mod q}p+m1 ←(1)  フォールト攻撃により誤作動が起きて、m2の計算において正しくない値m2'にな ったとします。すると、平文の計算の結果が次のようになってしまいます。 m'={a(m2'-m1) mod q}p+m1 ←(2)  (2)式の両辺から(1)式を引くと、次のようになります。 m''-m=[{a(m2'-m1) mod q}p+m1]-[{a(m2-m1) mod q}p+m1]={a(m2'-m2) mod q}p  よって、GCD(m''-m, N)=pが計算できます。つまり、Nの素因数が求められたこと になります。  この故障利用解析では、正しい計算結果である(1)式と誤作動した計算結果であ る(2)式が必要でしたが、正しい計算結果を必要としない攻撃法も提案されていま す。 ■0x07) 終わりに  この記事を書くにあたり、いくつかの文献を参考にしました。特に、以下の書 籍は、実装攻撃について詳しくてお勧めです。 『情報セキュリティの理論と技術—暗号理論からICカードの耐タンパー技術まで』 (森北出版株式会社) https://www.amazon.co.jp/dp/4627829515 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第4章: お知らせ --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○Wizard Bible(http://wizardbible.org/)では随時、執筆ライターを募集して います。  扱う内容のテーマは広義での「under ground」です。例えばハッキングやセキ ュリティからピッキングなどと幅広い内容を考えています。また特殊な職業や趣 味の解説などでも構いません。  一回きりでも構いません。また必ず毎回連載する義務もありませんので、でき る範囲で構いません。気軽に声をかけてください。 ○Kenji AikoさんがQ&Aを作ってくれました。初めて参加する人でもわかりやすく 書かれていますので、参考にしてください。 http://wizardbible.org/wbQandA.html ○Wizard Bibleに参加希望の方は気軽にメール(ipusiron@gmail.com)ください。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第5章: 著者プロフィール --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■黒林檎 ●Job: 新人ライター ●Twitter: @r00tapple ●Mail: packr@packr.org ●Comment:  Office365のお話楽しんでいただけたでしょうか?  初めて、紙の本を書かせていただきました。  名前は編集のMADさんにつけて頂きましたが、IPUSIRONさんの「ハッカーの学校」 シリーズに入れて頂き光栄です。  もし、最後のフィッシングネタなど気になられましたら『ハッカーの学校 ハッ キング実験室』をお手にとっていただけると喜びます。 ■IPUSIRON ●Job: 自宅警備員 ●Web: http://akademeia.info ●Twitter: @ipusiron ●Mail: ipusiron@gmail.com ●Comment:  黒林檎さん、新刊『ハッカーの学校 ハッキング実験室』の発売おめでとうござ います。そして、本当にお疲れ様です。1冊を書き上げるまでの数箇月間は、自分 との闘いだったはずです。締切、モチベーション、ページ数、内容など、色々な 苦難があったと思います。それらを無事乗り越えたことは、今後の執筆でも活き るはずです。陰ながら、今後の活躍を期待しております。  ところで、WBの読者のみなさんへ。出版記念勉強会が大和セキュリティで開催 されるようです。参加枠も拡大したようなので、興味ある方は是非参加してみて はどうでしょうか。執筆における裏話を聞けたり、黒林檎さんのサインをもらえ たりするかもしれません。 https://atnd.org/events/86952