发新话题
打印

如何查出黑客所在

如何查出黑客所在

<TABLE class=t_msg cellSpacing=0 cellPadding=4 border=0>& O, {4 Z' n/ X4 B
<TBODY>
, H/ I8 _0 F6 ]0 P. _<TR>
. q# M9 h6 \! v- K7 S7 _9 l0 O! ^9 y8 m  G<TD class=line style="PADDING-TOP: 10px" vAlign=top height="100%">- y: D9 G/ A$ F3 ]0 x3 j
<DIV style="FONT-SIZE: 9pt">1.用w指令查看系统信息 <BR>$w <BR>9:01pm up 10:08, 1 user, load average: 0.08, 0.06, 0.05 <BR>User tty login@ idle JCPU PCPU what <BR>notes console 10:54am 9days 28:04 23:29 /usr/dt/bin/dtscreen -mode blank <BR>notes pts/2 10:54am 10:07 /sbin/sh <BR>notes pts/4 10:54am 10:06 /sbin/sh <BR>notes pts/5 10:56am 9:59 /sbin/sh <BR>  在w显示信息的最开头是发出w命令的时间、系统启动后的时间、及注册在系统的用户数。 最后的三个数表示平均负载,即使用系统资源的程度,使用w命令给系统增加了0.08负载。 其他两个数字分别表示在最后5分钟及十五分钟内系统的平均负载量。 <BR>注意:当有人在猜password时,将会大大增加系统的平均负载。 <BR>  2.进程记帐 <BR>  Unix 系统可以通过设置选项来让核心在每个进程结束时产生一个记录。这些记录所产生的报告被称为进程记帐。它包括进程使用资源的信息,以及所执行的命令名。如果运行 的是调整用户id程序,则还包括用户名等。系统管理员可根据进程记帐的CPU时间让用户交纳上机费,也可用进程记帐来观察某一用户执行了哪些命令。 进程记帐和审计是两码事,审计是监视对安全性敏感的事件。进程记帐并不记下所执行 命令的参数,所以无法知道某一命令修改了哪个文件,甚至也不知道此命令的执行是否成 功。但系统管理员仍然可以在进程记帐中找出某些线索。 基于System V的系统和基于BSD的系统在进程记帐方面所采纳的方法不同,命令也不 一样。 <BR>  2.1 System V记帐 <BR>  在System V 中,进程记帐保存在/usr/adm/pactt文件中。root可运行/usr/lib/acct/startup 来启动进程记帐。记帐信息的曰常处理可用runacct命令来做,它会压缩pacct文件。每月 的处理由shell程序monacct来完成。这两个程序都在/usr/lib/acct目录下。 acctcom 命令可用来搜索pacct中的内容,并产生报告。例如:查找用户"tommy"在 10:00 至11:30这段时间内所执行的全部命令。见下表: <BR>$acctcom -u tommy -s 10:00 -e 11:30 <BR>START BEF: Sat Oct 10 11:30:00 1998 <BR>END AFTER: Sat Oct 10 10:00:00 1998 <BR>COMMAND START END REAL CPU MEAN <BR>NAME USER TTYNAME TIME TIME (SECS) (SECS) SIZE(K) <BR>cat tommy pts/3 11:01:13 11:01:13 0.02 0.02 492.00 <BR>mail tommy pts/3 11:01:13 11:01:13 0.02 0.02 876.00 <BR>clear tommy pts/3 11:01:14 11:01:14 0.03 0.01 744.00 <BR>ls tommy pts/3 11:01:16 11:01:16 0.03 0.03 776.00 <BR>date tommy pts/3 11:01:23 11:01:23 0.01 0.01 664.00 <BR>  acctcom命令用来告诉系统管理员某一用户干了些什么,而不是正在干什么,而且它指 列出了命令名,没有参数。所以,从中发现一些线索,如可找出使用大量cpu时间的进程 (典型的是猜口令进程)。 <BR>  可用shell程序runacct来产生几个报告。这些报告存放在/usr/adm/acct/sum目录下, 其文件名格式为rprtMMDD。报告的第一部分包含"变更"信息,如进程记帐启动及关闭的 时间(关闭记帐可能是由于某人想隐藏某些活动),以及系统时间的改变。第二部分是每个 用户注册到系统的时间以及有关每个端口的报告,还包括了每个端口上"接通"和"断开" 的次数。"接通"表示一次成功的注册,"断开"表示退出系统或注册失败。 <BR>  大量的"断开" 可能意味着有人在试验"注册名,口令"序列组试图侵入系统中。 报告的最后一部分是有关用户最后一次注册的信息,这个最后注册报告是随着用户的 不断注册、退出而时刻更新的。报告中还包括用户名及最后的注册时间,越早退出系统 的帐号排在越前。这个报告对于发现那些死帐号非常有用,管理员可能会在这里发现一 些奇怪的事情如有人注册到系统管理的帐号中(如bin或sys)。 <BR>  2.2 BSD系统的记帐 <BR>  BSD系统的进程记帐用/usr/etc/accton程序启动。默认的记帐文件为/usr/adm/acct 只要启动了进程记帐,该文件会增长得很快。BSD有两条命令来处理记帐信息。第一条是 /usr/etc/ac,处理在usr/adm/wtmp文件中的注册信息,第二条是 /usr/etc/sa,产生已用 命令的小结报告,保存在/usr/adm/savacct文件中。 <BR>  BSD系统中也有与acctcom类似的命令叫做lastcomm。lastcomm命令反向搜索/usr/adm/acct 文件,产生出与acctcom命令相似的结果。 <BR>  BSD记帐系统也和System V一样,有类似的缺陷(从安全性角度讲),即不保留命令的参数。 并且,BSD系统没有最后注册的报告。 <BR>  现在针对前面的两点防卫措施,从攻的角度来看: <BR>  1.对与第一点中用w、who、last、ps等命令,hacker完全可以用程序将自己的记录隐藏 起来,使管理员用以上几个命令都查看不到。当然此时hacker已经把root的权限得到 手(如何得到,下章讨论)。 <BR>  2.就算最笨的hacker,当他无法隐藏自己时,他也会把整个记录文件删除掉,免得管理员 查到用什么帐号从哪里登录进来,运行了些什么指令。但显而易见,虽然管理员此时 (没安装第三方的审记软件时)不能知道谁人在哪里发起攻击,但也无疑地告诉管理员 "你的系统已经给攻破了"。</DIV></TD></TR>
$ _- y0 U$ ?' p5 s8 c7 o+ i. A; d  V<TR>
1 D8 V8 ]$ _, |0 G- [. Y' Z8 X<TD vAlign=bottom><BR></TD></TR></TBODY></TABLE>

TOP

<TABLE class=t_msg cellSpacing=0 cellPadding=4 border=0># W) e) Z' F4 o! R1 [- v# A
<TBODY>$ G3 r: }9 s- k. a6 c
<TR># q/ [; [: N- s0 d, ~* |
<TD class=line style="PADDING-TOP: 10px" vAlign=top height="100%">/ y0 `" V$ e# ~
<DIV style="FONT-SIZE: 9pt">3.历史文件: <BR>ksh、csh、sh、bash、zsh都可保存历史文件。其文件如下: <BR>sh: .sh_history (sh 也即Bourne shell) <BR>csh: .history <BR>ksh: .sh_history <BR>bash: .bash_history <BR>zsh: .history <BR>  在运行sh和ksh的用户的相应.profile中,加入HISTORY=100,可指定.sh_history <BR>文件保存该用户最近运行的100条记录。 对于csh,则在.cshrc文件中加入, set history=100,则可。 用户可以运行history指令来查看历史文件中的内容。对于Ksh、sh 也可运行 tail -f .sh_history 来查看,其顺序是从最近的运行的指令开始。 而C shell 是在退出才能更新文件,所以不能用tail来观察Cshell执行了那些命令。 这些历史文件比进程记帐更为有用,因为命令的参数也被保留下来,所以可通过执行 执行命令的上下文联系察觉到用户干了些什么。但话又说回来,其实这只起到一定作用而 已。 <BR>BTW: .profile用于Bourne和Korn shell; .login和.cshrc用于C shell。 <BR>  4.找出属主为root且带s位的程序: <BR>  以root身份执行以下的指令, 找出此类文件,看看是否有可疑的程序存在。 <BR>#find / -perm -4000 -exec /bin/ls -lab {} ";" <BR>其实在以前post的文章 1284 "系统安全技术的研究" 已有讨论过如何得到root shell 当hacker进入系统后,大部份是利用buffer overflow取得root shell 例如:solaris 中带s位的fdformat,ufsdump,ping等;AIX中xlock;SGI中的xlock; digital中的dop;等等,都给hacker找出其漏洞。 当hacker利用这些big bugs取的root shell后,若其想以后还想入侵此系统的话, 当然是留下root shell的程序,此时hakcer也不关心原来的bugs是否给fix掉,他/她 不再需要利用bug了,只须运行自己留下的root shell即给。 以下给出得到root shell的简单程序: <BR>#cat getrootshell.c <BR>void main(void) <BR>{ <BR>setuid(0,0); <BR>execl("/bin/sh", "sh",0); <BR>} <BR>编译后得到bin文件。此时,还有重要的步骤没做,whats it? look the following <BR>#cc -o getrootshell getrootshell.c <BR>#chmod 4777 getrootshell <BR>#chown root<IMG alt="" src="http://bbs.topzj.com/images/smilies/shocked.gif" border=0 smilieid="6">ther getrootshell <BR>#ls -al getrootshell <BR>-rwsrwxrwx 1 root other 5 Oct 12 06:14 getrootshell <BR>(注意全过程是在取的rootshell后,才可这样做) <BR>这样hacker就在该系统中留下了后门,下次入来后就不需利用还没fix的 fdformat,xlock,dop等bug 的程序了,直接运行getrootshell程序,就可跳成root了,想 干啥就干啥了。因此,管理员要查清此类型的文件。 <BR>现在从攻的角度来看上面两点防卫措施: <BR>1.对于history文件,当hacker进入系统后可以改变shell类型,来使保存他后来所有指 令的history文件失效。因此,当hacker用crack到的帐号进入系统后,第一条所敲的指令 是改变shell类型的指令. example in digital unix下: <BR>c:&gt;telnet XXX.XXX.XXX.XXX <BR>Digital UNIX (center) (ttyp5) <BR>login: tommy <BR>Password: <BR>Last login: Sun Oct 11 22:43:51 from HPVC.com <BR>Digital UNIX V4.0A (Rev. 464); Sat Feb 7 19:54:12 GMT+0800 1998 <BR>The installation software has successfully installed your system. <BR>There are logfiles that contain a record of your installation. <BR>These are: <BR>/var/adm/smlogs/install.cdf - configuration description file <BR>/var/adm/smlogs/install.log - general log file <BR>/var/adm/smlogs/install.FS.log - file system creation logs <BR>/var/adm/smlogs/setld.log - log for the setld(8) utility <BR>/var/adm/smlogs/fverify.log - verification log file <BR>center&gt;chsh <BR>Old shell: /bin/sh <BR>New shell: ksh <BR>其他系统不在此一一列举。 <BR>  2.对于类似getrootshell的bin文件,hacker也不会真的那么愚蠢到起这个名字,且他们 会将此类型的程序藏在不易察觉的目录下,如果不是老练的管理员是不会发现的,这会 在下节提到。 <BR>(注:一般来说,hacker不会把getrootshell文件删除的,因为他也不能肯 <BR>定下次进入系统时那些bugs还是否可以利用,使其变root)</DIV></TD></TR>
) l3 T, v7 N$ Z( z: k' \9 ^$ t<TR>
8 _0 J$ [4 A8 P<TD vAlign=bottom><BR></TD></TR></TBODY></TABLE>

TOP

发新话题