Trail of Bits 2021 开源贡献盘点:编译器、包管理与安全监控的技术实践

本文详细介绍了Trail of Bits在2021年对多个重要开源项目的技术贡献,涵盖LLVM编译器修复、Nixpkgs包管理优化、Osquery系统监控增强以及Python工具链改进等实质性技术内容。

庆祝我们的 2021 开源贡献 - Trail of Bits 博客

Sam Moelius
2021 年 12 月 31 日
年度回顾

在 Trail of Bits,我们以将最佳工具开源而自豪,例如 algo、manticore 和 graphtage。但虽然这篇文章关于开源,它并不关于我们的工具……

2021 年,Trail of Bits 员工提交了超过 190 个拉取请求(PR),这些请求被合并到非 Trail of Bits 的代码库中。这展示了我们致力于保护整个软件生态系统并提高每个人的软件质量的承诺。贡献的代表性列表出现在文章末尾,但以下是一些亮点:

LLVM 是一组编译器和工具链技术。LLVM 作为许多流行编译器的后端,如 clang、rustc 和 swiftc。我们为 LLVM 中的多个错误实施了修复,包括纠正文档错误、确保在 clang 的 AST 转储模式中生成有效的 JSON,以及确保 LLVM 仅接受格式良好的位码。

Nixpkgs 是一个包含超过 80,000 个软件包的集合,可以通过 Nix 包管理器安装。我们对许多广泛使用的 Nix 包进行了改进和错误修复,包括 Go、Hevm、libff、Protobuf 和 SBV。

Osquery 是一个基于 SQL 的操作系统检测、监控和分析框架。我们对 osquery 做出了众多贡献,最显著的是基于新的端点安全 API 为 macOS 添加了进程事件监控;彻底 overhaul 了项目的代码签名、打包和 CI;最后但同样重要的是,添加了对 Apple Silicon 的原生支持,这是 Apple 今年初开始过渡的基于 ARM 的架构。

Python 是一种解释型、高级、通用编程语言。我们为 Python 打包/分发生态系统中的关键包贡献了一系列修复和新功能,包括 mypy、pip-api 和 Warehouse。我们还为 pyelftools(主导的 Python ELF 解析器)添加了 DWARFv5 支持。

Pwndbg 是一个 GDB 插件,使使用 GDB 进行调试“不那么糟糕”。我们在从命令解析到匿名页面映射方式等多个方面对 pwndbg 进行了改进和错误修复。

我们想承认,提交 PR 只是开源体验的一小部分。有人必须审查 PR。有人在 PR 合并后必须维护代码。早期 PR 的提交者必须编写测试以确保其代码功能得以保留。

我们贡献这些项目部分是因为我们热爱这门手艺,但也因为我们发现这些项目有用。为此,我们向开源社区致以最诚挚的感谢,并祝愿每个人 2022 年快乐、安全和富有成效!

Osquery 描述于 2022 年 1 月 3 日更新。

Trail of Bits 的 2021 开源贡献部分列表

  • assert-rs/assert_cmd
    添加 Assert 方法的 try_ 变体 #128
    功能:优化 append_context 边界 #130

  • aws/amazon-ecs-agent
    防止在调用 forceCloseConnection 时发生超时导致 goroutine 泄漏 #2854

  • Azure/azure-container-networking
    修复:防止在 internalapi.go 中 goroutine 泄漏 #850

  • cdisselkoen/llvm-ir
    添加 llvm_version 函数(解决 #13) #14
    llvm_version 中添加 llvm-13 情况 #17

  • CycloneDX/cyclonedx-python-lib
    模型/漏洞:修复可选类型 #61

  • dapphub/dapptools
    更新 hevm 依赖和 nixpkgs 到 21.05 #655

  • di/pip-api

    使用 pip list 的 JSON 输出用于 installed_distributions #93
    pip_api:类型提示 #97
    允许解析需求标记 #99
    允许 installed_distributions 过滤全局分发 #103
    添加支持解析 URL 需求 #109
    在调用 pip list 时支持 –path 参数 #112
    pip_api/_call:将所有调用传递 PIP_DISABLE_PIP_VERSION_CHECK #114

  • eliben/pyelftools
    dwarf:初始 DWARFv5 支持 #363

  • ESultanik/visie
    代码清理 #1

  • firemark/pixelopolis
    支持 bsd/posix 调用 #1

  • Gallopsled/pwntools
    修复 #1966:添加架构别名:x86-64 -> amd64 #1967

  • GaloisInc/FAW
    添加 Polytracker 文件详细视图插件 #35

  • haampie/libtree
    在使用 CMake Ninja 生成器时修复集成测试 #33

  • icedland/iced
    指示指令是否为“字符串”指令 #186

  • iovxw/gleipnir
    修复 rpc 服务器权限 #238

  • kgabis/parson
    修复解析嵌入空字节的键时的内存泄漏 #157

  • kubernetes/minikube
    Goroutine 泄漏修复 #11247

  • LLVM
    [BitcodeAnalyzer] 允许有动机的用户转储 BLOCKINFO (D107536)
    [clang] 在使用过滤器时修复 JSON AST 输出 (D108441)
    [docs] [NFC] 澄清数据布局文档 (D108962)
    [BitcodeReader] 修复向量类型元素验证中的逻辑错误 (D109655)

  • microsoft/hcsshim
    防止二进制命令失败完成时 goroutine 泄漏 #993

  • microsoft/vcpkg-tool
    二进制缓存:添加 NuGet 超时配置条目 #95

  • microsoft/vcpkg
    [vcpkg_configure_make] MacOS 假设目标架构是主机架构 #18632
    [docs] 在二进制缓存中描述 nugettimeout 选项 #19084

  • NixOS/nixpkgs
    echidna:初始版本 1.7.2 #106919
    pe-parse:初始版本 1.2.0 #107506
    liquidctl:初始版本 1.4.2 #108258
    python3Packages.slither-analyzer:0.6.14 -> 0.7.0 #108610
    uthenticode:初始版本 1.0.4 #109378
    pythonPackages.manticore:修复 darwin 上的测试 #112069
    nxpmicro-mfgtools:1.4.43 -> 1.4.72 #113516
    sgx-sdk:初始版本 2.14 #126990
    python3Packages.crytic-compile:0.1.13 -> 0.2.0 #130241
    haskellPackages.hevm:修复 #131059
    solc-select:初始版本 0.2.1 #131943
    protobuf:3.18.0 -> 3.19.0 #142096
    go:在 Darwin 上使用来自 Nix 的 tzdata #142494
    slither-analyzer:0.8.1 -> 0.8.2 #150058
    libff:修复在 aarch64 上的构建 #150850
    haskellPackages.sbv:修复在 aarch64 上的构建 #150855

  • nodejs/node
    http2:修复由于处理带有取消代码的 rst_stream 导致的双重释放 #39423
    http2:更新在 rst_stream 帧上处理流的方式 #39622

  • osquery/osquery
    移除未使用的 ev2 代码 #6878
    移除未使用/实验性的 ebpf 代码 #6879
    修复在 deregisterEventSubscriber 中的堆使用后释放 #6880
    修复发布订阅框架中的未定义行为和危险转换 #6881
    CI:添加对 GitHub Actions 的支持 #6885
    减少来自 libarchive 的编译单元 #6886
    修复在查询 deb_packages 表时 libdpkg 中的泄漏 #6892
    [macOS][CI] 更新 XCode 到 12.3 并更新最低 macOS 版本到 10.12 #6896
    修复用于 64 位时间戳变量的数据类型宏 #6897
    禁用增量链接以减少 Windows 上的构建大小 #6898
    拼写检查和 Markdown 小问题 #6899
    移除未使用的 Rocksdb 和 Inmemory db 插件测试 #6900
    修复源代码中的拼写错误 #6901
    将 libdpkg 子模块 URL 更改为我们自己的 GitHub 镜像 #6903

    CMake:在 posix 平台上添加 -pthread 编译选项 #6909
    禁用已弃用的 TLS 版本 1.0, 1.1 #6910
    GitHub Actions:使用 Xcode 12.3, SDK 10.12 #6913
    显著加速 CMake 配置阶段 #6914
    添加由配置策略管理的系统扩展列(system_extensions 表) #6915
    重命名 yara 字符串函数以避免符号冲突 #6917
    移除未使用的空测试文件 #6918
    GitHub Actions:修复 .deb 工件,添加计划构建 #6920
    将打包逻辑移动到 osquery-packaging #6921
    修复 SystemControlsTest 添加 sunrpc 作为预期子系统 #6932
    文档:修复对 Windows 上 Powershell 脚本的引用 #6936
    修复由于意外值导致的 StartupItemTest 失败 #6940
    修复由于意外属性名称导致的 XattrTests 失败 #6941
    修复由于意外属性导致的 ExtendedAttributesTableTests 失败 #6942
    修复 StartupItems 测试中的不正确检查 #6950
    改进事件控制标志的解释 #6954
    更新 Linux 安装步骤和包列表 #6956
    更新关于 osquery 的 TLS 版本支持的信息 #6963
    修复 Windows sids API 的内存泄漏回归 #6984
    始终使用 BIGINT 宏用于 ’long long’ 数据 #6986
    使 Windows 表中的组 ID 列一致 #6987
    文档:将关于 Azure Pipelines 的引用更改为 GitHub Actions #6988
    [打包] 移除 macOS 上 augues 的多余镜头目录 #6998
    文档:添加关于启用 Windows 以使用 CMake 的长路径构建的说明 #7010
    库:更新 OpenSSL 到版本 1.1.1k #7026
    纠正关于 OpenSSL 和 TLS 行为的文档 #7033
    移除支持使用旧版本 OpenSSL 构建的 Buck 遗留物 #7034
    纠正 windows_events 表规范中的示例 #7035
    改进关于 FIM 的文档,提及 NTFS 和审计等 #7036
    添加一个选项以在 Windows 上启用增量链接 #7044
    [macOS] 基于 EndpointSecurity 的进程事件 #7046
    文档:添加安全保证案例 #7048
    修复文档中的 tls_enroll_max_attempts 标志名称 #7049
    使用独立的 CPack 打包 #7059
    纠正打开失败时的 RocksDB 错误代码和子代码打印 #7069
    在加载失败时打印扩展 sdk 所需的最低版本 #7074
    修复扩展在关闭时崩溃 #7075
    提高 osquery 关闭过程的速度 #7077
    移除重复的 osquery_utils_aws_tests-test #7078
    CI:当编译器版本更改时重新生成 sccache 缓存 #7081
    [AWS] 添加对 IMDSv2(实例元数据服务)的支持 #7084
    文档:更新进程审计要求 #7102
    提高初始化期间的关闭速度 #7106
    看门狗应等待工作线程关闭 #7116
    chrome_extensions:从 ‘key’ 属性计算标识符 #7124
    实现无限注册重试 #7125
    在 Windows 上移除仅 POSIX 的 -fexceptions 标志 #7126
    修复递归日志记录支持中的崩溃和死锁 #7127
    少量清理未使用的变量 #7128
    修复在 chocolatey 部署期间应用 ACL 的问题 #7166
    文档:使 YARA 维基页面保持最新 #7172
    库:更新 ebpfpub 库 #7173
    [库][yara] 在 macOS 上启用并编译 macho 模块 #7174
    修复在安装或升级期间发生错误时 choco 不失败的问题 #7182
    修复向记录器插件广播空日志的问题 #7183
    更新 macOS 构建以包括应用捆绑包相关文件 #7184
    库:更新 Strawberry Perl 到 5.32.1.1,使用 HTTPS 下载 #7199
    防止关闭与工作线程或扩展启动之间的竞争条件 #7204
    [AWS] 可选启用调试选项并限制 PUT 请求的内容类型头大小 #7216
    库:更新 ebpfpub #7219
    修复 Linux 上 osquery_info build_platform 列值 #7254
    [macOS][打包] 更新打包仓库提交以修复 #7236 相关修复 #7255
    [macOS][打包] 创建应用捆绑包以及其他 package_data #7263
    审计:socket_events 改进 #7269
    [linux][打包] 更新打包路径 #7271
    更改 logger_mode 标志以实际解释为八进制 #7273
    更新打包 SHA #7279
    在代码中更新 osquery 安装工件的默认路径 #7285
    在文档中更新 osquery 安装工件的路径 #7286
    macOS 路径修复在 launchd plist 中 #7288
    在 osqueryctl 和文档中纠正 macOS 安装的应用捆绑包路径 #7289
    库:更新 OpenSSL 到版本 1.1.1l #7293
    防止 osquery 在使用 –force 标志时杀死自己 #7295
    bpf:提高发布者可靠性 #7302
    文档:更新 macOS ESF 文档 #7303
    更新安装指南以使用较新的 macOS 路径 #7311
    修复在 macOS 11 及更高版本上的 ASL 测试 #7320
    Apple Silicon 支持 #7330
    在循环遍历 cron 搜索目录时避免字符串复制 #7331
    更新 CI Linux Docker 镜像 #7332
    Windows:检测扩展何时未启动 #7355
    当目标为 10.13+ SDK 时跳过已弃用的 ASL 测试 #7358
    对 GitHub 问题模板的小修复 #7361
    在使用 ssdeep 进行哈希时尊重 read_max 标志 #7367
    在 Windows 打包中恢复查询包 #7388
    修复当 windows_security_products 出错时崩溃 #7401
    CI:更新打包提交以修复 Linux 符号链接 #7404
    防止在模糊测试时运行发现查询 #7418
    修复我们在模糊测试初始化方法中禁用表的方式 #7419
    修复 thirdparty_sleuthkit 的链接 #7425
    更新 sqlite 到版本 3.37.0 #7426

  • paritytech/substrate
    node-template:从运行时中移除冗余类型 #9161

  • pwndbg/pwndbg
    format_args:显示 fd 路径 #825
    修复 #858 #877
    修复 #881 #883
    vmmap:命名匿名页面 #933
    修复 #946 当寄存器值解引用失败时的上下文 #948
    添加 memoize 命令用于切换缓存,对调试 pwndbg 有用 #951
    添加 attachp 命令 #965
    移除 shebang 和编码行 #972
    移除 Py2 类对象继承 #973
    修复 #932,#788:修复命令解析 #974
    当无法附加时跳过 attachp 测试 #975
    修复 #932,#788:修复命令解析 #976

  • pypa/warehouse
    api-reference/json:在响应中记录 vulnerabilities #10431

  • pysmt/pysmt
    修复以正确将逻辑传递给由 Portfolio 启动的求解器 #683

  • python/mypy
    mypy/build:在 load_tree 中使用 _load_json_file #11575

  • rust-fuzz/afl.rs
    在运行时扩展 CARGO 环境变量 #184
    在 CI 中测试稳定版和夜间版 #194
    在 rustc 1.57 上处理旧 LLVM 传递管理器 #197

  • rust-lang/rust-clippy
    添加 format_in_format_argsto_string_in_format_args 检查 #7743
    修复 #7903 #7906
    添加 unnecessary_to_owned 检查 #7978

  • rust-lang/rust
    更新 Clippy 依赖项而不带补丁版本 #88517
    实现 #85440(随机测试排序) #89082
    将真实的 crate 级属性传递给 pre_expansion_lint #89214

  • rustsec/advisory-db
    parse_duration:通过具有大指数的负载进行 parse DoS #827

  • samuelcolvin/pydantic
    文档(模式):修复一个标注 #2620

  • Smithay/udev-rs
    库, 设备:开始使用 list::List 而不是自定义结构 #22

  • solana-labs/rbpf
    修复验证器移位指令溢出 imm 值 #

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计