1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

えっ 私のアプリ、脆弱すぎ...? SBOMを使ってライブラリの脆弱性を見つける

Last updated at Posted at 2024-08-30

やりたいこと

日々の開発業務の中で、自分のコードに脆弱性を埋め込まないか、というところはわりと気を使っていることが多いですが、使っているフレームワークやライブラリが古く、そちらに脆弱性が含まれていた...というのがしばしばあります。

自分が使っているライブラリが何で、どのバージョンを使用しているかは把握できますが、そのライブラリが使用しているライブラリ・バージョンが何かまではなかなか意識できていません。でもそれらのライブラリに脆弱性があるかもしれません。

SBOM関連のツールを使用して、脆弱性があるライブラリを使用してないかチェックしてみます

SBOMは、ソフトウエアがどのようなコンポーネントを使用しているか、その依存関係やライセンスとともに一覧化したものらしいです

やってみる

題材として、ちょっと古いバージョンのライブラリを使用するアプリを作成します。
(プログラムの内容は問題ではないので、WebAPIのプロジェクトを作成し実装はデフォルトのままにしました)

WebApplication1.csproj
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>47bdee1b-a936-400a-a583-b43929721ed4</UserSecretsId>
  </PropertyGroup>

  <!-- 古いライブラリを参照 -->
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.SignalR" Version="1.4.0" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
  </ItemGroup>

</Project>

このアプリのからSBOMを生成し、リストに記載されたコンポーネントから脆弱性のあるものを取得してみます
フリーなツールが充実しているCycloneDX形式を使用します

SBOMを生成

下記のツールを使用します。slnファイルを食わせるとSBOMを出力してくれます

下記で実行します。公式のコンテナイメージが提供されているのでそれを使用しています


#カレントフォルダをコンテナに/workとしてマウントし、slnファイルを指定
#出力先はカレントフォルダ配下にoutフォルダを作成してそこに出力
docker run --rm -it -v %cd%:/work cyclonedx/cyclonedx-dotnet /work/WebApplication1.sln -o /work/out 

実行するとoutフォルダが作成され、その中にSBOMのファイルが出力されます

image.png

ライブラリの脆弱性を検索

下記のツールを使用します。CycloneDXの形式のSBOMをインプットに、OSVなどの脆弱性のデータベースを検索してくれます。

下記のようにコンテナイメージを作成し、ローカルを汚さず実行できるようにします

Dockerfile
FROM debian

#githubからパッケージをダウンロードしてインストール(あまり行儀良くない..)
RUN apt update && apt install -y curl && curl -L https://github.com/devops-kung-fu/bomber/releases/download/v0.4.8/bomber_0.4.8_linux_amd64.deb > package.deb && apt install ./package.deb && rm package.deb && apt remove -y curl && apt -y autoremove

下記で実行します

#コンテナイメージを作成
docker build -t localbomber .

#作成したイメージを使って実行 先ほど作成したSBOMファイルを指定してスキャン
docker run -v %cd%:/work --rm -it localbomber bomber scan /work/out/bom.xml

実行すると、下記のように見つかった脆弱性が一覧化されます。
重大度HIGHのものが2つありますね...

image.png

修正・再スキャン

新しいバージョンのライブラリを参照するよう修正して再挑戦します

Webapplication1.csproj(変更後)
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>47bdee1b-a936-400a-a583-b43929721ed4</UserSecretsId>
  </PropertyGroup>

  <!-- 新しいバージョンに変更 -->
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.SignalR" Version="1.27.0" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.7.3" />
  </ItemGroup>

</Project>

SBOMの生成・スキャンを再実行すると脆弱性の指摘はなくなりました!

image.png

やってみた感想

  • 日々新しい脆弱性が見つかるので、継続的なウォッチが必要。CIなどに組みこめるとよさそうと思った
  • CycloneDXでは、SBOMを一元管理するシステムが提供されているようなので、組織的に管理するのもよさそう。大変そうだけど
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?