

あなたのスクリーンショットを素早く目視確認(eyeballing)しましょう。
Eyeballerは、大規模なネットワーク侵入テストのために作られたツールで、大量のWebベースのホストから「興味深い」ターゲットを見つけ出す必要がある場合に使用します。普段使っているお気に入りのスクリーンショットツール(EyeWitnessやGoWitnessなど)を通常通り使い、その結果をEyeballerに通すことで、脆弱性を含む可能性が高いものとそうでないものを教えてくれます。
ライブで試す: https://eyeballer.bishopfox.com
| 古めかしいサイト | ログインページ |
|---|---|
![]() | ![]() |
| Webアプリ | カスタム404 |
|---|---|
![]() | ![]() |
| パーク済みドメイン |
|---|
![]() |
古めかしいサイト ブロック状のフレーム、崩れたCSS、2000年代初頭にデザインされたような「何とも言えない」雰囲気のウェブサイト。見れば分かります。古いウェブサイトは単に見た目が悪いだけでなく、通常は非常に脆弱です。何かにハッキングしようと考えている場合、こうしたウェブサイトは宝の山です。
ログインページ ログインページはペネトレーションテストにおいて価値があります。現在アクセスできない追加機能があることを示しています。また、認証情報の列挙攻撃というシンプルなフォローアッププロセスがあることも意味します。ログインページを見つけるために単純なヒューリスティックを設定できると思われるかもしれませんが、実際には非常に困難です。現代のサイトは、grepできるような単純なinputタグだけを使っているわけではありません。
Webアプリ このラベルは、ここに攻撃対象となるより大きなページ群や機能が存在することを示します。これは、追加機能のない単純なログインページや、他に機能のないデフォルトのIISランディングページとは対照的です。このラベルは、攻撃すべきWebアプリケーションが存在することを示しています。
カスタム404 現代のサイトは、壊れたロボットや悲しそうな犬の写真を使ったかわいらしいカスタム404ページを好みます。残念ながら、それらはHTTP 200応答コードを返すこともよくあります。さらに、「404」ページには「404」というテキストすら含まれていないことも多いです。これらのページは視覚的には賑やかですが、通常は重要ではなく、Eyeballerはそれらを選別するのに役立ちます。
パーク済みドメイン パーク済みドメインは、実在しているように見えるが、有効な攻撃対象ではないウェブサイトです。これらは代用ページであり、通常は実際の機能を備えておらず、ほぼ広告のみで構成され、実際のターゲットが運営しているわけではありません。指定されたドメインが間違っていたり、有効期限が切れていた場合に表示されます。これらのページを見つけてスコープから除外することは、長期的に見て非常に価値があります。
pipで必要なパッケージをダウンロード:
sudo pip3 install -r requirements.txt
GPUサポートが必要な場合:
sudo pip3 install -r requirements-gpu.txt
注: TensorFlowでGPUを使用するためのセットアップは、このREADMEの範囲をはるかに超えています。ハードウェアの互換性、ドライバのインストールなど考慮すべき点が多数あります。そのため、GPUを使用したい場合はこの部分を自分で解決する必要があります。ただし、Pythonパッケージの観点では、上記のrequirementsファイルでカバーされています。
事前訓練済み重み
最新の事前訓練済み重みについては、GitHubのリリースを確認してください。
訓練データ 訓練データはこちらから入手できます:
https://www.kaggle.com/altf42600/pentest-screensots
訓練データから必要なものは2つです:
images/ フォルダ(すべてのスクリーンショットが224x224にリサイズされています)labels.csv両方をEyeballerコードツリーのルートにコピーします。
さらに、訓練しなくてもそのまま使用できる事前訓練済み重みファイルもあります。
bishop-fox-pretrained-vN.h5これはGitHubの releases セクションにあり、最新のものを探してください。
注: 最良の結果を得るには、ウェブサイトのスクリーンショットをネイティブの1.6倍のアスペクト比(例:1440x900)で撮影してください。Eyeballerは自動的に画像を適切なサイズにスケーリングしますが、アスペクト比が正しくない場合、予測性能に影響を与える形で画像がつぶれます。
スクリーンショットを目視確認するには、"predict" モードを実行するだけです:
eyeballer.py --weights YOUR_WEIGHTS.h5 predict YOUR_FILE.png
あるいは、ファイルのディレクトリ全体に対して:
eyeballer.py --weights YOUR_WEIGHTS.h5 predict PATH_TO/YOUR_FILES/
Eyeballerは結果を人間が読める形式(results.html ファイルで簡単に閲覧可能)と機械可読形式(results.csv ファイル)で出力します。
Eyeballerのパフォーマンスは、評価用データセット(全体のスクリーンショットからランダムに選ばれた20%)で測定されます。これらのスクリーンショットは訓練で使用されないため、モデルの性能を効果的に評価できます。以下が最新の結果です:
| 全体の二値精度 | 93.52% |
|---|---|
| オールオアナッシング精度 | 76.09% |
全体の二値精度は、おそらくモデルの「精度」として考えられているものです。任意の単一ラベルが正しい確率です。
オールオアナッシング精度はより厳格です。ここでは、画像のすべてのラベルを考慮し、いずれかのラベルが間違っている場合は失敗とみなします。この精度は、モデルが任意の画像のすべてのラベルを正しく予測する確率です。
適合率と再現率の詳細な説明については、Wikipediaをご確認ください。
新しいモデルを訓練するには、以下を実行します:
eyeballer.py train
これを妥当な時間で実行するには、優れたGPUを搭載したマシンが必要です。そのセットアップはこのREADMEの範囲外です。
これにより、新しいモデルファイル(デフォルトでは weights.h5)が出力されます。
新しいモデルを訓練しましたね。素晴らしい!では、そのモデルが今まで見たことのない画像に対してどの程度の性能かを、さまざまな指標で確認してみましょう:
eyeballer.py --weights YOUR_WEIGHTS.h5 evaluate
出力には、プログラムの各ラベル(疑似ラベルとして「該当なし」を含む)に対する再現率と適合率の両方でモデルの精度が記述されます。
| ラベル | 適合率 | 再現率 |
|---|
| カスタム404 | 80.20% | 91.01% |
| ログインページ | 86.41% | 88.47% |
| Webアプリ | 95.32% | 96.83% |
| 古めかしい | 91.70% | 62.20% |
| パーク済みドメイン | 70.99% | 66.43% |