ざっくりと理解する Web3セキュリティ:漏洩,詐欺,攻撃~Web3とは何か? Web3の世界で起きている脅威とは?~
次世代のワールド・ワイド・ウェブとして提唱されている概念である、Web3。従来のWeb2.0と比較されることも多いものの、まだまだ情報収集中という方も多いのではないでしょうか。今回はWeb3をこれから知り、ビジネスに活用していきたいという企業の方を主な対象に、Web3の基礎からセキュリティ脅威などを大まかに解説します。今回は、Web3初心者の方やビジネス活用を検討している企業の方向けに、「Web3とは?」「Web3における脅威」といったトピックを、入門編としてざっくり理解できるような内容でお届けします。
目次
- Web3とは?
- Web1.0~3.0までの変遷
- トークン
- ウォレット
- Web2.0とアーキテクチャの違い
- Web3におけるサイバー脅威
- 秘密鍵の漏えい
- マルウェア
- フィッシング
- NFTウォッシュトレード
- OWASP Smart Contract Top 10
- 整数オーバーフローおよびアンダーフロー
- リエントランシー攻撃
- まとめ
Web3とは?
Web1.0~3.0までの変遷
まずは全体感をつかむために、Web1.0~3.0までの変遷をまとめました。Web1.0は一部の企業や人がホームページで一方的に情報を発信し、ユーザーがそれをNetscapeブラウザを使って検索して読むという、Read Onlyが主流の時代でした。
Web2.0からはユーザーもSNSやYouTubeの投稿などができるようになり、双方向のやり取りが始まりました。一方で、多くのデータが巨大プラットフォーマーであるGAFA(現GAFAM)のクラウドに一極集中したのです。また、従来は各種ログインのIDやパスワードはサービスごとに使い分けられていましたが、現在ではOAuthによって簡単に共通化でき、これもGAFAMにデータが集中する要因の1つになっています。
では、現代のWeb3はどうなのでしょうか。まず大きな特徴として、データの所有権が自分自身に戻ってくることが挙げられます。双方向のやり取りがある点は変わっていませんが、Web3.0の図では、Web2.0で図の中央に位置していた巨大プラットフォーマーがいなくなっています。もちろん突如として存在が消えるわけではありませんが、データの所有権がユーザーに戻ることで徐々にその影響が弱まるということです。結果、Web2.0のRead+Writeに加え、Web3.0にはOwn(所有する)が加わります。
具体的には、これまで巨大プラットフォーマーのクラウドに蓄積されていたデータがそこから少しずつ離れ、ブロックチェーンや分散ストレージの方に保存されるようになってきます。トークン化されたデータがブロックチェーンに記録されると、その所有権の証明や、価値の交換も可能になります。
ここでWeb3の基本技術かつキーテクノロジーである、ブロックチェーンの上で動くスマートコントラクトについても触れておきます。ブロックチェーンといえば、通貨や決済手段などで利用されるビットコイン(以下、BTC)を思い浮かべる方もいらっしゃるでしょう。一方、Ethereum(以下、ETH)やSolana(以下、SOL)といったブロックチェーンもありますが、これらは単なる通貨ではなく、スマートコントラクトと呼ばれる、自動化された契約を実行できる汎用的なプラットフォームとなっています。
スマートコントラクトはプログラムコードとして書いた契約条件に従い、自動的な取引や契約を実行可能にします。つまり中間業者が不要になるので、透明性と効率が向上するわけです。たとえばスマートコントラクトを活用した分散型金融サービスDeFiでは、銀行や証券会社いった中央集約的な機関を介さずに、ローンを組んだり取引したりできます。金融取引の透明性が増すだけでなく、銀行口座を持っていない、あるいは持てない地域の方々でもアクセスが可能になることで、金融業界の世界観は大きく変わります。Web2.0まではOAuthによるログインが主流でしたが、今後は自分のデータが入ったウォレットをつなぐ、ウォレットコネクトを利用可能になります。
トークン
次に、先ほど登場したトークンについて解説します。これはブロックチェーン上のデジタル資産で、ファンジブルトークン(以下、FT)・ノンファンジブルトークン(以下、NFT)・ソウルバウンドトークン(以下、SBT)の3種類に大別されます。
1つ目のFTは代替性のあるトークンで、BTCやETHが代表的です。たとえば、私の1万円札と皆さんの1万円札はまったく同じものなので、そのまま交換ができますよね。同様に、私の1BTCは皆さんの1 BTCと交換ができます。これが代替性で、要するにお金みたいなものです。
FTにはSOLやAvalanche上で実装されているAVAXのほか、ブロックチェーン上で規格に則って独自に作られたUSDC・USDT・JPYCなど、法定通貨に価値を連動させたステーブルコインのようなものもあり、取引や売買が可能です。さらにSTEPNのゲームの中で使えるGMTや、サッカーチームのFC琉球がファン向けに発行しているトークンであるFCRなど、上場しているものに関しては法定通貨からコインやトークンに換えることができます。
2つ目のNFTは、NTとは逆で代替性がありません。たとえば、有名な画家が描いた絵は一点ものなので、まったく同じものとの交換は不可能です。アート・ゲームアイテム・会員権・チケット・ファン向けコレクションといった替えがきかないものも同様です。
NFTには、その文化を牽引したとして有名なCryptoPunksやBored Ape Yacht Club(BAYC)と呼ばれるコレクティブなものがあります。これらは1つひとつがユニークであるため、基本的に他のトークンなどとの交換はできず、1個あたりが億超えの値段で取引されるなど、投機的な目的でも利用されていることが特徴です。また、日本ではANA社やCASIO社のG-ShockがNFTを発行するなど、金融以外の業界でマーケティングに活用されている例もあります。こうした動きによって、企業がお客様やファン向けのNFTを発行するという世界は少しずつ広がりを見せています。
3つ目のSBTはNFTと同様に代替性がなく、学歴・活動履歴・免許証のように、個人に紐づいています。そのため、他人への譲渡はできません。
まとめると、FTはお金のようなもの、NFTはユニークなデジタルアイテム、SBTは個人の証明書ということです。
ウォレット
資産としてのトークンは、ウォレットに入れて管理をします。そして、このウォレットは「カストディアル」「ノンカストディアル(セルフカストディアル)」「セミカストディアル(ミックスドカストディアル)」の3種類に大別できます。
カストディアルは図に記載のあるような暗号資産の交換取引所で、カストディアンことプロバイダーが秘密鍵を管理するタイプのウォレットです。セキュリティ面に関して言えば、利用者は資産を自分で管理を省ける反面、プロバイダーがハッキングされた場合には自分の暗号資産を盗まれてしまいます。実際、過去にハッキングによって大量の暗号資産が盗まれる事件がありましたが、未だに全額は返金されていません。
ノンカストディアルは、ユーザー自身が秘密鍵を管理するタイプのウォレットです。たとえば、METAMASKやphantomといったソフトウェアウォレットが該当します。もう少し安全に秘密鍵を管理したいユーザーは、ARCULUSやLedgerといったハードウェアウォレットを使うという選択肢もとれます。しかし、暗号鍵の管理は一般ユーザーには敷居が高いため、ユーザビリティの課題はあります。
セミカストディアルは先述した2つの長所を併せもっており、プロバイダーとユーザーがそれぞれ部分的に秘密鍵を管理します。単一障害ポイントがないことで、片方に問題が生じてももう片方でカバーできるので、安心です。代表的なものとしては、Fireblocksやzengoが挙げられます。
Web2.0とアーキテクチャの違い
続いて、Web2.0とWeb3の違いをアーキテクチャの観点から説明します。
Web2.0では、送金処理などのビジネスロジックはアプリケーションサーバで処理のうえ、ユーザーの情報や購入履歴はSQLやMongoDBといったデータベースに保存されていました。
一方、Web3ではブロックチェーン上にデプロイされたスマートコントラクトがビジネスロジックを処理し、データはブロックチェーン上やIPFSやSwarmなどの分散ストレージに保存されます。一般的には、ユーザーがブラウザとMETAMASKのようなウォレットを使ってスマートコントラクトにリクエストを送る際に、ノードプロバイダーを間に挟みます。ユーザーがブロックチェーンと直接的にやり取りをするのは敷居が高いため、JSON-RPCが使われます。また、スマートコントラクトは一度コンパイルしてデプロイするとコードを変更できないため、高い透明性と信頼性を誇ります。これがWeb3の大きな特徴の1つです。
とはいえ、一度デプロイしたコードに不具合や脆弱性が見つかることもありますし、機能追加をする際にどうするかといったセキュリティ面の課題もあります。その対策として活用されるのが、スマートコントラクトの手前に設置されるプロキシコントラクトです。これがあることで、仮に脆弱性が見つかったり機能追加をした場合には、既存のスマートコントラクトを切り離し、新しいロジックコントラクトの方に切り替えられます。
総じて、Web2.0ではデータが1ヶ所に集まっており、Web3ではブロックチェーンなどを通じて分散ストレージに保存されているというイメージです。
Web3におけるサイバー脅威
秘密鍵の漏えい
ここからはサイバー脅威の話に移っていきます。まずは、実際にあった2つの事件をご紹介します。1つ目は、Web3ゲームのプラットフォームであるGala Gamesで2022年に起こったものです。この事件ではGala Games管理者の秘密鍵がGithubで公開され、攻撃者がその鍵を使い、pGALAというトークンを10億ドル以上分も不正発行しました。
2つ目は、暗号資産取引所に流動性などを提供している、イギリスのWintermute社を狙った事件です。同社はProfanityというウォレットアドレスの生成ツールを利用していたのですが、攻撃者はこのツールの脆弱性を悪用して秘密鍵を推測し、約1億6千万ドル相当のUSDCを窃取しました。通常、ウォレットアドレスはランダムな文字列で構成されるため、把握は困難です。ところが、Profanityはウォレットアドレスの先頭に0を連続させたり、c0ffee(coffeeの応用)といった特徴的なアドレスを作れるツールであり、その点を利用されてしまいました。
しかし、このときはブロックチェーンの仕組みによって攻撃者のウォレットアドレスをセキュリティ会社の調査によって特定できました。つまり、そのウォレットからどのように資金が流れたかはすべて記録されており、それを可視化できたわけです。上図の左側は米Anchain.AI社のツールを使い、攻撃者が窃取したUSDC・USDT・DAIの流れを追ったものです。図を見ると、攻撃者はDeFiなどの分散型金融サービスに資金を移動させていたことがうかがえます。おそらく何らかの方法で資金を増やすか、マネーロンダリングを狙っていたのでしょう。このような追跡ができることも、Web2.0とWeb3の異なるポイントです。
また、この1件を通じ、「図の右側に書かれた0xe74~というアドレスは攻撃者のもの」というインテリジェンスが、米Anchain.AI社によって築かれました。似たものだと「攻撃者はこのアドレスを使っている」と分かるIPレピュテーションのサービスがありますが、Web3で参照されるのはIPアドレスではなく、ウォレットのアドレスということです。ウォレットアドレスは暗号資産がどの取引所、あるいは攻撃者に紐づいているかを示してくれ、現在はその蓄積されたインテリジェンスが商用サービスとして使われています。
マルウェア
次に、マルウェアです。一般的にはInfoStealerと呼ばれる、Luca StealerやRedLine Stealerといったものには、ブラウザにキャッシュされたID・パスワード・クッキーを盗む以外に、PCやスマートフォンにインストールされたウォレットの情報を盗む機能があります。また、Beaver Tailというマルウェアは、Web3開発者をターゲットにしてウォレットの情報を盗むものです。
Web3特有のマルウェアとしては、Laplas ClipperやRuby Clpperなどを含む、Clipboard Hijackerが挙げられます。これは攻撃者がターゲットのクリップボードを監視し続け、ウォレットアドレスがコピーされた瞬間に自らのアドレスに書き換えるという手口です。
下図のURLはどちらも「3N」で始まっていますが、よく見るとそれ以降は全然違う文字列です。このように、攻撃者はあらかじめさまざまなアドレスを用意しておき、ターゲットが使おうとしているアドレスと先頭が一致しているものを都度取り出します。そして、ターゲットはアドレスが書き換えられたことに気づかず、知らないうちに攻撃者の方に送金してしまうのです。
フィッシング
フィッシングについては、本質的には従来の脅威との違いはありません。たとえば下図の左上には3つのURLが書かれていますが、上の2つは偽物で、よく見るとeやgの文字にウムラウト(点)が付いています。これはドイツ語やフランス語などの他言語を使った単言語国際化ドメインです。
メールなどでここに誘導されるケースも多いですが、最近では、Googleの検索結果のトップに表示される広告がフィッシングサイトの入り口になっているパターンもあります。そして実際にアクセスすると、IDやパスワードなどを入力させられます。一方、 Web3のLedger社を装った偽サイトの場合は、ウォレットのリカバリーフレーズの入力を求められます。もし入力すれば、全財産を盗まれてしまうでしょう。
また、X(旧Twitter)を使って誘導する手口もあります。STEPNの運営を装ったアカウントも複数確認されており、偽アカウントに誘導され、フィッシングサイトでマルウェアをダウンロードさせられるといったケースも起きています。
NFTウォッシュトレード
ここからは、Web3に関わる不正行為のお話になります。まず、NFTウォッシュトレードというものがあります。これはいわゆる市場操作の一形態で、売り手が自らのNFTの売買を繰り返すことで不正に価値を高めるなど、実際の市場需要や取引量を偽装する手口です。これが行われると、第三者はそのNFTの価値が高いのではないかと錯覚し、不当に高い金額で購入してしまうリスクがあります。
色々な人に売られたコレクティブNFT「Azuki」でも、NFTウォッシュトレードがありました。しかし、不正な金額で購入した履歴はブロックチェーン上に残ってしまいます。上図のグラフは青い線がAzukiの最低価格推移を示しているのですが、グラフの右上を見ると、大きく外れた点があります。これが不正の痕跡であり、こういったものを追跡すればNFTウォッシュトレードは簡単に検知できます。
OWASP Smart Contract Top 10
SQLインジェクションやクロスサイトスクリプティングのトップ10を出しているOWASP Top10はご存知の方も多いと思いますが、そのスマートコントラクト版をご紹介します。図には全部で10個がありますが、今回はリエントランシー攻撃とアンダーフローについて簡潔に共有します。
整数オーバーフローおよびアンダーフロー
通常、8ビットの符号なし整数で取れる値は0から255までとなっています。今回は残高(以下、balance)を減少させる関数(decrease)と増加させる関数(increase)があったうえで、銀行の入出金を行う場合をイメージしてみてください。
balanceが0のときにdecreaseを呼ぶと、アンダーフローによってbalanceは255に戻ります。一方、balance残高が255のときにincreaseを呼ぶと、今度はbalanceが0になります。
スマートコントラクトに脆弱性を抱えていたBeautyChainというプロジェクトは2018年、攻撃者にその穴を突かれ、同プロジェクトで発行しているコイン(BEC)を大量に不正入手されてしまいました。簡単な脆弱性ではあったものの、非常に影響は大きかったようです。
リエントランシー攻撃
リエントランシー攻撃による、複数のスマートコントラクトでの実害も確認されています。こちらも、入出金後にbalanceを確認する関数を含む簡単なコードが書かれています。スマートコントラクトのコードはSolidityという言語で書くのが一般的ですが、balanceを減らす前に送金処理を行う実装だと、その送金処理の途中で出金要求を再度送れます。そしてこれを繰り返すと、実際の残高以上のお金を何度も引き出せてしまうというわけです。
まとめ
Web3の波は金融業界以外にも着実にやって来ており、皆さまの企業でも、ビジネスに活用し始める未来はそう遠くないはずです。秘密鍵の漏えい・フィッシング・マルウェアといった従来のセキュリティリスクをはじめ、NFTウォッシュトレードやスマートコントラクトの脆弱性など、考えるべき点も多くありますが、今回の講演でWeb3の雰囲気だけでも知っていただけましたら幸いです。
■AnChain.AIについて