BlueCrab ランサムウェア(=Sodinokibiランサムウェア)は、韓国国内のユーザーをターゲットに活発に出回っているランサムウェアで、複数の検索ワードを利用して生成された偽のフォーラムページを通して拡散することが特徴である。配布元ページからダウンロードされた JS ファイルを開くと、感染プロセスが開始される。この配布元ページは検索エンジンの検索結果の上位に表示されるため、ユーザーがアクセスしやすく、頻繁に多くのユーザーから感染が報告されている。AhnLab ASEC 分析チームは、このランサムウェアに関連する様々な記事を掲載している。
BlueCrab ランサムウェアは、アンチウイルスソフトを回避するために頻繁に変形を作り出しているが、各感染段階ごとに様々な変形を作り出して診断の回避を試みている。このランサムウェアは長期間変形することなく維持されたあと、時折数か月間で非常に活発に変形を作り出す特徴を示してきた。2019年11月から2020年1月まで活発な変形が確認されたあと、しばらくは大きな変化がなかったが、2020年10月から12月までの間は頻繁に変形が確認された。この記事では、BlueCrab ランサムウェアの感染プロセスを解説し、アンチウイルスソフトを回避するための攻撃プロセスの変更内容について説明する。
攻撃者は、脆弱な WordPress 環境を攻撃して権限を奪取したあと、様々なキーワードを使用して「ダウンロード」を含むタイトルのスレッドを作成する。そのスレッドにアクセスすると、内部のソースコードに挿入された JavaScript によって偽のフォーラムページが出力され、ユーザによるファイルのダウンロードおよび実行を誘導する。スレッドは人々が理解不能な文章で作成されているが、検索エンジンはこの内容を誤判断して検索結果の上位に表示させる(SEO-Poisoning手法)。これらの配布元スレッドは、自動化されたツールによって生成されるものと推定され、非常に多数の配布元スレッドが存在し、また生成され続けている。詳しい内容は、上記記事のリンクを参考にしてほしい。
攻撃者が投稿した配布元スレッドは、見た目は単純なスレッドのように見えるが、ソースコードを見ると以下の [図1] のように内部に JavaScript コードが存在する。内容は [図2] の通りである。


実行される JavaScriptは、現在ブラウザにロードされている Web オブジェクトをすべて削除したあと、偽のフォーラムページをロードする。したがって、ユーザーがスレッドにアクセスすると、実際のスレッド内容の代わりに偽のフォーラムページが表示される。
該当 JavaScriptは、攻撃者のサーバーと連動しているものと推定される。A ドメインからファイルをダウンロードする場合、B ドメインにもフィルターが適用され、行為が発現しない。攻撃者が投稿しておいたすべての配布元スレッドは、攻撃者のサーバーと接続されて管理されているものと推定される部分である。この段階までは、過去のものから変化がない。
偽のフォーラムページでダウンロードリンクをクリックすると、ZIP 形式で圧縮された JS ファイルがダウンロードされる。ファイル名は配布元スレッドのタイトルのキーワードを含み、ファイル名形式は定期的に変更される。
- JS ファイルの変形
JS ファイルには、C2 から追加スクリプトをダウンロードして実行する役割をする。内部コードは難読化されており、小さいサイズのスクリプトであるため診断を回避しやすい。Generic 診断を反映しても、平均的に1~2日以内に意味のないダミーコードを追加したり、同じ機能の別の構文を使用したりする等の簡単な変形によって診断を回避する。したがって、ファイル診断よりもメモリ診断または行為診断を通して防御するほうが効率的である。
- JS ファイル構造の変形
従来は同じコードの構造を維持しており、ダウンロードするたびに変数名、関数名をランダムに変更していた。しかし、12月15日からはダウンロードするたびに各行の順番をランダムに入れ替える機能が追加され、これらの機能を実装するために全体的なコード構造が大きく変化した。ランダムに行を配列しても動作するように、1回の関数の呼び出しですべての機能を実行している。また、従来は変数名等にランダムな文字列を使用していたが、今回の変形からは英単語を使用している(apple等)。このような変形は、アンチウイルス製品のスクリプトファイルに対する Generic 診断の反映をより困難にするための目的があるとみられる。


JS ファイルの外見は大きく変わったものの、難読化を解除したスクリプト、すなわち実際に不正な行為を実行するコードはほとんど変更されていない。攻撃者は、診断回避のために不正なスクリプトをパッキングしている外側のみ継続的に変形させている。JS ファイル1つあたり3つの C2 アドレスを持っており、アクセスに失敗した場合は他の C2 へ順番にアクセスを試みる。
- C2 アクセス方式の変形
C2 アドレスは侵害された正常なドメインが使用され、PHP ファイルの名前は2020年10月26日までは「/check.php」を使用しており、それ以降は「/search.php」の名前を使用している。それ以前には「/info.php」、「forum.php」等のファイル名も使用していたことがある。PHP ファイルに渡される引数としては、ランダムな値が追加される。従来は HTTP プロトコルを使用していたが、2020年3月30日からは HTTPS プロトコルを使用している。したがって、ライブラリの更新がされていない旧バージョンの OS では動作しない場合がある。

JS ファイルを実行すると、C2 から追加の JavaScript をダウンロードして実行する。JavaScript は PowerShell スクリプトを解放して実行する。PowerShell スクリプトは .Net 言語で構成された Injector をメモリにロードして実行し、Injector は Delphi 言語で構成されたランサムウェア Loader を正常なプロセスにインジェクションして実行する。インジェクションされた Loader は最終的に BlueCrab ランサムウェアをロードする。結果として、以下の [図6] のように何重にもわたってパッキングされた形をとっているが、各段階ごとにそれぞれ別の変形が可能であり、アンチウイルスソフトの回避が容易になっている。過去から JS -> PowerShell ->.NET -> Delphi の流れで実行される感染フローは変化しておらず、各段階の実行方式、詳細な行為などが変形している。

以下、.Net PE は「.Net Injector」、Delphi PE は「Delphi Loader」という。
2. PowerShell 実行方式の変形
PowerShell の段階は、対象期間中に最も多い変形が行われた部分である。構文が比較的自由な PowerShell の言語特性を利用し、攻撃者は以下のように様々な形に変形させている。
- ファイルからレジストリへの変更
従来は wscript.exe(JavaScript) が PowerShell スクリプトをファイルとしてドロップしたあと、そのファイルを実行していた。2020年10月22日に確認された変形では、スクリプトをファイルとしてドロップすることではなく、代わりにレジストリの特定キーに .NET Injector バイナリを挿入したあと、これを読み込んでメモリにロードする PowerShell コマンドを実行する方式に変化していた。このコマンドは、環境変数とレジストリの自動実行キーに登録されている。これを表した構造は以下の [図7] の通りであり、各々のコマンドは [表1] の通りである。自動実行キーにコマンドが登録されるため、再起動時にランサムウェア感染行為が発現する。

*環境変数 chba{[cmdletbinding()]param([parameter(Mandatory=$true)][String]$hs);$Bytes = [byte[]]::new($hs.Length / 2);for($i=0; $i -lt $hs.Length; $i+=2){$Bytes[$i/2] = [convert]::ToByte($hs.Substring($i, 2), 16)}$Bytes};$i = 0;While ($True){$i++;$ko = [math]::Sqrt($i);if ($ko -eq 1000){ break}}[byte[]]$b = chba($a.replace(“!@#”,$ko));[Reflection.Assembly]::Load($b);[Mode]::Setup(); *レジストリ [~CurrentVersion\Run] “C:\Windows\SysWOW64\WindowsPowerShell\v1.0\PowerShell.exe” -windowstyle hidden -Command “IEX([Environment]::GetEnvironmentVariable(‘DESKTOP-BA1OCG90’, ‘User’))” *レジストリ [~Software\”PC名+0″] 4d5a90000300000004000000ffff0000b80000000000000040000000000000000000… |
- レジストリ自動実行登録行為の削除
2020年10月26日、レジストリの自動実行登録行為を削除した。したがって、再起動時には動作せず、wscript.exe が直接環境変数のコマンドを実行する。また、Base64 コードの中間に“”を使用して難読化を試みている。自動実行登録行為はほとんどのアンチウイルスソフトでモニタリング対象となるため、素早く削除されたものと推測される。
“C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe” -e J“AB3AD0AJwAgAC0AQwBvAG0AbQBhAG4AZAAgACIASQBFAFg…(中略)…HcAUwB0AHkAbABlACAAaABpAGQAZABlAG4“A |
- プロセスツリーに cmd.exe を追加
従来は wscript.exe が直接 powershell.exe を実行していたが、CMD コマンドによって PowerShell を実行するように変更された。これによって、感染プロセスのツリーが変更された。
“C:\Windows\System32\cmd.exe” /c PowerShell -e IABpAGYAKABbAEUAbgB2AGkAcgBvAG4AbQBlAG4AdABdADoAOgBJAHMANgA0AEIAaQB0AE8AcABlA…(後略) |
- 環境変数登録行為の削除、ランダムな注釈値の追加
環境変数にコマンドを登録してから実行する行為が削除された。これによって、レジストリに登録された .Net Injector をロードする PowerShell コマンドを wscript.exe が直接実行する。また、このコマンドの前部分にランダムな注釈値を追加したあと、Base64 にエンコードし、感染環境ごとに全く異なる引数を持つように変形された。
<# brsjyxdus #>for ($i=0;$i -le 700;$i++){$c=”HKCU:\SOFTWARE\prizbydat”;Try{$a=$a+(Get-ItemProperty -path $c).$i}Catch{}};function chba{[cmdletbinding()]param([parameter(Mandatory=$true)][String]$hs);$Bytes = [byte[]]::new($hs.Length / 2);for($i=0; $i -lt $hs.Length; $i+=2){$Bytes[$i/2] = [convert]::ToByte($hs.Substring($i, 2), 16)}$Bytes};$i = 0;While ($True){$i++;$ko = [math]::Sqrt($i);if ($ko -eq 1000){ break}}[byte[]]$b = chba($a.replace(“!@#”,$ko));[Reflection.Assembly]::Load($b);[Mode]::Setup(); |
3. PowerShell から実行する .Net Injector の変形
Net Injector は Delphi Loader をインジェクションして実行する役割を担っている。Delphi Loader バイナリは難読化された形式で .Net Injector の中に含まれており、.Net Injector はこれを解読したあと、対象のプロセスにインジェクションして実行する。
- Delphi Loader バイナリ(インジェクションデータ)保存方式の変化
従来は以下のように Delphi Loader バイナリを Base64 にエンコードしたあと、逆から読んだ値で保存していたが、2020年12月22日に確認された変形では、単純な置換方式を用いて保存している。「1000」の値を「!@#」等の文字列に置換していた。以降、置換文字列は「$%^」等に変形されることもあった。(20.11.28)


- インジェクション方式の変形
.Net Injector がインジェクションする Delphi Loader バイナリは、従来の DLL フォーマットから EXE フォーマットに変更された。これによって当該バイナリをインジェクションする方式も変更され、従来は Dll Injection 手法を使用していた一方で、変形後は Process Hollowing 手法を使用している。
従来は自分がロードされたプロセス(powershell.exe)に仮想メモリを割り当てて Delphi Loader バイナリを挿入し、DllEntryPoint() 関数のアドレスを探して直接実行する方式であった。2020年10月22日に確認された変形では、別のプロセスを Suspend 状態で生成したあと、Delphi Loader のプロセスメモリ構造をインジェクションして Resume する典型的なProcess Hollowing方式に変形した。


- インジェクション対象プロセスの変形
変形初期には、自分と同じプロセスを生成したあとにインジェクションを実行していた。したがって、インジェクション対象のプロセスは powershell.exe であった。現在は SysWow64 ディレクトリに存在する特定の exe ファイルを実行してからインジェクションを実行する。実行されるプロセスの Path はハードコーディングされている。インジェクションコード上ではx64 x86アーキテクチャごとに例外処理が構成されているが、プロセスのパスをハードコーディングすることでx64環境のシステムのみが感染対象となった。インジェクション対象のプロセスは以下のように持続的に変形している。プロセスツリー構造に変化を与えるためであると判断できる。なお、V3製品ではプロセス名に関係なくブロック可能である。
従来 | 20.11.28 | 20.12.04 | 20.12.04 | 20.12.07 | 20.12.07 | 20.12.12 | 20.12.16 | 21.01.18 |
powershell.exe | cmd.exe | notepad.exe | cscript.exe | wscript.exe | PING.exe | find.exe | write.exe | WerFault.exe |
4. Delphi Loaderの変形
Delphi Loader は BlueCrab ランサムウェアをロードする役割を担っている。この段階において特定のアンチウイルス製品の無力化、診断回避等の変形が発生した。円滑な感染のために管理者権限を取得し、UAC メッセージの「はい」をクリックするまで100回繰り返して表示させる。以降、BlueCrab バイナリをロードして VSC の削除およびファイルの暗号化行為を実行する。
- V3 サービスモニタリングコードの追加
2020年11月2日に確認された変形では、V3 Lite 製品のサービス「V3 Service」の動作状態をモニタリングするためのコードが追加された。V3 サービスが動作中の場合、1秒を Sleep し、その行為を500回繰り返す。そのため、この繰り返し文が動作しているときに製品エンジンのアップデートが実行された場合、一時的にサービスが中断される間にランサムウェア行為が発現し、無防備状態になる。V3 製品の場合はランサムウェアが実行されても多数のファイルにアクセスする行為をブロックするが、このような診断を回避するためであると分析している。現在 V3 製品では、このようなモニタリング行為よりも前段階で診断を行っているため、当該行為とは関係なくブロックが可能である。

- 内部文字列の暗号化
診断を回避するため、内部文字列を少しずつ暗号化する変形が発見された。変形の初期には「V3 Service」の文字列が完全に使用されていたが、以降は「Service」、「ervice」等の形で使用される文字列を少しずつ減らし、独自の演算によって復号し、それらを使用する方式に変形していった。これらの変形から判断すると、攻撃者はアンチウイルスの診断ポイントを正確に把握していることがわかる。

- .rsrc セクションのデータの暗号化
.rsrc セクションのうち、最初の RCDATA 項目のデータが XOR 暗号化された。キーは「1234」でハードコーディングされている。このデータは特定のサードパーティ製のアンチウイルス製品を回避する行為を実行する役割の DLL であって、該当するアンチウイルス製品がインストールされていなければ、使用しない部分である。特定のサードパーティ製のアンチウイルス製品を使用している場合、%USERPROFILE%パスに db.bat という名前でドロップされたあと、rundll32.exe によって実行され、system32 ディレクトリの cleanmgr.exe を実行してからインジェクションする。インジェクションされたcleanmgr.exeはデコイ(おとり)ファイルが位置するディレクトリを探して削除する行為を実行する。


Delphi Loader によって BlueCrab ランサムウェアのバイナリが実行されると、PowerShell コマンドを通して VSC を削除したあと、ファイルの暗号化行為を実行する。暗号化が完了すると、デスクトップの背景を以下のように変更する。

All of your files are encrypted! Find 12xrr+readme.txt and follow instructions |
–=Welcome.Again.==- [+] Whats Happen? [+] Your files are encrypted, and currently unavailable. You can check it: all files on you computer has expansion 12xrr. By the way, everything is possible to recover (restore), but you need to follow our instructions. Otherwise, you cant return your data (NEVER). [+] What guarantees? [+] Its just a business. We absolutely do not care about you and your deals, except getting benefits. If we do not do our work and liabilities – nobody will not cooperate with us. Its not in our interests. To check the ability of returning files, You should go to our website. There you can decrypt one file for free. That is our guarantee. If you will not cooperate with our service – for us, its does not matter. But you will lose your time and data, cause just we have the private key. In practise – time is much more valuable than money. …(後略) |
V3 製品では、以下のような様々な診断により BlueCrab ランサムウェアをブロックしている。
[ファイル診断]
Ransomware/JS.BlueCrab.S1336
Ransomware/JS.BlueCrab.S1366
[メモリ診断]
Ransomware/Win.BlueCrab.XM37
Ransomware/Win.BlueCrab.XM63
[行為診断]
Malware/MDP.Inject.M3044
Malware/MDP.Behavior.M3491
Malware/MDP.Behavior.M3544
Categories:マルウェアの情報