linux系统:Linux环境下发现并阻止系统攻击

来源:赛迪网

=myp111>、当在台PC机上安装了Linux系统你就拥有了个强大、高级、多任务网络操作系统但时候该系统功能有些过于强大了些某些发布版本缺省启动很多服务(如:rlogind,inetd,httpd,innd,fingerd,timed,rhsd,等等)作为系统管理员需要熟悉了解这些服务若机器连接了Internet就更需要关自己系统安全

大多数攻击者并不是个革新者他们往往利用最新公布系统工具技术等突破个所周知个新刚刚发现安全漏洞但作为个管理者通过访问你使用Linux发布官方站点如www.redhat.com、www.calderasystems.com等可以获知最新安全漏洞及相应补丁也可以通过定期访问www.securityfocus.com、www.cert.org等安全漏洞通告站点

控制访问服务器最方便思路方法是通过个叫TCPwrapper在大多数发布版本中该往往是缺省地被安装利用TCPwrapper你可以限制访问前面提到某些服务而且TCPwrapper记录文件记录了所有企图访问你系统行为通过last命令查看该log管理员可以获知谁企图连接你系统

在Linux/etc目录下个如下所示inetd.conf文件该文件是TCP wrapper配置文件定义了TCPwrapper可以控制启动哪些服务比如要将finger服务去除就将finger服务行注释掉(在前面 加上"# "即可); # inetdconf This file describes the services that will be available # through the INETD TCP/IP super server. To re-configure # the running INETD process, edit this file, then send the # INETD process a SIGHUP signal # ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a # telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd # Finger systat and netstat give out user information which may # be ...............





但是对于诸如sendmailnamed等服务由于它们不象fingertelnet等服务在请求到来时由inet守护进程启动相应进程提供服务而是在系统启动时单独作为守护进程运行在slackware版本Linux可以通过修改/etc/rc.d目录下启动配置文件rc.M文件将启动sendmail命令行注释掉:





#!/bin/sh

# rcM This file is executed by init(8) when the system is being

# initialized for _disibledevent=> 2、保护你系统最简单有效思路方法是TCPwrapper.Linux系统在跟踪对你机器访问记录方面作了大量工作wrapper拒绝对你系统某些访问同时,系统在些LOG文件中增加了些信息内容在/var/log目录下,般可以看到如下文件:



boot.log cron cron.1 cron.2 dmesg httpd lastlog lastlog.1 maillog maillog.1 maillog.2 messages messages.1 netconf.log netconf.log.1 netconf.log.2 secure secure.1 secure.2 secure.3 secure.4 spooler spooler.1 spooler.2 uucp wtmp wtmp.1 xferlog xferlog.1 xferlog.2







可以看到某些LOG文件有1,2等扩展名这是由于系统运行cron.daily引起实际上cron.daily是在/etc下面子目录包含了很多系统自动运行管理script文件不需要你参和这些script实现些任务自动化:如轮转log文件使其不会变过分大作为管理员你应该熟悉如何通过修改这些script来定时运行当然现在有很多功能完善文本模式或图形模式log文件分析器自动发现危险攻击

迹象然后象管理者发送信件在http://www.freshmeat.net/ tucows等可以找到很多这样工具

从攻击者观点而言他们对你你服务器上安全文件最感兴趣若你关闭外部网络对你服务器 访问你可能会遇到这样情况:



[root@linux /]#grep refused /var/log/secure* Sep 12 07:52:42 netgate in.rlogind[7138]: refused connect from 2??.?.5?.?42 Sep 12 07:52:52 netgate in.rshd[7139]: refused connect from 2??.?.5?.?42 Sep 12 07:52:55 netgate in.rexecd[7144]: refused connect from 2??.?.5?.?42 Sep 12 07:52:59 netgate imapd[7146]: refused connect from 2??.?.5?.42 Sep 12 07:52:59 netgate in.fingerd[7142]: refused connect from 2??.?.5?.?42 Sep 12 07:53:00 netgate ipop3d[7143]: refused connect from 2??.?.5?.?42 Sep 12 07:53:07 netgate in.ftpd[7147]: refused connect from 2??.?.5?.?42 Sep 12 07:53:10 netgate gn[7145]: refused connect from 2??.?.5?.?42 Sep 12 07:53:22 netgate in.telnetd[7149]: refused connect from 2??.?.5?.?42 Sep 12 07:56:34 netgate imapd[7150]: refused connect from 2??.?.5?.?42







正如你看到那样攻击者已经试图连接服务器上若干个端口但是由于服务器关闭了inetd启动

所有服务所以LOG系统记录下了这些访问拒绝若在你机器中没有发现这样服务拒绝并不能介绍说明你

器没有被攻击maillog文件将保存那些通过服务器被转发email信息xferlog保存ftplog信息等等

若你希望查看wtmp你可以使用last命令

# last | more fishduck ttyp6 nexus Tue Sep 28 16:03 still logged in birdrat ttyp5 speedy Tue Sep 28 15:57 still logged in root tty1 Tue Sep 28 12:54 still logged in 将显示谁什么时候登陆进来,登陆了多长时间等信息通过查看你可以发现非法登陆者信息你也可以查看以前wtmp文件如wtmp.1 你可以用命令: # last -f /var/log/wtmp.1 | more 但是你还需要注意你log文件状态信息如果它特别小 或者大小为0 则介绍说明可能有攻击者进入系统并且修改了这个文件为了防止任何用户修改某些文件如对log文件只允许添加而不允许删除操作等等: 可以通过使用Linux Intrusion Detection 可以防止攻击者修改LOG文件password 文件等该工具可以在启动lilo时来决定是否允许对某些特定文件修改该工具详细信息可以通过访问 www.soaring-bird.com.cn/oss_proj/lids/index.html获得系统所有进程祖父进程被成称为"init"其进程ID号是1你可以通过下面命令,看到init进程信息 # ps ax | grep init 1 ? S 6:03 init 系统在启动时init进程将会启动"inetd"进程正如前面提到该进程实现监听网络请求监听是通过网 络端口号来实现例如你telnet到你linux服务器上时实际上你上请求inetd进程启动进程in.telnetd进程在23端口来处理你访问请求实现通信随后in.telnetd进程启动个询问你用户名和密码进程 然后你就登陆到机器了inetd同时监听很多端口来等待访问请求然后激活完成相关服务你可以通过查看文件/etc/services来看哪个服务使用哪个端口从节省资源角度来说利用个进程而不是每 种服务对应个进程是有意义个攻击者第次访问你站点时他们往往使用成为端口扫描仪工具通过该工具攻击者来查看你开放了那些系统服务LInux上比较出名个端口扫描仪是nmap. 可以从http://www.insecure.org/nmap/index.html下载得到该软件Software最新版本甚至有个图形化界面nmapfe下面我们就运行nmap看可以得到什么结果: 选项'-sS',指使用TCP SYN, 也就是半连接half-pen扫描, '-O',只同时探测被扫描系统操作系统o(利用OS指纹技术可以参见http://www.isbase.com/book/showQueryL.asp?libID=271)攻击者知道了 对方使用何种操作系统就可以有针对性寻找该操作系统常见漏洞



# nmap -sS -O localhost Starting nmap V. 2.3BETA5 by Fyodor ([email protected], www.insecure.org/nmap/) Interesting ports _disibledevent=>







这些打开端口就是攻击者入侵点当你修改过inetd.conf文件以关闭某些服务从新启动inetd后你 再用nmap扫描就可以发现被注释掉服务扫描不到了

当然管理员还可以使用些其他安全扫描工具如:satan或 Nessus等 来检测自己系统安全可靠

在攻击者发现其以前更早发现自己系统漏洞并加以弥补


=myp111> 3、个笑话里说个小偷进入到偷光了屋子里所有东西但是却用个相同东西代替了偷走东西但是在网络世界里这却是可能发生个攻击者利用个系统漏洞非法入侵进入到你系统后当你使用ps命令列出系统中所有进程时却看不到什么异常证据你查看你password文件切也是那么正常到底发生了什么事情呢?当系统进入到你系统以后步要做事情就是取代系统上某些特定文件:如netstat命令等当你使用netstat-a命令时就不会显示系统攻击者存在信息当然攻击者将替代所有可能泄露其存在文件在linux环境下个有名这样工具包名字是rootkit通过在任何个搜索引擎搜索关键字rootkit可以得到数以百计结果这些工具般来说包括:

ps netstat top .....

由于这些经过文件已经被取代所以简单利用ls命令查看这些文件是看不出什么破绽有若干种思路方法你可以验证系统文件完整性如果你安装是Red Hat, Caldera,TurboLinux或任何使用RPM系统你可以利用RPM来验证系统文件完整性: 首先你应该查明你那些你需要查看文件来自哪个软件Software包使用rpm命令你可以查明某个文件属于某个包: # rpm -qf /bin/netstat net-tools-1.51-3 然后可以扫描

整个rpm包来查看那些发生了改变对没有发生改变包使用该命令将没有任何输出信息如下所示:

# rpm -V net-tools

将netstat5.2版本 2进制可执行文件替换为6.0版本以后再使用该命令结果为:

.......T /bin/netstat

这介绍说明/bin/netstat/文件已经被修改若我使用rpm-qf测试ps和top命令可以得到其属于包procps然后再验证包procps完整性下面是个被"黑"站点结果:

# rpm -qf /bin/ps procps.2.0.2-2 # rpm -V procps SM5..UGT /bin/ps ..UGT /usr/bin/top





攻击者入侵到系统中并且用自己ps及top命令替代了我们系统中命令从而使管理员看不到其运行进程也许是个snfer来监听所有用户所有进出网络数据并找寻到密码信息

下面是个小script来扫描你系统所有rpm库并检查所有包是否被篡改但是应该注意是并不是所有该scripts

报告问题都是介绍说明该系统文件被攻击者破坏例如你password文件般肯定和你安装系统时是区别:

#!/bin/bash # # Run through rpm database and report inconsistencies # for rpmlist in `rpm -qa` # These quotes are back quotes do echo " ----- $rpmlist -----" ; rpm -V $rpmlist done > /tmp/rpmvery.out





当你运行该scripts时输出被定向到文件/tmp/rpmvery.out你可以使用less命令查看该文件但是

由于文本文件如:/etc/passwd, /etc/inetd.conf等很可能显示为被修改过但是你如何知道这些是管理员

自己修改还是入侵者修改呢?思路方法是:

在你确保你系统是干净没有被攻击者入侵时你为这些系统文件创建指纹信息在你怀疑你系统被入侵时使用这些这些指纹信息来判定系统是否被入侵创建文件指纹信息是通过命令md5sum 来实现:

# md5sum /etc/passwd d8439475fac2ea638cbad4fd6ca4bc22 /etc/passwd # md5sum /bin/ps 6d16efee5baecce7a6db7d1e1a088813 /bin/ps # md5sum /bin/netsat b7dda3abd9a1429b23fd8687ad3dd551 /bin/netstat





这些数据是我系统上文件指纹信息区别系统上文件 指纹信息般是区别你应该是使用md5sum来计算自己系统文件指纹信息下面是些你应该创建指纹信息文件;

/usr/bin/passwd /sbin/portmap /bin/login /bin/ls /usr/bin/top /etc/inetd.conf /etc/services通过指纹信息你可以决定是否有系统文件被篡改


=myp111> 4、上节中说过当netstat,ls等命令被修改从而发现系统已经被入侵下面该如何办?根据你系统重要性区别你有很多种选择但是我推荐对用户目录password及其他关键系统文件进行备份然后重新安装系统但是不要随便就将备份文件拷贝到新系统攻击者可能在这些文件中隐藏些非法东西

也可以不重新安装系统而是通过TCP wrapper来限制对主机访问并且关闭非关键网络服务然后更新被影响重新"干净"启动系统是很重要但是要实现这点并不容易若你发现procps或net-tools包已经被攻击者修改件事情是重新安装干净包来替换被攻击者做了手脚留下后门般最好从你系统发布者处得到最新包来重新安装

旦攻击者进入到系统其就将在系统上存放些工具并且将的隐藏起来使你不容易发现下面是个被攻击者入侵系统例子当系统被攻击者入侵服务器被限制网络访问并且替代所有受影响然后就需要通过仔细查看log文件来发现重复企图进入系统查看/etc/passwd文件发现个不属于合法用户进入到该用户目录下:/home/jon运行 "ls -l"得到如下内容:

. .. .. .bashrc .bash_history .screenrc emech.tar.gz 除了个名字为emech.tar.gz文件以外看不出什么异常现象但是仔细观察你就会发现系统有两个".."目录(指该子目录级目录)是确很奇怪我使用命令"cd .."我就会进入到/home目录原来其中子目录名字是在两个点后面有个空格(".. ")你可以通过如下命令发现:

# cd /home/jon

# echo .* | cat -v

. .. .. .bashrc .bash_history .screenrc emech.tar.gz

仔细观察可以发现每个子目录都是被个空格隔开而在第 2个“..”和.bashrc的间有两个空格这就意味着第 2个".."子目录其实为点-点-空格下面进入到该目录:

# cd ".. "

然后列出该目录下内容:

#ls

randfiles mech. mech.pid checkmech cpu.memory

mech.help mech.usage mech mech.levels emech.users psdevtab

步我们再查看是否其还在其他地方隐藏了文件:

# find / -user jon -pr

除了/home/jon目录以外还发现如下内容;

/usr/local/bin/.httpd /tmp/cl /tmp/.l/bcast /tmp/.l/.l /tmp/.l/imapd /tmp/.l/log /tmp/.l/pscan /tmp/.l/pscan.c /tmp/.l/rpc /tmp/.l/slice2 /tmp/.l/snfer /tmp/.l/sxploit /tmp/.l/thc /tmp/.l/ufs.c





这个入侵者已经在系统上安装了Snfers、端口扫描器他给自己营造了个很好"家"在查看中还在合法用户目录下发现了个可怕名为"tcp.log"文件文件该文件有几百行长包括每次telnet 及 ftp 出入该系统连接!除了通告在该文件中出现可能已经被入侵机器管理员应该重新安装系统以外我同样告诉他们需要更新系统所有用户口令

下面有些例子来帮助你搜索隐藏危险首先查看位于用户目录具有"suid"或"guid"文件这些文件可执行属性位为s而不是x如:

#ls -s /usr/bni/passwd

-r-s--x--x 1 root root 10704 Apr 14 1999 /usr/bin/passwd

属性第 4位 "s" 表示该命令被执行时该进程实际有效用户ID就变为root用户为了允许普通用户修改自己密码这是必须第 7位x若为s则表示别用户若运行该则该则具有用户所有组有效组ID使能冒充特定用户或者组并不是件有害事情但是般来说非管理用户在其目录下不应该具root-suid 我们可以使用下面命令来查寻这样文件:

# find /home -perm -4000 -o -perm -2000 -pr

步我们继续寻找入侵者留下和文件所以需要个快速寻找隐藏目录思路方法下面思路方法就是寻找如".kde"隐藏目录你也可以找到如".. "或“..."等目录:cracker.

# find / -type d -name ".*" -pr

"-type d"选项指仅仅列出目录这个命令不会不会将"."或".."列出

5、作为个好系统管理者为了击败攻击者攻击行动最好思路方法是了解攻击者工作原理和机制它们使用了那些工具它们如何操作入侵等等所以深入理解掌握我这里讲解各种网络工具是很有必要

上面用例子方式说到了了个攻击者使用snfer监听网络流来搜集用户名和密码下面我们就详细介绍说明snfer是如何工作简单snfer是个使你能检测你网络接口接收到所有

据报般情况下计算机仅仅接受目地址是自身数据报而snfer使网络接口进入杂错模式

从而可以接受网卡收到所有数据报若你运行config eth0命令会得到下面结果:

eth0 Link encap:Ethernet HWaddr 00:C0:4F:E3:C1:8F inet addr:192.168.22.2 Bcast:192.168.22.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:49448 errors:0 dropped:0 overruns:0 frame:0 TX packets:33859 errors:0 dropped:0 overruns:0 carrier:0 collisions:6 txqueuelen:100 Interrupt:10 Base address:0x300





打开两个终端个终端里运行snfer器-snfit;

# snfit -i

另外个虚拟终端里你可以再次运行config eth0你将会发现输出中有下面内容:

UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1

注意和上面相比较增加了个单词"PROMISC" 这是杂错模式(promiscuous mode)缩写,

snfit是个轻量级基于终端snfer器你可以从

http://reptile.rug.ac.be/~coder/snfit/snfit.html得到它

另外个类似snfer是netwatch,你可以从http://www.slctech.org/~mackay/netwatch.html得到它

如果你不希望在系统中安装另外snfer你可以使用系统中带有个工具:tcpdump 这个工具虽然不如前面两个工具那么华丽但是她可以完成所有同样功能

# tcpdump host www.linuxjournal.com -l | tee /tmp/tcpdump.out

其中-l指示tcpdump将输出数据存进入个文件中下面是输出内容:

16:41:49.101002 www2.linuxjournal.com.www > marcel.somedo.com.1432: F 2303148464:2303148464(0) ack 1998428290 win 16352 16:41:49.101206 marcel.somedo.com.1432 > www2.linuxjournal.com.www: . ack 1 win 32120 (DF) 16:41:50.001024 www2.linuxjournal.com.www > marcel.somedo.com.1429: F 1805282316:1805282316(0) ack 1988937134 win 16352 16:41:50.001215 marcel.somedo.com.1429 > www2.linuxjournal.com.www: . ack 1 win 32120 (DF) 16:41:50.840998 www2.linuxjournal.com.www > marcel.somedo.com.1431: F 1539885010:1539885010(0) ack 1997163524 win 16352 16:41:50.841198 marcel.somedo.com.1431 > www2.linuxjournal.com.www: . ack 1 win 32120 (DF) 16:41:51.494356 marcel.somedo.com.1429 > www2.linuxjournal.com.www: P 1:335(334) ack 1 win 32120 (DF) 16:41:51.497003 marcel.somedo.com.1433 > www2.linuxjournal.com.www: S 2019129753:2019129753(0) win 32120 (DF) 16:41:51.671023 www2.linuxjournal.com.www > marcel.somedo.com.1429:R





Linux系统中可以得到有很多种snfer攻击者在入侵系统以后也许会使用修改ps命令来隐藏其运行snfer器或者将其改为个看上去很正常进程名称




 

 

 

Tags:  linux系统怎么样 linux文件系统 linux系统安装 linux系统

延伸阅读

最新评论

发表评论