[和訳] ゴーストバスターズ #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Busting GHOSTs with Chef (2015/01/31) の和訳です。
新年最初の月は大きなセキュリティ脆弱性なしに抜けられませんでした。ほんの数日前、セキュリティ研究者はGHOSTと名付けた深刻なバグを発見しました。glibc (GNU Cライブラリ)のgethostbyname()関数で発見されたので、ぴったりな名前です。今回もまた、この脆弱性はChefを用いて簡単に検知と修正を行えます。
最初はShellshockの検知と修正を行った以前の記事 (訳注: 和訳)と同じ方法を用いてこの課題に取り組もうとしましたが、こちらは多少難しいです。情報を集めるためにシステム上で実行する組み込みコマンドがないのです。もともとのセキュリティアナウンスにあるC言語のテストコードをコンパイルし、cookbook_file Resourceによってバイナリを配布するということができますが、これはいささか不恰好です。この脆弱性を検知するためにrootでセグメンテーション違反とコアダンプを起こさせるような方法もあまり好きではありません。
Red Hatパッケージの更新履歴の活用
Red Hat社が、セキュリティアナウンスでこの脆弱性を検出するために顧客に提供しているスクリプトを読んでみて、GHOSTを対象とするCVE番号が書かれているかどうか、glibcのRPMの更新履歴を単にパースすればよいということに気がつきました。書かれていなければ、システムは脆弱でパッケージをアップデートすべきだとわかります。
Chef Clientバージョン12では、サーバをただちに再起動するためのrebootという新しいResourceを利用できます。glibcは現在メモリ内にあるプログラムも含めて、システム上のほぼすべてのプログラムに用いられているので、glibcを更新したらサーバを再起動することが推奨されています。もちろん、即時再起動は誰もが望むことではありません。メンテナンス期間まで待ってほしいでしょう。
コードは次のようになります(ghost-remediation.rb):
package 'glibc' do
action :upgrade
not_if "rpm -q --changelog glibc | grep -q 'CVE-2015-0235'"
notifies :request_reboot, "reboot[ghost-detected]"
end
reboot 'ghost-detected' do
action :cancel
reason 'GHOST vulnerability detected, system must reboot'
delay_mins 2
end
より一般的な方法
この解決策がまだ気にいらないのは、Red Hat Enterprise Linuxシステムにしか適用できないからです。Ubuntuのような他のLinuxシステムだとどうでしょう? もし、システムにインストールされているパッケージとバージョンが何であるかいつも知ることができたら、すばらしいと思いませんか?
これをうまくやってくれるコミュニティOhaiプラグインを拡張することに決めました。ソースコードはこちらです。
先に述べたShellshockの記事 (訳注: 和訳)のようにOhai CookbookのResourceを用いてこのプラグインをインストールしてしまえば、ChefのNode Objectにnode['linux']['packages']というAttributeができるようになります。node['linux']['packages']['glibc']['version']とnode['linux']['packages']['glibc']['release']という要素を調べることで、glibcを更新する必要があるかどうかがわかります。
今後の予定: ControlとAnalytics
現在私達は、Cookbook内にControlのための言語を定義するChef RFC 35を実装している最中です。規制産業における法令遵守から着想を受けたもので、minitest-handler風の受け入れテストのように考えることができるだけでなく、それよりもよいものになります。この機能が実装されれば、Serverspecのような書式で「動作しているべきglibcのバージョンは何か?」のような条件を定義できるようになります。これ自身に興味はそそられないかもしれませんが、Control違反に関することをフィルタ、アラート、人間やシステムに通知できる商用製品のChef Analyticsと組み合わせることでとても強力になります。
Chef Clientバージョン12.2.0-alphaをインストールすることで、Controlの初期実装を試してみることができます(curl -L https://www.chef.io/chef/install.sh | sudo bash -s -- -v 12.2.0.alpha.0)。
まとめ
ご覧になった通り、Chefの柔軟なRecipe言語とOhaiの簡単に使えるプラグインシステムによって、インフラにおいて注意を要するセキュリティ問題の発見、修正、通知を行うさまざまな方法を取ることができます。とは言え、今年はより深刻で広範囲のセキュリティ脆弱性がたくさん発生しないことを祈りましょう!