はじめに
みなさんは、利用しているソフトウェアパッケージの脆弱性について、どのように対応を行なっていますか。 一口にソフトウェアパッケージの脆弱性対応と言っても、OSのパッケージ管理ツールでインストールした場合や、ソフトウェアベンダーから提供されたインストールスクリプトを使ってインストールした場合など、管理方法によって対応は異なります。 今回は、Red Hat系OSのパッケージ管理ツールでインストールしたソフトウェアパッケージを例に、所属チーム内でどのように検知や影響調査を行なっているかを挙げていきたいと思います。
久しぶりに北海道に行ってみたい。
脆弱性対応開始のトリガー
脆弱性についての情報を入手するチャンネルはいくつかありますが、OSのパッケージ管理ツールでインストールしたソフトウェアについては、多くの場合OSベンダーが提供するセキュリティー情報をウォッチすることから始まります。
OSベンダーのセキュリティ情報をウォッチ
各OSベンダーから複数のチャネル(Webサイト、RSSフィード、Web API等)でセキュリティ情報が提供されていますので、これらをウォッチすることで脆弱性に関する情報を検知することができます。
- Amazon Linux
- Red Hat Enterprise Linux
取得できる脆弱性情報にはソフトウェアパッケージ名と重要度(Severity)、日付がセットされています。 ですので、RSSフィードやWeb APIを定期的に参照して任意の条件(例えば、過去1週間以内に登録された重要度が Important 以上)の脆弱性情報のみを取得するといったことが可能です。 チーム内ではAWS Lambdaを利用して、取得した脆弱性情報を関係者に自動通知する形で運用しています。
脆弱性の詳細については、取得した脆弱性情報の他にも JVN 等の脆弱性データベースも参考にして、内容の確認を行なっています。
対象ソフトウェアパッケージのバージョンを確認
以下では、例として Amazon Linux 2 セキュリティアドバイザリ にある expat というソフトウェアパッケージを対象に脆弱性対応を進めます。
まずは、インストールされている対象パッケージのバージョンと、脆弱性が修正されたバージョンを確認します。
$ yum list installed | grep expat expat.x86_64 2.1.0-12.amzn2 @amzn2-core
上記コマンドの結果から、インストール済みの expat は バージョン 2.1.0 リリース 12.amzn2 であることがわかりました。
脆弱性が修正されたバージョンは Amazon Linux 2 セキュリティアドバイザリ からリンクが貼られている脆弱性の詳細ページ(ALAS2-2022-1788)で確認できます。
New Packages: x86_64: expat-2.1.0-12.amzn2.0.4.x86_64
更新後のソフトウェアパッケージのバージョンは expat-2.1.0-12.amzn2.0.4(バージョン 2.1.0 リリース 12.amzn2.0.4) となっていますので、インストール済みのバージョンよりも新しいバージョンで修正が行われたことがわかりました(対象ソフトウェアパッケージのバージョンアップが必要)。
アップデート可能なバージョンを確認
脆弱性が修正されたバージョンにアップデートが可能かを確認しておきます。 現在アップデート可能な最新のバージョンは
$ yum info expat
または
$ yum check-update | grep expat
のようにして確認できます。
> Available Packages > Name : expat Arch : x86_64 Version : 2.1.0 Release : 12.amzn2.0.4 Size : 87 k Repo : amzn2-core/2/x86_64 Summary : An XML parser library URL : http://www.libexpat.org/ License : MIT Description : This is expat, the C library for parsing XML, written by James Clark. Expat : is a stream oriented XML parser. This means that you register handlers with : the parser prior to starting the parse. These handlers are called when the : parser discovers the associated structures in the document being parsed. A : start tag is an example of the kind of structures for which you may : register handlers.
脆弱性が修正されたバージョン(バージョン 2.1.0 リリース 12.amzn2.0.4)が利用可能になっていることが確認できました。
影響範囲を確認
脆弱性が見つかったソフトウェアパッケージの影響範囲が判明していない場合は、どのソフトウェアが該当ソフトウェアパッケージを利用しているかを確認します。
ソフトウェアパッケージに含まれているファイルを確認し、そのファイルを参照しているソフトウェアを確認することになります。
Amazon Linux 2の場合、ソフトウェアパッケージに含まれているファイル一覧は、rpm コマンドで確認できます。
$ rpm -ql expat /usr/bin/xmlwf /usr/lib64/libexpat.so.1 /usr/lib64/libexpat.so.1.6.0 /usr/share/doc/expat-2.1.0 /usr/share/doc/expat-2.1.0/COPYING /usr/share/doc/expat-2.1.0/README /usr/share/man/man1/xmlwf.1.gz
ドキュメントやマニュアルは今回不要ですので、 /usr/lib64/libexpat.so.1.6.0 を参照しているソフトウェアを確認します。
対象ファイルを参照しているソフトウェア(プロセス)は、lsof コマンドで確認できます。
$ sudo lsof | grep /usr/lib64/libexpat.so.1.6.0 httpd 12524 root mem REG 8,1 197984 464424 /usr/lib64/libexpat.so.1.6.0 httpd 12530 apache mem REG 8,1 197984 464424 /usr/lib64/libexpat.so.1.6.0
上記コマンドの結果から、httpd(Apache HTTP Server)が対象ファイルを参照していることがわかりました。 ※ lsof コマンド実行時点で対象ファイルを参照しているプロセスを抽出しているので、参照元が常駐プロセスでない場合は、確認時にプロセスを起動させる必要があります。
対象ソフトウェアパッケージをバージョンアップ
脆弱性のあるソフトウェアパッケージをバージョンアップします。 脆弱性の詳細ページ(ALAS2-2022-1788)に yum コマンドを実行してバージョンアップするよう記載されていますので、それに従って対応を行います。
$ sudo yum update expat
参照元ソフトウェアによっては、バージョンアップ前のものを参照したままになっている場合がありますので、必要に応じて再起動を行います。
おわりに
上記は脆弱性対応の一部を切り取ったものになりますが、重要なのは脆弱性に関する正しい情報(主に一次情報やOSベンダーの提供する情報)を早期に漏れなく検知する仕組みを構築し、影響範囲を把握して対応を行うことだと考えています。 今後も、健全な状態を維持すべく対応を行なっていきたいと思います。