Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Analyzing C# (.NET) Malware

mopi
March 13, 2021

Analyzing C# (.NET) Malware

セキュリティ・キャンプ フォーラム 2021 で発表させていただいた資料です。

mopi

March 13, 2021
Tweet

More Decks by mopi

Other Decks in Technology

Transcript

  1. © 2021 mopisec All rights reserved. 1 Analyzing C# (.NET)

    Malware セキュリティ・キャンプ アワード2021 Naoki Takayama (@mopisec) セキュリティ・キャンプ全国大会 2018 修了生 https://mopisec.net
  2. © 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
  3. © 2021 mopisec All rights reserved. 3 Analyzing C# (.NET)

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

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

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

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

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

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

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

    Malware What is Quasar RAT 紹介しきれないほど機能がたくさんある...!!! README.md
  12. © 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
  13. © 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
  14. © 2021 mopisec All rights reserved. 16 Analyzing C# (.NET)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Malware Original Implementation オリジナルのAES暗号化・復号化ライブラリを使用している Quasar.Common/Cryptography/Aes256.cs
  31. © 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
  32. © 2021 mopisec All rights reserved. 38 Analyzing C# (.NET)

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

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

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

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

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

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

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

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

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

    Malware Dynamic Analysis Noriben, FakeNet-NGを用いた動的解析
  42. © 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
  43. © 2021 mopisec All rights reserved. 49 Analyzing C# (.NET)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Malware Script is Working!! 作成したスクリプトに静的解析から取得したデータを入力した結果…… インストール名には実在する製品名が入っていたため、C&C サーバーの情報と合わせて 念のためマスクしてあります
  70. © 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) プログラムをデコンパイルするが、それでも仕様の解明は困難だと感じた
  71. © 2021 mopisec All rights reserved. 78 Analyzing C# (.NET)

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

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

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

    Malware セキュリティ・キャンプ アワード2021 Naoki Takayama (@mopisec) セキュリティ・キャンプ全国大会 2018 修了生 https://mopisec.net