Zui Hands-on Labs¶
Choose the route that fits your available time and computing resources. Use the Interactive Lab for a short, guided Zui investigation in this page, or the Full Lab to import and analyse the original PCAP in an isolated VM.
Hands-on proof of concept
Query it. Correlate it. Support it.
Explore structured network records, connect Zeek and Suricata evidence, isolate one suspicious flow, and preserve enough information for another analyst to reproduce your conclusion.
Zui Full Lab
How this differs from the guided walkthrough
The guided journeys preserve the original screenshots and demonstrated investigation. This lab asks you to validate the source evidence, record exact queries, produce an extracted flow, and write a result that another analyst can reproduce.
Use an isolated, authorised environment
Treat the supplied capture and anything derived from it as hostile evidence. Use a disposable VM, disable shared folders and unnecessary networking, take a clean snapshot, and never execute an observed or extracted file.
Before you begin
You need: one disposable Ubuntu analysis VM, administrator access, approximately 8 GB of RAM and 40 GB of free disk space, Zui, and an authorised copy of the 3 June 2021 training archive used by the walkthrough. Wireshark is needed only for the optional packet-validation extension.
How to use this lab
Complete one session at a time. Stop at a milestone if the expected result is missing. Fix the import or correlation boundary before investigating files or extracting packets.
Recommended first
Beginner Core Lab¶
Import one documented PCAP, identify one Suricata alert, pivot by Community ID, connect the related Zeek records, and write a bounded conclusion.
Expected time: 2–3 hours across three sessions.
Optional extension
Complete Analysis Lab¶
After the core milestones pass, investigate observed files, perform an approved hash lookup, and extract the selected flow for packet-level validation.
Expected time: one or more additional sessions.
- Session 1Prepare and snapshot
- Session 2Import and orient
- Session 3Correlate and report
Objective¶
You are investigating a suspicious TLS flow in a malware-traffic training capture. Determine which Suricata alert describes the activity, which Zeek records belong to the same flow, and whether the available network evidence is sufficient to escalate. Do not claim endpoint execution or compromise unless separate evidence supports it.
Complete the Beginner Core Lab before attempting the optional file, reputation, or packet-extraction extensions.
01
Activity 1: Build and baseline the environment¶
Create the build record¶
Record these values before importing evidence:
| Item | Value to record |
|---|---|
| Validation | Date, analyst, and purpose |
| Zui | Exact version, package filename, source URL, and SHA-256 |
| Analysis VM | OS release, architecture, memory, storage, and isolation mode |
| Brimcap | Version reported by the installed package, where available |
| Source archive | URL, retrieval date, filename, size, and SHA-256 |
| Source PCAP | Filename, size, and SHA-256 after extraction |
| Recovery point | Clean snapshot name and disabled VM integrations |
The demonstrated dataset is the 3 June 2021 sample from
Malware-Traffic-Analysis.net.
Record the source page and the exact files you retrieve. The archive password
follows the source site's documented infectedYYYYMMDD pattern. Do not extract
the archive outside the isolated VM or redistribute its contents.
Prepare and validate Zui¶
- Create or select a disposable Ubuntu analysis VM.
- Place it on an isolated virtual network.
- Disable shared folders, clipboard integration, drag-and-drop, and automatic removable-media attachment.
- Follow the Zui installation procedure.
- Confirm that Zui starts and can open a blank query session.
- Transfer the archive into the VM, then calculate its hash before extraction:
- Extract the archive inside the VM and hash the source PCAP:
- Record any filename, hash, package, or interface difference from the walkthrough.
- Create a clean snapshot named
zui-clean-baselinebefore importing the capture.
Expected result Zui opens successfully, the build record identifies each external artifact, the analysis VM is isolated, and the clean snapshot can be restored.
02
Activity 2: Import and investigate the capture¶
Import and orient¶
Follow these checkpoints in order:
- The source is unchangedRecalculate the PCAP hash and compare it with the Activity 1 record.
- The import completesUse Import Data, select the PCAP, and wait for processing to finish without an unresolved error.
- The pool opensOpen Query Pool and confirm the source appears after
from. - The dataset is orientedRecord the pool name, import times, visible time range, total rows, number of shapes, and processing warnings.
- The record families are recognisedIdentify a Zeek
conn,dns, andsslrecord and one Suricataalert.
Use the record labels—not colour alone—to classify results:
| Record cue | Meaning |
|---|---|
_path: conn |
Zeek connection metadata |
_path: dns |
Zeek DNS activity |
_path: ssl |
Zeek TLS/SSL metadata |
event_type: alert |
Suricata alert event |
Narrow the evidence¶
-
Right-click the
alertvalue besideevent_typeand select Filter == value. Zui should generate a condition equivalent to: -
Select an alert associated with the suspicious TLS activity. Record its timestamp, signature, source, destination, ports, and Community ID.
-
Right-click the Community ID and select Filter == value. Remove the earlier
event_typecondition so records from other tools can return. The remaining condition should follow this pattern: -
Run the query. Confirm that the result contains the selected Suricata alert and compatible Zeek records with matching flow endpoints.
- Preserve every query exactly as run. Record unsuccessful queries when they explain a field substitution or change in approach.
Expected result The imported dataset contains identifiable Zeek and Suricata records, one relevant alert is documented, and an exact community-ID query returns related records across tools.
03
Activity 3: Correlate, preserve, and report¶
Correlate the flow¶
- Open Detail and record the fields that describe the selected connection.
- Open Correlations and identify related
conn,ssl, and alert tiles. - Record the originator, responder, ports, duration, bytes, UID, and community ID.
- Explain which records are connected by Zeek UID and which use community ID.
- Compare endpoints and direction before accepting a suggested correlation. Similar timestamps alone do not establish that records describe one flow.
Use this model when explaining the evidence:
Before continuing, answer:
- Which identifier connects records produced by Zeek?
- Which identifier supports the cross-tool pivot?
- What evidence shows that the source, destination and direction are compatible?
- Does the network evidence prove successful endpoint execution?
Optional: investigate an observed file and reputation context
Identify the observed file¶
- Run
filename != null. - Select the file relevant to the correlated activity.
- Record its timestamp, filename, MIME type, connection identifier, hash algorithm, and hash value.
- If policy permits an external reputation lookup, record the provider, query time, and result. Do not upload the file.
- Treat reputation as context rather than proof of execution.
Optional: extract and validate the selected packet flow
Extract and validate the flow¶
- Return to the relevant connection and select Download Packets.
- Save the extracted capture inside the isolated VM.
- Record its filename, size, and SHA-256.
- Open it in Wireshark and confirm that its endpoints and time range match the Zui record.
- Do not export or execute observed payloads merely to complete the exercise.
Write the conclusion¶
Include the investigation question, source PCAP hash, exact queries, relevant timestamps and endpoints, alert signature, UID, community ID, observed filename and hash or extracted-flow hash when an optional extension was completed, supported conclusion, and limitations.
Use this structure for your first analyst note:
Investigation question:
Source PCAP and SHA-256:
Selected alert and timestamp:
Source and destination:
Community ID:
Related Zeek records and UID:
Optional file or extracted-flow evidence:
What the evidence supports:
What the evidence does not prove:
Confidence, limitations, and next action:
For peer validation, ask another analyst to repeat the saved queries. If you
are working alone, restore zui-clean-baseline, reimport the same source PCAP,
and repeat the Community ID pivot. Record any version-dependent differences.
Expected result Another analyst can repeat the queries, trace the alert to related Zeek records, explain the UID and Community ID pivots, and distinguish observed network facts from assumptions about endpoint execution.
Full Lab evidence checklist¶
This checklist applies to the VM-based Full Lab. If you completed the Interactive Lab, retain its downloaded evidence summary instead. Record optional file, reputation, and packet-extraction evidence separately.
Optional extension evidence
If used, retain the observed filename, MIME type and hash; approved reputation context; or extracted-flow filename, size and SHA-256 alongside the core record. Optional evidence does not replace a missing core milestone.
Troubleshooting¶
| Symptom | First check |
|---|---|
| Import appears stuck | Confirm the VM has free disk space and wait for processing to finish before opening Query Pool. Preserve any import error before retrying. |
| The pool contains no Suricata alerts | Confirm you imported the documented PCAP and that bundled processing completed. Record the Zui and Brimcap versions before substituting another dataset. |
| A field name differs from the walkthrough | Open Detail, identify the equivalent field in your record, and preserve the exact query and substitution. |
| The alert-only filter does not run | Remove the generated condition, right-click the actual event_type value again, and compare the resulting syntax with your saved query. |
| Community ID returns only one record type | Remove the event_type condition, verify the complete Community ID, and compare endpoints. Not every dataset or processing version produces every record family. |
| Download Packets is unavailable | Select a connection backed by the imported PCAP and confirm processing completed. Treat extraction as optional if the index is unavailable. |
| The extracted capture differs from the selected flow | Compare its source hash, endpoints, ports and time range before relying on it. Do not modify the source PCAP to force a match. |
Clean up¶
- Close Zui, Wireshark, terminals, and text editors.
- Preserve authorised notes, queries, hashes, and required packet evidence in the approved case or lab location.
- Delete temporary extracted content and packet-flow copies from transfer locations.
- Revert the disposable VM to
zui-clean-baseline, or securely dispose of it according to the lab procedure. - Confirm that shared folders and clipboard integration remain disabled.
- Record who completed cleanup and when.