[笔记]Windows安全之《二》Session0隔离及相关启动技术

简介: Windows安全之《二》Session0隔离及相关启动技术

穿透Session 0 隔离(一)


创建用户桌面进程(突破Session 0隔离)


《Windows 黑客编程》


文章目录



   前言

   Session0隔离

       场景

       原因

       解决方案

           代码实现

   启动技术

       创建进程API

       内存直接加载执行

           原理

           基本实现步骤

   总结


前言



Session0会话:在Windows XP、Windows Server 2003,以及更老版本的Windows操作系统中,第一个登录到控制台的用户来启动服务和应用程序,该会话被认为是服务会话,它包含了宿纳系统的服务的进程,该会话就称为SESSION 0。


例如第一个登录的用户创建 Session 1,第二个登录的用户创建Session 2,以此类推,如下图所示。

图片.png

   而将服务和用户应用程序一起在SESSION0中运行会导致安全风险,因为服务会使用提升后的权限来运行,而用户应用程序使用用户特权(大部分都是非管理员用户)运行,这会使得恶意软件把某个服务作为攻击目标,通过“劫持”该服务以达到提升自己权限级别的目的。


Session0隔离



Session0隔离:位于Session0会话的服务程序在Win7及以上(通常是内核6.0以上)是无法进行与UI进行通信的.


   从Windows VISTA开始,只有服务可以托管到SESSION0中,用户应用程序和服务之间会进行隔离,并需要运行在用户登录系统时创建的后续会话中。

   如第一个登录用户创建Session1,第二个登录用户创建Session2,以此类推。

   使用不同会话运行的实体(应用程序或服务)如果不将自己明确标注为全局命名空间,并提供相应的访问控制设置,那么将无法互相发送消息,共享UI元素或共享内核对象。


场景


有些服务可能需要在用户界面上显示对话框,或需要与用户的应用程序通讯,这种类型的功能“通常”属于Windows XP服务,因为在Windows XP中,这样做很容易。如果服务恰好需要显示某些用户界面对象,例如对话框,或者需要与应用程序通讯,则在Windows 7下运行可能会遇到问题。


原因


由于SESSION0的隔离,使得在系统服务进程内不能直接调用CreateProcess等函数创建进程,而只能通过CreateProcessAsUser函数来创建。这样,创建的进程才会显示UI界面,与用户进行交互。


解决方案


   在SESSION0中创建用户桌面进程具体的实现流程:


       调用WTSGetActiveConsoleSessionId函数来获取当前程序的会话ID,即Session Id。

       根据Session Id继续调用WTSQueryUser Token函数来检索用户令牌,并获取对应的用户令牌句柄。在不需要使用用户令牌句柄时,可以调用CloseHandle函数来释放句柄。

       使用DuplicateTokenEx函数创建一个新令牌,并复制上面获取的用户令牌。设置新令牌的访问权限为MAXIMUM ALLOWED,这表示获取所有令牌权限。新访问令牌的模拟级别为SecurityIdentification,而且令牌类型为TokenPrimary,这表示新令牌是可以在CreateProcessAsUser函数中使用的主令牌。

       根据新令牌调用CreateEnvironmentBlock函数创建一个环境块,用来传递给CreateProcessAsUser使用。在不需要使用进程环境块时,可以通过调用DestroyEnvironmentBlock函数进行释放。获取环境块后,就可以调用CreateProcessAsUser来创建用户桌面进程。CreateProcessAsUser函数的用法以及参数含义与CreateProcess函数的用法和参数含义类似。新令牌句柄作为用户主令牌的句柄,指定创建进程的路径,设置优先级和创建标志,设置STARTUPINFO结构信自,获取PROCESS

       INFORMATION结构信息


代码实现


参考windows黑客编程技术详解之4.2 突破SESSION 0隔离创建用户进程

    而将服务和用户应用程序一起在SESSION0中运行会导致安全风险,因为服务会使用提升后的权限来运行,而用户应用程序使用用户特权(大部分都是非管理员用户)运行,这会使得恶意软件把某个服务作为攻击目标,通过“劫持”该服务以达到提升自己权限级别的目的。
Session0隔离
Session0隔离:位于Session0会话的服务程序在Win7及以上(通常是内核6.0以上)是无法进行与UI进行通信的.
    从Windows VISTA开始,只有服务可以托管到SESSION0中,用户应用程序和服务之间会进行隔离,并需要运行在用户登录系统时创建的后续会话中。
    如第一个登录用户创建Session1,第二个登录用户创建Session2,以此类推。
    使用不同会话运行的实体(应用程序或服务)如果不将自己明确标注为全局命名空间,并提供相应的访问控制设置,那么将无法互相发送消息,共享UI元素或共享内核对象。
场景
有些服务可能需要在用户界面上显示对话框,或需要与用户的应用程序通讯,这种类型的功能“通常”属于Windows XP服务,因为在Windows XP中,这样做很容易。如果服务恰好需要显示某些用户界面对象,例如对话框,或者需要与应用程序通讯,则在Windows 7下运行可能会遇到问题。
原因
由于SESSION0的隔离,使得在系统服务进程内不能直接调用CreateProcess等函数创建进程,而只能通过CreateProcessAsUser函数来创建。这样,创建的进程才会显示UI界面,与用户进行交互。
解决方案
    在SESSION0中创建用户桌面进程具体的实现流程:
        调用WTSGetActiveConsoleSessionId函数来获取当前程序的会话ID,即Session Id。
        根据Session Id继续调用WTSQueryUser Token函数来检索用户令牌,并获取对应的用户令牌句柄。在不需要使用用户令牌句柄时,可以调用CloseHandle函数来释放句柄。
        使用DuplicateTokenEx函数创建一个新令牌,并复制上面获取的用户令牌。设置新令牌的访问权限为MAXIMUM ALLOWED,这表示获取所有令牌权限。新访问令牌的模拟级别为SecurityIdentification,而且令牌类型为TokenPrimary,这表示新令牌是可以在CreateProcessAsUser函数中使用的主令牌。
        根据新令牌调用CreateEnvironmentBlock函数创建一个环境块,用来传递给CreateProcessAsUser使用。在不需要使用进程环境块时,可以通过调用DestroyEnvironmentBlock函数进行释放。获取环境块后,就可以调用CreateProcessAsUser来创建用户桌面进程。CreateProcessAsUser函数的用法以及参数含义与CreateProcess函数的用法和参数含义类似。新令牌句柄作为用户主令牌的句柄,指定创建进程的路径,设置优先级和创建标志,设置STARTUPINFO结构信自,获取PROCESS
        INFORMATION结构信息
代码实现
参考windows黑客编程技术详解之4.2 突破SESSION 0隔离创建用户进程
————————————————
版权声明:本文为CSDN博主「二次元怪兽」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq1113673178/article/details/12372525


启动技术



创建进程API


可参考博文 Windows几种常见运行命令行方式


内存直接加载执行


原理


将exe/dll等PE文件载入到进程内存中,找到并执行目标exe/dll的入口点。


基本实现步骤


基本实现步骤:


   首先,在DLL文件中,根据PE结构获取其加载映像的大小SizeOflmage,并根据SizeOflmage在自己的程序中申请可读、可写、可执行的内存,那么这块内存的首地址就是DLL的加载基址。

   其次,根据DLL中的PE结构获取其映像对齐大小SectionAlignment,然后把DLL文件数据按照SectionAlignment复制到上述申请的可读、可写、可执行的内存中。

   接下来,根据PE结构的重定位表,重新对重定位表进行修正。

   然后,根据PE结构的导入表,加载所需的DLL,并获取导入函数的地址并写入导入表中。

   接着,修改DLL的加载基址ImageBase.

   最后,根据PE结构获取DLL的入口地址,然后构造并调用DllMain函数,实现DLL加载。


   而exe文件相对于DLL文件实现原理唯一的区别就在于构造入口函数的差别,exe不需要构造DlIMain函数,而是根据PE结构获取exe的人口地址偏移AddressOfEntryPoint并计算出入姚后直接跳转到入口地朴外执行即可。


   要特别注意的是,对于exe文件来说,重定位表不是必需的,即使没有重定位表,exe也可正常运行。因为对于exe进程来说,进程最早加载的模块是exe模块,所以它可以按照默认的加载基址加载到内存。对于那些没有重定位表的程序,只能把它加载到默认的加载基址上。如果默认加载基址已被占用,则直接内存加载运行会失败。


总结



   Session0隔离机制是比较容易绕过的

相关文章
|
9天前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
72 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
2月前
|
安全 Linux C++
PVS‑Studio 7.38 for macOS, Linux & Windows - 代码质量安全静态分析
PVS‑Studio 7.38 for macOS, Linux & Windows - 代码质量安全静态分析
108 0
PVS‑Studio 7.38 for macOS, Linux & Windows - 代码质量安全静态分析
|
3月前
|
安全 Linux iOS开发
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
350 0
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
5月前
|
安全 Linux iOS开发
PVS‑Studio 7.36 for macOS, Linux & Windows - 代码质量安全静态分析
PVS‑Studio 7.36 for macOS, Linux & Windows - 代码质量安全静态分析
94 1
PVS‑Studio 7.36 for macOS, Linux & Windows - 代码质量安全静态分析
|
5月前
|
Web App开发 人工智能 JSON
Windows版来啦!Qwen3+MCPs,用AI自动发布小红书图文/视频笔记!
上一篇用 Qwen3+MCPs实现AI自动发小红书的最佳实践 有超多小伙伴关注,同时也排队在蹲Windows版本的教程。
720 1
|
8月前
|
人工智能 Linux iOS开发
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
357 12
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
11月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
215 32
|
12月前
|
监控 Ubuntu Linux
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
这篇文章介绍了如何在Ubuntu和Windows系统中通过设置相同的时区并使用ntp服务来解决时间同步问题。
245 4
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
|
11月前
|
存储 安全 网络安全
Windows Server 本地安全策略
由于广泛使用及历史上存在的漏洞,Windows服务器成为黑客和恶意行为者的主要攻击目标。这些系统通常存储敏感数据并支持关键服务,因此组织需优先缓解风险,保障业务的完整性和连续性。常见的威胁包括勒索软件、拒绝服务攻击、内部威胁、恶意软件感染等。本地安全策略是Windows操作系统中用于管理计算机本地安全性设置的工具,主要包括用户账户策略、安全选项、安全设置等。实施强大的安全措施,如定期补丁更新、网络分段、入侵检测系统、数据加密等,对于加固Windows服务器至关重要。
354 1
|
12月前
|
缓存 安全 网络协议
Windows 安全基础——NetBIOS篇
Windows 安全基础——NetBIOS篇
303 4

热门文章

最新文章