
إطار عمل بايثوني لنمذجة التهديدات
غالبًا ما يأتي نمذجة التهديدات التقليدية متأخرًا عن الحاجة، أو لا يأتي أحيانًا على الإطلاق. بالإضافة إلى ذلك، يمكن أن يكون إنشاء تدفقات البيانات والتقارير يدويًا مستهلكًا للوقت للغاية. الهدف من pytm هو نقل نمذجة التهديدات إلى اليسار، مما يجعلها أكثر أتمتة وتركيزًا على المطور.
بناءً على مدخلاتك وتعريف التصميم المعماري، يمكن لـ pytm إنشاء العناصر التالية تلقائيًا:
tm.py هو نموذج مثال. يمكنك تشغيله لإنشاء ملفات التقرير وصورة المخطط التي يشير إليها:
mkdir -p tm
./tm.py --report docs/basic_template.md | pandoc -f markdown -t html > tm/report.html
./tm.py --dfd | dot -Tpng -o tm/dfd.png
./tm.py --seq | java -Djava.awt.headless=true -jar $PLANTUML_PATH -tpng -pipe > tm/seq.png
يوجد أيضًا مثال Makefile يغلّف كل هذه في أهداف يمكن مشاركتها بسهولة لعدة نماذج. إذا كان لديك GNU make مثبتًا (متوفر افتراضيًا على توزيعات Linux ولكن ليس على OSX)، فما عليك سوى تشغيل:
make MODEL=the_name_of_your_model_minus_.py
يجب أن يكون لديك plantuml.jar في نفس دليل النموذج الخاص بك، أو قم بتعيين PLANTUML_PATH.
لتجنب تثبيت جميع التبعيات، مثل pandoc أو Java، يمكن تشغيل البرنامج النصي داخل حاوية:
# do this only once
export USE_DOCKER=true
make image
# call this after every change in your model
make
لتبسيط استخدام pytm، يمكن عزل تبعيات المضيف بالكامل
باستخدام Devbox. عادةً ما يكون هذا
أقل تكلفة وأكثر ملاءمة كبديل لنهج حاوية OCI.
curl -fsSL https://get.jetify.com/devbox | bashdevbox version update~/.config/nix/nix.conf: access-tokens = github.com=YOUR_TOKEN_HEREdevbox.json الخاص بالمشروع: devbox shellpython في الطرفية باستخدام الأمر which python. يجب أن يكون الناتج هو المسار التالي: .devbox/nix/profile/default/bin/pythonsample.png: ./tm.py --dfd | dot -Tpng -o sample.pngexit"لكنني ظننت أننا انتهينا من مسألة 'كتابة الكود' هذه!" - هذه النسخة مخصصة لأولئك منا الذين يستمتعون بالحديث المفرط مع مساعدي الذكاء الاصطناعي: اطّلع على https://github.com/izar/tm_skills لبعض الطرق لإضافة OWASP pytm إلى مساعد البرمجة الخاص بك (ستظل بحاجة إلى تثبيت يعمل من pytm!).
جميع الوسائط المتاحة:
usage: tm.py [-h] [--debug] [--dfd] [--report REPORT] [--exclude EXCLUDE]
[--seq] [--list] [--colormap] [--describe DESCRIBE]
[--list-elements] [--json JSON] [--levels LEVELS [LEVELS ...]]
[--stale_days STALE_DAYS]
options:
-h, --help show this help message and exit
--debug print debug messages
--dfd output DFD
--report REPORT output report using the named template file (sample
template file is under docs/basic_template.md)
--exclude EXCLUDE specify threat IDs to be ignored
--seq output sequential diagram
--list list all available threats
--colormap color the risk in the diagram
--describe DESCRIBE describe the properties available for a given element
--list-elements list all elements which can be part of a threat model
--json JSON output a JSON file
--levels LEVELS [LEVELS ...]
Select levels to be drawn in the threat model (int
separated by comma).
--stale_days STALE_DAYS
checks if the delta between the TM script and the code
described by it is bigger than the specified value in
days
تسعى وسيطة stale_days إلى تحديد مدى التباعد بالأيام بين نص النموذج (الذي تكتبه) والكود الذي ينفّذ النظام المُنمذَج. من الناحية المثالية، ينبغي أن يكونا متقاربين جدًا في معظم حالات نظام قيد التطوير النشط. يمكنك تشغيل هذا بشكل دوري لقياس نبض مشروعك و"حداثة" نموذج التهديد الخاص بك.
العناصر المتاحة حاليًا هي: TM، وElement، وServer، وExternalEntity، وDatastore، وActor، وProcess، وDataflow، وBoundary، وLambda، وLLM، وAgent.
يمكن سرد الخصائص المتاحة لعنصر ما باستخدام --describe متبوعًا باسم العنصر: