
تحديد الأسرار المضمنة بشكل ثابت في النصوص المنظمة الثابتة

"طيوري الصغيرة في كل مكان، حتى في الشمال، يهمسون لي بأغرب القصص." - لورد فايرس
Whispers هي أداة تحليل كود ثابتة مصممة لتحليل صيغ بيانات شائعة متنوعة بحثًا عن بيانات اعتماد مكتوبة بشكل ثابت ووظائف خطرة. يمكن تشغيل Whispers من واجهة سطر الأوامر أو دمجها في خط أنابيب CI/CD الخاص بك.
تم تصميم Whispers ليكون محلل نص منظم، وليس محلل كود.
الصيغ الشائعة التالية مدعومة حاليًا:
يتم تحليل ملفات Python3 كأشجار AST بسبب دعم اللغة الأصلي.
يتم تحليل ملفات اللغات التالية كنص، والتحقق من أنماط تصريح وإسناد المتغيرات الشائعة:
pip3 install whispers
git clone https://github.com/Skyscanner/whispers
cd whispers
make install
whispers --help
whispers --info
whispers source/code/fileOrDir
whispers --config config.yml source/code/fileOrDir
whispers --output /tmp/secrets.yml source/code/fileOrDir
whispers --rules aws-id,aws-secret source/code/fileOrDir
whispers --severity BLOCKER,CRITICAL source/code/fileOrDir
whispers --exitcode 7 source/code/fileOrDir
from whispers.cli import parse_args
from whispers.core import run
src = "tests/fixtures"
configfile = "whispers/config.yml"
args = parse_args(["-c", configfile, src])
for secret in run(args):
print(secret)
هناك العديد من خيارات التكوين المتاحة في Whispers. من الممكن تضمين/استبعاد النتائج بناءً على مسار الملف أو المفتاح أو القيمة. يتم تفسير مواصفات مسار الملف كـ globs. تقبل المفاتيح والقيم التعبيرات العادية وعدة معاملات أخرى. يوجد ملف تكوين افتراضي مدمج سيتم استخدامه إذا لم تقدم ملفًا مخصصًا.
يجب أن يكون config.yml بالهيكل التالي:
include:
files:
- "**/*.yml"
exclude:
files:
- "**/test/**/*"
- "**/tests/**/*"
keys:
- ^foo
values:
- bar$
rules:
starks:
message: Whispers from the North
severity: CRITICAL
value:
regex: (Aria|Ned) Stark
ignorecase: True
أسرع طريقة لضبط الاكتشاف (أي: إزالة الإيجابيات الكاذبة والنتائج غير المرغوب فيها) هي نسخ ملف config.yml الافتراضي إلى ملف جديد، وتكييفه، ثم تمريره كوسيطة إلى Whispers.
whispers --config config.yml --rules starks src/file/or/dir
تحدد القواعد الأشياء الفعلية التي يجب استخراجها من أزواج المفتاح-القيمة. هناك العديد من القواعد الشائعة المضمنة، مثل مفاتيح AWS وكلمات المرور، ولكن الأداة مصممة بحيث يمكن توسيعها بسهولة بقواعد جديدة.
rules:rule-id: # اسم قاعدة فريد
description: قيم منسقة مثل رمز جلسة AWS
message: رمز جلسة AWS # سيظهر هذا التقرير هذه الرسالة
severity: BLOCKER # واحد من BLOCKER, CRITICAL, MAJOR, MINOR, INFO
key: # تحديد تنسيق المفتاح
regex: (aws.?session.?token)?
ignorecase: True # مطابقة غير حساسة لحالة الأحرف
value: # تحديد تنسيق القيمة
regex: ^(?=.*[a-z])(?=.*[A-Z])[A-Za-z0-9\+\/]{270,450}$
ignorecase: False # مطابقة حساسة لحالة الأحرف
minlen: 270 # القيمة على الأقل بهذا الطول
isBase64: True # القيمة مشفرة بـ base64
isAscii: False # القيمة هي بيانات ثنائية عند فك التشفير
isUri: False # القيمة ليست منسقة مثل URI
similar: 0.35 # أقصى تشابه مسموح به بين المفتاح والقيمة
# (1.0 يعني متطابق تمامًا)
يتم تنفيذ جميع وظائف التحليل عبر الإضافات. كل إضافة تطبق فئة بطريقة pairs() التي تمر عبر الملفات وتعيد أزواج المفتاح-القيمة التي سيتم فحصها بالقواعد.
class PluginName:
def pairs(self, file):
yield "key", "value"