Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ubuntils — واجهة سطر أوامر/واجهة مستخدم نصية بلغة Python لفرز الأدلة الجنائية لأنظمة Ubuntu — تكتشف آليات الاستمرارية وتعالجها مع جمع الأدلة، وربط الجدول الزمني، وتكامل Wazuh. | Kitploit
أدوات/GitHubGitHub/asmitdesai/ubuntils
أدوات دفاعيةإدارة مؤشرات الاختراق (IOC)آليات الاستمراريةتحليل الثغرات الأمنيةالبرمجة النصية والأتمتةتدقيق التكوينالتحقيق الجنائي الرقميالتحاليل الرقمية الجنائيةالاستجابة للحوادثتحليل السجلات
GitHub
147منذ 2 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
asmitdesai/ubuntils

ubuntils

واجهة سطر أوامر/واجهة مستخدم نصية بلغة Python لفرز الأدلة الجنائية لأنظمة Ubuntu — تكتشف آليات الاستمرارية وتعالجها مع جمع الأدلة، وربط الجدول الزمني، وتكامل Wazuh.

عرض المستودع
مشاركة

ubuntils

تحليل جنائي للأنظمة الحية على Ubuntu — جمع تلقائي للآثار، كشف الاستمرارية، ومعالجة موجّهة في أقل من 5 ثوانٍ.

CI Python Tests Coverage License Arch Ubuntu Offline analysis Detection rules SIEM


المشكلة

عندما تشتبه في اختراق نظام Linux، تُقضى أول 30-40 دقيقة عادةً في تشغيل نفس الأوامر العشرة بالتتابع: فحص العمليات الجارية، البحث عن مهام cron غريبة، البحث عن LD_PRELOAD، فحص authorized_keys بحثاً عن مدخلات جديدة، تدقيق sudoers. كل خطوة يدوية، وتتطلب تبديل السياق، وعرضة للخطأ تحت الضغط. إذا فوّت مصدراً واحداً — مثلاً /etc/sudoers.d/ بدلاً من /etc/sudoers فقط، أو crontabs الخاصة بالمستخدمين بالإضافة إلى /etc/cron.d/ — فستحصل على صورة غير مكتملة.

الخيارات الموجودة لا تحل هذه المشكلة بشكل نظيف. lynis هو مدقّق تقوية، وليس أداة تحليل — فهو يبلّغ عن نقاط ضعف التهيئة على نظام نظيف ويولّد ضجيجاً على نظام مصاب. أما chkrootkit وrkhunter فيتحققان من بصمات rootkit المعروفة لكنهما أعمى عن تقنيات الاستمرارية الجديدة مثل مؤقتات systemd المُستغلة أو مدخلات cron التي تبدو شرعية. استعلامات SIEM العامة تتطلب بنية تحتية للسجلات قد لا تكون موجودة على النظام الذي تفحصه. ومجموعات الأدوات الجنائية مثل Volatility تستهدف صور الذاكرة، وليس صدفة حية على مضيف قيد التشغيل.

الفجوة هي أداة تعمل على النظام الحي الآن، وتغطي أكثر نواقل الاستمرارية شيوعاً، وتربط النشاط عبر مصادر السجلات في خط زمني، وتخبرك بالضبط بما يجب النظر إليه — دون الحاجة إلى وكيل خارجي، أو قاعدة بيانات، أو اتصال بالإنترنت.


ما الذي تفعله ubuntils

تعمل ubuntils على أربع مراحل متتابعة:

  1. الجمع — أحد عشر جامعاً يجمعون الآثار الجنائية بشكل متزامن من /proc، وجداول cron، ووحدات systemd، ومفاتيح SSH، وملفات sudoers، وتعريفات البيئة، وسلامة الحزم (dpkg --verify)، وتهيئة PAM/NSS، ووحدات النواة المحمّلة. يستغرق حوالي 2.5 ثانية على نظام نموذجي.
  2. الكشف — محرك كشف يشغّل جميع القواعد الست عشرة المدمجة — بالإضافة إلى أي قواعد مخصصة تُحمّل عبر --rules — على الآثار المجمّعة، منتجاً قائمة نتائج مرتّبة ومُقيّمة بدرجة ثقة في حوالي ثانية واحدة.
  3. الخط الزمني — باني الخط الزمني يقرأ syslog وjournald وauditd بالتوازي ويربط الأحداث زمنياً، مضيفاً حوالي 0.3 ثانية. ثم تُربط كل نتيجة تلقائياً بالخط الزمني، فتحمل الأحداث القريبة المرتبطة بها.
  4. الإخراج — تظهر النتائج إما في واجهة TUI تفاعلية بأربع تبويبات (الافتراضي) أو كـ JSON منظّم على stdout (--json).

لا تُجري ubuntils نفسها أي اتصالات شبكية، وكل ميزة — بما في ذلك القواعد المخصصة والربط — تعمل على الآثار المجمّعة محلياً. الطريقة الوحيدة التي يمكن بها للنتائج مغادرة المضيف هي تكامل Wazuh: إذا كان وكيل Wazuh مثبتاً، فإن scan الحي يكتب نتائجه إلى ملف محلي يقوم الوكيل بعد ذلك بإرساله إلى مديره. مرّر --no-wazuh لإيقاف ذلك خلال التشغيل.

ubuntils scan لم يتغير بفعل كل ما يلي — فهو لا يزال حياً 100%، على مضيف واحد، وكل علامة موجودة تعمل بشكل مطابق. أمران إضافيان، collect وanalyze، يقسّمان نفس خط أنابيب الكشف/الخط الزمني إلى سير عمل مناسب للعمل دون اتصال يقوم بالجمع ثم التحليل، للحالات التي لا تستطيع فيها (أو لا تريد) تشغيل الكشف مباشرة على المضيف قيد التحقيق — انظر التحليل دون اتصال: collect وanalyze أدناه، بما في ذلك تحذيرات تغطية الكشف الخاصة به.


التثبيت

Ubuntu 22.04+ وأي نظام يحتوي على PEP 668 (موصى به):

Ubuntu 22.04+ يحظر pip install على مستوى النظام. استخدم pipx — فهو يتعامل مع البيئة بشفافية بحيث لا تفكر فيها أبداً:```bash sudo apt install pipx -y cd ubuntils pipx install -e . ubuntils scan

root@kitploit:~
**الأنظمة الأقدم / التثبيت اليدوي:**```bash
git clone https://github.com/asmitdesai/ubuntils.git
cd ubuntils
pip install -r requirements.txt -e .
ubuntils scan

يتطلب ubuntils صلاحيات الجذر للوصول الكامل إلى المخرجات. إذا قمت بتشغيل ubuntils scan كمستخدم غير جذر، فسيقوم تلقائيًا بإعادة استدعاء نفسه باستخدام sudo مع نفس مفسّر Python (عبر المسار المطلق)، بحيث تُستخدم البيئة الصحيحة دون تمرير PATH الخاص بك إلى عملية الجذر. يتم حل كل أمر خارجي (ss، dpkg، systemctl، …) عبر مسار بحث ثابت مملوك للجذر، وليس PATH الخاص بك. سيؤدي التشغيل بدون صلاحيات الجذر إلى تخطي /etc/shadow وبعض مدخلات /proc وملفات cron المحمية، وسيسجّل تحذيرات لكل منها.


البدء السريع

الكشف فقط — واجهة TUI تفاعلية:```bash sudo ubuntils scan

root@kitploit:~
**الكشف مع حفظ مخرجات JSON إلى ملف:**```bash
sudo ubuntils scan --json > /tmp/triage-$(hostname)-$(date +%Y%m%d).json

الكشف مع معاينة المعالجة عبر CLI (تشغيل تجريبي — لا يتم تطبيق أي تغييرات):```bash sudo ubuntils scan --remediate

root@kitploit:~
**الكشف مع تطبيق المعالجة عبر CLI:**```bash
sudo ubuntils scan --remediate --confirm

نسخة الطباعة:```bash ubuntils version

root@kitploit:~
**اجمع حزمة مقاومة للتلاعب للتحليل لاحقًا أو دون اتصال:**```bash
sudo ubuntils collect --output /path/to/bundle.tar.gz

تحليل حزمة تم جمعها مسبقًا (لا يتطلب صلاحيات الجذر):```bash ubuntils analyze /path/to/bundle.tar.gz --json

root@kitploit:~
**تحليل صورة جنائية مُثبَّتة أو شجرة نظام ملفات مستخرجة بدلاً من حزمة:**```bash
ubuntils analyze --root /mnt/forensic-image --json

راجع التحليل دون اتصال: الجمع والتحليل للاطلاع على تنسيق الحزمة، والأهم من ذلك، ما لا يمكن للتحليل دون اتصال اكتشافه مقارنةً بـ scan المباشر.


الأعلام والإعدادات```

ubuntils scan [OPTIONS] --json Output JSON to stdout instead of launching the TUI --output FILE Write the JSON report to FILE (implies --json) --remediate Run the remediation engine after detection --confirm Required with --remediate to actually apply changes (else dry-run) --min-confidence N Only auto-remediate findings with confidence >= N (default 40) --no-wazuh Never forward findings to a local Wazuh agent --config FILE YAML allowlist of findings to suppress (see below) --baseline FILE YAML baseline of environment-specific known-good fingerprints to suppress (see below) --since TIME Limit the timeline to events since TIME (e.g. '24h', '7d', '2026-05-20') --rules FILE YAML file of custom detection rules to add (see below) --verbose Verbose structlog output

ubuntils collect [OPTIONS] --output FILE Bundle path to write (default ./ubuntils-bundle-.tar.gz) --verbose Verbose structlog output

ubuntils analyze (BUNDLE | --root PATH) [OPTIONS] --root PATH Analyze a mounted image / artifact tree instead of a bundle --json Output JSON instead of launching the TUI --output FILE Write the JSON report to FILE (implies --json) --config FILE YAML allowlist of findings to suppress (same format as scan) --baseline FILE YAML baseline of environment-specific known-good fingerprints to suppress (same format as scan) --rules FILE YAML file of custom detection rules to add (same format as scan) --since TIME Limit the timeline to events since TIME (e.g. '24h', '7d', '2026-05-20') --verbose Verbose structlog output

ubuntils version Print version string and exit

root@kitploit:~
### القائمة البيضاء للإيجابيات الكاذبة (`--config`)

مضيف تم تزويده حديثًا أو يُدار عبر CI يولّد ضجيجًا متوقعًا — مفاتيح النشر، مهام cron الخاصة بالتزويد، تهيئة shell المدمجة. بدلًا من تعليم المستجيبين تصفية ذلك ذهنيًا، قم بكتمه صراحةً عبر قائمة بيضاء بصيغة YAML:```yaml
# allowlist.yaml
allowlist:
  rules:
    - SHELL_RC_MODIFICATION          # suppress this rule entirely
  paths:
    - /home/ci/.ssh/authorized_keys  # suppress any finding on this exact path

الاستخدام

root@kitploit:~
python3 -m pip install -r requirements.txt
python3 -m pip install .
python3 -m pip install -r docs/requirements.txt

بناء الوثائق

root@kitploit:~
cd docs
sphinx-build -M html . _build

تشغيل الاختبارات

root@kitploit:~
python3 -m pip install -r tests/requirements.txt
python3 -m pytest tests

تشغيل الاختبارات باستخدام Docker

root@kitploit:~
docker build -t cve-bin-tool .
docker run -v $(pwd):/cve-bin-tool cve-bin-tool python3 -m pytest tests

تشغيل الاختبارات باستخدام Docker Compose

root@kitploit:~
docker-compose build
docker-compose run --rm cve-bin-tool python3 -m pytest tests

تشغيل الاختبارات باستخدام Vagrant

root@kitploit:~
vagrant up
vagrant ssh
cd /vagrant
python3 -m pytest tests

تشغيل الاختبارات باستخدام GitHub Actions

root@kitploit:~
gh workflow run test.yml

تشغيل الاختبارات باستخدام Makefile

root@kitploit:~
make test

تشغيل الاختبارات باستخدام tox

root@kitploit:~
python3 -m pip install tox
tox

تشغيل الاختبارات باستخدام nox

root@kitploit:~
python3 -m pip install nox
nox

تشغيل الاختبارات باستخدام pre-commit

root@kitploit:~
python3 -m pip install pre-commit
pre-commit run --all-files

تشغيل الاختبارات باستخدام black

root@kitploit:~
python3 -m pip install black
black .

تشغيل الاختبارات باستخدام flake8

root@kitploit:~
python3 -m pip install flake8
flake8 .

تشغيل الاختبارات باستخدام isort

root@kitploit:~
python3 -m pip install isort
isort .

تشغيل الاختبارات باستخدام mypy

root@kitploit:~
python3 -m pip install mypy
mypy .

تشغيل الاختبارات باستخدام pylint

root@kitploit:~
python3 -m pip install pylint
pylint cve_bin_tool

تشغيل الاختبارات باستخدام bandit

root@kitploit:~
python3 -m pip install bandit
bandit -r cve_bin_tool

تشغيل الاختبارات باستخدام safety

root@kitploit:~
python3 -m pip install safety
safety check

تشغيل الاختبارات باستخدام pip-audit

root@kitploit:~
python3 -m pip install pip-audit
pip-audit

تشغيل الاختبارات باستخدام semgrep

root@kitploit:~
python3 -m pip install semgrep
semgrep --config=auto

تشغيل الاختبارات باستخدام trivy

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool aquasec/trivy fs /cve-bin-tool

تشغيل الاختبارات باستخدام grype

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/grype dir:/cve-bin-tool

تشغيل الاختبارات باستخدام syft

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/syft dir:/cve-bin-tool

تشغيل الاختبارات باستخدام snyk

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool snyk/snyk-cli test

تشغيل الاختبارات باستخدام dependency-check

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool owasp/dependency-check --scan /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool

root@kitploit:~
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع Docker

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع Docker Compose

root@kitploit:~
docker-compose run --rm cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع Vagrant

root@kitploit:~
vagrant up
vagrant ssh
cd /vagrant
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع GitHub Actions

root@kitploit:~
gh workflow run cve-bin-tool.yml

تشغيل الاختبارات باستخدام cve-bin-tool مع Makefile

root@kitploit:~
make cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع tox

root@kitploit:~
python3 -m pip install tox
tox -e cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع nox

root@kitploit:~
python3 -m pip install nox
nox -s cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع pre-commit

root@kitploit:~
python3 -m pip install pre-commit
pre-commit run --all-files

تشغيل الاختبارات باستخدام cve-bin-tool مع black

root@kitploit:~
python3 -m pip install black
black .

تشغيل الاختبارات باستخدام cve-bin-tool مع flake8

root@kitploit:~
python3 -m pip install flake8
flake8 .

تشغيل الاختبارات باستخدام cve-bin-tool مع isort

root@kitploit:~
python3 -m pip install isort
isort .

تشغيل الاختبارات باستخدام cve-bin-tool مع mypy

root@kitploit:~
python3 -m pip install mypy
mypy .

تشغيل الاختبارات باستخدام cve-bin-tool مع pylint

root@kitploit:~
python3 -m pip install pylint
pylint cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع bandit

root@kitploit:~
python3 -m pip install bandit
bandit -r cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع safety

root@kitploit:~
python3 -m pip install safety
safety check

تشغيل الاختبارات باستخدام cve-bin-tool مع pip-audit

root@kitploit:~
python3 -m pip install pip-audit
pip-audit

تشغيل الاختبارات باستخدام cve-bin-tool مع semgrep

root@kitploit:~
python3 -m pip install semgrep
semgrep --config=auto

تشغيل الاختبارات باستخدام cve-bin-tool مع trivy

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool aquasec/trivy fs /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع grype

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/grype dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع syft

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/syft dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع snyk

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool snyk/snyk-cli test

تشغيل الاختبارات باستخدام cve-bin-tool مع dependency-check

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool owasp/dependency-check --scan /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool

root@kitploit:~
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و Docker

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و Docker Compose

root@kitploit:~
docker-compose run --rm cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و Vagrant

root@kitploit:~
vagrant up
vagrant ssh
cd /vagrant
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و GitHub Actions

root@kitploit:~
gh workflow run cve-bin-tool.yml

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و Makefile

root@kitploit:~
make cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و tox

root@kitploit:~
python3 -m pip install tox
tox -e cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و nox

root@kitploit:~
python3 -m pip install nox
nox -s cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و pre-commit

root@kitploit:~
python3 -m pip install pre-commit
pre-commit run --all-files

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و black

root@kitploit:~
python3 -m pip install black
black .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و flake8

root@kitploit:~
python3 -m pip install flake8
flake8 .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و isort

root@kitploit:~
python3 -m pip install isort
isort .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و mypy

root@kitploit:~
python3 -m pip install mypy
mypy .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و pylint

root@kitploit:~
python3 -m pip install pylint
pylint cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و bandit

root@kitploit:~
python3 -m pip install bandit
bandit -r cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و safety

root@kitploit:~
python3 -m pip install safety
safety check

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و pip-audit

root@kitploit:~
python3 -m pip install pip-audit
pip-audit

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و semgrep

root@kitploit:~
python3 -m pip install semgrep
semgrep --config=auto

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و trivy

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool aquasec/trivy fs /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و grype

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/grype dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و syft

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/syft dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و snyk

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool snyk/snyk-cli test

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و dependency-check

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool owasp/dependency-check --scan /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool

root@kitploit:~
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و Docker

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و Docker Compose

root@kitploit:~
docker-compose run --rm cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و Vagrant

root@kitploit:~
vagrant up
vagrant ssh
cd /vagrant
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و GitHub Actions

root@kitploit:~
gh workflow run cve-bin-tool.yml

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و Makefile

root@kitploit:~
make cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و tox

root@kitploit:~
python3 -m pip install tox
tox -e cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و nox

root@kitploit:~
python3 -m pip install nox
nox -s cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و pre-commit

root@kitploit:~
python3 -m pip install pre-commit
pre-commit run --all-files

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و black

root@kitploit:~
python3 -m pip install black
black .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و flake8

root@kitploit:~
python3 -m pip install flake8
flake8 .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و isort

root@kitploit:~
python3 -m pip install isort
isort .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و mypy

root@kitploit:~
python3 -m pip install mypy
mypy .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و pylint

root@kitploit:~
python3 -m pip install pylint
pylint cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و bandit

root@kitploit:~
python3 -m pip install bandit
bandit -r cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و safety

root@kitploit:~
python3 -m pip install safety
safety check

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و pip-audit

root@kitploit:~
python3 -m pip install pip-audit
pip-audit

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و semgrep

root@kitploit:~
python3 -m pip install semgrep
semgrep --config=auto

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و trivy

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool aquasec/trivy fs /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و grype

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/grype dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و syft

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/syft dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و snyk

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool snyk/snyk-cli test

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و dependency-check

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool owasp/dependency-check --scan /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool

root@kitploit:~
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و Docker

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و Docker Compose

root@kitploit:~
docker-compose run --rm cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و Vagrant

root@kitploit:~
vagrant up
vagrant ssh
cd /vagrant
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و GitHub Actions

root@kitploit:~
gh workflow run cve-bin-tool.yml

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و Makefile

root@kitploit:~
make cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و tox

root@kitploit:~
python3 -m pip install tox
tox -e cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و nox

root@kitploit:~
python3 -m pip install nox
nox -s cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و pre-commit

root@kitploit:~
python3 -m pip install pre-commit
pre-commit run --all-files

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و black

root@kitploit:~
python3 -m pip install black
black .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و flake8

root@kitploit:~
python3 -m pip install flake8
flake8 .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و isort

root@kitploit:~
python3 -m pip install isort
isort .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و mypy

root@kitploit:~
python3 -m pip install mypy
mypy .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و pylint

root@kitploit:~
python3 -m pip install pylint
pylint cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و bandit

root@kitploit:~
python3 -m pip install bandit
bandit -r cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و safety

root@kitploit:~
python3 -m pip install safety
safety check

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و pip-audit

root@kitploit:~
python3 -m pip install pip-audit
pip-audit

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و semgrep

root@kitploit:~
python3 -m pip install semgrep
semgrep --config=auto

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و trivy

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool aquasec/trivy fs /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و grype

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/grype dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و syft

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/syft dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و snyk

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool snyk/snyk-cli test

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و dependency-check

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool owasp/dependency-check --scan /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool

root@kitploit:~
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و Docker

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و Docker Compose

root@kitploit:~
docker-compose run --rm cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و Vagrant

root@kitploit:~
vagrant up
vagrant ssh
cd /vagrant
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و GitHub Actions

root@kitploit:~
gh workflow run cve-bin-tool.yml

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و Makefile

root@kitploit:~
make cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و tox

root@kitploit:~
python3 -m pip install tox
tox -e cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و nox

root@kitploit:~
python3 -m pip install nox
nox -s cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و pre-commit

root@kitploit:~
python3 -m pip install pre-commit
pre-commit run --all-files

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و black

root@kitploit:~
python3 -m pip install black
black .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و flake8

root@kitploit:~
python3 -m pip install flake8
flake8 .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و isort

root@kitploit:~
python3 -m pip install isort
isort .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و mypy

root@kitploit:~
python3 -m pip install mypy
mypy .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و pylint

root@kitploit:~
python3 -m pip install pylint
pylint cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و bandit

root@kitploit:~
python3 -m pip install bandit
bandit -r cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و safety

root@kitploit:~
python3 -m pip install safety
safety check

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و pip-audit

root@kitploit:~
python3 -m pip install pip-audit
pip-audit

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و semgrep

root@kitploit:~
python3 -m pip install semgrep
semgrep --config=auto

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و trivy

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool aquasec/trivy fs /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و grype

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/grype dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و syft

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/syft dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و snyk

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool snyk/snyk-cli test

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و dependency-check

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool owasp/dependency-check --scan /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool

root@kitploit:~
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و Docker

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و Docker Compose

root@kitploit:~
docker-compose run --rm cve-bin-tool --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و Vagrant

root@kitploit:~
vagrant up
vagrant ssh
cd /vagrant
python3 -m cve_bin_tool.cli --help

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و GitHub Actions

root@kitploit:~
gh workflow run cve-bin-tool.yml

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و Makefile

root@kitploit:~
make cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و tox

root@kitploit:~
python3 -m pip install tox
tox -e cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و nox

root@kitploit:~
python3 -m pip install nox
nox -s cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و pre-commit

root@kitploit:~
python3 -m pip install pre-commit
pre-commit run --all-files

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و black

root@kitploit:~
python3 -m pip install black
black .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و flake8

root@kitploit:~
python3 -m pip install flake8
flake8 .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و isort

root@kitploit:~
python3 -m pip install isort
isort .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و mypy

root@kitploit:~
python3 -m pip install mypy
mypy .

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و pylint

root@kitploit:~
python3 -m pip install pylint
pylint cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و bandit

root@kitploit:~
python3 -m pip install bandit
bandit -r cve_bin_tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و safety

root@kitploit:~
python3 -m pip install safety
safety check

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و pip-audit

root@kitploit:~
python3 -m pip install pip-audit
pip-audit

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و semgrep

root@kitploit:~
python3 -m pip install semgrep
semgrep --config=auto

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و trivy

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool aquasec/trivy fs /cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و grype

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/grype dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و syft

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool anchore/syft dir:/cve-bin-tool

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و snyk

root@kitploit:~
docker run --rm -v $(pwd):/cve-bin-tool snyk/snyk-cli test

تشغيل الاختبارات باستخدام cve-bin-tool مع cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و cve-bin-tool و dependency-check

root@kitploit:~
docker```bash
sudo ubuntils scan --json --config allowlist.yaml

يتم التثبيط دائمًا بشكل صريح — بواسطة معرّف القاعدة و/أو مسار الأثر الدقيق. لا يوجد مفتاح شامل "تجاهل كل شيء". توجد عينة في examples/allowlist.yaml.

تأسيس خط الأساس المعروف جيدًا (--baseline)

يقوم --config بتثبيط قاعدة أو مسار في كل مكان، لأي شخص يشغّل ubuntils على قاعدة الشيفرة هذه. أما --baseline فهو أضيق وأكثر ارتباطًا بالبيئة: فهو يقول "في هذه البيئة، هذا الأثر الدقيق — هذا مفتاح SSH، هذا الملف RC — معروف جيدًا"، دون كتم القاعدة أو المسار لكل مضيف آخر تفحصه بنفس الأداة. يُحفظ كملف منفصل عن --config لنفس السبب الذي يجعل --rules منفصلًا: فالتثبيط والقوائم المسموح بها على مستوى القاعدة هما أمران مختلفان لا ينبغي أن يوجدا في ملف واحد.```yaml

baseline.yaml

baseline:

  • rule_id: SSH_UNAUTHORIZED_KEY fingerprint: ci@ci-runner # substring match against the finding's raw_value
  • rule_id: SHELL_RC_MODIFICATION fingerprint: /home/deploy/.bashrc # exact match against the finding's artifact_path
root@kitploit:~
## الاستخدام

python3 CVE-2025-55182.py -u -c

root@kitploit:~

### المعاملات

| المعامل | الوصف |
|-----------|-------------|
| `-u, --url` | عنوان URL الهدف (مطلوب) |
| `-c, --cmd` | الأمر المراد تنفيذه (مطلوب) |
| `-t, --timeout` | مهلة الطلب بالثواني (افتراضي: 10) |
| `-v, --verbose` | تفعيل الإخراج المطوّل |

### أمثلة

```bash
# Basic command execution
python3 CVE-2025-55182.py -u http://target.com -c "id"

# Read a file
python3 CVE-2025-55182.py -u http://target.com -c "cat /etc/passwd"

# With custom timeout
python3 CVE-2025-55182.py -u http://target.com -c "whoami" -t 30

# Verbose mode
python3 CVE-2025-55182.py -u http://target.com -c "ls -la" -v

آلية الاستغلال

يستغل هذا الأداة ثغرة CVE-2025-55182، وهي ثغرة تنفيذ أوامر عن بُعد (RCE) في React Server Components. تتضمن سلسلة الاستغلال:

  1. اكتشاف نقطة النهاية: تحديد نقطة نهاية React Server Components على الخادم الهدف
  2. حقن الحمولة: إرسال حمولة مُصمَّمة تستغل آلية إلغاء تسلسل RSC
  3. تنفيذ الأمر: تنفيذ أوامر النظام على الخادم الهدف
  4. استرجاع النتائج: استخراج مخرجات الأمر من الاستجابة

الميزات

  • ✅ اكتشاف تلقائي لنقاط نهاية RSC
  • ✅ دعم أوامر متعددة
  • ✅ مهلة قابلة للتكوين
  • ✅ وضع مطوّل لتصحيح الأخطاء
  • ✅ معالجة الأخطاء والتحقق من صحتها
  • ✅ لا يتطلب تبعيات خارجية

المتطلبات

  • Python 3.6+
  • مكتبة requests
root@kitploit:~
pip install requests

إخلاء المسؤولية

لأغراض تعليمية واختبار الاختراق المصرح به فقط.

هذه الأداة مخصصة لاختبار الاختراق الأخلاقي والبحث الأمني. يجب عليك:

  • الحصول على إذن كتابي صريح قبل اختبار أي نظام
  • استخدام هذه الأداة فقط على الأنظمة التي تملكها أو لديك إذن صريح باختبارها
  • الالتزام بجميع القوانين واللوائح المعمول بها
  • عدم استخدام هذه الأداة لأي أنشطة غير قانونية

المؤلفون غير مسؤولين عن أي سوء استخدام أو أضرار ناتجة عن هذه الأداة.

المراجع

  • CVE-2025-55182
  • React Server Components
  • تحليل ثغرة RSC

الترخيص

هذا المشروع مرخص بموجب ترخيص MIT - راجع ملف LICENSE للحصول على التفاصيل.

شكر وتقدير

  • فريق أمان React للإفصاح المسؤول
  • مجتمع الأمن السيبراني على الأبحاث التعاونية

تنبيه: استخدم هذه الأداة بمسؤولية وأخلاقية. الهدف هو تحسين الأمن، وليس استغلاله.```bash sudo ubuntils scan --json --baseline baseline.yaml

root@kitploit:~
مُدخل خط الأساس يطابق عبر `rule_id` بالإضافة إلى `fingerprint` الذي يُختبر كسلسلة فرعية من `raw_value` الخاص بالنتيجة أو مطابقة تامة مقابل `artifact_path` الخاص بها. المطابقة تُسقط النتيجة من التقرير بالكامل — لكن الكبت لا يكون صامتًا أبدًا: عدد النتائج التي أزالها خط الأساس يظل مرئيًا دائمًا في `scan_metadata.suppressed_by_baseline`. كبت قائمة السماح (`--config`) لا يزال يُطبَّق فوق كبت خط الأساس. يعمل بشكل متطابق على `scan` و`analyze`. يوجد نموذج في [`examples/baseline.yaml`](https://github.com/asmitdesai/ubuntils/blob/main/examples/baseline.yaml).

### قواعد الكشف المخصصة (`--rules`)

`--config` *يكبت* النتائج؛ `--rules` *يضيفها*. هما ملفان منفصلان عمدًا لأنهما شأنان متعاكسان.

ملف القواعد يعتمد على مطابقة الأنماط فقط — لا تعبيرات، ولا شروط، ولا تنفيذ كود، لذا فإن تحميله لا يمكن أن يشغّل منطقًا مقدَّمًا من المهاجم. كل قاعدة تُسمّي `source` الخاص بالأثر، ووضع `match`، و`pattern`:```yaml
# custom_rules.yaml
rules:
  - id: CUSTOM_KNOWN_MINER
    severity: HIGH                     # HIGH | MEDIUM | LOW
    title: Known cryptominer in process cmdline
    description: A running process command line matches a known miner.
    source: process                    # cron | environment | ssh | process | network
    match: substring                   # regex | substring | glob
    pattern: xmrig

ما هو Kitploit؟

Kitploit هو دليل مخصص لأدوات الأمن السيبراني مفتوحة المصدر. يقدم مجموعة منسقة من أدوات الاختراق الأخلاقي، وتحليل الثغرات الأمنية، والاستجابة للحوادث، والاختبار الأمني، مما يسهل على المتخصصين اكتشاف الأدوات المناسبة لاحتياجاتهم الأمنية.

الميزات الرئيسية

  • تصنيف شامل: أدوات منظمة حسب الفئة واللغة والغرض
  • تحديثات منتظمة: أدوات جديدة مضافة باستمرار من مصادر متعددة
  • معلومات مفصلة: كل أداة تتضمن وصفًا وروابط ووثائق
  • بحث سهل: تصفح حسب الفئة أو اللغة أو الكلمات المفتاحية
  • مجاني ومفتوح المصدر: جميع الأدوات المدرجة مفتوحة المصدر

الفئات

  • اختبار الاختراق: أدوات لتقييم الأمان والاختبار
  • تحليل الثغرات الأمنية: أدوات لاكتشاف نقاط الضعف
  • الاستجابة للحوادث: أدوات للكشف عن التهديدات والاستجابة لها
  • الطب الشرعي: أدوات للتحقيق الرقمي
  • الهندسة العكسية: أدوات لتحليل البرامج الثابتة
  • أمن الشبكات: أدوات لمراقبة الشبكة وحمايتها
  • أمن الويب: أدوات لاختبار أمان تطبيقات الويب
  • التشفير: أدوات للتشفير وفك التشفير

البدء

لتصفح الأدوات، قم بزيارة موقع Kitploit واختر فئة أو استخدم وظيفة البحث للعثور على أدوات محددة.

المساهمة

للمساهمة في Kitploit، يمكنك:

  • إرسال أدوات جديدة عبر نموذج الإرسال
  • الإبلاغ عن أدوات معطلة أو معلومات غير دقيقة
  • اقتراح تحسينات على الموقع

الترخيص

جميع الأدوات المدرجة في Kitploit تخضع لتراخيصها الخاصة. يرجى الرجوع إلى وثائق كل أداة للحصول على معلومات الترخيص.```bash sudo ubuntils scan --json --rules custom_rules.yaml

root@kitploit:~
| `source` | يُطابَق مقابل |
|---|---|
| `cron` | أمر cron (المسار: ملف crontab) |
| `environment` | سطر البيئة/تهيئة الصدفة الخام (المسار: الملف المُعرِّف) |
| `ssh` | نوع المفتاح، وبيانات المفتاح، والتعليق (المسار: ملف `authorized_keys`) |
| `process` | سطر أوامر العملية (المسار: مسار الملف التنفيذي) |
| `network` | وصف الاتصال (المسار: `remote_addr:remote_port`) |

يطابق `regex` و`substring` عمود النص؛ بينما يطابق `glob` عمود المسار — لذا فإن `glob` الخاص بـ `network` مثل `203.0.113.*:*` يستهدف نقطة النهاية البعيدة. نتائج القواعد المخصصة هي للإشارة فقط (لا تُعالَج تلقائيًا أبدًا) ولا تزال خاضعة لكتم `--config`. توجد عينة في [`examples/custom_rules.yaml`](https://github.com/asmitdesai/ubuntils/blob/main/examples/custom_rules.yaml).

### سلامة التقرير

يحمل كل تقرير `--json` حقل `report_sha256` — وهو SHA-256 على محتوى التقرير القانوني. وهذا يجعل أثر الفرز المُجمَّع مقاومًا للتلاعب ويتيح لك الإشارة إلى فحص معين بواسطة البصمة في ملف القضية. كما يسجّل التقرير `tool_version` و`hostname` وطابعًا زمنيًا `generated_at` بتوقيت UTC ضمن `scan_metadata`. بالنسبة إلى `scan`، يصف `hostname`/`ubuntu_version` الجهاز الذي يعمل عليه `ubuntils`؛ وبالنسبة إلى `analyze --root` يُقرآن من `/etc/hostname` و`/etc/os-release` الخاصين بالصورة نفسها. أما بالنسبة إلى `analyze BUNDLE`، فيأتيان بدلًا من ذلك من بيان الحزمة نفسه — المضيف الذي تم *جمعه*، وليس المضيف الذي يشغّل `analyze` — إلى جانب `collection_run_id` و`collected_at_utc_start`/`collected_at_utc_end` الخاصين بالجمع، بحيث يتبع سجل سلسلة الحيازة الخاص بالتقرير الأدلة بدلًا من محطة عمل المحلل.

**التحقق من تقرير.** يُصدَر التقرير بصيغة قانونية (مفاتيح مرتبة، وإزاحة بمقدار مسافتين)، وتغطي البصمة كل شيء باستثناء `report_sha256` نفسه:```python
import hashlib, json
doc = json.load(open("report.json"))
claimed = doc.pop("report_sha256")
assert hashlib.sha256(json.dumps(doc, indent=2, sort_keys=True).encode()).hexdigest() == claimed

التحليل دون اتصال: الجمع والتحليل

يشغّل ubuntils scan عمليات الجمع والكشف والخط الزمني معًا على المضيف المباشر. أما collect وanalyze فيقسّمان هذا المسار إلى قسمين: collect يحصل على حزمة مقاومة للتلاعب من مضيف (دون تشغيل أي كشف)، وanalyze يشغّل نفس مسار الكشف/الخط الزمني الذي يستخدمه scan على حزمة، أو على صورة مُثبَّتة عبر --root، دون الحاجة إلى صلاحيات الجذر ودون لمس المضيف الأصلي مرة أخرى. هذا مخصص للحالات التي تريد فيها جمع الآثار مرة واحدة وتحليلها لاحقًا، أو في مكان آخر، أو بشكل متكرر — أو عندما تفحص صورة قرص بدلًا من نظام قيد التشغيل.

`ubuntils collect````bash

sudo ubuntils collect --output /path/to/bundle.tar.gz

root@kitploit:~
يتطلب صلاحيات الجذر، مثل `scan`. يقرأ قائمة ثابتة من الملفات (`/etc/passwd`، `/etc/group`، `/etc/shadow`، `/etc/sudoers`، `/etc/ld.so.preload`، `/etc/environment`، `/etc/crontab`، `/etc/profile`، `/var/log/syslog`، `/var/log/messages`، `/var/log/audit/audit.log`) وينفّذ قائمة ثابتة من الأوامر (`ss -tunap`، `netstat -tunap`، `systemctl list-timers` بصيغتي JSON والنص، و`journalctl -o json` لآخر 7 أيام)، ويحسب تجزئة لكل عنصر مُلتقط، ويكتب كل شيء بالإضافة إلى `manifest.json` داخل حزمة `.tar.gz`. ملفات السجل المُلتقطة ومخرجات journalctl هي ما يمكّن `analyze BUNDLE` من بناء خط زمني حقيقي دون اتصال. إذا تم حذف `--output`، تُكتب الحزمة إلى `./ubuntils-bundle-<UTC timestamp>.tar.gz` في الدليل الحالي.

### `ubuntils analyze````bash
ubuntils analyze BUNDLE.tar.gz [--json] [--output FILE] [--config FILE] [--baseline FILE] [--rules FILE] [--since TIME]
ubuntils analyze --root /mnt/forensic-image [--json] [--output FILE] [--config FILE] [--baseline FILE] [--rules FILE] [--since TIME]

يأخذ إما مسار حزمة كوسيطة موضعية أو --root PATH يشير إلى صورة مُثبَّتة / شجرة نظام ملفات مستخرجة — وليس كليهما. يشغّل محرك الكشف نفسه، والقواعد المخصصة، وقائمة السماح، ومنطق خط الأساس المستخدم بواسطة scan. لا يتطلب صلاحيات root. تُستخرج الحزمة إلى دليل مؤقت خاص يُحذف بمجرد انتهاء التحليل (قد يحتوي على /etc/shadow).

تختلف التغطية بين وضعي العمل دون اتصال، لأن الحزمة تحمل حالة مُعاد تشغيلها ملتقطة من وقت collect بينما --root لا يملك سوى ما هو موجود على نظام الملفات المُثبَّت:

  • analyze BUNDLE يعيد تشغيل مخرجات الأوامر الحقيقية ss/systemctl list-timers/journalctl الملتقطة في وقت collect، لذا يُنتج NetworkCollector وSystemdCollector نتائج حقيقية من تلك اللقطة — ولا يتم تخطيهما. يُبنى الخط الزمني من syslog/messages/audit.log/journalctl التي التقطتها الحزمة، لذا يكون ممتلئًا بالكامل وتحصل النتائج على ارتباط related_events حقيقي.
  • analyze --root PATH يشير إلى صورة ميتة مُثبَّتة بدون حالة عملية حية أو حالة نواة للاستعلام عنها، لذا يتم تعطيل تنفيذ الأوامر بالكامل: يتم تخطي NetworkCollector وSystemdCollector، ويُسجَّل ذلك في scan_metadata.command_collectors_skipped. لا يزال الخط الزمني يُبنى، ولكن من ملفات السجل الثابتة الموجودة على الصورة (، ، ) — إعادة تشغيل journald غير متاحة هنا لأنه لا يوجد حي للاستعلام عن صورة ميتة.

راجع التحليل دون اتصال: collect وanalyze للحصول على القائمة الكاملة لثغرات تغطية الكشف دون اتصال.

تنسيق الحزمة

الحزمة عبارة عن tarball مضغوط بـ gzip مع كل شيء تحت بادئة bundle/:``` bundle/ ├── manifest.json ├── files/ │ ├── etc/passwd │ ├── etc/shadow │ ├── var/log/syslog │ └── ... # every captured file, path-flattened under files/ └── commands/ ├── ss.txt ├── netstat.txt ├── systemctl_list_timers_json.txt ├── systemctl_list_timers_text.txt └── journalctl.txt

root@kitploit:~
مخطط `manifest.json`:

| الحقل | النوع | الوصف |
|---|---|---|
| `run_id` | string | UUID يُولَّد من جديد لكل تشغيل `collect` |
| `host_id` | string | محجوز للربط المستقبلي متعدد المضيفين؛ فارغ حالياً |
| `hostname` | string | `socket.gethostname()` في وقت الجمع |
| `ubuntu_version` | string | سلسلة إصدار Ubuntu المكتشفة |
| `collected_at_utc_start` / `collected_at_utc_end` | string (ISO 8601) | حدود الوقت الفعلي لتشغيل الجمع |
| `tool_version` | string | إصدار ubuntils الذي أنتج الحزمة |
| `files[]` | array | مدخل واحد لكل ملف مُلتقط: `source_path`، `bundle_path`، `sha256`، `size`، `mtime`، `ctime` (الملف الغائب/غير القابل للقراءة على المضيف المصدر يُسجَّل بـ `sha256: ""`، `size: -1` بدلاً من إجهاض الجمع) |
| `commands[]` | array | مدخل واحد لكل أمر مُلتقط: `name`، `argv`، `bundle_path`، `sha256`، `exit_code` |
| `bundle_sha256` | string | SHA-256 على بقية المخطط (كل ما سبق، بتسلسل قانوني) — مرتكز إثبات العبث للحزمة بأكملها |

### سلامة الحزمة في مخرجات JSON

يُبلِّغ `scan_metadata.bundle_integrity` في `analyze` عن إحدى ثلاث قيم:

- `"live"` — يُبلِّغ `scan` و `analyze --root` بهذه القيمة؛ لا توجد حزمة للتحقق منها.
- `"ok"` — تحقَّق `analyze BUNDLE` من `bundle_sha256` مقابل المخطط ومن SHA-256 لكل ملف مُلتقط مقابل محتواه في الحزمة؛ لم يُعدَّل شيء منذ أن كتبه `collect`.
- `"mismatch"` — لم يتطابق ملخّص المخطط، أو تجزئة ملف مُلتقط، أو تجزئة مخرجات أمر مُلتقط. عُدِّل شيء في الحزمة أو اقتُطع أو تلف بعد الجمع، ولا ينبغي الوثوق بأي شيء مشتق منها باعتباره نظيفاً من حيث سلسلة الحيازة. لا يزال `analyze` ينتج تقريره، لكنه يطبع تحذيراً أحمر إلى stderr، ويعرض شريط سلامة في أعلى تبويب Summary في TUI، و**يخرج بالحالة 3**، حتى لا تخطئ السكربتات في اعتبار نتائج حزمة مُتلاعب بها نتائج موثوقة.

### ⚠️ للتحليل دون اتصال ثغرات كشف حقيقية — اقرأ هذا قبل الاعتماد عليه

**تشغيل `analyze` المصدره حزمة أو `--root` لا يمتلك تكافؤاً في الكشف مع `scan` الحي.** هذه ليست حالات حافة؛ بل قيود بنيوية للاستحواذ الساكن دون اتصال، وهي تنتج نتائج أقل (أو صفرية) للقواعد المتأثرة بدلاً من خطأ. حيث *يعلم* المجمِّع أنه لم يستطع النظر (أمر فاشل، ملف غير قابل للقراءة)، يُسجَّل ذلك في `scan_metadata.collectors_degraded` ويُعلَّم في تبويب Summary في TUI — لكن ملفاً لم يُلتقط ببساطة يبدو كملف غير موجود. (الخط الزمني نفسه *لم يعد* أحد هذه الثغرات: يعيد `analyze BUNDLE` تشغيل syslog/messages/audit.log/journalctl المُلتقطة من وقت `collect`، ويقرأ `analyze --root` ملفات السجل الساكنة الموجودة على الصورة المُثبَّتة، لذا ينتج كلاهما خطاً زمنياً حقيقياً وربطاً حقيقياً لـ `related_events` — انظر [`ubuntils analyze`](#ubuntils-analyze) أعلاه.)

- **`PROCESS_MASQUERADE` و `PROCESS_SUSPICIOUS_CONNECTION` سيُبلِّغان دائماً بصفر نتائج في الوضع دون اتصال.** تستند كلتا القاعدتين إلى حقل `exe` الخاص بالعملية، الذي يُملأ بقراءة هدف الرابط الرمزي `/proc/<pid>/exe` عبر مصدر الأثر (وليس `/proc` الخاص بالمحلل أبداً). لا تملك الحزمة `/proc` حياً لقراءته، ويشير `--root` إلى شجرة نظام ملفات مُثبَّتة بلا `/proc` أيضاً — لا توجد حالياً آلية لالتقاط أو إعادة بناء هدف رابط exe الرمزي المُحلَّل دون اتصال، لذا يكون `exe` فارغاً دائماً ولا تنطلق القاعدتان أبداً، بغض النظر عما هو موجود فعلاً على المضيف.
- **لا يحدث تعداد العمليات إطلاقاً دون اتصال.** لا تملك `collect` خطوة التقاط لكل PID (`/proc/*/status`، `/proc/*/cmdline`)، لذا لا توجد عمليات في الحزمة لتحليلها من الأساس — هذا هو السبب الجذري نفسه للنقطة أعلاه، من جانب الاستحواذ.
- **`CRON_TMP_PATH` و `SUDOERS_NOPASSWD` و `SSH_UNAUTHORIZED_KEY` محدودة أو غائبة من التحليل المصدره حزمة.** قائمة ملفات `collect` ساكنة ولا يمكنها توسيع glob لـ `/etc/cron.d/*`، `/etc/sudoers.d/*`، `/etc/profile.d/*`، أو `~/.ssh/authorized_keys` لكل مستخدم — يُلتقط فقط `/etc/crontab`، `/etc/sudoers`، و `/etc/environment`/`/etc/profile`. (`--root` مقابل شجرة نظام ملفات مُثبَّتة كاملة لا يعاني من هذه الثغرة، لأن الأدلة الحقيقية موجودة على القرص.) عندما *تنطلق* `SSH_UNAUTHORIZED_KEY` أو `SHELL_RC_MODIFICATION` (فحص حي، أو `--root` مع أدلة المستخدمين الحقيقية موجودة)، فإنها الآن تحتسب الثقة أيضاً من ctime ومحتوى الملف، وليس من mtime وحده — انظر [تقييم الثقة](#json-output) أدناه. هذا يحسِّن مقدار ما ينبغي أن تثق به في نتيجة تنطلق فعلاً؛ لكنه لا يغيّر ما إذا كانت القاعدة تنطلق دون اتصال من الأساس.
- **كشف `SUSPICIOUS_SYSTEMD_TIMER` مُضعَّف بالنسبة للحزم.** تُقرأ وحدات الخدمة مباشرة من أدلة الوحدات (`/etc/systemd/system`، `/usr/lib/systemd/system`، `~/.config/systemd/user` لكل مستخدم، …)، لذا يحصل `--root` على تغطية كاملة للخدمات. لكن الحزمة لا تلتقط تلك الأدلة: تظهر المؤقتات من مخرجات `systemctl list-timers` المُلتقطة، لكن `ExecStart` لكل مؤقت يأتي من استدعاء `systemctl show` لكل وحدة لا تقوم به `collect`، لذا لا تستطيع القاعدة تقييم ما يشغّله مؤقت داخل حزمة.

**متى يهم هذا:** إذا كنت تفحص مضيفاً حياً قابلاً للوصول، استخدم `sudo ubuntils scan` — فهو يمتلك تغطية كشف كاملة. استخدم `collect`/`analyze` عندما تحتاج إلى الاستحواذ مرة واحدة والتحليل في مكان آخر، أو تحتاج إلى التحليل دون صلاحيات root، أو تعمل من صورة قرص حيث لا يكون `scan` خياراً على الإطلاق — وتعامل مع نتيجة `analyze` نظيفة للقواعد أعلاه على أنها "لم تُفحص"، وليس "فُحصت ونظيفة".

---

## واجهة TUI

تشغيل `sudo ubuntils scan` (بدون `--json`) يُطلق واجهة TUI تفاعلية بملء الطرفية.

### شاشة الفحص

أثناء تشغيل المجمِّعات، يعرض ubuntils قائمة تحقق حية — صف واحد لكل مجمِّع. يُحدَّث كل صف في الوقت الفعلي عند انتهاء المجمِّع:```
Scanning system…

  ✓  Process
  ✓  Network
  ✓  Users
  ⠹  Cron
     Systemd
     SSH
     Sudoers
     Environment

✓ تشير إلى النجاح، و✗ تشير إلى الفشل، وتشير مؤشر الدوران إلى المجمّع النشط، والصفوف الفارغة قيد الانتظار. بمجرد انتهاء جميع المجمّعات واكتمال الكشف + الجدول الزمني، تنتقل واجهة TUI تلقائيًا إلى شاشة النتائج.

شاشة النتائج

تحتوي شاشة النتائج على أربع علامات تبويب يتم التنقل بينها بمفاتيح الأرقام:

اضغط q أو Ctrl+C للخروج.

علامة تبويب الملخص (المفتاح 1)

تعرض بيانات الفحص الوصفية وأهم النتائج على شاشة واحدة:``` Collectors: 8 run · 0 failed Findings: 2 HIGH · 1 MEDIUM · 0 LOW Timeline: 47 events Duration: 2.8s

● HIGH CRON_TMP_PATH /etc/cron.d/cleanup ● HIGH LD_PRELOAD_INJECT /home/alice/.bashrc ○ MED SSH_UNAUTHORIZED_KEY /home/bob/.ssh/authorized_keys

root@kitploit:~
على نظام نظيف، يعرض هذا التبويب `System appears clean.`

### تبويب النتائج (المفتاح `2`)

قائمة قابلة للتمرير بجميع النتائج، مرتبة من HIGH → MEDIUM → LOW. عند تحديد نتيجة (Enter أو مفاتيح الأسهم) يتم توسيع جزء التفاصيل في الأسفل يعرض الوصف الكامل، ومسار الأثر، والقيمة الأولية المسببة، ومعلومات المعالجة.```
HIGH  CRON_TMP_PATH           /etc/cron.d/cleanup
HIGH  LD_PRELOAD_INJECT       /home/alice/.bashrc
MED   SSH_UNAUTHORIZED_KEY    /home/bob/.ssh/authorized_keys
───────────────────────────────────────────────────────
A cron job was found referencing /tmp, /var/tmp, or /dev/shm.
These directories are world-writable and commonly used as
attacker staging grounds.

Artifact:  /etc/cron.d/cleanup
Raw:       0 * * * * root /tmp/.update
Fix:       Will remove the offending cron entry from
           /etc/cron.d/cleanup after creating a timestamped backup.

R: remediate

المعالجة داخل الواجهة النصية

بالنسبة للنتائج التي تتوفر لها معالجة آلية، اضغط على R أثناء تحديد النتيجة. تظهر نافذة تأكيد:``` ┌─────────────────────────────────────────────────┐ │ Remediate CRON_TMP_PATH? │ │ │ │ Will remove the offending cron entry from │ │ /etc/cron.d/cleanup after creating a backup. │ │ Backup will be created at /var/backups/ubuntils/…│ │ │ │ Y: confirm Esc: cancel │ └─────────────────────────────────────────────────┘

root@kitploit:~
اضغط `Y` للتأكيد. يعمل المُعالج في خيط خلفي. عند اكتماله، يتم تحديث صف النتيجة في القائمة إلى `[fixed]` ويعرض جزء التفاصيل النتيجة:```
✓ Remediated
Backup:    /var/backups/ubuntils/20260115_142201/etc_cron.d_cleanup
Rollback:  cp /var/backups/ubuntils/20260115_142201/etc_cron.d_cleanup /etc/cron.d/cleanup

عند الفشل، يعرض جزء التفاصيل الخطأ. يتم إنشاء النسخة الاحتياطية دائمًا قبل محاولة أي تغيير.

اضغط على Esc لطي جزء التفاصيل.

تبويب الجدول الزمني (المفتاح 3)

قائمة زمنية قابلة للتمرير لأحداث السجل المترابطة. يعرض كل صف الطابع الزمني والمصدر والوصف. يتم سحب الأحداث من syslog وjournald وauditd وإزالة التكرارات.

تبويب الإحصائيات (المفتاح 4)

عرض ملخص للفحص: إصدار Ubuntu المكتشف، والبنية المعمارية، ومدة الفحص، وعدد أدوات الجمع والإخفاقات، وعدد النتائج لكل مستوى خطورة إلى جانب إجمالي أحداث الجدول الزمني.


ما الذي يكتشفه

لماذا توجد كل قاعدة

CRON_ROOT_EXEC — تعمل مهام cron للمستخدمين باسم مالك crontab. إدخال يستدعي sudo أو مفسّرًا مملوكًا للجذر يعني أن المستخدم قد رتّب لتشغيل كود بامتيازات الجذر وفق جدول زمني، دون الحاجة إلى وصول sudo دائم. هذا يبقى حتى بعد تغيير كلمات المرور.

مثال على نتيجة:``` [HIGH] CRON_ROOT_EXEC Title: User crontab executing with sudo Artifact: /var/spool/cron/crontabs/alice Raw value: */5 * * * * sudo /usr/bin/python3 /tmp/beacon.py Remediation: available

root@kitploit:~
**CRON_TMP_PATH** — تُعدّ المجلدات القابلة للكتابة من قبل الجميع مثل /tmp و/dev/shm أرضيات تجهيز قياسية للمهاجمين. وجود مهمة cron تشير إلى هناك يعني أنه يمكن استبدال الحمولة بين الاستدعاءات دون لمس أي مسار دائم. يغطي هذا إدخالات بنمط `@reboot`/`@daily` والسكربتات في `/etc/cron.{hourly,daily,weekly,monthly}`؛ النتائج على تلك السكربتات تكون للإشارة فقط، لأن حذف سطر واحد من سكربت shell ليس إصلاحًا تلقائيًا آمنًا.

*مثال على النتيجة:*```
[HIGH] CRON_TMP_PATH
Title:         Cron job references writable temp directory
Artifact:      /etc/cron.d/cleanup
Raw value:     0 * * * * root /tmp/.update
Remediation:   available

LD_PRELOAD_INJECT — يتسبب LD_PRELOAD في قيام الرابط الديناميكي بتحميل مكتبة مشتركة محددة قبل جميع المكتبات الأخرى، مما يسمح باعتراض الدوال بشكل تعسفي في أي ملف ثنائي مرتبط ديناميكيًا. تشير قيمة تشير إلى خارج مسارات المكتبات القياسية إلى مؤشر شبه مؤكد على وجود روتكيت في مساحة المستخدم؛ يتم فحص كل مكتبة في قائمة مفصولة بمسافة أو نقطتين. يحقن /etc/ld.so.preload في كل عملية ويكون فارغًا في Ubuntu الأصلي، لذا يتم الإبلاغ عن أي إدخال هناك — حتى لو كان مزروعًا داخل /lib، وهي حيلة شائعة للروتكيت. تزيل المعالجة إدخالات /etc/ld.so.preload بدلاً من التعليق عليها، لأن المحمّل ليس لديه صيغة تعليق في ذلك الملف.

مثال على اكتشاف:``` [HIGH] LD_PRELOAD_INJECT Title: LD_PRELOAD set to non-standard library path Artifact: /home/alice/.bashrc Raw value: export LD_PRELOAD=/tmp/.libssl.so Remediation: available

root@kitploit:~
**SUSPICIOUS_SYSTEMD_TIMER** — تُعدّ مؤقتات Systemd أكثر استمرارية وأقل وضوحًا من مهام cron بالنسبة لمعظم المستجيبين. إنّ مؤقتًا — أو وحدة `.service` عادية، وهي الأكثر شيوعًا في الاستمرارية ولا تحتاج إلى مؤقت على الإطلاق — يشير ExecStart الخاص بها إلى دليل مؤقت أو يشغّل ملفًا تنفيذيًا لا يملكه root، يُعدّ علامة على استمرارية أنشأها المهاجم. تُقرأ وحدات الخدمة مباشرةً من أدلة الوحدات، بما في ذلك `~/.config/systemd/user` لكل مستخدم. للرصد فقط — يتطلب إزالة وحدة systemd حكمًا بشريًا.

*مثال على النتيجة:*```
[HIGH] SUSPICIOUS_SYSTEMD_TIMER
Title:         Systemd timer ExecStart points to suspicious path
Artifact:      /etc/systemd/system/update-check.timer
Raw value:     ExecStart=/tmp/.sys/update
Remediation:   not available

SSH_UNAUTHORIZED_KEY — مفتاح SSH مُضاف حديثًا يمنح وصولًا عن بُعد دائمًا مستقلًا عن كلمات المرور. تلتقط نافذة الـ 7 أيام الإضافات الحديثة مع تجنّب الضجيج الناتج عن التهيئة الأولية على الأنظمة الأقدم. ملاحظة: تستخدم القاعدة وقت تعديل الملف (file mtime)، الذي يعكس آخر كتابة على ملف authorized_keys، وليس الطابع الزمني لإدراج كل مفتاح على حدة.

مثال على النتيجة:``` [MEDIUM] SSH_UNAUTHORIZED_KEY Title: SSH authorized key added in last 7 days Artifact: /home/bob/.ssh/authorized_keys Raw value: ssh-rsa AAAAB3NzaC1... attacker@evil Remediation: available

root@kitploit:~
**SUDOERS_NOPASSWD** — sudo بدون كلمة مرور لحساب مستخدم بشري (UID ≥ 1000 مع صدفة تسجيل دخول) هو ناقل لتصعيد الصلاحيات يبقى بعد إزالة آليات الاستمرارية الأخرى. المنح المشروعة لـ NOPASSWD تكون دائمًا تقريبًا لحسابات الخدمات التي لا تملك صدفة تسجيل دخول. تُحل قواعد المجموعات (`%sudo ALL=(ALL) NOPASSWD:ALL`) إلى أعضائها، وتُتبع ملفات `#include`/`@includedir`. نتائج المجموعات تكون للعلم فقط: حذف قاعدة مثل `%sudo` قد يزيل كل منح sudo على النظام.

*مثال على النتيجة:*```
[MEDIUM] SUDOERS_NOPASSWD
Title:         NOPASSWD sudo grant for regular user
Artifact:      /etc/sudoers.d/alice
Raw value:     alice ALL=(ALL) NOPASSWD: ALL
Remediation:   available

PROCESS_MASQUERADE — تسمية ملف ثنائي خبيث باسم عملية نظام معروفة (sshd، python3، bash) هي تقنية أساسية لتجنب الاكتشاف في مخرجات ps. تقوم هذه القاعدة بمقارنة اسم العملية من /proc/<pid>/status مع مسار exe المُحلَّل من /proc/<pid>/exe. تشمل المواقع القياسية /usr/local/{bin,sbin}، و/usr/lib، و/usr/libexec، و/snap، لذا فإن systemd (/usr/lib/systemd/systemd) وحزم snap لا تُفعّل هذه القاعدة. للتنبيه فقط — قتل عملية يتطلب حكماً بشرياً.

مثال على اكتشاف:``` [MEDIUM] PROCESS_MASQUERADE Title: Process masquerading as system binary Artifact: /proc/1337/exe Raw value: name=sshd, exe=/tmp/.sshd Remediation: not available

root@kitploit:~
**USER_UID_ZERO** — يجب أن يكون `root` فقط هو الحاصل على UID 0. أي حساب ثانٍ مرتبط بـ UID 0 (CIS Ubuntu Benchmark 6.2.x) يُعدّ بابًا خلفيًا عالي الثقة: فهو يمنح صلاحيات المستخدم الخارق الكاملة دون تغيير بيانات اعتماد root نفسه، ويظل قائمًا حتى بعد إعادة تعيين كلمة مرور root. معدل الإيجابيات الكاذبة شبه معدوم. للعلم فقط — إزالة حساب بـ UID 0 تتطلب حكمًا بشريًا.

*مثال على النتيجة:*```
[HIGH] USER_UID_ZERO
Title:         Non-root account with UID 0
Artifact:      /etc/passwd
Raw value:     toor:x:0:0:...:/bin/bash
Remediation:   not available

USER_EMPTY_PASSWORD — الحساب الذي يكون فيه حقل كلمة المرور في /etc/shadow فارغًا لا يملك كلمة مرور على الإطلاق، وتسمح له حزمة PAM الافتراضية في Ubuntu (pam_unix ... nullok) بتسجيل الدخول دون كلمة مرور. على حساب له صدفة تسجيل دخول، يُعدّ هذا بابًا مفتوحًا. للعلم فقط — اقفله باستخدام passwd -l أثناء التحقيق.

مثال على النتيجة:``` [HIGH] USER_EMPTY_PASSWORD Title: Login account with no password Artifact: /etc/shadow Raw value: eve:: Remediation: not available

root@kitploit:~
**PROCESS_SUSPICIOUS_CONNECTION** — الاستمرارية ليست سوى نصف الصورة؛ فموضع قدم لا يتحدث أبدًا إلى أي شيء نادرًا ما يكون هو ما يهمك. تربط هذه القاعدة جامعي العمليات والشبكة عبر PID بحيث يصل أي عملية مُعلَّمة مرفقةً باتصالاتها الحالية. ملف تنفيذي موضوع في `/tmp` يحتفظ بمقبس صادر مُنشأ يُعد HIGH؛ بينما وصول ملف تنفيذي شرعي إلى منفذ بعيد غير قياسي يُعد MEDIUM ويستحق النظر. هذه لقطة للحالة الراهنة، وليست مراقبة مستمرة — فالمنارة التي تكون نائمة عند الفحص لن تظهر. وضع الإبلاغ فقط.

*مثال على النتيجة:*```
[HIGH] PROCESS_SUSPICIOUS_CONNECTION
Title:         Process with suspicious outbound connection
Artifact:      /proc/1337/exe
Raw value:     203.0.113.9:4444
Remediation:   not available

SHELL_RC_MODIFICATION — تُعد ملفات تهيئة الصدفة (shell init files) ناقلًا موثوقًا للاستمرارية لأنها تُنفَّذ عند كل تسجيل دخول للمستخدم. تُظهر هذه القاعدة التعديلات الأخيرة لمراجعة بشرية. للتنبيه فقط — يتطلب محتوى ملفات تهيئة الصدفة القراءة قبل التصرف بناءً عليه.

مثال على النتيجة:``` [LOW] SHELL_RC_MODIFICATION Title: Shell init file recently modified Artifact: /root/.bashrc Raw value: mtime=2024-01-15 14:22:01 (6 hours ago) Remediation: not available

root@kitploit:~
**PACKAGE_TAMPERED** — تُعدّ الملفات الثنائية وملفات التهيئة المملوكة للنظام أساس الثقة. تكشف هذه القاعدة عند تعديل الملفات المملوكة للحزم، أو حذفها، أو وجود عدم تطابق في المحتوى/الوضع/الحجم باستخدام `dpkg --verify`. يتم استبعاد التعديلات على ملفات التهيئة فقط (تغييرات التهيئة المحلية المتوقعة) من الإبلاغ لتجنب الضوضاء. وضع الإشارة فقط — قد يكون التلاعب مشروعًا (تعديلات محلية مخصصة) أو ضارًا (استبدال ملف)؛ ويتطلب القرار حكمًا بشريًا.

*مثال على اكتشاف:*```
[HIGH] PACKAGE_TAMPERED
Title:         Package-owned file modified since installation
Artifact:      /usr/bin/sshd
Raw value:     ....5..T. (content and mtime differ)
Remediation:   not available

IMMUTABLE_FLAG_SET — غالبًا ما يقوم المهاجمون بتعيين العلامة غير القابلة للتغيير (i) أو علامة الإضافة فقط (a) على الملفات لمنع تعديلها أو حذفها، حتى بواسطة root، بما في ذلك إخفاء التلاعب من التعديلات الإضافية/تدوير السجلات. يعد تعيين هذه العلامات على ملفات النظام الحساسة مثل /etc/passwd، /etc/sudoers، /etc/pam.d/*، أو ملفات سجلات auth/syslog/wtmp/btmp مؤشرًا قويًا على تقوية المهاجم. تكتشف هذه القاعدة العلامات غير القابلة للتغيير والإضافة فقط عبر lsattr مقابل تلك القائمة الثابتة من المسارات الحساسة. للعلم فقط — تتطلب تغييرات العلامات مراجعة بشرية.

مثال على النتيجة:``` [MEDIUM] IMMUTABLE_FLAG_SET Title: Sensitive file has an unexpected chattr flag Artifact: /etc/ld.so.preload Raw value: ----i--------e--- Remediation: not available

root@kitploit:~
**PAM_BACKDOOR** — تُعدّ PAM (وحدات المصادقة القابلة للتوصيل) و NSS (خدمة تبديل الأسماء) الأنظمة الأساسية للمصادقة والهوية على Linux. لا تُجري هذه القاعدة كشفًا قائمًا على mtime من نوع "هل تم تعديل هذا الملف" — بل تُطابق *محتوى* الملف بنمط معيّن: (1) سطر حرفي `pam_permit.so` في أي ملف من /etc/pam.d/* (هذه الوحدة تنجح دائمًا وهي باب خلفي كلاسيكي لتجاوز المصادقة)، أو (2) وحدة NSS مُدرجة في /etc/nsswitch.conf ليست ضمن قائمة السماح المدمجة في ubuntils. **ملاحظة:** سيعطي فحص NSS نتائج إيجابية خاطئة على المضيفين المنضمّين إلى نطاق/SSSD/LDAP/Winbind الذين يستخدمون وحدة خارج قائمة السماح المدمجة — ولذلك يُقيَّم عمدًا بثقة أقل من مطابقة pam_permit.so؛ استخدم `--config` لإدراج أسماء الوحدات غير المعروفة في قائمة السماح لبيئتك. للعلم فقط — تتطلب تغييرات إعدادات المصادقة تحققًا دقيقًا.

*أمثلة على النتائج:*```
[HIGH] PAM_BACKDOOR
Title:         PAM config unconditionally permits authentication
Artifact:      /etc/pam.d/sshd
Raw value:     auth required pam_permit.so
Remediation:   not available
root@kitploit:~
[HIGH] PAM_BACKDOOR
Title:         Unexpected NSS module in nsswitch.conf
Artifact:      /etc/nsswitch.conf
Raw value:     passwd: files evilmod
Remediation:   not available

KERNEL_MODULE_SUSPICIOUS — تعمل وحدات النواة في الحلقة 0 (ring 0) بوصول غير مقيّد. غالبًا ما يقوم المهاجمون بتحميل وحدات نواة مخصّصة لبرامج rootkits، أو التنصّت على الحزم، أو إخفاء العمليات. تقارن هذه القاعدة الوحدات المحمّلة حاليًا بقائمة سماح صغيرة من الوحدات المدمجة المتوقعة (الشائعة في معظم الأنظمة). درجة خطورتها LOW لأن قائمة السماح هذه ضيّقة عمدًا. ملاحظة: ستولّد المضيفات كثيفة العتاد التي تحتوي على برامج تشغيل GPU، أو بطاقات Wi-Fi، أو برامج تشغيل خاصة نتائج إيجابية خاطئة. ينبغي للمستجيبين إضافة الوحدات المتوقعة لمضيفهم عبر --config، مع إدراجها في قائمة السماح باسم الوحدة (المستخدم كـ artifact_path). وضع الإبلاغ فقط (Flag-only) — يتطلب التحقيق في وحدات النواة أدوات جنائية وخبرة بشرية.

مثال على اكتشاف:``` [LOW] KERNEL_MODULE_SUSPICIOUS Title: Loaded kernel module not in the expected set Artifact: implant_rootkit Raw value: {'name': 'implant_rootkit', 'size': '12288', 'used_by': []} Remediation: not available

root@kitploit:~
**SETUID_INVENTORY** — تقوم الملفات الثنائية setuid و setgid برفع الصلاحيات تلقائيًا عند تنفيذها. ينشئ المهاجمون ملفات ثنائية setuid/setgid مخصصة لترسيخ رفع الصلاحيات، وغالبًا ما تكون خارج أدلة الملفات الثنائية القياسية للنظام (مسار تثبيت شائع مثل /opt، أو دليل /home الخاص بالمستخدم، أو /srv، أو دليل مؤقت قابل للكتابة من الجميع). يقوم هذا القاعدة بجرد الملفات الثنائية setuid/setgid عبر `find -perm -4000 -o -perm -2000` في `/usr /bin /sbin /opt /home /srv /tmp /var/tmp /dev/shm` ويضع علامة على أي منها خارج مجموعة أساسية معروفة من أدوات النظام المشروعة. وضع العلامة فقط — تتطلب الملفات الثنائية setuid/setgid غير المتوقعة تحقيقًا ولكنها قد تكون ملفات ثنائية مشروعة مثبتة بواسطة التطبيق.

*مثال على اكتشاف:*```
[LOW] SETUID_INVENTORY
Title:         Unexpected setuid binary
Artifact:      /tmp/.hidden/backdoor
Raw value:     setuid
Remediation:   not available

مخرجات JSON

--json يكتب كائن JSON واحد إلى stdout. لا يُطبع أي شيء آخر.```json { "scan_metadata": { "tool_version": "2.1.0", "hostname": "web-01", "generated_at": "2026-06-10T08:22:03.114523+00:00", "ubuntu_version": "Ubuntu 22.04.3 LTS", "architecture": "x86_64", "duration_s": 2.84, "collector_failures": 0, "bundle_integrity": "live", "command_collectors_skipped": [], "collectors_degraded": {}, "rules_failed": [], "timeline_error": null, "suppressed_by_baseline": 1 }, "artifact_counts": { "ProcessCollector": 142, "NetworkCollector": 23, "UserCollector": 4, "CronCollector": 7, "SystemdCollector": 12, "SSHCollector": 3, "SudoersCollector": 5, "EnvironmentCollector": 18 }, "findings": [ { "rule_id": "CRON_TMP_PATH", "severity": "HIGH", "title": "Cron job references writable temp directory", "description": "A cron job was found referencing /tmp, /var/tmp, or /dev/shm. These directories are world-writable and commonly used as attacker staging grounds.", "artifact_path": "/etc/cron.d/cleanup", "raw_value": "0 * * * * root /tmp/.update", "remediation_available": true, "remediation_description": "Will remove the offending cron entry from /etc/cron.d/cleanup after creating a timestamped backup.", "related_events": [ { "timestamp": "2024-01-15T08:20:00+00:00", "source": "syslog", "description": "CRON[2841]: (root) CMD (/tmp/.update)" } ], "confidence": 75, "confidence_band": "HIGH", "signals": [ {"name": "timeline_corroboration", "weight": 25, "detail": "1 nearby timeline event(s)"} ] }, { "rule_id": "PROCESS_MASQUERADE", "severity": "MEDIUM", "title": "Process masquerading as system binary", "description": "Process 'sshd' (pid=1337) has exe path outside standard binary directories: /tmp/.sshd", "artifact_path": "/proc/1337/exe", "raw_value": "/tmp/.sshd", "remediation_available": false, "guided_remediation": "Confirm pid 1337 is malicious (ls -l /proc/1337/exe, cat /proc/1337/cmdline), then terminate it: kill -9 1337.", "confidence": 50, "confidence_band": "MEDIUM", "signals": [] } ], "timeline": [ { "timestamp": "2024-01-15T08:22:01+00:00", "source": "syslog", "description": "sshd: Accepted publickey for alice from 10.0.0.42 port 52341" } ], "report_sha256": "a3f1c9…(64 hex chars)" }

root@kitploit:~
يظهر `remediation_results` كمفتاح إضافي في المستوى الأعلى فقط عند تمرير `--remediate`. يكون `report_sha256` موجودًا دائمًا ويُحسب على بقية المستند. تكون قيمة `scan_metadata.bundle_integrity` هي `"live"` بالنسبة إلى `scan` و`analyze --root`، و`"ok"` بالنسبة إلى حزمة تم التحقق منها وتمريرها إلى `analyze`، و`"mismatch"` إذا لم يطابق محتوى الحزمة بيانها الوصفي — راجع [سلامة الحزمة في مخرجات JSON](#bundle-integrity-in-json-output). يسمّي `scan_metadata.command_collectors_skipped` أي جامعات تعتمد على الأوامر (`NetworkCollector`، `SystemdCollector`، `PackageCollector`، `KernelCollector`) تم تخطيها في تشغيل `--root` — ويكون فارغًا دائمًا بالنسبة إلى `scan` و`analyze BUNDLE`. يمثّل `scan_metadata.suppressed_by_baseline` عدد النتائج التي أزالها ملف `--baseline` من هذا التقرير — راجع [Baselining المعروف بأنه سليم](#known-good-baselining---baseline). يربط `scan_metadata.collectors_degraded` اسم الجامع بالأسباب التي جعلت بياناته غير مكتملة (أمر فشل أو انتهت مهلته، ملف غير قابل للقراءة، سطر مشوّه تم تخطيه)، ويسرد `rules_failed` أي قاعدة كشف انهارت، ويُضبط `timeline_error` إذا تعذّر بناء الخط الزمني. تكون الثلاثة جميعها فارغة في تشغيل سليم. تحقق منها قبل قراءة قائمة نتائج فارغة على أنها "نظيفة".

يظهر `related_events` و`guided_remediation` على نتيجة فقط عندما يكون لهما محتوى. يحتفظ `related_events` بما يصل إلى خمسة أحداث من الخط الزمني مطابقة للنتيجة حسب مسار الأثر وكلمات القاعدة المفتاحية، الأحدث أولًا — وهو أداة مساعدة على الإبراز، وليس ادعاءً سببيًا. أما `guided_remediation` فهو تسلسل أوامر مُراجَع لتشغيله يدويًا؛ ولا ينفّذه ubuntils أبدًا.

### تسجيل الثقة

تحمل كل نتيجة درجة `confidence` (من 0 إلى 100، الافتراضي 50) و`confidence_band` (`HIGH` ≥ 75، `MEDIUM` ≥ 40، `LOW` أقل من ذلك)، إضافة إلى قائمة `signals` تُظهر بالضبط كيف تم الوصول إلى تلك الدرجة — كل مدخل هو `{"name", "weight", "detail"}`، لذا تكون الدرجة قابلة للتفسير دائمًا، وليست صندوقًا أسود أبدًا. الإشارات تُضاف فوق ثقة أساسية قدرها 50 وتُطبّقها القاعدة أو مرحلة خط المعالجة التي أنتجتها:

- تطبّق قواعد الكشف إشاراتها الخاصة وقت اكتشاف النتيجة — على سبيل المثال يضيف `SSH_UNAUTHORIZED_KEY` و`SHELL_RC_MODIFICATION` الإشارة `content_match` (+30) عندما يطابق محتوى الأثر نمطًا معروف الخطورة (خيار مفتاح SSH خطير؛ سطر curl/wget-to-shell أو base64-decode في ملف RC للصدفة)، والإشارة `ctime_corroborates_mtime` (+20) عندما يكون ctime الخاص بالملف أيضًا داخل نافذة الكشف (وهو أصعب في التزوير من mtime وحده)، أو الإشارة `mtime_only` (−20) عندما تكون الحداثة هي الإشارة *الوحيدة* ولا يؤكدها ctime — وهو مؤشر على أن mtime ربما تم تأريخه بتاريخ سابق.
- يطبّق خط المعالجة الإشارة `timeline_corroboration` (+25) بعد الربط بين النتيجة والخط الزمني، عندما تكون للنتيجة حدث أو أكثر من `related_events`.

لا يتم تجاهل نتيجة النطاق `LOW` أو إخفاؤها — فهي تظهر في قائمة النتائج ومخرجات JSON تمامًا مثل أي نتيجة أخرى — لكن النطاق يخبرك بمقدار الوزن الذي ينبغي أن توليه لها قبل التحقيق أكثر. وهذا يحل محل الاستدلال القديم القائم على mtime وحده بالنسبة إلى `SSH_UNAUTHORIZED_KEY`/`SHELL_RC_MODIFICATION`، حيث كان ملف قديم لكن تم لمسه بشكل مشروع (مثل أداة إدارة إعدادات تعيد كتابة `.bashrc` في كل تشغيل) يبدو مطابقًا لباب خلفي جديد حقيقي.

**قيد معروف:** الإشارات النشطة اليوم هي إشارات نمط المحتوى وctime فقط. أما الإشارات القائمة على الملكية/البصمة — بصمة مفتاح SSH غير معروفة، أو خيار التقييد `from=` لمفتاح، أو عدم تطابق المالك/الوضع لملف RC (إشارة `ownership_anomaly`) — فلم تُنفَّذ بعد. وهذه فجوة تغطية مؤجلة، متتبَّعة لإصدار مستقبلي، وليست شيئًا تراعيه درجة الثقة الحالية.

---

## المعالجة

خمس من قواعد الكشف الست عشرة لديها معالجة آلية: `CRON_ROOT_EXEC`، `CRON_TMP_PATH`، `LD_PRELOAD_INJECT`، `SSH_UNAUTHORIZED_KEY`، و`SUDOERS_NOPASSWD`. أما البقية فهي للتنبيه فقط ولن تتم معالجتها آليًا أبدًا، لأن التصرف بشأنها بأمان يتطلب أن ينظر إنسان أولًا.

### المعالجة الموجَّهة

تحمل `SUSPICIOUS_SYSTEMD_TIMER` و`PROCESS_MASQUERADE` و`SHELL_RC_MODIFICATION` سلسلة `guided_remediation`: الأوامر الدقيقة التي يجب تشغيلها بمجرد تأكيد النتيجة — `systemctl disable --now <unit>`، أو `kill -9 <pid>`، أو مراجعة ملف RC والرجوع عنه. تظهر في لوحة تفاصيل TUI وفي JSON. ولا يشغّلها ubuntils نيابة عنك أبدًا؛ فهذه القواعد تبقى خارج عملية `--remediate --confirm` بحكم التصميم.

### في TUI

اختر أي نتيجة لديها معالجة في تبويب Findings، ثم اضغط `R`. تعرض نافذة تأكيد منبثقة معاينة للإجراء المخطط. اضغط `Y` لتطبيقه — يعمل المُعالِج في خيط خلفي حتى يبقى TUI سريع الاستجابة. يتحدّث صف النتيجة إلى `[fixed]` عند الانتهاء، مع عرض مسار النسخة الاحتياطية وأمر التراجع الدقيق مباشرةً.

### من CLI

`--remediate` بدون `--confirm` هو تشغيل تجريبي آمن: تُنشأ النسخ الاحتياطية ويعمل التحقق، لكن لا تُطبَّق أي تغييرات. مرّر كلا العلَمين لإجراء تغييرات فعلية. يعمل خط المعالجة قبل تشغيل TUI في هذا الوضع، ويسرد تبويب Summary كل نتيجة معالجة مع مسار النسخة الاحتياطية وأمر التراجع الخاص بها.

لا يعمل `--remediate --confirm` إلا على النتائج التي لديها درجة ثقة لا تقل عن 40 (نطاق MEDIUM) — فالنتيجة `SSH_UNAUTHORIZED_KEY` منخفضة الثقة والقائمة على mtime وحده تُبلَّغ على أنها `SKIPPED` بدلًا من حذف مفتاحها. اضبط العتبة باستخدام `--min-confidence N`.```bash
sudo ubuntils scan --remediate          # dry run
sudo ubuntils scan --remediate --confirm # apply changes, then open TUI
sudo ubuntils scan --remediate --confirm --min-confidence 75  # only HIGH-confidence findings

ضمانات السلامة

تتبع كل عملية معالجة النمط نفسه بغض النظر عن كيفية تشغيلها:

  1. اكتشاف ما إذا كان مسار العنصر رابطًا رمزيًا — الرفض إذا كان كذلك (يمنع الكتابة الجذرية عبر روابط رمزية يتحكم بها المهاجم)
  2. إنشاء نسخة احتياطية بطابع زمني في /var/backups/ubuntils/YYYYMMDD_HHMMSS/ بوضع 0700
  3. التحقق من الحالة الحالية (يجب أن يكون السطر الدقيق لا يزال موجودًا)
  4. تطبيق الحد الأدنى من التغيير الممكن — إزالة إدخالات cron والمفاتيح سطرًا بسطر؛ تعليق أسطر LD_PRELOAD في ملفات تهيئة الصدفة؛ إزالة الإدخالات في /etc/ld.so.preload (لا يحتوي المحمّل على صيغة تعليق هناك، لذا فإن الإدخال المعلّق سيظل يُحمَّل). بالنسبة لـ sudoers، يتم فحص المحتوى المعدّل باستخدام visudo -cf على نسخة مؤقتة قبل لمس الملف الحقيقي
  5. الكتابة ذريًا — يذهب المحتوى الجديد إلى ملف مؤقت بجانب الأصل (بنفس الوضع والمالك)، ويتم تنفيذ fsync عليه، ثم إعادة تسميته فوقه، بحيث لا يمكن لانهيار أثناء الكتابة أن يترك /etc/sudoers مبتورًا
  6. التحقق من اختفاء السطر الدقيق

إذا فشلت أي خطوة، تتوقف المعالجة فورًا، ويُترك النظام دون تغيير، ويُبلَّغ عن الخطأ الكامل مع مسار النسخة الاحتياطية وأمر التراجع. وصول sudo محمي بطريقتين: قواعد %group NOPASSWD (مثل %sudo) هي للإشارة فقط ولا تُزال تلقائيًا أبدًا، ويرفض معالج sudoers إزالة القاعدة الأخيرة من ملف sudoers الرئيسي.


تكامل Wazuh

صُمم ubuntils لفرز نقطي على مضيف واحد — تشغّله عندما تشك بالفعل في وجود خطب ما، ولا يتصل بالخارج أبدًا ولا يواصل المراقبة بعد انتهاء الفحص. هذا أمر مقصود، لكنه يعني أيضًا أن نتيجة من ubuntils تعيش فقط في ذلك التقرير الواحد ما لم يحملها شيء إلى الأمام. معظم الفرق التي تشغّل Ubuntu بأي حجم لديها بالفعل SIEM يقوم بالجانب المستمر من الكشف، لذا بدلًا من بناء ubuntils كوكيل مراقبة طويل الأمد خاص به، فإنه يسلّم نتائجه إلى الوكيل الذي تشغّله على الأرجح بالفعل: Wazuh.

إذا كان وكيل Wazuh موجودًا على المضيف (يوجد /var/ossec/bin/wazuh-agentd أو /var/ossec/etc/ossec.conf)، فإن ubuntils scan (ما لم يُشغَّل مع --no-wazuh) يضيف كل نتيجة كسطر JSON واحد إلى /var/log/ubuntils/wazuh-alerts.json ليلتقطه الوكيل — هذا مجرد مُمرِّر، وليس وحدة Wazuh: لا اتصال شبكي، لا مفتاح API، لا شيء سوى نفس كتابات العناصر المحلية التي يقوم بها ubuntils بالفعل — رغم أن الوكيل سيشحن تلك الأسطر بالطبع خارج المضيف إلى مديره؛ وهذا هو المقصود. يُكتشف تلقائيًا دون الحاجة إلى علم (استخدم --no-wazuh لاستثناء تشغيل ما)، لذا فإن ubuntils scan المجدول أو النصي على أسطول من المضيفين المسجلين في الوكيل يبدأ بتغذية SIEM فورًا دون أي توصيل إضافي. لا يحدث هذا أبدًا أثناء ubuntils analyze دون اتصال (حزمة أو --root)، لأن تلك النتائج تصف مضيفًا مختلفًا عن المضيف الذي يشغّل وكيل Wazuh المحلي — فتوجيه نتائج حزمة إلى وكيل المحلل نفسه سينسبها خطأً إلى الجهاز الخاطئ.

الهدف هو دمج ubuntils في خط تنبيه/تصعيد قائم بدلًا من مطالبة المستجيب برعاية أداة ثانية: بمجرد تحميل القواعد النموذجية أدناه، تظهر نتيجة ubuntils بخطورة HIGH (حساب UID-0 جديد، روتكيت LD_PRELOAD، باب خلفي PAM) كتنبيه Wazuh عادي، وترث أي توجيه إشعارات مُهيَّأ بالفعل لدى المدير، وتجلس إلى جانب كل إشارة أخرى في نفس الخط الزمني بدلًا من ملف JSON مستقل يجب على أحدهم تذكّر التحقق منه.

لجعل Wazuh يحلل هذه النتائج وينبّه عليها، انسخ القواعد النموذجية من examples/wazuh/ إلى مدير Wazuh لديك، وأضف كتلة <localfile> من examples/wazuh/ossec_localfile_snippet.xml إلى /var/ossec/etc/ossec.conf الخاص بالوكيل. لا حاجة لتثبيت مفكك ترميز مخصص: يُهيَّأ localfile بـ log_format json، لذا يفكك مفكك ترميز JSON المدمج في Wazuh كل سطر ويحوّل كل مفتاح JSON من المستوى الأعلى k إلى data.k، وهو ما يطابقه local_rules.xml مباشرة.

  1. examples/wazuh/local_rules.xml → /var/ossec/etc/rules/ الخاص بالمدير
  2. كتلة <localfile> من examples/wazuh/ossec_localfile_snippet.xml → /var/ossec/etc/ossec.conf الخاص بالوكيل
  3. أعد تشغيل كليهما: systemctl restart wazuh-manager (المدير)، systemctl restart wazuh-agent (مضيف الوكيل)

هذه قوالب نموذجية فقط، تُقدَّم كنقطة انطلاق — لم تُختبر مقابل مدير Wazuh حي ويجب التحقق منها في بيئة غير إنتاجية قبل الاعتماد عليها.

مخطط JSON لكل سطر:


المجمّعات

تبعيات المجمّعات

يتطلب PackageCollector ثلاث أدوات Ubuntu قياسية على المضيف الحي (dpkg، lsattr، find — جميعها موجودة في تثبيتات Ubuntu الأصلية). إذا كان أي أمر غير متاح، ينتج PackageCollector بيانات فارغة لذلك الجزء بدلًا من الانهيار. يعيد التحليل دون اتصال (analyze BUNDLE) تشغيل مخرجات الأوامر الملتقطة من وقت collect، لذا لا يُشترط توفر الأوامر على مضيف المحلل.

يمرر فحص find لـ setuid/setgid الخيار -xdev ليبقى محدودًا — فهو لا ينزل إلى أنظمة ملفات مركّبة بشكل منفصل (تركيب مميز تحت /opt، أو /home المركّب عبر NFS، إلخ). هذه مقايضة متعمدة بين وقت التشغيل والتغطية: بدون -xdev، قد يتعلّق الفحص أثناء مسح تركيبات الشبكة أو أنظمة الملفات الافتراضية. إذا كان بيئتك تركّب هذه المسارات على أنظمة ملفات منفصلة، فاعلم أنها لن تُفحص.

يستخدم dpkg --verify وفحص find لـ setuid/setgid مهلًا سخية غير افتراضية (10 دقائق و5 دقائق على التوالي، انظر ubuntils/collectors/packages.py) لأن كليهما يمكن أن يعمل بشكل مشروع لفترة تتجاوز بكثير الافتراضي المكتبي البالغ 30 ثانية على مضيف حقيقي بقاعدة حزم أو شجرة نظام ملفات كبيرة؛ ويستخدم ubuntils collect نفس المهل عند التقاط هذه الأوامر في حزمة.


التوافق

مدعوم
Ubuntu20.04، 22.04، 24.04
المعماريةamd64، arm64
Python3.9+
الصلاحياتمطلوب root للوصول الكامل إلى العناصر

التشغيل بدون root ينتج فحصًا جزئيًا مع تحذيرات. سيتم تخطي المسارات الحرجة مثل /etc/shadow، وأدلة crontab المحمية، وبعض إدخالات /proc.


خارطة الطريق

v1.0.0

  • جميع المجمّعات الثمانية
  • جميع قواعد الكشف الثمانية
  • باني الخط الزمني (syslog، journald، auditd)
  • شاشة تقدم الفحص الحي مع ✓/✗ لكل مجمّع
  • واجهة TUI تفاعلية بأربع تبويبات (Summary / Findings / Timeline / Stats)
  • معالجة داخل TUI مع نافذة تأكيد وعامل خلفي
  • وضع إخراج JSON
  • معالجة CLI لـ 5 قواعد مع نسخ احتياطي وتراجع وحماية من الروابط الرمزية
  • دعم Ubuntu 20.04/22.04/24.04
  • 240 اختبارًا بتغطية 90%

v1.1.0

  • قائمة سماح للنتائج الإيجابية الكاذبة حسب معرّف القاعدة أو المسار (--config)
  • --output FILE لكتابة التقارير مباشرة
  • نافذة الخط الزمني --since
  • تقارير مقاومة للتلاعب (report_sha256، hostname، timestamp)
  • قاعدة كشف USER_UID_ZERO

v1.5.0

  • قواعد كشف مطابقة الأنماط المخصصة عبر YAML (--rules)
  • PROCESS_SUSPICIOUS_CONNECTION — ربط العملية↔الشبكة عبر PID
  • ربط تلقائي بين النتيجة↔الخط الزمني (related_events)
  • معالجة موجّهة للقواعد الثلاث التي تتطلب حكمًا
  • 282 اختبارًا بتغطية 92%

تم إسقاط عمليات بحث تجزئة VirusTotal وتصدير MISP IOC من هذا الإصدار. يجيب VirusTotal فقط عن التجزئات المعروفة — وهي الحالة التي يغطيها rkhunter بالفعل، وعكس الفجوة في التقنيات الجديدة التي يستهدفها ubuntils — وكانت كلتا الميزتين ستضعان اتصالًا شبكيًا داخل أداة تقوم قيمتها على عدم إجراء أي اتصال. لا يزال ubuntils نفسه لا يجري أي اتصالات شبكية (انظر تكامل Wazuh للطريقة الوحيدة القابلة للاستثناء التي يمكن بها للنتائج مغادرة المضيف، عبر وكيل محلي).

v2.0.0 — فصل collect/analyze دون اتصال

  • ubuntils collect — يحصل على حزمة مقاومة للتلاعب (manifest.json + ملفات/أوامر مجزّأة) من مضيف حي، دون كشف
  • ubuntils analyze (BUNDLE | --root PATH) — يشغّل نفس خط أنابيب الكشف/الخط الزمني مثل scan مقابل حزمة أو صورة مركّبة، دون الحاجة إلى root
  • bundle_integrity (live/ok/mismatch) تظهر في scan_metadata
  • توثيق فجوات تغطية الكشف في الوضع دون اتصال (PROCESS_MASQUERADE، PROCESS_SUSPICIOUS_CONNECTION، وتغطية مخفّضة لمسارات cron/sudoers/SSH العامة و لمؤقت systemd)

v2.1.0 — توجيه SIEM

  • نتائج ubuntils scan الحية تُوجَّه إلى وكيل Wazuh محلي كـ JSONL، مع اكتشاف تلقائي (لا حاجة إلى علم)
  • مفكك ترميز/قواعد Wazuh نموذجية ومقتطف <localfile> في ossec.conf (examples/wazuh/)
  • التوجيه مقصور عمدًا على scan الحي فقط — لا يُطلق أبدًا أثناء analyze دون اتصال، لأن حزمة أو صورة تصف مضيفًا مختلفًا عن المضيف الذي يشغّل الوكيل
  • --no-wazuh لاستثناء فحص من التوجيه

v2.1.0 — تقوية (تدقيق كامل لقاعدة الكود)

  • الأمان: إعادة تنفيذ sudo لم تعد تمرر PATH الخاص بالمتصل، وتُحل الأوامر على مسار آمن ثابت؛ تعديلات sudoers تُفحص بـ visudo قبل لمس الملف؛ كتابات معالجة ذرية؛ إخراج تقرير/حزمة آمن من الروابط الرمزية؛ حذف الحزم المستخرجة بعد analyze
  • تغطية الكشف: تحليل /etc/ld.so.preload، إدخالات cron @reboot/@daily وسكربتات /etc/cron.{hourly,daily,weekly,monthly}، وحدات systemd .service والثنائيات ExecStart غير المملوكة لـ root، قواعد sudoers %group و #include/@includedir، كل عنصر في قائمة LD_PRELOAD

v3.0.0 / v4.0.0 (استكشافية)

  • لوحة تحكم ويب لفرز متعدد المضيفين
  • دعم macOS

المساهمة

أكثر المساهمات فائدة الآن هي قواعد الكشف الجديدة (تُضاف كدوال مستقلة في detectors/rules.py مع اختبار مطابق)، ومجمّعات إضافية لأنواع العناصر غير المغطاة بعد، ووحدات معالجة لـ SUSPICIOUS_SYSTEMD_TIMER و SHELL_RC_MODIFICATION (كلتاهما حاليًا للإشارة فقط بحكم التصميم، لكن قد توجد مسارات معالجة تلقائية آمنة)، وحالات اختبار للحالات الحدية على تهيئات Ubuntu محددة، وتحسينات التوثيق.

افتح مشكلة قبل بدء مساهمة كبيرة لتجنب العمل المكرر.


الترخيص

MIT


المؤلف

بُني بواسطة Asmit — بكالوريوس تقنية في علوم الحاسوب، جامعة PES، بنغالورو. جاءت الأداة من الإحباط بسبب المدة التي يستغرقها الفرز اليدوي لـ Ubuntu مقارنة بما يمكن لسكربت محدد النطاق أتمتته.

تنزيل الأداة
/var/log/syslog
/var/log/messages
/var/log/audit/audit.log
journalctl
المفتاحعلامة التبويبالمحتويات
1الملخصإحصاءات الفحص + أهم النتائج في لمحة
2النتائجقائمة النتائج الكاملة مع التفاصيل المضمّنة والمعالجة
3الجدول الزمنيأحداث السجل المترابطة زمنيًا
4الإحصاءاتإصدار Ubuntu، والبنية، والمدة، وأعداد المجمّعات
معرّف القاعدةالخطورةقابل للمعالجةما الذي يتحقق منه
CRON_ROOT_EXECعاليةنعممهام cron للمستخدمين غير الجذر التي تشغّل أوامر في مسارات مملوكة للجذر أو تُضمّن sudo
CRON_TMP_PATHعاليةنعم*أي مهمة cron (بما في ذلك إدخالات @reboot/@daily والسكربتات في /etc/cron.{hourly,daily,weekly,monthly}) تشير إلى /tmp أو /var/tmp أو /dev/shm. *أسطر السكربتات للعلم فقط
LD_PRELOAD_INJECTعاليةنعمأي إدخال في /etc/ld.so.preload (فارغ في Ubuntu الأصلي)، أو LD_PRELOAD في أي ملف تهيئة shell مع أي مكتبة مُدرجة خارج /lib و/usr/lib و/lib64 و/usr/lib64
SUSPICIOUS_SYSTEMD_TIMERعاليةلامؤقتات systemd ووحدات الخدمة التي يشير ExecStart الخاص بها إلى دليل قابل للكتابة من الجميع أو يشغّل ملفًا تنفيذيًا غير مملوك للجذر
SSH_UNAUTHORIZED_KEYمتوسطةنعمملفات authorized_keys التي عُدّلت خلال آخر 7 أيام
USER_UID_ZEROعاليةلاأي حساب غير root بمعرّف UID صفر (مستخدم خارق ثانٍ مخفي)
USER_EMPTY_PASSWORDعاليةلاحساب بصدفة تسجيل دخول حقل كلمة المرور الخاص به في /etc/shadow فارغ (إعداد PAM الافتراضي nullok في Ubuntu يسمح له بتسجيل الدخول بدون كلمة مرور)
SUDOERS_NOPASSWDمتوسطةنعم*منح sudoers من نوع NOPASSWD لمستخدمين بمعرّف UID ≥ 1000 ولديهم صدفة تسجيل دخول، مباشرة أو عبر قاعدة %group؛ يتم تتبع الملفات المُضمّنة. *قواعد المجموعات للعلم فقط (إزالة %sudo قد تزيل كل وصول sudo)
PROCESS_MASQUERADEمتوسطةلاالعمليات التي يطابق اسمها ملفًا تنفيذيًا نظاميًا معروفًا لكن ملفها التنفيذي خارج أدلة النظام القياسية (/usr/bin، /usr/sbin، /bin، /sbin، /usr/local/{bin,sbin}، /usr/lib، /usr/libexec، /lib، /snap)
PROCESS_SUSPICIOUS_CONNECTIONعالية / متوسطةلاالعمليات التي تحتفظ باتصال صادر وملفها التنفيذي في دليل مؤقت قابل للكتابة من الجميع أو محذوف من القرص (عالية)، أو خارج أدلة النظام القياسية أو تتحدث إلى منفذ بعيد غير قياسي (متوسطة)
SHELL_RC_MODIFICATIONمنخفضةلاملفات تهيئة shell (bashrc، profile، zshrc، إلخ) التي عُدّلت خلال آخر 48 ساعة لأي مستخدم لديه صدفة تسجيل دخول
PACKAGE_TAMPEREDعاليةلاملفات الحزم المملوكة للنظام التي عُدّلت أو فُقدت أو التي لا يتطابق محتواها/وضعها/حجمها مع بيان الحزمة (عبر dpkg --verify)
IMMUTABLE_FLAG_SETمتوسطةلاأعلام غير قابلة للتغيير (i) أو للإلحاق فقط (a) مضبوطة على ملفات حساسة مثل /etc/passwd أو /etc/sudoers أو /etc/pam.d/* (تُكتشف عبر lsattr)
PAM_BACKDOORعاليةلاسطر حرفي pam_permit.so في أي ملف من /etc/pam.d/*، أو وحدة NSS في /etc/nsswitch.conf خارج قائمة مسموح بها (files/sss/ldap/winbind/...)
KERNEL_MODULE_SUSPICIOUSمنخفضةلاوحدات kernel المحمّلة خارج قائمة مسموح بها من الوحدات المدمجة الشائعة — ملاحظة: المضيفات كثيفة العتاد (وحدات GPU، بطاقات Wi-Fi، التعريفات الاحتكارية) سترى نتائج إيجابية خاطئة؛ أضف الوحدات المتوقعة عبر --config
SETUID_INVENTORYمنخفضةلاملفات تنفيذية setuid أو setgid غير متوقعة خارج مجموعة أساسية معروفة (يتم فحص البتّين والإبلاغ عنهما بشكل منفصل)
الحقلالنوعالوصف
timestampstring (ISO 8601)وقت توجيه النتيجة
hostnamestringالمضيف المفحوص
rule_idstringيطابق معرّف قاعدة الكشف في ubuntils (انظر جدول قواعد الكشف أعلاه)
severitystringHIGH | MEDIUM | LOW
titlestringعنوان قصير مقروء للبشر
descriptionstringوصف النتيجة الكامل
artifact_pathstringمسار الملف/المورد حيث وُجدت المشكلة
raw_valuestringالسطر/القيمة الخام التي أطلقت القاعدة
remediation_availableboolما إذا كان لدى ubuntils معالج لهذه القاعدة
related_eventsarray (اختياري)أحداث الخط الزمني المترابطة، إن وُجدت
المجمّعالعناصر المجمّعة
ProcessCollectorالعمليات قيد التشغيل من /proc ومخرجات ps
NetworkCollectorالاتصالات المفتوحة والمستمعون من ss/netstat
UserCollector/etc/passwd، /etc/shadow، /etc/group
CronCollectorأدلة /etc/cron* و /var/spool/cron/crontabs/*
SystemdCollectorمخرجات systemctl list-timers و list-units
SSHCollector~/.ssh/authorized_keys لجميع المستخدمين
SudoersCollector/etc/sudoers وجميع الملفات تحت /etc/sudoers.d/
EnvironmentCollector/etc/environment، /etc/profile.d/*، ملفات تهيئة صدفة المستخدم
PackageCollectorسلامة حزم النظام عبر dpkg --verify، وسمات علم الثبات عبر lsattr، والثنائيات setuid/setgid عبر find
PamCollectorملفات /etc/pam.d/* و /etc/nsswitch.conf
KernelCollectorوحدات النواة المحمّلة عبر lsmod
ExecStart
  • كشف موثوق: تسجيل الثقة (confidence/confidence_band/signals)، كبت --baseline، استبدال الاستدلالات المعتمدة على mtime فقط في SSH_UNAUTHORIZED_KEY/SHELL_RC_MODIFICATION بإشارات ctime + المحتوى، وخط زمني حقيقي دون اتصال لكل من analyze BUNDLE و analyze --root
  • حزمة تغطية: PACKAGE_TAMPERED، IMMUTABLE_FLAG_SET، PAM_BACKDOOR، KERNEL_MODULE_SUSPICIOUS، SETUID_INVENTORY (عبر PackageCollector، PamCollector، KernelCollector؛ جميعها للإشارة فقط بحكم التصميم)
  • 400 اختبار بتغطية 93.79%
  • قاعدة USER_EMPTY_PASSWORD الجديدة (حساب دخول بلا كلمة مرور)
  • نتائج إيجابية كاذبة أقل: فحوصات مسار محدودة بفواصل، التمييز بين setuid و setgid، معاملة خفايا snap//usr/lib كقياسية، تخفيض KERNEL_MODULE_SUSPICIOUS إلى LOW، نتيجة NSS واحدة لكل وحدة
  • تقارير صادقة: القواعد الفاشلة والمجمّعات المتدهورة مسجّلة في scan_metadata و TUI؛ فشل الخط الزمني لم يعد يتجاهل النتائج؛ الحزم المتلاعب بها تحذّر وتخرج بالرمز 3؛ معالجة سنة/منطقة زمنية syslog بشكل صحيح
  • معالجة أكثر أمانًا: بوابة --min-confidence (افتراضي 40)، النتائج تظهر في TUI بعد scan --remediate
  • 444 اختبارًا بتغطية 94.29%