技术开发 频道

如何测试托管代码安全


工具:

  有几个简单的办法去操控安全性以达到测试目的。其实,这些仅仅是一些小技巧,而不是系统的做法,但是对测试来说还是有些帮助的:

  1. [非常简单]:假设你的机器名为Box1,你的IP地址是111.111.111.111,而你的应用程序名为App.exe,放在C:\目录下, 并且你的.NET安全策略和IE安全设置都是默认状态。这种情况下,下面的命令行:

\\Box1\C$\App.exe

  将有效的使得App.exe运行在本地局域网域(LocalIntranet zone),并降低信任等级。这将让你知道如果某人从共享位置运行程序结果会怎么样——非常简单而且便宜的测试。

  另外,如下命令行:

\\111.111.111.111\C$\App.exe

  将从局域网域(Internet zone)启动你的应用程序,这将更加减弱信任等级,在这种情况下,你得到的执行环境和网络浏览区(Internet Explorer)相当接近(虽然不完全相同),再一次得到一个相当好的基础测试方法。

  2. 稍微复杂一点,但是有更好的灵活性:使用caspol.exe或者.NET框架配置工具(.NET Framework Configuration tool)改变安全策略。要想达到100%(掌握),你需要对安全有较深的了解,但是一些砂箱场景(sandboxing scenarios)还是很容易实现的。

  例如,下面的步骤将分配任何权限给任意一个从C:\Temp目录下启动的应用程序:

  2.1. 启动.NET框架配置工具(可以通过运行mmc.exe,然后加载适当的管理单元(snap-in),或者通过管理工具(Administrative tools)下的快捷方式;

  2.2. 展开“控制台根节点(Console Root)->.NET框架配置(.NET Framework Configuration)->我的电脑(My Computer)”节点。

  2.3. 展开“运行时安全策略(Runtime Security Policy) ->机器(Machine) ->代码组(Code Groups)”节点。

  2.4. 选中“所有代码”(All_Code)节点,鼠标右击,选择“新建...”(New...)菜单。

  2.5. 在接下来弹出的向导填上某个名字,点击“下一步”(Next).

  2.6. 在下拉列表菜单中选择使用“URL”作为成员条件。

  2.7. 在“URL”框里键入file://C:\TMP\*, ,点击“下一步”。

  2.8. 无论是利用现有的集合还是创建一个新的都是可以的,但是我鼓励你创建一个新的集合,因为这样可以让你在任意种你感兴趣的安全配置下测试你的应用程序,同时还可以学习权限集和.NET之间的联系。通过向导创建新的集合是一个很容易的、自我描述的过程。

  2.9. 当完成创建组之后,你会在“所有代码”下面发现这个组,鼠标右击并选择“属性”(Properties),选中“该策略仅拥有和该组相关联的权限集的权限”(译注:偶没看到中文版里面到底是什么,这里原文是:"This policy level will only have the permissions from the permission set associated with this group")。

  至此,如果你从C:\TMP启动应用程序,它就可以得到你分配的这些权限——并且仅仅能得到这些。

  当你结束测试时,不要忘记恢复策略到初始值。你可以通过.NET框架配置工具或者运行脚本“caspol.exe -pp off -all -reset”。

  不过,如果测试的不是一个整个程序,而是一个Dll或者一个函数,是否有容易的办法调整信任等级呢?答案是肯定的。

  3. 程序集等级权限需求是更好的选择(译注:偶从意义角度翻译的,原文是:Assembly level requests are our friends)

  这些(程序集等级权限需求)使用类似下面的语句去构造,并放在程序集的开始:
[assembly: {Some permission | PermissionSet}Attribute(SecurityAction.Request{Minimum|Optional|Refuse}, ...)]
0
相关文章