Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
hfinger — pcapファイルからTsharkを使用してマルウェアのHTTPリクエストのユニークなフィンガープリントを生成し、リクエスト構造、ヘッダー、ペイロード特性の分析を通じてマルウェアファミリーの識別とグループ化を可能にします。 | Kitploit
ツール/GitHubGitHub/cert-polska/hfinger
情報収集マルウェア分析脅威インテリジェンス
GitHubcert-polska/hfinger

hfinger

pcapファイルからTsharkを使用してマルウェアのHTTPリクエストのユニークなフィンガープリントを生成し、リクエスト構造、ヘッダー、ペイロード特性の分析を通じてマルウェアファミリーの識別とグループ化を可能にします。

リポジトリを見る
147103年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Hfinger - マルウェアHTTPリクエストのフィンガープリンティング

マルウェアのHTTPリクエストをフィンガープリントするためのツール。TsharkベースでPython3で記述されています。動作するプロトタイプ段階 :-)

その主な目的は、マルウェアリクエストのユニークな表現(フィンガープリント)を提供し、それらの識別を支援することです。_ユニーク_とは、各フィンガープリントが特定のマルウェアファミリーにのみ見られるべきであり、しかし一つのファミリーが複数のフィンガープリントを持つことができることを意味します。Hfingerはリクエスト全体を出力するよりも短い形式でリクエストを表現しますが、それでも人間が解釈可能です。

Hfingerは手動のマルウェア分析だけでなく、サンドボックスシステムやSIEMでも使用できます。生成されたフィンガープリントは、リクエストのグループ化、特定のマルウェアファミリーへのリクエストの特定、一つのファミリーの異なる操作の識別、または他のセキュリティシステムが見逃したがフィンガープリントを共有する未知の悪意のあるリクエストの発見に役立ちます。

このツールの作業には学術論文が付随しており、例えば設計選択の動機や、p0f、FATT、Mercuryとの比較評価について説明しています。

目次

  1. アイデア
  2. インストール
  3. 使用法
  4. フィンガープリントの生成
  5. レポートモード

アイデア

このプロジェクトの基本的な前提は、異なるマルウェアファミリーのHTTPリクエストは多かれ少なかれユニークであり、何らかの識別を提供するためにフィンガープリントできるというものです。Hfingerはいくつかのヘッダーの構造と値を保持し、さらなる分析(例えば、類似したリクエストのグループ化)の手段を提供します。現時点ではまだ進行中です。

マルウェアのHTTPリクエストとヘッダーを分析した後、リクエストのいくつかの部分が最も特徴的であると特定しました。これらには以下が含まれます:

  • リクエストメソッド
  • プロトコルバージョン
  • ヘッダーの順序
  • 一般的なヘッダーの値
  • ペイロードの長さ、エントロピー、非ASCII文字の有無

さらに、リクエストURLの標準的な特徴も考慮されました。 これらの部分はすべて一連の特徴に変換され、詳しくはこちらで説明されています。

上記の特徴は可変長の表現に変換され、それが実際のフィンガープリントとなります。レポートモードに応じて、異なる特徴がリクエストのフィンガープリントに使用されます。これらのモードの詳細については以下に示します。特徴選択プロセスは、今後発表される学術論文で説明される予定です。

インストール

インストール前に必要な最小要件:

  • Python >= 3.3、
  • Tshark >= 2.2.0。

PyPIからのインストールが可能です:

pip install hfinger

HfingerはXubuntu 22.04 LTSでtsharkパッケージバージョン3.6.2でテストされていますが、Xubuntu 18.04のバージョン2.6.10やXubuntu 20.04のバージョン3.2.3などの古いバージョンでも動作するはずです。

あらゆるPoCと同様に、Hfingerは分離された環境(少なくともPython仮想環境)で実行する必要があることに注意してください。その設定についてはここでは扱いませんが、このチュートリアルを試すことができます。

使用法

インストール後、コマンドラインから直接hfingerを呼び出すか、Pythonモジュールとしてpython -m hfingerで呼び出すことができます。

例:

root@kitploit:~
foo@bar:~$ hfinger -f /tmp/test.pcap
[{"epoch_time": "1614098832.205385000", "ip_src": "127.0.0.1", "ip_dst": "127.0.0.1", "port_src": "53664", "port_dst": "8080", "fingerprint": "2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4"}]

ヘルプは短い-hまたは長い--helpスイッチで表示できます:

root@kitploit:~
usage: hfinger [-h] (-f FILE | -d DIR) [-o output_path] [-m {0,1,2,3,4}] [-v]
               [-l LOGFILE]

Hfinger - pcapファイルに保存されたマルウェアHTTPリクエストのフィンガープリンティング

optional arguments:
  -h, --help            このヘルプメッセージを表示して終了
  -f FILE, --file FILE  単一のpcapファイルを読み込む
  -d DIR, --directory DIR
                        ディレクトリDIRからpcapファイルを読み込む
  -o output_path, --output-path output_path
                        出力ディレクトリへのパス
  -m {0,1,2,3,4}, --mode {0,1,2,3,4}
                        フィンガープリントレポートモード。
                        0 - モード2と同程度の衝突数とフィンガープリント数だが、使用する特徴が少ない。
                        1 - 設計された全特徴を表現するが、モード0、2、4よりも若干衝突が多い。
                        2 - 最適(デフォルトモード)。
                        3 - 生成されるフィンガープリント数が最も少ないが、衝突数が最も多い。
                        4 - フィンガープリントのエントロピーが最も高いが、モード0-2よりも若干多くのフィンガープリントを生成する。
  -v, --verbose         リクエスト内の非標準値(例:非ASCII文字、CRLFタグなし、設定リストにない値)に関する情報を報告する。
                        --logfile (-l) なしの場合は標準エラー出力に表示。
  -l LOGFILE, --logfile LOGFILE
                        詳細モードでの出力ログファイル。 -v または --verbose スイッチを暗黙的に有効化。

pcapファイルへのパス(-f)、またはpcapファイルを含むディレクトリ(-d)を指定する必要があります。出力はJSON形式です。標準出力に表示されるか、指定した出力ディレクトリ(-o)にソースファイルの名前で保存されます。例えば、コマンド:

hfinger -f example.pcap -o /tmp/pcap

の出力は次の場所に保存されます:

/tmp/pcap/example.pcap.json

レポートモード -m/--mode を使用すると、デフォルトのレポートモードを変更できます。0〜4の整数を指定します。モードは表現されるリクエスト特徴や丸めモードが異なります。デフォルトモード(2)は、リクエスト分析で通常使用されるすべての特徴を表現するように選択されましたが、衝突数や生成されるフィンガープリント数も少なくなっています。他のモードでは異なる目標を達成できます。例えば、モード3では、生成されるフィンガープリント数は少なくなりますが、マルウェアファミリー間の衝突の可能性が高くなります。不明な場合は、何も変更する必要はありません。レポートモードの詳細はこちらを参照してください。

バージョン0.2.1以降、Hfingerの出力は控えめになりました。検出されたヘッダーの非標準値、リクエストの非ペイロード部分の非ASCII文字、CRLFタグ(\r\n\r\n)の欠如、分析されたリクエストに関するその他のアプリケーションエラーでない問題についての情報を受け取りたい場合は、-v/--verboseを使用してください。詳細モードでこれらの問題が発生した場合、標準エラー出力に表示されます。-l/--logスイッチを使用してログを指定した場所に保存することもできます(暗黙的に-v/--verboseを有効化)。ログデータはログファイルに追記されます。

Pythonアプリケーションでの_hfinger_の使用

バージョン0.2.0以降、Hfingerは他のPythonアプリケーションへのインポートをサポートしています。アプリケーションで使用するには、hfinger.analysisからhfinger_analyze関数をインポートし、pcapファイルのパスとレポートモードを指定して呼び出します。返される結果は、フィンガープリント結果を含むdictのリストです。

例:

root@kitploit:~
from hfinger.analysis import hfinger_analyze

pcap_path = "ここにPCAPパスを指定"
reporting_mode = 4
print(hfinger_analyze(pcap_path, reporting_mode))

バージョン0.2.1以降、Hfingerは検出されたヘッダーの非標準値、リクエストの非ペイロード部分の非ASCII文字、CRLFタグ(\r\n\r\n)の欠如、分析されたリクエストに関するその他のアプリケーションエラーでない問題についての情報をログに記録するためにloggingモジュールを使用しています。Hfingerはhfingerという名前の独自のロガーを作成しますが、事前に設定しない限り、ログ情報は実質的に破棄されます。このログ情報を受け取りたい場合は、hfinger_analyzeを呼び出す前にhfingerロガーを設定し、ログレベルをlogging.INFOに設定し、必要に応じてログハンドラーを設定してロガーに追加してください。詳細はhfinger_analyze関数のdocstringにあります。

フィンガープリントの生成

フィンガープリントはリクエストから抽出された特徴に基づいています。完全なリストからの特定の特徴の使用は、事前定義されたリストから選択されたレポートモードに依存します(レポートモードの詳細はこちら)。以下の図は、デフォルトのレポートモードにおける例示的なフィンガープリントの生成を示しています。

例

リクエストの3つの部分(URI、ヘッダー構造(メソッドとプロトコルバージョンを含む)、ペイロード)が分析され、情報が抽出されます。フィンガープリントの各特徴は|(パイプ)で区切られます。例のPOSTリクエストから生成された最終的なフィンガープリントは次のとおりです。

2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4

特徴の生成について、フィンガープリントに出現する順に以下で説明します。

まず、URIの特徴が抽出されます:

  • URIの長さ:長さの常用対数(10を底とする)を整数に丸めたもの。 (例ではURIは43文字なので、log10(43)≈2)
  • ディレクトリ数:(例では3つのディレクトリ)
  • 平均ディレクトリ長:実際の平均ディレクトリ長の常用対数を整数に丸めたもの。 (例では3つのディレクトリがあり、合計長が20文字(6+6+8)なので、log10(20/3)≈1)
  • 要求されたファイルの拡張子:ただし、hfinger/configs/extensions.txtの既知の拡張子リストにある場合のみ。
  • 平均値長:実際の平均値長の常用対数を小数点第1位で丸めたもの。 (例では2つの値が同じ長さ4文字なので、log10(4)≈0.6)

次に、ヘッダー構造の特徴が分析されます:

  • リクエストメソッド:メソッドの最初の2文字でエンコード(PO)
  • プロトコルバージョン:整数でエンコード(バージョン1.1は1、バージョン1.0は0、バージョン0.9は9)
  • ヘッダーの順序
  • 一般的なヘッダーとその値

リクエスト内のヘッダーの順序を表現するために、各ヘッダー名はhfinger/configs/headerslow.jsonのスキーマに従ってエンコードされます。例えば、User-Agentヘッダーはus-agとエンコードされます。エンコードされた名前は,で区切られます。ヘッダー名が大文字で始まらない場合(または複合ヘッダー(Accept-Encodingなど)の一部が大文字で始まらない場合)、エンコードされた表現の前に!が付加されます。ヘッダー名が既知のヘッダーのリストにない場合は、FNV1aハッシュを使用してハッシュ化され、そのハッシュがエンコードとして使用されます。

一般的なヘッダーを分析する際、リクエストにそれらが出現するかどうかがチェックされます。これらのヘッダーは以下のとおりです:

  • Connection
  • Accept-Encoding
  • Content-Encoding
  • Cache-Control
  • TE
  • Accept-Charset
  • Content-Type
  • Accept
  • Accept-Language
  • User-Agent

リクエスト内でヘッダーが見つかった場合、その値は典型的な値のテーブルと照合され、ヘッダー名表現:値表現のペアが作成されます。ヘッダー名は前述のhfinger/configs/headerslow.jsonのスキーマに従ってエンコードされ、値はヘッダーに応じてhfinger/configsディレクトリまたはconfigs.pyファイルに保存されたスキーマに従ってエンコードされます。上記の例では、Acceptはacとエンコードされ、その値*/*はas-as(asterisk-asterisk)とエンコードされ、ac:as-asとなります。ペアはリクエスト内の出現順にフィンガープリントに挿入され、/で区切られます。ヘッダー値がエンコードテーブルにない場合は、FNV1aハッシュを使用してハッシュ化されます。ヘッダー値が複数の値で構成されている場合、トークン化されて,で区切られた値のリストが提供されます。例えば、Accept: */*, text/*はac:as-as,te-asとなります。ただし、開発の現時点では、ヘッダー値に「品質値」タグ(q=)が含まれている場合、値全体がFNV1aハッシュでエンコードされます。最後に、およびヘッダーの値は、直接FNV1aハッシュでエンコードされます。

最後に、ペイロードの特徴:

  • 非ASCII文字の有無:文字Nで表され、それ以外の場合はA
  • ペイロードのシャノンエントロピー:整数に丸めたもの
  • ペイロード長:実際のペイロード長の常用対数を小数点第1位で丸めたもの

レポートモード

Hfingerは5つのレポートモードで動作し、フィンガープリントに表現される特徴(つまりリクエストから抽出される情報)が異なります。これらは以下のとおりです(ツール設定で使用される番号とともに):

  • モード0 - モード2と同程度の衝突数とフィンガープリント数だが、使用する特徴が少ない。
  • モード1 - 設計された全特徴を表現するが、モード0、2、4よりも若干衝突が多い。
  • モード2 - 最適(デフォルトモード)。リクエスト分析で通常使用されるすべての特徴を表現するが、衝突数と生成されるフィンガープリント数も少ない。
  • モード3 - 全モードの中で最も少ないフィンガープリント数を生成するが、最も多くの衝突を達成する。
  • モード4 - 最も高いフィンガープリントエントロピーを提供するが、モード0-2よりも若干多くのフィンガープリントを生成する。

これらのモードは、マルウェアファミリーを一意に識別するHfingerの能力と生成されるフィンガープリント数とのバランスを最適化するために選択されました。モード0、2、4はマルウェアファミリー間の衝突数が同程度ですが、モード4は他の2つよりも若干多くのフィンガープリントを生成します。モード2はモード0よりも多くのリクエスト特徴を表現し、生成されるフィンガープリント数と衝突数は同程度です。モード1は設計された全特徴を表現する唯一のモードですが、衝突数がモード0、1、4と比較して約2倍に増加します。モード3は他のモードよりも少なくとも2倍少ないフィンガープリントを生成しますが、約9倍多くの衝突を引き起こします。設計された全特徴の説明はこちらです。

モードは(フィンガープリントに出現する順に)以下の特徴で構成されます:

  • モード0:
    • ディレクトリ数、
    • 平均ディレクトリ長(整数で表現)、
    • 要求されたファイルの拡張子、
    • 平均値長(浮動小数点数で表現)、
    • ヘッダーの順序、
    • 一般的なヘッダーとその値、
    • ペイロード長(浮動小数点数で表現)。
  • モード1:
    • URI長(整数で表現)、
    • ディレクトリ数、
    • 平均ディレクトリ長(整数で表現)、
    • 要求されたファイルの拡張子、
    • 変数長(整数で表現)、
    • 変数の数、
    • 平均値長(整数で表現)、
    • リクエストメソッド、
    • プロトコルバージョン、
    • ヘッダーの順序、
    • 一般的なヘッダーとその値、
    • 非ASCII文字の有無、
    • ペイロードエントロピー(整数で表現)、
    • ペイロード長(整数で表現)。
  • モード2:
    • URI長(整数で表現)、
    • ディレクトリ数、
    • 平均ディレクトリ長(整数で表現)、
    • 要求されたファイルの拡張子、
    • 平均値長(浮動小数点数で表現)、
    • リクエストメソッド、
    • プロトコルバージョン、
    • ヘッダーの順序、
    • 一般的なヘッダーとその値、
    • 非ASCII文字の有無、
    • ペイロードエントロピー(整数で表現)、
    • ペイロード長(浮動小数点数で表現)。
  • モード3:
    • URI長(整数で表現)、
    • 平均ディレクトリ長(整数で表現)、
    • 要求されたファイルの拡張子、
    • 平均値長(整数で表現)、
    • ヘッダーの順序。
  • モード4:
    • URI長(浮動小数点数で表現)、
    • ディレクトリ数、
    • 平均ディレクトリ長(浮動小数点数で表現)、
    • 要求されたファイルの拡張子、
    • 変数長(浮動小数点数で表現)、
    • 平均値長(浮動小数点数で表現)、
    • リクエストメソッド、
    • プロトコルバージョン、
    • ヘッダーの順序、
    • 一般的なヘッダーとその値、
    • 非ASCII文字の有無、
    • ペイロードエントロピー(浮動小数点数で表現)、
    • ペイロード長(浮動小数点数で表現)。

欧州連合のコネクティング・ヨーロッパ・ファシリティにより共同融資

ツールをダウンロード
User-Agent
Accept-Language