仮想通貨Monacoin(モナコイン)ってなに?

モナーコインの普及を切に願うサイトです

monacoindのセキュリティ対策について(その1)

time 2017/05/23

monacoindのセキュリティ対策について(その1)

sponsored link

よくある構成は危険な構成

今回はセキュリティのお話です。このブログで書いているfaucetアプリの開発手順もそうなんですが、巷に溢れる多くのfaucetはセキュリティ的にあまりよろしくない設計をしているように思われます。というのも、MONAを直接扱うmonacoindサーバがインターネット上に堂々と公開されてしまっているからです。

VPSでサーバを1台借りてfaucetを公開するケースを考えてみます。1台のサーバ上に、webサーバ(Apacheなど)を立て、同時にmonacoindサーバを動かしてモナコインネットワークに参加するケースです。図にするとこんな感じです。

シングルサーバ構成

青色の導線がfaucet利用者からApacheへのWebアクセス、緑色の導線がmonacoindからモナコインネットワーク(p2p)への参加を表しています。faucet利用者がwebサーバへアクセスしてボタンを押すなり何なりすると、monacoindからモナコインネットワークにfaucet利用者への送金リクエストが投げられます。承認されたブロックチェーンは随時monacoindへ同期されます。

よくある構成かと思いますが実はこれは危険です。

何が危険なのか

このとき、このサーバにはグローバルIP(図ではG-IP)というインターネット接続用のIP:239.X.X.Xが割り当てられており、faucetユーザやモナコインネットワークに参加している他のノードは、このグローバルIPに対してアクセスしてきます。したがって、もしこのグローバルIPに対して悪意あるアクセス(不正な侵入など)をされた場合、このサーバ上で稼働している全ての情報が危機に陥ることとなり、もしかしたらmonacoind上のウォレットに保管したMONAが盗まれてしまうかもしれません。

これは銀行で言うなら、顧客の手の届く範囲で受付員と金庫が配置されているような状態です。いくら鍵をかけているとはいえ、やはり客の目の前に金庫を置くのは無用心ではないでしょうか。金庫は顧客の手の届かないところに置き、受付員が要件を伺って必要に応じて入出金したほうが安全だと思います。

なぜならその金庫は必ずしも万全な金庫とは言えないからです。何かしらの欠陥(脆弱性)が見つかった場合、金庫は金庫の意味を成し得なくなります。

monacoindをインターネットから切り離す

つまり、受付員(Webサーバ)と金庫(monacoindサーバ)は分けた方が高セキュリティだということです。図にするとこんな感じです。

このように、Webサーバはグローバル領域(インターネットから接続できる領域)に配置し、monacoindサーバはプライベート領域(インターネットから接続できない領域)に配置することで、少なくともmonacoindがインターネットから直接攻撃を受けることはなくなります。

処理の流れとしては、faucet利用者のアクセスをWebサーバが受け付け、Webサーバがmonacoindサーバへ送金リクエストを投げる形です。この時の通信は、インターネットを介さずにローカルのネットワーク内で行われるため、各サーバにローカルで振られているプライベートIP(図ではP-IP)を使用します。つまり、Webサーバ(10.X.X.X)からmonacoindサーバ(10.Y.Y.Y)への送金リクエストです。

プライベート領域からはインターネット接続できない

さて、ここで1つ問題が生じます。プライベート領域に配置されたサーバはインターネットから隔離されています。そのため、monacoindサーバはWebサーバから送金リクエストを受け取っても、そのリクエストをモナコインネットワークへ投げることができません。かといって、monacoindサーバをグローバル領域に配置するわけにもいきません。あくまでもmonacoindサーバはプライベート領域に配置したまま、且つインターネット接続ができるようにする必要があります。

それを実現するのがNATというIPアドレスを変換する仕組みです。NATサーバをグローバル領域に配置し、monacoindサーバはNATサーバ経由でインターネット接続することでモナコインネットワークへ送金リクエストが投げられるようになります。

monacoindサーバ(10.Y.Y.Y)はNATサーバ(10.Z.Z.Z)に送金リクエストを投げます。NATサーバはリクエスト元のIPである 10.Y.Y.Y を自分のグローバル IP:239.Z.Z.Z にIP変換して送金リクエストをモナコインネットワークに投げます。これにより、monacoindサーバはインターネットから切り離されたままモナコインネットワークへの参加が可能となりました。

もし外部からmonacoindサーバを不正に操作しようとする場合には、まずwebサーバまたはNATサーバの侵入経路を探し、その上でmonacoindサーバへの侵入経路を探すと言う二段階が必要となります。当初のサーバ1台構成よりは高セキュリティな構成と言えるでしょう。

もしmonacoind(金庫)に脆弱性(欠陥)があった場合に、サーバ1台構成ではその時点からMONAが危機に晒されます。しかし、プライベート領域に置いておけば、ひとまずwebサーバかNATサーバが間に入るので、この2サーバに脆弱性がない限りはMONAが直接狙われることはありません。

終わり

完璧なセキュリティ対策なんてありませんし、何を守って何を許容するのかは予算や取り扱うサービスによって、まちまちだと思います。個人で勉強がてらに遊ぶ程度ならそんなに意識しなくても良いかもしれませんが、利用者のMONAという資産をがっつり扱うような規模になってくるのであれば、利用者保護の観点でそれ相応のサーバ構成をとることが望ましいと思います。

なお、セキュリティ的には今回の構成でもまだ不十分です。続いてこちらの記事をご参照ください。

sponsored link

down

コメントする




挨拶

プロフィール

ああああ

ああああ

ドラクエを愛してやまない33歳です。11をPS4でやるか3DSでやるか悩み中。

最近のコメント

    イイネと思ったら投げ銭を

    

    sponsored link