基本信息:
该勒索软件带有加密配置,可以使用硬编码的AES密钥解密,加密逻辑在sub_4062A6
中。
sub_40646A
:
该勒索软件自定义实现的AES加密算法,不需要依赖WIndows API。
回到入口,该勒索软件使用GetTickCount()
检索自系统启动以来经过的毫秒数:
GetLocaleInfoW 函数用于获取操作系统的默认语言环境 (0x800 = LOCALE_SYSTEM_DEFAULT , 0x58 = LOCALE_FONTSIGNATURE )。
二进制文件通过调用 GetModuleFileNameW 函数检索当前进程的可执行文件的路径,如下图:
调用CreateFIleW
寻找一个文件(0x80000000 = GENERIC_READ,0x3 = OPEN_EXISTING)
接着它使用GetVersion
方法提取系统的主版本号和此版本号:
如上图,还调用OpenProcessToken
API打开与当前进程关联的访问令牌,之后用 GetTokenInformation
验证令牌是否被提升。
环境变量“%systemdrive%”被展开,显示了包含Windows目录的驱动器:
该勒索软件还创建了俩个互斥锁:
分别是Global\\<<BID>><Volume serial number>00000001
和Global\\<<BID>><Volume serial number>00000000
。
通过GetouduuleHandle
获取了Kernel.dll的模块句柄。
勒索软件还会使用到GetShellWindow
函数获取Shell桌面窗口的句柄,通过GetWindowThreadProcessId
函数来检索创建窗口的进程,例如explorer.exe。如果检索到窗口,会使用OpenProcess
方法来打开文件句柄。
在上图中,DuplicateTokenEx
API 用于创建一个新的访问令牌,该令牌复制上面提到的令牌。勒索软件在新创建的令牌的安全上下文中运行,它创建一个新线程,该线程将在sub_264B85
函数中运行以下命令:
接着往下走:
该进程将其可执行文件复制到“%AppData%\Local”目录。
RegOpenKeyExW
用于打开 Run 注册表项。该勒索软件通过创建一个基于可执行文件名称命名的条目来建立持久性,该条目指向新创建的可执行文件:
以下是该勒索软件的加密目标:
fdb sql 4dd 4dl abs abx accdb accdc accde adb adf ckp db db-journal db-shm db-wal db2 db3 dbc dbf dbs dbt dbv dcb dp1 eco edb epim fcd gdb mdb mdf ldf myd ndf nwdb nyf sqlitedb sqlite3 sqlite
恶意软件打开与当前进程关联的访问令牌(0x20 = TOKEN_ADJUST_PRIVILEGES),LookupPrivilegeValueW 方法用于提取代表“SeDebugPrivilege”权限的本地唯一标识符(LUID),之后通过调用 AdjustTokenPrivileges 来启用上述权限。
以下进程将被终止,因为它们可能会锁定要加密的文件:
msftesql.exe sqlagent.exe sqlbrowser.exe sqlservr.exe sqlwriter.exe oracle.exe ocssd.exe dbsnmp.exe synctime.exe agntsvc.exe mydesktopqos.exe isqlplussvc.exe xfssvccon.exe mydesktopservice.exe ocautoupds.exe agntsvc.exe agntsvc.exe agntsvc.exe encsvc.exe firefoxconfig.exe tbirdconfig.exe ocomm.exe mysqld.exe mysqld-nt.exe mysqld-opt.exe dbeng50.exe sqbcoreservice.exe excel.exe infopath.exe msaccess.exe mspub.exe onenote.exe outlook.exe powerpnt.exe steam.exe thebat.exe thebat64.exe thunderbird.exe visio.exe winword.exe wordpad.exe
该恶意软件会对系统中所有进程进行快照,如下图所示。
使用 Process32FirstW
和 Process32NextW
API 枚举进程,再使用TerminateProcess
方法停止任何目标进程:
OpenProcessToken
用于打开与进程关联的访问令牌(0x8 = TOKEN_QUERY),二进制文件通过调用 GetTokenInformation
API(0x14 = TokenElevation )再次验证令牌是否被提升。
勒索软件它再次使用“Global\<<BID>><Volume serial number>00000000”互斥名称调用 OpenMutexW 和 CreateMutexW 方法:
勒索软件使用事件来同步线程。它使用 CreateEventW
创建两个未命名的事件对象:
创建完事件对象后提取本地机器的 NetBIOS 名称:
WNetOpenEnumW
用于启动所有当前连接的资源的枚举(0x1 = RESOURCE_CONNECTED),再通过调用 WNetEnumResourceW
函数继续枚举:
该过程通过调用GetIpAddrTable
函数获取接口到IPv4地址映射表,如下所示:
这里使用 ntohl 将上面提取的每个 IP 地址从网络顺序转换为主机字节顺序
它还会创建一个 TCP 套接字(0x2 = AF_INET、0x1 = SOCK_STREAM、0x6 = IPPROTO_TCP),尝试通过端口 445 连接到网络上的每个主机,以加密每个可用的网络共享:
该进程通过调用 CreatePipe 方法创建两个匿名管道,接着使用 SetHandleInformation
(0x1 = HANDLE_FLAG_INHERIT )可以使读取句柄可继承。
勒索软件会创建一个“cmd.exe”进程,该进程将执行多个命令,例如负责禁用防火墙、删除所有卷影副本等的命令通过管道传输到新创建的进程:
此线程不断使用 GetLogicalDrives
API 提取代表当前可用磁盘驱动器的位掩码
这里会解密用于加密文件所用的 AES256 密钥的 RSA 公钥。
它使用多个函数提取当前本地日期和时间、当前进程和线程 ID 以及其他信息:
二进制文件会创建一个新线程,该线程将遍历网络共享和驱动器,以提取要加密的文件:
之中的sub_XX8EBE:
勒索软件以读取模式打开要加密的文件(0x80000000 = GENERIC_READ、0x7 = FILE_SHARE_DELETE | FILE_SHARE_WRITE | FILE_SHARE_READ、0x3 = OPEN_EXISTING),如下
它使用 GetFileSizeEx API 检索文件的大小,将大小与 0x180000 字节(1.5MB)进行比较,字节数较大的文件被部分加密,其余文件则被全部加密:
使用一个ReadFile
读取文件内容
自定义的AES加密算法:
内容经过AES加密后使用WriteFile
写入文件中。
未加密的文件将被0覆盖,然后被删除:
16 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!