サイトのページにポリモーフィックなウイルスJavaScriptコードの導入を検出する方法の1つについてお話したいと思います。 このノートは、基本的なことを説明する必要がなく、ウィキペディアへのリンクを必要とせずに追加情報を見つけることができる訓練されたユーザー向けに設計されています:)
はじめに
確かに、多くの人は、このサイトがコンピュータに潜在的な危険をもたらすという不快なブラウザ警告に直面していました。 Yandexが検索結果でこれについて警告し始めた後、サイトの突然のトラフィックがすべてゼロになった理由を説明するのは非常に簡単になりました。 シンプルだが遅い。
Webページを攻撃し、ブラウザの穴から訪問者のコンピューターに侵入し、繁殖を継続しようとする悪意のあるワームがすべてです。
このタイプのワームは通常、次のように機能します。
- ワームはいくつかのポルノまたはウェアーズのサイトに落ち着き、禁じられた喜びの恋人を待ちます。
- 訪問者のブラウザーに(最近)穴がある場合、ワームは被害者のコンピューターに侵入し、ルートキットメソッドを使用してその滞在を隠します
- とりわけ、解決されたワームは、FTPサーバー用に保存されたパスワードをコンピューターで検索します(Web開発者およびシステム管理者のコンピューターでは十分です)。
- パスワードはウイルスネットワークのフォーカルポイントに送信され、そこから危険なコードが侵入されたサイトに侵入します。Webサーバーのすべてのディレクトリのインデックスファイルが影響を受けます。
- さて、影響を受けたサイトへの訪問者は感染をさらに広げ、検索エンジンは危険なサイトを正しくブロックします。
サイトにはどのようなウイルスコードがありますか?
通常、いくつかのオプションが使用されます。
- 非表示のiframe
- 同じ非表示のiframeを生成するJavaScriptコード
- p。2の結果で外部サーバーからJavaScriptを含める
サイトへのウイルスコードの侵入に関する情報をすばやく取得するにはどうすればよいですか?
- 1.サーバー上のファイルの変更を監視し、ハッシュを別のデータベースに保存します。 短所:サーバーソフトウェアが必要で、プライベートアップデートには不便です。
- 2.ファイル内のウイルスコードの存在を「外部から」サイトを監視します。 たとえば、サイトのウイルスを監視するサービスwww.siteguard.ruがあります。
2番目のアプローチのいくつかの機能と、それを当社の業務でどのように使用するかについて簡単に説明したいと思います。
チャレンジ。
タスクは簡単です-200のクライアントWebサイトでウイルスコードの出現を監視する必要があります。
解決策。
リストから定期的にサイトをポーリングし、メインページを受け取り、潜在的な危険がないか分析するクローラーが作成されています。
潜在的に危険なコードの検索は、いくつかの段階で進行します。
- 署名検索。 署名データベースを正規表現の形式で使用して、非表示のiframeやその他の理解可能なマックの実装を決定します。 このレベルでは、最も一般的なウイルス注射のかなり大きな部分が削除されます。
- 外部JSインクルージョンを検索します。 外部サーバーからのスクリプトファイルの接続を分析します。 外部サーバーが「ホワイトリスト」にない場合、管理者に対応する通知を生成します。 この方法でライブウイルスをキャッチする必要はありませんでしたが、同様の説明がインターネットで見つかりました。
- そして最も興味深いのは、ページ上のJavaScriptコードのヒューリスティック分析です 。
詳細はこちら!
最近、ワームの新しい変更は、スクリプトによって実行されるロジックを隠すために、ページに埋め込まれた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 ) ;
}
ここで何が起こっていますか:
- 文字を同じレジスタに変換してコードを準備し、空白文字を取り除きます。
- 無視された署名のコード(別のファイルからの正規表現のリスト)をクリアします。 このステップは、誤検知を引き起こす可能性のある潜在的なコードからピースを削除するために使用されます。 たとえば、アナライザーはgismeteoからのインフォーマーコードを誓ったため、無視された署名データベースには正規表現があります。
url='http:\/\/img\.gismeteo\.ru.*lang='ru';
- 数字2..9の範囲にないすべてのコード文字を下線で置き換えます。
- トリプレット(3文字のグループ)で構成されるコードのアルファベットを生成します。 これらの変換の結果、ウイルスコードのアルファベットは通常のアルファベットよりも豊富になり、エントロピーの値が大きくなります。
- 結果のアルファベットを持つ特定のコードのエントロピーを考慮します
最終的な値を実験することで、そのレベルが確立され、それを超えるとコードはバイラルと見なされます。
our $E_MAX = 2.2;
実際、サイトでのウイルス注射のヒューリスティック検出の1つの方法について私が言いたかったのはそれだけです。 :)
PSところで、もしあなたがFarでFTPパスワードを保存するなら、それを「FTP」パネルのルートではなく、ディレクトリを作成します(F7経由)-それらから、何らかの理由でウイルスはそれらを取得する方法を知りません:)
_________
テキストはHabraで準備されます
PS記事が気に入ったら-プラスRomanLを 、 嫌いなら-zviruszを付けてください 。