From 9ecd22e63ca75980f079c4f96a97ffcd2e9e5052 Mon Sep 17 00:00:00 2001 From: Brendan Coles Date: Wed, 23 Jan 2019 11:35:38 +0000 Subject: [PATCH] Add Msf::Post::Linux::Kernel.cpu_flags --- lib/msf/core/post/linux/kernel.rb | 32 ++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/msf/core/post/linux/kernel.rb b/lib/msf/core/post/linux/kernel.rb index 07e1741bc7..389047fcb2 100644 --- a/lib/msf/core/post/linux/kernel.rb +++ b/lib/msf/core/post/linux/kernel.rb @@ -86,13 +86,28 @@ module Kernel raise 'Could not determine kernel modules' end + # + # Returns a list of CPU flags + # + # @return [Array] + # + def cpu_flags + cpuinfo = cmd_exec('cat /proc/cpuinfo').to_s + + return unless cpuinfo.include? 'flags' + + cpuinfo.scan(/^flags\s*:(.*)$/).flatten.join(' ').split(/\s/).map(&:strip).reject(&:empty?).uniq + rescue + raise'Could not retrieve CPU flags' + end + # # Returns true if kernel and hardware supports Supervisor Mode Access Prevention (SMAP), false if not. # # @return [Boolean] # def smap_enabled? - cmd_exec('cat /proc/cpuinfo').to_s.include? 'smap' + cpu_flags.include? 'smap' rescue raise 'Could not determine SMAP status' end @@ -103,7 +118,7 @@ module Kernel # @return [Boolean] # def smep_enabled? - cmd_exec('cat /proc/cpuinfo').to_s.include? 'smep' + cpu_flags.include? 'smep' rescue raise 'Could not determine SMEP status' end @@ -114,11 +129,22 @@ module Kernel # @return [Boolean] # def kaiser_enabled? - cmd_exec('cat /proc/cpuinfo').to_s.include? 'kaiser' + cpu_flags.include? 'kaiser' rescue raise 'Could not determine KAISER status' end + # + # Returns true if Kernel Page-Table Isolation (KPTI) is enabled, false if not. + # + # @return [Boolean] + # + def kpti_enabled? + cpu_flags.include? 'pti' + rescue + raise 'Could not determine KPTI status' + end + # # Returns true if user namespaces are enabled, false if not. #