Change Log
What's new for 2.2?
The following are the breaking changes for this version
For detailed steps on how to make updates as a developer, check out the updating guide for how to take your 2.1.* agent into the 2.2.2 Mythic
All Payload Types and C2 Profiles are split out from the main Mythic repo. If you just install mythic and start it, there will be no payload types or c2 profiles that sync in. You need to leverage the installer script to install additional agents from GitHub
To help support this and keep track of these sorts of updates, containers now have "versions" and the main Mythic server has a range of supported container versions. If you have a container that tries to check in that's outside that range, you'll get a warning in the Mythic UI.
All Payload Types need to do the following:
Control for container files have been moved into PyPi packages rather than just raw files on disk so that updating them will be easier going forward. The current version needed for this is version 0.0.42 (yes, lots of development has been going on):
pip install mythic_payloadtype_container==0.0.42
.If you are using a DockerImage from the
itsafeaturemythic
repo, update to the latest:csharp_payload==0.0.11
python38_payload==0.0.4
xgolang_payload==0.0.9
leviathan_payload==0.0.4
Updating to using a PyPi package instead of local files means that you need to adjust the imports for all of the Python files for your agents. It's nothing too crazy, but you'll update like so: Payload Type Info
All C2 Profiles need to do the following:
Control for container files has been moved into PyPi packages rather than just raw files on disk so that updating them will be easier going forward. The current version needed for this is version 22:
pip install mythic_c2
_container==0.0.22
Updating to using a PyPi packages instead of local files means that you need to adjust the imports for all of the Python files for your C2 profiles. It's nothing too crazy, but you'll need to update like so if you've created your own C2 profiles: C2 Docker Containers.
Mythic crypto is defined by the Payload Type now rather than the C2 profile. This is part of a change to keep each container in charge of just one thing. Payload Types by default have Mythic handle their crypto, to have a Payload Type do something other than what Mythic does, set
mythic_encrypts = False
in the builder file for your Payload Type.To more easily support various crypto components going forward, the selection and usage of Crypto parameters in C2 profiles has changed slightly. There's no longer a requirement that the parameter name be
AESPSK
. Instead, there is another field you can specify for any parameter thatcrypto_type=True
. This specifies that the resulting thing that the user selects/inputs defines what kind of crypto to use. This is simply a boolean value so that you can still leverage the C2 Parameter as normal (string input, choose one, etc) with the expectation that the final value is the type of crypto. In the case of Mythic's standard crypto, the value would beaes256_hmac
. This means that Mythic no longer auto-generates a base64 of an AES256 key when displayed to the user, this happens behind the scenes if the resulting type isaes256_hmac
.This also causes some variation when building your payload. Normally, you get a dictionary of {"key": "value"} for each C2 Profile parameter for you to leverage when building your payload. For crypto though, this could be highly variable and the components that you want to leverage could vary widely. So, if the parameter has
crypto_type=True
, then you'll get a dictionary of values. This is split out by type, encryption key, and decryption key because you might want to leverage some pub/priv key asymmetric crypto where those pieces are different or you might want to leverage some other kind of symmetric crypto.
Make sure you update your pip install of the
mythic==0.0.19
package for scripting to handle the updated aspects of these objects.
What Changed for 2.0?
What changed for 1.4?
Slack notifications on new callbacks
The ability to have this only fire for specific payloads (i.e. you might not want it to happen for all of your lateral movement payloads, but do want it to fire for your phishing payloads)
Exportable search results (just export the page or the entire results of a search query)
Exportable artifact search results (just the page or the entire results)
More granular search controls
Filter search by operator
Duplicate saved parameters for c2 profiles to make quick edits
Edit credentials that are saved in the database
Add comments to the saved credentials
Export final report in JSON format
Export information about downloaded / uploaded files
Automatically calculate MD5/SHA1 of files
Badge notifications and searching for Keylogging
Task comments shown when viewing files
Download command output as a text file
Selective caching of responses so large output doesn't slow down the entire callback
Confirmation for mass exit/remove via the UI of callbacks
Issuing a command that causes a parameter popup will first try to auto-populate the values with the last instance of the command you ran on that callback
Save current browsing view in main callback window across refreshes (open tabs)
8hr default token expiration and browser will auto-renew periodically so that there are fewer interruptions in longer ops
Use tab to select autocomplete option and up/down arrows to toggle through autocomplete options
Use
ctrl+[
andctrl+]
to navigate previous/next tab in theactive callbacks
tab.set callback description from command line via
set description my description
and reset it back to the default for the payload withset description reset
Your open tabs for the active callbacks view will be remembered per-browser
View Apfell's web log from within the main web UI
Only start select payload type containers when starting Apfell -
./start_apfell.sh viper
will only start theviper
payload type container, but all of the c2 profiles and main containers will still start.Turn arbitrary VMs into Apfell compatible containers
Import and export single commands at a time instead of the whole payload type
C2 profiles support jitter percentages
Kill Dates in C2 profiles
Bulk download files from downloads page as zip file
Strict argument checking on tasking to make sure required parameters are given
Provide a single streaming list of tasking for all callbacks combined that the operation lead can watch
Filter callback viewable tasks to a single operator or all operators, certain command, and certain task ranges
Add new buttons for hiding or exiting multiple callbacks at once
C2 profiles have associated Notes, Sample Server configuration, and Sample Client configurations that are present from the main UI to give context and base configuration information. This will be particularly useful as C2 profiles grow more complex.
Provide and an interface for supporting P2P communications and visualizations
Provide a recommended style guide for how to create new payloads to best fit in and leverage all of Apfell's features
Integration of Poseidon Agent
Integration of Atlas Agent
Integration of Chrome-extension Agent
Introduction of command-line short-hands such as swap_filenames to allow operators to type uploaded filenames, but have agents get file IDs instead.
All files are now contained within the Apfell folder, no more docker volumes mounted in weird spots automatically
Edit C2 profile code and configurations right in the browser
Included an 'event log' to see all events Apfell is doing behind the scenes as well as allow operators to 'chat' and store messages within their operation. If an operator sends a message on this screen, it'll be shown to all operators in that operation that are on the Active Callbacks page.
Included a 'web log' to see all the web requests to Apfell in the UI
Broke out transforms for commands and create/load operations to mirror the style of browser scripts
Exporting/Importing a payload type will bring along with it: payload code, all associated transforms, all command code, all browser scripts, and all c2 profile associated code.
Last updated