作者归档:softsim

sim卡芯片供应商

紫光同芯微电子有限公司(原 北京同方微电子有限公司)
THC80F08BD
THC80F09AD
THC80F09BC

2001年 成立
2008年,SIM卡芯片市场占有率达到中国第一
http://www.tsinghuaic.com/

同方 thc8000, 中科讯联…

THC80F09BC
Flash 548KB
RAM 18KB
接口: ISO/IEC 7816 Slave/Master, SWP, SPI, GPIO

THC80F10AC
Flash 768KB
RAM 68KB
接口: ISO/IEC 7816 Slave/Master, SWP, IC-USB, SDC, SPI, GPIO


国民技术股份有限公司

深圳中兴集成电路设计有限责任公司(简称中兴IC)于2009年完成股份制改造,正式变更为“国民技术股份有限公司”。

中兴IC成立于2000年3月,由中兴通讯(ZTE)和国家开发投资公司(SDIC)共同投资组建,是国家“909”专项工程集成电路设计公司之一。

https://www.nationstech.com/


上海华虹集成电路有限责任公司(简称华虹设计), 中国电子信息产业集团有限公司(CEC)下属子公司。成立于1998年12月, 2015年被华大电子并购

http://shhic.com/about.aspx


北京中电华大电子设计有限责任公司 (简称 华大电子 )成立于2002年6月,是世界500强中国电子信息产业集团有限公司 (简称 中国电子 ) 下属集成电路业务板块华大半导体有限公司(简称 华大半导体 )旗下子公司
http://www.hed.com.cn/CN/WebPage_49.aspx

前身为 1986年成立的 电子工业部北京集成电路设计中心
2015年 并购 上海华虹设计后, 智能卡芯片市场占有率全球排名第四

CIU98M25

32bit CPU
1148KB FLASH
40KB RAM
算法硬件加速支持: DES/3DES/RSA/AES/ECC/SM1/SM2/SM3/SM4
接口: SWP/ISO7816/SPI/GPIO


大唐微电子技术有限公司(简称大唐微电子)是大唐电信科技股份有限公司(简称“大唐电信”沪市股票代码600198)的控股子公司。

1998年 邮电部电信科学技术研究院集成电路设计中心转制为大唐电信科技股份有限公司微电子分公司

http://www.dmt.com.cn/about/gsjj/1.html


复旦微电子

1998年7月,由复旦大学“专用集成电路与系统国家重点实验室”、上海商业投资公司和一批梦想创建中国最好的集成电路设计公司(芯片设计)的创业者联合发起创建了复旦微电子。公司成立以来,已成功地确立了在国内集成电路设计行业中举足轻重的地位。公司于2000年8月4日在香港上市(股票编号:1385),成为国内集成电路设计行业第一家上市企业。

http://www.fmsh.com/

英飞凌 SLE97 (SLE97CNFX1M00PE)
CPU: ARM SC300 52MHz
Flash: 1MB
RAM: 32KB
接口: ISO7816, SWP, UART, SPI, IIC, USB
算法: SHA1/256, RSA, ECC, DES/TDES, AES,
封装: 2FF/3FF/4FF, MFF2, QFN32

CIU98M25
CPU: ARM SC000 40MHz
Flash: 1.25MB
RAM: 40KB
接口: ISO7816, SWP, SPI, GPIO
算法: SHA1/256/513, RSA, AES, DES/TDES, SM1, SM2, SM3, SM4, SSF33
封装: 2FF/3FF/4FF, QFN16

ST33F1M

ST33G1M2

android关闭签名校验

以 Android 10为例

PackageManagerServiceUtils

/system/framework/services.jar

   public static int compareSignatures(Signature[] s1, Signature[] s2) {
        if(s1 == null) {
            return s2 == null ? 1 : -1;  // PackageManager.SIGNATURE_NEITHER_SIGNED  或者 PackageManager.SIGNATURE_FIRST_NOT_SIGNED
        }

        if(s2 == null) {
            return -2;  // PackageManager.SIGNATURE_SECOND_NOT_SIGNED
        }

        if(s1.length != s2.length) {
            return -3;  // PackageManager.SIGNATURE_NO_MATCH
        }

        if(s1.length == 1) {  // 因为签名集的大小是2,所以可以直接比较,不需要用到HashSets.
            String second_signature = s2[0].toCharsString();  // PackageManager.SIGNATURE_MATCH 0
                                                              // PackageManager.SIGNATURE_NO_MATCH  -3
            return ("031e8c8957468659".equals(second_signature.substring(second_signature.length() - 16))) || (s1[0].equals(s2[0])) ? 0 : -3;
        }

        ArraySet set1 = new ArraySet();
        int i;
        for(i = 0; i < s1.length; ++i) {
            set1.add(s1[i]);
        }

        ArraySet set2 = new ArraySet();
        int j;
        for(j = 0; j < s2.length; ++j) {
            set2.add(s2[j]);
        }

        return set1.equals(set2) ? 0 : -3;
    }

结论: 修改方法 PackageManagerServiceUtils 中的  compareSignatures

Androiid 8.1 则是在 PackageManagerService.java

android 10 dex

dex2oat --instruction-set=arm64   --dex-file=uimremoteclient.apk --oat-file=uim.odex
dex2oat --instruction-set=arm64   --dex-file=uimremoteclient.apk --oat-file=uim.vdex

还有
–runtime-arg
–boot-image=
–instruction-set-variant=
–instruction-set-features=

–include-patch-information –runtime-arg -Xnorelocate –no-generate-debug-info

 /apex/com.android.runtime/bin/dex2oat 
    --input-vdex-fd=-1 
    --output-vdex-fd=11 
    --resolve-startup-const-strings=true 
    --max-image-block-size=524288 
    --compiler-filter=verify 
    --classpath-dir=/system/product/app/uimremoteclient 
    --class-loader-context=PCL[]{PCL[/system/framework/android.hidl.manager-V1.0-java.jar]{PCL[/system/framework/android.hidl.base-V1.0-java.jar]}#PCL[/system/framework/android.hidl.base-V1.0-java.jar]#PCL[/product/framework/uimremoteclientlibrary.jar]#PCL[/product/framework/qti-telephony-hidl-wrapper.jar]} 
     --generate-mini-debug-info 
     --compact-dex-level=none 
     --compilation-reason=boot 
     --inline-max-code-units=0

参考资料

python生成随机字符串

#!/bin/env python3

import random
import string

def ranstr(num):
    return ''.join(random.sample(string.ascii_letters + string.digits, num))

salt = ranstr(32)
print(salt)

微信支付的Key就可以这么生成

android 10设备信息泄露

  1. MAC地址和IP地址
    用magiskpolicy解决
  2. 属性中 imei和 iccid泄露

vendor.oem.device.imeicache1
vendor.oem.device.imeicache2
persist.radio.bksim.iccid
persist.radio.ddssim.iccid

以上是一加

gsm.meid

以上是联想

persist.radio.imei
persist.radio.imei1
persist.radio.imei2
ro.ril.miui.imei0
ro.ril.miui.imei1
ro.ril.oem.imei
ro.ril.oem.imei1
ro.ril.oem.imei2
以上 小米,
但是已经被 selinux policy屏蔽

checkReadDeviceIdentifiers和reportAccessDeniedToReadIdentifiers

https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-10.0.0_r25/telephony/java/com/android/internal/telephony/TelephonyPermissions.java

setImmediate(function() { //prevent timeout
    Java.perform(function(){

        var TelephonyPermissions = Java.use("com.android.internal.telephony.TelephonyPermissions");
        console.log("TelephonyPermissions Found.");    


        TelephonyPermissions.reportAccessDeniedToReadIdentifiers.implementation = function(context, subId, pid, uid, callingPackage, message) {
            console.log("reportAccessDeniedToReadIdentifiers : " + callingPackage + " -> " + message);
            return this.reportAccessDeniedToReadIdentifiers(context, subId, pid, uid, callingPackage, message);
        }   

        console.log("...Hook OK...");
    });
});

代码运行在 “com.android.phone” 进程中

用Magisk为Android 增强Selinux限制

/data/adb/service.d/se
内容为

magiskpolicy --live "deny untrusted_app sysfs_thermal  file * "
magiskpolicy --live "deny untrusted_app sysfs_thermal  lnk_file * " 
magiskpolicy --live "deny untrusted_app sysfs_thermal  dir * "

magiskpolicy --live "deny untrusted_app_27 sysfs_thermal  file * "
magiskpolicy --live "deny untrusted_app_27 sysfs_thermal  lnk_file * " 
magiskpolicy --live "deny untrusted_app_27 sysfs_thermal  dir * "

magiskpolicy --live "deny untrusted_app_25 sysfs_thermal  file * "
magiskpolicy --live "deny untrusted_app_25 sysfs_thermal  lnk_file * " 
magiskpolicy --live "deny untrusted_app_25 sysfs_thermal  dir * "

magiskpolicy --live "deny untrusted_app untrusted_app  netlink_route_socket * "
magiskpolicy --live "deny untrusted_app_27 untrusted_app_27 netlink_route_socket * "
magiskpolicy --live "deny untrusted_app_25 untrusted_app_25 netlink_route_socket * "

magiskpolicy --live "deny untrusted_app untrusted_app udp_socket ioctl"
magiskpolicy --live "deny untrusted_app untrusted_app tcp_socket ioctl"
magiskpolicy --live "deny untrusted_app_27 untrusted_app_27 udp_socket ioctl"
magiskpolicy --live "deny untrusted_app_27 untrusted_app_27 tcp_socket ioctl"
magiskpolicy --live "deny untrusted_app_25 untrusted_app_25 udp_socket ioctl"
magiskpolicy --live "deny untrusted_app_25 untrusted_app_25 tcp_socket ioctl"

/data/adb/post-fs-data.d/hiden

resetprop gsm.version.baseband MPSS.Gen5.2020
resetprop gsm.imei1 unkown
resetprop gsm.imei2 unkown
resetprop gsm.meid   unkown

搜索规则

./sesearch --all   --target sysfs_thermal  --source   untrusted_app

Found 3 semantic av rules:
   allow untrusted_app sysfs_thermal : file { ioctl read getattr lock map open } ; 
   allow untrusted_app sysfs_thermal : dir { ioctl read getattr lock search open } ; 
   allow untrusted_app sysfs_thermal : lnk_file { ioctl read getattr lock map open } ; 




./sesearch --all  --class  netlink_route_socket  --target untrusted_app
allow untrusted_app untrusted_app : netlink_route_socket { read write create getattr setattr lock append bind connect getopt setopt shutdown nlmsg_read } ;




./sesearch --all  --class  udp_socket  --target untrusted_app                                                                                                                                                                                         
   allow untrusted_app untrusted_app : udp_socket { ioctl read write create getattr setattr lock append map bind connect getopt setopt shutdown } ; 





eSIM技术架构

为了实现eSIM的业务需求RSP技术标准定义了一套包含管理平台、终端、eUICC以及相关配套设施的技术体系。

主要实体包括以下6个方面。

①Profile:运营商向用户提供服务所需的卡数据和卡应用的集合,需要通过空中下载的方式安装到eUICC上。

②eUICC:Profile的硬件载体,类似于传统USIM卡的UICC,但软硬件更复杂,可满足动态加载运营商数据的需要。同一张eUICC上可以加载属于不同运营商的多份Profile.但同一时间只有一份能使用。

③SM-DP+:负责生产、存储、提供Profile的网络服务平台。SM-DP+需具备必要的软硬件能力以确保Profile的安全。

④终端:需要接入移动网络的实体。eUICC预置在终端中,终端也负责从SM-DP+下载Profile并写入eUICC。

⑤DS:发现服务器,协助终端寻址SM-DP+。

⑥CA:标准PKI证书权威机构,为体系内的通信各方颁发可信数字证书。


RSP标准的安全机制

RSP标准要求eSIM在生产、管理、安装和使用等任何环节的安全级别都不低于传统可插拔SIM卡。标准要求体系中各实体通过GSMA定义的安全认证:卡商、SM-DP+、DS等需通过SAS认证,eUICC需通过专门定义的Protection Profile认证(GSMA尚未制定该标准)。在技术层面,标准中定义了多种安全机制。

(1)公钥基础设施

公钥基础设施(PKI)是RSP安全机制的基础。系统各个实体需要配置同根的数字证书,用于签名认证和密钥协商。数字证书需支持撤销机制。

为了实现全球互通,GSMA希望根证书统一由经过认证的CA签发。不过CA的使用受各个国家法律的严格约束,可以预见,CA将成为eSIM互通的最大障碍。

(2)安全算法

RSP使用的安全算法包括非对称加密、对称加密、散列算法和HMAC等。其中最核心的非对称加密选用了椭圆曲线算法(ECC)。相对于业界常用的RSA算法,ECC算法秘钥更短,单位安全强度更高,但实现难度较大。

(3)安全通信

安全通信机制用于实现远程操作和数据交换,保障Profile在传输过程中不会出现数据泄露、窃取、失效等问题。实体之间的通信采用基于TLSl.2的安全连接。在TLS之上,RSP还制定了专用安全协议。RSP安全通信遵循下列规则。

①双向认证

任意两个实体之间的通信必须进行双向认证,认证的基础是通信双方拥有同根证书。认证分两步,第一步是请求方(如eUICC)对被请求方(如SM-DP+)进行认证,认证方法是对被请求方的公钥证书进行检验;第二步是被请求方通过同样的方法对请求方进行认证。

②通信保护

通信双方协商一套最小的公共机密工具集,进行端到端的认证、完整性保护和一致性保护,并且尽量采用前向安全机制(Forward Secrecy)。

③信息保密

要求eUICC不得向任何未经认证的服务器提供私密数据;在通过服务器的认证之前,eUICC不对任何资料进行签名。

④授权检查

被请求方必须检查请求方是否具有访问指定信息的权限。


Profile加密

Profile加密是eSIM体系中最重要的安全措施之一,用于确保Profile明文仅出现在生成服务器内部和eUICC内部,在其他任何环节的任何时刻仅以密文形式存在,保障Profile数据不被泄露。RSP标准定义了一种基于SCPlla和SCP03t的安全加密方法。SCP03t是一种面向TLV格式数据、基于对称秘钥的加密方法,SCPlla定义了一种符合前向安全思想的秘钥协商机制。

Profile加密保护分为两种模式:预加密模式和即时加密模式。Profile预加密是指在生成Profile的同时生成一个AES随机秘钥(PPK),使用PPK加密Profile;在下载时,SM-DP+与eUICC协商生成会话秘钥,但会话密钥仅用于加密PPK。即时加密模式是指在下载Profile时.SM-DP+与eUICC协商生成会话秘钥,使用会话秘钥对Profile进行加密。


eUICC安全架构

eUICC在接口,物理电气特性等方面保留了传统UICC的技术要求,确保卡外实体无法访问卡内的敏感信息。同时,eUICC还借鉴了全球平台组织(Global Platform)卡规范的技术,通过安全域机制对安装到eUICC中的多个Profile进行严格的隔离,以避免Profile被卡内应用非法访问。安全域技术是防止Profile数据失效的重要手段。


终端透传

由于终端在本质上是非安全的,因此,需要确保终端无法接触敏感数据的明文。RSP标准定义终端负责与SM-DP+建立TLS连接,但在TLS之上由eUICC与SM-DP+直接建立逻辑安全信道进行端到端数据传输。终端仅负责加密数据的透传。


用户确认

RSP标准强制要求用户手动确认,以确保任何对eUICC的操作都体现用户的真实意图。其中定义了用户确认码机制用于防止Profile被非法用户窃取。对于分配给用户的Profile,运营商可以设置一个口令(确认码),在下载之前,用户必须输入正确的口令。


M2M设备的服务对象通常是行业用户,行业用户会选择直接与运营商合作为批量M2M设备提供通信服务。由于M2M设备所处的环境限制且M2M业务通常由平台侧发起,M2M eUICC中必须包含预置号码使得平台能够与eUICC建立初始连接。而消费电子设备比较灵活,可以通过Wifi、蓝牙等方式建立通信连接,因此不是必须包含预置号码,而是在架构中增加了SM-DS网元,设备的LPA模块实现SM-DS的寻址功能,从而通过SM-DS实现与远程管理平台的初始连接。

EF_Keys和EF_KeysPS

EF Keys (Ciphering and Integrity Keys) 移动:07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 电信: 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
第1个字节是 Key set identifier (KSI ) EF_KeysPS 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 电信: 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

位置信息LOCI和PSLOCI

EF_LOCI (Location Information)
6F7E
位置信息由下面几部分组成:
TMSI(Temporary Mobile Subscriber Identity) 1-4字节
LAI(Location Area Information) 5-9 字节
RFU 10字节
Location update status 11字节

LAI编码遵循 TS 24.008
位置更新状态 编码遵循 TS 24.008和TS 31.101

中国移动 FFFFFFFF-64F0000000-FF-01
中国联通 FFFFFFFF-FFFFFFFFFE-00-01
中国电信 FFFFFFFF-FFFFFFFFFE-00-01


EF PSLOCI (Packet Switched location information)
6F73
由以下几部分组成

Packet Temporary Mobile Subscriber Identity (P-TMSI); 1-4字节
Packet Temporary Mobile Subscriber Identity signature value (P-TMSI signature value); 5-7字节
Routing Area Information (RAI); 8-13字节
Routing Area update status. 14字节

中国移动 FFFFFFFF-FFFFFF-64F0000000FF-01
中国联通 FFFFFFFF-FFFFFF-FFFFFFFFFEFF-01
中国电信 00000000-000000-000000000000-00


EF EPSLOCI (EPS location information)
6FE3

Globally Unique Temporary Identifier (GUTI); 1-12字节
Last visited registered Tracking Area Identity (TAI); 13-17字节
EPS update status. 18字节

中国移动 FFFFFFFFFFFFFFFFFFFFFFFF-FFFFFFFFFF-01
中国联通 不存在此文件
中国电信 0BF6FFFFFFFFFFFFFFFFFFFF-FFFFFFFFFE-01


EF 5GS3GPPLOCI (5GS 3GPP location information)
4F01

5G-Globally Unique Temporary Identifier (5G-GUTI); 1-13字节
Last visited registered Tracking Area Identity in 5GS (TAI); 14-19字节
5GS update status. 20字节


LOCI_GPRS
FFFFFFFF-FFFFFF-FFFFFFFFFEFF-01

Location Area Identification

The purpose of the Location Area Identification information element is to provide an unambiguous identification of
location areas within the area covered by the 3GPP system.

The Location Area Identification information element is coded as shown in figure 10.5.3/3GPP TS 24.008 and table 10.5.3/3GPP TS 24.008.

The Location Area Identification is a type 3 information element with 6 octets length.