有人想在我的服务器上运行node.js代码,但是我首先要看一下它,然后再确定是否可以。我可以使用哪种程序/工具来检查其代码是否“无危险”且没有网络访问权限。
我很好,因为该工具更具攻击性(即将安全代码报告为危险),而不是过于宽松(即将危险代码报告为安全)。
我可以想到一些自己做的方法(都很丑陋),但是我敢肯定这是一个普遍的问题,并且大多数/所有语言都发明了“安全代码检查器”。
答案 0 :(得分:0)
一个明显的问题是:您认为哪些动作危险?执行任意代码?产生大量负载(如果是,则为哪种负载)?
我不知道有任何适用于危险行为的扫描器-静态地执行此操作(即不执行)会很复杂,因为有成千上万种混淆这种行为的方式以及需要启发式检测这些行为的方法。诸如nsp和snyk之类的常见扫描器仅扫描依赖关系中的已知漏洞,而不会扫描代码中的可疑行为。 Node不提供禁用特定功能的功能,例如PHP。 尤其是如果您认为资源使用是一个问题,无论如何扫描仪都是毫无疑问的。
您可以通过主机操作系统来限制节点进程:chroot应用程序,配置防火墙以丢弃来自应用程序用户组的所有流量等等。另一种方法是在Docker容器中运行潜在可疑的应用程序,而不暴露Docker套接字,并通过配置适当的ulimits来避免诸如共享描述符的文件描述符耗尽之类的事情。设置SELinux是可以在此处添加的另一层。
另一个选项(可能最容易安全设置)是在VM内运行Node应用程序,而不是将任何网络设备连接到该VM。最糟糕的是,该应用程序可能会破坏VM内的OS。只需确保通过限制VM的CPU和RAM使用率来配置资源限制,并保持虚拟机/管理程序更新。仍然存在节点应用程序通过0天漏洞(如几年前看到的floppy driver screw up)逃脱VM的风险,但是VM路由似乎仍然是您拥有的最安全的选择。