git: 5a0c6e41bf4b - main - security/caldera-ot: New port: caldera OT plugin and capabilities
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 26 Oct 2023 01:10:19 UTC
The branch main has been updated by acm:
URL: https://cgit.FreeBSD.org/ports/commit/?id=5a0c6e41bf4b7d2d515b875aa146825bb5d17ae8
commit 5a0c6e41bf4b7d2d515b875aa146825bb5d17ae8
Author: Jose Alonso Cardenas Marquez <acm@FreeBSD.org>
AuthorDate: 2023-10-26 01:07:53 +0000
Commit: Jose Alonso Cardenas Marquez <acm@FreeBSD.org>
CommitDate: 2023-10-26 01:07:53 +0000
security/caldera-ot: New port: caldera OT plugin and capabilities
A collection of plugins that extend Caldera to the Operational Technology (OT)
environment.
---
security/Makefile | 1 +
security/caldera-ot/Makefile | 73 +++++
security/caldera-ot/distinfo | 9 +
...ection_1811b7f2-3a73-11eb-adc1-0242ac120002.yml | 21 ++
...ection_47432648-5678-11eb-ae93-0242ac130002.yml | 23 ++
...ection_73a8f024-656d-11eb-ae93-0242ac130002.yml | 21 ++
...covery_b93bd80e-3a70-11eb-adc1-0242ac120002.yml | 21 ++
...impact_1a2faf5a-4601-11eb-b378-0242ac130002.yml | 23 ++
...impact_7888f6a0-454e-11eb-b378-0242ac130002.yml | 21 ++
...yloads_17f06fa2-44e1-11eb-b378-0242ac130002.yml | 29 ++
...ection_001e21ea-61b5-4b78-b79e-9d5687d819bd.yml | 22 ++
...ection_3946b6da-c570-47cd-b63f-c13875297cb4.yml | 22 ++
...ection_bc8961a2-7534-4b2a-bbc3-2456f58243be.yml | 22 ++
...ection_d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml | 22 ++
...impact_056e6289-4cbf-417f-928a-d75125e4db4f.yml | 22 ++
...impact_0f16b341-9730-4553-b6d6-8eb8def02c81.yml | 22 ++
...impact_2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml | 22 ++
...impact_40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml | 22 ++
...impact_d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml | 22 ++
...impact_fe321da2-e183-44a3-b423-b8cba9a8bda0.yml | 22 ++
...yloads_58aaab96-7191-4978-acec-a3b1deb03332.yml | 12 +
security/caldera-ot/files/pkg-message.in | 18 ++
security/caldera-ot/pkg-descr | 2 +
security/caldera-ot/pkg-plist | 321 +++++++++++++++++++++
24 files changed, 815 insertions(+)
diff --git a/security/Makefile b/security/Makefile
index 5864a1775588..6a9a8b3e540b 100644
--- a/security/Makefile
+++ b/security/Makefile
@@ -66,6 +66,7 @@
SUBDIR += ca_root_nss
SUBDIR += caesarcipher
SUBDIR += caldera
+ SUBDIR += caldera-ot
SUBDIR += calife
SUBDIR += cardpeek
SUBDIR += cargo-audit
diff --git a/security/caldera-ot/Makefile b/security/caldera-ot/Makefile
new file mode 100644
index 000000000000..60b56bdef547
--- /dev/null
+++ b/security/caldera-ot/Makefile
@@ -0,0 +1,73 @@
+PORTNAME= caldera-ot
+DISTVERSION= 4.2.0
+CATEGORIES= security python
+
+MAINTAINER= acm@FreeBSD.org
+COMMENT= caldera OT plugin and capabilities
+WWW= https://github.com/mitre/caldera-ot
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BUILD_DEPENDS= bacnet-stack>0:devel/bacnet-stack \
+ nuitka3:devel/nuitka
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}aiohttp>0:www/py-aiohttp@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pymodbus>0:comms/py-pymodbus@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pyserial>0:comms/py-pyserial@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR} \
+ ${LOCALBASE}/www/caldera/app/__init__.py:security/caldera
+
+USE_GITHUB= yes
+GH_ACCOUNT= mitre
+GH_PROJECT= ${PORTNAME}
+GH_TAGNAME= 6c6b971d96de121da33f27aa6f80806835346b23
+GH_TUPLE= mitre:bacnet:745432c:bacnet/bacnet \
+ mitre:dnp3:01e3748:dnp3/dnp3 \
+ mitre:modbus:e47e259:modbus/modbus
+
+USES= compiler:c++11-lang dos2unix python
+
+DOS2UNIX_REGEX= .*\.([yml])
+CALDERA_USER= caldera
+CALDERA_GROUP= caldera
+USERS= ${CALDERA_USER}
+GROUPS= ${CALDERA_GROUP}
+
+WWWDIR= ${PREFIX}/www/caldera
+
+SUB_FILES= pkg-message
+SUB_LIST= WWWDIR=${WWWDIR}
+
+post-extract:
+ ${RM} -R ${WRKSRC}/.github
+ cd ${WRKSRC} && ${RM} -f .coveragerc .dockerignore .eslintrc.js .flake8 \
+ .git* .pre* .stylelintrc.json Dockerfile
+
+post-patch:
+ ${REINPLACE_CMD} -i "" -e 's|.sync|.tcp|g' ${WRKSRC}/modbus/src/src/modbus/client.py
+ cd ${WRKSRC} && \
+ ${FIND} . -type f -name "*.orig" -exec ${RM} "{}" \;
+
+do-build:
+ @${MKDIR} ${WRKDIR}/modbus_cli-build
+ cd ${WRKSRC}/bacnet/src/bacnet-stack/apps && \
+ ${CC} readprop/main.c -I${LOCALBASE}/include -L${LOCALBASE}/lib \
+ -lbacnet-stack -o ${WRKSRC}/bacnet/payloads/bacrp-freebsd
+ cd ${WRKSRC}/bacnet/src/bacnet-stack/apps && \
+ ${CC} readprop/main.c -I${LOCALBASE}/include -L${LOCALBASE}/lib \
+ -lbacnet-stack -o ${WRKSRC}/bacnet/payloads/bacwp-freebsd
+ cd ${WRKSRC}/modbus/src/src && \
+ ${LOCALBASE}/bin/nuitka3 --standalone --onefile \
+ --output-filename=modbus_cli-freebsd --output-dir=${WRKDIR}/modbus_cli-build modbus_cli.py
+
+do-install:
+ @${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/bacnet
+ @${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/dnp3
+ @${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/modbus
+ @cd ${WRKSRC}/bacnet && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/bacnet
+ @cd ${WRKSRC}/dnp3 && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/dnp3
+ @cd ${WRKSRC}/modbus && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/modbus
+ ${INSTALL_PROGRAM} ${WRKDIR}/modbus_cli-build/modbus_cli-freebsd \
+ ${STAGEDIR}/${WWWDIR}/plugins/modbus/payloads/
+
+.include <bsd.port.mk>
diff --git a/security/caldera-ot/distinfo b/security/caldera-ot/distinfo
new file mode 100644
index 000000000000..15e419584f6c
--- /dev/null
+++ b/security/caldera-ot/distinfo
@@ -0,0 +1,9 @@
+TIMESTAMP = 1698267655
+SHA256 (mitre-caldera-ot-4.2.0-6c6b971d96de121da33f27aa6f80806835346b23_GH0.tar.gz) = a4568765b1a373870ae00b781aa251ac94af089b46a3239bf743b0430405844e
+SIZE (mitre-caldera-ot-4.2.0-6c6b971d96de121da33f27aa6f80806835346b23_GH0.tar.gz) = 5887
+SHA256 (mitre-bacnet-745432c_GH0.tar.gz) = 60763dc1f3670124f3ec0caf11dd2a3c71def7689c6e90af66864e9924853ad7
+SIZE (mitre-bacnet-745432c_GH0.tar.gz) = 2493167
+SHA256 (mitre-dnp3-01e3748_GH0.tar.gz) = 5324a9910b22dd101ef52b2b48334f67d4e9d1f05a1abaa02b7b097a96dbee64
+SIZE (mitre-dnp3-01e3748_GH0.tar.gz) = 97589582
+SHA256 (mitre-modbus-e47e259_GH0.tar.gz) = 2094210dbf96c0f60d7d5146e4ec7855e19b4bc23b47d51b906aa5961222c14d
+SIZE (mitre-modbus-e47e259_GH0.tar.gz) = 38272647
diff --git a/security/caldera-ot/files/patch-bacnet-data-abilities-collection_1811b7f2-3a73-11eb-adc1-0242ac120002.yml b/security/caldera-ot/files/patch-bacnet-data-abilities-collection_1811b7f2-3a73-11eb-adc1-0242ac120002.yml
new file mode 100644
index 000000000000..e0c317f9e378
--- /dev/null
+++ b/security/caldera-ot/files/patch-bacnet-data-abilities-collection_1811b7f2-3a73-11eb-adc1-0242ac120002.yml
@@ -0,0 +1,21 @@
+--- bacnet/data/abilities/collection/1811b7f2-3a73-11eb-adc1-0242ac120002.yml 2023-10-25 16:29:02.618965000 -0500
++++ bacnet/data/abilities/collection/1811b7f2-3a73-11eb-adc1-0242ac120002.yml 2023-10-25 16:35:40.258610000 -0500
+@@ -10,6 +10,11 @@
+ name: Automated Collection
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ timeout: 360
++ command: |
++ bacepics #{bacnet.device.instance}
+ linux:
+ sh:
+ timeout: 360
+@@ -23,4 +28,4 @@
+ command: |
+ .\bacepics.exe #{bacnet.device.instance}
+ payloads:
+- - bacepics.exe
+\ No newline at end of file
++ - bacepics.exe
diff --git a/security/caldera-ot/files/patch-bacnet-data-abilities-collection_47432648-5678-11eb-ae93-0242ac130002.yml b/security/caldera-ot/files/patch-bacnet-data-abilities-collection_47432648-5678-11eb-ae93-0242ac130002.yml
new file mode 100644
index 000000000000..eed1e7e34f18
--- /dev/null
+++ b/security/caldera-ot/files/patch-bacnet-data-abilities-collection_47432648-5678-11eb-ae93-0242ac130002.yml
@@ -0,0 +1,23 @@
+--- bacnet/data/abilities/collection/47432648-5678-11eb-ae93-0242ac130002.yml 2023-10-25 16:29:10.047474000 -0500
++++ bacnet/data/abilities/collection/47432648-5678-11eb-ae93-0242ac130002.yml 2023-10-25 16:36:11.635820000 -0500
+@@ -10,6 +10,13 @@
+ name: Point & Tag Identification
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ timeout: 360
++ command: |
++ ./bacrp-freebsd #{bacnet.device.instance} #{bacnet.obj.type} #{bacnet.obj.instance} #{bacnet.obj.property} #{bacnet.read.index}
++ payloads:
++ - bacrp-freebsd
+ linux:
+ sh:
+ timeout: 360
+@@ -23,4 +30,4 @@
+ command: |
+ .\bacrp.exe #{bacnet.device.instance} #{bacnet.obj.type} #{bacnet.obj.instance} #{bacnet.obj.property} #{bacnet.read.index}
+ payloads:
+- - bacrp.exe
+\ No newline at end of file
++ - bacrp.exe
diff --git a/security/caldera-ot/files/patch-bacnet-data-abilities-collection_73a8f024-656d-11eb-ae93-0242ac130002.yml b/security/caldera-ot/files/patch-bacnet-data-abilities-collection_73a8f024-656d-11eb-ae93-0242ac130002.yml
new file mode 100644
index 000000000000..b2832e7d38d6
--- /dev/null
+++ b/security/caldera-ot/files/patch-bacnet-data-abilities-collection_73a8f024-656d-11eb-ae93-0242ac130002.yml
@@ -0,0 +1,21 @@
+--- bacnet/data/abilities/collection/73a8f024-656d-11eb-ae93-0242ac130002.yml 2023-10-25 16:29:17.712333000 -0500
++++ bacnet/data/abilities/collection/73a8f024-656d-11eb-ae93-0242ac130002.yml 2023-10-25 16:36:42.766893000 -0500
+@@ -9,6 +9,11 @@
+ attack_id: T0801
+ name: Monitor Process State
+ platforms:
++ freebsd:
++ sh:
++ timeout: 360
++ command: |
++ bacarf #{bacnet.device.instance} #{bacnet.file.instance} #{bacnet.read.local_name}
+ linux:
+ sh:
+ timeout: 360
+@@ -22,4 +27,4 @@
+ command: |
+ .\bacarf.exe #{bacnet.device.instance} #{bacnet.file.instance} #{bacnet.read.local_name}
+ payloads:
+- - bacarf.exe
+\ No newline at end of file
++ - bacarf.exe
diff --git a/security/caldera-ot/files/patch-bacnet-data-abilities-discovery_b93bd80e-3a70-11eb-adc1-0242ac120002.yml b/security/caldera-ot/files/patch-bacnet-data-abilities-discovery_b93bd80e-3a70-11eb-adc1-0242ac120002.yml
new file mode 100644
index 000000000000..5cf9f6a5e6eb
--- /dev/null
+++ b/security/caldera-ot/files/patch-bacnet-data-abilities-discovery_b93bd80e-3a70-11eb-adc1-0242ac120002.yml
@@ -0,0 +1,21 @@
+--- bacnet/data/abilities/discovery/b93bd80e-3a70-11eb-adc1-0242ac120002.yml 2023-10-25 16:36:50.057204000 -0500
++++ bacnet/data/abilities/discovery/b93bd80e-3a70-11eb-adc1-0242ac120002.yml 2023-10-25 16:38:29.989935000 -0500
+@@ -10,6 +10,11 @@
+ name: Remote System Discovery
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ timeout: 360
++ command: |
++ bacwi
+ linux:
+ sh:
+ timeout: 360
+@@ -23,4 +28,4 @@
+ command: |
+ .\bacwi.exe
+ payloads:
+- - bacwi.exe
+\ No newline at end of file
++ - bacwi.exe
diff --git a/security/caldera-ot/files/patch-bacnet-data-abilities-impact_1a2faf5a-4601-11eb-b378-0242ac130002.yml b/security/caldera-ot/files/patch-bacnet-data-abilities-impact_1a2faf5a-4601-11eb-b378-0242ac130002.yml
new file mode 100644
index 000000000000..086565779810
--- /dev/null
+++ b/security/caldera-ot/files/patch-bacnet-data-abilities-impact_1a2faf5a-4601-11eb-b378-0242ac130002.yml
@@ -0,0 +1,23 @@
+--- bacnet/data/abilities/impact/1a2faf5a-4601-11eb-b378-0242ac130002.yml 2023-10-25 16:38:37.618186000 -0500
++++ bacnet/data/abilities/impact/1a2faf5a-4601-11eb-b378-0242ac130002.yml 2023-10-25 16:39:38.892194000 -0500
+@@ -10,6 +10,13 @@
+ name: Manipulation of Control
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ timeout: 360
++ command: |
++ ./bacwp-freebsd #{bacnet.device.instance} #{bacnet.obj.type} #{bacnet.obj.instance} #{bacnet.obj.property} #{bacnet.write.priority} #{bacnet.write.index} #{bacnet.write.tag} #{bacnet.write.value}
++ payloads:
++ - bacwp-freebsd
+ linux:
+ sh:
+ timeout: 360
+@@ -23,4 +30,4 @@
+ command: |
+ .\bacwp.exe #{bacnet.device.instance} #{bacnet.obj.type} #{bacnet.obj.instance} #{bacnet.obj.property} #{bacnet.write.priority} #{bacnet.write.index} #{bacnet.write.tag} #{bacnet.write.value}
+ payloads:
+- - bacwp.exe
+\ No newline at end of file
++ - bacwp.exe
diff --git a/security/caldera-ot/files/patch-bacnet-data-abilities-impact_7888f6a0-454e-11eb-b378-0242ac130002.yml b/security/caldera-ot/files/patch-bacnet-data-abilities-impact_7888f6a0-454e-11eb-b378-0242ac130002.yml
new file mode 100644
index 000000000000..ad84f14a2429
--- /dev/null
+++ b/security/caldera-ot/files/patch-bacnet-data-abilities-impact_7888f6a0-454e-11eb-b378-0242ac130002.yml
@@ -0,0 +1,21 @@
+--- bacnet/data/abilities/impact/7888f6a0-454e-11eb-b378-0242ac130002.yml 2023-10-25 16:39:44.749679000 -0500
++++ bacnet/data/abilities/impact/7888f6a0-454e-11eb-b378-0242ac130002.yml 2023-10-25 16:40:15.061949000 -0500
+@@ -9,6 +9,11 @@
+ attack_id: T0831
+ name: Manipulation of Control
+ platforms:
++ freebsd:
++ sh:
++ timeout: 360
++ command: |
++ bacawf #{bacnet.device.instance} #{bacnet.file.instance} #{bacnet.write.local_name} #{bacnet.write.octet_offset}
+ linux:
+ sh:
+ timeout: 360
+@@ -22,4 +27,4 @@
+ command: |
+ .\bacawf.exe #{bacnet.device.instance} #{bacnet.file.instance} #{bacnet.write.local_name} #{bacnet.write.octet_offset}
+ payloads:
+- - bacawf.exe
+\ No newline at end of file
++ - bacawf.exe
diff --git a/security/caldera-ot/files/patch-bacnet-payloads_17f06fa2-44e1-11eb-b378-0242ac130002.yml b/security/caldera-ot/files/patch-bacnet-payloads_17f06fa2-44e1-11eb-b378-0242ac130002.yml
new file mode 100644
index 000000000000..8856a69d707c
--- /dev/null
+++ b/security/caldera-ot/files/patch-bacnet-payloads_17f06fa2-44e1-11eb-b378-0242ac130002.yml
@@ -0,0 +1,29 @@
+--- bacnet/payloads/17f06fa2-44e1-11eb-b378-0242ac130002.yml 2023-10-25 18:28:04.475705000 -0500
++++ bacnet/payloads/17f06fa2-44e1-11eb-b378-0242ac130002.yml 2023-10-25 18:29:24.972817000 -0500
+@@ -21,6 +21,9 @@
+ id: 6ecaedd8-656c-11eb-ae93-0242ac130002
+
+ # WriteProp
++ bacwp-freebsd:
++ description: BACnet WriteProperty Service - FreeBSD
++ id: 3781c3ee-738e-11ee-9734-8851fb56e3b2
+ bacwp:
+ description: BACnet WriteProperty Service - Linux
+ id: 1a2faf5a-4601-11eb-b378-0242ac130002
+@@ -29,6 +32,9 @@
+ id: 82b101d4-656c-11eb-ae93-0242ac130002
+
+ # ReadProp
++ bacrp-freebsd:
++ description: BACnet ReadProperty Service - FreeBSD
++ id: 4b6ce399-738e-11ee-9734-8851fb56e3b2
+ bacrp:
+ description: BACnet ReadProperty Service - Linux
+ id: 748d5c80-5679-11eb-ae93-0242ac130002
+@@ -50,4 +56,4 @@
+ id: e2e4d612-656b-11eb-ae93-0242ac130002
+ bacarf.exe:
+ description: BACnet AtomicReadFile - Windows
+- id: 938f09a6-656c-11eb-ae93-0242ac130002
+\ No newline at end of file
++ id: 938f09a6-656c-11eb-ae93-0242ac130002
diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-collection_001e21ea-61b5-4b78-b79e-9d5687d819bd.yml b/security/caldera-ot/files/patch-modbus-data-abilities-collection_001e21ea-61b5-4b78-b79e-9d5687d819bd.yml
new file mode 100644
index 000000000000..8a1355cd7026
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-data-abilities-collection_001e21ea-61b5-4b78-b79e-9d5687d819bd.yml
@@ -0,0 +1,22 @@
+--- modbus/data/abilities/collection/001e21ea-61b5-4b78-b79e-9d5687d819bd.yml 2023-10-25 17:55:53.170972000 -0500
++++ modbus/data/abilities/collection/001e21ea-61b5-4b78-b79e-9d5687d819bd.yml 2023-10-25 17:56:52.419868000 -0500
+@@ -12,6 +12,12 @@
+ name: Point & Tag Identification
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ command:
++ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_di #{modbus.read_di.start} #{modbus.read_di.count}'
++ payloads:
++ - modbus_cli-freebsd
+ linux:
+ sh:
+ command:
+@@ -23,4 +29,4 @@
+ command:
+ '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_di #{modbus.read_di.start} #{modbus.read_di.count}'
+ payloads:
+- - modbus_cli.exe
+\ No newline at end of file
++ - modbus_cli.exe
diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-collection_3946b6da-c570-47cd-b63f-c13875297cb4.yml b/security/caldera-ot/files/patch-modbus-data-abilities-collection_3946b6da-c570-47cd-b63f-c13875297cb4.yml
new file mode 100644
index 000000000000..82d5e4f480a5
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-data-abilities-collection_3946b6da-c570-47cd-b63f-c13875297cb4.yml
@@ -0,0 +1,22 @@
+--- modbus/data/abilities/collection/3946b6da-c570-47cd-b63f-c13875297cb4.yml 2023-10-25 17:55:59.073472000 -0500
++++ modbus/data/abilities/collection/3946b6da-c570-47cd-b63f-c13875297cb4.yml 2023-10-25 17:57:16.281999000 -0500
+@@ -12,6 +12,12 @@
+ name: Point & Tag Identification
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ command:
++ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_ir #{modbus.read_ir.start} #{modbus.read_ir.count}'
++ payloads:
++ - modbus_cli-freebsd
+ linux:
+ sh:
+ command:
+@@ -23,4 +29,4 @@
+ command:
+ '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_ir #{modbus.read_ir.start} #{modbus.read_ir.count}'
+ payloads:
+- - modbus_cli.exe
+\ No newline at end of file
++ - modbus_cli.exe
diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-collection_bc8961a2-7534-4b2a-bbc3-2456f58243be.yml b/security/caldera-ot/files/patch-modbus-data-abilities-collection_bc8961a2-7534-4b2a-bbc3-2456f58243be.yml
new file mode 100644
index 000000000000..3c188059c9ea
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-data-abilities-collection_bc8961a2-7534-4b2a-bbc3-2456f58243be.yml
@@ -0,0 +1,22 @@
+--- modbus/data/abilities/collection/bc8961a2-7534-4b2a-bbc3-2456f58243be.yml 2023-10-25 17:56:05.290153000 -0500
++++ modbus/data/abilities/collection/bc8961a2-7534-4b2a-bbc3-2456f58243be.yml 2023-10-25 17:57:41.726715000 -0500
+@@ -12,6 +12,12 @@
+ name: Point & Tag Identification
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ command:
++ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_hr #{modbus.read_hr.start} #{modbus.read_hr.count}'
++ payloads:
++ - modbus_cli-freebsd
+ linux:
+ sh:
+ command:
+@@ -23,4 +29,4 @@
+ command:
+ '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_hr #{modbus.read_hr.start} #{modbus.read_hr.count}'
+ payloads:
+- - modbus_cli.exe
+\ No newline at end of file
++ - modbus_cli.exe
diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-collection_d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml b/security/caldera-ot/files/patch-modbus-data-abilities-collection_d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml
new file mode 100644
index 000000000000..53774dac07e7
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-data-abilities-collection_d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml
@@ -0,0 +1,22 @@
+--- modbus/data/abilities/collection/d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml 2023-10-25 17:56:17.950262000 -0500
++++ modbus/data/abilities/collection/d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml 2023-10-25 17:58:08.150392000 -0500
+@@ -12,6 +12,12 @@
+ name: Point & Tag Identification
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ command:
++ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_c #{modbus.read_c.start} #{modbus.read_c.count}'
++ payloads:
++ - modbus_cli-freebsd
+ linux:
+ sh:
+ command:
+@@ -23,4 +29,4 @@
+ command:
+ '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} read_c #{modbus.read_c.start} #{modbus.read_c.count}'
+ payloads:
+- - modbus_cli.exe
+\ No newline at end of file
++ - modbus_cli.exe
diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_056e6289-4cbf-417f-928a-d75125e4db4f.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_056e6289-4cbf-417f-928a-d75125e4db4f.yml
new file mode 100644
index 000000000000..513df5f3c7b6
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_056e6289-4cbf-417f-928a-d75125e4db4f.yml
@@ -0,0 +1,22 @@
+--- modbus/data/abilities/impact/056e6289-4cbf-417f-928a-d75125e4db4f.yml 2023-10-25 17:58:18.590805000 -0500
++++ modbus/data/abilities/impact/056e6289-4cbf-417f-928a-d75125e4db4f.yml 2023-10-25 17:59:11.454596000 -0500
+@@ -12,6 +12,12 @@
+ name: Manipulation of Control
+ repeatable: true
+ platforms:
++ freebsd:
++ sh:
++ command:
++ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_c #{modbus.write_c.start} #{modbus.write_c.value}'
++ payloads:
++ - modbus_cli-freebsd
+ linux:
+ sh:
+ command:
+@@ -23,4 +29,4 @@
+ command:
+ '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_c #{modbus.write_c.start} #{modbus.write_c.value}'
+ payloads:
+- - modbus_cli.exe
+\ No newline at end of file
++ - modbus_cli.exe
diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_0f16b341-9730-4553-b6d6-8eb8def02c81.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_0f16b341-9730-4553-b6d6-8eb8def02c81.yml
new file mode 100644
index 000000000000..fda2f8fb2761
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_0f16b341-9730-4553-b6d6-8eb8def02c81.yml
@@ -0,0 +1,22 @@
+--- modbus/data/abilities/impact/0f16b341-9730-4553-b6d6-8eb8def02c81.yml 2023-10-25 17:58:23.307634000 -0500
++++ modbus/data/abilities/impact/0f16b341-9730-4553-b6d6-8eb8def02c81.yml 2023-10-25 17:59:48.668864000 -0500
+@@ -12,6 +12,12 @@
+ name: Manipulation of Control
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ command:
++ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_multi_r #{modbus.write_multi_r.start} #{modbus.write_multi_r.value} #{modbus.write_multi_r.count}'
++ payloads:
++ - modbus_cli-freebsd
+ linux:
+ sh:
+ command:
+@@ -23,4 +29,4 @@
+ command:
+ '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_multi_r #{modbus.write_multi_r.start} #{modbus.write_multi_r.value} #{modbus.write_multi_r.count}'
+ payloads:
+- - modbus_cli.exe
+\ No newline at end of file
++ - modbus_cli.exe
diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml
new file mode 100644
index 000000000000..e3782766543b
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml
@@ -0,0 +1,22 @@
+--- modbus/data/abilities/impact/2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml 2023-10-25 17:58:29.045645000 -0500
++++ modbus/data/abilities/impact/2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml 2023-10-25 18:00:22.668282000 -0500
+@@ -13,6 +13,12 @@
+ name: Manipulation of Control
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ command:
++ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} fuzz_r #{modbus.fuzzreg.start} #{modbus.fuzzreg.end} #{modbus.fuzzreg.count} --min #{modbus.fuzzreg.min} --max #{modbus.fuzzreg.max} --wait #{modbus.fuzzreg.wait}'
++ payloads:
++ - modbus_cli-freebsd
+ linux:
+ sh:
+ command:
+@@ -24,4 +30,4 @@
+ command:
+ '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} fuzz_r #{modbus.fuzzreg.start} #{modbus.fuzzreg.end} #{modbus.fuzzreg.count} --min #{modbus.fuzzreg.min} --max #{modbus.fuzzreg.max} --wait #{modbus.fuzzreg.wait}'
+ payloads:
+- - modbus_cli.exe
+\ No newline at end of file
++ - modbus_cli.exe
diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml
new file mode 100644
index 000000000000..cf02689d28c4
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml
@@ -0,0 +1,22 @@
+--- modbus/data/abilities/impact/40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml 2023-10-25 17:58:36.482653000 -0500
++++ modbus/data/abilities/impact/40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml 2023-10-25 18:00:59.579356000 -0500
+@@ -13,6 +13,12 @@
+ name: Manipulation of Control
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ command:
++ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} fuzz_c #{modbus.fuzzcoil.start} #{modbus.fuzzcoil.end} #{modbus.fuzzcoil.count} --wait #{modbus.fuzzcoil.wait}'
++ payloads:
++ - modbus_cli-freebsd
+ linux:
+ sh:
+ command:
+@@ -24,4 +30,4 @@
+ command:
+ '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} fuzz_c #{modbus.fuzzcoil.start} #{modbus.fuzzcoil.end} #{modbus.fuzzcoil.count} --wait #{modbus.fuzzcoil.wait}'
+ payloads:
+- - modbus_cli.exe
+\ No newline at end of file
++ - modbus_cli.exe
diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml
new file mode 100644
index 000000000000..591bf61d499b
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml
@@ -0,0 +1,22 @@
+--- modbus/data/abilities/impact/d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml 2023-10-25 17:58:41.923095000 -0500
++++ modbus/data/abilities/impact/d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml 2023-10-25 18:01:23.478626000 -0500
+@@ -12,6 +12,12 @@
+ name: Manipulation of Control
+ repeatable: true
+ platforms:
++ freebsd:
++ sh:
++ command:
++ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_r #{modbus.write_r.start} #{modbus.write_r.value}'
++ payloads:
++ - modbus_cli-freebsd
+ linux:
+ sh:
+ command:
+@@ -23,4 +29,4 @@
+ command:
+ '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_r #{modbus.write_r.start} #{modbus.write_r.value}'
+ payloads:
+- - modbus_cli.exe
+\ No newline at end of file
++ - modbus_cli.exe
diff --git a/security/caldera-ot/files/patch-modbus-data-abilities-impact_fe321da2-e183-44a3-b423-b8cba9a8bda0.yml b/security/caldera-ot/files/patch-modbus-data-abilities-impact_fe321da2-e183-44a3-b423-b8cba9a8bda0.yml
new file mode 100644
index 000000000000..c0a9f140d4fc
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-data-abilities-impact_fe321da2-e183-44a3-b423-b8cba9a8bda0.yml
@@ -0,0 +1,22 @@
+--- modbus/data/abilities/impact/fe321da2-e183-44a3-b423-b8cba9a8bda0.yml 2023-10-25 17:58:47.295322000 -0500
++++ modbus/data/abilities/impact/fe321da2-e183-44a3-b423-b8cba9a8bda0.yml 2023-10-25 18:01:58.004852000 -0500
+@@ -12,6 +12,12 @@
+ name: Manipulation of Control
+ repeatable: True
+ platforms:
++ freebsd:
++ sh:
++ command:
++ './modbus_cli-freebsd #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_multi_c #{modbus.write_multi_c.start} #{modbus.write_multi_c.value} #{modbus.write_multi_c.count}'
++ payloads:
++ - modbus_cli-freebsd
+ linux:
+ sh:
+ command:
+@@ -23,4 +29,4 @@
+ command:
+ '.\modbus_cli.exe #{modbus.all.deviceip} --port #{modbus.all.deviceport} write_multi_c #{modbus.write_multi_c.start} #{modbus.write_multi_c.value} #{modbus.write_multi_c.count}'
+ payloads:
+- - modbus_cli.exe
+\ No newline at end of file
++ - modbus_cli.exe
diff --git a/security/caldera-ot/files/patch-modbus-payloads_58aaab96-7191-4978-acec-a3b1deb03332.yml b/security/caldera-ot/files/patch-modbus-payloads_58aaab96-7191-4978-acec-a3b1deb03332.yml
new file mode 100644
index 000000000000..0cb9891b1cb0
--- /dev/null
+++ b/security/caldera-ot/files/patch-modbus-payloads_58aaab96-7191-4978-acec-a3b1deb03332.yml
@@ -0,0 +1,12 @@
+--- modbus/payloads/58aaab96-7191-4978-acec-a3b1deb03332.yml 2023-10-25 18:08:58.237967000 -0500
++++ modbus/payloads/58aaab96-7191-4978-acec-a3b1deb03332.yml 2023-10-25 18:09:40.129650000 -0500
+@@ -3,6 +3,9 @@
+ id: 58aaab96-7191-4978-acec-a3b1deb03332
+ name: Modbus Payloads
+ standard_payloads:
++ modbus_cli-freebsd:
++ description: Modbus Client program (FreeBSD)
++ id: 6f914083-738b-11ee-9734-8851fb56e3b2
+ modbus_cli:
+ description: Modbus Client program (Linux)
+ id: 090b9e5d-257e-4af5-a3ac-af1f6f5b1c10
diff --git a/security/caldera-ot/files/pkg-message.in b/security/caldera-ot/files/pkg-message.in
new file mode 100644
index 000000000000..d6bee52614d8
--- /dev/null
+++ b/security/caldera-ot/files/pkg-message.in
@@ -0,0 +1,18 @@
+[
+{ type: install
+ message: <<EOM
+Caldera OT plugins port was installed
+
+1) Take on mind it is a modifying version of Caldera-OT for include FreeBSD as
+ supported OS and you could found some issues. Problem reports are welcome.
+
+2) Do not forget modify configuration file (default.yml or localy.yml) before of
+ run Caldera to enable bacnet, dnp3 and modbus plugins. Caldera configuration
+ files are located at:
+
+ %%WWWDIR%%/conf
+
+3) Enjoy it
+EOM
+}
+]
diff --git a/security/caldera-ot/pkg-descr b/security/caldera-ot/pkg-descr
new file mode 100644
index 000000000000..c93a21907e5e
--- /dev/null
+++ b/security/caldera-ot/pkg-descr
@@ -0,0 +1,2 @@
+A collection of plugins that extend Caldera to the Operational Technology (OT)
+environment.
diff --git a/security/caldera-ot/pkg-plist b/security/caldera-ot/pkg-plist
new file mode 100644
index 000000000000..304905474ab9
--- /dev/null
+++ b/security/caldera-ot/pkg-plist
@@ -0,0 +1,321 @@
+@mode 640
+@owner caldera
+@group caldera
+%%WWWDIR%%/plugins/bacnet/.gitignore
+%%WWWDIR%%/plugins/bacnet/LICENSE
+%%WWWDIR%%/plugins/bacnet/NOTICE.md
+%%WWWDIR%%/plugins/bacnet/README.md
+%%WWWDIR%%/plugins/bacnet/app/bacnet_api.py
+%%WWWDIR%%/plugins/bacnet/app/bacnet_gui.py
+%%WWWDIR%%/plugins/bacnet/app/bacnet_svc.py
+%%WWWDIR%%/plugins/bacnet/data/abilities/collection/1811b7f2-3a73-11eb-adc1-0242ac120002.yml
+%%WWWDIR%%/plugins/bacnet/data/abilities/collection/47432648-5678-11eb-ae93-0242ac130002.yml
+%%WWWDIR%%/plugins/bacnet/data/abilities/collection/73a8f024-656d-11eb-ae93-0242ac130002.yml
+%%WWWDIR%%/plugins/bacnet/data/abilities/discovery/b93bd80e-3a70-11eb-adc1-0242ac120002.yml
+%%WWWDIR%%/plugins/bacnet/data/abilities/impact/1a2faf5a-4601-11eb-b378-0242ac130002.yml
+%%WWWDIR%%/plugins/bacnet/data/abilities/impact/7888f6a0-454e-11eb-b378-0242ac130002.yml
+%%WWWDIR%%/plugins/bacnet/data/sources/ddc9cb50-74b7-4f32-9ed1-39bb0a58c954.yml
+%%WWWDIR%%/plugins/bacnet/docs/assets/bacnet-bd-transparent.png
+%%WWWDIR%%/plugins/bacnet/docs/assets/bacnet-bd.png
+%%WWWDIR%%/plugins/bacnet/docs/assets/ics-coverage-map.png
+%%WWWDIR%%/plugins/bacnet/docs/bacnet.md
+%%WWWDIR%%/plugins/bacnet/hook.py
+%%WWWDIR%%/plugins/bacnet/payloads/17f06fa2-44e1-11eb-b378-0242ac130002.yml
+%%WWWDIR%%/plugins/bacnet/payloads/bacarf
+%%WWWDIR%%/plugins/bacnet/payloads/bacarf.exe
+%%WWWDIR%%/plugins/bacnet/payloads/bacawf
+%%WWWDIR%%/plugins/bacnet/payloads/bacawf.exe
+%%WWWDIR%%/plugins/bacnet/payloads/bacepics
+%%WWWDIR%%/plugins/bacnet/payloads/bacepics.exe
+%%WWWDIR%%/plugins/bacnet/payloads/bacrp
+%%WWWDIR%%/plugins/bacnet/payloads/bacrp-freebsd
+%%WWWDIR%%/plugins/bacnet/payloads/bacrp.exe
+%%WWWDIR%%/plugins/bacnet/payloads/bacwi
+%%WWWDIR%%/plugins/bacnet/payloads/bacwi.exe
+%%WWWDIR%%/plugins/bacnet/payloads/bacwp
+%%WWWDIR%%/plugins/bacnet/payloads/bacwp-freebsd
+%%WWWDIR%%/plugins/bacnet/payloads/bacwp.exe
+%%WWWDIR%%/plugins/bacnet/src/README.md
+%%WWWDIR%%/plugins/bacnet/src/bacnet-stack/apps/readprop/main.c
+%%WWWDIR%%/plugins/bacnet/src/bacnet-stack/apps/writeprop/main.c
+%%WWWDIR%%/plugins/bacnet/static/.gitkeep
+%%WWWDIR%%/plugins/bacnet/templates/bacnet.html
+%%WWWDIR%%/plugins/dnp3/.gitignore
+%%WWWDIR%%/plugins/dnp3/LICENSE
+%%WWWDIR%%/plugins/dnp3/NOTICE.md
+%%WWWDIR%%/plugins/dnp3/README.md
+%%WWWDIR%%/plugins/dnp3/app/dnp3_api.py
+%%WWWDIR%%/plugins/dnp3/app/dnp3_gui.py
+%%WWWDIR%%/plugins/dnp3/app/dnp3_svc.py
+%%WWWDIR%%/plugins/dnp3/data/abilities/collection/316f2be2-3103-4065-a128-50ae3456e7f3.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/collection/7f68f5b0-1bc8-4fee-baa5-ab7e95ec2782.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/collection/a2c8f215-d4d8-4e2b-b73f-6d33ecc89028.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/impact/14b02f84-e3dd-4297-837b-8b5b7056dd52.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/impact/1a3600f7-f434-46f0-82f8-7a7a355f62cb.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/impact/2a4109a7-5a44-42a5-8944-83b0ba93ed47.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/impact/3c0839b3-3335-47cd-b3fe-f0ae127a4903.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/impact/4f8c7df8-5031-4d36-ae58-d3509976bd9d.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/impact/6e8fce00-860a-47bb-a694-1528102ad56a.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/impact/afa55ec5-4762-40ad-8d38-ac98da8f43bb.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/inhibit-response-function/69cddd4e-92e3-430f-af44-1da58f89e018.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/inhibit-response-function/7a9cadfe-8522-422f-9e19-3953371b5474.yml
+%%WWWDIR%%/plugins/dnp3/data/abilities/inhibit-response-function/9a65f3ea-67b9-4eff-99c4-b635f8267ea4.yml
+%%WWWDIR%%/plugins/dnp3/data/sources/acddbe28-e240-465f-b721-03b3d64c1d93.yml
+%%WWWDIR%%/plugins/dnp3/docs/assets/dnp3_bd.png
+%%WWWDIR%%/plugins/dnp3/docs/assets/dnp3_bd_transparent.png
+%%WWWDIR%%/plugins/dnp3/docs/assets/heatmap.PNG
+%%WWWDIR%%/plugins/dnp3/docs/dnp3.md
+%%WWWDIR%%/plugins/dnp3/hook.py
+%%WWWDIR%%/plugins/dnp3/payloads/dnp3actions.exe
+%%WWWDIR%%/plugins/dnp3/payloads/dnp3poll.exe
+%%WWWDIR%%/plugins/dnp3/payloads/dnp3server.exe
+%%WWWDIR%%/plugins/dnp3/payloads/f1c40891-944d-4fe5-99bb-ea99a0ada34a.yml
+%%WWWDIR%%/plugins/dnp3/src/.gitignore
+%%WWWDIR%%/plugins/dnp3/src/CMakeLists.txt
+%%WWWDIR%%/plugins/dnp3/src/README.md
+%%WWWDIR%%/plugins/dnp3/src/bin/dnp3actions.exe
+%%WWWDIR%%/plugins/dnp3/src/bin/dnp3poll.exe
+%%WWWDIR%%/plugins/dnp3/src/bin/dnp3server.exe
+%%WWWDIR%%/plugins/dnp3/src/deps/cmake/asio.cmake
+%%WWWDIR%%/plugins/dnp3/src/deps/cmake/catch.cmake
+%%WWWDIR%%/plugins/dnp3/src/deps/cmake/exe4cpp.cmake
+%%WWWDIR%%/plugins/dnp3/src/deps/cmake/opendnp3-export-debug.cmake
+%%WWWDIR%%/plugins/dnp3/src/deps/cmake/opendnp3-export.cmake
+%%WWWDIR%%/plugins/dnp3/src/deps/cmake/ser4cpp.cmake
+%%WWWDIR%%/plugins/dnp3/src/deps/include/CLI11.hpp
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/ConsoleLogger.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/DNP3Manager.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/ErrorCodes.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/IResource.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/IStack.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/StackStatistics.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/AnalogCommandEvent.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/AnalogOutput.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/AppConstants.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/BaseMeasurementTypes.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/BinaryCommandEvent.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/ClassField.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/ControlRelayOutputBlock.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/DNPTime.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/EventCells.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/EventTriggers.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/EventType.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/Flags.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/GroupVariationID.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/IINField.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/Indexed.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/MeasurementInfo.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/MeasurementTypes.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/OctetData.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/OctetString.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/app/parsing/ICollection.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/channel/ChannelRetry.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/channel/IChannel.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/channel/IChannelListener.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/channel/IListener.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/channel/IOpenDelayStrategy.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/channel/IPEndpoint.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/channel/PrintingChannelListener.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/channel/SerialSettings.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/channel/TLSConfig.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/decoder/Decoder.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/decoder/IDecoderCallbacks.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/AnalogOutputStatusQuality.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/AnalogQuality.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/AssignClassType.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/Attributes.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/BinaryOutputStatusQuality.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/BinaryQuality.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/ChannelState.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/CommandPointState.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/CommandStatus.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/CounterQuality.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/DoubleBit.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/DoubleBitBinaryQuality.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/EventAnalogOutputStatusVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/EventAnalogVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/EventBinaryOutputStatusVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/EventBinaryVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/EventCounterVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/EventDoubleBinaryVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/EventFrozenCounterVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/EventMode.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/EventOctetStringVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/EventSecurityStatVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/FlagsType.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/FlowControl.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/FrozenCounterQuality.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/FunctionCode.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/GroupVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/IndexQualifierMode.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/IntervalUnits.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/LinkFunction.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/LinkStatus.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/MasterTaskType.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/OperateType.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/OperationType.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/Parity.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/PointClass.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/QualifierCode.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/RestartMode.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/RestartType.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/ServerAcceptMode.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticAnalogOutputStatusVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticAnalogVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticBinaryOutputStatusVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticBinaryVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticCounterVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticDoubleBinaryVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticFrozenCounterVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticOctetStringVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticSecurityStatVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticTimeAndIntervalVariation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StaticTypeBitmask.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/StopBits.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/TaskCompletion.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/TimeSyncMode.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/TimestampQuality.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/gen/TripCloseCode.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/link/Addresses.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/link/ILinkListener.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/link/LinkConfig.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/link/LinkHeaderFields.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/link/LinkStatistics.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/logging/ILogHandler.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/logging/LogLevels.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/logging/Logger.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/CommandPointResult.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/CommandResultCallbackT.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/CommandSet.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/DefaultListenCallbacks.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/DefaultMasterApplication.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/HeaderInfo.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/HeaderTypes.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/ICommandCollection.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/ICommandProcessor.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/ICommandTaskResult.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/IListenCallbacks.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/IMaster.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/IMasterApplication.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/IMasterOperations.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/IMasterScan.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/IMasterSession.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/ISOEHandler.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/ISessionAcceptor.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/ITaskCallback.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/IUTCTimeSource.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/MasterParams.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/MasterStackConfig.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/PrintingCommandResultCallback.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/PrintingSOEHandler.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/ResponseInfo.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/RestartOperationResult.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/TaskConfig.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/TaskId.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/TaskInfo.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/master/X509Info.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/ApplicationIIN.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/DatabaseConfig.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/DefaultOutstationApplication.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/EventBufferConfig.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/ICommandHandler.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/IDnpTimeSource.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/IOutstation.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/IOutstationApplication.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/IUpdateHandler.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/MeasurementConfig.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/NumRetries.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/OutstationConfig.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/OutstationParams.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/OutstationStackConfig.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/SimpleCommandHandler.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/StaticTypeBitfield.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/UpdateBuilder.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/outstation/Updates.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/util/Buffer.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/util/StaticOnly.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/util/TimeDuration.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/util/Timestamp.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/util/UTCTimestamp.h
+%%WWWDIR%%/plugins/dnp3/src/deps/include/opendnp3/util/Uncopyable.h
+%%WWWDIR%%/plugins/dnp3/src/deps/lib/libopendnp3.a
+%%WWWDIR%%/plugins/dnp3/src/deps/lib/old_libopendnp3.a
+%%WWWDIR%%/plugins/dnp3/src/docs/example_vscode_settings.json
+%%WWWDIR%%/plugins/dnp3/src/src/dnp3-actions/CMakeLists.txt
+%%WWWDIR%%/plugins/dnp3/src/src/dnp3-actions/config.h.in
+%%WWWDIR%%/plugins/dnp3/src/src/dnp3-actions/dnp3_actions.cpp
+%%WWWDIR%%/plugins/dnp3/src/src/dnp3-actions/dnp3_actions.h
+%%WWWDIR%%/plugins/dnp3/src/src/dnp3-actions/dnp3_cli.cpp
+%%WWWDIR%%/plugins/dnp3/src/src/dnp3-poll/CMakeLists.txt
+%%WWWDIR%%/plugins/dnp3/src/src/dnp3-poll/main.cpp
+%%WWWDIR%%/plugins/dnp3/src/src/dnp3-server/CMakeLists.txt
+%%WWWDIR%%/plugins/dnp3/src/src/dnp3-server/main.cpp
+%%WWWDIR%%/plugins/dnp3/src/utils/cmake/ClangFormat.cmake
+%%WWWDIR%%/plugins/dnp3/src/utils/cmake/ClangTidy.cmake
+%%WWWDIR%%/plugins/dnp3/src/utils/update_bins.sh
+%%WWWDIR%%/plugins/dnp3/static/.gitkeep
+%%WWWDIR%%/plugins/dnp3/templates/dnp3.html
+%%WWWDIR%%/plugins/modbus/.gitignore
+%%WWWDIR%%/plugins/modbus/LICENSE
+%%WWWDIR%%/plugins/modbus/NOTICE.md
+%%WWWDIR%%/plugins/modbus/README.md
+%%WWWDIR%%/plugins/modbus/app/modbus_api.py
+%%WWWDIR%%/plugins/modbus/app/modbus_gui.py
+%%WWWDIR%%/plugins/modbus/app/modbus_svc.py
+%%WWWDIR%%/plugins/modbus/app/parsers/processid.py
+%%WWWDIR%%/plugins/modbus/data/abilities/collection/001e21ea-61b5-4b78-b79e-9d5687d819bd.yml
+%%WWWDIR%%/plugins/modbus/data/abilities/collection/3946b6da-c570-47cd-b63f-c13875297cb4.yml
+%%WWWDIR%%/plugins/modbus/data/abilities/collection/bc8961a2-7534-4b2a-bbc3-2456f58243be.yml
+%%WWWDIR%%/plugins/modbus/data/abilities/collection/d80b9cd5-b1d8-482a-a745-71d74f9d0885.yml
+%%WWWDIR%%/plugins/modbus/data/abilities/impact/056e6289-4cbf-417f-928a-d75125e4db4f.yml
+%%WWWDIR%%/plugins/modbus/data/abilities/impact/0f16b341-9730-4553-b6d6-8eb8def02c81.yml
+%%WWWDIR%%/plugins/modbus/data/abilities/impact/2a6e8c8e-f350-11ed-9156-23436b8f0e58.yml
+%%WWWDIR%%/plugins/modbus/data/abilities/impact/40f78a8f-2aaa-4b1b-872f-7c6b0f1ddf3e.yml
+%%WWWDIR%%/plugins/modbus/data/abilities/impact/d6991b6b-d3b2-4398-ad3f-d736ae09acf9.yml
+%%WWWDIR%%/plugins/modbus/data/abilities/impact/fe321da2-e183-44a3-b423-b8cba9a8bda0.yml
+%%WWWDIR%%/plugins/modbus/data/sources/0033b644-a615-4eff-bcf3-178e9b17adc3.yml
+%%WWWDIR%%/plugins/modbus/docs/assets/.gitkeep
+%%WWWDIR%%/plugins/modbus/docs/assets/heatmap.jpg
+%%WWWDIR%%/plugins/modbus/docs/assets/modbus_diagram.jpg
+%%WWWDIR%%/plugins/modbus/docs/modbus.md
+%%WWWDIR%%/plugins/modbus/hook.py
+%%WWWDIR%%/plugins/modbus/payloads/58aaab96-7191-4978-acec-a3b1deb03332.yml
+%%WWWDIR%%/plugins/modbus/payloads/modbus_cli
+%%WWWDIR%%/plugins/modbus/payloads/modbus_cli.exe
+%%WWWDIR%%/plugins/modbus/src/README.md
+%%WWWDIR%%/plugins/modbus/src/bin/.gitkeep
+%%WWWDIR%%/plugins/modbus/src/bin/modbus_cli
+%%WWWDIR%%/plugins/modbus/payloads/modbus_cli-freebsd
+%%WWWDIR%%/plugins/modbus/src/bin/modbus_cli.exe
+%%WWWDIR%%/plugins/modbus/src/src/.gitkeep
+%%WWWDIR%%/plugins/modbus/src/src/Pipfile
+%%WWWDIR%%/plugins/modbus/src/src/modbus/__init__.py
+%%WWWDIR%%/plugins/modbus/src/src/modbus/actions/__init__.py
+%%WWWDIR%%/plugins/modbus/src/src/modbus/actions/proc_modbus.py
+%%WWWDIR%%/plugins/modbus/src/src/modbus/actions/spec.py
+%%WWWDIR%%/plugins/modbus/src/src/modbus/client.py
+%%WWWDIR%%/plugins/modbus/src/src/modbus/common.py
+%%WWWDIR%%/plugins/modbus/src/src/modbus/version.py
+%%WWWDIR%%/plugins/modbus/src/src/modbus_cli.py
+%%WWWDIR%%/plugins/modbus/src/src/requirements.txt
+%%WWWDIR%%/plugins/modbus/src/tests/.gitkeep
+%%WWWDIR%%/plugins/modbus/src/tests/sync_server_ex.py
*** 19 LINES SKIPPED ***