Payload Execution Guardrails - Environment Variable Checks #248
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Why
Adversaries may use execution guardrails to constrain execution or actions based on adversary supplied and environment specific conditions that are expected to be present on the target. Guardrails ensure that a payload only executes against an intended target and reduces collateral damage from an adversary’s campaign (more info).
Additions
This PR adds environment variable checks for the Grunt HTTP Stager before executing any of the stages. The desired environment variables can be specified when creating a new HTTP launcher in the following format:
enVar1=value1;envVar2=value2;envVar3=value3....
Example:
USERNAME=ATTL4S;USERDOMAIN=SIMONE;LOGONSERVER=\\DC01
If this form is empty, the Stager will just run without checking anything.
Future Work?
The way we implemented this has an obvious caveat: all the logic is hardcoded in the Stager, so anyone will be able to see who is the actual target. In addition, this implementation doesn't protect in any way the final payload, as anyone could bypass this env check and just jump to the stages and actual code.
Cheers!