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


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

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

推薦する

「EternalBlue ダウンローダー トロイの木馬」は、ユーザーのマシンを使用して Monero を採掘し、拡散するためにフィッシング メールを追加します。

出典: テンセント ユジアン 脅威インテリジェンス センター編集者注: 元のタイトルは「フィッシング...

CCTVがブロックチェーン詐欺を再び暴露:国内の仮想通貨取引プラットフォーム6つが今年閉鎖

12月10日、CCTVの最新報道によると、2019年以降、新たに発見された国内の仮想通貨取引プラット...

米国のグローバル投資会社がグレイスケールファンドを通じて暗号通貨への投資を拡大

テキサス州に拠点を置く投資運用会社USグローバル・インベスターズは、すでに金、鉱物、貴金属、石油、そ...

WAVES ICOは初日に200万ドルを調達

以前、WAVESがICOを実施する予定であると報告しました。現在、WAVES ICOが開始され、非常...

ブロックチェーン技術は、次のGoogleを生み出すだけではない

フレッド・ウィルソンはシリコンバレーのトップベンチャーキャピタリストであり、有名なブロガーです。ベン...

フィンランドの都市、交通分野でブロックチェーンをテストするために240万ユーロを受け取る

クレイジーな解説:欧州地域開発基金の割り当てを担当するEU組織INTERREG Central Ba...

クレイジーなワンケコイン調査:Xunleiと暗号通貨プレイヤー間の仮想戦争と利益の賭け

午後4時11月21日東部時間午後11時30分、ナスダック上場の中国株、迅雷は13.01%の大幅上昇で...

洪水期の決戦:大量の鉱山労働者が雲南省、貴州省、四川省へ移動

四川省の山奥の川はすでに増水している。あと3か月で洪水期が到来し、水力発電のコストは20セントを超え...

ビットコインブロックチェーン技術開発会社Nchainが業界最大規模の買収で買収される

Golden Finance News -先週、「ビットコインとブロックチェーン技術に基づく研究開発...

世論調査によると、エルサルバドル人の大半はビットコインの導入に消極的

原題: 世論調査によると、エルサルバドル人の大半はビットコインの採用に消極的である 出典: Tech...

韓国政府はビットコイン取引を合法化し、詐欺的な取引所を取り締まる計画

韓国政府と地元の金融規制当局は投資家に対し、偽の暗号通貨やビットコイン取引所には注意するよう警告した...

サファイアテクノロジーズ、他の目的ではなく暗号通貨専用のGPUをリリースへ

Golden Finance News -最近、コンピューター ハードウェア会社 Sapphire ...

ビットコイン半減期のジレンマ:マイニングマシンの98%が時代遅れになり、電子廃棄物の規模は1万トンを超える

ビットコインのマイニングは依然として利益を生む産業ですが、環境への悪影響を過小評価することはできませ...