2017年9月18日(現地時間)システムメンテナンスツールであるCCleanerが改ざんの被害を受け、マルウェアが混入されるインシデントが発生しました。
マルウェアが混入されたバージョンは以下の通りです。
- ● CCleaner v5.33.6162
- ● CCleaner Cloud v1.07.3191
いずれも32bit版が対象とされていますが、64bit環境においてマルウェアが動作する可能性はあるのでしょうか。
そこでインストーラ等を解析することで、64bit環境における状況を調べました。
なお、マルウェアが取得する情報やC2サーバに関する情報はCisco's Talosのブログ記事が参考になります。
CCleanup: A Vast Number of Machines at Risk
http://blog.talosintelligence.com/2017/09/avast-distributes-malware.html
インストーラの解析
CCleanerのインストーラは、Nullsoft Scriptable Install System (NSIS)で作成されています。
NSISはスクリプトを使用してインストーラの動作をカスタマイズすることができます。
このスクリプトは逆コンパイルによって取り出すことができ(NSIS公式ページを参照)インストーラの動作を調べるにあたって役に立ちます。
CCleanerのインストーラから取り出したスクリプトを見てみると、ショートカットの作成やレジストリエントリの登録を行っている部分を見つけることができます。
取り出したスクリプトは逆コンパイルによって得られたものなので、完全に復元されるわけではありません。しかし、解析に必要な情報を得ることはできました。
インストーラの動作のうち、ショートカットの作成やレジストリエントリの登録の部分をフローチャートにまとめると以下のようになります。
インストールオプションによって、デスクトップやスタートメニューに追加されるショートカット、またごみ箱へのメニューの追加については任意に選択することができます。
しかし、cclaunch:プロトコルの追加とApp Pathsへの追加は必ず行われます。
プロトコルが追加されることにより、ファイル名を指定して実行等で「cclaunch:」と入力することでCCleanerを起動させることができます。
またCCleanerがApp Pathsへ追加されることにより、ファイル名を指定して実行等で「ccleaner」と入力することでCCleanerを起動させることができます。
さらにインストールされた環境やCCleanerを起動する方法によって、実際に起動される実行ファイルが異なります。以下の表に起動方法別の実際に起動される実行ファイルをまとめました。
起動方法 | 起動ファイル (32bit環境) | 起動ファイル (64bit環境) |
---|---|---|
デスクトップ | CCleaner.exe | CCleaner64.exe |
スタートメニュー | CCleaner.exe | CCleaner64.exe |
ごみ箱(CCleanerを実行) | CCleaner.exe | CCleaner.exe |
ごみ箱(CCleanerを開く) | CCleaner.exe | CCleaner.exe |
cclaunch:プロトコル | CCleaner.exe | CCleaner.exe |
App Paths | CCleaner.exe | CCleaner64.exe |
CCleaner.exeはマルウェアが混入された32bit版のCCleaner、CCleaner64.exeはマルウェアが混入されていない64bit版のCCleanerです。
表を見ると「64bit環境でも起動方法によっては32bit版のCCleanerが起動するのでマルウェアが実行されてしまうのでは?」という疑問が出てくると思います。
この疑問については、CCleaner.exeを解析することで解決しました。
CCleaner.exeの解析
32bit版のCCleanerの実行ファイルであるCCleaner.exeについて、逆アセンブラであるIDA Proを使用して解析を行いました。
CCleaner.exeが起動すると、メイン関数(WinMain)が実行される前にマルウェアがメモリ上に展開され別スレッドとして起動します。
起動したスレッドでは、601秒待った後にマルウェアとしての活動を行います。
マルウェアとしての活動には、コンピュータの情報の送信などの有害な動作が含まれます。
一方、メインスレッドではメイン関数が実行されます。
メイン関数では最初に実行環境を調べ、Windows XP未満であったらエラーメッセージを表示してプロセスを終了します。
次に、実行環境が64bit環境かどうかを調べます。
64bit環境でない場合は、32bit版のCCleanerとして動作を続けます。
一方、64bit環境であった場合は、以下の動作を行います。
- CCleaner.exeがあるディレクトリを取得する
- 取得したディレクトリにあるCCleaner64.exeの起動を試みる
- 起動が成功した場合はプロセスを終了し、失敗した場合は32bit版のCCleanerとして動作を続ける
プロセスが終了するとマルウェアが動作するスレッドも一緒に終了するため、601秒以内にプロセスが終了すればマルウェアとしての活動を行うことはありません。
そのため64bit環境で、かつCCleaner64.exeの起動に成功すればすぐにCCleaner.exeのプロセスは終了します。
したがって、マルウェアはメモリ上に展開はされるもののマルウェアとしての活動を行えるようになる前にプロセスごと終了してしまいます。
CCleaner.exeが起動してから終了するまでの流れをフローチャートにすると以下のようになります。
解析結果から分かること
解析の結果、64bit環境においても32bit版のCCleanerを使用すればマルウェアはメモリ上にロードされることを確認しました。
しかし同じディレクトリにCCleaner64.exeがあればそちらを実行するため、マルウェアとしての活動を行えるようになる前にプロセスごと終了してしまうことが確認できました。
64bit環境においてマルウェアとしての活動が行われると考えられる利用形態の例として、
- ● インストール先のCCleaner64.exeを削除した状態で、ごみ箱のメニュー等でCCleaner.exeを起動させた場合
- ● CCleanerのポータブル版をダウンロードし、CCleaner.exeのみを持ち歩いていた場合
が挙げられます。
要するに「CCleanerを使っていたけど、64bit環境だったから関係ない」と必ずしも言えるわけではないということです。