检索白名单中的可疑进程

代码命令:

# -*- 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__部分:

表示通过命令行参数解析获取白名单文件,加载白名单,获取非内核进程列表,处理进程列表并打印出不在白名单中的进程。

常见问题:

暂无。

注意事项:

暂无。

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值