速習・ペンテスト(Netcat)

仕事で「情報セキュリティ」に携わることになって、1 年が経とうとしている。最低限の知識は持っておこうと、少しずつ勉強してきた。今は、ペンテスト(ペネトレーションテスト)に関連する技術を新しくしておこうと、Kali Linux をいじくっている*1
まずは、復習がてら、Netcat をさわってみた。

Netcat は、ネットワークに関する様々なことを簡単に実現できる、すごく便利なツール。ただし、「攻撃用のツール」とみなされ、ウイルス対策ソフトが反応してしまう可能性がある。このため、インストールや利用方法には、慎重になる必要がある*2
「攻撃用のツール」とみなされるということは、攻撃に使えうるということ。間違っても、自分の管理下にある環境以外に、アクセスしてはならない


さて、本題にうつる。まず、Netcat は、サーバにもなれるし、クライアントにもなれる。それも、とても短いコマンドを打つだけで。また、この (1) と (2) を、異なる PC で実行することにより、PC 間で、チャット(みたいなこと)をすることもできる。

    # (1) TCP ポート 8008 でリッスンする(サーバ)
    nc  -nlvp  8008

    # (2) TCP ポート 8008 に接続する(クライアント)
    nc  -nv  10.0.0.10  8008


同様にして、ファイルの送受信を行うこともできる。

    # (3) ファイルを file_name_b というファイル名で受信する(サーバ)
    nc  -nlvp  8008  >  file_name_b

    # (4) ファイル file_name_a を送信する(クライアント)
    nc  -nv  10.0.0.10  8008  <  /usr/share/file_name_a

ここまでは、序の口。


こんなこともできる。左の PC は Linux(IP アドレス:10.0.0.11)で、花子さんが使っているとする。右の PC は Windows(IP アドレス:10.0.0.10)で、太郎さんが使っているとする。まず、太郎さんの PC で、TCP ポート 8080 をバインドしたサーバを起動する。その際、サーバ側で、TCP ポート 8080 に接続した後、コマンドプロンプト(cmd.exe)を実行するように設定しておく。-e オプション*3 で紐づける。これによって、花子さんが、太郎さんのサーバに接続すると、太郎さんの PC のコマンドプロンプトが実行され、花子さんは、コマンドプロンプトを、自由に操作することができる。


逆に、こんなこともできる。クライアント側である花子さんが、サーバに接続後、シェル(bash)を起動するように設定し、サーバにアクセスする。やはり、-e オプションで、シェルを紐づけておく。こうすることで、今度は、花子さんがサーバに接続した後にシェルが起動し、サーバ側である太郎さんが、花子さんのシェルを自由に操作できるようになる。


これが、バックドアを作成するときによく使われる「リバースシェル(Reverse Shell)*4」という方法。なぜ、こんな方法をとるのか?
それは、次の絵を見ていただければ、わかると思う。リバースシェルを使うと、正面突破に比べ、ファイアウォールをすり抜けやすいからだ。


バックドアを仕込む方法として、すぐに思いつくシナリオは、「攻撃者が、標的の PC に侵入したら、標的の PC に小さなサーバ(バックドア)を起動しておいて、そこに対して、攻撃者がアクセスする」というものだと思う。しかし、これでは、攻撃者のアクセスが、ファイアウォールによって、はじかれてしまう可能性が高い。外から内へのアクセス(インバウンド)は、内から外へのアクセス(アウトバウンド)に比べ、制限が厳しくなっていることが多いからだ。


*                *                *


本エントリでは、Netcat の機能を紹介した。「リバースシェル」の「コマンド」だけメモしておくつもりが、少し膨らんでしまった*5。まぁ、そんなときもある。昨年は、社内ブログばかり書いていて、こっちのブロブを全然更新できなかった。なので、書けるときに書いておこう。
しかし、Netcat についても、「リバースシェル」についても、驚くほどたくさんの情報がある。高い倫理観を持ち、どのような状況になっても悪用しないよう、律していきたい。

*1:今のところ、感覚的には、使うツールや技術は、以前とそんなに変わっていない印象。

*2:仕事で、社内向けに「ネットワーク研修(すごく基礎的な内容)」を実施することがある。Netcat を使いたかったのだが、ウイルス対策ソフトが反応してしまうため、断念した。なお、同じ環境で、Wireshark は問題なく動いている。なので、パケットキャプチャをがっつりやってもらうことにした。

*3:マニュアルには、"program to exec after connect [dangerous!!]" と、のっている。確かに、おっかない。

*4:他にも、「コネクトバック」や「コールバック」などと呼ばれるらしい。

*5:絵を描きだすと、楽しくて止まらないようだw