残念ながら、バグの存在しないソフトウェアを探すのはとても難しい。「明らかにバグが存在しない」とわかるほど簡単なソフトウェアでもない限り、どこかに何かのバグがあるものだ。
Linuxカーネルのように複雑なソフトウェアになると、バグが発見されることなく数十年にわたって潜伏し続けることもある。こうしたバグを利用して攻撃が行われるケースもあるが、その攻撃を検知することは通常の管理者には不可能だ。
だとすれば、せめて発見されたセキュリティ脆弱性を修正するパッチは迅速に適用したい。サービス停止が難しかったり、セキュリティ脆弱性の内容がよくわからなかったりするために、なあなあでそのまま運用を続けているケースも見かけるが、それは将来悲惨な結末を招きかねない。こまめにセキュリティアップデートをかけることはとても大切だ。
9年間Linuxカーネルに潜んでいたセキュリティ脆弱性
今回、セキュリティの脆弱性について取り上げるのは、先日Linuxカーネルに「Dirty Cow」と呼ばれるセキュリティ脆弱性が発見されたためだ。このセキュリティ脆弱性は、2007年にリリースされたLinuxカーネル2.6.22からずっと存在していたとされており、9年間に渡ってLinuxでは一般ユーザーが特権ユーザーに成り代わることが可能な状態だったと言われている。とても危険なバグだ。
LinuxカーネルでCopy-on-Writeを実装したメモリサブシステムのロジックにバグがあったのだが、多くのプログラマーはLinuxカーネルのメモリサブシステムを読んだりしないし、バグが発見されにくかったのも当然だろう。
そして、今後も似たようなバグが発見される可能性はある。管理者がバグを見つけられないのは仕方ないとしても、セキュリティアップデートは出たらすぐ適用することを心がけて運用したい。
脆弱性情報の取りこぼしを防ぎ、最近のサイバー攻撃の動向などを把握するためにも、セキュリティベンダーのブログやセキュリティに強いメディアを購読すると良いだろう。この手のサイトは英語のサイトが多いのだが、こればかりは業務だと割り切って頑張って読んでもらうしかない。例えば、「Threatpost」や「nixCraft」などがある。
複数のブログやメディアを購読しておくと、特に危険性の高いセキュリティ脆弱性の場合は複数のメディアに掲載されるため、その存在に気がつきやすくなるほか、自分の危機意識も高まる。ぜひ、そうした情報源に日々、目を通していただきたい。
CVEってなんだ?
ここで、CVE(Common Vulnerabilities and Exposures:脆弱性情報データベース)について説明しておこう。CVEはセキュリティ脆弱性のユニークな識別子だ。「CVE-《年号》-《4桁の連番》」が基本フォーマットで、連番は4桁を超えると5桁になる。Dirty Cowには、「CVE-2016-5195」が付与された。
例えば、複数のベンダーからセキュリティ脆弱性の情報が発表された場合、どの発表がどのセキュリティ脆弱性を意味しているのかわかりづらくなってしまう。すると、どのセキュリティ脆弱性が修正済みで、どれが修正されていないのかを判断することが難しくなる。そこで、ユニークに定められたCVEを参照すればどの脆弱性の情報なのかが判断できるという仕組みになっている。
「それなら、CVEだけウォッチしていればいいじゃないか」――仕事を早く終わらせる方法を追求する会社員ならば、当然のひらめきかもしれない。しかし、残念ながらCVEをチェックするだけでは不十分なのが実状だ。なぜなら、CVEは策定されるまで時間がかかるため、ゼロデイのセキュリティ脆弱性検知には向いていない。さらに、CVEに参加していないプロジェクトも多く、「一枚岩」というわけにいかないのだ。
したがって、現状ではやはり複数の情報源を回ってセキュリティ脆弱性情報を収集し続ける必要がある。面倒かも知れないが、こればかりはどうにもならない。覚悟を決めて効率良く情報を得られるメディアなどを探し出し、自分なりに活用する方法を模索してもらえればと思う。