本サイトは、快適にご利用いただくためにクッキー(Cookie)を使用しております。
Cookieの使用に同意いただける場合は「同意する」ボタンを押してください。
なお本サイトのCookie使用については、「個人情報保護方針」をご覧ください。

最新情報

2019.03.11

DeepLocker : AI-embedded attack

 本ブログでは、AI(=人工知能)を使用し、セキュリティ対策を回避して標的をピンポイントで攻撃する手法について解説します。


 2018年8月に開催されたBlack Hat USAにおいて、IBM Researchの研究者らが「DeepLocker」と呼ぶ、マルウェアを使用した標的型攻撃の新手法を提案しました。


 DeepLockerの最大の特徴は、既知のマルウェアを害のないアプリケーションに偽装することで、アンチマルウェアやサンドボックス等による検知を回避できる点、そして、標的を正確に識別してピンポイントで攻撃できる点にあります。このことは、何重にも張り巡らされたセキュリティ対策を容易に突破してシステムに侵入し、標的のみをピンポイント攻撃できることを意味します。そして、この実現に機械学習(Deep Learning)を使用しています。


 ところで、サイバー攻撃においてDeep Learningは目新しいキーワードでしょうか?答えは「いいえ」です。Deep Learningを使用したサイバー攻撃の事例は幾つも存在します。


 では、DeepLockerの何が新しいのでしょうか?

 筆者は、サイバー攻撃における「機械学習の使い方を変えた」ことにあると考えています。


 これまでのDeep Learningの使い方は「攻撃の自動化」が主流でした。「攻撃者の手動操作を自動化する」、「人間のように振る舞ってセキュリティ対策製品による検知を回避する」等です。一方、DeepLockerは「AIの仕組みそのものに攻撃を埋め込む(=AI-embedded attack)」というアプローチを採用しています。このメリットは、Deep Learningの「処理過程がブラックボックス化されているために動作解析が困難」という特性を利用することで、セキュリティ対策製品による検知を回避する高い隠匿性能を獲得できることにあります(近年、Deep Learningの動作解析を行う研究も盛んに行われています)。


 そこで本ブログでは、DeepLockerの「標的の識別性能」と「高い隠匿性能」を実現する仕組みを解説した上で、この高い隠匿性能を破ってDeepLockerを検知する手法を提案することにします。


 本ブログが、「AI-embedded attack」を理解するための一助になれば幸いです。



1 DeepLockerの概要


 DeepLockerは、IBM Researchが開発したマルウェア対策研究のためのPoC(Proof of Concept)です。平時はマルウェアを良性のアプリケーション(Benign application)に偽装しておき、標的を認識した場合のみマルウェアとして振る舞うことができます。


 以下にDeepLockerの概要を示します。



DeepLockerの概要(出典:講演資料 by IBM Research)

 DeepLockerは、良性アプリケーション(Benign application)と暗号化された既知のマルウェア(Existing malware)を組み合わせて作成されます。良性アプリケーションは、平時は顔認証システムやビデオチャットアプリ等として振る舞いながら標的の属性(=標的を識別するための情報)を収集します。そして、収集した属性を基にDeep Learningで標的の識別を行い、対象が標的の場合、マルウェアを復号して攻撃を行います。一方、標的ではない場合、良性アプリケーションとして振る舞い続けます


 このように、標的を認識するまでは良性アプリケーションとして振る舞い続けることで、アンチマルウェアによる検知回避(※)を図っています。

※標的を認識するまでは検知されませんが、(内蔵するマルウェアによっては)復号時点で検知されることがあります。


 では、どのようにして標的を認識し、そしてマルウェアを復号するのでしょうか?

 以下に、標的の認識から(マルウェアを復号する)秘密鍵を生成するまでの流れを説明します。



マルウェアを復号する流れ(出典:講演資料 by IBM Research)

 本ブログでは、良性アプリケーションを「顔認証システム」と仮定します。そして、本システムは(PCのカメラから取得した画像の中から)人間の顔を識別して人物を特定できるものとします。なお、人物の特定は、システムに内蔵されている顔認識モデルで行います。


  1. マルウェアの暗号化

    先ず初めに、攻撃者は事前に作成した秘密鍵(Key)を使用してマルウェアを暗号化しておきます。そして、暗号化したマルウェアを顔認証システムの構成要素として含めておきます。

  2. 属性の収集

    顔認証システムが起動されると、PCのカメラ経由で周りの画像を取り込みます。

    取り込んだ画像が顔認識モデル(Face Detection Model)に入力されると、本モデルは標的(Target)の顔情報をベクトル化した標的の属性(High-dimensional facial features)を出力します。

  3. 標的の識別

    手順2で出力された標的の属性を鍵生成モデル(Key Generation Model)に入力します。鍵生成モデルは、標的の場合は秘密鍵(Key)、標的ではない場合は適当な値を出力します。なお、鍵生成モデルは、特徴量を「標的の属性」・ラベルを「秘密鍵」としてDeep Learning(Convolutional Neural Network等)で事前に学習させて作成します(Deep Learningへの秘密鍵の埋め込み)。

  4. マルウェアの復号

    手順3で秘密鍵が出力された場合、これを使用してマルウェアを復号します。


 このように、Deep Learningベースの顔認識モデルと鍵生成モデルを組み合わせることで、対象が標的の場合のみマルウェアを展開/実行する「標的の識別性能」を実現しています。また、マルウェアの暗号化とDeep Learningに秘密鍵を埋め込むことにより、「高い隠匿性能」も実現しています。


 なお、Black Hat USAの講演では、暗号化したWannaCryを内蔵したDeepLockerを検証用のネットワーク経由でばら撒き、途中経路でセキュリティ対策製品に検知されることなく数多くのPCに侵入することに成功。そして、PCのカメラで標的を識別し、標的のPCに侵入したDeepLockerのみがWannaCryを展開/実行した、という実証実験の結果が示されました。



2 DeepLockerの動作検証


 本検証では、DeepLockerの動作検証を行うために、検証用のDeepLockerを作成しました。


 以下、作成手順と動作検証の結果を示します。


2.1 マルウェアの収集と良性アプリケーションの作成

 筆者の知る限りDeepLockerのソースコードや設計書は公開されていないため、Black Hatの講演資料を基に、検証用のDeepLockerを作成しました。


 先ずは、DeepLockerに内蔵するマルウェアの収集と、これを偽装する良性アプリケーションを作成しました。


マルウェアの収集

 本家のDeepLockerではWannaCryを採用していますが、本検証ではEICARを採用しました。


 EICARは、アンチマルウェア製品のテスト目的で作成された疑似マルウェアです。

 実行しても破壊や情報搾取といった行為は一切行わないため、検証を安全に行うことができます。また、殆どのアンチマルウェア製品で検知できるため、DeepLockerの隠匿性能を検証するには最適です。


 ※EICARは広く知られていますので、これ以上の説明は割愛致します。


良性アプリケーションの作成

 本家のDeepLockerはビデオチャットアプリを使用し、標的の顔画像や音声・位置情報等を属性として収集しています。本検証では顔認証システムを作成し、標的の属性は顔画像のみとしました。


 本検証で作成した顔認証システムは顔認識モデルを内蔵しており、PCのカメラから取り込んだ画像を基に人物を特定することができます。なお、顔認識モデルは、「VGGFACE2」を学習データとし、Deep Learning(Convolutional Neural Network)で学習させることで作成しています。


 以下は、顔認識モデルで識別可能な人物の一例を示しています。



識別可能な人物一覧(出典:VGGFACE2License))

 ここで、上図の「Target」と記されている人物(Isao Takaesu=筆者)が、本検証における標的となります。当然ながら、筆者の顔画像はVGGFACE2に含まれていませんので、筆者の顔画像は別途Google画像検索SNS等から収集しました。


 以下に、収集した標的の顔画像を示します。



収集した標的の顔画像(一例)

 講演時やイベント参加時の写真、戸隠神社で撮った写真など、約50枚の顔画像を収集することができました。


 ここで、50枚程度の画像数は学習データとして十分でしょうか?

 これは微妙なところです。この枚数では顔認識モデルの精度が低くなる可能性があります。つまり、標的ではない人物を標的として誤認する可能性があることを意味します。


 そこで、モデルの識別精度を少しでも高めるために、収集した画像を左右反転させる等して水増し(Data Augmented)することにしました。



Data Augmentedの例

 その結果、標的の学習データを100枚程度に増やすことができました。このように様々なバリエーションの顔画像を作ることは、顔認識精度の向上に寄与することになります。言い換えると、(入手可能な標的の顔画像が少ない場合でも)Data Augmentedを行うことで、標的の属性数を増やせることを意味します。


 それでは、早速作成した顔認証システムを起動してみます。


 以下のように、PCのカメラから周りの画像を取り込み、人物の顔を正確に認識していることが見て取れます。以下の場合、識別結果(Unlock)と人物名(Isao Takaesu)、そして認識精度(96.8%)を返しており、Unlockは認証成功を表しています。



顔認証が成功した様子

 ※本検証では、認識成否の閾値を認識精度「95%」以上としています。


 一方、学習していない人物(Brian Austin Green氏)の場合はReject(認証失敗)を返します。また、認識精度も低くなっていることが分かります。

※Brian氏の顔画像もVGGFACE2から収集。



顔認証が失敗した様子

 このように、一見すると何の変哲もない顔認証システムとして動作します。

※本システムの詳細は、筆者のGitHubリポジトリ「Broken Face Recognition」をご参照ください。


2.2 DeepLockerの作成

 EICARと顔認証システムが出揃いましたので、これらを組み合わせて、以下の処理フローを実現するプログラムを作成しました。



DeepLockerの処理フロー(出典:講演資料 by IBM Research)

 処理フローは、大きく「EICARを隠匿するConcealmentフェーズ」と「攻撃を実行するUnlockingフェーズ」に分けられます。


Concealment

 EICARの暗号化と(顔認識モデルへの)秘密鍵の埋め込みを行います。


  1. EICARの暗号化(Payload Concealment)

    任意に生成した秘密鍵を使用し、EICAR(Malicious payload)を暗号化します。

  2. 顔認識モデルへの秘密鍵埋め込み(Target Concealment)

    標的の顔画像をDeep Learningで学習させる際、特徴量を標的の顔画像(Target attributes)」、ラベルを秘密鍵(Secret key)」として学習データを作成しておきます。こうすることで、標的の顔が入力されると秘密鍵を出力する顔認識モデル(DeepLocker)ができあがります。この時、秘密鍵は顔認識モデル(=Deep Learning)内に埋め込まれる形になります。


Unlocking

 標的の識別やマルウェアの復号(展開/実行)を行います。


  1. 標的の識別(Target Detection)

    顔認証システムが起動されると、PCのカメラから周りの画像を取得します。そして、顔認識モデルで標的の識別を行います。カメラに映った人物(Input attributes)が標的の場合、顔認識モデルは秘密鍵(Recovered key)を出力します。一方、標的ではない場合、普通の顔認証システムとして振る舞い続けます。

  2. マルウェアの実行(Payload Unlocking)

    3で出力された秘密鍵を使用してマルウェアを展開(Payload Unlocking)し、実行します。


 以下は、本検証で作成したDeepLockerを示しています。

 ここで、「encrypt.bin」は暗号化したEICAR(ファイル名は適当)、「fineturning.h5」は秘密鍵が埋め込まれた顔認識モデル(学習済みのネットワーク重み)、「*.py」が標的の識別やEICARを復号化するPythonコードになります。



作成したDeepLocker

 ここで、上記の状態ではDeepLockerを実行するためにPythonの実行環境が必要です。また、ファイルがバラバラに存在するため、DeepLockerを広く配布するには適していません(本検証では配布はしませんが)。そこで、PyInstallerを使用し、DeepLockerを1つのプログラム(exe)に纏めました。



exe化したDeepLocker

 これにより、このファイルを1つ配布さえすれば、Pythonの実行環境が無くともDeepLockerを起動できるようになります。


隠匿性能の確認

EICARの暗号化顔認識モデルへの秘密鍵埋め込みにより、アンチマルウェア製品の検知を回避できるのか確認します。


 先ず初めに、暗号化していないEICARを内蔵したダミーのDeepLocker(DeepLocker_no_encrypt.exe)を起動し、アンチマルウェア製品に検知されるのか確認します。なお、本検証では、アンチマルウェア製品としてWindows Defenderを使用しました。


 DeepLockerを起動すると、一時フォルダにEICAR(eicar.com)や顔認識モデル(fineturning.h5)等のリソースやDLL等が展開されます。



EICARが検知された様子

 そして、赤枠部分で示すように、顔認証システムが立ち上がる前に、一時フォルダに展開されたEICAR(eicar.com)はWindows Defenderに検知されました。


 次に、暗号化したEICARを内蔵したDeepLockerを起動してみます。



EICARは検知されない(DeepLocker起動時)

 先程と同じようにEICAR(encrypt.bin)や顔認識モデル等は一時フォルダに展開されますが、(標的を認識するまでは)EICARは暗号化されているため、Windows Defenderに検知されませんでした。


 このように、マルウェアを暗号化しておくことで、(標的を認識して展開されるまでは)アンチマルウェア製品による検知を回避できる隠匿性能を獲得できることが分かりました。


標的の識別性能の確認

 ピンポイントで標的のみを攻撃できるのか検証します。


 先ずは標的ではない人物をカメラに映してみます。

 本検証では、事前に学習済みの「Zhang Xin」氏(出典:VGGFACE2)を使用しました。



標的以外を識別した様子(EICARは展開されない)

 「99.8%」の精度で「Zhang Xin」氏を正しく識別していることが分かります。

 しかし、本人物は標的ではないため、EICARは展開されません。


 次に、標的(Isao Takaesu)をカメラに映してみます。



標的を識別した様子(EICARが展開される)

 「96.0%」の精度で「Isao Takaesu」を正しく認識していることが分かります。

 そして、本人物は標的であるため、表向きは普通の顔認証システムとして動作し続けますが、秘密裏にencrypt.binを復号し、EICAR(eicar.com)を展開しました。

※但し、展開されたEICARは、この後Windows Defenderに検知されました。


 この動作検証の結果から、平時は顔認証システムとして振舞うことでアンチマルウェア製品による検知を回避し、標的を認識した場合のみEICARを展開できることが分かりました。なお、今回はEICARを展開するのみという単純な作りのためアンチマルウェア製品(Windows Defender)に検知されましたが、この部分の処理を巧妙に細工することで、アンチマルウェア製品に検知されずに展開/実行できる可能性があります。



3 対策


 次にDeepLockerを検知する方法を考えます。

 IBM Researchによる講演では、以下の対策が提案されていました。



対策一覧(出典:講演資料 by IBM Research)

 様々なアプローチから対策が提案されていますが、本検証では機械学習の観点から、「AI-powered concealment」対策の「Deceptive attributes」に着目しました。


 「Deceptive attributes」は聞き慣れない言葉ですが、直訳すると「属性を欺くこと」になります。筆者はこれを「DeepLockerを騙してマルウェアを展開させる」と解釈しました。標的のPCに入り込む前の入り口対策にて、DeepLockerを騙してマルウェアを展開させることができれば、容易にアンチマルウェア製品で検知できると考えました(これにより、DeepLockerの標的PCへの侵入を防ぐ)。


3.1 DeepLockerを騙す

 それでは、どのようにしてDeepLockerを騙すのでしょうか?

 実は、DeepLockerに内蔵されている顔認識モデル(=Deep Learning)は、Adversarial Examplesと呼ばれる特殊なデータに弱いことが知られています。このAdversarial Examplesは、認識モデルの判断を意図した方向に誤らせることができる特性を持ちます。


 本検証では、適当に選定したOriginalの顔画像に摂動(Perturbation)を与え、様々な人物として誤認識させるようなAdversarial Examplesを生成しました。そして、このAdversarial ExamplesをDeepLockerに与えながら、EICARの展開有無を監視することにしました。



DeepLockerの検知イメージ

 この方法が上手くいけば、標的として誤認識するAdversarial Exampleを与えた場合、DeepLockerはEICARを展開するため、容易にWindows Defenderで検知することができるはずです。


Adversarial Examplesの概要

 本題に入る前に、Adversarial Examplesの概要を簡単に説明します。


 Adversarial Examplesとは、元の画像に摂動を与えることで、認識モデルに元画像とは全く別物として誤認識させてしまうことができるデータを指します。なお、人間の目には元画像とAdversarial Examplesの違いは殆ど認識できません

※Adversarial Examplesの例は画像が多いですが、音声データのAdversarial Examplesも存在します(Audio Adversarial Examples)。


 以下に、Adversarial Examplesの例を示します。



例1. パンダをテナガザルと誤認識(出典:OpenAI

 左が元の画像です。認識モデルは見た目通り「パンダ」として認識します。

元画像に(真ん中の)摂動を与えて作成したAdversarial Examplesが右の画像です。人間には相変わらずパンダに見えますが、認識モデルは「Gibbon(テナガザル)」として認識します。



例2. 猫を鳥と誤認識(出典:MBSD Blog

 左が元の画像です。認識モデルは見た目通り「」として認識します。

元画像の任意の1ピクセルを白く塗り潰して作成したAdversarial Examplesが右の画像です。人間には相変わらず猫に見えますが、認識モデルは「」として認識します。



例3. 亀をライフルと誤認識(出典:labsix

 本例は、3Dプリンタで作成した特殊な亀の模型を使用しています。

 人間の目には「亀」に見えますが、認識モデルは「ライフル」として認識します。この模型には甲羅や手足に特殊な模様が施されており、これが誤認識を引き起こす要因となっています。なお、上記2例の静止画と異なり、リアルタイム(動画)で物体認識できるモデルをも誤認識させることができます


 以上の例から分かるように、元画像に巧みな摂動を与えるだけで、認識モデルの判断を容易に誤らせることができます。


3.2 Adversarial Examplesの作成

 Adversarial Examplesを作成する手法は多種多様ですが、本検証ではL-BFGSと呼ばれる手法を採用しました。


 以下に、本検証で作成したAdversarial Examplesの一例を示します。

 下図のOriginalが元画像、Differenceが摂動、AdversarialがAdversarial Examplesです。なお、標的以外の顔画像はVGGFACE2から取得しています。



例1. Frank-De-Boer氏をJoumana-Kidd氏として認識した様子

 本例では、Originalを「Frank-De-Boer氏」とし、これに摂動を与えて「Joumana-Kidd氏」のAdversarial Examplesを作成しています。見た目にはOriginalとAdversarial Examplesの違いは全く分かりません。しかし、Adversarial ExamplesをDeepLockerに与えると、「99.2%」の精度で「Joumana-Kidd」氏として認識しています。そして、「Joumana-Kidd」氏は標的ではないため、EICARは展開されません



例2. Jenny-Lang-Ping氏を標的(Isao Takaesu)として認識した様子

 本例では、Originalを「Jenny-Lang-Ping」氏とし、これに摂動を与えて「Isao Takaesu」のAdversarial Examplesを作成しています。見た目にはOriginalとAdversarial Examplesの違いは全く分かりません。しかし、Adversarial ExamplesをDeepLockerに与えると、「99.0%」の精度で「Isao Takaesu」として認識しています。そして、「Isao Takaesu」は標的であるため、EICARが展開されていることが分かります(この後直ぐにWindows Defenderに検知されました)。



例3. John-Winchester氏を標的(Isao Takaesu)として識別した様子

 本例では、Originalを「John-Winchester」氏とし、これに摂動を与えて「Isao Takaesu」のAdversarial Examplesを作成しています。見た目にはOriginalとAdversarial Examplesの違いは全く分かりません。しかし、Adversarial ExamplesをDeepLockerに与えると、「98.1%」の精度で「Isao Takaesu」として認識しています。そして、本例でもEICARが展開されていることが分かります(この後直ぐにWindows Defenderに検知されました)。


 この結果から、標的を含む様々な人物のAdversarial ExamplesをDeepLockerに与えてEICARの展開有無を監視することで、容易にDeepLockerを検知できることが分かりました。通常、検知側にとって標的が誰であるのかは不明ですが、可能性のある様々な人物のAdversarial Examplesを数多く試していくことで、DeepLockerを検知できると考えられます。しかし、対象となり得る人物が無数に存在する場合は、現実的な時間内で標的を特定することは困難であるという課題も存在します。これをクリアする方法は今後の課題としたいと思います。


ホワイトボックステストとブラックボックステスト

 本検証では、顔認識モデルの内部構造や学習データ等を把握した上でAdversarial Examplesを作成しました(ホワイトボックステスト)。しかし、実戦ではDeepLockerの内部構造はブラックボックス化されており、入手できる情報はモデルへの入出力情報(顔画像と識別結果)程度になります(ブラックボックステスト)。


 しかし、このような条件下でも、Black-Box Attackと呼ばれる手法を用いることで、Adversarial Examplesを作成できることが知られています。今回は時間の都合上Black-Box Attackの検証は行いませんでしたが、ご興味を持った方がいましたら、Black-Box Attackを試すことを推奨致します。筆者も今後検証を行い、その結果をブログ等で報告したいと考えています。



4 まとめ


 本ブログでは、Deep Learningを使用して「標的の識別」と「高い隠匿性能」を実現した、AI-embedded attackと呼ばれる標的型攻撃を解説しました。


 本検証では、DeepLockerを顔認証システムに偽装しましたが、標的の属性を収集する目的が達成できるのであれば、偽装するシステムに制限はありません。例えば、メモ帳アプリに偽装し、キーストロークで標的を識別することや、通話アプリに偽装し、音声で標的を識別することも技術的には可能です。また、DeepLockerの配布方法についても、アプリケーションをメールやアプリストア経由で配布することや、スマートフォンや入館管理システムの顔認証機能として内蔵しておくことも可能です。


 このように、「AI-embedded attack」は(現状では)攻撃側が有利になる状況にあるため、何らかの強力な対策を講じる必要があります。本検証ではAdversarial Examplesを使用する対策を提案しましたが、課題も存在することが分かりました。講演資料の27ページでも触れられていますが、AI-embedded attack の根本的な対策としてはAIモデルの動作解析が有効だと考えています。

 本分野は研究途上ですが、多くの研究者によって盛んに研究が行われていますので、今後も研究動向を注視していきたいと考えています。そして、AI-embedded attackの有効な対策が見つかった場合は、本ブログで紹介したいと考えています。


以上


高江洲 勲 の他のブログ記事を読む

プロフェッショナルサービス事業部
高江洲 勲