我的问题与此类似: 如何查找进程访问的 URL
我不关心传输的内容,而是从哪里下载的。我需要向安全部门指定构建工具需要访问哪些 URL。通过静态分析很难做到这一点,所以我认为监控是一个更可靠、更简单的解决方案。
也许strace
会有用。如果需要,我可以拥有机器的 root 访问权限。我对同一主机中其他工具的其他互联网访问不感兴趣。
答案1
这在理论上和实践上都是不可能的:
IP 地址可以由任意数量的 DNS 条目指向。因此,如果您只看到 TCP 连接,则无法知道所指的是哪个域。当然,您可以进行反向 DNS 查找,但这 a) 不一定有效,b) 最多只能给您一的域。
如果您的构建工具合理,那么它用于下载内容的所有连接(使用 HTTPS、FTPS、git 协议……)都是加密的,因此您也无法检查流量的内容。
您从(github、docker、gitlab、Google 的 repo 工具等)下载代码和容器的大多数内容都使用加密。此外,他们使用 CDN,因此您甚至不需要连接到单个 IP 地址 - 连接到哪个主机的解析是通过 DNS 查找完成的。
因此,除了添加特定于每个应用程序的后门/调试挂钩之外,肯定没有办法知道它访问了哪些域,甚至没有办法知道它访问了哪些 URL。
唯一的方法是强制执行 TLS/SSL 剥离中间人代理。但这会消除你可以通过 git 进行 TLS 验证获得的所有安全性 - 因此,这种“安全措施”实际上会让你的整个事情变得不那么安全。
我需要向安全部门指定构建工具需要访问哪些 URL。
对于像 git-via-http(s) 这样的东西,这将如何工作? URL 会随着软件的变化而变化,添加驻留在其他服务器上的子模块是正常的编码操作。
我认为您的安全部门需要接受这样一个事实:您正在进行软件构建,并且他们无法对此进行监管,除非他们可以派人来维护软件,使其保持与您相同的技术质量。你可以引用我的话:)