
Gixy-Next v0.7.1
Gixy-Next: NGINX構成セキュリティスキャナー&パフォーマンスチェッカー
Gixy-Next: セキュリティ監査向けNGINX設定セキュリティスキャナー
概要
Gixy-Next (Gixy) は、オープンソースのNGINX設定セキュリティスキャナー兼ハードニングツールであり、nginx.confを静的に解析して、セキュリティ設定の不備、ハードニングの不足、および一般的なパフォーマンスの落とし穴を本番環境に到達する前に検出します。これはYandexのGixyの活発にメンテナンスされているフォークです。Gixy-NextのソースコードはGitHubで入手可能です。
Gixy-Nextはこのページでブラウザ上でも実行できます。ダウンロードは不要で、ウェブサイト上で設定をスキャンできます(WebAssemblyを使用してローカルで)。
クイックスタート
Gixy-Next(gixyまたはgixy-next CLI)はPyPIで配布されています。pipまたはuvでインストールできます:
# pip
pip3 install gixy-next
# uv
uv pip install gixy-next
その後、実行できます:
# gixy defaults to reading /etc/nginx/nginx.conf
gixy
# But you can also specify a path to the configuration
gixy /opt/nginx.conf
NGINX設定を単一のダンプファイルにエクスポートすることもできます(nginx -T Live Configuration Dumpを参照):
# Dumps the full NGINX configuration into a single file (including all includes)
nginx -T > ./nginx-dump.conf
# Scan the dump elsewhere (or via stdin):
gixy ./nginx-dump.conf
# or
cat ./nginx-dump.conf | gixy -
ウェブベースのスキャナー
Gixy-Nextをローカルにダウンロードして実行する代わりに、このウェブページを使用して、ウェブブラウザから設定をスキャンできます(WebAssemblyを使用してローカルで)。
Dockerでスキャン
Gixy-NextはDocker HubまたはGitHub RegistryからDockerイメージとして入手できます。
ローカルの設定ファイルをコンテナにマウントしてスキャンします:
# Use Github Registry
docker run --pull=always --rm -v "$PWD/nginx.conf:/nginx.conf:ro" ghcr.io/megamansec/gixy-next /nginx.conf
# Or Docker Hub
docker run --pull=always --rm -v "$PWD/nginx.conf:/nginx.conf:ro" megamansec/gixy-next /nginx.conf
NGINXのライブ設定ダンプをスキャンします:
# Dumps the full NGINX configuration into a single file (including all includes)
nginx -T > ./nginx-dump.conf
# Use Github Registry
docker run --pull=always --rm -v "$PWD/nginx-dump.conf:/nginx-dump.conf:ro" ghcr.io/megamansec/gixy-next /nginx-dump.conf
# Or Docker Hub
docker run --pull=always --rm -v "$PWD/nginx-dump.conf:/nginx-dump.conf:ro" megamansec/gixy-next /nginx-dump.conf
stdinからスキャンします:
# Use Github Registry
nginx -T | docker run --pull=always --rm -i ghcr.io/megamansec/gixy-next gixy-next -
# Or Docker Hub
nginx -T | docker run --pull=always --rm -i megamansec/gixy-next gixy-next -
できること
Gixy-Nextは、nginx.confおよびインクルードされた設定ファイル全体にわたる幅広いNGINXのセキュリティおよびパフォーマンスの設定不備を検出できます。以下のプラグインがサポートされています:
- [add_header_content_type] add_headerによるContent-Typeの設定
- [add_header_multiline] 複数行のレスポンスヘッダー
- [add_header_redefinition] "add_header"ディレクティブによるレスポンスヘッダーの再定義
- [alias_traversal] 設定不備のaliasによるパストラバーサル
- [allow_without_deny] denyなしで指定されたallow
- [default_server_flag] default_serverフラグの欠落
- [error_log_off]
error_logがoffに設定されている - [hash_without_default] hashブロックにdefaultがない
- [host_spoofing] リクエストのHostヘッダーの偽装
- [http2_misdirected_request] HTTP/2のmisdirected-request対策の欠落
- [http_splitting] HTTPレスポンス分割
- [if_is_evil] locationコンテキストで使用された場合のIf is evil
- [invalid_regex] 無効な正規表現キャプチャグループ
- [low_keepalive_requests]
keepalive_requestsが低い - [missing_worker_processes]
worker_processesの欠落 - [mixed_case_variable] 大文字小文字が混在した変数参照
- [origins] referer/originヘッダー検証の問題
- [overlapping_captures] rewriteリダイレクト/引数コンテキストでのキャプチャの重複
- [proxy_buffering_off]
proxy_bufferingの無効化 - [proxy_pass_normalized]
proxy_passのパス正規化の問題 - [proxy_set_header_redefinition] "proxy_set_header"ディレクティブによるプロキシリクエストヘッダーの再定義
- [quic_bpf_reuseport] リロード後にQUIC接続がサイレントにドロップされる
- [regex_redos] 正規表現サービス拒否 (ReDoS)
- [resolver_external] 外部DNSネームサーバーの使用
- [return_bypasses_allow_deny] returnディレクティブがallow/deny制限をバイパスする
- [ssl_ecdh_curve] ポスト量子グループにより古いOpenSSLでNGINXが起動しなくなる
- [ssl_stapling_letsencrypt] Let's Encrypt証明書ではOCSPステープリングが機能しない
- [ssl_stapling_without_resolver] resolverなしではOCSPステープリングがサイレントに失敗する
- [ssrf] サーバーサイドリクエストフォージェリ
- [stale_dns_cache] proxy_passで使用される古い/陳腐化したキャッシュDNSレコード
- [status_page_exposed] status_pageが外部に公開されていないことを確認する
- [try_files_is_evil_too] open_file_cacheなしでは
try_filesディレクティブは悪 - [unanchored_regex] アンカーされていない正規表現
- [unnamed_groups] rewriteクエリ文字列内の名前のないキャプチャグループ
- [valid_referers] valid_referersにおけるnone/blocked
- [version_disclosure] server_tokensに安全でない値を使用している
- [worker_rlimit_nofile_vs_connections]
worker_rlimit_nofileは少なくともworker_connectionsの2倍でなければならない
検出されないものがありますか?何が不足しているかを添えてGitHubでissueを開いてください!
使用方法(フラグ)
gixyはデフォルトでシステムのNGINX設定を/etc/nginx/nginx.confから読み取ります。gixyに場所を渡して指定することもできます:
# Analyze the configuration in /opt/nginx.conf
gixy /opt/nginx.conf
--testsでチェックの一部に絞って実行できます:
# Only run these checks
gixy --tests http_splitting,ssrf,version_disclosure
または--skipsでいくつかのノイズの多いチェックをスキップできます:
# Run everything except these checks
gixy --skips low_keepalive_requests,worker_rlimit_nofile_vs_connections
特定の重大度以上の問題のみを報告するには、累積する-lフラグを使用します:
# -l for LOW severity issues and higher, -ll for MEDIUM and higher, and -lll for only HIGH severity issues
gixy -ll
デフォルトでは、gixyの出力はANSIカラーです。互換性のあるターミナルで表示するのが最適です。--format (-f) フラグにtextの値を使用すると、色なしの出力が得られます:
$ gixy -f text
==================== Results ===================
Problem: [http_splitting] Possible HTTP-Splitting vulnerability.
Description: Using variables that can contain "\n" may lead to http injection.
Additional info: https://gixy.io/plugins/http_splitting/
Reason: At least variable "$action" can contain "\n"
Pseudo config:
include /etc/nginx/sites/default.conf;
server {
location ~ /v1/((?<action>[^.]*)\.json)?$ {
add_header X-Action $action;
}
}
==================== Summary ===================
Total issues:
Informational: 0
Low: 0
Medium: 0
High: 1
