はじめに
前回は、NTTセキュアプラットフォーム研究所の中島明日香講師による講義のうち、特に脆弱性の概要について書いた。今回は脆弱性の原理について投稿し、次回は脆弱性への対応について投稿できればと考えている。
その1:脆弱性の概要(前回の投稿)
その2:脆弱性の原理(→ 今回の投稿)
その3:脆弱性への対応(次回の投稿)
脆弱性の原理
ソフトウェアの脆弱性がどのようにしてセキュリティホールになり、ランサムウェアのターゲットになるのだろう。この辺りを紐解いてみたい。ソフトウェアの脆弱性には次の二種類がある。
・ソフトウェアに対する脆弱性
・Webアプリケーションに対する脆弱性
ソフトウェアに対する脆弱性
講義ではバッファオーバーフローの原理について詳しく解説頂いた。ここでは概論にとどめ、それ以外の方式も簡単に紹介しておきたい。
バッファオーバーフロー
ある処理を行う場合には、処理すべきデータや処理した後のデータを保持するためのメモリ領域が必要になり、これをバッファという。例えば、C言語で記述する場合、メモリ領域は固定長で指定する。処理の途中で必要な領域に広げるという仕組みがない。必要ならば、必要なサイズのメモリ領域を確保し、データを移し替えて処理を続ける必要がある。しかし、データを書き込む場合に、この固定長で指定されたメモリ領域以外の部分に書き込むことを「バッファオーバーフロー」と言う。もし、そこに重要なデータが保存されていたらそれを破壊することになってします。これは問題だ。
(出典:IT media)
整数オーバーフロー
C言語などでは、整数演算がオーバーフローを起こしたり、ビット幅の少ない変数への代入によって上位ビットが失われても処理系がそれを誤りとして検出しないことが多いため、潜在的な脆弱性の原因となっている。整数オーバーフロー攻撃は、二進数の整数演算結果が予定外の値を生むケースを悪用し、侵入コードの送り込みと実行をもくろむものである。この攻撃が成立すると、任意のマシンコードが実行され、最悪の場合には攻撃者がコンピュータの管理者権限を取得する。攻撃のメカニズムとしては、攻撃者はデータ配置のオフセットや転記データ長として、予定外の符号の値あるいは範囲を超えた値を生じさせるよう整数演算を誘導し、それを利用してメモリ上に攻撃コードを送り込む。それとともに関数の戻りアド レスやプログラムが使っている何らかのジャンプ先アドレスを書き換えることで、攻撃コードへ制御を移すというものだ。
(出典:IPA)
書式指定文字列の脆弱性
これは、フォーマット文字列攻撃あるいは書式文字列攻撃による脆弱性だ。例えば、printf()やsyslog()などの関数の引数の特性を悪用してメモリ内容を盗み見したり、悪意のコードを実行する攻撃だ。
開放後メモリ使用・二重開放
C言語(C++)では、特に指定せずにコピーをすると、デフォルトのコピーコンストラクタが起動する。このデフォルトのコピーコンストラクタにより、dump関数に値が渡るときに、Numのメンバ変数がそのままコピーされる。valの値もそのままコピーされると、同じメモリアドレスを指すことになる。dump関数が終了した時には、main関数の残りの処理は終了だ。ここで2重解放が発生し、プログラムが落ちてしまう。落ちないコードにする解決方法は、解決1)dump関数の引数をポインタ・参照にするか、解決2)適切なコピーコンストラクタを定義するかだ。
(出典:Qiita)
Webアプリケーションに対する脆弱性
Webアプリケーションに対する脆弱性の攻撃ではXSSが多数を占めていたが、近年はSQLインジェクションなどより悪質な方法が出回っているので注意が必要だ。
クロスサイトスクリプティング
クロスサイトスクリプティング(XSS:Cross-site scripting)とは、Webサイトの脆弱性を悪用して罠を仕掛け、攻撃者が悪質なサイトへ誘導し、サイトに訪れるユーザーの個人情報などを詐取したり、マルウェア感染させたりするサイバー攻撃のことだ。XSS攻撃者は他のユーザーが閲覧するウェブページにクライアント側のスクリプトを注入する。クロスサイトスクリプティングの脆弱性は、攻撃者が同一生成者ポリシーなどのアクセス制御を回避するために使用される可能性がある。2007年のシマンテック社による調査ではセキュリティ脆弱性の約84%を占めていた。XSSの影響は、小さなものから、厄介なもの、大きなセキュリティリスクまでだ。ターゲットを誘いこむ手順は次の通りだ。
・攻撃者CがXSSに対して脆弱性のあるA社を発見し、A社に興味を持ちそうなユーザーのいる掲示板サイトBに罠を仕掛ける。
・ユーザーが掲示板サイトBを閲覧し、掲示板サイトB内でスクリプトを実行する。
・ユーザーはスクリプト情報を持ったままA社のページに移動(クロスサイト)する。
・スクリプトの効果により「A社のサイトとして」表示された偽サイトにジャンプする。
・騙されたユーザーが情報を入力した結果、スクリプトが悪さをする。
・攻撃者Cの手により、ユーザーに対して様々な被害が発生する。
(出典:CyberSecurity)
クロスサイトリクエストフォージェリ
クロスサイトリクエストフォージェリー(Cross-site request forgery)は、ワンクリック攻撃やセッションライドとも呼ばれ、CSRF(シーサーフ)やXSRFと略されることがある。ウェブサイトに対する悪意のある攻撃の一種で、ウェブアプリケーションが信頼されているのに、ユーザーが不正なコマンドを送信する。ユーザーが特定のサイトに対して抱いている信頼を悪用するクロスサイト・スクリプティング(XSS)とは異なり、CSRFはサイトがユーザーのブラウザに対して抱いている信頼を悪用します。
(出典:Secure Solution)
SQLインジェクション
SQL インジェクション(injection)は、悪意のある SQL 文を入力フィールドに挿入することで、データ駆動型アプリケーションを攻撃するために用いられるコードインジェクションの手法だ。セキュリティ脆弱性を突くためにSQLインジェクションを用いる。つまり、SQL文に埋め込まれた文字列リテラルエスケープ文字の不適切なフィルタリングや強くタイプされていないユーザー入力が予期せず実行されるなどだ。 SQLインジェクションは主にウェブサイトを攻撃する手段として知られているが、あらゆるタイプのSQLデータベースを攻撃するために使用することが可能だ。SQLインジェクション攻撃により、攻撃者は、IDの偽造、既存データの改ざん、取引の無効化や残高の変更などの否認問題の発生、システム上の全データの完全開示、データの破壊やその他の無効化、データベースサーバーの制御を行うことができる。
(出典:サーバー研究室)
OSコマンドインジェクション
OSコマンドインジェクションは、Webサイトに向けて不正な入力を行うことにより、Webサーバ側で想定していない動作をさせるサイバー攻撃だ。入力を受け付けるWeb画面を主なターゲットとし、ユーザーからのデータや数値の入力に紛れ込ませて、プログラムに与えるパラメータにOSへの命令文を渡す。この命令文を受け取ったWebサーバが誤ってOSに対する命令を行ってしまうことで被害が発生する仕組みだ。Webシステムの作成者や管理者が想定していない命令文をサーバ上で強制的に実行されてしまう。主にWebアプリケーションが、Webサーバのシェルというプログラムを呼び出してコマンドを実行する動作が狙われやすい。
(出典:Cyber Security)
脆弱性の悪用の可能性がある前提条件
悪意を持って細工したファイルを、脆弱性のあるファイルと同じフォルダーに保存するとどうなるのだろう。IPAが実験したところによる、脆弱性のあるファイルを細工されたファイルが同じフォルダーに保存されていると気持ちが悪い。IPAの調査によると、現時点で悪用された被害事例を確認していませんということだった。確実な判断ができない場合には、本脆弱性の悪用の可能性が生じないように、細工されたファイルと脆弱性が存在するアプリケーションを同じフォルダーに保存しないように推奨している。
(出典:IPA)
まとめ
今回は脆弱性の講義を受けて、その2として、脆弱性の原理や仕組み、脅威についてまとめてみた。セキュリティの専門家以外には難解かもしれないが、できるだけ平易に解説したつもりなので、参考になる部分があれば幸だ。
以上
最後まで読んで頂きありがとうございました。
拝
参考
その1)脆弱性とは
・中島明日香さん
・SF小説「Project Seven」
・ソフトウェアの脆弱性
・ 脆弱性とは
脆弱性の報告数
CVE-ID
CVSSとCWE
脆弱性発見コンテスト(Pwn20wn)
脆弱性情報の市場価値
正規市場
非正規市場
クラウド型脆弱性報告プラットフォーム(HackerOne)
脆弱性買取会社(Zerodium)
その3)脆弱性の扱い
・サイバー兵器とも呼ばれたコンピュータウィルス
・二重強迫型の新しいランサムウェア攻撃
・ハッキングツール(Exploit Kit)
・第5の戦場
・Cyber Grand Challenge
・タリン・マニュアル
・ワッセナー・アレンジメント
・IPA脆弱性受付窓口
・Irfanviewの脆弱性
・人間の脆弱性
・脆弱性の扱い
・セキュリティコンテスト(CTF)