
مسح قواعد الأكواد ومشاريع GCP للبحث عن بيانات اعتماد API المكشوفة
قم بمسح قواعد البيانات، مشاريع GCP، وخطوط CI لرصد بيانات اعتماد Google API المكشوفة — قبل استغلالها.
المشكلة: فعّلت Google بشكل رجعي الوصول إلى Gemini API على مفاتيح API الحالية (Maps، Places، إلخ) التي صُمّمت لتكون عامة ومضمنة في كود الطرف العميل. عندما يقوم أحد أعضاء فريقك بتمكين Gemini في نفس مشروع GCP، تصبح تلك المفاتيح العامة سابقًا مفتاح Gemini صامت — مما يعرض مشروعك لاستخدام غير مصرح به للذكاء الاصطناعي وحوادث فاتورة تتجاوز 80 ألف دولار (سياق).
ما يفعله keyguard:
keyguard scan — يجد سلاسل بيانات الاعتماد في ملفات المصدر والمحفوظات باستخدام تعابير منتظمة + كشف العشوائية (entropy)keyguard audit — يتصل بمشاريع GCP المباشرة ويضع علامات على مفاتيح API التي لديها حق الوصول إلى Gemini الآنkeyguard ci — يفحص سجلات GitHub Actions وCircleCI وGitLab CI والمتغيرات بحثًا عن بيانات اعتماد مسربةpip install keyguard-scan
أو استنساخ المشروع وتثبيته في وضع التطوير:
git clone https://github.com/arzaan789/keyguard.git
cd keyguard
pip install -e ".[dev]"
# مسح الدليل الحالي والمحفوظات
keyguard scan .
# تدقيق مشاريع GCP الحية
keyguard audit
# مسح منصات CI
keyguard ci
keyguard scanيقوم بمسح ملفات المصدر والمحفوظات بحثًا عن بيانات اعتماد مكشوفة باستخدام تعابير منتظمة + تصفية عشوائية شانون (Shannon entropy). يتم تجاهل العناصر النائبة منخفضة العشوائية مثل "REPLACE_ME" أو "XXXXXXXX" تلقائيًا.
# مسح دليل (ملفات + كامل المحفوظات)
keyguard scan .
# الملفات فقط، تخطي المحفوظات
keyguard scan . --no-git-history
# تصدير إلى JSON و SARIF
keyguard scan . --output json --output sarif --out-file report
# عرض قيم المفاتيح الفعلية (غير محجوبة)
keyguard scan . --no-redact
# استخدام ملف تكوين مخصص
keyguard scan . --config /path/to/.keyguard.toml
رموز الخروج: 0 = نظيف، 1 = نتائج، 2 = خطأ
keyguard auditيتصل بمشاريع GCP الحية عبر Cloud Resource Manager و Service Usage و API Keys APIs. يضع علامات على المفاتيح غير المقيدة (وصول Gemini الصامت) أو تلك التي تسمح صراحةً بـ generativelanguage.googleapis.com مع تمكين Gemini على المشروع.
يستخدم المصادقة بيانات الاعتماد الافتراضية للتطبيق افتراضيًا — قم بتشغيل gcloud auth application-default login أولاً.
# تدقيق جميع مشاريع GCP القابلة للوصول
keyguard audit
# تدقيق مشروع/مشاريع محددة
keyguard audit --project my-project-id --project another-project
# استخدام ملف مفتاح حساب الخدمة
keyguard audit --gcp-credentials /path/to/key.json
# تصدير نتائج JSON
keyguard audit --output json --out-file gcp-findings.json
النتائج:
CRITICAL — المفتاح ليس لديه قيود API + تم تمكين Gemini (سيناريو الترقية الصامتة Maps→Gemini)HIGH — المفتاح يسمح صراحةً بـ generativelanguage.googleapis.com (مقصود لكنه قد يكون مضمنًا في كود العميل)keyguard ciيقوم بمسح سجلات منصة CI والمتغيرات المخزنة بحثًا عن بيانات اعتماد مكشوفة. يدعم GitHub Actions وCircleCI وGitLab CI.
# مسح جميع المنصات المكونة
keyguard ci
# مسح منصة واحدة فقط
keyguard ci --platform github
# تضييق النطاق إلى مستودع معين
keyguard ci --repo my-org/api-service
# تصدير نتائج JSON
keyguard ci --output json --out-file ci-findings.json
ما يتم مسحه:
keyguard watchيعيد مسح الملفات عند كل تغيير. مفيد أثناء التطوير.
keyguard watch .
keyguard rules listيعرض جميع قواعد الكشف النشطة.
keyguard rules list
keyguard config checkيتحقق من صحة ملف تكوين .keyguard.toml.
keyguard config check
keyguard config check --config /path/to/.keyguard.toml
أنشئ ملف .keyguard.toml في جذر مشروعك:
[scan]
paths = ["."]
exclude = ["tests/fixtures/", "**/*.example"]
scan_git_history = true
[output]
format = ["terminal", "json"]
redact = true
[notify]
slack_webhook = "https://hooks.slack.com/services/..."
[rules]
disabled = []
# مصادقة ونطاق منصة CI
[ci]
github_token = "ghp_xxxxxxxxxxxxxxxxxxxx"
circleci_token = "CCIPAT_xxxxxxxxxxxxxxxx"
gitlab_token = "glpat-xxxxxxxxxxxxxxxxxxxx"
gitlab_url = "https://gitlab.com" # تجاوز لـ GitLab ذاتي الاستضافة
max_runs = 10 # عدد مرات التشغيل/الأنابيب الأخيرة لكل مستودع
[ci.github]
orgs = ["my-org"]
repos = ["my-org/specific-repo"] # اختياري: مسح مستودعات محددة فقط
[ci.circleci]
orgs = ["my-org"]
[ci.gitlab]
groups = ["my-group"]
يستخدم Keyguard طريقة تعابير منتظمة + عشوائية شانون. تحدد كل قاعدة:
AIza[0-9A-Za-z\-_]{35} لمفاتيح Google API)تكتشف القواعد المضمنة ما يلي:
| معرف القاعدة | ما تكتشفه |
|---|---|
google-api-key | مفاتيح Google API (AIza...) — بما في ذلك مفاتيح Maps التي مُنحت حق الوصول إلى Gemini بصمت |
gcp-service-account-key | مفاتيح RSA الخاصة لحسابات الخدمة في GCP |
google-oauth-client-secret | أسرار عميل Google OAuth2 (GOCSPX-...) |
يمكنك إضافة قواعد مخصصة في .keyguard.toml:
[[rules.extra]]
id = "my-internal-token"
description = "رمز الخدمة الداخلي"
pattern = "tok-[0-9a-f]{32}"
entropy_min = 3.5
severity = "high"
tags = ["internal"]
name: keyguard scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # المحفوظات الكاملة لفحص git
- run: pip install keyguard-scan
- run: keyguard scan .
# .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: keyguard
name: keyguard credential scan
entry: keyguard scan --no-git-history
language: system
pass_filenames: false
docker run --rm -v $(pwd):/repo ghcr.io/arzaan789/keyguard scan /repo
طرفية (افتراضي) — جدول ملون مجمّع حسب الخطورة.
JSON — مصفوفة نتائج قابلة للقراءة آليًا:
keyguard scan . --output json --out-file findings.json
SARIF — يتكامل مع علامة التبويب الأمنية في GitHub وأدوات SAST الأخرى:
keyguard scan . --output sarif --out-file findings.sarif
Slack webhook — ينشر ملخصًا عند اكتشاف نتائج:
[notify]
slack_webhook = "https://hooks.slack.com/services/..."
git clone https://github.com/arzaan789/keyguard.git
cd keyguard
pip install -e ".[dev]"
pytest
143 اختبارًا، 0 فشل.
هيكل المشروع:
keyguard/
scanner/ # ماسحات الملفات + المحفوظات
engine/ # كشف التعابير المنتظمة + العشوائية (قواعد، مطابق)
output/ # إخراج طرفي، JSON/SARIF، webhook
auditor/ # عميل GCP API + منطق التدقيق
ci/ # ماسحات GitHub Actions وCircleCI وGitLab CI
cli.py # نقطة دخول Click CLI
config.py # محمّل .keyguard.toml
MIT