Tag Archives: Cogyeka

Java Autorun ??? Java.Cogyeka?? 2 ??

不明瞭化
前回のブログでは、Java.Cogyeka で用いられているステルス技術について説明しました。ユーザーやセキュリティ研究者を欺く効果はありませんが、こうしたステルス技術が利用されているのは、Java マルウェアが絶えず改良されていることの証です。

ステルス技術とは別に、Java.Cogyeka はさまざまな不明瞭化技術によってセキュリティ研究者の目をすり抜けるように設計されています。成功している手口もありますが、なかには過剰な手口もあり、過剰な不明瞭化は、多くの場合マルウェアの効果を損ねているようです。

Java.Cogyeka で使われている不明瞭化技術は以下の 3 つです。

1. autorun.inf の不明瞭化
autorun.inf ファイルは、リムーバブルドライブを介した Java.Cogyeka の拡散に関与しています。このファイルは、以下の 3 つの部分で構成されています。

  1. Action
  2. Icon
  3. ShellExecute

autorun.inf がリムーバブルドライブの Recycler フォルダで自身を実行するには、ShellExecute 関数が必要です。前回のブログで述べたように、Java.Cogyeka はフォルダアイコンを使い、「Open folder to view files(ファイルを表示するにはフォルダを開いてください)」というメッセージも表示します。

Java.Cogyeka は、不明瞭化技術を使うことで、セキュリティスキャナによって autorun.inf が検出されないようにしています。不明瞭化する際には、エントリ間に無意味なゴミデータが挿入されます。そのゴミデータを構成しているのは、0x00 ~ 0x1F の制御文字です。このような不明瞭化技術は、悪質な .inf または .html ファイルでしばしば見つかります。

Figure1_3.png

図 1. 不明瞭化技術で挿入されるゴミデータ

不規則性を生ませるために、ASCII 文字の大文字と小文字がランダムに使われています。ゴミデータのサイズは 0 ~ 50 バイトで、細工された autorun.inf ファイルにトークンとともに配置されているクラスタの中にあります。シマンテックは、Java.Cogyeka によって細工された autorun.inf ファイルを Java.Cogyeka!autorun として検出します。

2. Zelix 不明瞭化ツール
Java.Cogyeka は、15 個のクラスファイル(a.class から o.class)を持つ JAR ファイルとして自身を拡散する Java マルウェアです。本来これらのクラスは、各クラスの機能に基づいて名前が付けられていたと考えられます。Zelix KlassMaster という名前の Java 不明瞭化ツールで、クラス名、メソッド名、Java バイトコード、文字列を変更しています。

Figure2_1.png

図 2. XOR テーブルで暗号化され復号される文字列の Zelix ビットマップ

Java 不明瞭化ツール自体はマルウェアではなく、正規のツールです。Java の開発者は、Java クラスファイルに重要なデータやコードを隠そうとすることがあります。Zelix による不明瞭化が適用されている場合、Java クラスファイルを逆コンパイルするのは困難です。

このツールを使うオブジェクトは、Java.Cogyeka だけではありません。たとえば、Java の脆弱性を悪用した悪質な Java アプレットの多くが、やはりこのツールを使っています。

3. ネットワーク接続の不明瞭化
サーバー名とポート番号の決定
コマンド & コントロール(C&C)サーバーから追加のモジュールをダウンロードするために、Java.Cogyeka は C&C サーバーに接続しなければなりません。しかし、既存のサーバーに接続しつつ多くの偽サーバーにも接続しようとするのは困難です。このようにして追加のモジュールをダウンロードするには長い時間が掛かりますが、その難しさの原因になっているのは、複雑なサーバー名とポート番号です。

C&C サーバーのホスト名は 5 個から 8 個のランダムな文字から成り、ドメインは動的 DNS に基づいてランダムに選択されます。ランダムな文字の選択には、マルウェアが実行される時刻に基づいたランダムなシードを使います。ドメインは、ランダムな文字の取得に使われたものと同じランダムシードによって、22 の有名なドメインサービスから選択されます。ポート番号も、同じランダムシードによってランダムに生成されます。シードの数は、64 ビット整数に基づいています。

Figure3_1.png

図 3. ホスト名、ドメイン名、ポート番号の決定に使われるランダムなシード

生成された C&C サーバー名は、動的な DNS サービスで別のユーザーによってホストされている正規のサーバー名と同じになる可能性もあります。その場合、マルウェアは生成された TCP ポート番号でこのサーバー名に接続しようとします。サーバーがこのポートでの接続を拒否した場合、接続はただちに停止されますが、マルウェアは接続を確立できないことがわかるまで待機しなければなりません。

ネゴシエーション
追加モジュールのダウンロードに使われるプロトコルはオリジナルのもので、不明瞭化されています。このプロトコルは、擬似乱数ジェネレータによって作成されるストリーム暗号を使うため、セキュアな接続を確立する可能性があります。

Java.Cogyeka とサーバープログラムでは、ランダムシードも擬似乱数ジェネレータも同じです。マルウェアは、2 つのバイトストリームを交換してネゴシエートします。

Figure4_1.png

図 4. Java.Cogyeka とサーバープログラムのネゴシエーション

Java.Cogyeka は擬似乱数ジェネレータで 1 つ目のバイトストリームとその長さを生成し、TCP 接続を介してサーバーに送信します。次にサーバーがデータを受信しますが、このサーバーがマルウェア作成者によって作成されたものである場合には、実行されるサーバープログラムはマルウェアと同じランダムシードと擬似乱数ジェネレータを備えています。サーバーは、同じジェネレータを使うことでバイトストリームとその長さを検証できます。再確認のため、サーバーは 2 つ目のバイトストリームを作成します。マルウェアは 2 つ目のバイトストリームを受け取り、先に生成したバイトストリームでそのデータを検証します。

ネゴシエーションに成功した時点で、マルウェアはサーバーが同じランダムシードと擬似乱数ジェネレータを使っていることを確認できたことになります。

モジュールのダウンロード
ネゴシエーションに成功すると、Java.Cogyeka はダウンロードするモジュールのサイズなどの設定をダウンロードしますが、この設定はストリーム暗号によって暗号化されています。サイズを取得すると、ストリーム暗号によって暗号化されたモジュールをダウンロードします。この設定には、ダウンロードされるモジュールのハッシュ値などが含まれており、マルウェアはダウンロードの成否を SHA-512 で確認します。

作成の意図
ここまで、Java.Cogyeka で使われている不明瞭化の 3 つの技術について説明しました。これらの技術はいくぶん複雑ではあるものの、マルウェアの autorun.inf ファイルはセキュリティスキャナで簡単に検出されます。サーバー名とポート番号に使われる不明瞭化技術の一部は、不明瞭化が行き過ぎているために効果を発揮していません。ストリーム暗号は、ネットワークタイプのセキュリティスキャナに対して効果を発揮する可能性があります。この不明瞭化技術は、Java.Cogyeka が単なる趣味として作成されたものではなく、明確な意図を持って作成されたものであることを示しています。

次回は…
このシリーズの最終回となる次回は、Java.Cogyeka の目的と、どのような情報がいかにして取得されるかについて説明します。

 

* 日本語版セキュリティレスポンスブログの RSS フィードを購読するには、http://www.symantec.com/connect/ja/item-feeds/blog/2261/feed/all/ja にアクセスしてください。

The Java Autorun Worm, Java.Cogyeka (2 of 3)

Obfuscations
In my previous blog, I discussed some stealth techniques Java.Cogyeka uses. These stealth techniques are not effective at deceiving users or security researchers, but their use proves that Java malware is continuously improving.

Aside from the stealth techniques, Java.Cogyeka is designed to evade security researchers through various obfuscation techniques. Some are effective, some are overdone. Overdone obfuscation techniques will often cause malware to be less effective.

Java.Cogyeka uses three obfuscation techniques:

1. Autorun.inf obfuscation
The autorun.inf file helps Java.Cogyeka spread through removable drives. This file is made up of three parts:

  1. Action
  2. Icon
  3. ShellExecute

It must contain a ShellExecute function in order to execute itself in the removable drive Recycler folder. As I wrote in my previous blog, Java.Cogyeka employs a folder icon and also displays the message “Open folder to view files.”

Java.Cogyeka uses an obfuscation technique to ensure that security scanners do not detect autorun.inf. The obfuscation technique inserts garbage between entries. The garbage consists of a control character between 0x00 and 0x1F. This obfuscation technique is often found in malicious .inf or .html files.

Figure1_3.png

Figure 1. Obfuscation technique fills in garbage

Uppercase and lowercase capitalization is used randomly in the ASCII characters to create inconsistency. The volume of the garbage is between 0 and 50 bytes and it is in clusters located alongside the tokens in a crafted autorun.inf file. Symantec detects the autorun.inf file crafted by Java.Cogyeka as Java.Cogyeka!autorun.

2. Zelix obfuscation tool
This Java malware spreads itself as a JAR file with 15 class files (a.class to o.class). Originally, these classes may have been named based on the functionality of each class. The Java obfuscation tool—named Zelix KlassMaster—modifies class names, method names, Java byte codes, and strings.

Figure2_1.png

Figure 2. Zelix bitmap of encrypted and decrypted strings with XOR table

The Java obfuscation tool is not malware but rather a legitimate tool. Java developers may want to hide important data and code in Java class files. It is difficult to decompile a Java class file if Zelix obfuscation has been applied.

Java.Cogyeka is not the only object to use this tool; many malicious Java applets that exploit Java vulnerabilities, for instance, are also use this tool.

3. Network connection obfuscation
Determine server name and port number

To download an additional module from the command-and-control (C&C) server, Java.Cogyeka has to connect to it. However, it is difficult to successfully connect an existing server while also attempting to connect many fake servers. It takes a long time to download an additional module this way. The difficulty results from the complicated server name and port number.

The C&C server’s host name is made up of five to eight random letters and the randomly selected domain is based on a dynamic DNS. A random seed based on the time the malware is run is used to select the random letters. The domain is selected from 22 famous dynamic services by the same random seed used to obtain the random letters.  The port number is also randomly generated by the same random seed. The seed number is based on a 64-bit integer.

Figure3_1.png

Figure 3. Random seed used to determine host name, domain name, and port number

There is a possibility that the generated C&C server name is the same as a legitimate one hosted by another user in the dynamic DNS service. If so, the malware tries to connect the server name with a generated TCP port number. If the server denies connection with the port the connection will be closed immediately, but the malware has to wait until it knows the connection cannot be established.

Negotiation
The protocol used to download an additional module is the original one, but it is obfuscated. The protocol will likely establish a secure connection because it uses a stream cipher created by a pseudo-random generator.

Java.Cogyeka and the server program have the same random seed and pseudo-random generator. The malware negotiates by exchanging two byte streams.

Figure4_1.png

Figure 4. Java.Cogyeka and server program negotiation

Java.Cogyeka generates the first byte stream, and its length, with a pseudo-random generator and then sends it to the server through a TCP connection. The server then receives the data. If the server was created by the malware author, the server program runs and has the same random seed and pseudo-random generator as the malware. The server can verify the byte stream, and the length, by using the same generator. To perform a double check, the server creates a second byte stream. The malware receives the second byte stream and verifies the data with a byte stream it has generated.

If the negotiation is successful, the malware has confirmed the server has the same random seed and pseudo-random generator.

Downloading a module
After a successful negotiation Java.Cogyeka downloads the settings, including the size of the module to download, but the settings are encrypted by the stream cipher. After obtaining the size, it downloads a module encrypted by the stream cipher. The settings include a hash value of the downloaded module. The malware can make sure the download is successful by using SHA-512.

Made with a purpose
I discussed three obfuscation techniques used by Java.Cogyeka. The obfuscation techniques used by the malware are somewhat complicated, but the autorun.inf file in the malware should be easy to detect by security scanners. Part of the obfuscation technique used for the server name and port number is ineffective because of too much obfuscation. The streaming cipher may be effective against network-type security scanners. This obfuscation technique demonstrates that this malware was not created as a hobby, but instead, made with a specific purpose.

To be concluded…
The third and final blog in this series will show the purpose of the malware as well as what information it obtains and how it obtains it.