|
9 | 9 |
|
10 | 10 | class Data_Aggregation: |
11 | 11 | def __init__(self): |
| 12 | + # 可能存在的黑客入口点信息 |
| 13 | + self.begins = [] |
12 | 14 | self.result_infos = [] |
13 | 15 |
|
14 | | - def cmp_datetime(self, a, b): |
| 16 | + # 黑客攻击可能存在的入口点 |
| 17 | + def attack_begins(self): |
15 | 18 | try: |
16 | | - a_datetime = datetime.datetime.strptime(a, '%Y-%m-%d %H:%M:%S') |
17 | | - b_datetime = datetime.datetime.strptime(b, '%Y-%m-%d %H:%M:%S') |
18 | | - |
19 | | - if a_datetime > b_datetime: |
20 | | - return 1 |
21 | | - elif a_datetime < b_datetime: |
22 | | - return -1 |
23 | | - else: |
24 | | - return 0 |
| 19 | + attack_begins = os.popen( |
| 20 | + "netstat -ntpl | grep -v '127.0.0.1' |awk '{if (NR>1){print $4\" \"$7}}'").read().splitlines() |
| 21 | + for infors in attack_begins: |
| 22 | + if not '/' in infors: continue |
| 23 | + if not ':' in infors: continue |
| 24 | + ip_port = infors.split(' ')[0] # 开放端口 |
| 25 | + pid_name = infors.split(' ')[1] # 钓鱼进程 |
| 26 | + self.begins.append({'ip_port': ip_port, 'pid_name': pid_name}) |
25 | 27 | except: |
26 | | - return 1 |
| 28 | + return |
27 | 29 |
|
28 | 30 | def agregation(self): |
29 | 31 | suggestion = get_value('suggestion') |
30 | 32 | programme = get_value('programme') |
31 | 33 |
|
32 | 34 | say_info, i = u'-' * 30 + u'\n', 1 |
33 | 35 | say_info += u'根据系统分析的情况,溯源后的攻击行动轨迹为:\n' |
| 36 | + # 入口点信息 |
| 37 | + for begin_info in self.begins: |
| 38 | + say_info += u'[起点信息] 进程服务%s 端口%s 对外部公开,可能会被作为入侵起点,属于排查参考方向\n' % (begin_info['pid_name'], begin_info['ip_port']) |
34 | 39 |
|
35 | | - programme_info = u'\n初步处理方案如下(请在信息核实后操作):\n' |
36 | | - |
37 | | - self.result_infos.sort(cmp=self.cmp_datetime, key=operator.itemgetter(u'异常时间')) |
| 40 | + programme_info = u'\n初步处理方案如下(请核实后操作):\n' |
| 41 | + # 根据时间排序 |
| 42 | + self.result_infos.sort(key=operator.itemgetter(u'异常时间')) |
38 | 43 | for result_info in self.result_infos: |
39 | 44 | if result_info[u'检测项'] == u'常规后门检测': |
40 | 45 | say_info += u"[%d][%s] 黑客在%s时间,进行了%s植入,%s\n" % ( |
41 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'风险名称'], |
42 | | - result_info[u'异常信息']) |
| 46 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 47 | + result_info[u'风险名称'], |
| 48 | + result_info[u'异常信息']) |
43 | 49 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
44 | 50 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
45 | 51 | if result_info[u'检测项'] == u'配置类安全检测': |
46 | 52 | say_info += u"[%d][%s] 黑客在%s时间,进行了%s变更,%s\n" % ( |
47 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'风险名称'], |
48 | | - result_info[u'异常信息']) |
| 53 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 54 | + result_info[u'风险名称'], |
| 55 | + result_info[u'异常信息']) |
49 | 56 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
50 | 57 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
51 | 58 | if result_info[u'检测项'] == u'文件类安全检测': |
52 | 59 | say_info += u"[%d][%s] 黑客在%s时间,植入了恶意文件%s,%s\n" % ( |
53 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'异常文件'], |
54 | | - result_info[u'异常信息']) |
| 60 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 61 | + result_info[u'异常文件'], |
| 62 | + result_info[u'异常信息']) |
55 | 63 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
56 | 64 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
57 | 65 | if result_info[u'检测项'] == u'主机历史操作类安全检测': |
58 | 66 | say_info += u"[%d][%s] 黑客在%s时间,进行了恶意操作,%s\n" % ( |
59 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'异常信息']) |
| 67 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 68 | + result_info[u'异常信息']) |
60 | 69 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
61 | 70 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
62 | 71 | if result_info[u'检测项'] == u'日志类安全检测': |
63 | 72 | say_info += u"[%d][%s] 黑客在%s时间,通过用户%s进行了主机登陆,%s\n" % ( |
64 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'所属用户'], |
65 | | - result_info[u'异常信息']) |
| 73 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 74 | + result_info[u'所属用户'], |
| 75 | + result_info[u'异常信息']) |
66 | 76 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
67 | 77 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
68 | 78 | if result_info[u'检测项'] == u'网络链接类安全检测': |
69 | 79 | say_info += u"[%d][%s] 黑客在%s时间,%s\n" % ( |
70 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'异常信息']) |
| 80 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 81 | + result_info[u'异常信息']) |
71 | 82 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
72 | 83 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
73 | 84 | if result_info[u'检测项'] == u'进程类安全检测': |
74 | 85 | say_info += u"[%d][%s] 黑客在%s时间,启动进程%s,%s\n" % ( |
75 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'进程PID'], |
76 | | - result_info[u'异常信息']) |
| 86 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 87 | + result_info[u'进程PID'], |
| 88 | + result_info[u'异常信息']) |
77 | 89 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
78 | 90 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
79 | 91 | if result_info[u'检测项'] == u'Rootkit类安全检测': |
80 | 92 | say_info += u"[%d][%s] 黑客在%s时间,植入Rootkit后门,%s\n" % ( |
81 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'异常信息']) |
| 93 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 94 | + result_info[u'异常信息']) |
82 | 95 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
83 | 96 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
84 | 97 | if result_info[u'检测项'] == u'系统初始化检测': |
85 | 98 | say_info += u"[%d][%s] 黑客在%s时间,设置了系统命令别名,%s\n" % ( |
86 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'异常信息']) |
| 99 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 100 | + result_info[u'异常信息']) |
87 | 101 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
88 | 102 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
89 | 103 | if result_info[u'检测项'] == u'账户类安全检测': |
90 | 104 | say_info += u"[%d][%s] 黑客在%s时间,进行了账户修改设置,%s\n" % ( |
91 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'异常信息']) |
| 105 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 106 | + result_info[u'异常信息']) |
92 | 107 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
93 | 108 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
94 | 109 | if result_info[u'检测项'] == u'Webshell安全检测': |
95 | 110 | say_info += u"[%d][%s] 黑客在%s时间,植入了webshell文件%s\n" % ( |
96 | | - i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', result_info[u'异常文件']) |
| 111 | + i, result_info[u'风险级别'], result_info[u'异常时间'] if result_info[u'异常时间'] else u'未知', |
| 112 | + result_info[u'异常文件']) |
97 | 113 | if suggestion: say_info = say_info + u" 排查参考:%s\n" % result_info[u'手工排查确认'] |
98 | 114 | if programme and result_info[u'处理方案']: programme_info += u"[%d] %s\n" % (i, result_info[u'处理方案']) |
99 | 115 | i += 1 |
100 | 116 | if programme: |
101 | 117 | say_info += programme_info |
102 | 118 |
|
103 | 119 | file_write(say_info) |
104 | | - print(say_info.replace(u'[风险]', u'\033[1;31m[风险]\033[0m').replace(u'[可疑]', u'\033[1;33m[可疑]\033[0m')) |
| 120 | + print(say_info.replace(u'[风险]', u'[\033[1;31m风险\033[0m]').replace(u'[可疑]', u'[\033[1;33m可疑\033[0m]').replace( |
| 121 | + u'[起点信息]', u'[\033[1;32m起点信息\033[0m]')) |
105 | 122 |
|
106 | 123 | def run(self): |
107 | 124 | self.result_infos = get_value('RESULT_INFO') |
108 | 125 | self.result_infos = reRepeat(self.result_infos) |
| 126 | + self.attack_begins() |
109 | 127 | self.agregation() |
0 commit comments