3行で言うと…
前回のブログが公開されたのが7月の上旬でまだ梅雨が明ける前の話でした。
今日はもう8月の終わりで、今回のブログは前回の続編を書く予定でしたが一気に夏を越えてしまいました。
少しずつ秋めいた空気を感じる日が増えてきました。冬よりは夏の方が好きなので、ちょっとさびしい気がしています。
サーバを稼働させるOSやサービスを構成するミドルウェアには意図しない動作を行うバグを含んでおり、常に修正を行っていくものというのが一般的な考え方だと思われます。そしてこれらのバグのうち欠陥や不都合な事象に繋がる可能性があるものをソフトウェアの脆弱性(ぜいじゃくせい)と呼びます。
一方、セキュリティ対策は脆弱性対策と言われることもあります。ここで言われる「脆弱性」とは組織のあり方や運用などを含めた弱点を指すもので、ソフトウェアの脆弱性とは言葉の意味が異なります。しかしソフトウェアの脆弱性の放置は間違いなく組織の弱点に繋がりますので対策が必要になります。
セキュリティ対策としての脆弱性対策の最初のステップは守るべき対象の弱点を知ることです。自分達が管理するシステム(ホスト)の脆弱性を調査することは対策の第一歩になります。
VulsはGo言語で書かれたオープンソースの脆弱性検査ツールです。
future-architect/vuls: Vulnerability scanner for Linux/FreeBSD, agentless, written in Go
日本国内の企業であるフューチャーアーキテクト株式会社の方を中心に開発され、日本語への対応もしっかりしており、またドキュメント類やサポートなど日本語でも行っていらっしゃるため、私たち日本人にはとても利用しやすい環境が整ってます。
Vulsの特徴ですが、
といった点が挙げられると感じています。
脆弱性対策は実際に対象のソフトウェアを更新しないと対策されたことになりませんので、検査ツールであるVulsを実行するだけでは対策は完了しません。ただ、自分達が管理するホストに対応が必要なパッケージがあるか、今すぐ対応が必要かどうか、などを知るために継続的に調査をする意味は大きいと思われます。
また、稼働中のホストはいつでもパッケージ更新したり、再起動が実施出来るわけではありません。検査専用のツールであるVulsは勝手にホスト内のプログラムを改変することが無いため、安心して導入することができます。
先日8月25日にVulsの新バージョン0.4が公開されました。
0.4では特に
といった特徴が挙げられており、その他にも多数の内容がアップデートされています。
導入や使用方法については公開されているREADMEに詳しく書かれています。日本語対応しているだけではなく、記述も丁寧です。
vuls/README.ja.md at master · future-architect/vuls
公式のドキュメント以外にもVuls導入の記事を多く見かけますので、導入について大きな問題は無いかと思われます。
今回ブログ公開が翌週と言うこともあって、新バージョン公開翌日に早速更新してみました。
最新バージョンの動作要件として、Go言語の版数が1.8.3以上であることからGo言語の更新も行ったのですが、そこで更新が不適切であったためVulsの更新に失敗しました。具体的には下記のブログで書かれているとおり以前のバージョンのファイルが残ったまま最新のGo言語をインストールし、ビルドの段階でファイルのパーミッションによるエラーが発生しました。
下記ブログに書かれている通り最新のGo言語を導入したところ問題無くVulsの更新ができました。
go get で permission denied が発生する - kawaken's blog
導入の詳細については、上記READMEやその他の記事をご参照ください。
Vulsで主に使用するコマンドは
になります。
0.3より前ののVulsではprepareサブコマンドで接続の試験と被検査ホストのセットアップを行っていましたが、最近の版数のものではconfigtestサブコマンドの実行でチェックのみを行います。(セキュリティ上の理由などからVuls実行ユーザに環境設定権限を持たせないため)
今回のブログのタイトルは 「Linuxコンテナお気軽管理」 です。
VulsはDockerとLXDのLinuxコンテナの検査をすることができます。READMEにも書かれてますが、vulsの検査対象設定ファイルであるconfig.tomlに
[default]
port = "22"
user = "vuls"
[servers]
[servers.localhost]
host = "127.0.0.1"
keyPath = "/home/vuls/ssh_keys/id_key"
[servers.blog-contsv]
host = "10.211.55.114"
keyPath = "/home/vuls/ssh_keys/id_key"
[servers.blog-contsv.containers]
type = "lxd"
includes = ["${running}"]
のように対象のホストとコンテナの内容を追記することで動作中のコンテナを検査します。
上記の例では、blog-contsvはLXDコンテナが動作する対象のホストを指します。またIPアドレスは今回のブログ掲載用に作成したホストのものです。
コンテナの情報を個別に設定する必要が無いので、コンテナが増減する環境でも楽に運用出来るのでは無いでしょうか。
注意点としてはvulsを実行するアカウントがlxd関係のコマンドが実行できる必要があります。私がvulsを動作させた環境ではVuls動作専用にvulsアカウントを作成しました。vulsアカウントを被検査ホストにも作成しssh認証鍵を登録して検査を行っています。
Ubuntu 16.04ではlxd関係のコマンドを実行するためにはアカウントがlxdグループに登録されている必要があります。
/etc/group の一部
lxd:x:110:ubuntu,vuls
またvisudoなどを使用して、vulsアカウントがsudo を使用してlxdのコマンドを実行できる様にしておく必要があります。
/etc/sudoer の一部
vuls ALL=(ALL) NOPASSWD: /usr/bin/apt-get update , /usr/bin/lxc
Vulsではレポートの出力形式として one-line-text 、 short-text 、 full-text が選べます。
さらに、Vulsのreportサブコマンドには差分出力の機能があります。検査と差分レポートを定期的に実施することで新たに対応が必要な脆弱性情報を得やすくなります。
One Line Summary ================ cont01@blog-contsv Total: 49 (High:14 Medium:24 Low:11 ?:0) 4 updatable packages cont02@blog-contsv Total: 49 (High:14 Medium:24 Low:11 ?:0) 4 updatable packages [Reboot Required] blog-contsv Total: 147 (High:57 Medium:59 Low:31 ?:0) 0 updatable packages [Reboot Required] localhost Total: 139 (High:32 Medium:86 Low:21 ?:0) 3 updatable packages
cont01@blog-contsv (ubuntu16.04) on blog-contsv
=========================================
Total: 49 (High:14 Medium:24 Low:11 ?:0) 4 updatable packages
CVE-2017-9525 10.0 HIGH (jvn)
In the cron package through 3.0pl1-128 on Debian, and through 3.0pl1-128ubuntu2
on Ubuntu, the postinst maintainer script allows for group-crontab-to-root
privilege escalation via symlink attacks against unsafe usage of the chown and
chmod programs.
---
https://nvd.nist.gov/vuln/detail/CVE-2017-9525
http://people.ubuntu.com/~ubuntu-security/cve/CVE-2017-9525 (Ubuntu-CVE)
6.9/AV:L/AC:M/Au:N/C:C/I:C/A:C (nvd)
10.0/AV:N/AC:L/Au:N/C:C/I:C/A:C (jvn)
https://nvd.nist.gov/vuln-metrics/cvss/v2-calculator?name=CVE-2017-9525
Confidence: 100 / OvalMatch
CVE-2012-2663 7.5 HIGH (nvd)
extensions/libxt_tcp.c in iptables through 1.4.21 does not match TCP SYN+FIN
packets in --syn rules, which might allow remote attackers to bypass intended
・
・
・
cont01@blog-contsv (ubuntu16.04) on blog-contsv
=========================================
Total: 49 (High:14 Medium:24 Low:11 ?:0) 4 updatable packages
CVE-2017-9525
----------------
Max Score 10.0 HIGH (jvn)
nvd 6.9/AV:L/AC:M/Au:N/C:C/I:C/A:C
jvn 10.0/AV:N/AC:L/Au:N/C:C/I:C/A:C
CVSSv2 Calc https://nvd.nist.gov/vuln-metrics/cvss/v2-calculator?name=CVE-2017-9525
Summary In the cron package through 3.0pl1-128 on Debian, and through 3.0pl1-128ubuntu2
on Ubuntu, the postinst maintainer script allows for group-crontab-to-root
privilege escalation via symlink attacks against unsafe usage of the chown and
chmod programs.
Source https://nvd.nist.gov/vuln/detail/CVE-2017-9525
Ubuntu-CVE http://people.ubuntu.com/~ubuntu-security/cve/CVE-2017-9525
CWE-59 (nvd) https://cwe.mitre.org/data/definitions/59.html
Package/CPE cron-3.0pl1-128ubuntu2 -> Not Fixed Yet
Confidence 100 / OvalMatch
CVE-2012-2663
----------------
Max Score 7.5 HIGH (nvd)
nvd 7.5/AV:N/AC:L/Au:N/C:P/I:P/A:P
・
・
・
vuls@vulssv:~$ vuls report -format-one-line-text -cvss-over=7 [Aug 29 11:50:16] INFO [localhost] Validating config... [Aug 29 11:50:16] INFO [localhost] cve-dictionary: /home/vuls/cve.sqlite3 [Aug 29 11:50:16] INFO [localhost] Loaded: /home/vuls/results/2017-08-29T09:51:30+09:00 One Line Summary ================ cont01@conthost Total: 14 (High:14 Medium:0 Low:0 ?:0) 4 updatable packages cont02@conthost Total: 14 (High:14 Medium:0 Low:0 ?:0) 4 updatable packages [Reboot Required] conthost Total: 57 (High:57 Medium:0 Low:0 ?:0) 0 updatable packages [Reboot Required] localhost Total: 32 (High:32 Medium:0 Low:0 ?:0) 3 updatable packages
vuls@vulssv:~$ vuls report -format-one-line-text -cvss-over=7 -diff [Aug 29 11:50:19] INFO [localhost] Validating config... [Aug 29 11:50:19] INFO [localhost] cve-dictionary: /home/vuls/cve.sqlite3 [Aug 29 11:50:19] INFO [localhost] Loaded: /home/vuls/results/2017-08-29T09:51:30+09:00 [Aug 29 11:50:19] INFO [localhost] Privious json found: /home/vuls/results/2017-08-29T09:05:30+09:00/conthost.json [Aug 29 11:50:19] INFO [localhost] Privious json found: /home/vuls/results/2017-08-29T09:05:30+09:00/conthost.json [Aug 29 11:50:19] INFO [localhost] Privious json found: /home/vuls/results/2017-08-29T09:05:30+09:00/conthost.json [Aug 29 11:50:19] INFO [localhost] Privious json found: /home/vuls/results/2017-08-29T09:05:30+09:00/localhost.json One Line Summary ================ cont01@conthost Total: 14 (High:14 Medium:0 Low:0 ?:0) 0 updatable packages cont02@conthost Total: 14 (High:14 Medium:0 Low:0 ?:0) 0 updatable packages [Reboot Required] conthost Total: 57 (High:57 Medium:0 Low:0 ?:0) 0 updatable packages [Reboot Required] localhost Total: 32 (High:32 Medium:0 Low:0 ?:0) 0 updatable packages
Vulsではその他にも、電子メールやSlackを使ったレポートの確認方法も用意されています。
今回は お気軽〜 がテーマですので記事にはしませんが、他にもVulsRepoというVulsが出力したjsonファイルを見やすく表示するWeb UIもOSS公開されています。
Vulsの検査は脆弱性データベース情報との比較なので、必要性や重要度に関係無くレポートが作成されます。このため検出を認識しているものの対応を行っていない脆弱性情報は常に報告が上がることになります。結果として検査を定期的に実行するとどんどん大量のレポートが届き、新たに検出された脆弱性情報を知ることが難しくなってきます。
レポートは詳しい情報を得たい場合もありますが、冗長なメッセージにより他の重要な情報を見落とす可能性もあります。適したタイミングに適した手段を用いて脆弱性情報を取得し対策の第一歩としたいですね。
前回今回と特にLXDによるLinuxコンテナの管理を簡単に行う話を書きました。
コンテナが一般的に使われるようになり管理対象のサーバは従来よりはるかに増えているものと思われます。コンテナ一つ一つにエージェントの導入や設定の追加などを行うのはとても骨の折れる内容で、継続的な管理運用が難しくなると想像します。
コンテナの稼働状況や脆弱性検査について、コンテナ内部に触れなくてもここまでできます。安定稼働のための対策活動のきっかけになれば嬉しいです。
|
2025年12月17日 オライリー本の全冊公開日のお知らせ(もくもく勉強会も同時開催) ファーエンドテクノロジーが所蔵するオライリー本(全冊)公開日のご案内です。公開日には「もくもく勉強会」も同時開催します。 |
|
年末年始 休業のお知らせ(12/26午後〜1/4 休業) 年末年始は2025年12月26日(金)午後から2026年1月4日(日)まで休業いたします。 |
|
My Redmine 2026 新春アップデートのお知らせ(RedMica 4.0対応) 2025年12月中旬にMy Redmine 2026 新春アップデートを実施します。 |
|
請求関連書類がダウンロード可能になったことを通知バナーで確認できるようになりました 請求関連書類がダウンロード可能な状態になると、ご利用中のMy Redmineに通知バナーが表示されます。 |
|
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |