Trail of Bits发布osquery扩展仓库
今天我们正式开放维护的osquery扩展仓库。首个扩展利用Duo Labs的EFIgy API来检测Mac设备群的EFI固件是否处于最新状态。
目前公开的osquery扩展案例极少,相关文档也严重缺乏。本文旨在帮助开发者掌握编写osquery扩展的完整流程,重点介绍EFIgy扩展的具体实现方案。
EFIgy技术背景
在今年的Ekoparty大会上,Duo Labs发布了关于EFI固件支持状况和安全性的研究成果。这些软件组件对攻击者极具吸引力,因其运行权限级别甚至超过操作系统和虚拟机监控程序。Duo Labs收集分析了苹果近三年所有公开更新,并通过检查73,000多台Mac设备验证数据。
研究发现大量设备运行过时固件,即使主机已正确安装本应包含EFI更新的操作系统补丁。为此Duo Labs创建了EFIgy服务——通过逻辑板ID和产品名称等参数,可访问任何已知苹果产品最新OS和EFI版本的REST端点。
编程查询EFIgy
EFIgy要求传入包含目标系统详情的JSON对象,核心参数包括硬件型号和软件版本:
|
|
其中rom_ver参数需特殊处理:只需提取点分隔符后的第一、三、四字段。hashed_uuid需将主网卡MAC地址前缀与系统UUID拼接后进行SHA256哈希计算。
通过HTTP POST请求将JSON数据发送至端点https://api.efigy.io/apple/oneshot,服务器返回包含三个JSON对象的响应,用于比对系统更新状态。
开发osquery扩展
为避免手动批量执行EFIgy查询,我们基于Chris Long的创意开发了osquery扩展。选择扩展而非虚拟表的原因在于:所有依赖外部服务或非原生组件的功能均默认采用扩展实现。
开发环境仅限标准库和手动导入的依赖,osquery采用静态链接方式。特别注意不能依赖运行时动态库加载。
表扩展开发需继承osquery::TablePlugin类并重写两个核心方法:
|
|
源文件需放置在osquery/external下以extension_为前缀的目录中。复杂项目可通过ADD_OSQUERY_EXTENSION函数创建CMake编译目标。
使用扩展仓库
我们建立了专属仓库托管扩展代码,EFIgy扩展为首个可用项目。使用前需先克隆osquery完整源码,通过符号链接将扩展源文件链接至osquery/external/extension_<name>目录后执行标准编译流程:
|
|
可通过--extension参数加载扩展进行测试。扩展作为独立可执行文件,启动后会自动通过Thrift协议与osquery实例连接并暴露新功能。
行动指南
如果您拥有Mac设备群,现在即可通过osquery和EFIgy扩展监控所有终端设备的软固件更新状态。欢迎访问我们的osquery扩展仓库获取最新资源,也欢迎通过GitHub提交扩展创意或联系定制开发需求。