## # 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 '], '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? && file?('/.dockerenv') container = 'Docker' 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