car key, keys, car wallpapers, car, automobile, lock, security, unlock, remote, vehicle, auto

セキュリティ研究者のShubham Shah氏とSam Curry氏が、自動車メーカー2社のAndroidアプリから接続する認証基盤の脆弱性を組み合わせ、所有者のアカウントを通じて車両を遠隔操作できることを実証しました。ドアの解錠やエンジン始動などが可能で、両社は報告から約2時間以内に修正し、影響を受けた認証情報も更新しました。

対象は、通信を通じて車両の状態確認や操作ができるコネクテッドカーのサービスです。研究者はメーカー名を非公表とし、米国ではアカウントと実車を使って攻撃の全工程を検証しました。オーストラリアでも、所有者の情報取得から認証情報の取得、車両操作へ至る経路が見つかりました。

アプリの接続先から所有者の認証基盤へ

研究者はAndroidアプリを解析し、ログインや車両操作の要求がどのサーバーへ送られるかを調べました。2社のアプリはともに、顧客アカウントやログインを管理するForgeRockという認証基盤につながっていました。

通常のログインでは、サーバーがアカウント情報や認証コードなどを段階的に要求し、手続きを終えるとログイン済みの状態を示すセッションを発行します。アプリはそのセッションを、車両関連のAPIを利用するためのトークンに交換していました。APIは、アプリとサーバーが機能やデータをやり取りする窓口です。

研究者が取得したセッションでも、所有者のアプリと同じ遠隔アクセスが可能でした。位置情報や車両の状態の取得に加え、ドアの施錠・解錠、エンジンの始動・停止を操作できる状態です。アプリには車種や契約に応じて、クラクションやライトを動かす機能もありました。

オーストラリアでは車両番号からメールアドレスを取得

オーストラリア側では、公開の登録照会サービスでナンバープレートからVINを取得しました。VINは車両を識別する番号で、研究者はこれを管理用APIへ渡し、契約者の識別情報を経て、所有者のメールアドレスなどを取得しました。

管理ツールのJavaScriptにはAPIキーが埋め込まれ、複数のAPIはそのキーだけで利用できる状態でした。別のJavaScriptには、テスト環境用のOpenIDM管理者認証情報も含まれており、同じ情報が本番環境でも通用しました。

OpenIDMへのアクセスには、ウェブへの不正な要求を遮断するWAFが設けられていました。研究者はURLの経路処理の不備を利用して制限を回避し、内部の管理用APIへ到達。その結果、メールアドレスを基に対象アカウントを乗っ取り、車両操作に使える認証トークンを取得できました。

米国では管理コンソールの初期認証情報が通用

米国側でも、WAFとサーバー内部で同じURLの解釈が異なることを利用し、通常は遮断される管理機能へ到達しました。接続先は、OpenIDMのJavaサービスを動かすApache Felixの管理コンソールでした。

このコンソールには初期設定の認証情報でログインでき、稼働中のサービス設定を変更する機能にもアクセスできました。研究者はタスク実行の設定を通じてスクリプトを動かし、認証サーバー上でコマンドを実行できる状態にしました。そこから利用者のアカウント情報を閲覧・変更し、所有者としてログインして車両へ操作命令を送れる状態になったのです。

OpenIDMは利用者の登録やアクセス権の割り当てを管理し、利用者データを扱う仕組みです。管理用の内部アカウントと外部の利用者アカウントを分けて保持し、最上位の管理者には全面的なアクセス権が与えられます。今回の構成では、OpenIDMが顧客情報を保持し、ログイン処理を担うForgeRock Access Managementがその情報を利用していました。研究者はこの認証基盤を通じて、対象顧客の有効なセッションを作成できました。

スマートキーのリレー攻撃とは異なる経路

今回の手法は、アプリの接続先と顧客アカウントを経由するものでした。一方、スマートキーを利用するリレー攻撃は、車両と鍵の間の無線信号を別の機器で中継し、鍵が離れていても解錠や始動を成立させる手法です。

チューリヒ工科大学の研究チームは、8メーカーの10モデルを対象に、有線・無線の中継装置で解錠と始動を実証しました。実験では車両と鍵が最大50メートル離れた状態で攻撃でき、一部のシステムでは鍵から最大8メートルの距離で信号を届けられました。車両側の装置は車体から30センチ以内に置く必要があり、装置の費用は構成により100〜1,000ドル(約1万6,000〜16万円)です。

車両ごとの操作権限を確かめるAPIの認可

所有者アカウントの保護に加え、車両を指定して操作するAPIには、対象車両への権限を検査する認可が関わります。自動車APIでは、送信されたVINがログイン中の利用者の車両に属するかを確かめないと、他人の車両の施錠・解錠やエンジン操作につながります。

識別番号を受け取ってデータや機能を操作する各APIでは、利用者が対象への操作権限を持つかを検査します。今回の研究では、研究者がメーカー側の匿名化の要請を受け入れ、2社の名称を伏せて技術的な経緯を公開しました。