Command Artifacts
Last updated
Last updated
Artifacts are a way to track the indicators left behind in a target environment automatically. These can be things like dropped files, network activity, process creation, and modifications to a system. Artifacts are broken out into three main pieces:
Base Artifact - Name and description of the base category of an artifact such as "File Create", "Process Create", etc.
Artifact Template - A template of how to turn a specific command into a specific artifact instance such as sh -c [shell command here]
.
Artifact Instance - A specific instance of an artifact in an operation such as Process Creation for Task 5 of "sh -c whoami" and "whoami"
Command artifacts are viewable right below the command MITRE ATT&CK mappings:
In the above screenshot there are a few important pieces to notice.
The Base Artifact
refers to the general type of artifact.
The Artifact
field refers to the general format of the artifact that's created. In this instance, executing the shell
command creates an artifact of sh -c
followed by some value.
The Replace String
indicates the string in the Artifact
string to replace when the command is executed.
The Linked Parameter
can be used to tie this specific artifact template to the value of a specific command parameter. If this is left blank, then this gets the entire set of parameters supplied.
Take the above screenshot for the shell
command as an example where you issue the command shell whoami
. There is no linked parameter, so the entire set of parameters is used. The Replace String
of *
in sh -c *
will be replaced with our parameter. So, the final artifact will be sh -c whoami
.
As another example, consider the artifact template for Upload:
An upload command will look like: upload {"remote_path": "/users/its-a-feature/Desktop/evil.bin", "file_id": 5}
. This artifact is tied to a specific parameter, so only that parameter's value will be used.
There will be a File Create
artifact created that takes the remote_path
value and replaces all instances of the Replace String
(*
) in the Artifact
with this value. In this case, that's the entire string. So, we end up with an artifact of /users/its-a-feature/Desktop/evil.bin
. If this was the shell
example with no explicit parameter called out, then the entire JSON argument string would have been passed in.