Linux入侵检查与防范

上一篇 / 下一篇  2013-10-08 21:43:54 / 个人分类:linux系统管理

=============================================================================================
Linux入侵检查实用指令(转)
2,527 views, Hacker, Linux, by 木木.
Linux入侵检查实用指令
 
1
 可以得出filename正在运行的进程
 #pidof filename
 2
 可以通过文件或者tcp udp协议看到进程
 #fuser -n tcp port
 3
 可以看文件修改时间,大小等信息
 #stat filename
 4
 看加载模块
 #lsmod
 5
 看rpc服务开放
 #rpcinfo -p
 6
 看网卡是否混杂模式(promiscuous mod)
 #dmesg|grep eth0
 
7
 看命令是否被更改,象md5sum一样
 #rpm -Vf /bin/ls
 rpm -Vf /bin/ps正常无输出,否则输出SM5….T /bin/su之类提示
 如果rpm的数据库被修改则不可靠了,只能通过网络或则cdrom中的rpm数据库来比较
 如:rpm -Vvpftp://mirror.site/dir/RedHat/RPMS/fileutils-3.16-10.i386.rpm
 以下常用命令需要检查
 /usr/bin/chfn
 usr/bin/chsh
 /bin/login
 /bin/ls
 /usr/bin/passwd
 /bin/ps
 /usr/bin/top
 /usr/sbin/in.rshd
 /bin/netstat
 /sbin/ifconfig
 /usr/sbin/syslogd
 /usr/sbin/inetd
 /usr/sbin/tcpd
 /usr/bin/killall
 /sbin/pidof
 /usr/bin/find
 
8
 如果检查的是已经确认被黑客攻击的机器,完美建议:
 1.dd一个备份硬盘上
 2.mount 一个光驱,上面有静态编译好的程序ls ps netstat等常用工具
 3.用nc把执行步骤输出到远程机器上
 
9
 用md5sum保存一个全局的文件
 find /sbin -type f|xargs md5sum >1st
 检查是否改变
 md5sum -c 1st|grep OK
 
10
 避免在已经攻击的机器上过多写操作,可以:
 1.在另一个机器192.168.20.191上运行
 nc -L -p 1234 >some_audit_output.log 注意L是大写,可以永久侦听
 2.被攻击机器上运行
 command|nc 192.168.20.191 1234
 或
 script. >/mnt/export.log
 检测完毕后用ctrl+d保存记录
 
11
 通过进程查找可疑程序方法:
 1.netstat -anp 这步主要靠经验,把可疑的都记录下来
 2.进入内存目录 cd /proc/3299
 3. ls -la,一般exe可以看到执行文件路径,
 4.再进入fd目录查看文件句柄,至此一般都可以找出执行程序
 5.ps -awx 把刚才可疑的进程观察一遍
 
12
 如果hacker把日志删除了:
 1.查找所有未被删除彻底的日志,比如history,sniffer日志
 2./proc/pid/fd 目录里提示已经删除的文件
 l-wx—— 1 root root 64 Aug 10 20:54 15 -> /var/log/httpd/error_log (deleted)
 l-wx—— 1 root root 64 Aug 10 20:54 18 -> /var/log/httpd/ssl_engine_log (deleted)
 l-wx—— 1 root root 64 Aug 10 20:54 19 -> /var/log/httpd/ssl_mutex.800 (deleted)
 l-wx—— 1 root root 64 Aug 10 20:54 20 -> /var/log/httpd/access_log (deleted)
 l-wx—— 1 root root 64 Aug 10 20:54 21 -> /var/log/httpd/access_log (deleted)
 l-wx—— 1 root root 64 Aug 10 20:54 22 -> /var/log/httpd/ssl_request_log (deleted)
 l-wx—— 1 root root 64 Aug 10 20:54 23 -> /var/log/httpd/ssl_mutex.800 (deleted)
 lrwx—— 1 root root 64 Aug 10 20:54 3 -> /var/run/httpd.mm.800.sem (deleted)
 lrwx—— 1 root root 64 Aug 10 20:54 4 -> /var/log/httpd/ssl_scache.sem (deleted)
 
3.用静态编译的lsof |grep deleted查看哪些被删除
 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
 gpm 1650 root 1u REG 8,2 5 149743 /var/run/gpm208raa (deleted)
 
4.得到文件inode号,这里是149743
 5.使用sleuthkit工具来恢复,
 df /var得出硬盘位置是sda1
 icat /dev/sda1 149743
 6.把恢复的文件仔细查看,一般都可以找到痕迹了
 
这样会使分析编译后的程序困难
 gcc -04 -evil.c -o evil
 strip ./evil
 
1.file查看文件类型,是否静态编译、是否strip过
 2.strings显示程序中的asicc字符串,通过字符串再到google上找
 3.strace是跟踪系统调用(这个还不知道怎么样用)strace -p pid
 4.gdb(更不会用啦)
 
13
 有些进程不在进程里显示,但在/proc中有痕迹,可比较找出隐藏的进程
 proc是伪文件系统,为/dev/kmem提供一个结构化的接口,便于系统诊断并查看每一个正在运行的可执行文件的环境
 #ps -ef|awk ‘{print $2}’|sort -n|uniq >1
 #ls /porc |sort -n|uniq >2
 #diff 1 2
 
14
 应急工具tct,里面有许多使用工具,包括icat等数据恢复
 如果在被攻击的机器取证,可以mount一块硬盘,也可以备份到网络中,方法:
 a.在网络机器运行 nc -L -p 1234 >abc.img
 b.肉鸡运行 dd if=/dev/hdb5 count 20000 bs=1024|nc 192.168.0.1 1234 -w 3
 如果备份过大,则可以侦听多个端口,执行多个dd拷贝,然后把文件合并 cat 2 >>1.img
 
15
 ldd可以显示一个可执行程序所依赖的动态库,但间接依赖库无法显示出来
 [root@rh9bk root]# ldd /bin/ls
 libtermcap.so.2 => /lib/libtermcap.so.2 (0×40022000)
 libc.so.6 => /lib/tls/libc.so.6 (0×42000000)
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0×40000000)
 strace工具是一个调试工具,它可以显示出一个程序在执行过程中的所有系统调用,
 [root@rh9bk root]# strace -eopen /bin/ls >/dev/null
 open(“/etc/ld.so.preload”, O_RDONLY) = -1 ENOENT (No such file or directory)
 open(“/etc/ld.so.cache”, O_RDONLY) = 3
 open(“/lib/libtermcap.so.2″, O_RDONLY) = 3
 open(“/lib/tls/libc.so.6″, O_RDONLY) = 3
 open(“/usr/lib/locale/locale-archive”, O_RDONLY|O_LARGEFILE) = 3
 open(“.”, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
 open(“/etc/mtab”, O_RDONLY) = 3
 open(“/proc/meminfo”, O_RDONLY) = 3
 
strace -o out telnet 192.168.100.100
 o参数的含义是将strace的输出信息生成到out文件中,这个文件名是可以随意制定的。
 我们打开out文件会发现大量的系统调用信息,我们关心的主要是open这个系统调用的信息,open是用来打开文件的,不仅调用动态库要先用open打开,读取配置文件也使用open,所以用sed写一个简单的脚本就可以输出out文件中所有的open信息
 sed -n -e ‘/^open/p’ out
 输出信息如下:
 open(“/etc/ld.so.preload”, O_RDONLY) = -1 ENOENT (No such file or directory)
 open(“/etc/ld.so.cache”, O_RDONLY) = 3
 open(“/lib/libutil.so.1″, O_RDONLY) = 3
 open(“/usr/lib/libncurses.so.5″, O_RDONLY) = 3
 open(“/lib/i686/libc.so.6″, O_RDONLY) = 3
 open(“/etc/resolv.conf”, O_RDONLY) = 3
 open(“/etc/nsswitch.conf”, O_RDONLY) = 3
 open(“/etc/ld.so.cache”, O_RDONLY) = 3
 open(“/lib/libnss_files.so.2″, O_RDONLY) = 3
 open(“/etc/services”, O_RDONLY) = 3
 open(“/etc/host.conf”, O_RDONLY) = 3
 open(“/etc/hosts”, O_RDONLY) = 3
 open(“/etc/ld.so.cache”, O_RDONLY) = 3
 open(“/lib/libnss_nisplus.so.2″, O_RDONLY) = 3
 open(“/lib/libnsl.so.1″, O_RDONLY) = 3
 open(“/var/nis/NIS_COLD_START”, O_RDONLY) = -1 ENOENT (No such file or directory)
 open(“/etc/ld.so.cache”, O_RDONLY) = 3
 open(“/lib/libnss_dns.so.2″, O_RDONLY) = 3
 open(“/lib/libresolv.so.2″, O_RDONLY) = 3
 open(“/etc/services”, O_RDONLY) = 3
 open(“/root/.telnetrc”, O_RDONLY) = -1 ENOENT (No such file or directory)
 open(“/usr/share/terminfo/l/linux”, O_RDONLY) = 4
 从输出中可以发现ldd显示不出来的几个库
 /lib/libnss_dns.so.2 ,
 /lib/libresolv.so.2 ,
 /lib/libnsl.so.1,
 /lib/libnss_nisplus.so.2,
 /lib/libnss_files.so.2
 
strace -o aa -ff -p PID会产生aa名称开头的多个文件
 
grep open aa* | grep -v -e No -e null -e denied| grep WR 查看其打开调用的文件信息。
 
16
 要把日志发送到日志主机步骤:
 a.vi /etc/syslog.conf *.* @192.168.20.163 把所有日志发送到192.168.20.163
 b.service syslog restart
 c.在192.168.20.163安装kiwisyslogd
 d.远程登陆,故意输入错误密码,可看到日志主机上马上有报警,也可以tcpdump port 514观察
 
17
 如果知道黑客是0927入侵的,则:
 touch -t 09270000 /tmp/a
 find / \( -newer /tmp/a -o -cnewer /tmp/a \) -l
 这样那天改变和创建的文件被列出
 
18
 整盘复制
 dd if=/dev/sda f=/dev/sdb bs=1024
 分区复制 测试
 dd if=/dev/sda1 f=/abc bs=1024 这里是保存在了根分区,用mount查看是sda2
 启动另一个linux
 输入:mount /dev/sda2 /mnt
 这里可以看到刚才的abc文件,输入:mount aa /tmp -o loop
 这里看到就是刚才镜像的文件内容
 
19 find
 查找指定字符的文件(测试发现二进制也可以发现,是strings后的内容)
 find /tmp -type f -exec grep “no exist” {} \; -print
 
find /etc/rc.d -name ‘*crond’ -exec file {} ;
 
查找/etc/rc.d目录下面所有以crond结束的文件,并使用file指令查看其属性,注意:exec和file间是一个空格,file和{}间是一个空格,file和;之间是一个空格,;是一个整体。
 
20
 kill -SIGSEGV 进程号 会产生一个core文件,用strings可以看信息,用一个c程序可以重新构建它的可执行程序,study/unix/下保存一个文章。测试没产生core,原因不详。
 
转自:http://bbs.linuxtone.org/thread-8904-1-1.html


================================================================================================================

 

Linux上限制用户的带宽

 

最近有个需求,一台机器上有多个用户,有些用户要多分配一些网络带宽,另外一些用户少分配一些(万恶的等级制度啊!)。既然有这个需求,那就做吧。首先果断祭起Google,大概了解到,Linux下流量控制基本上只有tc这一个,配合iptables还是可以搞定这个需求的。

TC的全称是Traffic Control,也就是流量控制,是iproute2中的一部分。实际上它只能控制本机发出去的流量,对于发往本机的流量,它是控制不了的。更多TC的信息,请看这个(PDF)[http://lartc.org/LARTC-zh_CN.GB2312.pdf]。

iptables就更不用说了,不知道iptables你还好意思做程序员?

看了看tc的文档,显然要选择htb队列规定,完美满足需求。总带宽是100Mbit,vip组用户共享80Mbit,普通用户组共享20Mbit.

废话不多说了,直接上代码。
INTERFACE=eth0
tc qdisc add dev $INTERFACE root handle 1: htb default 10
tc class add dev $INTERFACE parent 1: classid 1:1 htb rate 100mbit
tc class add dev $INTERFACE parent 1:1 classid 1:10 htb rate 1kbps ceil 80mbit  #不在普通用户组和vip用户组,分配1k的带宽,但是可以借用最高80m的带宽。
tc class add dev $INTERFACE parent 1:1 classid 1:20 htb rate 80mbps ceil 90mbit  # vip用户组分配80m带宽
tc class add dev $INTERFACE parent 1:1 classid 1:30 htb rate 20mbps ceil 90mbit  # 普通用户组分配20m带宽

#iptables的配置
iptables -t mangle -A POSTROUTING -m owner --gid-owner $vip_id -j CLASSIFY --set-class 1:20
iptables -t mangle -A POSTROUTING -m owner --gid-owner $normal_id -j CLASSIFY --set-class 1:20

 搞定!

==================================================================================================================


cc攻击
1,494 views, Hacker, by 木木.
CC主要是用来攻击页面的.大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,对不?!一般来说,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观,现在知道为什么很多空间服务商都说大家不要上传论坛,聊天室等东西了吧。
 
  一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的体积有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
 
  CC就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面)。很多朋友问到,为什么要使用代理呢?因为代理可以有效地隐藏自己的身份,也可以绕开所有的防火墙,因为基本上所有的防火墙都会检测并发的TCP/IP连接数目,超过一定数目一定频率就会被认为是Connection-Flood。
 
  使用代理攻击还能很好的保持连接,我们这里发送了数据,代理帮我们转发给对方服务器,我们就可以马上断开,代理还会继续保持着和对方连接(我知道的记录是有人利用2000个代理产生了35万并发连接)。
 
  可能很多朋友还不能很好的理解,我来描述一下吧.我们假设服务器A对Search.asp的处理时间需要0.01S(多线程只是时间分割,对结论没有影响),也就是说他一秒可以保证100个用户的Search请求,服务器允许的最大连接时间为60s,那么我们使用CC模拟120个用户并发连接,那么经过1分钟,服务器的被请求了7200次,处理了6000次,于是剩下了1200个并发连接没有被处理.有的朋友会说:丢连接!丢连接!问题是服务器是按先来后到的顺序丢的,这1200个是在最后10秒的时候发起的,想丢?!还早,经过计算,服务器满负开始丢连接的时候,应该是有7200个并发连接存在队列,然后服务器开始120个/秒的丢连接,我们发动的连接也是120个/秒,服务器永远有处理不完的连接,服务器的CPU 100%并长时间保持,然后丢连接的60秒服务器也判断处理不过来了,新的连接也处理不了,这样服务器达到了超级繁忙状态。
 
  当然,CC也可以利用这里方法对FTP进行攻击,也可以实现TCP-FLOOD,这些都是经过测试有效的。
 
防范方法
 
  说了攻击原理,大家肯定会问,那么怎么防御?使用硬件防火墙我不知道如何防范,除非你完全屏蔽页面访问,我的方法是通过页面的编写实现防御。
 
  1. 使用Cookie认证.这时候朋友说CC里面也允许Cookie,但是这里的Cookie是所有连接都使用的,所以启用IP+Cookie认证就可以了。
 
  2. 利用Session.这个判断比Cookie更加方便,不光可以IP认证,还可以防刷新模式,在页面里判断刷新,是刷新就不让它访问,没有刷新符号给它刷新符号.给些示范代码吧,Session:
 
  程序代码:
 
  


〈%
 
  if session(“refresh”)〈〉 1 then
 
  Session(“refresh”)=session(“refresh”)+1
 
  Response.redirect “index.asp”
 
  End if
 
  %〉
  这样用户第一次访问会使得Refresh=1,第二次访问,正常,第三次,不让他访问了,认为是刷新,可以加上一个时间参数,让多少时间允许访问,这样就限制了耗时间的页面的访问,对正常客户几乎没有什么影响。
 
  3. 通过代理发送的HTTP_X_FORWARDED_FOR变量来判断使用代理攻击机器的真实IP,这招完全可以找到发动攻击的人,当然,不是所有的代理服务器都发送,但是有很多代理都发送这个参数.详细代码:
 
  程序代码:


  〈%
 
  Dim fsoObject
 
  Dim tsObject
 
  dim file
 
  if Request.ServerVariables("HTTP_X_FORWARDED_FOR")="" then
 
  response.write "无代理访问"
 
  response.end
 
  end if
 
  Set fsoObject = Server.CreateObject("Scripting.FileSystemObject")
 
  file = server.mappath("CCLog.txt")
 
  if not fsoObject.fileexists(file) then
 
  fsoObject.createtextfile file,true,false
 
  end if
 
  set tsObject = fsoObject.OpenTextFile(file,8)
 
  tsObject.Writeline Request.ServerVariables("HTTP_X_FORWARDED_FOR")
 
  &"["Request.ServerVariables("REMOTE_ADDR")&"]"&now()
 
  Set fsoObject = Nothing
 
  Set tsObject = Nothing
 
  response.write "有代理访问"
 
  %〉
  这样会生成CCLog.txt,它的记录格式是:真实IP [代理的IP] 时间,看看哪个真实IP出现的次数多,就知道是谁在攻击了.将这个代码做成Conn.asp文件,替代那些连接数据库的文件,这样所有的数据库请求就连接到这个文件上,然后马上就能发现攻击的人。
 
  4. 还有一个方法就是把需要对数据查询的语句做在Redirect后面,让对方必须先访问一个判断页面,然后Redirect过去。
 
  5. 在存在多站的服务器上,严格限制每一个站允许的IP连接数和CPU使用时间,这是一个很有效的方法。
 
  CC的防御要从代码做起,其实一个好的页面代码都应该注意这些东西,还有SQL注入,不光是一个入侵工具,更是一个DDOS缺口,大家都应该在代码中注意.举个例子吧,某服务器,开动了5000线的CC攻击,没有一点反应,因为它所有的访问数据库请求都必须一个随机参数在Session里面,全是静态页面,没有效果.突然发现它有一个请求会和外面的服务器联系获得,需要较长的时间,而且没有什么认证,开800线攻击,服务器马上满负荷了。
 
  代码层的防御需要从点点滴滴做起,一个脚本代码的错误,可能带来的是整个站的影响,甚至是整个服务器的影响,慎之!
 
  回答者:懒的不要命 – 试用期 一级 3-13 01:07
 
  僵尸网络(英文名称叫BotNet),是互联网上受到黑客集中控制的一群计算机,往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。因此,不论是对网络安全运行还是用户数据安全的保护来说,僵尸网络都是极具威胁的隐患。僵尸网络的威胁也因此成为目前一个国际上十分关注的问题。然而,发现一个僵尸网络是非常困难的,因为黑客通常远程、隐蔽地控制分散在网络上的“僵尸主机”,这些主机的用户往往并不知情。因此,僵尸网络是目前互联网上黑客最青睐的作案工具。
 
  CNCERT/CC相关负责人介绍说,这次处理的僵尸网络事件最初源于2004年底一起严重的拒绝服务攻击事件,通过分析和监测,CNCERT/CC发现攻击流量来自庞大的被植入某特定恶意程序的计算机群,该机群的数目达到近10万台,来自河北的某黑客通过境内外多台服务器秘密操纵这些计算机。被操纵控制的计算机中,有6万多台位于我国境内,其中还包括一些政府和其他重要部门的计算机。于是CNCERT/CC迅速通过信息产业部向国家信息化办公室和公安部作了汇报。
 
  政府部门对此事件十分重视,在国家信息化办公室的协调指挥下,CNCERT/CC配合公安部公共信息网络安全监察局迅速开展调查取证工作,摸清了该僵尸网络的具体情况,锁定作案嫌疑人,并最终在河北唐山将黑客许某抓获。
 
  同时,为了避免被操控主机被其他人非法利用或者窃取数据,CNCERT/CC在CERT网站(www.cert.org.cn)上发布了专门的清除工具,并与各互联网单位和重要信息系统部门合作开展本部门主机的木马查杀工作,有效地捣毁了黑客留下的僵尸网络。
 

 
 
后话
 
  在这次事件处理过程中,网络应急组织和执法部门的成功合作体现出巨大的威力,充分发挥出各自在技术和执法能力上的优势,随着双方合作的进一步加强,我国的网络安全保障和打击网络犯罪工作的能力势必将得到进一步提高。
 
  CC是一种攻击工具(软件),基于DDOS攻击的原理!
 
  首先DoS(Denial of Service) :阻断服务,泛指黑客试图妨碍正常使用者使用网络上的服务。
 
  DDoS(Distributed Denial of Service):分布式阻断服务,是DoS的一种特例,指黑客利用多台机器同时攻击来达到妨碍正常使用者使用服务的目的。
 
  再说CC,CC主要是用来攻击页面的。每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停的进行访问那些需要大量数据操作——就是需要大量CPU时间的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接,到了超级繁忙的状态,就把网络给阻断了!正常的访问就无法进行了!


===================================================================================================================================


Shell 防止CC攻击
1,730 views, Hacker, Shell, by 木木.
可将此防止攻击部分分为三个脚本,以=为界,在防止CC攻击前需要了解CC攻击的特别,可以查看以下内文章:
 
http://www.opkeep.com/program/shell/shell_cc_attack.html
 


以下防止CC攻击主要是过滤访问日志的方法将IP封入防火墙内,将脚本放入cron中十分钟执行一次即可,也可跟据自己的需求进行修改,因为我使用的lighttp做web服务器,所以是读取lighttp访问日志,此脚本同样适用apache服务器:


#!/bin/bash
/www/MTCC/solution_ip.sh
/usr/bin/tail -1000 /var/log/lighttpd/access.log  | grep -v 127.0.0.1 | awk '{print $1}' | awk '$1 {++S[$1]} END {for(a in S) print a, S[a]}' | sort -k 2 -n -r  | awk '$2>10 {print $1}' > /www/MTCC/block_ip.txt
/www/MTCC/block_ip.sh

#!/bin/bash
for blockIp in `cat /www/MTCC/block_ip.txt`
do
 echo "Blocking...$blockIp"
 /sbin/iptables -I IPTABLES 4 -s $blockIp -j REJECT
done
#iptables -A INPUT -s $1 -j REJECT

#!/bin/bash
/usr/bin/tail -1000 /var/log/lighttpd/access.log  | grep -v 127.0.0.1 | awk '{print $1}' | awk '$1 {++S[$1]} END {for(a in S) print a, S[a]}' | sort -k 2 -n -r  | awk '$2>10 {print $1,$2}'


======================================================================


TAG:

abinNO1的个人空间 引用 删除 abinNO1   /   2013-10-09 19:49:02
http://www.csdn.net/article/2013-10-08/2817116-7-top-tactics-of-hack-attacks
 

评分:0

我来说两句

Open Toolbar