Arango CTI Processor
A small script that creates relationships between common CTI knowledge-bases in STIX 2.1 format.
Before you get started
Arango CTI Processor is built into CTI Butler which also handles the download of knowledgebase objects (what you need for ACTIP to work). As such, CTI Butler is probably better suited to what you're looking for.
Overview
Here at dogesec we have many repositories that generate STIX objects for different knowledge-bases. Many of these knowledgebases often have some link to another.
For example, MITRE ATT&CK objects have references to MITRE CAPEC objects.
Arango CTI Processor is a script that;
- reads the ingested CTI from the supported sources in ArangoDB
- creates STIX Relationships and Grouping objects to represent the relationships between them
Arango CTI Processor is designed to work with the following data sources:
- MITRE ATT&CK
- Enterprise
- ICS
- Mobile
- MITRE CWE
- MITRE CAPEC
- MITRE D3FEND
Usage
Install the script
# clone the latest code
git clone https://github.com/muchdogesec/arango_cti_processor
# create a venv
cd arango_cti_processor
python3 -m venv arango_cti_processor-venv
source arango_cti_processor-venv/bin/activate
# install requirements
pip3 install -r requirements.txt
Configuration options
Arango CTI Processor has various settings that are defined in an .env file.
To create a template for the file:
cp .env.example .env
To see more information about how to set the variables, and what they do, read the .env.markdown file.
Run
python3 arango_cti_processor.py \
--database DATABASE \
--relationship RELATIONSHIP \
--ignore_embedded_relationships BOOLEAN \
--stix2arango_note STRING \
--modified_min DATETIME \
--version STRING
Where;
--database(required): the arangoDB database name where the objects you want to link are found. It must contain the collections required for the--relationshipoption(s) selected (see.env.markdownfor more)--relationship(optional, dictionary): you can apply updates to certain relationships at run time. Default is all. Note, you should ensure yourdatabasecontains all the required seeded data. User can select from;capec-attackcwe-capecd3fend-knowledgebases
--ignore_embedded_relationships(optional, boolean). Default is false. iftruepassed, this will stop any embedded relationships from being generated. This is a stix2arango feature where STIX SROs will also be created for_refand_refsproperties inside each object (e.g. if_refproperty =identity--1234and SRO between the object with the_refproperty andidentity--1234will be created). See stix2arango docs for more detail if required, essentially this a wrapper for the same--ignore_embedded_relationshipssetting implemented by stix2arango--modified_min(optional, date). By default arango_cti_processor will consider all objects in the database specified with the property_is_latest==true(that is; the latest version of the object). Using this flag with a modified time value will further filter the results processed by arango_cti_processor to STIX objects with amodifiedtime >= to the value specified.--created_min(optional, date). Same asmodified_minbut considerscreateddate.version(optional): controls the source version of objects used. This only really applies ford3fend-attackmode (although can be used with all modes) b/c the way relationship generation happens internally (that is all data is already held in the knowledgebase). So if you are using D3FEND1.3.0you should pass that here, to ensure relationships to other versions are not created. This will not affect the_is_latestbehaviour, b/c this always considers the highest modified time, regardless of version passed.
On each run, only the _is_latest==true version of objects will be considered by the script.
Examples
python3 arango_cti_processor.py \
--database arango_cti_processor_standard_tests_database \
--relationship capec-attack \
--ignore_embedded_relationships false
How it works
If you would like to know how the logic of this script works in detail, please consult the /docs directory.
Useful supporting tools
- To generate STIX 2.1 extensions: stix2 Python Lib
- STIX 2.1 specifications for objects: STIX 2.1 docs
- ArangoDB docs
Support
Minimal support provided via the dogesec community.
License
Metadata
Release files for arango-cti-processor 1.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| arango_cti_processor-1.1.5.tar.gz | 1.0 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| arango_cti_processor-1.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.1 MB
Release files / arango_cti_processor-1.1.5.tar.gz
| Download URL | arango_cti_processor-1.1.5.tar.gz |
|---|---|
| Size | 1.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
007fcf918380367092045fa308456b75404f53f6b3e5c5df382baf1873d73111
|
|
BLAKE2b-256 checksum How to use checksums |
a9d80cc68e39639b3f4119b603497cc10ca2bcbe19dba85c297844e63baf1725
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 16, 2026.
Transparency logRelease files / arango_cti_processor-1.1.5-py3-none-any.whl
| Download URL | arango_cti_processor-1.1.5-py3-none-any.whl |
|---|---|
| Size | 20.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
97043de4a5ca273bb14c9d1aaf9969d29fab2f35f69f8e878f730bf4db60fe1b
|
|
BLAKE2b-256 checksum How to use checksums |
8e6a3c9ffab055a63f9621ca906fd0069d0e2cd5b72ebb43af86735287f59bf7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 16, 2026.
Transparency log