Kasza smashing the_jars_j-corrected

87
容器(ジャー:J r)を 壊す! Anthony Kasza Sr. Threat Researcher Palo Alto Networks

Transcript of Kasza smashing the_jars_j-corrected

Page 1: Kasza smashing the_jars_j-corrected

容器(ジャー:J r)を壊す!

Anthony Kasza

Sr. Threat Researcher

Palo Alto Networks

Page 2: Kasza smashing the_jars_j-corrected
Page 3: Kasza smashing the_jars_j-corrected

自己紹介

@AnthonyKasza

エンタープライズセキュリティマルウェアコミュニケーションDNSトランザクション分析脅威となる手法

CTF課題の作成者:- PAN LabyREnth- FIRST DRG

Page 4: Kasza smashing the_jars_j-corrected

プレゼンの概略

•最初に• java, jar, javaベースの脅威の紹介

• Javaの脅威• 現在の脅威概況

•防御手法• 分析と検知の手法

•デモ• アンパック、難読化解除、解読

Page 5: Kasza smashing the_jars_j-corrected

Javaの基本

•豊富なエコシステムを形成

• JVMと JDKと JRE

•オブジェクト指向プログラミングの教育によく使われる

•バイトコードにコンパイルされる• Pythonに似ている

• 逆アセンブラが容易

•アーキテクチャを選ばない• クロスプラットフォーム

JDK

JRE

Dev tools

JRE lib source

JVM

Libraries

Page 6: Kasza smashing the_jars_j-corrected

リバースエンジニアリング難易度をスペクトル表示

容易

リモートサービス(不可視)

ソースコード Delphi

Java

.NET

C++C

困難

Page 7: Kasza smashing the_jars_j-corrected

JAR (Java ARchive) の基本

• JARとZip形式• コンテンツはリソースと呼ばれる

•クラスファイル• ヘッダー 0xCAFEBABE

•コンスタントプール

•マニフェスト• META-INF/MANIFEST.MF

• 「キー:値」の形式• HTTPヘッダーに似ている

JAR

manifest

a.class b.class

c.class d.class

a.jpg b.ico a.png

Page 8: Kasza smashing the_jars_j-corrected

Java RATの基本

•さまざまな成熟レベル• 例:BlueBananaと Adzokと jSocket

•ほとんどはキットかビルダー• stub Jars

•共通ライブラリを多く使用

• VirusTotalの検知はしばしば不正確• jRat != Jacksbot (別名 jRat)

• 思うにjRatとして検知されるRATが多すぎる

• Frutas != Adwind != Jsocket != etc.• もしくは、そうだったりする?

• 思うにAdwindとして検知されるRATが多すぎる

Page 9: Kasza smashing the_jars_j-corrected

ほかのJavaの脅威• Banloadおよびその他のドロッパやダウンローダ

• Javaのランソムウェア• Github上でのPoC(コンセプトの証明) [37]

• 私が言えることとして、これは2人の高校生によって書かれた

• 一般に配られてはいない

• jbd – Javaのバインドシェル• https://scoperchiatore.wordpress.com/java-

backdoor/

• Javafog – Javaで書かれたAPTバックドア

Page 10: Kasza smashing the_jars_j-corrected

ちょっと脱線:Javafog

•カスペルスキーによって検出

• Icefogのサンプルとして、同じドメインにビーコン通信をする悪意あるJar

• Windows のみ• 標的型?

• それならなぜJava?

Page 11: Kasza smashing the_jars_j-corrected

ちょっと脱線:Javafog

クロスプラットフォームではない

Icefogのドメイン名

Page 12: Kasza smashing the_jars_j-corrected

共通ライブラリ• java.util.prefs –生き残るための仕組み

• Windows: レジストリ• Linux: ユーザのホームディレクトリ内の隠しファイル• OSX: ~/Library/Preferences/

•広く(間違えて)使われているライブラリ• Sigar

• Bridj

• Slf4j

• JNA / JNI [35]

• jnativehook

• Kryonet

• webcam-capture [36]

• Runtime.getRuntime().exec()• E.g. Javafog

Page 13: Kasza smashing the_jars_j-corrected

攻撃者のタイプ

• ゆきずりの攻撃者• いわゆるスクリプト・キディーとフィッシングやスパム

• カネ目当ての攻撃者• ブラジルにおけるオンラインバンクのユーザへの攻撃 (banload) [40]

• シンガポールにおける銀行システム (adwind) [11]

• 特別なものを対象にした攻撃者• PackRat – CitizenLab, 2015年12月 (Adzok,

AlienSpy)• ラテンアメリカの人達 [13]

• JavaFog – Kaspersky, 2014年1月• Manul campaign – EFF, 2016年 (jRat) [34]

Page 14: Kasza smashing the_jars_j-corrected

人はJarの中に入って来るものに名前を付ける

Page 15: Kasza smashing the_jars_j-corrected

Jarの中に入って来るもの

Page 16: Kasza smashing the_jars_j-corrected

Jarの中に入って来るものFrutas

Adwind

Unrecom

AlienSpy

jSocket

jBifrost

Adzok

BlueBanana

Crimson

jCage

jFect

jRAT

jSpy

OS Celestial

Quaverse

Quarallax

OmniRAT

Ratty

Feb 2012

Jan 2013

Nov 2013

Oct 2014

July 2015

Sept 2012

2010 ?

Oct 2012

July 2013

Nov 2015

Oct 2012

Dec 2013

May 2015

Jun 2015

Nov 2015

Jun 2016

May 2016

Feb 2016

Page 17: Kasza smashing the_jars_j-corrected

Jarの中に入って来るものFrutas

Adwind

Unrecom

AlienSpy

jSocket

jBifrost

Adzok

BlueBanana

Crimson

jCage

jFect

jRAT

jSpy

OS Celestial

Quaverse

Quarallax

OmniRAT

Ratty

Feb 2012

Jan 2013

Nov 2013

Oct 2014

July 2015

Sept 2012

2010 ?

Oct 2012

July 2013

Nov 2015

Oct 2012

Dec 2013

May 2015

Jun 2015

Nov 2015

Jun 2016

May 2016

Feb 2016

Page 18: Kasza smashing the_jars_j-corrected

Jarの中に入って来るものFrutas

Adwind

Unrecom

AlienSpy

jSocket

jBifrost

Adzok

BlueBanana

Crimson

jCage

jFect

jRAT

jSpy

OS Celestial

Quaverse

Quarallax

OmniRAT

Ratty

Feb 2012

Jan 2013

Nov 2013

Oct 2014

July 2015

Sept 2012

2010 ?

Oct 2012

July 2013

Nov 2015

Oct 2012

Dec 2013

May 2015

Jun 2015

Feb 2016

Nov 2015

Jun 2016

May 2016

Page 19: Kasza smashing the_jars_j-corrected
Page 20: Kasza smashing the_jars_j-corrected

Frutasの血統:Frutas

• FrutasのPoC版は2012年の初めに出現[2]

•素のままのASCIIコードで書かれた ‘config.txt’もしくは ‘config.xml’ ファイル

•並列実行を避けるため、 ‘frautas.lock’ ファイルをtempディレクトリに書き込む

• 2012年7月にスペイン語話者の犯罪者の間で普及する[1]

Page 21: Kasza smashing the_jars_j-corrected

Frutasの血統:Frutas

Frutasの設定ファイル

Page 22: Kasza smashing the_jars_j-corrected

Frutasの血統:Frutas

Frutasのlockファイル

Page 23: Kasza smashing the_jars_j-corrected

Frutasの血統:Frutas

FrutasのWindows特有のコマンド

Page 24: Kasza smashing the_jars_j-corrected

Frutasの血統:Adwind

• Frutasのリブランド版として2013年の初めに出現 [3]

•その後の進化版で難読化を使い始めた [4]• 同じ名前のリソース(大文字と小文字)

• Android(APKバインダー)のサポートも検出された

•モジュラー形式のプラグイン

Page 25: Kasza smashing the_jars_j-corrected

Frutasの血統:Adwind

Adwindはマニフェストエントリを難読化

Page 26: Kasza smashing the_jars_j-corrected

Frutasの血統:Adwind

Adwindはリソース名を難読化

Page 27: Kasza smashing the_jars_j-corrected

Frutasの血統:Unrecom

• 2013年の遅くに出現したAdwindのリブランド版[5] [6]

• UNiversal REmote COntrol Multi-platform

(マルチプラットフォームで動作するリモートコントロール)の略

• AdwindはLustroSoftに「吸収」される

• LiteCoin採掘プログラムへのプラグインも出現 [7]

Page 28: Kasza smashing the_jars_j-corrected

Frutasの血統:Unrecom

Unrecomのサーバ・クラス・リソース名

Page 29: Kasza smashing the_jars_j-corrected

Frutasの血統:AlienSpy

• 2014年10月に出現

•改良点 [3]• サンドボックスの検出機能

• C2(コマンド&コントロール)通信にTLSを採用

• 分析対策 [8]

• Allatori難読化ツールを使用

Page 30: Kasza smashing the_jars_j-corrected

Frutasの血統:AlienSpy

AlianSpyの長いリソース名

Page 31: Kasza smashing the_jars_j-corrected

Frutasの血統:AlienSpy

AlienSpyのAllatori使用

Page 32: Kasza smashing the_jars_j-corrected

Frutasの血統:AlienSpy

AlienSpyの分析対策手法

Page 33: Kasza smashing the_jars_j-corrected

Frutasの血統:jSocket

• AlienSpyのドメインはFidelisレポートに伴って閉鎖された(2015年4月)

• jSocketは2015年7月に出現 [10]

• AlienSpyに似ているが購読モデル(SaaS)を採用

•カスペルスキーの見積もりではJsocket(Adwind)の作者は [11]:• 年間20万ドルを儲けており

• 1,800の顧客に販売している

Page 34: Kasza smashing the_jars_j-corrected

Frutasの血統:jSocket

jSocket OSXはファイル名とパスを難読化

Page 35: Kasza smashing the_jars_j-corrected

Frutasの血統:jSocket

jSocket OSXの plistエントリ

Page 36: Kasza smashing the_jars_j-corrected

Frutasの血統:jBifrost

• jSocketからのマイナーな機能改善 [38]

• コントローラーはユーザがタイプしているかどうかを報告できる

•直列化された解読キーが埋め込まれている

Page 37: Kasza smashing the_jars_j-corrected

Frutasの血統:jBifrost

jBifrostとjSocketのコントローラUIの比較Fortinet社のブログより [38]

Page 38: Kasza smashing the_jars_j-corrected

Adzok(別名Adsocks)• 2010年代に出現

(0.7.0は2011年1月ごろ) [12]

•無償版はPackRatグループが使用 [13]

•オープンソース[14]で、無償版とPro版が存在する

•現在でも使われている:• ボリビアからオンライン販売されている [15]

• Twitterアカウントからの最後のつぶやきは2015年7月 [16]

• Frutasとの類似点• lockファイルの作成

• 無償版はWndows版のみ

• XML設定ファイルの要素

Page 39: Kasza smashing the_jars_j-corrected

Adzok(別名Adsocks)

Adzokの無償版はWindowsのみで動作

Page 40: Kasza smashing the_jars_j-corrected

Adzok(別名Adsocks)

Adzok Free(無償版)の設定ファイル

Page 41: Kasza smashing the_jars_j-corrected

Adzok(別名Adsocks)

Adzokのlockファイル

Page 42: Kasza smashing the_jars_j-corrected

Adzok(別名Adsocks)

Adzokのホームページ

Page 43: Kasza smashing the_jars_j-corrected

BlueBanana

• 2012年9月に出現

•難読化されている• コード化された文字列

• クラスファイル名

•最初のデータパケットで設定されたパスワードでビーコン通信

•開発は中止されている

Page 44: Kasza smashing the_jars_j-corrected

BlueBanana

OSX上でビーコン送信されているBlueBananaのパスワード

Page 45: Kasza smashing the_jars_j-corrected

BlueBanana

BlueBananaの紹介画面(「~について」)

Page 46: Kasza smashing the_jars_j-corrected

Crimson

• 見つけられた限りで最も古いフォーラム投稿は2012年10月 [17]• 開発者の「about」欄には2013年12月と書かれている

• 暗号化された通信• AES

• Blowfish

• DES

• 三重 DES

• 設定ファイルを次のどれかに出力:• v1.2.3 – sqliteデータベースの ‘Psettings.db’

• v1.3.0 – base64でエンコードされた‘settings.properties’

• v2.1.0 –出力しない

Page 47: Kasza smashing the_jars_j-corrected

Crimson

CrimsonがOSX上でsqlie dbを出力している

Page 48: Kasza smashing the_jars_j-corrected

Crimson

CrimsonのWindows上でのデバッグ出力

Page 49: Kasza smashing the_jars_j-corrected

Crimson

CrimsonのOSX上でのデバッグ出力

Page 50: Kasza smashing the_jars_j-corrected

jCage

• 2013年7月に出現

• jnativehookライブラリを使用

• Windowsシステムに特化しているように見受けられる• OSX上で実行されるサンプルを見つけられなかった

Page 51: Kasza smashing the_jars_j-corrected

jCage

jCageがWindws上でアンチウイルス製品を探している

Page 52: Kasza smashing the_jars_j-corrected

jCage

jCageのWindowsに特化したシャットダウン・コマンド

Page 53: Kasza smashing the_jars_j-corrected

qRat (Qarallax/Quaverse)• 2015年5月に出現• 3ステージに分かれたJARローダ [20]

• SaaSモデル(jSocketに類似)• IPv4アドレスとドメインをハードコード

• Windowsのみで動作

• 第2のバージョンが最近検出された[32]

• 補助的なJARを「qurallax.com」からダウンロード

• Macでも動作!• スイスにて米国のビザを申請する者達をSkype上で攻撃するのに使用された[33] –2016年6月6日

Page 54: Kasza smashing the_jars_j-corrected

qRat (Qarallax/Quaverse)

qRatのバージョン1はOSX上では動かない

Page 55: Kasza smashing the_jars_j-corrected

qRat (Qarallax/Quaverse)

OSX上におけるqRatのバージョン2のランダムに命名されて隠されたJAR

Page 56: Kasza smashing the_jars_j-corrected

jRat(別名Jacksbot)

• 2012年10月に出現

•一部は redpoins0nによってオープンソース化• プラグイン、スクリプト、アンインストーラー、そして、補助的なツール群

• https://github.com/java-rat

•念のために、全てがjRatというわけではない

•しつこく使われている [19]• OSX: a LaunchAgent plist

• Linux: ~/.config/autostart

• Windows: レジストリランキー

Page 57: Kasza smashing the_jars_j-corrected

jRat(別名Jacksbot)

OSX上で生き延びるためのjRatのplistファイル

Page 58: Kasza smashing the_jars_j-corrected

jFect

• 2015年11月に出現

•高度に難読化されている

• IRC もしくは HTTP通信

• OSX上で生き延びるためのLaunchAgent plistファイル• 他のすべてのJava RATのように

Page 59: Kasza smashing the_jars_j-corrected

jFect

jFectがWindows上でIRCを使ってC2サーバと通信

Page 60: Kasza smashing the_jars_j-corrected

jFect

jFectがOSX上でHTTPを使ってC2サーバと通信

Page 61: Kasza smashing the_jars_j-corrected

jFect

OSX上で生き延びるためのjFect plistファイル

Page 62: Kasza smashing the_jars_j-corrected

OmniRAT

• 2015年11月に出現

•複数種類のOSに対応し、コントロール用のパネルを装備• Androidのコントロールパネル

• C2(コマンド&コントロール)サーバはハードコードされている(設定ファイルを使わない)

• Androidバージョンは SMS経由で拡散する [21]

Page 63: Kasza smashing the_jars_j-corrected

OmniRAT

OmniRATのハードコードされたC2サーバのIPv4アドレス

Page 64: Kasza smashing the_jars_j-corrected

OmniRAT

OmniRATがJavaシリアライズを使用してビーコン通信

Page 65: Kasza smashing the_jars_j-corrected

jSpyと OS Celestial• jSpyは2013年12月に出現、OS Celestialは次のバージョンの模様• オープンソースライブラリを再利用

• 似たような機能群

• 似たような設定ファイルのオプション群

• 似たような設定のパーシングクラス

• 重なるビーコン通信先のドメイン名• jstealth.co[.]uk

• jstealth[.]net

• Windows上に生成されるファイル群によって検出可能

• OSX上で生き延びるためにLaunchAgent plistを使用

Page 66: Kasza smashing the_jars_j-corrected

jSpyと OS Celestial

jSpyのホームページ

Page 67: Kasza smashing the_jars_j-corrected

jSpyと OS Celestial

OSX上で生き延びるためのjSpyのplistファイル

Page 68: Kasza smashing the_jars_j-corrected

Ratty

• Github上で活発に開発されていた[22]• Windows版のほうがOSX版開発が進んでいたように見受けられる(さらに遅れてLinux版)

•設定ファイルには単純なXORエンコードを使用

• Palo Alto Network社はこのRATが出回っているのを今年の4月5日ごろに検知

•数か月後にGithubから消えた

Page 69: Kasza smashing the_jars_j-corrected

Ratty

Rattyは限定的ながらLinuxにも対応

Page 70: Kasza smashing the_jars_j-corrected

Ratty

2016年4月以降のRatty配布セッションデータ

Page 71: Kasza smashing the_jars_j-corrected
Page 72: Kasza smashing the_jars_j-corrected

共通したJava RATのふるまい• 難読化、ソースコードプロテト、暗号化の各ツール

• 対VM、対分析の工夫• 非常に長くてランダム(のよう)なリソース名

• 多くのアンチウイルスソフトはファミリーを特定できず

• JARの取り込みを隠す• 隠しディレクトリもしくはtempフォルダ

• 長生きする• レジストリ、スタートアップ・フォルダ、

plists (KnockKnock)

• ビーコン通信• ファミリーによって方法は異なる

Page 73: Kasza smashing the_jars_j-corrected

パック、難読化、バンドルの各ツール

• Allatori

• Zelix Klassmaster (別名 Zelixもしくは ZKM)

• launch4j (jarからexeに変換)

• Jar Bundler (OS X Mountain Lion 10.8.2では取除かれた)

• JarToApp• https://github.com/redpois0n/JarToApp

• jCrypt

• jarProtector

• jFuzzle

Page 74: Kasza smashing the_jars_j-corrected

JWScanと Jardiff

Page 75: Kasza smashing the_jars_j-corrected

Jarの難読化解除

•難読化解除のロジックはJARのどこかに存在

•クラス・ファイルをデコンパイル

•他のメソッドに文字列をラップしているメソッドを探す

•もし、それらのメソッドが数学的な操作を文字列に対して行っているのならばPythonで再現

• Eclipseによる条件付きブレークポイント[23] [24][25]• 後ほどデモします

Page 76: Kasza smashing the_jars_j-corrected

javadeobfuscator

•一般的な技法やツールによる難読化を自動的に解除 [39]• 後ほどデモします

Page 77: Kasza smashing the_jars_j-corrected

分析の手がかり

OSX

• OSXで生き延びる仕組み[29]

• Plists

•隠しファイルとディレクトリ

• DtraceとJVMのホットスポット

• KnockKnock [31]

Windows

• レジストリキー

• スタートアップフォルダのlink

ファイル

• Procmon

• Regshot

Page 78: Kasza smashing the_jars_j-corrected

Bytecode Visualizer

Page 79: Kasza smashing the_jars_j-corrected

Bytecode-viewer

Page 80: Kasza smashing the_jars_j-corrected

RATDecoders

• kevthehによってGithubにアップされる [27]

•多くのRATに対する静的な設定解読スクリプトを装備• Javaベースのものだけではない

•素晴らしい静的なインテリジェンス・パイプラインを作ることができる• VirusTotal、Laikaboss [28]、その他と連携

• いくつかのベンダーは内輪で行っている

Page 81: Kasza smashing the_jars_j-corrected

落とし穴と見過ごし

•リソース名に基づいたYaraのルールはちゃんと動く• 難読化に絡む例外はある

• Jarinjarloaderはクセがある• JARのマニフェスト内でメインクラスとして設定される

• そして、異なったクラスをロードする(URLもしくは自身より)

•マニフェストファイルは JARの実行には必ずしも必要無い

Page 82: Kasza smashing the_jars_j-corrected

本日の内容のまとめ

JavaのRATは2010年より出現

今だそれほどは普及していない使用は増えている

様々な種類の攻撃者によって使用される

プレゼンで出てきたツールには要注目、本当に使える

協業に興味が有る、あるいは、質問が有る方は連絡を

Page 83: Kasza smashing the_jars_j-corrected

Special Thanks

83 | © 2015, Palo Alto Networks.

PacSec主催者

PacSecの聴衆

Tyler Halfpop

Jacob Soo

Anthony Mendez

Kevin Breen

Chris Pierce

Jørgen Bøhnsdalen

Page 84: Kasza smashing the_jars_j-corrected

Questions?

Page 85: Kasza smashing the_jars_j-corrected

デモ

Page 86: Kasza smashing the_jars_j-corrected

参照情報 (1)[1] https://cdn.securelist.com/files/2016/02/Adwind_timeline_horizontal_final.png[2] http://www.symantec.com/connect/blogs/cross-platform-frutas-rat-builder-and-back-door[3] https://isc.sans.edu/forums/diary/Adwind+another+payload+for+botnetbased+malspam/20041/[4] https://kc.mcafee.com/resources/sites/MCAFEE/content/live/PRODUCT_DOCUMENTATION/26000/PD26278/en_US/McAfee_Labs_Threat_Advisory_Adwind.pdf[5] http://www.crowdstrike.com/blog/adwind-rat-rebranding/[6] http://blog.checkpoint.com/2016/02/24/adwind-malware-as-a-service-reincarnation/[7] http://blog.trendmicro.com/trendlabs-security-intelligence/old-java-rat-updates-includes-litecoin-plugin/[8] https://www.fidelissecurity.com/sites/default/files/FTA_1015_Alienspy_FINAL.pdf[9] https://theintercept.com/2015/08/21/inside-the-spyware-campaign-against-argentine-troublemakers-including-alberto-nisman/[10] https://www.fidelissecurity.com/sites/default/files/FTA_1019_Ratcheting_Down_on_JSocket_A_PC_and_Android_Threat_FINAL.pdf[11] https://blog.kaspersky.com/adwind-rat/11252/[12] http://cleanbytes.net/java-trojan-horses-the-new-trojan-viruses-generation[13] https://citizenlab.org/2015/12/packrat-report/[14] https://sourceforge.net/projects/adsocks/[15] http://adzok.com/[16] https://twitter.com/Adzok_[17] https://leakforums.net/thread-314078[18] http://www.javaworld.com/article/2077233/core-java/bytecode-basics.html[19] https://github.com/redpois0n/jrat-remover/tree/master/src/se/jrat/remover/removers[20] https://www.trustwave.com/Resources/SpiderLabs-Blog/Quaverse-RAT--Remote-Access-as-a-Service/

Page 87: Kasza smashing the_jars_j-corrected

参照情報 (2)

[21] https://blog.avast.com/2015/11/05/droidjack-isnt-the-only-spying-software-out-there-avast-discovers-that-omnirat-is-currently-being-used-and-spread-by-criminals-to-gain-full-remote-co[22] https://github.com/Sogomn/Ratty[23] https://github.com/deresz/unpacking/blob/master/README.md[24] https://vimeo.com/165124535[25] https://wiki.eclipse.org/FAQ_How_do_I_set_a_conditional_breakpoint%3F[26] http://www.crowdstrike.com/blog/native-java-bytecode-debugging-without-source-code/[27] https://github.com/kevthehermit/RATDecoders[28] https://github.com/lmco/laikaboss[29] https://www.virusbulletin.com/uploads/pdf/conference/vb2014/VB2014-Wardle.pdf[30] https://securelist.com/blog/incidents/58209/the-icefog-apt-hits-us-targets-with-java-backdoor/[31] https://github.com/synack/knockknock[32] http://presumptuouscommoner.blogspot.com/2016/04/post-19-or-anyone-want-jar-of-docx.html[33] https://labsblog.f-secure.com/2016/06/07/qarallax-rat-spying-on-us-visa-applicants/[34] https://www.eff.org/files/2016/08/03/i-got-a-letter-from-the-government.pdf[35] http://blog.cobaltstrike.com/2013/08/29/how-to-inject-shellcode-from-java/[36] https://github.com/sarxos/webcam-capture[37] https://github.com/codertimo/Ransomware[38] https://blog.fortinet.com/2016/08/16/jbifrost-yet-another-incarnation-of-the-adwind-rat[39] https://github.com/java-deobfuscator/deobfuscator[40] http://researchcenter.paloaltonetworks.com/2016/03/banload-malware-affecting-brazil-exhibits-unusually-complex-infection-process/