代码命令:
# -*- coding:utf-8 -*-
#!/usr/bin/python
import argparse
import subprocess
import os,sys
import re
#可疑进程判断方法
def string_in_regex_list(string,regex_list):
for regex in regex_list:
regex = regex.strip()
if regex=="":
continue
if re.search(regex,string) is not None:
# print("regex: %s,string:%s") % (regex,string)
return True
return False
#默认白名单
DEFAULT_WHITE_LIST='''
/sbin/getty -.*
dbus-daemon .*
acpid -c /etc/acpi/events -s /var/run/acpid.sockte$
atd$
cron$
/lib/systemd/systemd-udevd --daemon$
dbus-daemon --system --fork$
/usr/sbin/sshd -D$
rsyslogd$
/usr/sbin/mysqld$
/usr/sbin/apache2 -k start$
'''
COMMAND_GET_NONKERNEL ='''
sudo ps --ppid 2 -p 2 -p 1 --deselect \
-o uid,pid,rss,%cpu,command \
--sort -rss,cpu
'''
def get_nonkernel_process():
process_list = subprocess.check_output(COMMAND_GET_NONKERNEL, shell=True)
return process_list
def load_whitelist(fname):
white_list=""
if fname is None:
print("No white list file is given. Use default value.")
white_list = DEFAULT_WHITE_LIST
else:
print("load white list from %s" % (fname))
with open(fname) as f:
white_list=f.readlines()
return white_list
def list_process(process_list, white_list):
l = []
for line in process_list.decode('utf-8').splitlines():
line = line.strip()
if not line:
continue
if not string_in_regex_list(line, white_list.splitlines()):
l.append(re.split(r'\s+', line))
return l
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--whitelist_file', required=False,help="config file for whitelist", type=str)
args = parser.parse_args()
white_list = load_whitelist(args.whitelist_file)
nonkernel_process_list = get_nonkernel_process()
process_list = list_process(nonkernel_process_list, white_list)
# Remove header
print("Identified processes count: %d." % (len(process_list) - 1))
for process in process_list:
print(process)
效果图:
代码详释:
import语句:表示导入argparse(用于命令行参数解析)模块、 subprocess(用于执行系统命令)模块、os模块和sys(用于操作系统相关的任务)模块以及re(用于正则表达式匹配)模块。
string_in_regex_list函数:表示用于判断给定的字符串是否在正则表达式列表中匹配到。
DEFAULT_WHITE_LIST :表示定义了默认的白名单,其中包含了一些系统进程的模式。
COMMAND_GET_NONKERNEL :表示定义了系统命令,用于获取非内核进程的信息。
get_nonkernel_process函数:表示通过执行系统命令获取非内核进程的列表。
load_whitelist函数:表示根据提供的文件名加载白名单,如果没有提供文件,则使用默认的白名单。
list_process函数:表示对获取到的进程列表进行处理,筛选出不在白名单中的进程,并将其添加到一个新的列表中。
在__main__部分:
表示通过命令行参数解析获取白名单文件,加载白名单,获取非内核进程列表,处理进程列表并打印出不在白名单中的进程。
常见问题:
暂无。
注意事项:
暂无。