「技术贴」从攻防角度讲渗透测试

| Kevin Mitnick 说没有攻不破的系统,应用尤其这样。而渗透测试则是通过去模拟黑客使用的漏洞发现技术和攻击手段,从一个攻击者可能存在的位置来进行分析,并且从这个位置有条件的主动利用安全漏洞,找到系统最脆弱的环节。那么渗透测试方法有哪些,具体分析策略如何?下面由技术专家张中文为大家进行精彩的技术解析。 |

渗透是一门比较独立和特定领域的一门技术,可清晰地分为静态分析和动态分析。

静态分析方法

推荐分析工具:JEB

静态分析的常见类别:

  • 获取敏感数据

  • 可利用的代码执行

  • 网络/本地Socket

  • 路径/URI/URL校验

  • 数据文件的权限配置

  • SQL注入

  • 密码秘钥

  • 暗码/后门

  • 证书校验/中间人攻击

  • Webview 专项

下面将针对每一项进行详细分析:

1.获取敏感数据

敏感数据包括:短信,联系人,位置,秘钥/口令,IMEI,浏览器历史记录,粘贴板数据,安装的APP列表等。不同场景下可能包含其他的敏感数据类型。

敏感数据–API/Keyword

1537520312295040105.png

分析思路:

追踪敏感数据流向:位于Sdcard 的数据;写到 logcat 里的数据;数据被发送至外部的通道,如短信、网络、WIFI、WIFI(3G&4G)蓝牙、NFC等。

2、可利用的代码执行

随着应用的体量越来越大,插件化成为一个趋势。插件化带来很多优点,如易于升级,易于扩展等功能,但同时也带来了攻击点。除了插件,还有传统的 Java exec 的代码执行方式。

可利用的代码执行API/Keyword

1537520336215083141.png

分析思路:

对于 dex 插件

  • 查看插件的来源是否可控

查看插件的来源是否来自 SDCard,如果是直接替换;查看是否来自网络下载,可否被中间人替换。

  • 查看是否进行了完整性校验

是否校验了 dex 插件的 hash value。

  • 如果来源可控且没有完整性校验,则可以用于代码执行。

对于 exec

查看参数来源是否可控;

是否来自 intent,intent 是否可控;

是否来自 localsocket,localsocket 是否有访问控制;

是否来自网络流量(C&C),流量是否可以截获并篡改。

3.网络/本地Socket

网络Socket/HTTP/HTTPS 是手机与外界数据交换的重要通道,手机中大量的数据都通过网络流量传输。

本地Socket类似网络Socket,不同的是本地Socket是本地两个进程进行数据交换,不涉及到网络流量。

网络/本地SocketAPI/Keyword

1537520386216073202.png

分析思路

  • 网络Socket

分析发送的数据是否是敏感数据;

查看是否发送到指定的IP/端口;

是否有 Command and Control 的行为;

判断是否是后门。

  • 本地Socket

是否有访问控制,如果没有访问控制或者访问控制可以被绕过则继续分析;

如果是client,查看server是否存在,是否可以被仿冒;

如果是server,查看server提供的功能,是否有利用价值。

4.路径/URI/URL校验

应用/SDK大量使用路径/Url作为参数,如果不校验路径的合法性,容易导致路径遍历攻击。Android 平台最典型的路径遍历漏洞是ZipEntry,URL路径遍历问题与传统的web相同。

路径/URI/URL校验**–**API/Keyword

1537520410209071089.png

分析思路

路径遍历问题较为普遍且涉及到众多API,若仅仅用 API 作为关键字搜索精确度会降低。比较推荐的做法是先分析是否有利用价值,如加载一个配置文件,写一些敏感数据等;再进一步分析路径参数是否可以控制。因此,通常路径遍历漏洞需结合其他漏洞才能发挥比较大的价值。

防御方法:

通过../过滤后判断合法性

获取绝对路径后判断路径合法性

5.数据文件的权限配置

数据文件有很多类型,最典型的是SharedPreference.xml和Provider.db,以及

存在 sdcard上的配置文件等。

分析思路:

如果测试手机有Root权限,直接 ls -l 查看文件权限,否则查看源代码。

6.SQL注入

Android使用 SQLite 数据库,也会遭受 SQL 注入攻击。如果暴露的Provider组件在query()中使用拼接字符串组成SQL语句的形式去查询数据库,容易发生SQL注入攻击。

SQL注入API/Keyword

1537520456886022767.png

SQL注入示例

1537520480153041673.png

用 “_id’”探测,如果应用出错,则存在注入;如果修改projection的内容为

"* from sqlite_master where type='table';--",SQL语句就会变成select "* from sqlite_master where type='table';--“,“;--”之后的SQL语句就作为注释被忽略掉了。

Drozer 工具可以帮助检测和利用SQL注入漏洞。

7.密码秘钥

应用的秘钥管理一直没有完美的解决方案,有安全意识的开发者会把重要的秘钥数据存储在keystore里,但也有相当多开发者将秘钥硬编码写在应用里,反编译后就可以轻易获取到。

密码秘钥– API/Keyword

1537521054987054210.png

案例分享:CVE-2017-2704

1537521065433698166.png

1537521072747050517.png

密钥硬编码在代码中,逆向分析可以破解出明文。

8.暗码/后门

暗码通常是在拨号盘界面输入*##secret_code##,就会得到很多信息。如常见的进入工程菜单的暗码,在拨号盘输入##2846579##*就可以进入华为手机的工程菜单,暗码的这种特性被一些人用作后门。检测暗码可以在 AndroidManifest.xml 中搜索如下action,找到对应的处理代码,查询是否存在后门行为。

暗码/后门– API/Keyword

1537521092228002951.png

代码示例:

使用暗码功能要在AndroidManifest.xml里声明,在组件接收到暗码消息后进行相应的处理。

1537521112710049948.png

1537521120995026974.png

9.Webview 专项

Webview 作为广泛使用的一个控件,其地位足以和四大组件相媲美。Webview 让应用变得更加丰富多彩,也提供了不用来回切换界面的良好用户体验。但是便利总是需要付出一些代价,使用Webview付出的代价是应用的安全性变差。

Webview 专项–API/Keyword

1537521149791047744.png

Webview 攻击面分析

  • 远程代码执行

CVE-2012-6636 addJavascriptInterface 利用该漏洞执行任意Java对象的方法

CVE-2013-4710 openFile 同源绕过

  • File 域控制不严

setAllowFileAccessFromFileURLs

setAllowUniversalAccessFromFileURLs

setAllowFileAccess + setJavaScriptEnabled(true)

  • 信息泄露

密码明文存储 setSavePassword (true)

地理位置泄露 setGeolocationEnabled

  • Url 外部可控

loadUrl (String url)

loadUrl (String url, Map<String, String> additionalHttpHeaders)

loadData(String data, String mimeType, String encoding)

loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)

动态分析方法

动态分析的常用方法:

  • 动态调试

  • 运行时Hook

  • 实时流量包抓取/分析

  • 搭建简易HTTP服务器挖掘RCE问题

通过静态分析获取了风险点后再进行动态分析,才能确定系统是否真的有问题。

1、动态调试:

Android Studio下载smalidea(bitbucket.org/JesusFreke/… Studio,点击 File -- Settings – Plugins,即可安装成功。

2.运行时Hook

Hook框架 – Frida

Android有很多Hook框架,比如大名鼎鼎的Xposed,还有Cydia,Frida,ADBI, Dexposed,DroidPlugin,Legend等。这些Hook框架各有千秋,可以按照自己的喜好选择使用。现在给大家推荐使用的 Hook 框架是 Frida。

• 安装指导:

www.frida.re/docs/functi…

• 资源下载:

github.com/frida/frida…

使用示例 – Hook 应用

Part I: java script

1537521308097047629.png

Part II: python script

加载Java script 脚本

1537521325762037404.png

在终端输入以下命令

1537521342064036882.png

3.实时流量包抓取/分析

流量分析工具 – Burp

常见的流量分析工具有 burp 和 fiddler,二者差别不大,可自由选择。

Burp 的社区版是免费的,并且满足绝大部分渗透要求。

下载链接**:**

portswigger.net/burp/commun…

使用示例:

HTTPS有证书校验,如果想抓到HTTPS的包,就需要妥善处理证书问题。一般来讲HTTPS的抓包与证书的关系大致有三类:

1 不配置证书可以抓获的,这类是客户端忽略证书错误。

2 需要导入到信任证书才能抓获的,这类是客户端信任所有证书域。

3 需要hook才能抓获的,这类是内置服务端证书在应用内。

示例:

针对第二种情形进行处理– 配置证书

PC端配置要点

1、打开Burp,配置Burp监听本地所有的 8080 端口。

1537521365587092158.png

2、打开浏览器,访问7localhost:8080,点击右上角 CA Certificate,下载Burp证书

1537521373064046020.png

3、把下载的 Burp 证书导入到PC上受信任的根证书。

4、把上一步导入的证书(PortSwiggerCA) 导出,并安装到手机上。安装时要输入手机的解锁码。

1537521393993000836.png

手机端配置方法

1、 配置代理

1537521407917092041.png

如图主机名 127.0.0.1,端口 8080 跟 burp 保持一致。

2、把手机上的端口转发到PC端

1537521429932041341.png

adb reverse tcp:8080 tcp:8080,Burp已经可以抓取手机上HTTPS流量包。

使用示例 – 中间人修改JS代码窃取信息

背景:静态分析发现Webview对外暴露了Java对象。

目的:调用对象接口,获取敏感信息。

方法:用中间人的方法修改返回包的js脚本

1、打开 Intercept,拦截所有流量

1537521457436027580.png

2、抓到请求包,拦截响应包

1537521474605053602.png

3、拦截到响应包,修改响应包内容,插入窃取信息的脚本。

1537521521033085745.png

4、用户信息被窃取

1537521538236043092.png

4.搭建简易HTTP服务器挖掘RCE问题

方法一:

最简易的HTTP服务器搭建方法只需要输入一条命令

python -m SimpleHTTPServer %PORT%

方法二:

安装XAMPP,配置如下 3 个信息

Listen 8080

ServerName localhost:8080

DocumentRoot "E:ulnerabilitiesclone"

1537521561243043329.png

如果启动成功后Apache背景会变成绿色。

简易HTTP服务器在渗透测试中的应用

背景:应用对外暴露了 BROWSABLE 的 Activity,且Activity对外暴露了Java对象,此对象提供了敏感功能。

目的:利用此Activity启动任意应用。

方法:搭建HTTP服务器,在页面中嵌入攻击脚本

环境配置步骤

  • PC端用 XAMPP 搭建服务器,端口配置成 8080

  • 转发端口,把手机上的8080端口映射成PC上的8080端口 adb reverse tcp:8080 tcp:8080

  • 手机端不需要配置代理

  • 配置成功后,在手机浏览器上访问 127.0.0.1:8080 能够看到目录下的文件 ( E:ulnerabilitiesclone )

1537521581985005875.png

用静态分析的方法分析出攻击路径,构造攻击脚本。

关注安卓绿色联盟公众号,回复关键字“走进360”,获取完整PPT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值