Help us understand the problem. What is going on with this article?

Vulsはどうやって脆弱性を見つけるか

More than 1 year has passed since last update.

はじめに

Vulsがどうやってインストールされたパッケージとそのバージョンに対応するCVEを見つけ出すのか疑問に思いました。
GolangもVulsも何も分からないので間違ってたら突っ込んでください

関数呼び出しリスト(?

こういうときどういう図にすれば良いかわかんないですね…
ローカルのCentOSをDeep Scanする場合を仮定しています。主要なものだけ抜き出してます。
()は深さ?みたいなもののつもりです

(0) commands/scan.go Execute

vuls scanされたとき呼び出される

(1) scan/serverapi.go Scan

serverapiは全部のOSのベース

(2) scan/serverapi.go scanVulns

Vulnsvulnerabilitiesの略

(3) scan/redhatBase.go scanPackages

serverapiを継承?したやつ。
CentOSredhat系なのでここ。スキャンするパッケージを探し、スキャンする

(4) scan/redhatBase.go scanInstalledPackages

rpm -qaコマンドを実行し、インストールされているパッケージのNAME,EPOCH,VERSION,RELEASE,ARCHを取得する

(4) scan/redhatBase.go scanUpdatablePackages

rpmquery --pkgnarrow=updatesを実行し、インストールされているパッケージのうちアップデート可能なもののNAME,EPOCH,VERSION,RELEASE,ARCHを取得する。

(4) scan/redhatBase.go scanUnsecurePackages

アップデート可能なパッケージのうち、インストールされているパッケージから最新のパッケージまでの間で修正されているCVEを取得する
Vulsがどういうソフトか理解して無くてこれに気づくのに時間がかかった…

(5) scan/redhatBase.go fillChangelogs

CentOSの場合は、ChangelogからしかCVEの修正情報が取得できないので、まずはChangelogを集める

(6) scan/redhatBase.go fillDiffChangelogs

ここでいうDiffは、バージョン間の差分という意味っぽい

(7) scan/redhatBase.go getDiffChangelog

もしインストールされているの以上のバージョンのChangelogがあれば、そのChangelogを返す。
無ければepochを抜いてもう一度試す
見つからなければエラー

(6) scan/redhatBase.go scanChangelogs

ChangelogからCVEIDを探す

(3) scan/base.go convertToModel

VulnInfoScanReport.ScannedCvesに入れる

後はWebから見るなりTUIから見るなりご自由に

おわりに

ここまでで、現在インストールされているバージョン以降で修正されたCVE IDのリストを取得できました。

  • その修正されたCVEが現在インストールされているバージョン向けなのか?
    • OVALで見ているような気がする…。goval-directoryを見る限り、CVE毎にstart_version:end_versionのデータがあるっぽいので大小比較してる…?
  • そのパッケージが対象だが未修正のCVEはどうするのか
    • 修正されてないんだから対応しようがないのでは?もしくはパッケージ名とバージョンから、上と同じようにOVALでCVEを取得しているのかも

個人的にはChangelogからCVEを抽出するのがなるほどという感じでした

sudnonk12
大学生 基本情報技術者/応用情報技術者/ネットワークスペシャリスト/プロジェクトマネージャ/データベーススペシャリスト/情報処理安全確保支援士/線路主任技術者
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした