Replies: 1 comment 2 replies
-
This is actually something that I've gone back and forth on a bunch. For the current implementation, I tried to keep things consistent and give ultimate control to the agent developers for both Wrappers and C2 Profiles. Right now, the agent developer identifies what it supports (which wrappers and which c2 profiles). That way Bob, as the developer of AgentB, can look at WrapperA and decide if they can support it or not. It becomes trickier, from a public sense, for WrapperA to say that AgentB supports it because if there's an issue, Bob might not have any knowledge of WrapperA. From an internal standpoint, I can see the benefits of being able to make per-agent customizations in your own private Wrapper and identify that the public agents are supported. Consider the following scenario: WrapperA can take in any Windows agent as long as it is in shellcode format. Apollo currently supports this format. WrapperA identifies that it works with Apollo. Tomorrow, for whatever reason, Apollo removes this capability (unaware that WrapperA needs it to support Apollo) and now people run into issues with WrapperA and Apollo. Some users will open an issue on Apollo saying it's no longer working with WrapperA, but the Apollo dev has no idea what WrapperA is. The Apollo dev either now has the additional burden of trying to bring this support back (may or may not want to) or has to move the issues over to WrapperA. That scenario of course only really applies when it's all public components, which I can see as being pretty burdensome when you're dealing with a private wrapper you want to use with public agents. I'd need to add extra checks in Mythic when syncing PayloadType data over to determine if there's a link or not, but it's not impossible. |
Beta Was this translation helpful? Give feedback.
-
Hi. I was playing with writing custom payload wrappers and faced the behavior which I think can be improved.
Currently every payload type should specify the list of wrappers which can be used with it. This means that if I am implementing a wrapper which is applicable to any OS-specific payload (lets say to any Linux payload) I will need to go through every Linux-compatible payload source code and add my own wrapper to it. Considering that later I will want to receive updates from the upstream of this payload type, I will need to deal with patch management.
In my opinion, it will be better if we will be able to specify which kind of payloads can be wrapped by wrapper it the wrapper configuration. What do you think about it?
I checked the source code and it looks like it should be easy to implement this idea and it should not break anything (please let me know if I missing something). Of course, we can keep old behavior for compatibility, adding new field and logic only for payload wrappers.
If you think that my idea is good I will be happy to contribute :)
Beta Was this translation helpful? Give feedback.
All reactions