日々macOSの情報を追い求めているユーザはもちろんのこと、TwitterなどSNSをたしなむユーザであれば、11月末に飛び交ったあの話をご存知だろう。そう、管理者権限の認証を行うダイアログ(以下、管理者ダイアログ)でユーザ名を入力する欄へ「root」と入力し、パスワード欄を空白のままEnterキーを押すと、そのまま認証されてしまうという致命的なセキュリティホールだ。筆者が知るかぎり、ここまであっけらかんとした"穴"は、Mac OS X/macOSの十余年という歴史の中でも他にない。

報道によれば、Appleはセキュリティアップデートの準備を大至急進めているそうだが、実のところ「最近Macを使いはじめたユーザ」にroot/スーパーユーザの存在と役割を知らしめるいい機会かもしれない。NeXT以来の歴史を知る古参ユーザには釈迦に説法だろうが、どうかお付き合い願いたい。

  • このような管理者権限を求めるダイアログで、ユーザ欄に「root」を入力すると……

そもそも「root」とは

語弊があるかもしれないが、UNIX系OSにとってrootとは管理者であり"全能の神"だ。"スーパーユーザ"とも呼ばれるように、システム上で発生したすべての事柄を知る能力を備え、システムにおいてありとあらゆることを実行できる権限を持つ特別なユーザだ。読み書きが許されないファイルは存在せず、変更/削除も制限されない。通常のユーザはアカウント登録が必要だが、rootは最初から存在し、パスワードを登録するだけでいい。rootというユーザの意味とパスワードの重みをご理解いただけただろうか。

もともとMacOSにはrootの概念がなかったが、NeXT SoftwareのOPENSTEPをベースに次世代OS「Mac OS X」が開発されることになり、それに伴い導入された。OPENSTEPにMacOSテイストのUIを被せたものが初期のMac OS Xだから、導入されたというよりは「土台ごと移植されたから(当然のこととして)rootの概念も付いてきた」とするのが正確だろう。

OPENSTEPとその前身であるNEXTSTEPは、BSD UNIXのリソースを活用し独自のGUIを載せたOS。筆者はもともとNEXTSTEPを利用していたが、パッケージのインストールやNetInfo(NEXTSTEP/OPENSTEPの動的なシステム管理機構)に変更をくわえるときなど、必要に応じてrootとしての認証を行ったものだ。この手続きは、伝統的なUNIXスタイルそのものといえる。

  • macOSの祖先にあたる「NEXTSTEP」のデスクトップ。当然、このときにもrootは存在する

Mac OS XでもしばらくNetInfoが使われていたが、Leopard(v10.5)のとき廃止され、LDAPに取って代わられた。LDAPもNetInfo同様動的なシステム管理機構(ディレクトリサービス)としての機能を持ち、rootを含むユーザ管理を行う。そのGUIツールが「ディレクトリユーティリティ」だ。

  • 「ディレクトリユーティリティ」を使うと、rootを有効化できる

macOSにおける「root」のありかた

rootは全能なユーザであり、パスワードが外部へ流出しようものならそのシステムは脆弱そのものとなる。そのため、多くのUNIX系OSでは「rootの遠隔からのログインを禁止する」、「一般ユーザがroot権限に昇格するコマンド(su/sudo)を利用制限する」などの対策を講じることが常道だ。

一方のmacOSでは、Mac OS X最初期(v10.0)の時点から「rootの無効化」というより強力な手法を採用している。root権限での処理が必要なときには、適切な権限を持つユーザ(あらかじめ管理者権限を与えられたユーザ)に対し、ダイアログを表示してそのユーザ名とパスワードの入力を求めるというしくみ。rootという存在自体は残るが、パスワードを無効化することでログインを不能にするのだ。Terminalでは「sudo」コマンドがその役を担い、直接rootとして振る舞う必要がない状態となっている。

rootは前述の「ディレクトリユーティリティ」でパスワードを設定することで有効化できるが(Termnalでは「sudo passwd root」)、セキュリティ対策上そうしないことが推奨される。有効化してしまうと、特に厳重なパスワード管理が必要なアカウントが増えるからだ。

  • ディレクトリユーティリティのほかに、Terminalで「sudo passwd root」を実行してもrootを有効化できる

今回発見されたセキュリティホールは、そのrootとしての権限をパスワードなしで行使できるというもので、危険極まりない。rootを有効化する必要すらなく、ユーザ名入力欄に「root」とだけ入力すればいいので、直接Macに触れられる状況であれば誰でも「全能の神」として振る舞えてしまうのだ。

実際、Finderを利用してシステムフォルダ(/System/Library以下)にあるファイルの読み書き/消去を試してみたが、あっさり目的を果たすことができた。さすがに実行には移さなかったが、「rm -rf /」に相当する破壊行為も可能なずだ(Terminalで実行するという意味ではない)。幸い、rootとしてリモートログインすることまではできないため、Macの直接操作を許さないかぎり被害を受けることはなさそうだが、危険なことに変わりはない。

我々エンドユーザがとるべき対策はひとつ、Appleが早々に配布するであろうセキュリティアップデートを急ぎ適用すること。それまでは、システム環境設定「ユーザとグループ」パネルでゲストユーザのログインを許可しないよう設定を見直すことと、「セキュリティとプライバシー」パネルでスリープ解除時のパスワード要求を厳密にして自分以外のユーザがMacに触れることができないよう設定を徹底するしかない。ユーザ各位の無事を祈る。

  • Finderでシステムフォルダ内にファイルを書き込むところ。「root」であればなんでもできてしまう

  • "root対策"を講じたセキュリティアップデートを適用するまでは、自分以外のユーザがMacに触れることができないよう設定を徹底するしかない

追記:11月30日付で配布開始された「セキュリティアップデート2017-001」により、上述のセキュリティホールは解消された(ユーザの許可なしに自動インストールされる)。掲載の都合で問題解決後の状況説明となってしまったが、macOSというシステムにおいて「root」がいかに重要な存在かの理解につながれば幸いだ。

  • 自動インストールされる「セキュリティアップデート2017-001」によりセキュリティホールは塞がれる