AGAMAウォレットが自らハッキング攻撃でユーザー資金を保護

面白かったんですけど寄稿先でボツったので、こちらへ

ユーザー保護のため「攻撃」を行ったAGAMA

今月5日、AGAMAウォレットを運営するKomodoプラットフォームがセキュリティ通知を報告した。
古いウォレットアプリにバックドアがあるというセキュリティ研究者の報告を受けてのことだ。
攻撃者が、ウォレットに格納されている暗号資産を簡単に盗むことが可能になっていた。
これを受けて、Komodoチームはウォレットの脆弱性を利用し、ユーザーの資金を保護するために自ら「攻撃」を行い、資金を保護した。
保護された資金を見てみると、96 BTC約800万KMDとなっていた。
総計で 1200万ドル(日本円で約13億円)が転送された計算だ。
Komodoチームによる脆弱性に関する報告記事
komodo

発見の経緯

詳細を報じているZDNETの記事によれば、Agamaウォレットのバックドアは、セキュリティチームによるnpm JavaScriptパッケージリポジトリの監査中に発見された。
発見を報じるnpm の記事では、以下のような流れになっていたようだ。
・便利なパッケージ(electron-native-notify)をnpmに公開 ※この時点ではバックドアは含まれない
・使われるようになると更新を行い、バックドアが含まれたコードをアップロード
・ソフトウェア開発者(今回は Komodoチーム)がバージョンの更新を行う
今回 electron-native-notify の更新履歴を見ていくと、2019年3月6日に最初のバージョン 1.0.0 を公開し、10回以上もアップデートを続けていた。
こういったアップデートを続けていく行為は、開発者にとっては比較的一般的であると同時に、当該ソフトウェアやパッケージが活発に更新されていることを示すものだ。
攻撃手法としては一般的だが、開発サイクルにおける弱点を突かれた格好で、必ずしも Komodoチームを責めることもできないだろう。
その後 2019年3月8日には Komodoチームが実装に追加。その後、3月23日に悪意のあるコードが挿入され、4月13日に Komodo側でのアップデート(v0.3.5)が行われたため、実際にコードが利用されるようになっていた。

npmとは

Javascript に関してはご存知の方も多いと思うが、npm について知らない方がもしかしたらいるかもしれないので、念のため、一応簡単に解説をしておきたい。npm は、Javascript でソフトウェアの開発を行う際に使われる パッケージ管理ソフトだ。

Javascript はもともとブラウザ向けに開発された言語だが、node.js というサーバー側で動作する実装も一般的になってきている。
開発者は一般に、素早く、かつ安全に開発するため、広く使われているパッケージ(モジュール)、つまり部品を再利用することを好む。
そして、サーバー側の開発を行う際には、ソフトウェアを安定的に稼働させるため、パッケージのバージョンを固定したり、定期的にアップデートしたりといった作業が発生する。
こういった作業を簡略化するのが npm だ。ほか、Linux では yum や apt、PHP だと Composer などが知られている。

おわりに

今回、パッケージ管理ソフト npm の一般的な動作を逆手にとり、悪意あるコードを挿入するという手口が発覚したが、ユーザーの資金が無事に保護されたという点を考えれば、良いニュースと言える。
ユーザー側で防ぐことは簡単ではないが、不審な挙動を発見次第すぐに開発チームに連絡したり、開発チームの方であれば  npm チームと連携することで、迅速な対応が取れたという事例と考えることもできる。
もちろん、Komodoチームの迅速な対応、脆弱性を逆用するという技術力があってこその結果だ。
今後の彼らの発展にも期待したい。