Try   HackMD

マルウェア解析に必要な素養~基礎編~

ファイル形式

今ではいろいろな形式のファイルにmaliciousなコードが潜んでいる。実行ファイルだけでなく、画像ファイルといった一般的なファイルの形式を頭に入れる必要がある。画像ファイルでいえば、#ステガノグラフィー という情報隠蔽技術を警戒せねばならない。

種々のファイル形式のチートシートもある。
https://github.com/corkami/pics

実行ファイル

PE

Windowsにおける実行ファイルの形式。

抑えておきたい用語(?):

  • RVA(Relative Virtual Address)
  • IAT(Import Address Table)
  • OEP(Original Entry Point)※パッカーのくだりで登場

参考:

発展事項

ランタイムで生成されるPEB(Process Environment Block)の理解は必須。アセンブリでそのようなコードが出てきてもびっくりしない耐性をつける。x64dbgなどでPEBを辿れるスキルが有ると何かと便利。利用例:Remote ProcessへのDLL Injection

PEのファイルフォーマットはReflective DLL Injectionのコードを理解する上で必要。せめてPowerSshellで出てくることに備えてほしい。PowerSploitがそんなコードを書いている。

ELF

LinuxなどのフリーなOSで利用される実行ファイルの形式。

抑えておきたい用語(?):

  • .pltセクションとGOT(Global Offset Table)
  • .rdataセクション

参考:

  • TODO

画像ファイル

JPEG

PNG

GIF

Exif

ファイルの形式でなくメタ情報のフォーマットだが重要なので取り上げる。

TODO

exiftoolを使えば十分な話だと思う。

文書ファイル

PDF

TODO

MS Officeのマクロファイル

TODO

CSV

マクロ付きのCSVをマクロを有効にしたExcelで開くことが条件らしい。

【セキュリティ ニュース】「CSVファイルは安全」という先入観につけ込む標的型攻撃(1ページ目 / 全2ページ):Security NEXT (2018/5/2)

CSV Excel Macro Injection(CEMI)

Word/Excel

本当のファイル形式:zip(+xml/画像ファイル)

xmlにmalicousなコード(Powershellコード)を仕込むテクがあったと記憶。
ちなみにちまちま編集して保存するほどxmlが複雑になってファイルが大きくなる。

以下具体例:

マクロ
Dynamic Data Exchange (DDE) protocol

SensePost | Macro-less code exec in msword (2017/10/9)
YARA DDE rules: DDE Command Execution observed in-the-wild | NVISO LABS – blog (2017/10/12)
Using the DDE attack with PowerShell Empire – 1337red (2017/10/30)
マイクロソフトがWordのDDE機能をデフォルトでDisableに。月例パッチで自動適用。 - 忙しい人のためのサイバーセキュリティニュース (2017/12/16)

DDEを悪用した攻撃はDDE Exploitと呼ばれている。

DDE Exploitの例:

SLKファイル

SLKファイルを悪用した攻撃手口に関する注意点(by IPA;2018/4/25)

Microsoft ExcelのSLK(Symbolic Link)ファイルを悪用した攻撃手口の情報が、2018年の2月に海外で公開されました。

本資料は、この攻撃手口について紹介し、注意点を説明するものです。

Malware Distributed via .slk Files - SANS Internet Storm Center (2018/5/22)

iqyファイル

拡張子 ".iqy" のファイルとは? 1 日でメール 29 万通が日本国内に拡散 | トレンドマイクロ セキュリティブログ (2018/8/8)

「document.xml」ファイル内の「embeddedHtml」属性

Word文書のオンラインビデオに、不正なURLを隠ぺいする手口を解説 | トレンドマイクロ セキュリティブログ(2018/12/18)
PoCを作り、In-the-wildに類似のマルウェアが見つかった話。docxをunzipして、xmlを書き換えて再zipして悪性docxを作成。

PowerPoint

一太郎

Potential Malware Campaign Targeting JustSystems Ichitaro Users | Fortinet Blog (2017/11/9)

スマホアプリ

apk

本当のファイル形式:zip

Androidで使用されるアプリのパッケージファイル。

Windows

OLE(Object Linking and Embedding)

Windowsでアプリケーション間のデータ連携のための仕組み

解析例:

Evading Static Analyzers by Solving the Equation (Editor) | Lastline (2018/7/12)

lnk

ショートカットファイル。リンクファイル。TODO

マルウエアが含まれたショートカットファイルをダウンロードさせる攻撃 - JPCERT/CC Eyes | JPCERTコーディネーションセンター公式ブログ (2019/5/29)

標的型攻撃メールにはリンクが記載されており、クリックするとクラウドサービスからショートカットファイルがダウンロードされます。このショートカットファイル内にはダウンローダが含まれており、ショートカットファイルを実行することによって動作します。

脆弱性の実績:

形式不明のdataファイル

エントロピーによって種別を推定できる。圧縮・暗号系はエントロピーが大きくなるのでわかりやすい。zipは格納ファイルの名前が含まれるのでアタリを付けやすい(ファイル名を非ASCIIにされたらそれまで)。

本章ではエントロピー解析に便利なツールやテクニックを紹介する。

010 Editor による解析

有料の高機能バイナリエディタ。Win/Mac/Linux対応。ライセンスは永久に有効で、購入から1年間は無償でソフトウェアをアップデートてきる。
非商用のHome版は初年度7000円。2000円ほどでFree Upgradeの権利を1年延長できる。

TODO

テクニック:

binwalk

TODO: 確か-Eオプションと何か。

その他テクニック

TODO

ファイルシステム

FAT32

TODO

NTFS

TODO

エンコード、デコード

マルウェアに組み込むsecret文字列として使われたリ、C2通信で使われたりする。

TODO: エンコード、デコードの数学的な説明

Base64

TODO

使用例:

  • PowerShellの-encEプション

Hex

コンピュータにおける整数の内部表現(unsigned int値)と、ASCIIの数値列での表現を相互変換するときに使われる。暗号アルゴリズムを扱うときによく使う。

以下にPython2でのHexエンコード/デコード処理の実際を示す。

$ python2
Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> "ABCDEFG".encode("hex")
'41424344454647'
>>> '41424344454647'.decode("hex")
'ABCDEFG'

[余談]Webアプリケーションでよく使われるHMACとバイナリデータのHex表現ってかなり似てるよねー。

XOR

論理演算のxorを用いた簡単な暗号(エンコード)。XORの性質により、暗号化関数Encと復号関数Decは同じ関数である。

以下はXORエンコードをPythonとC言語で実装したものである。多くの場合は鍵(xor key)は1バイトの値だが、鍵長は自由である。無限長の鍵が生成可能なとき、このXORエンコードはストリーム暗号と呼ばれる。

Pythonでの実装例:

Enc = lambda plain, key: ''.join([chr(ord(x) ^ key) for x in plain]) Dec = Enc print(Dec(Enc("abcd", 0x4f), 0x4f)) # => "abcd"

C言語での実装例:

#include <stdio.h> #include <string.h> void Enc(char* plain, char* cipher, char key){ int p_len = strlen(plain); for(int i = 0; i < p_len; i+=1){ cipher[i] = plain[i] ^ key; } } void Dec(char* cipher, char* plain, char key){ return Enc(cipher, plain, key); } int main(){ char plain[5] = "abcd"; char cipher[5] = ""; char key = 0x80; Enc(plain, cipher, key); Dec(cipher, plain, key); printf("%s", plain); // => "abcd" }

XOR暗号をしているアセンブリの場合は、IDAのグルフビューで見るとxor命令が入った小さい基本ブロックの周りにループ矢印があり大変見つけやすい。

NetBIOS Encoding/Decoding

TODO

暗号

本章はマルウェアでよく使われる暗号を取り上げる。とはいえ、暗号はそのジャンル単独で深めるだけでも十分面白いので、マルウェアそっちのけでこの沼にはまるのもいいかもしれない。

以下に暗号に関する参考書を示す。難易度は筆者の主観評価による。

  • [Easy] 『暗号技術入門 第3版』(結城 浩 著)
    • 平易に書かれた数学の読み物。Not教科書。
  • [Medium Easy] 『暗号理論入門 原書第3版』(丸善出版)
    • 工学部生向け数学の本。
    • 共通鍵暗号、RSAがメイン。
    • 本書でも解説はあるが、整数論(特に有限体)の知識が無いときついかもしれない。

[余談]情報科学・情報工学の専攻だと、暗号理論の背景になっている整数論を大学1年生の基礎科目で習うと思う。

暗号は、数式とにらめっこしたり、実装してみたいりしてはじめて良く理解することができる。以下に取り組むと良いかもしれない。


  1. RSA暗号の要素技術について以下の問いに答えよ。
    1. 2875687
      を素因数分解せよ。
    2. 次の2式を満たす
      x(x>0)
      を求めよ。
      R1xmodM1R2xmodM2R1=32134,M1=1584891,R2=193127,M2=3438478
    3. MMA CTF 2nd - Twin Primes (crypto) を解け
    4. 確率的素数判定法とは何か?
  2. RSA暗号のパラメータについて以下の問に答えよ。
    1. e
      は偶数ではない(i.t.
      e
      が常に奇数である)と定義される理由を説明せよ。
    2. 次の主張の真偽を確かめよ。
      e
      が大きいほど計算量が増えるため、RSA暗号の安全性は高まる。」
    3. e=65537
      のパラメータ設定にはある工夫がある。それは何か?
  3. ブロック暗号について以下の問に答えよ。
    1. 暗号利用モードにおいて、ECBモードは何が問題なのかを説明せよ。
      • Hint: 問題点は複数ある
    2. 暗号鍵を知ること無く暗号文から平文(の一部)を得られることがある。それはどのような場合か?
      • Hint: そのようなことを可能にする暗号鍵・平文の特徴に着目する
  4. HMACをRFCにしたがって実装せよ。ハッシュ関数
    h
    はSHA1でよい(HMAC-SHA1)。

暗号系の計算するときはPythonベースの計算ライブラリSageMathを使うとよい。
ドキュメントで有限体の記法をよく見るので、先に整数論の本を開くとよい。
http://www.sagemath.org/

せっかくなので、下表に紛らわしい英単語の使い分けについて簡単にまとめる。

単語 意味 用例
cryptography 暗号。〔分野名〕暗号理論 crypto currency(暗号通貨)
encrypt 暗号化〈操作を指す〉 encryption(対象データの暗号化)
decrypt 復号〈操作を指す〉 decryption(対象データの復号)
cipher 暗号(≒crypto) cipher suite(暗号スイート)
ciphertext 暗号文〈暗号化されたもの〉 Chosen-ciphertext attack
plaintext 平文 Known-plaintext attack

IV(初期化ベクトル;Initialization Vector)

TODO

ストリーム暗号

TODO

RC4

ストリーム暗号

頻出。実装が容易なのでマルウェアがオレオレ実装してるケースがある。

アセンブリで書かれたRC4は見た瞬間分かるか - yasulib memo(2018/1/27)

RC4と特定するための特徴

ぱっと見でRC4だと特定するための特徴と思われるものをまとめてみます。

  • 256バイトのSという状態を持つ
  • 最初に鍵を元にKSAによってSの状態が初期化される(初回のみ呼ばれる)
  • Sの状態変化はswapで行われる
  • データの暗号化はPRGAから出力された1バイト値をXORによって暗号化する
  • KSAとPRGAの計算は似ている(けど鍵の計算がないので少し違う)
  • 暗号化と復号が同じ処理(送信と受信で同じ関数を使っている場合)

攻撃グループBlackTechが使うダウンローダIconDown - JPCERT/CC Eyes | JPCERTコーディネーションセンター公式ブログ (2019/10/23)
ペイロードをRC4で暗号化

セキュリティ・キャンプ全国大会「マルウェアの暗号処理を解析しよう」の紹介, Hiroki Hada

ブロック暗号

TODO

ブロックごとに暗号化・復号するのでその手順に工夫の余地がある。暗号利用モード - Wikipediaを読んでおくとよい。

AES

SPN構造のブロック暗号。

.dataセクションにS-boxの中身が入るので、それに気づくといいのかもしれない。 cf. FindCrypt

TEA(Tiny Encryption Algorithm)

https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm

暗号学的ハッシュ関数

ステガノグラフィー

古代から使われている情報隠蔽技術。

画像

画像の電子透かしはこのテクニックを援用している。

例:

実際の利用例:

音声

文章

例:

  • 縦読み

ネットワークプロトコル

TODO:

  • 各プロトコルのフォーマット
  • L7の主要なプロトコルを網羅
  • DNS

マルウェア関連でよく出てくるプロトコルやアプリケーション

SMB

NASなどで使われている、主にWindowsで使われるネットワークファイル共有のプロトコル。

SMBに脆弱性があってポートが空いているPCがアクセス可能な範囲にあると、感染が拡大してしてしまって厄介。

An Introduction to SMB for Network Security Analysts (2017/12/20)

Eternal Blue (MS17-010)

WannaCry, PETYAが使用。

Active Directory

Pass-the-hash, Pass-the-ticketのくだりで出てくる。