Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
sift — فرز الكشف عن بيانات الاعتماد والبيانات الحساسة في مشاركات الملفات | Kitploit
أدوات/GitHubGitHub/hotstartlabs/sift
أدوات دفاعيةالتحاليل الرقمية الجنائيةكشف الأسرارالاستجابة للحوادث
GitHubhotstartlabs/sift

sift

فرز الكشف عن بيانات الاعتماد والبيانات الحساسة في مشاركات الملفات

عرض المستودع
168منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة

Sift Secrets

tests

فرز حالات تعرّض بيانات الاعتماد والبيانات الحساسة في مشاركات الملفات.

عندما يظهر مشارَك مفتوح، السؤال ليس أبدًا "هل يحتوي هذا المستودع على مفتاح مسرَّب". بل هو "ما الذي تعرّض للتو، وما الذي يجب عليّ تدويره قبل نهاية يوم العمل؟" صُمم sift للإجابة عن هذا السؤال: استرجاع عالٍ، قائمة مراجعة سريعة، وحلقة تغذية راجعة بحيث يصبح أي شيء تكتشفه بالعين قاعدةً تعثر على النسخ الأخرى البالغ عددها مائتين.

قائمة الفرز: النتائج على اليسار، والتطابق مظلَّلًا في الأسطر المحيطة به
على اليمين

بايثون 3.11+، المكتبة القياسية فقط. لا حاجة إلى pip install، ولا إنترنت، ولا خطوة بناء. يعمل على كمبيوتر محمول للاستجابة للحوادث (IR) مقيَّد، وهو المكان الذي تحتاج إليه.```bash sift survey \fileserver\openshare # how big is this thing sift copy \fileserver\openshare C:\IR\case-4471 # take a throttled copy sift scan C:\IR\case-4471 # scan it, opens the triage UI

root@kitploit:~
المسح في مكانه يعمل أيضًا. جرّبه أولاً على مشاركة تحتوي على بيانات اعتماد مزيّفة:```bash
sift demo C:\temp\demoshare

sift.cmd هو مُشغِّل يعمل من أي مجلد. لكتابة sift بدلاً من المسار الكامل، أضِف C:\Dev\sift إلى PATH:```bash setx PATH "%PATH%;C:\Dev\sift"

root@kitploit:~
بالنسبة لجهاز لا يحتوي على Python إطلاقًا، فإن `python build_portable.py` ينشئ `dist/sift-secrets-<version>-portable-win64.zip`: بيئة التشغيل القابلة للتضمين الرسمية من python.org بالإضافة إلى شجرة المصدر هذه، وهي تعمل بفك الضغط والتشغيل عبر `sift.cmd` المرفق. حوالي 11 ميجابايت، بدون تثبيت، وبدون صلاحيات مسؤول، ولا يوجد فيه أي شيء مُجمَّع أو مُعاد تعبئته — راجع docstring في `build_portable.py` لمعرفة سبب تفوق ذلك على ملف .exe مُجمَّد على كمبيوتر محمول للاستجابة للحوادث مقفل.

---

## لماذا لا نكتفي بـ gitleaks أو trufflehog

كلا الأداتين جيدتان، وتحلّان مشكلة مختلفة.

إنهما أداتان **دقيقتان** مصممتان للـ CI، حيث تكلف النتيجة الإيجابية الخاطئة المطورَ نصف يومه، لذا فهما تطلقان بشكل أساسي على الأشياء التي تشبه مفتاح API معروفًا لدى جهة بائعة. يذهب trufflehog إلى أبعد من ذلك ويفضل الأسرار التي يمكنه *التحقق* منها عبر استدعاء واجهة برمجة تطبيقات الجهة البائعة، وهي إشارة ممتازة فعلًا لا يمكن للتعبيرات النمطية (regex) محاكاتها.

فرز المشاركة يقلب المعادلة الاقتصادية. فالإنسان يقرأ كل نتيجة بالفعل، لذا تكلف النتيجة الإيجابية الخاطئة ثلاث ثوانٍ. ما يكلفك حقًا هو **التفويت**.

مفاتيح API الخاصة بالبائعين تتسرب فعلًا عبر المشاركات - نسخة احتياطية من جذر الويب، أو سكربت نشر، أو مجلد مشروع لشخص ما منسوخ إلى محرك الأقسام، وفي داخله ملف `.env` يحتوي على مفتاح Stripe نشط. هذه الأشياء تستحق الالتقاط، وsift يلتقطها. لكنها أيضًا الجزء الذي يعالجه gitleaks وtrufflehog جيدًا بالفعل. الفجوة هي كل شيء آخر، وعلى مشاركة الملفات تشكّل معظمها:

| ما تفوته ماسحات CI | لماذا تتجاهله |
|---|---|
| `web.config` يحتوي على سلسلة اتصال SQL | ليس تنسيق مفتاح معروفًا، ولا يوجد بائع للتحقق منه |
| `Map-Drives.ps1` مع `net use ... /user:` | مجرد أمر شل يليه كلمة |
| `New Hire Setup Guide.docx` | ملف Office، يُقرأ كبيانات ثنائية ويُتخطى بالكامل |
| `unattend.xml`, GPP `Groups.xml` | عناصر نشر Windows لم يكتب أحد كاشفًا لها |
| `confCons.xml`, `.rdg`, WinSCP.ini | كلمات مرور مخزنة قابلة للعكس، لكنها ليست "تنسيقًا سريًا" |
| `passwords.xlsx` | إنه ملف ZIP. ماسحات النص العادي ترى بيانات ثنائية وتنتقل |
| `.kdbx`, `.pfx`, `id_rsa` | بايتات معتمة - *اسم الملف* هو النتيجة |
| ملف `.bak` بداخله سلسلة اتصال | ثنائي، لذا لا يُقرأ أبدًا |

sift يغطي هذه الحالات، ويأتي بقواعد مفاتيح البائعين الخاصة به، و**يستورد حزم القواعد ونتائج الأدوات الأخرى** - gitleaks TOML، وKingfisher/Titus YAML، وtrufflehog JSON - لذا لن تضطر إلى الاختيار بين الأدوات.

أقرب عمل سابق هو [Snaffler](https://github.com/SnaffCon/Snaffler)، وهو ممتاز في النصف المتعلق بأسماء الملفات والتصنيف من هذه المهمة، وكان الإلهام المباشر لقواعد أسماء الملفات. ما لا يمتلكه - والذي يتبين أنه العنق الزجاجي الفعلي بمجرد بلوغك 400 نتيجة - هو حلقة مراجعة.

---

## الحلقة

1. **افحص** المشاركة.
2. **عالج قائمة الانتظار.** تعرض كل نتيجة الأسطر المحيطة بها مع تمييز المطابقة. تتيح مفاتيح الأسهم توسيع السياق، وتفتح نقرة واحدة الملف كاملًا في VS Code عند ذلك السطر، أو في Notepad.
3. **اكتشف تفويتًا.** ستكتشفه. قم بتمييزه في المعاينة واضغط `r`.
4. **يقترح sift أنماطًا** ويخبرك مباشرةً عدد المرات التي سيطابق بها كل نمط عبر كل ما سبق قراءته.
5. **احفظه.** تستغرق إعادة الفحص من ذاكرة التخزين المؤقت حوالي ثانية، وتظهر النتائج الجديدة في قائمة الانتظار دون المساس بقرارات الفرز الحالية.

الخطوة 5 هي الجزء الذي يجعل بقية الخطوات جديرة بالتنفيذ. تُقيَّد النتائج بمفتاح `(path, rule, line, value-hash)`، لذا فإن إعادة الفحص تعيد إدراج الصفوف نفسها وتُحفَظ حالتك وملاحظاتك والمالك معها. بدون ذلك، كنت ستعيد مراجعة نفس النتائج الـ300 في كل تكرار وتستسلم في التكرار الثالث.

---

## الأوامر```bash
# size it up first: file count, total bytes, biggest folders, transfer estimates
sift survey \\fileserver\share

# take a rate-limited local copy (resumable; gentle = 5 MB/s by default)
sift copy \\fileserver\share C:\IR\case-4471 --speed gentle

# scan a share and open the triage UI
sift scan \\fileserver\share

# maximum recall: more noise, but a human is reading anyway
sift scan D:\dfs\dept --tier 3

# re-open the UI over the most recent scan
sift ui

# build a share of fabricated credentials, scan it, open the UI
sift demo C:\temp\demoshare

# inherit other tools' vendor-key rules, then use them in the live rescan loop
sift import-rules gitleaks.toml                    # gitleaks TOML
sift import-rules path/to/kingfisher/data/rules    # a directory of YAML

# pull in what the other scanners found, into the same queue
trufflehog filesystem \\fileserver\share --json > th.json
sift import-findings th.json

# hand off to the incident record (redacted unless you say otherwise)
sift export --fmt pdf --status confirmed --out ir-4471.pdf
sift export --fmt csv --out ir-4471.csv
sift export --fmt pdf --no-redact       # plaintext; handle as evidence

sift rules                              # what is loaded
sift selftest                           # detection tests against a synthetic share

# ask vendors whether confirmed findings are still live. NETWORK. Opt-in.
sift validate --status confirmed

Anywhere sift appears you can use python -m sift instead, from the C:\Dev\sift directory.

خيارات جديرة بالمعرفة

أين تعيش الحالة

تذهب النتائج إلى مجلد لكل هدف تحت %LOCALAPPDATA%\sift\، وليس إلى دليل العمل أبدًا — تحتوي قاعدة البيانات على بيانات اعتماد نصية واضحة، وتشغيل الأداة من دليلك الرئيسي يجب ألا يُسقط واحدة هناك بصمت. كل مشاركة لها مخزنها الخاص، لذلك لا تتشارك مهمتان أبدًا في قائمة انتظار الفرز. sift ui بدون وسائط يعيد فتح الأحدث؛ --data DIR يتجاوزه.

القواعد المخصصة عامة، في %LOCALAPPDATA%\sift\user-rules.json، لذا فإن النمط الذي تكتبه أثناء مهمة يساعد في المشاركة التالية التي تنظر إليها.


قبل أن تفحص: استطلاع واقتناء

كلاهما في ترويسة الواجهة، بجانب مربع المسار، وعلى سطر الأوامر.

التحقق من الحجم هو مسح إحصائي فقط. لا يُفتح شيء، لذا فهو غير مكلف حتى عبر SMB، ويخبرك بعدد الملفات، وإجمالي البايتات، وأكبر المجلدات، والتوزيع حسب الامتداد، ومقدار ما سيقرؤه sift فعليًا، والمدة التي ستستغرقها النسخة عند كل سرعة. توجيه ماسح ضوئي إلى جذر DFS غير معروف والانتظار هو ما يجعل بعد الظهر يختفي.

النسخ محليًا يسحب المشاركة إلى مجلد محلي أولًا. يستحق القيام به لأن:

  • فحص نسخة محلية أسرع بكثير من آلاف الرحلات ذهابًا وإيابًا عبر SMB؛
  • إنه قابل للتكرار، لذا إضافة قاعدة وإعادة الفحص لا تقصف خادم الملفات مجددًا؛
  • الأصل يُترك دون مساس، وهو الفرق بين «نظرنا إليه» و«حافظنا عليه» إذا أصبح الحادث قانونيًا.

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

السرعةالمعدل
لطيف (افتراضي)5 ميجابايت/ثانية
عادي25 ميجابايت/ثانية
سريع100 ميجابايت/ثانية
غير محدودما يقدمه الرابط

النقل يُستأنف: يتم تخطي ملف الوجهة الذي له نفس الحجم ووقت التعديل، لذا فإن اقتناءً توقف عند 80% يستكمل من حيث توقف. الملفات المقفلة أو المرفوضة تُسجَّل وتُتخطى بدلاً من إنهاء التشغيل.


التقارير

PDF، وCSV، وMD، وJSON، من ترويسة الواجهة أو عبر sift export --fmt.

PDF هو ما يُسلَّم لسجل الحادث: صفحة غلاف بالهدف، وإجماليات حسب الخطورة وحالة الفرز، والقواعد الأكثر تكرارًا، والقيم المعاد استخدامها عبر الملفات، ثم النتائج مجمعة حسب الخطورة. يتم إنشاؤه مباشرة، دون مكتبة PDF، لذا يعمل على جهاز لم يرَ pip مطلقًا.

التصديرات مُنقّحة افتراضيًا. القيم مخفية، وكل صفحة موسومة بلافتة، والطرفية لا تعطل الإخفاء إلا عبر طلب صريح redact=0 — لا يمكن لطلب مقتطع أو مشوه أن يُسرّب. تعطيل التنقيح في الواجهة يتطلب تأكيد نافذة تحذير، والملف الناتج موسوم بلافتة UNREDACTED - CONTAINS PLAINTEXT CREDENTIALS على كل صفحة.

لا تزال قاعدة بيانات النتائج تحتفظ بالقيم الحقيقية، لأن المحلل يحتاج إلى معرفة أي كلمة مرور تسربت ليعرف ما الذي يجب تدويره. الحدود هي ما يغادر الأداة.


التعامل مع قائمة الانتظار

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

اختصارات لوحة المفاتيح أدناه هي معجلات لقائمة انتظار طويلة، وليست الطريقة الوحيدة لتشغيلها.

زر اللقطة يعرض المقتطف المميز بصيغة PNG للصقه في تذكرة حادث؛ ونسخ المقتطف يفعل الشيء نفسه بصيغة markdown.


الأمان

تعرض الواجهة بيانات اعتماد نصية واضحة حية في نافذة متصفح، لذلك:

  • ترتبط بـ 127.0.0.1 فقط، وترفض أي شيء آخر دون --unsafe-bind؛
  • تتطلب رمزًا عشوائيًا لكل إطلاق، يُسلَّم في رابط الإطلاق ثم يُحفظ في ملف تعريف ارتباط SameSite=Strict؛
  • تتحقق من ترويسة Host، فلا يمكن لصفحة خبيثة إعادة ربط DNS بها؛
  • ترسل CSP بدون أي مصادر خارجية إطلاقًا — لا يمكن لأي شيء في الصفحة إخراج ما تعرضه؛
  • ترفض قراءة أو فتح أي مسار غير موجود بالفعل في قاعدة بيانات النتائج، لذا /api/context ليس قراءة ملف عشوائية و/api/open ليس إطلاق عملية عشوائي.

تحتوي قاعدة بيانات النتائج على بيانات اعتماد نصية واضحة عن قصد — يحتاج محلل الاستجابة للحوادث إلى معرفة أي كلمة مرور تسربت ليعرف ما الذي يجب تدويره. تعامل مع %LOCALAPPDATA%\sift\<target>\findings.db كدليل: نفس التعامل مع المشاركة نفسها، واحذفه عند إغلاق المهمة. استخدم --redact إذا كان سيغادر حدود الحادث.

والأمر البديهي: شغّل sift فقط على الأنظمة التي لديك إذن بالوصول إليها.


كيف تُنظَّم القواعد

sift/rules_builtin.py — قواعد المحتوى. sift/rules_filename.py — قواعد أسماء الملفات. كلاهما بايثون عادي بأنماط سلاسل خام، لذا فهما قابلان للقراءة والمقارنة؛ قواعد المستخدم موجودة بصيغة JSON في .sift/user-rules.json.

ثلاث طبقات تتيح لك المقايضة بين الدقة والاسترجاع:

  • الطبقة 1 — لا لبس فيها. تنسيقات مفاتيح البائعين، وكتل PEM، وcpassword الخاصة بـ GPP، وتفريغات NTLM، وكلمات مرور ربط LDAP. الشكل وحده دليل.
  • الطبقة 2 (الافتراضية) — قواعد القرب. «كلمة شبيهة بالسر بجوار قيمة.» حيث تعيش معظم حالات التعرض الحقيقية للمشاركات.
  • الطبقة 3 — سلاسل عالية الإنتروبيا غير معنونة، وسداسي عشري طويل، وأرقام IBAN. مزعجة، لكن عندما تحدد نطاق اختراق فأنت تفضل قراءة 400 إصابة على تفويت واحدة.

يمكن أن تحمل القاعدة أيضًا min_digits، وmin_lowercase، وmin_uppercase، وmin_special، لذا يمكن تشديد قاعدة واحدة مزعجة دون لمس الباقي، وexamples — سلاسل يجب أن تظل تطابقها.

قواعد تفحص نفسها

examples هو النصف المفيد. sift selftest يشغّل كل قاعدة ضد السلاسل التي كُتبت من أجلها، عبر المسار الكامل: المطابقة، ثم الاستخراج، ثم مرشحات الكبت. الخطوة الأخيرة هي المهمة، لأن الانحدار الذي يحدث فعليًا ليس نمطًا يتوقف عن المطابقة — بل مرشح ضوضاء، شُدّد لأسباب وجيهة في مكان آخر، يلتهم بصمت نتيجة حقيقية في طريقها للخروج.

إنها تثبت قيمتها فورًا. إضافة أمثلة إلى القواعد الموجودة كشفت فجوة حقيقية: الشرطة السفلية حرف كلمة، لذا فإن \b البادئة في قاعدة الإسناد العامة رفضت المطابقة داخل DB_PASSWORD، أو MYSQL_PASSWORD، أو REDIS_PASSWORD — ثلاثة من أكثر أسماء متغيرات بيانات الاعتماد شيوعًا في الوجود، فاتتها بصمت. بدا المثال صحيحًا بوضوح ولم يطابق، وهذا بالضبط الغرض منه.

القواعد التي تكتبها في الواجهة تحصل على هذا مجانًا: السطر الذي حددته يُحفظ كمثال للقاعدة، لذا فإن القاعدة التي تعدّلها بعد ستة أشهر تخبرك عندما تتوقف عن مطابقة الشيء الذي دفعك لكتابتها.

استيراد حزم قواعد أدوات أخرى

sift import-rules يأخذ ملف gitleaks .toml، أو ملف .yml بنمط Kingfisher/Titus، أو دليلًا يحويها. مقابل حزمة Kingfisher، يتم استيراد 1,073 قاعدة من أصل 1,082، حاملةً معها حدود الإنتروبيا ومتطلبات الأرقام والأحرف والأمثلة. يقرأ YAML عبر sift/yamlmini.py، وهو قارئ للمجموعة الفرعية التي تستخدمها هذه الحزم — دون أي تبعية، ويرفع خطأ عند المراسي والوسوم بدلاً من التظاهر بفهمها.

يُسقط أمران عمدًا في الطريق:

  • كتل validation:، التي تسمي عنوان URL لكل قاعدة. لا يتصل sift إلا بالمضيفين المثبتين يدويًا في validate.py. حزمة قواعد يمكنها تسمية نقطة نهاية ستختار أين تُرسل نتائجك، وملف القواعد هو بيانات، وليس قرارًا.
  • أي قاعدة لم يعد نمطها يطابق مثالها الموثق. الحزم مكتوبة لـ Rust وHyperscan، حيث [[:alnum:]] فئة POSIX؛ بايثون يقرؤها كمجموعة أحرف حرفية، ويُجمّعها بنجاح، ويطابق الشيء الخطأ. تُفحص الترجمة ضد أمثلة كل قاعدة، لذا فإن النمط الذي نجا من التجميع لكنه غيّر معناه يُرفض بدلاً من ألا يُطلق أبدًا بصمت. اثنتا عشرة قاعدة من قواعد Kingfisher تفشل في هذا الفحص ولا تُستورد.

ما إذا كان كبت sift الخاص سيُسقط مثالًا معينًا لا يستبعد القاعدة — تلك الحزم تأتي بعينات مزيفة عمدًا (keyXXXXXXXX، ...EXAMPLE)، لذا فإن مرشح العناصر النائبة محق بشأن المثال ولا يقول شيئًا عن النمط. التشدد في ذلك أسقط 121 قاعدة عاملة قبل أن يُرسم التمييز.

الكبت يعمل بقدر عمل الاكتشاف

تُهجر قواعد الأسرار العامة بسبب الضوضاء، لذا تُضبط مرشحات الضوضاء بعناية بقدر ضبط الأنماط. عند قياسها على شجرة حقيقية من 6,000 ملف، خفّضت قواعد الكبت أدناه النتائج من 1,088 إلى 257 مع عدم فقدان الاسترجاع على مجموعة الاختبار:

  • مراجع التعليمات البرمجية المنقوطة. password: process.env.DB_PASS متغير، وليس قيمة. هذا الكبت الواحد يزيل معظم ضوضاء القواعد العامة في أشجار المصدر.
  • تعليقات الأنواع. def login(user: str, password: str) توقيع.
  • القيم التي تبدأ بعلامة ترقيم هي تعبير نمطي اقتطعت تعبيرًا في منتصفه، وليست بيانات اعتماد.
  • النثر يتطلب رقمًا أو رمزًا. بدونه، تطابق القاعدة نصًا إنجليزيًا عن بيانات الاعتماد — «يتم الإبلاغ عن بيانات اعتماد في عنوان URL وإزالتها» يُنتج «الإبلاغ». هذا ما علمته 99 إيجابية كاذبة على شجرة واحدة.
  • أدلة البناء والذاكرة المؤقتة (.wrangler، و.next، وsite-packages، وnode_modules، …) بالإضافة إلى الحزم المضغوطة وخرائط المصدر يتم تخطيها. النص المولّد آليًا لا ينتج سوى إيجابيات كاذبة مولّدة آليًا.

لا توجد عن قصد أي قاعدة محتوى https://user:pass@host بذيل فضفاض. النسخة الواضحة أطلقت 476 مرة على شجرة تطوير واحدة، لأن JSON المضغوط لا يحتوي على مسافات، والنمط انطلق من عنوان URL عبر علامات الاقتباس والفواصل حتى وجد @ غير ذي صلة بعد مئات الأحرف.


الاختبارات```bash

python tests/run_all.py

root@kitploit:~
اثنتا عشرة مجموعة اختبارات: الكشف على حصة اصطناعية (مقسّمة إلى "ما
تلتقطه ماسحات CI بالفعل"، و"الفجوة التي تستهدفها هذه الأداة"، و"الأفخاخ التي
يجب أن تبقى هادئة")، وسطر الأوامر، وترتيب اقتراحات القواعد، والاستقصاء
والجمع المقيّد (بما في ذلك قياس حد المعدل مقابل زمن الساعة الحقيقية)،
ومولّد PDF (يُعاد تحليله بالطريقة التي يقرؤه بها القارئ، لإثبات أن التنقيح وصل
إلى محتوى الصفحة)، ومستوردي gitleaks/trufflehog، وواجهة HTTP API بما فيها
كل الحراسات الأمنية، والتحليل الثابت لواجهة المستخدم، وقارئ الكتل للملفات
كبيرة الحجم (ليؤكد أن سرًا في الكتلة الأخيرة لا يزال يبلّغ عن رقم سطره
الحقيقي في الملف بأكمله).

للحصول على حصة للتجربة:```bash
sift demo C:\temp\demoshare

كل بيانات الاعتماد في تلك المجموعة مزيّفة.


التحقق

مستويان، لأنهما يحملان مخاطر مختلفة جدًا.

المجاميع الاختبارية مجانية ومفعّلة دائمًا. رموز ghp_ وnpm_ وATATT الخاصة بأتلاسيان وATCTT الخاصة بـ Bitbucket وglpat- القابلة للتوجيه في GitLab تحمل جميعها CRC32 فوق جسمها. إعادة حسابه تجيب دون اتصال عن ما كان يحتاج سابقًا إلى الإنترنت: هل هذا رمز حقيقي، أم المثال الذي لصقه شخص ما في ملف README؟ يتم وضع علامة على النتائج بـ checksum ok أو malformed في الطابور. المجموع الاختباري يُثبت الشكل، وليس الحياة - فقد يكون الرمز جيد التكوين قد أُلغي قبل عام.

التحقق المباشر معطّل حتى تقوم بتشغيله. يطلب sift validate من المورّد معرفة ما إذا كانت بيانات الاعتماد لا تزال تعمل. إنه أمر منفصل، وليس خيارًا على scan، ويجبرك على كتابة validate في موجه يعرض أسماء كل نقطة نهاية سيتصل بها. قواعد الأمان:

  • نقاط النهاية مكتوبة بشكل ثابت في sift/validate.py. لا يمكن لأي قاعدة - مدمجة أو مكتوبة من قبل المستخدم أو مستوردة من حزمة شخص آخر - أن توفّر عنوان URL. وبدون ذلك، سيكون استيراد حزمة قواعد كافيًا لإرسال كل بيانات اعتماد على المشاركة إلى عنوان يختاره مؤلف الحزمة.
  • ينتقل السر في ترويسة، وليس أبدًا في عنوان URL أو سلسلة استعلام، لذلك يبقى بعيدًا عن سجلات البروكسي وسجلات وصول المورّد.
  • لا يتم اتباع عمليات إعادة التوجيه. رقم 302 هو تعليمات لإرسال بيانات الاعتماد إلى مكان آخر.
  • يتم إرسال بيانات الاعتماد التي تجتاز المجموع الاختباري فقط، لذلك لا تغادر المزيفات الواضحة الجهاز أبدًا.
  • يرفض العمل مع مخزن --redact: إذا كانت القيم مخفية لأن قاعدة البيانات تغادر حدود الحادث، فإن إرسال النص الصريح هو بالضبط ما يتم الحذر منه.
  • تتم كتابة كل استدعاء في validation-log.json بجوار قاعدة بيانات النتائج - المورّد، نقطة النهاية، الوقت، النتيجة - حتى تتمكن المهمة من تحديد ما تم الاتصال به بدقة.

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

حاليًا GitHub وnpm وSlack وStripe. لا يزال trufflehog يتحقق من أكثر بكثير - قم بتشغيله وimport-findings للحصول على كليهما.


قيود معروفة

  • التحقق ضيق النطاق. تغطي المجاميع الاختبارية خمس عائلات من الرموز؛ بينما يغطي التحقق المباشر أربعة مزودين. يتحقق trufflehog من مئات - قم بتشغيله وimport-findings؛ تُرتَّب النتائج المؤكدة في الأعلى.
  • الحاويات المشفرة تُكتشف بالاسم فقط. يتم الإبلاغ عن .kdbx أو .pfx بالاسم؛ لا يحاول sift فتحها.
  • تُقرأ قواعد بيانات SQLite كجداول، وليس كبايتات. يتم اكتشافها من خلال الترويسة وليس الامتداد، وتُفتح للقراءة فقط وغير قابلة للتعديل حتى لا يُكتب أي شيء بجانب ملف يعتبر دليلًا. تُعاد تجميع جداول الإعدادات من نوع مفتاح/قيمة إلى name=value، وبدون ذلك تبقى الكلمة السرية وقيمتها في عمودين منفصلين ولا ترى أي قاعدة الزوج.
  • يتم الإبلاغ عن .7z و.rar والأرشيفات المتداخلة ولكن لا يتم استخراجها. تتم قراءة الصيغ القائمة على ZIP ورسائل .eml فقط من الداخل.
  • تُقرأ الملفات التي تتجاوز --max-size في كتل، ولا يتم تخزينها مؤقتًا. يتم فحصها (يتم العثور على سلسلة اتصال في ملف .bak بحجم 4 جيجابايت، في رقم سطره الحقيقي)، لكن ذاكرة التخزين المؤقت للنصوص تحتفظ فقط بما يتسع، لذا لا تغطيها إعادة الفحص المخزنة مؤقتًا التي تستغرق ثانية واحدة - تصل قاعدة جديدة إلى ملف كبير في الفحص الكامل التالي.
  • لا تعداد للمشاركات. وجّهه إلى مسار تملكه بالفعل. العثور على مشاركات مفتوحة هو مهمة أداة أخرى.
  • تخضع ملفات // (قبل 2007 وPDF) لتمريرة سلاسل نصية بدلاً من محلل حقيقي، لذا تكون نسبة الاسترجاع عليها أقل من صيغ OOXML.

الترخيص

Apache-2.0. انظر LICENSE.

تحتوي مجموعة اختبار الكشف (sift/selftest.py, tests/) على بيانات اعتماد صحيحة التنسيق ولكنها مزيّفة عن قصد؛ يتم كتم تنبيهات فحص الأسرار لتلك المسارات عبر .github/secret_scanning.yml.

تنزيل الأداة
العلمالتأثير
--tier 1|2|3قرص الاستدعاء. 1 = إشارة عالية، 2 = افتراضي، 3 = لا تفوّت شيئًا
--redactإخفاء القيم في المخزن والتصديرات. استخدمه إذا غادرت قاعدة البيانات حدود الحادث
--no-uiاملأ المخزن واخرج، للتشغيل عبر البرامج النصية
--no-browserشغّل خادم الواجهة دون فتح متصفح (مفيد عبر RDP)
--include/--exclude GLOBتضييق نطاق المسح
--no-archivesلا تفتح حاويات docx/xlsx/zip
--no-stringsلا تقم بتمرير فحص السلاسل على الملفات الثنائية
--no-largeتخطَّ الملفات الأكبر من --max-size بدلاً من قراءتها على شكل كتل
--jobs Nعمليات العامل (الافتراضي: تلقائي)
--max-size MBتخطَّ الملفات الأكبر من هذا (الافتراضي 25)
--port Nمنفذ الواجهة (الافتراضي 8973)
المفتاحالإجراء
j / kالنتيجة التالية / السابقة
↑ / ↓توسيع السياق لأعلى / لأسفل
c / fتأكيد / وضع علامة إيجابية كاذبة
xتبديل التحديد للفرز الجماعي
o / nفتح في VS Code عند السطر / فتح الملف في Notepad
rبناء قاعدة من النص المميز
yنسخ القيمة
/بحث
.doc
.xls
.pdf