Posts Side channel attack
Post
Cancel

Side channel attack

はじめに

セキュリティキャンプで行ったグループワークの一環で、ブログを書くことになりました。リレー形式で一週間ごとにブログを回し、前回バトンを持っていた人が次の人のテーマを決めるというルールです。

前回のブログはこちらのリンクから見れます。

今回の私のテーマ”サイドチャネル攻撃”です。 サイドチャネル攻撃は私の専門外なのでとりあえず最低限の理解をできればいいと思っています。

サイドチャネル攻撃とは

装置の物理的な特性の変化を外部から観測、測定して内部情報を読み取る攻撃手法です。

暗号やハードウェアの分野では古くからの攻撃手法です。

  • タイミング攻撃
    • 色んな入力をし、処理時間の差から読み取る
  • 故障利用攻撃
    • 故意に誤作動させることで、正常に作動させた時との結果の差異を解析する
  • 電力解析攻撃
  • 電磁波解析攻撃
    • コンピュータや周辺機器、ケーブルから発生する弱電磁波を傍受し、情報を不正に入手する
  • キャッシュ攻撃
    • キャッシュ付きのCPUで、データの有無によりメモリアクセス時間の差を利用する
  • 音声解析攻撃
    • コンピュータが演算する時に発生するノイズを解析して、処理の内容を解析する

最近では上位レイヤー(Web、モバイル、IoTなど)でもサイドチャネル攻撃が増えてきています。

今回、Webサイドチャネル攻撃について書きます。

Webサイドチャネル攻撃

Webのサイドチャネル攻撃には主に2つの方法があります。

  • タイミングサイドチャネル
  • ストレージサイドチャネル

タイミングサイドチャネル

タイミングサイドチャネルはユーザがログインしたユーザが存在する場合と、存在しない場合のコントロールフローの違います。 その違いによって生じる時間差を計って、そのユーザが存在するのかを確認する方法です。

timing_side_channel_control_flow

例えば、ユーザが存在しない場合はエラーになるケース(①)と、ユーザが存在する場合はその後にユーザがロックされているか、ユーザの期限はどうか、パスワードは正しいかを確認してからエラーになるケース(②)があります。

これらのケースでは確実に時間差が生じます。

timing_side_channel_control_flow_delay

ケース①では遅延させることが必要になります。 ケース①に(ケース②の平均 - ケース①の平均)の値だけ遅延させればケース②と同じ位の時間になります。 こうすることで違いを判断することは難しくなります。

ストレージサイドチャネル

ストレージサイドチャネルはエラーメッセージによってユーザが存在するのかを調べます。

例えば、ログインフォームに存在しないユーザを入力した場合、エラーメッセージとして”ユーザは存在しない”と表示され、パスワードが違う場合は”ユーザは存在する”と出力されることでユーザの存在を確認することができます。

storage_side_channel_typo3

また、Typo3のHTTPヘッダーではユーザの存在を確認することがすることができました。

storage_side_channel_postfix_admin

postfix adminではデータベースに存在するユーザ名が管理者ユーザだった場合にレスポンスのフォームフィールドにユーザ名を自動で入力するようになっていました。

このようにストレージサイドチャネルは出力によってユーザの存在を確認しています。 そのため、タイミングサイドチャネルより対策が簡単です。 出力に気を付ければ基本的に対策は大丈夫だからです。

まとめ

コードを書く時にエラー出力を気にすることはありましたが、コントロールフローのそれぞれの時間にまで気を配らなければいけないとなると辛いですね。。 たまには自分の専門外の勉強をするのも悪くないと思いました。

次回(9/25)は@amame04こちらのブログに更新予定です。

参考文献

This post is licensed under CC BY 4.0 by the author.