-
Notifications
You must be signed in to change notification settings - Fork 285
Usage
GyoiThonはオプション未指定のデフォルトモードの他、オプションを組み合わせることで、調査対象サーバの様々な情報を取得することが可能である。
usage:
{f} [-s] [-m] [-g] [-e] [-c] [-p] [-l --log_path=<path>] [--no-update-vulndb]
{f} [-d --category=<category> --vendor=<vendor> --package=<package>]
{f} [-i]
{f} -h | --help
options:
-s Optional : Examine cloud service.
-m Optional : Analyze HTTP response for identify product/version using Machine Learning.
-g Optional : Google Custom Search for identify product/version.
-e Optional : Explore default path of product.
-c Optional : Discover open ports and wrong ssl server certification using Censys.
-p Optional : Execute exploit module using Metasploit.
-l Optional : Analyze log based HTTP response for identify product/version.
-d Optional : Development of signature and train data.
-i Optional : Explore relevant FQDN with the target FQDN.
-h --help Show this help message and exit.
※GyoiThonのインストール手順はInstallationを参照のこと。
調査対象サーバに関する情報をhost.txt
に記載する。
サーバ情報の記載形式は「Protocol_FQDN(or IP address)_Port number_Root Path
」。
※「_
」は半角スペース。
https gyoithon.example.com 443 /
host.txt
を以下のように記載することで、1回の実行で複数サーバの調査を行うことも可能である。
https gyoithon.example.com 443 /
http 192.168.220.129 80 /vicnum/
https www.example.com 443 /catalog/test.php
Note |
---|
Root Path がディレクトリの場合には、必ずPathの最初と最後には「/ 」を入れること。Root Path がファイルの場合は、必ずPathの最初には「/ 」を入れること。 |
ユーザが変更する可能性のあるパラメータは設定ファイル「config.ini
」に定義されている。
config.ini
の各項目の説明はConfigureを参照のこと。
root@kali:~/GyoiThon# python3 gyoithon.py
デフォルトモードでは、以下に示す必要最低限の情報収集を行う。
- Web CrawlingによるHTTPレスポンスの収集
- シグネチャを用いた製品/バージョンの調査
- 特定した製品/バージョンの脆弱性調査(NVDを利用)
- 不要なコメントの調査
- 不要なデバッグメッセージの調査
- ログインページ有無の調査
- Crawlingに関する設定
GyoiThonは、Web CrawlingにPythonのライブラリ「Scrapy
」を利用している。
config.ini
の下記パラメータを変更することで、Scrapyの動作設定を変更することが可能である。
カテゴリ | 項目 | 解説 |
---|---|---|
Spider | concurrent_reqs | Crawlingの同時実行数。デフォルトは1 。0 を指定した場合、Scrapyのデフォルト値「16 」が適用される。 |
depth_limit | Crawlingで探索する最大階層。デフォルトは2 階層。 |
|
delay_time | Crawlingの時間間隔。デフォルトは10 秒。 |
|
time_out | Spiderのタイムアウト時間。デフォルトは300 秒。 |
|
item_count | 最大URL抽出数。デフォルトは50 個。 0 を設定した場合は無制限。 |
|
page_count | 1ページあたりの最大URL抽出数。デフォルトは50 。0 を設定した場合は無制限。 |
|
error_count | 最大許容エラー数。デフォルトは0 個(制限なし)。 |
- 調査速度に関する設定
調査対象の数やレスポンスのサイズ等は、GyoiThonの調査時間に大きな影響を与える。
config.ini
の下記パラメータを変更することで、調査速度を調整することが可能である。
カテゴリ | 項目 | 解説 |
---|---|---|
Common | max_target_url | 調査対象の最大URL数。Web Crawlingで取得したURL数が当該値を超える場合、超過分は調査対象外となる。デフォルトは100 。0 を設定した場合は無制限。 |
max_target_byte | ページの調査対象レスポンスサイズ。レスポンスサイズが当該値を超える場合、超過分は調査対象外となる。デフォルトは10000 byte。0 を設定した場合は無制限。 |
|
scramble | Web Crawlingで取得したURLリストをランダムに並べ替える。デフォルト1 (有効)。0 を設定した場合は並べ替えしない。 |
Note |
---|
調査速度の短縮と調査精度はトレードオフの関係になる。 |
- 脆弱性DBを更新しない
GyoiThonは起動時にNVDとローカルの脆弱性DBの同期を取る。
--no-update-vulndb
オプションを付けることで、同期処理をスキップする事が可能である。
root@kali:~/GyoiThon# python3 gyoithon.py -s
「-s
」オプションを付けた場合、デフォルトモードの調査に加え、クラウドサービス利用有無の調査を行う。なお、config.ini
の下記パラメータは実行前に必ず変更する必要がある。
カテゴリ | 項目 | 解説 |
---|---|---|
CloudChecker | azure_ip_range | Azure Datacenter IP Rangesの取得先URL。 |
本パラメータは、AzureサービスのIPアドレス範囲を定義したXMLが置かれたURLとなる。本URLは数日に1回の頻度で変更されるため、GyoiThonを実行する前にMicrosoft Azure Datacenter IP Rangesのリンク「click here to download manually」のURLを取得し、本パラメータに設定する。
root@kali:~/GyoiThon# python3 gyoithon.py -m
「-m
」オプションを付けた場合、デフォルトモードの調査に加え、機械学習(Naive Bayes)を用いた製品/バージョンの調査を行う。
root@kali:~/GyoiThon# python3 gyoithon.py -g
「-g
」オプションを付けた場合、デフォルトモードの調査に加え、Google Custom Search APIを用いた製品/バージョンの調査を行う。Google API keyとSearch Engine IDを取得の上、config.ini
の下記パラメータに設定する必要がある。
カテゴリ | 項目 | 解説 |
---|---|---|
GoogleHack | api_key | Google Custom Search APIのキー。 |
search_engine_id | Google検索エンジンのID。 |
Note |
---|
Google Custom Search APIは1日100クエリまでは無料で利用可能である。しかし、それ以上のクエリを発行する場合は課金が必要となる。 |
root@kali:~/GyoiThon# python3 gyoithon.py -e
「-e
」オプションを付けた場合、デフォルトモードの調査に加え、CMSやWebサーバといった製品固有のデフォルトコンテンツ探索を行う。なお、config.ini
の下記パラメータを変更することで、コンテンツ探索の時間間隔を変更することが可能である。
カテゴリ | 項目 | 解説 |
---|---|---|
ContentExplorer | delay_time | コンテンツ探索の時間間隔。デフォルト値は「1秒」。 |
Note |
---|
本モードは数百ものアクセスを伴うため、Webサーバ側に負荷が掛かる可能性がある。また、アクセスログに大量の404エラーログが記録されることで、監視によるアラートが上がる可能性がある。よって、必ず事前に監視やサーバ管理者等の関係者に周知し、自身の管理下にあるサーバに対して実行すること。 |
root@kali:~/GyoiThon# python3 gyoithon.py -c
「-c
」オプションを付けた場合、デフォルトモードの調査に加え、Censysを利用した空きポート番号やサーバ証明書の調査を行う。CensysのマイページからAPIキーとSecretキーを取得の上、config.ini
の下記パラメータに設定する必要がある。
カテゴリ | 項目 | 解説 |
---|---|---|
Censys | api_id | CensysのAPIキー。 |
secret | Censysのsecretキー。 |
Note |
---|
2018年11月13日時点では、空きポート番号とサーバ証明書情報をコンソールに表示するのみに留まっている。今後、更なる情報を収集できるように拡張予定である。 |
root@kali:~/GyoiThon# python3 gyoithon.py -p
「-p
」オプションを付けた場合、デフォルトモードの調査に加え、Penetration test frameworkのMetasploitを利用し、サーバへの侵入に繋がる脆弱性の有無を調査する。
事前にMetasploitのRPCサーバを起動した上で、config.ini
の下記パラメータを設定する必要がある。
カテゴリ | 項目 | 解説 |
---|---|---|
Exploit | server_host | Metasploitのmsgrpc に割り当てたIPアドレス。 |
server_port |
msgrpc に割り当てたポート番号。 |
|
msgrpc_user |
msgrpc の認証に使用するユーザID。 |
|
msgrpc_pass |
msgrpc の認証に使用するパスワード。 |
|
LHOST | 上記server_host と同様。 |
|
LPORT | 上記server_port と同様。 |
Note |
---|
本モードはMetasploitに備わっているExploitモジュールを実行するため、Webサーバ側の稼働に影響を与える可能性が高い。また、Exploitモジュールは実際の攻撃に近い動作をするため、監視によるアラートが上がる可能性がある。よって、必ず事前に監視やサーバ管理者等の関係者に周知し、自身の管理下にあるサーバに対して実行すること。 |
root@kali:~/GyoiThon# python3 gyoithon.py -l --log_path="Full path of stored logs"
「-l
」オプションを付けた場合、(Web Crawlingは行わずに)事前に取得/蓄積されたHTTPレスポンスログに対して各種調査を行う。
本モードは、ScrapyでWeb CrawlingができないWebアプリケーションを想定している。
(Local Proxyを用いて手動でログを収集する等の)他手段で収集したHTTPレスポンスログを使用することで、デフォルトモードのWeb Crawlingと同じ調査が可能となる。
Note |
---|
ログファイルの拡張子は「.log 」とすること。 |
root@kali:~/GyoiThon# python3 gyoithon.py -s -m
root@kali:~/GyoiThon# python3 gyoithon.py -s -g
root@kali:~/GyoiThon# python3 gyoithon.py -s -m -g
root@kali:~/GyoiThon# python3 gyoithon.py -s -m -g -e -c -p -l --log_path="Full path of stored logs"
root@kali:~/GyoiThon# python3 gyoithon.py -d --category=CMS --vendor=joomla! --package=Joomla!@3.9.4@_origin.tar.zip
オプション | 解説 | サンプル |
---|---|---|
--category | シグネチャ/学習データに記載される製品カテゴリ。 |
OS or WEB or FRAMEWORK or CMS . |
--vendor | シグネチャ/学習データに記載される製品ベンダー名。 |
wordpress , joomla! , drupal . |
--package | インポートするパッケージフィル名。製品/バージョン/その他拡張子等を@ 区切りで記載する必要がある。
|
WordPress@4.9.8@.tar.gz , Joomla!@3.9.4@_origin.tar.zip , Drupal@8.6.3@.tar.gz . |
root@kali:~/GyoiThon# python3 gyoithon.py -i
「-i
」オプションを付けた場合、対象組織(会社など)に関連するFQDNをを調査する(ターゲットサーバの脆弱性調査は行わない)。調査対象組織の情報はinventory_list.txt
に記載する。
- inventory_list.txt
https://gyoithon.example.com/ 株式会社御意村
Note |
---|
URLと組織名はタブ で区切ること。URLは必ず/ で終えるように記述する。また、組織名はJPRS WHOIS検索の「ドメイン名情報(登録者名)」の検索にヒットする文字列にすること。 |
複数の組織を調査する場合は、以下のようにinventory_list.txt
に改行区切りで組織名を記述する。
https://gyoithon1.example.com/ 株式会社御意村1
https://gyoithon2.example.com/ 株式会社御意村2
https://gyoithon3.example.com/ 株式会社御意村3
また、exclude_fqdn.txt
に任意のFQDNを記述することで、調査対象外にすることが可能である。
- exclude_fqdn.txt
www.facebook.com
ja-jp.facebook.com
twitter.com
www.twitter.com
www.youtube.com
www.instagram.com
instagram.com
GyoiThonの実行が完了すると、下記のPathに調査対象サーバ毎のレポートが生成される。
root@kali:~/GyoiThon/report# ls
gyoithon_report_192.168.220.129_80_1082018338.csv
gyoithon_report_192.168.220.129_80_bodgeit.csv
gyoithon_report_192.168.220.129_80_cyclone.csv
gyoithon_report_192.168.220.129_80_vicnum.csv
gyoithon_report_192.168.220.129_80_WackoPicko.csv
gyoithon_censys_report_www.gyoithon.example.com_443_test.csv
GyoiThonは下記2種類のレポートを生成する。
-
gyoithon_report_target FQDN(or IP address)_Port number_Root Path.csv
.
製品名、バージョン、CVE番号等を含むメインのレポート。
レポート名の形式は「gyoithon_report_FQDN(or IP address)_Port number_Root Path.csv
」。
レポートの各カラムは以下のとおり。
カラム | 解説 | 記載例 |
---|---|---|
fqdn | 対象サーバのFQDN | www.gyoithon.example.com |
ip_addr | 対象サーバのIPアドレス | 192.168.220.129 |
port | 対象サーバのポート番号 | 80 |
cloud_type | 利用しているクラウドサービス(Azure or AWS or GCP) | AWS |
method | GyoiThonの調査手法名 | Crawling |
url | アクセスしたURL | http://192.168.220.129:80/WackoPicko/admin/index.php?page=login |
vendor_name | 特定した製品のベンダー名 | apache |
prod_name | 製品名 | http_server |
prod_version | 製品のバージョン | 2.2.14 |
prod_trigger | 製品特定時のトリガ(証跡) | Apache/2.2.14 |
prod_type | 製品カテゴリ(Web or CMS or Framework etc..) | Web |
prod_vuln | 該当するCVE番号(CVSSスコアの降順に列挙) |
CVE-2017-3167, CVE-2017-3169, CVE-2017-7668 ... |
origin_login | Webアプリ独自のログイン画面有無(機械学習による推定とURL文字列判定の2パターン) | Log : 37.5 %\nUrl : 100.0 % |
origin_login_trigger | ログイン画面判定時のトリガ(証跡) | Log : name",<input type="password"\nUrl : login |
wrong_comment | 特定した不要なコメント | パスワードは「password1234」です。 |
error_msg | 特定した不要なメッセージ | Warning: mysql_connect() ..snip.. in auth.php on line 38 |
server_header | HTTPレスポンスのServerヘッダ値 | Server: Apache/2.2.14 (Ubuntu) mod_mono/2.4.3 PHP/5.3.2 |
log | 生ログのPath | /usr/home/~snip~/http_192.168.220.129_80_20181112170525765.log |
date | 調査日時 | 2018/11/12 17:05:25 |
-
gyoithon_censys_report_target FQDN(or IP address)_Port number_Root Path.csv
.
Censysを使用して取得したサーバ情報、証明書情報を含むレポート。
レポート名の形式は「gyoithon_censys_report_FQDN(or IP address)_Port number_Root Path.csv
」。
レポートの各カラムは以下のとおり。
Column | Description | Example |
---|---|---|
fqdn | 対象サーバのFQDN。 | www.gyoithon.example.com |
ip_addr | 対象サーバのIPアドレス。 | 192.168.220.129 |
category | 取得情報のカテゴリ。 |
Server Info or Certification Info
|
open_port | オープンWebポート番号。 | 443 |
protocol | オープンWebポートのプロトコル。 | https |
sig_algorithm | 証明書の署名アルゴリズム。 | SHA256-RSA |
cname | 証明書のコモンネーム。 | www.gyoithon.example.com |
valid_start | 証明書の有効期限(開始日)。 | 2018-08-15T00:00:00Z |
valid_end | 証明書の有効期限(終了日)。 | 2019-09-16T12:00:00Z |
organization | 証明書の組織名称。 | GyoiThon coorporation, Inc. |
date | 調査日時。 | 2018/11/22 11:19:36 |
Note |
---|
Censysが保持する情報は最新ではない可能性がある(インターネット全体の巡回に数日から数週間程度掛かるため)。 |