ハッカーへの階段3 秘密鍵が平文で残っていないかチェック(2)
xem
謝罪&お願い
昨日、掲載を中止していた記事をあえて再掲載する。
過激な記事であると言われてしまったのは、私の中途半端な掲載に大いなる問題があった。ブログという形式の都合上、オチの部分を後日に掲載しようと記事を分割し載せなかったのが誤解を招いたと反省している。
しかし、一般のユーザーには過激に感じるかもしれないがここに書くことは事実なのだ。長くなるが、読み始めたら最後まで読んでほしい、そしてセキュリティの本質を考えてもらえると幸いである。
@びっくり爺
この記事は、NEMを題材に実験を行っているが、NEMやNano Wallet特有の問題を暴露しようという趣旨のものではない。仮想通貨に共通する本質的なセキュリティ問題を、仮想通貨の中でも安全な通貨と思われるNEMを例にして実験してみたものである。
さあ、メモたんを使って、ウォレットに平文の秘密鍵が残ってないか探索をしてみよう
まずは、Nano Wallet Win64を起動して、テストネットに新規のアカウントを作る。
ユーザー名:bikkurijii3
パスワード:nozoicha1818
アドレス:TD4ZI7JWX4LQBCS5KO7Y6GPDWKG4GWE7YQFKZF7V
秘密鍵:f76f48e58a****************************************0a14bc241d9bd2
(隠さなくていいが、パンツ見られてるみたいなので伏字w)
残高:6 xem → 0では寂しいのでFausetでゲット
【STEP1】
アカウントを作ったので、まずはログインする。
おお、Fausetでもらった6xemが入っておる^^
【STEP2】
メモたんを立ち上げておいて、Nano Walletにカーソルを合わせた状態で
ctrl + shift + alt + D を押すと
メモたんが、Nano Walletのプロセス情報を取得した
今回は、5つのプロセス(PID)が動作しているのがわかる。
【STET3】
秘密鍵の文字列(一部で構わない)を、文字コード変換BOXに入れて、まずはUTF-8に変換し、探索してみる。
出た~~~~~~!!!秘密鍵が1匹いるじゃないですか!こりゃ消し忘れビデオ状態なのか!
しかもこれ、誰が見ても、前後と区別できて、私は秘密鍵ですよって顔してるぞい。
この顔で並んでいれば、自動的に盗むはプログラムは案外簡単に作れそうなのじゃ。
【STEP4】
いきなり秘密鍵を掘り当ててしまったのじゃが、まあ、続きを。
次は、文字コードをunicodeに変えて、探索してみる.....
出た出た出た~~~~~~!
なんと、今度は3匹も出てきたじゃないですか。
unicodeで出てくるのは、表示系のメモリーの消し忘れかもしれんな。
これも、16進の文字(0~fの16種類)だけががユニコードで00を挟んで64個だけ並ぶという極めて珍しいデータなので、プログラムで盗み出すことは簡単にできそうじゃ。
【STEP5】
次は、バイナリで探索してみる。ここでは先頭の5バイト(F7 6F 48 E5 8A)で探してみることにする。
おおお、これは出なかった。ここはセーフ!
【STEP6】
メモリーハッキングでは、ゴミ拾いされてしまうかは重要なポイントなのじゃ。
つまり、この場合で言えば、ログオフしても盗まれるのか...ってことが重要なのじゃ。
bikkurijii3からログオフして、その状態で再度探索してみる。
ううううう、残念。ログオフしても秘密鍵は全部そのままメモリーに残っておった。
やはりハードウェアウォレットを使わないとヤバそうな予感がするのじゃ。
もう少し詳しく調べてみよう。
【STEP7】
秘密鍵がダダ漏れだったので、かなり衝撃を受けたが、一度、Nano Walletを終了して、ログインから、やり直してみる。
まずログイン直後に探索してみる....
う~~ん、UTF-8の秘密鍵がひとつ見つかる。
でもunicodeの秘密鍵は見つからんな。unicodeが見つからないのは、今回は秘密鍵の表示を行ってないからのようじゃ。
次にウォレットを少し操作して(たとえばサービスをクリックしてみる)から再度探索すると
?????? あれれれ?
前回は表示された秘密鍵は、完全になくなってるじゃんか
Nano Walletは、公式ウォレットなので秘密鍵の即時消去ルーチンは当然実装されていると思うのじゃが、ログイン直後だけの消し忘れなのかもしれん。ともあれ、ウォレットを操作すると秘密鍵が消えてくれるようじゃ。
【STEP8】
次は、本当に秘密鍵を使う処理、つまり送金を実施した後にどうなってるかじゃ。
この辺りは、開発者が気を使うところだろうから、秘密鍵が消されていることを期待する。
試に、bikkuribaa3アカウントに1xem送金して、ただちにメモリーを探索してみよう。
まずは、送信前に再度、メモリーを探索......秘密鍵はない
送信!すぐにメモリーを探索.....うわ2個出てきた。
ダッシュボードに戻る......まだ2個
アカウントに移動......まだ2個
ダッシュボードに戻る.....あれ?全部消えた。
やっぱり操作していると秘密鍵が消えるみたいじゃ
なんとも不思議なんじゃが、消去するルーチンは実装されてるっぽいが、その起動のトリガーの問題があるのかもしれん。
いずれにせよ、平文の秘密鍵が存在することがあるし、マルウェアに感染してず~~と監視されれば、秘密鍵を盗まれてしまう可能性を否定できないのじゃ。
>開発者様
秘密鍵を消去するタイミングを多面的に実装する必要があると思う。
おそらくその程度で直るなら、とっくに実装しているのでしょうが.......
(まさか、そもそも消去ルーチンを実装してないとは言わないでね)
ユーザーの自己防衛対策:
- ウォレットは、使用→即終了、これが原則じゃな。
不必要にログインしない。送金し終わったらにウォレットは即終了させる。
残高確認てのはログインしないでも、ブロックチェーンを見てればいいのだから。 - そして、ソフトウェアのウォレットは、盗まれても問題ない額だけの小銭入れとして使う範囲に留める。
- ウォレットを終了しても、パソコンのメモリ上のデータが消えるわけではない。短時間で簡単には探索されないじゃろうというだけじゃ。だから、ウォレットを使うPCは、できるだけ早く電源を落とす。
- 言い換えれば、仮想通貨をやるなら、ウォレット専用マシンであることは必須。できれば一般的ではないOSにして、ウォレット以外のメール、ネットサーフィンなどは一切行わない。現状のワシのお勧めはChromeBookあたりかな。安全とは言えないが、2万円くらいと安いし、Windowsの危険性とは比較にならん。
<まとめ>
わしゃ思うぞ。秘密鍵を使う安全なアプリケーションを実装するなんてそもそも無理なんじゃ。
OSやブラウザ、あるいわインタープリタ依存のメモリー管理なのじゃからな。
これはNEMの問題ではない。仮想通貨の全体の問題なのだ。
なにしろ送金するときには、秘密鍵での演算が絶対に必要なんじゃ。
そして、そして、そんなことは最初っからわかっていたのだ。
だからこそ、ハードウェアウォレットがあるんじゃろ。
つぎはハードウェアウォレットの意味ってのを簡単に説明しようかな
37 views
ハッキング ハッカー 秘密鍵 ウォレット ハードウェアウォレット メモリーハッキング
2018-10-04 13:54:54