Skip to main content

A Pydantic-based Python library for parsing, validating, and creating STIX 2.1 cyber threat intelligence data

Project description

stidantic [WIP]

This is work in progress, not compliant yet.

A Pydantic-based Python library for parsing, validating, and creating STIX 2.1 cyber threat intelligence data.

Python 3.12+ Pydantic v2

Overview

stidantic provides a type-safe, Pythonic way to work with STIX 2.1 (Structured Threat Information Expression) objects.

This library leverages Pydantic to provide:

  • 🔒 Strong type validation for all STIX objects
  • 📝 IDE auto-completion and type hints
  • Automatic validation of STIX specification constraints
  • 🔄 Easy JSON serialization/deserialization
  • ❄️ Immutable models with frozen Pydantic configurations
  • 🎯 Discriminated unions for polymorphic STIX object handling

Installation

Requirements

  • Python 3.12 or later (uses PEP 695 type statements)
  • Pydantic > 2.10

Quick Start

Parsing a STIX Bundle

from stidantic.bundle import StixBundle

# Load from JSON file
with open("threat_data.json", "r") as f:
    bundle = StixBundle.model_validate_json(f.read())

# Access objects
print(f"Bundle contains {len(bundle.objects)} objects")
for obj in bundle.objects:
    print(f"- {obj.type}: {obj.id}")

Creating STIX Objects

from datetime import datetime
from stidantic.sdo import Campaign
from stidantic.types import Identifier

campaign = Campaign(
    id=Identifier("campaign--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f"),
    created=datetime.now(),
    modified=datetime.now(),
    name="Operation Stealth",
    description="A sophisticated campaign targeting financial institutions",
    objective="Financial gain through wire fraud"
)

# Export to JSON
json_output = campaign.model_dump_json(indent=2, exclude_none=True, by_alias=True)
print(json_output)

Implemented STIX Objects

STIX Domain Objects (SDOs)

  • AttackPattern - Ways adversaries attempt to compromise targets
  • Campaign - Grouping of adversarial behaviors over time
  • 🚧 Course of Action - Action taken to prevent or respond to an attack
  • 🚧 Grouping - Explicitly asserts that STIX Objects have a shared context
  • 🚧 Identity - Actual individuals, organizations, or groups
  • 🚧 Incident - A stub object representing a security incident
  • 🚧 Indicator - Pattern that can be used to detect suspicious or malicious activity
  • 🚧 Infrastructure - Systems, software services, and associated resources
  • 🚧 Intrusion Set - A grouped set of adversarial behaviors and resources
  • 🚧 Location - A geographic location
  • 🚧 Malware - A type of TTP that represents malicious code
  • 🚧 Malware Analysis - The results of a malware analysis
  • 🚧 Note - Analyst-created content and context
  • 🚧 Observed Data - Information about cyber security related entities
  • 🚧 Opinion - An assessment of the correctness of a STIX Object
  • 🚧 Report - Collections of threat intelligence
  • 🚧 Threat Actor - Actual individuals, groups, or organizations
  • 🚧 Tool - Legitimate software that can be used by threat actors
  • 🚧 Vulnerability - A mistake in software that can be used to compromise a system

STIX Cyber-observable Objects (SCOs)

  • Artifact - Binary or file-like objects
  • AutonomousSystem - Autonomous System (AS) information
  • 🚧 Directory - A directory on a file system
  • 🚧 Domain Name - A network domain name
  • 🚧 Email Address - An email address
  • 🚧 Email Message - An email message
  • 🚧 File - A computer file
  • 🚧 IPv4 Address - An IPv4 address
  • 🚧 IPv6 Address - An IPv6 address
  • 🚧 MAC Address - A Media Access Control (MAC) address
  • 🚧 Mutex - A mutual exclusion object
  • 🚧 Network Traffic - A network traffic flow
  • 🚧 Process - A running process
  • 🚧 Software - A software product
  • 🚧 URL - A Uniform Resource Locator (URL)
  • 🚧 User Account - A user account on a system
  • 🚧 Windows Registry Key - A key in the Windows registry
  • 🚧 X.509 Certificate - An X.509 certificate

STIX Relationship Objects (SROs)

  • Relationship - Connections between STIX objects
  • Sighting - Observations of threat intelligence in the wild

Meta Objects

  • MarkingDefinition - Data markings (includes TLP)
  • LanguageContent - Translations and internationalization
  • ExtensionDefinition - Custom STIX extensions

Bundle

  • StixBundle - Container for STIX objects

Roadmap

  • Full STIX 2.1 Compliance
  • Python packaging
  • Extensive Testing
  • Better STIX Extension Support: Develop a robust and user-friendly mechanism for defining, parsing, and validating custom STIX extensions.
  • TAXII 2.1 Server: Build a TAXII 2.1 compliant server using FastAPI.
  • OCA Standard Extensions: Implement STIX extensions from the Open Cybersecurity Alliance (OCA) repository.
  • Performance Tuning: Profile and optimize parsing and serialization.

Resources

License

stidantic is released under the MIT License.

Acknowledgments

This project implements the STIX 2.1 specification published by the OASIS Cyber Threat Intelligence (CTI) Technical Committee.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stidantic-0.1.0.tar.gz (26.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

stidantic-0.1.0-py3-none-any.whl (30.9 kB view details)

Uploaded Python 3

File details

Details for the file stidantic-0.1.0.tar.gz.

File metadata

  • Download URL: stidantic-0.1.0.tar.gz
  • Upload date:
  • Size: 26.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for stidantic-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6d74c6241c9dc803cfd32a1aa7073885d900109b2075d289b082014b9223b586
MD5 aff242ea8b6a6e6bf52f9a212451d0a0
BLAKE2b-256 bb988ca7fbc6f3d13013753e8229ff3768b7cbbfd98f6845e440ee8388107ec4

See more details on using hashes here.

File details

Details for the file stidantic-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: stidantic-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 30.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for stidantic-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1933f7fc2e469beac931817e179da1fda81eceeafd7320fd5d9c95cc4eee8ce8
MD5 a89a917151b597849542020c851af87e
BLAKE2b-256 b70ee4892adda49bf7ca56a4fb10c7c714e7a794e43a47e1489b1bcbbee6ec0a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page