Intrusion analysis:
1.检查history,last,uname,netstat -tnl,init.d,profile,~/.bashrc,w,lsof,iftop分析流量(启动项,登陆日志wtmp,历史命令,关键目录等)
2.检查进程和系统服务,创建文件,修改文件,root后门是否异常
3.检查开启服务的日志是否异常(根据ip,恶意文件名等)
4.可疑文件分析。(世界杀毒网)
5.查看计划任务
Utility Menu:
1.分页查看文件:
more e.log
2.静态查看进程:
pa aux | awk ‘{print $2}’
awk ’{print $2}’ 截取第二列显示
3.查看文件状态:
stat update
update为命令文件;
stat 用来查看文件时间状态,查看什么时候被修改过
4.使用工具进行扫描rkhank,chkrootkit
rkhank –cheak
5.查看在某个时间段被创建的文件:
touch -t 201306300000 a
touch -t 201307010000 b
find / -cnewer a -a ! -cnewer b
时间段是2013年6月30 到7月1号;
a 和b 为被创建的文件;
6.查看文件时间,做对比看那些文件被创建或修改:
ls ll
lsof -n
**1.列出所有打开的文件:**
lsof
备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位
**2. 查看谁正在使用某个文件**
lsof /filepath/file
**3.递归查看某个目录的文件信息**
lsof +D /filepath/filepath2/
****备注: 使用了+D,对应目录下的所有子目录和文件都会被列出
**4. 比使用+D选项,遍历查看某个目录的所有文件信息 的方法**
lsof | grep ‘/filepath/filepath2/’
**5. 列出某个用户打开的文件信息**
lsof -u username
****备注: -u 选项,u其实是user的缩写
**6. 列出某个程序所打开的文件信息**
**lsof -c [MySQL](http://lib.csdn.net/base/14)**
****备注: -c 选项将会列出所有以[MySQL](http://lib.csdn.net/base/mysql)开头的程序的文件,其实你也可以写成 **lsof | grep mysql, **但是第一种方法明显比第二种方法要少打几个字符了
**7. 列出多个程序多打开的文件信息**
lsof -c mysql -c apache
**8. 列出某个用户以及某个程序所打开的文件信息**
lsof -u test -c mysql
**9. 列出除了某个用户外的被打开的文件信息**
lsof -u ^root
备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示
**10. 通过某个进程号显示该进行打开的文件**
lsof -p 1
**11. 列出多个进程号对应的文件信息**
lsof -p 123,456,789
**12. 列出除了某个进程号,其他进程号所打开的文件信息**
lsof -p ^1
**13 . 列出所有的网络连接**
**lsof -i**
**14. 列出所有tcp 网络连接信息**
lsof -i tcp
**15. 列出所有udp网络连接信息**
lsof -i udp
**16. 列出谁在使用某个端口**
lsof -i :3306
**17. 列出谁在使用某个特定的udp端口**
lsof -i udp:55
**特定的tcp端口**
lsof -i tcp:80
**18. 列出某个用户的所有活跃的网络端口**
lsof -a -u test -i
**19. 列出所有网络文件系统**
lsof -N
**20.域名socket文件**
lsof -u
**21.某个用户组所打开的文件信息**
lsof -g 5555
**22. 根据文件描述列出对应的文件信息**
lsof -d description(like 2)
**23. 根据文件描述范围列出文件信息**
lsof -d 2-3
7.查找根目录下所有带关键字文件位置:
find / -type f | xargs grep -l "market"
find ./ -mtime 0:返回最近24小时内修改过的文件。./代表需要查找的文件夹
find ./ -mtime 1 : 返回的是前48~24小时修改过的文件。而不是48小时以内修改过的文件。
那怎么返回10天内修改过的文件?find还可以支持表达式关系运算,所以可以把最近几天的数据一天天的加起来:
find ./ -mtime 0 -o -mtime 1 -o -mtime 2 ……虽然比较土,但也算是个方法了。
ps aux | grep sshd #查看进程
strace -o aa -ff -p 13619 #查看子进程
grep open aa* | grep -v -e No -e null -e denied| grep WR
我们grep一下open系统调用,然后过滤掉错误信息和/dev/null信息,以及denied信息,并且找WR的,就是读写模式打开的,因为要把记录的密码写入文件,肯定要是以写方式打开的文件,大致的看看,很容易找到异常文件/tmp/xxxxxx
losf -i tcp:1521 -n #查看端口被那些程序使用
lsof -p ^1 #查看出了1号进程所有的进程打开的文件信息
losf abc #显示文件的进行
find / -name zabbix*.log #查看zabbix日志
查看80端口的tcp连接:
netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l
sed 's/\.0/\./g'
查找大于100M的文件!
find /* -type f -size +100M
查看当前目录下文件和目录大小:
du -h *
apache日志分析,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数。
cat access.log |awk '{print $1}' |sort |uniq -c |sort -rn |wc -l 统计访问IP的总数
cat access.log |awk '{print $1}' |sort |uniq -c |sort -rn 统计访问IP
cat access.log |awk '{print $1}' |sort |uniq -c |sort -rn|head 100 统计前100访问IP
awk -F '//' '{print $2}' wooyun.txt
awk -F '.' '{if($1>0) print $0}' domain2ip.txt
grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 11
cut -d " " -f 1 clientuser.log |uniq -c|sort -r|head -1|awk '{print $2}'
-d 以空格为截断字符
-f 截取每行第一段
uniq -c 统计数量 如: 99 x.x.x.x
snort -r 倒序排列
head -1 显示第一列
awk '{print $2}' 截取并打印第2 列字符
找出apache日志中访问量最大的IP
在行首添加"http://"
sed -i 's/^/http:\/\//g' txt.txt
1、删除文档的第一行
sed -i '1d'
2、删除文档的最后一行
sed -i '$d'
工具介绍:
1.chkrookit 检查后门
2.安装rkhunter
1.执行命令:
tar -xvf rkhunter-1.4.0.tar.gz
cd rkhunter-1.4.0
./installer.sh --install
2.为基本系统程序建立校对样本,建议系统安装完成后就建立。
执行命令:
rkhunter --propupd
ls /var/lib/rkhunter/db/rkhunter.dat #样本文件位置
3.运行rkhunter检查系统
它主要执行下面一系列的测试:
3.1. MD5校验测试, 检测任何文件是否改动.
3.2. 检测rootkits使用的二进制和系统工具文件.
3.3. 检测特洛伊木马程序的特征码.
3.4. 检测大多常用程序的文件异常属性.
3.5. 执行一些系统相关的测试 - 因为rootkit hunter可支持多个系统平台.
3.6. 扫描任何混杂模式下的接口和后门程序常用的端口.
3.7. 检测如/etc/rc.d/目录下的所有配置文件, 日志文件, 任何异常的隐藏文件等等. 例如, 在检测/dev/.udev和/etc/.pwd.lock文件时候, 我的系统被警告.
3.8. 对一些使用常用端口的应用程序进行版本测试. 如: Apache Web Server, Procmail等.
执行命令:
rkhunter --check
如果您不想要每个部分都以 Enter 来继续,想要让程序自动持续执行,可以使用:
/usr/local/bin/rkhunter --check --sk
3.检查安全日志信息
more /var/log/secure |grep Accepted
4.查找webshell命令
find /opt/ -name "*.jsp" |xargs egrep 'assert|phpspy|c99sh|milw0rm|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\(\$\_\POST\[|eval \(str_rot13|\.chr\(|\$\{\"\_P|eval\(\$\_R|file_put_contents\(\.\*\$\_|base64_decode'
find /opt/ -name "*.jsp" |xargs egrep '\.exec\(request.getParameter\('
常用的日志文件如下:
access-log 纪录HTTP/web的传输
acct/pacct 纪录用户命令
aculog 纪录MODEM的活动
btmp 纪录失败的纪录
lastlog 纪录最近几次成功登录的事件和最后一次不成功的登录
messages 从syslog中记录信息(有的链接到syslog文件)系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
sudolog 纪录使用sudo发出的命令
sulog 纪录使用su命令的使用
syslog 从syslog中记录信息(通常链接到messages文件)
utmp 纪录当前登录的每个用户
wtmp 一个用户每次登录进入和退出时间的永久纪录
xferlog 纪录FTP会话
/var/log/secure与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
查看某个时间段被修改的日志:
cat /var/log/messgaes | grep “2012-6-1”
sed -n '/2017-01-04 11:00:00/,/2017-01-04 11:20:55/p' ejabberd.log
找出 3 天"以前"被改动过的文件 (前第三天以前 → 2011/09/05 12:00 以前的文件) (> 72 小时)
find /var/log/ -mtime +3 -type f -print
找出前第 3 天被改动过的文件 (2011/09/04 12:00 ~ 2011/09/05 12:00 ?鹊奈募? (72 ~ 96 小时)
find /var/log/ -mtime 3 -type f -print
找出第 3 天被改动过的文件 (也可以这样写)
find /var/log/ -mtime +2 -mtime -4 -type f -print
找出第 7天以前到11天以前之间被改动过的文件 (也可以这样写)
# find /var/log/ -mtime +7 -mtime -11 -type f -print
系统
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量
资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载
磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况
网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息
进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态
用户
# w # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务
服务
# chkconfig --list # 列出所有系统服务
# chkconfig --list | grep on # 列出所有启动的系统服务
程序
# rpm -qai # 查看所有安装的软件包
$yum list //列出所指定的软件包,后可以加上你想查找的软件包的名字
$yum linst installed //列出所有已安装的软件包
$yum info installed //列出所有已安装的软件包信息
查看 /var/log/yum.log
strings命令查看文件内容
复制/dev/sdc 到文件 cyqdrive.dd 中。将文件分割成多个 1GB 大小的文件。读取错误时,忽略该错误而不停止拷贝行为。这个例子命令如下:
#dd if=/dev/sdc split=1G of=cyqdrive.dd
刚才已经展示如何创建一个磁盘镜像,但只是创建镜像到系统的本地文件。但是当当前的物理空间不足时就要使用 netcat 来将 dd 命令的的输出通过网络连接进行重定向。首先在目标服务器上,启动 netcat 作为一个监听,并将输出重定向到一个远程服务器上的文件。我会用 netcat 监听 TCP 的 3452 端口,并将镜像写入一个远程的文件 cyqimage.dd。
#nc -l -p 3452 > myimage.dd
然后你可以对服务器(192.168.1.1)进行镜像拷贝,并通过标准输出(没有指定输出的文件)来将镜像文件输出到 netcat,然后由 netcat 将镜像文件发送到目标服务器,使用如下命令:
# dd if=/dev/sdc split=1G of=cyqdrive.dd | nc 192.168.1.1 3452
lsmod 列出内核
modinfo 查看内核信息
1. lsmod 列出已经加载的内核模块
lsmod 是列出目前系统中已加载的模块的名称及大小等;另外我们还可以查看 /proc/modules ,我们一样可以知道系统已经加载的模块。
2.modinfo 查看模块信息
modinfo 可以查看模块的信息,通过查看模块信息来判定这个模块的用途。
3.modprobe 挂载新模块以及新模块相依赖的模块
cat /proc/modules
#!/bin/bash
###########################################################################
# Check Abnormal User
###########################################################################
if [ $# -eq 2 ];then
if [ -d $1 ] && [ -d $2 ];then
WEBCHK=1
WEBDIR=$1
LOGDIR=$2
else
echo "Web dir $1 or $2 error, exit."
exit -1
fi
else
WEBCHK=0
fi
echo -e "\033[33m#### 0x0. Check system source use \033[0m"
echo -e "\033[33m|--> Check OS Version \033[0m"
cat /etc/redhat-release
echo -e "\033[33m|--> Check system cpu load \033[0m"
uptime
echo -e "\033[33m|--> Check system mem use \033[0m"
free -g
echo -e "\033[33m|--> Check system network rate use \033[0m"
sar -n DEV 3 1 | grep -vE '^$'
echo -e "\033[33m|--> Check system tool \033[0m"
ls -al `which stat`
stat `which ps top netstat sshd lsof find`
echo ""
echo -e "\033[33m#### 0x1. Check abnormal user \033[0m"
echo -e "\033[33m|--> Check passwd stat info, GID=0 or use bash \033[0m"
stat /etc/passwd | grep -vE 'ile|Inode'
echo -e "\033[33m|--> Check GID=0 or use bash user \033[0m"
grep -E '/bash|:0+:' /etc/passwd | grep -vE 'root|mysql|rpm|mysql|shutdown|halt|sync'
echo -e "\033[33m|--> Check shadow stat info and no password user \033[0m"
stat /etc/shadow | grep -vE 'ile|Inode'
echo -e "\033[33m|--> Check no password user \033[0m"
awk -F: 'length($2)==0 {print $1}' /etc/shadow
echo ""
echo -e "\033[33m#### 0x2. Check service and task info \033[0m"
echo -e "\033[33m|--> Check start chkconfig service \033[0m"
chkconfig --list |grep -E '2:on|3:on' | awk '{printf"%s ",$1}'
echo ""
echo -e "\033[33m|--> Check start rc.local \033[0m"
grep -vE '^$|^#' /etc/rc.local
echo -e "\033[33m|--> Check start crontab \033[0m"
crontab -l
echo ""
echo -e "\033[33m#### 0x3. Check process info \033[0m"
echo -e "\033[33m|--> Check ps result \033[0m"
ps axu | grep -v ]$
echo -e "\033[33m|--> Check hidden process \033[0m"
ps -ef | awk '{print $2}' | sort -n | uniq >1
ls /proc | sort -n |uniq >2
diff 1 2 | awk '{printf"%s ",$0}'
echo ""
echo -e "\033[33m#### 0x4. Check network info \033[0m"
echo -e "\033[33m|--> Check network hosts configure \033[0m"
cat /etc/hosts | grep -v 'localhost'
echo -e "\033[33m|--> Check network dns configure \033[0m"
cat /etc/resolv.conf | grep 'nameserver'
echo -e "\033[33m|--> Check network ip configure \033[0m"
/sbin/ip a|grep 'inet '| awk '{print $2}' | awk -F'/' '{printf"%s ",$1}'
echo ""
echo -e "\033[33m|--> Check network interface promisc mode \033[0m"
ifconfig | grep 'PROMISC'
echo -e "\033[33m|--> Check network interface forward mode \033[0m"
cat /proc/sys/net/ipv4/ip_forward
echo -e "\033[33m|--> Check rpc info\033[0m"
rpcinfo -p
echo -e "\033[33m|--> Check network service info\033[0m"
netstat -nap | grep -vE 'unix|raw'
echo -e "\033[33m|--> Check process <-> port info\033[0m"
lsof -i
echo ""
echo -e "\033[33m#### 0x5. Check file and module info \033[0m"
echo -e "\033[33m|--> Check file which link number equare 0 \033[0m"
lsof +L1
echo -e "\033[33m|--> Check file which change 3 days before now and executable \033[0m"
find / -path "/proc" -prune -o -type f -executable -mtime -3 -print
echo -e "\033[33m|--> Check module which installed \033[0m"
lsmod | awk '{printf"%s ",$1}'
echo ""
echo ""
echo -e "\033[33m#### 0x6. Check ssh and bash \033[0m"
echo -e "\033[33m|--> Check ssh key login host\033[0m"
if [ -e /root/.ssh/authorized_keys ]; then
awk '{printf"%s ",$3}' /root/.ssh/authorized_keys
fi
echo -e "\033[33m|--> Check ssh password login user\033[0m"
lastlog | grep -vE 'Never'
echo -e "\033[33m|--> Check ssh now login\033[0m"
w
echo -e "\033[33m|--> Check ssh login success history\033[0m"
last -n 30
echo -e "\033[33m|--> Check ssh login fail history\033[0m"
grep -ri "ail" /var/log/secure* | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'| sort -n | uniq | awk '{printf"%s ",$1}'
echo ""
echo -e "\033[33m|--> Check bash history size\033[0m"
echo $HISTSIZE
echo -e "\033[33m|--> Check some secure operation \033[0m"
history | grep -E 'wget|whoami'
echo -e "\033[33m|--> Check bash history \033[0m"
history 100 | awk '{for(i=2;i<=NF;i++)printf"%s ",$i;printf" <-- "}'
echo ""
echo -e "\033[33m#### 0x7. Check web log \033[0m"
echo -e "\033[33m|--> Check webshell \033[0m"
find $WEBDIR/ -type f -name '*.php' | xargs egrep '(phpspy|c99sh|milw0rm|eval\(gunerpress|eval\(base64_decode|spider_bc|@$)' | awk -F : '{print $1}' > /tmp/checkweb.log
grep -i 'select%20|sqlmap|script' $LOGDIR/*log | grep 500 | grep -i \.php > /tmp/checkweb.log
cat /tmp/checkweb.log
echo ""
echo -e "\033[33m#### 0x8. Check rootkit and av \033[0m"
yum install -y epel-release rkhunter clamav >/dev/null 2>&1
echo -e "\033[33m|--> Check rootkit\033[0m"
rkhunter -c --sk >> /tmp/rkhunter.log
grep 'Warning' /tmp/rkhunter.log
echo -e "\033[33m|--> Check av\033[0m"
clamscan -r --bell -i / > /tmp/clamav.log 2>&1
cat /tmp/clamav.log
echo ""
Relevant Link:
暂无