マルウェア解析に必要な素養~基礎編~
====
:::success
親ページ:[マルウェア解析に必要な素養](https://hackmd.io/s/S1kLEr5x#)
:::
ファイル形式
----
今ではいろいろな形式のファイルにmaliciousなコードが潜んでいる。実行ファイルだけでなく、画像ファイルといった一般的なファイルの形式を頭に入れる必要がある。画像ファイルでいえば、[\#ステガノグラフィー](#ステガノグラフィー) という情報隠蔽技術を警戒せねばならない。
種々のファイル形式のチートシートもある。
https://github.com/corkami/pics
### 実行ファイル
#### PE
Windowsにおける実行ファイルの形式。
抑えておきたい用語(?):
* RVA(Relative Virtual Address)
* IAT(Import Address Table)
* OEP(Original Entry Point)※パッカーのくだりで登場
参考:
* Microsoftが公開しているPEファイルフォーマットの仕様書(pecoff.docx)→ https://www.microsoft.com/en-us/download/details.aspx?id=19509
* Portable Executable File Format(by OpenRCE)http://www.openrce.org/reference_library/files/reference/PE%20Format.pdf
* PEの構造を図解している一枚図
* 『アナライジング・マルウェア』の2.2節
* 必要なところだけをかいつまむスタイル
##### 発展事項
ランタイムで生成される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
* [JPEG画像形式の概要(フォーマット) - ウェブで用いられる画像形式。](https://www.marguerite.jp/Nihongo/Labo/Image/JPEG2.html)
#### PNG
* [PNG ファイルフォーマット](http://www.setsuki.com/hsp/ext/png.htm)
#### GIF
* [GIF ファイルフォーマット](http://www.setsuki.com/hsp/ext/gif.htm)
### Exif
ファイルの形式でなくメタ情報のフォーマットだが重要なので取り上げる。
TODO
exiftoolを使えば十分な話だと思う。
### 文書ファイル
#### PDF
TODO
#### MS Officeのマクロファイル
TODO
##### CSV
マクロ付きのCSVをマクロを有効にしたExcelで開くことが条件らしい。
[【セキュリティ ニュース】「CSVファイルは安全」という先入観につけ込む標的型攻撃(1ページ目 / 全2ページ):Security NEXT](http://www.security-next.com/092914) (2018/5/2)
[CSV Excel Macro Injection(CEMI)](https://github.com/cybozu/bugbounty/blob/master/scope/CEMI.md)
#### Word/Excel
本当のファイル形式:zip(+xml/画像ファイル)
xmlにmalicousなコード(Powershellコード)を仕込むテクがあったと記憶。
ちなみにちまちま編集して保存するほどxmlが複雑になってファイルが大きくなる。
以下具体例:
* [日本を狙う標的型サイバー攻撃キャンペーン「ChessMaster」、新しく確認された活動とツールを解説 | トレンドマイクロ セキュリティブログ](http://blog.trendmicro.co.jp/archives/17280) (2018/4/17)
##### マクロ
* [検出回避を狙いExcel 4.0マクロを利用する攻撃を国内初確認 | トレンドマイクロ セキュリティブログ](https://blog.trendmicro.co.jp/archives/20475) (2019/2/28)
##### Dynamic Data Exchange (DDE) protocol
[SensePost | Macro-less code exec in msword](https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/) (2017/10/9)
[YARA DDE rules: DDE Command Execution observed in-the-wild | NVISO LABS – blog](https://blog.nviso.be/2017/10/12/yara-dde-rules-dde-command-execution-observed-in-the-wild/) (2017/10/12)
[Using the DDE attack with PowerShell Empire – 1337red](https://1337red.wordpress.com/using-the-dde-attack-with-powershell-empire/) (2017/10/30)
[マイクロソフトがWordのDDE機能をデフォルトでDisableに。月例パッチで自動適用。 - 忙しい人のためのサイバーセキュリティニュース](http://nanashi0x.hatenablog.com/entry/2017/12/16/200000) (2017/12/16)
DDEを悪用した攻撃はDDE Exploitと呼ばれている。
DDE Exploitの例:
* [不正メールで拡散される高度なテクニックを組み合わせたダウンローダーの脅威 | MBSD Blog](https://www.mbsd.jp/blog/20171214.html) (2017/12/14)
* [DDEを悪用する Macroless Office Document Exploits](https://www.slideshare.net/ssuserbcacc5/dde-macroless-office-document-exploits) (2018/1/14)
##### SLKファイル
[SLKファイルを悪用した攻撃手口に関する注意点](https://www.ipa.go.jp/files/000066064.pdf)(by IPA;2018/4/25)
> Microsoft ExcelのSLK(Symbolic Link)ファイルを悪用した攻撃手口の情報が、2018年の2月に海外で公開されました。
>
> 本資料は、この攻撃手口について紹介し、注意点を説明するものです。
[Malware Distributed via .slk Files - SANS Internet Storm Center](https://isc.sans.edu/forums/diary/Malware+Distributed+via+slk+Files/23687) (2018/5/22)
##### iqyファイル
[拡張子 ".iqy" のファイルとは? 1 日でメール 29 万通が日本国内に拡散 | トレンドマイクロ セキュリティブログ](https://blog.trendmicro.co.jp/archives/19387) (2018/8/8)
##### 「document.xml」ファイル内の「embeddedHtml」属性
[Word文書のオンラインビデオに、不正なURLを隠ぺいする手口を解説 | トレンドマイクロ セキュリティブログ](https://blog.trendmicro.co.jp/archives/19963)(2018/12/18)
PoCを作り、In-the-wildに類似のマルウェアが見つかった話。docxをunzipして、xmlを書き換えて再zipして悪性docxを作成。
#### PowerPoint
* リンクをホバーするとPowershellコードが実行!
* [PowerPoint File Downloads Malware When You Hover a Link, No Macros Required](https://www.bleepingcomputer.com/news/security/powerpoint-file-downloads-malware-when-you-hover-a-link-no-macros-required/) (2017/6/2)
* > Whenever the user hovers the URL, malicious code is executed that will invoke PowerShell and attempt to execute the following code.
* [TrendLabs Security Intelligence BlogMouse Over, Macro: Spam Run in Europe Uses Hover Action to Deliver Banking Trojan - TrendLabs Security Intelligence Blog](http://blog.trendmicro.com/trendlabs-security-intelligence/mouseover-otlard-gootkit/) (2017/6/9)
* [マウスオーバとマクロを利用、PowerPoint文書閲覧時に感染させる攻撃手法に注意 | トレンドマイクロ セキュリティブログ](http://blog.trendmicro.co.jp/archives/15257) (2017/6/19)
#### 一太郎
[Potential Malware Campaign Targeting JustSystems Ichitaro Users | Fortinet Blog](https://blog.fortinet.com/2017/11/09/potential-malware-campaign-targeting-justsystems-ichitaro-users) (2017/11/9)
### スマホアプリ
#### apk
本当のファイル形式:zip
Androidで使用されるアプリのパッケージファイル。
### Windows
#### OLE(Object Linking and Embedding)
Windowsでアプリケーション間のデータ連携のための仕組み
解析例:
[Evading Static Analyzers by Solving the Equation (Editor) | Lastline](https://www.lastline.com/labsblog/evading-static-analyzers-by-solving-the-equation-editor/) (2018/7/12)
#### lnk
ショートカットファイル。リンクファイル。TODO
[マルウエアが含まれたショートカットファイルをダウンロードさせる攻撃 - JPCERT/CC Eyes | JPCERTコーディネーションセンター公式ブログ](https://blogs.jpcert.or.jp/ja/2019/05/darkhotel_lnk.html) (2019/5/29)
> 標的型攻撃メールにはリンクが記載されており、クリックするとクラウドサービスからショートカットファイルがダウンロードされます。このショートカットファイル内にはダウンローダが含まれており、ショートカットファイルを実行することによって動作します。
脆弱性の実績:
* [JVNVU#92360223: Microsoft Windows のショートカットファイルで指定されたコードが自動的に実行される脆弱性](https://jvn.jp/vu/JVNVU92360223/index.html) (2017/08/04)
* 過去に同様の脆弱性報告ありなので要チェック
### 形式不明のdataファイル
エントロピーによって種別を推定できる。圧縮・暗号系はエントロピーが大きくなるのでわかりやすい。zipは格納ファイルの名前が含まれるのでアタリを付けやすい(ファイル名を非ASCIIにされたらそれまで)。
本章ではエントロピー解析に便利なツールやテクニックを紹介する。
#### 010 Editor による解析
有料の高機能バイナリエディタ。Win/Mac/Linux対応。ライセンスは永久に有効で、購入から1年間は無償でソフトウェアをアップデートてきる。
非商用のHome版は初年度7000円。2000円ほどでFree Upgradeの権利を1年延長できる。
TODO
テクニック:
* [君にもできる目grepを使わない目grepリローデッドへの挑戦 (010 Editor編) ](https://gist.github.com/yoggy/4116843)(2012/11)
#### binwalk
TODO: 確か`-E`オプションと何か。
### その他テクニック
TODO
ファイルシステム
----
### FAT32
TODO
### NTFS
TODO
エンコード、デコード
----
マルウェアに組み込むsecret文字列として使われたリ、C2通信で使われたりする。
TODO: エンコード、デコードの数学的な説明
### Base64
TODO
使用例:
* PowerShellの`-enc`Eプション
### Hex
コンピュータにおける整数の内部表現(unsigned int値)と、ASCIIの数値列での表現を相互変換するときに使われる。暗号アルゴリズムを扱うときによく使う。
以下にPython2でのHexエンコード/デコード処理の実際を示す。
```python
$ 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での実装例:
```python=
Enc = lambda plain, key: ''.join([chr(ord(x) ^ key) for x in plain])
Dec = Enc
print(Dec(Enc("abcd", 0x4f), 0x4f)) # => "abcd"
```
C言語での実装例:
```clike=
#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年生の基礎科目で習うと思う。
暗号は、数式とにらめっこしたり、実装してみたいりしてはじめて良く理解することができる。以下に取り組むと良いかもしれない。
* [The Cryptopals Crypto Challenges](https://cryptopals.com/) (by NCC Group)
* 以下の証明問題に取り組む
- - -
1. RSA暗号の要素技術について以下の問いに答えよ。
1. $2875687$ を素因数分解せよ。
1. 次の2式を満たす $x\;(x \gt 0)$ を求めよ。
$$ R_1 \equiv x \mod M_1 \\ R_2 \equiv x \mod M_2 \\
ここで\; R_1 = 32134, M_1 = 1584891, R_2 = 193127, M_2 = 3438478 \;とする$$
1. [MMA CTF 2nd - Twin Primes (crypto)](https://github.com/ctfs/write-ups-2016/tree/master/mma-ctf-2nd-2016/crypto/twin-primes-50) を解け
2. 確率的素数判定法とは何か?
1. RSA暗号のパラメータについて以下の問に答えよ。
1. $e$は偶数ではない(i.t. $e$が常に奇数である)と定義される理由を説明せよ。
2. 次の主張の真偽を確かめよ。
「$e$ が大きいほど計算量が増えるため、RSA暗号の安全性は高まる。」
3. $e = 65537$ のパラメータ設定にはある工夫がある。それは何か?
1. ブロック暗号について以下の問に答えよ。
1. 暗号利用モードにおいて、ECBモードは何が問題なのかを説明せよ。
* _Hint:_ 問題点は複数ある
2. 暗号鍵を知ること無く暗号文から平文(の一部)を得られることがある。それはどのような場合か?
* _Hint:_ そのようなことを可能にする暗号鍵・平文の特徴に着目する
1. 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](https://yasulib.hatenablog.jp/entry/20180127/1517041821)(2018/1/27)
> ### RC4と特定するための特徴
>
> ぱっと見でRC4だと特定するための特徴と思われるものをまとめてみます。
>
> * 256バイトのSという状態を持つ
> * 最初に鍵を元にKSAによってSの状態が初期化される(初回のみ呼ばれる)
> * Sの状態変化はswapで行われる
> * データの暗号化はPRGAから出力された1バイト値をXORによって暗号化する
> * KSAとPRGAの計算は似ている(けど鍵の計算がないので少し違う)
> * 暗号化と復号が同じ処理(送信と受信で同じ関数を使っている場合)
[攻撃グループBlackTechが使うダウンローダIconDown - JPCERT/CC Eyes | JPCERTコーディネーションセンター公式ブログ](https://blogs.jpcert.or.jp/ja/2019/10/IconDown.html) (2019/10/23)
ペイロードをRC4で暗号化
[セキュリティ・キャンプ全国大会「マルウェアの暗号処理を解析しよう」の紹介, Hiroki Hada](https://insight-jp.nttsecurity.com/post/102flpy/untitled)
### ブロック暗号
TODO
ブロックごとに暗号化・復号するのでその手順に工夫の余地がある。[暗号利用モード - Wikipedia](https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%88%A9%E7%94%A8%E3%83%A2%E3%83%BC%E3%83%89)を読んでおくとよい。
#### AES
SPN構造のブロック暗号。
.dataセクションにS-boxの中身が入るので、それに気づくといいのかもしれない。 cf. [FindCrypt](https://github.com/you0708/ida/tree/master/idapython_tools/findcrypt)
#### TEA(Tiny Encryption Algorithm)
https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm
### 暗号学的ハッシュ関数
ステガノグラフィー
----
古代から使われている情報隠蔽技術。
### 画像
画像の電子透かしはこのテクニックを援用している。
* [ステガノグラフィーの解析について](https://digitaltravesia.jp/usamimihurricane/webhelp/_RESOURCE/MenuItem/another/anotherAboutSteganography.html)
* [CpawCTF-Steganography // Speaker Deck](https://speakerdeck.com/kuroiwasi/cpawctf-steganography)
例:
* [Invoke-PSImage](https://github.com/peewpw/Invoke-PSImage)
* PowershellコードをPNGファイルに埋め込み
*
実際の利用例:
* [日本のユーザを狙うスパムメール送信活動を確認、ステガノグラフィを利用し「BEBLOH」を拡散 | トレンドマイクロ セキュリティブログ](https://blog.trendmicro.co.jp/archives/19812)(2018/11/20)
* > ダウンロードされる画像は、620 × 485 ピクセルの PNG 画像です。この画像データの最初の 3 行(3 × 620 ピクセル)に、次の段階の PowerShell スクリプトがステガノグラフィの手法を利用して埋め込まれていました。
* [【セキュリティ ニュース】画像ファイルに悪用コード隠す「ステガノグラフィ」 - 無償ツールが拡大後押しか(1ページ目 / 全3ページ):Security NEXT](http://www.security-next.com/101120)
### 音声
* [ステガノグラフィーの解析について](https://digitaltravesia.jp/usamimihurricane/webhelp/_RESOURCE/MenuItem/another/anotherAboutSteganography.html)
### 文章
例:
* 縦読み
*
ネットワークプロトコル
----
**TODO**:
* 各プロトコルのフォーマット
* L7の主要なプロトコルを網羅
* DNS
マルウェア関連でよく出てくるプロトコルやアプリケーション
---
### SMB
NASなどで使われている、主にWindowsで使われるネットワークファイル共有のプロトコル。
SMBに脆弱性があってポートが空いているPCがアクセス可能な範囲にあると、感染が拡大してしてしまって厄介。
[An Introduction to SMB for Network Security Analysts](https://401trg.pw/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のくだりで出てくる。