XieJava's blog

记录最好的自己


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于

网络安全之认识勒索病毒

发表于 2023-03-23 | 更新于: 2023-03-23 | | 阅读次数:
字数统计: 4.3k | 阅读时长 ≈ 15

勒索病毒

一、什么是勒索病毒

勒索病毒,是一种新型电脑病毒,伴随数字货币兴起,主要以邮件、程序木马、网页挂马、服务器入侵、捆绑软件等多种形式进行传播,一旦感染将给用户带来无法估量的损失。如果遭受勒索病毒攻击,将会使绝大多数文件被加密算法加密,并添加一个特殊的后缀,用户无法读取原文件内容,被感染者一般无法解密,必须拿到解密的私钥才有可能无损还原被加密文件。而拿到解密的私钥,通常需要向攻击者支付高昂的赎金,这些赎金必须是通过数字货币支付,一般无法溯源,因此极易造成严重损失。

一般被勒索病毒感染后,将导致重要文件无法读取、关键数据被损坏、计算机被锁死无法正常使用等情况;为了指引被感染者缴纳赎金,勒索病毒还会在桌面等明显位置生成勒索提示文件,被感染者需要通过缴纳高额赎金才能获取解密密钥恢复计算机系统和数据文件的正常使用,多数情况即使缴纳了高额的赎金也未必能正常恢复数据。因此,勒索病毒具有数据恢复代价大和数据恢复可能性极低的特点。

二、勒索病毒传播路径

常见勒索病毒传播途径包括:

  1. 网站挂马。用户浏览挂有木马病毒的网站,上网终端计算机系统极可能被植入木马并感染上勒索病毒。
  2. 邮件传播。邮件传播是目前互联网上常见的病毒传播方式。攻击者通过利用当前热门字样,在互联网上撒网式发送垃圾邮件、钓鱼邮件,一旦收件人点开带有勒索病毒的链接或附件,勒索病毒就会在计算机后台静默运行,实施勒索。
  3. 漏洞传播。通过计算机操作系统和应用软件的漏洞攻击并植入病毒是近年来流行的病毒传播方式。最典型的案例是2017年在国内泛滥的WannaCry大规模勒索事件,攻击者正是利用微软445端口协议漏洞,进行感染传播网内计算机。
  4. 捆绑传播。攻击者将勒索病毒与其他软件尤其是盗版软件、非法破解软件、激活工具进行捆绑,从而诱导用户点击下载安装,并随着宿主文件的捆绑安装进而感染用户的计算机系统。
  5. 介质传播。攻击者通过提前植入或通过交叉使用感染等方式将携有勒索病毒的U盘、光盘等介质进行勒索病毒的移动式传播。此种传播途径往往发生在文印店、公共办公区域等高频交叉使用可移动存储介质的场所,也可能通过广告活动派发、街区丢弃等方式实现诱导用户使用携带勒索病毒的U盘、光盘。携带勒索病毒的光盘、U盘一旦接入计算机,勒索病毒即可能随着其自动运行或用户点击运行导致计算机被感染。

三、勒索病毒防护难点

教育、企业、制造业、医疗、政府等行业由于数据重要性和较好的经济能力,已经成为勒索团队的重点攻击目标。以下是勒索病毒常见的攻击行为。
勒索病毒攻击行为

从勒索病毒的攻击行为来看,勒索病毒的防护存以下几个主要难点:

  • 勒索病毒变种多样 :对程序 / 脚本的加壳、混淆操作,已经有一套相当成熟的自动化流程,能够快速对病毒进行变种,从而绕过传统静态防护。
  • 边界突破手段多样:包括但不限于 RDP 爆破、SMB 爆破、漏洞利用、钓鱼邮件等等,其中爆破手段是最常使用的入侵手法。
  • 防御规避手段多样:如无文件攻击、白进程利用、卸载安全服务等,从运营数据看 ,
  • 采用黑客工具直接卸载终端安全服务、利用白进程进行加密的绕过手段是最为常见。
  • 勒索病毒识别精准度不足:部分终端防护可以识别出“病毒”,但不能进一步识别出“勒索病毒”,未引起足够重视,导致后续攻击成功。

四、常见的勒索病毒

1、GlobeImposter 勒索病毒

Globelmposter3.0家族的变种采用RSA+AES算法加密,目前该勒索病毒加密的文件暂无解密工具,文件被加密后会被加上Ox4444、China4444、Help4444、Rat4444 、Tiger4444 、Rabbit4444、Dragon4444 、Snake4444 、Horse4444、Goat4444 、Monkey4444、Rooster4444、Dog4444等后缀。在被加密的目录下会生成一个名为”HOW_TO_BACK_FILES”的txt文件,显示受害者的个人ID序列号以及黑客的联系方式等。

GlobeImposter病毒本身不具备传播性。主要通过垃圾邮件和RDP暴破植入传播。

2、GandCrab 勒索病毒

GandCrab勒索病毒于2018年1月面世以来,短短一年内历经多次版本更新,目前最新的版本为V5。该病毒利用多种方式对企业网络进行攻击传播,受感染主机上的数据库、文档、图片、压缩包等文件将被加密,若没有相应数据或文件的备份,将会影响业务的正常运行。从2018年9月份V5版本面世以来,GandCrab出现了包括了5.0、5.0.2、5.0.3、5.0.4以及最新的5.0.5多个版本的变种。病毒采用Salsa20和RSA-2048算法对文件进行加密,并修改文件后缀为.GDCB、.GRAB、.KRAB或5-10位随机字母,勒索信息文件为GDCB-DECRYPT.txt、KRAB-DECRYPT.txt、[5-10随机字母]-DECRYPT.html\txt,并将感染主机桌面背景替换为勒索信息图片。

GandCrab病毒家族主要通过RDP暴力破解、钓鱼邮件、捆绑恶意软件、僵尸网络以及漏洞利用传播。病毒本身不具有蠕虫传播能力,但会通过枚举方式对网络共享资源进行加密,同时攻击者往往还会通过内网人工渗透方式,利用口令提取、端口扫描、口令爆破等手段对其他主机进行攻击并植入该病毒。主要影响Windows 系统

3、Satan 变种病毒

撒旦(Satan)勒索病毒最开始可以追溯到2017年1月,当时病毒作者提供一个门户网站(RaaS,勒索软件即服务)允许任何人注册和创建撒旦勒索软件的自定义版本。
2017年11月左右,撒旦开发者开始更新勒索软件的计划,以更好地适应这些趋势。他们采取的第一步是在Satan程序中加入EternalBlue SMB漏洞的攻击和扫描模块。添加此漏洞意味着在撒旦感染计算机后,勒索软件将使用EternalBlue扫描本地网络,查找具有过时SMB服务的计算机并感染它们,从而最大限度地提高攻击效果。
2018年5月底出现了撒旦(Satan)勒索病毒的最新的变种,它不仅仅利用了永恒之蓝漏洞,还利用了多个WEB相关的漏洞进行传播。
2018年10月底MalwareHunterTeam发现了一款新型的Satan勒索病毒——DBGer勒索病毒。其属于撒旦(Satan)勒索病毒的最新的变种样本,不仅仅利用了之前的一些安全漏洞,同时还加上了Mimikatz的功能。其加密后的文件后缀名变为了.dbger。
2018年11月初,发现部分金融客户出现linux和windows跨平台的远控病毒样本,其样本行为与本次捕获样本极其相似。
2018年11月底,国内金融厂商开始出现Satan的最新变种,可以在Linux和Windows平台同时进行传播。将本地文件进行勒索加密,将加密后的文件名修改为.lucky。同时在Linux和Windows平台进行蠕虫式传播。

Satan病毒家族通过下面8种通用漏洞进行传播。目前发现Satan在linux平台会进行内部IP遍历+端口列表的方式进行漏洞扫描。在windows平台会以IP列表+端口列表的方式进行漏洞扫描。
JBoss反序列化漏洞(CVE-2013-4810)
JBoss默认配置漏洞(CVE-2010-0738)
Tomcat任意文件上传漏洞(CVE-2017-12615)
Tomcat web管理后台弱口令爆破
Weblogic WLS 组件漏洞(CVE-2017-10271)
Windows SMB远程代码执行漏洞MS17-010
Apache Struts2远程代码执行漏洞S2-045
Apache Struts2远程代码执行漏洞S2-057

4、Sodinoki 勒索病毒

业内发现邮件附件中的恶意样本,经分析,样本为2019年6月新出的sodinokibi勒索病毒。该病毒以钓鱼邮件来传播,邮件附件中包含伪装成word文档的可执行文件,诱导员工打开附件,加密主机文件。
Sodinokibi勒索病毒暂无解密工具,可先将被加密的重要文件、勒索信息文件备份保存,以待将来有解密工具时解密。

五、勒索病毒发展趋势

随着勒索技术的发展,勒索病毒呈现加密速度更快,跨平台发展的趋势。

  • 加密方式更多的转向“间歇性加密”,加密速度更快

2021 年中旬,LockFile 勒索软件是首批使用间歇性加密来逃避检测机制的主要勒索软件系列之一,该勒索软件每隔 16 个字节对文件进行加密。此后,越来越多的勒索软件操作加入了这一趋势。如 BlackCat(ALPHV)、PLAY、Qyick、Agenda、Black Basta 等。间歇性加密指对受害者文件进行部分加密,这种加密方法不仅可以大大提高加密速度也可以帮助勒索软件运营商逃避基于统计分析的勒索软件检测技术。

  • 编程语言更多的转向Rust,实现跨平台勒索

近年,越来越多的勒索软件编程语言转向 Rust 语言。该语言不仅具有与 C/C++ 类似的性能开发优势,而且具有更好的内存管理实现并发编程以避免内存错误,此外在静态分析工具低检出率方面也存在优势。BlackCat是第一个使用Rust的专业/商业化分布式恶意软件家族,也是迄今为止最繁荣的。
Rust 是一种跨平台语言,使威胁行为者能够轻松地为 Windows 和 Linux 等不同操作系统创建定制的恶意软件。现在有不少于 10 个勒索软件家族推出了针对 Linux 系统的版本,其中包括 REvil 的 Linux 版本、DarkSide、Dark Angels 、BlackMatter 以及 Defray777 等家族。勒索团伙倾向于以企业为目标,随着越来越多的组织将业务迁移到 VM 以简化设备管理和提高资源利用效率,将攻击目标转向 Linux 平台具有良好的商业意义,因为这样做可以让他们以最小的努力加密多个服务器。

六、勒索病毒防护建议:

  1. 定期做好重要数据、文件的备份工作;
  2. 及时更新升级操作系统和应用软件,修复存在的中高危漏洞;
  3. 安装正版杀毒软件并及时升级病毒库,定期进行全面病毒扫描查杀;
  4. 在系统中禁用U盘、移动硬盘、光盘的自动运行功能,不要使用/打开来路不明的U盘、光盘、电子邮件、网址链接、文件;
  5. 避免使用弱口令,为每台服务器和终端设置不同口令,且采用大小写字母、数字、特殊字符混合的高复杂度组合结构,口令位数应8位以上;
  6. 不要在网上下载安装盗版软件、非法破解软件以及激活工具。

七、勒索病毒应急处置流程

1、 检测阶段

如何发现勒索病毒,可通过如下两个场景进行识别:

  • 场景一:感染但未加密
    从攻击者渗透进入内部网络的某一台主机到执行加密行为往往有一段时间,如果在这段时间能够做出响应,完全可以避免勒索事件的发生。如果有以下情况,可能是处于感染未加密状态:
  1. 监测设备告警
    如果使用了监测系统进行流量分析、威胁监测,系统产生大量告警日志,例如“SMB 远程溢出攻击”、“弱口令爆破”等,可能是病毒在尝试扩散。
  2. 资源占用异常
    病毒会伪装成系统程序,释放攻击包、扫描局域网络 445 端口等占用大量系统资源,当发现某个疑似系统进程的进程在长期占用 CPU 或内存,有可能是感染病毒。
  • 场景二:感染已加密
    如果有以下情况,可能是处于感染且已加密状态:
  1. 统一的异常后缀
    勒索病毒执行加密程序后会加密特定类型的文件,不同的勒索病毒会加密几十到几百种类型的文件,基本都会包括常见的文档、图片、数据库文件。当文件夹下文件变成如下统一异常不可用后缀,就是已经被加密了。
  2. 勒索信或桌面被篡改
    勒索病毒加密文件的最终目的是索要赎金,所以会在系统明显位置如桌面上留下文件提示,或将勒索图片更改为桌面。勒索信绝大多数为英文,引导被勒索的用户交赎金。

    2、抑制阶段

    发现勒索病毒后如何进行隔离:
  • 采取可行措施进行隔离,避免影响其它主机(如断网隔离)
  • 通过边界控制设备,防止网络区域间相互影响

防止勒索病毒扩散:

  • 采取及时的补救加固措施(安全加固)
  • 相关漏洞的扫描修补与跟踪
  • 配置核查

    3、处置阶段

    信息收集:
  • IT管理人员截图取证主机中的勒索信息文件
  • 截图取证被加密的时间和文件后缀名
  • 检查服务器开放端口情况、补丁更新情况,并截图取证
  • 检查服务器当日的安全日志,截图取证或导出当天日志

    4、 恢复阶段

    业务恢复:
  • 从备份中恢复损坏的数据
  • 调整可能影响业务正常运转的策略

文件解密:

  • 付费风险:部分中招主机可能包含关键信息,企业处于业务考虑可能会考虑通过比特币付款,但不能确认付款可以恢复数据,建议企业慎重考虑。
  • 解密工具:可查看安全厂商已发布部分勒索病毒的解密工具。

    5、安全加固

    通常应从如下方面进行加固:
  • 多数勒索软件会利用RDP(远程桌面协议)暴力破解传播,在不影响业务的前提下避免3389端口对外开放。利用IPS、防火墙等设备对3389端口进行防护
  • 开启windows自身的防火墙尽量关闭3389、445、139、135等不用的高危端口
  • 在计算机中配置账户锁定策略,连续登陆失败即锁定账户
  • 要求每台服务器设置唯一口令,且禁止设置弱口令(复杂度要求采用大小写字母、数字、特殊符号混合)
  • 对员工进行安全意识培训,避免打开陌生邮件的附件、下载破解版软件和运行来源不明的程序
  • 定时对重要数据进行异地备份,防止数据破坏和丢失
  • 及时更新系统及应用版本,及时打漏洞补丁
  • 及时安装防病毒软件,并更新到最新的病毒库和引擎
  • 定时通过扫描器做专项口令排查,可排查通用口令和弱口令

部分公开的勒索相关解密工具

公开的勒索病毒相关解密工具(Free Ransomware Decryption Tools),可供应急查询使用:
1、kaspersky
Free Ransomware Decryptors - Kaspersky Lab https://noransom.kaspersky.com/
2、avast
Free Ransomware Decryption Tools | Unlock Your Files | Avast
https://www.avast.com/ransomware-decryption-tools
3、avg
Free Ransomware Decryption Tools | Unlock Your Files | AVG
https://www.avg.com/en-us/ransomware-decryption-tools
4、No More Ransom
The No More Ransom Project
https://www.nomoreransom.org/en/decryption-tools.html
5、Bitdefender
Free Tools – Bitdefender Labs
https://labs.bitdefender.com/category/free-tools/
6、MalwareHunter
ID Ransomware
https://id-ransomware.malwarehunterteam.com/index.php
7、McAfee
McAfee Ransomware Recover (Mr2) | McAfee Free Tools
https://www.mcafee.com/enterprise/en-us/downloads/free-tools/ransomware-decryption.html
8、 Trend Micro
Using the Trend Micro Ransomware File Decryptor Tool
https://success.trendmicro.com/portal_kb_articledetail?solutionid=1114221


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


“fullbug”微信公众号

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

Python日志logging实战教程

发表于 2023-03-19 | 更新于: 2023-03-19 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 4.5k | 阅读时长 ≈ 17

一、什么是日志

在《网络安全之认识日志采集分析审计系统》中我们认识了日志。日志数据的核心就是日志消息或日志,日志消息是计算机系统、设备、软件等在某种刺激下反应生成的东西。

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

二、为什么要写日志

日志是对软件执行时所发生事件的一种追踪方式。软件开发人员对他们的代码添加日志调用,借此来指示某事件的发生。一个事件通过一些包含变量数据的描述信息来描述。对于软件系统来说,健全的日志记录是程序调试、故障定位、事件追溯的有效手段。

日志通用的几种类型:

  • 信息(Info):告诉用户和管理员发生了一些没有风险的事情。
  • 调试(Debug):在应用程序代码运行时生成调试信息,给软件开发人员提供故障检测和定位问题的帮助。
  • 警告(Warning):缺少需要的文件、参数、数据,但又不影响系统运行时生成警告。
  • 错误(Error):传达在计算机系统重出现的各种级别的错误。许多错误消息只能给出为什么出错的起点,要寻找出导致错误发生的根本原因还需要进一步的调查。

三、Python日志logging模块实战

在进行Python程序开发时,Python提供了logging模块,能够很好的帮助开发人员很方便的的记录日志信息。

对于简单的日志使用来说日志功能提供了一系列便利的函数。它们是 debug(),info(),warning(),error() 和 critical()。想要决定何时使用日志,请看下表,其中显示了对于每个通用任务集合来说最好的工具。

你想要执行的任务 此任务的最好的工具
对于命令行或程序的应用,结果显示在控制台。 print()
在对程序的普通操作发生时提交事件报告(比如:状态监控和错误调查) logging.info() 函数(当有诊断目的需要详细输出信息时使用 logging.debug() 函数)
提出一个警告信息基于一个特殊的运行时事件 warnings.warn() 位于代码库中,该事件是可以避免的,需要修改客户端应用以消除告警logging.warning() 不需要修改客户端应用,但是该事件还是需要引起关注
对一个特殊的运行时事件报告错误 引发异常
报告错误而不引发异常(如在长时间运行中的服务端进程的错误处理) logging.error(), logging.exception() 或 logging.critical() 分别适用于特定的错误及应用领域

日志功能应以所追踪事件级别或严重性而定。各级别适用性如下(以严重性递增):

级别 何时使用
DEBUG 细节信息,仅当诊断问题时适用。
INFO 确认程序按预期运行。
WARNING 表明有已经或即将发生的意外(例如:磁盘空间不足)。程序仍按预期进行。
ERROR 由于严重的问题,程序的某些功能已经不能正常执行
CRITICAL 严重的错误,表明程序已不能继续执行

默认的级别是 WARNING,意味着只会追踪该级别及以上的事件,除非更改日志配置。

所追踪事件可以以不同形式处理。最简单的方式是输出到控制台。另一种常用的方式是写入磁盘文件。

Python的logging库采用模块化方法,并提供了几类组件:记录器,处理程序,过滤器和格式化程序。

  • 记录器(Logger):提供应用程序代码直接使用的接口。
  • 处理器(Handler):将日志记录(由记录器创建)发送到适当的目的地。
  • 筛选器(Filter):提供了更细粒度的功能,用于确定要输出的日志记录。
  • 格式器(Formatter):程序在最终输出日志记录的内容格式。

logging的工作流程:以记录器Logger为对象,设置合适的处理器Handler,辅助以筛选器Filter、格式器Formatter,设置日志级别以及常用的方法,最终输出理想的日志记录给到指定目标
一个Logger可以包含多个Handler;
每个Handler可以设置自己的Filter和Formatter;
记录器和处理器中的日志事件信息流程如下图所示:
日志事件信息流程

接下来我们通过几个简单的应用场景来进行日志记录实战

1、最简单的日志记录

main.py

1
2
3
4
5
6
7
8
9
10
11
12
import logging

def print_hi(name):
logging.debug('this is print_hi debug')
logging.info('this is print_hi info')
logging.warning('this is print_hi warning')
logging.error('this is print_hi error')
logging.critical('this is print_hi critical')
print(f'Hi print_hi, {name}')

if __name__ == '__main__':
print_hi('XieJava')

结果如下:
最简单的日志记录结果

这里体现了两个问题:
1.通过print()在控制台打印的日志,比logging打印的日志提前打印显示,说明日志记录是多线程的。在平时日志调试跟踪的时候注意这一点,print()的信息有时会打印在logging前有时会在logging后。

2.debug和info的日志没有打印出来,说明logging默认的日志级别是waring。
如果要设置改变默认的日志级别可以通过配置来设置日志级别如:level=logging.DEBUG

2、设置日志级别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import logging

logging.basicConfig(level=logging.DEBUG) #设置日志级别

def print_hi(name):
logging.debug('this is print_hi debug')
logging.info('this is print_hi info')
logging.warning('this is print_hi warning')
logging.error('this is print_hi error')
logging.critical('this is print_hi critical')
print(f'Hi print_hi, {name}')

if __name__ == '__main__':
print_hi('XieJava')

设置日志级别结果

这下从DEBUG到CRITICAL级别的都打印出来了。

3、设置日志显示格式

默认的日志打印显示的格式是, 日志级别:logger实例名称(默认是root):日志消息内容
如这里显示的是:

1
2
3
4
5
DEBUG:root:this is print_hi debug
INFO:root:this is print_hi info
WARNING:root:this is print_hi warning
ERROR:root:this is print_hi error
CRITICAL:root:this is print_hi critical

在真实使用的场景下,一般都要显示日志的时间,我们可以通过设置日志显示格式来调整我们需要显示的日志格式和内容。

1
2
LOG_FORMAT = "%(asctime)s - %(levelname)s %(name)s %(filename)s [line:%(lineno)d] - %(message)s"
logging.basicConfig(format=LOG_FORMAT,level=logging.DEBUG)

这里设置了日志发生时间、日志级别、logger实例名称、日志发生的文件名、日志发生所在的行、日志消息内容。
设置日志格式

更多的logRecord属性如下:

属性名称 格式 描述
args 此属性不需要用户进行格式化。 合并到 msg 以产生 message 的包含参数的元组,或是其中的值将被用于合并的字典(当只有一个参数且其类型为字典时)。
asctime %(asctime)s 表示 LogRecord 何时被创建的供人查看时间值。 默认形式为 ‘2003-07-08 16:49:45,896’ (逗号之后的数字为时间的毫秒部分)。
created %(created)f LogRecord 被创建的时间(即 time.time() 的返回值)。
exc_info 此属性不需要用户进行格式化。 异常元组(例如 sys.exc_info)或者如未发生异常则为 None。
filename %(filename)s pathname 的文件名部分。
funcName %(funcName)s 函数名包括调用日志记录。
levelname %(levelname)s 消息文本记录级别(’DEBUG’,’INFO’,’WARNING’,’ERROR’,’CRITICAL’)
levelno %(levelno)s 消息数字的记录级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
lineno %(lineno)d 发出日志记录调用所在的源行号(如果可用)。
message %(message)s 记入日志的消息,即 msg % args 的结果。 这是在发起调用 Formatter.format() 时设置的。
module %(module)s 模块 (filename 的名称部分)。
msecs %(msecs)d LogRecord 被创建的时间的毫秒部分。
msg 此属性不需要用户进行格式化。 在原始日志记录调用中传入的格式字符串。 与 args 合并以产生 message,或是一个任意对象 (参见 使用任意对象作为消息)。
name %(name)s 用于记录调用的日志记录器名称。
pathname %(pathname)s 发出日志记录调用的源文件的完整路径名(如果可用)。
process %(process)d 进程ID(如果可用)
processName %(processName)s 进程名(如果可用)
relativeCreated %(relativeCreated)d 以毫秒数表示的 LogRecord 被创建的时间,即相对于 logging 模块被加载时间的差值。
stack_info 此属性不需要用户进行格式化。 当前线程中从堆栈底部起向上直到包括日志记录调用并引发创建当前记录堆栈帧创建的堆栈帧信息(如果可用)。
thread %(thread)d 线程ID(如果可用)
threadName %(threadName)s 线程名(如果可用)

4、记录日志到日志文件

logging默认是显示在控制台,在真实生产环境肯定时需要将日志记录到日志文件的。logging也是可以通过配置很方便的将日志记录到日志文件。

1
2
LOG_FORMAT = "%(asctime)s - %(levelname)s %(name)s %(filename)s [line:%(lineno)d] - %(message)s"
logging.basicConfig(filename='log.log',format=LOG_FORMAT,level=logging.DEBUG)

输出到日志文件中
输出到日志文件
输出到日志文件效果
将日志输出到日志文件,如果是日志量非常大,在实际生产环境经常碰到的是要对日志文件进行分隔,根据日志文件的大小或日期来分割生成多个日志文件。
这里介绍通过日志文件大小分割和通过日期来分割日志文件。

1.通过日志文件大小分割

RotatingFileHandler
日志记录到文件中,且支持指定日志文件大小,备份文件数量

1
logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)

maxBytes:日志文件大小,单位为字节
backupCount:备份文件数量

1
2
3
LOG_FORMAT = "%(asctime)s - %(levelname)s %(name)s %(filename)s [line:%(lineno)d] - %(message)s"
rfh=logging.handlers.RotatingFileHandler(filename='log.log',encoding='UTF-8', maxBytes=1024, backupCount=2)
logging.basicConfig(format=LOG_FORMAT,level=logging.DEBUG,handlers=[rfh])

这里设置的是当文件超过1024bytes就会对文件进行分割,备份文件数量为2,得到log.log.1、log.log.2,当log.log.2写满时又回循环写到log.log中。
根据日志文件大小循环切割生成日志文件

2.通过日期来分割日志文件

TimedRotatingFileHandler
日志记录到文件中,支持按时间间隔来更新日志

1
logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None)

指定的文件会被打开并用作日志记录的流。 对于轮换操作它还会设置文件名前缀。 轮换的发生是基于 when 和 interval 的积。
你可以使用 when 来指定 interval 的类型。 可能的值列表如下。 请注意它们不是大小写敏感的。

值 间隔类型 如果/如何使用 atTime
‘S’ 秒 忽略
‘M’ 分钟 忽略
‘H’ 小时 忽略
‘D’ 天 忽略
‘W0’-‘W6’ 工作日(0=星期一) 用于计算初始轮换时间
‘midnight’ 如果未指定 atTime 则在午夜执行轮换,否则将使用 atTime。 用于计算初始轮换时间
1
2
3
4
5
6
7
8
import logging
from datetime import time
from logging.handlers import RotatingFileHandler

LOG_FORMAT = "%(asctime)s - %(levelname)s %(name)s %(filename)s [line:%(lineno)d] - %(message)s"
tfh=logging.handlers.TimedRotatingFileHandler('tfh_log.log', when='S', interval=1.5, backupCount=2, encoding='UTF-8', delay=False, utc=False, atTime=time)
rfh=logging.handlers.RotatingFileHandler(filename='log.log',encoding='UTF-8', maxBytes=1024, backupCount=2)
logging.basicConfig(format=LOG_FORMAT,level=logging.DEBUG,handlers=[rfh,tfh])

为了演示方便,这里when=’S’, interval=1.5 即1.5秒循环生成一个日志文件。在实际生产环境一般根据日志量的大小,可以配置成每天生成一个日志文件。
通过日期来分割日志文件

5、既生成日志文件又在控制台打印日志

有时候为了调试方便,还是想在控制台打印日志。能不能既生成日志文件又在控制台打印日志呢?通过配置logging的StreamHandler也是可以做到的。
StreamHandler
StreamHandler 类位于核心 logging 包,它可将日志记录输出发送到数据流例如 sys.stdout, sys.stderr 或任何文件类对象(或者更精确地说,任何支持 write() 和 flush() 方法的对象)。

1
2
sh=logging.StreamHandler()
logging.basicConfig(format=LOG_FORMAT,level=logging.DEBUG,handlers=[rfh,tfh,sh])

既生成日志文件又在控制台打印日志

6、多个模块中记录日志

在实际项目使用过程中,一个好的实践是将日志配置的模块封装好成为一个通用的日志模块组件,可以给项目中所有的模块使用。
这里我们将配置好的日志logging从main.py中抽出来形成一个logutils.py的通用模块,其他模块就可以使用了
logutils.py

1
2
3
4
5
6
7
8
9
import logging
from datetime import time
from logging.handlers import RotatingFileHandler

LOG_FORMAT = "%(asctime)s - %(levelname)s %(name)s %(filename)s [line:%(lineno)d] - %(message)s"
tfh=logging.handlers.TimedRotatingFileHandler('tfh_log.log', when='S', interval=1.5, backupCount=2, encoding='UTF-8', delay=False, utc=False, atTime=time)
rfh=logging.handlers.RotatingFileHandler(filename='log.log',encoding='UTF-8', maxBytes=1024, backupCount=2)
sh=logging.StreamHandler()
logging.basicConfig(format=LOG_FORMAT,level=logging.DEBUG,handlers=[rfh,tfh,sh])

公共日志模块

如在othermodule.py中使用

1
2
3
4
5
6
7
8
9
10
from logutils import logging

class TestModule():

def print_log(self):
logging.info('this is TestModule.print_log() info')

@staticmethod
def print_log_staic():
logging.info('this is TestModule.print_log_staic info')

在main.py中使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from logutils import logging
from othermodule import TestModule

def print_hi(name):
logging.debug('this is print_hi debug')
logging.info('this is print_hi info')
logging.warning('this is print_hi warning')
logging.error('this is print_hi error')
logging.critical('this is print_hi critical')
print(f'Hi print_hi, {name}')


if __name__ == '__main__':
print_hi('XieJava')
TestModule.print_log_staic() #类方法中打印日志
testModule=TestModule()
testModule.print_log() #实例方法中打印日志

其他模块中显示日志

项目工程中所有的模块只要通过 from logutils import logging 引入logging就可以使用配置好的logging记录日志了。

7、每个不同的模块使用不同的日志记录器记录日志

现在我们在所有的模块中都是用的默认的root记录器来记录的日志,实际上也可以让每个不同的模块使用不同的日志记录器记录日志。
日志事件信息在 LogRecord 实例中的记录器、处理器、过滤器和格式器之间传递。
通过调用 Logger 类(以下称为 loggers , 记录器)的实例来执行日志记录。
在命名记录器时使用的一个好习惯是在每个使用日志记录的模块中使用模块级记录器,命名如下:

1
logger = logging.getLogger(__name__)

这意味着记录器名称跟踪包或模块的层次结构,并且直观地从记录器名称显示记录事件的位置。
记录器层次结构的根称为根记录器。 这是函数 debug() 、 info() 、 warning() 、 error() 和 critical() 使用的记录器,它们就是调用了根记录器的同名方法。 函数和方法具有相同的签名。 根记录器的名称在输出中打印为 ‘root’ 。
实际上我们只要通过 logger = logging.getLogger(__name__) 给每个模块定义一个记录器就可以了。
main.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from logutils import logging
from othermodule import TestModule
logger=logging.getLogger(__name__) #定义模块日志记录器

def print_hi(name):
logger.debug('this is print_hi debug')
logger.info('this is print_hi info')
logger.warning('this is print_hi warning')
logger.error('this is print_hi error')
logger.critical('this is print_hi critical')
print(f'Hi print_hi, {name}')


if __name__ == '__main__':
print_hi('XieJava')
TestModule.print_log_staic() #类方法中打印日志
testModule=TestModule()
testModule.print_log() #实例方法中打印日志

othermodule.py

1
2
3
4
5
6
7
8
9
10
11
from logutils import logging
logger=logging.getLogger(__name__) #定义模块日志记录器

class TestModule():

def print_log(self):
logger.info('this is TestModule.print_log() info')

@staticmethod
def print_log_staic():
logger.info('this is TestModule.print_log_staic info')

每个不同的模块使用不同的日志记录器记录日志
可以看到模块日志记录器打印出来的日志中模块名不再是默认的root,而是各自的模块名。

8、通过配置文件配置日志记录器

在实际项目应用的过程中,通常通过配置文件来配置日志记录器的各种配置,这样的好处就是改变日志记录的配置不需要修改代码,直接修改配置文件就可以了。
接下来介绍如何通过配置文件配置logging日志记录器
新建 logging.conf 配置文件,通过如下配置将前面代码中的处理器,日志记录器,通过配置文件的方式配置好。
logging.conf

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
29
30
31
32
33
34
35
36
37
38
39
[loggers]
keys=root,logger01

[logger_root]
level=DEBUG
handlers=sh

[logger_logger01]
level=DEBUG
handlers=sh,tfh,rfh
qualname=logger01
propagate=0

[handlers]
keys=sh,tfh,rfh

[handler_sh]
class=StreamHandler
level=DEBUG
formatter=form01
args=(sys.stderr,)

[handler_tfh]
class=handlers.TimedRotatingFileHandler
level=DEBUG
formatter=form01
args=('tfh_log.log','S',1.5,2,)

[handler_rfh]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=form01
args=('log.log','a',1024,2)

[formatters]
keys=form01

[formatter_form01]
format=%(asctime)s - %(levelname)s %(name)s %(filename)s [line:%(lineno)d] - %(message)s

在logutils.py中应用配置文件

1
2
import logging.config
logging.config.fileConfig("logging.conf")

logutils.py中的代码就异常简单了,应为原来通过代码实现的配置,都写到了logging.conf配置文件中了。
配置文件实现了日志代码中的功能

这里要注意的是,在应用日志记录器的时候,需要引用配置文件中配置的记录器,如配置文件中配置了root和logger01,在应用的时候可以引用这两个记录器,当然也可以在配置文件中配置更多的记录器。
在mian.py和othermodule.py中应用日志记录器的时候,需要注意记录器用要配置文件中定义的记录器,这里是logger01。

1
logger=logging.getLogger('logger01')  #定义模块日志记录器

定义模块日志记录器

8、日志中中文显示

当日志信息中有中文的时候,在控制台输出会自动的转码,但有时在文件输出的时候会出现乱码。
中文信息控制台输出没有问题

控制台输出中文,但日志文件中是乱码。
日志文件中是乱码

对照python官方说明文档设置编码,设置处理器的编码为UTF-8

1
2
3
4
5
6
7
8
9
10
11
[handler_tfh]
class=handlers.TimedRotatingFileHandler
level=DEBUG
formatter=form01
args=('tfh_log.log','S',1.5,2,'UTF-8')

[handler_rfh]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=form01
args=('log.log','a',1024,2,'UTF-8')

配置文件的参数
现在重新执行main.py,可以看到日志文件中可以正常显示中文。
日志文件显示中文

至此,我们从一个简单的日志记录实战,一步一步实现了自定义日志格式、写日志文件、抽出公共日志模块让其他模块用、同时写多个日志文件并进行日志文件切割、通过配置文件实现日志参数的定义、解决日志中文显示问题。基本覆盖了真实应用场景日志的使用。


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


“fullbug”微信公众号

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

Python实现简单信号滤波实战

发表于 2023-03-13 | 更新于: 2023-03-13 | 分类于 技术 | | 阅读次数:
字数统计: 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 | 更新于: 2023-03-10 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 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 | 更新于: 2023-03-10 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 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 | 更新于: 2023-03-05 | 分类于 人生 | | 阅读次数:
字数统计: 796 | 阅读时长 ≈ 2

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

豆瓣回复

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

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

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

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

学习拐点

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

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



“fullbug”微信公众号

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

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

发表于 2023-03-01 | 更新于: 2023-03-05 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 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 | 更新于: 2023-03-10 | 分类于 人生 | | 阅读次数:
字数统计: 473 | 阅读时长 ≈ 1

致未来

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

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

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

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

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

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



“fullbug”微信公众号

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

网络安全之认识挖矿木马

发表于 2023-02-22 | 更新于: 2023-03-10 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 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 | 更新于: 2023-03-05 | 分类于 人生 | | 阅读次数:
字数统计: 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”微信公众号

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

12…11>
XieJava

XieJava

102 日志
5 分类
18 标签
RSS
GitHub
友情链接
  • 爱分享读书
  • CSDN
  • 豆瓣
© 2023 XieJava | Site words total count: 191.3k

主题 — NexT.Muse
0%