IRKitはオープンソースであり公開されているAPIがあることから、多くの方が自分の好みの方法でリモコン信号を送れるようハックを行ってきました。
任意のきっかけで自宅のコンピューターからcurlコマンドを実行してリモコン信号を送ったり、自分でデザインしたウェブサイトからリモコン信号を送れるようにしたり。
ところが、ウェブサイトからリモコン信号を送ることのできる機能は、悪用されると、IRKitの使用者が意図しないタイミングでリモコン信号を送られる可能性があることがわかりました。
IRKitの使用者が、IRKitを接続しているネットワークと同一のネットワークに接続しているコンピューターを使い、ブラウザで攻撃者が用意したウェブサイトを開き、IRKitのIPアドレスを攻撃者が推測できる場合に、IRKitの使用者のインタラクション無しに、JavaScriptを利用してリモコン信号を送ることができます。
具体的には例えば、IRKitを家のWi-Fiアクセスポイントに接続するようセットアップ済みの状態で、IRKitの接続しているものと同じアクセスポイントに接続したコンピューターやスマートフォンを使い、Twitterやメールで送られてきたURLをブラウザで開くと、リモコン信号を送られる可能性があります。
この問題の発見者は自分です。この記事執筆時点までにこの問題を使用した攻撃は確認、報告されていません。
この問題の対象となるIRKitは、2014年1月〜2015年8月頃に販売したIRKitです。2015年8月中旬以降販売したIRKitにはこの問題を修正済みのファームウェア(IRKit内部のソフトウェア)を使用しています。IRKitのバージョンを以下のように確認し、バージョン番号が v3.0.0.gxxxxx
未満、つまり v1.x.x.gxxxx
または v2.x.x.gxxxx
と表示されている場合には、ファームウェアのアップデートを行ってください。
上記バージョンが表示されていない場合には、IRKitXXXXと表示されているところをタップするとバージョン情報を再取得します。また、ご自身でIRKitのファームウェアを変更しアップデートを行っている場合にはバージョンが表示されない可能性があります。
IRKitのファームウェアのアップデートは、これまでArduino IDEを使用した方法をご案内していましたが、Mac, Windowsのコンピューターで使えるIRKitのファームウェアアップデート用アプリケーション IRKit Updaterを用意しましたので、お使いください。
IRKit Updaterの動作環境は、以下のとおりです。
- Mac OSX 10.8以降
- Windows 7以降
以下にIRKit Updaterの使用方法を説明します。
- 最新のIRKit Updaterをダウンロード
- ダウンロードしたzipファイルを展開
- IRKitをUSBケーブルを使ってコンピューターに接続
- Windowsをお使いの場合には、IRKitのドライバをインストール (Macをお使いの場合は必要ありません)
- 管理者としてログインします
- Windows 7, 8 の場合
- スタート メニューから、コントロール パネル、システムとセキュリティ、の順にクリックし、システム の下の デバイス マネージャー をクリックします
- ほかのデバイス の下に IRKit が表れるので、IRKit を右クリック
- ドライバーソフトウェアの更新、コンピューターを参照してドライバー ソフトウェアを検索します、 を順にクリック
- 次の場所でドライバー ソフトウェアを検索します の下にある参照ボタンをクリックし、IRKit Updaterを解凍したフォルダを選択
- サブフォルダーも検索する、にチェックをつけ、次へ をクリック
- ドライバー ソフトウェアの発行元を検証できません、と表示されたら このドライバー ソフトウェアをインストールします をクリック
- Windows 8.1 の場合
- スタート メニューから、PC設定、保守と管理、回復、を順にクリックし、PCの起動をカスタマイズする の下にある 今すぐ再起動する をクリックします
- 再起動後、トラブルシューティング、詳細オプション、スタートアップ設定、再起動、を順にクリックします
- スタートアップ設定 が表示されたら、7 を押す
- デスクトップの右下に テストモード と表示されます
- スタート メニューから、PC設定、コントロール パネル、システムとセキュリティ、システム、デバイス マネージャーを順にクリックします
- ほかのデバイス の下に IRKit が表れるので、IRKit を右クリック
- ドライバーソフトウェアの更新、コンピューターを参照してドライバー ソフトウェアを検索します、 を順にクリック
- 次の場所でドライバー ソフトウェアを検索します の下にある参照ボタンをクリックし、IRKit Updaterを解凍したフォルダを選択
- サブフォルダーも検索する、にチェックをつけ、次へ をクリック
- ドライバー ソフトウェアの発行元を検証できません、と表示されたら このドライバー ソフトウェアをインストールします をクリック
- IRKit Updater を実行
Macの場合は “IRKit Updater.app” をダブルクリック、Windowsの場合は “IRKit Updater.exe” をダブルクリックしてください。- Windows 8.1 の場合、WindowsによってPCが保護されました、というダイアログが表れる場合があります。
この場合には、このダイアログ上の、詳細情報、実行、を順にクリックして実行してください。
- Windows 8.1 の場合、WindowsによってPCが保護されました、というダイアログが表れる場合があります。
- 以下のように表示されるので Update をクリック
- Log areaに進行状況が詳しく表示されます。その後最後に以下のように表示されれば成功
- うまくいかなければ、画面の指示にしたがい再度IRKitを抜き差ししてやり直し、それでもうまくいかなければ Log area 右上の Copy をクリックして、以下のサポートメール [email protected] 宛に、本文に貼り付けて送ってください。
コンピューターをお持ちでなくアップデートができなければ、iPhone/Android向けのIRKit公式アプリ IRKit Simple Remote 内の設定画面の ご意見・ご要望・ご質問 からメールを送ってください。
このファームウェアの修正は、IRKitの Device HTTP API (IRKit本体のHTTPサーバが提供するHTTP API) に対する非互換の修正です。Device HTTP APIを使用したアプリやスクリプトを作成し使用していた場合には、ファームウェアのアップデート後にそれが動作しなくなります。
IRKitに対応している以下のアプリは、アップデート後のファームウェアに対応するよう修正を完了しています。最新版にアップデートをお願いします。
- 公式iPhoneアプリ IRKit Simple Remote
- 公式Androidアプリ IRKit Simple Remote
- iPhoneアプリ NKリモコン
- iPhoneアプリ Geo IR (申請中)
- iPhoneアプリ ジオコマンド (申請中)
それ以外のアプリやご自身で作成されたスクリプトで、IRKit Device HTTP API を利用している場合には、以下のように修正を行ってください。
- ブラウザ以外から IRKit Device HTTP API を利用する場合、HTTPリクエストには
X-Requested-With: curl
のようにヘッダをつけてください。 ブラウザから IRKit Device HTTP API を利用する場合、一部を除いて利用ができなくなります。
POST /messages のAPIのみ、赤外線信号を表すJSONに以下のように、IRKitがWi-Fiアクセスポイントになる際のパスワードを追加し、X-Requested-With
ヘッダを付けないで送信してください。
{"format":"raw","freq":38,"data":[18031,8755,...省略...4400,1190],"password":"XXXXXXXXXX"}
既に学習済みの赤外線信号を表すJSONをなんらかの形で予め記録している場合には、その送信のみできます。赤外線信号の学習は、IRKit Internet HTTP APIを使用すれば、(一手間かかりますが)ブラウザ上でも可能ですので、変更をお願いいたします。
IRKit Device HTTP APIを利用したコードをgithubに公開されている場合には、今後、私がレポジトリを発見次第、上記変更を行った pull request を送る可能性があります。
お手数おかけし申し訳ありませんが、よろしくお願いいたします。