【C/S架构安全测试】客户端应用程序测试(测试项补充)

本文详细介绍了C/S架构客户端应用程序的安全测试,包括程序加壳检测、签名检测、逆向分析保护、动态调试防护、程序完整性校验、键盘消息记录、DLL注入、DLL劫持、本地文件安全、网络数据传输安全、本地注册表安全和内存安全等方面的测试方法和风险分析,提供了修复建议。同时,还提及了服务端测试的HTTP和TCP协议抓包方式以及常见漏洞列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

客户端应用程序安全测试项以及测试工具介绍、测试方法!!!

本篇文章参考大佬:vlan911 共享的客户端应用程序测试文献,深表感谢!!!


一、客户端测试

1.1 程序加壳检测

问题描述:使用DIE文件类型识别文件查看客户端程序文件的编译器连接器信息。对exe文件进行检查,未发现既有加壳防护。

测试过程:使用测试工具DIE查壳发现系统未对安装程序加壳,以下为检查结果。
在这里插入图片描述
已做加壳处理的结果
在这里插入图片描述
风险分析:未加壳的程序可以对目标的开发语言进行检测,不做抗逆向、抗反汇编的安全措施,攻击者会利用该漏洞对目标程序进行调试、分析和篡改。

修复建议:建议对客户端敏感程序文件进行加壳处理,并且注意加壳质量,避免使用弱保护壳。可以使用VMProtect等加壳方式,具有较高的安全性。

1.2 签名检测

问题描述:程序进行可信电子证书签名,是用于辨别程序或者第三方库是否可信的重要途径之一,同时有效防止程序篡改或者被替换。

测试过程:Windows操作系统对自身的程序都进行了签名,以确保程序的完整性和可用性,避免被恶意替换。

可以使用sigcheck工具检测,该工具可以对某一个目录里所有的文件进行签名检查
在这里插入图片描述
以下为签名的样子
在这里插入图片描述
风险分析:未加壳的程序可以对目标的开发语言进行检测,不做抗逆向、抗反汇编的安全措施,攻击者会利用该漏洞对目标程序进行调试、分析和篡改。

修复建议:建议对客户端敏感程序文件进行加壳处理,并且注意加壳质量,避免使用弱保护壳。可以使用VMProtect等加壳方式,具有较高的安全性。

1.3 逆向分析/反编译保护

问题描述:使用IDA对程序文件逆向分析,观察IDA能否获取到程序的汇编代码。对于能力高超的攻击者来说,没有静态分析保护的程序可以更加容易的针对程序制定攻击计划,分析程序中的缺陷代码。攻击程序中的漏洞,甚至截获操作信息。

测试过程:使用IDA对程序文件逆向分析,以下为检查结果:

使用脱壳工具对运行程序exe进行脱壳(此程序是运行程序,不是安装包)
在这里插入图片描述
使用IDA查看Lite.exe,以下是未加壳的样子
在这里插入图片描述
以下为加壳后加固后的IDA查看结果
在这里插入图片描述
风险分析:未加壳/弱壳的程序可以对目标的开发语言进行检测,不做抗逆向、抗反汇编的安全措施,攻击者会利用该漏洞对目标程序进行调试、分析和篡改。

修复建议:建议对客户端敏感程序文件进行加壳处理,并且注意加壳质量,避免使用弱保护壳。可以使用VMProtect等加壳方式,具有较高的安全性。

1.4 动态调试防护

问题描述:使用X64DBG对客户端程序进行动态调试,检查客户端程序是否存在动态调试的防护功能,能否有效的避免动态调试获取程序的执行流程。

测试过程:使用X64DBG对客户端程序进行动态调试,检查客户端程序是否存在动态调试的防护功能,能否有效的避免动态调试获取程序的执行流程。
在这里插入图片描述
一直按下一步即可,观察能否调出登录程序页面。
在这里插入图片描述
风险分析:使用X64DBG对客户端程序进行动态调试,检查客户端程序是否存在动态调试的防护功能,能否有效的避免动态调试获取程序的执行流程。

修复建议:建议对客户端程序增加花指令混淆等防护动态调试的安全措施。或者对客户端程序进行加壳处理,当检测到调试程序的时候立即断开进程,使程序崩溃最佳。

1.5 客户都程序完整性校验

问题描述:程序可以进行修改,如果程序在进行修改之后程序仍然正常运行,则用户无法感知程序被篡改而造成信息泄露。

测试过程:修改二进制程序文件,篡改文件中的某一个字节,重新运行客户端程序,观察客户端程序是否会检测出文件已被篡改。

观察客户端程序是否会检测出文件已被篡改。
在这里插入图片描述
使用Winhex工具打开小葵,而后搜索关键字zj,以字符或者16进制搜索都可以
在这里插入图片描述
修改一处,而后另存即可。
在这里插入图片描述
点击另存为即可!!!
在这里插入图片描述
打开修改后的程序,发现依然可以打开
在这里插入图片描述
风险分析:使用X64DBG对客户端程序进行动态调试,检查客户端程序是否存在动态调试的防护功能,能否有效的避免动态调试获取程序的执行流程。

修复建议:建议对客户端程序增加花指令混淆等防护动态调试的安全措施。或者对客户端程序进行加壳处理,当检测到调试程序的时候立即断开进程,使程序崩溃最佳。

1.6 键盘消息记录

问题描述:SetWindowsHookEx 是windows提供的消息钩子函数,恶意软件可以通过这个函数进行全局消息钩取,得到目标的。

测试过程:使用AKLT对用户的输入进行监测,查看是否能够获取到用户的输入
在这里插入图片描述
开始检测
在这里插入图片描述
风险分析:SetWindowsHookEx是windows提供的消息钩子函数,恶意软件可以通过这个函数进行全局消息钩取,得到目标的。

修复建议:开发者可以使用Hook Windows 系统API函数KeUserModeCallback来检测监听事件,以达到防止消息钩子的注入。

1.7 DLL注入

问题描述:测试过程中,使用进程注入工具对客户端进行DLL注入操作,观察注入后产生的结果。

测试过程:使用procexp检查Lite.exe程序DLL运行情况
在这里插入图片描述
使用MSF生成wtsapi32.dll文件做注入使用
在这里插入图片描述
当前系统监听1003端口为未连接状态
在这里插入图片描述
使用DLL注入工具,对DLL文件进行注入攻击
在这里插入图片描述
此时注入功能,1003端口被开启,且处于监听状态
在这里插入图片描述
此时查看进程查看器,DLL已被注入
在这里插入图片描述
MSF建议监听,成功获取Session
在这里插入图片描述
风险分析:DLL注入会导致恶意的DLL文件被注入程序,在攻击者获取系统权限之后可以通过此方法进行DLL注入进行后期的权限维持操作,隐蔽性极高。

修复建议:调用LoadLibrary()、LoadLibraryEX()、CreateProcess()等函数时,在程序中指定DLL的绝对路径;加载任何DLL前先校验文件的签名,签名不正确的DLL不能被加载。

1.8 DLL劫持

问题描述:DLL劫持指的是,攻击者通过一些手段来劫持或者替换正常的DLL,欺骗正常程序加载预先准备好的恶意DLL,而后实现其恶意的目的。

测试过程:使用 ImpulsiveDLLHijack工具进行劫持探测
在这里插入图片描述
运行结果,存在劫持
在这里插入图片描述
将calc.dll 文件重命名为profapi.all,而后存放入运行程序相同的文件夹下
在这里插入图片描述
此时再次运行主程序,计算器成功被弹出,且主程序可以正常运行,并未警示
在这里插入图片描述
风险分析:攻击者利用DLL劫持,可以将恶意的DLL文件存放在客户端文件夹内,而后随主程序启动而启动,利用此特性达到监控用户的目的,常用于社工钓鱼、后期的权限维持等。

修复建议:调用LoadLibrary()、LoadLibraryEX()、CreateProcess()等函数时,在程序中指定dll的绝对路径;加载任何DLL前先校验文件的签名,签名不正确的DLL不能被加载。

1.9 本地文件安全

问题描述:检测所有的本地文件,查看是否存在配置文件泄露数据库密码、用户密码缓存文件等。

测试过程:搜索所有的本地安装后的敏感文件,类似 " Config"等文件,发现存在数据库用户名密码文件本地存放。
在这里插入图片描述
风险分析:泄露了数据库用户名密码,导致攻击者可直接访问数据库获取敏感信息。

修复建议:删除不必要的配置文件,或者将敏感信息删除、隐藏。

1.10 网络数据传输安全

问题描述:网络数据传输,可通过抓包工具进行数据流量的抓取,如SQL语句暴露,攻击者可通过暴漏的SQL语句来对服务器进行攻击。

测试过程:使用工具拦截登录请求包,发现泄露了明文的SQL语句
在这里插入图片描述
风险分析:远程攻击者可以利用此查询语句得到数据库表名、库名、字段等敏感信息,而后可能构造特殊的SQL语句对特有的参数进行注入攻击从而更快的得到数据库的信息(直接抓包修改原始SQL语句查询其他内容)

修复建议:如果存在敏感信息,在数据进行传输的过程中对敏感信息进行加密处理,以提高程序数据的安全性。

1.11 本地注册表安全

问题描述:部分应用登录后。可能会将登录信息存放在注册表里,导致用户名密码等敏感信息泄露。

测试过程:实际上这类问题极少,介绍这个东西的主要原因其实还是因为很多的MSI类的病毒在落地后会修改注册表,已通过这种方式达到长期驻留的目的,所以在这里介绍一下,笔者在测试C/S架构客户端的过程中,并没有遇到过将用户名密码等信息存放在注册表的情况,所以在这里只介绍方法,使用的工具。

使用Regshot注册表对比工具,在安装包安装前将系统注册表进行快照处理
在这里插入图片描述
而后在程序安装后,输入用户名密码,登录后,再次使用注册表工具进行快照
在这里插入图片描述
注册表生成后,会自动生成用于比对的html文件,我们可以直接双击打开,观看注册表的变化。
在这里插入图片描述
我们通过此方式可以快速的定位程序安装并启动后,注册表的变化。实际上不仅仅是常规的安全评估,在反病毒的过程中我们也可以通过此方式来观测注册表键值的变化,来获得病毒落地后的一些行为。

下图为注册表新添加的防火墙规则,我们并没有发现此程序有将敏感信息存放在注册表的行为,但是却又新增防火墙规则的行为;通常情况下,病毒落地后都会通过添加防火墙出栈规则以及入栈规则,来达到权限维持和隐蔽行为的目的,所以通过此种方式我们可以在获取病毒样本的情况下对病毒的行为有一个更深层次的了解。
在这里插入图片描述
风险分析:远程攻击者可以利用此缺陷,通过查看注册表获取用户的敏感信息。

修复建议:建议不要将用户敏感信息存放在注册表里。

1.12 内存安全

问题描述:部分应用登录后,可能会将登录信息存放在内存里,导致用户敏感信息泄露。

测试过程:这里推荐使用 Process Hacker工具

首先我们输入用户名密码,而后点击登录,这里建议大家登录成功后去查看内存信息
在这里插入图片描述
我们打开 Process Hacker工具,而后在页面中找到我们的主程序进程
在这里插入图片描述
双击我们的主程序进程后,点击 " Memory"
在这里插入图片描述
接着点击左上角的 options -> strings
在这里插入图片描述
我们默认就可以,直接点击确认
在这里插入图片描述
此时进入到内存页面,我们可以进行关键字筛选,比如说输入 " username" " password"关键字进行筛选,看看有没有学泄露数据库查询语句 Filter -> Contains
在这里插入图片描述
在这里插入图片描述
我们可以看到,内存里并没有泄露什么有用的东西,而泄露内存的样子笔者并没有遇到过,所以在这里套一张网上的截图给大家。
在这里插入图片描述
风险分析:远程攻击者可以利用此缺陷,通过查看内存信息获取用户的敏感信息。

修复建议:建议不要将用户敏感信息存放在内存里。

1.13 本地调试安全

问题描述:部分应用开启本地调试功能后,登录后的用户名和密码会被保存在调试日志内,这样就可能被有心人利用,从而获取用户的登录信息。

测试过程:在运行主程序的目录下打开cmd命令行 或者powershell
在这里插入图片描述
而后在与小葵相同的目录下会生成log.log文件,并且程序会运行。我们输入任意内容,而后关闭程序,查看日志。
在这里插入图片描述
打开日志,发现并没有记录任何内容。
在这里插入图片描述
接下来我们看一下网上有内容的样子,里面泄露了用户名密码等敏感信息。
在这里插入图片描述
风险分析:远程攻击者可以利用此缺陷,通过查看调试信息获取用户的敏感信息。

修复建议:建议检测程序运行状态,不允许开启调试模式,或对安装目录下的文件进行Hash校验。


二、服务端测试

2.1 HTTP抓包方式

实际上服务端测试方式与常规的Web应用测试功能点是类似的,区别在于我们如何拦截程序的数据包

通常情况下,客户端大致分为HTTP协议与TCP/私有协议通信:

其中HTTP协议测试的方法并不难,我推荐大家使用Proxifier工具对此应用进行全局代理,而后在将burpsuite挂上,这样就可以拦截数据了,下面简单介绍一下如何使用,笔者遇到的客户端走的都是TCP协议或者是私有协议,所以没遇到过HTTP协议的,我就在这意思一下,给大家提供一下思路。

点击 " 配置文件" -> " 代理服务器" ,配置代理,设置burpsuite的即可
在这里插入图片描述
而后选择 " 配置文件" -> " 代理规则",我们可以在代理程序那里不填,默认任意,或者选择固定的程序;这里建议大家添加要测试的程序,这样可以减少干扰
在这里插入图片描述
按照如下填写后,只要客户端走的是HTTP协议,那么我们就可以拦截到数据包,但是大多情况都是走的TCP协议或者是私有协议。
在这里插入图片描述


2.2 TCP协议抓包方式

这里我们可以使用WireShark,测试遇到TCP协议的时候,因为流量大多数都是加密的,部分是明文的,以下为某次测试的modbus协议的数据包
在这里插入图片描述
或者使用 EchoMirage 工具进行进行拦截,process->inject 而后选择对应的进程即可。
在这里插入图片描述
在这里插入图片描述
如下图,只要产生通信我们就可以拦截到TCP的数据包甚至是数据库流量,(声明一下:这个当然不是微信的流量)
在这里插入图片描述


2.3 常见漏洞列表

TCP流量的漏洞少之又少,但如果能直接拦截到数据库的流量,那么写个脚本就可以执行SQL语句了,比如说添加用户、修改密码,但是前提你要知道数据库对应的表名字段之类的信息。
在这里插入图片描述
那么我们如果遇到TCP传输数据或者不能抓包的,能测什么漏洞呢?

  • SQL注入
  • 整数溢出
  • XSS
  • 用户名枚举
  • 弱口令
  • 空口令

总结

以上就是对于客户端(C/S架构)应用程序测试的漏洞点位以及测试工具的介绍,在进行C/S客户端进行测试的时候可以参考本博客(C/S架构安全测试)专栏所需测试点进行逐步漏洞排查,后续也会持续更新更多关于安全测试的干货文章,感谢您能读到现在,也欢迎各位大佬批评指正!!!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李火火安全阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值