コンテンツにスキップ

.NETプロジェクト: セキュリティスキャンのベストプラクティス

Aikido は、.NETの依存関係に含まれる既知の脆弱性(CVE)に加え、それらの依存関係が使用するマルウェアや危険なライセンスも検出できます。

Aikido はどのようにしてこれらの依存関係とその推移的な副依存関係(transitive subdependencies)を見つけているのでしょうか。

Aikido はデフォルトで、以下のファイルのスキャンをサポートしています。

  • *.csproj
  • *.deps.json
  • packages.lock.json
  • packages.config
  • packages.props
  • paket.lock

.csproj ファイルには、副依存関係の正確なバージョンが記載されていないことが多い点に注意が必要です。これにより、Aikido が副依存関係で誤検知のCVEを検出することがあります。

ロックファイルの利用を始めるべき理由

Section titled “ロックファイルの利用を始めるべき理由 ”

各NuGetの依存関係と副依存関係について、バージョンとハッシュを含むロックファイルを使用することを推奨します。

Aikido のセキュリティスキャンを容易にすること以外にも、ロックファイルを使用すべき理由があります。

  • ロックファイルを使用することで、悪意のあるパッケージによるサプライチェーン攻撃から保護されます。この種の攻撃は増加傾向にあります
  • ロックファイルを使用することで、全員が全く同じマイナーバージョンのパッケージを使用するためビルドがより予測可能になります。「自分の環境では動く」という事態が起きにくくなります
  • ビルド時間の短縮: 依存関係解決が不要になります

.NETプロジェクトでロックファイルの利用を始めるには?

Section titled “.NETプロジェクトでロックファイルの利用を始めるには? ”

ロックファイルを作成するには、.csproj ファイルに以下の行を追加する必要があります。

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Generate the lock file -->
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
<!-- Restore the exact packages as listed in the lock file -->
<RestoreLockedMode Condition="'$(ContinuousIntegrationBuild)' == 'true'">true</RestoreLockedMode>
</PropertyGroup>
<ItemGroup>
...
</ItemGroup>
</Project>

これらの行を追加したら、以下を実行します。

dotnet.exe restore

これにより、リポジトリにコミットできるロックファイル(packages.lock.json)が生成されます。NodeJSの世界でNPMのpackage-lock.jsonファイルを扱うのと同様に、このファイルを手動で編集してはいけません。

既存のロックファイルを使ってrestoreするには、以下を実行します。

dotnet.exe restore --locked-mode