Liskサンドボックスの脆弱性分析と解決策

Liskサンドボックスの脆弱性分析と解決策

背景

少し前に、BitSharesの創設者であるダニエル・ラリマー氏は、Liskシステムの一連の問題について疑問を呈した。ほとんどの問題は Lisk の創設者の 1 人である Max によって肯定的に回答されていますが (詳細はこちらを参照)、Max が回答していない、またはまだ解決策を提案していない問題が 1 つ残っています。

それがLiskサイドチェーンが動作する環境だとラリマー氏は語った。

「Lisk が直面する問題のほとんどは、高度にカスタマイズされた JavaScript 環境で解決できます。」

そうでなければ、Lisk のシステムは 2 つの大きな課題に直面します。

まず第一に、Lisk の現在のサンドボックス メカニズムは、サイドチェーン コードの権限を制限するのに十分ではありません。つまり、信頼できないコードを実行することができず、サーバーから重要な情報が盗まれたり、サーバーに直接損害を与えたりする可能性があります。

次に、サイドチェーン開発者に関して言えば、Lisk のサイドチェーン コードは完全に機能する JavaScript 環境で実行されますが、この環境には Math.random など、不確実性を引き起こす可能性のある関数がいくつか含まれています。 Lisk の公式開発ドキュメントでは、開発者に精神的な負担をかけるこれらの機能を避けることが求められていると特に指摘されています。カスタマイズされた JavaScript 環境であれば、不確実性を引き起こす関数は直接排除されるため、開発者はそれらの罠を回避するために余分な労力を費やす必要がありません。

Liskのサンドボックスのセキュリティ問題

まず、サンドボックスを使用する必要がある理由について説明します。サンドボックスは、クラウド コンピューティング プラットフォームで広く使用されているセキュリティ対策です。これは、アプリケーション コードの権限を制限し、アプリケーション コードの恣意的なアクセスやシステムの損傷を防ぐことを目的としたアクセス制御メカニズムです。クラウド コンピューティング プラットフォームでは、アプリケーション コードはさまざまなサードパーティ開発者によって実装されますが、そのコードは信頼できません。サンドボックスは、これらのアプリケーション コードが限られたことだけを実行できるように、分離レイヤーを提供するために必要です。

Lisk は、ブロックチェーン分野のクラウド コンピューティング プラットフォームに非常に似ています。いくつかのサービスを提供しており、サードパーティの開発者がこれらのサービスに基づいて独自のアプリケーション (dapps) を構築できるようにしています。
したがって、Lisk には、dapps の作成者が悪事を働けないようにするためのサンドボックス メカニズムも必要です。 Lisk のアプローチは、この目標を達成するためにカスタマイズされた Node.js 環境を提供することです。
具体的な実装はこのコードにあります。https://github.com/LiskHQ/lisk-node/blob/v0.12.14-lisk/src/node_sandbox.cc

いくつか分析してみたところ、このサンドボックスはその名前に値しないものであることがわかりました。プロセス間通信を実現するためにパイプを使用するだけであり、その方法は回りくどいものです。 Node.js のプロセス間通信は JavaScript コードを通じて直接実装できますが、なぜそれを実装するために C++ を使用するのでしょうか?

この疑問といくつかの期待を抱きながら、私は自分で実験をしてみました。

まずlisk-cliを使ってhello worldサイドチェーンを作成します

lisk-cli dapp -a

次に、サイドチェーンプログラムの入り口にコードを追加しましたdapps/<dappid>/index.js

console.log(require("fs").readFileSync("../../config.json"))

次にそれを実行すると、このサーバーマスターノードの受託者のパスワードがすべて取得されます

"forging": {
"secret": [
"wKyoJM1vS4ucHmWvxDSdcpC23mJwqfg3G6MKZoXaFfcnWHTqo7",
"2aTWYPpQidVunxTg3y8YESYps7za6f9d4wYn9Gy2GuGnE7JX7V",
"65uZNjL36Bdg2tkJnueYkd2n6YPe76fpdeYtgu7fso1m385mwD",
…………

案の定、このサンドボックスは隔離の役割を果たさず、管理者権限を持っていたため、ハッカーに扉を開けているのと同じでした。

Lisk システムには第 2 レベルのパスワードがあると言う人もいます。たとえ第 1 レベルのパスワードを入手したとしても、お金を盗むことはできません。

Linux 独自の権限メカニズムにより、サイドチェーン コードに低レベルのユーザーを割り当てて、他のユーザーのファイルにアクセスできないようにすることができるという人もいます。

これらは一時的な解決策に過ぎず、根本的な解決策ではありません。根本的な解決策は、サンドボックスをその名前にふさわしいものにし、Lisk が構想したように真の環境分離を実現して、サイドチェーンのコードが外部から完全に不明になるようにすることです。

解決

では、真のサンドボックスを実現するにはどうすればよいでしょうか?解決策は多数あり、Node.js をスキップして v8 エンジンを直接使用したり、Windows システムの SetWindowsHookEx などのプロセス レベルの権限制御を使用したりすることができます。もちろん、Lisk は現在、Windows ウォレットのフルバージョンをサポートする予定はないため、seccomp テクノロジは Linux システムで使用できます。
ここではより簡単な方法として、nodejs に付属する vm モジュールを使用します。

最初のステップはネイティブJavaScript仮想マシンを作成することです

var vm = require('vm');
var context = vm.createContext();
vm.runInContext(sideChainCode, context);

これらのコード行により、サイドチェーン コードの分離が完了します。 sideChainCode では純粋な計算ロジックのみが実行でき、v8 エンジンに組み込まれている少量の JavaScript 標準ライブラリのみが使用できます。 setTimeout や console.log すらありません。

追加の作業が必要です。

たとえば、ランタイム環境にsetTimeoutとclearTimeoutを追加します。

context.setTimeout= function(fn, delay) {
if (typeof(fn) == 'string') {
setTimeout(new Function(fn), delay)
} else {
setTimeout(fn, delay)
}
};
context.clearTimeout = clearTimeout;

サイドチェーンログをメインシステムに転送するログ印刷機能を追加しました

global.print = send.bind(global, 'stdout');
global.console = { log: send.bind(global, 'stdout') };
global.process = {
stdout: { write: send.bind(global, 'stdout') }
};
global.postMessage = send.bind(global, 'message');

さらに、不確実性を引き起こす機能を無効にすることもできます

global.Math.random = undefined;

これらすべてが完了すると、サイドチェーン コードへのアクセス権は狭い範囲に制限されます。 require、fs、http など、Node.js に組み込まれている標準ライブラリは使用できません。

これにより、セキュリティの目的は達成されますが、機能上の問題という別の問題が発生します。それらの追加ライブラリは使用できず、js 標準ライブラリのみでは不便すぎます。多くの複雑な機能は、特に require なしでは実装できず、モジュール化すら不可能です。

したがって、次のステップが必要です。

ステップ2 webpack

Webpack はもともと、フロントエンド プロジェクトのモジュール管理に使用されていた、フロントエンド プロジェクトでよく使用されるパッケージング ソリューションでした。多くの人は、webpack がバックエンドにも適用可能であり、node_modules 内のライブラリや nodejs の組み込みライブラリの一部を一緒にパッケージ化できるという事実を見落としています。

つまり、UI に関連するものを除く、フロントエンドで使用できるすべての js ライブラリ (async、bytebuffer、crypto、js-nacl、bignum など) は、サイドチェーン サンドボックスでも使用できるため、サイドチェーンには十分です。
ファイル システム、マルチプロセス、ネットワーク モジュールなどの使用できないライブラリは、まさに私たちが廃止したいものです。

vm + webpack の組み合わせは完璧です。

これは、常に変化するフロントエンド技術が JavaScript 言語にもたらすメリットであり、Ethereum の Solidity などの新しい言語では実現できないものでもあります。

しかし、まだ仕上げが必要です

ステップ3 障害物を取り除く

現在、サイドチェーン コードのいくつかの場所では、多くの依存関係を伴う ed2curve などの比較的複雑なライブラリが使用されています。それは不要だと考えています。この部分の機能はメインチェーンで提供され、プロセス間通信を通じて API の形式でサイドチェーンに提供されます。

これにより、サイドチェーン コードの負担が軽減され、サイドチェーン開発者の作業が容易になります。これらのコードがフレームワーク全体に与える影響は非常に小さく、無視できますが、それらが依存するライブラリは、サンドボックス環境では許可されていない操作も含め、コード量の半分以上を占めています。

分析の結果、 modules/api/crypto.jsの2つの関数を無効にするだけでよいことがわかりました。

Crypto.prototype.encrypt
Crypto.prototype.decrypt

また、 js-naclライブラリは fs モジュールに依存していますが、関連する関数は使用されません。一時的に手動で修正することで、fs 関連のコードが削除され、正常にパッケージ化されて実行できるようになります。

最後に、完全なサイドチェーン プロジェクトとメインチェーン フレームワークのキー コードをここにパッケージ化しました。 http://o7dyh3w0x.bkt.clouddn.com/asch-sandbox-solution.tar.gz

これが Lisk 開発チームの参考となり、サイドチェーン アプリケーションの登録を開始する前に脆弱性を修正できるようになることを願っています。


<<:  「サトシ・ナカモト」を名乗るライト氏がビットコインとブロックチェーンの特許を数百件申請、特許戦争勃発か

>>:  ビットコイン: 最高のブロックチェーンアプリケーション

推薦する

イーサリアムの平均および中央取引手数料が6か月ぶりの低水準に

1月10日から、イーサリアムエコシステムの取引手数料は下落局面を迎え、平均および中央値の取引手数料は...

世界をリードする金融イノベーション企業R3がブロックチェーン協力のるつぼとなった経緯

R3 の CTO である Richard G. Brown 氏はブログ記事で、ブロックチェーン技術を...

【Filecoinウィークリーレポート-62】カウントダウン1日目、宇宙開発競争への準備は順調に進んでいるか?

スティーブン・リーとアイリスが共同編集【プロジェクト紹介】 Filecoin は、クラウド ストレー...

Asus、暗号通貨マイニング用グラフィックカード2種をリリース

世界最大級のテクノロジーハードウェアメーカーの一社が、暗号通貨マイニング市場向けの新しい GPU の...

趙長鵬の釈放は、次の暗号通貨強気相場を引き起こすことができるか?

何も予想外のことが起こらなければ、かつて中国一の富豪だった趙長鵬氏は、現地時間9月29日に米国の刑務...

マイニングマシンウイルス警告

洪水の季節が近づいています。積極的に展開しているときに、あるグループの人々が無償で何かを手に入れよう...

世界のリスク資産にとって「最も暗い瞬間」はまだ来ていないかもしれない

世界的なリスク資産は今年初めから大きな変動を経験しています。リスクセンチメントの後退により、米国株と...

テンセントセキュリティレポート:デジタル通貨へのハッカー攻撃により、今年上半期に20億ドルの損失が発生

テンセントセキュリティが提供したデータによると、デジタル通貨に関連するハッカー攻撃の件数は2013年...

NFT ブームが到来。チャンスをつかむが、リスクにも注意する

最近、NFT は長らく低迷していた暗号資産市場に活力を吹き込み、数十倍の価値を持つ新しく発売された ...

これが RX 480 不足の原因でしょうか?ライブ採掘する鉱夫

過去数年間のビットコインの人気により、多くのプレイヤーが「マイナー」になりました。これらのプレイヤー...

暗号通貨の分野にランクがあるとしたら、あなたは「ブロンズ」ですか、それとも「キング」ですか?

2017年から2018年にサークルに参加した友人がいる場合、ブロックチェーンポーカーデッキをまだ覚...

IBMと米国食品医薬品局、ブロックチェーンを使って医療データを共有する協力協定を締結

IBM Watson Healthは、ブロックチェーン技術を使用して医療データを取引するための安全で...

EUはテロ資金源を断つためにビットコイン管理を強化する計画

テンセントテクノロジーニュース、11月20日、ロイターが入手した草案文書によると、EU諸国はテロリ...

ブロックチェーン 2.0 (パート 2): 金融サービスにおけるブロックチェーンの応用に関するケーススタディ

ブロックチェーン業界の重要な事業は、デジタル通貨を従来の銀行や金融市場と結びつけることです。 Rip...

サムスンはビットコインマイニングにますます関心を持ち、コア技術を中国企業にのみ提供している。

少し前、サムスンが何年も前に発売された大量の古い Galaxy S5 携帯電話を使って、特別なビット...