「Man-in-the-Machine攻撃」ーDEFCON 26で発表された新たな攻撃手法

f:id:nanashi0x:20180820202148p:plain

Vector Art by Vecteezy

 

Man-in-the-Machine: Exploiting Ill-Secured Communication Inside the Computer | USENIX

 

Anoymask(@UXYEA)です。

実は先週、DEFCON 26に参加してきました。

the outside of the building

図:DEF CON会場

the lecture

図:DEF CONの講演

 

DEF CONに参加する中で、個人的に興味深いな感じた攻撃手法があったので本ブログで紹介したいと思います。

その攻撃手法とは、「Man-in-the-Machine」です。

中間者攻撃を意味する「Man-in-the-Middle」という攻撃手法はご存知かもしれませんが、「Man-in-the-Machine」という攻撃手法については恐らく知らないと思います。

私もDEFCON 26に参加した時、初めて耳にしましたが、どうやら講演したAalto大学の研究者達が発見し、名前を全く新しい攻撃手法のようです。

そこで、この記事では、冒頭で「Man-in-the-Middle(=MitM)」に少し触れながら「Man-in-the-Machine(=MitMa)」を解説します。その後、上記論文に記載されている攻撃方法の一部を紹介したいと思います。

この記事の目次

  • MitMとMitMaについて
  • MitMaの概要
  • 論文の概要
  • MitMaを使用した攻撃
  • 最後に

 

1.MitMとMitMaについて

このセクションでは、前述した通り中間者攻撃「Man-in-the-Middle(=MitM)」に少し触れながら「Man-in-the-Machine(=MitMa)」を解説します。

MitM(中間者攻撃)とは

MitMとは、一言で説明すると「クライアントとサーバ間の通信を攻撃者が正規通信のフリをして中継し、通信内容を傍受する攻撃手法」です。

図にすると以下のようになります。

f:id:anoymask:20180818140452p:plain

図1 MitM全体図


MitMの攻撃方法としては、DNSの設定を書き換えて攻撃者を中継させるようにする方法や、こちらの記事(Wifiパイナップル)で解説した通り、“攻撃者が用意した”、パスワード無しで接続できる無料Wi-Fiスポットを作成して接続させる方法等があります。

では、MitMすることにより攻撃者は何が出来るようになるのでしょうか?

ここで例示するものは一例ですが、MitMをすることによって、以下の様なことが可能になります。

  • 重要情報の窃取(個人情報、認証情報 等)
  • マルウェアのダウンロード
  • フィッシングサイトへの誘導 

MitMは、攻撃ツール等も容易されており攻撃難易度も高くないため、現在でも多くの攻撃者によって使用される攻撃手法となっています。

具体的に中間者攻撃の方法に関して学びたい場合は、Udemyに中間者攻撃に特化したコース動画があるのでこちらからどうぞ。

>>「Learn Man In The Middle Attacks From Scratch」の詳細を見る

MitMaとは

続いてこのセクションでは「Man-in-the-Machine(=MitMa)」について解説していきます。

MitMaとは、一言で説明すると「クライアントとサーバ間の通信を同一ホスト内の別ユーザ(=攻撃者)が正規ユーザのフリをして通信内容を傍受する攻撃手法」です。

MitMaでは、MitMのように必ずしも通信を中継する必要はなく、最終目標として「他のユーザの通信を乗っ取ること」を目標としています。

 

そのため、主に攻撃のパターンとして以下の2パターンがあります。  

f:id:anoymask:20180818223739p:plain

図2 MitMa全体図

 ※図2では、後述する攻撃手法を説明するためにクライアントをWebブラウザとしています。

 

パターン①は、WebブラウザとPC内のサーバとの通信を、攻撃者が中継してデータを窃取する例を示しています。

パターン②は、通信お中継はせずに攻撃者がユーザAのブラウザになりすまして、サーバと通信を行いデータを窃取を窃取する例を示しています。

図2のようなMitMaの攻撃方法として、例えばブラウザのパスワードマネージャーのような拡張機能がPC内のサーバと通信を行う際に、攻撃者が中継、又は“なりすまし”をしてデータを窃取するような方法が考えられます。

MitMaの前提条件

MitMaは同一ホスト内で攻撃が完結するため、攻撃を成功させるためには以下のような前提条件があります。

したがって、MitMaは、MitMと比べると、攻撃難易度がとても高くなっています。

MitMaで攻撃者が得るもの

MitMaをすることにより攻撃者は、以下の様なことが可能になります。

  • 重要情報の窃取(個人情報、認証情報 等)
  • ハードウェアトークンの窃取(2段階認証、FIDO U2F 等)
  • 不正なコマンドのインジェクション

 MitMaの説明は、後述する実際の攻撃方法でもう少し詳しく解説します。

2.論文の概要

MitMaを用いた実際の攻撃手法について解説する前に、今回記事を執筆するにあたって参考にした論文「Man-in-the-Machine: Exploiting Ill-Secured Communication Inside the Computer」について簡単に説明します。

このセクションでは主に、以下の点を説明します。

攻撃者

論文内で著者は、攻撃者として以下のユーザを想定していました。

  • 仕事の同僚
  • 家族
  • コンソールアクセスによるゲストユーザ

上記したような人たちが攻撃者として想定される理由は、「MitMaをするためには標的ホストを操作出来ることが前提条件」だからです。

攻撃方法

論文では、攻撃方法としてプロセス間通信(=IPC通信)と呼ばれる内部プロセスとのコミュニケーションチャンネルを中継して攻撃する方法にフォーカスしています。

プロセス間通信という言葉を初めて聞いたのではないかと思うので、簡単に説明します。

ソフトウェアは、UIなどの操作を担うフロントエンドのアプリケーションとバックエンドのデータベースで分かれているものが多く存在します。

この間の通信を行うものが、プロセス間通信と呼ばれるものです。

※本記事では、プロセス間通信については記事が長くなるため上記説明のみとさせていただきます。

対象OS

f:id:anoymask:20180818161125p:plain

表1 OSごとの攻撃方法

対象となるOSは、macOSWindowsLinuxが対象となります。

論文内では、macOS High SierraWindows 7Windows 8.1でMitMaを試したと記載されています。

ケーススタディ

論文では、ケーススタディとして主に以下の3つをあげています。

  1. パスワードマネージャー
  2. ハードウェアトーク
  3. HTTP APIを使ったバックエンドとの通信

なお、本記事では私にとって特に印象的だった「1.パスワードマネージャー」を用いたMitMaのみ説明する事とします。

「2.ハードウェアトークン」「3.HTTP APIを使ったバックエンドとの通信」のそれぞれのケースに関しても詳細を知りたい場合は、原文を参考にしてください。

 

3.MitMaを使用した攻撃

それでは、実際にMitMaに脆弱なパスワードマネージャーに対する攻撃方法を見ていきましょう。

さっそくですが、以下にOSやバージョンごとの脆弱なパスワードマネージャーの表を示します。

f:id:anoymask:20180818170819p:plain

表2 MitMaの影響を受けるパスワードマネージャー

論文では、表2に示されている6つのパスワードマネージャーの調査結果が示されていました。
結果は、表2を見て分かる通り、どのパスワードマネージャーも何かしらのOSで脆弱でした。

パスワードマネージャーにも数種類ありますが、基本的な仕様は一緒ですので、本記事では「RoboForm」と「Password Boss」のみの説明する事とします。(原文ではそれぞれのパスワードマネージャーごとに攻撃方法が記載されていますので興味があれば読んでみてください。

 

RoboFormの仕様について

RoboFormは、パスワードマネージャーとブラウザの拡張機能との通信をloopbackネットワーク(IPv4: 127[.]0[.]0[.]1/8、IPV6: ::1/8) を使ってHTTPで認証せずに通信しています。

プロトコルはとても単純で、以下のようになっています。(Eは拡張機能、Sはサーバ)

  1. E → S: “list”
  2. E ← S: [item id1,item id2,...,item idn]
  3. E → S: “getdataitem”, item idi
  4. E ← S: itemi

ブラウザの拡張機能は、まず最初にパスワードマネージャーに格納されている全てのアイテムのリスト(=list)をリクエストを送信します。要求する際は、hxxp://127[.]0[.]0[.]1:5472に対してHTTPのPOSTリクエストを送信します。

リクエストを受け取ったサーバは、ブラウザの拡張機能からのリクエストに対してアイテムの識別子(=item id)を返します。この時返される識別子には、タイプ(パスワード、パスワード保護付きメモ等)や名前が含まれています。

続いて、ブラウザの拡張機能は、サーバからの識別子を含んだ応答に対して欲しいデータの識別子を選択(=getdataitem)して再度サーバに対してリクエストを送信します。

最後に、サーバは再度ブラウザの拡張機能から来たリクエストに対して選択された識別子に応じたデータを平文で返します。

上記の通り、RoboFormは認証せずに通信を行います。そのため、MitMaを行う攻撃者はブラウザの拡張機能のフリをして、hxxp://127[.]0[.]0[.]1:5472にリクエストを送信します。

その後は、先ほど説明した手順に従って通信を行うことで好きなデータを窃取することが可能になるのです。

 

Password Boss

続いてPassword Bossに関してみていきましょう。

Password Bossは、Native messageとプロセス間通信の一種である名前付きパイプ(下図のApplication-specifc IPC)というものを使用して通信を行います。 

f:id:anoymask:20180818232213p:plain

 (Native messageでの通信。Man-in-the-Machine: Exploiting Ill-Secured Communication Inside the Computer

より)

Poword Bossの通信は、Native password manager app(以下、Native appと表記)を起動すると、「名前付けパイプ」を、あらかじめ決められた命名規則に従い、最大50のインスタンスを作成します。

その後、名前付けパイプのアクセスコントロールリストはAuthenticatied users(≒ローカルユーザ)に生成したインスタンスのreadとwrite権限を付与します。

最後に、Native messaging hostが名前付けパイプに接続してWebブラウザの拡張機能とNative appのMessageを中継します。この際Messageは平文で送られており、認証等も特に行われません。

 

攻撃方法

最初に攻撃者は、正規のNative messaging hostになりすまして、Native appが生成した名前付けパイプのインスタンスに接続します。

その後、攻撃者は出来る限り多くの名前付きパイプのインスタンスを作成します。

なぜなら、インスタンスを大量に作成することにより、正規のNative messaging hostは攻撃者が用意した名前付きパイプのインスタンスにしか接続出来なくなるのです。

上記の方法により、攻撃者はMessageを中継することによりMessageを傍受することが可能になります。

前提として、Authenticatied userの権限もつローカルユーザーであれば、MitMaをすることが可能となります。論文では、ゲストユーザーアカウントを使用した攻撃方法も書いてありますので、興味があれば原文を読んでみてください。

まとめ

  • MitMとは、「クライアントとサーバ間の通信を攻撃者が正規通信のフリをして中継し、通信内容を傍受する攻撃手法」のこと
  • MitMaとは、「クライアントとサーバ間の通信を同一ホスト内の別ユーザ(=攻撃者)が正規ユーザのフリをして通信内容を傍受する攻撃手法」のこと
  • MitMaの攻撃ケースは、「1.パスワードマネージャー」「2.ハードウェアトークン」「3.HTTP APIを使ったバックエンドとの通信」の3つ 

最後に

論文内で、Aalto大学の研究者達は、「外部からの攻撃に対しては対策が十分に考えられているのに、内部からの攻撃についてはセキュリティについてあまり考慮されていない」と非難しています。

実際に前のセクションで攻撃手法のケーススタディと共に紹介した「RoboForm」や「Password Boss」のように、対策が不十分なソフトウェアが数多く存在します。

確かに内部からの攻撃は、物理的なアクセスが出来ることやSSHリモートデスクトップ等で侵入出来ていることが前提となるため、攻撃難易度がとても高いです。

しかし攻撃される可能性はゼロではないですし、多層防御のことを考えると、これからは考慮されるべきではないでしょうか。

本記事で紹介した内容は、「Man-in-the-Machine: Exploiting Ill-Secured Communication Inside the Computer」のほんの一部だけです。

論文内では、本記事の倍以上の情報が記載されているため、是非気になる部分だけでも読んでMitMaについて学んでみて下さい。

 

 

【参考】

名前付きパイプ - Wikipedia

方法: ネットワークのプロセス間通信で名前付きパイプを使用する | Microsoft Docs

名前付きパイプによるプロセス間通信をやってみる - Ayumu's I/O

Native messaging - Mozilla | MDN

 

論文を読む

(執筆:Anoymask (@UXYEA) | Twitter