.NET 7 Web API依赖库识别与SBOM生成问题及DTrack适配诉求
.NET 7应用SBOM生成与Dependency Track误报问题
我使用Dependency Track(DTrack)检测应用安全风险,需要为应用生成SBOM,但过程中遇到了一系列问题,具体场景如下:
场景示例
- 创建空白.NET 7 WebAPI应用:
dotnet new webapi -o TodoApi - 添加NuGet包
MongoDB.Driver.Core,该包引入了隐式依赖System.Memory - V4.5.5
第一次SBOM生成问题
使用syft或sbom-tool生成的SBOM包含如下System.Memory条目:
<component bom-ref="pkg:nuget/System.Memory@4.5.5?package-id=0f5664b7f3521e96" type="library"> <name>System.Memory</name> <version>4.5.5</version> <cpe>cpe:2.3:a:System.Memory:System.Memory:4.5.5:*:*:*:*:*:*:*</cpe> <purl>pkg:nuget/System.Memory@4.5.5</purl> <properties> <property name="syft:package:foundBy">dotnet-deps-cataloger</property> <property name="syft:package:language">dotnet</property> <property name="syft:package:metadataType">DotnetDepsMetadata</property> <property name="syft:package:type">dotnet</property> <property name="syft:location:0:layerID">sha256:650b301b26d84cbba0f7c215211bc5ec3c4bb429d93362505698d99a8c2f9d1e</property> <property name="syft:location:0:path">/app/ToDoApi.deps.json</property> </properties> </component>
实际情况是,这个System.Memory 4.5.5并没有被包含在构建或发布的应用产物中,应用真正使用的是.NET 7框架自带的System.Memory.dll(发布独立应用时会被复制到输出文件夹)。但DTrack会针对这个未被使用的依赖发出安全警告,且生成的SBOM中完全没有列出任何框架DLL,而这些框架DLL明明是WebAPI的核心组成部分。
使用新目录器后的问题
syft新增了dotnet-portable-executable-cataloger目录器,配置后可以生成包含所有框架DLL的SBOM,其中System.Memory的条目如下:
<component bom-ref="pkg:nuget/System.Memory@7.0.1023.36312?package-id=58ade9d797b85bfa" type="library"> <name>System.Memory</name> <version>7.0.1023.36312</version> <cpe>cpe:2.3:a:System.Memory:System.Memory:7.0.1023.36312:*:*:*:*:*:*:*</cpe> <purl>pkg:nuget/System.Memory@7.0.1023.36312</purl> <properties> <property name="syft:package:foundBy">dotnet-portable-executable-cataloger</property> <property name="syft:package:metadataType">DotnetPortableExecutableMetadata</property> <property name="syft:package:type">dotnet</property> <property name="syft:location:0:layerID">sha256:c7a4596c3ec7605d9c1a841ff4f0ab3b599cca6d7bc04347e2e6037448cd0ec2</property> <property name="syft:location:0:path">/usr/share/dotnet/shared/Microsoft.NETCore.App/7.0.10/System.Memory.dll</property> </properties> </component>
这个版本号和DLL的文件版本一致,但该版本在NuGet包管理器中并不存在。更离谱的是,DTrack居然提示我将7.0.10版本升级到最新的4.5.5版本。
疑问与需求
疑问
- 为什么SBOM生成工具会添加版本错误的库到SBOM中?
- 版本差异如此巨大,应用为何还能正常运行?
- 为什么存在与.NET框架库同名但版本完全不同的NuGet包?
需求
我需要让DTrack能够准确检测到应用实际使用的所有库(包括框架DLL)的安全问题,同时自动排除那些未被实际使用的依赖。希望能得到上述疑问的解答。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

