現在位置: ホーム / セキュリティ ブログ / ( PoC ) linux kernel特権昇格脆弱性( CVE-2017-6074 ) の暫定回避策の確認

( PoC ) linux kernel特権昇格脆弱性( CVE-2017-6074 ) の暫定回避策の確認

02/22/2017に公開されたkernelの脆弱性情報(CVE-2017-6074)に関して、環境限定のPoCが公開されています。今回はこのPoCと、暫定回避策(モジュールの除去や SELinux )が有効かどうかを確認してみます。

こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面です。

02/22/2017に公開されたkernelの脆弱性情報(CVE-2017-6074)に関して、環境限定のPoCが公開されています(悪用防止のため、URLは敢えて載せません)。今回はこのPoCから、暫定回避策(モジュールの除去や SELinux )が有効かどうかを確認してみます。

 


PoC準備

PoCの準備を行います。

  1. まず、環境としてUbuntu 16.04.1 LTSを用意し、適当なミラーサイトなどから4.4.0-62-generic x86_64 カーネルをダウンロードしてインストールし、再起動します(カーネルバージョンが違うとPoCのコードはうまく動きません)。

  2. 今回のPoCですが、Ubuntuの特定バージョンのKernel用のため、SELinuxが有効かどうかを確認するためにSELinuxをインストールします(Ubuntuでデフォルトの強制アクセス制御はAppArmorになります)。CentOS用のPoCは未だ確認されていません(このPoC用のソースを使っても、root権限取得の所で失敗します)。

    aptitudeを使ってインストールしています。SELinuxのインストール後に再起動が必要になります。SELinuxインストール直後は、設定がpermissiveモードになるため、再起動してもSELinuxによるアクセス制御が無い状態で起動します。念の為、再起動する前に/etc/selinux/configを確認して下さい。

    (03/08/2017補足) 今回は、あくまでも「SELinuxが有効かどうか」の検証の為にUbuntuでSELinuxを有効にした形です(本当はCentOS/Fedoraを使いたかったのですが、出来ないので代替策としてUbuntuを使った形になります)。UbuntuでSELinuxを有効にすると、ポリシの修正などその他の作業が必要になるため、運用でのUbuntu+SELinuxを推奨しているわけではありません。あくまでもPoCを行うための作業の一環です。

    root@ubuntu:~# aptitude -y install selinux
    
    root@ubuntu:~# cat /etc/selinux/config 
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    # enforcing - SELinux security policy is enforced.
    # permissive - SELinux prints warnings instead of enforcing.
    # disabled - No SELinux policy is loaded.
    SELINUX=permissive
    # SELINUXTYPE= can take one of these two values:
    # default - equivalent to the old strict and targeted policies
    # mls     - Multi-Level Security (for military and educational use)
    # src     - Custom policy built from source
    SELINUXTYPE=ubuntu
    
    # SETLOCALDEFS= Check local definition changes
    SETLOCALDEFS=0
    
    root@ubuntu:~# reboot
    
  3. 次に、PoCコードをダウンロードしてビルドします。

    sios@ubuntu:~/CVE-2017-6074$ ls
    poc.c  README.md  trigger.c
    sios@ubuntu:~/CVE-2017-6074$ 
    sios@ubuntu:~/CVE-2017-6074$ gcc -o pwn poc.c 
    sios@ubuntu:~/CVE-2017-6074$ ls
    poc.c  pwn  README.md  trigger.c
    sios@ubuntu:~/CVE-2017-6074$ 
    

PoC

通常の状態(脆弱性あり)

  1. CONFIG_IP_DCCPがモジュールになっていることを確認します。

    root@ubuntu:~# cat /boot/config-4.4.0-62-generic |grep CONFIG_IP_DCCP
    CONFIG_IP_DCCP=m
    # CONFIG_IP_DCCP_CCID2_DEBUG is not set
    # CONFIG_IP_DCCP_CCID3 is not set
    # CONFIG_IP_DCCP_DEBUG is not set
    
  2. 一般ユーザでPoCのコンパイルしたコードを実行すると、root権限を取得できます。

    sios@ubuntu:~/CVE-2017-6074$ ./pwn
    [.] namespace sandbox setup successfully
    [.] disabling SMEP & SMAP
    [.] scheduling 0xffffffff81064550(0x406e0)
    [.] waiting for the timer to execute
    [.] done
    [.] SMEP & SMAP should be off now
    [.] getting root
    [.] executing 0x402043
    [.] done
    [.] should be root now
    [.] checking if we got root
    [+] got r00t ^_^
    [!] don't kill the exploit binary, the kernel will crash
    root@ubuntu:/home/sios/CVE-2017-6074# ls /root/.bashrc
    /root/.bashrc
    root@ubuntu:/home/sios/CVE-2017-6074# id
    uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:kernel_t:s0
    root@ubuntu:/home/sios/CVE-2017-6074# cat /etc/shadow
    root:ZZZZZZ:12282:0:99999:7:::
    daemon:*:15043:0:99999:7:::
    bin:*:15043:0:99999:7:::
    --snip--
    

SELinuxを有効にしている場合

SELinuxを有効にしている場合には、root権限取得が阻止されることがわかります。詳しくは、こちらのOSSセキュリティ技術の会(http://www.secureoss.jp)のブログを参照して下さい(英語ですが。。。)


暫定回避策で、モジュールを読み込ませないようにした場合

  1. rootで/etc/modprobe.d/以下に下記のblacklist-dccp.confを作成して再起動します。

    # For CVE-2017-6074
    
    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 
    
  2. 一般ユーザでPoCのコンパイルしたコードを実行します。SOCK_DCCPで"socket type not supported"と出力され、阻止されることがわかります。

    sios@ubuntu:~/CVE-2017-6074$ ./pwn 
    [.] namespace sandbox setup successfully
    [.] disabling SMEP & SMAP
    [.] scheduling 0xffffffff81064550(0x406e0)
    socket(SOCK_DCCP): Socket type not supported
    

結論

CVE-2017-6074はやはりローカルユーザがroot特権に昇格できる危険な脆弱性であることがわかりました。しかし、ディストリビューション元などで一般的に公開されている情報(モジュールを読み込ませないようにする、SELinuxを有効にする等)で、root権限取得が阻止されることがわかりました。勿論、これらの対応作はあくまでも暫定回避策なため、修正済みのカーネルに更新されることを強くお薦めします(モジュールを読み込ませないようにする場合でも、再起動が必要になるため)。

OSの再起動が発生する場合には、pacemakerなどOSSのクラスタ製品LifeKeeperなどの商用のクラスタリング製品を使うとサービス断の時間を最小限にすることが出来ます。

[参考]

https://oss.sios.com/security/kernel-security-vulnerability-20170223

OSSセキュリティ技術の会ブログ(http://www.secureoss.jp/post/omok-selinux-kernel-20170305/)

OSSセキュリティ技術の会

セキュリティ系書籍案内

技術評論社より、2/23に『【イラスト図解満載】情報セキュリティの基礎知識』が発刊されました。セキュリティの要素技術がイラスト図解でやさしく解説されており、初心者にもわかりやすくなっていますのでお薦めです。


セミナー情報

3/10(金)の12:00から、明星大学 日野キャンパス(多摩モノレール 「中央大学・明星大学駅」から大学まで直結。会場まで徒歩6分)にて開催されるオープンソースカンファレンス2017 Tokyo/Springで、本ブログ執筆者の面 和毅がOSSセキュリティ技術の会発足の紹介として、プラットフォームの全般的なセキュリティの紹介を行います。OSCに参加される方、またお近くの方で御時間が有りましたら、是非ご参加下さい。

OSSに関するお困りごとは サイオス OSSよろず相談室まで

サイオスOSSよろず相談室 では、OSSを利用する中で発生する問題に対し、長年培ってきた技術力・サポート力をもって企業のOSS活用を強力に支援します。Red Hat Enterprise Linux のほか、CentOS をご利用されている環境でのサポートも提供いたします。

OSSよろず相談室

サイオスOSSよろず相談室(2)

問い合わせボタン

最新の記事
YARAの脆弱性( CVE-2017-8294 ) 2017年04月29日
linux kernelの脆弱性( CVE-2017-7895 ) 2017年04月29日
linux kernelの脆弱性( CVE-2017-7477 ) 2017年04月25日
linux kernelの脆弱性( CVE-2017-8106 ) 2017年04月25日
MySQLの脆弱性情報(Oracle Critical Patch Update Advisory April) 2017年04月24日
QEMUの脆弱性( CVE-2017-7980 ) 2017年04月24日
Oracle Javaの脆弱性(Oracle Critical Patch Update Advisory - April 2017) 2017年04月22日
Nessusの脆弱性(CVE-2017-7849, CVE-2017-7850) 2017年04月20日
OpenIDMに複数の脆弱性情報(CVE-2017-7589, CVE-2017-7590, CVE-2017-7591) 2017年04月19日
linux kernelの脆弱性( CVE-2017-7645 ) 2017年04月19日
LightDMに特権昇格の脆弱性 (CVE-2017-7358 ) 2017年04月19日
linux kernelの脆弱性( CVE-2017-7889 ) 2017年04月17日
GnuTLS の 脆弱性 (GNUTLS-SA-2017-3 : CVE-2017-7869 ) 2017年04月14日
wiresharkに複数の脆弱性(CVE-2017-7700, CVE-2017-7701, CVE-2017-7702, CVE-2017-7703, CVE-2017-7704, CVE-2017-7705, CVE-2017-7745, CVE-2017-7746, CVE-2017-7747, CVE-2017-7748 ) 2017年04月14日
linux kernelの脆弱性( CVE-2017-2618 ) 2017年04月14日
bind 9 に複数の脆弱性 ( CVE-2017-3136 , CVE-2017-3137 , CVE-2017-3138 ) 2017年04月13日
linux kernelの脆弱性( CVE-2017-7616, CVE-2017-7618 ) 2017年04月11日
Tomcatに複数の脆弱性 ( CVE-2017-5647, CVE-2017-5648, CVE-2017-5650, CVE-2017-5651 ) 2017年04月11日
linux kernelの脆弱性( CVE-2017-7286, CVE-2017-7319 ) 2017年04月11日
binutilsの脆弱性( CVE-2017-7614 ) 2017年04月10日
elfutilsに複数の脆弱性(CVE-2017-7607, CVE-2017-7608, CVE-2017-7609, CVE-2017-7610, CVE-2017-7611, CVE-2017-7612, CVE-2017-7613 ) 2017年04月10日
linux kernelの脆弱性( CVE-2017-2671 ) 2017年04月05日
Xenの脆弱性 ( XSA-212: CVE-2017-7228 ) 2017年04月05日
linux kernelの脆弱性( CVE-2016-10229 ) 2017年04月04日
linux kernelの脆弱性( CVE-2017-7374 ) 2017年04月01日
linux kernelの脆弱性( CVE-2017-2647 ) 2017年04月01日
linux kernelの脆弱性( CVE-2017-7308 ) 2017年03月30日
curlの脆弱性 ( CVE-2017-2628 ) 2017年03月30日
linux kernelの脆弱性( CVE-2017-7277 ) 2017年03月29日
ntpに複数の脆弱性(CVE-2017-6451, CVE-2017-6452, CVE-2017-6455, CVE-2017-6458, CVE-2017-6459, CVE-2017-6460, CVE-2017-6462, CVE-2017-6463, CVE-2017-6464 ) 2017年03月28日
linux kernelの脆弱性( CVE-2017-7273 ) 2017年03月28日
AppArmorの脆弱性( CVE-2017-6507 ) 2017年03月26日
linux kernelの脆弱性( CVE-2017-7261 ) 2017年03月25日
Sambaに共有以外のファイルにアクセスされる脆弱性(CVE-2017-2619) 2017年03月24日
Subscription-managerの脆弱性( CVE-2017-2663 ) 2017年03月22日
binutilsに複数の脆弱性( CVE-2017-6965, CVE-2017-6966, CVE-2017-6969, CVE-2017-7209 , CVE-2017-7210 , CVE-2017-7223, CVE-2017-7224, CVE-2017-7225, CVE-2017-7226, CVE-2017-7227 ) 2017年03月22日
linux kernelの脆弱性( CVE-2017-7187 ) 2017年03月21日
linux kernelの脆弱性( CVE-2017-6353 , CVE-2017-5986 ) 2017年03月21日
kernelの脆弱性( CVE-2017-7184 ) 2017年03月20日
pcreの脆弱性( CVE-2017-7186 ) 2017年03月20日
binutilsの脆弱性( CVE-2017-6965 , CVE-2017-6966 , CVE-2017-6969 ) 2017年03月19日
MySQL(MariaDB) 5.5/5.6のmysql clientの脆弱性( Riddle : CVE-2017-3305 ) 2017年03月18日
linux kernelの脆弱性( CVE-2017-6951 ) 2017年03月17日
Apache Struts2の脆弱性 ( CVE-2017-5638 ) 2017年03月15日
linux kernelの脆弱性( CVE-2017-6874 ) 2017年03月15日
tomcatに情報漏えいの脆弱性( CVE-2016-8747 ) 2017年03月14日
QEMUの脆弱性( CVE-2016-9603 ) (Xen: XSA-211) 2017年03月14日
lxcの脆弱性(CVE-2017-5985) 2017年03月10日
wgetの脆弱性(CVE-2017-6508) 2017年03月08日
linux kernelに特権昇格の脆弱性( CVE-2017-2636 ) 2017年03月08日
( PoC ) linux kernel特権昇格脆弱性( CVE-2017-6074 ) の暫定回避策の確認 2017年03月06日
linux kernelの脆弱性( CVE-2016-9083 , CVE-2016-9084 ) 2017年03月03日
linux kernelに複数の脆弱性( CVE-2017-6345 , CVE-2017-6346 , CVE-2017-6347 , CVE-2017-6348 ) 2017年03月01日
Katello/Foremanによる運用管理 (Part4) 2017年02月28日
util-linux / coreutils の脆弱性(CVE-2017-2616) 2017年02月24日
linux kernelの脆弱性( CVE-2017-6214 ) 2017年02月24日
linux kernelに特権昇格の脆弱性( CVE-2017-6074 ) 2017年02月23日
curlの脆弱性 ( CVE-2017-2629 ) 2017年02月22日
QEMUの脆弱性( CVE-2017-2620 ) (Xen: XSA-209) 2017年02月22日
Tomcatの脆弱性 ( CVE-2017-6056 ) 2017年02月21日
最新の記事 - もっと...