聚合Vip网络社区 集合 HK共享吧 合购VIP等精品教程

 找回密码
 立即注册

QQ登录

只需一步,快速开始

关闭
聚合Vip社区
欢迎QQ或来电咨询
工作时间:周一至周五
AM9:00-PM22:00
淘宝店铺 淘宝皇冠店铺
论坛邀请码
查看: 4521|回复: 418

[病毒分析区] 恶意代码分析笔记1

  [复制链接]

1万

主题

15

听众

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    郁闷
    2014-12-12 09:43
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2015-5-7 17:23:15 |显示全部楼层

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    立即注册 已有账号?点击登录 或者 用QQ帐号登录

    x
    恶意代码分析笔记1
    (紧跟前辈步伐,在前辈的基础上寻找创新。小白笔记大神勿喷,但渴望鼓励,让我有一条道走到黑的动力)
    基本信息

    报告名称:             恶意代码分析学习笔记
    报告更新日期              :      2015/4/24
    样本发现日期              :
    样本类型                     :             Lab.exe       .sys
    样本文件大小              :         
    被感染文件变化长度    :
    样本文件的MD5校验值:
                                (.exe)795F093A536F118FB4C34FCEDFA42165
                           (.sys )3D3D1A8145E3237183984FAED04E052E
    样本的SHA1校验值   :
                               (.exe)C83624B0C3C65ABEA42305143DB7C8619443DF3A
                           (.sys )58B739D182DFF8F2A9B0472B10AA7C7B652FB675
    壳信息                      :PEID:(.exe) Microsoft Visual C++ 6.0(空壳)      
                           PEID :(.sys ) Nothing found * (空壳)   
    可能受威胁的系统     :win xpl
    相关漏洞                  :未曝
    已知检测名称           :在线查杀,未查出有报病毒结果,如图1:


    简介

    被感染的网络症状     :

    系统文件变化           :多生成一个Lab10-01.sys文件,禁用防火墙

    注册文件变化           :防火墙的注册表键值被改变

    网络症状                  :

    详细分析/功能介绍
    (当样本运行后会出现的操作)
         1.用IDA打开Lab10-01.exe文件。首先检查Import列表,查看Lab10-01.exe文件导入的API函数。发现比较有价值的API函数只有如图2:


        说明它的主要任务是生成并调用某函数服务。
    来到IDA试图界面,浏览他的流程图,结果改程序确实主要目的是创建服务进程,调用某个.sys文件。如图3。


         详细查看各函数的命令流程:
    首先执行OpenSCManagerA(确定指定计算机上的服务控制管理器连接并打开指定的服务控制管理器数据库)
    ==》0x00401046:CreateServiceA(创建服务)/0x0040105d:(OpenServiceA)如果已经创建服务进程,将终止创建服务进程然后打开服务进程。
    ==》0x0040106e:StartServiceA  (开启服务)
    ==》0x00401080:ControlService (控制服务,用于停止服务)

    这就留下了疑问:创建的是什么进程呢?要创建,总得有服务进程文件名和创建文件存放的路径吧?为了找到相关的信息,因此只能再次详细查看CreateServiceA函数范围的指令。查看到函数头的相关指令如下:
    00401021        push    0               ; lpPassword
    00401023        push    0               ; lpServiceStartName
    00401025        push    0               ; lpDependencies
    00401027        push    0               ; lpdwTagId
    00401029        push    0               ; lpLoadOrderGroup
    0040102B        push    offset BinaryPathName ;
    "C:\\Windows\\System32\\Lab10-01.sys"

    00401030        push    1               ; dwErrorControl
    00401032        push    3               ; dwStartType
    00401034        push    1               ; dwServiceType
    00401036        push    0F01FFh         ; dwDesiredAccess
    0040103B        push    offset ServiceName ; "Lab10-01"
    00401040        push    offset ServiceName ; "Lab10-01"
    00401045        push    edi             ; hSCManager
    00401046        call     ds:CreateServiceA

    由此可知创建服务进程的二进制文件名路径为:"C:\\Windows\\System32\\Lab10-01.sys"
    服务名字为                              :"Lab10-01"
    因为这需要涉及到.sys文件,所以需要使用windbg进行内核调试,以了解调用Lab10-01.sys时系统内核的变化。但在内核调试之前先用IDA调试查看Lab10-01.sys文件的初步信息,以了解它的大概功能。
    先用strings.exe扫描一下Lab10-01.sys文件。看看有什么有价值的信息!得到的结果如图4:


    这很明显,就是修改注册表的键值,还是防火墙的的键值。很明显就是对防火墙禁用或者修改其配置以弱化防火墙的防护能力(恶意软件对防火墙的常见行为)。结合注册表路径上边的EnableFirewall,就可以很肯定的判断确实是禁用防火墙。
    还发现字符串里边存在ntoskrnl.exe ,经百度搜索其是 Windows 操作系统的一个重要进程文件,在系统经过预启动和启动阶段后进入内核调用阶段时由 Ntldr 调用 ntoskrnl.exe,

    (Lab0-01.sys文件的试图流程很简单)
    先打开IDA的inport界面,得到他只调用内核的三个函数:
    RtlCreateRegistryKey    ntoskrnl   创建注册表键值
    KeTickCount                 ntoskrnl   如果规定时间收不到信息,将会调用此函数关闭服务进程(处理异常)
    RtlWriteRegistryValue   ntoskrnl    写入键值

    打开export界面,得到如下信息:
    001048E         mov     esi, ds:RtlCreateRegistryKey
    00010494        push    edi
    00010495        xor     edi, edi
    00010497        push    offset Path     ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
    0001049C        push    edi             ; RelativeTo
    0001049D   mov     [ebp+ValueData], edi
    000104A0   call     esi ; RtlCreateRegistryKey               ;创建键000104A2   push    offset aRegistryMach_0 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
    000104A7   push    edi             ; RelativeTo
    000104A8   call     esi ; RtlCreateRegistryKey
    000104AA   push    offset aRegistryMach_1 ; "\\Registry\\Machine\\SOFTWARE\\Policies"
    000104AF   push    edi             ; RelativeTo
    000104B0   all      esi ; RtlCreateRegistryKey
    000104B2  mov  ebx, offset aRegistryMach_2 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
    000104B7   push    ebx             ; Path
    000104B8   push    edi             ; RelativeTo
    000104B9   call     esi ; RtlCreateRegistryKey
    000104BB   mov     esi, ds:RtlWriteRegistryValue
    000104C1   push     4               ; ValueLength
    000104C3   ea      eax, [ebp+ValueData]
    000104C6   push    eax             ; ValueData
    000104C7   push    4               ; ValueType
    000104C9   mov     edi, offset ValueName
    000104CE   push    edi             ; ValueName
    000104CF   push    offset aRegistryMach_1 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
                                                             ;
    000104D4                 push    0               ; RelativeTo
    000104D6                 call    esi ; RtlWriteRegistryValue   ; 写入键值

    这也进一步证实在strings中搜集到的字符串而初步判断出的结果。
    接下来可使用准备好初步的动态分析工具:Regshot(注册表快照),Process Monitor(系统文件,注册表,进程活动监测工具),Process explorer(任务管理器),Autoruns(自启动位置列表工具)。
    打开windbg,载入可执行文件Lab10-01.exe程序。(连接成功)
    先要查看Lab10-01.exe文件创建的服务具体内核用途,就需要在其调用ControlService(停止并卸载服务)前执行断点,也就是0x00401080。为什么会选择这个位置下断点呢?选择在这下断点是因为到了这整个Lab10-01.exe程序已将完成他的目的,在这下断点正好可以全面的了解他的所有行为。
    ==》 来到设置断点界面框,在0x00401080设置int 3中段(非常感谢15PB薛老师指点)如图5所示:


    回到指令框
    ==》g
    得到结果如图6所示:


    接下来离开虚拟机回到了内核调试主机,查找虚拟机正在运行的驱动服务进程。但是那么多进程,究竟怎样找呢?还记得在IDA分析Lab10-01.exe文件得出的ServiceName 的值什么吗?Lab10-01。所以使用!drvobj 指令。
    ==》!brvobj Lab10-01      得到了该驱动的起始地址8263b418。得到结果如下所示:
    Kd>!Drvobj Lab10-01
    Diver object (8263b418)is for:
    Loading symbols for f7c4700   Lab10-01.sys ->   Lab10-01.sys
    Driver Extension List id,addr)

    由此得到驱动服务的Lab10-01地址:8263b418 ,现在首先要做的就是进入Lab10-01驱动服务进程里边查看详细的属性成员及其数据。因此需要使用:dt _DRIVER_OBJECT 指令进行分析。
    ==》dt _DRIVER_OBJECT  8263b418  展开该驱动的各成员属性。如下结果:
    nt! _DRIVER_OBJECT
    +0x000 Type              :4
    +0x002 Size              :168
    +0x004 DeviceObject       :0
    +0x008 Flags              :0x12
    +0x00c DriverStart         :0xf7c47000             ;这是驱动快的起始地址+0x010 DriverSize         :0xe80                  ;驱动块大小
    +0x014 DriverSection       :0x826b2c88            ;驱动块地址
    +0x018 DriverExtention     :0x82634c0 _DRIVER_EXTENSION;驱动扩展地址
    +0x01c DriverName        :_UNICODE_STRING “Lab10-01”  ;驱动名
    +0x024 HardwareDatabase   :0x80670ae0  _UNICODE_STRING “REGISTRY\MACHINE\HAEDWARE\DESCRIPTION\SYSTEM”              ;硬件数据库地址
    +0x028 FastIoDispath       :0
    +0x02c DriverInit          :0xf7c47959     long  +0
    +0x030 DriverStartIo       :0
    +0x034 DriverUnload       :0xf7c477486    void  +0;驱动卸载地址
    +0x038 MajorFuntion       :[28]0x804f354a   long nt!IopIvalidDeviceRequest+0

    其中
    +0x00c DriverStart         :0xf7c47000             ;这是驱动快的起始地址+0x024 HardwareDatabase   :0x80670ae0  _UNICODE_STRING “REGISTRY\MACHINE\
    HAEDWARE\DESCRIPTION\SYSTEM”              ;硬件数据库地址
    +0x034 DriverUnload       :0xf7c477486    void  +0;驱动卸载地址
    这三个信息对现在的分析目的比较重要,通常重点分析也是这几个对象。现在只是知道他的大概流程,所以现在不必每个都要进去详细分析一遍。现在只需要在调用DriverUnload(卸载驱动)函数下个断点,然后单步调试即可,这样可以清晰的去认知调试的区段指令及整个Lab10-01服务驱动进程函数调用。

    内核调试中==》g      (恢复虚拟机运行)
    虚拟机的可执行文件调试==》g  (恢复可执行文件运行,运行到断点处)
    程序运行断于内核调试设置的断点中…………
    回到内核调试主机,进行单步调试,查看里边的调用的函数并记录下来(直到断点处)。
    调用到的函数:
    RtlCreateRegistryKey    ;创建键值
    RtlCreateRegistryKey
    RtlCreateRegistryKey

    RtlWriteRegstryValue    ;写入键值RtlWriteRegstryValue

    而且它们的目的都是设置EnableFirewalls键值(0,关闭防火墙),这就让你联想到strings扫描出来的3个注册表路径了

    再来查看Rogshot的快照结果,如下所示:
    增加键:2
    ----------------------------------
    HKLM\SYSTEM\ControlSet001\Services\Lab10-01\Enum
    HKLM\SYSTEM\CurrentControlSet\Services\Lab10-01\Enum


    增加值:8
    ----------------------------------
    HKLM\SYSTEM\ControlSet001\Services\kmixer\Enum\0: "SW\{b7eafdc0-a680-11d0-96d8-00aa0051e51d}\{9B365890-165F-11D0-A195-0020AFD156E4}"
    HKLM\SYSTEM\ControlSet001\Services\Lab10-01\Enum\Count: 0x00000000
    HKLM\SYSTEM\ControlSet001\Services\Lab10-01\Enum\NextInstance: 0x00000000
    HKLM\SYSTEM\ControlSet001\Services\Lab10-01\Enum\INITSTARTFAILED: 0x00000001
    HKLM\SYSTEM\CurrentControlSet\Services\kmixer\Enum\0: "SW\{b7eafdc0-a680-11d0-96d8-00aa0051e51d}\{9B365890-165F-11D0-A195-0020AFD156E4}"
    HKLM\SYSTEM\CurrentControlSet\Services\Lab10-01\Enum\Count: 0x00000000
    HKLM\SYSTEM\CurrentControlSet\Services\Lab10-01\Enum\NextInstance: 0x00000000
    HKLM\SYSTEM\CurrentControlSet\Services\Lab10-01\Enum\INITSTARTFAILED: 0x00000001


    ----------------------------------
    修改值:15
    ----------------------------------
    HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed:
    HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed:
    HKLM\SYSTEM\ControlSet001\Services\kmixer\Enum\Count: 0x00000000
    HKLM\SYSTEM\ControlSet001\Services\kmixer\Enum\Count: 0x00000001
    HKLM\SYSTEM\ControlSet001\Services\kmixer\Enum\NextInstance: 0x00000000
    HKLM\SYSTEM\ControlSet001\Services\kmixer\Enum\NextInstance: 0x00000001
    HKLM\SYSTEM\CurrentControlSet\Services\kmixer\Enum\Count: 0x00000000
    HKLM\SYSTEM\CurrentControlSet\Services\kmixer\Enum\Count: 0x00000001
    HKLM\SYSTEM\CurrentControlSet\Services\kmixer\Enum\NextInstance: 0x00000000
    HKLM\SYSTEM\CurrentControlSet\Services\kmixer\Enum\NextInstance: 0x00000001


    相关服务器信息分析



    预防及修复措施

    预防:
    修复:来到相关的注册表路径修改EnableFirewall键值为1
    Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall\StandardProfile
    Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall\domainProfile
    Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall

    还来到Rogshot逐个删改他的值

    技术热点及总结

    创建驱动服务,修改注册表,关闭防火墙。
    回复

    使用道具 举报

    14

    主题

    0

    听众

    456

    积分

    中级会员

    Rank: 3Rank: 3

    该用户从未签到

    发表于 2015-5-7 17:23:32 |显示全部楼层
    沙发怎么能少了我?!
    回复

    使用道具 举报

    17

    主题

    0

    听众

    761

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-7 17:30:16 |显示全部楼层
    无论是不是沙发都得回复下
    回复

    使用道具 举报

    12

    主题

    0

    听众

    480

    积分

    中级会员

    Rank: 3Rank: 3

    该用户从未签到

    发表于 2015-5-7 17:39:39 |显示全部楼层
    OMG!介是啥东东!!!
    回复

    使用道具 举报

    10

    主题

    0

    听众

    514

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-7 17:42:44 |显示全部楼层
    好帖必须得顶起
    回复

    使用道具 举报

    10

    主题

    0

    听众

    524

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-7 17:46:48 |显示全部楼层
    介是神马?!!
    回复

    使用道具 举报

    10

    主题

    0

    听众

    509

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-7 17:59:27 |显示全部楼层
    珍爱生命,果断回帖。
    回复

    使用道具 举报

    11

    主题

    0

    听众

    625

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-7 18:00:17 |显示全部楼层
    支持,楼下的跟上哈~
    回复

    使用道具 举报

    18

    主题

    0

    听众

    523

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-7 18:04:06 |显示全部楼层
    珍爱生命,果断回帖。
    回复

    使用道具 举报

    8

    主题

    0

    听众

    598

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-7 18:51:12 |显示全部楼层
    一直在看
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    回帖奖励

    [详情]

  • * 每天自己主题被回复3次可获得额外2金钱奖励。
  • * 每天回复他人主题5次可获得额外3贡献的奖励。
  • * 奖励每天都可领取,一定要多参与论坛讨论哦。
  • * 同一主题的重复回复不计。
  • Archiver|手机版|聚合Vip网络社区 ( 鲁ICP备14030129号-2 )Discuz超级管家   

    GMT+8, 2018-12-11 06:26 , Processed in 1.140647 second(s), 58 queries .

    Powered by Discuz! X2.5

    © 2001-2018 Comsenz Inc. Template by A3cn

    回顶部