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チームの迅速な対応、脆弱性を逆用するという技術力があってこその結果だ。
今後の彼らの発展にも期待したい。

 

Raise the roof

今日は街中でデモやってました。

ダブリンは急激に増えすぎた移民や企業により、家の賃貸価格が高騰しています。

屋根を上げる、という合言葉は面白いですね。本当に困ってる人たちは面白くなんかないと思いますが。。。

Queen’s tart

タルト好きな私は前から狙ってたんですが、ようやく行くことができました。

左上はスモークサーモンのブレックファースト、下はニューヨークチーズケーキのタルトです。

右上はチャイラテ。

どれも素晴らしかった!

Cryptopia へのハッキング、その被害と詳細について

こちらのも昨日の記事と同様、ポシャったので個人ブログで。
1月13日から1月28日にかけて、Cryptopia が複数回のハッキングを受けました。このとき Cryptopia は 2度にわたって被害を受けてしまいましたが、その総額は 1600万ドルを超えるとされています。
警察機関が捜査に入り、メンテナンスの状態が続いていますが、このインシデントがなぜ発生してしまったのか、掘り下げつつ振り返ってみたいと思います。
まずはじめに、概要をおさえつつ、Cryptopia がハッキングを受けた時系列を振り返ってみましょう。
攻撃者は今回、6つのウォレットを用いたことが分かっており、これは Etherscan.io 上で Cryptopia Hack としてラベル付けされています。このラベルは Etherscan.io の labelcloud から一覧を確認することができます。今回の攻撃では、それぞれのウォレットは Cryptopia_Hack1 から 6 までナンバリングされています。
・タイムライン
次に時間軸を辿ってみましょう。1回目は、日本時間 1月13日 22:28:29 から転送が始まりました。このときは最初にコアウォレットから、19390 Ether が転送されました。
その後、続けて 76000以上に及ぶセカンダリウォレットから転送が続きました。攻撃者がメインで用いたウォレット( Cryptopia_Hack1 )にウォレット数だけトランザクションが記録されることになりました。並行して、Dentacoinや Oyster Pearl といったトークンも転送が行われました。Ethereum やトークンの転送は数日間、断続的に続きました。
一方、Cryptopia が公式にアナウンスを行ったのは 1/14 15:55 にメンテナンスを開始したのがきっかけでした。その後、1/15 17:00 にセキュリティブリーチについて報告があり、トークンの盗難があったことを認めました。
今回の調査を行った elementus によれば、資金が格納されていたコアウォレット、セカンダリウォレットそれらすべてについてコントロールを失っていたのではないか、とされています。つまり秘密鍵を盗まれた上、鍵を削除されてしまったのではないか、あるいは鍵を置いていたサーバーを乗っ取られたのでは、という推測が発表されています。
彼らは今回、Github 上で調査結果を発表していますが、盗まれた資金の金額や量、経路をまとめるだけでなく、1月21日 時点で引き続き盗難のリスクがあるウォレットについても cryptopia-losses.csv として指摘していました。
しかし指摘も虚しく、1月28日には同じことが起きました。このときも 17000以上の大量のトランザクションが発生し、約 1675ETH が盗まれました。2週間で資金が少し回復していたのは、マイニングリグなどがメンテナンス関係なく送り続けていたからではないか、という見方をされています。
2回目に盗まれた Ethereum は Cryptopia_Hack5 と 6 に転送され、最終的に Cryptopia_Hack2 と名付けられたウォレットに転送されました。これは 1回目に使われたものと同じであることから、一連の攻撃者は同じ人物あるいはチームとされています。
elementus が推測しているように、1月14日 時点で異常を検知してメンテナンスに入っているわけですから、それ以降も数日間攻撃が続き、さらに 1月28日に再度発生した攻撃に対策を講じられなかったのには、理由があるはずです。この状況は、ウォレットの秘密鍵が失われたのではないか、と考える根拠として十分でしょう。
しかし、冒頭で紹介した19390ETH のトランザクションの後にも、実は払い出しらしきトランザクションが記録されています。このことから、Cryptopia 側で利用している秘密鍵が削除されて使えなくなったわけではなく、払い出しシステムは 15時間ほどの間は動いていたのでは、と考えられます。
資金のほとんどは盗まれていて、メンテナンスに入った時点でEthereumの転送は終わっていたのですが、この時点で対策が打てれば2回目の攻撃は成功しませんでした。
これについては、サーバーが乗っ取られていたため対策が取れなかった、もしくは Crypopia 側の対処が遅かったために一切の対策ができなかった、このどちらかの可能性が非常に高いでしょう。
・各個人が取れる対策について
昨今、取引所をターゲットにした攻撃は苛烈さを増しています。もちろん内部犯も対策をすべきですが、スピアフィッシングや水飲み場攻撃など特定の人間をターゲットにした攻撃を防ぐことは簡単ではありません。
では、今後も同じようなインシデントは発生すると想定し、各個人が取れる対策はどのようなものがあるでしょうか?
ひとつは、取引所に必要以上のトークンを置かないというものです。
被害を受けたとしても、すべての資産を盗まれないよう、ダメージコントロールをするという策です。
そして、もし使うときは、なるべく迅速に取り出しましょう。
もっとも簡単な対策としては、たくさんの人に長く利用されており、かつ、自分が信用できると判断した取引所を使うことです。
技術的な視点で取引所の挙動を調べることは簡単ではありません。しかし、良い取引所ならば運用面など、その他の観点で見ても良い取引所だと言える確率が高いはずです。
サポートの返信が早い、メンテナンス発生時の報告がタイムリーに行われている、情報開示が迅速である、セキュリティインシデントを公開してきた実績がある・・・などでしょうか。
・さいごに
人間だって間違えますし、システムのバグも完全になくすことは難しいため、少しずつ改善を積み重ね、減らし続ける必要があります。
つまり、小さな積み重ねが信頼につながるのは、人間もシステムも同じなのです。
ブロックチェーンや暗号資産のエリアでは新しいサービスが日々作られては消えていますが、リスクを自分で見極める、その一助になれば幸いです。

QuadrigaCX の失われた ETH が見つかった件について

寄稿する予定で書いていたのですが、ポシャったので個人ブログで公開します。
QuadrigaCX の保有していた ETH などの資産について、CEO  Gerald Cotten氏が亡くなったため紛失したと言われていましたが、約60万ETH が見つかったというレポートがブログにて公開されました。
zerononcense が公表したレポートは、有名な Kraken取引所の Jesse Powell 氏が協力しているということもあり、十分なボリュームで解説されているため、少し見ていきたいと思います。
まず背景から。2月28日、Kraken 取引所の CEO はブログにて最大10万ドルにも及ぶ懸賞金をかけることを示しました。QuadrigaCX の顧客資金は 1億9000万ドルと見積もられていたことや、レポートでも触れられているように取引所で資金が保管されている見込みがあったことから、このような形に踏み切ったのでしょう。
実際、元社員などが、鍵や保管先の取引所一覧などを提供してくれるという可能性を考慮に入れていたと思います。
さて、その直後に公表されたレポートでは、12 の Ethereum ウォレットアドレスが記載されており、そのいずれも、QuadrigaCX の顧客のアドレスではないことが確認されています。
なぜアドレスが今になって見つかったのか、研究者が発見した情報について、順を追って見てみましょう。
レポートでは取引所におけるホットウォレット、デポジットウォレットの説明が含まれるものの、ここでは割愛します。
  1.  アドレス 0xd72709b353ded6c8068cc78988613587a4cae8de について
アドレス0xd72709b353ded6c8068cc78988613587a4cae8de は、Bitfinex のデポジット用ホットウォレットアドレスです。
一般に取引所は、アドレスを使いまわすことはあるものの、各顧客に対しユニークなデポジットアドレスを提供します。
  1. QuadrigaCX のホットウォレットアドレス
アドレス 0xb6aac3b56ff818496b747ea57fcbe42a9aae6218 は、QuadrigaCX のホットウォレットアドレスです。
このアドレスは宣誓供述書に基づいて確認されています。
  1. 大きな額のトランザクションを追いかける
アドレス 0x7ea5e875a386b66d11a0ad1866ca7b5f2745f049 からは、QuadrigaCX ホットウオレット 0xb6aac3b56ff818496b747ea57fcbe42a9aae6218 へのトランザクション 1 2 があります。
しかし、トランザクション 3 4 を見ると、同じアドレス 0x7ea5e875a386b66d11a0ad1866ca7b5f2745f049 から Bitfinex のデポジットアドレス 0xb6aac3b56ff818496b747ea57fcbe42a9aae6218 に対し、約1000ETH が転送されています。
  1. 考えられる可能性について
まず考えるのは、3. で見つけたアドレスが顧客のもの、つまり QuadrigaCX が生成したデポジット用アドレスではないか、ということです。
QuadrigaCX ホットウオレット 0xb6aac3b56ff818496b747ea57fcbe42a9aae6218 へのトランザクションが記録されていることから、顧客向けに生成されたデポジットアドレスかもしれないという推測が成り立ちますが、この説明は少なくともトランザクション 1 と 2 には合致します。
しかし、これは取引所の仕組みで否定することができます。
取引所は一般に、デポジットアドレスから顧客へのトランザクションを生成することはありません。
報告書に詳細はありませんが、QuadrigaCX のこれまでの膨大なトランザクションを確認した結果も、これを裏付けるとの記載があります。
つまり、顧客向けに生成されたアドレスであり、Bitfinex のデポジットアドレスに対し引き出しが行われた、という可能性は否定されます。
残る可能性は、QuadrigaCX が秘密鍵を使ってトランザクションを生成した可能性です。現時点でこれ以外の可能性はなく、99% 正しいだろうと言われています。
これと同様の調査を進め、Bitfinex と Poloniex、そして Kraken に多額のトランザクションを送信していたことが確認されました。
・もうひとつの発見
Exit Scam(出口詐欺)とも噂されている今回の件ですが、トランザクションを調査していくうち、CEO の Jennifer Robertson が亡くなったとされる 2018年12月9日以降、トランザクションはパッタリと途絶えていたことが分かりました。
各ウォレットに関して最後にトランザクションが生成された日時は、12月8日が最後となっているからです。(自動で生成されたとみられるトランザクションはいくつかありますが)
調査の結果として、各取引所には 649708 ETH が残っていると見積もられています。
転送を行った時点での価値はおよそ 1億ドル、現在の価値でも 9000万ドルに達します。
Bitfinex: 239240 ETH
Kraken: 84248 ETH
Poloneix: 326220 ETH
・事実と考察
著名な人々の意見や、確認されている事実についても追いかけてみましょう。
Coinbase の CEO は分析を行った上で 2/22 に出口詐欺である可能性は低いと言及しており、「取引所としては最古のひとつなので、出口詐欺だとすればもっと早くに発生していたはずだ」、とも述べています。
Binance の CEO は出口詐欺の可能性について言及していますが、詳細については追いかけていないので間違っているかもしれないとインタビューで発言していました。
また、3/13 に CEO の妻 Jennifer Robertson が供述した内容が公開されました。これによると、死亡した CEO Gerald (Gerry) Cotten は、2018年に発生した銀行との紛争において資金が枯渇しそうになった際、ユーザーへの送金を遅延させないために個人の資金を注ぎ込み、ビジネス継続のためにベストを尽くしていたと訴えかけています。
加えて、インドの病院も死亡診断を発行した事実、当時の状況などをパブリックに公開しており、Indiatimes が 2/7 付の記事で報じています。
これらを総合すると、出口詐欺だった可能性は低いと考えられます。
各取引所の資金が 12/9 以降動いていないこと、家族を残していること、異国の病院で亡くなっており状況が克明に記されているからです。
一方、資金の管理が粗雑で、現在まで回復できていない点は、暗号資産の問題点をも浮かび上がらせます。
秘密鍵は、セキュリティを考える上でただひとつの鍵である以上、それをむやみに誰かに渡せないということです。
これについては、NEM をはじめとしたいくつかの暗号資産ではマルチシグなどの仕組みが実装されつつありますし、今後も技術革新が続くことでしょう。
・おわりに
金額の大きさやマーケットへの影響を考えても、これらの資金が無事に QuadrigaCX に戻るよう、各取引所が協力してくれることは間違いないでしょう。
無事に QuadrigaCX の顧客に資金が返還されることを願って、本稿を結びたいと思います。