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


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

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

推薦する

ビットコインとブロックチェーンの流行の中、米国商品先物取引委員会はデジタル通貨市場に注目し始めている。

ビットコインデリバティブへの市場参加者の関心が高まるにつれ、米国商品先物取引委員会(CFTC)は仮想...

NBA Botches、プロトコルの問題によりイーサリアムでのNFTローンチを中止

いくつかのバグにより、NBAファンは受け取る権利のあるNFTを入手できなかったが、リーグは補償すると...

ビットコインマイナーは深刻な半導体不足に直面する可能性があり、16nm以下のチップのコストは20%上昇する見込み

半導体チップの深刻な不足に対する懸念が再び注目を集めている。マレーシアからの報告によると、半導体メー...

最高のビットコインマイナー: Antminer S5 レビュー (パート 1)

今日はいい日だ。 Bitmain から最新のビットコイン マイニング マシン、AntMiner S5...

UASFは本当に拡大の行き詰まりを打破できるのか?開発者はマイナーにSegWitを有効にするよう強制したいのでしょうか?

ビットコインのコードに物議を醸す変更を加えることを目的とした実験的なアイデアが今週、新たな一歩を踏み...

採掘は止まらない、採掘は止まらない:Blackminer F2が登場

導入入力してください急騰と急落を繰り返す市場は、轟く川のようだ。上がっても下がっても、波に乗る人は必...

コインゾーントレンド: 今週のビッグデータに基づくビットコインの価格動向 (2017-01-20)

取引量は減少し、様子見ムードが高まっている1. 市場動向<br/>今日は2017年1月2...

昌吉県発展改革委員会:仮想「マイニング」に従事するすべての企業は6月9日14時までに生産を停止し、是正しなければならない

BlockBeatsによると、6月9日、昌吉市発展改革委員会は「仮想通貨マイニングに従事する企業を即...

Zcash のコンピューティング パワー製品 ZMC は、発売から 1 か月後に停止されました。その背後には何か他のものがあるのでしょうか?

デジタル通貨コミュニティで人気のプロジェクトであるZcashは、ビットコインとの類似性と高い匿名性に...

金融当局はなぜ中央銀行デジタル通貨を発行するのでしょうか?

この記事の著者は、中国人民銀行の参事官である盛松成氏と、中国人民銀行上海本部の調査統計研究部の江一楽...

Bitcoin Eraが再度の閉鎖発表を行いました。暗号通貨市場には他にどのような選択肢がありますか?

規制から政策実施まで、通貨市場にはGGがある9月4日から政府はトークンの発行を規制し始め、その直後か...

サイドチェーン、ドライブチェーン、ルートストックの双方向フック設計についてお話ししましょう

最近の技術論文では、双方向ペグを実装するためのさまざまなアプローチを分析しました。この記事では、双方...

国内ビットコイン取引は変動と上昇で盛り上がっている

FX168ビットコイン木曜日(12月17日)のアジア市場では価格が上昇し、昨日の下落分の一部を取り戻...

BSV生産削減、ハッシュレート競争の変更

カイル出典: 風潮ファイナンス4月10日午前8時48分、BSV(Bitcoin Satoshi Vi...

イーサリアム開発者:「私たちは大量のETHを破壊するつもりだ」

イーサリアムのコア開発者であるエリック・コナー氏は本日、待望のイーサリアム改善提案EIP-1559の...