ばれないプロセスの立ち上げ方を考えてみよう
監視が厳しい環境でもばれずに任意のプロセスを立ち上げることができるだろうか?
システム監視が厳しく、起動しているプロセスやポート等が常に監視されているシステムがあったとして、その監視をすり抜けて任意のプロセスを立ち上げることはできるだろうか?
一見無理だと思うかもしれないが、実はできなくもない。
今回は、ばれないプロセスの立ち上げ方を考察してみよう。
なお、今のところどうしても1度はroot権限が必要である。(落胆しないでね)
攻撃方法:apacheモジュールへの寄生プロセス
結論から言うと、隠したいプロセスをapacheモジュールで実装する。
apacheモジュールとして動作しているから、psしてもapacheプロセスしかでてこない。
apacheがlistenしてくれているので追加の通信ポートが不要である。
apacheが外部と通信するのは当然のことなので何もおかしいことはない。
たいていの監視をすり抜けられる、完璧な隠れ蓑である。
もちろん、この方法はモジュールやプラグイン方針を採用しているすべてのソフトで使うことができる。今回、apacheを取り上げたのは、通信しててもおかしくないソフトウェアで、モジュールがあり広く使われているということでapacheを選択した。
何か命令を送りたい場合は、http/httpsリクエストの中に特殊なヘッダを作り、そのヘッダがあれば命令を実行するなんてことにすれば完璧である。
GET /foo HTTP/1.0 Host: foo Bar: nazonazo <<これ Connection: close
通常、ヘッダはログには記録されないため、ログだけ見る限り普通のアクセスと見える。
また、秘密のヘッダがわからなければ、プロセスは動作しないとなれば発見は遅れるだろう。
さらに、https通信であれば、ヘッダも暗号化されるし完璧である。
なんという恐ろしいことだ。
こんなに便利ならクラッカーは使っていないの?というと、
実は、既にapacheに寄生する手法を利用したマルウェアが存在する。
Darkleech Apache Module
http://www.atmarkit.co.jp/ait/articles/1308/05/news002_2.html
http://www.atmarkit.co.jp/ait/articles/1303/25/news122.html
まー、そりゃ誰だって考えつくよね。apacheなどのプロセスに寄生させてしまえというアイディアはね。
apacheのモジュールは、環境も整っていて簡単に作れるので、この機会に遊んでみよう。
くれぐれも自分のサーバだけで、遊ぶようにね。
不信なapacheへの対策:httpd -M
apacheには、モジュール一覧を見る機能がある。
これをつかって、怪しいモジュールがないかを確認する方法がある。
$ httpd -M Loaded Modules: core_module (static) mpm_prefork_module (static) http_module (static)
これで不審なモジュールがなければ安心、・・・と思うかもしれないが、この方法には穴がある。
不信なapacheへの対策への対策:ラッパー
攻撃と防御が頻繁に繰り返されてきたwindowsでは、ダミーwinsock.dllをつかった攻撃がある。
winsockへのラッパーdllを作ることで、攻撃を行う。
winsock.dllを一度どけて、_insock.dllとリネームし、自分が作ったwinsock.dllを差し込む方法である。
この方法ならば、単純な名前比較は意味を成さない。
では、_insock.dllなどへ既存のモジュールがリネームされているかどうかを調べればよいかというと、
オープンソース環境下ではそうとも言えない。
_insock.dllとするのは、winsockのソースコードが無いため、仕方なくラッパーを作っているだけである。
もし、ソースがあれば、完璧なものを用意できるのでリネームする必要すらない。
つまり、既存の .so モジュールのソースをコピペして、やりたい処理を追加したものを準備できれば、それを上書きコピーで動作させることができるだろう。
よって、単純な名前比較は意味を成さない。
じゃあどうすればいいんだよ!?
侵入されてrootを取られたら\(^o^)/と思うしかない。
クリーンインストール以外に道はない。
そうされないためには、ネットワーク構成上 ルーター置いて、必要なポートだけフォワードして、 SSHはVPNした環境 or IP範囲制限のみで可能などの地道な対策をすることになるだろう。
幸いにも、apacheのモジュールを追加するには、apacheの設定ファイルやモジュールを書き換えなければならず、それをするには、root権限が必要である。
rootを取られるといった失態がなければ、ばれないプロセスを立ち上げることは多分不可能である。
もしかすると、 /home/foo/.***/ とかに拡張モジュールを置けるような親切なソフトウェアがあるかもしれないが、それは設計が間違っているのだ。そんなソフトウェアは使わないのが一番である。
まとめ
apache寄生まできたら次は、kernel寄生でもするのだろうか。
確かに、kernelもモジュールの集合体である以上は理論上可能である。
作るのは大変であろうが、なんでもできるし発見を遅らせることもできるだろう。
驚くようなソフトウェアが作られるかもしれない。
それはとても面白そうだ。