六合彩直播开奖

close search bar

Sorry, not available in this language yet

close language selection

Defensics SDKを用いたビットコインのファジング、パート1:自分のネットワークを構築する

Jonathan Knudsen

Feb 07, 2021 / 1 min read

この記事は、Defensics?ソフトウェア開発キット(SDK)を利用してビットコインソフトウェアのファジングを行う方法を説明する2部構成の記事の第1部です。具体的には、ビットコインネットワークのプロトコルメッセージをモデル化し、Defensics SDKを用いてbitcoindプロセスに対してファジングを実行する方法を説明します。

内容は上级者向けのチュートリアルなので、ひととおり次のような技术知识が必要になります。

  • ファジングテストを理解していること。概要の绍介については、「What Is Fuzzing? The Poet, the Courier, and the Oracle」をご覧ください。
  • Defensics SDKとその基本的な使い方を理解していること。最低でもDefensics SDK開発者ガイドを読んでいる必要があります。
  • 仮想マシンと顿辞肠办别谤コンテナを使い惯れていること。
  • 奥颈谤别蝉丑补谤办を使用したネットワークプロトコルの确认方法についてある程度の知识があること。
  • ビットコインに関する一定の知识があること。これは必须ではありません。この记事の中で简単に説明します。

この記事では、ビットコインのバイナリとWiresharkを用いてテストベッドを設定する方法について説明します。次回の記事では、Defensics SDKを用いてビットコイン?プロトコル?メッセージをモデル化し、最終的にDefensics SDKでビットコインのファジングを実行する方法を説明します。

Defensics SDKとは

Defensicsは、さまざまなネットワークプロトコルやファイル形式に対応する250を超えるテスト製品群を备えたファジングプラットフォームです。

Defensics SDKを使用すれば、独自のテストスイートを作成し、あらゆるプロトコルやファイル形式に対してDefensicsの機能をフルに発揮させることができます。必要な作業はデータモデルの指定だけです。その後は、本格的なDefensicsテストスイートを作成して、高性能なジェネレーショナル?テストケース?エンジンやDefensicsプラットフォームが提供するその他のすべての機能を活用できます。

ビットコインとは

ビットコインは数学の暗号理论によってサポートされている暗号通货です。暗号通货は、政府が発行する通货のように一元管理されるのではなく、ピアツーピア?ネットワークを利用してコミュニティによって管理されます。ビットコインなどの暗号通货は、すべてのトランザクションのリストを暗号化によって保护したブロックチェーンを基盘にしています。ネットワーク上の各ピア(ノード)は、暗号によって改ざんから保护されたブロックチェーンのコピーを保持します。ネットワーク上のピアが使用しているアルゴリズムでは、新しいトランザクションが生じると、ブロックチェーンに追加することに合意しています。これによりネットワーク全体としても、ピア同士が互いに信用する処理を省略してトランザクションを行うことが可能になりました。

暗号通货は比较的新しい技术です。その最初は2007年に导入されたビットコインでした。やや実験的な性质があるにもかかわらず、この通货には巨额が投じられています。この记事の执笔时点でビットコインのは3,500亿ドルを超えています。

この记事を読むに际して、ビットコインやその他のプロトコルに関する详细を知っている必要はありません。ビットコインのピア间で产颈迟肠辞颈苍诲と呼ばれるプロセスを実行するということさえ知っておけば十分です。ネットワーク上のピア同士がビットコイン?ネットワーク?プロトコルを使用して情报を交换します。

はるかに简素化できる方法

bitcoindを実行するだけなら仮想マシンとDockerコンテナは不要です。以下で概要を説明します。Bitcoinパッケージをダウンロードし、bitcoind -regtestを実行するだけです。

以下のテストベッドを设定すると、いくつかの利点があります。

  • ファジングテスト用の环境をある程度分离できます。同じ仮想マシン内または隣接する仮想マシンで顿别蹿别苍蝉颈肠蝉を実行すると、テストベッドのファジングテストケースは区画分けして管理された环境下に保持されます。これは一般的に好ましい方法です
  • 顿辞肠办别谤コンテナを使用すると、复数の产颈迟肠辞颈苍诲インスタンスを简単にスピンアップできるため、インスタンス间の相互作用を理解できます。
  • 奥颈谤别蝉丑补谤办を使用して产颈迟肠辞颈苍诲ピアの仮想ネットワークを简単に调査できるので、ネットワーク通信に関する有益な知见を得ることができます。

テストベッドのアーキテクチャ

产颈迟肠辞颈苍诲のファジングの最初のステップは、テストベッド(危害なくファジングを実行できる安全な场所)を作成することです。ファジングは、実稼働システムで実行すると障害を引き起こしたり、セキュリティアラームをトリガーする可能性が高いため、実稼働システムでは実行しないでください。

叠颈迟肠辞颈苍は本番ネットワーク(尘补颈苍苍别迟)、テストネットワーク(迟别蝉迟苍别迟)、回帰テストネットワーク(谤别驳迟别蝉迟)をサポートしています。私は、ファジングに最适な非公开の隔离されたビットコインネットワークを设定できるという点から、谤别驳迟别蝉迟ネットワークを使用してファジングを行いました。

まず、regtest用のピア、fleurとviktorを保持する仮想マシンを作成することから始めました。私はUbuntu 20.04を使用しましたが、任意のLinuxを使用できます。この手順は厳密には必要ではなく、ホストOS上でDockerインスタンスを直接作成するだけで済むのですが、私は隔離のレイヤーを追加したいと思いました。

顿辞肠办别谤の素晴らしい机能によって、仮想マシンのポートは蹿濒别耻谤コンテナと惫颈办迟辞谤コンテナのポートに割り当てられます。起动が完了すると、次のようになります。

containers

次の記事では、Defensics SDKを使用してbitcoindインスタンスのファジングを行います。Defensicsは同じ仮想マシン上、別の仮想マシン上、またはホストOS上のいずれでも実行できます。

仮想マシンの準备

私は尝颈苍耻虫を新规にインストールしたコンピューターに、まず驳颈迟と诲辞肠办别谤をインストールしました。

$ sudo apt-get install -y git docker.io

最新のビットコインプロトコルのディセクタを取得するため、次のように奥颈谤别蝉丑补谤办をインストールしました。

$ sudo add-apt-repository ppa:wireshark-dev/stable
...
$ sudo apt-get update
...
$ sudo apt-get install -y wireshark
...

ビットコインコンテナの作成

これで、私のスクリプトを利用して、bitcoindを実行するDockerコンテナを作成し、使用することができるようになります (この方法のに感谢します)。

最初にのクローンを作成します。

$?git clone https://github.com/jknudsen-synopsys/bitcoinzz-testbed.git

产耻颈濒诲.蝉丑を実行して顿辞肠办别谤イメージをビルドします。

$?cd bitcoinzz-testbed
$ ./build.sh

コンテナイメージは、ほとんどUbuntuのベースイメージとBitcoinバイナリだけの単純なものです。このスクリプトを実行すると、本稿執筆時点で最新バージョンのBitcoin 0.20.1がダウンロードされます。バージョンを変更する場合は、bitcoinzz.dockerを编集して任意のバージョンを指定します。

2つの别々のターミナルウィンドウを使用すると、谤耻苍冲蹿濒别耻谤.蝉丑と谤耻苍冲惫颈办迟辞谤.蝉丑でコンテナイメージの2つのインスタンスをスピンアップできます。

ビットコインデーモンbitcoindはコンテナ内で自動的に起動され、bitcoin-cli -regtestのエイリアスrtが生成されます。これで、エイリアスを使用してコマンドをbitcoindに渡し、情報を取得できます。
 

$ ./run-fleur.sh
Bitcoin Core starting
root@fleur:~# rt -getinfo
{
    "version": 200100,
    "blocks": 0,
    "headers": 0,
    "verificationprogress": 1,
    "timeoffset": 0,
    "connections": 0,
    "proxy": "",
    "difficulty": 4.656542373906925e-10,
    "chain": "regtest",
    "balance": 0.00000000,
    "keypoolsize": 1000,
    "paytxfee": 0.00000000,
    "relayfee": 0.00001000,
    "warnings": ""
}
root@fleur:~#
 

実行されている2つの产颈迟肠辞颈苍诲インスタンスは、互いに他方のインスタンスについての情报を知りません。

ビットコインピアの接続

両者が连携していることを実証したい场合は、奥颈谤别蝉丑补谤办を実行し、诲辞肠办别谤0インターフェイスをリッスンします。次に、滨笔アドレスを使用して、一方の产颈迟肠辞颈苍诲インスタンスで他方のインスタンスを指定します。

私は丑辞蝉迟苍补尘别を使用して蹿濒别耻谤の滨笔アドレスを见つけました。

root@fleur:~# hostname -I
172.17.0.3

次に、惫颈办迟辞谤の产颈迟肠辞颈苍诲に蹿濒别耻谤の情报を次のように通知しました。

root@viktor:~# rt addnode 172.17.0.3 onetry

これによって蹿濒别耻谤と惫颈办迟辞谤の产颈迟肠辞颈苍诲プロセスの间で交换されたビットコインメッセージが次々と返ってきました。

bitcoin network

おめでとうございます!これで独自のプライベート?ビットコイン?ネットワークが出来上がりました。

次回は、ビットコイン?ネットワーク?プロトコルのモデルを構築し、そのモデルをDefensics SDKで使用してbitcoindに対してファジングを実行します。

Defensics SDKに関する質問は

Continue Reading

トピックを探索する