11月30日、当社のセキュリティインシデント監視システムThunderForecastは、Ethereum上のトランザクション履歴をスキャンすることで、Loopringプロトコルへの攻撃を発見しました(ブログEN / CN)。結論として、この攻撃の根本原因は、sellTokenForLRC関数におけるアクセス制御の欠如でした。攻撃者は、当時の価格で48,849.2米ドルに相当する80.97 ETHを不正に取得しました。
2020年12月11日、当社の監視システムThunderForecastは、異常な取引レートで取引されている一連のトランザクションを報告しました。その後、当社の研究チームが開発したEthScopeシステムを使用してこれらのトランザクションを分析し、これが裁定取引目的でSeal Finance Protocolの脆弱性を悪用した攻撃であることを発見しました。
Sealとは?
Sealのホワイトペーパーで言及されているように、「SEAL - 主要なDeFiプロトコルトークン間の仲介役として機能し、その間の流動性を深める実験的なプロトコルです」。現在、Sealが他のさまざまな有名なトークン(UNI、YFI、USDT、SNXなど)と連携する10以上の流動性プールが存在します。ボーナスを獲得するには、投資家はLPトークンをSEAL報酬コントラクトに預け、Farmコントラクトのbreed()関数をトリガーして新しいSEALトークンを生成する必要があります。Farmコントラクトは各Sealプールにデプロイされており、コントラクト内のbreed()関数は新しいSealトークンを発行するために使用されます。breed()の設定では、Sealトークンの追加1.6%が発行されます。さらに、発行されたSealトークンの0.8%は別のトークンと交換され、残りのSealトークン0.8%が流動性としてプールに預けられます。しかし、breed()関数にアクセス制御が設計されていなかったため、誰でもこの関数をトリガーでき、この基本的な設計が報告された攻撃の根本原因となりました。
以下は、breed()関数の確認されたソースコードです。
function breed() external {
require(now / 1 days > today);
today += 1;
uint256 sealPairAmount = seal.balanceOf(address(cSeal));
uint256 tokenPairAmount = token.balanceOf(address(cSeal));
uint256 newSeal = sealPairAmount.mul(spawnRate).div(1e18);
uint256 amount = UniswapV2Library.getAmountOut(newSeal, sealPairAmount, tokenPairAmount);
seal.mint(address(cSeal), newSeal);
if(address(seal) < address(token))
cSeal.swap(0, amount, address(this), "");
else
cSeal.swap(amount, 0, address(this), "");
token.transfer(address(cSeal), amount);
seal.mint(address(cSeal), newSeal);
cSeal.mint(address(this));
}
詳細
攻撃者が利益を最大化するために、10のSealプールで攻撃ロジックを繰り返した攻撃トランザクションで、さらに詳細を明らかにします。以下の分析では、Seal-SNXプールで実行された攻撃に焦点を当てます。

3つのステップが関与しています。
- ステップ1:Seal-SNXプールで1,084 Sealを2,787 SNXにスワップします。取引レートは1 Seal = 2.57 SNXです。
- ステップ2:
Farmコントラクトでbreed()関数をトリガーします。この関数は13.08 Sealを発行し、10.20 SNXにスワップします。取引レートは1 SNX = 0.78 Sealになります。その理由は、プール内のSNXのほとんどがSealにスワップされ、SNXとSealの量の間に大きな差が生じているためです。次に、Uniswapの価格計算アルゴリズムに基づき、SNXはプール内で非常に価値が高くなります(価格が3倍以上に上昇)。 - ステップ3:Seal-SNXプールで2787 SNXを1100 Sealにスワップします。交換によりSNXの価格がさらに上昇したため、攻撃者はより多くのSealトークン(追加で16 Seal)を裁定取引しました。
損失をさらに測定および確認するために、攻撃前のブロック状態下で、当社のシステムEthScopeを使用してbreed()関数をリプレイしました。その結果、Farmは通常の呼び出しと比較して18個の追加Sealトークンを発行しました。攻撃者は16 Sealを奪い、プールには2 Sealしか残っていませんでした。
利益と損失
このトランザクションで、攻撃者は合計175 Sealを獲得しました。
攻撃の規模
2020年12月13日現在、オンチェーンで3つの悪意のあるコントラクト(0x49f93e、0x8b3710、0x0f20b6)がデプロイされ、22件のトランザクションが正常に実行され、4,247 Sealトークンがラップされました。当時の価格に基づくと、攻撃者はSealプロトコルの脆弱性を悪用して約58,467米ドルを獲得しました。Sealプロトコルの脆弱性は現在も攻撃を受けていることは言及に値します!
さらに、獲得したSealトークンのフローを分析した結果、約900 SealトークンがDEXに預けられ、残りは6つの異なるアドレスに分配されていることがわかりました。以下の図に示すように、これらのアドレスは、Seal FinanceおよびUniswap V2の流動性プールを除いて、すべてSealトークンのトップホルダーです。

終わり
EthereumのDeFiエコシステムの発展に伴い、さまざまなセキュリティ問題が徐々に浮上しています。実際、2020年12月13日までに22件のトランザクションを介してSealに相当な損失(58,467米ドル)を引き起こした攻撃の根本原因であるアクセス制御は、攻撃の背後にあります。
更新(2021/01/04)
2020年11月30日の最初の攻撃後、攻撃者は3番目の攻撃コントラクトをデプロイし、5回の攻撃を実行しました。最後の攻撃は2020年12月24日に行われ、取得したSealトークンはこのアドレスに転送されました。このプロセス中に、攻撃者は6,021 Sealトークンを取得しました。
タイムライン:
- 2020/12/11:不審なトランザクションが発見される
- 2020/12/12:分析完了
- 2020/12/13:Seal Financeに報告
- 2021/01/03:詳細を公開
- 2021/01/03:CVE-2021–3006を割り当て
BlockSecについて
BlockSecは、2021年に世界的に著名なセキュリティ専門家グループによって設立された、先駆的なブロックチェーンセキュリティ企業です。当社は、Web3の世界のセキュリティと使いやすさを向上させ、その大量採用を促進することに専念しています。この目的のために、BlockSecはスマートコントラクトとEVMチェーンのセキュリティ監査サービス、セキュリティ開発と脅威のプロアクティブなブロックのためのPhalconプラットフォーム、資金追跡と調査のためのMetaSleuthプラットフォーム、およびWeb3ビルダーが暗号世界で効率的にサーフィンするためのMetaSuites拡張機能を提供しています。
現在までに、MetaMask、Uniswap Foundation、Compound、Forta、PancakeSwapなど300社以上の著名なクライアントにサービスを提供し、Matrix Partners、Vitalbridge Capital、Fenbushi Capitalなどの著名な投資家から2回の資金調達で数千万米ドルを受け取っています。
公式ウェブサイト:https://blocksec.com/
公式Twitterアカウント:https://twitter.com/BlockSecTeam



