JavaScriptを用いて車をハッキングすることは可能
技術者で作家のチャーリー・ジェラルド氏が、JavaScriptとSDR無線機「HackRF One」を用いて車のハッキングに成功したことを報告しています。なお、ジェラルド氏は、あくまで啓蒙目的で友人の車を用いて行った実験の内容を報告したもので、マネをして発生した問題については責任を負わないと断りを入れています。
Hacking cars in JavaScript (Running replay attacks in the browser with the HackRF) | Charlie Gerard | Senior frontend developer & Creative Technologist Charlie Gerard | Senior frontend developer & Creative Technologist
Using a HackRF and JavaScript Browser App to Perform Rolljam Replay Attacks on a Car
https://www.rtl-sdr.com/using-a-hackrf-and-javascript-browser-app-to-perform-rolljam-replay-attacks-on-a-car/
ジェラルド氏は数年前、PCでラジオを受信可能な機器(RTL-SDR)を用い、通過する飛行機の生データを取得することを試みた経験があります。
SDRをもっと使ってみたいと思ったジェラルド氏は、データの送受信が可能なHackRF Oneを入手。Universal Radio Hackerをダウンロードして触り、「ウェブブラウザとJavaScriptで同様のツールが実現するのではないか」と考えて、最終的に「車をJavaScriptでハッキングできるのでは?」ということに挑んだとのこと。
実験の様子は以下の1分の動画に端的にまとめられています。
Hacking my friend's car using JavaScript - YouTube
今回の実験のために提供してもらった友人の車。ドアはロックされた状態です。
車のボンネットにノートPCやHackRF Oneなど、必要な機器が用意されていました。
まずは車のキーが用いる周波数を受信できるようにします。ジェラルド氏はブラウザでHackRF Oneに接続するため、WebUSB APIを用いたコードを書いたとのこと。
そして、デバイスを受信モードにして、車のキーを操作しました。受信した信号の記録にはFile System APIの録音機能を利用しています。なお、車は無音でキー操作に反応していませんが、これはジェラルド氏が車が信号を受信できないよう妨害を行っているためです。
信号自体は発信されているので、端末で受信することに成功。信号の視覚化にはCanvas APIを用いています。
再びWebUSB APIを用いて、ローカルファイルに保存した信号をロードし、HackRF Oneで送信します。正しく機能しているかわかるように、Canvas APIを使用してデータをインポートし、信号がどう見えるかを視覚化しています。
「ピピッ」と音が鳴り、車のロックが解除されました。一連の操作はすべてウェブブラウザと素のJavaScript、ブラウザAPIのみで実現しています。
なお、かつてキーファブから送信される信号は常に同じコードでしたが、1995年以降、リストのコードを入れ替えながら使用する「ローリングコード」方式になっています。実験の途中でジェラルド氏がキーファブの信号を車が受信できないよう妨害したのは、「車のレシーバーが信号を受信できないよう妨害して、代わりに攻撃者が信号を取得し使用できるようにする」というロールジャム攻撃をブラウザから実行するためです。
ジェラルド氏は「全体として楽しいプロジェクトで、JavaScriptを用いて車をハッキング可能だと検証できたことは本当にエキサイティングでした」と述べています。