2021年10月現在、Linuxのパッケージマネージャ管理下のソフトウェアの脆弱性は以下の方法で可能です。
それぞれの特徴を説明します。
Vulsのスキャナ経由でスキャンし構成情報をクラウドサービスにアップロードする方法です。 スキャン対象は対応環境を参照してください。
コンテナレジストリにあるイメージは、trivyを用いて検知し、FutureVulsにアップロードする方法がおすすめです。CI/CDパイプラインに組み込みも可能です。 スキャン対象は対応環境を参照してください。
クラウドサービスのコンテナレジストリと連携する方法も用意しています。こちらはAWS・GCPのDockerRegistryに対応しています。 スキャン対象は対応環境を参照してください。
ペーストスキャンは、スキャナの導入が難しい環境の脆弱性管理が可能です。
サーバ上で構成情報を取得するいくつかのコマンドを実行し、コマンドの実行結果をFutureVuls画面上にコピーペーストするだけで登録完了です。
FutureVuls APIを用いるとREST APIでペーストサーバを作成・更新可能です。
構成情報の登録〰脆弱性スキャン実施までのステップを説明します。
サーバ追加
> PASTEサーバ追加
スキャン対象は対応環境を参照してください。
PASTEサーバ追加
サーバ名・OSの種類などを入力・ペースト
インストールされたパッケージリストをペースト
登録後は画面上から手動スキャンをクリックすると脆弱性を検知できます。
「ペーストスキャンで登録したサーバ」にパッケージのアップデートを適用して「構成情報を更新」した場合、FutureVulsに構成情報の再連携が必要となります。
「サーバ」タブで該当のサーバを選択し、「Pasteサーバの構成情報を更新 > 構成情報を更新」を選択してください。
次回スキャン時に、更新された構成情報を元にした脆弱性検知処理が実行されます。パッケージアップデートにより解消されたタスクは、PATCH_APPLIED
ステータスに自動更新されます。
更新をすぐに適応したい場合には「手動スキャン」をご利用ください。
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 |
Info | Command |
---|---|
OS Version | cat /etc/redhat-release |
Kernel Release | uname -r |
Packages | rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n" |
Info | Command |
---|---|
OS Version | cat /etc/redhat-release |
Kernel Release | uname -r |
Packages | rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n" |
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}" |
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" |
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" |
Info | Command |
---|---|
OS Version | cat /etc/fedora-release |
Kernel Release | uname -r |
Packages | rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n" |
Info | Command |
---|---|
OS Version | cat /etc/redhat-release |
Kernel Release | uname -r |
Packages | rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n" |
Info | Command |
---|---|
OS Version | cat /etc/redhat-release |
Kernel Release | uname -r |
Packages | rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n" |
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の画面にてペーストサーバ作成用のダイアログ表示して確認してください。
Linuxのパッケージはバックポートの仕組みでアップデートが提供されます。 FutureVulsでは、Linuxディストリビューターが提供するSecurity TrackerやOVALを用いて検知処理を行います。 これらの脆弱性DBは、各OSに対応する「実際にバックポートされたバージョン番号」が書かれているため、正確に検知できます。
各スキャン方法の詳細な検知ロジックはOSSのソースコードを参照してください。
また、OSやパッケージのCPEを登録して正確に脆弱性を検知できますか、とよく質問されます。 以下の理由により誤検知が多発するためOSパッケージはCPEスキャンでは非推奨です。 詳細をFAQ>CPEスキャンに記載しましたので気になる方は一読ください。