
Gixy-Next v0.6.0
Gixy-Next: NGINX構成セキュリティスキャナー&パフォーマンスチェッカー
Gixy-Next: セキュリティ監査のためのNGINX設定セキュリティスキャナ
概要
Gixy-Next (Gixy) は、オープンソースのNGINX設定セキュリティスキャナ兼ハードニングツールです。nginx.conf を静的に解析し、本番環境に到達する前に、セキュリティ上の設定ミス、ハードニング不足、よくあるパフォーマンス上の落とし穴を検出します。Yandexの Gixy を積極的にメンテナンスしているフォークです。Gixy-Nextのソースコードは GitHubで公開されています。
Gixy-Nextは、このページ でブラウザ上でも実行できます。ダウンロードは不要です。Webサイト上で(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 -
Webベースのスキャナ
Gixy-Nextをダウンロードしてローカルで実行する代わりに、このWebページ を使用して、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に設定されている - [hash_without_default] hashブロック内のdefaultの欠落
- [host_spoofing] リクエストのHostヘッダーの偽造
- [http2_misdirected_request] HTTP/2 misdirected request保護の欠落
- [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のredirect/argsコンテキストにおけるキャプチャの重複
- [proxy_buffering_off]
proxy_bufferingの無効化 - [proxy_pass_normalized]
proxy_passのパス正規化の問題 - [quic_bpf_reuseport] リロード後にQUIC接続が静かに切断される
- [regex_redos] 正規表現によるサービス拒否 (ReDoS)
- [resolver_external] 外部DNSネームサーバーの使用
- [return_bypasses_allow_deny] returnディレクティブがallow/deny制限を迂回する
- [ssl_stapling_without_resolver] resolverがないとOCSP staplingが静かに失敗する
- [ssrf] サーバーサイドリクエストフォージェリ (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
-f json を使用すると、再現可能で機械可読なJSON出力も得られます。
$ gixy -f json
[{"config":"\nserver {\n\n\tlocation ~ /v1/((?<action>[^.]*)\\.json)?$ {\n\t\tadd_header X-Action $action;\n\t}\n}","description":"Using variables that can contain \"\\n\" or \"\\r\" may lead to http injection.","file":"/etc/nginx/nginx.conf","line":4,"path":"/etc/nginx/nginx.conf","plugin":"http_splitting","reason":"At least variable \"$action\" can contain \"\\n\"","reference":"https://gixy.io/plugins/http_splitting/","severity":"HIGH","summary":"Possible HTTP-Splitting vulnerability."}]
-f sarif を使用すると、SARIF 2.1.0 ログを取得できます。例えば、GitHubコードスキャニングへのアップロードに使用できます。
# Write a SARIF report to a file, e.g. for `github/codeql-action/upload-sarif`
gixy -f sarif -o gixy-results.sarif
その他の使用フラグは、gixy に --help を渡すことで確認できます。Usage Guide には詳細情報もあります。
設定とプラグインオプション
一部のプラグインは、CLIフラグまたは設定ファイルで設定できるオプションを公開しています。詳細は Configuration guide をご覧ください。
NGINXのセキュリティとコンプライアンスのためのGixy-Next
構文のみをチェックする nginx -t とは異なり、Gixy-Nextは実際に設定を解析し、ハードニングされていないインスタンスや脆弱性を検出します。
Gixy-Nextを使用すると、監査、コンプライアンス、一般的なテストなど、あらゆる変更のたびにローカルで実行できる自動化されたNGINX設定セキュリティレビューを実行できます。これにより、不安定または低速なNGINXサーバーを防ぎ、安全でないディレクティブや安全でないデフォルト値によるリスクを軽減するのに役立つ実用的な指摘事項を生成できます。
コントリビューション
Gixy-Nextは Joshua Rogers によってメンテナンスされていますが、コントリビューションはいつでも歓迎します!以下のようなさまざまな方法で支援できます。
- バグの報告。
- 検出のための新しいプラグインの提案。
- ドキュメントの改善。
- 新しいコードの修正、リファクタリング、改善、作成。
プルリクエストで変更を送信する前に、コントリビューションガイドライン文書 Contributing to Gixy-Next をお読みください。
Gixy-Nextの公式ホームページは https://gixy.io/ です。Gixy-Nextのドキュメントへの変更は、そのWebサイトにも自動的に反映されます。
ソースコードは https://github.com/MegaManSec/Gixy-Next にあります。
Gixyとは? (背景)
Gixy は、YandexのAndrew Krasichkovによって 元々 開発されたNGINX設定アナライザーです。2017年に最初にリリースされ、その後メンテナンスされなくなりました。現代のPythonバージョンをサポートしておらず、多数のバグが含まれ、機能性と脆弱なNGINX設定を検出する能力も限られています。元のGixyを今日の現代的なシステムで実行すると、次のエラーが発生します。
File "gixy/core/sre_parse/sre_parse.py", line 61, in <module>
"t": SRE_FLAG_TEMPLATE,
^^^^^^^^^^^^^^^^^
NameError: name 'SRE_FLAG_TEMPLATE' is not defined. Did you mean: 'SRE_FLAG_VERBOSE'?
Gixy-Nextは、したがって、現代のシステムのサポートを追加し、新しいチェック、パフォーマンスの改善、ハードニングの提案、そして現代のPythonおよびNGINXバージョンのサポートを追加するフォークです。
なぜ gixy-ng ではないのか?
Gixy-Nextは、実際には gixy-ng のフォークであり、gixy-ng 自体は元の gixy のフォークでした。Gixy-Nextは、gixy-ng のメンテナが、レビュー不可能なほど大きく、かつ壊れてもいる、AI支援による変更と自動生成コードを大量に作り始めた後に作成されました。
しばらくして、gixy-ng のメンテナは、明らかなリグレッションを導入し、ツールの重要な動作を壊し(ツールを使っている人なら誰でも気づくはずのもの)、ランダムなAIツールの成果物を追加し、単に意図したとおりに動作しないコードを導入する、AI生成の変更をコードベースにコミットし始めました。最も重要なのは、メンテナが gixy-ng のすべてのドキュメント、すべての出力、すべてのソースコードに、自分のビジネス向けのマーケティングを追加したことです。
言い換えれば、gixy-ng のメンテナは、元の gixy を取得し、AIに変更を依頼し、多数のバグ(およびその他のAIの粗製滥造)を導入し、その後コードに広告を追加しました。また、マージリクエストという形でのコントリビューションを受け入れましたが、著者の情報を削除しました(この 投稿と この 投稿を参照)。
Gixy-Nextは品質の回復に焦点を当てており、ほぼ100,000行にも及ぶNGINX設定で実戦テストされています。gixy-ng で導入された変更によって引き起こされたバグや誤検出を修正し、AIツールの成果物/ジャンクを削除し、コードベースをレビュー可能で保守可能な状態に保つよう努めています。このフォークは、クリーンなコードと長期的な保守性に関心のある人向けです。
