
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 ライブ設定ダンプ を参照):
# 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 -
Webベースのスキャナー
Gixy-Nextをローカルにダウンロードして実行する代わりに、このウェブページを使用して、Webブラウザから設定をスキャンできます(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
標準入力からスキャンします:
# 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に設定されている - [filesystem_root_exposure] ファイルシステムのルートがドキュメントルートとして使用されている
- [hash_without_default] hash ブロックに default がない
- [host_spoofing] リクエストの Host ヘッダーの偽造
- [http2_misdirected_request] HTTP/2 の誤誘導リクエスト対策の欠落
- [http_splitting] HTTP レスポンス分割
- [if_is_evil] location コンテキストで使用すると if は有害
- [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 {
