
Gixy-Next v0.7.1
Gixy-Next: ماسح أمان تهيئة NGINX ومدقق الأداء
Gixy-Next: ماسح أمني لإعدادات NGINX لعمليات التدقيق الأمني
نظرة عامة
Gixy-Next (Gixy) هو ماسح أمني مفتوح المصدر لإعدادات NGINX وأداة تقوية تقوم بتحليل ملف nginx.conf بشكل ثابت للكشف عن الأخطاء الأمنية في الإعدادات، وثغرات التقوية، والمزالق الشائعة في الأداء قبل وصولها إلى بيئة الإنتاج. وهو fork يُصان بنشاط من Gixy الخاص بـ Yandex. الكود المصدري لـ Gixy-Next متاح على GitHub.
يمكن أيضًا تشغيل Gixy-Next في المتصفح من هذه الصفحة. لا حاجة للتنزيل؛ يمكنك فحص إعداداتك على الموقع الإلكتروني (محليًا، باستخدام WebAssembly).
البدء السريع
يُوزَّع Gixy-Next (واجهة سطر الأوامر gixy أو gixy-next) على 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 من Docker Hub أو GitHub Registry.
افحص ملف إعدادات محلي عن طريق تحميله (mount) داخل الحاوية:
# 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 عبر nginx.conf وملفات الإعدادات المُضمَّنة. الإضافات التالية مدعومة:
- [add_header_content_type] Setting Content-Type via add_header
- [add_header_multiline] Multiline response headers
- [add_header_redefinition] Redefining of response headers by "add_header" directive
- [alias_traversal] Path traversal via misconfigured alias
- [allow_without_deny] Allow specified without deny
- [default_server_flag] Missing default_server flag
- [error_log_off]
error_logset tooff - [hash_without_default] Missing default in hash blocks
- [host_spoofing] Request's Host header forgery
- [http2_misdirected_request] Missing HTTP/2 misdirected-request safeguard
- [http_splitting] HTTP Response Splitting
- [if_is_evil] If is evil when used in location context
- [invalid_regex] Invalid regex capture groups
- [low_keepalive_requests] Low
keepalive_requests - [missing_worker_processes] Missing
worker_processes - [mixed_case_variable] Mixed-case variable references
- [origins] Problems with referer/origin header validation
- [overlapping_captures] Overlapping captures in rewrite redirect/args context
- [proxy_buffering_off] Disabling
proxy_buffering - [proxy_pass_normalized]
proxy_passpath normalization issues - [proxy_set_header_redefinition] Redefining of proxied request headers by "proxy_set_header" directive
- [quic_bpf_reuseport] QUIC connections silently dropped after reload
- [regex_redos] Regular expression denial of service (ReDoS)
- [resolver_external] Using external DNS nameservers
- [return_bypasses_allow_deny] Return directive bypasses allow/deny restrictions
- [ssl_ecdh_curve] Post-quantum groups stop NGINX from starting on older OpenSSL
- [ssl_stapling_letsencrypt] OCSP stapling does nothing for a Let's Encrypt certificate
- [ssl_stapling_without_resolver] OCSP stapling silently fails without a resolver
- [ssrf] Server Side Request Forgery
- [stale_dns_cache] Outdated/stale cached DNS records used in proxy_pass
- [status_page_exposed] Ensures that status_page is not exposed to the world
- [try_files_is_evil_too]
try_filesdirective is evil without open_file_cache - [unanchored_regex] Unanchored regular expressions
- [unnamed_groups] Unnamed capture groups in rewrite query string
- [valid_referers] none/blocked in valid_referers
- [version_disclosure] Using insecure values for server_tokens
- [worker_rlimit_nofile_vs_connections]
worker_rlimit_nofilemust be at least twiceworker_connections
هل هناك شيء لم يتم اكتشافه؟ يُرجى فتح issue على GitHub مع توضيح ما هو المفقود!
الاستخدام (الخيارات)
يقرأ 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
يمكن العثور على مزيد من الخيارات للاستخدام بتمرير --help إلى gixy. يمكنك أيضًا العثور على مزيد من المعلومات في دليل الاستخدام.
الإعدادات وخيارات الإضافات
تكشف بعض الإضافات عن خيارات يمكنك ضبطها عبر خيارات سطر الأوامر أو ملف إعدادات. يمكنك قراءة المزيد عنها في دليل الإعدادات.
Gixy-Next لأمن وامتثال NGINX
على عكس تشغيل nginx -t الذي يتحقق فقط من الصياغة، يقوم Gixy-Next فعليًا بتحليل إعداداتك واكتشاف الحالات غير المُقوّاة والثغرات.
مع Gixy-Next، يمكنك إجراء مراجعة أمنية آلية لإعدادات NGINX يمكن تشغيلها محليًا عند كل تغيير، سواء لأغراض التدقيق أو الامتثال أو الاختبار العام، مما يساعد في إنتاج نتائج قابلة للتنفيذ تساعد في منع خوادم NGINX غير المستقرة/البطيئة، وتقليل المخاطر الناتجة عن التوجيهات غير الآمنة والإعدادات الافتراضية غير الآمنة.
المساهمة
يُصان Gixy-Next بواسطة Joshua Rogers، لكن المساهمات مرحّب بها دائمًا! يمكنك مساعدتنا بطرق مختلفة، مثل:
- الإبلاغ عن الأخطاء.
- اقتراح إضافات جديدة للكشف.
- تحسين التوثيق.
- إصلاح الكود وإعادة هيكلته وتحسينه وكتابة كود جديد.
قبل تقديم أي تغييرات في طلبات السحب (pull requests)، يُرجى قراءة وثيقة إرشادات المساهمة، المساهمة في Gixy-Next.
الصفحة الرئيسية الرسمية لـ Gixy-Next هي https://gixy.io/. أي تغييرات في التوثيق في Gixy-Next ستنعكس تلقائيًا على ذلك الموقع.
يمكن العثور على الكود المصدري في https://github.com/MegaManSec/Gixy-Next.
ما هو Gixy؟ (الخلفية)
Gixy هو محلل إعدادات NGINX تم تطويره في الأصل بواسطة Andrew Krasichkov من Yandex. صدر لأول مرة في عام 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 هو fork يضيف دعمًا للأنظمة الحديثة، ويضيف فحوصات جديدة، وتحسينات في الأداء، واقتراحات للتقوية، ودعمًا لإصدارات Python و NGINX الحديثة.
لماذا ليس gixy-ng؟
Gixy-Next هو في الواقع fork من gixy-ng، الذي كان بدوره fork من gixy الأصلي. تم إنشاء Gixy-Next بعد أن بدأ مُصان gixy-ng في إنتاج كميات كبيرة من التغييرات المدعومة بالذكاء الاصطناعي والكود المُولَّد تلقائيًا الذي كان كبيرًا بشكل غير قابل للمراجعة بالإضافة إلى كونه معطوبًا.
بعد مرور بعض الوقت، بدأ مُصان gixy-ng في إجراء تغييرات مُولَّدة بالذكاء الاصطناعي على قاعدة الكود أدخلت تراجعات واضحة، وأفسدت السلوك الحرج للأداة (والتي كان أي شخص يستخدم الأداة سيلاحظها)، وأضافت مخلفات أدوات ذكاء اصطناعي عشوائية، وأدخلت كودًا ببساطة لا يفعل ما يُفترض به. والأهم من ذلك، أن المُصان أيضًا أضاف تسويقًا لعمله إلى جميع التوثيق، وجميع المخرجات، وجميع الكود المصدري لـ gixy-ng.
بعبارة أخرى، أخذ مُصان gixy-ng الـ gixy الأصلي، وطلب من الذكاء الاصطناعي إجراء تغييرات، وأدخل مجموعة من الأخطاء (ومخلفات ذكاء اصطناعي أخرى)، ثم أضاف إعلانات إلى الكود. كما قبل المساهمات في شكل طلبات دمج (merge requests)، لكنه أزال معلومات المؤلف (انظر هذا المنشور وهذا المنشور).
يركّز Gixy-Next على استعادة الجودة، وقد تم اختباره ميدانيًا على إعدادات NGINX يبلغ طولها ما يقرب من 100,000 سطر. يصلح الأخطاء والأخطاء في الكشف التي أدخلتها التغييرات في gixy-ng، ويزيل مخلفات/نفايات أدوات الذكاء الاصطناعي، ويحاول الحفاظ على قاعدة الكود قابلة للمراجعة والصيانة. هذا الـ fork مخصص لمن يهتمون بالكود النظيف وقابلية الصيانة على المدى الطويل.
