Slide 1

Slide 1 text

© 2021 mopisec All rights reserved. 1 Analyzing C# (.NET) Malware セキュリティ・キャンプ アワード2021 Naoki Takayama (@mopisec) セキュリティ・キャンプ全国大会 2018 修了生 https://mopisec.net

Slide 2

Slide 2 text

© 2021 mopisec All rights reserved. 2 Analyzing C# (.NET) Malware mopisec # whoami ・ セキュリティ・キャンプ全国大会2018 修了生 ・ セキュリティ・ネクストキャンプ 2019 ・ Global Cybersecurity Camp 2018 ・ 地方・全国大会, GCC ではチューターなど ・ Interests: Digital Forensics and Incident Response ・ esp. Artifact Analysis ・ https://mopisec.net

Slide 3

Slide 3 text

© 2021 mopisec All rights reserved. 3 Analyzing C# (.NET) Malware Malware Analysis マルウェア解析 • 表層解析、静的解析、動的解析など様々な解析手法が存在する • マルウェアを解析することによって…… • どのように標的のシステムに侵入したのか (Root Cause) • どの C&C サーバーと通信しているのか • 誰が侵入したのか (わからない場合も多い) • を知るためのヒントを得ることができる • インシデントレスポンスの中に含まれると考えている人・企業も多い

Slide 4

Slide 4 text

© 2021 mopisec All rights reserved. 4 Analyzing C# (.NET) Malware Experiences マルウェア解析の経験 • PlugX • Emotet (Downloader) • Obfuscated PowerShell Script • Obfuscated Shell Script * マルウェア解析の経験が足りない!課題を克服するためには… → CTF大会に参加しReversingにカテゴライズされる問題を解く → 実際にマルウェアを解析して練習を行う

Slide 5

Slide 5 text

© 2021 mopisec All rights reserved. 5 Analyzing C# (.NET) Malware Experiences マルウェア解析の経験 • PlugX • Emotet (Downloader) • Obfuscated PowerShell Script • Obfuscated Shell Script * マルウェア解析の経験が足りない!課題を克服するためには… → CTF大会に参加しReversingにカテゴライズされる問題を解く → 実際にマルウェアを解析して練習を行う

Slide 6

Slide 6 text

© 2021 mopisec All rights reserved. 6 Analyzing C# (.NET) Malware Which Malware? どのマルウェアを解析する? • 先述した PlugX のようにビルダーが入手可能なもの • 検証しやすい&(ある程度)安全であるため • 今まで解析したマルウェアとは違う技術・言語が使われているもの • C (C++), Python (pyinstaller) で開発されたもの、難読化されたスクリプト等以外 • 知名度があり、実際の攻撃で使用されているもの • ANY.RUN , VirusTotal などのサービスへのサブミッションの統計から判断した → Quasar RAT

Slide 7

Slide 7 text

© 2021 mopisec All rights reserved. 7 Analyzing C# (.NET) Malware What is Quasar RAT Quasar RAT とは • Quasar RATとはMaxXOR氏が中心となり開発しているOSSのRATである。 GitHub Repository: https://github.com/quasar/Quasar

Slide 8

Slide 8 text

© 2021 mopisec All rights reserved. 10 Analyzing C# (.NET) Malware What is Quasar RAT リモートシェル機能

Slide 9

Slide 9 text

© 2021 mopisec All rights reserved. 11 Analyzing C# (.NET) Malware What is Quasar RAT リモートデスクトップ機能(操作なども可能!)

Slide 10

Slide 10 text

© 2021 mopisec All rights reserved. 12 Analyzing C# (.NET) Malware What is Quasar RAT Messagebox表示機能

Slide 11

Slide 11 text

© 2021 mopisec All rights reserved. 13 Analyzing C# (.NET) Malware What is Quasar RAT 紹介しきれないほど機能がたくさんある...!!! README.md

Slide 12

Slide 12 text

© 2021 mopisec All rights reserved. 14 Analyzing C# (.NET) Malware What is Quasar RAT 標的型攻撃などに使われている https://www.paloaltonetworks.jp/company/in-the-news/2017/targeted-attack-against-gov-using-Downeks-Quasar-RAT

Slide 13

Slide 13 text

© 2021 mopisec All rights reserved. 15 Analyzing C# (.NET) Malware What is Quasar RAT 多くの亜種、派生版が存在している https://blogs.jpcert.or.jp/ja/2020/12/quasar-family.html

Slide 14

Slide 14 text

© 2021 mopisec All rights reserved. 16 Analyzing C# (.NET) Malware Goals 目標・やりたい事 • Quasar RAT のような C# (.NET) で作成されたプログラム (マルウェア) のリバースエンジニアリング技術を習得する • Quasar RAT の動的解析を行い、挙動について検証する • 最後に実際にインターネット上から取得したサンプルを調査する

Slide 15

Slide 15 text

© 2021 mopisec All rights reserved. 21 Analyzing C# (.NET) Malware Static Analysis dnSpyを用いた静的解析

Slide 16

Slide 16 text

© 2021 mopisec All rights reserved. 22 Analyzing C# (.NET) Malware dnSpy .NET Debugger and Assembly Editor GitHub Repository: https://github.com/dnSpy/dnSpy

Slide 17

Slide 17 text

© 2021 mopisec All rights reserved. 23 Analyzing C# (.NET) Malware dnSpy .NET Debugger and Assembly Editor • C# (.NET) で開発されたプログラムをデコンパイルすることができるツール • デコンパイルエンジン: ILSpy Decompiler Engine • 上記のデコンパイルエンジンは “ILSpy” という別のツールのために開発、使用されていたものだが、 インターフェースや機能面から “dnSpy” の方が使いやすい(と私は感じた)

Slide 18

Slide 18 text

© 2021 mopisec All rights reserved. 24 Analyzing C# (.NET) Malware dnSpy .NET Debugger and Assembly Editor

Slide 19

Slide 19 text

© 2021 mopisec All rights reserved. 25 Analyzing C# (.NET) Malware Reference GitHub 上のクライアントサイドコードと比較しながら解析を進める Quasar.Client/Program.cs Decompiled Code (Entry Point)

Slide 20

Slide 20 text

© 2021 mopisec All rights reserved. 26 Analyzing C# (.NET) Malware Reference GitHub 上のクライアントサイドコードと比較しながら解析を進める Quasar.Client/Program.cs Decompiled Code (Entry Point)

Slide 21

Slide 21 text

© 2021 mopisec All rights reserved. 27 Analyzing C# (.NET) Malware Reference GitHub 上のクライアントサイドコードと比較しながら解析を進める Quasar.Client/Program.cs Decompiled Code (Entry Point)

Slide 22

Slide 22 text

© 2021 mopisec All rights reserved. 28 Analyzing C# (.NET) Malware Configuration 設定情報を発見! Quasar.Client/Config/Settings.cs Decompiled Code (where configuration is defined)

Slide 23

Slide 23 text

© 2021 mopisec All rights reserved. 29 Analyzing C# (.NET) Malware Configuration 設定情報を発見! Decompiled Code (where configuration is defined) 何が書いてあるのかわからない。 なぜ??

Slide 24

Slide 24 text

© 2021 mopisec All rights reserved. 30 Analyzing C# (.NET) Malware Configuration AES暗号化されていることがわかった Quasar.Client/Config/Settings.cs

Slide 25

Slide 25 text

© 2021 mopisec All rights reserved. 31 Analyzing C# (.NET) Malware Configuration AES暗号化されていることがわかった Quasar.Client/Config/Settings.cs 復号化している

Slide 26

Slide 26 text

© 2021 mopisec All rights reserved. 32 Analyzing C# (.NET) Malware Configuration 設定情報はいつ、どこで暗号化されている? Decompiled Code (where configuration is defined) ビルド段階で暗号化された設定情報 が埋め込まれるようになっている

Slide 27

Slide 27 text

© 2021 mopisec All rights reserved. 33 Analyzing C# (.NET) Malware Configuration サーバー側のクライアントをビルドするコード内に暗号化処理を発見 Quasar.Server/Build/ClientBuilder.cs

Slide 28

Slide 28 text

© 2021 mopisec All rights reserved. 34 Analyzing C# (.NET) Malware Dumping Configurations 実行バイナリから接続先等の情報を抽出する

Slide 29

Slide 29 text

© 2021 mopisec All rights reserved. 35 Analyzing C# (.NET) Malware Configuration AES暗号化されていては接続先などがわからない Quasar.Client/Config/Settings.cs

Slide 30

Slide 30 text

© 2021 mopisec All rights reserved. 36 Analyzing C# (.NET) Malware Original Implementation オリジナルのAES暗号化・復号化ライブラリを使用している Quasar.Common/Cryptography/Aes256.cs

Slide 31

Slide 31 text

© 2021 mopisec All rights reserved. 37 Analyzing C# (.NET) Malware Awesome Document 谷 知亮さん, 朝長 秀誠さん, 喜野 孝太さんが公開されている資料にて仕様が解説されていました わかりやすく素晴らしい資料を一般に公開していただき、ありがとうございます。 https://github.com/JPCERTCC/QuasarRAT-Analysis/blob/main/slides/Botconf2020-Hunting_the_Quasar_Family.pdf

Slide 32

Slide 32 text

© 2021 mopisec All rights reserved. 38 Analyzing C# (.NET) Malware Decrypt It!! 仕様の確認 • 設定情報を Base64 エンコードしたものがAES暗号化されている • ENCRYPTIONKEY および salt によって共通鍵を生成している • ENCRYPTIONKEY はビルド時に自動的に生成される • salt は 基本的に 不変 • 共通鍵: PBKDF2 ( ENCRYPTIONKEY , salt , 50000 ) . read (16)

Slide 33

Slide 33 text

© 2021 mopisec All rights reserved. 39 Analyzing C# (.NET) Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた

Slide 34

Slide 34 text

© 2021 mopisec All rights reserved. 40 Analyzing C# (.NET) Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた 実行バイナリから抽出した ENCRYPTIONKEY

Slide 35

Slide 35 text

© 2021 mopisec All rights reserved. 41 Analyzing C# (.NET) Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた 実行バイナリから抽出した 暗号化されたC&Cサーバーの 情報 (ホスト、ポート)

Slide 36

Slide 36 text

© 2021 mopisec All rights reserved. 42 Analyzing C# (.NET) Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた Quasar.Common 内で定義 されている salt

Slide 37

Slide 37 text

© 2021 mopisec All rights reserved. 43 Analyzing C# (.NET) Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた 定義したデータをもとに 共通鍵を生成している

Slide 38

Slide 38 text

© 2021 mopisec All rights reserved. 44 Analyzing C# (.NET) Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた 暗号化された設定情報を 復号化している

Slide 39

Slide 39 text

© 2021 mopisec All rights reserved. 45 Analyzing C# (.NET) Malware Decrypt It!! 暗号化された設定情報を復号化するためのスクリプトを書いた

Slide 40

Slide 40 text

© 2021 mopisec All rights reserved. 46 Analyzing C# (.NET) Malware Decrypt It!! 暗号化された設定情報を復号化するためのスクリプトを書いた(Python) 一致!!

Slide 41

Slide 41 text

© 2021 mopisec All rights reserved. 47 Analyzing C# (.NET) Malware Dynamic Analysis Noriben, FakeNet-NGを用いた動的解析

Slide 42

Slide 42 text

© 2021 mopisec All rights reserved. 48 Analyzing C# (.NET) Malware Dynamic Analysis Noriben, FakeNet-NG を用いた動的解析 ・ Noriben: Malware Analysis Sandbox Tool → ファイル・レジストリへの書き込み、設定の変更などを確認する → GitHub: https://github.com/Rurik/Noriben ・ FakeNet-NG: Dynamic Network Analysis Tool → パケットキャプチャ & どのプロセスが通信を行ったか記録 & 外部への通信を遮断する → GitHub: https://github.com/fireeye/flare-fakenet-ng

Slide 43

Slide 43 text

© 2021 mopisec All rights reserved. 49 Analyzing C# (.NET) Malware Dynamic Analysis Noriben, FakeNet-NG を用いた動的解析 ・ 使用する実行バイナリは静的解析の際に使用したものと同じもの ・ クリーンな検証用の Windows 10 環境 (on VMware Workstation) を構築しました ・ スナップショット ・ CleanEnv (初期状態) ・ ToolsInstalled (解析ツールなどのインストール後) ・ AfterRun (マルウェア, 解析ツールの実行後) ・ サーバーサイドは展開せず、クライアントサイドの挙動の観察に集中します

Slide 44

Slide 44 text

© 2021 mopisec All rights reserved. 51 Analyzing C# (.NET) Malware Run Noriben GitHub からリポジトリをクローン (ダウンロード) する GitHub Repository: https://github.com/Rurik/Noriben

Slide 45

Slide 45 text

© 2021 mopisec All rights reserved. 52 Analyzing C# (.NET) Malware Run Noriben GitHub からリポジトリをクローン (ダウンロード) する

Slide 46

Slide 46 text

© 2021 mopisec All rights reserved. 53 Analyzing C# (.NET) Malware Run Noriben Noriben の実行には Sysinternals Suite が必要なため、配置して PATH に追加する

Slide 47

Slide 47 text

© 2021 mopisec All rights reserved. 54 Analyzing C# (.NET) Malware Run Noriben “Noriben.py” を実行する

Slide 48

Slide 48 text

© 2021 mopisec All rights reserved. 55 Analyzing C# (.NET) Malware Run FakeNet-NG GitHub からリポジトリをクローン (ダウンロード) する GitHub Repository: https://github.com/fireeye/flare-fakenet-ng

Slide 49

Slide 49 text

© 2021 mopisec All rights reserved. 56 Analyzing C# (.NET) Malware Run FakeNet-NG GitHub からリポジトリをクローン (ダウンロード) する

Slide 50

Slide 50 text

© 2021 mopisec All rights reserved. 57 Analyzing C# (.NET) Malware Run FakeNet-NG “fakenet.exe” を実行する

Slide 51

Slide 51 text

© 2021 mopisec All rights reserved. 58 Analyzing C# (.NET) Malware Run Quasar RAT 解析用バイナリを実行する

Slide 52

Slide 52 text

© 2021 mopisec All rights reserved. 59 Analyzing C# (.NET) Malware Analyze Noriben Logs Noriben によって記録されたデータを解析する

Slide 53

Slide 53 text

© 2021 mopisec All rights reserved. 60 Analyzing C# (.NET) Malware File Activities ファイルアクティビティの調査 Noriben実行中に作成されたプロセスで関係のあるもの

Slide 54

Slide 54 text

© 2021 mopisec All rights reserved. 61 Analyzing C# (.NET) Malware Noriben実行中に作成されたプロセスで関係のあるもの 一つ目: 解析用マルウェアを私が実行した際の記録 File Activities ファイルアクティビティの調査

Slide 55

Slide 55 text

© 2021 mopisec All rights reserved. 62 Analyzing C# (.NET) Malware Noriben実行中に作成されたプロセスで関係のあるもの 一つ目: 解析用マルウェアを私が実行した際の記録 二つ目: 解析用マルウェアが自身のコピーを作成した際の記録 File Activities ファイルアクティビティの調査

Slide 56

Slide 56 text

© 2021 mopisec All rights reserved. 63 Analyzing C# (.NET) Malware Noriben実行中に作成されたプロセスで関係のあるもの 一つ目: 解析用マルウェアを私が実行した際の記録 二つ目: 解析用マルウェアが自身のコピーを実行した際の記録 File Activities ファイルアクティビティの調査

Slide 57

Slide 57 text

© 2021 mopisec All rights reserved. 64 Analyzing C# (.NET) Malware Noriben実行中に作成されたプロセスで関係のあるもの 一つ目: 解析用マルウェアを私が実行した際の記録 二つ目: 解析用マルウェアが自身のコピーを実行した際の記録 マルウェアは自身のコピーを “%AppData%¥SubdirectoryForQuasarRAT” 内に作成 File Activities ファイルアクティビティの調査

Slide 58

Slide 58 text

© 2021 mopisec All rights reserved. 65 Analyzing C# (.NET) Malware Check!! 先ほど作成したスクリプトを改変して解析結果が正しいか確認する

Slide 59

Slide 59 text

© 2021 mopisec All rights reserved. 66 Analyzing C# (.NET) Malware Check!! 実際に解析環境上で “%AppData%¥SubdirectoryForQuasarRAT” を確認する SHA256 Hash: e8792696bfc9a8861ebd7d2cb7a6a6a15ef52af5c29ab9024cb39ce42c0ac37d

Slide 60

Slide 60 text

© 2021 mopisec All rights reserved. 67 Analyzing C# (.NET) Malware New File ファイルアクティビティの中にログファイルを発見

Slide 61

Slide 61 text

© 2021 mopisec All rights reserved. 68 Analyzing C# (.NET) Malware New File どの DLL を実行時に読み込んだのかログが残っている (大まかにだが)どのような処理を行っているか予想できる可能性がある

Slide 62

Slide 62 text

© 2021 mopisec All rights reserved. 69 Analyzing C# (.NET) Malware Registry Activity 自動実行用のエントリが作成されている

Slide 63

Slide 63 text

© 2021 mopisec All rights reserved. 70 Analyzing C# (.NET) Malware Registry Activity 自動実行用のエントリが作成されている HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Run 内のエントリに記述されたプログラムはWindows起動時に 自動的に実行されるようになっている

Slide 64

Slide 64 text

© 2021 mopisec All rights reserved. 71 Analyzing C# (.NET) Malware Registry Activity 自動実行用のエントリが作成されている HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Run 内のエントリに記述されたプログラムはWindows起動時に 自動的に実行されるようになっている → Persistence化

Slide 65

Slide 65 text

© 2021 mopisec All rights reserved. 72 Analyzing C# (.NET) Malware Network Activity FakeNet-NG のログの調査 定期的に 192.168.169.128:4782 に対して通信を行っている

Slide 66

Slide 66 text

© 2021 mopisec All rights reserved. 73 Analyzing C# (.NET) Malware Practice!! インターネット上から取得した “Quasar RAT” の解析

Slide 67

Slide 67 text

© 2021 mopisec All rights reserved. 74 Analyzing C# (.NET) Malware Static Analysis Quasar RAT としてラベルされているバイナリを ANY.RUN から取得しました SHA256 Hash: 7A1AD31508F2EA1D7ABC2907977EAF32537F09994D1622B3E2E733649905C861

Slide 68

Slide 68 text

© 2021 mopisec All rights reserved. 75 Analyzing C# (.NET) Malware Static Analysis dnSpyを用いて暗号化された設定情報、ENCRYPTIONKEYを取得する ENCRYPTIONKEY

Slide 69

Slide 69 text

© 2021 mopisec All rights reserved. 76 Analyzing C# (.NET) Malware Script is Working!! 作成したスクリプトに静的解析から取得したデータを入力した結果…… インストール名には実在する製品名が入っていたため、C&C サーバーの情報と合わせて 念のためマスクしてあります

Slide 70

Slide 70 text

© 2021 mopisec All rights reserved. 77 Analyzing C# (.NET) Malware Threats / Interesting Point 脅威および注目すべき点 ・ 設定情報をAES暗号化するメリットが最初わからなかったが、以下の点から効果的だと感じた ・ 平文や単純なEncodingで保存されていないので、表層解析の段階では通信先などがわからない ・ ENCRYPTIONKEY をそのまま共通鍵として採用しているわけではない ・ Quasar RAT がOSSとして公開されているからこそ仕様の解明が容易だが、ソースコードがなけれ ば静的解析によって少しずつ調べていく必要がある ・ ILSpy Decompiler Engine (dnSpyのデコンパイラエンジン) は比較的もとのソースコードに近い 形でC# (.NET) プログラムをデコンパイルするが、それでも仕様の解明は困難だと感じた

Slide 71

Slide 71 text

© 2021 mopisec All rights reserved. 78 Analyzing C# (.NET) Malware Threats / Interesting Point 脅威および注目すべき点 ・ もしも salt の値を変更すれば、解析は格段に難しくなってしまうのではないだろうか ・ 共通鍵の生成方法を変更すれば… ・ 設定情報を保持する方法を変更すれば… ・ このように、小さな変更を加えるだけで解析が困難になることこそが同RATの亜種が大量に開発さ れている理由なのではないだろうか

Slide 72

Slide 72 text

© 2021 mopisec All rights reserved. 79 Analyzing C# (.NET) Malware Future Works 今後やっていきたいこと ・ まだ自力で解明できていない仕様や動作がある為、ソースコードを読むほか、国内外の皆様が 公開されている貴重な資料を読み込み、解析を続ける ・ 本発表を行う中で書いたスクリプトは何らかの形で公開したい(アウトプット) ・ (私の知る限り)設定情報をデコードするスクリプトは一般に公開されていないため ・ リファクタリングやインターフェースの実装などが終わり次第、公開したいと考えています ・ 今後もマルウェア解析のスキルを研磨し、社会に出ても情報セキュリティ業界で活躍することが できる人材になれるよう努める

Slide 73

Slide 73 text

© 2021 mopisec All rights reserved. 80 Analyzing C# (.NET) Malware Special Thanks スペシャルサンクス ・ セキュリティ・キャンプ 講師の皆様 ・ 動的解析の手法など、本発表(解析)で使用した技術の多くは私がセキュリティ・キャンプおよび その関連イベントで講師の皆様から教えていただいたものです。 ・ JPCERT/CC の皆様 ・ 皆様が公開されていた素晴らしい資料がなければ、ここまで辿り着けませんでした。 ・ この発表を聞いてくださったすべての皆様 ・ 本当にありがとうございました。

Slide 74

Slide 74 text

© 2021 mopisec All rights reserved. 81 Analyzing C# (.NET) Malware セキュリティ・キャンプ アワード2021 Naoki Takayama (@mopisec) セキュリティ・キャンプ全国大会 2018 修了生 https://mopisec.net