Building an Empire
with PowerShell
Will Schroeder, Justin Warner
Veris Group’s Adaptive Threat Division (ATD)
First Things First
○ This tool and presentation would not be
possible if it wasn’t for the help and
phenomenal work from these people:
□ @mattifestation and @obscuresec
○ https://github.com/mattifestation/PowerSploit/
□ @carlos_perez / https://github.com/darkoperator/
□ @tifkin_ / https://github.com/leechristensen/
□ @ben0xa and @mwjcomputing
□ @enigma0x3 - The ATD Padawan
□ And the rest of the offensive PowerShell
community! All you guys rock!
@harmj0y
○ Security researcher and red teamer for the
Adaptive Threat Division of Veris Group
○ Co-founder of the Veil-Framework and
PowerTools
○ Cons: Shmoocon, Carolinacon, Defcon,
Derbycon, various BSides
@sixdub
○ Red Team Capability Lead for the
Adaptive Threat Division of Veris Group
○ Lots of interest: red team ops, reverse
engineering, adversarial tactics, etc
○ Developer on the Veil-Framework and co-
founder of PowerTools
tl;dr
○ Red Team Philosophy
○ (Offensive) PowerShell
○ RATs 101
○ Empire
○ Modules
○ Demo
○ Taking Down the Empire
○ The Future
Red Team
Philosophy
In Defense of Offense
Red Teaming
○ Red teaming means different things to
different people
□ physical ops, in-depth social engineering, custom
exploit dev, pure network based operations, etc.
○ Common thread of increased time frame,
more permissive scope and adversarial
mentality
○ We have a ‘assume breach’ perspective
□ It’s not a matter of ‘if’, but ‘when’
Malware
Motivations
○ Why did we decide to go custom?
□ Clients were signaturing tool sets
□ Needed rapid dev capability while on ops
to integrate unique vulnerabilities
○ And chance to build the RAT features we
always wanted
□ Wanted a better way to utilize existing
PowerShell capabilities
○ Attempt at solving the “weaponization
problem”
In Defense of
Offense
○ We want to help secure companies against
the level of threat that they’ve been
unknowingly facing for over a decade
□ So we need to be able to simulate at least some
of the actions of these advanced groups.
○ There is a balance between making OSS
useable for training and making the “next-
gen rootkit”
(Offensive)
PowerShell
“Microsoft’s Post-Exploitation Language”
-@obscuresec
Why PowerShell
○ PowerShell provides (out of the box):
□ Full .NET access
□ application whitelisting
□ direct access to the Win32 API
□ ability to assemble malicious binaries in memory
□ default installation Win7+ !
○ “Why I Choose PowerShell as an Attack
Platform”
□ http://www.exploit-monday.com/2012/08/Why-I-
Choose-PowerShell.html
“Bad Guys”
Existing Tech
○ PowerSploit
□ Screenshots, keylogging, Mimikatz, etc.
○ PowerView
□ Network situational awareness
○ PowerUp
□ Privilege escalation
○ PowerBreach
□ Additional persistence
○ Posh-SecMod
□ Lots of goodies
The Weaponization
Problem
○ There’s been an sharp increase in
offensive PowerShell projects over the
past year
○ But many people still struggle with how to
exactly work PowerShell into engagements
○ Using existing tech at this point hasn’t
always been the most straightforward
□ This is the problem we’re trying to solve!
RATs 101
I smell a RAT….
Just RAT Things...
○ RAT vs Backdoor… Yes they differ
○ What different things do you need to focus
on when building a RAT?
□ Delivery
□ Staging & C2
□ Modularity / Expandability
□ Forensics
□ The list goes on!!!
The Staging
Problem
○ Exotic C2 channels are nice, but somehow
your agent code has to get to your target
○ This is often the most vulnerable point of
your entire process
□ staging can be be noisey
□ some kind of logic needs to be sent “in the clear”
□ stager needs to be able to detect and utilize
proxies as best as possible
Command &
Control
○ What are the characteristics of moderate to
advanced malware out there?
□ Asynchronous
○ Low and slow wins the race
□ Variable comms
○ HTTP, HTTPS, DNS, SMB, etc.
□ Flexible indicators
○ Survivability across defensive sensors or
boundary defensive solutions
□ Proxy awareness!
Extensibility
○ The core agent should be as small as
possible with only required functionality
○ It is best to make an module interface to
allow an operator to add/subtract features
□ Follow on payloads, scripts, persistence modules
○ The modules can be loaded and removed
during use
Wait… What?
○ Empire is a full-featured PowerShell post-
exploitation agent
○ Aims to provide a rapidly extensible
platform to integrate offensive/defensive
PowerShell work
○ An attempt to train defenders on how to
stop and respond to PowerShell “attacks”
□ Another tool in the belt!
PowerShell = Just a
Toy Language?
○ Many people have written off PowerShell
as being a real malware solution because
it is a scripting language
□ “Easy” to defeat/block the interpreter
○ This has also caused incident responders
to overlook it as a malware vector
□ Helpful if we provide some real world demos :)
Server Features
○ Client-Server architecture
□ Server = Python | Client = PowerShell
○ A backend database preserves
agent/listener configurations
□ In case something goes down, your agents won’t!
○ Everything is logged, extensively
□ Taskings/results per agent, along with timestamps
□ Hashes of any files uploaded to target
□ --debug will dump a ton of output to empire.debug
Methods of
Execution
○ Small “stager” that can be manually
executed or easily implemented elsewhere
□ A powershell command block can load an Empire
agent
□ Generated per listener inside the menu
○ Stager Formats:
□ .vbs (macro), .bat, ducky script, etc.
□ Reflective Pick .DLL - Allows integration with
many other tools like MSF
Listeners
○ The “server” side of the whole system
□ Configuration of the agent set here
Additional Listener
Stuff
○ IP whitelisting/blacklisting dynamically or
by a common config
○ Kill dates and working hours nicely
integrated into listener management
○ “foreign listeners” allow the passing of
agents within the team
□ and to other agents like Meterpreter/Beacon!
Empire Staging
Control Server Client
2. return key negotiation stager.ps1 w/ shared AES
staging key
3. gen priv/pub keys, post ENCstaging(PUB) to /<stage1>
5. decrypt session key, post ENCsession(sysinfo) to /<stage2>
6. return ENCsession(agent.ps1) patched with key/delay/etc.
and register agent. Agent starts beaconing.
1. GET /<stage0>
4. return ENCpub(epoch + AES session key)
C2
○ Utilizes the .NET backend with HTTP or
HTTPS
○ Nothing too magical here…
□ “Get” request is looking for tasking
□ “Post” is returning encrypted results
In the Agent:
Contexts
○ Shell - Run Empire or PowerShell cmds
○ Scripts - Import and run PowerShell
cmdlets
○ Modules - Utilize pre-built functionality to
execute PowerShell functions across
agents
○ More later during the demo...
Modules
Because an agent actually needs
functionality
Modules
○ Currently 90 released modules
□ several more in testing testing
○ First round of modules focused on
integrating all of the current projects
□ Wanted an operational beta to use in real
environments
○ We will show some of the top used ones…
Module Categories
○ Currently have the following categories for
modules:
□ code_execution - ways to run more code
□ collection - post exploitation data collection
□ credentials - collect and use creds
□ lateral_movement - move around the network
□ management - host management and auxiliary
□ persistence - survive the reboot
□ privesc - escalation capabilities
□ situational_awareness - network awareness
□ trollsploit - for the lulz
Module
Development
○ Development is extremely fast due to the
wealth of existing PowerShell tech and the
ease of development in a scripting language
○ Modules are essentially metadata
containers for an embedded PowerShell
script
○ Things like option sets, needs admin, opsec
safe, save file output, etc
management/
psinject
○ First up: our auto-magic process injection
module for Empire
□ Takes a listener name and an optional process
name/ID
○ Uses Invoke-PSInjector to inject our
ReflectivePick .DLL into the host or
specified process
□ The launcher code to stage the agent is
embedded in the .DLL
ReflectivePick
*.exe
Invoke-PSInjector
ReflectivePick
.NET Assembly
Download Cradle
Invoke-
PowerCeption?
PowerShell in
LSASS? lol
Invoke-BypassUAC
○ Second, we need a way to escape
medium-integrity process contexts
○ The .DLL used by Metasploit’s
bypassuac_injection is open source, and
works when combined with PowerSploit’s
Invoke--Shellcode.ps1
□ Works on Win 7 and 8.1!
○ Lets us spawn high-integrity agents
Invoke-Mimikatz
○ Everyone's favorite post-exploitation
capability
○ Not just dumping creds:
□ Golden tickets
□ Silver tickets
□ PTH
□ Skeleton key
○ Empire has Internal credential model
□ Lets you easily reuse creds you’ve stolen
Invoke-WMI
○ Invoke-WMIMethod is our primary way of
moving around
□ Can take a listener name and transform it into
configurations for a launcher
□ Fairly lightweight and safe to use
○ Uses PowerShell’s Invoke-WMIMethod to
run the launcher code on a remote host
PTH
○ “But what about pass-the-hash?!!”
○ The credentials/mimikatz/pth module
(alias- pth) lets you spawn a new process
with a local or domain user’s hash
□ You can then use the credentials/tokens module
to steal the token from this new process
○ Lets you execute whatever actions you
want with just a hash
Demo
Taking Down
the Empire
How to Find and Stop Us
Detection
○ The typical network indicators will reveal
some things
□ Not as proxy aware as some agents
□ High entropy byte strings in HTTP POSTs
○ Endpoint indicators are plentiful:
□ Prefetch with PowerShell
□ .NET Assemblies loaded into odd processes
□ The list goes on…
Umm… Weird?
Memory Analysis
○ Memory analysis will reveal the entire
Empire agent plaintext in memory
□ No obfuscation is done at this point
□ Allows the extraction of AES keys
○ Decryption of malware C2
□ Useful for a red team because it rewards IR teams
to take the next step and chain analysis
Yes… plaintext
Windows 10 :)
○ “ZOMG HACKING IS OVER!!” - harmj0y
○ But for real… major improvements in the
security and monitoring of PowerShell
□ Who knows when/how clients will actually
implement the added features
○ Initial testing:
□ Logging is very very noisy with Empire
□ Constrained mode might be circumvented with
PowerPick
The Future
The Shiny Shiny Future
Moving Forward
○ We’ve released full documentation and
demo videos hosted at
www.PowerShellEmpire.com
□ There’s also a formal spec on the agent and its
associated protocol
□ All future updates will be posted here
○ This will be a long-running and fully
supported project
Dream Capabilities
○ New C2 methods
□ SMB, DNS, SOCKS Proxying etc
○ Script obfuscation/mangling to help
prevent memory parsing and to increase
training value
○ Contribute modules! it’s super easy
@harmj0y
@sixdub
https://github.com/powershellempire/empire
www.PowerShellEmpire.com
Any questions?

Building an Empire with PowerShell

  • 1.
    Building an Empire withPowerShell Will Schroeder, Justin Warner Veris Group’s Adaptive Threat Division (ATD)
  • 2.
    First Things First ○This tool and presentation would not be possible if it wasn’t for the help and phenomenal work from these people: □ @mattifestation and @obscuresec ○ https://github.com/mattifestation/PowerSploit/ □ @carlos_perez / https://github.com/darkoperator/ □ @tifkin_ / https://github.com/leechristensen/ □ @ben0xa and @mwjcomputing □ @enigma0x3 - The ATD Padawan □ And the rest of the offensive PowerShell community! All you guys rock!
  • 3.
    @harmj0y ○ Security researcherand red teamer for the Adaptive Threat Division of Veris Group ○ Co-founder of the Veil-Framework and PowerTools ○ Cons: Shmoocon, Carolinacon, Defcon, Derbycon, various BSides
  • 4.
    @sixdub ○ Red TeamCapability Lead for the Adaptive Threat Division of Veris Group ○ Lots of interest: red team ops, reverse engineering, adversarial tactics, etc ○ Developer on the Veil-Framework and co- founder of PowerTools
  • 5.
    tl;dr ○ Red TeamPhilosophy ○ (Offensive) PowerShell ○ RATs 101 ○ Empire ○ Modules ○ Demo ○ Taking Down the Empire ○ The Future
  • 6.
  • 7.
    Red Teaming ○ Redteaming means different things to different people □ physical ops, in-depth social engineering, custom exploit dev, pure network based operations, etc. ○ Common thread of increased time frame, more permissive scope and adversarial mentality ○ We have a ‘assume breach’ perspective □ It’s not a matter of ‘if’, but ‘when’
  • 8.
    Malware Motivations ○ Why didwe decide to go custom? □ Clients were signaturing tool sets □ Needed rapid dev capability while on ops to integrate unique vulnerabilities ○ And chance to build the RAT features we always wanted □ Wanted a better way to utilize existing PowerShell capabilities ○ Attempt at solving the “weaponization problem”
  • 9.
    In Defense of Offense ○We want to help secure companies against the level of threat that they’ve been unknowingly facing for over a decade □ So we need to be able to simulate at least some of the actions of these advanced groups. ○ There is a balance between making OSS useable for training and making the “next- gen rootkit”
  • 10.
  • 11.
    Why PowerShell ○ PowerShellprovides (out of the box): □ Full .NET access □ application whitelisting □ direct access to the Win32 API □ ability to assemble malicious binaries in memory □ default installation Win7+ ! ○ “Why I Choose PowerShell as an Attack Platform” □ http://www.exploit-monday.com/2012/08/Why-I- Choose-PowerShell.html
  • 12.
  • 13.
    Existing Tech ○ PowerSploit □Screenshots, keylogging, Mimikatz, etc. ○ PowerView □ Network situational awareness ○ PowerUp □ Privilege escalation ○ PowerBreach □ Additional persistence ○ Posh-SecMod □ Lots of goodies
  • 14.
    The Weaponization Problem ○ There’sbeen an sharp increase in offensive PowerShell projects over the past year ○ But many people still struggle with how to exactly work PowerShell into engagements ○ Using existing tech at this point hasn’t always been the most straightforward □ This is the problem we’re trying to solve!
  • 15.
  • 16.
    Just RAT Things... ○RAT vs Backdoor… Yes they differ ○ What different things do you need to focus on when building a RAT? □ Delivery □ Staging & C2 □ Modularity / Expandability □ Forensics □ The list goes on!!!
  • 17.
    The Staging Problem ○ ExoticC2 channels are nice, but somehow your agent code has to get to your target ○ This is often the most vulnerable point of your entire process □ staging can be be noisey □ some kind of logic needs to be sent “in the clear” □ stager needs to be able to detect and utilize proxies as best as possible
  • 18.
    Command & Control ○ Whatare the characteristics of moderate to advanced malware out there? □ Asynchronous ○ Low and slow wins the race □ Variable comms ○ HTTP, HTTPS, DNS, SMB, etc. □ Flexible indicators ○ Survivability across defensive sensors or boundary defensive solutions □ Proxy awareness!
  • 19.
    Extensibility ○ The coreagent should be as small as possible with only required functionality ○ It is best to make an module interface to allow an operator to add/subtract features □ Follow on payloads, scripts, persistence modules ○ The modules can be loaded and removed during use
  • 21.
    Wait… What? ○ Empireis a full-featured PowerShell post- exploitation agent ○ Aims to provide a rapidly extensible platform to integrate offensive/defensive PowerShell work ○ An attempt to train defenders on how to stop and respond to PowerShell “attacks” □ Another tool in the belt!
  • 22.
    PowerShell = Justa Toy Language? ○ Many people have written off PowerShell as being a real malware solution because it is a scripting language □ “Easy” to defeat/block the interpreter ○ This has also caused incident responders to overlook it as a malware vector □ Helpful if we provide some real world demos :)
  • 23.
    Server Features ○ Client-Serverarchitecture □ Server = Python | Client = PowerShell ○ A backend database preserves agent/listener configurations □ In case something goes down, your agents won’t! ○ Everything is logged, extensively □ Taskings/results per agent, along with timestamps □ Hashes of any files uploaded to target □ --debug will dump a ton of output to empire.debug
  • 24.
    Methods of Execution ○ Small“stager” that can be manually executed or easily implemented elsewhere □ A powershell command block can load an Empire agent □ Generated per listener inside the menu ○ Stager Formats: □ .vbs (macro), .bat, ducky script, etc. □ Reflective Pick .DLL - Allows integration with many other tools like MSF
  • 25.
    Listeners ○ The “server”side of the whole system □ Configuration of the agent set here
  • 26.
    Additional Listener Stuff ○ IPwhitelisting/blacklisting dynamically or by a common config ○ Kill dates and working hours nicely integrated into listener management ○ “foreign listeners” allow the passing of agents within the team □ and to other agents like Meterpreter/Beacon!
  • 27.
    Empire Staging Control ServerClient 2. return key negotiation stager.ps1 w/ shared AES staging key 3. gen priv/pub keys, post ENCstaging(PUB) to /<stage1> 5. decrypt session key, post ENCsession(sysinfo) to /<stage2> 6. return ENCsession(agent.ps1) patched with key/delay/etc. and register agent. Agent starts beaconing. 1. GET /<stage0> 4. return ENCpub(epoch + AES session key)
  • 28.
    C2 ○ Utilizes the.NET backend with HTTP or HTTPS ○ Nothing too magical here… □ “Get” request is looking for tasking □ “Post” is returning encrypted results
  • 29.
    In the Agent: Contexts ○Shell - Run Empire or PowerShell cmds ○ Scripts - Import and run PowerShell cmdlets ○ Modules - Utilize pre-built functionality to execute PowerShell functions across agents ○ More later during the demo...
  • 30.
    Modules Because an agentactually needs functionality
  • 31.
    Modules ○ Currently 90released modules □ several more in testing testing ○ First round of modules focused on integrating all of the current projects □ Wanted an operational beta to use in real environments ○ We will show some of the top used ones…
  • 32.
    Module Categories ○ Currentlyhave the following categories for modules: □ code_execution - ways to run more code □ collection - post exploitation data collection □ credentials - collect and use creds □ lateral_movement - move around the network □ management - host management and auxiliary □ persistence - survive the reboot □ privesc - escalation capabilities □ situational_awareness - network awareness □ trollsploit - for the lulz
  • 33.
    Module Development ○ Development isextremely fast due to the wealth of existing PowerShell tech and the ease of development in a scripting language ○ Modules are essentially metadata containers for an embedded PowerShell script ○ Things like option sets, needs admin, opsec safe, save file output, etc
  • 34.
    management/ psinject ○ First up:our auto-magic process injection module for Empire □ Takes a listener name and an optional process name/ID ○ Uses Invoke-PSInjector to inject our ReflectivePick .DLL into the host or specified process □ The launcher code to stage the agent is embedded in the .DLL
  • 35.
  • 36.
  • 37.
  • 38.
    Invoke-BypassUAC ○ Second, weneed a way to escape medium-integrity process contexts ○ The .DLL used by Metasploit’s bypassuac_injection is open source, and works when combined with PowerSploit’s Invoke--Shellcode.ps1 □ Works on Win 7 and 8.1! ○ Lets us spawn high-integrity agents
  • 39.
    Invoke-Mimikatz ○ Everyone's favoritepost-exploitation capability ○ Not just dumping creds: □ Golden tickets □ Silver tickets □ PTH □ Skeleton key ○ Empire has Internal credential model □ Lets you easily reuse creds you’ve stolen
  • 41.
    Invoke-WMI ○ Invoke-WMIMethod isour primary way of moving around □ Can take a listener name and transform it into configurations for a launcher □ Fairly lightweight and safe to use ○ Uses PowerShell’s Invoke-WMIMethod to run the launcher code on a remote host
  • 43.
    PTH ○ “But whatabout pass-the-hash?!!” ○ The credentials/mimikatz/pth module (alias- pth) lets you spawn a new process with a local or domain user’s hash □ You can then use the credentials/tokens module to steal the token from this new process ○ Lets you execute whatever actions you want with just a hash
  • 46.
  • 47.
    Taking Down the Empire Howto Find and Stop Us
  • 48.
    Detection ○ The typicalnetwork indicators will reveal some things □ Not as proxy aware as some agents □ High entropy byte strings in HTTP POSTs ○ Endpoint indicators are plentiful: □ Prefetch with PowerShell □ .NET Assemblies loaded into odd processes □ The list goes on…
  • 49.
  • 50.
    Memory Analysis ○ Memoryanalysis will reveal the entire Empire agent plaintext in memory □ No obfuscation is done at this point □ Allows the extraction of AES keys ○ Decryption of malware C2 □ Useful for a red team because it rewards IR teams to take the next step and chain analysis
  • 51.
  • 52.
    Windows 10 :) ○“ZOMG HACKING IS OVER!!” - harmj0y ○ But for real… major improvements in the security and monitoring of PowerShell □ Who knows when/how clients will actually implement the added features ○ Initial testing: □ Logging is very very noisy with Empire □ Constrained mode might be circumvented with PowerPick
  • 53.
  • 54.
    Moving Forward ○ We’vereleased full documentation and demo videos hosted at www.PowerShellEmpire.com □ There’s also a formal spec on the agent and its associated protocol □ All future updates will be posted here ○ This will be a long-running and fully supported project
  • 55.
    Dream Capabilities ○ NewC2 methods □ SMB, DNS, SOCKS Proxying etc ○ Script obfuscation/mangling to help prevent memory parsing and to increase training value ○ Contribute modules! it’s super easy
  • 56.