Files
metasploit-gs/modules/post/linux/gather/checkcontainer.rb
T
james b8d794cc37 Identify systemd-nspawn containers in checkcontainer
Check the value of the "container" environment variable:
 - "lxc" indicates a LXC container
 - "systemd-nspawn" indicates a systemd nspawn container
2017-08-06 00:46:09 -05:00

66 lines
1.7 KiB
Ruby

##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Post
include Msf::Post::File
def initialize(info={})
super( update_info( info,
'Name' => 'Linux Gather Container Detection',
'Description' => %q{
This module attempts to determine whether the system is running
inside of a container and if so, which one. This module supports
detection of Docker, LXC, and systemd nspawn.},
'License' => MSF_LICENSE,
'Author' => [ 'James Otten <jamesotten1[at]gmail.com>'],
'Platform' => [ 'linux' ],
'SessionTypes' => [ 'shell', 'meterpreter' ]
))
end
# Run Method for when run command is issued
def run
container = nil
# Check for .dockerenv file
if container.nil?
if file?("/.dockerenv")
container = "Docker"
end
end
# Check cgroup on PID 1
if container.nil?
cgroup = read_file("/proc/1/cgroup")
if cgroup
case cgroup.tr("\n", " ")
when /docker/i
container = "Docker"
when /lxc/i
container = "LXC"
end
end
end
# Check for the "container" environment variable
if container.nil?
container_variable = get_env("container")
case container_variable
when "lxc"
container = "LXC"
when "systemd-nspawn"
container = "systemd nspawn"
end
end
if container
print_good("This appears to be a '#{container}' container")
report_virtualization(container)
else
print_status("This does not appear to be a container")
end
end
end