15

私はウェブホストで働いており、私の仕事はハッキングされたアカウントを見つけてクリーンアップすることです. shells\malware\injections の 90% を見つける方法は、「場違いな」ファイルを探すことです。たとえば、eval(base64_decode(.......))" ....." は、通常は決して適切ではない base64 化されたテキストの集まりです。キー文字列のファイルを grep していると、奇妙に見えるファイルが飛び出します。

これらのファイルが人間として私に飛び出した場合、Python である種のプロファイラーを構築して、統計的に「場違い」なものを探し、手動で確認するためにフラグを立てることができると確信しています。まず、キー文字列 ( evalbase64_decodeexecgunzipgzinflate、など) を含む php ファイルの行の長さを比較しfwritepreg_replace平均から 2 標準偏差離れている行を探すことができると考えました。

行の長さは大きく異なり、これが使用するのに適した統計になるかどうかはわかりません. 別のアプローチは、加重ルールをクレチンのものに割り当てることです(しきい値を超えるまたは下回る行の長さ= Xポイント、アップロードという単語を含む= Yポイント)が、スコアで実際に何ができるか、またはそれぞれをスコアリングする方法がわかりません属性。私の統計は少しさびています。

統計プロファイリングの正しい方向 (ガイド、チュートリアル、ライブラリ) を教えてくれる人はいますか?

4

1 に答える 1

5

これは、この問題に対する単純な機械学習のアプローチであり、この問題を開始してベースライン分類子を開発するために私が行うことです。

スクリプトのコーパスを構築し、「良い」(ラベル = 0) または「悪い」(ラベル = 1) のいずれかのラベルを付けます。「悪い」スクリプトが全コーパスの妥当な割合であることを確認してください。50-50 の良い/悪いが理想的です。

疑わしいスクリプトや不正なスクリプトを示すバイナリ機能を開発します。たとえば、「eval」の存在、「base64_decode」の存在などです。できる限り包括的であり、いくつかの「優れた」スクリプトをキャプチャする可能性のある機能を含めることを恐れないでください。これを行う 1 つの方法は、スクリプトの 2 つのクラスの単語の頻度カウントを計算し、「悪い」では顕著に現れ、「良い」ではあまり目立たない単語を特徴として選択することです。

コーパスに対して特徴ジェネレーターを実行し、ラベル付きの特徴のバイナリ マトリックスを作成します。

コーパスをトレーニング (例の 80%) とテスト セット (20%) に分割します。scikit Learn ライブラリを使用して、いくつかの異なる分類アルゴリズム (ランダム フォレスト、サポート ベクター マシン、単純ベイズなど) をトレーニング セットでトレーニングし、目に見えないテスト セットでそれらのパフォーマンスをテストします。

うまくいけば、ベンチマークするための合理的な分類精度が得られます。次に、機能の改善、いくつかの教師なしメソッド (ラベルなし)、およびパフォーマンスを向上させるためのより特化したアルゴリズムを検討します。

リソースについては、機械学習に関する Andrew Ng の Coursera コース (スパム分類の例が含まれていると思います) が良い出発点です。

于 2013-07-05T15:00:28.990 に答える