2020 September 23 windows
Windows下禁止程序运行
Windows下禁止程序运行
方法1:使用注册表的方式
参见这里: http://scz.617.cn:8/windows/201703092204.txt
原理是利用windows的image file execution options(IFEO)注册表,增加对应的键值。
当操作系统尝试执行一个可执行文件的时候,首先检查该运行程序是否为可执行文件,在windows下面就是PE格式,可移植可执行格式,PE文件必须是Windows下的文件。
PE是微软Win32环境下的标准文件格式,包括exe,dll,vxd,sys,vdm等。
PE格式文件的文件头,最上面有DOS MZ header,下来是PE头,这里包含PE装载器需要的重要字段,包括:
- 程序入口点
- 文件偏移地址:数组在PE文件中的地址,是文件在磁盘上存放的相对于文件开头的偏移
- 虚拟地址
- 基地址
- 相对虚拟地址
当可执行文件执行时,操作系统会分配虚拟内存给它,操作系统负责物理内存。用户使用虚拟内存,虚拟内存和物理内存空间存在地址映射关系。
这种方法不能阻止bat,cmd这样的文件运行。
比如要阻止notepad.exe的运行:
reg.exe add “HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe” /v “Debugger” /t REG_SZ /d “d:\dumb.exe” /f
如果是64-bits系统,可能还得多加一条:
reg.exe add “HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options<executable>” /v “Debugger” /t REG_SZ /d “x:dumb.exe” /f
为程序全名,含扩展名,比如calc.exe。 这里的dumb.exe是一个不存在的文件,或者不能使用的文件。 ## 方法2:使用windows自带的组策略 组策略的方式是比较理想的解决方法。 windows自带的组策略中关于软件限制的部分提供了多种的限制方式。 有证书,哈希等可以完全满足企业级的需要。 根据微软的文档,software restriction policies构建是这样的: https://docs.microsoft.com/en-us/windows-server/identity/software-restriction-policies/software-restriction-policies-technical-overview 1. software restriction policies API,这个用来创建和配置规则,并且提供查询和处理规则的请求 2. 管理工具,就是我们用的组策略编辑器 3. safer enforcement API,包含两个功能函数,一个是saferidentifylevel,一个是safercomputetokenformlevel。由这两个功能函数来返回最符合的规则和执行规则。 4. 活动目录和组策略,这个用于windows域环境 5. 认证码和微软认证的可信APIs,操作系统级别,会被safer enforcecement API实时调用,包括微软的office宏,动态链接库装载器,以及COM+,还包含两个API,ShellExecute,CreateProcess 6. 事务查看器,event viewer,用来记录软件限制策略所产生的log 7. RSoP,用来检查客户端所执行的组策略,用于排错 8. software restriction policies 保存在下面的位置: - HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer - HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows. 微软的文档,关于软件限制是如何工作的: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc786941(v=ws.10) 当域级别,父OU级,子OU级都存在限制策略时候,这些策略会同时作用域子OU的计算机对象,操作系统进行这些策略的合并。这些策略会物理的保存在注册表中。 当用户准备运行可执行文件的时候,软件限制策略的强制API会来检测和当前执行的可执行程序所联系的已有的设定规则,如果没有,则放行。如果存在对应的规则,则不会运行。并进行提示说明。 这里组策略比方法一高明的一点是,当你尝试用cmd这样的方式,而不是exe这样的方式运行的时候,shellexecute依然会调用软件限制API中的安全限定等级来进行判定,如果存在对应的规则,cmd这样的文件也是不能执行的。 # 关于软链接和硬链接 举例: 创建file1.txt文件,写入test到其中 touch file1.txt echo “test” >file1.txt 创建硬链接 ln file1.txt file2.txt 此时cat file2.txt发现和file1.txt的内容是完全一样的,而且inode的位置也是一样的。 创建软连接 ln -s file1.txt file3.txt 对file1的权限和内容修改和file2这个硬链接的修改是同样显示的。 但是如果我们对file1.txt这个开始的文件删除后,会发现: - 硬链接文件file2.txt依然可以打开原来的内容,保留原来的权限 - 软连接文件file3.txt已经不能打开了,显示不存在的文件或者目录 也就是说硬链接是对同一个物理对象的不同命名,不同的硬链接名称对应同样的物理对象。删除一个硬链接名称并不对物理对象产生影响。 软链接依附于设定的物理对象,物理对象被删除后,软连接没有可依附的对象,会失效。