【移动安全】使用Needle进行ios安全测试
2022-8-9 00:5:48 Author: 白帽子(查看原文) 阅读量:20 收藏

声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

一、Needle介绍

测试iOS应用有时需要很多工具,每种工具都是针对特定需求而开发的,并且都具有完全不同的操作模式和语法。
Needle是一款iOS安全测试框架。它是一个开源模块化框架,旨在简化对iOS应用进行安全评估的整个过程。鉴于其模块化,Needle易于扩展,并且可以以python脚本的形式添加新模块。
Needle覆盖的测试领域包括:数据存储进程通信网络通信静态代码分析hook和二进制保护
相关链接
needle文档说明:https://github.com/FSecureLABS/needle

二、Needle安装

本次使用iphone5s系统为IOS10.3的越狱机器进行安装,并装有以下依赖项:

1、Cydia
2、OpenSSH
3、Apt 0.7 Strict
4、Needle Agent — server
5、Frida #可选依赖项,某些Needle模块会使用
6、Clutch2 #可选依赖项,解密二进制应用程序的工具

安装Needle Agent

新版的Needle引入了一个由Objective-C编写的本机代理。Needle Agent是与Needle通信的iOS应用程序。
1、将以下存储库添加到Cydia源:
http://mobiletools.mwrinfosecurity.com/cydia/
https://build.frida.re

2、安装Needle AgentFridaClutch2

3、Needle Agent启动界面

PC端设置

Needle官方给出了macOSKali Linux的安装方法。当然也可以在Ubuntu上运行该工具。下面为macOS系统的安装过程。
1、首先获取Needle

git clone https://github.com/mwrlabs/needle.git

2、安装依赖项

brew install python
brew install libxml2
xcode-select --install

# 安装python packages
sudo -H pip install --upgrade --user readline
sudo -H pip install --upgrade --user paramiko
sudo -H pip install --upgrade --user sshtunnel
sudo -H pip install --upgrade --user frida
sudo -H pip install --upgrade --user biplist

# sshpass
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb

# mitmproxy
wget https://github.com/mitmproxy/mitmproxy/releases/download/v0.17.1/mitmproxy-0.17.1-osx.tar.gz
tar -xvzf mitmproxy-0.17.1-osx.tar.gz
sudo cp mitmproxy-0.17.1-osx/mitm* /usr/local/bin/

三、Needle使用

启动Needle,可看到命令行界面如下:
主要选项说明:

AGENT_PORT:设备上安装的NeedleAgent正在侦听的端口
APP:需要分析的app包名。如果不知道,可以先留空。
DEBUG:如果设置为True,将启用调试日志记录
HIDE_SYSTEM_APPS:如果设置为True,则仅显示第三方应用程序
USERNAME:测试设备的SSH用户名,默认为root
PASSWORD:测试设备的SSH密码,默认为alpine
AGENT_PORT:测试设备上安装的Needle Agent正在侦听的端口
SAVE_HISTORY:如果设置为True,则命令历史记录将在会话之间保留
VERBOSE:如果设置为True,将启用详细日志记录

Needle模块用法

使用show modules命令可列出框架中可用的模块。

search 用于搜索和查询匹配的模块
use 使用模块 
info 用于显示特定模块的详细信息
set 进行编辑
run 启动
show source 检查所选模块的实际源代码

以下为Needle常用模块的介绍:

use binary/info/checksums  #检测校验APP:MD5,SHA1,SHA224,SHA256,SHA384,SHA512
use binary/info/compilation_checks #检测受保护的PIE,ARC,二进制文件
use binary/info/metadata #显示应用程序数据(UUID,app名称、版本,捆绑软件名称、数据、目录、签名、体系结构等
use binary/info/provisioning_profile #检测应用程序的配置文件,然后解析嵌入式证书
use binary/installation/install #自动上传并在设备上安装IPA
use binary/info/pull_ipa #从设备解密并提取应用程序的IPA
use binary/reversing/class_dump_frida_enum-all-methods #枚举应用程序中所有类的方法
use binary/reversing/class_dump_frida_enum-classes #枚举可用的类
use binary/reversing/class_dump_frida_find-class-enum-methods #查找指定的目标类并枚举其方法
use binary/reversing/shared_libraries #列出应用程序使用的共享库
use binary/reversing/strings #在砸壳后的应用程序资源中找到字符串
use comms/certs/delete_ca #删除设备上安装的证书
use comms/certs/export_ca #导出设备上安装的证书
use comms/certs/install_ca_burp #在设备上安装Burp的CA证书
use comms/certs/install_ca_mitm #在设备上安装MitmProxy的CA证书
use comms/proxy/pinning_bypass_frida #Frida绕过证书绑定
use comms/proxy/proxy_regular #拦截设备产生的流量
use device/dependency_installer #检测安装依赖项
use dynamic/detection/jailbreak_detection#检测该APP能否在越狱设备运行
use dynamic/detection/script_jailbreak-detection-bypass #Frida越狱检测绕过
use dynamic/monitor/pasteboar #监测系统粘贴板并转储内容
use dynamic/watch/syslog #实时查看系统日志
use hooking/frida/frida_launcher #运行Frida脚本
use hooking/frida/frida_shell #生成附加到目标app的Frida进程
use hooking/frida/frida_trace #使用frida-trace跟踪指定的函数
use hooking/frida/script_hook-all-methods-of-class #hook指定类的所有方法
use hooking/frida/script_hook-method-of-class #hook特定类的特定方法
use hooking/theos/list_tweaks #列出使用Needle安装的所有Tweaks
use static/code_checks #对app源代码进行静态分析
use storage/data/files_plist #列出应用程序文件夹中包含的plist文件及其数据保护等级
use storage/data/files_sq #列出应用程序文件夹中包含的SQL文件

检测APP基本信息

如下使用metadata模块检测APP基本信息

use binary/info/metadata
run

返回结果如下:

[needle] > use binary/info/metadata
[needle][metadata] > run
[*] Checking connection with device...
[V] Connection not present, creating a new instance
[V] [AGENT] Connecting to agent (192.168.0.198:4444)...
[+] [AGENT] Successfully connected to agent (192.168.0.198:4444)...
[V] [SSH] Connecting (192.168.0.198:22)...
[+] [SSH] Connected (192.168.0.198:22)
[*] Target app not selected. Launching wizard...
[+] Apps found:
0 - com.ppjb.carrier102.gr-b2a4274fd7effad67acd1f5b146e8691903c0cac-1500288363.35
1 - com.highaltitudehacks.dvia
2 - com.atebits.Tweetie2
3 - vx710.vx710
4 - qaqqqq222.yueyu
5 - rn.notes.best
[>][QUESTION] Please select a number: 1
[+] Target app: com.highaltitudehacks.dvia
[*] Retrieving app's metadata...
[*] Pulling: /private/var/containers/Bundle/Application/9CE2809B-AD4F-4FBF-AB18-198062E39903/DamnVulnerableIOSApp.app/Info.plist -> /root/.needle/tmp/plist
[+] Name : DVIA
[+] Binary Name : DamnVulnerableIOSApp
[+] Bundle Executable : DamnVulnerableIOSApp
[+] Bundle ID : com.highaltitudehacks.dvia
[+] Bundle Type : User
[+] UUID : 9CE2809B-AD4F-4FBF-AB18-198062E39903
[+] Team ID :
[+] Signer Identity : Apple iPhone OS Application Signing
[+] Bundle Directory : /private/var/containers/Bundle/Application/9CE2809B-AD4F-4FBF-AB18-198062E39903
[+] Binary Directory : /private/var/containers/Bundle/Application/9CE2809B-AD4F-4FBF-AB18-198062E39903/DamnVulnerableIOSApp.app
[+] Binary Path : /private/var/containers/Bundle/Application/9CE2809B-AD4F-4FBF-AB18-198062E39903/DamnVulnerableIOSApp.app/DamnVulnerableIOSApp
[+] Data Directory : /private/var/mobile/Containers/Data/Application/09ACB084-A5A6-45F2-B421-5AF4BE3A1E0B
[+] Bundle Package Type : APPL
[+] App Version : 2.0
[+] Architectures : arm64
[+] Platform Version : 9.2
[+] SDK Version : 9.2
[+] Minimum OS : 7.0
[+] URL Handlers
[+] ['dvia']
[+] Apple Transport Security Settings
[!] NSAllowsArbitraryLoads : 1
[+] Entitlements
[+] application-identifier : com.highaltitudehacks.dvia
[*] No Application Extensions found

查看返回的关键信息:

data directory — 包含APP数据的目录,
binary directory — 包含APP文件的目录,
URL Handlers — 应用程序使用的URL方案,
Apple Transport Security Settings — 设置强制使用HTTPS,
Entitlements — APP的权限.

Class Dump

APP包自身也暴露了一些信息。可以轻松了解app的结构。
运行binary/reversing/class_dump_frida_enum-all-methods模块并使用Frida可读取APP中的类和方法名。

[needle] > exec_command /usr/sbin/frida-server -D
[*] Checking connection with device...
[+] Already connected to: 192.168.0.198
[*] Executing: /usr/sbin/frida-server -D
[needle] > use binary/reversing/class_dump_frida_enum-all-methods
[needle][class_dump_frida_enum-all-methods] > run
[*] Checking connection with device...
[+] Already connected to: 192.168.0.198
[+] Target app: com.swaroop.iGoat
[*] Setting up local port forwarding to enable communications with the Frida server...
[*] Launching the app...
[V] Retrieving the PID...
[V] PID found: 1069
[*] Attaching to process: 1068
[*] Parsing payload
[?] Script terminated abruptly
[?] timeout was reached
[+] "Class: FigIrisAutoTrimmerMotionSampleExport"
[+] {
"class": "FigIrisAutoTrimmerMotionSampleExport",
"method": "+ initialize"
}
[+] "Class: _CNZombie_"
[+] {
"class": "_CNZombie_",
"method": "+ initialize"
}

越狱检测

使用Needle这款工具内的script_jailbreak-detection-bypass模块来尝试绕过越狱检测:

dynamic/detection/script_jailbreak-detection-bypass

发现并不能绕过越狱检测,找到script_jailbreak-detection-bypass.py该文件,发现虽然有hookstat这个函数,但是返回值作者写的有问题,借鉴了其他工具的写法,我们修改needlescript_jailbreak-detection-bypass的代码如下:
可以成功绕过越狱检测
更多模块的用法可以参考Needlewiki
地址:https://github.com/FSecureLABS/needle/wiki/Modules-Usage

四、问题归类:

1、安装问题

Needlecydia仓库不在维护,可以从Github上下载最新的releaseNeedleAgent.deb,将该文件拷贝到iOS设备中。
地址:https://github.com/FSecureLABS/needle-agent/releases
ssh链接iOS设备,找到deb文件传输目录(/User/Media)
执行如下命令进行安装:

dpkg -i NeedleAgent.deb

2、模块报错

当使用特定的模块时,有时会报错如下:

[needle][pull_ipa] > run
[] Checking connection with device...
[+] Already connected to: 127.0.0.1
[+] Target app: com.chnologies.ani
[] Decrypting the binary...
[?] The app might be already decrypted. Trying to retrieve the IPA...
[!] KeyError: 'IPAINSTALLER'.

根据作者的回复,发现缺少依赖,可以使用该模块进行安装依赖:

use device/dependency_installer

3、其它

Needle框架的两个设置选项,官方没有提供修改的方式,只能本地重新编译仓库源码。
一、设置选择进程的时候隐藏iOS自己的APP
二、默认设置APP启动方式是spawn(否则每次都要重新设置),

grep命令:
grep -rn "HIDE_SYSTEM_APPS" needle
grep -rn "spawn" needle

五、总结

Needle框架目前没人维护,最后一次更新是在2018年,bug过多不建议新手入坑。
Needle的作者在2018年离开了F-Secure公司,并表示不会再回坑了。。。

六、参考资料

https://labs.f-secure.com/archive/needle-how-to/
https://github.com/FSecureLABS/needle

E

N

D

guān

zhù

men

Tide安全团队正式成立于2019年1月是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

对安全感兴趣的小伙伴可以关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246286&idx=2&sn=64c4cc98bb23bf49ff9f68deaed62de2&chksm=82ea5727b59dde312c5843db77130f4b47449ad672639e79f8380e9cd7dc53e3c44334337200#rd
如有侵权请联系:admin#unsafe.sh