ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

钉钉群组实现监控Github的CVE信息

2022-02-09 14:02:36  阅读:244  来源: 互联网

标签:脚本 bin Github name url 群组 cve 定时 CVE


通过钉钉群组进行监控Github中CVE-2022相关信息,实现机器人消息推送。

一、数据库信息

创建mysql数据库cvemonitor,将sql文件导入数据库,sql语句如下:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------

-- Table structure for github_monitor

-- ----------------------------

DROP TABLE IF EXISTS `github_monitor`;
CREATE TABLE `github_monitor`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cve_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `cve_url` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `cve_description` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `cve_name`(`cve_name`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

二、监控脚本

注意:脚本需要执行权限 chmod 777 cve_run.sh

import requests
import json
import dingtalkchatbot.chatbot as cb
import time
import pymysql

# 连接数据库
conn = pymysql.connect(host="数据库主机IP", user="数据库账户名", password="数据库密码", database="数据库名",charset="utf8")
# 设置钉钉群组机器人webhook值和secukey值
webhook = '此处填写钉钉智能群助手自定义机器人的webhook'
sckey = '此处填写钉钉智能群助手自定义机器人的密钥'

def dingding(text, msg,webhook,secretKey):
    ding = cb.DingtalkChatbot(webhook, secret=secretKey)
    ding.send_text(msg='{}\r\n{}'.format(text, msg), is_at_all=False)

def check(cve_name,url,cve_description):
    try:
        
        # 得到一个可以执行SQL语句的光标对象
        cursor = conn.cursor()
        sql = '''insert into github_monitor(cve_name,cve_url,cve_description) values('{}','{}','{}')'''.format(cve_name,url,cve_description)
        cursor.execute(sql)
        print("数据库插入成功")
        # 执行SQL语句
        body = "CVE编号:" + cve_name + "\r\n" + "Github地址:" + url + "\r\n" +"描述:"+ cve_description + "\r\n"
        dingding('有新的CVE发现', body, webhook, sckey)
        print("钉钉 发送 CVE 成功")
    except Exception as e:
        print('该CVE{}已经存在'.format(cve_name))
    except Exception as e:
        pass


if __name__ == '__main__':
    while True:
        now_time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        print("************************************************")
        print('*     当前检测时间为:'+now_time+'      *')
        print("************************************************")
        github_headers = {
            'Authorization': 'token {}'.format('此处填写github的token') 
        }
        url = 'https://api.github.com/search/repositories?q=CVE-2022&sort=updated'
        try:
            
            result = requests.get(url=url, headers=github_headers).text
            result = json.loads(result)
            for i in range(1, 20):
                url = result['items'][i]['html_url']
                cve_name = result['items'][i]['name']
                cve_description = result['items'][i]['description']
                check(cve_name, url,cve_description)
        except Exception as e:
            pass
        time.sleep(30*60) #每30分钟执行,推迟执行的秒数

三、配置shell脚本(cve_run.sh)执行监控程序

该脚本检测服务器是否已有监控脚本的进程,若无进程则执行命令后台启动脚本

注意:脚本需要执行权限 chmod 777 cve_run.sh

#!/bin/bash
export PATH=usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/bin/java/bin:usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/bin/java/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/netcat-0.7.1/bin:/root/bin

ps aux |grep "python3 -u /opt/cvemonitor/cve-monitor.py" |grep -qv "grep"
if [ $? -ne 0 ];then
    rm -rf out.log
    nohup python3 -u /opt/cvemonitor/cve-monitor.py >/opt/cvemonitor/out.log 2>&1 &
    echo "启动cve监控脚本成功"
else
    echo "cve监控脚本正在运行"
fi

四、配置定时任务

1、添加定时任务启动cve_run.sh脚本

vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
# 分 时 日 月 周 
# 每分钟执行该脚本

* * * * *  /opt/cvemonitor/cve_run.sh

2、保存定时任务以及查看定时任务执行日志

crontab /etc/crontab   #保存并加载定时任务,使之生效
service crond restart   #重启定时服务,立马生效
# 查看定时任务
crontab -l
# 使用命令查看crontab的执行日志:/var/log/cron只会记录是否执行了某些计划的脚本
tail -f /var/log/cron

五、钉钉群助手及Github

1、创建钉钉智能群助手机器人

添加机器人:

添加智能群助手

选择自定义机器人:

选择自定义机器人

复制密钥和Webhook到python脚本中:

2、Github Token值

进入个人账号的配置中,选择Developer settings:

将上图的Token值复制到python脚本中即可。

六、启动监控脚本及注意事项

1、启动脚本

使用nohup后台启动监控脚本cve-monitor.py,并将输出保存到out.log

nohup python3 -u /opt/cvemonitor/cve-monitor.py >/opt/cvemonitor/out.log 2>&1 &
  1. 最后一个“&”表示后台运行程序

  2. “nohup” 表示程序不被挂起

  3. “python3”表示使用python3执行python代码

  4. “-u”表示不启用缓存,实时输出打印信息到日志文件(如果不加-u,则会导致日志文件不会实时刷新代码中的print函数的信息)

  5. “test.py”表示python的源代码文件

  6. “test.log”表示输出的日志文件

  7. “>”表示将打印信息重定向到日志文件

  8. “2>&1”表示将标准错误输出转变化标准输出,可以将错误信息也输出到日志文件中(0-> stdin, 1->stdout, 2->stderr)

2、重启定时任务保证定时任务生效

service crond restart

3、遇到的问题

当我定时任务配置完成且启动后,通过查看日志cat /var/log/cron看到定时任务正常执行了cve_run.sh脚本但是cve-monitor.py脚本并没有正常启动。

来到cve_run.sh脚本的目录,使用命令sh cve_run.sh执行shell脚本,然后查看进程,发现python脚本进程正常执行;那为什么通过定时任务的方式用shell脚本来启动python监控程序却不行呢?原来是环境变量的问题

使用env |grep PATH命令查看当前服务器的环境变量,将 PATH= 这一段的内容复制后添加到定时任务脚本cve_run.sh中#!/bin/bash 下面一行进行环境变量的指定

#!/bin/bash
export PATH= 

六、总结

通过钉钉群组进行监控Github中CVE-2022相关信息,实现机器人消息推送。

主要思路:

  1. 命令后台启动脚本
  2. 定时任务执行shell脚本,检测监控程序是否运行,若程序掉了则重新执行启动命令

标签:脚本,bin,Github,name,url,群组,cve,定时,CVE
来源: https://blog.csdn.net/sneakertowns/article/details/122840300

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有