fc2ブログ

[脆弱性②]POODLE

POODLEは、 2014年に発覚したSSLの脆弱性である。
今回はPOODLEの原理について簡単に記載する。

■POODLEの概要
POODLE(Padding Oracle On Downgraded Legacy Encryption)は、httpsなどのSSLによって暗号化された通信傍受することで、暗号鍵なしで解読することが可能な脆弱性である。
Downgraded Legacy Encryption(ダウングレード攻撃)とPadding Oracle(パディングオラクル攻撃)を組み合わせた攻撃である。

■前提
・ダウングレード攻撃
SSL/TLSにはいくつかのバージョンがあるが、暗号化通信を行なう前に、クライアントとサーバでどのバージョンで暗号化を行なうかを取り決める。これをネゴシエーションと呼ぶ。攻撃者が意図的に低いバージョン(一般には防御力が弱い)で暗号化を行なうように仕向けるのがダウングレード攻撃である。

・パディングオラクル攻撃
暗号化データを解読する攻撃。
SSL3では、暗号化を固定長のブロック長ごとに行なう。人間が作成したデータは、このブロック長の整数倍とは限らないため、データ量が足りない場合は、末尾にブロック長になるようにダミーデータで穴埋めを行う。これをパディングと呼ぶ。
実は、このパディングの完全性(改ざんされていないか)をチェックする機能が無い。
攻撃者はこれを利用し、パディングをうまく設定しながらサーバに対して解読したい暗号文を何度も送りつけ、エラーがでるか、でないかを検証していくことで、暗号文の解読を行なう。

■POODLEの簡単な流れ

①サーバとクライアントの間に機器を設置し、盗聴、改ざん、偽サーバへ誘導ができる状態にする。ただし、暗号化されたデータの盗聴はできない。

②クライアントを偽サーバへ誘導する

③クライアントからサーバへhttpsリクエストを発行させる(このデータには、解読したいCookieデータなどがある)

④このとき、ネゴシエーションデータを改ざんし、脆弱性のあるSSL3で通信を開始させる。
※ネゴシエーションのデータは平文なので、改ざんが可能。

⑤SSL3によって暗号されたデータがクライアントからサーバへ送信されるので、そのデータを盗聴する

⑥盗聴したデータのパディングを改ざんしてからサーバへ送信して、サーバ側で復号が成功したかを確認する

⑦ ①から⑥を繰り返し、データの解読を行なう

■対策
SSL3へのダウングレードを防ぐのが有効。サーバかクライアントのいずれかで、SSL3を無効にすれば良い。
スポンサーサイト



脆弱性対策情報データベースとCVSS

脆弱性対策情報データベース(JVN iPedia)とは、JPCERTとIPAが共同で運営している、日本におけるソフトウェアなどの脆弱性に関連した情報を保管、提供しているサービスである。海外の脆弱性情報サイトなどと連携し、脆弱性情報の公開を行なっている。


■CVSS
脆弱性対策情報データベースでは、発見された脆弱性に対して、CVSS(共通脆弱性評価システム)という方法を利用して、危険度の評価を行なっている。
CVSSはアメリカインフラストラクチャ諮問委員会によって原案が作成され、今では数十の機関で利用されている。
開発ベンダに依存せず、統一された基準にて脆弱性を評価することで、危険度を定量的に判断することができる。


■CVSSの評価方法
CVSSでは、以下の3つの観点から脆弱性を評価する。

1.基本評価基準 (Base Metrics)
機密性、完全性、可用性に対する影響度合いについての評価。
この評価は普遍である。

 ・ネットワーク経由で攻撃可能か
 ・攻撃の複雑性、攻撃前に認証の要否
 etc


2.現状評価基準 (Temporal Metrics)
攻撃用コードの存在有無などの攻撃のし易さ、ベンダから対策が公開されているかなど、現状を評価する。
時間の経過と共に評価は変化する。

 ・攻撃方法が実際に確立されているか
 ・対策手段があるか、利用可能か
 etc


3.環境評価基準 (Environmental Metrics)
この脆弱性を利用する攻撃を受けた際、どれだけの被害規模になるか、この脆弱性を含む製品がどれだけ利用されているかなどの評価。利用者の環境に応じて変化する。

 ・攻撃された場合の2次被害の大きさ
 ・対象システム利用状況
 etc


以上を点数化し、0点から10点で評価する。

0.0~3.9 レベル1(注意)
4.0~6.9 レベル2(警告)
7.0~10.0 レベル3(危険)

故障を意識したシステム設計の考え方

どのようなシステムであっても、人間が構築した以上、常に故障、障害のリスクを抱える。
故障、障害が発生した場合のことを考えてシステム設計を行う必要がある。


■フォールトトレラント(Fault Tolerant)
耐障害性、対故障性と呼ばれる。
故障、障害の発生に備え、冗長化をするなどして、業務継続や安全な停止を図る設計思想・手法である。
広義では、後述のフェールソフト、フェールセーフなどを含んだ概念である。
故障、障害が発生しても、業停止や機能低下を伴わず継続利用できることが、フォールトトレラントの理想系とされる。


■フェールソフト(Fail Soft)
あらかじめ故障が懸念される箇所を冗長化させておき、障害、故障が発生した際は故障した部分を切り離すなどして、最低限の機能は維持し、機能縮小をしてでも業務を継続できるようにする設計。
HDDの冗長化や、障害発生時に障害中の機能を停止させつつ正常なサービスの提供を継続する運用などが、フェールソフトにあたる。


■フェールセーフ(Fail Safe)
障害、故障発生時に、「安全に停止する」ことを第一に考える設計思想。
例えば自動車などでエンジントラブルが発生した際、何はともあれ動力の供給を絶ち、安全に停止できるような設計になっている。また、データに高い信頼性が求められるシステムでシステム障害が発生した場合は、ロールバックを優先させてデータに不整合が出ないことが求められる。
列車の運転席には、「デッドマン装置」という機能が備え付けられている。これは、運転士に意識喪失などの異常事態が発生した場合に列車を停車させる、フェールセーフを実現させる装置である。


■フールプルーフ(Fool proof)
「ユーザは操作を誤まる」という前提で、操作を誤まった場合でもシステムの安全を保障しようとする設計思想。
「削除」などの危険度・影響度が大きい操作の実行前に確認ポップアップを出す機能や、ライターのチャイルドロックなどがフールプルーフにあたる。


■フォールトアボイダンス(Fault avoidance)
上記のフォールトトレラントと対となる言葉。アボイダンス(回避)とあるように、そもそも障害・故障が発生しないようにする考え方。十分な品質テスト、オペレータへの教育、パッチの適用などにより信頼性を高める。
フォールトアボイダンスとフォールトトレラントは互いに排他ではなく、共存させることで高い品質、業務継続能力を持ったシステムを設計することができる。


---オマケ---

■フェールデッドリー(Fail Deadly)
フェールセーフの対義語。一般的なシステムで採用されることはまずありえない。
核攻撃システムにおいて、システム異常が起きた場合は攻撃を行なうように設計をすることで、先制攻撃を受けた場合でも確実に報復攻撃ができるようになる。
誤報でも核戦争につながる恐れがあるため、アメリカでは採用されなかったとされている。

Kerberos認証

今日はSSOを実現する認証プロトコルである、Keroberos認証について記載する。


■Kerberos認証の特徴

Kerberos認証は、Windows Active Directory などで利用されている認証プロトコルである。SSOの実現、信頼できる第三者による認証処理/認証データの集中管理を行うことができる。
チケットと呼ばれる認証情報をやり取りすることで認証を行うという特徴がある。


■Kerberos認証の構成要素

Kerberos認証の動作を説明する前に、用語の説明をする。

・KDC(Key Distribution Center)
ユーザ認証、認証チケットの配布、認証情報の管理を行う、Kerberos認証の本体。

・レルム
Kerberos認証が有効な範囲、領域を表す。
Active Directoryでいうところのドメインにあたる。

・プリンシパル
レルム内のノード(サーバ、クライアント問わず)をこう呼ぶ。


■KDCの3つの機能

Kerberos認証の中核を担うKDCは、以下の3の機能を持つ。

・AS( Authentication Serve)
認証サーバ。プリンシパルを認証する。

・TGS (Ticket Granting Server)
チケット発行サーバ。各サーバを利用するためのチケットを発行するサーバ。

・データベース
プリンシパルの情報や共通鍵を保管する。
Avtive DirectoryではLDAPが利用されている。
あらかじめ、全てのプリンシパルとの共通鍵が登録してあることが前提となる。


■Kerberos認証の流れ

1.クライアントはまず、KDCのAS(認証サーバ)に対して認証要求を行なう。

2.AS(認証サーバ)はデータベースに問い合わせを行い、認証に成功すると、TGS(チケット発行サーバ)との通信を許可するためのチケットであるTGT (Ticket Granting Ticket:チケット交付用のチケット)を、クライアントとの共通鍵で暗号化して配布する。
このTGTはパスポートのようなもので、これをTGS(チケット発行サーバ)に提示すれば、許可された範囲で自由にアクセス許可を受けることができる。TGT(チケット交付用のチケット)の有効期限内であれば、2回目以降はAS(認証サーバ)の認証を受ける必要は無い。これにより、SSOを実現している。

3.クライアントはTGS(チケット発行サーバ)にTGT(チケット交付用のチケット)を送付して、サーバへのアクセス要求を行なう。
TGS(チケット発行サーバ)はクライアントの情報を確認し、アクセスが許可されている場合はST(Service Ticket:サービス用チケット)を送付する。ST(サービス用チケット)にはセッションキー(クライアントとサーバ間の通信で利用するための一時的な共通鍵)が二つ含まれており、それぞれクライアントの共通鍵とサーバの共通鍵で暗号化されている。
クライアントは、クライアントの共通鍵で暗号化されている方のセッションキーを復号し、もう片方はサーバにそのまま送付する。

4.サーバは自身の共通鍵でセッションキーを復号する。

以上の流れで、クライアントとサーバは、一元化されて信用できる第三者・つまりKDCの認証により、常に共通鍵で暗号化された通信を介して、安全にセッションキーの交換を行なうことができる。

特殊な攻撃とその防御

FWやWAFなどの防御手段を講じることでは防御でない、
稼働中のシステムとは別の場所で受ける攻撃がある。

■ソーシャルエンジニアリング

最も注意しなければならない攻撃がこれである。
不注意や、不十分な機密の管理など、人間の隙をつき、
重要なデータの搾取を試みる。

以下のような攻撃がソーシャルエンジニアリングに含まれる。

・ショルダーハッキング

 端末作業者の後ろに立ち、パスワードを盗み見る。
 極めて単純だが、作業者の注意のみでしか防御できない。

・スキャビンジング

 コピー機やFAX機に放置された書類や、ゴミ箱に破棄された
 書類などから、パスワードやその他機密情報を盗み見る。


他、本人を装って電話でパスワードを聞き出すなどの手段も
ソーシャルエンジニアリングに含まれる。

ソーシャルエンジニアリングを防ぐには、個人個人の知識、
意識が重要であり、セキュリティに関する講義を行なう、
機密情報を記載した紙媒体の処理方法を明確化するなど
が有効である。


■物理的な攻撃

コンピュータ機器に物理的な攻撃を受けた際、ソフトウェアの
観点から防御することは難しい。

・テンペスト攻撃

災害の意味ではなく、略称である。
Transient Electromagnetic Pulse Surveillance Technology攻撃。
日本語では「電磁波盗聴攻撃」と呼ばれる。

ケーブル類やディスプレイから発生する電磁波などを解析し、
データを読み取る手法である。
この攻撃が厄介なところは、攻撃された痕跡が全く残らないことである。
何も対策をしていない古い機器を利用してる場合、数十m 離れた
場所からでも電磁波を読み取ることができる。
また、漏れ出た電磁波を読み取ること自体は法的に違法ではない点も
注意する必要がある。
アメリカでは冷戦時代から研究がされ、ヨーロッパでは実際に事件が
おきて捜査機関が動いたことがある。

ケーブルや部屋の壁に電磁波から漏れ出ないようにフィルタをつける
などして、電磁波自体が漏れでないようにするのが有効。


・サイドチャネル攻撃

暗号化された物理デバイス(ICカード、電子入館証など)を入手し、
処理時間、中を流れる電流などを計測することで、内部の情報を
読み取る攻撃。一般にテンペスト攻撃よりも難しいとされる。

物理デバイスを厳重に管理する、外部から不正な操作をされた
場合に内部のデータを破壊するようにするなどが対応策となる。