ニュースレターNo.28/2004年11月発行
知っておくべき脆弱性の基礎知識 開催報告
JPNIC・JPCERT/CCセキュリティセミナー2004 ~For Advanced~
「いまやTCP/IPのネットワークが、基幹産業の根幹を担っている。つまり、ネットワークの維持は、『インフラのインフラ』を守ることと同義である」これは、これは有限責任中間法人JPCERTコーディネーションセンター(JPCERT/CC)の歌代代表理事が述べた言葉です。そして「これらのネットワークの高信頼性維持に必要なのは《知識》《技術》《経験》、そして何よりも使命感にも似た《マインド》だ」と。
JPNICとJPCERT/CCは、2004年9月3日(金)に【~For Beginners~知っておくべきインシデントハンドリングとは】、10月4日(月)・5日(火)に【~For Advanced~知っておくべき脆弱性の基礎知識】をテーマにセキュリティセミナーを開催しました。
本稿では、【~For Advanced~知っておくべき脆弱性の基礎知識】の各講演内容のサマリーをご紹介します。知識のみならず、志《マインド》をも高めてもらえる機会になれば、とお送りするものです。
脆弱性の基礎知識
JPCERT/CC代表理事 歌代和正 セミナーの開催にあたって、 現在のセキュリティに関する動向と問題意識を総括し、その中で、 脆弱性情報について学ぶことの意義についてお話ししました。 |
「ソフトウェア等脆弱性関連情報取扱基準(経済産業省告示)」では、脆弱性を「ソフトウェア等においてコンピュータウィルス、コンピュータ不正アクセス等の攻撃によりその機能や性能を損なう原因となり得る安全性上の問題箇所」と定義しています。製品供給者から見た場合の製品の脆弱性は、それが認識されているか否かは別にして、その製品に備わった静的な性質のように見えます。
しかし、利用者から見た場合、それを利用する環境全体の中で脆弱性を捉えなければなりません。ISO/IEC 15408では、所有者・対策・脅威・脅威エージェント・リスク・資産との関係を指摘しています。「自分にとっての資産は何か?」「その損失を抑えるにはどう対策を講じるべきか?」「対策を講じた後もリスクはあるか?」「そのリスクが資産価値に対しどういう重みを持つか?」等の視点から総合的に勘案して、はじめて自分にとっての脆弱性が見えてくるのです。
また、個々の製品には脆弱性がなくても、それらを組み合わせたシステムが脆弱になることはあります。逆に、脆弱性を持つ製品を組み合わせて、強固なシステムを構築することも可能です。つまり、製品の脆弱性とシステムの脆弱性は別物なのです。それらのシステムが組み合わさって、より大きなシステムを構成し、それはさらに大きな環境の一部となります。脆弱性も、このような階層構造のそれぞれの段階で考えなければなりません。
供給者の視点に立ち返ると、偏った思い込みに囚われず、多様な利用者環境を想定し、どのような環境でも脆弱性が問題とならない製品を提供するように心がけるべきです。
Webの脆弱性
中央大学研究開発機構 塩月誠人 XSS(Cross Site Scripting)☆1の脆弱性とは? それを防ぐには? など、 Webにまつわる各種脆弱性についての解説を行いました。 |
本セッションは、Webシステムにまつわる脆弱性とはどういったものなのか、どういう危険性があるのか、またどのような対策が必要とされるのかについて、WebサービスおよびWebアプリケーションレイヤにターゲットを絞り、網羅的に解説するものでした。
そもそも脆弱性を考える上で重要なのは、脆弱性の要因となる「脅威」(あるいは「攻撃手法」)を理解することです。そのため、ここではWASC(Web Application Security Consortium)が今年の7月に発行した「Web Security Threat Classification」という技術文書をベースに、認証、承認、クライアントサイド・アタック、コマンド実行、情報取得、ロジカル・アタックという大分類に沿ってWebシステムに関する一般的脅威を体系的に述べ、同時にそれぞれの脅威がどのような場合に脆弱性へとつながるかを説明しました。今回は時間の関係で、各々のトピックについて深くは掘り下げず、極力全体を網羅する方向でまとめているため、詳細については講演資料に掲載した参考URLの各文献を参照していただきたいと思います。
脆弱性キーワードを読み解く
NEC 古賀洋一郎 セキュリティホール情報に登場するBuffer Overflow☆2などのキーワードについて、 問題発生のメカニズム、対処方法を解説しました。 |
セキュリティにかかわるバグであるBuffer Overflow、Double free Bug、Format String Bug が、攻撃用コードの実行を引き起こすメカニズムを解説しました。
攻撃用コード実行のためには、攻撃対象となるプロセスのメモリ空間にコードを注入し、そのコードに処理を飛ばすことが必要です。コードの注入方法は、正規のデータ入力を経由してなど、いろいろ考えられます。そのコードに処理を飛ばすための方法は、関数のポインタやサブルーチンの戻りアドレスなど、処理の飛び先を格納しているデータを書き換えることです。
今回とりあげたバグを悪用することで、ターゲットデータの書き換えが実現してしまいます。そのポイントは、Cの規格で未定義とされている部分における処理系の動作にあります。
多くの処理系では、規格上未定義の状態に陥ることを想定していないのですが、バグのために未定義の状態に陥ってしまうことがあります。そうなると、本来ならばユーザにはアクセスできないデータの書き換えが可能になるなど、予期しないことが起こり得ます。こうした反応を攻撃者はうまく悪用し、結果的に攻撃用コードの実行につなげるのです。
Buffer Overflowのケーススタディとデモンストレーション
株式会社ラック 新井悠 Buffer Overflowの脆弱性について、 最近の事例を挙げて解説すると共にテストツールを使ったデモなどを行いました。 |
ネットワークに対して影響を与えることが予想されるイベントが予期されたとします。たとえば、脆弱性が発見されてワームの感染活動の手段として用いられることが懸念される状況となったとします。そこではじめて「対応準備」が行われるわけです。私のセッションでは、対応準備の行われる前の段階についての知識をもとにお話をさせていただきました。すなわち、まさに「脆弱性が発見されてワームの感染活動の手段として用いられることが懸念されるかどうか?」という『仕分けのしかた』です。
Windowsに感染するワームの横行が昨年からのトレンドであり、セキュリティの最重要課題でした。一方で、脆弱性の情報は危険性が「致命的な」あるいは「特大の」といったケースがほとんどであるといっても過言ではないでしょう。そしてそれらは、Buffer Overflowというカテゴリに含まれていることがほとんどなのです。「ワームに利用される可能性のあるBuffer Overflow」を見分けることは、パッチの適用に代表される対応準備に大きな影響を与えることでしょう。
同時に、Buffer Overflowの抑制が期待できる技術的手段についても解説しました。Buffer Overflowを利用したワームは発生しなくなるという未来は、レガシーなシステムがまだまだ多く存在する現状からかんがみれば、とても想像できるものではないのかもしれません。それでも、長い目でみれば事態はゆっくりと解決の方向へ向かっているのかもしれません。そうした実感を少しでも参加者の皆さんに伝えることができたのなら、私にとってそれ以上のことはありません。
脆弱性情報流通体制
JPCERT/CC 伊藤友里恵 国内の脆弱性情報流通の枠組みについて紹介すると共に国際的な連携の枠組みについても紹介しました。 |
JPCERT/CCは、2004年7月に経済産業省から「脆弱性情報流通調整機関」に指定されました。そのような経緯もあり、国内外でどういった枠組みのもと、この「脆弱性情報」が取り扱われているのかについて概説を行いました。
さて、JPCERT/CCでは日々この脆弱性情報を取り扱って(ハンドリングして)いるわけですが、そもそも「脆弱性情報」とは、人によっても組織によっても何を脆弱性と捉えるかによって異なるものです。JPCERT/CCでは、定義を「通常ソフトウェアの欠陥によって引き起こされるもので、明白・または暗示的なセキュリティポリシーの違反で、頻繁に予期しない挙動を引き起こすもの」としています。
また、この脆弱性情報を「ハンドリングする」とは、脆弱性関連情報を必要に応じて「開示」することにより、脆弱性の悪用や障害を引き起こす危険性を最小限に食い止めることだと位置づけています。すなわち、脆弱性情報を単に一般公開するだけではなく、それと同時に対応策等も公開されるようにするための仕組みを作り、リバースエンジニアリングから攻撃コードが先にでてしまう危険性を防いでいます。
通常、脆弱性ハンドリングの手順は、(1)報告を受ける→(2)報告された脆弱性の再現・分析・優先順位付け→(3)対応の方針決定→(4)対応という順をたどります。具体的には、日本国内では、発見者はこういった情報を、IPA(独立行政法人 情報処理推進機構 Information-technology Promotion Agency, Japan)に連絡し、IPAが受付と分析を行った後、JPCERT/CCがその脆弱性に関係のある対象ベンダを抽出し連絡をして、対応してもらうという手順をたどります。そしてその対応結果を、JVN(JPCERT/CC Vendor Status Notes)というWebサイトにアップロードすることにより、その対策情報が一般公表ということになります。
海外から入ってくる情報も同様に、JPCERT/CCというハブを通し、ハンドリングがなされます。こういった枠組みをとることによって、ベンダは情報公開前から対応を始めることが出来、また、対応状況をJVNというポータルサイトを通して周知することができるというメリットを享受することができます。
また、こうしたメリットは開発者側だけではなく、利用者側も享受することができます。例として、一人のオペレータが、システムの脆弱性を調べるために、まじめにセキュリティニュースを読んで、マシン一台にパッチをあてるだけで298日間の日数が必要だという統計があります。JPCERT/CCやJVNを積極的に利用して頂き、効率的に脆弱性対策ができる体制が確立すれば幸いです。
プロトコルの脆弱性
株式会社インターネットイニシアティブ 永尾禎啓 IP、ICMP☆3、TCP、 UDPなど基本的なプロトコル自体に含まれる既知の脆弱性と、 それらへの対策の現状について解説しました。 |
ネットワークにまつわる脆弱性には、実装上の不具合に起因するものだけでなく、プロトコルの仕様自体に起因しているものもあります。通常、プロトコルの脆弱性と言えば、そうしたプロトコルの仕様に原因がある脆弱性を指します。本セッションでは、IP,ICMP,UDP,TCPプロトコルに潜む既知の基本的な脆弱性について、その仕組みを解説し、さらに対策や緩和策の現状についても紹介しました。
脆弱性に関しては、Ping of Death攻撃やTCP ISN推測攻撃といった、いわば古典である一方で、必須の知識と言えるものを取り上げました。対策や緩和策としては、TCP SYN flood攻撃に対するsyncache/syncookieといった興味深い最新技術の詳細解説も含めました。
聴講下さった皆様が、実務でプロトコルの脆弱性に関する調査や情報収集をしなければならなくなったときに、これらの基礎知識がお役に立ちましたら幸いです。
プロトコルの脆弱性の実例
JPCERT/CC 鎌田敬介 複数のベンダにまたがるプロトコルの仕様や実装の脆弱性の概要を紹介すると共に、その流通過程などの実例を紹介しました。 |
ソフトウェアやハードウェアに含まれる脆弱性は、特定製品の脆弱性ばかりでなく、複数の製品にまたがるような脆弱性が存在する場合があります。そのような脆弱性の中でも、特に大きな問題となるのがプロトコル自体の脆弱性ですが、2004年になってからプロトコルレベルでの脆弱性がいくつも発見され公開されています。
今回のセミナーでは、「プロトコルの脆弱性」をテーマとして2004年4月に公開され、世界的にも注目を浴びたTCPの脆弱性を中心に解説しました。TCPの基礎的な事項から、脆弱性の技術的な内容、JPCERT/CCと英国NISCC(National Infrastructure Security Co-ordination Centre) が行った国際的な脆弱性ハンドリングの裏舞台も紹介しました。あわせて、2004年5月に公開されたIEEE802.11無線機器の脆弱性についても簡単に触れました。
◇ ◇ ◇
いかがでしたでしょうか。脆弱性情報を見て対策作業を行っていても、これらの情報が持つ意味などは、意外と考えずに自動的に作業していたことに気づいた方もいるのではないでしょうか。脆弱性の「仕組み」、パッチが出るまでの「流れ」などは一見日々の業務と直接的な関係はなさそうには見えますが、知って作業を行うのとそうでないのとでは、長期的にはモチベーションや効率にも大きく差をつけるものです。本稿を読んでご興味を持たれた方がいらっしゃいましたら、講演資料等は以下のWebサイトで入手できますのでご利用下さい。
★JPNIC・JPCERT/CCセキュリティセミナー資料
http://www.nic.ad.jp/ja/materials/security-seminar/
また、次回のセミナー【不正侵入の実態と具体的対策】は2005年2月に開催予定です。UNIX系とWindows系にわけ、それぞれ実際にあったインシデント事例を紹介し、ログの管理方法と解析方法、不正侵入をどう発見するか等の解説を行います。
詳細については下記Webサイトをご覧下さい。
★JPNIC・JPCERT/CCセキュリティセミナー2004 Webサイト
http://www.nic.ad.jp/security-seminar/
(JPNICインターネット基盤企画部 根津智子)
- ☆1 XSS(Cross Site Scripting)
- ソフトウェアのスクリプト・コードの脆弱性を狙った攻撃手法の一つ。悪意のあるスクリプトをターゲットのWebサイトに送ることにより、そのWebの訪問者に意図しない処理を実行させる。
- ☆2 Buffer Overflow
- 攻撃対象であるコンピュータに意図しない処理を行わせる攻撃手法の一つ。メモリ上の一次保管領域(バッファ)に、想定されたサイズを超えるデータを書き込むことで、そのコンピュータに意図しない処理を行わせる。
- ☆3 ICMP(Internet Control Message Protocol)
- IPのエラーや制御などのメッセージを転送するプロトコル。TCP/IPを利用するコンピュータや、ルーターなどのネットワーク機器間で、状態の通知や確認のために用いられる。ネットワーク診断プログラムpingが使う。