ランサムウェア
Go言語で作られた新しいランサムウェア「Agenda」による標的型攻撃の手口を解説
トレンドマイクロでは最近、プログラミング言語「Go」で作成された新しいランサムウェアによる標的型の攻撃を確認しました。使用されたメールアドレスや認証情報を踏まえると、このランサムウェアは明確に弊社の顧客の一部を狙ったものと考えられます。
トレンドマイクロでは最近、プログラミング言語「Go」で作成された新しいランサムウェアによる標的型の攻撃を確認しました。使用されたメールアドレスや認証情報を踏まえると、このランサムウェアは明確に弊社の顧客の一部を狙ったものと考えられます。Go言語は、マルウェア作成の用途で、攻撃者に広く用いられるようになりました。この理由として、Go言語では必要なライブラリを静的リンクにまとめてコンパイルすることで、セキュリティ解析をより一層困難にできるという点が考えられます。
調査により、今回のランサムウェアはアジアおよびアフリカの企業を標的としていることが判明しました。あるダークウェブ上でのユーザ「Qilin(ランサムウェアの配布者と繋がりを持つと考えられる)」による投稿、およびランサムノートの内容から判断すると、本ランサムウェアは「Agenda」と呼ばれています。
Agendaは標的システムをセーフモードで再起動して、数多くのサーバ関連プロセスやサービスを停止することが可能であり、さまざまな実行モードを備えています。今回取得したランサムウェアの検体は、個々の標的に合わせてカスタマイズされ、その中には企業毎のIDや流出したアカウント情報が含まれていました。
標的
今回取得した検体は全てGo言語で作成された64ビット用Windows PE(Portable Executable)の実行形式ファイルであり、Windows系システムを攻撃対象とするものでした。マルウェア配布グループが狙っていた標的は、インドネシア、サウジアラビア、南アフリカ、タイにあるヘルスケアまたは教育関連の企業や組織です。全ての検体は、対象の標的ごとにカスタマイズされていました。これらの検体は、標的のアカウント情報や顧客のパスワード、暗号化ファイルの拡張子に使用される個別の企業IDを流出させたことが、調査によって判明しました。
先に挙げたユーザ「Qilin」(またはランサムウェア「Agenda」の攻撃グループ)は、攻撃活動に参加するアフィリエイトに対して、標的に応じてカスタマイズ可能なペイロードのオプション(企業ID、RSA鍵、データ暗号化の前に停止するプロセスやサービスなど)を提供していたことが分かりました。また、要求する身代金の額も標的の企業に応じて異なり、50,000米ドルから800,000米ドルまでの幅が見られました。
他のランサムウェアとの類似点
Agendaは、Black BastaやBlack Matter、REvil(別称Sodinokibi)など他のランサムウェアとの類似点が見られました。
まず、身代金の支払いサイトやTorサイトにおけるユーザ照合方式について、AgendaはBlack BastaやBlack Matterと非常によく似ています。次に、Windowsのパスワード変更や下記コマンドによるセーフモードでの再起動を行う点について、AgendaはBlack BastaやREvilと同一の機能を備えています。
C:\windows\system32\bcdedit.exe /set safeboot{current} network
確認された攻撃フロー
今回のランサムウェアによる攻撃事例の1つに、インターネットに公開されたCitrixサーバをエントリポイントとして不正利用したものがありました。ほぼ間違いなく、この攻撃者は正規のユーザアカウントを用いてCitrixサーバに不正アクセスし、さらに標的のネットワーク内部に侵入したと考えられます。本ランサムウェアの検体が権限付きのアカウント情報でカスタマイズされていたことを踏まえると、こうした不正アクセスの発生自体はある程度予想されたことでした。
攻撃グループは、流出したアカウント情報を用いて権限管理システム「Active Directory」にログインし、リモートデスクトッププロトコル(RDP:Remote Desktop Protocol)を使用しました。続いて、ネットワーク情報をスキャンするためのツールとして「Nmap.exe」や「Nping.exe」をドロップした上で、グループポリシー設定用のドメイン端末からタスクスケジューラを配布しました。
Citrixサーバへの不正アクセスに成功した攻撃者は、2日にも満たない短い期間で、ランサムウェアを標的システムに感染させました。攻撃者は1日目の時点でネットワーク情報のスキャンを終え、翌日にはグループポリシーオブジェクト(GPO:Group Policy Object)を作成し、対象の端末にランサムウェアを配備したと考えられます。
分析と特記事項
ランサムウェア「Agenda」はGo言語で作成された64ビットのWindows PE形式ファイルです。Go言語で書いたプログラムはクロスプラットフォームであり、ビルドされた実行ファイルは対象端末にインタプリタなどがなくてもスタンドアローンで動作します。これは、Go言語では必要なライブラリ(パッケージ)が全て静的リンクとしてまとめてコンパイルされるためです。
実行時、本ランサムウェアはマルウェアとしての動作フローや機能を制御するさまざまなコマンドライン引数を受け取ります。その内容は下表の通りです。
引数 |
役割 |
-alter {int} |
子プロセス用のポート番号を指定 |
-encryption {value} |
カスタマイズ時の選択にあわせて暗号化方式を指定 |
-ips {IP Address} |
IPアドレスを指定 |
-min-size {value} |
暗号化するファイルの最小サイズを指定(例:1KB、1MB、1GB、666KB) |
-no-proc |
停止対象外のプロセスを指定 |
-no-services |
停止対象外のサービスを指定 |
-password {string} |
アクセス用パスワードを指定 |
-path {directory} |
ディレクトリ解析対象のパスを指定;-pathが指定されても{directory}が未指定の場合は、全てのディレクトリが解析対象になる |
-safe |
セーフモードで再起動 |
-stat |
設定情報をマルウェアによって出力させる(停止対象のプロセスやサービス、暗号化に関する情報など) |
Agendaでは、使用するRSA公開鍵や暗号化の条件、停止するプロセスおよびサービス、暗号化したファイルに付与する拡張子、ログイン認証情報、ランサムノートなどを、ランタイム設定によって構成、管理します。
ランタイム設定のコンポーネント |
役割 |
public_rsa_pem |
RSA公開鍵 |
directory_black_list |
暗号化対象外のディレクトリ |
file_black_list |
暗号化対象外のファイル名 |
file_pattern_black_list |
暗号化対象外のファイル拡張子 |
process_black_list |
停止するプロセス |
win_services_black_list |
停止するサービス |
company_id |
暗号化したファイルに付与する拡張子 |
accounts |
ログイン認証情報 |
note |
ランサムノート |
初期処理として、下記レジストリ値から文字列「safeboot」をチェックして、端末がセーフモードで起動中であるかを調べます。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control SystemStartOptions
すでにセーフモードで起動中であると判定した場合、Agendaは処理を終了します。
Agendaはコマンド「vssadmin.exe delete shadows /all /quiet」を実行して、シャドーボリュームのコピーを削除します。さらに、アンチウイルス製品を含む特定のプロセスとサービスを、ランタイム設定に応じて停止します。
Agendaが停止するプロセスの一部を下記に記載します。
- a2service.exe
- a2start.exe
- aawservice.exe
- ashserv.exe
- avengine.exe
- avkwctl.exe
- blackd.exe
- cfp.exe
- fsav32.exe
- fsdfwd.exe
- fsguiexe.exe
- kpf4gui.exe
- mcods.exe
- mcpalmcfg.exe
- mcproxy.exe
- mcregwiz.exe
- mcsacore.exe
- mcshield.exe
- mpfagent.exe
- mpfservice.exe
- msmpeng.exe
- msscli.exe
- nisum.exe
- ntrtscan.exe
- pccpfw.exe
- tmntsrv.exe
Agendaが停止するサービスの一部を下記に記載します。
- acronis vss provider
- acronisagent
- acronisagentd
- avbackup
- avbackupd
- ccevtmgr
- macmnsvc
- macmnsvcd
- masvc
- masvcd
- mcshield
- sentinelagent
- sentinelagentd
- sentinelhelperservice
- sentinelhelperserviced
- sentinelstaticengine
- sentinelstaticengined
- shmonitor
- shmonitord
- smcinst
- tmccsf
- tmccsfd
- tmlisten
- tmlistend
初期処理の完了後、Agendaはパブリックフォルダに配備した自身のコピー(ファイル名:enc.exe)が一度だけ自動起動されるように、下記のレジストリ値を登録します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce*aster = %Public%\enc.exe
ユーザパスワードの変更とセーフモードでの再起動
Agendaは暗号化処理に際して検知を回避する仕組みも備えています。具体的にはデフォルトユーザのパスワードを変更し、新しいログイン認証情報での自動ログインを有効化します。この機能はコマンドライン引数に「-safe」を指定することで発動します。REvilと同様、Agendaは標的端末をセーフモードで再起動した上で、暗号化の本処理に入ります。
Agendaはまず、端末に登録されている全てのローカルユーザを抽出し、そのうちのどれがデフォルトユーザであるかを判定します。
デフォルトユーザを特定すると、Agendaは当該ユーザのパスワードを「Y25VsIgRDr」に変更します。
この後、以下のレジストリエントリの値を下図のようにそれぞれ設定します。
SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\
- AutoAdminLogon value = 1
- DefaultUserName = {ユーザ名}
- DefaultDomainName = {ドメイン名}
- DefaultPassword= Y25VsIgRDr(固定文字列)
デフォルトユーザのパスワード変更と自動ログイン設定の完了後、Agendaは下記コマンドにより、標的端末をセーフモードで再起動します。
C:\windows\system32\bcdedit.exe /set safeboot{current} network
暗号化処理の完了後、Agendaはさらに下記コマンドによって標的端末を通常モードで再起動します。
C:\Windows\System32\bcdedit.exe /set safeboot network bcdedit /deletevalue {default} safeboot
正規アカウントへのなりすまし
Agendaが持つもう一つの機能は、ランサムウェアのバイナリを実行する際に、ランタイム設定内に埋め込まれたローカルアカウントの認証情報を不正使用することです。
なりすまし処理を開始するにあたり、Agendaはまずランタイム設定中のアカウント情報を「ユーザ名」、「ドメイン」、「パスワード」の各要素に分割します。次に、こうして抽出した情報をAPI「LogonUserW」に引き渡すことで、ローカル端末上に当該ユーザとしてログインしようとします。
次に、Agendaはランダムなポート番号を生成し、これをコマンドライン引数「-altar」と組み合わせてAPI「CreateProcessAsUserW」に引き渡すことで、ランサムウェアのバイナリを実行します。
ネットワーク共有の許可
Agendaは1端末内でデータの暗号化を行うだけでなく、ネットワークの全域、または共有ドライブに対する攻撃にも関わっています。
まずAgendaはレジストリ値を追加登録(EnableLinkedConnections = 1)」した上で、ファイル共有関連サービス「LanmanWorkstation」を再起動します。これにより、Agendaによって管理者権限で起動されたプログラム(cmd.exeなど)からでも、割り当て済みのネットワークドライブ一覧を取得、参照することが可能になります。
暗号化アルゴリズム
AgendaはAES-256によってファイルを暗号化し、そこで使用した鍵自体もRSA-2048によって暗号化します。AES-256の暗号化に使用する鍵と初期ベクトル(IV:Initialization Vector)は、関数「generateKye」およびAPI「rand_read()」を呼び出して生成します。
Agendaは上記で生成したランダム鍵を使用して、対象ファイルをAES-256で暗号化します。続いて、生成したランダム鍵自体をRSA-2048で暗号化します。このRSA暗号化に際しては、ランタイム設定で指定されたRSA公開鍵を使用します。
暗号化に成功後、Agendaはランタイム設定で指定された「企業ID」を取得し、これを暗号化済みファイルの拡張子に付加します。最後に、暗号化対象となった各ディレクトリ配下に「{企業ID}-RECOVER-README.txt」の名前でランサムノートをドロップします。
プロセス・インジェクション
Agendaはパブリックフォルダにpwndll.dll(トレンドマイクロではTrojan.Win64.AGENDA.SVTとして検出)をドロップします。このファイルはGo言語ではなくC言語で作成された正規のDLL「WICloader.dll」を改ざんしたものです。AgendaはこのDLLをsvchost.exeにインジェクトすることで、ランサムウェアのバイナリが永続的に実行されるようにします。
結論およびソリューション
ランサムウェアは進化を続け、高度な手段や技術を開発して企業や組織を陥れようとします。今回のトレンドマイクロによる調査では、新しい標的型ランサムウェア「Agenda」がGo言語で作成され、検知や解析がより一層困難なものになっていることが判明しました。
本ランサムウェアは、端末の「セーフモード」機能を利用して検知を回避し、気づかれることなくファイルの暗号化作業を進める仕組みを備えています。また、ローカルアカウントを利用してなりすましユーザとしてログインした上で、ランサムウェアのバイナリを実行します。ログインに成功した場合は他の端末に対しても暗号化を行います。さらに、さまざまなプロセスやサービスを停止し、DLLファイルをsvchost.exeにインジェクトすることで、端末内での永続性を確保します。
エンドユーザ、または企業や組織は、下記ベストプラクティスを実施することでAgendaなどのランサムウェアに感染するリスクを軽減することが可能です。
- ネットワーク内での水平移動・内部活動を阻止するため、他要素認証(MFA:Multifactor Authentication)を使用する。
- 重要なファイルのバックアップに際して「3-2-1ルール」を遵守する。このルールでは、ファイルのコピーを3つ作成し、2種類の記憶媒体を使用し、物理的に離れた保管場所を1つ確保する。
- 定期的にシステム・アップデートや修正パッチの適用を行う。オペレーティングシステムやアプリケーションの最新化は、さまざまな脆弱性を突いた攻撃を防ぐ上で有効である。
企業や組織は、複数レイヤーによる検知・応答機能を備えたセキュリティ・ソリューションを利用することで、ランサムウェアによる攻撃からシステムを保護できます。その1つである「Trend Micro Vision One™」は、複数レイヤーにまたがって不審な挙動やツールを監視することにより、ランサムウェアによる様々な被害が発生する前に検知し、阻止することが可能です。また、「Trend Micro Apex One™」は、次世代レベルの自動脅威検知・応答機能を備え、ランサムウェアやファイルレスなどの高度に発展した攻撃からエンドポイントを保護します。
調査協力:Eleazar VallesおよびSherif Magdyによる追加調査
侵入の痕跡(IoC)
侵入の痕跡(IoC)に関する詳細情報はこちらで確認してください。
MITRE ATT&CK Tactics and Techniques
MITRE ATT&CK Tactics and Techniquesはこちらで確認してください。
参考記事:
• 「New Golang Ransomware Agenda Customizes Attacks」
By: Mohamed Fahmy, Nathaniel Gregory Ragasa, Earle Maui Earnshaw, Bahaa Yamany, Jeffrey Francis Bonaobra, Jay Yaneza
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)