この記事では,研究のサーベイをまとめていきたいと思います。ただし,全ての論文が網羅されている訳ではありません。また,分かりやすいように多少意訳した部分もあります。ですので,参考程度におさめていただければ幸いです。
間違えている箇所がございましたらご指摘ください。随時更新予定です。他のサーベイまとめ記事はコチラのページをご覧ください。
本記事の内容
大学で学習した「情報セキュリティ」の内容を網羅的にまとめていくものです。目次は以下の記事をご覧ください。
脆弱性とは
3つの定義を紹介します。どれを見ても,「悪さをする何か」によって「問題を起こしうる」ような「問題箇所」として定義されていることが分かります。
ソフトウエア製品やウェブアプリケーションにおいて,コンピュータ不正アクセスやコンピュータウイルス等の攻撃により,その機能や性能を損なう原因となり得るセキュリティ上の問題箇所。
情報システム等の脆弱性情報の取扱いに関する研究会報告書(IPA)
Weakness of an asset or control that can be exploited by one or more threats.(1つ以上の脅威によって悪用されうる資産または管理方法の弱点)
ISO 27000 / JIS Q 27000
Weakness in an information system, system security procedures, internal controls, or implementation that could be exploited or triggered by a threat source.(脅威源によって悪用または引き起こされうる情報システム・セキュリティ手続き・内部管理方法・実装の弱点)
NIST, Glossary of Key Information Security Terms, NISTIR 7298 Rev 2
分類
ここでは,危険度(影響の深刻度)によって脆弱性を分類していくことにします。
1.サービス不能攻撃が可能
2.権限昇格が可能
3.認証の回避が可能
4.任意のプログラム実行可能
より詳しくは,CWE(Common Weakness Enumeration)によって分類されています。(参考:IPA「共通脆弱性タイプ一覧CWE概説」)
サービス不能攻撃が可能
サービス不能攻撃とは,いわゆるDos(Denial of Service)攻撃のことを指します。何らかの手法を利用して攻撃を仕掛けることで,ターゲットの使用しているサービスを利用不可能な状態に陥らせる行為のことです。F5攻撃やメールボムがDos攻撃に相当します。
以下の記事も参考にしていただければと思います。
サービス不能攻撃が可能な脆弱性の具体例としては,「ある特定の文字列を入力するとサービスが停止してしまう」等が挙げられます。
権限昇格が可能
多くのOSでは,ユーザーはシステムに重大な影響を与えるような変更を施すことが可能なユーザー(管理者)と,一般ユーザーに分けられています。たとえば,Googleのサービスを扱う上でも,公開範囲を設定すれば部外者には「権限がないので見られません」という旨のメッセージが表示されます。
つまり,権限の昇格が可能な脆弱性とは,システムの変更が不可能な一般ユーザーが管理者権限でプログラムを実行できてしまうような状況を指します。具体的には,何かしらのソフトウェアをインストールすることで,外部からローカルPCにログイン可能な第三者によって権限を昇格されるような脆弱性が該当します。
認証の回避が可能
パスワード認証の際に,本来要求されているはずの正しいパスワード以外の文字列で認証が通ってしまうような脆弱性を指します。例えば,ユーザーが何であれ,「root」という文字列をパスワード欄に入力すれば認証が通ってしまうような状況が該当します。
任意のプログラム実行可能
ターゲットの任意のプログラムを実行することが可能な脆弱性です。具体的な例としては,バッファオーバーフローが挙げられます。
バッファとはメモリ領域のことを指しており,プログラムの許容範囲外のデータを入力として与えた場合に起こる可能性があります。バッファをオーバーフローさせることで,想定外の領域に書き込みをすることができてしまうのです。そこで,悪意のあるコードを実行させれば,任意のプログラムにアクセスが可能になってしまうという流れです。
例えば「CWE-120」はCやC++で記述されたコードによく見られる脆弱性で,不正確なポインタ計算や不完全な初期化,メモリの開放による不正なポインタへのアクセスといった問題が考えられます。また,オーバーフローした部分のコードに意味がない場合でも,サービス不能状態に陥る可能性もあります。
バッファオーバーフロー
バッファオーバーフローを利用すれば,リモートからの攻撃が可能になります。脆弱性のあるターゲットにバッファオーバーフローを起こすデータを送りつければ,Shellを起動することも可能になります。
一度Shellを起動させてしまえば,攻撃者はリモート接続するコードを打ち込んだり,マルウェアをダウンロードさせたりすることができます。
対策
脆弱性への対策としては,「バグは一生なくならないものだ」と捉えて付き合っていくべきです。日々の情報収拾を怠らずに,最新の脅威対策にアップデートを続けていくことが大切です。
的確な対策をするためには,脆弱性を分類する必要があります。以下のように,脆弱性は多くの視点から分類されます。
●CVE(Common Vulnerabilities and Exposures)
→脆弱性の通し番号(MITREの公式サイト)
●CWE(Common Weakness Enumeration)
→脆弱性の原因による分類
●CVSS(Common Vulnerability Scoring System)
→脆弱性の影響の評価
・脆弱性そのもの(どのような脆弱性なのか)
・影響の深刻度(現在どのような状況なのか)
また,脆弱性を発見した場合,ただちに報告するべきです。なぜなら,ゼロデイ攻撃を受ける可能性があるためです。ゼロデイ攻撃とは,セキュリティホールの存在が知らされる前,もしくは修正プログラムが配布される前に,悪者が脆弱性につけこんで攻撃を仕掛けることを指します。
一方,むやみやたらと脆弱性に関する情報を開示するのも得策ではありません。なぜなら,脆弱性に関する情報が攻撃者の手に渡ってしまうからです。ここのトレードオフを理解しながら,信頼できる組織に適切な情報公開 or 相談を行なっていくべきなのです。
指名手配犯の懸賞金と同じように,脆弱性の報告にも報酬金が支払われる場合があります。また,報告者の指名が謝辞に記載されることもあります。
私たちが脆弱性の対策を行う上で意識できることは,以下が挙げられます。
●定期的なアップデート更新
●UACの活用(管理者権限を乱用しない)
●情報収拾
→JVN,JPCERT/CC, IPAなど
●信頼できないアプリの実行を制限
●被害の最小化に務める
→Sandbox, セキュアOS, 最小特権など
また,プログラマとしては以下のようなことを注意するべきです。
●入力が妥当かどうかをチェック
●脆弱性を生み出しやすいライブラリの使用を避ける
まとめ
情報セキュリティの脆弱性についてお伝えしました。私たちは,普段何も考えずに適当なセキュリティ対策ソフトを導入している方が大半だと思いますが,万が一何か起こった際に自分の力である程度対応できるようになっておくことは重要なのかもしれないと思いました。少なくとも,「何かをインストールするときに管理者権限での実行を適当に許可すること」はやめておこうと思いました。