osquery-defense-kit/detection/evasion/unusually-tainted-kernel-linux.sql

65 lines
1.6 KiB
SQL

-- Unusually tainted kernel - via a loaded kernel module
--
-- references:
-- * https://attack.mitre.org/techniques/T1014/ (Rootkit)
-- * https://docs.kernel.org/admin-guide/tainted-kernels.html
--
-- Confirmed to catch revenge-rtkit
--
-- false positives:
-- * custom kernel modules
--
-- tags: persistent kernel state
-- platform: linux
--
SELECT
taint,
taint & 65536 AS is_aux,
taint & 8192 is_unsigned,
taint & 4096 AS out_of_tree,
taint & 512 AS kernel_warning,
taint & 614 AS requested_by_userspace,
taint & 8 AS force_unloaded,
taint & 4 AS out_of_spec,
taint & 2 AS force_loaded,
taint & 1 AS proprietary,
modules
FROM
(
SELECT
sc.current_value AS taint,
GROUP_CONCAT(km.name) AS modules
FROM
system_controls sc,
kernel_modules km
WHERE
sc.name = "kernel.tainted"
ORDER BY
km.name ASC
)
-- 4096 is a signed, out of tree, open source driver
-- 4097 is a signed, out of tree, proprietary driver
-- 512 is a kernel warning
WHERE
taint NOT IN (0, 512, 4096, 4097)
-- Some day, folks will sign rootkits. That day isn't today.
AND is_unsigned = 1
AND NOT (
(
-- 12289 is an unsigned, out of tree, proprietary
-- 12801 is an unsigned, out of tree, proprietary with kernel warning. not great.
taint IN (12289, 12801)
AND (
modules LIKE "%,nvidia,%"
OR modules LIKE "%,v42loopback,%"
OR modules LIKE "%,wl,%"
)
)
OR (
-- 12352 is unsigned, out of tree, requested by user space
-- 12289 is an unsigned, out of tree, proprietary
taint IN (12352, 12289)
AND modules LIKE "%,v4l2loopback,%"
)
)