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

本文详细介绍了Trail of Bits在2021年对LLVM、Nixpkgs、Osquery等关键开源项目的190多项技术贡献,涵盖编译器优化、安全监控增强、包管理修复及跨平台支持,体现了对软件生态安全的深度投入。

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

在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做出了众多贡献,最显著的是基于新的Endpoint Security 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

  • 修复pubsub框架中的UB和危险转换 #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

  • [packaging] 移除macOS上augues的额外lenses目录 #6998

  • 文档: 添加关于启用Windows以使用CMake的长路径构建的说明 #7010

  • libs: 更新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

  • Watchdog应等待worker关闭 #7116

  • chrome_extensions: 从’key’属性计算标识符 #7124

  • 实现无限注册重试 #7125

  • 在Windows上移除仅POSIX的-fexceptions标志 #7126

  • 修复在支持递归日志记录时的崩溃和死锁 #7127

  • 未使用变量的次要清理 #7128

  • 修复在chocolatey部署期间应用ACL的问题 #7166

  • 文档: 使YARA维基页面保持最新 #7172

  • libs: 更新ebpfpub库 #7173

  • [libs][yara] 在macOS上启用并编译macho模块 #7174

  • 修复在安装或升级期间发生错误时choco不失败的问题 #7182

  • 修复向记录器插件广播空日志的问题 #7183

  • 更新macOS构建以包括应用包相关文件 #7184

  • libs: 更新Strawberry Perl到5.32.1.1,使用HTTPS下载 #7199

  • 防止关闭与worker或扩展启动之间的竞争条件 #7204

  • [AWS] 可选启用调试选项并限制PUT请求的内容类型头大小 #7216

  • libs: 更新ebpfpub #7219

  • 修复Linux上osquery_info build_platform列值 #7254

  • [macOS][packaging] 更新打包仓库提交以修复#7236相关问题 #7255

  • [macOS][packaging] 创建应用包以及其他package_data #7263

  • audit: socket_events改进 #7269

  • [linux][packaging] 更新打包路径 #7271

  • 更改logger_mode标志以实际解释为八进制 #7273

  • 更新打包SHA #7279

  • 更新代码中osquery安装工件的默认路径 #7285

  • 更新文档中osquery安装工件的路径 #7286

  • macos路径在launchd plist中修复 #7288

  • 纠正osqueryctl和文档中的macOS安装应用包路径 #7289

  • libs: 更新OpenSSL到版本1.1.1l #7293

  • 防止在使用–force标志时osquery杀死自己 #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 当reg值解引用失败时的上下文 #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 lint #7743
  • 修复#7903 #7906
  • 添加unnecessary_to_owned lint #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

  • lib, device: 开始使用list::List而不是自定义结构 #22

solana-labs/rbpf

  • 修复验证器移位指令溢出imm值 #212

SRI-CSL/gllvm

  • extractor: 使提取错误致命 #37
  • 不将-w/-W视为仅编译指示器 #43
  • 支持LLVM_LINK_FLAGS #51
  • extractor, utils: 在链接前重复数据删除位码路径 #54
  • get-bc: 调整LogInfo消息 #55

taiki-e/cargo-llvm-cov

  • 实现–failure-mode选项 #91
  • 使用–target-dir代替CARGO_TARGET_DIR #112

WLBF/single-instance

  • 在Linux上使用抽象命名空间UDS #7

ZenGo-X/rust-paillier

  • 添加一些逻辑以更有效地采样安全素数 #17

如果你喜欢这篇文章,分享它: Twitter LinkedIn GitHub Mastodon Hacker News

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