Linux&Windows应急响应+案例分析
应急响应 Linux
文件
ls -alt #查找72小时内新增的文件
find / -ctime -2 #文件日期、新增文件、可疑/异常文件、最近使用文件、浏览器下载文件
/var/run/utmp #有关当前登录用户的信息记录
/etc/passwd #用户列表
/tmp #临时目录
*find / .jsp -perm 4777 #查找777的权限的文件(可以将文件名进行修改php、py、html、sh等)
隐藏文件.xxxx
命令目录:/usr/bin、/usr/sbin
日志
/var/log/messages包含整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
/var/log/dmesg包含内核缓冲信息。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。
/var/log/auth.log包含系统授权信息,包括用户登录和使用的权限机制等
/var/log/boot.log包含系统启动时的日志
/var/log/daemon.log包含各种系统后台守护进程日志信息
/var/log/dpkg.log包含安装或dpkg命令清除软件包的日志
/var/log/kern.log包含内核产生的日志,有助于在定制内核时解决问题
/var/log/lastlog记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容
/var/log/maillog /var/log/mail.log包含来着系统运行电子右键服务器的日志信息。
/var/log/user.log包含所有等级用户信息的日志
/var/log/secure包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里
/var/log/faillog包含用户登录失败信息。此外,错误登录命令也会记录在本文件中
/var/log/lastlog 文件记录用户最后登录的信息,即lastlog
查看爆破主机的ROOT账号的IP:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort
查看登录成功的日期、用户名及IP:
grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'
用户
/etc/shadow密码登陆相关信息
uptime查看用户登陆时间
/etc/sudoers查看sudo用户列表
awk -F: '{if($3==0)print $1}' /etc/passwd查看UID为0的帐号
lastb用户错误的登录列表
进程
lsof**查看当前全部进程
lsof -i:1677 查看指定端口对应的程序
lsof -p 1234 检查pid号为1234进程调用情况
lsof -g pid
strace -f -p 1234 跟踪分析pid号为1234的进程
ps -aux或ps -ef
端口
netstat -anpt
自启动
~/.bashrc
rc.local
/etc/init.d
chkconfig
chkconfig --list | grep "3:on|5:on"
/etc/init.d/rc.local
/etc/rc.local
/etc/init.d/ 开机启动项
/etc/cron* 定时任务
计划任务
crontab -l
crontab /etc/cron*
crontab -u root -l
cat /etc/crontab
ls /etc/cron.*
/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/*
/var/log/cron*
别名
可以使用alias命令来查看当前用户所定义的别名
MISC
stat
stat可以显示文件的大小、创建时间、修改时间、访问时间、权限、所有者等等信息
**** -c:指定输出格式
**** -f:指定输出文件系统相关信息。
**** -L:对符号链接解引用。
**** -t:指定时间格式。

Size表示文件大小,Access表示访问时间,Modify表示修改时间,Change表示属性修改时间,Uid表示所有者的用户ID,Gid表示所有者的组ID等等。
echo $PATH
用于显示当前用户的环境变量PATH的值。

./rpm -Va > rpm.log
是一个在Linux系统中常用的命令,用于检查系统中已安装的软件包的完整性,并将检查结果输出到指定的日志文件中
kill -9
kill -9是一个在Linux和Unix系统中常用的命令,用于强制终止一个正在运行的进程。
kill命令用于向指定的进程发送信号,以改变其状态或终止其执行。
-9参数表示发送SIGKILL信号,该信号可以强制终止进程的执行,即使进程正在执行一些关键任务或者处于死锁状态,也可以强制终止它的执行
ps aux查看当前系统中正在运行的进程列表
chattr –i
用于修改文件或目录的属性,将其设置为**不可修改(immutable)。
rm
rm是一个在Linux和Unix系统中常用的命令,用于删除文件或目录。
-r参数,删除一个目录及其下面的所有文件和子目录
setfacl
用于设置文件或目录的访问控制列表(ACL)。
getfacl命令查看文件或目录的ACL信息
lsattr
lsattr是一个在Linux系统中常用的命令,用于显示文件或目录的属性。
lsattr命令会列出文件或目录的特殊属性信息,其中每个属性用一个字符来表示。常见的属性包括:
- i:不可修改属性;
- a:只追加属性;
- c:压缩属性;
- e:扩展属性;
- s:安全删除属性;
- u:未分配块属性。
实例1:
ssh
ssh后门快速判断:
string /usr/bin/.sshd | egrep '[1-9]{1,3}.[1-9]{1,3}.'
检查SSH后门:
比对ssh的版本ssh -V查看ssh配置文件和/usr/sbin/sshd的时间stat /usr/sbin/sshdstrings 检查/usr/sbin/sshd 是否有邮件西信息通过strace监控sshd进程读写文件的操作ps axu | grep sshd | grep -v grep查看sshd服务的进程号##root 65530 0.0 0.1 48428 1260 ? Ss 13:43 0:00 /usr/sbin/sshdstrace -o aa -ff -p 65530 对进程进行监控
windows
文件
C:\Documents and Settings\Administrator\Recent是Windows系统中存储最近使用的文件和文件夹的目录。该目录下存储着用户最近打开或使用过的文件和文件夹的快捷方式,便于用户快速访问。
%UserProfile%\Recent是Windows系统中存储当前用户最近使用的文件和文件夹的目录。该目录下存储着当前用户最近打开或使用过的文件和文件夹的快捷方式,便于用户快速访问。
日志
打开事件查看器:win键 + r,输入eventvwr.msc
服务器日志
FTP连接日志和HTTPD事务日志:%systemroot%\system32\LogFiles
IIS日志默认存放在System32\LogFiles目录下,使用W3C拓展格式
操作系统日志
登录成功的所有事件:
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
登录失败的所有事件:
LogParser.exe -i:EVT –o:DATAGRID “SELECT * FROM c:\Security.evtx where EventID=4625
系统历史开关机记录:
LogParser.exe -i:EVT –o:DATAGRID “SELECT TimeGenerated,EventID,Message FROM c:\System.evtx
where EventID=6005 or EventID=6006
账号
lusrmgr.msc 查看账户变化
net user 列出当前登录账户
wmic UserAccount get 列出当前系统所有账户
在Windows系统中,可以使用**命令行或注册表编辑器来隐藏或克隆账户
隐藏账户:
- 使用命令行
- net user username[要隐藏的用户名] /active:no
这样的操作会将指定账户的状态设置为不活动状态,从而在登录界面中隐藏该账户
- 使用注册表编辑器(win键 + r,再输入regedit)
- 打开注册表找到以下路径
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
在UserList下创建一个新的DWORD值,命名为要隐藏的账户名称,值设为0即可。
克隆账户
- 使用命令行
其中oldusername为要克隆的账户名称,newusername为新建账户的名称net user newusername /addnet localgroup administrators newusername /addreg copy "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\SID-from-oldusername" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\SID-from-newusername" /s
这会创建一个新的账户,并将其添加到管理员组中。然后,将旧账户的注册表信息复制到新账户中,从而复制其设置和配置
- 使用注册表
找到以下路径: - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
复制要克隆账户的SID子项,将其命名为新建账户的SID,并修改以下键值:
ProfileImagePath:将其值修改为新建账户的用户文件夹路径;
Sid:将其值修改为新建账户的SID;
然后在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList下创建一个新的DWORD值,命名为新建账户的名称,值设为0即可。
进程
tasklist /svc | findstr pid
- tasklist命令用于列出当前正在运行的进程及其相关信息。
- /svc参数用于显示与每个进程相关联的服务信息。
- |符号是管道符号,用于将前面命令的输出作为后面命令的输入。
- findstr命令用于在输出中查找包含指定字符串的行。
- pid是一个占位符,表示需要替换为要查找的进程ID。
netstat -ano
****用于显示当前计算机的网络连接状态和进程信息
- netstat命令用于显示当前计算机的网络连接状态。
- -a参数用于显示所有的网络连接,包括监听连接、已连接和未连接。
- -n参数用于显示IP地址和端口号,而不是域名和服务名。
- -o参数用于显示与每个连接相关联的进程ID。
会列出所有当前计算机的网络连接状态,包括本地和远程IP地址、端口号、连接状态以及与每个连接相关联的进程ID
wmic process | find "Proccess Id"
是一个Windows命令行命令,用于查找当前正在运行的进程ID
- wmic process命令用于列出当前正在运行的进程信息。
- |符号是管道符号,用于将前面命令的输出作为后面命令的输入。
- find命令用于在输出中查找包含指定字符串的行。
- "Process Id"是要查找的字符串,表示需要查找包含进程ID的行。
msinfo32
msinfo32是Windows系统中的一个系统信息工具,用于查看计算机硬件和软件配置信息
- 运行msinfo32之后,会打开“系统信息”窗口,其中包含了很多关于计算机的详细信息,包括操作系统信息、硬件设备信息、系统组件信息、软件环境信息等。
wmic process get caption,commandline /value
用于获取当前正在运行的进程的名称和命令行信息
- wmic process命令用于列出当前正在运行的进程信息。
- get caption,commandline参数用于获取进程的名称和命令行信息。
- /value参数用于以键值对(Key=Value)的形式显示输出结果。
端口
netstat -ano
- -a参数用于显示所有的网络连接,包括监听连接、已连接和未连接。
- -n参数用于显示IP地址和端口号,而不是域名和服务名。
- -o参数用于显示与每个连接相关联的进程ID。

状态的类型
CLOSED:无连接活动或正在进行**
LISTEN:监听中等待连接
SYN_RECV:服务端接收了SYN
SYN_SENT:请求连接等待确认
ESTABLISHED:连接建立数据传输
FIN_WAIT1:请求中止连接,等待对方FIN
FIN_WAIT2:同意中止,请稍候
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待原来的发向远程TCP的连接中断请求的确认
**CLOSE-WAIT:等待关闭连接
自启动
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\policies\Explorer\Run
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
- HKLM\Software\Microsoft\Windows\CurrentVersion\RunonceEx(ProfilePath)\Start Menu\Programs\Startup 启动项
msconfig 启动选项卡
gpedit.msc 组策略编辑器
开始>所有程序>启动
msconfig-启动
计划任务
- *C:\Windows\System32\Tasks*
- *C:\Windows\SysWOW64\Tasks*
- *C:\Windows\tasks*
- schtasks
- taskschd.msc
- at
开始-设置-控制面板-任务计划
misc
- 查看指定时间范围包括上传文件夹的访问请求:
findstr /s /m /I “UploadFiles” *.log - 关键信息是x.js
findstr /s /m /I “x.js” *.asp
被感染后的临时处置办法
被感染主机:
(1) 立即对被感染主机进行隔离处置,禁用所有有线及无线网卡或直接拔掉
网线,防止病毒感染其他主机;
(2) 禁止在被感染主机上使用 U 盘、移动硬盘等可执行摆渡攻击的设备;
未被感染主机:
(1) 关闭 SSH、RDP 等协议,并且更改主机密码;
(2) 备份系统重要数据、且文件备份应与主机隔离;
(3) 禁止接入 U 盘、移动硬盘等可执行摆渡攻击的设备;
事件排查[知识点]
windows排查
文件排查
- 开机启动有无异常文件
开始->运行->msconfig

- 各个盘下的temp(tmp)相关目录下查看有无异常文件:windows产生的临时文件

- Recent是系统文件夹,里面存放着你最近使用的文档的快捷方式,查看用户recent相关文件,通过分析最近打开分析可疑文件:
开始->运行->%UserProfile%\Recent
- 根据文件夹内文件列表时间进行排序,查找可疑文件。当然也可以搜索指定日期范围的文件夹文件

查看文件时间,创建时间、修改时间、访问时间,黑客通过菜刀类工具改变的是修改时间。若以如果修改时间在创建时间之前明显是可疑文件

进程排查
- netstat -ano查看目前的网络连接,定位可疑的ESTABLSHED
netstat 显示网络连接、路由表和网络接口信息; - -a 显示所有网络连接、路由表和网络接口信息
-n
以数字形式显示地址和端口号
-o 显示与每个连接相关的所属进程 ID
-r
显示路由表
-s
显示按协议统计信息、默认地、显示 IP - 常见的状态说明:
- LISTENING 侦听状态
ESTABLISHED 建立连接
CLOSE_WAIT 对方主动关闭连接或网络异常导致连接中断 - 根据netstat定位出的pid,再通过tasklist命令进行进程定位
tasklist 显示运行在本地或远程计算机上的所有进程

- 根据wmic process获取进程的全路径[任务管理器也可以定位到进程路径]
系统信息排查
查看环境变量的设置
我的电脑->属性->高级系统设置->高级->环境变量


排查内容:
temp变量的所在位置的内容;后缀映射PATHEXT是否包含有非windows的后缀;有没有增加其他的路径到PATH变量中(对用户变量和系统变量都要进行排查);
windows计划任务
程序->附件->系统工具->任务计划程序

windows账号信息,如何隐藏账号等
开始->运行->compmgmt.msc->本地用户和组->用户
(用户名以$结尾的为隐藏用户,如:admin$)

命令行方式:net user,可直接收集用户信息(此方法看不到隐藏用户),若需查看某个用户的详细信息,可使用命令->net user username

- 查看当前系统用户的会话
使用->query user查看当前系统的会话,比如查看是否有人使用远程终端登录服务器;
=logoff=踢出该用户; - 查看=systeminfo=信息,系统版本以及补丁信息
日志排查
打开事件管理器
开始->管理工具->事件查看
开始->运行->eventvwr

主要分析安全日志,可以借助自带的筛选功能



可以把日志导出为文本格式,然后使用notepad++打开,使用正则模式去匹配远程登录过的ip地址,在界定事件日期范围的基础
正则:
((?😦?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))).){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))

这样就可以把界定事件日期事件快速检索出来进行下一步的分析
Linux排查
文件排查
- 铭感目录的文件分析[类/tmp目录,命令目录/usr/bin /usr/sbin等]
ls 用来显示目标列表 - -a 显示所有档案及目录(ls 内定将档案名或目录名称为“.”的视为影藏,不会列出);
-C
多列显示输出结果。这是默认选项;
-l
以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、
硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-t
用文件和目录的更改时间排序; - 查看tmp目录下的文件->=ls -alt /tmp/=

如图发现当前目录下出现了异常文件,疑似挖矿程序病毒:

对已发现的恶意文件进行分析,查看559.sh脚本内容:脚本先是杀掉服务器上cpu占用大于20%的进程,然后从远程27.155.87.26(福建,黑客所控制的一个IDC服务器)下载了病毒程序并执行;

- 查看开机启动项内容->=ls -alt /etc/init.d=,/etc/init.d是/etc/rc.d/init.d的软链接

- 按事件排序查看指定目录下文件->=ls -alt | head -n 10=

针对可疑文件可以使用stat进行创建改事件、访问时间的详细查看,若修改时间距离事件日期接近,有线性关联,说明可能被篡改或者其他

- 查看历史命令记录文件=~/bash_history=
查找 bash_history命令执行记录,主要分析是否有账户执行过恶意操作系统;命令在linux系统里,只要执行过命令的用户,那么在这个用户的HOME目录下,都会有一个=bash_history=的文件记录着这个用户都执行过的命令

所以若是出现了安全事故,可以通过查看用户的历史记录来排查用户是否执行过恶意命令,然后再往下进行排查
- 查看操作系统用户信息文件=/etc/passwd=
/etc/passwd 这个文件是保存着这个 linux 系统所有
用户的信息,通过查看这个文件,我们就可以尝试查找有没有攻击者所创建的用
户,或者存在异常的用户
主要关注的是第 3、4 列的用户标识号和组标识号,和倒数一二列的用户主目录和命令解析程序
一般来说最后一列命令解析程序如果是设置为 nologin 的话,那么表示这个用户是不能登录的,所以可以结合我们上面所说的 bash_history 文件的排查方法
首先在/etc/passwd 中查找命令解释程序不是 nologin 的用户,然后再到这些用户的用户主目录里,找到bash_history,去查看这个用户有没执行过恶意命令。

/etc/passwd 中一行记录对应着一个用户,每行记录又被冒号(:)分隔为 7 个字段,
其格式和具体含义如下:
=用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell=
- 查看新增文件
find:在指定目录下查找文件

=find ./ -mtime 0 -name "*.php"=(查找 24 小时内被修改的 php 文件)

=find / -ctime 2=(查找 72 小时内新增的文件)

ps:-ctime内容未改变权限时候也可以查出
- 特殊权限的文件查看
查找777的权限文件->=find /*.jsp -perm 4777=

- 隐藏的文件(以“.”开头的是具有隐藏属性的文件)

ps:在文件分析过程中,手工排查频率较高的命令是find、grep、ls核心目的是为了关联推理出可疑文件
- 查看分析任务计划
=crontab -u < -l,-r,-e >=

通过crontab -l查看当前的任务计划有哪些,是否有后门木马程序启动相关信息
查看etc目录任务计划相关文件,ls /etc/cron*

进程排查
top
(1)使用 top 命令实时动态地查看系统的整体运行情况,主要分析 CPU 和内存
多的进程,是一个综合了多方信息监测系统性能和运行信息的实用工具

字段含义如下表:
| 列名 | 含义 |
|---|---|
| PID | 进程id |
| PPID | 父进程id |
| UID | 进程所有者的用户id |
| USER | 进程所有的用户名 |
| GROUP | 进程所有者的组名 |
| TTY | 启动进程的终端名 |
| PR | 优先级 |
| NI | nice值;负值表示高优先级,正值表示低优先级 |
| RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
| SHR | 共享内存大小,单位 kb |
| S | 进程状态: D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
| %CPU | 上次更新到现在的 CPU 时间占用百分比 |
| %MEM | 进程使用的物理内存百分比 |
| TIME | 进程使用的 CPU 时间总计,单位秒 |
| TIME+ | 进程使用的 CPU 时间总计,单位 1/100 秒 |
| COMMAND | 命令名/命令行 |
netsta
(2)用 netstat 网络连接命令,分析可疑端口、可疑 IP、可疑 PID 及程序进程
netstat 用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验
本机各端口的网络连接情况
选项参数:

netstat –antlp | more

说明:
a) "Recv-Q"和"Send-Q"指的是接收队列和发送队列。
b) Proto 显示连接使用的协议;RefCnt 表示连接到本套接口上的进程号;Types 显示套接口的类型;
State 显示套接口当前的状态;Path 表示连接到套接口的其它进程使用的路径名。
c) 套接口类型:
-t TCP
-u UDP
-raw RAW 类型
--unix UNIX 域类型
--ax25 AX25 类型
--ipx ipx 类型
--netrom netrom 类型
d)状态说明:
LISTENING 侦听状态
ESTABLISHED 建立连接
CLOSE_WAIT 对方主动关闭连接或网络异常导致连接中断
如图,可查看到本地 mysql 数据库有外部连接行为:

(3)根据 netstat 定位出的 pid,使用 ps 命令,分析进程

=ps aux | grep pid | grep –v grep=

将 netstat 与 ps 结合:

发现了3个可疑进程1742、1677、1683
看一下这些可执行程序在什么地方

可以使用 lsof -i:1677 查看指定端口对应的程序;
lsof
lsof(list open files)是一个列出当前系统打开文件的工具。
在 linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件
所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息。
lsof filename 显示打开指定文件的所有进程


COMMAND:进程的名称
PID 进程标识符
USER 进程所有者
FD 文件描述符,应用程序通过文件描述符识别该文件。如 cwd、txt 等
TYPE 文件类型,如 DIR、REG 等
DEVICE 指定磁盘的名称
SIZE 文件的大小
NODE 索引节点(文件在磁盘上的标识)
NAME 打开文件的确切名称
(4)使用 ls 以及 stat 查看系统命令是否被替换
两种思路:
- 查看命令目录最近的时间排序
- 根据确定时间去匹配
ls -alt /usr/bin | head -10
ls -al /bin /usr/bin /usr/sbin/ /sbin/ | grep "Jan 15"

备注:如果日期数字<10,中间需要两个空格。比如 1 月 1 日,grep “Jan 1”
(5)隐藏进程查看
ps -ef | awk '{print}' | sort -n | uniq >1
ls /proc | sort -n |uniq >2
diff 1 2
系统信息排查
(1)查看分析 history (cat /root/.bash_history),曾经的命令操作痕迹,以便进一
步排查溯源。运气好有可能通过记录关联到如下信息:
a) wget 远程某主机(域名&IP)的远控文件;
b) 尝试连接内网某主机(ssh scp),便于分析攻击者意图;
c) 打包某敏感数据或代码,tar zip 类命令
d) 对系统进行配置,包括命令修改、远控木马类,可找到攻击者关联信息
(2)查看分析用户相关分析
seradd userdel 的命令时间变化(stat),以及是否包含可疑信息
b) cat /etc/passwd 分析可疑帐号,可登录帐号
查看 UID 为 0 的帐号awk -F: '{if($3==0)print $1}'/etc/passwd
查看能够登录的帐号cat /etc/passwd | grep -E "/bin/bash$"

PS:UID 为 0 的帐号也不一定都是可疑帐号,Freebsd 默认存在 toor 帐号,且uid 为 0.(toor 在 BSD 官网解释为 root 替代帐号,属于可信帐号);
(3)查看分析任务计划
crontab -u <-l, -r, -e>

- 通过 crontab –l 查看当前的任务计划有哪些,是否有后门木马程序启动相
关信息 - 查看 etc 目录任务计划相关文件,ls /etc/cron*

4)查看 linux 开机启动程序
- 查看 rc.local 文件(/etc/init.d/rc.local /etc/rc.local)
- ls –alt /etc/init.d/

=chkconfig=
chkconfig 是管理系统服务(service)的命令行工具,对开机启动的可疑程序进行更改
设置 service 启动信息: chkconfig name on/off/reset
设置 service 运行级别: chkconfig --level levels
(5)查看系统用户登录信息
a)使用 lastlog 命令,系统中所有用户最近一次登录信息。

b) 使用 lastb 命令,用于显示用户错误的登录列表;
c) 使用 last 命令,用于显示用户最近登录信息(数据源为/var/log/wtmp,var/log/btmp);

utmp 文件中保存的是当前正在本系统中的用户的信息。
wtmp 文件中保存的是登录过本系统的用户的信息。
/var/log/wtmp 文 件 结 构 和 /var/run/utmp 文 件 结 构 一 样 , 都 是 引 用
/usr/include/bits/utmp.h 中的 struct utmp

6)系统路径分析
echo $PATH 分析有无敏感可疑信息

(7)指定信息检索

(8)查看 ssh 相关目录有无可疑的公钥存在

后门排查
(1)系统后门排查
=chkrootkit=:
chkrootkit 是用来监测 rootkit 是否被安装到当前系统中的工具。
rootkit ,是一类入侵者经常使用的工具。这类工具通常非常的隐秘、令用户不易察觉,通过这类工具,入侵者建立了一条能够常时入侵系统,或者说对系统进行实时控制的途径。
下载链接:https://www.chkrootkit.org/
chkrootkit 主要功能:
- 检测是否被植入后门、木马、rootkit
- 检测系统命令是否正常
- 检测登录日志

a)chkrootkit 安装:
rpm -ivh chkrootkit-0.47-1.i386.rpm
b)检测
chkrootkit –n;如果发现有异常,会报出“INFECTED”字样

c)定时检测
chkrootkit 自带的脚本并没有包括定时检测部分,而考虑到该工具的作用。
建议编写一个脚本,并加入计划任务中。并把脚本加入 crontab 中:cp -p ./chkrootkit.sh /etc/cron.daily/

Rkhunter:
rkhunter 是 Linux 系统平台下的一款开源入侵检测工具,具有非常全面的扫描范围,除了能够检测各种已知的 rootkit 特征码以外,还支持端口扫描、常用程序文件的变动情况检查**
rkhunter 主要功能:
- 系统命令(Binary)检测,包括 Md5 校验
- Rootkit 检测
- 本机敏感目录、系统配置、服务及套间异常检测
- 三方应用版本检测

=RPM check 检查=
系统完整性也可以通过 rpm 自带的-Va 来校验检查所有的 rpm 软件包,有哪些被篡改了,防止 rpm 也被替换,上传一个安全干净稳定版本 rpm 二进制到服务器上进行检查。
./rpm -Va > rpm.log
如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是 8 位长字符串,c 用以指配置文件, 接着是文件名. 8 位字符的每一个 用以表示文件与 RPM 数据库中一种属性的比较结果 。 . (点) 表示测试通过。.下面的字符表示对 RPM 软件包进行的某种测试失败:
5 MD5 校验码**
S 文件尺寸
L 符号连接
T 文件修改日期
D 设备
U 用户
G 用户组
**M 模式 e (包括权限和文件类型)
下图可知 ps, pstree, netstat, sshd 等等系统关键进程被篡改了:

=Webshell Check=
Webshell 的排查可以通过文件、流量、日志三种方式进行分析,基于文件的命名特征和内容特征,相对操作性较高,在入侵后排查过程中频率也比较高。

综上所述,通过 chkrootkit 、rkhunter、RPM check、Webshell Check 等手段得
出以下应对措施:

2)手工 Webshell 排查
通过文件内容中的危险函数,去找到网站中的 web 后门。最常见的 Webshell文件内容中常见的恶意函数:
PHP
Eval、System、assert、
JSP
getRunTime、 FileOutputStream、
ASP
eval、execute、 ExecuteGlobal、
find /var/www/html/ -type f -name '*.php'|xargs grep 'eval' |more

除了通过 grep 去找 webshell,我们还可以用类似 D 盾之类的 webshell 查杀工具,把源码拖下来在本机查杀。
日志排查
Linux 系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。大部分 Linux 发行版默认的日志守护进程为syslog,位于 /etc/syslog 或 /etc/syslogd或/etc/rsyslog.d,默认配置文件为/etc/syslog.conf 或 rsyslog.conf,任何希望生成日志的程序都可以向 syslog 发送信息
Linux 系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。完成这个过程的程序就是 syslog。syslog 可以根据日志的类别和优先级将日志保存到不同的文件中。
(1)日志类型
下面是和排查相关的常见日志类型,但并不是所有的 Linux 发行版都包含这些类型:
| 类型 | 类型 |
|---|---|
| auth | 用户认证时产生的日志,如 login 命令、su 命令。 |
| authpriv | 与 auth 类似,但是只能被特定用户查看。 |
| console | 针对系统控制台的消息。 |
| cron | 系统定期执行计划任务时产生的日志。 |
| daemon | 某些守护进程产生的日志。 |
| ftp | FTP 服务。 |
| kern | 系统内核消息。 |
| 邮件日志。 | |
| mark | 产生时间戳。系统每隔一段时间向日志文件中输出当前时间,每行的格式类似于 May 26 11:17:09 rs2 -- MARK --,可以由此推断系统发生故障的大概时间。 |
| news | 网络新闻传输协议(nntp)产生的消息。 |
| ntp | 网络时间协议(ntp)产生的消息。 |
| user | 用户进程。 |
(2)日志优先级:
| 优先级 | 说明 |
|---|---|
| emerg | 紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。 |
| alert | 需要立即修复,例如系统数据库损坏。 |
| crit | 危险情况,例如硬盘错误,可能会阻碍程序的部分功能。 |
| err | 一般错误消息。 |
| warning | 警告。 |
| notice | 不是错误,但是可能需要处理。 |
| info | 通用性消息,一般用来提供有用信息。 |
| debug | 调试程序产生的信息。 |
| none | 没有优先级,不记录任何日志消息。 |
(3)常用日志文件
| 日志目录 | 作用 |
|---|---|
| /var/log/message | 包括整体系统信息 |
| /var/log/auth.log | 包含系统授权信息,包括用户登录和使用的权限机制等 |
| /var/log/userlog | 记录所有等级用户信息的日志 |
| /var/log/cron | 记录 crontab 命令是否被正确的执行 |
| /var/log/vsftpd.log | 记录 Linux FTP 日志 |
| /var/log/lastlog | 记录登录的用户,可以使用命令 lastlog 查看 |
| /var/log/secure | 记录大多数应用输入的账号与密码,登录成功与否 |
| var/log/wtmp | 记录登录系统成功的账户信息,等同于命令 last |
| var/log/faillog | 记录登录系统不成功的账号信息,一般会被黑客删除 |
(4)日志配置
linux 系统日志相关配置文件为/etc/rsyslog.conf(syslog.conf),以下是对配置文件各项配置;

(5)日志分析
日志查看分析,主要为 grep,sed,sort,awk 的综合运用;
5.1、基于时间的日志管理:
5.1.1、/var/log/wtmp
/var/log/wtmp 是一个二进制文件,记录每个用户的登录次数和持续时间等
信息;
last 命令
last 命令用于显示用户最近登录信息。单独执行 last 命令,它会读取
/var/log/wtmp 的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来;
-f: <记录文件>:指定记录文件
-a: 把从何处登入系统的主机名称或 ip 地址,显示在最后一行

5.1.2、/var/run/utmp
/var/run/utmp 是一个二进制文件,记录当前登录系统的用户信息。可用 who 命令显示当中的内容,Who 的缺省输出包括用户名、终端类型、登录日期及远程主机;

5.1.3、/var/log/lastlog(lastlog)
/var/log/lastlog 记录用户最后登录的时间和登录终端的地址,可使用 lostlog 命令查看;

5.1.4、/var/log/btmp(lastb)
/var/log/btmp 记录错误登录的日志,可使用 lostb 查看,有很多黑客试图使用密码字典登录 ssh 服务,可以使用此日志查看恶意 ip 试图登录次数;

PS:登录日志可以关注 Accepted、Failed password 、invalid 特殊关键字;
5.2、系统日志
/var/log/secure
安全日志 secure 包含验证和授权方面信息,比如最常用的远程管理协议 ssh,就会把所有授权信息都记录在这里。
所以通过查看该日志,我们就能查看是否有人爆破 ssh,通过查看存在过爆破记录的 ip 是否有成功登录的行为,我们就能知道是否有攻击者通过 ssh 暴力破解的方式成功攻击进来了。
通过时间的纬度去判断,可以查看出是机器行为还是人为的,机器登录事件间隔特别密;
主要分析点:是否有 ip 爆破 ssh 成功;

定位有多少 IP 在爆破主机的 root 帐号:
=grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more=

登录成功的 IP 有哪些:
grep "Accepted " /var/log/ secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

5.3、中间件日志
Web 攻击的方法多种多样,但是默认情况下 Web 日志中所能记录的内容并不算丰富,最致命的是 web 日志是不会记录 post 内容的
一般来说我们的分析思路都是先通过文件的方式找到 webshell,然后再从日志里找到相应的攻击者 ip,再去分析攻击者的整个攻击路径,来回溯攻击者的所有行为;
如黑客在入侵完了之后把 webshell 删除了,通过文件搜索的方式找不到 webshell 或者只能通过分析 web 日志去发现 webshell
比如这时候要排查的话,难度会稍大。Web 日志主要分析 access_log,本文以常见的中间件 apache 为例,其他中间件日志格式和分析思路大同小异;
Apache 默认自动生成两个日志文件,访问日志 access_log 和 报错日志 error_log;

Apache 日志字段说明:


在对 WEB 日志进行安全分析时,可以按照下面两种思路展开,逐步深入,还原整个攻击过程;
1)首先确定受到攻击、入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程;

2)一般攻击者在入侵网站后,通常会上传一个后门文件,以方便自己以后访问。
我们也可以以该文件为线索来展开分析;

5.4、数据库日志
数据库日志以常用的数据库 Mysql 数据库为例。Mysql 数据库有五种日志,错误日志、查询日志、慢查询日志、更新日志、二进制日志,重点关注查询日志;查看是否开启查询日志:

查看数据库文件:路径为/var/log/mysql/,记录一次数据库的连接、查询和退出中间的数据库操作;

在查询语句中搜索所有关键词为“union”的请求,可以发现 172.24.123.120 在尝试 SQL 注入,类似,通过通过特殊的关键词搜索有无敏感的数据库操作。如读取/etc/passwd 敏感文件,写 webshsll 等;

处置建议与防御措施
处置建议
- 断网或ACL隔离;
- 结束恶意进程;
- 提取木马样本;
- 删除木马;
防御措施
- 安装杀毒软件,对被感染机器进行安全扫描和病毒查杀;
- 对系统进行补丁更新,封堵病毒传播途径;
- 制定严格的口令策略,避免弱口令;,
- 结合备份的网站日志对网站应用进行全面代码审计,找出攻击者利用的漏洞入口进行封堵;
实际案例分享
案例一:挖矿木马处置01
- 事件概述
发现多台服务器被植入挖矿木马; - 事件分析
登录被感染挖矿木马的服务器:x.x.x.x 首先通过本地DNS流量解析发现该机器确实存在挖矿木马;

->ipconfig/displaydns显示DNS解析程序缓存的内容
登录的这台机器可以看到 DNS 解析过该域名,由此判断该机器中了挖矿木马,使用相关工具分析发现其中 csrss.exe 进程为伪装的系统进程
通过该进程有 2 个派生进程 sqlserver.exe 和mscorswv.exe,其中 sqlserver.exe 为 loader 程序负责加载 mscorswv.exe 和配置文件:

通过查看mscorswv.exe配置发现该程序会连接:xmr.crypt-pool.fr

通过对该木马分析后发现该木马会创建名称为:system_updatea的系统服务

- 结论
最后清理后,统一查看网络连接、进程等是否正常
案例二:挖矿木马处置02
- 事件概述
某公司近期发信啊服务器运行速度变慢,主站无故出现打开缓慢甚至无法发开、http状态503错误等现象
登录服务器后发现CPU占用率在长时间保持100%断网后服务器CPU下降恢复正常,尝试结束进程删除文件后长期服务器进程自动恢复
- 事件分析
通过查看系统进程后发现多个异常进程:alg.exe、splwow64.exe。通过对进程参数进行判断判定该进程是恶意挖矿程序
该程序在工作时,会导致CPU长时间高负荷运行

通过调用参数发现该挖矿程序会与远程矿池进行连接: xmr.crypto-pool.fr


结束程序以及删除启动项信息后重启发现,系统恢复正常该挖矿程序,没有自动加载。
通过对文件分析发现该文件是由alg.exe加载并运行的,通过alg.exe植入时间2017/10/05通过排查系统日志和安全日志发信啊已经被删除最早产生日志的时间为2017/10/06怀疑在黑客操作完成后删除了系统日志

通过对服务日志排查发现在2017/10/03之后出现过多次登录记录账户为:Support。
发现该账户不属于自用账户怀疑为黑客建立的管理账户,该账户登录IP地址为:188.0.189.153,归属地为:俄罗斯。不排除为跳板主机

通过查看Sopport账户进行查看发现该账户建立时间为2017/08/26最后登录时间为2017/10/05

通过查看系统发现该系统为2008R2,并且没有打过补丁,不排除时通过”永恒之蓝“漏洞或弱口令进入
发现该机器运行了oracle和sqlserver和iis服务,因为无法确定oracle和sqlserver管理密码所以无法判定数据库服务是否存在弱口令
通过对iis网站目录进行扫描发现多个webshell后门,最早后门时间可以追溯到2014/10/17
通过对后门文件路径的分析发现,应该是通xxx.com网站的FCKeditor的模块进行上传。删除webshell后发现IIS配置被破坏访问该服务器其他站点均可以访问,但是访问主站时会提示503错误。
通过新建网站配置解决该问题,但是访问时发现多个图片文件显示不正常通过。排查后发现网站目录下的upload文件被删除并且无法恢复
- 结论
最后清理,统一查看网络连接、进程等是否正常
浙公网安备 33010602011771号