查找或构建python安全探查器



我想要一个python的安全探查器。具体来说,我想要一个将python程序作为输入的东西,并告诉我该程序是否试图进行系统调用、读取文件或导入库。如果存在这样的安全探查器,我在哪里可以找到它?如果不存在这样的东西,而我自己写一个,我在哪里可以"检查"我的探查器(也就是说,验证它是否有效(。

如果你觉得这个问题不适合SO,请告诉我是否还有其他SE网站可以发布这个问题,或者如果可能的话,我如何更改/重新表述我的问题。感谢

通常,python使用一个名为CPython的解释器。很难说python代码本身是打开文件还是做一些特殊的事情,因为许多python库和解释器本身都是用C编写的,系统调用/libc调用只能从那里发生。此外,python语法本身可能非常晦涩。

因此,通过回答您的怀疑:I suspect this would need specific knowledge of the python programming language,它看起来并不是那样的,因为它是关于C语言的。

您可以认为对CPython本身进行修补是可能的。我想这也不正确。许多共享库使用C/C++代码作为CPython本身。例如Tensorflow。

更进一步,我想可以做以下事情:

  • 修补了为CPython/模块编译C/C++代码的编译器,我想这很难
  • 只需使用一个常见的探查器,跟踪python本身使用哪些文件、目录和调用进行操作,并将它们列入白名单,因为它们是必要的,这在我看来是最好的选择(例如AppArmor(
  • 也许你可能对CPython本身的补丁感兴趣,在那里可以将所需的函数和调用挂接到外部C库,但这可能很烦人,因为你必须修改项目中添加的每个库,而且C代码通常用于性能(例如json模块(,它不会打开太多东西

Python不是一种容易被沙盒化的语言。示例:

x = [x for x in [].__class__.__base__.__subclasses__() if x.__name__ == 'ca'+'tch_warnings'][0].__init__
x.__getattribute__("__globals__")['__builtins__']['eval']("__import__('os').system('ls')")

对于每N个正则表达式/模式,都有N+1种方法可以绕过它。更不用说,人们还可以使用types.FunctionType从原始python字节码创建函数。最简单的方法可能是在nsjail中运行脚本,如果它试图执行任何可疑活动,请执行seing。

编辑:理论上有一个带有审计挂钩的PEP578,但实际上它们被琐碎地绕过了。

最新更新