身近な脆弱性攻撃Proof of Concept code
Proof of Concept code(以下、PoC) とは、コンピューターシステムの脆弱性やセキュリティホールの存在および悪用可能であることを証明するために作成された検証用プログラムコードの総称です。
脆弱性実証コード、概念実証コードなどと呼ばれることもあります。
本記事では PoC の概要から、PoC を悪用した攻撃の概要、対策方法を解説していきます。
Proof of Concept code とは
PoC は本来、脆弱性の存在や悪用可能性を証明するための検証用プログラムコードのことです。
脆弱性やセキュリティホールは広義にはバグの一種で、バグの影響内容が機密性・可用性・完全性に影響を与えるもの(たとえば情報漏洩・サービス停止・ファイルの改変など)を指します。
何らかのバグが脆弱性やセキュリティホールとして認知・公知されるためには、バグが実際に発現することを証明する必要があります。
この証明を行うために作成されるのが PoC です。
PoC は脆弱性の証明目的以外にも、自分以外の環境でどのように動作するのかを他の人に実証してもらうためにも作成されます。
これは、PoC を他の人にも伝えることによって、セキュリティ製品を取り扱う会社が PoC から対策案を出せることと、そのソフトウェアを利用している人が自分の環境で発現するかを確認できるというメリットがあるためです。
エクスプロイトコードとは
上述の通り、PoC は脆弱性の証明と対策立案など脆弱性を悪用する行為から守るために利用されます。
一方で、PoC は脆弱性を発現させる手段とも言えるため、攻撃することを前提としたエクスプロイトコードとして改変され、システムの脆弱性を攻撃するための起点になりえてしまうという危険性もはらんでいます。
エクスプロイトコードの中には、対処するまでに時間がかかるゼロデイ攻撃に繋がるものも含まれており、油断できない恐ろしい攻撃と言えるでしょう。
エクスプロイトコードはどのように使われるのか
攻撃者がエクスプロイトコードを使用するケースは、その対象によって大きく 2 つあります。
クライアントアプリケーション
みなさんがお使いのパソコンにインストールされているクライアントアプリケーション(ここでは OS のアプリも左記に含みます)にマルウェアをインストールすることを目的としたケースです。
クライアントアプリケーションは、使用者が多いこと、また、それを利用する端末のセキュリティ対策レベルが高くない場合も多いことから、エクスプロイトコードを使用した攻撃の格好の標的となっているように見受けられます。
具体的に、クライアントアプリケーションを侵害するために、どのようにして攻撃者がエクスプロイトコードを使用するのか見てみましょう。
エクスプロイトコードが仕込まれたサイトにアクセスさせる
1 つ目はエクスプロイトコードが仕込まれたサイトにアクセスしたときです。
攻撃者はターゲットが訪れそうなサイトを用意、または訪れているサイトを改ざんし、エクスプロイトコードを仕込みます。
ユーザーがそのサイトにアクセスしページをロードすると、ブラウザのバージョンやプラグインのバージョンを識別し存在する脆弱性を特定します。
その後、脆弱性に応じたエクスプロイトコードがブラウザ上で実行されます。
エクスプロイトが成功した場合、攻撃者のサーバーから悪質な働きをするマルウェアをダウンロードし、実行する命令が書かれたスクリプトが実行され、結果としてマルウェアに感染してしまいます。(ドライブバイダウンロードとも言います)
これにより個人情報の流出や、スパムの拡散、DDoS 攻撃のような被害につながってしまいます。
エクスプロイトコードが仕込まれたファイルを開かせる
2 つ目はエクスプロイトコードが仕込まれたファイルを開いたときです。
拡散されたスパムやフィッシングメールを介して送り込まれることが多く、テキストメールであればメール自体の開封では基本的に効果はありませんが、添付ファイルを開くことでエクスプロイトコードが読み込まれてしまいます。
これらは、ブラウザやオフィスソフトなどの脆弱性を悪用したパターンです。
また、不明なソースからダウンロードしたファイルでも同様のことが起こりえます。
サーバサイドアプリケーション
公開サイト / サービス / アプリケーションに対して、情報窃取やボット化、上記のクライアントを狙う際の踏み台とすることを目的としたケースです。
センシティブな個人情報や支払い情報を取り扱う公開サイトは攻撃者にとって金銭的価値が高いこと、加えて注目を集めるようなサイトは悪用価値が高いことから、サイトやサービスによっては執拗な攻撃を受けるリスクがあります。
公開されているサーバサイドアプリケーションの場合、クライアントアプリケーションに対するものとは異なり、エクスプロイトコードを送信することは難しくありません。
では、エクスプロイトコードがどのような役割を果たしているか見ていきましょう。
攻撃の入り口として
公開しているアプリケーションで脆弱性がある場合に、攻撃の入り口を確保するため、エクスプロイトコードが使用されます。
この公開されたサーバーサイドアプリケーションの脆弱性は、他サーバーに対する攻撃の踏み台となったりします。
攻撃をより危険なものに
上記の入り口が確保された後、攻撃者はラテラルムーブメントを実施します。
ラテラルムーブメントとは、ある程度のサーバ操作の権限を取得した攻撃者が、更なる侵害を目的として、アプリケーションに含まれる脆弱性に対してエクスプロイトコードを使用することを指します。
たとえば、他の DB サーバーに対して、脆弱性を悪用することで情報を盗み出したり、サーバのフルコントロール権限を奪取するなどです。
エクスプロイトコードの対策方法
エクスプロイトコードを利用した攻撃の概要と感染経路についてご理解いただけたかと思います。
次は、攻撃から身を守るための対策方法についてご紹介します。
主な対策方法は 3 つです。
OSやソフトウェア、アプリのバージョンを最新のものに保つ
サーバサイドアプリケーション、クライアントアプリケーションに限らず、OS やソフトウェア、アプリは単なる機能のアップデートだけでなく、各種脆弱性への対応としてもリリースされています。
常に最新のバージョンに更新し攻撃に対する隙を作らないことが一番の対策になります。
不審なURLにアクセスしない、不審なメールやメールの添付ファイルは開かない
上記でも記述したように、クライアントアプリケーションに対するエクスプロイトコード攻撃の多くは不審なURLや添付ファイルを開くことをトリガーに発生します。
世間でもすでに当たり前になりつつありますが、現在でも未だに発生している攻撃手法なので引き続き用心しましょう。
セキュリティ対策ソフトを利用する
万が一、悪質なエクスプロイトコードを開いてしまった場合でも、疑わしい振る舞いを検知し動作をブロックしてくれるソフトも出回っています。
規模が大きい組織など、個人の注意では限界があるような現場の場合はこのようなツールを活用するのもおすすめです。
また、IPS 製品の中には、悪性なコードを検知してブロックする仕組みが備わったものもあるため、対策時には検討すると良いでしょう。
さいごに
エクスプロイトコードは悪用されると広い範囲への攻撃が可能となってしまう危険な攻撃です。
個人でできる対策方法もありますので、自分の身を守るためにもぜひ先手で対策を打つようにしましょう。
yamory では、Web アプリケーションの約 9 割を占めると言われているオープンソースソフトウェアの脆弱性と、その脆弱性に関連する攻撃情報をモニタリングし、アプリケーションのセキュア化を支援いたします。
インターネットの安全性を高めるためにも、ぜひ一度お試しいただければ幸いです。