XieJava's blog

记录最好的自己


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于

Python实现简单信号滤波实战

发表于 2023-03-13 | 更新于: 2025-04-08 | 分类于 技术 | | 阅读次数:
字数统计: 1.2k | 阅读时长 ≈ 4

在有些项目中需要对信号进行滤波处理,尤其是在医疗的设备中如心跳、脉搏等设备的采样后进行处理。滤波的目的就是除去某些频率的信号如噪声。常见的包括有低通滤波、高通滤波、带通滤波。

低通滤波指的是去除高于某一阈值频率的信号;高通滤波去除低于某一频率的信号;带通滤波指的是类似低通高通的结合保留中间频率信号;带阻滤波也是低通高通的结合只是过滤掉的是中间部分。通过滤波可以过滤到一些无用的噪音,得到的比较平滑的波形,用来进行分析。

scipy模块提供了常用简单的信号滤波方法包括低通滤波、高通滤波、带通滤波、带阻滤波等。

一、scipy信号滤波函数介绍

  1. 滤波器构造函数
1
scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')

输入参数:
N:滤波器的阶数
Wn:归一化截止频率。计算公式Wn=2*截止频率/采样频率。(注意:根据采样定理,采样频率要大于两倍的信号本身最大的频率,才能还原信号。截止频率一定小于信号本身最大的频率,所以Wn一定在0和1之间)。当构造带通滤波器或者带阻滤波器时,Wn为长度为2的列表。
btype : 滤波器类型{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’},
output : 输出类型{‘ba’, ‘zpk’, ‘sos’},
输出参数:
b,a: IIR滤波器的分子(b)和分母(a)多项式系数向量。output=’ba’
z,p,k: IIR滤波器传递函数的零点、极点和系统增益. output= ‘zpk’
sos: IIR滤波器的二阶截面表示。output= ‘sos’

  1. 滤波函数
1
scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)

输入参数:
b: 滤波器的分子系数向量
a: 滤波器的分母系数向量
x: 要过滤的数据数组。(array型)
axis: 指定要过滤的数据数组x的轴
padtype: 必须是“奇数”、“偶数”、“常数”或“无”。这决定了用于过滤器应用的填充信号的扩展类型。{‘odd’, ‘even’, ‘constant’, None}
padlen:在应用滤波器之前在轴两端延伸X的元素数目。此值必须小于要滤波元素个数- 1。(int型或None)
method:确定处理信号边缘的方法。当method为“pad”时,填充信号;填充类型padtype和padlen决定,irlen被忽略。当method为“gust”时,使用古斯塔夫森方法,而忽略padtype和padlen。{“pad” ,“gust”}
irlen:当method为“gust”时,irlen指定滤波器的脉冲响应的长度。如果irlen是None,则脉冲响应的任何部分都被忽略。对于长信号,指定irlen可以显著改善滤波器的性能。(int型或None)
输出参数:
y:滤波后的数据数组

二、代码介绍

scipy模块signal滤波器类型包括低通滤波、高通滤波、带通滤波、带阻滤波

1
2
3
4
5
6
7
8
9
10
11
12
13
14
pip install scipy
#低通滤波
#假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除400hz以上频率成分,即截至频率为400hz,则wn=2*400/1000=0.8。Wn=0.8
b, a = signal.butter(8, 0.8, 'lowpass') #配置滤波器 8 表示滤波器的阶数
filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
#高通滤波
b, a = signal.butter(8, 0.2, 'highpass') #配置滤波器 8 表示滤波器的阶数
filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
#带通滤波
b, a = signal.butter(8, [0.2,0.8], 'bandpass') #配置滤波器 8 表示滤波器的阶数
filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
#带阻滤波
b, a = signal.butter(8, [0.2,0.8], 'bandstop') #配置滤波器 8 表示滤波器的阶数
filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号

三、信号滤波实战

这里以一个真实的心电数据为例,来实战对心电图某一段时间采样的信号数据进行高通滤波处理,对比一下原始的信号和高通滤波后的信号波形,然后输出成图片文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#引入包
import matplotlib.pyplot as plt
from scipy import signal
#读取心电图数据文件
bspfile='data/1.txt'
bsp_f = open(bspfile, "r",encoding='utf-8')
bsp_content = bsp_f.read()
ary=bsp_content.split(' ')
ary=[float(s) for s in bsp_content.split(' ')]
ary_data=ary[0:10000] #取前10秒数据
b, a = signal.butter(8, 0.3, 'highpass') #配置滤波器 8 表示滤波器的阶数
#绘图
filtedData = signal.filtfilt(b, a, ary_data) #data为要过滤的信号
fig, axes = plt.subplots(2, 1, figsize=(32, 4))
axes[0].plot(ary_data)
axes[0].set(title='Source signal')
axes[1].plot(filtedData)
axes[1].set(title='highpass signal')
#保存图片
plt.savefig('./signal1.png', # ⽂件名:png、jpg、pdf
dpi = 80, # 保存图⽚像素密度
bbox_inches = 'tight')# 保存图⽚完整

效果:
心电图高通滤波后的效果


博客:http://xiejava.ishareread.com/

微信公众号:fullbug 关注微信公众号,回复“信号滤波”获取全部代码+数据集


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

网络安全之认识日志采集分析审计系统

发表于 2023-03-10 | 更新于: 2025-04-08 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 2.9k | 阅读时长 ≈ 9

日志对于大家来说非常熟悉,机房中的各种系统、防火墙、交换机、路由器等等,都在不断地产生日志。无数实践告诉我们,健全的日志记录和分析系统是系统正常运营与优化以及安全事故响应的基础。我们一起来认识日志采集分析审计系统。

一、什么是日志数据

1、日志的概念

日志数据的核心就是日志消息或日志,日志消息是计算机系统、设备、软件等在某种刺激下反应生成的东西。例如:Linux用户登录和注销、防火墙ACL通过和拒绝、存储系统故障等。

日志数据(log data)就是一条日志消息的内在含义,用来告诉你为什么生成日志消息的信息。日志(log)指用于展示某些事件全貌的日志消息的集合。

2、日志的类型

日志通用的几种类型:

  • 信息(Info):告诉用户和管理员发生了一些没有风险的事情。
  • 调试(Debug):在应用程序代码运行时生成调试信息,给软件开发人员提供故障检测和定位问题的帮助。
  • 警告(Warning):缺少需要的文件、参数、数据,但又不影响系统运行时生成警告。
  • 错误(Error):传达在计算机系统重出现的各种级别的错误。许多错误消息只能给出为什么出错的起点,要寻找出导致错误发生的根本原因还需要进一步的调查。
  • 警报(Alarm):警报表明发生了一些有趣的事情。一般情况下,警报数据安全设备和安全相关系统领域的。如IPS检测到了一个恶意链接,可能会采取任何预先配置的行动,IPS会记录下检测结果以及所采取的行动。

可以看到日志数据包含了系统运行的很多重要信息,了解日志、做好日志的分析审计可以很好帮助用户更好监控和保障信息系统运行,及时识别针对信息系统的入侵攻击、内部违规等信息。

二、为什么要做日志分析审计

1、满足法律法规的要求

国家的政策法规、行业标准等都明确对日志审计提出了要求,日志审计已成为企业满足合规内控要求所必须的一项基本要求。 2017年6月1日起施行的《中华人民共和国网络安全法》中规定:采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月。

《网络安全等级保护基本要求》(GB∕T 22239-2019)中规定:二到四级需要对网络、主机、应用安全三部分进行日志审计,留存日志需符合法律法规规定。

我国政府及相关行业已相继推出了数十部法律法规。如国家《企业内控基本规范》、国家《计算机信 息系统安全等级保护划分准则》同时银行、证券、通信行业均提出了相关标准及要求,确立了面向内控的信息安全审计的必要性。如:
《ISO27001:2013 》4.3.3小节、 《ISO17799:2005 》10.10小节
《商业银行内部控制指引》第一百二十六条 银监局《商业银行信息科技风险管理指引》
《银行业金融机构信息系统风险管理指引》第四十六条
《证券公司内部控制指引》第一百一十七条
《互联网安全保护技术措施规定》第八条

2、满足系统安全管理需求

当前信息安全形势日益严峻,信息安全防护工作面临前所未有的困难和挑战。日志审计能够帮助用户更好监控和保障信息系统运行,及时识别针对信息系统的入侵攻击、内部违规等信息,同时日志审计能够为安全事件的事后分析、调查取证提供必要的信息。

三、日志分析审计的挑战

  1. 日志数据量巨大,无法很好的管控
    每类设备产生的日志量都是十分巨大,分析审计员无法对数量巨大的日志进行查看与管控。
  2. 日志数据格式各异,可读性差
    不同品牌、不同类型设备的日志格式都不相同,分析审计员无法准确解读所有设备的日志。
  3. 日志数据存储风险,彼此割裂
    各类设备分散在网络中的不同位置,分析审计人员无法及时有效的查看到存储于不同位置的日志。
  4. 日志数据无法关联,分析困难
    当威胁产生时无法关联其他日志进行溯源分析,无法找到问题的源头从根本上解决问题。

四、日志采集分析审计系统的主要核心功能

对于前面的日志分析审计现状带来的挑战,很多企业购买或自建了日志采集分析审计系统。一方面满足合规要求,另一方面满足自身业务系统安全管理的要求。

日志采集分析审计系统,通过海量日志采集、异构设备日志范式化、安全事件关联分析等技术,实现日志全生命周期管理。协助运维人员从事前(发现安全风险)、事中(分析溯源)及事后(调查取证)等多个维度监控网络安全事件。
日志全生命周期管理

一般来说日志采集分析审计系统核心功能包括日志采集、日志存储、日志分析、日志查询、日志监控、日志事件告警、统计展示。

1、日志采集

系统应提供全面的日志采集能力:支持网络安全设备、网络设备、数据库、windows/linux主机日志、web服务器日志、虚拟化平台日志以及自定义等日志;
提供多种的数据源管理功能:支持数据源的信息展示与管理、采集器的信息展示与管理以及agent的信息展示与管理;提供分布式外置采集器、Agent等多种日志采集方式;支持IPv4、IPv6日志采集、分析以及检索查询;

2、日志存储

提供原始日志、范式化日志的存储,可自定义存储周期,支持FTP日志备份以及NFS网络文件共享存储等多种存储扩展方式。一般来说支持大数据技术的存储方式如ES等,日志数据存储需要满足不少于六个月。

3、日志分析

提供便捷的日志分析操作,支持对日志进行分组、分组查询以及从叶子节点可直接查询分析日志;

4、日志查询

提供丰富灵活的日志查询方式,支持全文、key-value、多kv布尔组合、括弧、正则、模糊等检索;
提供便捷的日志检索操作,支持保存检索、从已保存的检索导入见多条件等;

5、日志监控

在采集器维度对日志源情况进行实时监控,对日志源的基本情况及事件信息进行展示,提供日志监控能力,支持对采集器、采集器资产的实时状态进行监控。如发现某一采集器在一段时间内没有日志数据报送,就需要排查是否是源系统或网络传输出现了问题。
在平台维度对平台自身的组件进行实时监控,保障平台自身的稳定运行。支持查看CPU、磁盘、内存总量及当前使用情况;支持查看资产的概览信息及资产关联的事件分布;

6、日志事件告警

能够实现单事件的关联、多事件的关联分析;支持自定义事件规则,可按照日志、字段布尔逻辑关系等方式自定义规则;支持时间的查询、查询结果统计以及统计结果的展示等;支持对告警规则的自定义,可设置针对事件的各种筛选规则、告警等级等;

能够进行统计关联分析、时序关联分析、逻辑关联分析
统计关联:基于统计条件规则的关联分析,如某一事件重复出现多次。典型的如:暴力破解,在某一时间段某一相同账号频繁多次失败的尝试登录日志。
时序关联:基于时序的规则的分析,如发生某动作后接着发生了其他的动作。如:发生了在某一时间段某一相同账号频繁多次失败的尝试登录日志后,发生了一次成功登录的日志。就有可能怀疑是暴力破解成功了。
逻辑关联:基于逻辑的关联,如满足什么条件的情况下发生了什么。如:不是白名单的IP访问了某台设备等。

7、统计展示

支持丰富的内置报表以及灵活的自定义报表模式,按照日、周、月、年生成专项审计报告,支持实时报表、定时报表、周期性任务报表等方式;支持编辑报表的目录接口、引用统计项、设置报表标题、展示页眉和页码、报表配置基本内容(名称、描述等);支持html,pdf,word格式的报表文件以及报表logo的灵活配置;可视化的交互界面能够展现当前审计情况,展现日志审计工作成果与价值。

通过对人员角色的定义,可根据角色定义监控的个人工作台,过滤关键重要的事件和监控指标,更加方便安全的日常审计工作,有效提升日志审计的关注度和时效性。

五、日志采集分析审计系统的价值

  1. 日志集中管控
    日志采集分析审计系统可以帮助客户对海量日志进行集中管控,客户能够从日志采集、存储、分析、告警等环节参与日志全生命周期管理,有效解决日志分散、日志量大、日志格式不统一的问题,助力安全运维。
  2. 日志回溯与取证
    日志采集分析审计系统能够对日志进行留存,支持回溯查询,有效解决事后追查困难、无法提供有效证据的难题。
  3. 监测体系构建
    日志作为网络安全监测体系中比较重要的一环,可在信息获取和分析验证等方面提供技术支撑,当体系做出调整后,日志能够更加准确的反映出系统情况,助力企业网络安全监测体系构建,提升安全防御能力。
  4. 等保合规
    日志采集分析审计系统平台支持大数据日志存储方案,可助力客户满足网络安全法、等保合规日志留存6个月的要求,同时支持灵活的自定义报表,可满足多样化的报表需求。

博客:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

网络安全之资产及攻击面管理

发表于 2023-03-05 | 更新于: 2025-04-08 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 3.2k | 阅读时长 ≈ 10

“摸清家底,认清风险”做好资产管理是安全运营的第一步。那么什么是资产,资产管理的难点痛点是什么,如何做好资产管理,认清风险。带着这些问题我们来认识一下资产及攻击面管理。

一、资产的定义

《GBT 20984-2007信息安全技术信息安全风险评估规范》中,对于资产的定义为“对组织有价值的信息或资源,是安全策略保护的对象”。

对于网络空间资产来说,这里的资产是指赛博空间中某机构所拥有的一切可能被潜在攻击者利用的设备、信息、应用等数字资产。具体对象包括但不限于硬件设备、云主机、操作系统、IP地址、端口、证书、域名、Web应用、业务应用、中间件、框架、机构公众号、小程序、App、API、源代码等。概括来说,只要是可操作的对象,不管是实体还是属性。都可以称之为“网络空间资产”。
安全资产视图

借用“魔方安全”的图,一切可操作对象和属性,都是资产。

二、资产管理的挑战

通过上面的定义和图示,可以看到其实网络空间资产,所涉及的覆盖面特别广,给企业资产管理安全运营带来的巨大的挑战:
1、对象多
按数字资产类型划分如网站、IP、域名、移动门户和云服务等一切可能被潜在攻击者利用的设备、信息、应用等都是网络空间资产。所以资产管理需要纳管的类型多,且随着业务的互联网化、社交化,导致资产及暴露面快速增长。
2、分布广
随着数字化应用的深入,资产分布在多个数据中心、私有云、公有云、混合云、边缘计算和物联网等各种基础设施环境中,照成了资产信息割裂碎片化,给资产的统一管理带来了困难。
3、变化快
随着数字化转型业务发展和新型IT技术应用,为快速响应市场和业务需求,互联网暴露资产无时无刻都在跟着生产运营动态变化。
4、更隐蔽
影子资产的存在,包括钓鱼欺诈网站、暗网交易数据、用户信息泄露、代码仓库等外部隐藏的企业资产,给企业经济或商誉上带来更大的伤害。

三、解决方案

一切可能被潜在攻击者利用的设备、信息、应用等都是网络空间资产。你永远都无法知道攻击者如何利用这些网络空间资产进行攻击。

所以摸清家底是第一步,要搞清楚自己的资产都有哪些,分布在那里,有哪些漏洞风险。这里互联网暴露资产及影子资产尤为关键。影子IT(shadow it):指那些不在企业和组织IT部门掌控下的IT设备、软件及服务。影子资产就是影子IT中资产。互联网暴露面是网络攻击的入口,是网络安全运营的第一道防线;影子资产的存在更是让安全运营人员防不胜防,因为“你无法保护你看不见的东西”。为了解决这些问题业界推出了攻击面管理的概念。

攻击面管理以保护组织数字资产安全为出发点,聚焦在攻击者视角去审视网络空间内不同形态种类的资产所组成的攻击暴露面,同时特别强调“可观测性”、“可运营”,这意味着资产的全面性可度量、风险可度量、响应处置可度量。

攻击面管理的包括暴露面资产全面发现、资产脆弱性风险识别、多源数据融合分析、专项暴露面收敛。

1、暴露面的全面发现

暴露面的发现主要以攻击者视角为主,涵盖外部信息、网络资产等维度。

外部信息包括攻击者能够收集到的机构信息、在开源代码共享平台上的代码、外部接口等。

  • 机构信息收集

潜在攻击者首先会搜集用户的机构信息,搜集维度包括但不限于总部及分支机构名称、品牌、安全管理制度、业务运行时间、集团行政架构、各分支机构间的关系等等;针对高权限的IT管理人员,重点搜集姓名、邮箱、手机号、VPN账户、昵称、社会关系等等;搜集渠道主要有各大搜索引擎、天眼查类平台、网盘文库、官网、公众号、钉钉群、微信群、代码共享平台等。因此,安全团队可以通过外部攻击面发现平台,对此类信息做持续周期性的发现。先于攻击者发现此类资产,为响应收敛争取时间。

  • 源代码发现与收敛

代码共享平台存在隐匿的攻击暴露面,例如管理后台URL、VPN账户密码等,开发运维人员因缺乏安全意识,无意中将此类敏感信息上传至GitHub、Gitee等代码共享平台,为信息安全事故埋下导火索。攻击者主要是以用户机构的业务关键字、品牌名称、公司名称、IT人员的个人GitHub账户等渠道搜集这类信息,因此安全团队应以技术监测手段与内部行政管理相结合的方式,对此类攻击暴露面进行持续发现、收敛。

  • 外部接口管理

除了代码平台,还有一类常被忽视的攻击暴露面是外部接口,如与合作伙伴或第三方平台的API数据接口,与微信公众号菜单对接的URL、小程序或H5中隐含的数据接口等。这类外部接口,开发测试使用过后,即随着项目结束而被遗忘,极易成为潜在的攻击暴露面。同代码平台监测一样,安全团队应当以“技术+管理”相结合的方式,对此进行持续发现、收敛。

  • 网络资产攻击面覆盖

通过扫描探测、流量监听、主机代理、特征匹配、其他CMDB系统对接等多种方式,持续动态的发现、汇集资产数据,建立与业务之间的关联关系,安全责任落实责任人,做到摸清家底,解决资产掌握的“不准”、“不全”问题。建立统一的资产台账,对台账数据进行定期自动化探测稽核以及持续动态监测,发现未能了解或掌握暴露于网络空间的资产攻击面,对未申报的遗漏暴露面资产(影子资产)进行自动发现并预警,解决“大海捞针”的工作困扰。

2、脆弱性风险识别

脆弱性风险识别包括弱口令识别、漏洞发现、安全配置不合规项的检查识别

  • 弱口令识别

弱口令没有严格和准确的定义,通常认为容易被别人猜测到或被破解工具破解的口令均为弱口令。近年来,账户密码的不断泄露导致暗网的密码数据库不断增加,日益开放的网络环境降低了边界的可防御性,远程设备的迅速涌入使互联网络上的用户和终端身份的安全管理更加复杂。可以说,金融行业的弱口令攻击面仍然是在不断扩大的。因此,攻击面发现能力中,对攻击面脆弱性的评估,首先还是要关注弱口令。
弱口令的发现方式相对也并不复杂,在发现管理后台页面、口令认证接口等类型资产时,相关产品或工具能够进一步辅以口令字典进行测试即可。这里的字典要支持用户上传进行自定义,同时针对不同的资产发现场景和任务,修改不同级别的弱口令测试强度,不影响业务。

  • 漏洞发现

作为攻击者,往往依赖于新爆出的0day或1day漏洞。这就决定了在新的漏洞威胁出现后,安全团队需要抢在攻击者之前,更快、更全、更准地定位潜在受漏洞威胁的风险资产。攻击面管理首先要做到在漏洞爆发之前,就对资产台账中的所有资产信息按照业务优先级进行标记,同时对所使用的系统、应用、中间件及资产的版本号等关键信息做到精细管理、持续更新。如此一来,在漏洞爆发时,才能第一时间做到资产快速筛选、PoC快速分发、漏洞精准匹配、虚拟补丁临时修复等快速检测与响应,赶在攻击者行动之前完成风险收敛。

  • 安全配置合规检查

安全配置通常都是由于人为的疏忽造成主要包括了账号、口令、授权、日志、IP通信等方面内容,反映了系统自身的安全脆弱性。攻击者往往利用主机、中间件的如脆弱的访问控制配置漏洞进行渗透。安全配置基线合规管控方案是能够有效保障网络设备、信息系统安全的手段之一,其内容主要涉及:登录配置、远程管理保护、访问控制、安全日志、安全协议等多方面内容,只有实现及时自动的采集和核查发现安全配置不合规项并进行整改,才能更好的保障网络资产的安全。

3、多源数据融合分析

随着数字化应用的深入,资产分布在多个数据中心、私有云、公有云、混合云、边缘计算和物联网等各种基础设施环境中,无论用户的单独一个部门亦或是单独某一家供应商,不可能覆盖所有资产,因此,统一的攻击面管理一定要具备“多源资产数据的接入并融合分析”的能力。主要解决统一可视化管理的问题,包括资产的可视化、资产与资产之间的关系可视化、风险可视化、业务影响可视化、责任可视化。这都要求具备统一的资产及攻击面管理平台实现多源资产数据的统一接入汇聚,多源数据的融合与分析。

  • 多源资产数据接入

应能对接的多源资产数据,包括但不限于CMDB、终端管理平台、AD域等运维数据,以及NDR、EDR、HDR(含HIDS)等具备资产发现能力的安全产品及解决方案。接入范围应该覆盖企业数据中心、私有云、公有云、混合云、边缘计算和物联网等各种基础设施环境中的所有的数据资产数据。

  • 数据融合与分析

多源资产数据接入汇总后,并非简单的叠加,而是要进行持续的交叉验证、去重/扩充、属性补全、标记等操作。需要结合业务数据流、网络流量、访问拓扑等多个维度,综合描绘出资产之间的关系链,建立“人-地-网”进行深度的关联和立体化模型,对地理、资产、事件、情报等大数据进行融合分析,结合可视化呈现技术,实现企业整体统一全面的资产地图,让网络资产“看得到、看得清、管得好”,到对于攻击能够“防的住”。

4、专项暴露面收敛

通过前面的暴露面资产发现、脆弱性设别筛选定位出所有潜在威胁的风险资产,然后根据资产的业务优先级、所属部门,下发不同的响应策略。在不影响业务连续性的前提下,确定漏洞修复方案前,对部分资产做临时下线处理。对于一小部分受业务连续性要求,既不能下线又不能修复的资产,则通过“虚拟补丁/透明补丁”的方式临时加固,待将来允许时,再行修复。


博客:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

学习英语,你认为“长期”的坚持是多长,“大量”的阅读又是多少?

发表于 2023-03-02 | 更新于: 2025-04-08 | 分类于 人生 | | 阅读次数:
字数统计: 796 | 阅读时长 ≈ 2

English
今天在豆瓣上翻到我在2020年4月发的一篇文章《看完全套149本《书虫》是种什么样的体验》。有豆友留言在问“现在英语怎么样了”?顿时感觉脸上火辣辣的,被啪啪打脸!

豆瓣回复

到今天2023年3月了,快三年了,自己的英语又回到了原点。在我学习英语的生涯中又添加了一次英语学习失败的经历。陷入了第N+1轮的从坚持到放弃,从放弃到开始的魔咒。

终究还是把英语学习看得太轻了!对于英语的学习,我经历过《坚持了330天,我终于放弃了背单词》、《看完全套149本《书虫》是种什么样的体验》、《英语学渣的我是如何撸完这本英文原著的》。经历了1年的背单词的过程,半年的看完全套书虫,半年撸完10本英文原著(见豆列《我读过的英文读本》)。

关于学习英语这件事,大家都知道需要“长期”的坚持,“大量”的阅读应用。那么你认为长期的坚持是多长,大量的阅读是多少呢?我前前后后花了两年的时间,完成了149本书虫,看完了上十本英文原著,我觉得我已经很努力了,很能坚持了。当我试图在网上寻找这个答案时,发现自己认为花了两年的时间很长,人家已经坚持了七八上十年了;自己嘚瑟看完了全套书虫,人家不但晒完了全套书虫还晒完了哈利波特系列、床头灯系列后每年还坚持撸完二三十本原著。你所谓的“坚持”和“大量”,在人家眼里那只能是渣渣!学英语的路上,总能遇到比你厉害的人却还比你更努力!

学习这件事,真的没有捷径,谁更用功谁功夫深。好在已经有大量的人已经验证过,英语这个技能是可以通过“长期”的坚持和“大量”的应用可以习得的,我们应该笃信这个事情。“长期”的坚持是多长,”大量”的阅读是多少,最终只能通过效果来验证。

学习拐点

知识和能力的习得与积累是有复利效应的。所以,应该要相信自己能够通过“长期”和“大量”的积累和复利获得成功和成长,实现自己的英语应用的自由。有人通过自己的长期坚持和大量的积累成功的突破了拐点,实现了自己的目标。自己还没有成功,说明坚持得不久,积累得不够,在拐点到来之前就慢慢的放弃了,如果继续放弃那以前花费的时间精力只能是变成沉默成本不会有任何效果了。实现英语阅读自由只能是梦想了。

革命尚未成功,同志仍需努力!梦想还是要有的,现在开始继续坚持英语学习吧!



“fullbug”微信公众号

关注:微信公众号,一起学习成长!

安全评估之漏洞扫描、基线检查、渗透测试

发表于 2023-03-01 | 更新于: 2025-04-08 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 2.3k | 阅读时长 ≈ 7

为保证业务系统运营的安全稳定,在业务系统上线前需要开展三同步检查,针对新业务系统上线、新版本上线、项目验收前开展安全评估。可以帮助其在技术层面了解系统存在的安全漏洞。今天就来了解一下安全评估之漏洞扫描、基线检查、渗透测试。

安全评估的内容主要涉及主机漏洞扫描、安全基线检查、渗透测试三个方面:

主机漏洞扫描

主机漏洞扫描一般是采用漏洞扫描工具,根据其内置的弱点测试方法,从网络侧对被评估对象进行一系列的检查,从而发现弱点。发现其存在的不安全漏洞后进行人工分析和确认,针对每个漏洞的整改意见完成报告的输出。被评估对象系统的管理人员根据扫描的结果以及修复建议修复网络安全漏洞,在黑客攻击前进行防范。被评估对象系统的管理人员对这些漏洞进行修复后,安服工程师会对漏洞扫描报告中每个漏洞进行漏洞复测,并输出复测报告。使用户更加全面的了解全网的安全状态,提高对安全漏洞的认识和管理能力,并通过对漏洞的修补加强应用系统抵御恶意入侵的能力。

安全基线检查

安全基线检查是通过采用安全检查设备以及人工检查两种方法从对应目标的安全合规性等方面开展对系统的全量安全基线检查,从而发现其基线的不合规项。其次在发现基线不合规项之后由安服工程师进行人工二次确认,依据工信部基线安全标准,针对性提供每个基线不合规项的整改建议,并完成基线不合规项报告输出。评估对象系统的管理人员可根据输出报告对基线不合规项进行基线整改。整改完成后,安服工程师会对按照工信部基线安全标准对所涉及不合规项进行安全基线复测,并输出复测报告。确保系统安全性得到提升,建立系统基础的安全防御体系。

渗透测试

渗透测试主要是模拟黑客的攻击手法,通过自动化漏洞扫描工具结合手工测试的方式对系统进行无害化的安全评估。渗透测试包含应用安全测试和业务安全测试两部分,应用安全测试包括但不限于如下内容:

序号 应用安全检查项 检查项说明
1 注入类攻击 注入攻击漏洞,例如SQL,OS以及LOAP注入,这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候,攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者访问未授权的数据。
2 跨站脚本(XSS) 当应用程序收到含有不可信的数据,在没有进行适当的验证和转义的情况下,就将它发送给一个网页浏览器,这就会产生跨站脚本攻击(简称XSS)。XSS允许攻击者在受害者的浏览器上执行脚本,从而劫持用户会话、危害网站、或者将用户转向恶意网站。
3 失效的身份认证和会话管理 与身份认证和会话管理相关的应用程序功能往往得不到正确的实现,这就导致了攻击者破坏密码、秘钥、会话令牌或攻击其他的漏洞去冒充其他用户的身份
4 不安全的直接对象引用 当开发人员暴露一个对内部实现对象的引用时,例如,一个文件、目录或数据库秘钥,就会产生一个不安全的直接对象引用,在没有访问控制检测或者其他保护时,攻击者会操作这些引用去访问未授权数据。
5 跨站请求伪造 一个跨站请求伪造攻击迫使登陆用户的浏览器将伪造的HTTP请求,包括该用户的会话cookie和其他认证信息,发送到一个存在漏洞的web应用程序,这就允许了攻击者迫使用户浏览器向存在漏洞的应用程序发送请求,而这些请求会被应用程序认为是用户的合法请求。
6 安全配置错误 好的安全需要对应用程序、框架、应用程序服务器、web服务器、数据库服务器和平台,定义和执行安全配置。由于许多设置的默认值并不是安全的,因此,必须定义、实施和维护所有这些设置。这包括了对所有的软件保持及时地更新,包括所有应用程序的库文件。
7 不安全的加密存储 许多web应用程序并没有使用恰当的加密措施或Hash算法保护敏刚数据,比如信用卡、身份证等等。攻击者可能利用这种弱保护数据实行身份盗窃、信用卡诈骗或其他犯罪。
8 没有限制URL访问 许多web应用程序在显示受保护的链接和按钮之前会检测URL访问权限。但是,当这些页面被访问是,应用程序也需要执行类似的访问控制检测,否则攻击者将可以伪造这些URL去访问隐藏的页面
9 传输层的保护不足 应用程序时常没有进行身份认证,加密措施,甚至没有保护敏感网络数据的保密性和完整性。而当进行保护时,应用程序有时采用弱算法,使用过期或者无效的证书,或不正确地使用这些技术。
10 未验证的重定向和转发 WEB应用程序经常将用户重新定向和转发到其他网页和网站,并且利用不可信的数据去判定目的页面,如果没有得到适当验证,攻击者可以重定向受害用户到钓鱼软件或恶意网站,或者使用转发去访问未授权的页面

业务安全测试包括但不限于如下内容:

序号 业务安全检查项 检查项说明
1 身份认证管理 该项测试主要针对身份认证环节,以及在非授权情况下访问一些授权用户才能访问的页面,或进行授权用户的操作。
2 业务一致性 该项测试主要针对办理业务过程中用户的身份与用户办理的业务是否相关联一直的安全测试
3 业务授权安全 该项测试主要针对于是否存在非授权情况下访问一些授权用户才能访问的页面,或进行授权用户的操作。
4 用户输入合法性验证 Web应用程序没有对用户输入数据的合法性进行判断,就会使应用程序存在安全隐患。从而容易受到跨站脚本及SQL注入等攻击
5 误操作回退 手动进行误操作尝试,看系统是否能够正确回滚。例如,交易操作,在购买未完成时异常退出,看系统是否能够自动释放被购买物的锁定状态。又例如办理操作,如话费套餐变更,更改过程出错或异常退出是否能正确回滚到办理之前的状态
6 验证码机制 验证码控制是一种由WEB应用程序生成的随机数,以确保用户提交的请求不是由bot生成。
7 业务数据篡改 该项测试主要针对于办理业务过程中用户浏览器端传递至服务端的字段篡改测试。
8 业务流乱序 该项测试主要针对业务的处理流程是否有正常的顺序,确保不会通过技术手段绕过某些重要流程步骤。
9 信息正确呈现 对于用户提交的请求,是否能够返回用户需要的页面信息。
10 业务接口恶意调用 1.对于敏感的业务接口,是否预先有身份认证机制?查看此类可能被恶意大规模调用的业务接口,如用户登录模块、密码找回、密码重置等等。
2.对于具有查询展示办理功能的业务皆苦,如果不需要身份认证是否有强制验证码机制防止机器人程序等自动化大规模的恶意调用。

博客:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

写给两年后2025年的自己

发表于 2023-03-01 | 更新于: 2025-04-08 | 分类于 人生 | | 阅读次数:
字数统计: 473 | 阅读时长 ≈ 1

致未来

2025年的我应该是实现了架子鼓演奏自由,可以轻松的驾驭并享受架子鼓演奏带来的愉悦和快乐。可以很自信的在抖音或B站上上传自己平时很惬意的架子鼓日常练习,不用再担心有人说”节奏不稳、勉强还行”了。技巧应该很熟了,什么重轻音、滚奏、双踩都不在话下了,16分节奏型速度在120以上那都是小case,可以挑战一些有难度的歌曲了。可以很有底气的说我会打架子鼓!要不要来表演一段?

2025年的我应该是实现了英语阅读的自由,可以享受在英语文献中获取知识带来的快乐,可以不带字幕的看懂大部分的美剧大片了。不用再忍受看一页原版英语小说还要不停的翻英汉字典,搞得阅读兴趣全无了。应该可以畅快的看懂英文的计算机相关的技术文档了,可以尝试翻译英文技术文档了。

2025年的我技术能力水平应该更高了,心智更加成熟,思考更加有深度了,更加乐意写技术文章做技术分享了。CSDN账号的粉丝应该是到了10W,可以小小的嘚瑟一下了!

2025年的我还没有达到财富自由,上班还是在上班,但心态没有这么累了,应该是在享受工作了。开了多年的老爷车应该是换了,换成了新能源的混动车,偶尔可以开着新车去旅行,感受不一样的风景了。

如今的各种不如意,都是来自于过去的不努力!

2025年的我,要感谢现在努力的自己!



“fullbug”微信公众号

关注:微信公众号,一起学习成长!

网络安全之认识挖矿木马

发表于 2023-02-22 | 更新于: 2025-04-08 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 2.9k | 阅读时长 ≈ 10

一、什么是挖矿木马?

比特币是以区块链技术为基础的虚拟加密货币,比特币具有匿名性和难以追踪的特点,经过十余年的发展,已成为网络黑产最爱使用的交易媒介。大多数勒索病毒在加密受害者数据后,会勒索代价高昂的比特币。比特币在2021年曾达到1枚6.4万美元的天价,比特币的获得需要高性能计算机(又称矿机,一般配置顶级CPU和GPU)按特定算法计算,计算的过程被形象的称为“挖矿”。

矿机价格昂贵,为生产比特币,有人不惜重金购置大量矿机组成网络集群挖矿。挖矿又非常耗电,因此矿场往往会寻找偏僻地区的小水电、小火电而建,因为电费便宜,有人为节约成本偷电挖矿。

当数字加密币市值暴涨时,挖矿业务会水涨船高,高端CPU、GPU、高端显卡、大容量硬盘被炒上天价还卖断货。目前,我国政府宣布要实现碳达峰碳中和的目标,严重耗能的虚拟加密币相关生产、交易被认定为非法,我国境内所有(生产加密货币的)矿场必须关闭。

因挖矿需要大量财力投入,从一开始,就有人想到利用木马控制他人的计算机组建僵尸网络集群挖矿的办法,这就是所谓“挖矿木马”。

不法分子通过各种非法手段将矿机程序植入受害者的计算机中,利用受害者计算机的运算能力进行挖矿活动,从而获取非法收益。这类非法侵入用户计算机的矿机程序被称作挖矿木马病毒。

二、挖矿木马的主要入侵方式

挖矿木马常见的攻击方式及攻击后果可以参考下图:
挖矿木马的主要入侵方式

1、漏洞攻击

利用系统漏洞快速获取相关服务器权限,植入挖矿木马是目前最为普遍的传播方式之一。常见的漏洞包括Windows系统漏洞、服务器组件插件漏洞、中间件漏洞、Web漏洞等。例如传播较广的WannaMine挖矿家族,利用了永恒之蓝漏洞在内网蠕虫式传播,给不少公司和机构带来巨大损失。

2、弱口令爆破

弱口令指的是仅包含简单口令、有规律的键盘组合或历次泄漏过的密码,攻击者通常会针对redis、ssh、3389、mssql、IPC$等服务进行爆破弱口令攻击。爆破成功后,尝试获取系统权限,植入挖矿木马并设置持久化。

3、伪装正常软件

攻击者将挖矿木马伪装为游戏软件、娱乐社交软件、安全软件、游戏外挂等进行传播,欺骗用户下载并执行。由于多数游戏对显卡、CPU等硬件性能要求较高,故挖矿木马通常伪装成游戏辅助外挂,通过社交群、网盘等渠道传播,感染大量机器。

三、挖矿木马的安全危害

挖矿木马攻击,就是发生率较高,极可能造成业务系统中断的威胁事件,挖矿木马最明显的影响是大量消耗系统资源,使系统其他软件或服务运行缓慢,性能变差。主要安全危害包括业务故障、资源损耗及其他的安全威胁。

1、业务故障

挖矿木马会占用CPU进行超频运算,从而占用主机大量的CPU资源,导致设备性能不足,业务访问缓慢,设备过载宕机重启,异常网络链接等问题,严重影响服务器上的其他应用的正常运行,最终会影响业务系统工作运行。

2、资源损耗

挖矿木马的挖矿活动会使设备各器件高速运行,产生大量热能,增加电能消耗,加速设备器件老化等问题,造成资源损耗浪费。

3、安全威胁

挖矿木马作为一款应用程序,在服务器中运行,其拥有服务器权限,对服务器主机产生安全威胁。部分挖矿木马还具备蠕虫化的特点,在主机被成功入侵之后,挖矿木马还会向内网渗透,并在被入侵的服务器上持久化驻留以获取最大收益。

四、挖矿木马的检测手段

1、挖矿主机指纹识别

通过主机探测平台内置指纹知识库,如:Body特征、Header特征,对挖矿木马指纹进行识别,进而发现感染挖矿木马主机资产。

2、挖矿主机端口识别

通过研究分析目前主流的挖矿木马类型存在的通信端口,感染主机的标记端口等,形成挖矿木马常用端口知识库,并对资产开放端口进行聚合分析,探测这些端口的指纹信息进行识别和确认。

3、挖矿主机协议检测

通过挖矿木马的通信协议特征,对比分析网络资产开放的服务协议,定位存在挖矿木马感染风险的资产主机。

4、IOC威胁情报关联检测

通过大数据威胁情报,实时更新最新的挖矿木马情报。包括挖矿木马家族使用的C&C域名、恶意文件hash、矿池域名和IP、挖矿木马使用的加密货币钱包地址等进行挖矿木马流量检测告警。

5、挖矿木马行为特征检测

通过网络流量检测分析引擎,对其挖矿木马通信的端口、协议、内容、行为特征、恶意文件检测等挖矿木马流量特征进行检测分析,定位出存在恶意挖矿行为的终端及主机。

6、DNS流量检测挖矿域名

通过DNS威胁流量检测,基于域名分析算法结合威胁情报系统对C&C域名、挖矿网站域名、DNS解析IP等进行聚类分析,进而发现内网存在的恶意挖矿行为。

五、挖矿木马的清理

参考网上给出的腾讯安全专家撰写的《挖矿木马自助清理手册》的挖矿木马清理步骤和方法:

1、及时隔离主机

部分带有蠕虫功能的挖矿木马在取得主机的控制权后,会继续对公网的其他主机,或者以当前主机作为跳板机对同一局域网内的其他主机进行横向渗透,所以在发现主机被植入挖矿木马后,在不影响业务正常运行的前提下,应该及时隔离受感染的主机,然后进行下一步分析和清除工作。

2、阻断异常网络通信

挖矿木马不仅会连接矿池,还有可能会连接黑客的C2服务器,接收并执行C2指令、投递其他恶意木马,所以需要及时进行网络阻断。
(1)检查主机防火墙当前生效的iptables规则中是否存在业务范围之外的可疑地址和端口,它们可能是挖矿木马的矿池或C2地址

1
iptables -L -n

(2)从iptables规则中清除可疑地址和端口

1
vi /etc/sysconfig/iptables

(3)阻断挖矿木马的网络通信

1
2
iptables -A INPUT -s 可疑地址 -j DROP
iptables -A OUTPUT -d 可疑地址 -j DROP

3、清除计划任务

大部分挖矿木马会通过在受感染主机中写入计划任务实现持久化,如果仅仅只是清除挖矿进程,无法将其根除,到了预设的时间点,系统会通过计划任务从黑客的C2服务器重新下载并执行挖矿木马。
可以通过执行如下命令查看是否存在可疑定时任务,若有,则先保存相关记录用于后续分析,再进行删除:
查看系统当前用户的计划任务:

1
crontab -l

查看系统特定用户的计划任务:

1
crontab -u username -l

查看其他计划任务文件:

1
cat /etc/crontabcat /var/spool/croncat /etc/anacrontabcat /etc/cron.d/cat /etc/cron.daily/cat /etc/cron.hourly/cat /etc/cron.weekly/cat /etc/cron.monthly/cat /var/spool/cron/

4、清除启动项

除了计划任务,挖矿木马通过添加启动项同样能实现持久化。可以使用如下命令查看开机启动项中是否有异常的启动服务。
CentOS7以下版本:

1
chkconfig –list

CentOS7及以上版本:

1
systemctl list-unit-files

如果发现有恶意启动项,可以通过如下命令进行关闭:
CentOS7以下版本:

1
chkconfig 服务名 off

CentOS7及以上版本:

1
systemctl disable 服务名

另外,还需要仔细排查以下目录及文件,及时删除可疑的启动项:

1
2
3
4
5
6
7
8
9
10
11
12
/usr/lib/systemd/system
/usr/lib/systemd/system/multi-user.target.wants
/etc/rc.local
/etc/inittab
/etc/rc0.d/
/etc/rc1.d/
/etc/rc2.d/
/etc/rc3.d/
/etc/rc4.d/
/etc/rc5.d/
/etc/rc6.d/
/etc/rc.d/

排查的时候,可以按照文件修改时间来排序,重点排查近期被创建服务项。

5、清除预加载so

通过配置/etc/ld.so.preload,可以自定义程序运行前优先加载的动态链接库,部分木马通过修改该文件,添加恶意so文件,从而实现挖矿进程的隐藏等恶意功能。
检查/etc/ld.so.preload(该文件默认为空),清除异常的动态链接库。

6、清除SSH公钥

挖矿木马通常还会在 ~/.ssh/authoruzed_keys 文件中写入黑客的SSH公钥,这样子就算用户将挖矿木马清除得一干二净,黑客还是可以免密登陆该主机,这也是常见的保持服务器控制权的手段。
排查 ~/.ssh/authorized_keys文件 ,如果发现可疑的SSH公钥,直接删除。

7、清除挖矿木马

(1)清除挖矿进程
挖矿木马最大的特点就是会在用户不知情的情况下,利用主机的算力进行挖矿,从而消耗主机大量的CPU资源,所以,通过执行如下命令排查系统中占用大量CPU资源的进程。

1
top -cps -ef

确认相关进程为挖矿进程后,按照如下步骤将其清除:
获取并记录挖矿进程的文件路径:

1
ls -l /proc/$PID/exe

杀死挖矿进程:

1
kill -9 $PID

删除挖矿进程对应的文件
(2)清除其它相关恶意进程
恶意进程与外部的C2服务器进行通信时,往往会开启端口进行监听。执行如下命令,查看服务器是否有未被授权的端口被监听。

1
netstat -antp

若有未授权进程,按照如下步骤将其清除:
获取并记录未授权进程的文件路径:

1
ls -l /proc/$PID/exe

杀死未授权进程:

1
kill -9 $PID

删除未授权进程对应的文件
还可以通过如下命令排查近期新增的文件,清除相关木马

1
find /etc -ctime -2 (这里指定目录为/etc,获取近2天内的新增文件)lsof

8、风险排查、安全加固

对系统进行风险排查和安全加固,避免挖矿木马卷土重来。



“fullbug”微信公众号

关注:微信公众号,一起学习成长!

任何说30天快速学会架子鼓的都是骗人的!

发表于 2023-02-19 | 更新于: 2025-04-08 | 分类于 人生 | | 阅读次数:
字数统计: 1.3k | 阅读时长 ≈ 4

架子鼓

架子鼓
从去年的圣诞节报了架子鼓的班以后,过了一年多了,发现自己这个架子鼓还没有入门!!!

报班的时候感觉信心满满,这架子鼓不就是拿个鼓槌敲来敲去,这还不容易学?而且刷抖音、B站上大把的都是30天快速入门、一个月学会打《逆战》,看得我天真的认为我也能行。现实让我啪啪的打脸,过了一年多了,发现还没有入门,只会打简单的动次打次,敲最简单的《yellow》。

回顾一年多学习架子鼓的历程:

头三个月,才报完班,兴致满满,每周都想约老师上课,由于没有买鼓也没有去鼓房去练习,所以每次上课的时候总是被老师打击”你这个根本就没有练习啊”,或者是”你这上节课的内容还没有练熟啊”,硬着头皮去上课发现头半节课是在练习,后半节课老师匆匆讲一、两个知识点或教一、两个手法。由于完全是零基础老师讲时值,全音符、4分、8分、16分音符等乐理知识,听得得自己一头雾水;教手法是一听就会,一练就费。就这么稀里糊涂的上了大概7节课后,这个信心被打击得不行了,上课的兴趣没有那么大了。想想,这样下去也不是办法,关键是没有条件练习,既然想学好架子鼓,还是得自己买个鼓!于是花了近4千大洋买了个电鼓。

自己有了鼓以后果然兴致又大增。鼓刚到的几天,天天在家练。毕竟咱也是成熟的大人了,知道要学好一门乐器,师傅领进门,修行靠个人,需要自己花时间慢慢的练习。又碰上疫情不断,老师也不能上课。于是自己在B站上找架子鼓视频,今天看到一个新手小白必练节奏型,明天看到一个架子鼓新手快速入门。今天看到这个视频好,练了几天,明天发现另外一个视频可能更适合,又开始跟着这个视频练,练了几天后发现因为不成体系,东练一下西练一下啥都没有学会。又想去找老师线下教,把剩下的几节课上完,结果发现因为疫情原因,报名学鼓的地方老板已经搞不下去,教学点已经转让了。联系了几次老板,老板抱怨说”过了这么久我都已经撑不下去不搞了,你们怎么12节课都还没有学完?”后来根本就不理我们了。

开了个头,总得要学出个名堂来吧?回顾这段学鼓的历程,无疑是段失败的学鼓之路。总结一下,自己学鼓没有目标,不了解学习架子鼓的整个技能知识结构、像个无头苍蝇一样不知道如何有计划的学习和训练,想依赖老师确又没有按照老师的节奏来,把学乐器想得太简单了,不可能通过短短的12次课时就可能把架子鼓学会。人家30天入门、一个月打歌,那基本上都是有基础的,而且是每天都花了大量的时间在练习。个人认为正常情况零基础的学习者没有经过一两年有体系有计划的训练是很难流畅的打好一首中等难度的歌曲的。

痛定思痛,为了学好架子鼓,我开始思考并改变策略。不再无脑的跟B站那些免费的视频教程了,因为大部分免费的视频教程都有个很大的问题就是不成体系。为此我买了一本《成人零基础学架子鼓》的教材,详细了解要学习架子鼓的整体的体系框架,现在知道了学习架子鼓得知道基本的握槌击打方法、套鼓的组成及击打方式、4分、8分、16分、休止符、基本节奏型、还有前8后16、前16后8、切分、附点等等,这些都是需要一个个的去理解理会,通过不断的练习来熟练掌握的。有了这些基本功后才有可能通过组合应用到实战歌曲里面来完成打一首完整的歌曲。为了更好的掌握这些基本功的练习方法,我在抖音上花了499买了一套完整的视频教学课程,可以跟着课程将这些基本功及常用的技巧进行练习。剩下的就是抛弃速成的幻想,扎扎实实一步步的开始练习了。

今年的目标是扎扎实实的把基本功练好,拿下最初定下来的《大风吹》这首歌!



“fullbug”微信公众号

关注:微信公众号,一起学习成长!

网络安全保障之“三同步”

发表于 2023-02-06 | 更新于: 2025-04-08 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 888 | 阅读时长 ≈ 3

建设关键信息基础设施应当确保其具有支持业务稳定、持续运行的性能,并保证安全技术措施同步规划、同步建设、同步使用。

–《网络安全法》第三十三条

信息系统的生命周期层面和安全保障要素层面不是相互孤立的,而是相互关联、密不可分的。
信息系统安全保障生命周期的安全保障要素
在信息系统生命周期模型中,将信息系统的整个生命周期抽象成计划组织、开发采购、实施交付、运行维护和废弃5个阶段,加上在运行维护阶段的变更产生的反馈,形成信息系统生命周期完整的闭环结构。在信息系统生命周期中的任何时间点上,都需要综合信息系统安全保障的技术、管理、工程和人员保障要素。从信息系统建设开始,就应该综合考虑系统的安全保障要求,确保信息系统建设和信息系统安全保障建设同步规划、同步实施。也就是我们平时讲的信息系统和安全保障要“三同步”–同步规划、同步建设、同步使用。

  • 同步规划

关键信息基础设施运营者应:
a)同步分析安全需求,即在关键信息基础设施建设或改建之初,从本组织的职能或业务的角度分析对关键信息基础设施实施网络安全的需求,形成安全需求说明书。
b)同步定义安全要求,即基于网络安全需求说明书,定义关键信息基础设施的网络安全要求,形成网络安全功能和性能说明书。
c)确保安全需求说明书得到网络安全责任部门签字认可。

  • 同步建设

关键信息基础设施运营者应:
a)同步设计安全体系结构,即基于已经定义的关键信息基础设施的网络安全要求,设计网络安全体系结构,明确系统内的各类信息安全组件,说明各组件提供的信息安全服务及可能的实现机制。
b)同步开展详细的安全设计,即根据安全保护等级选择基本安全措施,细化安全机制在关键信息基础设施中的具体实现。
c)在建设或改建过程中,按照GB/T 22239工程实施相应等级的要求,同步建设符合其等级要求的网络安全设施,包括自行软件开发。
d)建设完成后,组织对关键信息基础设施进行验收并将网络安全作为验收的重要内容。

  • 同步使用

关键信息基础设施运营者应:
a)同步运行安全设施,确保安全设施保持启用状态。
b)按照GB/T 22239安全运维管理相应等级的要求进行安全运维。
c)关键信息基础设施及其运行环境发生明显变化时,评估其风险,及时升级安全设施并实施变更管理。
d)对安全设施同步实施配置管理,包括制定配置管理计划,制定、记录、维护基线配置,保留基线配置的历史版本,便于必要时恢复历史配置。


博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

AI机器学习时序序列特征提取实现分类预测实战

发表于 2023-01-06 | 更新于: 2025-04-08 | 分类于 技术 | | 阅读次数:
字数统计: 2.3k | 阅读时长 ≈ 9

最近有位做医疗项目的同学咨询有一批人员的身高、体重、性别、年龄、心电图、是否有心脏病等数据是否可以根据这些数据预测某个人是否有心脏病的迹象。这当然是可以的,AI机器学习不就是干这事的吗?这是一个典型的分类算法。根据这些人体特征来判断是否存在潜在的疾病。问题是如何对心电图进行特征提取,提取出相关的特征,让模型进行学习和训练。

拿到数据后,第一步,我们首先来看一下数据。

一、数据探索

1、读入数据

导入numpy、pandas、matplotlib三大件,读入数据

1
2
3
4
5
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv('data_csv.csv')
df

在这里插入图片描述

数据集中有age年龄、ismale性别、Weight身高、Height体重、HRTrend心电图、label是否有心脏病(1,是有心脏病、0是无心脏病)
这里看到主要的几个关键性的指标。HRTrend是csv中载入的时候数据是文本字符串格式,还有nan及\n等字符串,我们要将这些数据进行清洗规则化,将其转化为数组。

2、数据处理

先拿一个样本数据来看看数据的情况。对它进行相应的处理,包括去掉回车换行符、去多余空格、然后以空格作为分隔形成数组。

1
2
3
4
5
6
7
HRTrend_Data=df['HRTrend'][1][1:len(df['HRTrend'][1])-1]
HRTrend_Data=HRTrend_Data.replace('\n','') #替换掉换行符
HRTrend_Data=HRTrend_Data.replace('nan',str(0)) #将nan补0
HRTrend_Data=re.sub(' +', ' ', HRTrend_Data).strip() #去掉多余的空格
HRTrend_Data=np.asarray([float(s) for s in HRTrend_Data.split(' ')]) #将字符串通过空格分隔,转换成数组
pd.DataFrame(HRTrend_Data).plot()
HRTrend_Data

在这里插入图片描述

这个图形不是很规则不平滑,看数据是因为异常值太多,后面的数据都是0,这些0都是因为数据为Non补充进来的,有可能是应为数据采集的时候某个点位没有采集到。我们需要将这些异常值给处理掉。
对于中间为0的,我们可以通过采用前值填充或者后值填充(也就是用前面的值或后面的值来替代为0的值),后面全部为0的部分要去掉。应为会影响到一些关键性的特征,如均值、50%的值、70%的值等。

1
2
df_HRTrend1=pd.DataFrame(HRTrend_Data)
df_HRTrend1.describe()

在这里插入图片描述

可以看到,这些异常值将会很大程度的影响一些关键特征,所以我们要处理异常值。

1
2
3
4
5
HRTrend_Data=np.trim_zeros(HRTrend_Data)  #去掉首尾的0
df_data1=pd.DataFrame(HRTrend_Data)
df_data1.replace(to_replace=0, method='ffill',inplace=True) #用前值替换掉中间的异常0
df_data1.plot()
df_data1.describe()

在这里插入图片描述

把刚对一个样本处理的过程写成一个函数,应用到所有的样本数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def procdata(df_dataclumn):
ary_data=df_dataclumn[1:len(df_dataclumn)-1]
ary_data=ary_data.replace('\n','')
ary_data=ary_data.replace('nan',str(0))
ary_data=re.sub(' +', ' ', ary_data).strip()
ary_data=np.asarray([float(s) for s in ary_data.split(' ')])
ary_data=np.trim_zeros(ary_data)
df_data=pd.DataFrame(ary_data)
df_data.replace(to_replace=0, method='ffill',inplace=True)
ary_data=df_data.values
return ary_data

df['HRTrend']=df['HRTrend'].map(procdata)
df['Weight'].replace(to_replace=0, method='ffill',inplace=True) #去异常值
df['Height'].replace(to_replace=0, method='ffill',inplace=True) #去异常值
df

在这里插入图片描述
找前六个样本看看效果

1
2
3
4
5
6
fig,axes = plt.subplots(2,3,figsize=(12,4))
i=0
for x in range(2):
for y in range(3):
i=i+1
axes[x,y].plot(df['HRTrend'][i])

在这里插入图片描述

二、特征工程及模型训练

方法一:通过描叙统计提取时序特征并进行模型训练

  • 特征提取

有量纲时序特征提取包括以内容。
在这里插入图片描述

可以看到,大部分内容都可以通过describe()获取。可以写个函数方法来获取相关的特征值。

1
2
3
4
5
6
7
8
9
10
def getdescribefeatures(data):
df_feature=pd.DataFrame(data)
df_feature=df_feature.describe().T
range=df_feature['max'][0]-df_feature['min'][0]
return range,df_feature['count'][0],df_feature['mean'][0],df_feature['std'][0],df_feature['min'][0],df_feature['25%'][0],df_feature['50%'][0],df_feature['75%'][0],df_feature['max'][0]

HRTrend_np=np.array(df['HRTrend'])
HRTrend_features_ary=[getdescribefeatures(d) for d in HRTrend_np]
df_HRTrend_features=pd.DataFrame(HRTrend_features_ary,columns=['HRTrend'+str(i) for i in range(len(HRTrend_features_ary[0]))])
df_HRTrend_features

在这里插入图片描述

将心电图提出的统计信息特征与年龄、性别、身高、体重等特征合并,形成特征集。

1
df_data=df[['age','ismale','Weight','Height','label']].join(df_HRTrend_features)

预留15个样本做最后的预测看效果。

1
2
df_train_data=df_data[0:len(df_data)-15]    #训练数据
df_predict_data=df_data[len(df_data)-15:len(df_data)] #用于预测的数据
  • 模型训练
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from sklearn.metrics import f1_score
from sklearn.metrics import recall_score
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier

x_tt, x_validation, y_tt, y_validation = train_test_split(x, y, test_size=0.2)
# 将训练集再切分为训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x_tt, y_tt, test_size=0.25)

#将模型的名字和模型函数作为元组添加到列表当中存储;
models = []
models.append(("KNN",KNeighborsClassifier(n_neighbors=3))) #指定邻居个数
models.append(("SVM Classifier",SVC(C=1000)))
#可以通过参数C来控制精度,C越大要求精度越高; C——错分点的惩罚度

#循环调用所有模型进行训练、预测
for clf_name, clf in models:
clf.fit(x_train, y_train)
xy_lst = [(x_train, y_train), (x_validation, y_validation), (x_test, y_test)]
for i in range(len(xy_lst)):
x_part = xy_lst[i][0] # 为遍历中的第0部分
y_part = xy_lst[i][1] # 为遍历中的第1部分
y_pred = clf.predict(x_part)
print(i) # i是下标,0表示训练集,1表示验证集,2表示测试集
print(clf_name, "ACC:", accuracy_score(y_part, y_pred))
print(clf_name, "REC:", recall_score(y_part, y_pred))
print(clf_name, "F-score:", f1_score(y_part, y_pred))

结果如下:
在这里插入图片描述

SVM分类模型的效果要稍好于KNN的模型,但整体效果还不是很好。应该是提取的特征还是不够。我们来试下通过tsfresh提取时序特征并进行模型训练。

方法二:通过tsfresh提取时序特征并进行模型训练

  • 特征提取

tsfresh可以自动提取各种时间特征,可以参考官方文档,一般的取最大、最小、偏度、峰度等统计指标这些都自动化集成了。
https://tsfresh.readthedocs.io/en/latest/text/introduction.html
在这里插入图片描述

通过tsfresh提取时序特征代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
from tsfresh import extract_features
from tsfresh import select_features
dfx_HRTrend=pd.DataFrame()
for i in df.index:
df_i=pd.DataFrame(df['HRTrend'][i],columns=['HRTrend'])
df_i['id']=i
df_i['time']=np.array(range(1,len(df_i)+1))
df_i['label']=df['label'][i]
dfx_HRTrend=pd.concat(objs=[dfx_HRTrend,df_i])

dfx_xtracted_features = extract_features(dfx_HRTrend,column_id="id", column_sort="time")
dfx_xtracted_features

在这里插入图片描述

可以看到tsfresh自动提取了1574colums的特征,但是我们要选取与标签有相关性的特征。tsfresh可以自动做到这一点,通过tsfresh的select_features传入特征和标签来选择与标签有相关性的特征,

1
2
3
4
from tsfresh.utilities.dataframe_functions import impute
impute(dfx_xtracted_features)
df_HRTrend_features = select_features(dfx_xtracted_features, df['label'])
df_HRTrend_features

在这里插入图片描述

通过特征选择自动选取了有相关性的143个特征,比前面缩减了很多,有利于提高模型训练的效率和精度。
我们再来看一下模型训练的效果。
同样将心电图通过tsfresh提出的时序特征与年龄、性别、身高、体重等特征合并,形成特征集。

1
df_data=df[['age','ismale','Weight','Height','label']].join(df_HRTrend_features)

预留15个样本做最后的预测看效果。

1
2
df_train_data=df_data[0:len(df_data)-15]    #训练数据
df_predict_data=df_data[len(df_data)-15:len(df_data)] #用于预测的数据

模型训练

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from sklearn.metrics import f1_score
from sklearn.metrics import recall_score
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier

x_tt, x_validation, y_tt, y_validation = train_test_split(x, y, test_size=0.2)
# 将训练集再切分为训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x_tt, y_tt, test_size=0.25)

#将模型的名字和模型函数作为元组添加到列表当中存储;
models = []
models.append(("KNN",KNeighborsClassifier(n_neighbors=3))) #指定邻居个数
models.append(("SVM Classifier",SVC(C=1000)))
#可以通过参数C来控制精度,C越大要求精度越高; C——错分点的惩罚度

#循环调用所有模型进行训练、预测
for clf_name, clf in models:
clf.fit(x_train, y_train)
xy_lst = [(x_train, y_train), (x_validation, y_validation), (x_test, y_test)]
for i in range(len(xy_lst)):
x_part = xy_lst[i][0] # 为遍历中的第0部分
y_part = xy_lst[i][1] # 为遍历中的第1部分
y_pred = clf.predict(x_part)
print(i) # i是下标,0表示训练集,1表示验证集,2表示测试集
print(clf_name, "ACC:", accuracy_score(y_part, y_pred))
print(clf_name, "REC:", recall_score(y_part, y_pred))
print(clf_name, "F-score:", f1_score(y_part, y_pred))

结果如下:
在这里插入图片描述

可以看到不管是KNN模型和SVM的模型都取得了不错的效果。

三、效果

最后我们来看一下,用预留的15个样本预测的效果。

1
2
3
4
5
6
7
8
9
10
11
pre_test_y=df_predict_data['label']
pre_test_x=df_predict_data.drop(columns='label')

for clf_name, clf in models:
for i in pre_test_x.index:
y_predict=clf.predict(pre_test_x.loc[[i]])
predict_result='预测错误!'
if y_predict==pre_test_y.loc[[i]].values:
predict_result='预测正确!'
print('第'+str(i)+'个样本'+clf_name+' 预测y='+str(y_predict)+'--实际 y='+str(pre_test_y.loc[[i]].values)+' - '+predict_result)
print('-'*10)

先是通过描叙统计提取时序特征并进行模型训练后模型预测的结果:
在这里插入图片描述

还是有不少预测错误了。
再来看通过tsfresh提取时序特征并进行模型训练后模型预测的结果:
在这里插入图片描述

可以看到预留的15个样本都预测正确,取得了不错的效果!

本文通过心电图分类模型介绍了从数据处理、时序特征提取、模型训练和效果评估。验证了对于小数据量,通过tsfresh提取时序特征,往往能够取得很好的效果。

全部源代码及数据集见:https://download.csdn.net/download/fullbug/87369380


博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

<1…101112…20>
XieJava

XieJava

200 日志
11 分类
25 标签
RSS
GitHub
友情链接
  • 爱分享读书
  • CSDN
  • 豆瓣
© 2025 XieJava | Site words total count: 415.3k

主题 — NexT.Muse
0%