【温故知新シリーズ】脅威のスポットライト:新たに観測されたInfostealer、「Paipeu」について

By Cylance Research Team

温故知新シリーズブログでは、新たな知見を広げるために過去に米国でリリースされたブログを翻訳しています。本ブログ記事は、2017年5月9日に米国で公開された抄訳版です。原文はこちらからご覧頂けます。

はじめに

サイランスの脅威解析チームが、既知のマルウェアファミリーのいずれかに分類するのが難しいような、新しくコンパイルされた不正なコードを発見することはめったにありません。最近、CylancePROTECT®がお客様のエンドポイントのSystem32ディレクトリから脅威を隔離した後に、そのようなサンプルが見つかりました。このファイルの場所、最新のコンパイル日、そして既知のマルウェアリポジトリに同様のファイルが存在しないことを総合的に判断し、このサンプルについてはより詳しい調査が必要であることを示すフラグを設定しました。では、始めましょう。

行動分析

このサンプルは、C++でコンパイルされた32ビットDLLであり、匿名の関数を1つだけエクスポートします。コードは幸い難読化されておらず、アンチVMまたはアンチデバッグといったトリックは一切使用されていません。データについては、別に後で説明します。サンプルは、エクスポートされた関数を介して実行されると、IPアドレス1.234.3.139を直接コールバックします。このとき、DNSルックアップは必要ありません。

我々がテストした時点では、この韓国のアドレスはTCPリセットパケットを返すだけでした。そこで、このマルウェアを偽のサーバーに接続することにしました。これにより、ポート443上のHTTP POSTを確認することができました(図1). ヘッダーのホスト部分は偽物であり、コマンドアンドコントロール(C2)のアドレスに対応していません。HTTPヘッダー全体が1つの文字列としてハードコードされており、POSTデータのみが変化することについては、後で説明します。POST後、これといったレスポンスがないまま、マルウェアは終了し、OSにも目立った変化はありません。

図1:ポート443上でのHTTP POST

そういうわけで、ここまでは特におかしな点はありません。では、コードを見てみましょう。

コードの調査

エクスポートされた関数は最初に、2つの暗号化されたバッファをセットアップする初期化関数を呼び出します。このバッファは、後でメインのエンコード/デコード関数で使用されます。この初期化コードはさらに、図2に示すように、C2のIPをデコードして返します。

図2:初期ルーチンとデコードされたIP

このセットアップが終わると、多数のライブラリ呼び出しによる情報収集フェーズに進みます。これらの呼び出しを種類ごとにまとめた表を次に示します(抽出にはPortExを使用)。


図3:ローカル管理者グループメンバーの問い合わせ


図4:CPU情報の問い合わせ


図5:RDPポート番号の問い合わせ

エンコード/デコード関数

何の情報が収集されているかがわかったので、ここで、盗んだすべての情報をエンコードおよびデコードするために作成者が頻繁に使用しているカスタムアルゴリズムについて説明しておきましょう。このエンコードスキームは、コード内の90ヶ所から呼び出されます。通常は、データが使用される場所の前と後の両方で呼び出されます(図6)

図6:Encode_Decode関数に対するコード参照

このアルゴリズムの関数宣言は、次のようになります。

               void encode_decode( int key, char* s, int* max_size )

key引数は、プログラム起動時に初期化されるバッファから、2つの値をルックアップするために使用されます。1番目の値は「デコード長」であり、max_size引数と比較してデコード長のほうが大きい場合はエラーが生成されます。2番目に抽出される値は、初期化されるもう1つのバッファのオフセットとして使用されます。ここから、XORループキーを見つけます。このアルゴリズムについては、まだ完全には解明されていません。

図7:エンコード関数呼び出し(key=402、max_size=9E)

パイプとハッシュ

このサンプルでもっと興味深い点は、名前付きパイプを使用する機能と、NULLセッションパイプの有効化です。名前付きパイプを使用した通信方法は、マルウェアでも聞いたことがないわけではありません。有名な例として、PlugXDuqu はどちらも、そうした方法を使用することで知られています。この方法が使用されているのが見つかった場合、通常は、ホスト上のさまざまなマルウェア間の通信、または単一LAN内での感染している複数のシステム間の通信で使用されています。Duquは、この方法でなければ到達できないホストに、この方法を使用して、インターネットに接続されているホスト経由でC2コマンドをプロキシすることができました。

NULLSessionPipesの詳細については(有効にする方法、セキュリティ上の意味など)、次に示すMicrosoftのサポートサイトで確認できます。https://support.microsoft.com/en-us/help/813414/how-to-create-an-anonymous-pipe-that-gives-access-to-everyone

 

図8:NullSessionPipesの有効化

このマルウェアについて説明しておく必要がある最後の機能は、パスワードハッシュのダンプ機能です。サンプルには、2つのpwdump dllが内部に組み込まれています。1つは32ビット版、もう1つは64ビット版です。

作成者は、意味がすぐにわかるようなクリアテキスト形式の文字列をバイナリ内に残してもいました。他のデータのエンコードには相当な努力を費やしていることを考えると、興味深いものがあります (図9)。これは、一度ダンプされたハッシュを印刷するためのフォーマット文字列として使用されます。

図9:ダンプされたハッシュの印刷に使用されるフォーマット文字列

まとめ

Tこのサンプルは、さまざまな理由から我々の興味をかき立てました。そして詳細に調べた結果は、期待した通りでした。既知のマルウェアファミリーに関連付けられなかったこと、そして検出されるわずか2日前にコンパイルされたことは、これが標的型攻撃であることを示している可能性があります。名前付きパイプによる通信、カスタムエンコーダー、パーシスタンスが試みられていないこと、そして1つのIPがハードコードされていたことはすべて、このマルウェアの作成者は従来なら予想できたようなことをやろうとはしていないことを示しています。 

直面している脅威について完全に理解することによってのみ、自信を持って脅威を阻止するためのツールを使用することができます。皆さんが使用しているアンチマルウェアソリューションがこのファイルの実行を許してしまっている場合は、チェック機能をさらに開発して、完全な多重防護情報セキュリティ戦略を実現できるかもしれません。ポート443上の非SSL/TLSトラフィックに対して単純なホストベースまたはネットワークファイアウォールルールチェックを行うことで、侵害が検出される可能性もあります。また、侵入を早期に警告するために組織が実施できるその他の措置として、エンタープライズロギングおよびSystem32から実行される予期しないプロセスに対する警告の生成があります。

サイランスのエンドポイント防御製品 CylancePROTECTをご利用のお客様は、この攻撃からすでに防御されています。CylancePROTECTをご利用でない場合、AI駆動ソリューションがいかにして未知の新しい脅威を予測・防御できるかについてぜひサイランスまでお問い合わせください

侵入の痕跡(IOC):

IPアドレス:

•       1.234.3.139

セクションハッシュ(MD5):

  • .text:    36F524B956614AC0276F96A0D95079D7
  • .rdata:   3D5F551FDFA53827D1C8772A66A3FC72
  • .data:    9466A34589323441604D1319B12675D1
  • .reloc:   D4AAA928D8E7D7D42C123FE232D0B4C0

クリアテキスト文字列:

  • POST /fd/ls/lsp.aspx HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)\r\nHost: www(dot)update(dot)com\r\nConnection: keep-alive\r\nAccept: */*\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length:
  • ####gethash####\r\n%s####gethash end####\r\n\r\n
  • ####hide account####\r\nno need to hide\taccount number:%d,53 port:%s, 80 port:%s\r\n\r\n
  • decode:length too small
  • decode:not found
  • PwDumpError:999999
  • PwDumpError1
  • lsremora64.dll
  • lsremora.dll
Tags: