@@ -87,6 +87,7 @@ RUN export BINARCH=$(uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')
87
87
libmaxminddb0 \
88
88
libpcap-dev \
89
89
libpcap0.8 \
90
+ librdkafka-dev \
90
91
libssl-dev \
91
92
libssl3 \
92
93
libtcmalloc-minimal4 \
@@ -107,6 +108,7 @@ RUN export BINARCH=$(uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')
107
108
python3-setuptools \
108
109
python3-tz \
109
110
python3-wheel \
111
+ python3-yaml \
110
112
python3-zmq \
111
113
rsync \
112
114
supervisor \
@@ -115,7 +117,12 @@ RUN export BINARCH=$(uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')
115
117
vim-tiny \
116
118
xxd \
117
119
zlib1g-dev && \
118
- python3 -m pip install --break-system-packages --no-cache-dir pymisp stix2 taxii2-client dateparser && \
120
+ python3 -m pip install --break-system-packages --no-cache-dir \
121
+ dateparser \
122
+ git+https://github.com/google/mandiant-ti-client \
123
+ pymisp \
124
+ stix2 \
125
+ taxii2-client && \
119
126
mkdir -p /tmp/zeek-packages && \
120
127
bash /usr/local/bin/zeek-deb-download.sh -o /tmp/zeek-packages -z "${ZEEK_VERSION}" && \
121
128
dpkg -i /tmp/zeek-packages/*.deb && \
@@ -133,6 +140,7 @@ RUN export BINARCH=$(uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')
133
140
( find "${ZEEK_DIR}" /lib/zeek/plugins/packages -type f -name "*.hlto" -exec chmod 755 "{}" \; || true ) && \
134
141
mkdir -p "${ZEEK_DIR}" /share/zeek/site/intel/STIX && \
135
142
mkdir -p "${ZEEK_DIR}" /share/zeek/site/intel/MISP && \
143
+ mkdir -p "${ZEEK_DIR}" /share/zeek/site/intel/Mandiant && \
136
144
mkdir -p "${ZEEK_DIR}" /share/zeek/site/custom && \
137
145
touch "${ZEEK_DIR}" /share/zeek/site/intel/__load__.zeek && \
138
146
touch "${ZEEK_DIR}" /share/zeek/site/custom/__load__.zeek && \
@@ -174,7 +182,7 @@ RUN groupadd --gid ${DEFAULT_GID} ${PUSER} && \
174
182
175
183
# sanity checks to make sure the plugins installed and copied over correctly
176
184
# these ENVs should match the third party scripts/plugins installed by zeek_install_plugins.sh
177
- ENV ZEEK_THIRD_PARTY_PLUGINS_GREP "(Zeek::Spicy|ANALYZER_SPICY_OSPF|ANALYZER_SPICY_OPENVPN_UDP\b |ANALYZER_SPICY_IPSEC_UDP\b |ANALYZER_SPICY_TFTP|ANALYZER_SPICY_WIREGUARD|ANALYZER_SPICY_HART_IP_UDP|ANALYZER_SPICY_HART_IP_TCP|ANALYZER_SYNCHROPHASOR_TCP|ANALYZER_GENISYS_TCP|ANALYZER_SPICY_GE_SRTP|ANALYZER_SPICY_PROFINET_IO_CM|ANALYZER_S7COMM_TCP|Corelight::PE_XOR|ICSNPP::BACnet|ICSNPP::BSAP|ICSNPP::ENIP|ICSNPP::ETHERCAT|ICSNPP::OPCUA_Binary|Salesforce::GQUIC|Zeek::PROFINET|Zeek::TDS)"
185
+ ENV ZEEK_THIRD_PARTY_PLUGINS_GREP "(Zeek::Spicy|ANALYZER_SPICY_OSPF|ANALYZER_SPICY_OPENVPN_UDP\b |ANALYZER_SPICY_IPSEC_UDP\b |ANALYZER_SPICY_TFTP|ANALYZER_SPICY_WIREGUARD|ANALYZER_SPICY_HART_IP_UDP|ANALYZER_SPICY_HART_IP_TCP|ANALYZER_SYNCHROPHASOR_TCP|ANALYZER_GENISYS_TCP|ANALYZER_SPICY_GE_SRTP|ANALYZER_SPICY_PROFINET_IO_CM|ANALYZER_S7COMM_TCP|Corelight::PE_XOR|ICSNPP::BACnet|ICSNPP::BSAP|ICSNPP::ENIP|ICSNPP::ETHERCAT|ICSNPP::OPCUA_Binary|Salesforce::GQUIC|Zeek::PROFINET|Zeek::TDS|Seiso::Kafka )"
178
186
ENV ZEEK_THIRD_PARTY_SCRIPTS_GREP "(bro-is-darknet/main|bro-simple-scan/scan|bzar/main|callstranger-detector/callstranger|cve-2020-0601/cve-2020-0601|cve-2020-13777/cve-2020-13777|CVE-2020-16898/CVE-2020-16898|CVE-2021-38647/omigod|CVE-2021-31166/detect|CVE-2021-41773/CVE_2021_41773|CVE-2021-42292/main|cve-2021-44228/CVE_2021_44228|cve-2022-22954/main|cve-2022-26809/main|CVE-2022-3602/__load__|hassh/hassh|http-more-files-names/main|ja4/main|pingback/detect|ripple20/ripple20|SIGRed/CVE-2020-1350|zeek-EternalSafety/main|zeek-httpattacks/main|zeek-sniffpass/__load__|zerologon/main)\. (zeek|bro)"
179
187
180
188
RUN mkdir -p /tmp/logs && \
@@ -183,7 +191,7 @@ RUN mkdir -p /tmp/logs && \
183
191
export ZEEK_THIRD_PARTY_SCRIPTS_COUNT=$(echo "$ZEEK_THIRD_PARTY_SCRIPTS_GREP" | grep -P -o "\( [^)]+\) " | head -n 1 | sed "s/^(//" | sed "s/)$//" | tr '|' '\n ' | wc -l) && \
184
192
"$ZEEK_DIR" /bin/zeek-offline -NN local >zeeknn.log 2>/dev/null && \
185
193
bash -c "(( $(grep -cP " $ZEEK_THIRD_PARTY_PLUGINS_GREP" zeeknn.log) >= $ZEEK_THIRD_PARTY_PLUGINS_COUNT)) && echo $ZEEK_THIRD_PARTY_PLUGINS_COUNT' Zeek plugins loaded correctly' || (echo 'One or more Zeek plugins did not load correctly' && cat zeeknn.log && exit 1)" && \
186
- "$ZEEK_DIR" /bin/zeek-offline -C -r /tmp/pcaps/udp.pcap local policy/misc/loaded-scripts 2>/dev/null && \
194
+ "$ZEEK_DIR" /bin/zeek-offline -C -r /tmp/pcaps/udp.pcap local policy/misc/loaded-scripts >loaded_scripts.log 2>/dev/null && \
187
195
bash -c "(( $(grep -cP " $ZEEK_THIRD_PARTY_SCRIPTS_GREP" loaded_scripts.log) == $ZEEK_THIRD_PARTY_SCRIPTS_COUNT)) && echo $ZEEK_THIRD_PARTY_SCRIPTS_COUNT' Zeek scripts loaded correctly' || (echo 'One or more Zeek scripts did not load correctly' && cat loaded_scripts.log && exit 1)" && \
188
196
cd /tmp && \
189
197
rm -rf /tmp/logs /tmp/pcaps
@@ -195,8 +203,9 @@ ARG ZEEK_PCAP_PROCESSOR=true
195
203
# Whether or not to run "zeek -r XXXXX.pcap local" on each pcap file
196
204
ARG ZEEK_AUTO_ANALYZE_PCAP_FILES=false
197
205
ARG ZEEK_AUTO_ANALYZE_PCAP_THREADS=1
198
- # Whether or not to refresh intel at various points during processing
199
- ARG ZEEK_INTEL_REFRESH_ON_ENTRYPOINT=false
206
+ # Whether or not to do first intel refresh under supervisord
207
+ ARG ZEEK_INTEL_REFRESH_ON_STARTUP=false
208
+ # Whether or not to do first intel refresh under zeekdeploy.sh
200
209
ARG ZEEK_INTEL_REFRESH_ON_DEPLOY=false
201
210
ARG ZEEK_INTEL_REFRESH_CRON_EXPRESSION=
202
211
ARG ZEEK_INTEL_ITEM_EXPIRATION=-1min
@@ -219,7 +228,7 @@ ARG PCAP_NODE_NAME=malcolm
219
228
220
229
ENV AUTO_TAG $AUTO_TAG
221
230
ENV ZEEK_PCAP_PROCESSOR $ZEEK_PCAP_PROCESSOR
222
- ENV ZEEK_INTEL_REFRESH_ON_ENTRYPOINT $ZEEK_INTEL_REFRESH_ON_ENTRYPOINT
231
+ ENV ZEEK_INTEL_REFRESH_ON_STARTUP $ZEEK_INTEL_REFRESH_ON_STARTUP
223
232
ENV ZEEK_INTEL_REFRESH_ON_DEPLOY $ZEEK_INTEL_REFRESH_ON_DEPLOY
224
233
ENV ZEEK_INTEL_REFRESH_CRON_EXPRESSION $ZEEK_INTEL_REFRESH_CRON_EXPRESSION
225
234
ENV ZEEK_AUTO_ANALYZE_PCAP_FILES $ZEEK_AUTO_ANALYZE_PCAP_FILES
@@ -249,8 +258,6 @@ ARG ZEEK_DISABLE_SSL_VALIDATE_CERTS=
249
258
ARG ZEEK_DISABLE_TRACK_ALL_ASSETS=
250
259
ARG ZEEK_DISABLE_DETECT_ROUTERS=true
251
260
ARG ZEEK_DISABLE_BEST_GUESS_ICS=true
252
- # TODO: assess spicy-analyzer that replace built-in Zeek parsers
253
- # for now, disable them by default when a Zeek parser exists
254
261
ARG ZEEK_DISABLE_SPICY_IPSEC=
255
262
ARG ZEEK_DISABLE_SPICY_LDAP=
256
263
ARG ZEEK_DISABLE_SPICY_OPENVPN=
@@ -260,6 +267,9 @@ ARG ZEEK_DISABLE_SPICY_TAILSCALE=
260
267
ARG ZEEK_DISABLE_SPICY_TFTP=
261
268
ARG ZEEK_DISABLE_SPICY_WIREGUARD=
262
269
ARG ZEEK_SYNCHROPHASOR_DETAILED=
270
+ ARG ZEEK_KAFKA_ENABLED=
271
+ ARG ZEEK_KAFKA_BROKERS=kafka.local:9091
272
+ ARG ZEEK_KAFKA_TOPIC=zeek
263
273
264
274
ENV ZEEK_DISABLE_STATS $ZEEK_DISABLE_STATS
265
275
ENV ZEEK_DISABLE_HASH_ALL_FILES $ZEEK_DISABLE_HASH_ALL_FILES
@@ -278,6 +288,9 @@ ENV ZEEK_DISABLE_SPICY_TAILSCALE $ZEEK_DISABLE_SPICY_TAILSCALE
278
288
ENV ZEEK_DISABLE_SPICY_TFTP $ZEEK_DISABLE_SPICY_TFTP
279
289
ENV ZEEK_DISABLE_SPICY_WIREGUARD $ZEEK_DISABLE_SPICY_WIREGUARD
280
290
ENV ZEEK_SYNCHROPHASOR_DETAILED $ZEEK_SYNCHROPHASOR_DETAILED
291
+ ENV ZEEK_KAFKA_ENABLED $ZEEK_KAFKA_ENABLED
292
+ ENV ZEEK_KAFKA_BROKERS $ZEEK_KAFKA_BROKERS
293
+ ENV ZEEK_KAFKA_TOPIC $ZEEK_KAFKA_TOPIC
281
294
282
295
# This is in part to handle an issue when running with rootless podman and
283
296
# "userns_mode: keep-id". It seems that anything defined as a VOLUME
0 commit comments