经典病毒上线流量分析-Lokibot

news2024/11/23 21:13:45

一、概述

Lokibot于2015年面世,持续活跃至今,是一种高度危险且隐匿的恶意软件,旨在窃取受害主机的敏感信息,包括存储的密码、浏览器登录凭据以及加密货币钱包等,并将这些信息上送到远程C2服务器上。本文将重点针对Lokibot家族的上线包进行分析,让读者可以更深入了解经典病毒Lokibot的流量特征,进行有效防御。

二、本地行为分析

文件基本信息如下:

1688003806_649ce4de96efb34637cbd.png!small?1688003807064

2.1 脱壳

使用反编译工具分析文件发现该文件使用了壳保护。为了更好的分析病毒行为,需要对样本进行脱壳处理。尝试在沙箱运行发现如下行为:

1688003872_649ce5209617711c7784e.png!small?1688003873814

根据行为可知,文件调用WriteProcessMemory(),向进程中注入文件

WriteProcessMemory()作用:将数据写入指定进程中的内存区域。BOOL WriteProcessMemory([in]HANDLEhProcess,[in]LPVOIDlpBaseAddress,;目标地址[in]LPCVOID lpBuffer, ;预备写入的地址[in]SIZE_TnSize,;写入数据大小[out] SIZE_T*lpNumberOfBytesWritten);定位可疑函数位置,对该函数下硬件断点

1688004017_649ce5b11e5fe81ae25fd.png!small?1688004017879

1688004025_649ce5b91d46aa2d1d849.png!small?1688004025800

查看stdcall窗口,主要关注2,3,4这三个参数,通过这三个参数可以判断出需要进行dump文件的起始地址以及文件大小。经调试确定WriteProcessMemory()被调用五次,整理可知写入数据大小为0x1A000。

1688004037_649ce5c5517acda726fca.png!small?1688004037919

通过savedata命令dump数据到文件中

savedata命令格式:文件名,起始地址,文件大小。实际命令如下:savedata 1234,0x040AF0F8,0x1A000

1688004051_649ce5d3ae0257070425e.png!small?1688004052605

使用反编译工具查看保存的文件,可以看到清楚的逻辑,确定脱壳成功。

2.2 动态获取API

该样本未通过导入表使用关键API,只有当需要调用API时才会接收索引值以及名称的hash值获取对应API的地址直接调用,而非将API恢复或者存储到某个地方以后再运行。使用该方式可以防止分析者一次性恢复使用的所有API,实现细节见下文。

GET_dll_base函数会以a1作为索引值从包含DLL名称的内存数组中获取DLL名称,进而获取其基址。

1688004098_649ce60271547bed44a66.png!small?1688004099070

parse_export_tbl函数会加载DLL并解析导出表,遍历导出表中函数并通过LO_caculate_hash函数计算出函数名字符串的hash与参数api_hash对比,相同则成功获取到API地址。

1688004111_649ce60f906a69822cda2.png!small?1688004112089

LO_caculate_hash函数负责计算当前调用API的HSAH值,计算步骤如下:该函数使用了循环嵌套,外层循环运行n次(n为API名称字符串的长度)。每循环一次获取当前存储在api_str中的字符与v3进行异或后存储在v3中,并将api_str的值修改为下一个字符存储的地址。接着进行内层循环,内层循环运行8次
判断v3的值是否为0,不为0则与常数0x4358AD54进行异或,再右移1位。最后将输出结果v3取反。通过上述过程最终获取当前API名称的hash。

1688004125_649ce61dc4f80ecb5abb5.png!small?1688004126769

使用x64dbg调试相关逻辑

系统API调用示例如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c6gDMbuh-1690876724263)(https://image.3001.net/images/20230629/1688004138_649ce62af093054ead80b.png!small?1688004139440)]

计算并对比API名称的hash获取相应地址

1688004153_649ce639ad14964f24178.png!small?1688004154235

1688004159_649ce63f2a77d5e1e5dee.png!small?1688004159867

上述分析确定了获取API地址与调用函数的地址,由于该样本是通过API_HASH去获取相关API地址,同时也可以获取相关API的名称。获取被调用API名称的方法如下:

通过下条件断点,直接输出API的名称和相关地址。

在地址0x403260下条件断点,断下后可从EAX获取API名称,从栈顶获取调用API的函数信息。

1688004172_649ce64c421e021048c77.png!small?1688004173351

最终获取的API信息与相关地址如下:

1688004184_649ce658c96cfd18b5534.png!small?1688004185420

2.3 创建互斥量

调用成功会根据受害者主机系统的GUID创建互斥量。

1688004220_649ce67ccc6dd47dcdf92.png!small?1688004221335

2.4 窃取数据

Lokibot会构造两个数组,第一个数组中的值作为全局变量充当标识符,第二个数组中的函数实现了各种窃取数据的逻辑。

1688004247_649ce697f03a2066bd0ee.png!small?1688004248500

firefox窃密函数功能为:判断是否存在firefox浏览器信息,根据不同的系统版本执行对应的窃密操作。其他窃密函数的逻辑类似。

1688004262_649ce6a634b4074350033.png!small?1688004262781

Lokibot会给每个窃密函数绑定一个全局变量标识符,C2服务器会根据这些全局标识符来存储/解析被盗数据。

1688004272_649ce6b0229da4a7631d0.png!small?1688004272562

1688004278_649ce6b6cf9be85df0dfb.png!small?1688004279586

窃取信息的目标程序包含浏览器,远控,邮件等常用工具,部分工具示例如下:

firefox browser 火狐浏览器notepadplusplus Notepad++myftp myftp上传工具ftpgetter ftp上传软件syncovery Super Flexible Synchronizer自动备份工具bitkinexbitkinex手机ftp工具putty putty远控工具incredimail incredimail邮件管理软件outlook outlook邮件—同时,LoKibot会尝试从 Windows Credential Manager 中窃取凭据信息。

1688004312_649ce6d88fbbd5549ccfc.png!small?1688004313183

为了窃取凭证信息,Lokibot遍历读取指定目录下以“.lck”为后缀的所有文件。

1688004340_649ce6f494b673d0e03ab.png!small?1688004341159

elevate_privilege函数的主要功能是调整进程令牌的权限。以便find_file获取凭据信息。

1688004354_649ce7020e0266f290cc4.png!small?1688004354836

find_file函数主要功能是查找%s\\Microsoft\\Credentials与%s\\Microsoft\\Credentials下的凭据信息。

1688004370_649ce712174182efde8cd.png!small?1688004370703

1688004376_649ce7185b990ee37c140.png!small?1688004376903

将窃取的数据再次打包发送到C2服务器。

1688004386_649ce72287d7b31412d35.png!small?1688004387198

2.5 持久化

为了实现持久化,Lokibot 将自身复制到%APPDATA%内的一个文件夹,创建注册表启动项,隐藏创建的目录和复制的可执行文件。

创建目录并复制原始可执行文件。

1688004413_649ce73d4e19477235be2.png!small?1688004413979

创建注册表启动项并隐藏文件夹和可执行文件。

1688004426_649ce74ac5fd90c0172bc.png!small?1688004427304

三、网络行为分析

3.1 解密并连接C2

Lokibot会将获取的信息和系统信息一起打包发送至目标服务器。

1688004485_649ce785bd2456f0d0acd.png!small?1688004486637

获取宿主机用户名、桌面等相关信息。

1688004498_649ce79219a29f1883026.png!small?1688004498583

1688004504_649ce798318ea6dd3b80e.png!small?1688004504634

1688004508_649ce79cea426b1f24a50.png!small?1688004509382

将获取的信息拼接在一起,并传入send_data。

1688004519_649ce7a7814bb23a8583d.png!small?1688004520056

Lokibot将C2以3DES加密算法加密后存储在样本中,建立连接前先进行解密,解密结果如下图。

1688004530_649ce7b26b4a7dac66fdb.png!small?1688004531021

上线报文示例如下:

1688004543_649ce7bf9c0039d2f95c1.png!small?1688004544451

3.2 上线包详细分析

将上线报文的关键数据导出,使用Imhex标注,各部分含义如下

1.下图标记处四个字节为样本中硬编码的定值数据

1688004582_649ce7e67dbc17ea1044a.png!small?1688004583664

2.下图标记处为定值,使用了Lokibot存储数据的特殊结构

字节[0,1]代表是否为宽字节,宽字节为1否则为0

字节[2,5]代表后续数据长度

字节[6,12]代表存储的数据,此处为“ckav.ru”

1688004600_649ce7f8077d6953b94bb.png!small?1688004601072

3.下图标记处使用了Lokibot特殊数据结构,含义为用户名

1688004637_649ce81de05ae06236fb2.png!small?1688004638732

4.下图标记处使用了Lokibot特殊数据结构,含义为主机名

1688004645_649ce825d75f9c2fed89a.png!small?1688004646497

5.下图标记处使用了Lokibot特殊数据结构,含义为widnows域名称

1688004652_649ce82cce7fc3bf565fc.png!small?1688004653738

6.下图标记处表示屏幕宽高

字节[0,3]代表屏幕宽度

字节[4,7]代表屏幕高度

1688004662_649ce836b060a17e0a73c.png!small?1688004663453

7.下图标记处值如下

字节[0,1]代表检索指定用户账户信息成功

字节[2,3]代表当前用户不属于管理员组

字节[4,5]代表当前系统为x64框架

1688004670_649ce83e002339671052c.png!small?1688004671017

8.下图标记处表示操作系统的版本号为6.1 次版本为1

1688004675_649ce843dd237c9011fe2.png!small?1688004676624

9.下图标记处为定值,为“k.r.o.t.i.k.\.W.i.n.b.o.x.”的第一个字符

1688004687_649ce84f52c2db9e64798.png!small?1688004688057

1688004693_649ce855d0a61ea495c2d.png!small?1688004694513

10.下图标记处为定值

1688004706_649ce8622f85a6032d6e7.png!small?1688004707107

11.下图标记处使用了Lokibot特殊数据结构,含义为机器的GUID

1688004740_649ce88471f5e9466abae.png!small?1688004741237

12.下图标记处为随机生成的字符串

字节[0,3]代表生成的字符串长度

字节[4,8]代表生成的字符串

四、防护方案

处置建议1. 定期修改重要账户的密码2. 重要数据做好备份工作3. 及时更新系统补丁,减少系统漏洞带来的风险

最后

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:

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

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

相关文章

穷举深搜暴搜回溯剪枝(1)

一)全排列: 46. 全排列 - 力扣(LeetCode) 1)先画出决策树: 越详细越好,就是我们在进行暴力枚举这道题的过程中,如何不重不漏地将所有的情况全部枚举到,把这个思想历程给画下来,就可以了,把每一步…

【css】外边距margin

外边距中有一个属性值比较有意思&#xff1a;inherit 值&#xff0c;继承父类的属性。 <!DOCTYPE html> <html> <head> <style> div {border: 1px solid red;margin-left: 100px; }p.ex1 {margin-left: inherit; } </style> </head> <…

[React]生命周期

前言 学习React&#xff0c;生命周期很重要&#xff0c;我们了解完生命周期的各个组件&#xff0c;对写高性能组件会有很大的帮助. Ract生命周期 React 生命周期分为三种状态 1. 初始化 2.更新 3.销毁 初始化 1、getDefaultProps() 设置默认的props&#xff0c;也可以用duf…

实验笔记之——Windows下的Android环境开发搭建

好久一段时间没有进行Android开发了&#xff0c;最新在用的电脑也没有了Android studio了。为此&#xff0c;本博文记录一下最近重新搭建Android开发的过程。本博文仅为本人学习记录用&#xff08;**别看&#xff09; 之前博客也对配置Android做过记录 Android学习笔记之——A…

Mybatis高级映射及动态加载及逆向工程

目录 1.多对一 2.一对多 3.⼀对多延迟加载 4.逆向工程 1.多对一 多种⽅式&#xff0c;常⻅的包括三种&#xff1a; 第⼀种⽅式&#xff1a;⼀条SQL语句&#xff0c;级联属性映射。第⼆种⽅式&#xff1a;⼀条SQL语句&#xff0c;association。第三种⽅式&#xff1a;两条SQ…

虹科案例 | PLC如何应用于建筑的3D打印?

客户&#xff1a;Rebuild 合作伙伴&#xff1a;ASTOR 应用&#xff1a;用于建筑的大尺寸3D打印 应用产品&#xff1a;3D混凝土打印机 &#xff08;一&#xff09;应用背景 自从20世纪80年代以来&#xff0c;增材制造技术&#xff08;即3D打印&#xff09;不断发展。大部分3D打印…

flannel的三种常见模式分析

概述 大家接触flannel这种网络模式大多数可能都是从k8s中知道的&#xff0c;初始使用很少去深入了解它&#xff0c;毕竟使用它其实是很简单的。但是有时候会出现奇奇怪怪的网络问题&#xff0c;这个时候就需要我们更深入了解一下flannel这种网络模式。 Flannel是CoreOS开源的&…

【BASH】回顾与知识点梳理(四)

【BASH】回顾与知识点梳理 四 四. Bash Shell 的操作环境4.1 路径与指令搜寻顺序4.2 bash 的进站与欢迎讯息&#xff1a; /etc/issue, /etc/motd4.3 bash 的环境配置文件login与non-login shell/etc/profile (login shell 才会读)~/.bash_profile (login shell 才会读)source &…

Spark2x原理剖析(一)

一、简介 Spark是基于内存的分布式计算框架。在迭代计算的场景下&#xff0c;数据处理过程中的数据可以存储在内存中&#xff0c;提供了比MapReduce高10到100倍的计算能力。Spark可以使用HDFS作为底层存储&#xff0c;使用户能够快速地从MapReduce切换到Spark计算平台上去。Sp…

【数据结构】二叉树、二叉搜索树、平衡二叉树、红黑树、B树、B+树

概述 二叉树&#xff08;Binary Tree&#xff09;&#xff1a;每个节点最多有两个子节点&#xff08;左子节点和右子节点&#xff09;&#xff0c;没有限制节点的顺序。特点是简单直观&#xff0c;易于实现&#xff0c;但查找效率较低。 二叉搜索树&#xff08;Binary Search…

【严重】PowerJob<=4.3.3 远程代码执行漏洞

漏洞描述 PowerJob 是一款开源的分布式任务调度框架。 由于 PowerJob 未对网关进行鉴权&#xff0c;4.3.3 及之前版本中&#xff0c;未经授权的攻击者可向 /instance/detail 端点发送恶意构造的 instanceId 参数远程执行任意代码。 漏洞名称 PowerJob<4.3.3 远程代码执行漏…

集团MySQL的酒店管理系统

酒店管理系统 概述 基于Spring Spring MVC MyBatis的酒店管理系统&#xff0c;主要实现酒店客房的预定、入住以及结账等功能。使用Maven进行包管理。 用户端主要功能包括&#xff1a; 登录注册、客房预订、客房评论&#xff08;编写评论和查看评论&#xff09; 后台管理主要…

如何理解PID?

1 理解PID 先说结论&#xff1a;调整开关量让反馈更接近目标。 这里拿水龙头打比方&#xff0c;我们想控制水龙头的出水量为一半&#xff0c;这里就涉及两个关键量&#xff0c;阀门和出水量&#xff1b;阀门&#xff0c;即上面说的开关量&#xff1b;出水量即反馈&#xff1b…

postman和jmeter的区别何在?

小伙伴们大家好呀&#xff0c;前段时间笔者做了一个小调查&#xff0c;发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中&#xff0c;有高手&#xff0c;自然也会有小白&#xff0c;但有一点我们无法否认&#xff0c;就是每一个高手都是从小白开始的&#xf…

推荐50个超实用的 Chrome 扩展,建议收藏!

今天来分享 50 个超实用的 Chrome 浏览器扩展&#xff01; JSON Viewer Pro JSON Viewer Pro 用于可视化JSON文件。其核心功能包括&#xff1a; 支持将JSON数据进行格式化&#xff0c;并使用属性或者图表进行展示&#xff1b;使用面包屑深入遍历 JSON 属性&#xff1b;在输入…

大势智慧与深信服签署战略合作协议,助推实景三维中国建设

7月28日&#xff0c;武汉大势智慧科技有限公司&#xff08;以下简称“大势智慧”&#xff09;与深信服成功签署战略合作协议&#xff0c;双方将围绕“实景三维中国建设”和测绘行业数字化领域开展深度合作&#xff0c;共同为广大测绘行业用户打造一款灵活高效的测绘数据生产和存…

【CDC】跨时钟域处理方法总结一

文章目录 一、概述1.异步时序2.亚稳态与建立保持时间 二、跨时钟域处理1.控制信号的跨时钟域处理&#xff08;单bit数据&#xff09;a.慢时钟域到快时钟域b.快时钟域到慢时钟域握手“扩宽”快时钟域脉冲时钟停止法窄脉冲捕捉电路 2.数据信号的跨时钟域处理&#xff08;多bit数据…

C++动态内存管理(new和delete)

C动态内存管理 1. C中动态内存管理1.1 new/delete操作内置类型1.2 new和delete操作自定义类型 2. operator new与operator delete函数2.1 operator new与operator delete函数&#xff08;重点&#xff09;3. new和delete的实现原理3.1 内置类型3.2 自定义类型 4. 常见面试题4.1…

快速转换PDF文件: Python和PyMuPDF教程

解决问题 有时候将文档上传Claude2做分析&#xff0c;有大小限制&#xff0c;所以需要切割pdf文档为几个小点的文档&#xff0c;故才有了本文章。 如何用Python和PyMuPDF制作你想要大小的PDF&#xff1f; PDF是一种广泛使用的文件格式&#xff0c;可以在任何设备上查看和打印…

C#核心知识回顾——19.插入排序

1.插入排序的基本原理 871542639 两个区域 排序区 未排序区 用一个索引值做分水岭 未排序区元素 与排序区元素比较 插入到合适位置 直到未排序区清空 int[] arr { 8, 6, 7, 2, 9, 4 };//第一步//能取出未排序区…