Cisco Japan Blog

Bisonal:過去 10 年間の動向

2 min read



エグゼクティブサマリー

  • セキュリティ研究者たちは過去 10 年間にわたり Bisonal マルウェアを検出して公開してきました。しかし、その背後にいるハッカー集団「Tonto Team」が攻撃の手を休めることはありませんでした。
  • そしてその間、被害者のプロファイルも変わりませんでした。攻撃者の主なターゲットは、日本、韓国、ロシアの組織でした。
  • Bisonal は更新が繰り返されるうちに検出率が下がり、初期化ベクトルの成功率は高まっていきました。

Bisonal の近況

Bisonal は Tonto Teampopup_icon のマルウェアファミリに属するリモートアクセス型トロイの木馬(RAT)です。Bisonal の特異な点は、マルウェアとしては異例に長い 10 年を超える歴史にあります。Bisonal は長年にわたって RAT としての中核部を変えることなく、検出を回避するメカニズムを発達させ、適応してきました。Talos では 6 年以上前からここで説明する個々の機能を特定してきました。

動作の仕組み

Bisonal は、複数のルアードキュメントを使用して被害者にファイルを開かせ、Bisonal マルウェアに感染させます。「Tonto Team」の活動歴は 10 年以上で、検出を避けるためにマルウェアの更新を続けています。Bisonal は主にスピアフィッシングを使用して被害者のネットワーク内に足がかりを作ってきました。Bisonal には非常に具体的な標的がありました。そのため、攻撃の最終的な目的は運用インテリジェンスの収集とスパイ活動であると考えられています。

RAT の正体

Bisonal のハッカー集団は非常に豊富な経験を持ち、マルウェアの正体が発覚した現在でも、活動を止める様相を見せていません。ミスや甘さが特定されてから、すでに 10 年以上が経過しているのです。Bisonal を公開し、その挙動や使用先のキャンペーンについて説明することは、今後の標的を守るために重要であると Talos では考えています。現在までの攻撃対象はロシア、日本、韓国を中心とした官民両分野に及んでいます。これらの地域の組織に対しては、Bisonal の攻撃に備えるため、以下にご説明する具体的技術に沿った検出機能を実装することが推奨されます。

被害者のプロファイルとキャンペーン

Bisonal が活動を続けてきた過去 10 年間にわたりコミュニティで共有されたインテリジェンスや Talos の分析結果から導き出される結論は、このマルウェアを背後で操る攻撃者が、特に東アジア、とりわけ日本と韓国をターゲットにしつつ、ロシア語圏にも狙いを定めているという事実です。

Talos ではこれまでに被害者を狙ったおとりドキュメントをいくつか特定しています。Trend Micropopup_icon 社が 2012 年に報告した 2009 年 の Heartbeat キャンペーンでは、韓国語ワードプロセッサ形式(HWP)のおとりドキュメントが使用されていました。このファイル形式は、主に韓国で使用されています。Trend Micro 社のレポートでは、複数の政党、報道機関、国家政策研究所、韓国軍基地、中小企業組織、韓国政府機関が言及されています。2018 年の後半には Unit 42popup_icon(脅威インテリジェンス チーム)が Bisonal に関する報告書を発表しました。報告は、ロシアを襲ったスピアフィッシング攻撃と、Rostec 社(モスクワを拠点とする国有のホールディングス)から送信されたように見せかけたおとりドキュメントについて言及しています。

 

そして 2018 年には、Bisonal が韓国と日本の組織を襲った「Operation Bitter Biscuit」攻撃に関する論文popup_iconが Ahnlab 社から発表されています。Ahnlab 社はインドにも言及していますが、インドへの攻撃には「Bioazih」という別のマルウェアが使用されていました。論文では製造業者、防衛業界、政府機関などが標的として挙げられています。

おとりドキュメントの例は他にも挙げられます。たとえば 2014 年 9 月に使用された韓国語のドキュメントは、「Contact member and counselor of the Agriculture, Forestry, Livestock, Food and Marine Fisheries Committee:(農林水産・畜産・食品・海洋漁業委員会メンバーおよび相談役の皆様:)」という件名でした。

また 2018 年 4 月には CIPR Digital 会議に関するロシア語のドキュメントが使用されました。これは Bisonal マルウェアでおとりに使われた申請文書の一種です。CIPR Digital 会議には数人の政府高官と企業重役が参加していました。

2019 年には судалгаа.doc(研究.doc の意)というロシア語の RTF ドキュメントが使用されました。このドキュメントは、Bisonal を含む winhelp.wll ファイルを侵入させます。

昨年は同様の RTF エクスプロイトを使用して Bisonal を送り込む韓国語のおとりドキュメントも複数特定されました。具体的には☆2020년도 예산안 운영위 서면질의 답변서_발간(1).doc(国務院候補者(チュ・ミエ法務大臣)人事ヒアリング実施計画(1).doc の意)、국무위원후보자(법무부장관 추미애) 인사청문회 실시계획서(1).doc(2020 年予算運用委員会書面聞き取り調査(公開)(1).doc の意)で、いずれも政府発行文書を装っていました。

以上の公開文書と Talos の調査から判断すると、Bisonal マルウェアは Tonto Team のマルウェアファミリに属しています。Tonto Team の名は、北朝鮮のミサイル実験に対抗してターミナル高高度防空(THAAD)ミサイルを配備すると韓国が発表した際に、韓国を狙った攻撃者集団の 1 つとして 2017 年にメディアpopup_iconに登場しました。当初、研究者たちは Tonto Team の背後に中国政府が存在するものと判断しました。

進化の 10 年

概要

Bisonal の最初の亜種は「HeartBeat」という名前で公表されました。この背後にいたハッカー集団は 2019 年の終わりごろに TTP を変更し、Microsoft Office の拡張ファイル(.wll)を使用して Bisonal のペイロードを実行する手口を導入しました。このような最近の変化に基づいて Talos では、Bisonal が進化してきた 10 年間の軌跡を詳しく取り上げることにしました。具体的には 50 種類を超えるサンプルを分析し、何年もの間に見られた変化について重点的に紹介します。

2010 年:発生

Talos が特定した Bisonal の中で最も古いのは、2010 年 12 月 24 日にコンパイルされたものでした。このバージョンは、Talos が特定した中で最もシンプルなものです。当初、攻撃者は Windows サービス(ServiceMain() エントリポイント)として設計された Windows ライブラリ(.dll)を作成しました。マルウェアが実行されると、Windows API を介してサービス コントロール マネージャ(SCM)と通信し、最終的にスレッドを実行します。このスレッドにはマルウェアのコードが含まれています。

この最初の Bisonal 亜種は C2 サーバとして young03[.]myfw[.]us(ポート 8888)を使用していました。ダイナミック DNS サービスが使用されている点がその特徴と言えます。これが Bisonal のパターンです。Talos が特定した最新のバージョンでも、この種のサービスが使用されていました。以下のように、ドメイン名は難読化されていません。

最初の C2 サーバがダウンしている場合の IP アドレスはロールバックです。このキャンペーンでは、ロールバックが localhost に設定されているため、ロールバックは使用されませんでした。C2 サーバとの通信には、以下のように raw ソケットが使用されます。

このマルウェアが最初に実行するアクションは、感染したシステムのホスト名と「kris0315」という文字列の送信です。送信データに暗号化や難読化は適用されていません。Talos では、この文字列は識別子であると推測しています。

このマルウェアは、次の 3 つのコマンドのみをサポートしています。

  • コマンドの実行:ShellExecuteW() API によって実行されます
  • 実行中プロセスのリスト取得
  • マルウェアによるクリーニング:マルウェアは最初にサービスのレジストリキーを削除した後、ライブラリを削除します。ライブラリは実行中であるため、即座に削除されることはありません。マルウェアでは MoveFileEx() API に MOVE_DELAY_UNTIL_REBOOT が指定されているため、リブート時にファイルが削除されます。

マルウェアには Bisonal という文字列が含まれています。この文字列は、実際には使用されていないのに存在している点が注目に値します。

上のサンプルは前述の HeartBeat キャンペーンで使用されたものです。

Sha256:ba0bcf05aaefa17fbf99b1b2fa924edbd761a20329c59fb73adbaae2a68d2307
C2 サーバ:young03[.]myfw[.]us

2011 年:難読化と my darling などのスパイ機能

 

2011 年 3 月:COMMECT()

Talos では 2011 年 3 月 18 日付けのサンプルを確認しています。このサンプルは、2010 年の亜種に酷似しています。API の使用を一部隠したい意図が見てとれます。この亜種では、LoadLibrary() API の後に GetProcAdress() が使用されます。ただし、関数名の文字列は 2 つに分割することによって難読化されています。以下に例を示します。

これら 2 つの文字列を連結してリトルエンディアンを適用すると、「commect」という文字列になります。その後、マルウェアは以下のように「m」を「n」に置き換えます。

攻撃者は同じ手口を CreateThread()、CreatePipe()、PeekNamedPipe()、CreateProcessA()、CreateToolhelp32Snapshot()、ReadFile()、WriteFile() といった他のいくつかの API にも適用し、最終的に「cmd.exe」という文字列にたどり着きます。

また、名前付きパイプを使用してコマンドを実行することによりコマンドの実行結果を取得するという、新しい命令も実装されています。攻撃者はまず cmd.exe を実行した後でコマンドを実行します。興味深いのは、以下のように、実行された各コマンドに文字セットが追加されている点です。

文字セットはロシア語、ブルガリア語、セルビア語など、キリル文字を使用する言語に対応します。以下のハードコーディングされた文字列は、マルウェアの標的を指示している可能性があります。

sha256:bb61cc261508d36d97d589d8eb48aaba10f5707d223ab5d5e34d98947c2f72af
C2 サーバ:kissyou01[.]myfw[.]us

2011 年 9 月:大きな変化

マルウェアの開発者は MFC ライブラリの利用をやめて、ほぼすべてのコードを独自の関数にまとめることにしました。関数は 3 区間に分けられています。メインスレッドのグラフフローを以下に示します。

さらに URL に含まれるドメイン名などの文字列は XOR アルゴリズム(0x1f など)を使用してエンコードされます。また、ネットワーク通信も XOR(0x28)で難読化されます。

このバージョンではプロキシサーバ対策が施されています。これは以前の亜種の限界でした。以前のバージョンでは、標的がプロキシを使用している場合、外部と通信できませんでした。攻撃者は次の要領でレジストリからプロキシ設定を取得します。

ネットワーク通信は 2 つの部分に分かれています。最初の部分では Microsoft Windows Wininet ライブラリが使用されます。この部分の目的は、偵察情報を攻撃者に送信することです。データは InternetOpenA() と InternetOpenURLA() を使用してサーバに送信されます。今回分析したサンプルの C2 サーバは hxxp://fund[.]cmc[.] または [.]kr/UploadFile/fame/x/o0.asp です。マルウェアからオペレータに送信される情報は、キャンペーン ID(開発者が指定した名前付きフラグ)、感染したシステムのホスト名、IP アドレス、OS バージョン、システムのプロキシサーバ、およびシステムが VMware 上で実行されているかどうかです。これらの情報を取得するために、VMXh-Magic-Value (0x0a)popup_icon が使われています。2 つ目の通信部分は、一連の命令とデータ漏洩に特化されています。この部分では前のサンプルと同じように raw ソケットが使用されます。

マルウェアの特徴は以前と変わりませんが、ファイルの作成や削除といった新しい機能が追加されています。

開発者はマルウェアのクリーニング機能を削除して、他の 2 つの機能を新たに実装しています。以前のバージョンでは名前付きパイプによって実行されたプロセスを停止するために TerminalProcess() API が使用されていましたが、このバージョンではスレッド内でメッセージを送信するために PostThreadMessageW() が追加されています。また、コマンドを正常に終了するために、以下のように「exit\r\b」という文字列が各コマンドも追加されています。

もう 1 つの興味深い変化は、CHCP コマンドの使用を止め、コードページを使用して文字セットを強制適用している点です。これはスクリーンショット 0x4E3(1251:キリル文字(ロシア語))と 0x362(866:DOS キリル文字(ロシア語))で確認できます。

Sha256:43606116e03672d5c2bca7d072caa573d3fc2463795427d6f5abfa25403bd280
命令用 C2:dnsdns1[.]PassAs[.]us
偵察用 C2 の URL:hxxp://fund[.]cmc[.]or[.]kr/UploadFile/fame/x/o0.asp

2011 年 10 月:クリーニング機能の復活

2011 年 10 月にはクリーニング機能が再実装されます。

この実装ではまず Windows サービス管理 API を使用して(以前のようにレジストリキーを直接削除するのではなく)サービスを削除し、最終的には以前と同じ API を使用してファイルを削除します(MoveFileExA())。

Sha256:43459f5117bee7b49f2cee7ce934471e01fb2aa2856f230943460e14e19183a6
命令用の C2:jennifer998[.]lookin[.]at
ロールバック用 C2:196[.]44[.]49[.]154
偵察用 C2 の URL:hxxp://fund[.]cmc[.]or[.]kr/UploadFile/fame/x/o0.asp

2011 年 12 月:サービス型からの脱却

2011 年 12 月に発見された新しい亜種は、以前のようにサービスとしてではなく、シンプルなライブラリ(.dll)として登場しています。ライブラリの実行にはランチャー(conime.exe)が使用され、永続化メカニズムにはサービスではなくレジストリキー(CurrentVersion\\Run\\task)が使用されています。

マルウェアは以前のバージョンよりも軽量ですが、ファイル漏洩、ファイルリスト取得、ドライバーリスト取得、プロセスキル、ファイル削除など、より多くのスパイ機能を備えています。その他の機能は以前と同じです。

バイナリには依然として難読化された偵察機能がハードコーディングされていますが、この機能はもう使用されなくなっています。偵察のためのコードは削除されていますが、開発者は IP 変数を削除するのを忘れていたようです。

Sha256:915ad316cfd48755a9e429dd5aacbee266aca9c454e9cf9507c81b30cc4222e5
命令用 C2:v3net[.]rr[.]nu
ロールバック用 C2:faceto[.]UglyAs[.]com
偵察用 C2 の URL:hxxp://fund[.]cmc[.]or[.]kr/UploadFile/fame/x/mh/o.asp

ハードコーディングされた識別子

このバージョンではハードコーディングされた識別子が使用されています。これらの ID はキャンペーン ID またはターゲット ID であると Talos では考えています。ID には以下のものがあります。

  • 1031
  • jp0201
  • jp-serv
  • mhi
  • m1213
  • classnk
  • 95mhi
  • nscsvc

この次のバージョンではキャンペーン ID も使用されます。この ID は日本のターゲットを指示しているものと考えられます。日本のターゲットは官民両セクターにまたがり、スパイ活動を通じて攻撃者の能力をさらに高めることを目指しているものと考えられます。

2012 年:ファイル形式の年

2 月:一見正規のライブラリに悪意のあるコードを混入

2012 年 2 月に、開発者は悪意のあるコードを正規のライブラリ内に隠そうとしました。悪意のあるライブラリは msacm32.dll という名前で、msacm.dll という Microsoft Windows 正規のライブラリと同じエクスポートを含んでいます。正規のライブラリと同じ名前を持つ悪意のあるライブラリのエクスポートを以下に示します。

以前と同じように偵察用 C2 の変数はハードコーディングされています。ただしこれは使用されていません。

Sha256:6f8bbea18965b21dc8b9163a5d5205e2c5e84d6a4f8629b06abe73b11a809cca
命令用 C2:since[.]qpoe[.]com
ロールバック用 C2:applejp[.]myfw[.]us
偵察用 C2 の URL:hxxp://fund[.]cmc[.]or[.]kr/UploadFile/fame/x/o0.asp

2012 年 5 月、12 月:サービス型の復活

2012 年 5 月と同年 12 月に発見された亜種では .dll が変更され、Windows サービスが再び使用されています。

以前と同じように偵察用 C2 の変数はハードコーディングされています。ただしこれは使用されていません。

Sha256:b75c986cf63e0b5c201da228675da4eff53c701746853dfba6747bd287bdbb1d
命令用 C2:since[.]qpoe[.]com
ロールバック用 C2:69[.]197[.]149[.]98
偵察用 C2 の URL:hxxp://fund[.]cmc[.]or[.]kr/UploadFile/fame/x/o0.asp

Sha256:979d4e6665ddd4c515f916ad9e9efd9eca7550290507848c52cf824dfbd72a7e
命令用 C2:usababa[.]myfw[.]us
ロールバック用 C2:indbaba[.]myfw[.]us
偵察用 C2 の URL:hxxp://indbabababa[.]dns94[.]com/o.asp

2012 年 10 月:スタンドアロン PE

2012 年 10 月には .exe ファイルが使用されています。攻撃者はスタンドアロン PE を使用することを選択しています。

以前と同じように偵察用 C2 の変数はハードコーディングされていますが、実際には使用されていません。

Sha256:6f4a1b423c3936969717b1cfb25437ae8d779c095f158e3fded94aba6b6171ad
オーダー用 C2:mycount[.]MrsLove[.]com
ロールバック用 C2:mycount[.]MrsLove[.]com
偵察用 C2 の URL:hxxp://fund[.]cmc[.]or[.]kr/UploadFile/fame/x/o0.asp

2013 年:RIP(安らかに眠れ)

2013 年に Talos が発見した Bisonal のサンプルはゼロでした。最初に思い浮かぶ説明は、使用されていたけれども Talos では検出できなかったというものです。2 番目に思い浮かぶ説明は、2013 年 1 月 3 日に Trend Micropopup_icon 社が発表したレポートです。レポートは、Bisonal が使用されたキャンペーンを詳述しています。これを受けて攻撃者は Bisonal の使用を控えたのかもしれません。

2014 年:復活

パッカー

Bisonal の開発者はこのとき初めてパッカー(MPRESS)の使用に踏み切りました。Bisonal という文字列もバイナリから消えますが、マルウェアのワークフローは以前と同じで、それまでの Bisonal 亜種の一部機能がそのままコピーされています。

難読化

このバージョンではドメインとポート番号が難読化されていますが、もはや単純な XOR ではなく、独自のバイト操作アルゴリズムが実装されています。また、OS の検出に関わる部分も難読化されいます。OS バージョンの文字列は、文字列としてではなくバイト形式で保存されるようになっています。

2014 年のサンプルでは前述の難読化が使用されていない点が注目を引きます。

マルウェアの中核コード

コードの大部分が書き直されていますが、ワークフローは以前と同じで、一部のコードはそのままコピーされています。バイナリは MFC フレームワークでコンパイルされています。

最大の変化は C2 サーバとのネットワーク通信です。このバージョンでは、すべての通信が raw ソケットではなく WinInet を使用して実行されます。C2 サーバとの接続に InternetOpenA() が使用され、ユーザエージェントが「Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322」とハードコーディングされています。ユーザエージェントの末尾には閉じ括弧が欠落しています。この脱字は今も残っています。

この亜種は前の亜種とまったく同じ機能(ファイルリストや OS バージョンの取得、プロセスキル、ドライブリスト取得、ShellExecuteW() による実行、名前付きパイプによる実行、クリーニング、ファイル削除、ファイルダウンロードなど)を備えています。

双方のコードには類似性があり、その一例が、コマンドの実行に名前付きパイプ関数を使用する部分です。左は 2014 年の Bisonal、右は 2011 年の Bisonal から抜粋したサンプルです。コードが完全に同一ではありませんが、ワークフローといくつかの定数が類似しています。

ハードコーディングされた識別子と URL のパターン

新しいバージョンでは、ハードコーディングされた次の 3 つの識別子が使用されています。

  • キャンペーン ID:ホスト名と OS バージョンを含む漏洩データに付けられる ID。オペレータはこの ID を使用してキャンペーンとターゲットを特定していると考えられます。
  • マルウェア ID:URL の最初の「ワード」を生成するための ID。この ID はマルウェアのバージョンを特定するために使用されているものと考えられます(ネットワークプロトコルの観点から)。
  • 3 番目の ID:URL の最後の「ワード」を生成するための ID。通常はファイル名のような文字列になります。

URL のパターン:hxxp://C2_domain:PORT/MalwareIDVictimIPThirdID

SHA256:c6baef8fe63e673f1bd509a0f695c3b5b02ff7cfe897900e7167ebab66f304ca
C2 の URL:hxxp://www[.]hosting[.]tempors[.]com:443/av9d0.0.0.0akspbv.txt

2016 年:新たなパッカー

2016 年には Bisonal の新たなパック方法が実装されています。初期の静的分析では、情報をほとんど含まない実行可能ファイルがすぐに確認されました。IDA Pro で表示される関数は 5 つのみで、インポートはまったく表示されません。

表示されるこれらの関数を詳しく見ると、パッカーに複数の分析回避策が施されていることが判明しました。アンパックでは意味のないジャンプやコールが多数表れるため、デバッガでのコードトラッキングを困難にしています。

アンパック完了後も複数の分析回避策が施されています。関数が直接呼び出されている箇所はほとんどありません。アンパックでは、1 つの命令の後にジャンプやレジスタ値の増分が続き、そのすぐ後に減分が現れるなど、意味のないコードが大量に生成されます。最初のアンパックは、スタック内にプッシュされたリターンアドレスによる操作と、.text セクションに含まれるデータの順序に基づきます。第 2 段階ではメモリを割り当ててコードをアンパックすることにより、最終的にはアンパックされたコードが、.textbss という(元々は空だった)セクションに送り込まれます。これがマルウェアの中核部分です。

すべての API コールはディスパッチャ関数を通じて実行されます。ただしディスパッチャ関数も直接的には呼び出されません。関数が呼び出される前には、一連のジャンプが繰り返され、エンコードされたオフセット値でスタックが埋め尽くされます。

ジャンプテーブルエントリの呼び出し:

スタックに送られるディスパッチ関数の push パラメータ:

すべての汎用レジスタをスタックにプッシュ:

実際のディスパッチ関数が呼び出される前に、すべてのレジスタがスタックに保存されます。その結果、このオフセット値がスタックの先頭から後ろにずれるため、マルウェアはこれをスタックの先頭に戻す必要があります。

この段階で、スタック内の引数の直前(マルウェアの中核部内)にリターンアドレスも現れます。そして、ディスパッチャ関数により目的の API 関数アドレスがスタックにプッシュされます。その後、汎用レジスタに対しても同様の操作が実行されます。

マルウェアはまずディスパッチャ関数を呼び出した後、スタックから汎用レジスタを復元することで、API 関数のアドレスをスタックの先頭に残します。論理的には ret 命令が実行された後、コードは API 関数にジャンプします。

このようなメカニズムにより、コール命令を使用せずに API 関数を実行されると、分析が困難になります。分析を妨げる別の要因は、コードがアンパックされた後も、アナリストがそれをダンプして静的に分析しようとした場合、逆アセンブラでのコード理解が困難になる点です。

このディスパッチャ関数には、他の手口も組み込まれています。関数は呼び出しを受けるたびにデバッグ対策の GetTickCount() を使用して、デバッグが実行されているかどうかを確認します。タイミングに不一致がある場合は、プロセスを終了します。ExitProcess() へのコールを通じて単純にプロセスが終了される場合もあれば、ユーザに対してメッセージを表示するスレッドが先に再開される場合もあります。スレッドを確実に実行できるようにするために、この関数は元々のリクエスト内容とは無関係に sleep() という API コールを返します。sleep() が実行されると、エラーメッセージスレッドを実行できるようになります。エラーメッセージスレッドはプロセスを終了させます。

2014 年に発見された複数の亜種の間に機能面の差異はあまり見られません。前述した 3 つのハードコーディング識別子は常に使用されていますが、値はバージョン間で異なります。

SHA256:15d5c84db1fc7e13c03ff1c103f652fbced5d1831c4d98aad8694c08817044cc
C2 の URL:hxxp://emsit[.]serveirc[.]com/ks8d0.0.0.0akspbu.txt

2018 年:しばらくの沈黙後に再開

2018 年は、MFC フレームワークまたは Visual C ライブラリを使用するサンプルが組み合わせて使用されました。永続化に使用されるレジストリキーの名前は「mismyou」に変わっています。

しかしマルウェアの作成者は 2018 年 9 月に間違いを犯しました。Bisonal の亜種では通常、ドメイン名がエンコードされていますが、このときはドメイン名の難読化を忘れたようです。次のように難読化関数を実行していますが、変数はクリアテキストに格納されています。

その結果、正しいドメイン名が破壊され、無効な文字列が生成されます。マルウェアは無効なドメイン(hxxp://硟满v鐿緲赥e ?r雀溝1kdi簽:70/ks8d0.0.0.0akspbu.txt)への接続を試みます。次のスクリーンショットでは、デバッガが接続を実行しようとしている様子を確認できます。

SHA256:92be1bc11d7403a5e9ad029ef48de36bcff9c6a069eb44b88b12f1efc773c504
C2:kted56erhg[.]dynssl[.]com

SHA256:d83fbe8a15d318b64b4e7713a32912f8cbc7efbfae84449916a0cbc5682a7516
C2 の失敗:hxxp://硟满v鐿緲赥e ?r雀溝1kdi簽:70/ks8d0.0.0.0akspbu.txt

2019 年:MS Office 拡張機能と新しいパッカー

パッカー

実行可能ファイルの静的分析では 2 つの関数しか表示されませんが、インポート数は通常どおりに表示されます。このバージョンのパッカーでは、2016 年に進化したパッカーと一部の機能が共通しています。

また、ジャンプや bswap 命令など、無意味なコードも大量に含まれています。マルウェアがデバッガの実行を検出すると、以下のメッセージを表示して実行を終了します。

メッセージを翻訳すると、「OS 内でデバッガの実行を検出しました。プログラムを再実行する前にデバッガを終了してください」という意味になります。

このパッカーには API 関数へのコールも隠蔽されています。ここではディスパッチャ関数を使用せずに、引数が通常どおりにスタックへプッシュされますが、.text セクションのメモリ領域ではアンパック中に構築された jump テーブルへのコールが実行されます。

コールは実行されますが、これらは関数ではありません。実際、ジャンプテーブルのコードは大部分が無意味で、各エントリの最後の命令のみが機能を持ちます。各エントリの最後には、それぞれの API 関数への jmp 命令があります。マルウェア自体は API 関数をまったく呼び出さず、常にジャンプのみを実行しているため、検出されません。マルウェアがジャンプテーブルを呼び出すと、リターンアドレスがスタックにロードされます。最終的な結果は 2016 年のパッカーと変わりませんが、動作のメカニズムが一段とシンプルになっています。

コードの大部分は、パックされた領域に移動されています。マルウェアの設定(C2 サーバやユーザエージェントなど)は、この領域の外にあります。パッカーはスレッドローカルストレージ(TLS)コールバックを使用して、コードの一部をアンパックします。この段階では、インプレースアンパックを使用してメモリ割り当てを回避します。分析回避策の 1 つは、API 関数を呼び出さないことです。マルウェアでは実行の初期段階でライブラリがロードされ、必要な関数からアドレスが取得されます。

機能的には 2016 年のバージョンとまったく同じで、実際に比較してみると、C2 ビーコン関数で使用されるオフセットも一部共通しています。

Microsoft Office 拡張機能

Bisonal のハッカー集団は、2019 年に新たな手口を使用して侵入先にマシンをデプロイしようと試みました。CVE-2018-0798(Microsoft の数式エディタに含まれる脆弱性)を突いた RTF ドキュメントを標的に送り付けたのです。シェルコードの目的は、マルウェアを実行するという通常の目的ではなく、単に %APPDATA%\microsoft\word\startup\ リポジトリに .wll の拡張子のマルウェアを保存することでした。

ライブラリ内で .wll の拡張子を持つ該当ディレクトリは、Microsoft Office の拡張機能としてロードされます。その後、ユーザが Office アプリケーションを開くと、マルウェアがロードされて実行されます。マルウェアの目的は、感染したシステムに Bisonal($tmp$\tmplogon.exe)をデプロイし、システムの次回リブート時に Bisonal を実行する Run レジストリキーを作成することです。

このように多くの段階を踏んでマルウェアを実行する狙いはサンドボックス技術の回避にあると考えられます。悪意のあるドキュメントが実行された後のレポートを見ると、表示されるアクションは 1 つだけで、.wll ファイルを作成するアクションしか表示されません。しかも実際のペイロード(Bisonal)が実行されるためには、ユーザが Office アプリケーションを開く必要があり、最終的にはリブートも必要になります。

分析回避のためにサイズを肥大化

Talos では、悪意のあるペイロードのインストール時に見られるごく微細な挙動を目印にして、Office 拡張機能を使用する Bisonal のバージョンを特定しました。以下のように、このドロッパーは Bisonal バイナリの末尾に 80MB のバイナリデータを追加します。

バイナリ値を ASCII 文字に変換すると「56MM」になります。マルウェアを調べると、追加されたデータを確認できます。

このように巨大なバイナリを作成する目的は、まだよくわかっていません。分析対策の一種であるとも考えられます。一部のツールでは分析対象ファイルのサイズに上限があります。たとえば VirusTotal の標準 API を使用する場合、サイズが 32MB を超えるファイルはアップロードできません。サイズの大きいファイルを正しく処理できないサンドボックスもあります。つまり、サイズは検出を妨げる場合があるのです。

マルウェアコード

Bisonal の作成者はコードの一部をリファクタリングしました。2019 年の亜種は以前とまったく同じ機能を保持しています。2 つの主な変更点は難読化と、C2 サーバとの通信に使用されるネットワークプロトコルです。

2 つの難読化アルゴリズムが、C2 エンコーディング用途と、データの難読化用途に使用されています。C2 エンコーディングは(2012 年と同じ)単純な XOR に戻りました。

C2 エンコーディングの通信方法も変化しています。データ送信に GET メソッドが使用されるようになったため、必然的にデータは ASCII 形式でエンコーディングされます。そのため HTTP クエリでサポートされる文字列を取得するために、base64 エンコーディングが追加されています。

POST リクエストでなく GET リクエストが使用されたのは、このときが初めてです。

流出データは URL に追加されます。パターンは次のとおりです。hxxp://C2_domain/MalwareIDVictimIPThirdIDExfiltratedDataBase64

SHA256:37d1bd82527d50df3246f12b931c69c2b9e978b593a64e89d16bfe0eb54645b0
C2 URL:hxxp://www[.]amanser951[.]otzo[.]com/uiho0.0.0.0edrftg.txt

Bisonal の変遷の概要

まとめ

Bisonal のハッカー集団が意欲的であることは明らかで、ロシア、韓国、日本のユーザを標的にしているようです。Bisonal の開発は 10 年以上にわたって活発に続いています。本稿ではさまざまな出版物を参考にしつつ、Microsoft Windows の進化にも目を配りながら、進化し続ける Bisonal のコードの変遷を見てきました。

Bisonal が初めて確認されてからすでに何年も経過していますが、特定の機能は現在も使用されています。Bisonal は 30 個足らずの機能しか持たないシンプルなマルウェアと見なすこともできますが、機密性の高い情報を扱う官民両セクターの組織を狙って生き残り続けてきました。大手のメディアは、前述した地域の軍事組織に使われた事例も報告しています。

10 年を超える活動期間では、攻撃者の間違いや失敗も見受けられます。たとえばあるキャンペーンでは、マルウェア内に C2 サーバのドメイン名をプレーンテキストのまま記述してしまい、復号後に C2 サーバの非 ASCII 文字列を生成してしまう関数が使用されていました。この状態では、感染したシステム上でもマルウェアは動作しません。これほど長年にわたって活動を続けていますが、攻撃者たちはミスを犯します。

Bisonal のハッカー集団が近い将来に攻撃を止める可能性は低いでしょう。Bisonal の過去 10 年間の推移と分析、そして Bisonal の仕組みに関する今回の記事を活用し、既存の攻撃手口を完全にブロックできるよう対策を立てていただければ幸いです。

カバレッジ

お客様がこの脅威を検出してブロックするための方法を以下に記載します。

Advanced Malware Protection(AMP)は、この記事で説明したマルウェアの実行を阻止するのに最適です。次のスクリーンショットは、AMP がこの脅威からお客様を保護する様子を示しています。こちらpopup_iconから AMP を無料でお試しいただけます。

Cisco クラウド Web セキュリティ(CWS)または Web セキュリティアプライアンス(WSA)の Web スキャンは、悪意のある Web サイトへのアクセスを防止し、上述したような攻撃で使用されるマルウェアを検出します。

E メールセキュリティは、攻撃の一環として攻撃者が送りつける不正な電子メールをブロックします。

次世代ファイアウォール(NGFW)、次世代侵入防御システム(NGIPS)、および Meraki MX などのネットワーク セキュリティ アプライアンスは、今回の脅威に関連する悪意のあるアクティビティを検出します。

Threat Grid は、悪意のあるバイナリを特定し、すべてのシスコ セキュリティ製品に保護機能を組み込みます。

Umbrella(シスコのセキュア インターネット ゲートウェイ(SIG))は、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。

特定の環境および脅威データに対する追加の保護機能は、Firepower Management Center から入手できます。

オープンソースの Snort サブスクライバルールセットをお使いであれば、Snort.orgpopup_icon で購入可能な最新のルールパックをダウンロードすることで、最新状態を維持できます。

IOC(侵入の痕跡)

SHA256:

0cf9d9e01184d22d54a3f9b6ef6c290105eaa32c7063355ca477d94b130976af
7dc58ff4389301a6eccc37098682742b96e5171d908acdeb62aeaa787496c80a
0ff88a6cd7dcd27f14ebb7b2c97727b81e1aa701280d1164685c52c234e4a9df
8252f2cdedf16f404d43c81d005ea8ebb10594477f738e40efacf9013e1470d2
915ad316cfd48755a9e429dd5aacbee266aca9c454e9cf9507c81b30cc4222e5
1128d10347dd602ecd3228faa389add11415bf6936e2328101311264547afa75
92be1bc11d7403a5e9ad029ef48de36bcff9c6a069eb44b88b12f1efc773c504
15d5c84db1fc7e13c03ff1c103f652fbced5d1831c4d98aad8694c08817044cc
9638e7bb963ac881bd81071d305dea91b040536c55b7ee79b526b8afcfad6972
1e66579b856cd331518d67c351bcb2b102399d8ade53370797228b289e905dc1
979d4e6665ddd4c515f916ad9e9efd9eca7550290507848c52cf824dfbd72a7e
22b3a86f91d2eb5a8a1e1cdc044bcf6aca898663071be5233bac00c0f0d3c001
9c86c2dd001c47b933c6b5f43c8f87a6d0c01c066e3520e651fab51d19355d3c
2c1e0facf563bb2054d9a883144ef9bad77ba75cdb46cc80843821c363c0a9dc
a4a5c60a392d236b76907f58597e83ba9c9d4cfc6a4502ef3e0e149b8710a0c6
359835c4a9dbe2d95e483464659744409e877cb6f5d791daa33fd601a01376fc
b1da7e1963dc09c325ba3ea2442a54afea02929ec26477a1b120ae44368082f8
37d1bd82527d50df3246f12b931c69c2b9e978b593a64e89d16bfe0eb54645b0
b75c986cf63e0b5c201da228675da4eff53c701746853dfba6747bd287bdbb1d
43459f5117bee7b49f2cee7ce934471e01fb2aa2856f230943460e14e19183a6
b85e4168972b28758984f919aef2ce0fde271ee1f0863510e521a2920fcc658e
43606116e03672d5c2bca7d072caa573d3fc2463795427d6f5abfa25403bd280
bd1a9b148580dad430683639b747d1c49932db5d8f6eb2d90e2583af976810dc
436fc9530015c2d2b952a16d2a3dfa202d1cb1c577b580811b9b48355855591b
c5496dc3fa96b657ab4467c551877bbced56fd07c00c7ccb199c1794235bf710
444e864a3bb2abb1edccab4a5cd45bc0039f2a48e01615b2719da65a40a5140e
c6baef8fe63e673f1bd509a0f695c3b5b02ff7cfe897900e7167ebab66f304ca
cdba1a69d75f3e2256dccc16255aef07ded41c257b2cc95ccb801a0063445926
5caada5737b0a6c8c8f8a27bfcd0fb2221af68a4856278c3919b37279daa7409
d19b85891dd0f83808b70fbe68a56a64e828611dfe53d04a6c1c211f1352b5b5
6676934d7f214cb256407400357c1f7ead69a523b3017f6a5bc30d06a11a8305
d7692a71b85c869ee11647b80ea6d42b2e4303233c525a8fa7e6bec3599e2c8b
67e286c7308dda5cd8fe4a1340f354927e5791ce6ef0ef02c93a4e063e11c4ad
d83fbe8a15d318b64b4e7713a32912f8cbc7efbfae84449916a0cbc5682a7516
6c714653a8fa54eef1de2f0148e5e8cf514907f6f523bf09c8ee126bebcdbdcc
dd88b31275b7079899d945fc6de2dceaf7e8fc143ef24be5bb336585ddf6af1e
6cc4707942f9323347c95066a43b30f874f1b1c783960cf8ed9ecf5914f85ba7
eb7681c653ef1942103cd3272fd124eaf73e79bb830be978535c18b73c87b985
6ef4df8460ba57b836f52a9a73e2d739a3f2aa832bec6b663af53b55dc74a63d
effd31b11bdc6486082967c2d8e53d979e59a88ba28e68a1c94f5a064a8a966d
6f4a1b423c3936969717b1cfb25437ae8d779c095f158e3fded94aba6b6171ad
6f8bbea18965b21dc8b9163a5d5205e2c5e84d6a4f8629b06abe73b11a809cca
f3a30e5f8bfd0f936597bcef7cb43df11ec566467001dff9365771900e90acb1
77a36530555eada268238050996839bd34670e8bfda477c30d9dd66574625f59
f9302b7ecc32b891edeaf61353dc5e976832b7104ec0d36f1641f1f40cf6fe12
799d858ff77c29684fc1522804ed45c24171484d9618211c817df01424bc981a
23d263b6f55ac81f64c3c3cf628dd169d745e0f2b264581305f2f46efc879587
72f6a54d0d09a16e6fde9800aa845cd1866001538afb2c8f61f3606f5e13f35a
4bad5898373eb644662a8c1d5d5c674e2558908e34bb2fd915f3350b0f28752b

C2 サーバ:

0906[.]toh[.]info
dnsdns1[.]PassAs[.]us
euiro8966[.]organiccrap[.]com
jennifer998[.]lookin[.]at
kfsinfo[.]ByInter[.]net
kted56erhg[.]dynssl[.]com
mycount[.]MrsLove[.]com
since[.]qpoe[.]com
usababa[.]myfw[.]us
v3net[.]rr[.]nu
www[.]amanser951[.]otzo[.]com
www[.]amanser951.otzo[.]com
137[.]170[.]185[.]211
196[.]44[.]49[.]154
21kmg[.]my-homeip[.]net
61[.]90[.]202[.]197
61[.]90[.]202[.]198
69[.]197[.]149[.]98
agent[.]my-homeip[.]net
applejp[.]myfw[.]us
dnsdns1[.]PassAs[.]us
emsit[.]serveirc[.]com
etude[.]servemp3[.]com
euiro8966[.]organiccrap[.]com
faceto[.]UglyAs[.]com
games[.]my-homeip[.]com
hansun[.]serveblog[.]net
hxxp://硟满v鐿緲赥e ?r雀溝1kdi簽:70/ks8d0.0.0.0akspbu.txt
indbaba[.]myfw[.]us
kazama[.]myfw[.]us
kreng[.]bounceme[.]net
kted56erhg[.]dynssl[.]com
mycount[.]MrsLove[.]com
navego[.]serveblog[.]net
shinkhek[.]myfw[.]us
wew[.]mymom[.]info
www[.]hosting[.]tempors[.]com
www[.]nayana[.]adultdns[.]net
www[.]dds.walshdavis[.]com

 

本稿は 2020年3月5日に Talos Grouppopup_icon のブログに投稿された「Ransomware: Because OpSec is Hard?popup_icon」の抄訳です。

コメントを書く