Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Analyzing C# (.NET) Malware
Search
mopi
March 13, 2021
Technology
1
440
Analyzing C# (.NET) Malware
セキュリティ・キャンプ フォーラム 2021 で発表させていただいた資料です。
mopi
March 13, 2021
Tweet
Share
More Decks by mopi
See All by mopi
Discordを乗っ取るマルウェアの解析
mopisec
0
110
PLAY & PLAY & PLAY with Ghidra Debugger
mopisec
0
280
DetExploit - Windows用OSS脆弱性スキャナー (未踏ジュニア最終成果報告会)
mopisec
0
120
Other Decks in Technology
See All in Technology
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
330
Zennのパフォーマンスモニタリングでやっていること
ryosukeigarashi
0
150
OS 標準のデザインシステムを超えて - より柔軟な Flutter テーマ管理 | FlutterKaigi 2024
ronnnnn
0
210
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
100
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
アジャイルチームがらしさを発揮するための目標づくり / Making the goal and enabling the team
kakehashi
3
140
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
180
Engineer Career Talk
lycorp_recruit_jp
0
190
FlutterアプリにおけるSLI/SLOを用いたユーザー体験の可視化と計測基盤構築
ostk0069
0
100
組織成長を加速させるオンボーディングの取り組み
sudoakiy
2
210
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
10
1.1k
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
170
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Being A Developer After 40
akosma
87
590k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Git: the NoSQL Database
bkeepers
PRO
427
64k
GitHub's CSS Performance
jonrohan
1030
460k
Code Review Best Practice
trishagee
64
17k
BBQ
matthewcrist
85
9.3k
A better future with KSS
kneath
238
17k
Agile that works and the tools we love
rasmusluckow
327
21k
Building Applications with DynamoDB
mza
90
6.1k
We Have a Design System, Now What?
morganepeng
50
7.2k
The Language of Interfaces
destraynor
154
24k
Transcript
© 2021 mopisec All rights reserved. 1 Analyzing C# (.NET)
Malware セキュリティ・キャンプ アワード2021 Naoki Takayama (@mopisec) セキュリティ・キャンプ全国大会 2018 修了生 https://mopisec.net
© 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
© 2021 mopisec All rights reserved. 3 Analyzing C# (.NET)
Malware Malware Analysis マルウェア解析 • 表層解析、静的解析、動的解析など様々な解析手法が存在する • マルウェアを解析することによって…… • どのように標的のシステムに侵入したのか (Root Cause) • どの C&C サーバーと通信しているのか • 誰が侵入したのか (わからない場合も多い) • を知るためのヒントを得ることができる • インシデントレスポンスの中に含まれると考えている人・企業も多い
© 2021 mopisec All rights reserved. 4 Analyzing C# (.NET)
Malware Experiences マルウェア解析の経験 • PlugX • Emotet (Downloader) • Obfuscated PowerShell Script • Obfuscated Shell Script * マルウェア解析の経験が足りない!課題を克服するためには… → CTF大会に参加しReversingにカテゴライズされる問題を解く → 実際にマルウェアを解析して練習を行う
© 2021 mopisec All rights reserved. 5 Analyzing C# (.NET)
Malware Experiences マルウェア解析の経験 • PlugX • Emotet (Downloader) • Obfuscated PowerShell Script • Obfuscated Shell Script * マルウェア解析の経験が足りない!課題を克服するためには… → CTF大会に参加しReversingにカテゴライズされる問題を解く → 実際にマルウェアを解析して練習を行う
© 2021 mopisec All rights reserved. 6 Analyzing C# (.NET)
Malware Which Malware? どのマルウェアを解析する? • 先述した PlugX のようにビルダーが入手可能なもの • 検証しやすい&(ある程度)安全であるため • 今まで解析したマルウェアとは違う技術・言語が使われているもの • C (C++), Python (pyinstaller) で開発されたもの、難読化されたスクリプト等以外 • 知名度があり、実際の攻撃で使用されているもの • ANY.RUN , VirusTotal などのサービスへのサブミッションの統計から判断した → Quasar RAT
© 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
© 2021 mopisec All rights reserved. 10 Analyzing C# (.NET)
Malware What is Quasar RAT リモートシェル機能
© 2021 mopisec All rights reserved. 11 Analyzing C# (.NET)
Malware What is Quasar RAT リモートデスクトップ機能(操作なども可能!)
© 2021 mopisec All rights reserved. 12 Analyzing C# (.NET)
Malware What is Quasar RAT Messagebox表示機能
© 2021 mopisec All rights reserved. 13 Analyzing C# (.NET)
Malware What is Quasar RAT 紹介しきれないほど機能がたくさんある...!!! README.md
© 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
© 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
© 2021 mopisec All rights reserved. 16 Analyzing C# (.NET)
Malware Goals 目標・やりたい事 • Quasar RAT のような C# (.NET) で作成されたプログラム (マルウェア) のリバースエンジニアリング技術を習得する • Quasar RAT の動的解析を行い、挙動について検証する • 最後に実際にインターネット上から取得したサンプルを調査する
© 2021 mopisec All rights reserved. 21 Analyzing C# (.NET)
Malware Static Analysis dnSpyを用いた静的解析
© 2021 mopisec All rights reserved. 22 Analyzing C# (.NET)
Malware dnSpy .NET Debugger and Assembly Editor GitHub Repository: https://github.com/dnSpy/dnSpy
© 2021 mopisec All rights reserved. 23 Analyzing C# (.NET)
Malware dnSpy .NET Debugger and Assembly Editor • C# (.NET) で開発されたプログラムをデコンパイルすることができるツール • デコンパイルエンジン: ILSpy Decompiler Engine • 上記のデコンパイルエンジンは “ILSpy” という別のツールのために開発、使用されていたものだが、 インターフェースや機能面から “dnSpy” の方が使いやすい(と私は感じた)
© 2021 mopisec All rights reserved. 24 Analyzing C# (.NET)
Malware dnSpy .NET Debugger and Assembly Editor
© 2021 mopisec All rights reserved. 25 Analyzing C# (.NET)
Malware Reference GitHub 上のクライアントサイドコードと比較しながら解析を進める Quasar.Client/Program.cs Decompiled Code (Entry Point)
© 2021 mopisec All rights reserved. 26 Analyzing C# (.NET)
Malware Reference GitHub 上のクライアントサイドコードと比較しながら解析を進める Quasar.Client/Program.cs Decompiled Code (Entry Point)
© 2021 mopisec All rights reserved. 27 Analyzing C# (.NET)
Malware Reference GitHub 上のクライアントサイドコードと比較しながら解析を進める Quasar.Client/Program.cs Decompiled Code (Entry Point)
© 2021 mopisec All rights reserved. 28 Analyzing C# (.NET)
Malware Configuration 設定情報を発見! Quasar.Client/Config/Settings.cs Decompiled Code (where configuration is defined)
© 2021 mopisec All rights reserved. 29 Analyzing C# (.NET)
Malware Configuration 設定情報を発見! Decompiled Code (where configuration is defined) 何が書いてあるのかわからない。 なぜ??
© 2021 mopisec All rights reserved. 30 Analyzing C# (.NET)
Malware Configuration AES暗号化されていることがわかった Quasar.Client/Config/Settings.cs
© 2021 mopisec All rights reserved. 31 Analyzing C# (.NET)
Malware Configuration AES暗号化されていることがわかった Quasar.Client/Config/Settings.cs 復号化している
© 2021 mopisec All rights reserved. 32 Analyzing C# (.NET)
Malware Configuration 設定情報はいつ、どこで暗号化されている? Decompiled Code (where configuration is defined) ビルド段階で暗号化された設定情報 が埋め込まれるようになっている
© 2021 mopisec All rights reserved. 33 Analyzing C# (.NET)
Malware Configuration サーバー側のクライアントをビルドするコード内に暗号化処理を発見 Quasar.Server/Build/ClientBuilder.cs
© 2021 mopisec All rights reserved. 34 Analyzing C# (.NET)
Malware Dumping Configurations 実行バイナリから接続先等の情報を抽出する
© 2021 mopisec All rights reserved. 35 Analyzing C# (.NET)
Malware Configuration AES暗号化されていては接続先などがわからない Quasar.Client/Config/Settings.cs
© 2021 mopisec All rights reserved. 36 Analyzing C# (.NET)
Malware Original Implementation オリジナルのAES暗号化・復号化ライブラリを使用している Quasar.Common/Cryptography/Aes256.cs
© 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
© 2021 mopisec All rights reserved. 38 Analyzing C# (.NET)
Malware Decrypt It!! 仕様の確認 • 設定情報を Base64 エンコードしたものがAES暗号化されている • ENCRYPTIONKEY および salt によって共通鍵を生成している • ENCRYPTIONKEY はビルド時に自動的に生成される • salt は 基本的に 不変 • 共通鍵: PBKDF2 ( ENCRYPTIONKEY , salt , 50000 ) . read (16)
© 2021 mopisec All rights reserved. 39 Analyzing C# (.NET)
Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた
© 2021 mopisec All rights reserved. 40 Analyzing C# (.NET)
Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた 実行バイナリから抽出した ENCRYPTIONKEY
© 2021 mopisec All rights reserved. 41 Analyzing C# (.NET)
Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた 実行バイナリから抽出した 暗号化されたC&Cサーバーの 情報 (ホスト、ポート)
© 2021 mopisec All rights reserved. 42 Analyzing C# (.NET)
Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた Quasar.Common 内で定義 されている salt
© 2021 mopisec All rights reserved. 43 Analyzing C# (.NET)
Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた 定義したデータをもとに 共通鍵を生成している
© 2021 mopisec All rights reserved. 44 Analyzing C# (.NET)
Malware Decrypt It!! 仕様をもとに暗号化された設定情報を復号化するためのスクリプトを書いた 暗号化された設定情報を 復号化している
© 2021 mopisec All rights reserved. 45 Analyzing C# (.NET)
Malware Decrypt It!! 暗号化された設定情報を復号化するためのスクリプトを書いた
© 2021 mopisec All rights reserved. 46 Analyzing C# (.NET)
Malware Decrypt It!! 暗号化された設定情報を復号化するためのスクリプトを書いた(Python) 一致!!
© 2021 mopisec All rights reserved. 47 Analyzing C# (.NET)
Malware Dynamic Analysis Noriben, FakeNet-NGを用いた動的解析
© 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
© 2021 mopisec All rights reserved. 49 Analyzing C# (.NET)
Malware Dynamic Analysis Noriben, FakeNet-NG を用いた動的解析 ・ 使用する実行バイナリは静的解析の際に使用したものと同じもの ・ クリーンな検証用の Windows 10 環境 (on VMware Workstation) を構築しました ・ スナップショット ・ CleanEnv (初期状態) ・ ToolsInstalled (解析ツールなどのインストール後) ・ AfterRun (マルウェア, 解析ツールの実行後) ・ サーバーサイドは展開せず、クライアントサイドの挙動の観察に集中します
© 2021 mopisec All rights reserved. 51 Analyzing C# (.NET)
Malware Run Noriben GitHub からリポジトリをクローン (ダウンロード) する GitHub Repository: https://github.com/Rurik/Noriben
© 2021 mopisec All rights reserved. 52 Analyzing C# (.NET)
Malware Run Noriben GitHub からリポジトリをクローン (ダウンロード) する
© 2021 mopisec All rights reserved. 53 Analyzing C# (.NET)
Malware Run Noriben Noriben の実行には Sysinternals Suite が必要なため、配置して PATH に追加する
© 2021 mopisec All rights reserved. 54 Analyzing C# (.NET)
Malware Run Noriben “Noriben.py” を実行する
© 2021 mopisec All rights reserved. 55 Analyzing C# (.NET)
Malware Run FakeNet-NG GitHub からリポジトリをクローン (ダウンロード) する GitHub Repository: https://github.com/fireeye/flare-fakenet-ng
© 2021 mopisec All rights reserved. 56 Analyzing C# (.NET)
Malware Run FakeNet-NG GitHub からリポジトリをクローン (ダウンロード) する
© 2021 mopisec All rights reserved. 57 Analyzing C# (.NET)
Malware Run FakeNet-NG “fakenet.exe” を実行する
© 2021 mopisec All rights reserved. 58 Analyzing C# (.NET)
Malware Run Quasar RAT 解析用バイナリを実行する
© 2021 mopisec All rights reserved. 59 Analyzing C# (.NET)
Malware Analyze Noriben Logs Noriben によって記録されたデータを解析する
© 2021 mopisec All rights reserved. 60 Analyzing C# (.NET)
Malware File Activities ファイルアクティビティの調査 Noriben実行中に作成されたプロセスで関係のあるもの
© 2021 mopisec All rights reserved. 61 Analyzing C# (.NET)
Malware Noriben実行中に作成されたプロセスで関係のあるもの 一つ目: 解析用マルウェアを私が実行した際の記録 File Activities ファイルアクティビティの調査
© 2021 mopisec All rights reserved. 62 Analyzing C# (.NET)
Malware Noriben実行中に作成されたプロセスで関係のあるもの 一つ目: 解析用マルウェアを私が実行した際の記録 二つ目: 解析用マルウェアが自身のコピーを作成した際の記録 File Activities ファイルアクティビティの調査
© 2021 mopisec All rights reserved. 63 Analyzing C# (.NET)
Malware Noriben実行中に作成されたプロセスで関係のあるもの 一つ目: 解析用マルウェアを私が実行した際の記録 二つ目: 解析用マルウェアが自身のコピーを実行した際の記録 File Activities ファイルアクティビティの調査
© 2021 mopisec All rights reserved. 64 Analyzing C# (.NET)
Malware Noriben実行中に作成されたプロセスで関係のあるもの 一つ目: 解析用マルウェアを私が実行した際の記録 二つ目: 解析用マルウェアが自身のコピーを実行した際の記録 マルウェアは自身のコピーを “%AppData%¥SubdirectoryForQuasarRAT” 内に作成 File Activities ファイルアクティビティの調査
© 2021 mopisec All rights reserved. 65 Analyzing C# (.NET)
Malware Check!! 先ほど作成したスクリプトを改変して解析結果が正しいか確認する
© 2021 mopisec All rights reserved. 66 Analyzing C# (.NET)
Malware Check!! 実際に解析環境上で “%AppData%¥SubdirectoryForQuasarRAT” を確認する SHA256 Hash: e8792696bfc9a8861ebd7d2cb7a6a6a15ef52af5c29ab9024cb39ce42c0ac37d
© 2021 mopisec All rights reserved. 67 Analyzing C# (.NET)
Malware New File ファイルアクティビティの中にログファイルを発見
© 2021 mopisec All rights reserved. 68 Analyzing C# (.NET)
Malware New File どの DLL を実行時に読み込んだのかログが残っている (大まかにだが)どのような処理を行っているか予想できる可能性がある
© 2021 mopisec All rights reserved. 69 Analyzing C# (.NET)
Malware Registry Activity 自動実行用のエントリが作成されている
© 2021 mopisec All rights reserved. 70 Analyzing C# (.NET)
Malware Registry Activity 自動実行用のエントリが作成されている HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Run 内のエントリに記述されたプログラムはWindows起動時に 自動的に実行されるようになっている
© 2021 mopisec All rights reserved. 71 Analyzing C# (.NET)
Malware Registry Activity 自動実行用のエントリが作成されている HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Run 内のエントリに記述されたプログラムはWindows起動時に 自動的に実行されるようになっている → Persistence化
© 2021 mopisec All rights reserved. 72 Analyzing C# (.NET)
Malware Network Activity FakeNet-NG のログの調査 定期的に 192.168.169.128:4782 に対して通信を行っている
© 2021 mopisec All rights reserved. 73 Analyzing C# (.NET)
Malware Practice!! インターネット上から取得した “Quasar RAT” の解析
© 2021 mopisec All rights reserved. 74 Analyzing C# (.NET)
Malware Static Analysis Quasar RAT としてラベルされているバイナリを ANY.RUN から取得しました SHA256 Hash: 7A1AD31508F2EA1D7ABC2907977EAF32537F09994D1622B3E2E733649905C861
© 2021 mopisec All rights reserved. 75 Analyzing C# (.NET)
Malware Static Analysis dnSpyを用いて暗号化された設定情報、ENCRYPTIONKEYを取得する ENCRYPTIONKEY
© 2021 mopisec All rights reserved. 76 Analyzing C# (.NET)
Malware Script is Working!! 作成したスクリプトに静的解析から取得したデータを入力した結果…… インストール名には実在する製品名が入っていたため、C&C サーバーの情報と合わせて 念のためマスクしてあります
© 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) プログラムをデコンパイルするが、それでも仕様の解明は困難だと感じた
© 2021 mopisec All rights reserved. 78 Analyzing C# (.NET)
Malware Threats / Interesting Point 脅威および注目すべき点 ・ もしも salt の値を変更すれば、解析は格段に難しくなってしまうのではないだろうか ・ 共通鍵の生成方法を変更すれば… ・ 設定情報を保持する方法を変更すれば… ・ このように、小さな変更を加えるだけで解析が困難になることこそが同RATの亜種が大量に開発さ れている理由なのではないだろうか
© 2021 mopisec All rights reserved. 79 Analyzing C# (.NET)
Malware Future Works 今後やっていきたいこと ・ まだ自力で解明できていない仕様や動作がある為、ソースコードを読むほか、国内外の皆様が 公開されている貴重な資料を読み込み、解析を続ける ・ 本発表を行う中で書いたスクリプトは何らかの形で公開したい(アウトプット) ・ (私の知る限り)設定情報をデコードするスクリプトは一般に公開されていないため ・ リファクタリングやインターフェースの実装などが終わり次第、公開したいと考えています ・ 今後もマルウェア解析のスキルを研磨し、社会に出ても情報セキュリティ業界で活躍することが できる人材になれるよう努める
© 2021 mopisec All rights reserved. 80 Analyzing C# (.NET)
Malware Special Thanks スペシャルサンクス ・ セキュリティ・キャンプ 講師の皆様 ・ 動的解析の手法など、本発表(解析)で使用した技術の多くは私がセキュリティ・キャンプおよび その関連イベントで講師の皆様から教えていただいたものです。 ・ JPCERT/CC の皆様 ・ 皆様が公開されていた素晴らしい資料がなければ、ここまで辿り着けませんでした。 ・ この発表を聞いてくださったすべての皆様 ・ 本当にありがとうございました。
© 2021 mopisec All rights reserved. 81 Analyzing C# (.NET)
Malware セキュリティ・キャンプ アワード2021 Naoki Takayama (@mopisec) セキュリティ・キャンプ全国大会 2018 修了生 https://mopisec.net