一、linux入侵排查
思路:
1、查看帐号
-
查看/etc/passwd文件中使用 /bin/bash 作为默认 shell 的用户。
-
查询特权用户特权用户(uid 为0)
-
查询可以远程登录的帐号信息
-
除root帐号外,其他帐号是否存在sudo权限。
-
禁用或删除多余及可疑的帐号
用find命令查看拥有可疑权限的文件
2、查看执行过的系统命令
-
进入用户目录下,导出历史命令。cat .bash_history >> history.txt
3、检查异常端口、异常进程、开机启动项、定时任务防止后门
4、检查系统日志
1.1 账号安全
方式:
1、用户信息文件 /etc/passwd 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::: 用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
查看特权账号
查询登录信息
成功:
失败:
1.2 历史命令
基本使用:
通过 .bash_history 文件查看帐号执行过的系统命令
1、root 用户的历史命令histroy
2、打开 /home 各帐号目录下的 .bash_history,查看普通帐号执行的历史命令。 为历史的命令增加登录的 IP 地址、执行命令时间等信息: 1)保存1万条命令 sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile 2)在/etc/profile的文件尾部添加如下行数配置信息: ######jiagu history xianshi######### USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'` if [ "$USER_IP" = "" ] then USER_IP=`hostname` fi export HISTTIMEFORMAT="%F %T $USER_IP `whoami` " shopt -s histappend export PROMPT_COMMAND="history -a" ######### jiagu history xianshi ##########
3)source /etc/profile 让配置生效
生成效果:
3、历史操作命令的清除:history -c 但此命令并不会清除保存在文件中的记录,因此需要手动删除 .bash_profile 文件中的记录。
1.3 检查异常端口
使用 netstat 网络连接命令,分析可疑端口、IP、PID
netstat -antlp | more
查看下 pid 所对应的进程文件路径, 运行 ls -l /proc/$PID/exe 或 file /proc/$PID/exe($PID 为对应的 pid 号)
1.4 检查异常进程
使用 ps 命令,分析进程
ps aux | grep pid
1.5 检查开机启动项
查看运行级别命令 runlevel
系统默认允许级别
vi /etc/inittab id=3:initdefault #系统开机后直接进入哪个运行级别
开机启动配置文件
/etc/rc.local /etc/rc.d/rc[0~6].d
1.6 检查定时任务
基本使用
1、利用 crontab 创建计划任务
-
基本命令
-
crontab -l 列出某个用户cron服务的详细内容 Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root crontab -r 删除每个用户cront任务(谨慎:删除所有的计划任务) crontab -e 使用编辑器编辑当前的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会在机器开机十分钟之后运行它,而不用再等待 7天。
入侵排查
重点关注以下目录中是否存在恶意脚本
/var/spool/cron/* /etc/crontab /etc/cron.d/* /etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/* /etc/cron.weekly/ /etc/anacrontab /var/spool/anacron/*
小技巧:
more /etc/cron.daily/* 查看目录下所有文件
1.7 检查服务
服务自启动
第一种修改方法:
chkconfig [--level 运行级别] [独立服务名] [on|off] chkconfig –level 2345 httpd on 开启自启动 chkconfig httpd on (默认level是2345)
第二种修改方法:
修改 /etc/re.d/rc.local 文件 加入 /etc/init.d/httpd start
第三种修改方法:
使用 ntsysv 命令管理自启动,可以管理独立服务和 xinetd 服务。
入侵排查
1、查询已安装的服务:
RPM 包安装的服务
chkconfig --list 查看服务自启动状态,可以看到所有的RPM包安装的服务 ps aux | grep crond 查看当前服务系统在3与5级别下的启动项 中文环境 chkconfig --list | grep "3:启用\|5:启用" 英文环境 chkconfig --list | grep "3:on\|5:on"
源码包安装的服务
查看服务安装位置 ,一般是在/user/local/ service httpd start 搜索/etc/rc.d/init.d/ 查看是否存在
1.8 检查异常文件
1、查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性
2、得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?
可以使用find命令来查找,如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前访问过的文件
3、针对可疑文件可以使用 stat 进行创建修改时间。
1.9 检查系统日志
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
日志文件 | 说明 |
---|---|
/var/log/cron | 记录了系统定时任务相关的日志 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/mailog | 记录邮件信息 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
/var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
/var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
日志分析技巧
1、定位有多少IP在爆破主机的root帐号: grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more定位有哪些IP在爆破: grep "Failed password" /var/log/authlog | 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 -c2、登录成功的IP有哪些: grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more登录成功的日期、用户名、IP: grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' 3、增加一个用户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 #grep "useradd" /var/log/secure 4、删除用户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/secure5、su切换用户: Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)sudo授权执行: sudo -l Jul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now
二、利用脚本进行应急响应防止暴力破解
应急响应
记录日志
#!/bin/bashlogfile=/var/log/nginx last_minutes=1 开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)start_time=`date -d"$last_minutes minutes ago" +"%d/%m/%Y:%H:%M:%S"` echo $start_time结束时间现在stop_time=`date +"%d/%m/%Y:%H:%M:%S"`//当前时间 echo $stop_time cur_date="`date +%d/%m/%Y`" echo $cur_date过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径tac $logfile/access.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($4,2);if(t>=st && t<=et){print $1}}' |sort | uniq -c | sort -nr > $logfile/log_ip_top10 #ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`出现横杠使用sed去掉第一行#sed -i '1d' $logfile/log_ip_top10 单位时间[1分钟]内单ip访问次数超过200次的ip记录入black.txtip=`cat $logfile/log_ip_top10 | awk '{if($1 > 100)print $2}'` for line in $ip do echo $line >> $logfile/getip.txt echo $line iptables -I INPUT -p tcp -m multiport --dport 80,443 -s $line -j DROP done
暴力破解
第一步:创建密码字典
开始爆破:
利用hydra -l root -P pass.txt ssh://192.168.157.135
爆破成功!
应急响应
通过awk '/Failed password/ {print $11}' /var/log/auth.log | sort | uniq -c | sort -nr
查询定位有多少IP在登录主机的root帐号
发现有异常IP登录多次,怀疑是对root进行了密码爆破
通过sudo awk '/Accepted / {print $(NF-3)}' /var/log/auth.log | sort | uniq -c | sort -nr
筛查登陆成功的ip
发现其可疑ip已经成功登录多次
查询登陆时间
查看该ip是否登录到系统中last -f wtmp
为了防止再次进行爆破进行下一步操作
遏制暴力破解
#!/bin/bash dompurity IP=$(awk '/Failed password/ {IP[$(NF-3)]++} END { for (k in IP) { if (IP[k]>=10) print k }}' /var/log/auth.log)//筛选ip,当ip在文件中超过10次则打印出来 NF表示当前行有多少个字段(列) for i in $IP dotmpIP=(`iptables -L -n | tr -s " " | awk '/^DROP/ && /22$/ {print $4}'`)//echo ${tmpIP[@]} | grep -qw $i//查看该ip有没有被封禁if [ $? -ne 0 ]theniptables -I INPUT -p tcp --dport 22 -s $i -j DROP fi done iptables-save > /etc/sysconfig/iptables unset tmpIP
给deny_ssh.sh
chmod +x deny_ssh.sh
将文件放入任务计划
查询发现已被封禁,之后登录的IP
再次尝试爆破
爆破失败,已将次IP封禁。
如何处理误封呢?
1、查看 INPUT 链中所有 DROP 规则,并显示行号
sudo iptables -L INPUT -n --line-numbers | grep 'DROP.*dpt:22'
2、删除指定编号的规则sudo iptables -D INPUT 1
将误封IP拉出。
三、Windows入侵排查
勒索软件(定期备份)
思路:
1、排查账号安全,防止可疑账号
2、排查异常进程和端口,防止木马
查看三次握手pid对应的程序,以及可疑端口(非常用端口)和恶意进程
3、排查启动项、组策略、任务计划、服务防止留后门
4、使用工具
1.1 检查系统账号安全
总结思路
查看是否有可疑账号、新增账号、隐藏账号、克隆账号等---->怀疑使用MimiKatz
抓取明文密码----> 使用Log Parser官方工具筛选登录日志比如登陆时间、Event ID=4624的登录成功的日志Event type 10的远程登录、再筛选字段5:登录账号、字段8:登录类型、18:登录ip等
1、查看服务器是否有弱口令,远程端口是否对公网开放
检测方法:
询问管理员
2、查看是否存在可疑账号、新增账号
检测方法:cmd窗口输入lusrmgr.msc
查看是否有可疑账号、新增账号
3、查看是否存在隐藏账号、克隆账号
检测方法:
-
注册表查看管理员对应链值
-
使用D盾web查杀工具,集成了对克隆账号检测的功能。
4、使用工具筛选远程登录日志
怀疑使用MimiKatz
抓取明文密码
使用工具筛选远程登录日志
打开组策略
检测方法:
-
Win+R 打开运行,输入"eventvwr.msc",回车运行,打开“事件查看器”。
查看安全日志
筛选Event ID查看登陆者的id,ip,登录类型(type 10:远程登录、type 2:本地登录)等信息(如短时间内4624、4625出现较多次数则表示遇到暴力破解)
Event ID:查看登录情况
登录类型:
-
导出 Windows 日志 -- 安全,利用微软官方工具 Log Parser 进行分析。
利用官方工具操作:
筛取登录时间范围的信息并提取用户与ip
常用字段的行数
EXTRACT_TOKEN(Strings, 5, '|') AS UserName,EXTRACT_TOKEN(Strings, 6, '|') AS DomainName,8 AS LogonType,18 AS IpAddress,19 AS IpPort,10 AS LogonProcessName,11 AS AuthPackageName
登录成功的所有事件 LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where EventID=4624"指定登录时间范围的事件: LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where TimeGenerated>'2018-06-19 23:32:11' and TimeGenerated<'2018-06-20 23:34:00' and EventID=4624"提取登录成功的用户名和IP: LogParser.exe -i:EVT –o:DATAGRID "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as Username,EXTRACT_TOKEN(Message,38,' ') as Loginip FROM c:\Security.evtx where EventID=4624"
windows登录流程
明文转成哈希值存入sim中后进行登录时将明文转成哈希值与存储中的哈希进行比较
重要日志?
linux日志、中间件日志access.log
1.2 检查异常端口、进程
1、检查端口连接情况,是否有远程连接、可疑连接。
检查方法:
-
使用
netstat -ano
命令查看目前的网络连接,定位可疑的 ESTABLISHED -
根据 netstat 命令定位出的 PID 编号,再通过 tasklist 命令进行进程定位
tasklist | findstr "PID"
netstat -ano | findstr ESTABLISHED
查看当前连接
-
查找异常IP、端口(如C2服务器)
-
记录PID,使用
tasklist | findstr <PID>
查进程
查看监听端口netstat -anb | findstr LISTENING
-
注意非标准端口上的监听(如8080、5555)
DNS解析记录
-
使用
ipconfig /displaydns
查看本地DNS缓存 -
发现可疑域名(如长随机字符串域名)
windows远程端口 rdp协议 3389
linux远程端口 ssh协议 22
1.3 检查启动项、组策略、计划任务、服务(防止留后门)
1、检查服务器启动项是否有异常启动项
检查方法:
-
登录服务器,单击【开始】>【所有程序】>【启动】,默认情况下此目录在是一个空目录,确认是否有非业务程序在该目录下。
-
单击开始菜单 >【运行】,输入
msconfig
,查看是否存在命名异常的启动项目,是则取消勾选命名异常的启动项目,并到命令中显示的路径删除文件。 -
单击【开始】>【运行】,输入 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、检查计划任务
检查方法:
-
a、单击【开始】>【设置】>【控制面板】>【任务计划】,查看计划任务属性,便可以发现木马文件的路径。
-
b、单击【开始】>【运行】;输入
cmd
,然后输入at
,检查计算机与网络上的其它计算机之间的会话或计划任务,如有,则确认是否为正常连接。
3、服务自启动
检查方法:
-
单击【开始】>【运行】,输入
services.msc
,注意服务状态和启动类型,检查是否有异常服务。