【笔记】如何知道build script下载了哪些东西?

产品怎么去track漏洞?在管理supply chain的时候,我们会遇到很多问题。我们知道,一个工厂的流水线机器会安装各种传感器来监测生产环境,那么对于软件的流水线呢?比如build script有没有下载不安全的lib?比如我们的下载源有没有受到攻击提供了不安全的package?首先,我们需要知道的是,build script访问了哪些网站,url分别是什么?

其实我们可以使用第三人攻击的方法,架设一个proxy,然后将所有的网络流量都通过这个proxy。这个proxy可以模拟target网站,然后把信息原封不动地再传递给target。这样自然而然就可以拿到HTTP/HTTPS的url了。对于很多binary protocol,目前还是比较困难的,比如ssh,不是文本,就不能快速解析;像udp就更复杂了。所以为了能达到100%监测,基于现在的技术,我们需要将build script全部使用HTTP/HTTPS进行外部访问。

HTTP proxy很好理解,但是HTTPS有些人肯定会有疑虑,如何能伪装一个网站,并且通过SSL验证。其实这最终就是一个证书配置的问题。我们生成一个根证书去签发所有伪装的网站,只要把这个根证书在需要的地方注册好,让它暂时可信就可以了。当然,这里确实有一些麻烦的地方,对于不同的工具有自己读取并验证根证书的方法,我们要看build script到底使用了哪些工具来进行特别配置。

因为对于HTTPS proxy,不同工具配置不同,如何保证所有流量都route到proxy里面了呢?所有我们可以启用另一个法宝tcpdump,它可以监测所有原始的网络流量;我们可以将它的src和dst的IP都列出来,并且去解析DNS packet得到hostname,这样所有的外网访问都会被列出来。如果有HTTPS没有route到proxy的,tcpdump的报告里就会多出一些未知IP或者hostname。

https://github.com/stallpool/track-network-traffic

从代码来看,其实核心就是一个mitmproxy,它会自动生成一个根证书,然后伪装成各种网站对url进行截取。track-network-traffic的工作主要就是把这个根证书配置到需要的工具里。当然,还需要开启tcpdump功能,让traffic没有漏网之鱼。

我们来看看这个工具的使用状况:

bash ./bin/tnt.bash -o . -- curl https://www.google.com
bash ./bin/tnt.bash -a -o . -- pip install pg8000

当然嫌一个command一个command太麻烦,就写一个bash

cat > all_in_one.sh <<EOF
curl https://www.google.com
pip install pg8000
EOF

bash ./bin/tnt.bash -o . -- bash all_in_one.sh

这样就可以得到诸如下列report.json

{
   "items": [
         {
         "content": "binary",
         "host": "www.google.com",
         "path": [
            "/ HTTP/2.0"
         ],
         "protocol": "https"
      },
      {
         "content": "binary",
         "host": "pypi.org",
         "path": [
            "/simple/pg8000/",
            "/simple/scramp/",
            "/simple/asn1crypto/"
         ],
         "protocol": "https"
      },
      {
         "content": "binary",
         "host": "files.pythonhosted.org",
         "path": [
            "/packages/0d/b9/0f8e90f4d3785c517b15e1643d58fd484e2b594559d1af37e19217a74817/pg8000-1.22.0-py3-none-any.whl",
            "/packages/27/31/80bfb02ba2daa9a0ca66f82650c411f1a2b21ce85164408f57e99aab4e4e/scramp-1.4.1-py3-none-any.whl",
            "/packages/b5/a8/56be92dcd4a5bf1998705a9b4028249fe7c9a035b955fe93b6a3e5b829f8/asn1crypto-1.4.0-py2.py3-none-any.whl"
         ],
         "protocol": "https"
      }
   ]
}

对于docker build,我们同样可以配置各种proxy,但是最终的产物image不能对外发布,因为image里多出了一些证书和配置layers。这个其实可以靠强制去除layer chain来解决。比如想要得到docker build的网络访问report

cat > Dockerfile <<EOF
FROM python:2.7.18
RUN curl https://www.google.com
RUN pip install pg8000
EOF

./bin/docker build .

其他就大家自己摸索吧。想要讨论的同学可以注明需要讨论的主题加微信
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值