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

前回の続き

さて、前回はfaucetアプリのサーバ構成を考えるにあたり、monacoindサーバをインターネットから隔離したほうが安全だと記載しました。前回の記事はこちら をご参考ください。

monacoindをプライベート環境に置くことでインターネットからの攻撃を防ぐことができ、自分がインターネットに接続しに行くときはNATサーバを経由する、という以下のような構成です。

これにより、ひとまずmonacoindがインターネットから直接攻撃される可能性は低くなりました。ですが、これでもまだ不十分です。

Webサーバにはmonacoindへの接続情報がある

Webサーバはユーザのリクエストを受けてmonacoindサーバへ接続をしに行きます。つまり、Webサーバにはmonacoindサーバに接続するための情報が何かしらの形で置いてあるんですね。例えば設定ファイルやプログラムなどに、接続ユーザ名とパスワードを書いていたりします。もし攻撃者にその情報を見られてしまえば、それを使って不正な送金リクエストを投げられてしまう可能性がありますよね。

Webサーバもプライベートに置く

ということで、できればmonacoindだけでなくWebサーバもプライベート環境に置いたほうがいいと思います。Webサーバのフロントには、リバースプロキシやロードバランサなどリクエストをリレーするサーバを置きます。単にセキュリティのためだけではなく、ユーザが増えた際の拡張が容易になるためです。例えばリバースプロキシとしてnginxを置いた場合は以下のような構成です。

これでWebサーバもインターネットから直接攻撃されなくなるので、さらにセキュリティレベルは上がったと言えます。基本的に全てのサーバはプライベート環境に置き、グローバル環境にはインターネットとの接続のためにどうしても置かなければならないサーバのみを配置します。

セキュリティの基本は重ね掛け

monacoindにはユーザ認証機能や接続元のサーバを制限する機能があるため、それだけでセキュリティが充分に保証されていると錯覚してしまいがちですが、それは非常に危険な考えです。

なぜなら、ブロックチェーンはまだまだ発展途上の技術ですので、どこに脆弱性が眠っているかわかりません。それはクライアントであるmonacoindも同様です。今後、もしかしたらmonacoindのユーザ認証機能を突破する脆弱性が見つかるかもしれませんし、ソフトウェアのセキュリティをそのソフトウェアの機能だけで担保することは危険だと考えます。

万が一monacoindに脆弱性が見つかっても、ネットワークを隔離しておけばそこで塞げます。その逆も然り、複数の手段で防御策を講じておくことがセキュリティを高めるということです。オートロックのマンションで家に鍵をかけて部屋にはまた別の鍵をかけて引き出しにもまた別の鍵をかけて・・・と、突き詰めればキリがないですが、少なくとも守るべきデータがたった1つの脆弱性で露呈するようなサーバ構成は避けたほうが良いと思います。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする