我正在构建一个游戏,每个玩家都必须对他的机器人进行编程.关键的想法是播放器将使用C(或C++,或任何兼容的语言)编程,构建DLL并将此DLL发送到服务器,以便没有人可以获取他的代码.问题是:如何确保他没有调用任何非法功能?就像创建文件或打开套接字一样.DLL将加载LoadLibrary并将调用一个函数.所有交互都将在回调函数中发生.一个可能的解决方案是放置一个空的kernel32.dll(和其他),以便所有winapi调用都将失败.这样安全,适用于所有情况吗?有没有更好的方法呢?
请注意,播放器线程(称为dll的那个)必须仍然能够与游戏通信,可能还有一个打开的套接字.在Linux上,这可以轻松完成seccomp.
Sir*_*ius 11
您最好的选择是创建一个权限降低的用户,这将允许您非常轻松地控制文件访问,并在以该用户身份运行的子流程中运行bot代码.
如果您还想限制网络连接,也可以轻松设置防火墙,以便上述进程无权连接到外部主机.
如果您需要更多地控制允许或不允许的API调用,则有一种称为"通过DLL重定向进行API拦截"的技术,例如:
http://109.163.225.194/download/files/other/DLL_Redirection_en.pdf
Run Code Online (Sandbox Code Playgroud)
(通过谷歌找到)
如果没有在加载之前完全分析所有DLL(这基本上是不可能的),或者在同一级别创建某种魔法,这将无法工作seccomp.如果您采取任何限制其访问的措施,例如创建虚拟对象kernel32.dll,则用户提交的DLL可以采取对策,例如加载您未考虑的DLL,调用由主机进程加载的DLL(可能通过托管应用程序!),或直接提交Windows系统调用.
一种选择可能是利用Google安全令牌功能,Google Chrome使用该功能来"沙盒化"网络渲染器进程.不过,这是非常神秘的东西,它涉及到在单独的进程中运行DLL.如果您仍然感兴趣,可能需要阅读Windows Chrome沙盒设计文档.但请记住,Google花了很多开发时间让沙盒"正确",但仍然有一些高调的妥协 - 你有可能在你的沙盒上做同样的事情.自己很苗条,特别是没有广泛的Windows安全经验.
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |