爬取阿里云公告构建漏洞预警平台 – 作者:0xff644

前几天跟同事聊到漏洞预警,一致觉得阿里云的安全公告挺及时的,于是便一拍即合,造了个轮子。。

0x00 前期准备

0x01 具体思路

  1. 爬取阿里云安全公告,并对数据进行处理
  2. 数据存储
  3. 同步到邮箱和飞书

0x02 实现过程

为了增强代码的可读性,我们将使用部分伪代码的方式来说明整个实现过程,请耐心食用 ~

具体代码实现如下:

初始化

这里我们实例化了一个session对象,并关闭https校验

from requests_html import HTMLSession


session = HTMLSession()
session.headers = {"User-Agent": "Mozilla/5.0 ... Safari/537.36"}
session.verify = False

同时实例化一个数据库用于存储和校验数据。

import pickledb


db = pickledb.load("vuls.db", True)

获取数据

然后我们开始请求公告的地址啦,这里为更好的显示进度,我们引入了tqdm模块。并以css路径选择器的方式获得每一项通告的a标签,再从中提取出链接、时间及标题。

from tqdm import tqdm
from urllib.parse import urljoin


url = 'https://m.aliyun.com/doc/notice_list/9213612.html'
resp = session.get(url)
for a in tqdm(list(resp.html.pq("div.xs-content > a").items())):
    links = urljoin(resp.url, a.attr("href"))
    date, title = a("div") 

获取详情

在上一个循环,当获取到链接时我们将进入这个链接以获取更详细的信息,

其中key为漏洞证明、漏洞评级、影响版本这些相应的二级标题。而text则为相对应的所有文字内容。

resp = session.get(links)
for p in resp.html.pq("div#se-knowledge > p").items():
    key = p("strong").text()
    text = p.text().strip()

然后我们将每条公共的详情及基础数据打包成一个data字典

data = {

“date”: date.text,

“title”: title.text,

“url”: links,

“content”: { key1: text1 , … },

}

数据存储

传统功夫,点到为止。存储数据之前,我们需要先判断数据是否存在,如果不存在的话那我们需要将其保存,并下发告警任务。

key = md5(data['url'])


if db.get(key):
    db[key] = data
    send_msg(data)

整理成数据消息

我们将data中的数据整理成相应的标题及消息体并准备发送。

title = data["title"] + '\n'
level = data['content'].get('漏洞评级','未知').strip().split()[-1]
links = data['url']
bodys = f"漏洞等级: {level}\n参考链接: <a href='{links}' target='_blank'></a> {links}"

发起预警

然后我们将通过celery的方式将告警发送到飞书及邮件。

feishu.delay(f"{title}\n\n{bodys}")
mails.delay(body, title)

当然我们需要提前将飞书及邮件的配置写入相应文件。

class Config:
    name = "CVEMonitor"
    feishu_API = "..."
    mail_usr = "..."
    mail_pwd = "..."
    mail_host = "..."
    mail_port = 25
    mail_targets = [
       ...
    ]

多的我就不说了,多了我也说不出来。。不善言辞,见detector,不要吝啬你的star唷。

git clone https://github.com/oxff644/detector.git
cd detector/
bash run.sh 

0x03 实际效果

1616040356_6052d1a48840bcb08dce9.png!small?1616040356856

项目地址:https://github.com/oxff644/detector

来源:freebuf.com 2021-03-18 11:59:34 by: 0xff644

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论