
إطار عمل بايثوني لنمذجة التهديدات
غالبًا ما يأتي نمذجة التهديدات التقليدية متأخرًا عن الحاجة، أو لا يأتي أحيانًا على الإطلاق. بالإضافة إلى ذلك، قد يستغرق إنشاء تدفقات البيانات والتقارير يدويًا وقتًا طويلاً للغاية. الهدف من 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 متبوعًا باسم العنصر: