分类目录归档:sim

mitmproxy捕获手机ssl流量

一. 安装mitmproxy
1. 安装python3-venv

apt install python3-venv

2. 获取源代码

git clone https://github.com/mitmproxy/mitmproxy.git
cd mitmproxy
./dev.sh 

3. 激活python3虚拟环境,并执行

. venv/bin/activate  
mitmdump 

二. 上传证书到 手机
1. 运行mitmproxy后,会自动在 ~/.mitmproxy 目录下生成证书:
mitmproxy-ca.pem  证书和私钥
mitmproxy-ca-cert.pem  PEM格式的证书
mitmproxy-ca-cert.cer  跟PEM格式的证书完全一样,只是扩展名不同

2.制作一个Android兼容的证书
2.1 获得mitmproxy证书的hash值

openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem | head -1

会显示 hash值为 c8750f0d

注意,要用 -subject_hash_old 选项,而不是 -subject_hash 这样才会得到 openssl 0.9 兼容的hash值

2.2 android证书文件名 以.0结尾

cat mitmproxy-ca-cert.pem > c8750f0d.0
openssl x509 -inform PEM -text -in mitmproxy-ca-cert.pem -noout >>  c8750f0d.0

一步到位

hashed_name=`openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer | head -1` && cp mitmproxy-ca-cert.cer $hashed_name.0

3. 将证书放入 /system/etc/security/cacerts/

adb push c8750f0d.0 /data/local/tmp/
adb shell
su 
# mount -o remount,rw /system
# setenforce 0
#  mv /data/local/tmp/c8750f0d.0 /system/etc/security/cacerts/ 
# chmod 644 /system/etc/security/cacerts/c8750f0d.0
# chown root:root /system/etc/security/cacerts/c8750f0d.0
#  setenforce 1
# mount -o remount,ro /system

如果是用Magisk来root的,上述命令中有些应该适当修改

mount -o remount,rw /sbin/.magisk/mirror/system_root

三.让手机通过usb上网
1. 手机开启无线数据,或者开启wifi

2. 手机开启usb共享,PC上启用usb网卡

3. PC上启用有线连接

ip addr add 192.168.1.158/24 dev eno1
ip route add default via 192.168.1.1 dev eno1
ip route  del default via 192.168.42.129

4. 在手机上给usb网卡重新分配ip

ip addr del 192.168.42.129/24 dev rndis0 
ip addr add 10.42.0.2/24 dev rndis0

5. 手机上 修改路由表 (rmnet_data3根据实际情况修改)

ip route add 10.42.0.0/24 dev rndis0 table rmnet_data3
ip route delete default table rmnet_data3
ip route add default via 10.42.0.1 table rmnet_data3

ip -6 route  del default  table rmnet_data3

6. PC上开启转发

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -n -L

7. PC上给usb网卡重新分配地址

ip addr del 192.168.42.140/24 dev usb0
ip addr add 10.42.0.1/24 dev usb0

8. 在手机上检测

ping 10.42.0.1

9. 手机上设置私人DNS

四. PC上配置mitmproxy环境
1. 将80和443端口的流量都重定向给 mitmproxy

iptables -t nat -A PREROUTING  -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING  -p tcp --dport 443 -j REDIRECT --to-port 8080

2.透明模式启动mitmproxy

mitmproxy --mode transparent --showhost

五. 用frida解除 ssl pinning

frida -U -f com.sinovatech.unicom.ui -l ../ssl.js --no-pause

如何检测Magisk Hide

Magisk是自2018年后的唯一root方案。与其配合的Magisk Manager用来管理magisk模块,管理su请求.
Magisk Manager还可以管理Magisk Hide.
Magisk Hide用来隐藏Magisk, 不被应用程序检测到。
某些应用通过检测是否安装了Magisk Manager来判断设备是否root
Magisk Manager的应对措施是,改变自己的包名为随机的字符串。
但是,某些执着的应用,通过遍历系统所有的包,解析出每个包的签名,对比签名,判断是否为Magisk Manager.

应用使用Android API(startService, bindService)来启动服务时, 依赖于在AndroidManifest里的配置,服务跟app运行于同一个进程,或者新开启进程。如果使用不同的进程,父进程会孵化一个新进程,进程名会加一个后缀(在Manifest里定义的后缀名).
Magisk Hide很多时候不能为新开启的服务进程,隐藏Magisk mount path.
很有游戏,银行应用,就是通过这种方式(派生出远程服务进程)来检测magisk的。
Magisk Hide也在更新,新的Magisk Hide也能会远程服务,来隐藏su和magisk path

隔离的进程

/proc/pid/mounts, /mountinfo, /mountstats

移远锁频锁网AT命令

AT+QNWINFO

回应

+QNWINFO: “FDD LTE”,”46001″,”LTE BAND 3″,1650
分别是:
接入技术 FDD LTE
运营商 MCC_MNC 46001
频段: LTE Band 3
channel id: 1650
——————-
AT+QCFG=”servicedomain”,1,1
设置,只连接到PS域名,立即生效
—————-

AT+QCFG="band", bandval, ltebandval, tdsbandval, effect
bandval = 0000 0000  表示不改变
bandval = 0000 FFFF 表示任何频率都可以
0000 0001 GSM900
0000 0002  GSM1800
0000 0004  GSM850
0000 0008  GSM1900
0000 0010  WCDMA2100
0000 0020  WCDMA1900
0000 0040  WCDMA850

ltebandval
1 = BC1
4 = BC3
10 = BC5
40 = BC7
80 = BC8
0x80 0000 = BC20

频段配置
+QCFG: "band",0x493,0x1e200000095,0x21

用
at+qcfg="band",0,1,0,1
变成
+QCFG: "band",0x493,0x1,0x21

骁龙处理器的安全处理单元

一个潜在的区别是845新增的安全处理单元(SPU)。这是经过改进的Arm SC300。

它具有自己的CPU内核,嵌入式专用RAM,硬件随机数生成器和加速的加密功能,所有这些功能均位于片上系统芯片内部的独有电源岛上。它运行由高通公司提供的代码,无论是谁制造了容纳SOC的设备。

它旨在以安全和私密的方式进行处理,而不会出现在操作系统甚至CPU内核的TrustZone部分的视线范围之内,例如指纹和面部图像之类的东西可以对所有者进行身份验证。这样做应该可以防止危害系统的黑客和恶意软件从小工具中获取这些敏感的生物特征数据,包括您的指纹,脸部地图等。还应该保护应用程序和用户所需的加密密钥。

它通过隔离对敏感数据的所有访问,并安全地私下处理诸如指纹之类的事情来做到这一点,从而使在主CPU上运行的任何代码(包括OS内核和任何恶意软件)都无法检查或干扰信息。它与传统的TrustZone区域(受保护的内存和代码)完全分开,Qualcomm承认,传统的TrustZone区域已被国家资助的黑客和计算机安全专家所击败。

TrustZone是CPU内核中的一种特殊模式:通常,内核或低级驱动程序将设置一些参数并触发向TrustZone的切换,这时将启动单独的固件代码(仅在内存中设置一些东西才能能够访问Trustzone),然后切换回内核模式并显示结果。运行在顶部的内核,驱动程序和应用程序应该看不到TrustZone代码可以访问的私有内容,例如加密密钥和指纹。

SPU是一个物理上独立的CPU内核,具有物理上的专用内存,它自己的内置加密引擎以及防止其他软件的篡改和重放攻击的机制。乍一看,这听起来有点像英特尔的命运不佳的管理引擎,它可以被不法之徒用来劫持整个工作站和服务器。

但是,与管理引擎不同,SPU不能控制片上系统。有人告诉我们它通过类似邮箱的接口与各种内部单元(例如GPU和矢量计算处理DSP)进行对话,将它们发布到数据和请求中并收集结果。

在主CPU上运行的软件不应该监听这些单元为SPU所做的任何工作,从而允许由专用数学电路秘密执行诸如指纹和面部识别算法之类的任务。因此,不可能远程破坏SPU,也不能通过恶意应用程序或内核级驱动程序在本地对其进行监听。

与往常一样,事情有错误,并且SPU或其固件中的任何缺陷都可能导致高通安全性出现裂缝。曾几何时,人们说TrustZone不可破解,然后被允许运行Qualy开发的代码,该代码不进行边界检查。

希望845的SPU不仅可以处理指纹和面部扫描,还可以处理虹膜和声音来验证用户身份并允许他们登录其设备和服务。 SPU还有望实现其他形式的身份验证和授权,使人们的电话可以替换其芯片银行卡,公共交通支付卡,SIM卡等。

因此,让我们希望它能够坚持下去。高通公司的高管对SPU的设计相当不满意。他们的思维方式围绕着其机制越是神秘,那么可供黑客利用的信息就越少。默默无闻带来安全性。一名安全部门的高级职员在按下安全单元内部时说:“部分原因是混淆,您说的越少越好。”

Android APP的selinux身份

/system/etc/selinux/plat_seapp_contexts 这个文件里有

user=_app minTargetSdkVersion=29 domain=untrusted_app type=app_data_file levelFrom=all
user=_app minTargetSdkVersion=28 domain=untrusted_app_27 type=app_data_file levelFrom=all
user=_app minTargetSdkVersion=26 domain=untrusted_app_27 type=app_data_file levelFrom=user
user=_app domain=untrusted_app_25 type=app_data_file levelFrom=user
user=_app minTargetSdkVersion=28 fromRunAs=true domain=runas_app levelFrom=all

这是Android 10

user=_app minTargetSdkVersion=28 domain=untrusted_app type=app_data_file levelFrom=all
user=_app minTargetSdkVersion=26 domain=untrusted_app_27 type=app_data_file levelFrom=user
user=_app domain=untrusted_app_25 type=app_data_file levelFrom=user

这是Android 9

user=_app minTargetSdkVersion=26 domain=untrusted_app type=app_data_file levelFrom=user
user=_app domain=untrusted_app_25 type=app_data_file levelFrom=user

这是Android 8.1

如果需要调整app身份, 是 untrusted_app 还是 untrusted_app_27

修改 Android Studio项目中的 build.gradle 中的 targetSdkVersion的值 就可以了

Linux同时开启usb网卡和有线网卡

Android手机用 usb线连接Linux PC主机,手机上开启usb网络共享, PC上出现usb0网络接口。启用usb网卡后, 原有的ethernet有线网卡会停用。

现在介绍,在开启usb网卡后,如何手动开启ethernet

网卡名为 en01

ip addr add 192.168.0.159/24 dev eno1
ip route add default via 192.168.0.1 dev en01
ip route del default via 192.168.42.129 dev usb0

移动网络识别码MNC的规划和分配情况

移动网络识别码的规划和分配情况

移动网络识别码MNC使用单位
00中国移动
01中国联通
02中国移动
03中国电信 (CDMA)
04中国移动 (物联网)
06中国联通 (物联网)
07中国移动
08中国移动 (物联网)
09中国联通
10中国联通
11中国电信 (LTE)
12中国电信
1X(X=3~9)根据需要核配启用
2X(X=0~9)中国移动 (根据需要核配启用)
3X(X=0~9)中国联通 (根据需要核配启用)
4X(X=0~9)备用
5X(X=0~9)中国电信 (根据需要核配启用)
6X~9X(X=0~9)备用

用Windows虚拟机中的IDA调试连接在Linux物理机上的Android手机的native程序

标题就很绕口。
交代下背景
IDA Pro我用的是网上流传的7.2盗版, 只有Windows版本
我主要的工作平台是 Debian Linux

本来一种简单的方式是, 将 Android手机的usb,直接分配给虚拟机

1.在手机上运行 android_server64

./android_server64                                                                                                           
IDA Android 64-bit remote debug server(ST) v1.25. Hex-Rays (c) 2004-2018
Listening on 0.0.0.0:23946...

2.将usb设备中,android手机分配虚拟机,安装好adb驱动

3在windows命令行运行

adb forward tcp:23946 tcp:23946

4.在IDA直接 attach 就行了


我选择的是一种复杂的方式
1. 手机上运行 android_server64
2. Linux控制台运行 adb forward tcp:23946 tcp:23946
3.root用户运行iptables

iptables -t nat -A OUTPUT     -p tcp --dport 9527 -j REDIRECT --to 23946
iptables -t nat -A PREROUTING -p tcp --dport 9527 -j REDIRECT --to 23946

4.IDA attch时配置端口为 9527


另外一种简单的方式,手机开启usb网络共享, Linux主机上会出现一个usb0网卡设备,桥接给虚拟机。

阻力最小的路径-联发科设备上从无线基带到应用处理器的权限提升

原文:https://comsecuris.com/blog/posts/path_of_least_resistance/
翻译: softs.im 介绍 当今的移动系统由多个独立但高度互连的处理单元组成,每个处理单元都运行各自的代码。先前的研究证明,这些组件,尤其是无线基带处理器,容易受到远程或附近的攻击。在过去的几年中,针对所有主要基带SoC供应商的实践已经证明了这种利用。入侵基带(在MTK源代码中称为调制解调器或MD)是一种强大的攻击,因为它可以访问通过调制解调器的所有数据,而实际上却无法被当前的保护机制检测到。然而,它在持久性和实用性方面有其局限性:显然,这种入侵无法访问客户端加密的数据或通过其他渠道传输的数据。 这些类型的攻击发展过程中自然而然的下一步就是提高代码执行效率,并入侵其他处理单元,最重要的是应用处理器(AP)。通过其他组件攻击AP的优势在于,它们可以提供审核较少,安全性较低的攻击面。在应用处理器上运行的操作系统通常配备有不断改进的现代防御和利用缓解机制,以提高利用成本。相反,其他嵌入式组件(例如不易暴露于最终用户的蜂窝基带和传统的攻击媒介)在历史上通常很少受到安全社区和供应商的审查。 这项研究旨在通过对采用联发科芯片组,并假设3G调制解调器受到入侵的HTC One M9 +手机进行案例研究,从而提供一种评估和审核不同处理单元之间接口的方法。首先,探索调制解调器与其他组件之间的通信通道,并研究负责加载基带固件的Android内核驱动程序。在介绍了通用体系结构和通信格局之后,提供了一些示例,用于评估使用调制解调器数据的用户空间应用程序的漏洞。这些示例包括手动调查(剖析远程文件系统驱动程序)和自动发现(模糊攻击供应商RIL)。此外,我针对远程文件系统驱动程序中发现的路径遍历漏洞开发了概念证明漏洞利用(PoC)。 PoC可用于从受入侵的基带接管Android系统。我将指导您完成PoC及其开发步骤,包括MTK基带固件的逆向工程过程。最后,为了完善漏洞利用链,我还将说明如何模糊攻击基带固件GSM协议栈的目标文件。 自这项研究开展以来,来自Google Zero项目的Gal Beniamini发表了一篇出色的文章,内容涉及入侵Broadcom的Wi-Fi芯片并增强对应用处理器的访问。他的工作还进一步表明,这些不是孤立的案例,也不是特定于某些供应商的案例。而是它们是现代(移动)操作系统中设计问题的示例,即OS-es(操作系统)固有地信任其他处理组件的意图和完整性,并且很少采取防御措施。 这项研究是在我在Comsecuris的三个月实习期间进行的,事实证明这是对移动平台低级安全问题的令人兴奋的介绍。在此,我要感谢拉尔夫·菲利普·韦恩曼(Ralf-Philipp Weinmann),尼科·戈德(Nico Golde)和丹尼尔·科马罗米(Daniel Komaromy)所提供的难得的机遇,以及他们在整个研究过程中提供的宝贵见解。
披露时间表 2016年11月14日-向MTK披露了漏洞(多次请求后无响应)
2016年11月14日-向HTC披露漏洞
2016年11月18日-向Google披露了漏洞(因为Lava Pixel手机也受到影响)
2016年11月28日-HTC确认已通知供应商
2016年12月6日-HTC报告此问题已修复并已部署到产品线
2017年2月10日-Google要求进一步澄清,此后一直未回应(问题仍未解决) 我无法验证联发科技如何解决该问题,他们是否将修复程序发布给所有客户,以及这些修复程序是否已将其植入现场设备。
联发科技架构设计 研究的第一步是收集有关基带处理器和平台的低级架构的知识。 HTC One M9 +出厂附有MediaTek MT6795T SoC(代号Helio X10),其中包含八核应用处理器(Cortex A53 ARMv8)和集成调制解调器CPU。不幸的是,与竞争对手(高通的Snapdragon和三星的Shannon芯片组)相比,MTK芯片在安全研究领域的关注度较低。泄漏的MTK数据表(虽然是不同或较旧的芯片MT6595,MT6782等)很多,其中包含SoC布局的高级概述。此外,Markus Vervier还撰写了一篇有关攻击的文章,这些攻击能够主动克隆移动身份并提供有关Mediatek调制解调器固件的其他详细信息。 根据MTK文档,调制解调器系统由DSP和ARMv7 Cortex-R4 MCU组成。两者都与应用处理器位于同一芯片内。 DSP实现了蜂窝基带栈的物理层,因此不在本文的讨论范围之内(当我谈论调制解调器或基带处理器时,我指的是MCU)。 ARMv7内核运行基带固件,并实现不同的蜂窝数据链路和网络层协议。 为了从调制解调器的角度建立可能的攻击面,我们需要发现并了解AP与MD之间的各种通信通道。我们还需要确定AP端的各个软件组件,这些组件消耗来自调制解调器的数据。一个开始寻找的好地方是CCCI(Cross Core Communication Interface跨核心通信接口)内核驱动程序,它负责基带处理器的管理和监督以及AP和MD之间的数据交换。大量底层Android内核源代码(包括其驱动程序)是公开可用的。可以从HTC网站下载源代码。相关文件位于驱动程序/ misc / mediatek / eccci /和drivers / misc / mediatek / [dual_] ccci /目录中,作为内核源代码树的一部分。 CCCI驱动程序包括CCIF子系统,该子系统包含用于在应用程序处理器和调制解调器之间建立低级通信接口的代码。这包括初始化UART线(主要用于传输AT命令和音频数据),以及设置用于交换数据和控制命令的共享存储区。共享内存分为多个子区域,这些子区域专用于某些任务,用于传输各种IPC命令,调制解调器日志条目,远程文件等。这些存储区中的每个存储区都分为一个单独的发送和接收通道,对它们的访问由专用信号区控制。信号区域用作一种流或访问控制通道,以指示共享存储缓冲区中何时有新数据可用,或者另一方何时已接收到新数据。CCCI驱动程序的其余部分通过其自己的环形缓冲区实现提供对这些通道(包括共享内存和UART通道)的统一访问。这些环形缓冲区通过一组提供IOCTL系统调用处理程序的字符驱动程序公开给用户空间Mediatek二进制文件。图1描述了这种架构,包括CCCI驱动程序的调制解调器端。有关调制解调器的管理及其数据处理的大多数逻辑是在用户空间应用程序中实现的。内核驱动程序仅用作控制调制解调器和AP之间的通信通道的通信接口(顾名思义)。

EF_EST激活服务表

如果在USIM服务表中的2,6,34或者35号功能可用,EF_EST必须存在。
文件标识符: 6F56
SFI: 5
文件类型: 透明二进制文件

1号服务: 固定拨号 Fixed Dialing Numbers(FDN)
2号: Barred Dialing Number (BDN)
3号: APN Control List (ACL)


UST的
2号: Fixed Dialling Number
6号: Barred Dialling Number
34号: EST
35号: APN Control List(ACL)

============
EF_ACL (Access Point Name Control List) 6F57
=============

也就是说, UST里的标志激活,只能表明 UICC具备 FDN, BDN和 ACL三项能力,但是否启用/激活, 是由 EST这里的标志 决定的。