【病毒分析】Wormhole勒索病毒分析

1.背景

1.1 来源

       近期,Solar团队收到某纺织公司的援助请求,该公司的计算机服务器受到了Wormhole勒索家族的侵害,所有的文件被加密并且添加了.Wormhole后缀,该勒索软件的初始入侵方式是RDP暴力破解。应客户的要求,本文暂不提供对入侵事件溯源的分析报告,仅提供该勒索病毒加密器的逆向分析报告。

2.恶意文件信息

2.1 文件基础信息

大小2404352(2.29 MiB)
操作系统Windows(Vista)
架构I386
模式32 位
类型控制台
字节序LE
MD51d34728989cd5b3d0f4d55e7a6014552
SHA2560582e46a142fa10e45ec2d1e207570d80252897e61e82e4f7475b9c971776e96

2.2 勒索信

How to recover files encrypted by Wormhole.txt
Please contact us through the qtox tool within 3 days and Pay 0.023btc
otherwise we will delete the password and sell the data
Download qtox https://github.com/qTox/qTox/blob/master/README.md#qtox 
if you can't contact us, please contact some data recovery company(suggest taobao.com), may they can contact to us.
Add our TOX ID and send an encrypted file and Wormhole ID for testing decryption.

Our TOX ID 503313BA88174FDF187C5009A43B45CBC144D313EFBF98BB75BFA084B5743E3ECA94499F95ED

Your Wormhole ID: ZaDtH430niL/sSwLWZ+m+0V3sT7ix29f5BMO9WCSRpUl5spDCv+v++7SCFo4dPbh
sE/pKlD87G8qv37wnaV8ehlJYioc7mBEs1YGR76IOw7JbM1yhRp6f6LRo6GYcLPB
vj6WS053vYW5GaG9fyfEDINlP2doSC5Xpkl2j/MeDSuJnmOUAFWnqlefhvcDS8TJ
LKjYJTaCJxBhWOge5019yLh3MqtPymkCC4bm99HspT9Z4gxt/I/t7QcsF9HTTdca
9L9By6WNZyd9vkStLzajE4aogdRg9oEeIM6YeaFlv5bAVnxCvjvxGUFpQ6YPSM6A
3kci/7KkkaWjDuASZ9ia8g==

2.3 运行时截图

图片

图片

图片

3.恶意文件分析

3.1 威胁分析

病毒家族Wormhole
首次出现时间/捕获分析时间2024/5/13;2024/5/15
威胁类型勒索软件,加密病毒
勒索软件地区wei's'z
加密文件扩展名.Wormhole
勒索信文件名How to recover files encrypted by Wormhole.txt
有无免费解密器?
检测名称Avast (Win32:RansomX-gen [Ransom]), AhnLab-V3 (Ransomware/Win.Ransom.C5011664), AliCloud (RansomWare), Avast (Win32:RansomX-gen [Ransom]), Avira (no cloud) (HEUR/AGEN.1319014), BitDefenderTheta (Gen:NN.ZexaF.36802.muW@a83MUGci),ClamAV(Win.Ransomware.Rapid-9371249-0),Cybereason(Malicious.0fe686),Cynet(Malicious (score: 100)),DrWeb(Trojan.Encoder.37869),eScan(Trojan.GenericKD.70329037), Fortinet (W32/Filecoder.MALL!tr.ransom),Google(Detected)
感染症状无法打开存储在计算机上的文件,以前功能的文件现在具有不同的扩展名(.Wormhole)。桌面上会显示一条勒索要求消息(How to recover files encrypted by Wormhole.txt)。网络犯罪分子要求通过邮箱联系后支付比特币后提供数据恢复工具
感染方式钓鱼、漏洞利用、恶意链接
受灾影响大部分文件将被加密

3.2 加密前后对比

加密前

图片

 

图片

加密后

图片

3.3 关闭相关服务

Deleted all shadow copies.
Service AIOServerWL does not exist. Skipping.
Service AIOServerSL does not exist. Skipping.
Service AIOServerGLM does not exist. Skipping.
Service OneSyncSvc_28ec26 does not exist. Skipping.
Service SunloginService does not exist. Skipping.
Service AliyunService does not exist. Skipping.
Service Alibaba Security Aegis Update Service does not exist. Skipping.
Service AIOXCW does not exist. Skipping.
Service ReportServer$AIO does not exist. Skipping.
Service MSSQLFDLauncher$AIO does not exist. Skipping.
Service MSOLAP$AIO does not exist. Skipping.
Service MsDtsServer100 does not exist. Skipping.
Service GNCloudBackupService does not exist. Skipping.
Service aioServer2 does not exist. Skipping.
Service aioServer3 does not exist. Skipping.
Service YDLive does not exist. Skipping.
Service YDService does not exist. Skipping.
Service ZhuDongFangYu does not exist. Skipping.
Service QQPCRTP does not exist. Skipping.
Service KoronDBSV does not exist. Skipping.
Service aioServer6 does not exist. Skipping.
Service AIOServer2023 does not exist. Skipping.
Service AIOCS does not exist. Skipping.
Service SQLBrowser does not exist. Skipping.
Service SQLWriter does not exist. Skipping.
Service MSSQL$AIO does not exist. Skipping.
Service AIOServer does not exist. Skipping.
Service eoffice does not exist. Skipping.
Service MySQL does not exist. Skipping.
Service AGSService does not exist. Skipping.
Service DDNSService does not exist. Skipping.
Service CASLicenceServer does not exist. Skipping.
Service CASMsgSrv does not exist. Skipping.
Service RapService does not exist. Skipping.
Service CASVirtualDiskService does not exist. Skipping.
Service CASWebServer does not exist. Skipping.
Service CASXMLService does not exist. Skipping.
Service SiebelApplicationContainer_Siebel_Home_ does not exist. Skipping.
Service ReportServer$SQLEXPRESS does not exist. Skipping.
Service SQL Server Reporting Services does not exist. Skipping.
Service SQL Server (MSSQLSERVER) does not exist. Skipping.
Service MSSQLFDLauncher does not exist. Skipping.
Service SQLSERVERAGENT does not exist. Skipping.
Service SQLTELEMETRY does not exist. Skipping.
Service MsDtsServer130 does not exist. Skipping.
Service SSISTasdRY130 does not exist. Skipping.
Service MSSQL$WOLTERSKLUWER does not exist. Skipping.
Service SQLAgent$PROGID does not exist. Skipping.
Service MSSQL$VEEAMSQL2012 does not exist. Skipping.
Service SQLAgent$VEEAMSQL2012 does not exist. Skipping.
Service MSSQL does not exist. Skipping.
Service SQLAgent does not exist. Skipping.
Service MSSQLServerADHelper100 does not exist. Skipping.
Service MSSQLServerOLAPService does not exist. Skipping.
Service MsDtsServer100 does not exist. Skipping.
Service ReportServer does not exist. Skipping.
Service SQLTELEMETRY$HL does not exist. Skipping.
Service TMBMServer does not exist. Skipping.
Service MSSQL$PROGID does not exist. Skipping.
Service XT800Service_Personal does not exist. Skipping.
Service AHS SERVICE does not exist. Skipping.
Service Sense Shield Service does not exist. Skipping.
Service FontCache3.0.0.0 does not exist. Skipping.
Service OSP Service does not exist. Skipping.
Service DAService_TCP does not exist. Skipping.
Service eCard-TTransServer does not exist. Skipping.
Service wanxiao-monitor does not exist. Skipping.
Service vm-agent does not exist. Skipping.
Service SyncBASE Service does not exist. Skipping.
Service Flash Helper Service does not exist. Skipping.
Service Kiwi Syslog Server does not exist. Skipping.
Service UWS HiPriv Services does not exist. Skipping.
Service UWS LoPriv Services does not exist. Skipping.
Service UtilDev Web Server Pro does not exist. Skipping.
Service ZTE USBIP Client Guard does not exist. Skipping.
Service ZTE USBIP Client does not exist. Skipping.
Service ZTE FileTranS does not exist. Skipping.
Service Zabbix Agent does not exist. Skipping.
Service EasyFZS Server does not exist. Skipping.
Service Rpc Monitor does not exist. Skipping.
Service Nuo Update Monitor does not exist. Skipping.
Service Daemon Service does not exist. Skipping.
Service FlexNet Licensing Service 64 does not exist. Skipping.
Service U8WorkerService2 does not exist. Skipping.
Service U8MPool does not exist. Skipping.
Service U8WebPool does not exist. Skipping.
Service U8WorkerService1 does not exist. Skipping.
Service TongBackupSrv does not exist. Skipping.
Service cbVSCService11 does not exist. Skipping.
Service CobianBackup11 does not exist. Skipping.
Service MSSQLSERVER does not exist. Skipping.
Service MSSQL$ does not exist. Skipping.
Service MSSQL$FE_EXPRESS does not exist. Skipping.
Service SQLANYs_Sage_FAS_Fixed_Assets does not exist. Skipping.
Service MSSQL$VIM_SQLEXP does not exist. Skipping.
Service QcSoftService does not exist. Skipping.
Service TeamViewer does not exist. Skipping.
Service RabbitMQ does not exist. Skipping.
Service SSMonitorService does not exist. Skipping.
Service SSSyncService does not exist. Skipping.
Service TPlusStdAppService1300 does not exist. Skipping.
Service MSSQL$SQL2008 does not exist. Skipping.
Service SQLAgent$SQL2008 does not exist. Skipping.
Service TPlusStdTaskService1300 does not exist. Skipping.
Service TPlusStdUpgradeService1300 does not exist. Skipping.
Service VirboxWebServer does not exist. Skipping.
Service jhi_service does not exist. Skipping.
Service LMS does not exist. Skipping.
Service eCardMPService does not exist. Skipping.
Service EnergyDataService does not exist. Skipping.
Service UI0Detect does not exist. Skipping.
Service K3MobileService does not exist. Skipping.
Service TCPIDDAService does not exist. Skipping.
Service WebAttendServer does not exist. Skipping.
Service UIODetect does not exist. Skipping.
Service VMAuthdService does not exist. Skipping.
Service VMUSBArbService does not exist. Skipping.
Service VMwareHostd does not exist. Skipping.
Service VmAgentDaemon does not exist. Skipping.
Service OpenSSHd does not exist. Skipping.
Service eSightService does not exist. Skipping.
Service apachezt does not exist. Skipping.
Service Jenkins does not exist. Skipping.
Service secbizsrv does not exist. Skipping.
Service MSMQ does not exist. Skipping.
Service smtpsvrJT does not exist. Skipping.
Service zyb_sync does not exist. Skipping.
Service 360EntHttpServer does not exist. Skipping.
Service 360EntSvc does not exist. Skipping.
Service 360EntClientSvc does not exist. Skipping.
Service NFWebServer does not exist. Skipping.
Service wampapache does not exist. Skipping.
Service MSSEARCH does not exist. Skipping.
Service msftesql does not exist. Skipping.
Service OracleDBConcoleorcl does not exist. Skipping.
Service OracleJobSchedulerORCL does not exist. Skipping.
Service OracleMTSRecoveryService does not exist. Skipping.
Service OracleOraDb11g_home1ClrAgent does not exist. Skipping.
Service OracleOraDb11g_home1TNSListener does not exist. Skipping.
Service OracleVssWriterORCL does not exist. Skipping.
Service OracleServiceORCL does not exist. Skipping.
Service aspnet_state does not exist. Skipping.
Service Redis does not exist. Skipping.
Service JhTask does not exist. Skipping.
Service ImeDictUpdateService does not exist. Skipping.
Service MCService does not exist. Skipping.
Service allpass_redisservice_port21160 does not exist. Skipping.
Service ftnlsv3 does not exist. Skipping.
Service ftnlses3 does not exist. Skipping.
Service FxService does not exist. Skipping.
Service ftusbrdwks does not exist. Skipping.
Service ftusbrdsrv does not exist. Skipping.
Service wwbizsrv does not exist. Skipping.
Service qemu-ga does not exist. Skipping.
Service AlibabaProtect does not exist. Skipping.
Service ZTEVdservice does not exist. Skipping.
Service kbasesrv does not exist. Skipping.
Service MMRHookService does not exist. Skipping.
Service IpOverUsbSvc does not exist. Skipping.
Service KuaiYunTools does not exist. Skipping.
Service KMSELDI does not exist. Skipping.
Service btPanel does not exist. Skipping.
Service Protect_2345Explorer does not exist. Skipping.
Service 2345PicSvc does not exist. Skipping.
Service vmware-converter-agent does not exist. Skipping.
Service vmware-converter-server does not exist. Skipping.
Service vmware-converter-worker does not exist. Skipping.
Service QQCertificateService does not exist. Skipping.
Service OracleRemExecService does not exist. Skipping.
Service GPSDaemon does not exist. Skipping.
Service GPSUserSvr does not exist. Skipping.
Service GPSDownSvr does not exist. Skipping.
Service GPSStorageSvr does not exist. Skipping.
Service GPSDataProcSvr does not exist. Skipping.
Service GPSGatewaySvr does not exist. Skipping.
Service GPSMediaSvr does not exist. Skipping.
Service GPSLoginSvr does not exist. Skipping.
Service GPSTomcat6 does not exist. Skipping.
Service GPSMysqld does not exist. Skipping.
Service GPSFtpd does not exist. Skipping.
Service BackupExecAgentAccelerator does not exist. Skipping.
Service bedbg does not exist. Skipping.
Service BackupExecDeviceMediaService does not exist. Skipping.
Service BackupExecRPCService does not exist. Skipping.
Service BackupExecAgentBrowser does not exist. Skipping.
Service BackupExecJobEngine does not exist. Skipping.
Service BackupExecManagementService does not exist. Skipping.
Service MDM does not exist. Skipping.
Service TxQBService does not exist. Skipping.
Service Gailun_Downloader does not exist. Skipping.
Service RemoteAssistService does not exist. Skipping.
Service YunService does not exist. Skipping.
Service Serv-U does not exist. Skipping.
Service OpenFastAssist does not exist. Skipping.
Service asComSvc does not exist. Skipping.
Service OfficeUpdateService does not exist. Skipping.
Service RtcSrv does not exist. Skipping.
Service RTCASMCU does not exist. Skipping.
Service FTA does not exist. Skipping.
Service MASTER does not exist. Skipping.
Service NscAuthService does not exist. Skipping.
Service MSCRMUnzipService does not exist. Skipping.
Service MSCRMAsyncService$maintenance does not exist. Skipping.
Service MSCRMAsyncService does not exist. Skipping.
Service REPLICA does not exist. Skipping.
Service RTCATS does not exist. Skipping.
Service RTCAVMCU does not exist. Skipping.
Service RtcQms does not exist. Skipping.
Service RTCMEETINGMCU does not exist. Skipping.
Service RTCIMMCU does not exist. Skipping.
Service RTCDATAMCU does not exist. Skipping.
Service RTCCDR does not exist. Skipping.
Service ProjectEventService16 does not exist. Skipping.
Service ProjectQueueService16 does not exist. Skipping.
Service SPAdminV4 does not exist. Skipping.
Service SPSearchHostController does not exist. Skipping.
Service SPTimerV4 does not exist. Skipping.
Service SPTraceV4 does not exist. Skipping.
Service OSearch16 does not exist. Skipping.
Service ProjectCalcService16 does not exist. Skipping.
Service c2wts does not exist. Skipping.
Service AppFabricCachingService does not exist. Skipping.
Service ADWS does not exist. Skipping.
Service MotionBoard57 does not exist. Skipping.
Service MotionBoardRCService57 does not exist. Skipping.
Service vsvnjobsvc does not exist. Skipping.
Service VisualSVNServer does not exist. Skipping.
Service BestSyncSvc does not exist. Skipping.
Service LPManager does not exist. Skipping.
Service MediatekRegistryWriter does not exist. Skipping.
Service RaAutoInstSrv_RT2870 does not exist. Skipping.
Service CobianBackup10 does not exist. Skipping.
Service SQLANYs_sem5 does not exist. Skipping.
Service CASLicenceServer does not exist. Skipping.
Service SQLService does not exist. Skipping.
Service semwebsrv does not exist. Skipping.
Service TbossSystem does not exist. Skipping.
Service ErpEnvSvc does not exist. Skipping.
Service Mysoft.Autoupgrade.DispatchService does not exist. Skipping.
Service Mysoft.Autoupgrade.UpdateService does not exist. Skipping.
Service Mysoft.Config.WindowsService does not exist. Skipping.
Service Mysoft.DataCenterService does not exist. Skipping.
Service Mysoft.SchedulingService does not exist. Skipping.
Service Mysoft.Setup.InstallService does not exist. Skipping.
Service MysoftUpdate does not exist. Skipping.
Service edr_monitor does not exist. Skipping.
Service abs_deployer does not exist. Skipping.
Service savsvc does not exist. Skipping.
Service ShareBoxMonitorService does not exist. Skipping.
Service ShareBoxService does not exist. Skipping.
Service CloudExchangeService does not exist. Skipping.
Service CIS does not exist. Skipping.
Service EASService does not exist. Skipping.
Service KICkSvr does not exist. Skipping.
Service U8SmsSrv does not exist. Skipping.
Service OfficeClearCache does not exist. Skipping.
Service TurboCRM70 does not exist. Skipping.
Service U8DispatchService does not exist. Skipping.
Service U8EISService does not exist. Skipping.
Service U8EncryptService does not exist. Skipping.
Service U8GCService does not exist. Skipping.
Service U8KeyManagePool does not exist. Skipping.
Service U8SCMPool does not exist. Skipping.
Service U8SLReportService does not exist. Skipping.
Service U8TaskService does not exist. Skipping.
Service UFAllNet does not exist. Skipping.
Service UFReportService does not exist. Skipping.
Service UTUService does not exist. Skipping.

3.4 释放脚本

deletefile.bat
del "C:\Js9lsr_\Wormhole.exe"
del "C:\Js9lsr_\test1.exe"
del "%~f0"

4.逆向分析

编译器1EP:Microsoft Visual C/C++(2013-2017)[EXE32]
编译器2Microsoft Visual C/C++(2015 v.14.0)[-]
链接程序Microsoft Linker(14.0, Visual Studio 2015 14.0*)[控制台32,console]

4.1 命令执行

在地址58A8D5处存在命令执行函数

执行的命令包括

  • vssadmin delete shadows /all /quiet

  • wevtutil cl 删除系统日志

4.2 非对称加密

程序中内置公钥用于非对称加密

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqnJhs7S6xt+A0E/xUcaO
DcK/R8LZoLKhsQYG9b/uibVk/4cfEFtGwdTnM3AZbDWKqEJL+L/xt7J2AQzG3beS
7vmRv0NyDDvrArf7QPl5i/A9Gyl5Tr82G+shZwLDlLETCI8KgNSFvW6VgUDnKnCR
xjqdYxa4Y80ud2q5FmlJA+KMmBYyQVVAaxgbR72LqTASf1E4FohGOa3/DLAQbQqI
7wOsudYKMKPmImZ7AxXe86mxRI3fjmUWRAddbkl/GILWu5KidArG0a9EENVADh2g
B0g3iGSzz9B/erqAKG7Sd7s6i0TlVnUmj+FSs9lObKCCghrOBgLoWjMiYH2SSt4i
XQIDAQAB
-----END PUBLIC KEY-----

4.3 白名单

图片

在main函数中对文件夹白名单进行了设置

同样在main函数中对文件白名单进行了设置

图片

对文件后缀也进行白名单设置

4.4 服务关闭

在main函数中对需要关闭的服务进行了配置,与上方输出一致

4.5 写入勒索信息

函数sub_44D410

void __fastcall sub_44D410(int a1, int a2)
{
  int v3; // eax
  void *v4; // ecx
  unsigned int v5; // eax
  char *v6; // ecx
  int v7; // eax
  int v8; // eax
  int v9; // [esp-8h] [ebp-104h]
  int v10; // [esp-4h] [ebp-100h]
  char *Block; // [esp+Ch] [ebp-F0h]
  unsigned int v12; // [esp+20h] [ebp-DCh]
  int v13[44]; // [esp+24h] [ebp-D8h] BYREF
  char v14[16]; // [esp+D4h] [ebp-28h] BYREF
  int v15; // [esp+E4h] [ebp-18h]
  int v16; // [esp+E8h] [ebp-14h]
  int v17; // [esp+F8h] [ebp-4h]

  memset(v13, 0, sizeof(v13));
  v3 = sub_457420("\\How to recover files encrypted by Wormhole.txt");
  v17 = 0;
  sub_452290(v3, 2, v9, v10);
  LOBYTE(v17) = 2;
  if ( v12 >= 0x10 )
  {
    v4 = Block;
    if ( v12 + 1 >= 0x1000 )
    {
      if ( ((unsigned __int8)Block & 0x1F) != 0 )
        _invalid_parameter_noinfo_noreturn();
      v5 = *((_DWORD *)Block - 1);
      if ( v5 >= (unsigned int)Block )
        _invalid_parameter_noinfo_noreturn();
      if ( (unsigned int)&Block[-v5] < 4 )
        _invalid_parameter_noinfo_noreturn();
      if ( (unsigned int)&Block[-v5] > 0x23 )
        _invalid_parameter_noinfo_noreturn();
      v4 = (void *)*((_DWORD *)Block - 1);
    }
    j_j___free_base(v4);
  }
  v12 = 15;
  if ( v13[20] )
  {
    v16 = 15;
    v15 = 0;
    v14[0] = 0;
    sub_451E20(
      v14,
      "Please contact us through the qtox tool within 3 days and Pay 0.023btc\n"
      "otherwise we will delete the password and sell the data\n"
      "Download qtox https://github.com/qTox/qTox/blob/master/README.md#qtox \n"
      "if you can't contact us, please contact some data recovery company(suggest taobao.com), may they can contact to us"
      ".\n"
      "Add our TOX ID and send an encrypted file and Wormhole ID for testing decryption.\n"
      "\n"
      "Our TOX ID 503313BA88174FDF187C5009A43B45CBC144D313EFBF98BB75BFA084B5743E3ECA94499F95ED\n"
      "\n"
      "Your Wormhole ID: ",
      0x1F8u);
    LOBYTE(v17) = 3;
    sub_454FF0(a2, 0, 0xFFFFFFFF);
    sub_457160();
    if ( !sub_4554F0(&v13[1]) )
    {
      v6 = (char *)v13 + *(_DWORD *)(v13[0] + 4);
      v7 = *((_DWORD *)v6 + 3) | 6;
      if ( *((_DWORD *)v6 + 14) )
        v7 = *((_DWORD *)v6 + 3) | 2;
      sub_44C290(v7, 0);
    }
    sub_452050(v14);
  }
  else
  {
    sub_456E00((int)&dword_6381F8, "Failed to create file in directory: ");
    v8 = sub_457160();
    sub_4570B0(v8);
  }
  *(int *)((char *)v13 + *(_DWORD *)(v13[0] + 4)) = (int)&std::ofstream::`vftable';
  *(int *)((char *)&v13[-1] + *(_DWORD *)(v13[0] + 4)) = *(_DWORD *)(v13[0] + 4) - 104;
  sub_452DB0(&v13[1]);
  *(int *)((char *)v13 + *(_DWORD *)(v13[0] + 4)) = (int)&std::ostream::`vftable';
  *(int *)((char *)&v13[-1] + *(_DWORD *)(v13[0] + 4)) = *(_DWORD *)(v13[0] + 4) - 8;
  v17 = 4;
  v13[26] = (int)&std::ios_base::`vftable';
  std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v13[26]);
}

4.6 文件夹遍历

void __cdecl sub_44D630(int *a1, int *a2, int a3, int a4, int a5)
{
  int v5; // ebx
  const CHAR *p_lpFileName; // eax
  size_t v7; // ecx
  void **v8; // eax
  unsigned int v9; // edi
  char *v10; // esi
  int v11; // eax
  void **v12; // eax
  int v13; // eax
  void *v14; // ecx
  unsigned int v15; // eax
  const CHAR *v16; // eax
  DWORD FileAttributesA; // eax
  _DWORD *v18; // esi
  int v19; // edi
  unsigned int v20; // edi
  void **v21; // eax
  void **v22; // ebx
  _BYTE *i; // esi
  void **v24; // eax
  int v25; // esi
  _DWORD *v26; // esi
  int v27; // edi
  CHAR *v28; // ecx
  LPCSTR v29; // eax
  char *v30; // eax
  unsigned int v31; // esi
  CHAR *v32; // ecx
  unsigned int v33; // eax
  int v34; // [esp+0h] [ebp-1FCh]
  char *Block; // [esp+10h] [ebp-1ECh]
  unsigned int v36; // [esp+24h] [ebp-1D8h]
  HANDLE hFindFile; // [esp+28h] [ebp-1D4h]
  struct _WIN32_FIND_DATAA FindFileData; // [esp+48h] [ebp-1B4h] BYREF
  _DWORD v39[6]; // [esp+188h] [ebp-74h] BYREF
  LPCSTR lpFileName; // [esp+1A0h] [ebp-5Ch] BYREF
  unsigned int v41; // [esp+1B4h] [ebp-48h]
  LPCSTR v42[5]; // [esp+1B8h] [ebp-44h] BYREF
  unsigned int v43; // [esp+1CCh] [ebp-30h]
  void *v44[4]; // [esp+1D0h] [ebp-2Ch] BYREF
  int v45; // [esp+1E0h] [ebp-1Ch]
  unsigned int v46; // [esp+1E4h] [ebp-18h]
  char v47; // [esp+1E8h] [ebp-14h]
  int v48; // [esp+1F8h] [ebp-4h]

  v5 = a3;
  sub_457420("\\*.*");
  v48 = 0;
  p_lpFileName = (const CHAR *)&lpFileName;
  if ( v41 >= 0x10 )
    p_lpFileName = lpFileName;
  hFindFile = FindFirstFileA(p_lpFileName, &FindFileData);
  if ( hFindFile != (HANDLE)-1 )
  {
    do
    {
      v46 = 15;
      v45 = 0;
      LOBYTE(v44[0]) = 0;
      if ( FindFileData.cFileName[0] )
        v7 = strlen(FindFileData.cFileName);
      else
        v7 = 0;
      sub_451E20((char *)v44, FindFileData.cFileName, v7);
      LOBYTE(v48) = 1;
      v8 = v44;
      v9 = v46;
      v10 = (char *)v44[0];
      if ( v46 >= 0x10 )
        v8 = (void **)v44[0];
      v11 = strcmp((const char *)v8, ".");
      if ( v11 )
        v11 = v11 < 0 ? -1 : 1;
      if ( v11 )
      {
        v12 = v44;
        if ( v46 >= 0x10 )
          v12 = (void **)v44[0];
        v13 = strcmp((const char *)v12, "..");
        if ( v13 )
          v13 = v13 < 0 ? -1 : 1;
        if ( v13 )
        {
          sub_457420("\\");
          LOBYTE(v48) = 2;
          sub_457540((int)v44);
          LOBYTE(v48) = 4;
          if ( v36 >= 0x10 )
          {
            v14 = Block;
            if ( v36 + 1 >= 0x1000 )
            {
              if ( ((unsigned __int8)Block & 0x1F) != 0 )
                goto LABEL_75;
              v15 = *((_DWORD *)Block - 1);
              if ( v15 >= (unsigned int)Block || (unsigned int)&Block[-v15] < 4 || (unsigned int)&Block[-v15] > 0x23 )
                goto LABEL_75;
              v14 = (void *)*((_DWORD *)Block - 1);
            }
            j_j___free_base(v14);
          }
          v16 = (const CHAR *)v42;
          v36 = 15;
          if ( v43 >= 0x10 )
            v16 = v42[0];
          LOBYTE(Block) = 0;
          FileAttributesA = GetFileAttributesA(v16);
          if ( FileAttributesA == -1 || (FileAttributesA & 0x10) == 0 )
          {
            v18 = (_DWORD *)*a1;
            v19 = a1[1];
            if ( *a1 == v19 )
            {
LABEL_34:
              v47 = 46;
              if ( v45 )
              {
                v20 = v46;
                v21 = v44;
                v22 = (void **)v44[0];
                if ( v46 >= 0x10 )
                  v21 = (void **)v44[0];
                for ( i = (char *)v21 + v45 - 1; *i != 46 || *i != v47; --i )
                {
                  if ( i == (_BYTE *)sub_451E10(v44) )
                    goto LABEL_45;
                }
                v24 = v44;
                if ( v20 >= 0x10 )
                  v24 = v22;
                v25 = i - (_BYTE *)v24;
              }
              else
              {
LABEL_45:
                v25 = -1;
              }
              if ( v25 == -1 )
              {
                v5 = a3;
                sub_44C900(v42, v34);
              }
              else
              {
                sub_451D90(v39, v25 + 1, -1);
                LOBYTE(v48) = 5;
                v26 = (_DWORD *)*a2;
                v27 = a2[1];
                if ( *a2 == v27 )
                {
LABEL_50:
                  v5 = a3;
                  sub_44C900(v42, v34);
                  sub_452050(v39);
                }
                else
                {
                  while ( sub_451CF0(v39, v26) )
                  {
                    v26 += 6;
                    if ( v26 == (_DWORD *)v27 )
                      goto LABEL_50;
                  }
                  v5 = a3;
                  sub_452050(v39);
                }
              }
            }
            else
            {
              while ( sub_451CF0(v44, v18) )
              {
                v18 += 6;
                if ( v18 == (_DWORD *)v19 )
                  goto LABEL_34;
              }
            }
          }
          else if ( !(unsigned __int8)sub_44D300((int)v44) )
          {
            sub_44D410((int)v42, a5);           // 勒索信息
            sub_44D630(a1, a2, v5, a4, a5);
          }
          LOBYTE(v48) = 1;
          if ( v43 >= 0x10 )
          {
            v28 = (CHAR *)v42[0];
            if ( v43 + 1 >= 0x1000 )
            {
              if ( ((int)v42[0] & 0x1F) != 0 )
                goto LABEL_75;
              v29 = (LPCSTR)*((_DWORD *)v42[0] - 1);
              if ( v29 >= v42[0] || (unsigned int)(v42[0] - v29) < 4 || (unsigned int)(v42[0] - v29) > 0x23 )
                goto LABEL_75;
              v28 = (CHAR *)*((_DWORD *)v42[0] - 1);
            }
            j_j___free_base(v28);
          }
          v10 = (char *)v44[0];
          v9 = v46;
        }
      }
      LOBYTE(v48) = 0;
      if ( v9 >= 0x10 )
      {
        if ( v9 + 1 >= 0x1000 )
        {
          if ( ((int)v44[0] & 0x1F) != 0 )
            goto LABEL_75;
          v30 = (char *)*((_DWORD *)v10 - 1);
          if ( v30 >= v10 )
            goto LABEL_75;
          v31 = v10 - v30;
          if ( v31 < 4 || v31 > 0x23 )
            goto LABEL_75;
          v10 = v30;
        }
        j_j___free_base(v10);
      }
    }
    while ( FindNextFileA(hFindFile, &FindFileData) );
    FindClose(hFindFile);
  }
  if ( v41 >= 0x10 )
  {
    v32 = (CHAR *)lpFileName;
    if ( v41 + 1 >= 0x1000 )
    {
      if ( ((unsigned __int8)lpFileName & 0x1F) != 0 )
LABEL_75:
        _invalid_parameter_noinfo_noreturn();
      v33 = *((_DWORD *)lpFileName - 1);
      if ( v33 >= (unsigned int)lpFileName )
        _invalid_parameter_noinfo_noreturn();
      if ( (unsigned int)&lpFileName[-v33] < 4 )
        _invalid_parameter_noinfo_noreturn();
      if ( (unsigned int)&lpFileName[-v33] > 0x23 )
        _invalid_parameter_noinfo_noreturn();
      v32 = (CHAR *)*((_DWORD *)lpFileName - 1);
    }
    j_j___free_base(v32);
  }
}

 

4.7 文件加密

       软件使用openssl开源库,使用salsa20为主体,其余加密方式辅助对文件进行加密

加密后文件增加10Byte

图片

       若2相同文件在同一个加密区,在同一次运行时,加密结果相同,猜测文件增加的10Byte为checksum,那么说明勒索软件并没有对文件分发单独的文件密钥,而是所有文件共用一个主密钥

图片

图片

       构造2个文件进行加密,仅一处不同,加密结果如下,验证了我们的猜想

图片

图片

5.病毒分析概括

        病毒启动之后会对白名单等进行配置,关闭部分进程与服务,文件机密完成后删除相关日志文件,同时释放bat脚本用于自删除。

       以下是solar安全团队近期处理过的常见勒索病毒后缀:

.live勒索病毒, .locked勒索病毒, .rmallox勒索病毒, .mallox 勒索病毒,.jopanaxye勒索病毒, .2700勒索病毒, .elbie勒索病毒, .mkp勒索病毒, .dura勒索病毒, .halo勒索病毒, .DevicData勒索病毒, .faust勒索病毒, ..locky勒索病毒, .cryptolocker勒索病毒, .cerber勒索病毒, .zepto勒索病毒, .wannacry勒索病毒, .cryptowall勒索病毒, .teslacrypt勒索病毒, .gandcrab勒索病毒, .dharma勒索病毒, .phobos勒索病毒, .lockergoga勒索病毒, .coot勒索病毒, .lockbit勒索病毒, .nemty勒索病毒, .contipa勒索病毒, .djvu勒索病毒, .marlboro勒索病毒, .stop勒索病毒, .etols勒索病毒, .makop勒索病毒, .mado勒索病毒, .skymap勒索病毒, .aleta勒索病毒, .btix勒索病毒, .varasto勒索病毒, .qewe勒索病毒, .mylob勒索病毒, .coharos勒索病毒, .kodc勒索病毒, .tro勒索病毒, .mbed勒索病毒, .wannaren勒索病毒, .babyk勒索病毒, .lockfiles勒索病毒, .locked勒索病毒, .DevicData-P-XXXXXXXX勒索病毒, .lockbit3.0勒索病毒, .blackbit勒索病毒, .360勒索病毒, .360勒索病毒

       勒索攻击作为成熟的攻击手段,很多勒索家族已经形成了一套完整的商业体系,并且分支了很多团伙组织,导致勒索病毒迭代了多个版本。而每个家族擅用的攻击手法皆有不同,TellYouThePass勒索软件家族常常利用系统漏洞进行攻击;Phobos勒索软件家族通过RDP暴力破解进行勒索;Mallox勒索软件家族利用数据库及暴力破解进行加密,攻击手法极多防不胜防。

       而最好的预防方法就是针对自身业务进行定期的基线加固、补丁更新及数据备份,在其基础上加强公司安全人员意识。

       如果您想了解有关勒索病毒的最新发展情况,或者需要获取相关帮助,请关注“solar专业应急响应团队”。

6.安全建议

6.1 风险消减措施

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

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

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

图片

6.2 安全设备调优

目标

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

图片

主要目标设备

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

6.3 全员安全意识增强调优

目标:

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

形式:

培训及宣贯

图片

线下培训课表

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

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

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

图片

线上学习平台

7.团队介绍

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

8.数据恢复服务流程

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

① 免费咨询/数据诊断分析

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

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

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

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

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

③ 确认下单/签订合同

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

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

④ 开始数据恢复专业施工

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值