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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
HTTP-Basma — サイバーセキュリティの領域では、Webサーバーを正確に特定し特性を把握することが、 脅威検出、脆弱性評価、ネットワークマッピングにとって重要です。私たちは、 多層的なアプローチを通じて独自のサーバープロファイルを明らかにする新しいアクティブフィンガープリンティングアルゴリズム、HTTP-Basmaを紹介します。 | Kitploit
ツール/GitHubGitHub/netomize/http-basma
偵察ネットワークマッピング脆弱性分析情報収集ウェブセキュリティマルウェア分析コマンド&コントロール脅威インテリジェンスレッドチーミング
GitHubnetomize/http-basma

HTTP-Basma

サイバーセキュリティの領域では、Webサーバーを正確に特定し特性を把握することが、 脅威検出、脆弱性評価、ネットワークマッピングにとって重要です。私たちは、 多層的なアプローチを通じて独自のサーバープロファイルを明らかにする新しいアクティブフィンガープリンティングアルゴリズム、HTTP-Basmaを紹介します。

31ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
リポジトリを見るウェブサイト
HTTP-Basma Logo

適応的フィンガープリンティング:HTTP-Basmaのマルチステージプロービングによる高精度サーバー識別

HTTP-Basmaは https://httpbasma.netomize.ca/ で公開されています。

はじめに

サイバーセキュリティの領域において、Webサーバーを正確に識別し特徴付けることは、脅威検知、脆弱性評価、ネットワークマッピングにとって極めて重要です。本稿では、多層的なアプローチを通じて独自のサーバープロファイルを明らかにする、新しいアクティブフィンガープリンティングアルゴリズム HTTP-Basma を紹介し、この課題に取り組みます。

主な特徴: 巧妙に作成されたリクエスト、応答を明らかにする:HTTP-Basmaは、サーバー構成を反映した特徴的な応答を引き出すために、細心の注意を払って設計された8つのHTTPプローブを送信します。 汎用性のためのデュアルハッシュ。このアルゴリズムは2つのハッシュを生成します:

  • 可逆性を提供する38バイトのファジーハッシュ「verbosus」
  • verbosusから導出され、プライバシーとセキュリティを強化する16バイトの一方向ハッシュ「pacto」

クラスタリングとハンティング:これらのハッシュにより、サーバーのクラスタリング、独自および類似サーバーの識別、そして悪意のある攻撃者の追跡がより高い信頼度で可能になります。

拡張のためのモジュラー設計:このアルゴリズムのアーキテクチャは、新しいハッシュバリアントの追加を促進し、コラボレーションと適応性を促進します。

本稿では、まずHTTPフィンガープリンティングに関する注目すべき既存研究を調査し、その後、このアルゴリズムの機能、設計、アーキテクチャ、および成果を探求します。さらに、Majesticトップ100万ウェブサイトのスキャンから得られた説得力のある発見(さまざまなマルウェアファミリーのC&C HTTPサーバーの識別とクラスタリングを含む)を紹介します。


HTTP-Basmaのアルゴリズムの核となるアイデアは、サーバーから異なる応答を引き出すために、さまざまな要件を持つ8つの特別に作成されたHTTPリクエストを送信することにあります。サーバーの応答が取得されると、HTTPステータスラインはすべての要素について外科的に解析され、最適にエンコードされます。さらに、サーバー応答から選択されたヘッダーもエンコードされているかどうかチェックされます。

送信されるリクエストは以下のタイプです:

  1. P1 - GET ノーマル - 有効なリクエスト
  2. P2 - GET 無効なHTTPバージョンリクエスト
  3. P3 - GET ランダムリソースリクエスト
  4. P4 - ランダム動詞リクエスト
  5. P5 - get 小文字動詞
  6. P6 - GETリクエスト - Accept-Encoding - フル
  7. P7 - GETリクエスト - Accept-Encoding - レス
  8. P8 - OPTIONSリクエスト

各リクエストの後、サーバーの応答が分析され、特定のヘッダーとその値が抽出されます。この抽出されたデータは、可逆的なフィンガープリントを生成するために、解析やエンコードを含むさらなる処理を受けます。

アルゴリズムがどのように機能するかについての完全な技術的詳細は、添付の論文に記載されています。

このモジュラー設計思想は、各リクエストのフィンガープリントをビルディングブロックとして扱い、エレガントなリファクタリングを可能にし、任意のリクエストのフィンガープリントを追加および削除する可能性を提供します。

フィンガープリントのサンプル:

CobaltStrike

root@kitploit:~
  - verbosus fp: 011420958a0014514bd5221420958a221420958a221420958a2200001420958a22000000001f
  - pacto fp: 02464ae8b7d86f82c9918e2c2b9d6b91
  - note: false-positive rate (72/986,910)

Havoc

root@kitploit:~
  - verbosus fp: 01142494d60914514bd522142494d6221420958a701420958a220000140e04922032c37f1609
  - pacto fp: 020769322f3d94ac2f258ddf5ce08502
  - note-1: false-positive rate 0
  - note-2: tevedadav.site/43.209.165.126:443 (TLS)
    - sample-(sha-256): 9aa1dec8dd12f8adc7fc1274e1958f3613450109ee8b4ec6442a0fcf06df0972

BruteRatel

root@kitploit:~
  - verbosus fp: 01140a85e40014512f3612140a85e422140a85e422140a85e4220000140a85e4220000000001
  - pacto fp: 0207292309a7a7e798e417d69df5f2a5
  - note: false-positive rate (73/986,910)

Google

root@kitploit:~
  - verbosus fp: 01140a85e4001320958a22142494d62214254c5e2214254c5e22080014254c5e220000000000
  - pacto fp: 0202be780e1eaae0eaa6184e20c909b6
  - note: false-positive rate (4/986,910)

YouTube

root@kitploit:~
  - verbosus fp: 01140a85e4011320958a22142494d67214254c5e2214254c5e22080014254c5e220000000000
  - pacto fp: 02cc5be6d05192e17de041538508bc22
  - note: false-positive rate (38/986,910)

X

root@kitploit:~
  - verbosus fp: 01140a85e40914514bd522140a85e4721420958a701420958a220800140a85e4720000001609
  - pacto fp: 0221b4e46bbd0e5c037f5a852ca3fdc0
  - note: false-positive rate (6/986,910)

HTTP-Basmaツール

HTTP-Basmaは、このアルゴリズムの実用性と実行可能性を示すために私が開発したC++ツールです。すべてのHTTPソケットインタラクションにChilkatのライブラリを活用し、ライブラリ内の他のサポートクラスも使用しています。さらに、このツールには、verbosusファジーハッシュを解析して逆変換し、包括的なJSONオブジェクトを出力するデマングラ機能と、2つのverbosusフィンガープリント間の差分を出力する比較機能が含まれています。

ツールの出力の一部ではプローブ番号がわずかに異なる場合がありますが、基礎となる順序は一貫していることに注意してください:P1->P1, P2->P2, P3->P3, P4->P4, P->P5, P6->P6F, P7->P6L, P8->P7a。

ツールのオプション

クリックして展開
root@kitploit:~
Usage:
  HTTP-Basma [OPTION...]

  -d, --domain arg         domains/IPs (you may query multiple domains, comma separated)
  -p, --port arg           port number
  -s, --ssl                does the HTTP connection have to be carried over SSL/TLS?
  -q, --qpath              check domain with url path included (not recommended)
  -w, --redirect           enable/disable HTTP redirects. If disabled/false, only the next redirect is followed,
                           otherwise, all redirects are followed (default: true)
  -t, --ctimeout arg       socket connection timeout value in seconds (default: 1)
  -g, --rtimeout arg       socket read (from the server) timeout value in seconds (default: 1)
  -e, --sleep arg          the duration (in milliseconds) to pause between each request (default: 100)
  -x, --proxy arg          proxy config: <"socks4|socks5|http">,<domain>,<port>,<bool:direct_tls>,<login>,<pass>
                                         all values are comma-separated. <direct_tls> is ignored with a non-HTTP proxy
  -f, --file arg           file with list of domains/IPs (requires "-c/--csv" or "-j/--json")
  -P, --parallel           Scan list of domains passed via the "-f/--file" option in parallel
  -c, --csv                save to csv file; if the option 'n' is not specified, the CSV filename will be auto
                           generated
  -n, --csvfile arg        name of the CSV file
  -j, --json               save to json file; if the option 'l' is not specified, the JSON filename will be auto
                           generated
  -l, --jsonfile arg       name of the JSON file
  -r, --saveh              save request response headers
  -o, --pjson              display fingerprint dissection to the console as a JSON object
  -i, --demangle_json arg  demangle a fingerprint into a detailed json format (you can have more than one, comma
                           separated)
  -u, --demangle_txt arg   output a concise text format of the fingerprint, comma-separated for multiple results
  -C, --compare arg        compare two verbosus fingerprints (comma-separated)
  -a, --pacto arg          obtain the Pacto fingerprint using Verbosus
  -h, --help               print usage	

詳細な出力

特定のドメイン/IPをリクエストすると、サーバー応答ヘッダーと各プローブの独自のフィンガープリントに関する豊富な情報を含む応答をCSVまたはJSONファイルに保存できます。

例えば、https://google.com のサーバーのフィンガープリントを取得し、結果をJSONおよびCSVファイルに保存し、各プローブのHTTP応答ヘッダーも保存するには:

root@kitploit:~
HTTPBasma.exe -d https://google.com --json --csv --saveh

Output フォルダーには、CSVファイル google_hb_results_2026-05-19_08-35-38_am.csv とJSONファイル google_hb_results_2026-05-19_08-35-38_am.json があります。

デマングラ

ツールのデマングラ関数 "-i/--demangle_json" は、verbosusフィンガープリントを受け取り、各プローブの属性を再構築し、包括的なJSONオブジェクトを出力します。特に、FNV-1aハッシュを逆変換する際、デマングラは2つのローカルデータベースを利用します:許可されたHTTPメソッド用の options.csv と、ステータスラインの理由フレーズ用の status_line_db.csv です。これらのデータベースファイルのいずれかが欠落している場合、対応するハッシュ逆変換機能は自動的に無効になります。これらのデータベースは、Majesticトップ100万ウェブサイトのスキャンからコンパイルされました。

ドメイン example.com のverbosusフィンガープリントのデマングリング:

root@kitploit:~
HTTPBasma.exe --demangle_json 01140a85e40014514bd522142494d67214254c5e721420958a22020214254c5e720000001609
デマングラ出力(クリックして展開)
root@kitploit:~
{
  "type": "verbosus",
  "fp": "01140a85e40014514bd522142494d67214254c5e721420958a22020214254c5e720000001609",
  "p1": {
    "type": "get_normal",
    "fp": "140a85e400",
    "status_line": {
      "http_version": {
        "fp": "14",
        "val_cmt": "HTTP/1.1"
      },
      "status_code": {
        "fp": "0a",
        "val_cmt": "200"
      },
      "http_reason": {
        "fp": "85e4",
        "val_cmt": "OK"
      },
      "sl_reversed_db": {
        "http_version": "HTTP/1.1",
        "status_code": [
          200,
          404,
          403,
          500,
          204,
          999,
          888,
          603
        ],
        "http_reason": "OK"
      }
    },
    "sts_hdr": {
      "fp": "00",
      "cmt": "this header is not used"
    }
  },
  "p2": {
    "type": "get_invalid_ver_nb",
    "fp": "14514bd522",
    "status_line": {
      "http_version": {
        "fp": "14",
        "val_cmt": "HTTP/1.1"
      },
      "status_code": {
        "fp": "51",
        "val_cmt": "505"
      },
      "http_reason": {
        "fp": "4bd5",
        "val_cmt": "HTTP Version Not Supported"
      },
      "sl_reversed_db": {
        "http_version": "HTTP/1.1",
        "status_code": [
          505
        ],
        "http_reason": "HTTP Version Not Supported"
      }
    },
    "cont_len_hdr": {
      "fp": "22",
      "name": "Content-Length",
      "value": ">1",
      "cmt": "content-length/transfer-encoding:chunked header is present with either of the size values: [0,1,>1]"
    },
    "cnx": {
      "ka": false,
      "c": true
    }
  },
  "p3": {
    "type": "get_rnd_resource",
    "fp": "142494d672",
    "status_line": {
      "http_version": {
        "fp": "14",
        "val_cmt": "HTTP/1.1"
      },
      "status_code": {
        "fp": "24",
        "val_cmt": "404"
      },
      "http_reason": {
        "fp": "94d6",
        "val_cmt": "Not Found"
      },
      "sl_reversed_db": {
        "http_version": "HTTP/1.1",
        "status_code": [
          404,
          403,
          501,
          410,
          204,
          400,
          200,
          418
        ],
        "http_reason": "Not Found"
      }
    },
    "cont_len_hdr": {
      "fp": "72",
      "name": "Transfer-Encoding",
      "value": ">1",
      "cmt": "content-length/transfer-encoding:chunked header is present with either of the size values: [0,1,>1]"
    },
    "cnx": {
      "ka": true,
      "c": false
    }
  },
  "p4": {
    "type": "get_rnd_verb",
    "fp": "14254c5e72",
    "status_line": {
      "http_version": {
        "fp": "14",
        "val_cmt": "HTTP/1.1"
      },
      "status_code": {
        "fp": "25",
        "val_cmt": "405"
      },
      "http_reason": {
        "fp": "4c5e",
        "val_cmt": "Method Not Allowed"
      },
      "sl_reversed_db": {
        "http_version": "HTTP/1.1",
        "status_code": [
          405,
          403,
          204,
          418,
          404
        ],
        "http_reason": "Method Not Allowed"
      }
    },
    "cont_len_hdr": {
      "fp": "72",
      "name": "Transfer-Encoding",
      "value": ">1",
      "cmt": "content-length/transfer-encoding:chunked header is present with either of the size values: [0,1,>1]"
    },
    "cnx": {
      "ka": true,
      "c": false
    }
  },
  "p5": {
    "type": "get_lowercase_verb",
    "fp": "1420958a22",
    "status_line": {
      "http_version": {
        "fp": "14",
        "val_cmt": "HTTP/1.1"
      },
      "status_code": {
        "fp": "20",
        "val_cmt": "400"
      },
      "http_reason": {
        "fp": "958a",
        "val_cmt": "Bad Request"
      },
      "sl_reversed_db": {
        "http_version": "HTTP/1.1",
        "status_code": [
          400,
          422,
          405,
          401
        ],
        "http_reason": "Bad Request"
      }
    },
    "cont_len_hdr": {
      "fp": "22",
      "name": "Content-Length",
      "value": ">1",
      "cmt": "content-length/transfer-encoding:chunked header is present with either of the size values: [0,1,>1]"
    },
    "cnx": {
      "ka": false,
      "c": true
    }
  },
  "p6f": {
    "type": "get_accept_encoding_full",
    "fp": "02",
    "cont_enc_hdr": {
      "value": "br",
      "empty_value": false,
      "total_plus": 0
    }
  },
  "p6l": {
    "type": "get_accept_encoding_less",
    "fp": "02",
    "cont_enc_hdr": {
      "value": "br",
      "empty_value": false,
      "total_plus": 0
    }
  },
  "p7a": {
    "type": "options_allow_hdr",
    "fp": "14254c5e72000000",
    "status_line": {
      "http_version": {
        "fp": "14",
        "val_cmt": "HTTP/1.1"
      },
      "status_code": {
        "fp": "25",
        "val_cmt": "405"
      },
      "http_reason": {
        "fp": "4c5e",
        "val_cmt": "Method Not Allowed"
      },
      "sl_reversed_db": {
        "http_version": "HTTP/1.1",
        "status_code": [
          405,
          403,
          204,
          418,
          404
        ],
        "http_reason": "Method Not Allowed"
      }
    },
    "cont_len_hdr": {
      "fp": "72",
      "name": "Transfer-Encoding",
      "value": ">1",
      "cmt": "content-length/transfer-encoding:chunked header is present with either of the size values: [0,1,>1]"
    },
    "allow_hdr": {
      "fp": "000000",
      "cmt": "this header is not used"
    },
    "cnx": {
      "ka": true,
      "c": false
    }
  }
}

"status_code" 配列に複数のHTTPステータスコードが含まれていることに注目してください。これは、異なるサーバーが異なるステータスコードに対して同じ理由フレーズを使用する可能性があり、その結果、同一のFNV-1aハッシュになるためです。

比較オプション

比較オプション "-C/--compare" は、2つのverbosusフィンガープリントを比較し、各プローブの主要コンポーネント間の差分を出力します。

例えば、GoogleとYouTubeの次の2つのフィンガープリントを比較する場合:

root@kitploit:~
HTTPBasma.exe --compare 01140a85e4001320958a22142494d62214254c5e2214254c5e22080014254c5e220000000000,01140a85e4011320958a22142494d67214254c5e2214254c5e22080014254c5e220000000000

次のような出力になります:

root@kitploit:~
 < FPrnt-1 Vs. FPrnt-2 >

 [ P1 ]
    {Strict-Transport-Security}
      sts header: 00 != 01

 [ P2 ]
 [ P3 ]
    {Content-Length}

      cl_name: 2 != 7

 [ P4 ]
 [ P5 ]
 [ P6F ]
 [ P6L ]
 [ P7a ]

この出力は、P1プローブのハッシュコンポーネントに特に差分があることを明らかにしており、STSヘッダーが最初のfpには存在し、もう一方には存在しないことを示しています。さらに、P3プローブの2つのフィンガープリント間で "Content-Length" のエンコーディングが異なります。


リリース

Netomizeは、このリポジトリの公開コードのコンパイル済みWindowsおよびLinux x64バージョンを提供しています。さらに、majestic 100万 HTTP-BasmaフィンガープリントCSVファイル - データセット が最初のリリースに同梱されています。

使用されているサードパーティライブラリ

  • Chilkat v11.4.0
  • rang: コンソールの色付け用
  • cxxopts (v3.3.1)

ライセンス

  • Netomizeライセンス
  • ライセンスは2026年7月30日に更新され、BSD 3-ClauseライセンスからNetomizeライセンスに変更されました

貢献

プルリクエストとイシューを受け付けています。コメントや提案は大歓迎です。

ツールをダウンロード