
खतरे के मॉडलिंग के लिए एक पायथोनिक ढांचा
पारंपरिक थ्रेट मॉडलिंग अक्सर बहुत देर से शुरू होती है, या कभी-कभी बिल्कुल भी नहीं होती। इसके अलावा, मैन्युअल रूप से डेटा फ़्लो और रिपोर्ट बनाना बेहद समय लेने वाला हो सकता है। 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 फ़ाइल में अपना GitHub एक्सेस टोकन सेट करें: access-tokens = github.com=YOUR_TOKEN_HEREdevbox.json फ़ाइल में निर्दिष्ट सभी टूल्स और पैकेज शामिल हों: devbox shellpython टाइप करने पर उपयोग किए जाने वाले Python executable का पूरा पथ which python कमांड का उपयोग करके प्रदर्शित करें। आउटपुट निम्नलिखित पथ होना चाहिए: .devbox/nix/profile/default/bin/pythonsample.png नामक PNG फ़ाइल के रूप में एक DFD उत्पन्न करना चाहिए: ./tm.py --dfd | dot -Tpng -o sample.pngexit"लेकिन मुझे तो लगा था कि हम इस 'कोड लिखने' वाले काम से निपट चुके हैं!" - यह उन लोगों के लिए है जो AI सहायकों से बहुत ज़्यादा बातें करने का आनंद ले रहे हैं: अपने कोडिंग सहायक में OWASP pytm जोड़ने के कुछ तरीकों के लिए https://github.com/izar/tm_skills देखें (आपको अभी भी 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 के बाद तत्व का नाम देकर सूचीबद्ध किया जा सकता है: