Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@sudnonk12

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

はじめに

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を抽出するのがなるほどという感じでした

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
2
Help us understand the problem. What are the problem?