SlideShare a Scribd company logo
Android DEX Formatと
     同じファミリーの
AndroidマルウェアのDEX差分

       ニシダマサタ
        2013/02/23
   第4回マルウェア解析勉強会
自己紹介

ニシダマサタ( @masata_masata )
• セキュアブレイン

• Developer (≠ Researcher, Analyst)
  – 普段は解析・研究よりもコード書いてる




                 第4回マルウェア解析勉強会        2
今日のお話

   マルウェアの解析手法
1. Android実行コード(DEX)のフォーマット

2. 同じファミリーのマルウェアのDEX差分


         多分、皆さんが興味があるであろう
       静的解析とかにはあまり関係のないお話です
            ゴメンナサイm(_ _)m

           第4回マルウェア解析勉強会      3
(Photo: Dalvik By floheinstein)

DEX FORMAT
        第4回マルウェア解析勉強会                                     4
DEX Format Spec.
• DEXファイルフォーマット
 – http://source.android.com/tech/dalvik/dex-format.html

• DEX 命令セット
 – http://source.android.com/tech/dalvik/dalvik-bytecode.ht
   ml

• DEXのInstructionフォーマット
 – http://source.android.com/tech/dalvik/instruction-formats.html

                          “dex file format” ってググれば、出てくるはず

                       第4回マルウェア解析勉強会                            5
DEX File Section
                                 magic number, check sum…
                                 各セクションのオフセット
address




            header
          string_ids
           type_ids
           proto_ids       各種IDリスト
           field_ids
          method_ids              クラスの定義
          class_defs
                                      データ領域
             data                         class data
                                          code item (instructions)
                                          string data
           link_data                      debug info …
                           第4回マルウェア解析勉強会                              6
DEX Header
   header
 string_ids
  type_ids    •   magic: “dexa0350”
 proto_ids
  field_ids   •   checksum: Adler-32形式
method_ids
class_defs    •   signature: SHA-1ハッシュ
   data
              •   filesize
 link_data
              •   …
              •   Section Sizes and Offsets
                  – string_ids_size, string_ids_off …


                        第4回マルウェア解析勉強会                   7
DEX ID lists
   header
 string_ids   • string_ids
  type_ids
 proto_ids
                 – 文字列データへのoffset (data section)
  field_ids   • type_ids
method_ids
class_defs
                 – すべての型名の定義 (class, array, primitive)
                 – 型名 → string_ids
   data
              • proto_ids
 link_data
                 – method prototype identifiers list
                 – return type index, parameters offset
              • field_ids
                 – class index, type index, name index
              • method_ids
                 – class index, proto index, name index
                        第4回マルウェア解析勉強会                     8
DEX Class Definitions
   header
 string_ids
  type_ids     • class index
 proto_ids        – type_idsのindex
  field_ids
method_ids     • access flags
class_defs
                  – private, public, static, final …
   data        • superclass index
 link_data        – type_ids のindex
               • interfaces offset

               • class data offset
                  – クラスの内部的な情報へのoffset
                  – data sectionの中
                         第4回マルウェア解析勉強会                 9
DEX Data Section
   header
 string_ids
              Data Sectionには非固定長のものが置かれる
  type_ids
 proto_ids
              • class data item
  field_ids      – classのフィールド、メソッド情報
method_ids
class_defs
              • code item
                 – メソッドごとに定義される
   data
                 – instructions → 命令列
 link_data
                 – try-catch handler → 例外処理
              • string data item
                 – 文字列データ (MUTF-8)
              • debug info item
              など            MUTF-8: Modified UTF-8
                            ざっくり言うと3byteまでのUTF-8で、それ以上の
                            Code Pointは3byteのサロゲートペアで表現するっぽい
                       第4回マルウェア解析勉強会                      10
offset
    header
                                                                                        entity


 string_id_item            string_data_item
string_data_off (uint)      utf16_size (uleb128)

                               data (ubyte[])

  type_id_item
                                     data section
descriptor_idx (uint)


 proto_id_item               field_id_item                        method_id_item
  shorty_idx (uint)          class_idx (ushort)                    class_idx (ushort)

return_type_idx (uint)       type_idx (ushort)                     proto_idx (ushort)

parameters_off (uint)         name_idx (uint)                       name_idx (uint)

                                                   data section
     type_list
      size (uint)              tpye_item
list (type_item[size])       type_idx (ushort)


                         第4回マルウェア解析勉強会                                                   11
offset
                                    type_list                                              entity

                                     size (uint)

                               list (type_item[size])
 class_def_item
                                                                        encoded_field
    class_idx (uint)
                               class_data_item                        field_idx_diff (uleb128)
  access_flag (uint)
                            static_fields_size (uleb128)
                                                                      access_flags (uleb128)
 superclass_idx (uint)
                           instance_fields_size (uleb128)
 interfaces_off (uint)
                            direct_methods_size (uleb128)
 source_file_idx (uint)
                            virtual_methods_size (uleb128)
annotations_off (uint)
                           static_fields (encoded_field[])
 class_data_off (uint)              instance_fields
                                  (encoded_field[])                  encoded_method
static_values_off (uint)           direct_methods
                                (encoded_method[])                  method_idx_diff (uleb128)
                                   virtual_methods
                                (encoded_method[])                    access_flags (uleb128)

                                                                       code_off (uleb128)
     class_defs section
                                                        code_item                data section
                             第4回マルウェア解析勉強会                                                  12
offset
                                                                                                      entity
  encoded_method


       code_item                                                           debug_info_item
                                     try_item
    register_size (ushort)
                                  start_addr (uint)                         line_start (uleb128)
      ins_size (ushort)
                                insn_count (ushort)                      parameters_size (uleb128)
     outs_size (ushort)                                                       parameter_names
                                handler_off (ushort)
                                                                        (uleb128p1[parameters_size])
     tries_size (ushort)
                                encoded_catch_handler_list
   debug_info_off (uint)
      insns_size (uint)                   size (uleb128)

  insns (ushort[insns_size])                    list
                                (encoded_catch_handler[handler_size])

      padding (ushort)

 tries (try_item[tries_size])   encoded_catch_handler                       encoded_type_addr_pair
         handlers                         size (sleb128)                         type_idx (uleb128)
(encoded_catch_handler_list)
                                           handlers
                                                                                   addr (uleb128)
                                   (encoded_type_addr_pair[])

                                   catch_all_addr (uleb128)
                                                                                          data section
                                第4回マルウェア解析勉強会                                                          13
Instructionsの触り
• OpCode: 218個 (1byteで表現)
  –   move vA, vB
  –   const/4 vA, #+B
  –   if-eq vA, vB, +CCCC
  –   invoke-virtual {vC, vD, vE, vF, vG}, meth@BBBB
• Instruction Format: 30種
  –   B|A|op                    instructionはshort intの配列で
  –   AA|op                     格納されており、1個目の
  –   AA|op BBBB                Low byteがOpCodeになる
  –   AA|op CC|BB               OpCodeによって命令長や
  –   A|G|op BBBB F|E|D|C       フォーマットが違ってくる
                      第4回マルウェア解析勉強会                    14
DEX Section Visualization
                  とあるマルウェアのセクションを色塗りしてみた
                                                 string_ids
              header
address




                                              ID lists
          class_defs

                                                 class_data_item
               data
              section

                                                 code_item



                                                 string_data_item
                                    https://github.com/masatanish/dexdump/
                        第4回マルウェア解析勉強会                               15
DEX Section Visualization
                     string_id & offset
STRINGの場合




                                   string_data_item
                                   (文字列の実体)




             第4回マルウェア解析勉強会                            16
DEX Section Visualization
Class情報の場合

   class_def_item              class_data_item
   クラス名                        フィールド情報
   スーパークラス                     メソッド情報
   インターフェース…




  code_item
  各メソッドの命令列




                    第4回マルウェア解析勉強会                17
(Photo: Android Mini Collectibles – Worker pose By Morten Rand-Hendriksen)




DEX DIFF
              第4回マルウェア解析勉強会                                                             18
同じファミリーのAndroidマルウェアは
        同じようなDEX ファイルになるか?
(Photo: DSC_6565 By euthman)




SAME PERSON??
                                               (Photo:Android Robot By femaletrumpet02)
                               第4回マルウェア解析勉強会                                     19
ということで実験してみた




  (Photo: animal diary science By UGA College of Ag)

                         第4回マルウェア解析勉強会                 20
類似性の尺度
• ssdeep( http://ssdeep.sourceforge.net/ )
   – Fuzzy Hash
      • データ列に対して、ハッシュ値を計算
      • 似ているデータは似ているハッシュになる
   – ハッシュ値同士の類似度を計算できる
      • 0 〜 100 (100は一致)
   – 内部的にはデータをブロックに分割して、ブロック
     ごとに計算してるとかそんな感じだったと思う(うろ
     覚え)


                    第4回マルウェア解析勉強会            21
[#1] ほとんど同じマルウェア
• Enesoluty         ×2
  – 情報詐取系アプリ
  – 対象検体(2つ)
    • 9e5184…, 9ee5bd…
  – 特徴
    • 同じパッケージ名
    • マニフェストファイルは完全に一致
    • メインのActivityは1つ
       – Activity内のソースコードの差分はHTTPの接続
         先URLのみ 第4回マルウェア解析勉強会        22
[#1] DEX Sectionの比較




  9e5184…                   9ee5bd…

Sectionの配置はほとんど一緒に”見える”
            第4回マルウェア解析勉強会             23
[#1] DEXの差分
                        白: 一致, 黒: 不一致




code_itemの後半からほとんどが不一致
        第4回マルウェア解析勉強会                   24
[#1] ssdeepの比較

sha256    ssdeep
9e5184…   384:BhCKVQImSPhVX/npAT7nMC5oYEE57u5Qb2mWSZBaUgj1fhaSiIvMSN
          9RyUFNyWyQ:hV2SJVX/iT7MC5iuuiWoaZ1fTiIpeWyQ
9ee5bd…   384:JULCKVQImSPhVX/npA62DZy4T/llSdolo5eRrZBaUgj1fhaSiIvySN9RyUF
          NyWyo:CV2SJVX/i5DZy4xiGRjaZ1fTiILeWyo




    類似度 68 → なんとなく微妙な値


                           第4回マルウェア解析勉強会                               25
[#2] ちょっと似てるマルウェア
• Enesoluty
  – 特徴
     •   アプリ名が違う
     •   パッケージ名は2つとも同じ
     •   メインのActivity名が違う
     •   メインのActivityのコードはProgressBarが1つある
         か2つあるかの違いと、通信先URLが違う
• 検体(2つ)
  – 9e5184… → 安心ウィルススキャン
  – 68bf97… → 電波改善

                  第4回マルウェア解析勉強会              26
[#2] DEX Sectionの比較




    9e5184…                   68bf97…

これもSectionの配置はほとんど一緒に”見える”
              第4回マルウェア解析勉強会             27
[#2] DEXの差分
       白: 一致, 黒: 不一致




ほとんど一致してない…
   第4回マルウェア解析勉強会       28
[#2] ssdeepの比較

sha256    ssdeep
9e5184…   384:BhCKVQImSPhVX/npAT7nMC5oYEE57u5Qb2mWSZBaUgj1fhaSiIvMSN
          9RyUFNyWyQ:hV2SJVX/iT7MC5iuuiWoaZ1fTiIpeWyQ
68bf97…   384:WCern9AVEeq4G2kFzpA8+P4I/aUgj1fhv6iVvISzDanlfk+:ShACp4G26K4Y
          aZ1fwiVxb+




    類似度 29 → あんまり似てない
            とはいえ、DEXのバイナリ差分よりは似てるのかも




                           第4回マルウェア解析勉強会                               29
何故、あまり似てないか?
    第4回マルウェア解析勉強会   30
似てない理由(推測)
• ソースがほぼ一致していたとしても、少
  しのIDのズレなどが全体に影響
 – DEX全体のバイナリの比較はあまり筋が良く
   なさそう


• そもそもssdeepってどうなのよ?的な話
 – やりたいことにマッチしたアルゴリズムか?



         第4回マルウェア解析勉強会     31
DEXの抽象化
• ソースが似ているという人間の感覚に近
  い値を導きたい
• ソースが似ている → Instructionが似ている
• DEXからソースのエッセンスを抽出
 – code_itemの実行命令列を足しあわせてハッ
   シュ化




           第4回マルウェア解析勉強会      32
Instruction Hash
                                                                                   class_def_item
                 Class Defs List
                  A         B         C         …




   Class Data Item A                      Class Data Item B             Class Data Item C




    method              method              method         method             method
  instructions        instructions        instructions   instructions       instructions
       in
   code_item



各classの各method の(code_item)instructionsを足しあわせてssdeepを算出する
                                     第4回マルウェア解析勉強会                                             33
ということで、もう一度計算




(Photo: 2013-02-06-DSCF4001 By kuujinbo01)
                                        第4回マルウェア解析勉強会   34
#1,#2の比較結果
 Targets                 DEX        Instruction
                         ssdeep     ssdeep
                         (before)   (after)

                         68         100
           1       2

                         29         60
           1

                         30         60
           2


類似性は向上、しかし値としてはやっぱり微妙?

               第4回マルウェア解析勉強会                      35
ついでにTheMovie
• 手元にあったTheMovieの検体17個で
  SSDEEPを算出
• 17C2=136通りの比較結果
           DEX             Instruction
           ssdeep          ssdeep

    Max    96              100
    Min    55              100
    Avg.   64.11           100.0
                                  これはまさに…
           第4回マルウェア解析勉強会                 36
完全に一致




第4回マルウェア解析勉強会   37
まとめ
• DEX FORMATの話
  – 各Sectionの話とData Sectionの中身の話
  – Instructionは時間の都合で触れただけ
• 同じファミリーのマルウェアをssdeepで比較
  – DEXをそのまま比較してもあまり似てない
  – 命令列だけを取り出せば似てる類似度は上がる
    • でもまだいまいち感覚に近くない


• 今後の話
  – 実は、もうちょっと先に進んでる部分も
  – ssdeepどうなのよという話はまだある
    • NCD(Normalized Compression Distance)とか
  – 全く違うアプリ間の比較をしてない
    • 似てないものは似てない値が出るか
                      第4回マルウェア解析勉強会            38

More Related Content

Similar to Android DEX Format & DIFF (第4回マルウェア解析勉強会)

Rのオブジェクト
RのオブジェクトRのオブジェクト
RのオブジェクトItoshi Nikaido
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
 
LITメンター研修_Android0212
LITメンター研修_Android0212LITメンター研修_Android0212
LITメンター研修_Android0212Ryo Yamamoto
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
Databasedesignforsocialgames 110115195940-phpapp02
Databasedesignforsocialgames 110115195940-phpapp02Databasedesignforsocialgames 110115195940-phpapp02
Databasedesignforsocialgames 110115195940-phpapp02hideki hasegawa
 
Scala with DDD
Scala with DDDScala with DDD
Scala with DDD
潤一 加藤
 
ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計
kaminashi
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Shintaro Fukushima
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニック
JubatusOfficial
 
Doom3 commentary
Doom3 commentaryDoom3 commentary
Doom3 commentary
DADA246
 

Similar to Android DEX Format & DIFF (第4回マルウェア解析勉強会) (11)

Rのオブジェクト
RのオブジェクトRのオブジェクト
Rのオブジェクト
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
LITメンター研修_Android0212
LITメンター研修_Android0212LITメンター研修_Android0212
LITメンター研修_Android0212
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
Databasedesignforsocialgames 110115195940-phpapp02
Databasedesignforsocialgames 110115195940-phpapp02Databasedesignforsocialgames 110115195940-phpapp02
Databasedesignforsocialgames 110115195940-phpapp02
 
Scala with DDD
Scala with DDDScala with DDD
Scala with DDD
 
ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニック
 
Doom3 commentary
Doom3 commentaryDoom3 commentary
Doom3 commentary
 

Recently uploaded

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 

Recently uploaded (16)

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 

Android DEX Format & DIFF (第4回マルウェア解析勉強会)

  • 1. Android DEX Formatと 同じファミリーの AndroidマルウェアのDEX差分 ニシダマサタ 2013/02/23 第4回マルウェア解析勉強会
  • 2. 自己紹介 ニシダマサタ( @masata_masata ) • セキュアブレイン • Developer (≠ Researcher, Analyst) – 普段は解析・研究よりもコード書いてる 第4回マルウェア解析勉強会 2
  • 3. 今日のお話 マルウェアの解析手法 1. Android実行コード(DEX)のフォーマット 2. 同じファミリーのマルウェアのDEX差分 多分、皆さんが興味があるであろう 静的解析とかにはあまり関係のないお話です ゴメンナサイm(_ _)m 第4回マルウェア解析勉強会 3
  • 4. (Photo: Dalvik By floheinstein) DEX FORMAT 第4回マルウェア解析勉強会 4
  • 5. DEX Format Spec. • DEXファイルフォーマット – http://source.android.com/tech/dalvik/dex-format.html • DEX 命令セット – http://source.android.com/tech/dalvik/dalvik-bytecode.ht ml • DEXのInstructionフォーマット – http://source.android.com/tech/dalvik/instruction-formats.html “dex file format” ってググれば、出てくるはず 第4回マルウェア解析勉強会 5
  • 6. DEX File Section magic number, check sum… 各セクションのオフセット address header string_ids type_ids proto_ids 各種IDリスト field_ids method_ids クラスの定義 class_defs データ領域 data  class data  code item (instructions)  string data link_data  debug info … 第4回マルウェア解析勉強会 6
  • 7. DEX Header header string_ids type_ids • magic: “dexa0350” proto_ids field_ids • checksum: Adler-32形式 method_ids class_defs • signature: SHA-1ハッシュ data • filesize link_data • … • Section Sizes and Offsets – string_ids_size, string_ids_off … 第4回マルウェア解析勉強会 7
  • 8. DEX ID lists header string_ids • string_ids type_ids proto_ids – 文字列データへのoffset (data section) field_ids • type_ids method_ids class_defs – すべての型名の定義 (class, array, primitive) – 型名 → string_ids data • proto_ids link_data – method prototype identifiers list – return type index, parameters offset • field_ids – class index, type index, name index • method_ids – class index, proto index, name index 第4回マルウェア解析勉強会 8
  • 9. DEX Class Definitions header string_ids type_ids • class index proto_ids – type_idsのindex field_ids method_ids • access flags class_defs – private, public, static, final … data • superclass index link_data – type_ids のindex • interfaces offset • class data offset – クラスの内部的な情報へのoffset – data sectionの中 第4回マルウェア解析勉強会 9
  • 10. DEX Data Section header string_ids Data Sectionには非固定長のものが置かれる type_ids proto_ids • class data item field_ids – classのフィールド、メソッド情報 method_ids class_defs • code item – メソッドごとに定義される data – instructions → 命令列 link_data – try-catch handler → 例外処理 • string data item – 文字列データ (MUTF-8) • debug info item など MUTF-8: Modified UTF-8 ざっくり言うと3byteまでのUTF-8で、それ以上の Code Pointは3byteのサロゲートペアで表現するっぽい 第4回マルウェア解析勉強会 10
  • 11. offset header entity string_id_item string_data_item string_data_off (uint) utf16_size (uleb128) data (ubyte[]) type_id_item data section descriptor_idx (uint) proto_id_item field_id_item method_id_item shorty_idx (uint) class_idx (ushort) class_idx (ushort) return_type_idx (uint) type_idx (ushort) proto_idx (ushort) parameters_off (uint) name_idx (uint) name_idx (uint) data section type_list size (uint) tpye_item list (type_item[size]) type_idx (ushort) 第4回マルウェア解析勉強会 11
  • 12. offset type_list entity size (uint) list (type_item[size]) class_def_item encoded_field class_idx (uint) class_data_item field_idx_diff (uleb128) access_flag (uint) static_fields_size (uleb128) access_flags (uleb128) superclass_idx (uint) instance_fields_size (uleb128) interfaces_off (uint) direct_methods_size (uleb128) source_file_idx (uint) virtual_methods_size (uleb128) annotations_off (uint) static_fields (encoded_field[]) class_data_off (uint) instance_fields (encoded_field[]) encoded_method static_values_off (uint) direct_methods (encoded_method[]) method_idx_diff (uleb128) virtual_methods (encoded_method[]) access_flags (uleb128) code_off (uleb128) class_defs section code_item data section 第4回マルウェア解析勉強会 12
  • 13. offset entity encoded_method code_item debug_info_item try_item register_size (ushort) start_addr (uint) line_start (uleb128) ins_size (ushort) insn_count (ushort) parameters_size (uleb128) outs_size (ushort) parameter_names handler_off (ushort) (uleb128p1[parameters_size]) tries_size (ushort) encoded_catch_handler_list debug_info_off (uint) insns_size (uint) size (uleb128) insns (ushort[insns_size]) list (encoded_catch_handler[handler_size]) padding (ushort) tries (try_item[tries_size]) encoded_catch_handler encoded_type_addr_pair handlers size (sleb128) type_idx (uleb128) (encoded_catch_handler_list) handlers addr (uleb128) (encoded_type_addr_pair[]) catch_all_addr (uleb128) data section 第4回マルウェア解析勉強会 13
  • 14. Instructionsの触り • OpCode: 218個 (1byteで表現) – move vA, vB – const/4 vA, #+B – if-eq vA, vB, +CCCC – invoke-virtual {vC, vD, vE, vF, vG}, meth@BBBB • Instruction Format: 30種 – B|A|op instructionはshort intの配列で – AA|op 格納されており、1個目の – AA|op BBBB Low byteがOpCodeになる – AA|op CC|BB OpCodeによって命令長や – A|G|op BBBB F|E|D|C フォーマットが違ってくる 第4回マルウェア解析勉強会 14
  • 15. DEX Section Visualization とあるマルウェアのセクションを色塗りしてみた string_ids header address ID lists class_defs class_data_item data section code_item string_data_item https://github.com/masatanish/dexdump/ 第4回マルウェア解析勉強会 15
  • 16. DEX Section Visualization string_id & offset STRINGの場合 string_data_item (文字列の実体) 第4回マルウェア解析勉強会 16
  • 17. DEX Section Visualization Class情報の場合 class_def_item class_data_item クラス名 フィールド情報 スーパークラス メソッド情報 インターフェース… code_item 各メソッドの命令列 第4回マルウェア解析勉強会 17
  • 18. (Photo: Android Mini Collectibles – Worker pose By Morten Rand-Hendriksen) DEX DIFF 第4回マルウェア解析勉強会 18
  • 19. 同じファミリーのAndroidマルウェアは 同じようなDEX ファイルになるか? (Photo: DSC_6565 By euthman) SAME PERSON?? (Photo:Android Robot By femaletrumpet02) 第4回マルウェア解析勉強会 19
  • 20. ということで実験してみた (Photo: animal diary science By UGA College of Ag) 第4回マルウェア解析勉強会 20
  • 21. 類似性の尺度 • ssdeep( http://ssdeep.sourceforge.net/ ) – Fuzzy Hash • データ列に対して、ハッシュ値を計算 • 似ているデータは似ているハッシュになる – ハッシュ値同士の類似度を計算できる • 0 〜 100 (100は一致) – 内部的にはデータをブロックに分割して、ブロック ごとに計算してるとかそんな感じだったと思う(うろ 覚え) 第4回マルウェア解析勉強会 21
  • 22. [#1] ほとんど同じマルウェア • Enesoluty ×2 – 情報詐取系アプリ – 対象検体(2つ) • 9e5184…, 9ee5bd… – 特徴 • 同じパッケージ名 • マニフェストファイルは完全に一致 • メインのActivityは1つ – Activity内のソースコードの差分はHTTPの接続 先URLのみ 第4回マルウェア解析勉強会 22
  • 23. [#1] DEX Sectionの比較 9e5184… 9ee5bd… Sectionの配置はほとんど一緒に”見える” 第4回マルウェア解析勉強会 23
  • 24. [#1] DEXの差分 白: 一致, 黒: 不一致 code_itemの後半からほとんどが不一致 第4回マルウェア解析勉強会 24
  • 25. [#1] ssdeepの比較 sha256 ssdeep 9e5184… 384:BhCKVQImSPhVX/npAT7nMC5oYEE57u5Qb2mWSZBaUgj1fhaSiIvMSN 9RyUFNyWyQ:hV2SJVX/iT7MC5iuuiWoaZ1fTiIpeWyQ 9ee5bd… 384:JULCKVQImSPhVX/npA62DZy4T/llSdolo5eRrZBaUgj1fhaSiIvySN9RyUF NyWyo:CV2SJVX/i5DZy4xiGRjaZ1fTiILeWyo 類似度 68 → なんとなく微妙な値 第4回マルウェア解析勉強会 25
  • 26. [#2] ちょっと似てるマルウェア • Enesoluty – 特徴 • アプリ名が違う • パッケージ名は2つとも同じ • メインのActivity名が違う • メインのActivityのコードはProgressBarが1つある か2つあるかの違いと、通信先URLが違う • 検体(2つ) – 9e5184… → 安心ウィルススキャン – 68bf97… → 電波改善 第4回マルウェア解析勉強会 26
  • 27. [#2] DEX Sectionの比較 9e5184… 68bf97… これもSectionの配置はほとんど一緒に”見える” 第4回マルウェア解析勉強会 27
  • 28. [#2] DEXの差分 白: 一致, 黒: 不一致 ほとんど一致してない… 第4回マルウェア解析勉強会 28
  • 29. [#2] ssdeepの比較 sha256 ssdeep 9e5184… 384:BhCKVQImSPhVX/npAT7nMC5oYEE57u5Qb2mWSZBaUgj1fhaSiIvMSN 9RyUFNyWyQ:hV2SJVX/iT7MC5iuuiWoaZ1fTiIpeWyQ 68bf97… 384:WCern9AVEeq4G2kFzpA8+P4I/aUgj1fhv6iVvISzDanlfk+:ShACp4G26K4Y aZ1fwiVxb+ 類似度 29 → あんまり似てない とはいえ、DEXのバイナリ差分よりは似てるのかも 第4回マルウェア解析勉強会 29
  • 30. 何故、あまり似てないか? 第4回マルウェア解析勉強会 30
  • 31. 似てない理由(推測) • ソースがほぼ一致していたとしても、少 しのIDのズレなどが全体に影響 – DEX全体のバイナリの比較はあまり筋が良く なさそう • そもそもssdeepってどうなのよ?的な話 – やりたいことにマッチしたアルゴリズムか? 第4回マルウェア解析勉強会 31
  • 32. DEXの抽象化 • ソースが似ているという人間の感覚に近 い値を導きたい • ソースが似ている → Instructionが似ている • DEXからソースのエッセンスを抽出 – code_itemの実行命令列を足しあわせてハッ シュ化 第4回マルウェア解析勉強会 32
  • 33. Instruction Hash class_def_item Class Defs List A B C … Class Data Item A Class Data Item B Class Data Item C method method method method method instructions instructions instructions instructions instructions in code_item 各classの各method の(code_item)instructionsを足しあわせてssdeepを算出する 第4回マルウェア解析勉強会 33
  • 34. ということで、もう一度計算 (Photo: 2013-02-06-DSCF4001 By kuujinbo01) 第4回マルウェア解析勉強会 34
  • 35. #1,#2の比較結果 Targets DEX Instruction ssdeep ssdeep (before) (after) 68 100 1 2 29 60 1 30 60 2 類似性は向上、しかし値としてはやっぱり微妙? 第4回マルウェア解析勉強会 35
  • 36. ついでにTheMovie • 手元にあったTheMovieの検体17個で SSDEEPを算出 • 17C2=136通りの比較結果 DEX Instruction ssdeep ssdeep Max 96 100 Min 55 100 Avg. 64.11 100.0 これはまさに… 第4回マルウェア解析勉強会 36
  • 38. まとめ • DEX FORMATの話 – 各Sectionの話とData Sectionの中身の話 – Instructionは時間の都合で触れただけ • 同じファミリーのマルウェアをssdeepで比較 – DEXをそのまま比較してもあまり似てない – 命令列だけを取り出せば似てる類似度は上がる • でもまだいまいち感覚に近くない • 今後の話 – 実は、もうちょっと先に進んでる部分も – ssdeepどうなのよという話はまだある • NCD(Normalized Compression Distance)とか – 全く違うアプリ間の比較をしてない • 似てないものは似てない値が出るか 第4回マルウェア解析勉強会 38