DARK MATTER

CDI Engineer's Technical Blog

Black Hat Europe 2018 Arsenalで発表してきました

情報分析部の中島とアルバイトの野村です。

イギリス、ロンドンで12/3から12/6まで開催されていたBlack Hat Europe 2018のArsenalで発表してきました。

f:id:cdi-nakajima:20181217104704j:plain

Arsenalでは、発表者にブースが提供され、ツールのデモンストレーションを1時間30分程度実施します。 Briefingsとは異なり、公聴者と机を挟んでインタラクティブにやりとりをするため、ツールに対する要望や質問などのフィードバックを非常に多く受けることができました。

tknk_scanner

今回、我々は tknk_scanner というツールを開発し、発表しました。

f:id:cdi-nakajima:20181217104910j:plain

このツールは、マルウェアをアップロードすることで、そのアップロードしたファイルの表層解析情報とそのファミリ名を特定する情報を提供するツールです。 概要をGithubから引用します。

  • Automatic identification and classification of malware
    • Scan the original code of malware with yara.
  • Dumps original code of malware
    • You can easily get the original code.
  • Community-based
    • Integrates multiple Open Source Software and free tools
  • User-friendly Web-UI
    • Users can submit malware and check scan results using the Web-UI.

f:id:cdi-nakajima:20181217104955p:plain

マルウェアはパックや難読化されているケースが多く、シンプルにファイルだけを見てファミリを特定することは難しいです。 そこで、tknk_scannerはマルウェアが実行時にはアンパックされていることを想定し、実行時にメモリ上へ展開されるマルウェアのオリジナルコードをダンプします。ダンプには、OSSのhollows_hunterやフリーツールのprocdumpなどを利用しています。そして、ダンプ結果をyaraでスキャンすることで、そのファミリを特定することを目指します。 また、VirusTotalなどのツールとも連携し、検体に関する情報を利用者に提供します

tknk_scannerのソースコードはnao_secのGitHub (https://github.com/nao-sec/tknk_scanner) で公開しています。

f:id:cdi-nakajima:20181217105130j:plain

おわりに

BlackHat Europeは身近に行ったことのある知人がおらず、規模感や雰囲気などが読めなかったですが、概ねAsiaとUSAの間くらいの規模感であると感じました。 他のArsenalの発表では、Kubernetesのペネトレーションツールや、OSINTを支援するツールなどの近年の流行を意識した発表もあり、手法などの点から大きな学びを得ることができました。 また、個人的に変わった発表として新しいSandboxサービスの発表もありました。Arsenalでは必ずしもツールがOSSである必要はなく、広く公開されるサービスでも大丈夫なようです。

BlackHatのArsenalは"動くもの"での発表が必須なため非常に具体性の高いものを知ることができます。 今後もBlackHat Arsenalは注目していくべきイベントの一つと言えるでしょう。

f:id:cdi-nakajima:20181217105214j:plain (中央はnao_sec創設者です)

ノベルティでいただいたUSBメモリのコントローラーICが非正規品だったお話

こんにちは、技術部の手島です。

弊社のメンバーがいただいたノベルティのUSBメモリを解析してみたところ、面白いUSBメモリでしたので調査した結果を記載します。

 

f:id:cdi-teshima:20181119125810j:plain

 

f:id:cdi-teshima:20181119125816j:plain

結果から

  • 内容はふつーのUSBメモリっぽい
  • パンフレットのPDFファイルが入っている
  • ただしUSBとフラッシュメモリを制御するICが非正規品
  • 使われているフラッシュメモリも判明せず(怪しい)

 

USBフラッシュドライブコントローラーICの調査

まず、ラズパイに繋いでUSBベンダIDを取得しました。USB Vendor IDは0x058f, Product IDは0x6387でした。USB.orgによると、これは 台湾のAlcor Micro社のFlash Driveだそうです。ここまでは問題ありません。

参考:http://www.linux-usb.org/usb.ids

 

このコントローラICの表面を見ると、型番は "Ango89GTC" らしいのですが、この広いインターネット上で型番が全く見当たりません。大抵の場合、検索方法を工夫することで、数世代前の型番や同じメーカーの別のIC製品がヒットするはずです。また、このICのパッケージ上にはAlcor社のメーカーロゴが見当たりません。

 

参考:Alcor Micro社 HP http://www.alcormicro.com/

 

このICにはAlcor社のロゴが見つからない 

f:id:cdi-teshima:20181119140809j:plain

 

参考までに、同社の別製品ではメーカーロゴが印刷されています。

 

f:id:cdi-teshima:20181119141403j:plain

 

Picture From: https://www.alibaba.com/product-detail/AU6331-Alcor-Yasukuni-SSOP28-au6331-c33_60024253627.html

 

そこでAlcor社に問合せたところ、以下の返答をもらいました。

 

(訳)この型番のICはうちの製品ではない、もしうちの製品なら "Alcor" のロゴが印字されているはずだ

 

つまりこのICは、勝手に「私はAlcor社のデバイスでーす」と名乗っている非正規品だと判明しました。

 

フラッシュメモリを調査・・・したが特定できない

フラッシュメモリが実装されてると思われる部分に黒い樹脂があります。フラッシュメモリがどのような状態か、また型番を特定するため、黒い樹脂を取り除けないか試しましたが、300℃の加熱にも耐えてしまいます。除去するには高濃度の硝酸などが必要と思われますので、一旦調査を打ち切りました。

 

f:id:cdi-teshima:20181119144312j:plain

 

f:id:cdi-teshima:20181119144359j:plain

※バイスに挟まれた上部の物体は、今回の対象とは異なるUSBメモリです

 

このような実装を行う場合、以下のような可能性が考えられます。

 

  • パッケージ化コスト削減のためフラッシュメモリのダイを直接はんだづけ(削減できるのかな?)
  • 型番を見られたくないフラッシュメモリが載っている

 

具体的には・・・

 

  • B級品
  • リマーク品(勝手に大手ブランドのロゴを使う)
  • ジャンク品
  • 中古品から剥がした...等々

 

従って、もしも品質が劣悪な、不良セクタ率の高いフラッシュメモリが使われている場合、突然のデータ消失が起きうる可能性があり、このUSBメモリを重要なデータの保存に使うことはおすすめできないです。

 

おわりに

今回のICからはBadUSBのような挙動は見られませんでしたが、身近なところから得体の知れないICが出てきて驚きました、というお話でした。今回はできませんでしたが、USBストレージコントローラーICとフラッシュメモリ部を開封して顕微鏡写真を撮ると、流通経路や製造メーカーが判明するかもしれません。

 

それでは失礼します。

Voltage Fault Injection をやってみた

こんにちは。技術部の中尾です。

奇跡的?に8月はアサインされた案件が少なかったので、夏休みの自由研究として以前からやってみたかった Voltage Fault Injectionをやってみました。 この攻撃は、サイドチャンネル攻撃の一種で、プロセッサの電源にグリッチを印加する、すなわち一瞬だけ電圧を下げることで誤動作させるというものです。

例えば、あるスマートキーに以下のようなCプログラムが実装されているとしましょう。

result = (input_key == correct_key);
if(result)
    unlock();
else
    lock()

1行目で、入力された鍵を検証し、2行目で正しければ解錠するという条件分岐があります。 攻撃者は、誤った鍵を入力し、2行目の条件分岐を実行されるタイミングでグリッチを入力します。この時、間違った鍵が入力されている(resultがfalse)にもかかわらず、unlock()が実行されてしまうことがあります。

このように、グリッチによって誤作動する事を利用した攻撃が、Voltage Fault Injection Attackです。

正直、これは研究室レベルの話でだと思っていたのですが、近年、Nintendo WiiU[1]のSecure Bootのバイパス手法として実際に使われたことが報告されています。

攻撃対象

今回の攻撃対象は、Atmel社のマイコンATMega328のArduino互換ボードを使用しました。クロックは16MHzです。基板とパーツ合わせて500円くらいでした。

マイコンで動作するプログラムはこんな感じにしました。

volatile bool flag = true;
volatile bool once = true;
volatile const unsigned WAIT = 0xEFFF;

snip...

#pragma GCC optimize ("O0")
void loop() {
  volatile unsigned k;
  volatile unsigned i;

  while(flag){
    k = 0;
    Serial.print("Loop");
    for(i=0; i<WAIT; i++)
      k++;
    flag = (k==WAIT);    
  }
    if(once)
      Serial.print("\n\rSuccess!!");
    once = false;
}

このプログラムは、Loopという文字列を無限ループで出力するプログラムです。グリッチが印加されることで、Voltage Fault Injectionが成功すると、変数kが想定外の値になり、無限ループを抜け、"Success!"という文字列を出力します。

この攻撃は、とにかくタイミングが命です。攻撃が有効な時間をとにかく広げるような作りにしています。また、コンパイラによる最適化を抑制するpragmaも追加しています。

Glitcher

CPUに印加する電圧を一瞬下げるための装置(Glitcher)を作成しました。というとなんかすごそうですが、実際は転がっていたZybo Z7というFPGAボードで、グリッチの素になるパルスを作って、トランジスタで電圧変換&電流増幅しただけです。

f:id:cdi-nakao:20180913172511p:plain
Glitcher外観
Zybo Z7には、4つのスライドスイッチ、6つのプッシュボタンが使えるので、プッシュボタンを押した時にGlitchが出るようにしています。 また、スライドスイッチその組み合わせでグリッチの長さを変えられるようにしてあります。

Glitcherの出力波形を下図に示します。 ブレットボードにそのへんにあった部品で適当に電圧変換&電流増幅回路を実装したので、あまりきれいな波形ではないですが、200ns程度のGlitchはできているようです。(パルス回路はむずかしい...)

f:id:cdi-nakao:20180913172547p:plain
Glitcher出力波形

攻撃開始!

それでは、実際に攻撃してみます。プログラムが実行されると、シリアルポートに、Loopと表示され続けます。この時にGlitcherのプッシュボタンを連打すると...

f:id:cdi-nakao:20180913172651p:plain
攻撃結果

攻撃成功!

上の写真は、Glitcherの出力をCPUボードのVcc端子に接続して、Glitcherの出力をオシロスコープでモニターしながら、グリッチを入力した時のものです。Success!という文字列が出力されたことから、グリッチにより無限ループを抜け、Voltage Fault Injection攻撃が成功したことがわかります。

おわりに

この攻撃手法をはじめて聞いた時、ハードウェアの電源ラインにアクセスして、大量の Try & Error をやらなきゃいけない攻撃手法なんて、実際の攻撃にはつかえないと正直なところ思っていました。

しかし、IoTデバイスが攻撃対象となった場合、攻撃対象のハードウェアは攻撃者の手の内にあります。すなわち、これまで使えそうもなかった攻撃が現実的なものになりうるということでもあります。

今回はシンプルなCPUボードと、攻撃が簡単なファームウェアを用いた検証でした。また時間を見つけて、次はLinuxが動いているARMボードといった、もう少しリアリティのあるものを対象にしたいと考えています。

参考文献

  1. https://media.ccc.de/v/33c3-8344-nintendo_hacking_2016
株式会社サイバーディフェンス研究所 / Cyber Defense Institute Inc.