声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
测试iOS
应用有时需要很多工具,每种工具都是针对特定需求而开发的,并且都具有完全不同的操作模式和语法。Needle
是一款iOS
安全测试框架。它是一个开源模块化框架,旨在简化对iOS
应用进行安全评估的整个过程。鉴于其模块化,Needle
易于扩展,并且可以以python
脚本的形式添加新模块。Needle
覆盖的测试领域包括:数据存储
,进程通信
,网络通信
,静态代码分析
,hook和二进制保护
。
相关链接needle
文档说明:https://github.com/FSecureLABS/needle
本次使用iphone5s
系统为IOS10.3
的越狱机器进行安装,并装有以下依赖项:
1、Cydia
2、OpenSSH
3、Apt 0.7 Strict
4、Needle Agent — server
5、Frida #可选依赖项,某些Needle模块会使用
6、Clutch2 #可选依赖项,解密二进制应用程序的工具
新版的Needle
引入了一个由Objective-C
编写的本机代理。Needle Agent
是与Needle
通信的iOS
应用程序。
1、将以下存储库添加到Cydia
源:
http://mobiletools.mwrinfosecurity.com/cydia/
https://build.frida.re
2、安装Needle Agent
、Frida
、Clutch2
3、Needle Agent
启动界面
Needle
官方给出了macOS
和Kali 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
,可看到命令行界面如下:
主要选项说明:
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,将启用详细日志记录
使用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文件
如下使用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的权限.
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
该文件,发现虽然有hook
到stat
这个函数,但是返回值作者写的有问题,借鉴了其他工具的写法,我们修改needle
,script_jailbreak-detection-bypass
的代码如下:
可以成功绕过越狱检测
更多模块的用法可以参考Needle
的wiki
地址:https://github.com/FSecureLABS/needle/wiki/Modules-Usage
Needle
的cydia
仓库不在维护,可以从Github
上下载最新的release
包NeedleAgent.deb
,将该文件拷贝到iOS
设备中。
地址:https://github.com/FSecureLABS/needle-agent/releases
用ssh
链接iOS
设备,找到deb
文件传输目录(/User/Media)
执行如下命令进行安装:
dpkg -i NeedleAgent.deb
当使用特定的模块时,有时会报错如下:
[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
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ù
注
wǒ
我
men
们
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
对安全感兴趣的小伙伴可以关注团队官网: http://www.TideSec.com 或长按二维码关注公众号: