Linux OSパッケージスキャン

2021年10月現在、Linuxのパッケージマネージャ管理下のソフトウェアの脆弱性は以下の方法で可能です。

  • Vulsスキャン
  • trivyスキャン(Dockerイメージ)
  • ペーストスキャン

それぞれの特徴を説明します。

Vulsスキャン

Vulsのスキャナ経由でスキャンし構成情報をクラウドサービスにアップロードする方法です。 スキャン対象は対応環境を参照してください。

コンテナスキャン

コンテナレジストリにあるイメージは、trivyを用いて検知し、FutureVulsにアップロードする方法がおすすめです。CI/CDパイプラインに組み込みも可能です。 スキャン対象は対応環境を参照してください。

クラウドサービスのコンテナレジストリと連携する方法も用意しています。こちらはAWS・GCPのDockerRegistryに対応しています。 スキャン対象は対応環境を参照してください。

ペーストスキャン

ペーストスキャンは、スキャナの導入が難しい環境の脆弱性管理が可能です。

  • インターネットから隔離された閉域環境
  • 外部SaaSへのアップロードが禁止された環境
  • スキャナプログラムをサーバ上に配置できない環境

サーバ上で構成情報を取得するいくつかのコマンドを実行し、コマンドの実行結果をFutureVuls画面上にコピーペーストするだけで登録完了です。

ペーストスキャンの登録方法

構成情報の登録〰脆弱性スキャン実施までのステップを説明します。

  • サーバ > サーバ追加 > PASTEサーバ追加
  • サーバ名を入力
  • OSの種類を選択
  • OSのバージョン情報をペースト
  • 実行中のカーネルリリースの情報をペースト
  • インストールされたパッケージリストをペースト
  • サーバ詳細画面の「手動スキャン」をクリック

スキャン対象は対応環境を参照してください。

PASTEサーバ追加 PASTEサーバ追加ボタン

サーバ名・OSの種類などを入力・ペースト image

インストールされたパッケージリストをペースト image

登録後は画面上から手動スキャンをクリックすると脆弱性を検知できます。

パッケージアップデートによるペーストサーバの更新

「ペーストスキャンで登録したサーバ」にパッケージのアップデートを適用して「構成情報を更新」した場合、FutureVulsに構成情報の再連携が必要となります。
サーバ」タブで該当のサーバを選択し、「Pasteサーバの構成情報を更新 > 構成情報を更新」を選択してください。

次回スキャン時に、更新された構成情報を元にした脆弱性検知処理が実行されます。パッケージアップデートにより解消されたタスクは、PATCH_APPLIED ステータスに自動更新されます。

更新をすぐに適応したい場合には「手動スキャン」をご利用ください。

ペーストサーバ登録に必要な情報と取得方法

Windows

Info Command
Kernel Version $CurrentVersion = (Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion"); @($CurrentVersion.CurrentMajorVersionNumber, $CurrentVersion.CurrentMinorVersionNumber, $CurrentVersion.CurrentBuildNumber, $CurrentVersion.UBR) -join '.'
KBIDs (Get-Hotfix | Select-Object -Property HotFixID | % { If ($_ -match '(KB\d{6,7})') { $Matches[0] }}) -Join ','
Packages Get-Package | Format-List -Property Name, Version, ProviderName

Red Hat Enterprise Linux

Info Command
OS Version cat /etc/redhat-release
Kernel Release uname -r
Packages rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n"

Amazon

Info Command
OS Version awk '{if ($0 ~ /Amazon Linux release (2022|2023)/) print $4; else if ($0 ~ /Amazon Linux release 2/) printf("%s %s\n",$4, $5); else if ($0 ~ /Amazon Linux 2/) for (i=3; i<=NF; i++) printf("%s “, $i); else if (NF==5) print $5}' /etc/system-release'
Kernel Release uname -r
Packages rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n"
Packages
if version is 2
repoquery --all --pkgnarrow=installed --qf="%{NAME} %{EPOCH} %{VERSION} %{RELEASE} %{ARCH} %{UI_FROM_REPO}"

Debian

Info Command
OS Version cat /etc/debian_version
Kernel Version dpkg-query -W -f="\${Version}\n" linux-image-$(uname -r)
Kernel Release uname -r
Packages dpkg-query -W -f="\${binary:Package},\${db:Status-Abbrev},\${Version},\${source:Package},\${source:Version}\n"

Ubuntu

Info Command
OS Version lsb_release -sr
Kernel Release uname -r
Packages dpkg-query -W -f="\${binary:Package},\${db:Status-Abbrev},\${Version},\${source:Package},\${source:Version}\n"

Fedora

Info Command
OS Version cat /etc/fedora-release
Kernel Release uname -r
Packages rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n"

Alma

Info Command
OS Version cat /etc/redhat-release
Kernel Release uname -r
Packages rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n"

Rocky

Info Command
OS Version cat /etc/redhat-release
Kernel Release uname -r
Packages rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n"

OpenSUSE、SLES、SLED

Info Command
OS Version grep -oP '(?<=VERSION_ID=”).+(?=")' /etc/os-release
Kernel Release uname -r
Packages rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n"

上記以外のOSを登録したい場合は、FutureVulsの画面にてペーストサーバ作成用のダイアログ表示して確認してください。

OSパッケージスキャンの仕組み

Linuxのパッケージはバックポートの仕組みでアップデートが提供されます。 FutureVulsでは、Linuxディストリビューターが提供するSecurity TrackerやOVALを用いて検知処理を行います。 これらの脆弱性DBは、各OSに対応する「実際にバックポートされたバージョン番号」が書かれているため、正確に検知できます。

各スキャン方法の詳細な検知ロジックはOSSのソースコードを参照してください。

また、OSやパッケージのCPEを登録して正確に脆弱性を検知できますか、とよく質問されます。 以下の理由により誤検知が多発するためOSパッケージはCPEスキャンでは非推奨です。 詳細をFAQ>CPEスキャンに記載しましたので気になる方は一読ください。