ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

UbuntuでLinux Kernelの特権昇格の脆弱性(CVE-2017-6074)に備える

Linux kernelの特権昇格の脆弱性( CVE-2017-6074 )が報告されている。

www.softbanktech.jp

oss.sios.com

この脆弱性を3行で解説すると?

  1. ユーザーログインできるサーバーで
  2. 脆弱性コードを実行すると
  3. root権限のユーザーになれて悪意のある行動し放題!

…ログインできることが条件ですが、やばい脆弱性であることは間違いありません。

脆弱性への対応

この問題を回避するには速やかにUbuntuに修正済みのカーネルを適用して再起動することである。 また、カーネル4.0以降であればライブパッチ機能を使って脆弱性に対応することもできる。 しかし、すぐに再起動できない場合は次のように実行しておき、良きタイミングでUbuntuを再起動するという対応が可能である。

回避策を設定

$ sudo vi /etc/modprobe.d/blacklist-dccp.conf
alias net-pf-2-proto-0-type-6 off
alias net-pf-2-proto-33-type-6 off
alias net-pf-10-proto-0-type-6 off
alias net-pf-10-proto-33-type-6 off 

回避策を適用

次のコマンドでモジュールの設定に従って先の設定やその他のモジュール設定の適用、モジュールの読み込み、アンロードが実行される。意図しないモジュールが読み込まれる場合があるので注意する。

$ sudo depmod -a

Ubuntuのアップデート

アップデート後は新しいカーネルをロードするために再起動が必要。

$ sudo apt update
$ sudo apt upgrade && sudo reboot

Ubuntuの各バージョンに対するパッチのリリース状況は以下のページで確認できる。

PoCのテスト

PoCがgithubに公開されているので、再起動前であれば試しに実行してみることができる。次の手順に従ってテストできる。PoCのテストをするつもりがなければ、このステップはスキップしてください。

重要なサーバー上で絶対に実行しないでください。

$ wget https://raw.githubusercontent.com/xairy/kernel-exploits/master/CVE-2017-6074/poc.c && wget https://raw.githubusercontent.com/xairy/kernel-exploits/master/CVE-2017-6074/trigger.c

$ sudo apt update && sudo apt install gcc -y && gcc -o pwn poc.c

$ ./pwn
[.] namespace sandbox setup successfully
[.] disabling SMEP & SMAP
[.] scheduling 0xffffffff81064550(0x406e0)
socket(SOCK_DCCP): Socket type not supported 

なお、以下のサイトではUbuntuSELinuxをインストールして脆弱性を回避できるか試行されているが、UbuntuSELinuxをインストールするのは推奨されない。UbuntuにはApparmorというセキュリティ機能がインストールされており、ApparmorとSELinuxが衝突してしまうためである。

oss.sios.com

またそもそもUbuntuSELinuxを使っているユーザーは少なく、何が起こっても解決できる保証はないことや、もはやUbuntuSELinuxやそれを支える関連するツールは積極的にメンテナンスされていないため、インストールすることは推奨されない。

困難を理解した上でインストールしたい場合は次のドキュメントが参考になるかもしれない。