有人想在我的服务器上运行node.js代码,但我必须先查看它,然后决定它是否正常。我可以使用什么程序/工具来检查他们的代码是否没有"危险"并且没有网络访问权限。
我认为该工具更具攻击性(即将安全代码报告为危险代码(,而不是过于宽松(即将危险代码报告为安全代码(。
我自己可以想出几种方法来做到这一点(都很难看(,但我确信这是一个常见的问题,"安全代码检查器"已经为大多数/所有语言发明。
这里显而易见的问题是:你认为哪些行为是危险的?执行任意代码?产生显著负载(如果是:哪种负载(?
我不知道有任何适合危险行为的扫描仪——静态地(即不执行(这样做会有点复杂,因为有很多方法可以混淆这种行为,并且需要启发式检测这些行为。像nsp和snyk这样的常见扫描仪只扫描依赖项中的已知漏洞,但不会扫描代码中的可疑行为。Node不提供禁用特定函数的功能,比如PHP。特别是如果你认为资源使用是一个问题,那么任何扫描仪都是毫无疑问的。
你可以通过主机操作系统来限制节点进程:记录应用程序,配置防火墙以丢弃应用程序用户组中的所有流量等等。另一种方法是在docker容器中运行潜在的可疑应用程序,而不暴露Docker套接字,并通过配置适当的ulimits来避免共享内核的文件描述符耗尽。设置SELinux是您可以在此处添加的另一个层。
另一个选项,可能也是最容易安全设置的选项,是在虚拟机内运行Node应用程序,而不将任何网络设备连接到该虚拟机。最坏的情况是,该应用程序可能会破坏虚拟机内部的操作系统。只需确保通过限制虚拟机的CPU和RAM使用来配置资源限制,并保持虚拟机/虚拟机监控程序的更新。节点应用程序仍然存在通过0天漏洞逃离虚拟机的风险,就像我们几年前看到的软盘驱动程序出错一样,但虚拟机路由似乎仍然是最安全的选择。