
فرز الكشف عن بيانات الاعتماد والبيانات الحساسة في مشاركات الملفات
فرز حالات تعرّض بيانات الاعتماد والبيانات الحساسة في مشاركات الملفات.
عندما يظهر مشارَك مفتوح، السؤال ليس أبدًا "هل يحتوي هذا المستودع على مفتاح مسرَّب". بل هو "ما الذي تعرّض للتو، وما الذي يجب عليّ تدويره قبل نهاية يوم العمل؟" صُمم 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
المسح في مكانه يعمل أيضًا. جرّبه أولاً على مشاركة تحتوي على بيانات اعتماد مزيّفة:```bash
sift demo C:\temp\demoshare
sift.cmd هو مُشغِّل يعمل من أي مجلد. لكتابة sift بدلاً من
المسار الكامل، أضِف C:\Dev\sift إلى PATH:```bash
setx PATH "%PATH%;C:\Dev\sift"
بالنسبة لجهاز لا يحتوي على 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.
| العلم | التأثير |
|---|---|
--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) |
تذهب النتائج إلى مجلد لكل هدف تحت %LOCALAPPDATA%\sift\، وليس إلى دليل العمل أبدًا — تحتوي قاعدة البيانات على بيانات اعتماد نصية واضحة، وتشغيل الأداة من دليلك الرئيسي يجب ألا يُسقط واحدة هناك بصمت. كل مشاركة لها مخزنها الخاص، لذلك لا تتشارك مهمتان أبدًا في قائمة انتظار الفرز. sift ui بدون وسائط يعيد فتح الأحدث؛ --data DIR يتجاوزه.
القواعد المخصصة عامة، في %LOCALAPPDATA%\sift\user-rules.json، لذا فإن النمط الذي تكتبه أثناء مهمة يساعد في المشاركة التالية التي تنظر إليها.
كلاهما في ترويسة الواجهة، بجانب مربع المسار، وعلى سطر الأوامر.