sandboxとは、各アプリがアプリ間でデータなどを直接やり取りできないようにする機能のことです。
アプリには、アプリが使うデータを保存するために、アプリ個別の領域が用意されて、アプリはその領域にしかデータ保存ができません。
アプリをスマフォにインストールするときには、まず、スマフォの中に専用個室が作られ、アプリはその個室内でデータを処理することになります。
これが、子供が砂場の中で遊ぶような状態であることから、砂場を意味するsandbox機能と呼ばれています。
仮にマルウェアのアプリを誤ってインストールしたり、ウイルスに感染してしまっても、マルウェアは砂場の外に出れないので、他のアプリのデータを盗み見たり、書き換えたりすることができません。
iPhoneやiPadなどのOSであるiOSには、このsandbox機能があります。
AndroidやWindowsにsandbox機能がないというのは正確ではないですが、iOSのそれと同レベルではありません。
iPhoneが他のスマフォに比べて、セキュリティ上比較的安全とされる理由のうちの1つは、このsandbox機能です。
sandbox機能がなくても、各アプリが自分のデータを他のアプリからアクセスできないようにできます。
それを正しく設計すれば、データにアクセスされたくないアプリが、自分のデータを守ることができるということになります。
それに対して、sandboxは個々のアプリは、そのアプリ以外のデータにそもそもアクセスできないという点で異なります。
このことを、たとえ話しを交えながら説明します。
スマフォなどの端末の内部全体を街にたとえ、各アプリが使うデータ領域を家にたとえ、アプリをその家の住人にたとえることにします。
防犯のために、sandbox機能のない街では、各家の戸締りをしっかりしてください。というのに対して、sandbox機能があると、家の住人が外出できないように玄関がない家を建てているようなものになります。
前者は、戸締りしてない家は泥棒に入られてしまうし、仮に戸締りを万全にしていても鍵をこじ開けられてしまうかもしれないということです(特権奪取とかゼロデー攻撃と呼ばれています)。
一方で、後者は、そもそも泥棒が家の外に出ることができないことになります。
ただ、家の住人は玄関も窓もない真っ暗な家の中に隔離されているのかというと、そうではありません。
住むために必要な食材などの物資は与えてもらえるようになっています。
玄関はないけど、そのやりとりだけできる、小さな穴くらいは開いているということになります。
また、アプリが動作するのに最低限必要なデータについては屋外の様子を知ることができます。
家の中から外が見えるが、外から中は見えないマジックミラーの窓がついているようなものです。
「あれ?でもアプリから連絡先とか写真に共通でアクセスできるアプリがあるよ。」と思われるでしょう。
これは、iOS標準のアプリのいくつかは、街にもとからある特殊な家屋、いわば役場のようなものになっているからです。
そのような役場については、役場が許可した家からだけは、直接データを読み書きできるようになっています。
役場とだけは郵便のやりとりができるようなものです。
ちょっと、街と住人にたとえているので、これを読むと、自分が住人のように思ってしまうかもしれませんが、冒頭にたとえたとおり、住人に相当するのはアプリです。
iPhone利用者は、そんな街の市長さんということになります。
したがって、住人に役場の何をやりとりさせるのかを、市長さんとして役場に適切に指示する立場になります。
sandbox機能の街は、とても安全そうですが、その反面、住みにくそうな街でもありますよね。
隣に住んでいるのは親しい友人で、相手もこちらを信頼してくれていたとしても、互いに行き来することはできず顔も見れないということですから。
互いの家に玄関はないし、窓から近所の家は見れるけれど、相手の家の窓はこちらから見るとマジックミラーで鏡になっているから、その家の中にいる友人の顔を見ることはできないということになります。
郵便はあるが、それは役場とだけしか使えず、役場以外の家とはやりとりできないわけです。
逆に、sandbox機能のない街の家々は、みな、普通のガラスの窓がついていて、中を見られたくなかったら、カーテンを閉めてください。泥棒に入られたくなかったら、玄関の鍵を施錠してください。ということになります。
スマフォに話しを戻すと、sandbox機能があるiOSでは、アプリ間でのデータ通信や共有を直接することはできません。
このため、複数のアプリを連携させたいと思うアプリ開発者からは、データ連携の仕組みが欲しいという要望が当初からありました。
これに対して、アップル社はセキュリティ等を重視して拒否してきました。
ただし、直接やりとりできないと何も連携できないのかというと、そうではなく間接的な方法ならできるので、必要なら間接的に連携する仕組みを開発すべきというのが、アップル社の考えになります。
この街は、街の住人同士の直接のやりとりをできないようにしていますが、住人が街の外とやりとりすることは制限していません。
住人は、街の外の家には郵便を送ることができ、その家を介すことで、間接的にならば隣人とやりとりできることになります。
この街の外の家に相当するのが、インターネット上のアプリのサーバです。
そのため、アプリ間でのデータ連携をするには、アプリのサーバを開発しなければならず、それを省けたら助かるというのが開発者の言い分ということになります。
そこだけで考えると、すぐ隣の家の人に連絡するのに、わざわざ街の外の人を介して連絡するのは回りくどいと思うかもしれません。
しかし、隣の家の人に、電話するようなもので、仕組みとしては電話局を経由して隣家につながるため回りくどいし電話代もかかることになりますが、必ずしも不便ではないですよね。何より、それのおかげで安全な街なのだということを忘れてはなりません。
しかし、互いに信頼している家の人同士なら少しは、直接やりとりできるようにしてあげようかな?とiOS10の計画のときに心が揺らいで、1年ほど前にその予告がされました。
そのため、どうやって信頼関係を確認するのかとか、玄関は大きすぎるけど、既にある郵便用の穴を使えばできないかなどを試行錯誤していたようです。
これがどうなるのかに興味がありましたが、アップル社のリリース概要:
What's New in iOS 10.0
を読む限りでは、sandbox機能は緩和されなかったように見受けられます。(詳細な資料をまだ読んでいないので、実際のところはまだわかりませんが、ひとまず)
アプリ開発者の要望が問題だったと思うかもしれませんが、その先には、利用者の要望や期待があるわけです。
アプリ間で直接データのやりとりができるようになるということが、セキュリティ面ではどういう影響があるのかを理解したうえで、利用者は要望を出さないと、いつか、sandbox機能が緩和されるかもしれないので注意が必要です。
そのような意味では、iOSの音声認識機能であるSiriをアプリでも使えるようにしたSiriKitなどは、ここで説明したsandboxの観点で安全性と利便性に着目しながら各種設定をすることが必要です。
従来はOSだけがアクセスしていたところに、アプリがアクセスできるようになることには、ここで紹介したような危険性が生じる場合があるわけです。
なお、sandbox機能では、各アプリのスマフォ内のデータは強固に保護されますが、サーバに送るデータは、サーバの機能の強度によることになります。すなわち、家の中のデータは安全に保護されていますが、サーバに何を書き込むか、誰に読ませるかは、注意しないといけません。
また、アプリ固有のデータではなく、連絡先、カレンダーや写真などiOS標準の一部のアプリのデータについては、それらを適切なアプリにだけアクセスさせるように注意しないといけません。
これらの設定は、iOSであれば、「設定アプリ」→「プライバシー」→各アプリの「>」で設定できます。
ここで許可することは、せっかく備わっているsandbox機能を一部解除することになるのだということを踏まえて判断する必要があります。
これまで確認したことがなかったようであれば、上記の設定を確認して、本来アクセスの必要がないアプリへの許可を禁止に戻しておきましょう。
ということで、sandbox機能が何かということと、それのセキュリティ面での有用性とアプリの利便性との関係、利用者として注意しないといけないことについて紹介しました。
ここまでで本題は終了です。
でも、ここまでのことが、なんとなくわかって、もうちょっと詳しく知りたいというときだけ、以下を読み進めてください。
ここまで、sandbox機能を街と家にたとえ、泥棒から家を守る話しを例に説明しました。
sandbox機能は、泥棒を家の中に閉じ込めることで、他の家を守るわけですが、「泥棒って、そもそも家の外にいるんじゃないの?」と思ったかもしれません。
これは、実生活ではそうなのですが、この街にたとえると、家のない来訪者はいません。ただし、この街に引っ越してくることはできます。引っ越し者が来ると、新築の家を建てて、その中に入居させることになります。道路に相当するようなところは、郵便屋さんの通路になるだけで、住人もそこに留まることはできません。
この引っ越してきて入居することが、アプリのインストールに相当します。
そして、泥棒に相当するのが、マルウェア(ウイルス)です。
したがって、sandbox機能そのものは、マルウェアに感染すること(マルウェアをインストールしてしまうこと)を防げるものではりません。
仮に、マルウェアをインストールしてしまっても、それがスマフォ内のデータを盗んだり書き換えることを防ぐためのものです。
街に泥棒は引っ越してくるかもしれないけれど、泥棒は、家から外に出られないということになります。
それなら、sandbox機能があればマルウェアに感染してしまっても安全かというと、そうではありません。
既に紹介したとおり、sandbox機能は、スマフォ内の各家々のデータを守りますが、仮にマルウェアに役場のデータ、すなわち連絡先や写真へのアクセスを許可してしまえば、街の外、すなわち、スマフォの外のインターネット上のサーバにデータを送信することはできます。
したがって、まずは、マルウェアに感染しないようにすることが大切です。
これについては、アプリをインストールするときに、それがマルウェアでないかをよく注意することが、いかに重要なことかということになります。
したがって、インストールの際に、どのデータにアクセスするかを聞いてきたり、表示していたりするので、その内容をよく確認することが重要です。
それを許可してしまったら、すなわち、街の市長として、役場にデータを出すように指示してしまったら、それによるデータの被害を防ぐことはできません。
なお、マルウェアがこっそりインストールされることは、いまのところ、PCと異なりスマフォの場合にはありません。
必ず、「App Storeアプリ」の画面を経由してインストールされます。
そのときに注意すればよいので、逆に、そのときの表示内容は、ちゃんと読んで怪しいアプリではないかを丁寧に確認しましょう。
ただし、これの落とし穴としてあるのが、スマフォをPCとケーブル接続したときです。このときに、PCがマルウェアに感染していると、そこを介して、結果的にスマフォが、知らない間にこっそり感染するということはあり得ます。
これを防ぐのは難しいですが、その可能性があることは知っておきましょう。
後半の話しが、難しかったなら、忘れてください(笑
さっきのところまで、わかっていれば、とりあえず大丈夫(のはず)です。
注:技術者のみなさまへ
技術者ではない人に、わかってもらえるように配慮しすぎたので、若干、技術的に微妙なところ(sandbox機能ではなく、その上のcontainment機能であるかのような表現)もありますが、わかりやすさ優先ということで、ご容赦ください。
最近のコメント