当前很多APP对数据包做了强加密,比如利用DES、AES加密等等,尤其是金融类APP,那么当我们利用burpsuite这类抓包工具进行测试的时候会发现,抓取到的数据包全是密文,就没办法进行改包以测试安全问题了。面对这种场景,又该如何进行安全测试?
Frida 工具
这里介绍一个hook工具frida,并以实际案例进行测试分析。首先frida是一个有效的插桩工具,插桩是指将额外的代码注入程序中以收集运行时的信息,可分为两种:
静态二进制插桩[Static Binary Instrumentation(SBI)]:在程序执行前插入额外的代码和数据,生成一个永久改变的可执行文件。
动态二进制插桩[Dynamic Binary Instrumentation(DBI)]:在程序运行时实时地插入额外代码和数据,对可执行文件没有任何永久改变。
Frida就是一个动态二进制插桩工具,其在使用时需要在Android平台上需要配置一个frida-server,二进制动态插桩技术的原理是使用了 ptrace 附加到目标进程上,访问进程的内存、Hook和跟踪以及拦截函数等等。
安装与使用
环境:win10 python3.7
1、下载frida模块
https://files.pythonhosted.org/packages/c3/01/c5ff8c86401066e8d4f747517d7037872879558ca175f3c16850ee0be12a/frida-12.8.20-py3.7-win-amd64.egg
2、进入python3.7目录,利用easy_install离线安装上述下载的模块
3、pip3.7安装frida-tools
4、可以执行安装完目录下的frida-ps看到系统进程验证安装成功
5、下载手机可用server端,跟客户端版本一致
https://github.com/frida/frida/releases
注意:模拟器中下载版本x86版本,不然可能报错:unable to inject library into process without libc
6、adb shell连接手机,将解压缩server端文件push到手机
7、添加手机中server端执行权限,然后执行
8、adb 执行端口转发
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
9、进入宿主机frida安装目录,frida-ps -U 看到手机进程验证安装成功
10、frida –U –f “package” 进入指定应用,对应用调试,需要开在手机开启应用
实测案例
先说明一下,frida针对加密数据包的处理是通过hook加密函数,在输入数据进入到加密函数前,将原始数据转发出来,然后再进入加密函数与服务端进行通信,这样我们就可以对原始数据包更改,改后的数据包继续走加密流程并与服务端通信。Frida使用的是python框架,具体hook流程由JavaScript实现,所以需要写一些代码。
整个流程如下:hook目标函数,在原始数据进入到加密函数时,利用js send方法将原始数据发到python框架,并由python发起http请求,这时由burpsuite代理截取原始数据包,并能进行更改,这里中转服务器的作用是原样返回请求的内容,即在burpsuite中更改后的内容最终从中转服务器回到burp,回到python,回到js,回到加密函数,正常进行加密后提交到服务端。
1、利用burpsuite抓取APP数据包,发现数据包加密
2、写hook代码,python模板框架
JavaScript hook具体函数,这里是Java层hook,固定句式,实现加密函数方法,把函数接受到的原始数据通过send方法转发出来
3、运行代码进行hook
4、操作APP,可以看到burp拦截到转发出来的原始数据:testvalue
5、在转发出来的中转服务器对数据包进行更改,字符串后面添加12345
6、burpsuite放行数据包,更改后的数据进入加密函数然后向服务端发送更改后的加密请求
利用秘钥解密验证,发现确实是更改后的密文
小结
这样便实现了一个简单的Java层hook,可以对加密数据包进行安全测试,当然也只是最基本的。还有对native层的hook,因为有的加密是在底层做的,就需要具备一定的逆向功底。
当然,仅仅这样,我们也发现存在一些问题,我们需要有一定的基础:1、定位具体函数;2、hook代码编写能力;3、加壳的话得先脱壳。
那么有没有更直接的方式,当然有,下节介绍另一种针对加密数据包的处理方式。