Download - Kasza smashing the_jars_j-corrected
容器(ジャー:J r)を壊す!
Anthony Kasza
Sr. Threat Researcher
Palo Alto Networks
自己紹介
@AnthonyKasza
エンタープライズセキュリティマルウェアコミュニケーションDNSトランザクション分析脅威となる手法
CTF課題の作成者:- PAN LabyREnth- FIRST DRG
プレゼンの概略
•最初に• java, jar, javaベースの脅威の紹介
• Javaの脅威• 現在の脅威概況
•防御手法• 分析と検知の手法
•デモ• アンパック、難読化解除、解読
Javaの基本
•豊富なエコシステムを形成
• JVMと JDKと JRE
•オブジェクト指向プログラミングの教育によく使われる
•バイトコードにコンパイルされる• Pythonに似ている
• 逆アセンブラが容易
•アーキテクチャを選ばない• クロスプラットフォーム
JDK
JRE
Dev tools
JRE lib source
JVM
Libraries
リバースエンジニアリング難易度をスペクトル表示
容易
リモートサービス(不可視)
ソースコード Delphi
Java
.NET
C++C
困難
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
Java RATの基本
•さまざまな成熟レベル• 例:BlueBananaと Adzokと jSocket
•ほとんどはキットかビルダー• stub Jars
•共通ライブラリを多く使用
• VirusTotalの検知はしばしば不正確• jRat != Jacksbot (別名 jRat)
• 思うにjRatとして検知されるRATが多すぎる
• Frutas != Adwind != Jsocket != etc.• もしくは、そうだったりする?
• 思うにAdwindとして検知されるRATが多すぎる
ほかのJavaの脅威• Banloadおよびその他のドロッパやダウンローダ
• Javaのランソムウェア• Github上でのPoC(コンセプトの証明) [37]
• 私が言えることとして、これは2人の高校生によって書かれた
• 一般に配られてはいない
• jbd – Javaのバインドシェル• https://scoperchiatore.wordpress.com/java-
backdoor/
• Javafog – Javaで書かれたAPTバックドア
ちょっと脱線:Javafog
•カスペルスキーによって検出
• Icefogのサンプルとして、同じドメインにビーコン通信をする悪意あるJar
• Windows のみ• 標的型?
• それならなぜJava?
ちょっと脱線:Javafog
クロスプラットフォームではない
Icefogのドメイン名
共通ライブラリ• 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
攻撃者のタイプ
• ゆきずりの攻撃者• いわゆるスクリプト・キディーとフィッシングやスパム
• カネ目当ての攻撃者• ブラジルにおけるオンラインバンクのユーザへの攻撃 (banload) [40]
• シンガポールにおける銀行システム (adwind) [11]
• 特別なものを対象にした攻撃者• PackRat – CitizenLab, 2015年12月 (Adzok,
AlienSpy)• ラテンアメリカの人達 [13]
• JavaFog – Kaspersky, 2014年1月• Manul campaign – EFF, 2016年 (jRat) [34]
人はJarの中に入って来るものに名前を付ける
Jarの中に入って来るもの
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
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
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
Frutasの血統:Frutas
• FrutasのPoC版は2012年の初めに出現[2]
•素のままのASCIIコードで書かれた ‘config.txt’もしくは ‘config.xml’ ファイル
•並列実行を避けるため、 ‘frautas.lock’ ファイルをtempディレクトリに書き込む
• 2012年7月にスペイン語話者の犯罪者の間で普及する[1]
Frutasの血統:Frutas
Frutasの設定ファイル
Frutasの血統:Frutas
Frutasのlockファイル
Frutasの血統:Frutas
FrutasのWindows特有のコマンド
Frutasの血統:Adwind
• Frutasのリブランド版として2013年の初めに出現 [3]
•その後の進化版で難読化を使い始めた [4]• 同じ名前のリソース(大文字と小文字)
• Android(APKバインダー)のサポートも検出された
•モジュラー形式のプラグイン
Frutasの血統:Adwind
Adwindはマニフェストエントリを難読化
Frutasの血統:Adwind
Adwindはリソース名を難読化
Frutasの血統:Unrecom
• 2013年の遅くに出現したAdwindのリブランド版[5] [6]
• UNiversal REmote COntrol Multi-platform
(マルチプラットフォームで動作するリモートコントロール)の略
• AdwindはLustroSoftに「吸収」される
• LiteCoin採掘プログラムへのプラグインも出現 [7]
Frutasの血統:Unrecom
Unrecomのサーバ・クラス・リソース名
Frutasの血統:AlienSpy
• 2014年10月に出現
•改良点 [3]• サンドボックスの検出機能
• C2(コマンド&コントロール)通信にTLSを採用
• 分析対策 [8]
• Allatori難読化ツールを使用
Frutasの血統:AlienSpy
AlianSpyの長いリソース名
Frutasの血統:AlienSpy
AlienSpyのAllatori使用
Frutasの血統:AlienSpy
AlienSpyの分析対策手法
Frutasの血統:jSocket
• AlienSpyのドメインはFidelisレポートに伴って閉鎖された(2015年4月)
• jSocketは2015年7月に出現 [10]
• AlienSpyに似ているが購読モデル(SaaS)を採用
•カスペルスキーの見積もりではJsocket(Adwind)の作者は [11]:• 年間20万ドルを儲けており
• 1,800の顧客に販売している
Frutasの血統:jSocket
jSocket OSXはファイル名とパスを難読化
Frutasの血統:jSocket
jSocket OSXの plistエントリ
Frutasの血統:jBifrost
• jSocketからのマイナーな機能改善 [38]
• コントローラーはユーザがタイプしているかどうかを報告できる
•直列化された解読キーが埋め込まれている
Frutasの血統:jBifrost
jBifrostとjSocketのコントローラUIの比較Fortinet社のブログより [38]
Adzok(別名Adsocks)• 2010年代に出現
(0.7.0は2011年1月ごろ) [12]
•無償版はPackRatグループが使用 [13]
•オープンソース[14]で、無償版とPro版が存在する
•現在でも使われている:• ボリビアからオンライン販売されている [15]
• Twitterアカウントからの最後のつぶやきは2015年7月 [16]
• Frutasとの類似点• lockファイルの作成
• 無償版はWndows版のみ
• XML設定ファイルの要素
Adzok(別名Adsocks)
Adzokの無償版はWindowsのみで動作
Adzok(別名Adsocks)
Adzok Free(無償版)の設定ファイル
Adzok(別名Adsocks)
Adzokのlockファイル
Adzok(別名Adsocks)
Adzokのホームページ
BlueBanana
• 2012年9月に出現
•難読化されている• コード化された文字列
• クラスファイル名
•最初のデータパケットで設定されたパスワードでビーコン通信
•開発は中止されている
BlueBanana
OSX上でビーコン送信されているBlueBananaのパスワード
BlueBanana
BlueBananaの紹介画面(「~について」)
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 –出力しない
Crimson
CrimsonがOSX上でsqlie dbを出力している
Crimson
CrimsonのWindows上でのデバッグ出力
Crimson
CrimsonのOSX上でのデバッグ出力
jCage
• 2013年7月に出現
• jnativehookライブラリを使用
• Windowsシステムに特化しているように見受けられる• OSX上で実行されるサンプルを見つけられなかった
jCage
jCageがWindws上でアンチウイルス製品を探している
jCage
jCageのWindowsに特化したシャットダウン・コマンド
qRat (Qarallax/Quaverse)• 2015年5月に出現• 3ステージに分かれたJARローダ [20]
• SaaSモデル(jSocketに類似)• IPv4アドレスとドメインをハードコード
• Windowsのみで動作
• 第2のバージョンが最近検出された[32]
• 補助的なJARを「qurallax.com」からダウンロード
• Macでも動作!• スイスにて米国のビザを申請する者達をSkype上で攻撃するのに使用された[33] –2016年6月6日
qRat (Qarallax/Quaverse)
qRatのバージョン1はOSX上では動かない
qRat (Qarallax/Quaverse)
OSX上におけるqRatのバージョン2のランダムに命名されて隠されたJAR
jRat(別名Jacksbot)
• 2012年10月に出現
•一部は redpoins0nによってオープンソース化• プラグイン、スクリプト、アンインストーラー、そして、補助的なツール群
• https://github.com/java-rat
•念のために、全てがjRatというわけではない
•しつこく使われている [19]• OSX: a LaunchAgent plist
• Linux: ~/.config/autostart
• Windows: レジストリランキー
jRat(別名Jacksbot)
OSX上で生き延びるためのjRatのplistファイル
jFect
• 2015年11月に出現
•高度に難読化されている
• IRC もしくは HTTP通信
• OSX上で生き延びるためのLaunchAgent plistファイル• 他のすべてのJava RATのように
jFect
jFectがWindows上でIRCを使ってC2サーバと通信
jFect
jFectがOSX上でHTTPを使ってC2サーバと通信
jFect
OSX上で生き延びるためのjFect plistファイル
OmniRAT
• 2015年11月に出現
•複数種類のOSに対応し、コントロール用のパネルを装備• Androidのコントロールパネル
• C2(コマンド&コントロール)サーバはハードコードされている(設定ファイルを使わない)
• Androidバージョンは SMS経由で拡散する [21]
OmniRAT
OmniRATのハードコードされたC2サーバのIPv4アドレス
OmniRAT
OmniRATがJavaシリアライズを使用してビーコン通信
jSpyと OS Celestial• jSpyは2013年12月に出現、OS Celestialは次のバージョンの模様• オープンソースライブラリを再利用
• 似たような機能群
• 似たような設定ファイルのオプション群
• 似たような設定のパーシングクラス
• 重なるビーコン通信先のドメイン名• jstealth.co[.]uk
• jstealth[.]net
• Windows上に生成されるファイル群によって検出可能
• OSX上で生き延びるためにLaunchAgent plistを使用
jSpyと OS Celestial
jSpyのホームページ
jSpyと OS Celestial
OSX上で生き延びるためのjSpyのplistファイル
Ratty
• Github上で活発に開発されていた[22]• Windows版のほうがOSX版開発が進んでいたように見受けられる(さらに遅れてLinux版)
•設定ファイルには単純なXORエンコードを使用
• Palo Alto Network社はこのRATが出回っているのを今年の4月5日ごろに検知
•数か月後にGithubから消えた
Ratty
Rattyは限定的ながらLinuxにも対応
Ratty
2016年4月以降のRatty配布セッションデータ
共通したJava RATのふるまい• 難読化、ソースコードプロテト、暗号化の各ツール
• 対VM、対分析の工夫• 非常に長くてランダム(のよう)なリソース名
• 多くのアンチウイルスソフトはファミリーを特定できず
• JARの取り込みを隠す• 隠しディレクトリもしくはtempフォルダ
• 長生きする• レジストリ、スタートアップ・フォルダ、
plists (KnockKnock)
• ビーコン通信• ファミリーによって方法は異なる
パック、難読化、バンドルの各ツール
• 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
JWScanと Jardiff
Jarの難読化解除
•難読化解除のロジックはJARのどこかに存在
•クラス・ファイルをデコンパイル
•他のメソッドに文字列をラップしているメソッドを探す
•もし、それらのメソッドが数学的な操作を文字列に対して行っているのならばPythonで再現
• Eclipseによる条件付きブレークポイント[23] [24][25]• 後ほどデモします
javadeobfuscator
•一般的な技法やツールによる難読化を自動的に解除 [39]• 後ほどデモします
分析の手がかり
OSX
• OSXで生き延びる仕組み[29]
• Plists
•隠しファイルとディレクトリ
• DtraceとJVMのホットスポット
• KnockKnock [31]
Windows
• レジストリキー
• スタートアップフォルダのlink
ファイル
• Procmon
• Regshot
Bytecode Visualizer
Bytecode-viewer
RATDecoders
• kevthehによってGithubにアップされる [27]
•多くのRATに対する静的な設定解読スクリプトを装備• Javaベースのものだけではない
•素晴らしい静的なインテリジェンス・パイプラインを作ることができる• VirusTotal、Laikaboss [28]、その他と連携
• いくつかのベンダーは内輪で行っている
落とし穴と見過ごし
•リソース名に基づいたYaraのルールはちゃんと動く• 難読化に絡む例外はある
• Jarinjarloaderはクセがある• JARのマニフェスト内でメインクラスとして設定される
• そして、異なったクラスをロードする(URLもしくは自身より)
•マニフェストファイルは JARの実行には必ずしも必要無い
本日の内容のまとめ
JavaのRATは2010年より出現
今だそれほどは普及していない使用は増えている
様々な種類の攻撃者によって使用される
プレゼンで出てきたツールには要注目、本当に使える
協業に興味が有る、あるいは、質問が有る方は連絡を
Special Thanks
83 | © 2015, Palo Alto Networks.
PacSec主催者
PacSecの聴衆
Tyler Halfpop
Jacob Soo
Anthony Mendez
Kevin Breen
Chris Pierce
Jørgen Bøhnsdalen
Questions?
デモ
参照情報 (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/
参照情報 (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/