العودة إلى التحديثات
New releaseAug 1, 2026

threatcl v0.6.5

توثيق نماذج التهديدات الخاصة بك باستخدام HCL

مشاركة

threatcl

نمذجة التهديدات باستخدام HCL

ماذا حدث لـ hcltm؟

تمت إعادة تسمية hcltm إلى threatcl. مرحبًا!

نظرة عامة

[!TIP] هل تريد قراءة الوثائق الجديدة؟ تفضل بزيارة threatcl.dev

هناك العديد من الطرق المختلفة التي يمكن بها توثيق نموذج التهديد. بدءًا من ملف نصي بسيط، وصولاً إلى مستندات Word أكثر تفصيلاً، وحتى نماذج التهديدات المدمجة بالكامل في حل مركزي. من بين أكثر السمات قيمة لنموذج التهديد هي القدرة على توثيق التهديدات بوضوح، والقدرة على إحداث تغيير قيّم.

يهدف threatcl إلى توفير نهج DevOps-first لتوثيق نموذج تهديد النظام من خلال التركيز على الأهداف التالية:

  • تنسيق ملف نصي بسيط
  • تجربة مستخدم بسيطة تعتمد على سطر الأوامر
  • التكامل مع أنظمة التحكم في الإصدارات (VCS)

هذا المستودع هو موطن برنامج threatcl لواجهة سطر الأوامر. تعتمد مواصفات threatcl spec على HCL2، لغة تكوين HashiCorp، التي تهدف إلى أن تكون "ممتعة في القراءة والكتابة للبشر، وصيغة قائمة على JSON يسهل على الآلات إنشاؤها وتحليلها". تعيش مواصفات threatcl على github.com/threatcl/spec. الجمع بين برنامج threatcl ومواصفات threatcl يسمح للممارسين بتعريف نموذج تهديد النظام بلغة HCL، على سبيل المثال:

threatmodel "my-threat-model" {
  description = "My threat model"

  author "coolguy" {
    email = ["[email protected]", "[email protected]"]
  }

  information "Stakeholders" {
    description = <<-DESCRIPTION
      This is a description of the stakeholders
    DESCRIPTION
  }

  threat {
    id = "Inform the driver of account status"
    description = "An attacker could possibly determine if an account exists"
    risk = "Low"
    status = "Recommend"
    control = "Implement an authentication mechanism that does not reveal account information"
    stride = "Information Disclosure"
  }

  component "api-gateway" {
    description = "This is the API Gateway"
    threat {
      id = "Authenticate requests"
      description = "An attacker may be able to access the API"
      risk = "High"
      status = "Mitigated"
      control = "All requests to the API must have a valid authorization token"
      stride = "Spoofing"
    }
    data-flow "read-user" {
      description = "Read user data"
      source = "api-gateway"
      destination = "user-db"
      protocol = "tcp"
      threat {
        id = "TLS"
        description = "An attacker could read data in transit"
        risk = "High"
        status = "Mitigated"
        control = "All data in transit must use TLS"
        stride = "Tampering"
      }
    }
  }
}
threatcl plan
``````hcl
threatmodel "Tower of London" {
  description = "A historic castle"
  author = "@xntrik"

  attributes {
    new_initiative = "true"
    internet_facing = "true"
    initiative_size = "Small"
  }

  information_asset "crown jewels" {
    description = "including the imperial state crown"
    information_classification = "Confidential"
  }

  usecase {
    description = "The Queen can fetch the crown"
  }

  third_party_dependency "community watch" {
    description = "The community watch helps guard the premise"
    uptime_dependency = "degraded"
  }

  threat "Crown theft" {
    description = "Someone who isn't the Queen steals the crown"
    impacts = ["Confidentiality"]

    control "Guards" {
      description = "Trained guards patrol tower"
      risk_reduction = 75
    }
  }

  data_flow_diagram_v2 "dfd name" {
    // ... see below for more information
  }

}

انظر مخطط تدفق البيانات للحصول على مزيد من المعلومات حول كيفية إنشاء مخططات تدفق البيانات التي يمكن تحويلها إلى صور PNG تلقائيًا.

لرؤية مثال على كيفية الرجوع إلى مكتبات التحكم المحددة مسبقًا لـ ضوابط OWASP الاستباقية وقائمة أمان AWS انظر examples/tm3.hcl. لدينا أيضًا ضوابط MITRE ATT&CK هنا.

يمكنك أيضًا تضمين نموذج تهديد خارجي في نموذجك الخاص، للإشارة إلى جميع معلوماته واستخدامها. يمكنك الاطلاع على examples/including-example/corp-app.hcl كمثال.

لرؤية وصف كامل للمواصفات، انظر هنا أو قم بتشغيل:```bash threatcl generate boilerplate

`threatcl` سيعالج أيضًا ملفات JSON، لكن التحذير الوحيد هو أن وحدات الاستيراد والمتغيرات لن تعمل. يمكنك رؤية [examples/tm1.json](https://github.com/threatcl/threatcl/blob/HEAD/examples/tm1.json) كمثال.

## لماذا HCL؟

HCL هي لغة التهيئة الأساسية المستخدمة في منتجات HashiCorp، وبشكل خاص [Terraform](https://www.terraform.io/) - برنامج البنية التحتية كرمز مفتوح المصدر. عملت في HashiCorp لفترة وتعلقت باللغة حقًا، بالإضافة إلى أنه إذا كان مهندسو DevOps والبرمجيات يستخدمون اللغة، فإن تبسيط كيفية توثيق نماذج التهديدات يتماشى مع أهداف `threatcl`.

يمكنك استخدام `threatcl` مع JSON، لكنك تفقد بعض الميزات. للمزيد، راجع مجلد [examples/](https://github.com/threatcl/threatcl/blob/HEAD/examples/).

## لماذا لا توثقها ببساطة في MD؟

أحببت فكرة استخدام تنسيق يمكن التفاعل معه برمجيًا.

## الشكر والمراجع

إحدى ميزات `threatcl` هي التوليد التلقائي لـ [رسوم تدفق البيانات](#data-flow-diagram) من ملفات HCL. هذا يستخدم حزمة [go-dfd](https://github.com/marqeta/go-dfd) من Marqeta و [Blake Hitchcock](https://github.com/rbhitchcock). تأكد من الاطلاع على مقالهم [Threat models at the speed of DevOps](https://community.marqeta.com/t5/engineering-blogs/threat-models-at-the-speed-of-devops/ba-p/40).

بالإضافة إلى ذلك، أود أن أتقدم بالشكر إلى [Jamie Finnigan](https://twitter.com/chair6) و [Talha Tariq](https://twitter.com/0xtbt) في HashiCorp للسماح لي بمواصلة العمل على هذه الأداة مفتوحة المصدر حتى بعد أن انتهيت من عملي مع HashiCorp.

وأيضًا شكر لأعضاء IriusRisk على [مواصفات OpenThreatModel](https://github.com/iriusrisk/OpenThreatModel).

# threatcl cli

## التثبيت

قم بتنزيل أحدث إصدار من [releases](https://github.com/threatcl/threatcl/releases) وانقل الملف الثنائي `threatcl` إلى مسار PATH الخاص بك.

## التثبيت باستخدام Homebrew

قم بتثبيت `threatcl` باستخدام [Homebrew](https://brew.sh/) — الصيغة موجودة في homebrew-core:```bash
brew install threatcl

التشغيل باستخدام Docker```bash

docker run --rm -it ghcr.io/threatcl/threatcl:latest

## التحقق من الإصدارات (أصل البناء)

كل إصدار موسوم يأتي مع [SLSA](https://slsa.dev) لأصل البناء — شهادات موقعة من Sigstore، بدون مفاتيح، تم إنشاؤها بواسطة خط أنابيب إصدار GitHub Actions (GitHub OIDC ← Fulcio، بدون مفاتيح توقيع). يمكنك التحقق من أن ملفًا ثنائيًا أو صورة الحاوية قد بُنيت بالفعل من سير عمل الإصدار لهذا المستودع باستخدام [GitHub CLI](https://cli.github.com) (`gh attestation verify` — لا حاجة لأدوات إضافية أو مفاتيح موثوقة لإدارتها).

تحقق من أرشيف تم تنزيله (أو ملف `SHA256SUMS`):```bash
gh attestation verify threatcl_<version>_<os>_<arch>.tar.gz --repo threatcl/threatcl

تحقق من صورة الحاوية (يتم حل العلامة إلى بصمتها الرقمية تلقائيًا):```bash gh attestation verify oci://ghcr.io/threatcl/threatcl: --repo threatcl/threatcl

لتثبيت الصورة المحددة التي تقوم بتشغيلها، قم بحل الملخص بنفسك وتحقق (واسحب) من خلال الملخص:```bash
digest=$(docker buildx imagetools inspect ghcr.io/threatcl/threatcl:<version> --format '{{ .Manifest.Digest }}')
gh attestation verify oci://ghcr.io/threatcl/threatcl@${digest} --repo threatcl/threatcl

راجع docs/SLSA.md للحصول على وضع سلسلة التوريد الكامل.

التشغيل باستخدام GitHub Actions

يمكن دمج threatcl مباشرة في مستودعات GitHub الخاصة بك باستخدام https://github.com/threatcl/threatcl-action. هذه إحدى الطرق المثالية لإدارة نماذج التهديد الخاصة بك، وتساعد في تحقيق هدف التكامل مع أنظمة التحكم في الإصدار.

البناء من المصدر

  1. استنساخ هذا المستودع.
  2. الانتقال إلى الدليل، threatcl
  3. make bootstrap
  4. make build

لمزيد من المساعدة حول المساهمة في threatcl، يرجى الاطلاع على CHANGELOG.md.

الاستخدام

للحصول على مساعدة حول أي أوامر فرعية، استخدم العلم -h.```bash $ threatcl Usage: threatcl [--version] [--help] []

Available commands are: cloud Interact with ThreatCL Cloud services dashboard Generate markdown files from existing HCL threatmodel file(s) dfd Generate Data Flow Diagram PNG or DOT files from existing HCL threatmodel file(s) export Export threat models into other formats generate Generate an HCL Threat Model list List Threatmodels found in HCL file(s) mcp Model Context Protocol (MCP) server for threatcl mermaid Output raw mermaid source from 'mermaid' blocks in existing HCL threatmodel file(s) query Execute GraphQL queries against threat model data server Start a GraphQL API server for threat models terraform Parse output from 'terraform show -json' validate Validate existing HCL Threatmodel file(s) view View existing HCL Threatmodel file(s)

## (اختياري) ملف التهيئة

معظم أوامر `threatcl` تحتوي على علامة `-config` تتيح لك تحديد ملف `config.hcl`. يمكن استخدام HCL داخل هذا الملف لتجاوز بعض السمات الافتراضية لـ `threatcl`. هذه السمات مذكورة أدناه:

- **أحجام المبادرات** - القيم الافتراضية هي "Undefined", "Small", "Medium", "Large"
- **حجم المبادرة الافتراضي** - القيمة الافتراضية هي "Undefined
- **تصنيفات المعلومات** - القيم الافتراضية هي "Restricted", "Confidential", "Public"
- **تصنيف المعلومات الافتراضي** - القيمة الافتراضية هي "Confidential"
- **أنواع التأثير** - القيم الافتراضية هي "Confidentiality", "Integrity", "Availability"
- **عناصر STRIDE** - القيم الافتراضية هي "Spoofing", "Tampering", "Info Disclosure", "Denial Of Service", "Elevation Of Privilege"
- **تصنيفات الاعتماد على وقت التشغيل** - القيم الافتراضية هي "none", "degraded", "hard", "operational"
- **تصنيف الاعتماد على وقت التشغيل الافتراضي** - القيمة الافتراضية هي "none"

على سبيل المثال:```hcl
initiative_sizes = ["S", "M", "L"]
default_initiative_size = "M"
info_classifications = ["1", "2"]
default_info_classification = "1"
impact_types = ["big", "small"]
strides = ["S", "T"]
uptime_dep_classifications = ["N", "D"]
default_uptime_dep_classification = "N"

إذا قمت بتعديل هذه السمات، فستحتاج إلى تذكر توفير ملف التكوين للعمليات الأخرى، حيث قد يؤثر ذلك على التحقق أو إنشاء لوحة التحكم.

أوامر السحابة

تفضل بزيارة https://threatcl.dev/cloud/overview/ لقراءة المزيد حول الأوامر الفرعية cloud.

القائمة والعرض

يمكن استخدام الأمرين threatcl list و threatcl view لسرد وعرض البيانات من ملفات HCL الخاصة بمواصفات threatcl.```bash $ threatcl list examples/*

File Threatmodel Author

1 examples/tm1.hcl Tower of London @xntrik 2 examples/tm1.hcl Fort Knox @xntrik 3 examples/tm2.hcl Modelly model @xntrik

## التحقق

يُستخدم الأمر `threatcl validate` للتحقق من ملف HCL لمواصفات `threatcl`.```bash
$ threatcl validate examples/*
Validated 3 threatmodels in 3 files

الثوابت

يمكن لـ threatcl validate أيضًا فرض ثوابت على مستوى المؤسسة — قواعد يتم فحصها آليًا مثل "لا ينبغي أن تكون نقاط النهاية العامة غير موثقة" أو "يجب أن توثق جميع الميزات المواجهة للإنترنت سجلات التدقيق" — ضد كل نموذج تهديد تم التحقق منه.```bash $ threatcl validate -invariants=invariants.hcl ./models/ Validated 4 threatmodels in 3 files Invariant violation [error] 'threats_have_implemented_controls': threat 'Credential theft' in threatmodel 'Payments' (models/payments.hcl): Every threat must have at least one implemented control Checked 3 invariants against 4 threatmodels: 1 errors, 0 warnings, 1 exemptions

تعيش الثوابت (Invariants) في ملف HCL خاص بها، وتستهدف مجموعة محددة (التهديدات، الضوابط، عمليات DFD، التدفقات، ...)، وتعبر عن شرطها كتعبير HCL أصلي. وهي تدعم مستويات الخطورة `error`/`warning` والإعفاءات لكل نموذج مع مبررات. انظر [docs/invariants.md](https://github.com/threatcl/threatcl/blob/HEAD/docs/invariants.md).

## التصدير

يُستخدم الأمر `threatcl export` لتصدير نموذج تهديد (أو نماذج) `threatcl` إلى تمثيل JSON الأصلي (افتراضيًا)، أو إلى تمثيل [OTM](https://github.com/iriusrisk/OpenThreatModel) بصيغة json، أو حتى العودة إلى صيغة `hcl` (وهو مفيد لإخراج HCL جديد من نماذج التهديد الديناميكية). يمكنك أيضًا حفظها مباشرة في ملف باستخدام العلامة `-output`.```bash
$ threatcl export -format=otm examples/tm1.hcl
[{"assets":[{"description":"including the imperial state crown","id":"crown-jewels","name":"crown jewels","risk":{"availability":0,"confidentiality":0,"integrity":0}}],"mitigations":[{"attributes":{"implementation_notes":"They are trained to be guards as well","implemented":true},"description":"Lots of guards patrol the area","id":"lots-of-guards","name":"Lots of Guards","riskReduction":80}],"otmVersion":"0.2.0","project":{"attributes":{"initiative_size":"Small","internet_facing":true,"network_segment":"dmz","new_initiative":true},"description":"A historic castle","id":"tower-of-london","name":"Tower of London","owner":"@xntrik"},"threats":[{"categories":["Confidentiality"],"description":"Someone who isn't the Queen steals the crown","id":"threat-1","name":"Threat 1","risk":{"impact":0,"likelihood":null}}]},{"assets":[{"description":"Lots of gold","id":"gold","name":"Gold","risk":{"availability":0,"confidentiality":0,"integrity":0}}],"mitigations":[{"attributes":{"implemented":true},"description":"A large wall surrounds the fort","id":"big-wall","name":"Big Wall","riskReduction":80}],"otmVersion":"0.2.0","project":{"attributes":{"initiative_size":"Small","internet_facing":true,"new_initiative":false},"description":"A .. fort?","id":"fort-knox","name":"Fort Knox","owner":"@xntrik"},"threats":[{"categories":["Confidentiality"],"description":"Someone steals the gold","id":"threat-1","name":"Threat 1","risk":{"impact":0,"likelihood":null}}]}]

Generate

يتم استخدام الأمر threatcl generate إما لإخراج ملف HCL عام boilerplate لمواصفات threatcl، أو لطرح أسئلة على المستخدم بشكل تفاعلي ثم إخراج ملف HCL لمواصفات threatcl.

Generate Interactive

انظر المثال التالي لـ:```bash threatcl generate interactive

<p align="center">
  <img width="600" src="https://xntrik.wtf/hcltm.svg" />
</p>

### إنشاء محرر تفاعلي

إذا كنت تفضل العمل مباشرة في `$EDITOR`، فقم بتشغيل:```bash
threatcl generate interactive editor

سيفتح هذا محرر النصوص الخاص بك مع نموذج تهديد HCL أساسي. إذا كنت ترغب في التحقق من صحة النموذج بعد إنشائه، فاستخدم العلامة -validate.

MCP

يكشف الأمر threatcl mcp عن خادم MCP محلي بحيث يمكنك التفاعل مع ملفات threatcl hcl عبر مضيف MCP، على سبيل المثال تطبيقات الذكاء الاصطناعي/LLM مثل Claude Desktop وCursor أو أي تطبيقات أخرى تدعم MCP.

يأخذ الأمر وسيطة واحدة اختيارية -dir=<path> تسمح لأدوات MCP الإضافية بالتفاعل مع الملفات داخل هذا المسار. بدون هذا الإعداد، يمكن لأدوات MCP التفاعل مع السلاسل النصية، ولكنها ستعتمد على آليات أخرى داخل مضيف MCP للتفاعل مع نظام الملفات الأساسي.

من الإنصاف القول إن هذه الوظيفة لا تزال في مرحلة تجريبية إلى حد كبير في الوقت الحالي.

LSP (Language Server)

يقوم الأمر threatcl lsp بتشغيل خادم بروتوكول خادم اللغة عبر stdio، مما يمنح المحررات التي تدعم LSP تشخيصات حية وإكمالًا تلقائيًا وتمريرًا ورموز المستندات وتنسيقًا لنماذج تهديدات threatcl HCL.

يتم تشغيله بواسطة عميل LSP الخاص بمحرر النصوص بدلاً من تشغيله يدويًا. نظرًا لأن ملفات threatcl تشترك في الامتداد .hcl مع Terraform ولهجات HCL الأخرى، فإن المطابقة على *.tm.hcl (أو تحديد نطاق العميل إلى مساحة عمل نموذج التهديد الخاص بك) يتجنب التعارض مع خادم لغة Terraform.

انظر docs/lsp.md لتوصيلات المحرر (Neovim، Helix، VS Code، Zed) والقيود الحالية.

Server (GraphQL API)

يبدأ الأمر threatcl server خادم GraphQL API الذي يعرض نماذج التهديدات الخاصة بك عبر HTTP للاستعلام والتكامل البرمجي.

Basic Usage```bash

Start the server

$ threatcl server -dir ./examples

With file watching for auto-reload

$ threatcl server -dir ./examples -watch

Custom port

$ threatcl server -dir ./examples -port 3000

انتقل إلى `http://localhost:8080` للوصول إلى واجهة GraphQL Playground التفاعلية.

### مثال على الاستعلام```graphql
query {
  stats {
    totalThreatModels
    totalThreats
    implementedControls
  }

  threatModels(filter: { internetFacing: true }) {
    name
    threats {
      description
      controls {
        name
        implemented
      }
    }
  }
}

الوثائق

للحصول على وثائق API كاملة، مرجع المخطط، الاستعلامات المتقدمة، وأمثلة التكامل، انظر:

الاستعلام (GraphQL CLI)

يقوم الأمر threatcl query بتنفيذ استعلامات GraphQL مباشرة من سطر الأوامر دون تشغيل خادم. هذا مثالي للأتمتة، خطوط أنابيب CI/CD، وكتابة السكريبتات في الشل.

الاستخدام الأساسي```bash

Get statistics

$ threatcl query -dir ./examples -query '{ stats { totalThreats } }'

Query from file

$ threatcl query -dir ./examples -file queries/get-stats.graphql

Use in scripts

$ THREATS=$(threatcl query -dir ./examples
-query '{ stats { totalThreats } }'
-output compact | jq -r '.data.stats.totalThreats') $ echo "Found $THREATS threats"

### صيغ الإخراج

- `pretty` (افتراضي): JSON منسق مع مسافة بادئة
- `json`: نفس pretty
- `compact`: JSON في سطر واحد للبرمجة النصية

### استعلام مع متغيرات```bash
$ threatcl query -dir ./examples \
    -query 'query($author: String) { threatModels(filter: {author: $author}) { name } }' \
    -vars '{"author": "John Doe"}'

CI/CD مثال```bash

#!/bin/bash

Check if all controls are implemented before deployment

UNIMPLEMENTED=$(threatcl query -dir ./threatmodels
-query '{ stats { totalControls implementedControls } }'
-output compact | jq -r '.data.stats.totalControls - .data.stats.implementedControls')

if [ "$UNIMPLEMENTED" -gt 0 ]; then echo "ERROR: $UNIMPLEMENTED controls are not yet implemented" exit 1 fi

echo "All controls implemented, proceeding with deployment"

اطّلع على [docs/graphql-api.md](https://github.com/threatcl/threatcl/blob/HEAD/docs/graphql-api.md) للاستعلامات المتاحة ومخطط GraphQL.

## لوحة التحكم

يقوم الأمر `threatcl dashboard` بأخذ ملفات HCL الخاصة بمواصفات `threatcl`، ويقوم بتوليد عدد من ملفات markdown و png، ووضعها في مجلد محدد.```bash
$ threatcl dashboard -overwrite -outdir=dashboard-example examples/*
Created the 'dashboard-example' directory
Writing dashboard markdown files to 'dashboard-example' and overwriting existing files
Successfully wrote to 'dashboard-example/tm1-toweroflondon.md'
Successfully wrote to 'dashboard-example/tm1-fortknox.md'
Successfully wrote to 'dashboard-example/tm2-modellymodel.png'
Successfully wrote to 'dashboard-example/tm2-modellymodel.md'
Successfully wrote to 'dashboard-example/dashboard.md'

قوالب ماركداون مخصصة

يمكن لأمر threatcl dashboard أيضًا أن يأخذ علامات اختيارية لتحديد قوالب مخصصة (وفقًا لـ text/template الخاص بلغة Go).

لتحديد ملف قالب لوحة التحكم، استخدم العلامة -dashboard-template. للحصول على مثال، انظر dashboard-template.tpl.

لتحديد ملف قالب نموذج التهديد، استخدم العلامة -threatmodel-template. للحصول على مثال، انظر threatmodel-template.tpl.

اسم ملف مخصص لملف فهرس لوحة التحكم

يمكن لأمر threatcl dashboard أيضًا أن يأخذ علامة اختيارية لتحديد اسم ملف لملف لوحة التحكم المولد "index". افتراضيًا، هذا الملف هو dashboard.md. استخدم العلامة -dashboard-filename بدون امتداد لتغيير اسم الملف هذا.

مخطط تدفق البيانات

وفقًا لـ المواصفات، قد يتضمن threatmodel كتل data_flow_diagram_v2. يتوفر مثال على DFD بسيط هنا. سيتم إهمال الكتلة القديمة ذات الاستخدام الواحد data_flow_diagram في وقت ما، لذا من الأفضل استخدام كتل مسماة data_flow_diagram_v2، وبهذه الطريقة يمكنك الحصول على العديد من DFDs المرتبطة.

يأخذ أمر threatcl dfd ملفات HCL الخاصة بمواصفات threatcl، وينشئ عددًا من ملفات png، ويضعها في مجلد محدد.

إذا لم يتضمن ملف HCL كتلة threatmodel تحتوي على كتلة data_flow_diagram أو data_flow_diagram_v2، فلا يتم إخراج أي شيء.

الأمر نفسه مشابه جدًا لأمر Dashboard.```bash $ threatcl dfd -overwrite -outdir testout examples/* Successfully created 'testout/tm2-modellymodel.png'

إذا كان نموذج التهديد `threatmodel` الخاص بك لا يتضمن `diagram_link`، ولكنه يتضمن `data_flow_diagram`، فسيتم عرض ذلك أيضًا عند تشغيل `threatcl dashboard`.

## Mermaid

وفقًا لـ [المواصفات](https://github.com/threatcl/threatcl/blob/HEAD/spec.hcl)، قد يتضمن نموذج التهديد `threatmodel` أيضًا كتل `mermaid` حرة الشكل. على عكس `data_flow_diagram_v2` (التي يقوم `threatcl` بعرضها لك)، تقوم كتلة `mermaid` بتضمين مصدر [mermaid](https://mermaid.js.org/) الخام حرفيًا - يقوم mermaid باستنتاج نوع الرسم البياني (تسلسل، حالة، مخطط تدفق، إلخ) من السطر الأول من المحتوى.

يقوم أمر `threatcl mermaid` باستخراج ذلك المصدر الخام ليتم توجيهه إلى أدوات عرض أخرى. لا يقوم هو نفسه بعرض الصور.

افتراضيًا، تتم طباعة المصدر إلى STDOUT:```bash
$ threatcl mermaid examples/tm2.hcl
sequenceDiagram
  User->>App: credentials
  App->>Auth: verify
  Auth-->>App: token

هذا يجعل من السهل تمريره إلى محرك عرض مثل mermaid-cli:```bash $ threatcl mermaid model.hcl | mmdc -o diagram.svg -i -

إذا كان هناك عدة كتل `mermaid`، قم باختيار واحد باستخدام `-index=n`، أو كتابتها جميعًا إلى مجلد باستخدام `-outdir` (ملف `.mmd` واحد لكل كتلة). يمكنك أيضًا كتابة كتلة واحدة إلى ملف باستخدام `-out`.```bash
$ threatcl mermaid -outdir testout model.hcl
Successfully created 'testout/model-mymodelloginsequence.mmd'

Terraform

أمر threatcl terraform قادر على استخراج موارد البيانات من مخرجات terraform show -json المستندات هنا لملفات plan، أو ملفات state النشطة، وتحويلها إلى كتل information_asset مسودة لإدراجها في ملفات threatcl.

إذا كنت في مجلد يحتوي على state موجود، يمكنك تنفيذ التالي:```bash terraform show -json | threatcl terraform -stdin

سيُنتج هذا شيئًا مشابهًا لهذا:```bash
information_asset "aws_rds_cluster default" {
  description                = "cluster_identifier: aurora-cluster-demo, database_name: mydb"
  information_classification = ""
  source                     = "terraform state"
}
information_asset "aws_s3_bucket example" {
  description                = "bucket: terraform-20211107232017071500000001"
  information_classification = ""
  source                     = "terraform state"
}

يمكنك أيضًا رؤية مخرجات مماثلة من ملف خطة لم يتم تطبيقها بعد مع Terraform عن طريق تشغيل:```bash terraform show -json | threatcl terraform -stdin

إذا كنت تريد تحديث ملف نموذج التهديد `threatcl` الموجود ("threatmodel.hcl") يمكنك ذلك باستخدام:```bash
terraform show -json <plan> | threatcl terraform -stdin -add-to-existing=threatmodel.hcl > new-threatmodel.hcl

باستخدام العلامة -add-to-existing، يمكنك أيضًا تحديد -tm-name=<string> إذا كنت بحاجة إلى تحديد نموذج تهديد معين من الملف المصدر، في حالة وجود نماذج متعددة. ويمكنك أيضًا تطبيق تصنيف افتراضي باستخدام العلامة -default-classification=Confidential.

يمكن لهذه الأوامر أيضًا أن تأخذ ملفًا كمدخل، وفي هذه الحالة، قم بحذف العلامة -stdin.

موارد تيرا فورم التي يعرفها threatcl موجودة بشكل ثابت في pkg/terraform/terraform.go. إذا كنت تريد أن يقوم أمر threatcl terraform بإخراج موارد information_asset الأخرى غير الموجودة هناك، يمكنك توفير نسختك الخاصة من هذا الملف json عبر العلامة -tf-collection=<json file>.

الفئات