はじめに
SOCでは、2021年5月18日よりExploit KitであるBottle Exploit Kitの活動が観測されています。Bottle Exploit Kitは2019年12月頃から観測されている日本を標的としたExploit Kitです。
2021年5月に観測されたBottle Exploit Kitは、バンキングマルウェアのCinobiへの感染を狙ったものであり、Internet Explorerの脆弱性を悪用するDrive-by download攻撃でした。
本記事では、Bottle Exploit KitとCinobiの解析結果をご紹介します。
Bottle Exploit Kitの調査
Bottle Exploit KitはWeb広告などにより、Landingページ(Exploitコードを読み込ませるためのページ)に誘導します。SOCでは、Landingページを介して読み込まれるJavaScriptに、ExploitコードやExploitが成功しうる端末からのアクセスであるかを確認するコードが含まれることを確認しました。
2021年5月に観測されたBottle Exploit KitのLandingページは図-1のようなショッピングサイトを模したWebページとなっています。
Landingページへアクセスした際に発生するHTTPリクエストを抜粋して下記に示します。ここで読み込まれるmain.jsはアクセスした端末の情報を収集し、攻撃者へ送信する機能を持つJavaScriptコードです。また一定の条件を満たす端末からのアクセスである場合はExploitコードを含むWebページへ遷移させます。
URL | 説明 |
---|---|
hxxp://ystyle[.]tk/welcome/welcome.html | Landingページ |
hxxp://ystyle[.]tk/welcome/js/main.js | アクセスした端末の環境を確認するJavaScriptコード |
図-2にmain.jsの一部を示します。main.jsは難読化だけでなくBase64エンコード、URLエンコード、及びRC4暗号が使用されており、動作の把握が難しくなっています。
図-2の難読化、暗号化を解除した結果の一部を図-3に示します。なお、図-3の変数名、関数名はSOCにて命名したものです。
図-3のコードでは下記の端末情報を収集しています。
- Webブラウザの種類
- 使用言語
- タイムゾーン
- 端末のビット数
- OSの種類
図-3のコードに含まれる関数の詳細を下記に示します。
関数名 | 説明 |
---|---|
jpnCheck | Landingページへアクセスした端末の下記情報を確認する関数です。 1. Webブラウザの種類 LandingページへアクセスしたWebブラウザがInternet Explorerであるかを確認しています。 navigator.userAgentが下記いずれかに合致する場合、Internet Explorerを使用したアクセスと判定します。 ・「compatible」と「MSIE」が含まれる ・「Trident」と「rv:11.0」が含まれる 2. 使用言語・タイムゾーン Landingページへアクセスした端末の使用言語とタイムゾーンを確認し、日本語環境で動作する端末であるかを確認しています。 以下全てに合致する場合、日本語環境で動作する端末からのアクセスと判定します。 ・navigator.systemLanguageとnavigator.userLanguageに「ja」が含まれる ・タイムゾーンオフセットが-540(日本標準時を表す数値)である |
bitCheck | Landingページへアクセスした端末の下記情報を確認する関数です。 1. Internet Explorerのビット数 navigator.platformを確認しInternet Explorerのビット数を判定します。 ・「win64」が含まれる場合64bit版と判定 ・上記に合致しない場合32bit版と判定 2. Windows OSのビット数 navigator.userAgentを確認しWindows OSのビット数を判定します。 ・「win64」が含まれる場合64bit版と判定 ・上記に合致しない場合32bit版と判定 |
osCheck | Landingページへアクセスした端末のWindows OSの種類を確認する関数です。 navigator.userAgentを確認しOSの種類を判定します。 ・「windows nt 6.1」または「windows 7」が含まれる場合Windows7と判定 ・「windows nt 6.2」または「windows 8」が含まれる場合Windows 8と判定 ・「windows nt 6.3」または「windows 8.1」が含まれる場合Windows 8.1と判定 ・「windows nt 10」または「windows 10」が含まれる場合Windows 10と判定 ・上記に合致しない場合その他OSと判定 |
main.jsではjpnCheck関数で収集した情報を元に、Exploitコードを含むWebページに遷移させるかを判定します。
jpnCheck関数により、WebブラウザがInternet Explorerでかつ日本語環境と判定された場合にのみ、bitCheck関数とosCheck関数が実行されます。そして、3つの関数で収集した情報を攻撃者に送信した後、Internet ExplorerのExploitコードを含むWebページに遷移します。
収集した情報が攻撃者へ送信される際に発生するHTTPリクエスト、Exploitコードを含むWebページへ遷移した際に発生するHTTPリクエストを抜粋して下記に示します。
URL | 説明 |
---|---|
hxxp://ystyle[.]tk/welcome/ystyle.php? callback=jQuery183015812687002007075_1622712437063 &data1=11 &data2=IE32 &data3=OS64 &data4=Win10 &_=1622712437069 | 収集した端末情報を送信するリクエスト WebブラウザがInternet Explorerでかつ日本語環境と判定された場合にのみ発生します。 下記クエリストリングに端末から収集した情報が入力されます。 ・data1 jpnCheck関数により収集した情報が入力されます。 WebブラウザがInternet Explorerでかつ日本語環境と判定されている場合11が入力されます。 ・data2 bitCheck関数により収集したInternet Explorerのビット数が入力されます。 ・data3 bitCheck関数により収集したWindows OSのビット数が入力されます。 ・data4 osCheck関数により収集したWindows OSのバージョンが入力されます。 |
hxxp://ystyle[.]tk/welcome/welcome.php?wel=customer | Exploitコードを含むWebページ 下記のExploitコードが読み込まれます。 |
hxxp://ystyle[.]tk/welcome/js/ystylexodn.js | Exploitコード |
ystylexodn.jsもmain.jsと同様に難読化、暗号化されており動作の把握が難しくなっています。
ystylexodn.jsの難読化、暗号化を解除したところ、Internet Explorerのメモリ破損の脆弱性(CVE-2021-26411)を悪用するExploitコードであることを確認しました。CVE-2021-26411を悪用し、JavaScriptに含まれるシェルコード(実行コード)を呼び出します。
シェルコードは暗号化されたマルウェア”Cinobi”をダウンロードし、「%TEMP%¥Low」下にlog.binというファイル名で保存します。保存されたlog.binはシェルコードにより復号され、下記2つのファイルが作成されます。 最後にCinobi本体であるa.dllがrundll32.exeにより実行されます。
作成されるファイル | 説明 |
---|---|
a.dll | Cinobi本体 |
1.txt | Cinobiに読み込まれる実行コード |
バンキングマルウェアCinobiの調査
Cinobiは、日本を標的としたバンキングマルウェアの1種です。複数の段階を経て最終的には金融機関のWebサイトへアクセスする際の通信情報を窃取することを目的としています。また、仮想マシンの検知などの解析妨害機構も備えていました。各段階の主な動作内容は下記の通りです。
- ステージ1: Torのダウンロードと起動、ステージ2の実行ファイルダウンロードと実行
- ステージ2: ステージ3の実行ファイルとシェルコードと実行、ステージ4の実行ファイルダウンロード、感染端末の情報送信
- ステージ3: ステージ4の永続化、Windows UpdateやWindows Defenderの無効化
- ステージ4: 通信情報の窃取やC&Cサーバへの送信
Cinobiステージ1は、「%TEMP%\Low\1.txt」の中身をデコードする関数をCreateThread関数を用いて実行し、デコードされたシェルコードをメモリ上に展開します。その後、EnumUILanguagesA関数の第1引数にデコードされたシェルコードが配置されているメモリのアドレスを設定し、当該シェルコードを実行します。Cinobiでは、主要な機能はシェルコード側に実装されておりいくつかのステージでも同様の流れでシェルコードが実行されることを確認しています。
実行されたシェルコードは、C&Cサーバと通信するために外部サイトよりTor関連のソフトウェアが圧縮されたZIPファイルとそれを展開するためのアーカイバをダウンロードします。実際に通信を確認できたURLは下記の2つです。なお、誤ってアクセスすることを防止するために一部文字を変更しています。
- fxp://ftp[.]cadwork.ch/DVD_V20/cadwork.dir/COM/unzip.exe
- hxxps://archive[.]torproject.org/tor-package-archive/torbrowser/8.0.8/tor-win32-0.3.5.8.zip
ダウンロードされたこれらのファイルは「%TEMP%\Low\<ランダムな文字列>」に保存されます。このランダムな文字列は以降のファイルやフォルダ生成時にも利用される共通の文字列です。また、上記のURLからダウンロードしたファイルは、下記のように名前を変更して保存されます。
元のファイル名 | 変更後のファイル名 |
---|---|
unzip.exe | 1.exe |
tor-win32-0.3.5.8.zip | 1.zip |
次にアーカイバであるunzip.exeを用いてTorのZIPファイルを展開します。その後、tor.exeをtaskhost.exeというファイル名で複製し起動します。taskhost.exeは、Windowsのタスクスケジューラの機能を担っている正規のプロセスです。そのため、被害者に気づきにくくさせる目的でこのファイル名に複製していると考えられます。しかしながら、図-5のように正規のtaskhost.exeのプロセスとは異なり、Torの接続に利用されることの多い9001/TCPを使用してTor入口ノードへ接続していることを確認できるため識別することは可能です。
Cinobiステージ2のファイルをダウンロードして、「%TEMP%\Low\<ランダムな文字列>\<ランダムな文字列>」に、実行ファイルである「<ランダムな文字列>.dll」とシェルコードが格納された「i.txt」というファイルを作成します。これらはCinobiステージ1と同様に、rundll32.exeを用いて実行します。また、Cinobiステージ1では解析を妨害するために仮想マシン検知機構が備わっています。下記のようなVMwareとVirtualBoxのシステムファイルの存在を確認し、存在していた場合は後続の処理に進みません。
Cinobiステージ2では、Cinobiステージ3と4で利用されるCinobiをダウンロードし、Cinobiステージ3を実行します。ダウンロードされたこれらのファイルは「%TEMP%\Low\<ランダムな文字列>\<ランダムな文字列>」に保存されます。各ファイルの役割を以下に示します。
作成されるファイル | 説明 |
---|---|
A<ランダムな文字列>.dll | 32bitのCinobiステージ4 |
B<ランダムな文字列>.dll | 64bitのCinobiステージ4 |
C<ランダムな文字列>.dll | Cinobiステージ3 |
e.txt | Cinobiステージ3で利用されるシェルコード |
さらにステージ2では、感染端末のUAC(Use Access Control)に関するレジストリや「%PUBLIC%\wamp」フォルダの作成可否などを調査し、結果をC&Cサーバへ送信している動作も見られました。その他にも、PowerShellを用いて感染端末のBIOSのシリアル番号や感染端末の固有な番号などの情報を取得していました。また、Cinobiステージ2の起動と同様に、rundll32.exeを用いてCinobiステージ3が実行されます。
Cinobiステージ3では、Cinobiステージ4で使われる上述した実行ファイルの永続化が行われます。永続化の手法としては、WSCInstallProvider関数を用いてWSAStartup関数の呼び出し時に呼び出されるプログラムを登録する手法でした。これを用いて、Cinobiステージ4が呼び出されるように設定されていました。WSAStartup関数は、Windowsでソケットプログラミングを行う際に利用されるWinSockの初期化に利用される関数です。そのため、通信が必要なプロセスの実行時に、Cinobiステージ4が起動されます。その他に、下記の操作が行われていることも確認できました。
- 「%TEMP%\Low\<ランダムな文字列>」のCinobi関連のファイルを「%PUBLIC%」にコピー
- Windows Updateや Windows Defenderに関連する設定の無効化
Cinobiステージ4 では、呼び出されたプロセスに応じて挙動が変わります。FirefoxやInternet Explorerを起動した際には、ブラウザの通信を窃取し保存する機能が動作します。Printer Spoolerサービスの実行ファイルであるspoolsv.exeの場合は保存したデータをC&Cサーバに送信する機能が動作します。また、この他にもTor が起動されていない場合に起動し直すといった動作も確認でき、一度感染してしまうと永続的に情報が窃取される恐れがあることを確認しています。
おわりに
2021年5月に観測されたBottle Exploit KitのLandingページは、6月現在アクセスできない状態になっていますが、今後も活動することが推察されます。今回調査したBottle Exploit Kitは、2021年3月に公開されたInternet Explorerの脆弱性(CVE-2021-26411)を狙ったものであり、既に修正プログラムが配布されています。利用しているInternet Explorerのバージョンが脆弱性の影響を受ける場合は、修正プログラムの適用をご検討下さい。