Turn a profile into deterministic work.
Tasks define ordering, resource limits, drive selection, and output folders. Entries define either filesystem patterns or executable work. This page documents every accepted field and the runtime behavior behind it.
How tasks are scheduled
Tasks are sorted by ascending priority with a stable sort over an order-preserving map, so tasks sharing a priority run in the order they appear in the YAML. A task with no priority is treated as 255 and runs last.
- 01
Parse and validate
The embedded YAML is decoded, deserialized, and normalized before any resource gate or task starts.
- 02
Sort by priority
Tasks are sorted numerically from 0 through 255. Missing priority is treated as 255; disabled tasks are skipped.
- 03
Run task groups
Top-level tasks run sequentially. Execute entries inside a task use parallel iterators and can overlap.
- 04
Check boundaries
Disk policy and the graceful-interrupt flag are checked between top-level tasks, not between every collected file.
Every task field
typecollect | execute · requiredcollect walks configured filesystem roots; execute runs internal, system, or Windows external tools.
priorityu8 · optionalLower values run first. Missing values sort as 255.
drivestring · optionalOverrides the run default. Windows accepts a drive letter and supports * for all detected drives; Unix values select a device or mounted path.
output_folderstring · optionalOutput prefix for the task. Expands {{root_output_path}}; collection tasks also expand {{drive}}.
max_sizeinteger MB · optionalTask-wide per-file or captured-stdout ceiling. The smallest applicable task/global/entry limit wins for collection.
exclude_drivesstring[] · optionalUsed by Windows all-drive collection to skip listed drive letters.
entriesmap of arrays · optionalNamed groups of unified entry objects. A task with no entries performs no acquisition.
disabledboolean · optionalWhen true, skips the task without an error.
memory_limitinteger MB · optionalPassed to system/external child execution. Windows enforces it with a Job Object; current Unix execution does not apply a process memory cap.
timeoutinteger seconds · optionalTask-wide child-process timeout. On timeout, Aralez terminates the process group on Unix or the Job Object/process on Windows.
Every entry field
| Field | Used by | Behavior |
|---|---|---|
root_path | Collection | Starting path. Must begin with \, /, or %. Supports glob components and %ENV_VAR% expansion. |
objects | Collection | File/directory patterns beneath the root. Supports *, ?, character sets, and recursive **. |
type | Collection | The only accepted explicit value is glob. When supplied, both root_path and objects are required. |
encrypt | Collection | Per-entry password. The NTFS reader emits AES-256-GCM .enc files; ext4 and native POSIX paths currently do not implement it. |
max_size | Collection | Per-file MB ceiling combined with section and global ceilings. Must be greater than zero. |
name | Execution | Internal collector name, system executable path/name, or embedded Windows external tool name. |
args | Execution | Argument array passed without a shell. Each argument can expand {{root_output_path}}. |
output_file | Execution | Captured stdout filename. If absent, the executable name is used and .exe becomes .txt. |
exec_type | Execution | system, internal, or Windows-only external. Missing values log a configuration error for that entry. |
link | Execution | Names another collection task. Output lines are treated as candidate file paths and fed into that task. |
timeout belongs to the task, not the entry. Unknown YAML fields are ignored by the current deserializer, so a timeout placed on one execution entry has no effect. Execution-entry max_size is accepted by the unified entry schema but the runtime passes the task/global limit to child execution instead.
Complete collection task
tasks:
priority_windows_evidence:
type: collect
priority: 1
drive: "C"
output_folder: "{{root_output_path}}\\{{drive}}\\priority"
max_size: 250
entries:
event_logs:
- root_path: "\\Windows\\System32\\winevt\\Logs"
objects: ["Security.evtx", "System.evtx", "PowerShell*.evtx"]
type: glob
user_persistence:
- root_path: "\\Users\\*\\AppData\\Roaming"
objects: ["Microsoft/Windows/Start Menu/Programs/Startup/**"]
max_size: 50tasks:
priority_unix_evidence:
type: collect
priority: 1
output_folder: "{{root_output_path}}/priority"
max_size: 250
entries:
access_history:
- root_path: "/home/*"
objects: [".bash_history", ".ssh/authorized_keys"]
persistence:
- root_path: "/etc"
objects: ["systemd/system/**", "cron.d/*"]Complete execution task
tasks:
live_state:
type: execute
priority: 0
output_folder: "{{root_output_path}}\\tools"
memory_limit: 512
timeout: 90
max_size: 100
entries:
operating_system:
- name: "systeminfo.exe"
args: []
output_file: "SystemInfo.txt"
exec_type: system
aralez_internal:
- name: "ProcInfo"
output_file: "ProcInfo.csv"
exec_type: internal
embedded_tool:
- name: "autorunsc.exe"
args: ["-nobanner", "-c", "/accepteula"]
output_file: "Autoruns.csv"
exec_type: externalPath expansion and glob rules
%NAME%environment variables are expanded inroot_path. An unresolved variable remains unchanged.- A leading Windows drive prefix is removed from expanded collection roots because the selected task drive controls the device.
- If glob syntax appears inside
root_path, the non-glob prefix becomes the traversal root and the remaining pattern is prepended to every object. **activates recursive traversal. Native/ext4 paths skip symbolic links; NTFS can collect alternate data streams throughfilename:streampatterns.- Archive entry paths are normalized to forward slashes and made relative to the root output directory.
Link command output to file acquisition
A linked execution entry interprets each non-empty stdout line as a candidate path. Aralez trims quotes, extracts leading .exe, .dll, or .sys paths when arguments follow, rejects paths without a file extension, removes a Windows drive prefix, deduplicates the set, and invokes the named collection task with those paths.
tasks:
service_binaries:
type: collect
priority: 3
output_folder: "{{root_output_path}}\\linked-services"
discover_services:
type: execute
priority: 2
entries:
paths:
- name: "powershell"
args: ["-NoProfile", "-Command", "Get-CimInstance Win32_Service | Select-Object -ExpandProperty PathName"]
output_file: "ServicePaths.txt"
exec_type: system
link: "service_binaries"Validation rules and practical checks
- Duplicate entry-group names inside one
entriesmap are rejected. - An explicit
max_size: 0and an empty entry-levelencryptstring are rejected. - External execution is rejected when a Linux or macOS binary parses the profile.
- The configuration loader accepts UTF-8, UTF-16LE/BE with a BOM, and BOM-less UTF-16LE detected by alternating NUL bytes.
- Use
--change_configto validate a candidate file, then run--check_configand--show_configon the resulting executable.