判断攻击类型:
netstat -an |grep SYN|wc -l
netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 salt:35442 salt:4505 ESTABLISHED
tcp 0 0 salt:46612 106.11.68.13:http ESTABLISHED
....
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 7091 @/org/kernel/udev/udevd
unix 10 [ ] DGRAM 8370 /dev/log
unix 2 [ ] DGRAM 4792814
unix 3 [ ] STREAM CONNECTED 1801756
/var/run/salt/master/master_event_pull.ipc
netstat 的输出结果可以分为两部分,一部分是Active Internet connections 另一部分是Active UNIX domain sockets
Active Inter connections称为有源TCP连接,其中Recv-Q 和Send-Q指的是接收队列和发送队列,这些数字都应该是0 ,如果不是0 ,那么表示软件包在队列中堆积。
Active UNIX domain sockets 称为有源Unix域套接口,和网络套接字一样,但是只能用于本机通信,性能可以提高一倍。,Proto 表示连接到本套接口上的进程号,Types显示套接口的类型,state 显示套接口当前的状态,Path表示连接到套接口的其他进程使用的路径名。
常用参数
-a 显示所有的选项,默认不显示LISTEN相关
-t 仅显示tcp相关选项
-u 仅显示udp 相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出有在监听服务状态的链接
-p 仅显示建立相关连接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如Uid
-s 按各个协议进行统计
-c 每隔一定时间执行该netstat命令
-i 显示网络接口列表
查看连接某服务端口最多的IP地址
netstat -apn |grep "IP:PORT" |awk '{print $5}'|awk -F : '{print $1}'|sort|uniq -c |sort -nr|head -20
iftop 工具
实时流量监控工具
iftop可以用来监控网卡的实时流量,可以指定网段,方向解析IP,显示端口信息。
12.5Kb 25.0Kb 37.5Kb 50.0Kb 62.5Kb
+----------------+----------------+----------------+----------------+-----------------
salt => 1.192.166.148 1.80Kb 1.85Kb 1.85Kb
<= 160b 256b 256b
salt => 100.100.2.136 284b 172b 172b
<= 568b 315b 315b
--------------------------------------------------------------------------------------
TX: cum: 2.82KB peak: 3.09Kb rates: 2.41Kb 2.26Kb 2.26Kb
RX: 1.03KB 1.45Kb 1.06Kb 841b 841b
TOTAL: 3.85KB 4.55Kb 3.47Kb 3.08Kb 3.08Kb
界面最上边显示的是类似刻度尺的刻度范围,为显示流量图形的长条做标尺用的。
中间的=> <= 表示的是流量的方向。
TX:发送流量
RX:接收流量
TOTAL :总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去2s,10s,40s 的平均值
iftop 参数说明
-i 指定监控的网卡
-B 以bytes为单位显示流量,默认是bits
-n 使host 信息默认直接显示IP
-N 使端口信息默认显示端口号
-F 显示特定网段的进出流量
-h 帮助信息
-b 使流量图形条默认显示
-f 过滤计算包
-P 使host信息和端口信息默认显示
-m 调整显示的刻度。
进入iftop 交互界面后的操作命令
h 显示帮助
n 显示本机IP或者主机名
s 显示本机host信息
d 显示/隐藏远端目标的host 信息
t 切换显示格式为2行/1行,只显示发送流量/只接受流量
N切换显示端口号或者端口服务名称
S切换是否显示本机的端口信息
D切换是否显示远端目标主机的的端口信息
p 切换是否显示端口信息
P切换暂停,继续显示
b切换显示平均流量图形条
B切换计算2秒或者10秒,40秒的平均流量。
T显示每个连接的总流量。
j或按k可以向上或向下滚动屏幕显示的连接记录;
1或2或3可以根据右侧显示的三列流量数据进行排序;
<根据左边的本机名或IP排序;
根据远端目标主机的主机名或IP排序;
o切换是否固定只显示当前的连接;
lsof
lsof 一切皆文件
lsof (list open files)是一个查看当前系统文件的工具,在linux环境下,任何事物都已文件的形式存在。
lsof 可以打开的文件可以是:
1. 普通文件
2. 目录
3. 网络文件系统的文件
4. 字符或者设备文件
5. 共享库
6. 管道,命名管道
7. 符号链接
8. 网络文件,NFS file 网络socket unix域名socket
9. 还有其他类型的文件。
-a 列出打开文件存在的进程
-c <进程名> 列出指定进程所打开的文件
-g 列出GID号进程的详情
-d <文件号>列出占用该文件号的进程
+d <目录> 列出该目录下被打开的文件
+D <目录> 递归显示目录下被打开的文件
-n <目录> 列出使用NFS的文件
-i <条件> 列出符合条件的进程(4,6,协议:端口,@IP)
-p <进程号> 列出指定进程所打开的文件
-u 列出UID进程号详情
-h 帮助信息
-v 显示版本信息。
容易被替换的工具
netstat lsof ps ss
一般工具可执行文件大小都在几十K到几百K
可以使用 lsof –i :15773 这样方式找到 PID,再 lsof –p PID 找到打开的相关文件。
直接下载正常系统里的 netstat、ps 等工具上传到被黑的系统里使用,再将不可用的替换掉
dstat
dstat 可以用来实时监控CPU,磁盘,网络,IO,内存等使用情况。
直接使用dstat ,默认用的是-cdngy参数,可以分别显示cpu,disk,net,page,system信息。默认1s显示一条信息,可以指定显示一条信息的时间间隔 如:dstat 5 表示每5s显示一条信息,dstat 5 10 表示每5s显示一条,一共显示10条。
dstat 1
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
1 1 98 0 0 0| 42k 8342B| 0 0 | 0 0 | 91 181
0 0 100 0 0 0| 0 0 | 108B 106B| 0 0 | 83 180
0 0 100 0 0 0| 0 0 | 54B 330B| 0 0 | 82 177
cpu : hiq ,siq 分别表示硬中断和软中断的次数
system:int ,csw 表示系统中断(interrupt)次数和上下文切换(context switch)次数。
dstat [-afv] [options..] [delay [count]]
常用选项:
-c :显示CPU系统占用,用户占用,空闲等待,中断和软件中断信息、
-C:当有多个CPU时,此参数可以按需分别显示CPU状态, 如:-C 0,1
-d:显示磁盘读写数据大小
-D: hda,total:include hda and total
-n:显示网络状态
-N:eth1,total,有多块网卡时要指定网卡状态
-l:显示系统负载情况
-m:显示内存情况
-g:显示页面使用情况
-p:显示进程状态
-s:显示交换分区使用情况
##
-S:类似D/N
##
--tcp :显示TCP统计
--udp :显示UDP统计
--freespace 显示当前磁盘空间使用率
--proc-count:显示正在运行的程序数
--top-bio:支出I/O最大的进程
--top-cpu:图形化显示CPU占用最大的进程
--top-io:显示正常的I/O最大的进程
——top-mem:显示占用最多内存的进程
--disk-util:显示某一时间磁盘的忙碌状态
-r:I/O请求状态
-y:系统状态
--ipc:显示ipc消息队列,信号等信息
--socket 用来显示TCP,UDP端口状态
-a: 默认选项,等同于-cdngy
-v: 等同于-pmgdsc -D total
--output 文件:把状态信息以csv格式重定向到指定的文件中。
校验系统文件是否被纂改
系统上有很多的第三方软件,校验下载文件是否被修改过就十分重要了。 而校验方法一般是MD5,SHA1,PGP三种。
- MD5原理:
对文件进行MD5 Hash ,求出文件的MD5哈希值,通过下载后的文件MD5哈希值和发布者提供的MD5哈希值是否一致来判断文件是否在发布者发布之后被纂改过。
- SHA1校验:
原理和MD5一样,都是通过对文件进行HASH求值。
- PGP校验
原理:使用非对称加密,程序生成唯一的密钥对(公钥和私钥:Public Key和Private Key/Secret Key)。操作方法如下:
发布者通过用生成的密钥对中的私钥对要发布的文件进行签名,得到签名文件(sign);
发布者将密钥对中的公钥发布到公钥服务器;
发布者将文件和用私钥生成的签名一起发布;
验证者下载发布者发布的文件和签名;
使用PGP的程序获取的发布者第二步发布的公钥;
使用公钥校验文件签名
由于PGP是商业应用程序,在CentOS/Linux中,具有同类功能的是GPG(也就是:GnuPG),同样遵守OpenPGP数据加密标准(RFC 4880),没有安装可以用yum install gnupg安装,命令是:gpg
Centos 校验软件包完整性的工具:RPM
在
RPM -V “-V” 检查与某一RPM包相关所有文件的完整性。
rpm -V package_name 校验某个软件包的完整性。
rpm -Va 校验所有文件的完整性:
S.5….T. /lib/udev/rules.d/60-net.rules
……
一般被列出来的都是校验失败的文件,
右边给出了校验失败的文件,左边给出了校验失败的原因>。
S = 大小改变
M = 权限改变
5 = MD5改变
L = 连接改变
D = 设备改变
U = 用户改变
G = 所属组改变
T = 日期和时间改变
missing = 文件丢失。
使用命令将其保存到文件中。
rpm-Va>/root/rpm_chk.txt&
rpm -qf /bin/ping 用来检查那个软件包安装了这个文件。
rpm -qf /bin/ping
iputils-20071127-24.el6.x86_64
Ubuntu校验文件的完整性
下边这个是系统被入侵后的校验结果。
debsums |grep -v OK
/lib/x86_64-linux-gnu/libattr.so.1.1.0 FAILED
/lib/x86_64-linux-gnu/ld-2.19.so FAILED
/lib/x86_64-linux-gnu/libc-2.19.so FAILED
/lib/x86_64-linux-gnu/libnss_dns-2.19.so FAILED
/lib/x86_64-linux-gnu/libnss_files-2.19.so FAILED
/lib/x86_64-linux-gnu/libresolv-2.19.so FAILED
解决办法:
1.将软件卸载后重新安装
2.升级软件
3.升级源,升级软件
streen:
pstree
pstree(process status tree)
功能说明:以树状图显示程序。
语 法:pstree [-acGhlnpuUV][-H ][/]
补充说明:pstree指令用ASCII字符显示树状结构,清楚地表达程序间的相互关系。如果不指定程序识别码或用户名称,则会把系统启动时的第一个程序视为基层,并显示之后的所有程序。若指定用户名称,便会以隶属该用户的第一个程序当作基层,然后显示该用户的所有程序。
参 数:
-a 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示。
-c 不使用精简标示法。
-G 使用VT100终端机的列绘图字符。
-h 列出树状图时,特别标明现在执行的程序。
-H 此参数的效果和指定"-h"参数类似,但特别标明指定的程序。
-l 采用长列格式显示树状图。
-n 用程序识别码排序。预设是以程序名称来排序。
-p 显示程序识别码。
-u 显示用户名称。
-U 使用UTF-8列绘图字符。
-V 显示版本信息。