読者です 読者をやめる 読者になる 読者になる

Twitterに書ききれないこと

イベントや技術的なことを記したい・・・

A Survey on Heuristic Malware Detection Techniques

マルウェア解析

情報セキュリティ系論文紹介 Advent Calendar 2015の記事を書くつもりが・・・12月25日どころか2015年が終わってしまった・・・ まずは3月になってしまったことを謝罪します・・・

ということですが,Information and Knowledge Technology (IKT), 2013 5th Conference で発表されたA Survey on Heuristic Malware Detection Techniquesの要約について書きます.

IEEE Xplore Abstract - A survey on heuristic malware detection techniques

Abstract

マルウェアの検出に使用される主な手法はシグネチャーベース、ビヘイビアベース,ヒューリスティックベースの3つある. シグネチャベースのマルウェア検出は,市販のアンチウイルスによって使用される最も一般的な方法である. しかし,マルウェアが完全に解析されている場合にのみ使用することができる. ビヘイビアベースのマルウェアの検出は,シグネチャベースの手法の欠点をカバーするために導入された. しかし,いくつかの欠点のため、ヒューリスティックベースの手法が導入されている. 本稿では、NGrams,APIコール,オペコードなど,これらの手法で使用されるヒューリスティックマルウェア検出方法と簡単な概要さまざまな機能について議論し,それぞれの長所と短所について説明する.

INTRODUCTION

マルウェア(悪意のあるソフトウェアの略)は.通常のコンピュータシステムへの不正アクセスを機密情報を収集したりすることによって,コンピュータシステムの通常の動作を破壊し, 主に嫌がらせすることを目的とするソフトウェアとして考えられている*1

マルウェアの識別は,マルウェアの被害が大きくなっている今日,重要である. マルウェアは,ウイルス、ワーム、トロイの木馬スパイウェアアドウェアルートキットなどのいくつかのカテゴリに分けることができる *2

ウイルスは,他のプログラムに自身をコピーすることができます悪意のあるコードである. 実際にはそれだけでは何もできず,感染したキャリアプログラムで実行する必要がある. ウイルスは通常、ユーザーの関与で実行される.

ワームは,独立したプログラムであり,実行のために他のプログラムを必要としない. 通常,コンピュータネットワークを介して拡散し,悪意のある目的のために,システムの弱点を使用する.ワームは,実行および増殖のためにいかなるユーザの操作を必要としない.

トロイの木馬は,正当な有用なプログラムのように表示されるマルウェアである. しかし実際には,コンピュータのセキュリティを侵害し,多くの被害を引き起こす可能性がある.

スパイウェアはひそかに,パソコンにインストールされるコンピュータプログラムでありる. ユーザーの許可なしにコンピュータで記録,操作を行う. ルートキットは,ハッカーが悪質なことを行うことができるように,オペレーティング・システムの構成要素へ設定するプログラムである. ときには,オペレーティングシステムカーネルに影響を与える.

バックドアは,マルウェア変種である. これは、ユーザーの許可なしにリモートアクセスのため,感染したコンピュータを準備する.被害者のコンピュータにバックドアを開くことでこれを実現する. (すなわち、ポートを開く)

シグネチャベースのマルウェアの検出手法では,疑わしいファイルは利用可能なシグネチャのリストと照合することによって分析する. このリストと比較し,一致した場合にテスト対象のファイルは,悪意のある実行可能ファイルとして分類される.

マルウェア開発者は,シグネチャベースの手法による検出を回避するために,隠蔽工作を行なう. マルウェアは,各送信のごとに変更される.

したがって,シグネチャを抽出し,マルウェアの新しいバージョンを検出することは,時間と労力が必要である. 本研究では,マルウェアが自分自身を隠した場合に,マルウェアの検出のため最も効果的なヒューリスティックな方法を導入することに焦点を当て,手法を検討する.

2章では,簡単にマルウェアの検出方法の概要を議論する. 3章はマルウェア隠蔽工作を紹介する. 4章では,ヒューリスティックベースのマルウェア検出で行った研究の概要を説明しています。 5章で比較表を示し、最後に6章で,調査のまとめについて述べる.

MALWARE DETECTION METHODS

マルウェア検出方法は基本的に異なる観点から、異なるカテゴリに分類されている. 本論文では,図1に示したマルウェアの検出方法のための3つのカテゴリを想定する.

f:id:pinksawtooth:20160111034220p:plain

A . Signature-based methods

今日,パターンマッチングがマルウェア検出における最も一般的な方法であり,シグネチャベースの検出は,その領域の中で最も一般的な方法である*3シグネチャは,ファイルごとにユニークな特徴,実行可能ファイルの指紋のようなものである. シグネチャベースの手法は,マルウェアを識別するために,さまざまなマルウェアから抽出されたパターンを使用し,他の手法よりも高速で効率的である.これらのシグネチャは,マルウェアが一意に定まるように慎重に抽出される. そのため,このシグネチャを使用した検出手法の誤差率は小さい. この小さなエラーレートが,一般的な商用アンチウイルスがこの手法を最も使用する主な理由である.

この手法は,未知のマルウェア亜種を検出することができない.また,ユニークなシグネチャを抽出するために,人材,時間,高い費用が必要である. これがこの手法の主な欠点である. またマルウェアは感染毎にコードを変異させる.このような,マルウェアポリモーフィックメタモーフィックも別の欠点となる.

これらの課題に取り組むため,研究学会は完全に新しいマルウェアの検出・ファミリーを提案する.

B . Behavior-based methods

ビヘイビアベースのマルウェア検出技術は,それが悪意のあるものかどうかを結論付けるため,プログラムの挙動を観察する*4. ビヘイビアベースの技術は,実行可能ファイルが何をするか観察しているため,シグネチャベースの手法の欠点の影響を受けにくい. 簡単に言うと,ビヘイビアベースの検出プログラムは,マルウェアが何を言うかではなく,何をするかを検査することにより,マルウェアであるかどうかを結論付ける. これらの手法では、同じ挙動をするプログラムが収集される.したがって,一つのビヘイビアシグネチャは,マルウェアの様々なサンプルを識別することができる. これらの検出メカニズムは,マルウェアが常に同様の方法でシステムのリソースとサービスを使用するので,新たな変異体を生成し続けるマルウェアを検出するのに役立つ. 動作ベースの検出は、基本的には次のコンポーネントで構成されています*5

  • Data Collector: このコンポーネントは,実行に関する動的/静的な情報を収集する.

  • Interpreter: このコンポーネントは,データ収集モジュールにより収集された生の情報を中間表現に変換します。

  • Matcher: これは,ビヘイビアのシグネチャでこの表現を比較するために使用される.

ビヘイビアベースの検出手法の例として,シマンテック社が特許を取得した,ヒストグラムベースの悪質なコードの検出技術がある*4.

ビヘイビアベースのマルウェア検出技術の主な利点は,シグネチャベースの技術が検出することができない未知のポリモーフィックマルウェア亜種を検出する点である. 一方,偽陽性率の非可用性(FOR)とスキャン時間が長くなることが欠点となる*6

CONCEALMENT STRATEGIES

前のセクションでは,我々は簡単にマルウェアディテクタによって使用されるマルウェアの検出の方策について述べた. マルウェア開発者は,マルウェアが検出されようとしていることを把握すると,様々な隠蔽技術を適用することにより,アンチマルウェア戦略を回避しようとする.このセクションでは最も知っている隠蔽戦略のいくつかを紹介する.

  • Obfuscation: この技術は,マルウェアを検出するためのシグネチャベースの検出方法を防ぐアクションを追加する.これらのアクションとは,ガベージコマンド、不要なジャンプなどを追加することである.

  • Code encryption: これらのマルウェアは,自身またはその悪意のある活動を暗号化する防御メカニズムを使用する.暗号化されたマルウェアは,復号化アルゴリズム,暗号化アルゴリズム,暗号化キーと暗号化された悪意のあるコードから構成されている.マルウェアが実行されたとき, 鍵と復号アルゴリズムは,その悪質な部分を復号化するために使用される.キーと暗号化アルゴリズムを使用してマルウェア自身をコピーし,新しいキーを生成する.新しく暗号化されたバージョンのマルウェアが生成される.このバージョンでは、暗号化アルゴリズムと新しいキーが含まれる.暗号化キーと暗号化されたコードは,常に変化するが,固定された復号化アルゴリズムは検出することができる.

  • Oligomorphic strategy: これらのマルウェアは,自分自身を保護するための防御メカニズムとして,この戦略を使用し暗号化する.そして,限られた時間のみ暗号化アルゴリズムを変更することができる. 例,有限個の異なる小さな復号化ループを持つウイルス.

  • Polymorphic strategy:このタイプのマルウェアは,通常,暗号化アルゴリズムによって,マルウェア自体を暗号化する.任意の感染では,異なる復号鍵が使用される.また,ポリモーフィックマルウェアは検出を回避するために,暗号化アルゴリズムを無制限に使用することができる.実行ごとに,復号化コードの一部が変更される.マルウェアのタイプに応じて,マルウェアによって実行される悪意あるアクション,または他のアクションは暗号化処理のもとに配置することができる.通常,ランダムな暗号化アルゴリズムを生成する変換エンジンは,暗号化されたマルウェアに埋め込まれている.エンジンやマルウェアは,生成アルゴリズムを使用して暗号化され,新たな解読キーはそれらとつながりがある.

  • Metamorphic strategy: メタモーフィックマルウェアは,マルウェアの中で最も複雑なタイプである.新しいインスタンスはオリジナルのものへの類似性を持っていないように,マルウェア自身を変更する. マルウェアは,各送信毎に任意の符号化エンジンを持たず、マルウェアソースコードを自動変更する.

マルウェアソースコードの外観を変更する,多くの異なる方法がある*7. 以下に例を示す.

  • フォーマット交替は、ソースコードに空白とコメントを追加または削除を行なう.この方法は簡単で,他の方法の中で最低の効果にもかかわらず,時々検出アルゴリズムに誤解を与えることができる.

  • 変数の名前の変更は,継続的にプログラムの正しさに違反せず,変数識別子名を変更する.変数名の変更は,人間の混乱がするが自動検出技術にはほとんど全く影響を及ぼさない.

  • プログラムのエラーが発生しないif文の並べ替えは,プログラム内のステートメントの順序を並べ替えることができる.

  • ステートメントの置き換えは他のステートメントとのいくつかのステートメントを置き換えることができる.これは,アプリケーションロジックが間違っていない場合にも同様の機能を持つ.この方法は、以前のものよりも複雑である.

  • コントロールの置き換えは,同様に動作する他の制御機能を有するいくつかの制御構造の機能を変更する.例えば,forループとwhileループは交換可能である.

  • ジャンクコード挿入は、診断を欺くためのプログラムにメインプログラムロジックを破壊しない重要でないコードを挿入する.つまり,ジャンクコードを実行しても,ソースコードのロジックには影響を与えない*1.

*スパゲッティコードは 「goto文」のように無条件ジャンプすることによってコードを複雑にする.

  • サブルーチンインライン化およびアウトライン化は,その逆のサブルーチンコールとしてサブルーチンのコードを置き換える技術で ある.コードアウトライン化は,サブルーチンコールとサブルーチンコードを置き換える技術である.コードのインライン化は逆の操作で,サブルーチン呼び出しのオーバーヘッドを回避するために使用される技術である.これらの変換は元のコードを保持するが,異なる方法でそれを扱う.

マルウェア作成者によって使用される新しい防御的な戦略に関して,いくつかのケースではシグネチャベースとビヘイビアベースの手法では,保護されたマルウェアを検出することができない.だから,効率的にこのマルウェアを検出できる新規手法が絶対的に必要とされる.

HEURISTIC METHODS

我々が述べたように,シグネチャベースと行動ベースのマルウェアの検出手法には,いくつかの欠点がある. したがって,ヒューリスティックマルウェアの検出手法は,これらの欠点を克服するために提案されている. ヒューリスティックマルウェアの検出手法は,実行可能ファイルの動作を学ぶために,データマイニング機械学習技術を使用している.例えば,最初の試みとしてNaïve BayesとMulti Naïve BayesとSchultzらによって提案されている手法*8で採用された.この手法では,マルウェアや良性のファイルを分類する.

これらML技術は,分類のためにいくつかの特徴を必要とする.図2にマルウェアの検出のために調査するいくつかの特徴を示す. f:id:pinksawtooth:20160208203932p:plain

A . API/System calls ほとんどすべてのプログラムは, アプリケーション・プログラミング・インターフェース(API)を使用してオペレーティングシステムへの要求を送信するために呼び出す*9APIの呼び出しシーケンスは、マルウェアのようなコードの一部の挙動を反映した最も魅力的な方法の一つである.

ホフメーアらの手法は,すべてのAPIシーケンスをマルウェアの特徴としてみなした. これらは,システムコールシーケンスに基づく異常検知手法を導入した. 通常の動作プロファイルは,システムコールの短い配列を用いて作製する. ハミング距離は,シーケンスを一致させるために使用した. また,しきい値は異常を決定するために使用される. 典型的には,大きなハミング距離値が異常として報告される. *10

その後、広範な研究は、API呼び出しを使用して行われた*11 *12 *13

2007年には,ポータブル実行可能(PE)ファイルによって呼び出されるWindows APIの実行配列の分析に基づいて,イェらはアソシエーション(OOA)マイニング基づく分類オブジェクト指向を用いたインテリジェントなマルウェア検知システム(IMDS)を提案した*14. 分類のための効率的なOOAルールを生成するために,OOAファースト-FP成長アルゴリズムが適応される. IMDSは,マルウェア検出における優れた性能にもかかわらず,2つの主な問題点がある. 1.分類器を構築するために生成されたルールの大規模なセットを処理する. 2.新しいファイルのサンプルを分類するために効果的なルールを見つける.

この2つの問題を克服するために、イエらは連想分類の後処理技術を使用する*15. 最初に彼らはカイ二乗テストと些細なルール剪定を適用した. カイ二乗対策ルールのランキングメカニズムと悲観的な誤差推定に基づいてデータベースのカバレッジを追求した*16. 彼らは,最終的には、最高の最初のルールを選択して予測を行った.彼らは,既存のIMDSシステムにCID SPF[15]を取り入れ,新しいシステムCIMDSと呼ばれている.これは,マルウェアの検出に連想分類のポスト処理技術を使用しての最初の試みであった.

チョンとリーは、コードグラフと呼ばれるトポロジカル・グラフを構築するために、両方の悪意のあると良性の実行可能ファイルのためのシステムコール・シーケンスを使用していました*17

すべてのバイナリプログラムでは、このグラフが抽出され、悪意のあるおよび良性プログラムのコードグラフと比較されます。

この比較に基づいて、プログラムは、マルウェアまたは良性として分類されます。

残念ながら、このグラフには大きすぎます。

大きいグラフの欠点を克服するために、リーらは,128グループへのAPIコールを分類し、そのようにコードグラフが減少しました*18

イェらは不均衡な膨大なグレーリストからマルウェアを検出するための,PEファイルのAPIコールの分析に基づく解釈分類器を提案した*19. 彼らのケーススタディは8,000,000のマルウェア、良性ファイル8,000,000、キングソフト株式会社のAN6ウイルス対策ラボから収集したグレーリスト100000のサンプルに基づいている. 彼らは,ルールの剪定やルールの並べ替えなど,いくつかの異なるポスト処理技術に基づいて効果的な連想分類器を構築した. そして、不均衡データセットへの分類器は敏感であったため,その性能を向上させるために,階層型連想分類(HAC)を開発した.

B . OpCode オペコード(命令用ショート)は実行される操作を識別する機械語命令の下位区分である. より具体的には、プログラムは以下のように定義される. 順序付けられたアセンブリの一連の命令. 命令は、命令コードで構成ペアとオペランドまたはオペランドのリストである.

オペコード上で最も重要な研究がBilarによって行われてきた*20. 彼は,マルウェアの検出の特徴として,単一のオペコードを使用することで,能力を示した. 統計的に,単一のオペコードを用いた解析の能力を分析し,実行ファイルの悪意を決定するための高い信頼性を実証し,オペコードが実行可能ファイルの解析のための強力な表現として使用することができることを証明した.

サントスらは,オペコードに基づいてマルウェアの検出の先駆者である. 彼らは,オペコード配列に基づくマルウェア検出技術の様々なタイプを発表した. 例として,彼らの最初の研究では,彼らが実行可能ファイルの表現を構築するために,オペコードシーケンスの出現頻度を用いて,難読化された変異体マルウェアを検出することに焦点を当てたアプローチを提示した*21. これを行うには,実行可能ファイルを逆アセンブルして彼らが生成したアセンブリファイルを使用する. オペコードのリストが含まれているオペコードプロファイルを構築する.その後,相互情報を使用して、両方のデータセット(すなわち、マルウェアや良性のデータセット)内のそれらのそれぞれの出現頻度に基づいて,各オペコードの関連性を計算する*22. 最後に,彼らは実行可能ファイルから適切な特徴ベクトル抽出を行うために重み付け用語頻度(WTF)を使用した*23. 彼らは,難読化されたマルウェアの亜種を検出するために,この特徴ベクトルを使用し,この目的のために,2つの特徴ベクトル間のコサイン類似度を算出した(すなわち、新しいインスタンスの特徴ベクトルとマルウェア変種ベクターが備っている).

その後、次の研究でサントスらは,オペコードシーケンスと抽出された特徴を埋め込むことによって,訓練されたいくつかの機械学習分類に基づく,新たな特徴抽出法を提示した. 私たちが知っているように,機械学習に基づいた分類器は,マルウェアや良性ファイルを検出しようとする概念クラスのそれぞれについて,サンプルの多数を必要とし,現実の世界でラベル付されたこのデータを得ることは極めて困難である. だから,サントスらは彼らの次の研究ではこの制限を解消するに,集団分類*24,単一のクラス学習*25,そして、セミ教師あり学習*26などいくつかの方法を提案した.

Runwalらは,オペコードに基づく新しいアプローチを提案し,簡単なグラフの類似性測定に基づいて,未知・変異マルウェアファミリを検出するための手法を使用する*27. 彼らは,両方のファイルタイプから(すなわち、マルウェアや良性ファイル)オペコードを抽出し,各ペアのオペコードの数は登場回数をカウントした. そして,その数に基づいてオペコードのグラフを作成し,その後クラスに分類される実行可能ファイルと,両方のファイルタイプと,最終的にファイルから得られたグラフの類似度を計算することにより,新しい実行可能ファイルの悪意を予測する.

シャブタイらは,オペコードパターンに分類技術を適用することによって,未知の悪性コードを検出することを試みた*28. 彼らは、Windowsオペレーティングシステム用のマルウェアと良性ファイルの実行可能ファイルのデータセットを作成した. 実行ファイルをディスアセンブルした後、彼らは正規化された用語頻度(TF)とTF Inverse Document Frequency (TF-IDF) を計算した. 最後に,提案された特徴選択法を評価するなどサポートベクターマシンSVM),ロジスティックリグレッション(LR),人工ニューラルネットワーク(ANN)など,いくつかの古典的な分類技術を使用した.

C . N-Grams N-グラムは、Nの長さより大きな文字列のすべてのサブストリングである*29. たとえば,文字列「VIRUS」はいくつかの3グラム:"VIR"、"IRU"、"RUS"等々に分割することができる. 過去10年間,いくつかの研究がこれによるバイナリコードの内容に基づいた,未知のマルウェアの検出を行っている.

シュルツら[8]は,独自のバイナリコードに基づいて,さまざまなマルウェアを検出するためのML技術を適用することの概念を導入した最初の人であった. PEセクションからマイニングする方法, 実行可能ファイルにエンコードされた,表現プレーンテキスト文字列を抽出する手法,そして、バイトシーケンスを用いた手法の三つの異なる特徴抽出方法がある.

Tesauroらは,マルウェア検出ドメインのための特徴としてNグラムを使用しようとする最初の人であった*30.  彼らは,人工ニューラルネットワーク(ANN)を使用してブートセクタウイルスを検出するために,nグラムを使用していた.ブートセクタウイルスは,DOSブートセクタまたはマスターブートレコードMBR)に感染マルウェア変種である. システムが感染した場合,通常MBRを台無しにされ,コンピュータの起動順序が変更される. N-グラムは,マルウェアおよび良性ファイルの実行可能ファイルの中で最も頻度の高いセクションから選択された. 彼らはそれぞれのマルウェアが既存のnグラムのセットから少なくとも4個のNグラムで構成されなければならない,特定の機能縮小アルゴリズムを使用していた.

Tesauroらの次の研究では,ANNに基づいて複数の分類器を構築するためにNグラムを使用し,最終的な結果を達成するために,特定の投票方式を使用する*31. この研究では,単純な閾値をnグラムの数を減らすために使用した. アブーら[29]は、一般的なN-gram方式やマルウェアの検出のためのK-Nearest-Neighbor(KNN)分類器を使用するフレームワークを提示した.両方のクラス(すなわち、悪意のあるおよび良性)の委譲プロファイルが構築された. 新しいインスタンスは,両方のクラスのプロファイルと一致した最も類似したものに割り当てられてた.

コトラーとマルーフらが使用するバイトのNグラムの表現は、未知のマルウェアを検出する*32 N-グラムの特徴のベクトルがバイナリだが,ファイル内の特徴の出席または非出席を提示する*33.. 彼らの以前の研究の延長では,機能に基づいていくつかのファミリーにマルウェアを分類した. それぞれのペイロードでの対象の日付に基づいて悪意のあるコードを検出する.

カイらは,いくつかの実験を行った*34. ここで彼らは,7つの特徴選択技法,3つの分類、およびバイトNグラムサイズの混合物を評価した. 最近,Moscovitchらは,バイトnグラムによって特徴付け不均衡データセットを使用した研究の結果を発表した*35.また不均衡問題の研究が示された.

D . Control flow graph

制御フローグラフ(CFG)がグラフである. それは,プログラムの制御フローを示し,広くソフトウェアの分析に使用されており,長年にわたって研究されている*36*37*38. CFGは,各ノードはプログラムの文を表す有向グラフであり,各エッジが文の間の制御フローを表してる. 文はは代入、ステートメントのコピー,分岐等であってもよい. チェルノブイリマルウェアを元に生成されたCFGの例を示す. f:id:pinksawtooth:20160331174208p:plain

[39]では,実行可能プログラムを逆アセンブルした後,変異技術の影響を低減し、良性および悪質なコードの間のフローを正規化演算する発表した*39. その後CFGに対応するプログラムを生成した. CFGは、正規化された1つのCFGと正規化されたマルウェアのCFGを同型であるサブグラフが含まれているかどうかを知るために比較する.したがって,マルウェアの検出の問題は,グラフが部分的に同型という問題に変更される.

チャオ氏は,PEファイルのフローグラフを制御するの特徴に基づいた検出法を提案した*40. 最初に,彼は各実行可能ファイルのCFGを作成した. その後,彼はデータとしてCFGから抽出された特徴を使用した. これらの特徴は,ノード,エッジおよび部分グラフについての情報である. 特徴選択した後,いくつかのデータ・マイニング・アルゴリズムは,Decision Tree *41, Bagging *42, Random Forest*43などのこれらの特徴に基づいて分類するために使用される.

Bonfanteは、マルウェアの検出のための署名としてCFGを使用していた*44. CFGは,ノードとエッジで構成されており,我々が知っているように,各アセンブラは命令の4種類で構成されています:非条件ジャンプ(JMP)、条件ジャンプ(JCC)、関数呼び出し(コール)と関数戻り(RET). 彼らはノードの名前が"inst"とプログラムの終わりを示す"end"の命令の連続配列を抽出する. 彼らは,6種類ノードjmp, jcc, call, ret, "inst" , "end"を定義した. 図に示すように,これらのタイプに基づいてCFGを構築する. その後、任意のノードのためにinst、JMPのノードを削減する. グラフからノードを削除し,独自の後継者にすべての前任者をリンクした. 還元後,各ファイルのシグニチャーとしてこのグラフを使用した. f:id:pinksawtooth:20160331192121p:plain

E . Hybrid Features 機械学習分類子の性能は、2つの主要な要因によって影響されます。 特徴とアルゴリズム。 一部の研究者は、機能により機械学習の精度を向上させるために着手しました。 彼らはより良い精度を得るため特徴を兼ね備えています。 我々が述べたように、CFGが正常単純マルウェアの検出に適用されています。

機械学習分類子の性能は,2つの主要な要因,特徴とアルゴリズムによって影響される. 一部の研究者は,特徴により機械学習の精度を向上させるために着手した. 彼らはより良い精度を得るため特徴を結びつける. 我々が述べたように、CFGは単純なマルウェアの検出に適用されている. 我々は,複雑なマルウェア(変成型や対多型など)の検出するためには,CFGに基づく検出方法を改善しなければならない.

Eskandariは、単純なCFGを使用し、API呼び出しから変成マルウェアを検出する*45. CFGは,マルウェアのセマンティックを理解するために使用した. CFG上の呼び出されたAPIを元に彼らは新しいマルウェアのセマンティクスを得た. グラフマイニングアルゴリズムの複雑さを減少させるために,特徴ベクトルにスパースグラフ変換した.生成された特徴の数は非常に多い.. それらを減少させるために、それらは、特徴選択アルゴリズムを使用する. それらは、トレーニングセットのようないくつかのデータアイテムを得て、データベースに保存されたルールのセットを生成する. 決定システムは、テストセットの各サンプルがマルウェアであるか否かを決定するルールデータベースを利用する.

これらの方法の性能に影響を与える二つの主要な要因がある.MLの概念に基づいている特徴および分類のために使用したアルゴリズムである. LUらは,新機能および新規の分類器を使用して正確なシステムを提案しました*46. 特徴のために,コンテンツベースと行動ベースの機能を使用し,それらを組み合わせた. インポートされたDLLとPEファイルのAPI関数呼び出しは,コンテンツベースの特徴として選ばれた. しかしながら,これらの抽出された大量の特徴は,機能を減少させるため情報利得の概念を使用する. 行動ベースの特徴のために,行動をベクトルとして表現されているVMwareツールで各ファイルを実行する. そこでは,階層的な分類法に基づくSVMと相関ルールを組み合わせたSVMと呼ばれる新しいアンサンブル学習法が提案された. 彼らの実験結果はSVM-ARは,すべての一般的なアンサンブル学習法よりも効果が示された.

F . Some Newly Introduced Features

Yeらの研究はファイルの中身とファイルの関係を特徴としている*47. ファイルの関係は,全てのクラウドユーザのファイルの共有や欠如を意味する. このサンプル・ファイル間での関係はそれらのプロパティについて価値のある情報を得ることができる. もし,多くのTrojanが常にある特定の不明ファイルをユーザのコンピュータ内で発生させた時,そのファイルは悪意のあるなファイルである.サンプル間でのファイルの関係は,マルウェアの検出を示す新しく実践的な特徴である. Yeらは,ファイルの内容と関係を組み合わせた,セミパラメータによる分類モデルを提案した. ファイルの内容については,Yeらは,悪性なPEと良性なPEの中身からくるAPI呼び出しを抽出する. 彼らのモデルはファイルの内容とファイルの関係を統合し,グラフ正規化フレームワークを使用して分類問題を方程式化する.かれらのComodo Cloud Security Centerから集めた実際のマルウェアによるケーススタディでは,彼らの"Valkyrieシステム"の有効性・効率と彼らのシステムが既にComodoのアンチマルウェアソフトのスキャニングツールとして適用されいてることを示してる.これは,ファイルの内容とファイルの関係の両方をマルウェア検出に使用した初めての研究である.

KimとMoonは多様なスクリプトウィルスを検出する新たな手法を提案した.彼らはVBScriptマルウェアを依存グラフを用いて表した.Fig5(a)-(b)に示すように,スクリプトマルウェアはパースされセマンティックコード(中間言語)に変換される.このセマンティックコードを元に,有向グラフは,セマンティックコードの行同士の関係を表す.各ノードはコードの行を表し,矢印は二つの行の依存関係を表す.グラフのサイズを減らすため,条件を満たすノードと矢印は省略される.Fig5(c)-(d)はどのように依存グラフが生成されるかの例である.提案システムは既知のマルウェアとまだ分類されいていない未知のファイルのために依存グラフを生成し,その依存グラフと比較することで新しいスクリプトが既知のマルウェアの派生かどうかを判定する.したがってマルウェア検出はmaximum common subgraph-isomorphism(MCS)に依存する.

f:id:pinksawtooth:20160401012324p:plain f:id:pinksawtooth:20160401012334p:plain

SUMMERY

今回の調査では、マルウェアの検出方法を提示し、マルウェア検出技術のための新規の分類スキームを提案した.また、マルウェアの検出方法の欠点の概要について説明した. これらの欠点が,代替の方法でカバーされているかについて述べた. そして,「隠蔽戦略」と呼ばれる検出方法を打ち負かすために使用される戦略を紹介した. 調査の目的は、手順を提供することである. これはさらなるマルウェア検出技術の研究・開発に適している.

*1:J. Aycock. “Computer Viruses and Malware”. Springer, 2006.

*2:P. Szor.” The Art of Computer Virus Research and Defense”. Addison Wesley for Symantec Press, New Jersey, 2005.

*3:P. Gutmann. “The Commercial Malware Industry.”, 2007.

*4:KALPA, “Introduction to Malware”, “http://securityresearch.in/index.php/projects/malware_lab/introduction-to-malware/8/”, 2011.

*5:G. Jacob, H. Debar, and E. Filiol, “Behavioral detection of malware: from a survey towards an established taxonomy,” Journal in Computer Virology, pp. 251–266, 2008.

*6:A. Ahmed, E . Elhadi, M. A. Maarof and A. H. Osman, “Malware Detection Based on Hybrid Signature Behaviour Application Programming Interface Call Graph Information Assurance and Security Research Group.” Journal, A., Sciences, A., & Publications, S., Faculty of Computer Science and Information Systems, 9(3), 283–288,2012.

*7:K. Kim and B. R. Moon, “Malware detection based on dependency graph using hybrid genetic algorithm.” In Proceedings of the 12th annual conference on Genetic and evolutionary computation, July 07-11, 2010.

*8:M. Schultz, E. Eskin, E. Zadok, and S. Stolfo, ” Data mining methods for detection of new malicious executables.” In IEEE Symposium on Security and Privacy, pages 38-49. IEEE COMPUTER SOCIETY, 2001.

*9:D. Orenstein, “Application Programming Interface (API),” Quick Study:Application Programming Interface (API), 2000.

*10:S. Hofmeyr, S. Forrest, and A. Somayaji, “Intrusion detection using sequences of system calls.” Journal of Computer Security, pp. 151–180, 1998

*11:J. Bergeron, M. Debbabi, J. Desharnais, M. M. Erhioui, and N. Tawbi, “Static detection of malicious code in executable programs.” Int. J. of Req. Eng., 2001.

*12:R. Sekar, M. Bendre, P. Bollineni, and D. Dhurjati, “A Fast Automaton-Based Approach for Detecting Anomalous Program Behaviors.” In IEEE Symposium on Security and Privacy,2001.

*13:A. H. Sung, J. Xu, P. Chavez, and S. Mukkamala, “Static Analyzer of Vicious Executables.” In 20th Annual Computer Security Applications Conference, pp. 326–334, 2004.

*14:Y. Ye, D. Wang, T. Li, and D. Ye, “IMDS: Intelligent malware detection system,” in Proc. ACM Int. Conf. Knowl. Discovery Data Mining, pp. 1043–1047, 2007.

*15:Y. Ye, T. Li, Q. Jiang, and Y. Wang, “CIMDS: adapting postprocessing techniques of associative classification for malware detection,” IEEE Trans. Syst., Man, Cybern. C, vol. 40, no. 3, pp. 298-307, 2010.

*16:W. Snedecor and W. Cochran, “Statistical Methods”, 8th ed. Iowa City, IA: Iowa State Univ. Press, 1989.

*17:K. Jeong and H. Lee, “Code graph for malware detection. In Information Networking.” ICOIN. International Conference on, Jan 2008.

*18:J. Lee, K. Jeong, and H. Lee, “Detecting metamorphic malwares using code graphs” In Proceedings of the ACM Symposium on Applied Computing, ser. New York, NY, USA: ACM, pp. 1970-1977, 2010.

*19:Y. Ye, T. Li, K. Huang, Q. Jiang and Y. Chen, “Hierarchical associative classifier (HAC) for malware detection from the large and imbalanced gray list”. Journal of Intelligent Information Systems, 35(1), pp.1-20. 2010.

*20:D. Bilar, “OpCodes as predictor for malware,” International Journal of Electronic Security and Digital Forensics, vol. 1, no. 2, p. 156, 2007.

*21:I. Santos, F. Brezo, J. Nieves, and Y. Penya, “Idea: OpCode-sequencebased malware detection,”, Engineering Secure Software and System , 2010.

*22:C. Peng, H. Long and F. Ding, “Feature selection based on mutual information: cri-teria of max-dependency, max-relevance, and minredundancy.,” in IEEE Transactions on Pattern Analysis and Machine Intelligence, 2005.

*23:I. Santos, F. Brezo, X. Ugarte-Pedrero, and P. G. Bringas, “OpCode sequences as representation of executables for data-mining-based unknown malware detection,” Information Sciences, Aug. 2011.

*24:I. Santos, C. Laorden, and P. Bringas, “Collective classification for unknown malware detection,” Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security, 2011.

*25:I. Santos, F. Brezo, B. Sanz, C. Laorden, and P. G. Bringas, “Using opCode sequences in single-class learning to detect unknown malware,” IET Information Security, vol. 5, no. 4, p. 220, 2011.

*26:I. Santos, B. Sanz, and C. Laorden, “OpCode-sequence-based semisupervised unknown malware detection,”, Computational Intelligence in Security for Information Systems , 2011.

*27:N. Runwal, R. M. Low, and M. Stamp, “OpCode graph similarity and metamorphic detection,” Journal in Computer Virology, vol. 8, no. 1–2, pp. 37–52, Apr. 2012.

*28:A. Shabtai, R. Moskovitch, C. Feher, S. Dolev, and Y. Elovici, “Detecting unknown malicious code by applying classification techniques on OpCode patterns,” Security Informatics, vol. 1, no. 1, p. 1, 2012.

*29:T. Abou-assaleh, N. Cercone, V. Ke􀃟, and R. Sweidan, “N-gram-based Detection of New Malicious Code,” no. 1, 2004.

*30:G. B. S. Gerald, J. Tesauro, Jeffrey O. Kephart, “Neural Network for Computer Virus Recognition.” IEEE Expert, 1996.

*31:W. A. and G. Tesauro, “Automatically Generated Win32 Heuristic Virus Detection,” in Virus Bulletin Conference, 2000.

*32:M. M. Kolter JZ, “Learning to detect malicious executables in the wild.” in roc of the 10th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 2006.

*33:J. Z. Kolter and M. A. Maloof, “Learning to Detect and Classify Malicious Executables in the Wild,” vol. 7, pp. 2721–2744, 2006.

*34:T. J. Cai DM, M. Gokhale, “Comparison of feature selection and classification algorithms in identifying malicious executables,” in Computational Statistics and Data Analysis, 2007.

*35:E. Y. Moskovitch, D. Stopel, C. Feher, N. Nissim and N. Japkowicz, “Unknown malcode detection and the imbalance problem,” journal in Computer Virology, 2009.

*36:P. Jalote, "An Integrated Approach to Software Engineering", Springer, New York, NY, 2005.

*37:T. McCabe, "A complexity measure", IEEE Transactions on Software Engineering SE-2(4): 308–320, 1976.

*38:L. Tan, "TheWorst Case Execution Time Tool Challenge", The External Test, Technical report, 2006.

*39:D. Bruschi, L. Martignoni and M. Monga “Detecting self-mutating malware using control-flow graph matching,” In: Büschkes, R. and Laskov, P. (eds) Detection of Intrusions and Malware & Vulnerability Assessment, volume 4064 of LNCS, pp 129–143. Springer, Berlin. 2006.

*40:Z. Zhao, “A virus detection scheme based on features of Control Flow Graph.” 2nd International Conference on Artificial Intelligence, Management Science and Electronic Commerce (AIMSEC), pages 943-947, 2011.

*41:T. M. Mitchell, “Machine learning and data mining,” Commun. ACM, vol. 42, no. 11, 1999.

*42:L. Breiman. “Bagging Predictors.” Machine Learning, 24(2):123–140, 1996.

*43:L. Breiman. “Random Forests.” Machine Learning, 45(1):5–32, 2001.

*44:G. Bonfante, M. Kaczmarek, J.Y. Marion. ‘‘Control Flow Graphs as Malware Signatures.’’ WTCV, May, 2007.

*45:M. Eskandari and S. Hashemi “Metamorphic malware detection using control flow graph mining”. International Journal of Compute Science Network Security,pp 1-6 ,2011.

*46:Y. Lu, S. Din, C. Zheng and B.Gao “Using multi-feature and classifier ensembles to improve malware detection”. Journal of CCIT 39(2), 57– 72. 2010.

*47:Y. Ye, T. Li, S. Zhu, W. Zhuang, E.Tas, U. Gupta and M. Abdulhayoglu, “Combinig File Content and File Relations for Cloud Based Malware Detection.” Proceedings of the 17th ACM SIGKDD international conference on Knowledge discovery and data mining, 2011.

SECCON 2015 Online CTF Team TomoriNao

CTF

SECCON 2015 Online CTFにTeam TomoriNaoとして参加してきた.

f:id:pinksawtooth:20151207182846p:plain

友利奈緒

このチーム全ては@mzyy94さんから始まった・・・

Writeup

Writeupに関しては,メンバと情報共有したHackMDをWriteupとして公開しているのでそちらを

SECCON Team TomoriNao - HackMD

プロ友利奈緒の解答の速さについていけず3問しかsubmitできていない・・・ binary,pwnが全然解けなかったのが課題と認識した.

結果は11位(国内3位)!! 友利奈緒強すぎぃ! f:id:pinksawtooth:20151207182851p:plain

そして友利奈緒は次のステージへ

ともあれTeam TomoriNaoオフ会があるので楽しみだ!
決勝にはTeam TomoriNaoの中の友利奈緒四天王が会場を沸かしてくれるだろう.

あー星ノ海学園制服買わないとな.

SECCON九州大会

CTF

11/28に開催されたSECCON九州大会に参加してきた.

大学の知り合い3人でチーム(0x990000)を組参加した.
結果はよくなかったが,いろいろと課題点を見つけることが出来た.

f:id:pinksawtooth:20151204153311p:plain

Attack

自分がWeb周りはよくわからないので,攻撃を受けたらpacpを解析して,受けた攻撃を他のチームにするという動きをしていた.

なんか変なところへのリクエストを見つけた f:id:pinksawtooth:20151207192834p:plain

Follow TCP Stream・・・あっあっあっなんか返してる・・・
ということでこれを他チームへやった

f:id:pinksawtooth:20151207192840p:plain

GET /admin/users/update/10 HTTP/1.1

Host: 10.0.7.1

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0 Iceweasel/40.0.3

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: ja,en;q=0.5

Referer: http://10.0.7.1/admin/users

Connection: keep-alive

Cache-Control: max-age=0



HTTP/1.1 200 OK

Date: Fri, 27 Nov 2015 19:10:13 GMT

Server: Apache/2.4.10 (Raspbian)

Cache-Control: no-cache

Set-Cookie: XSRF-TOKEN=wkwFns8L3R0q0Ol83FHqUO6bl4o4QgpHwiyKiVUd; expires=Fri, 27-Nov-2015 21:10:13 GMT; Max-Age=7200; path=/

Set-Cookie: laravel_session=0def4f3c2a538eda003e9d46173e6416cc357e9b; expires=Fri, 27-Nov-2015 21:10:13 GMT; Max-Age=7200; path=/; httponly

Vary: Accept-Encoding

Content-Length: 1972

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=UTF-8



<!DOCTYPE html>
<html>
<head>
.<meta charset="utf-8">
.<title>........................ | A&D..............................</title>
.<link type="text/css" rel="stylesheet" href="/css/main.css" />
</head>
<body>
<div class="container">
.<header>
..<a href="/">
...<img src="/img/s_ad.png" width="100" height="100" alt="a_and_d">
..</a>

....<ul>
...<li><a href="/admin">.........</a></li>
......<li><a href="/admin/topics">............</a></li>
...<li><a href="/admin/users">.........</a></li>
...<li><a href="/admin/cards">......</a></li>
...<li><a href="/admin/inquiries">..................</a></li>
...<li class="logout"><a href="/logout">...............</a></li>
.....</ul>
...</header>
.<section>
..<h1>........................</h1>
..
<form method="post" action="" class="normal-form">
.<fieldset>
..<label for="email">.....................:</label>
..<input type="text" name="email" id="email" value="&#039;">
.</fieldset>
.<fieldset>
..<label for="password">...............:</label>
..<input type="text" name="password" id="password" value="a">
.</fieldset>
.<fieldset>
..<label for="name">.........:</label>
..<input type="text" name="name" id="name" value="a">
.</fieldset>
.<fieldset>
..<label for="kana">......:</label>
..<input type="text" name="kana" id="kana" value="a">
.</fieldset>
.<fieldset>
..<label for="zip_code">............:</label>
..<input type="text" name="zip_code" id="zip_code" value="a">
.</fieldset>
.<fieldset>
..<label for="address">......:</label>
..<input type="text" name="address" id="address" value="a">
.</fieldset>
.<fieldset>
..<label for="tel">............:</label>
..<input type="text" name="tel" id="tel" value="a">
.</fieldset>
.<input type="hidden" name="_token" value="wkwFns8L3R0q0Ol83FHqUO6bl4o4QgpHwiyKiVUd">
.<button type="submit" class="normal-button center">......</button>
</form>
.</section>
.<footer>
..<p>Copyright 2015 .................................... All rights reserved.</p>
.</footer>
</div>
</body>
</html>

Defense

方針としては他チームのルータのIPアドレスiptablesではじき,サービスを動かし続けるというものだった. 各チームには171.16.TeamNo.1のルータと10.0.TeamNo.1のRaspberry Piが与えられるため,そのIPを指定しようと考えたが, 各チームの接続とサービス稼働チェックが10.0.0.1経由で行われるためDefenceポイントを捨てなければiptablesを利用することができなかった. (今思ば攻撃に全振りしてマイナス点を防ぐ作戦もとれたかもしれない) 脆弱性をほとんど潰せていなかったため他チームからの攻撃を防ぐことができず,かなりの点数が引かれてしまった.

他にはtcpdumpとlibpcapのRaspberry Pi用のパッケージを用意しておき,インストールして攻撃を監視していた.
サービス稼働チェックが3分おきだったのでrotate_secondsは180に設定した.

sudo tcpdump -i eth0  -G <rotate_seconds> -w ./dump/tcpdump_%H%M.pcap

感想

Defenseをアプリケーションレベルで考えておらず,システム側で対応しようとしていたためDefenseがひどかった.
攻撃に関してもWebアプリケーションの脆弱性攻撃の知識が足りなかったため,能動的に攻撃は出来なかった. しかし,攻撃時のpcapを解析して他チームへの攻撃へ利用できたのはA&Dっぽくてよかったかなと.

もっとWeb問を解けるようにしないと話にならないな・・・

Cuckoo Sandbox 1.2の構築

マルウェア解析

Cuckoo Sandbox 1.2の構築のメモ
いつか構築し直すときに役立つように・・・

構築環境

host OS:Ubuntu 14.04
Gest VM:Virtual box
Guest OS: Windows7, WindowsXP
Cuckoo: 1.2

インストール

基本的には公式ドキュメントに沿ってインストール
http://docs.cuckoosandbox.org/en/1.2/

参考にしたサイトは以下の2つ

悪いマルウェアはいねぇかぁ: マルウェア解析システム(Cuckoo インストール編)

Cuckoo Sandbox on KVM(ホスト編) - Qiita

ホストの設定

pipをインストール
  sudo apt-get install python-pip
mongodbのインストール
  sudo apt-get install mongodb
VirtualBoxのインストール
apt-get install virtualbox

versionにあったGuest Additionsをインストール

Tcpdumpの設定

Tcpdumpをroot以外で使えるように変更

sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
ユーザの作成
sudo adduser cuckoo
sudo usermod -a -G vboxusers cuckoo
ネットワークの設定

固定IPを使用 network-managerのアンインストール

必要なパッケージのインストール
apt-get install python-dev libfuzzy-dev python-sqlalchemy python-bson
pip install Jinja2 Bottle pydeep dpkt
Cuckooのダウンロード
git clone git://github.com/cuckoobox/cuckoo.git
Cuckooの設定
  • config/cuckoo.conf
 [resultserver]  
 ip = 192.168.11.100
  • config/virtualmachines.comf
[cuckoo]
 label = cuckoo
 platform = windows
 ip = 192.168.11.101
  • config/auxiliary.conf
    tcpdumpでモニタリングするインタフェースの設定
 interface = eth0
ゲストOSをインストール
 VBoxManage createvm --name "cuckoo" --ostype Windows7_64 --register

ゲストの設定

ゲストの設定で必要な項目

  • UACを切る

  • Windowsアップデートの停止

  • FireWallの無効化

  • Guest Additionsのインストール

  • 共有フォルダの設定

  • pythonのインストール -パスの設定

  • Python Image Libraryのインストール

  • その他必要なソフトのインストール
    -オフィス・PDF等

  • cuckoo/agent/agent.pyの実行

スナップショットの作成

ゲストの設定が終わればスナップショットを作成する。 Cuckoo実行後はこのスナップショットの状態に復元される。

 vboxmanage snapshot "cuckoo" take "setting" --pause
 vboxmanage controlvm "cuckoo" poweroff
 vboxmanage snapshot "cuckoo" restorecurrent

実行

cuckoo.pyを実行する
util/submit.pyの引数にマルウェアを与えて実行する

Web UIを使えるようにする

utils/web.pyを実行するとhttp://localhost:8080からsubmit、解析結果を見ることができるようになる

f:id:pinksawtooth:20151106181927p:plain

REST APIを使えるようにする

公式ドキュメントに沿って設定 REST API — Cuckoo Sandbox v2.0-dev Book

設定が終わると以下のコマンドでjson形式のレポートを取得できる

curl http://localhost:8090/tasks/report/1

複数のVMを設定する

sudo apt-get install mysql-server-5.6 libmysqlclient-dev 
sudo pip install mysql-python

mysqlのパスワードを設定

mysql -u root -p

conf/cuckoo.confの[database]の項目を変更

connection = mysql://root:password@localhost/cuckoo

Cuckooで複数VMを動かす - Qiita

CODEBLUE 2015のスタッフとして参加してきました

イベント

10/28~10/29に開催されたCODE BLUEに参加してきました。

codeblue.jp

学生スタッフの募集があったので応募しました。

至らない点もありましたが、通常参加よりも勉強すること、楽しむことが出来ました! このような機会を設けてくださった運営の人たちに感謝です。

レベルの高い学生(参加者・スタッフ・スピーカー)が多くてもっと自分も研究頑張らないとなーと前向き?になれました。 研究についても意見をもらえてよかったです。

今後もいろいろな形で関われたらいいなと思います。

f:id:pinksawtooth:20151101002038j:plain まっちゃさんがスタッフの写真を取ってくれました

CTF for ビギナーズ2015 奈良(Attack & Defense)参加

イベント CTF

CTF for ビギナーズ2015 奈良(Attack & Defense)に参加してきた。

会場はNAIST。なんだかんだで行ったのは初めてだった。

友利奈緒で参加した。 メンバーは@tkmru、@asakasakasas、@fopen_sの4人で組んだ。

競技感想的なもの

競技説明で脆弱性のあるWebサービスSSHが動いている状態の環境を渡されるとの説明。5分おきにサービスの生存確認が行われて、サービスを提供し続けるとDefense点が加算、個人情報を抜くとAttack点が、個人情報を取られるたチームはAttack点の分Damage点として減算されるというルールだった。

競技開始後、Webの知識がないので攻撃は他のメンバに任せてsshと防御を考えた。 運営に問い合わせたところiptablesの設定はいじっても問題ないといのことだったので、サービスの生存確認をしているパケットと自分たちのIPアドレス以外をフィルタすることを考えた。

まずtcpdumpでパケットキャプチャをしてサービスの生存確認をしているIPアドレスを特定しようとしたがtcpdumpが入っていない・・・一旦競技用ネットワークからインターネットにつなぎ替えてパッケージをダウンロードしてインストールした。 この途中、SSHのサービスが落ちまくって作業が難航した。 (解説によるとSSHの方の脆弱性を見つけるとsshdを落とすスクリプトを実行できたらしい) Attack & Defenseははじめてだったので、どういうことをすればよいかがわからず後手に回ってしまった。

そんなこんなしていると優勝チームが1000点ずつポイントを奪い始める。やばいと思ってサービスを止めたが、別チームに1000点を奪われる。 サービスを止めたのになんでだ・・・と思ったがクローリングして先に情報だけ抜いていたらしい。

ここに来てチーム単位に割り振られているアドレスが172.16.'チームID'.0だからとりあえずそこからのパケットをドロップさせればいいんじゃねと思いつく・・・(いまさら
データベースが消す攻撃をしているチームがいてサービス自体を動かせなくなっているチームが結構いた。 サービスを殺していたのが功を奏して、サービス自体を潰されることなくiptablesの設定ができた。

終了直前にDefense点のインフレが起こってなんとかマイナス点からは抜け出すことが出来た。 f:id:pinksawtooth:20151018163843p:plain

A&Dでは他の参加者が敵チームになるのが面白かった。 また、フラグがどんどんなくなっていくのでいつも以上に急ぐ必要があった。

クイズ形式のCTFでは防御に関して行動をとることがないので、A&Dではより実践に近い形式で学習できた。

Attack & Defenseの教訓

  • 防御の人は防御に集中するべき
     攻撃のほうもみたりといろいろやってて結局防御できなかったので反省。

  • 分かる範囲だけでもさっさと対応する
     今回に限れば、競技開始後にチームの他チームのデフォルトのセグメントからのパケットをドロップしておけば攻撃はだいたい防げた。  キャプチャしたパケットを見る限りルータのアドレスを変更しているチームは一チームだけ??(存在しないチームID0からパケットがあったので) iptables設定を細かくする前にとりあぜず分かる範囲でルールを適用すべきだった。

  • スコアを監視しておく
     スコアを監視しておき、他チームが大きな攻撃を始めたらすぐにサービスを止めることで攻撃を防げるかもしれない・・・

  • 序盤からパケットキャプチャをする  チームにパケット監視役をおいておくと、敵チームの試行錯誤がみれて攻撃のヒントになるかもしれない。また、どういった攻撃で点が取られたかを把握することができる。

  • submitは一気にする
     A&Dではクイズ形式と違い限られたフラグの取り合いになるので時間をかけていられないが、他チームに大きな攻撃があるとサービスを落として防ぐチームが出るので、とりあえず情報を抜いてまとめて提出すれば対応を防ぐことができるのではないかと思う。

Trend Micro 2015 writeupのようなもの

イベント CTF

2015/09/26~09/27に開催されたTrend Micro CTF Asia Pacific & Japan 2015オンライン予選に参加しました。 今回は大和セキュリティ勉強会のイベントで集まったメンバーと出場しました。 普段は1、2人でCTFに参加しますが、学生も多くいろんな人と交流ができてよかったです。

チーム名は&"$%&'hNslIIld910)dJ1n217ad@`=~でした。
最終的にみなさんの力で22位まで行けました。
僕は基本的にAnalysis - Defensiveを担当して100と300をsubmitしました。

f:id:pinksawtooth:20150927221654p:plain

writeupと書いていますが自分が解いた問題、取り組んだ問題のメモです。

Analysis - Defensive 100

開始直後に解き始めた問題。まず問題サーバへのアクセスしようとすると403 Forbiddenであっはい・・・という感じ。 やっと問題落とせたと思ってfileコマンドで形式を確認して実行するといきなりフラグが出て意味がわからなかった。 実行しただけなので1st submitでボーナス点がもらえた。
開催中はVM検知してわざわざVMでないと動かないようにしている?クソ問かな?と思ったぐらいでほっておいた。

You are on VMM!
TMCTF{ce5d8bb4d5efe86d25098bec300d6954}

家に帰ってから実行すると挙動がおかしい・・・VMMだとかじゃないとかフラグでたりでなかったり・・・
writeup見るとVM検知回避をするのが正解のよう。64bitなのでIDA proが使える環境で確認して見ようと思う。

f:id:pinksawtooth:20150927223322p:plain

Analysis - Defensive 300

This is a REAL backdoor network traffic!
Tracing hacker's footprint to find the key!
If you can get "the password", please submit "TMCTF{}" as your answer.
Hint:
Poison Ivy / admin
attach: zipfile(pcap)

Poison Ivyの通信のpcapが与えられる。Poison Ivyは有名なRATでぐぐれば情報がたくさんある。 昔読んだ資料を思い出して探してきた。

http://www.iwsec.org/mws/2012/presentation/hands-on_incident-response.pdf

IIJのMWS2012 ハンズオン インシデントレスポンス資料のp49に以下の記述がある。 f:id:pinksawtooth:20150927224321p:plain

与えられたpcapを確認すると該当するものがあった。 f:id:pinksawtooth:20150927224803p:plain

FireEyeが通信をデコードするツールを出していたことを思い出したので探してきた。 https://www.fireeye.com/content/dam/fireeye-www/global/en/current-threats/pdfs/rpt-poison-ivy.pdf

依存パッケージを入れてツールをインストールする。結構めんどくさい。

ツールの使い方がよくわからなかったが、ソースを見たり、チームメンバーの助言でいろいろオプションを付けて実行した。

root@kali:~/Desktop/chopshop# ./chopshop -f net.pcap -s ./ "poisonivy_23x -c -p '/root/Desktop/chopshop/camcrypt/build/lib.linux-x86_64/camcrypt/camellia.so' "
Warning Legacy Module poisonivy_23x!
Starting ChopShop
Initializing Modules ...
    Initializing module 'poisonivy_23x'
Running Modules ...
[2015-09-04 17:43:44 JST]  Poison Ivy Version: 2.32
[2015-09-04 17:43:44 JST]  *** Host Information ***
PI profile ID: ctf
IP address: 192.168.0.100
Hostname: ADMIN-PC
Windows User: Administrator
Windows Version: Windows XP
Windows Build: 2600
Service Pack: Service Pack 3
[2015-09-04 17:43:58 JST]  *** Directory Listing Initiated ***
Directory: C:\WINDOWS\
[2015-09-04 17:43:58 JST]  *** Directory Listing Sent ***
[2015-09-04 17:44:57 JST]  *** Service Listing Sent ***
[2015-09-04 17:45:06 JST]  *** Screen Capture Sent ***
PI-extracted-file-1-screenshot.bmp saved..
Shutting Down Modules ...
    Shutting Down poisonivy_23x
Module Shutdown Complete ...
ChopShop Complete

PI-extracted-file-1-screenshot.bmpというのができるので開くとパスワードが書かれていた。 f:id:pinksawtooth:20150927231254j:plain

解けなかった問題

Analysis - Defensive 200

PE形式32bitのバイナリが配布される。
IDAで見るとなんか見たことある感じがする・・・というよりCTFで見ない感じだと思った。 なんかマルウェアっぽい。

マルウェア解析用に作ったimmunity debuggerのAPIフックスクリプトを使ってAPIトレースをしてみた。
結果を見るとWriteFileやURLDownLoadToFIileなど呼ばずにExitProcessしていたので解析検知か動作環境チェックを疑う。IDAで処理を追うとGetComputerNameAを読んでいる箇所を発見。コンピュータ名がTMCTF2015-PCだとWriteFileやURLDownLoadToFIileが呼ばれていた。

URLDownLoadToFIileでtmp以下にポエムを落としてきて、そこから通信先を取り出しているようだった。 APIトレース結果を見るとlocalhost/e45c2dc8d9e5b215ea141f2f609100f9/notify.phpに接続しようとしてるが失敗してループしていた。 localhostという点につまずいて解けなかった。

朝起きたら一緒に問題を見ていた@tikuwachan_naraさんが解いていた。 どうやらポエムに他にも通信先が含まれていたらしい。 デコード部分をしっかり読んでなかったので反省。

Network                    InternetOpenA                  (                                                                                                      "0x401f35"                                                                                                                                                      
                                                          lpszAgent = 'TMCTF2015-13106'
                                                          dwAccessType = "0x00000000"
                                                          lpszProxyName = ''
                                                          lpszProxyBypass = ''
                                                          dwFlags = "0x00000000"
                                                          )

Network                    InternetConnectA               (                                                                                                      "0x401f68"
                                                          hInternet = "0x00cc0008"
                                                          lpszServerName = 'localhost'
                                                          nServerPort = "0x000022b8"
                                                          lpszUserName = ''
                                                          lpszPassword = ''
                                                          dwService = "0x00000003"
                                                          dwFlags = "0x00000000"
                                                          dwContext = "0x00000000"
                                                          )

Registry                   RegCreateKeyExA                (                                                                                                      "0x7503324c"
                                                          hKey = "588"
                                                          lpSubKey = "Software\Microsoft\windows\CurrentVersion\Internet Settings\Connections"
                                                          lpClass = ""
                                                          dwOptions = "0x750249db"
                                                          samDesired = "0x00000000"
                                                          lpSecurityAttributes = "0x00000001"
                                                          phkResult = "0x00000000"
                                                          lpdwDisposition = "0x0018f860"
                                                          )

Registry                   RegQueryValueExA               (                                                                                                      "0x7503326d"
                                                          hKey = "652"
                                                          lpValueName = "DefaultConnectionSettings"
                                                          lpType = "0x00000000"
                                                          lpData = "0x00000000"
                                                          lpcbData = "0x00000000"
                                                          )

Registry                   RegQueryValueExA               (                                                                                                      "0x750332b0L"
                                                          hKey = "652"
                                                          lpValueName = "DefaultConnectionSettings"
                                                          lpType = "0x00000000"
                                                          lpData = "0x00000000"
                                                          lpcbData = "0x00270af8"
                                                          )

Network                    HttpOpenRequestA               (                                                                                                      "0x401fa8L"
                                                          hInternet = "0x00cc000c"
                                                          lpszVerb = 'GET'
                                                          lpszObjectName = '/e45c2dc8d9e5b215ea141f2f609100f9/notify.php'
                                                          lpszVersion = 'HTTP/1.0'
                                                          lpszReferer = ''
                                                          lplpszAcceptTypes = ''
                                                          dwFlags = "0x00080000"
                                                          dwContext = "0x00000000"
                                                          )

Network                    HttpAddRequestHeadersA         (                                                                                                      "0x40205f"
                                                          hConnect = "0x00cc0010"
                                                          lpszHeaders = 'Cookie: 673278367138713a81463a
'
                                                          dwHeadersLength = "0xffffffff"
                                                          dwModifiers = "0xa0000000"
                                                          )

File                       CreateFileA                    (                                                                                                        "0x401e6c"
                                                          lpFileName = "key.bin"
                                                          dwDesiredAccess = "0x80000000"
                                                          dwShareMode = "0x00000000"
                                                          lpSecurityAttributes = "0x00000000"
                                                          dwCreationDisposition = "0x00000003"
                                                          dwFlagsAndAttributes = "0x00000000"
                                                          hTemplateFile = "0x00000000"
                                                          )

Analysis - Others 100

壊れたpdfが配布される。 windowsでは開けなかったがlinuxでは開けた。 開いたファイルに変わった点はない。

とりあえずBzで開いてビットマップ表示させてみると怪しい箇所を発見。 どうやって取り出そうかなーと思って所で他のチームメンバが解答したため、解くのをやめた。 バイナリ力を上げたい・・・ f:id:pinksawtooth:20150927235636p:plain