'安全应急响应'

看了几篇文章,整合到一起,做个总结

总体思路

分析原则

及时进行断网隔离操作,重要数据先备份再分析,尽量不要在原来的系统中分析
虚拟机建立快照
已经被入侵的系统都不再安全,如果条件允许最好采用第三方系统进行分析
提醒客户保护现场,不要直接重装系统
了解客户网络拓扑,网络的进出口、负载均衡、防火墙、DNS服务器

分析目标

找到攻击来源IP找到入侵途径
分析影响范围
量化影响级别

分析方法

大胆猜测是最重要的,猜测入侵途径,然后进行分析一般都会事半功倍。 一般来说,分析日志可以找到很多东西,比如,secure日志可以查看Accept关键字;last可以查看登录信息;bash_history可以查看命令执行信息等,不同的日志有不同的查看方式,最好是系统管理员的陪同下逐步排查,因为系统管理员才最懂他的服务器系统。

分析影响

根据服务器的用途、文件内容、机密情况结合数据泄漏、丢失风险,对系统使用者影响等进行影响量化,并记录相关安全事件,总结分析,以便后期总结。 如果已经被进行过内网渗透,还需要及时排查内网机器的安全风险,及时处理。

线索

时间:创建时间、修改时间
端口、进程

安全事件

1.恶意代码威胁,即僵尸网络、恶意木马、蠕虫病毒、勒索病毒等恶意代码导致的安全事件
2.高级持续性威胁(APT)攻击事件,即具有潜伏性、隐蔽性、目的性、持续性等特点的安全事件
3.非法入侵事件,包括但不限于业务系统受到入侵致使数据泄露、丢失等;外网网站被入侵,导致网站被恶意篡改植入暗链或出现其他非法的宣传标语;服务器被入侵导致受到勒索攻击等安全事件
4.漏洞事件,即0day公布;在野漏洞发现;已知漏洞被发现受到通报等安全事件
5.数据泄露事件,即重要数据因受到了入侵导致的泄露;应用配置不当导致的泄露;员工误操作导致的泄露;内鬼泄露等安全事件
6.分布式拒绝服务攻击(DDOS)事件,即网站受到了各类DOS攻击,包括但不限于CC攻击、洪水攻击、流量放大攻击等安全事件
7.流量劫持,DNS劫持、HTTP劫持
8.其他归于网络安全的事件

应急目的

确认安全事件后,明确应急目的:
1.病毒、后门清除工作
2.协助业务系统安全的恢复上线
3.攻击溯源工作(仅溯源至攻击者的攻击切入点)

工作内容

病毒分析处置、业务恢复、安全加固、溯源分析、临时需求处置、产品对接与使用、应急指挥与协调

Windows安全应急响应

入侵排查思路

检查账号安全

1.查看服务器是否有弱口令,远程管理端口是否对公网开放

2.查看服务器是否存在可以账号、新增账号

3.查看服务器是否存在隐藏账号、克隆账号
检查方法:
i.打开注册表,查看管理员对应键值HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\
ii.使用D盾_web查杀工具

4.结合日志,查看管理员登录时间、用户名是否存在异常
检查方法:
i.Win+R打开运行,输入eventvwr.msc,打开事件查看器
ii.导出Windos日志--安全,利用Log Parser进行分析

检查异常端口、进程

1.检查端口连接情况,是否有远程连接、可以连接
检查方法:
i.netstat -ano查看当前的网络连接,定位可疑的ESTABLISHED
ii.根据netstat定位出的PID,再通过tasklist命令进行进程定位tasklist|findstr "PID"

2.检查进程
检查方法:
i.Win+R,输入msinfo32,依次点击软件环境→正在运行任务就可以查看到进程的详细信息,比如进程路径、进程ID、文件创建日期、启动时间
ii.打开D盾_web查杀工具,进程查看,关注没有签名信息的进程
iii.通过微软官方提供的Process Explorer等工具排查
iv.查看可疑的进程及其子进程,通过观察以下内容:没有签名验证信息的进程、没有描述信息的进程、进程的属主、进程的路径是否合法、CPU或内存资源占用长时间过高的进程

3.小技巧
i.查看端口对应的PID:netstat -ano|findstr "port"
ii.查看进程对应的PID:任务管理器–查看–选择列–PID或者tasklist|findstr "Process Name"
iii.查看进程对应的程序位置:任务管理器–选择对应进程–右键打开文件位置或Win+R,输入wmic,cmd界面下输入process
iv.tasklist/svc
v.查看Windows服务所对应的端口:%system%/system32/drivers/etc/services(一般%system%就是C:\Windows

检查启动项、计划任务、服务

1.检查服务器是否有异常的启动项

检查方法:
i.登录服务器,单击【开始】>【所有程序】>【启动】,默认情况下此目录在是一个空目录,确认是否有非业务程序在该目录下
ii.单击开始菜单 >【运行】,输入 msconfig,查看是否存在命名异常的启动项目,是则取消勾选命名异常的启动项目,并到命令中显示的路径删除文件
iii.单击【开始】>【运行】,输入 regedit,打开注册表,查看开机启动项是否正常,特别注意如下三个注册表项: HKEY_CURRENT_USER\software\micorsoft\windows\currentversion\run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce
检查右侧是否有启动异常的项目,如有请删除,并建议安装杀毒软件进行病毒查杀,清除残留病毒或木马
iv.利用安全软件查看启动项、开机时间管理等
v.组策略,运行gpedit.msc

2.检查计划任务

检查方法:
i.单击【开始】>【设置】>【控制面板】>【任务计划】,查看计划任务属性,便可以发现木马文件的路径
ii.单击【开始】>【运行】;输入 cmd,然后输入at,检查计算机与网络上的其它计算机之间的会话或计划任务,如有,则确认是否为正常连接

3.服务自启动

检查方法:
单击【开始】>【运行】,输入services.msc,注意服务状态和启动类型,检查是否有异常服务。

检查系统相关信息

1.查看系统版本及补丁信息

cmd中输入systeminfo

2.查找可以目录及文件

检查方法:
i.查看用户目录,新建账号会在这个目录生成一个用户目录,查看是否有新建用户目录
Windows 2003 C:\Documents and Settings
Windows 2008R2 C:\Users\
ii.单击【开始】>【运行】,输入%UserProfile%\Recent,分析最近打开分析可疑文件
iii.在服务器各个目录,可根据文件夹内文件列表时间进行排序,查找可疑文件

自动化查杀

病毒查杀

检查方法:下载安全软件,更新最新病毒库,进行全盘扫描

WebShell查杀

检查方法:选择具体站点路径进行WebShell查杀,建议使用两款WebShell查杀工具同时查杀,可相互补充规则库的不足

日志分析

系统日志

分析方法:
i.前提:开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等。
ii.Win+R打开运行,输入”eventvwr.msc”,回车运行,打开”事件查看器”。
iii.导出应用程序日志、安全日志、系统日志,利用Log Parser进行分析。

WEB访问日志

分析方法:
i.找到中间件的web日志,打包到本地方便进行分析。
ii.推荐工具:Window下,推荐用 EmEditor 进行日志分析,支持大文本,搜索效率还不错;Linux下,使用Shell命令组合查询分析

工具

病毒分析

PCHunter

火绒剑

病毒查杀

火绒安全软件

在线病毒扫描

腾讯哈勃分析系统

WebShell查杀

河马webshell查杀

深信服Webshell网站后门检测工具

Windows登录类型

Audit logon events

登录类型2:交互式登录(Interactive)

用户在计算机的控制台上进行的登录,也就是在本地键盘上进行的登录,通过KVM登录仍然属于交互式登录,虽然它是基于网络的

登录类型3:网络(Network)

从网络的上访问一台计算机时在大多数情况下Windows记为类型3,最常见的情况就是连接到共享文件夹或者共享打印机时。另外大多数情况下通过网络登录IIS时也被记为这种类型,但基本验证方式的IIS登录是个例外,它将被记为类型8

登录类型4:批处理(bat)

当Windows运行一个计划任务时,“计划任务服务”将为这个任务首先创建一个新的登录会话以便它能在此计划任务所配置的用户账户下运行,当这种登录出现时,Windows在日志中记为类型4,对于其它类型的工作任务系统,依赖于它的设计,也可以在开始工作时产生类型4的登录事件,类型4登录通常表明某计划任务启动,但也可能是一个恶意用户通过计划任务来猜测用户密码,这种尝试将产生一个类型4的登录失败事件,但是这种失败登录也可能是由于计划任务的用户密码没能同步更改造成的,比如用户密码更改了,而忘记了在计划任务中进行更改。

登录类型5:服务(Service)

与计划任务类似,每种服务都被配置在某个特定的用户账户下运行,当一个服务开始时,Windows首先为这个特定的用户创建一个登录会话,这将被记为类型5,失败的类型5通常表明用户的密码已变而这里没得到更新,当然这也可能是由恶意用户的密码猜测引起的,但是这种可能性比较小,因为创建一个新的服务或编辑一个已存在的服务默认情况下都要求是管理员或serversoperators身份,而这种身份的恶意用户,已经有足够的能力来干他的坏事了,已经用不着费力来猜测服务密码了。

登录类型6:解锁(Unlock)

当用户离开他的计算机时相应的工作站自动开始一个密码保护的屏保,当用户回来解锁时,Windows就把这种解锁操作认为是一个类型7的登录,失败的类型7登录表明有人输入了错误的密码或者有人在尝试解锁计算机。

登录类型8:网络明文(NetworkCleartext)

这种登录表明这是一个像类型3一样的网络登录,但是这种登录的密码在网络上是通过明文传输的,WindowsServer服务是不允许通过明文验证连接到共享文件夹或打印机的,只有当从一个使用Advapi的ASP脚本登录或者一个用户使用基本验证方式登录IIS才会是这种登录类型。“登录过程”栏都将列出Advapi。

登录类型9:新凭证(NewCredentials)

当使用带/Netonly参数的RUNAS命令运行一个程序时,RUNAS以本地当前登录用户运行它,但如果这个程序需要连接到网络上的其它计算机时,这时就将以RUNAS命令中指定的用户进行连接,同时Windows将把这种登录记为类型9,如果RUNAS命令没带/Netonly参数,那么这个程序就将以指定的用户运行,但日志中的登录类型是2。

登录类型10:远程交互(RemoteInteractive)

当通过终端服务、远程桌面或远程协助访问计算机时,Windows将记为类型10,以便与真正的控制台登录相区别,注意XP之前的版本不支持这种登录类型,比如Windows2000仍然会把终端服务登录记为类型2。

登录类型11:缓存交互(CachedInteractive)

Windows支持一种称为缓存登录的功能,这种功能对移动用户尤其有利,比如你在自己网络之外以域用户登录而无法登录域控制器时就将使用这种功能,默认情况下,Windows缓存了最近10次交互式域登录的凭证HASH,如果以后当你以一个域用户登录而又没有域控制器可用时,Windows将使用这些HASH来验证你的身份。

需要注意的是,Windows2000在默认情况下是没有纪录安全日志的!用户在Windows2000中需启用组策略“计算机配置/Windows设置/安全设置/本地策略/审核策略”下的“审核登录事件”才能看到相应的记录信息。

事件ID

Event ID(2000/XP/2003) Event ID(Vista/7/8/2008/2012) 描述
528 4624 成功登录
529 4625 失败登录
680 4776 成功/失败的账户认证
624 4720 创建用户
632 4728 添加用户到启用安全性的全局组中
636 4732 添加用户到启用安全性的本地组中
2934 7030 服务创建错误
2944 7040 IPSEC服务的启动类型已从禁用更改为自动启动
2949 7045 服务创建

Logprase

下载地址

使用

Security Log

主要查看管理员登录时间段是否为正常时间
木马运行时间是否和管理员登录时间对应

1
LogParser -i:EVT -o DATAGRID "SELECT TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as username,EXTRACT_TOKEN(Strings,8,'|') as LogonType, EXTRACT_TOKEN(Strings,17,'|') as ProcessName, EXTRACT_TOKEN(Strings,18,'|') as SourceIP FROM Security where EventID=4624 AND TO_DATE(TimeGenerated) BETWEEN TIMESTAMP('2019-05-30','yyyy-MM-dd') and TIMESTAMP('2019-05-31','yyyy-MM-dd')"

System Log

主要查看服务名、服务路径

1
LogParser -i:EVT -o:DATAGRID "SELECT TimeWritten,EventID,EventType,EventTypeName,SourceName,EXTRACT_TOKEN(Strings,0,'|') as service_name,EXTRACT_TOKEN(Strings,1,'|') as service_path,Message from system WHERE TO_DATE(TimeGenerated) BETWEEN TIMESTAMP('2019-05-30','yyyy-MM-dd') AND TIMESTAMP('2019-05-31','yyyy-MM-dd')"

Application Log

主要查看程序运行时间

1
LogParser -i:EVT -o:DATAGRID "SELECT * FROM Application WHERE TO_DATE(TimeGenerated) BETWEEN TIMESTAMP('2019-05-30','yyyy-MM-dd') AND TIMESTAMP('2019-05-31','yyyy-MM-dd')"

WMIC

查看进程的命令行参数

1
2
3
4
5
6
7
wmic process get caption,commandline /value > tmp.txt
wmic service list brief
wmic process list brief
wmic startup list brief
//查看安装补丁和时间信息
wmic qfe
wmic qfe get Caption,Description,HotFixID,InstalledOn

DOS命令

dir

1
2
3
4
5
6
7
8
DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N] [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
/A 显示具有指定属性的文件
属性:D目录 R只读文件 H隐藏文件 A准备存档的文件
S系统文件 I无内容索引文件 L解析点 -表示“否”的前缀
/S 显示指定目录及子目录中文件
/W 用宽列表格式显示
/P 显示满一屏暂停,按任意键后继续显示下一屏
/Q 显示文件所有者

copy和xcopy

copy只能拷贝文件,不能拷贝文件夹
xcopy能拷贝文件夹及文件

1
2
3
4
5
xcopy参数
/S 复制目录和子目录,除了空目录
/E 复制目录和子目录,包括空目录
/C 忽略错误继续复制
/H 复制隐藏和系统文件

del、deltree、rd

del 只能删除一个或者多个文件,不能删除文件夹

deltree 是一个外部命令,可以删除文件及文件夹,以及其子文件夹

rd 删除空文件夹,需要空文件夹的绝对路径

1
2
3
del 参数
/s 递归删除文件夹及文件
/q 不提示确认删除

move

移动一个或多个文件

1
2
/Y 若目标文件夹下有同名文件,忽略提示,直接覆盖原文件
/-Y 提示警告

attrib

更改文件属性

1
2
3
4
5
6
7
attrib 参数
+ 设置属性
- 删除属性
R 只读文件
A 存档文件
S 系统文件
H 隐藏文件

netstat

查看网络连接、端口信息

1
2
3
4
5
6
7
8
9
10
11
12
13
NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-t] [-v] [interval]
-a 显示连接和监听端口
-b 显示包含于创建每个连接或监听端口的可执行组件;需要权限
-e 显示以太网统计信息
-n 以数字形式显示地址和端口号
-o 显示与每个连接相关的所属进程ID
-p proto 显示指定协议的连接;可以是TCP、UDP、TCPv6、UDPv6
-r 显示路由表
-s 按协议显示统计信息
-t 显示当前连接卸载状态
-x 显示NetworkDirect连接、侦听器和共享终结点
-y 显示所有连接TCP连接模板;无法与其他选项结合使用
interval 重新显示选定的统计信息,各个显示间暂停的间隔秒数。按CTRL+C停止重新显示统计信息。

Linux的netstat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [<Socket> ...]
netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }

-r, --route display routing table
-i, --interfaces display interface table
-g, --groups display multicast group memberships
-s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections

-v, --verbose be verbose
-W, --wide don't truncate IP addresses
-n, --numeric don't resolve names
--numeric-hosts don't resolve host names
--numeric-ports don't resolve port names
--numeric-users don't resolve user names
-N, --symbolic resolve hardware names
-e, --extend display other/more information
-p, --programs display PID/Program name for sockets
-o, --timers display timers
-c, --continuous continuous listing

-l, --listening display listening server sockets
-a, --all display all sockets (default: connected)
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
-Z, --context display SELinux security context for sockets

<Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom
<AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)

用户操作

1
2
3
4
5
net user chessur password /add
net localgroup administrators chessur /add
net user chessur /active:yes
net user chessur /actice:no
net user chessur /del

信息收集

1.事情的起因经过结果
2.需要解决的问题
3.网络环境,拓扑图
4.系统环境
5.服务器运行的服务
6.服务是否有重要资料,资料是否外泄
7.是否有安全设备(防火墙,WAF)
8.了解服务环境(开发语言,开发框架,开发商)
9.有没有处理过问题,处理了什么东西
10.日志是否完整(网站访问日志,中间件日志,网络安全设备日志,系统安全日志,日志时间)
11.内网环境下,被攻击服务器是否与其他服务器有连接,排查连接服务器
12.没有外连情况下,排查服务器是否安装远程控制类的软件

解决问题

1.攻击时间,结束时间(从日志上分析)
2.攻击路径(入侵利用的漏洞)
3.木马样本取样
4.服务器是否被提权
5.检查是否有隐藏后门,遗留文件(从高危网站目录上查看,如upload目录)
6.检查网站后台是否有可疑操作日志

注意事项

1.让客户做好备份
2.不要随意增删改查文件,任何操作都要经过客户同意之后再进行
3.删除文件时,让网站开发商确认文件是否为网站自身文件,如果不是,让网站开发商自行删除
4.上传安全工具需要客户同意
5.如果安全工具缺乏运行环境、驱动不能正常运行,不要随意安装驱动,以免服务崩溃

问题排查步骤

1.判断服务器有没有被Rootkit

Rootkit:一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。

使用PCHunter查看,如果被Rootkit,只能重装系统

2.检查登录日志,任务计划,开机启动项

登录日志

控制面板->查看事件日志->Windows日志->安全

可以根据登录日志排查入侵日期,也可判断攻击者是否通过暴破口令入侵。

任务计划

管理工具->任务计划程序

检查攻击者有没有设置定时任务运行恶意程序

开机启动项

开始菜单->启动

检查活动痕迹

1.用户文件夹

C:\Users查看攻击者的一些活动范围

2.用户桌面文件

C:\Documents and Settings\user\Desktop

Documents and Settings文件夹需要修改权限查看
属性->安全->高级->Everyone->编辑->取消列出文件夹/读取数据勾选

3.用户的网络访问情况

C:\Documents and Settings\user\Cookies
Cookie文件夹中可能会记录一些敏感信息

4.程序安装的临时文件

C:\Documents and Settings\user\Local Settings\Temp
一些程序安装、解压缩等操作可能会在该目录产生临时文件

5.最近浏览

C:\Documents and Settings\user\Recent
用户最近访问过哪些文件或文件夹

6.上网历史记录

C:\Documents and Settings\user\Local Settings\History

7.临时文件

C:\Documents and Settings\user\Local Settings\Temporary Internet Files
浏览网页时产生的临时文件,但不会存储网页页面内容,还可能以临时文件的方式存储一些下载的文件

检查隐藏账号

攻击者使用$符号创建的隐藏账户,使用net user无法查看
管理工具->计算机管理->用户查看隐藏用户

检查注册表

一些文件可以通过修改注册表达到再生

有些攻击者通过修改注册表键值创建隐藏用户
查看注册表HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\
删除该注册表下对应账户的键值删除隐藏用户

显示隐藏文件

1.dir

cmd下输入dir查看

2.文件夹选项-显示隐藏

显示隐藏的文件、文件夹和驱动器
隐藏受保护的操作系统文件

3.xcopy

复制文件夹到其他目录

4.move

移动文件夹到其他目录

5.attrib

1
attrib -h C:\chessur

6.查看注册表

修改HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ Advanced\Folder\Hidden\SHOWALL注册表的CheckedValue值,0表示不显示、1表示显示

7.移动到Linux系统下

将文件打包到Linux系统下,提取干净文件,将感染文件夹使用工具粉碎,再将干净文件打包到Windows系统下

Linux

入侵排查思路

用户

1.查询特权用户

1
awk -F: '$3==0{print $1}' /etc/passwd

2.查询可以远程登录的用户

1
awk '/\$1|\$6/{print $1}' /etc/shadow

3.查询sudoer

如非管理需要,普通用户应删除sudo权限

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

4.禁用或删除可疑用户

1
2
3
usermod -L username //禁用用户,用户无法登录,/etc/shadow第二栏为!开头
userdel username //删除用户
userdel -r user //删除用户,并删除家目录

历史命令

1.保存1万条命令

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

2.增加历史信息

1
2
3
4
5
6
7
8
9
10
11
12
//在/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 ##########
source /etc/profile //配置生效

3.清除历史记录

1
2
history -c
rm -f .bash_profile

端口

分析可疑端口、IP、PID

1
netstat -antlup

进程

1
ps aux|grep PID

服务

1.查询已安装的服务

1
2
apt list
chkconfig --list

开机启动项

启动项文件

1
/etc/rc.local

常见应急问题

挖矿、菠菜、勒索病毒

痕迹备份

分析日志前先备份日志,可以通过tar压缩备份

备份/var/log下所有日志

1
tar -zcvf /home/chessur/logs.tar.gz /var/log

备份last

1
last > /home/chessur/last.log

备份在线用户

1
w  > /home/chessur/w.log

备份系统服务

1
systemctl -a > services.log

备份进程

1
ps -ef > ps.log

备份监听端口

1
netstat -nlutp > port-listen.log

备份所有端口情况

1
netstat -ano > port-all.log

备份历史记录

1
cat .bash_history > history.txt

排查流程

找出问题->解决问题->编写报告
菠菜需要多注意网站配置文件是否被修改、网页是否被植入链接

进程排查

1.查看当前系统状态

top可以持续的监视进程的信息
碰到挖矿应急通常优先使用top命令查看系统进程,因为挖矿病毒会占用较多CPU

2.查看当前系统进程信息(ps)

psProcess Status的缩写。ps命令用来列出系统中当前运行的进程。ps命令列出的是当前进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Usage:
ps [options]

Basic options:
-A, -e all processes
-a all with tty, except session leaders
a all with tty, including other users
-d all except session leaders
-N, --deselect negate selection
r only running processes
T all processes on this terminal
x processes without controlling ttys

Selection by list:
-C <command> command name
-G, --Group <GID> real group id or name
-g, --group <group> session or effective group name
-p, p, --pid <PID> process id
--ppid <PID> parent process id
-q, q, --quick-pid <PID>
process id (quick mode)
-s, --sid <session> session id
-t, t, --tty <tty> terminal
-u, U, --user <UID> effective user id or name
-U, --User <UID> real user id or name

The selection options take as their argument either:
a comma-separated list e.g. '-u root,nobody' or
a blank-separated list e.g. '-p 123 4567'

Output formats:
-F extra full
-f full-format, including command lines
f, --forest ascii art process tree
-H show process hierarchy
-j jobs format
j BSD job control format
-l long format
l BSD long format
-M, Z add security data (for SELinux)
-O <format> preloaded with default columns
O <format> as -O, with BSD personality
-o, o, --format <format>
user-defined format
s signal format
u user-oriented format
v virtual memory format
X register format
-y do not show flags, show rss vs. addr (used with -l)
--context display security context (for SELinux)
--headers repeat header lines, one per page
--no-headers do not print header at all
--cols, --columns, --width <num>
set screen width
--rows, --lines <num>
set screen height

Show threads:
H as if they were processes
-L possibly with LWP and NLWP columns
-m, m after processes
-T possibly with SPID column

Miscellaneous options:
-c show scheduling class with -l option
c show true command name
e show the environment after command
k, --sort specify sort order as: [+|-]key[,[+|-]key[,...]]
L show format specifiers
n display numeric uid and wchan
S, --cumulative include some dead child process data
-y do not show flags, show rss (only with -l)
-V, V, --version display version information and exit
-w, w unlimited output width

--help <simple|list|output|threads|misc|all>
display help and exit

3.查看非root运行的进程

1
ps -u root -N

4.查看root运行的进程

1
ps -u root

5.查看奇怪进程

1
ps -aef|grep inetd

6.检查隐藏进程

1
ps -ef|awk '{print}'|sort -n|uniq > 1
1
ls /proc | sort -n |uniq > 2

sort将文本文件内容排序,-n安装数值大小排序
uniq去掉文本中重复出现的行列

7.检查计划任务

1
2
3
4
5
6
7
8
9
ls /etc/crontab
crontab -u user -l
usage: crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)

活动痕迹排查

1.查看当前登录用户

who显示系统中有哪些使用者

1
who -H

2.查看当前登录用户信息

w显示目前登入系统的用户信息。

3.查看最近登录信息

last显示用户最近登录信息

1
last -num //显示前num个

4.查看bash历史命令

history列出以前输入的命令和 Bash 日志。

1
history num //显示最近的num个

5.查看空口令账号

1
awk -F: '($2=="")' /etc/shadow

6.查看uid为0的账号

1
2
awk -F: '($3==0)' /etc/passwd
cat /etc/passwd|grep ":0:"

7.查看进程树

pstree以树状图的方式展现进程之间的派生关系

1
2
3
4
5
6
7
8
9
10
11
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-c:不使用精简标示法;
-G:使用VT100终端机的列绘图字符;
-h:列出树状图时,特别标明现在执行的程序;
-H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序;
-l:采用长列格式显示树状图;
-n:用程序识别码排序。预设是以程序名称来排序;
-p:显示程序识别码;
-u:显示用户名称;
-U:使用UTF-8列绘图字符;
-V:显示版本信息。

网络排查

1.netstat

netstat用于显示网络状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [<Socket> ...]
netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }

-r, --route display routing table
-i, --interfaces display interface table
-g, --groups display multicast group memberships
-s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections

-v, --verbose be verbose
-W, --wide don't truncate IP addresses
-n, --numeric don't resolve names
--numeric-hosts don't resolve host names
--numeric-ports don't resolve port names
--numeric-users don't resolve user names
-N, --symbolic resolve hardware names
-e, --extend display other/more information
-p, --programs display PID/Program name for sockets
-o, --timers display timers
-c, --continuous continuous listing

-l, --listening display listening server sockets
-a, --all display all sockets (default: connected)
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
-Z, --context display SELinux security context for sockets

<Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom
<AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)

2.查看进程占用端口情况

lsof用于查看进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)

1
2
3
4
5
6
7
8
9
10
11
12
-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息。
1
2
3
4
lsof -i:port //查看端口
lsof -i tcp //查看TCP连接
lsof -i udp //查看UDP连接
lsof -p PID //查看进程号

文件排查

1.查看文件

ls用于显示指定工作目录下之内容

1
ls -al

2.定位程序位置

whereis用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。

1
2
3
4
5
6
7
8
-b:只查找二进制文件;
-B<目录>:只在设置的目录下查找二进制文件;
-f:不显示文件名前的路径名称;
-m:只查找说明文件;
-M<目录>:只在设置的目录下查找说明文件;
-s:只查找原始代码文件;
-S<目录>只在设置的目录下查找原始代码文件;
-u:查找不包含指定类型的文件。

example

1
whereis nmap

3.查找最近修改过的文件

find用来在指定目录下查找文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-daystart:从本日开始计算时间;
-depth:从指定目录下最深层的子目录开始查找;
-expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-false:将find指令的回传值皆设为False;
-fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
-follow:排除符号连接;
-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-help或——help:在线帮助;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum<inode编号>:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount:此参数的效果和指定“-xdev”相同;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;
-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-prune:不寻找字符串作为寻找文件或目录的范本样式;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true:将find指令的回传值皆设为True;
-typ<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-version或——version:显示版本信息;
-xdev:将范围局限在先行的文件系统中;
-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。
1
find / -mtime num //num表示文件修改之后的num天

定位

根据PID定位

1
2
lsof -p PID
ls -al /etc/proc/PID

根据名称定为

1
find / -name "Process Name"

停止进程

1
kill -9 PID

若出现Operation not permitted,可能是病毒使用了chattr +i,使用chattr -i filename

清除后门

SSH后门

/root/.ssh/目录下,攻击者可能会创建自己的SSH公钥,保持控制权限,删除未知公钥

命令被替换

清除可以命令,安装干净的命令
可以用strings查看命令内容

日志目录

目录 记录内容
/etc/crontab 计划任务目录,文件内容格式*/1 * * * * chessur ls />>/opt/crontab-e 2>&1需要在五个*后面加上用户名
/var/spool/cron/ 计划任务目录,以用户名目录来区分不同用户的计划任务,文件内容格式*/1 * * * * ls />>/opt/crontab-e 2>&1,不需要加上用户名
/var/log/messages 整体系统信息日志,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中
/var/log/syslog 系统启动期间的日志,只记录警告信息,系统出问题的信息
/var/log/user.log 用户信息日志
/var/log/auth.log 系统授权日志,记录登录信息
/var/log/cron 记录crontab守护进程crond所派生的子进程的动作,前面加上用户、登录时间和PID,以及派生出的进程的动作
/var/log/xferlog FTP系统日志,记录用户与FTP服务器的交互信息
/var/log/secure 包含验证和授权方面信息,sshd会将所有信息记录(其中包括失败登录)在这里
/var/log/lastlog 记录最近成功登录的事件和最后一次不成功的事件,使用lastlog命令查看,该命令只能以root权限执行
/var/log/maillog 记录了每一个发送到系统或从系统发出的电子邮件的活动
/var/log/wtmp 永久记录每个用户登录、注销及系统的启动、停机的事件,使用last命令查看
/var/run/utmp 记录有关当前登录的每个用户的信息,执行whowusersfinger等命令时会访问该文件
/var/log/btmp 记录所有失败登录信息。使用last命令查看btmp文件`last -f /var/log/btmp
/etc/httpd/logs/access.log Apache访问日志
/var/log/httpd或/var/log/apache2 Apache的访问日志
/var/log/lighttpd light HTTPD的访问日志
/var/log/samba/ samba存储的信息
/var/log/nginx/ Nginx访问日志目录

日志分析技巧

1、定位有多少IP在爆破主机的root帐号:

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

定位有哪些IP在爆破:

1
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

爆破用户名字典是什么?

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

2、登录成功的IP有哪些:

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

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

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

3、增加一个用户kali日志:

1
2
3
4
5
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日志:

1
2
3
4
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

5、su切换用户:

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

sudo授权执行:

1
2
sudo -l
Jul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now

工具

Rootkit查杀

chkrootkit

1
2
3
4
5
6
7
使用方法:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.52
make sense
编译完成没有报错的话执行检查
./chkrootkit

rkhunter

1
2
3
4
5
6
使用方法:
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
./installer.sh --install
rkhunter -c

病毒查杀

Clamav

安装方式一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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目录并且显示有问题的文件的扫描结果

安装方式二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#安装
yum install -y clamav
#更新病毒库
freshclam
#扫描方法
clamscan -r /etc --max-dir-recursion=5 -l /root/etcclamav.log
clamscan -r /bin --max-dir-recursion=5 -l /root/binclamav.log
clamscan -r /usr --max-dir-recursion=5 -l /root/usrclamav.log
#扫描并杀毒
clamscan -r --remove /usr/bin/bsd-port
clamscan -r --remove /usr/bin/
clamscan -r --remove /usr/local/zabbix/sbin
#查看日志发现
cat /root/usrclamav.log |grep FOUND

webshell查杀

河马webshell查杀
深信服Webshell网站后门检测工具

HW

HW时碰到一些事件的处置方案

钓鱼邮件

有两类钓鱼邮件,第一类是通过XSS来获取Cookie,再进一步发送钓鱼邮件,由于是从相同企业邮箱地址发送来的邮件,收件人不会很警觉,可能会直接下载并打开附件;第二类是直接从其他邮箱发送钓鱼邮件,直接发送附件,由于该类邮件是从未知的邮箱发送过来,收件人并不会像第一类那么信任邮件

收到钓鱼邮件后,将邮件保存为eml格式文件,发送给企业信息安全部门进行分析

两类邮件中,都会有恶意文件,需要对恶意文件进行分析,分析回连地址。还有挺多专业名词,白文件,证书,C2都不是很了解,等有时间看看再加上

对于钓鱼邮件的防范方法:
对公司邮箱系统设置类似WAF的安全设备,发现恶意邮件时直接拦截
在邮箱登录上设置两步验证,这样即使窃取密码,也无法登录
培训员工安全意识,碰到未知邮件,不要轻易点开,确认安全后再打开

敏感文件泄漏

1.尽快清理暴露文件
2.排查关键中间件配置减少文件和信息暴露
3.对敏感页面做权限限制,关闭目录显示

心脏滴血

若通过心脏滴血漏洞泄露账号密码,需修改账号密码。

参考

[1] blubiu

[2] Linux安全事件应急响应排查方法总结

[3] 应急响应实战笔记

[4] 记一次Windows日志分析:LogParse

[5] 应急响应处置流程Windows篇

[6] 防范鱼叉式网络钓鱼攻击的8个诀窍