前言

当企业发生黑客入侵,系统崩溃或者影响其他业务逻辑的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查询入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或者减少损失。

针对常见的攻击事件,结合工作中应急响应事件分析和解决的方法,整理了一些思路。

1.账号安全

基本使用:

root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell

用户名:密码:密码:用户ID:组ID:用户说明:家目录:登录之后shell

roor:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::

用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期的警告天数:密码过期之后的宽限天数:账号失效时间:保留

root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell

用户名:密码:用户ID:组ID:用户说明:家目录:登录之后shell
注意:无密码只允许本机登录,远程不允许登录

2.影子文件/etc/shadow

root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::

用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期的警告天数:密码过期之后的宽限天数:账号失效时间:保留

who:查看当前登录用户(tty本地登录 pts远程登录)

w :查看系统信息。想知道某一时刻用户的行为

uptime:查看登录多久,多少用户,负载

入侵排查

[root@localhost ~]# awk -F: '$s==0{print $1}' /etc/passwd
[root@localhost ~]# ak '/\$1|\$6/{print $1}' /etc/shadow

3.除了root账号之外,其他账号是否存在sudo权限,如非管理需要,普通账号应删除sudo权限

more /etc/sudores | grep -v "^#\|^$" | grep "ALL=(ALL)"

usermod -L user  禁用账号,账号无法登录,/etc/shadow第二栏为!开头
userdel user     删除user用户
userdel -r user  将删除user账户,并且将/home目录下的user目录一并删除

1.查询特权用户(uid 为0)
[root@localhost ~]#awk -F: '$3==0{print $1}' /etc/passwd
2.查询可以用户远程登录的账号信息
[root@localhost ~]#awk '/$1|$6{print $1}' /etc/shadow
3.除root账号外,其他账号是否存在sudo权限。如非管理需要,普通账号应删除sudo权限
[root@localhost ~]#more /etc/sudoers | grep -v "^#|^$" | grep "ALL=(ALL)"
4.禁用或删除多余及可疑账号

usermod -L user  禁用账号,账号无法登录,/etc/shadow第二栏为!开头
userdel user     删除user用户
userdel -r user  将删除user账户,并且将/home目录下的user目录一并删除

2.历史命令

基本使用:

(1)root历史命令

history

通过.bash_history查看账号执行过得权限
(2)打开/home各账号目录下的.bash_history,查看普通账号的历史命令
为历史命令增加登录的IP地址,执行命令时间等信息。

sed -i 's/^HISTSIZE=1000/HISTSZE=10000/g' /etc/profile

(3)在/etc/profile的文件尾部添加如下行数配置信息:

jiagu history xianshi

USER_IP=who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'
export HISTIMEFORMAT="%F %T $USER_IP whoami "
export PROMPT_COMMAND="history -a"

jiagu history xiashi

(4)source /etc/profile 让配置生效

生成效果: 1 2021-3-16 19:45:39 193.xxx.xxx.xxx root source /etc/profile

但此命令并不会清除保存在文件中的记录,因此需要手动删除.bash_profile文件中的记录

入侵排查:

cat .bash_history >> history.txt

3.端口

使用netstat网络命令连接命令,分析可疑端口,IP,PID

查看下pid所对应的进程文件路径:
运行:ls -l /proc/$PID/exe
或 :file /proc/$$PID/exe
$PID:对应的pid号

4.进程

使用ps命令,分析进程

pa aux | grep pid

5.开机自启

基本使用:
这里顺便提一嘴Windows
Windows系统运行级别示意图:

查看运行级别的命令:runlevel

系统默认允许级别

id=3: initdefault 系统默认开机后直接进入哪个运行级别

开机启动的配置文件

/etc/rc.local
/etc/rc.d/rc[0~6].d

当我们需要开机自己启动自己的脚本的时候,只需要将可执行脚本丢在/etc/init.d目录下,然后在
/etc/rc.d/rc*.d中软连接即可

ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh

此处sshd是具体的脚本文件,S100ssh是其软连接,S开头代表加载时自启动;如果是K开头的脚本文件,代表运行级别加载时需要关闭的。

入侵排查:

启动文件:more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d

6.定时任务

基本使用

1.利用crontbab创建计划任务

crontab -l 列出某个用户cron服务的详细内容
Tips: 默认编写的crontab文件回报存在:/var/spool/cron/用户名(例如:root)
crontab -r 删除某个用户cront任务 谨慎:删除某个用户的所有计划任务
crontab -w 使用编辑器编辑当前的crontab文件

如:/1 * echo "hello world" >> /tmp/test.txt 每分钟写入文件

2.利用anacron实现异步定时任务调度

每天运行 /home/backup.sh脚本:

vi /etc/anacrontab @daily 10 example.daily /bin/bash/home/backup.sh

当机器在backup.sh期望被运行时是关机,anacron会在开机十分钟后运行它,而不用再等待。

入侵排查

重点关注以下目录中是否存在恶意脚本

/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monnthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*

小技巧:

more /etc/cron.daily/* 查看目录下面的所有文件

7.服务

服务自启动

第一种修改方式:

chkconfig [--level 运行级别] [独立服务台] [on|off]
chkconfig -level 2345 httpd on 开机自启动
chkconfig httpd on (默认level2345)

第二种修改方式:

修改/etc/re.d/rc.local 文件
加入/etc/init.d/httpd start

第三种修改方式:

使用ntsysv命令管理自启动,可以管理独立服务和xinetd服务。

入侵排查

1.查询已安装的服务

RPM包安装服务

chkconfig --list 查看服务自启动状态,可以看到所有RPM包安装的服务
ps aux | grep crond 查看当前服务
chkconfig -- list | 查看当前服务器自启动状态,可以看到所有的RPM安装服务

系统在3与5级别下的启动项:

chkconfig -- list | grep "3:启用|5:启用"
chkconfig -- list | grep "3:on|5:on"

源码包安装服务:

查看服务安装位置,一般是在/usr/local/
搜索/etc/rc.d/init.d/ 查看是否存在
service httpd start

8.系统日志

日志默认存放位置:/var/log/
查看默认日志配置情况: more /etc/rsyslog.conf

日志文件-说明

日志分析技巧:

1.定位有多少IP在爆破主机:

grep "Failed password for root" /var/log/secure | awk '{print $11}' 
| sort | uniq -c | sort -nr more

2.定位有哪些IP在爆破:

grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2
[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]
[0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2
[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c

3.爆破用户名字典是什么?

grep "Failed password" /var/log/secure|perl -e 'while($_=<>)
{ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr

4.登录成功的IP有哪些:

grep "Accepted " /var/log/secure | awk '{print $11}' | sort | 
uniq -c | sort -nr | more

5.登录成功的日期、用户名、IP:

grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' 

6.增加一个用户kali日志:

Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001,
GID=1001, home=/home/kali
, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password
changed for kali

7.删除用户kali日志:

Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' 
owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' 
owned by 'kali'
# grep "userdel" /var/log/secure

8.su切换用户:

Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened 
for user good by root(uid=0)

9.sudo授权执行:

sudo -l
Jul 10 00:43:09 localhost sudo:    good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now
#grep "useradd" /var/log/secure 

9.工具篇

Rookit查杀

(1)chkrootkit:http://www.chkrootkit.org

wget ftp://ftp.pangeia.com.vr/pub/seg/pac.chkrootkit.tar.gz
tar zxvf chrookit.tar.gz

cd chkrootkit-0.版本

make sense

编译完没有报错的话执行检查

./chkrootkit

(2)rkhunter:http:.rkhunter.sourceforge.net

wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz

tar -zxvf rkhunter-1.4.4.tar.gz

cd rkhunter-1.4.4.tar.gz
cd rkhunter-1.4.4
./installer.sh --install
rkhunter -c

**病毒查杀

(1)Clamav:http://www.clamav.net/download.html

wget http://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz
tar -zxvf zlib-1.2.7.tar.gz

安装一下gcc编译环境: yum install gcc

CFLAGS="-O3 -fPIC" ./configure --prefix= /usr/local/zlib/
useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
tar –zxvf clamav-0.97.6.tar.gz
./configure --prefix=/opt/clamav --disable-clamav -with-zlib=/usr/local/zlib
touch /opt/clamav/logs/freshclam.log
touch /opt/clamav/logs/clamd.log
chown clamav:clamav clamd.log
chown clamav:clamav freshclam.log
/opt/clamav/bin/freshclam 升级病毒库
./clamscan -r /home 扫描所有用户的主目录就使用
./clamscan -r --bell -i /bin 扫描bin目录并且显示有问题的文件的扫描结果

1.安装zlib:
wget http://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz
tar -zxvf zlib-1.2.7.tar.gz
cd zlib-1.2.7

安装一下gcc编译环境: yum install gcc

CFLAGS="-O3 -fPIC" ./configure --prefix= /usr/local/zlib/
make && make install

2.添加用户组clamav和组成员clamav:
groupadd clamav
useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav

3.安装Clamav
tar –zxvf clamav-0.97.6.tar.gz
cd clamav-0.97.6
./configure --prefix=/opt/clamav --disable-clamav -with-zlib=/usr/local/zlib
make
make install

4.配置Clamav
mkdir /opt/clamav/logs
mkdir /opt/clamav/updata
touch /opt/clamav/logs/freshclam.log
touch /opt/clamav/logs/clamd.log
cd /opt/clamav/logs
chown clamav:clamav clamd.log
chown clamav:clamav freshclam.log

5.ClamAV 使用:
/opt/clamav/bin/freshclam 升级病毒库
./clamscan –h 查看相应的帮助信息
./clamscan -r /home 扫描所有用户的主目录就使用
./clamscan -r --bell -i /bin 扫描bin目录并且显示有问题的文件的扫描结果

10.webshell查杀

linux版本:

河马webshell查杀:http://www.shellpub.com

深信服Webshell网站后门检测工具:http://edr.sangfor.com.cn/backdoor_detection.html

河马webshell查杀:http://www.shellpub.com
深信服Webshell网站后门检测工具:http://edr.sangfor.com.cn/backdoor_detection.html

11.RPM check检测

​ 系统完整性可以通过rpm自带的-Va来校验检查所有的rpm软件包,查看哪些命令是否被替换了:

./rpm -Va > rpm.log

如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是8位长字符串,每个字符都用以表示文件与RPM数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过。

如果命令被替换了,如果还原回来:

rpm -qf /bin/ls 查询ls命令属于哪个软件包

mv /bin/ls /tmp 先把ls转移到tmp目录下,造成ls命令丢失的假象

rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls 提取rpm包中ls命令到当前目录的/bin/ls下

cp /root/bin/ls /bin/ 把ls命令复制到/bin/目录 修复文件丢失

文件提取还原案例:
rpm -qf /bin/ls 查询ls命令属于哪个软件包
mv /bin/ls /tmp 先把ls转移到tmp目录下,造成ls命令丢失的假象
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls 提取rpm包中ls命令到当前目录的/bin/ls下
cp /root/bin/ls /bin/ 把ls命令复制到/bin/目录 修复文件丢失

最后修改:2022 年 03 月 16 日 08 : 41 PM
如果觉得这篇文章不错,不妨赏我碎银几两。