ナビゲーションをスキップする
BlackBerry ブログ

異例の速さでファイルを暗号化する BianLian ランサムウェア

瞬く間にファイルを暗号化する BianLian ランサムウェア

原文のブログはこちらからご覧いただけます。
 
組織のネットワークに対するランサムウェア攻撃に対処する際には、数分の差が防御側の命運を左右します。BianLian ランサムウェアは異例の速さでファイルを暗号化することで、サイバー犯罪のレベルを引き上げています。

脅威アクターは、この新種のランサムウェア BianLian をプログラミング言語 Go(別名 Golang、Go 言語)で開発しています。Go 言語で作成されるファイルはサイズが大きくなりますが、さまざまな理由から、脅威アクターがこの「異色」のプログラミング言語を採用することが増えています。特に大きな理由となっているのが、並行処理が手厚くサポートされている点です。並行処理によってさまざまな悪意のある機能が互いに独立して実行可能となり、攻撃のスピードが向上します。

この記事では、BianLian ランサムウェアの概要に加えて、マルウェア作成者の間でますます人気が高まっている Go 言語のいくつかの特徴についても解説します。
 

オペレーティングシステム


リスクと影響


BianLian とは

Bian Lian(変臉、へんれん)とは、中国に古くから伝わる演劇芸術です。演者は鮮やかな衣装と色とりどりの仮面を身につけ、舞台上を動き回ります。そして、扇の一振りやまばたきの一瞬のうちに仮面を素早く付け替え、衣装の外観を完全に変化させます。今回、この「Bian Lian」という言葉に新たな意味が加わりました。この名前を自称するランサムウェアグループが現れたためです。

Cyble 社 の調査によると、この脅威グループはさまざまな業界を標的にしており、これまで製造、教育、医療、専門サービス、エネルギー、銀行・金融サービス・保険(BFSI)、エンターテイメントの各業界が標的となっています。

2022 年 9 月 20 日時点では、このグループのリークサイトには 23 の被害者の情報が掲載されています。BlackBerry のリサーチャーは、被害者のリストの分析結果から、このグループは特定の国ではなく企業を狙っていると判断しています。リストに挙がっている被害者の所在地は、米国、オーストラリア、英国などさまざまです。

英語圏の国が標的とされているのはなぜでしょうか。おそらく、この脅威アクターは政治的または地理的な指向性は持っておらず、金銭的な動機に基づいていると考えられます。また現時点では、このグループは特定の国家や計画との協力関係は一切主張していません。

BianLian ランサムウェアは、過去に Google Play™ ストアで提供されていた(ただし、現在は削除されている)悪意のある Android パッケージ(APK)アプリケーションと同じ名前を持っています。この悪意のあるアプリケーションもまた、ThreatFabric 社によって「BianLian」と名付けられていたのです。

この同名のマルウェアは、Google Play ストアに配置したドロッパーを使用して、悪名高いトロイの木馬 Anubis Banker の悪意のあるファイルをインストールします。その上で、脅威アクターがメッセージングサービスを利用してコマンドアンドコントロール(C2)コマンドを発行し、ユーザーの認証情報を窃取します。ただし、この記事の執筆時点では、名前が共通している以外にこれら 2 つのマルウェアファミリーに何らかの関連性があるとは考えられていません。


マルウェアにおけるスピードの追求

BianLian ランサムウェアは Go 言語で記述されています。BlackBerry が昨年公開したホワイトペーパーでも解説しているように、Go 言語は Google 社の技術者によって設計されたオープンソースのプログラミング言語です。この言語は 2012 年 3 月に初めて公式にリリースされ、間もなく Apple、Google、IBM といった業界の大企業の主力言語となりました。

Go 言語は大規模な標準ライブラリやガベージコレクションによるクリーンアップ機能を備え、並行処理もサポートしています。並行処理とは、マルチスレッドと呼ばれる処理により、複数の計算を同時に実行できることを意味します。これを実現するため、Go 言語は関数やメソッドを互いに独立して非同期実行できる「Goroutine(ゴルーチン)」を採用しています。この並行処理により、標的のシステム上でのより迅速な暗号化が可能となっています。

Go 言語のコードは Windows®、Linux®、OS X® 向けにコンパイルできます。そのため、マルウェアの作成者は、必要に応じて主要なオペレーティングシステムのすべてに影響を与える脅威を作成することができます。

Go 言語ではライブラリが静的リンクされるため、必要なライブラリはすべてコンパイル後のバイナリに含まれます。静的リンクではない言語の場合、開発者はメインの実行可能ファイルとは別にライブラリを用意するか、あるいは必要なライブラリが標的のマシンにすでにインストールされていることを期待するしかありません。こうしたライブラリを含めるとファイルが肥大化して配信が難しくなりますが、アンチウイルス(AV)エンジンがスピード優先で最適化されていると、巨大なファイルが検査されない場合があります。


BianLian ランサムウェアの技術的解析

この記事で解析するサンプルは、anabolic.exe と名付けられています(SHA256:46d340eaf6b78207e24b6011422f1a5b4a566e493d72365c6a1cace11c36b28b)。このファイルは 64 ビットの実行可能ファイルで、Go 言語のバージョン 1.18.3 でコンパイルされています。

Go 言語のプログラムをビルドすると、「ビルド ID」が生成されます。Go 言語では、このビルド ID によってファイルとその内容が一意に表現されます。ビルド ID はバイナリファイルの先頭 32 KB の領域に格納されていますが、正確な位置はコンパイル先のオペレーティングシステムによって異なります。なお、今回解析するファイルはポータブル実行可能(PE)ファイルです。

より詳細には、ビルド ID はファイル名とアプリケーションコンテンツのハッシュで構成されており、「アクション ID」と「コンテンツ ID」の 2 つの部分に分かれています。アクション ID はパッケージまたはバイナリを生成した入力をハッシュ化したもので、コンテンツ ID はそのアクションの出力、すなわちバイナリそのものをハッシュ化したものです。anabolic.exe のビルド ID を以下の図 1 に示します。

図 1:46d340eaf6b78207e24b6011422f1a5b4a566e493d72365c6a1cace11c36b28b のビルド ID


プログラムのコンパイルに使用されたコマンドは、バイナリの内部にも記録されています。Go 言語のプログラムをコンパイルするには「go build」コマンドを使用しますが、このコマンドはアプリケーションに必要なすべてのパッケージと依存ファイルをコンパイルします。  

今回のブログで解析しているサンプルでは、この時のビルドパスに図 2 のような 2 つの引数が指定されていました。ここでは、コマンドライン引数で gcflagstrimpath が指定されています。-gcflags はコンパイラに渡すフラグに関連しており、-trimpath は実行可能ファイルからファイルシステムの絶対パスをすべて削除します。この場合はユーザーのディレクトリパスを削除するために使用されています。

パスの末尾にある「crypt22」は注目に値します。この数値は実際のサンプルの間でそれぞれ異なっており、脅威アクターが付与した開発バージョンを示している可能性があります。

図 2:crypt プロジェクトのパス


マルウェアの作成者は、ランサムウェアのすべての機能を 1 つの共通パッケージにまとめています。パッケージとは、同じディレクトリ内でまとめてコンパイルされるソースファイルの集まりです。pestudio で文字列を静的解析すると、サンプルがどのような機能を持っているかが把握できます。

解析結果に基づくと、今回のサンプルは、ファイル名を変更する、ファイルを小さなブロックに分割して処理する、ドライブ情報を照会する、ファイルの拡張子をチェックする、といった処理を行う可能性が高いことがわかります。この機能に対応するプロジェクトのパス構成を図 3 に示します。

図 3:共通パッケージの関数群


ファイルを実行すると、ランサムウェアはホストマシンに存在し得るすべてのドライブ名を検索します。この処理には kernel32 ライブラリの GetDriveTypeW 関数が使用され、この関数は GetProcAddress 関数(関数のアドレスを取得する API)の呼び出しを介してアクセスされています。この処理の目的は、ランサムウェアが接続済みのメディアや存在し得るメディアをすべて暗号化できるようにすることです。関数呼び出しは「A:\\」から始まり、「Z:\\」まですべてチェックされます。

この処理の一部を表すデバッガ出力を図 4 に示します。

図 4:各種ドライブに対する GetDriveTypeW 関数の呼び出し


すべてのドライブの確認が終わると、身代金要求のプロセスが開始されます。このランサムウェアは、Go 言語の標準ライブラリに含まれる crypto パッケージを使用してファイルを暗号化します。これらのパッケージはオープンソースのライブラリであり、Windows 環境の基本機能として提供される CryptoAPI のように、暗号化機能を実装するために使用されています。


BianLian ランサムウェアの脅迫状と要求

ランサムウェアは、ファイルが実行されたディレクトリに「Look at this instruction.txt」というテキストファイル形式の脅迫状をドロップします。その全文を図 5 に示します。

このテキストファイルには、データを復旧するために脅威アクターに連絡を取る方法についての情報が含まれています。被害者が脅威アクターに連絡を取るには、ピアツーピア型の暗号化チャットサービスアプリケーションである Tox メッセンジャーをダウンロードするか、あるいはグループに直接メールするという選択肢があります。

脅威アクターは被害者に対し、窃取したデータをオペレーターの「.onion」サイトに公開するまでに 10 日間の猶予を与えています。脅威アクターが求める支払い額については、この脅迫状には明記されていません。

図 5:BianLian の脅迫状


そしてここから、暗号化を高速化する目的で、このプロセスが複数のスレッドで繰り返し実行されます。

ランサムウェアは、システム上で見つかったすべてのドライブ(マウント済みのドライブも含む)を対象として、実行可能ファイル、ドライバ、テキストファイル以外のすべてを暗号化します。これらの除外処理の目的は、システムの誤動作を引き起こしかねないファイルや脅迫状に対する暗号化を避けることです。ディレクトリ内で除外対象のファイルタイプを特定する処理には、FindFirstFileW 関数と FindNextFileW 関数が使用されます。具体的には、FindFirstFileW 関数の戻り値 lpFindFileData が見つかったディレクトリの情報を保持しているため、そこに含まれるファイルを繰り返し処理するために、FindNextFileW 関数が呼び出されています。

ファイルは小さなチャンクに分割され、暗号化は処理を高速化するためにマルチスレッド化されています。図 6 は、ランサムウェアがシステム上のファイルを暗号化する際に実行した読み出し/書き込み処理を記録したものです。この出力結果から、バッファの読み出し/書き込みの長さが 16 バイトであり、ランサムウェアの実行中に常に一貫していることがわかります。また、暗号化が終わるとファイル名に拡張子「.bianlian」が付加され、ファイルが閉じられています。

図 6:プロセスモニターによるランサムウェアの読み出し/書き込みログ


今回のサンプルでは、ネットワークを介したやり取りは観測されませんでした。つまり、脅威アクターは、リモートアクセス経由でシステム上にサンプルを直接展開していた可能性があります。

サイバーセキュリティサービス企業の [redacted] が指摘しているように、BianLian の脅威グループは ProxyShell の脆弱性チェーンか、あるいは SonicWall VPN ファームウェアの脆弱性を介して初期アクセスを獲得している可能性があります。脅威アクターは初期アクセスを得た後、狙うべき対象を見つけるために水平展開し、権限を昇格させ、BianLian ランサムウェアを展開します。そして、望みのファイルをアーカイブして転送するために WinSCP と 7-Zip のコピーをドロップし、データを抽出して自らの元へと送信します。さらに、システム上にバックドアをインストールし、感染システムへのアクセスを維持することもあります。


まとめ

BianLian は、幅広い業界を標的とする比較的新しい脅威アクターです。この脅威アクターは金銭的な動機に基づいている可能性が高いため、今後も侵入対象のシステムやネットワークの悪用に注力し続けるでしょう。その Go 言語ベースのランサムウェアはゴルーチンを活用し、ファイルをチャンク単位で暗号化することで、感染システムに対する身代金要求を迅速に行います。脅威アクターは複数の国のさまざまな業界を標的とし、人間の手でシステムに侵入するという展開手段を採っています。そして、環境寄生型(LotL:Living-off-the-Land)バイナリを用いて自らネットワークやシステムを探索し、望みの情報がすべて見つかった時点でランサムウェアを展開します。


BianLian ランサムウェアの主な標的

このランサムウェアグループはこれまで、専門サービス、製造、医療、エネルギー、メディア、銀行、教育の各業界を標的としています。標的の所在地は今のところ米国、オーストラリア、英国となっています。ただし、必ずしもこれらの業界や国だけが狙われると決まっているわけではありません。


被害軽減のためのヒント

ファイルカービングD3-FC) – ファイルカービングの手法を使用して、ネットワーク経由で送信されるファイルを検査しましょう。

ファイルアクセスパターンの解析D3-FAPA) – アプリケーションがどのようにファイルにアクセスするかを把握しましょう。解析対象としては、ランサムウェアによるファイルへの複数の読み出し/書き込みが挙げられます。

リモートターミナルセッションの検知D3-RTSD) – ネットワークトラフィックから、未承認のリモートセッションを検知しましょう。

ファイル生成の解析D3-FCA) – ランサムウェアは脅迫状を生成しますが、この挙動は検知可能です。


BianLian ランサムウェアに対する YARA ルール

以下の YARA ルールは、この記事で説明した脅威を捕捉するために BlackBerry の Research & Intelligence Team が作成しました。

rule BianLian_Go_Ransomware{
      meta:
            description = "Detects BianLian ransomware"
            author = "BlackBerry Threat Research Team"
            date = "2022-09-13"
            license = "This Yara rule is provided under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0) and open to any user or organization, as long as you use it under this license and ensure originator credit in any derivative to the BlackBerry Research & Intelligence Team"
      strings:
            $s1 = "trimpath=/home/jack/Projects/project1/"
            $s2 = "common.BuildPath"
            $s3 = "common.GetBlocksAmount"
            $s4 = "common.GetDrives"
            $s5 = "common.GetBlockSize"
            $s6 = "common.FileRename"
            $s7 = "common.GetFileExtension"
            $s8 = "exec.(*Cmd).Start.func1"
            $s9 = "exec.(*Cmd).Start.func2"
            $s10 = "exec.(*Cmd).Start.func3"
            $s11 = "CryptBlocks"
      condition:
            uint16(0) == 0x5a4d and all of them
}
 

 

侵入の痕跡(IOC)

46d340eaf6b78207e24b6011422f1a5b4a566e493d72365c6a1cace11c36b28b

117a057829cd9abb5fba20d3ab479fc92ed64c647fdc1b7cd4e0f44609d770ea

1fd07b8d1728e416f897bef4f1471126f9b18ef108eb952f4b75050da22e8e43

eaf5e26c5e73f3db82cd07ea45e4d244ccb3ec3397ab5263a1a74add7bbcb6e2

cbab4614a2cdd65eb619a4dd0b5e726f0a94483212945f110694098194f77095

 

参照資料

Redacted 社のブログ:https://redacted.com/blog/bianlian-ransomware-gang-gives-it-a-go/
Cyble 社のブログ:https://blog.cyble.com/2022/08/18/bianlian-new-ransomware-variant-on-the-rise/
Go 言語の開発者向けドキュメント:https://go.dev/src/cmd/go/internal/work/buildid.go
ゴルーチン:https://golangbot.com/goroutines/
Go ライブラリ「crypto」のドキュメント:https://pkg.go.dev/crypto
Microsoft 社のドキュメント:https://learn.microsoft.com/ja-jp/
ThreatFabric 社のブログ:https://www.threatfabric.com/blogs/bianlian_from_rags_to_riches_the_malware_dropper_that_had_a_dream.html
 

BlackBerry によるサポート

BlackBerry のインシデント対応チームは、あらゆる業種のどのような規模の組織とも連携し、エンドポイントのセキュリティ体制を評価および強化し、ネットワークインフラストラクチャのセキュリティ、整合性、およびレジリエンスを積極的に維持するように支援します。緊急のサポートが必要な場合は、当社の問い合わせフォームをご利用ください。

イベント日程

The BlackBerry Research and Intelligence Team

About The BlackBerry Research and Intelligence Team

BlackBerry の Research and Intelligence Team は、新たに生じている脅威と持続的な脅威を検証し、セキュリティ担当者とその所属企業のために、インテリジェンス解析を提供しています。