Linux kernel の脆弱性 Dirty COW (CVE-2016-5195)
Linux kernel の脆弱性 CVE-2016-5195 が報告されています。
別名 Dirty Cow
Dirty COW
上記 Dirty COW によると
- Linuxカーネルのメモリサブシステムがcopy-on-write(COW) 時に、プライベートなread-onlyメモリを破損する事が可能である問題らしい。
これにより、権限のないユーザが権限昇格によって、読み取り専用のメモリへ書き込みを行えるようになる( 特権取得が可能 ) - 実際にこの脆弱性を利用する exploit が Phil Oester によって見つかっている Linux users urged to protect against 'Dirty COW' security flaw (HTTPのパケットキャプチャにより発見)
- Dirty COW の COW は copy-on-write (COW) から。
Dirty COW explained: Get a moooo-ve on and patch Linux root hole によると、
実は Linus Torvalds が11年前に発見していたんだけど、不幸にもFIX出来ずに放置されていたらしい。 ( ちょっと前にも似たようなの聞いた気がする )
こっちが元ネタ (Linusによる)
PoC
PoC (proof of concept) は ここ にある。
PoC再現手順
- 適当な特権ユーザ ( root ) 以外のユーザで Linux にログイン
- 適当なディレクトリに移動
$ cd 適当なディレクトリ
- rootのみReadOnlyのファイル生成
$簀戸ーs # echo this is not a test > foo # chmod 0404 foo # exit $ ls -lah foo -r-----r-- 1 root root 19 Oct 21 16:56 foo $ cat foo this is not a test
- PoC ソースファイル作成
vi dirtyc0w.c
上記 PoC (リンク先) のコードを貼り付けて保存
- コンパイル
$ gcc -lpthread dirtyc0w.c -o dirtyc0w
- 実行
$ ./dirtyc0w foo m00000000000000000 mmap 39ca6000 madvise 0 procselfmem 1800000000
- ファイル確認
$ cat foo m00000000000000000
脆弱性がある場合、上記のようにファイル内容が書き換わります。
※EC2は適用していない過去のAMIからインスタンス起動して実験したら、書き換わりました。パッチ適用後のインスタンスでは this is not a test のまま。
対策
各ディストリビューションから情報が提供されているので、これらに従いましょう。
kernel アップデート後は再起動も忘れずに。
AWS
aws からは既に パッチが提供されていました。いつもの手順 ( yum update 等 ) でアップデート可能です。
Redhat
CVE-2016-5195 - Red Hatdebian
CVE-2016-5195Ubuntu
CVE-2016-5195 in UbuntuPatch your Linux-powered systems, phones and gadgets as soon as possible
と警告してたりして、
Linux サーバだけではなく、Android や 各種 Linux ベースのガジェット、アプライアンス等、影響範囲が大きそうな感じがする Dirty COW。
暫くは自身の管理しているこれらデバイスへの対応、攻撃の増加など気にしておいた方がよいかもしれません。