IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【笔记】如何知道build script下载了哪些东西? -> 正文阅读

[网络协议]【笔记】如何知道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 .

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

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 13:04:03  更:2021-11-11 13:06:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 8:55:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码