git: 5a0c6e41bf4b - main - security/caldera-ot: New port: caldera OT plugin and capabilities

From: Jose Alonso Cardenas Marquez <acm_at_FreeBSD.org>
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 ***