Skip to content

Commit 286fbc0

Browse files
grayddqgrayddq
authored andcommitted
code_update
1 parent bf6717b commit 286fbc0

11 files changed

Lines changed: 483 additions & 141 deletions

File tree

GScan.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,17 @@
88

99

1010
if __name__ == '__main__':
11+
version = 'v0.1'
1112
progam = u'''
1213
_______ _______. ______ ___ .__ __.
13-
/ _____| / | / | / \ | \ | | {version:v0.1}
14+
/ _____| / | / | / \ | \ | | {version:%s}
1415
| | __ | (----`| ,----' / ^ \ | \| |
1516
| | |_ | \ \ | | / /_\ \ | . ` | {author:咚咚呛}
1617
| |__| | .----) | | `----. / _____ \ | |\ |
1718
\______| |_______/ \______|/__/ \__\ |__| \__| http://grayddq.top
1819
1920
20-
'''
21+
''' % version
2122
print(progam)
2223

2324
main(os.path.dirname(os.path.abspath(__file__)))

README.md

Lines changed: 48 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
1、主机信息获取
1616
2、系统初始化alias检查
1717
3、文件类安全扫描
18-
3.1、系统可执行文件安全扫描
19-
3.2、临时目录文件安全扫描
20-
3.3、用户目录文件扫描
21-
3.4、可疑隐藏文件扫描
18+
3.1、系统重要文件完整行扫描
19+
3.2、系统可执行文件安全扫描
20+
3.3、临时目录文件安全扫描
21+
3.4、用户目录文件扫描
22+
3.5、可疑隐藏文件扫描
2223
4、各用户历史操作类
2324
4.1、境外ip操作类
2425
4.2、反弹shell类
@@ -91,30 +92,53 @@
9192
9293
参数参考
9394

94-
> root# python GScan.py -h
95+
> sh-3.2# python GScan.py -h
96+
>
97+
> _______ _______. ______ ___ .__ __.
98+
> / _____| / | / | / \ | \ | | {version:v0.1}
99+
> | | __ | (----`| ,----' / ^ \ | \| |
100+
> | | |_ | \ \ | | / /_\ \ | . ` | {author:咚咚呛}
101+
> | |__| | .----) | | `----. / _____ \ | |\ |
102+
> \______| |_______/ \______|/__/ \__\ |__| \__| http://grayddq.top
95103
>
96-
> Usage: GScan.py [options]
97104
>
105+
> Usage: GScan.py [options]
106+
>
98107
> Options:
99-
>
100-
> -h, --help show this help message and exit
101-
>
102-
> --overseas 境外模式,此参数将不进行境外ip的匹配
103-
>
104-
> --full 完全扫描,此参数将启用完全扫描
105-
>
106-
> --debug 调试模式,进行程序的调试数据输出
107-
>
108-
> -l LOGDIR, --log=LOGDIR 打包当前系统的所有安全日志,demo: -l /var/log/
109-
110-
执行参考:
108+
>
109+
> -h, --help show this help message and exit
110+
> --version 当前程序版本
111+
>
112+
> Mode:
113+
> GScan running mode options
114+
>
115+
> --overseas 境外模式,此参数将不进行境外ip的匹配
116+
> --full 完全模式,此参数将启用完全扫描
117+
> --debug 调试模式,进行程序的调试数据输出
118+
> --dif 差异模式,比对上一次的结果,输出差异结果信息。
119+
> --sug 排查建议,用于对异常点的手工排查建议
120+
> --pro 处理方案,根据异常风险生成初步的处理方案
121+
>
122+
> Optimization:
123+
> Optimization options
124+
>
125+
> --time=TIME 搜索指定时间内主机改动过的所有文件,demo: --time='2019-05-07
126+
> 00:00:00~2019-05-07 23:00:00'
127+
> --job 添加定时任务,用于定时执行程序
128+
> --log 打包当前系统的所有安全日志(暂不支持)
129+
130+
131+
执行命令参考:
111132

112133
>root# <kbd>python GScan.py</kbd>
113134
>
114-
>或者使用nohup后台执行,一段时间后直接查看输出结果./GScan/log/gscan.log
135+
>root# <kbd>python GScan.py --sug --pro</kbd>
115136
>
116-
>root# <kbd>nohup python GScan.py &</kbd>
117-
137+
>进行定时任务设置,异常日志将按行输出到./GScan/log/log.log,可通过syslog等服务同步日志信息。
138+
>
139+
>root# <kbd>python GScan.py --job</kbd> #每天零点执行一次
140+
>
141+
>root# <kbd>python GScan.py --job --hour=2</kbd> #每2小时执行一次
118142
119143
## 程序脚本说明 ##
120144

@@ -152,9 +176,7 @@
152176
>
153177
>2、程序包括10W+的恶意特征信息,用于恶意文件的比对和查杀。
154178
>
155-
>3、WebShell的检测采用目前比较流行的Yara库进行查杀。
156-
>
157-
>4、结果自动化分析,进行黑客攻击溯源
179+
>3、结果自动化分析,进行黑客攻击溯源
158180
159181

160182

@@ -174,7 +196,7 @@
174196
|:-------------|:---------: |:------: |:------: |:---------: |
175197
| 对比版本 | v0.1 | v0.53 | v1.4.6 | v2.7.1 |
176198
| 【检测前检查项】文件alias检查 ||| | |
177-
| 【检测前检查项】系统重要文件完整性检测 | || | |
199+
| 【检测前检查项】系统重要文件完整性检测 | || | |
178200
| 【主机文件检测】系统重要文件权限检测 | ||| |
179201
| 【主机文件检测】文件恶意特征扫描 || | | |
180202
| 【主机文件检测】文件境外IP特征扫描 || | | |
@@ -206,6 +228,7 @@
206228
| 【常规后门检测】Cron后门检测(/etc/cron.hourly/) || | | |
207229
| 【常规后门检测】Cron后门检测(/etc/cron.monthly/) || | | |
208230
| 【常规后门检测】alias后门检测 || || |
231+
| 【常规后门检测】其他环境变量未知后门检测 || | | |
209232
| 【常规后门检测】SSH后门检测 || | | |
210233
| 【常规后门检测】SSH Wrapper后门检测 || | | |
211234
| 【常规后门检测】inetd.conf后门检测 || || |

db/.DS_Store

6 KB
Binary file not shown.

lib/core/common.py

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# coding:utf-8
22
from __future__ import print_function
3-
import os, sys, json, re, time, pwd
3+
import os, sys, json, re, time, pwd, logging
44
from imp import reload
55
from lib.core.ip.ip import *
66
from lib.core.globalvar import *
@@ -212,13 +212,17 @@ def gci(filepath):
212212
def mkfile():
213213
SYS_PATH = get_value('SYS_PATH')
214214
LOG_PATH = get_value('LOG_PATH')
215-
if os.path.exists(LOG_PATH):
216-
f = open(LOG_PATH, "r+")
217-
f.truncate()
218-
f.close()
219-
else:
220-
if not os.path.exists(SYS_PATH + '/log/'): os.mkdir(SYS_PATH + '/log/')
221-
f = open(LOG_PATH, "w")
215+
DB_PATH = get_value('DB_PATH')
216+
# 判断日志目录是否存在,不存在则创建日志目录
217+
if not os.path.exists(SYS_PATH + '/log/'): os.mkdir(SYS_PATH + '/log/')
218+
if not os.path.exists(SYS_PATH + '/db/'): os.mkdir(SYS_PATH + '/db/')
219+
# 判断日志文件是否存在,不存在则创建,存在则情况
220+
f = open(LOG_PATH, "w")
221+
f.truncate()
222+
f.close()
223+
# 判断本地数据文件是否存在,不存在则创建
224+
if not os.path.exists(DB_PATH):
225+
f = open(DB_PATH, "w")
222226
f.truncate()
223227
f.close()
224228

@@ -380,3 +384,41 @@ def analysis_file(file, mode='fast'):
380384
return ""
381385
except:
382386
return ""
387+
388+
389+
# 写定时任务信息
390+
def cron_write(hour='0'):
391+
SYS_PATH = get_value('SYS_PATH')
392+
if not os.path.exists('/var/spool/cron/'): return False
393+
if os.path.exists('/var/spool/cron/root'):
394+
f = open('/var/spool/cron/root', 'a+')
395+
# 每N小时执行一次
396+
if hour != '0':
397+
f.write('* */' + hour + ' * * * python ' + SYS_PATH + '/GScan.py --dif\n')
398+
else:
399+
f.write('0 0 * * * python ' + SYS_PATH + '/GScan.py --dif\n')
400+
f.close()
401+
else:
402+
f = open('/var/spool/cron/root', 'w')
403+
# 每N小时执行一次
404+
if hour != '0':
405+
f.write('* */' + hour + ' * * * python ' + SYS_PATH + '/GScan.py --dif\n')
406+
else:
407+
f.write('0 0 * * * python ' + SYS_PATH + '/GScan.py --dif\n')
408+
f.close()
409+
return True
410+
411+
412+
# 日志输出到指定文件,用于syslog打印
413+
def loging():
414+
logging.basicConfig(level=logging.INFO)
415+
logger = logging.getLogger('GScan')
416+
SYS_PATH = get_value('SYS_PATH')
417+
logfile = SYS_PATH + '/log/log.log'
418+
fh = logging.FileHandler(logfile)
419+
fh.setLevel(logging.INFO)
420+
formatter = logging.Formatter('%(asctime)s - %(message)s')
421+
fh.setFormatter(formatter)
422+
logger.addHandler(fh)
423+
logger.propagate = False
424+
return logger

0 commit comments

Comments
 (0)