攻撃者たちが Go / Rust / Nim / DLang を使うのは何故なのか?

Attackers’ Use of Uncommon Programming Languages Continues to Grow

2021/07/27 DarkReading — BlackBerry の研究者によると、Go / Rust / Nim / DLang などの一般的ではないプログラミング言語が、セキュリティ防御を回避することや、開発プロセスの弱点を突くことを目的とする、マルウェア作者たちの間で人気を集めているとのことだ。この研究チームが、これら4つの言語を選んだ理由は、悪意の目的で使用されるケースが増加していることや、これらの言語を使用するマルウェア・ファミリーの数が増加していることに注目したからだ。

攻撃者が新しいプログラミング言語を使用することは、決して目新たしいことではない。ただし、研究者たちは、これらの言語が広まっており、この傾向が続くと悪用も増大すると予想している。新しいプログラミング言語が採用される理由としては、既存言語の弱点の解消や、シンプルな構文、効率的なメモリ管理、パフォーマンスの向上などが考えられる。また、新しい言語と、利用される環境との適合性も挙げられる。たとえば、Internet of Things デバイス機器では、より低レベルの言語が使用されていると、研究者は指摘している。このようなメリットを攻撃者が求めることで、新たな課題が防御者にもたらされる。

マルウェアの解析ツール、あまり知られていない言語をサポートしているとは限らず、また、Go / Rust / Nim / DLang などで書かれたバイナリは、C や C++ などの従来の言語に比べて、分解すると複雑に見えることがある。アナリストは新しい言語に慣れていないこともあり、その複雑さに対処するための学習曲線をたどることになる。C++ や C# などの伝統的な言語で書かれた古いマルウェアが、比較的一般的でない言語で書かれた Dropper や Loader で刷新される傾向が強まっていると、研究者は指摘している。

通常、古いマルウェアは、第一段階としては暗号化された状態で保存され、また、XOR / RC4 / AES などを用いて暗号化/符号化されるという。そして、デコードされた後に、バイナリはディスクに落とされるか、実行中のプロセスに注入されて、メモリにロードされると、研究者は述べている。つまり、マルウェアを再コーディングする手間を省くことで、攻撃者にとって魅力的な方式が実現される。攻撃者は、古いマルウェアを、これらの配信方法のいずれかで Wrapping できるのだ。

シグネチャ・ベースのセキュリティ・ツールでは、有名なマルウェアの断片を追跡することで、Dropper や Loader の第2段階 (ディスクにドロップ or メモリにロード) を検出できるかもしれない。しかし、マルウェアを別の言語で書き換えると、既存のシグネチャが機能しない可能性が高いため、防御を回避される可能性が高まる。BlackBerry によると、Go / Rust / Nim / DLangで書かれた、注目すべきマルウェアが存在するという。現時点で、その発生は稀だが、主流を占めるのは Go だという。これらの比較的珍しい言語は、その背後にいる開発者に対してメリットをもたらす。

2007年に Google が開発した Go は、C言語ファミリーに属しているが、よりシンプルな構文を持っている。すべての主要 OS でクロス・コンパイルが可能であり、Android / JavaScript / WebAssembly にも対応している。Nim は、C / C++ / JavaScript などの複数の言語へ向けてにコンパイルできる。DLang は、C言語の構文を改良したものであり、クロスコンパイルが可能で、習得が容易だとされる。Rust は、オーバーヘッドが少なく、パフォーマンスが良く、一般的な言語に見られるペイン・ポイントの回避に役立つとのことだ。

攻撃者が隠れ方を変えると、防御者も探し方を変える

研究者が指摘するように、一般的ではない言語を採用しているのは、マルウェア開発者だけではない。近年では、セキュリティ・コミュニティにおいても、これらの言語がレッドチームの攻撃用ツールの実装で採用され、その多くがオープンソースとして公開されている。この報告書では、昨年に発生した FireEye への、不正侵入インシデントを紹介している。この事件は、国家に支援される攻撃者が、セキュリティ企業からレッドチーム・ツールを盗み出したというものだ。

これを受けて、FireEye はステートメントと GitHub リポジトリを公開したが、そこには盗まれたツールを特定するための検出シグネチャも含まれていた。そのリポジトリを参照すると、FireEye のレッドチームは、一般に公開されているツールと、Go / DLang / Rustなどの複数の言語で書かれた自社製ツールを組み合わせて、使用していたことが判明する。たとえば Go は、BlackBerry のリストの中では最も若い言語だが、レッドチームでは広く採用されており、数多くの攻撃的なセキュリティ・ツールが、Go 用に書き換えられ、また、専用に開発されている。

FireEye レッドチームによるツールとしては、マルチ・プラットフォームの Go リモート・アクセス・トロイの木馬 (RAT) の作成が明らかになっている。この言語は、Bishop Fox の敵対者エミュレーション・ツールである、Silver にも搭載されている。人気の C2 フレームワークである Merlin は、ネイティブとしてクロス・プラットフォームに対応するため、すべてが Go で書かれている。

研究者たちは、大手セキュリティ企業の参入は、あるプログラミング言語やテクノロジーが、主流になる道筋が整ってからになると指摘する。また、解析のためのツールやテクノロジーは、”新しい言語で書かれたマルウェアがある程度飽和状態になる “まで、この業界では開発されないことが多いとも指摘する。このように、あまり知られていない言語で書かれたマルウェアは、一般的で成熟した言語で書かれたものとは、同じ割合で検出されないのが普通だと、研究者は指摘する。現時点において、攻撃者は感染プロセスの最初の段階を、新たな言語で変更しているだけだ。したがって、キャンペーンのコアをなすトレンドではないが、セキュリティ・チームはとしては、これらのあまり知られていない言語のリスクと、それがどのように防御に影響するかについて、話し合うことが重要となる。

6月にポストした「2021年 Q1 に検出されたマルウェアの 74% は従来からの防御をすり抜ける」という記事で、シグネチャ・ベースのセキュリティ・ツールはもう古いと指摘されていたことが気になっていました。この記事では、その点が Go / Rust / Nim / DLang などのプログラミング言語と結び付けられていて、いまの攻防の状況が分かりやすくなります。Pulse Secure のスティルス・マルウェアなんて、見つけるのが難しそうですよね。その一方で、「SolarWinds ゼロデイの悪用により米防衛機関が標的に」を見ると、Microsoft 365 Defender は異常プロセスを検知していることが分かります。アンチ・マルウェアのアーキテクチャも、静的から動的へと様変わりしていくのでしょうか?

%d bloggers like this: