其实CDMA鉴权机制加上使用UIM卡,如果按标准做,安全性超过GSM鉴权几个数量级,但是在实际使用中被人为的降低了。
: o& S7 H4 }. d
! B, p" h! }/ {; _ 标准做法,一般鉴权使用由AKEY临时生成的SSDA和随机数RAND进行鉴权,当某次使用SSD的一般鉴权失败时,应该认为SSDA已经泄密,系统自动启动基于AKEY的SSD更新过程,更新UIM卡内SSDA,还有就是由系统主动定时发起SSDA更新。- v. b b, F# t: H) N" Y2 y
5 N6 ~+ i0 m; ]7 [- q9 n- }8 U
, T* s/ E4 N* l4 S 现在的情况是,
( W) ?1 m" f6 i3 X" b* }* t) d- i( h+ s7 T8 s
1,因为更新SSD和使用随机RAND会耗费系统资源,
! k! |) T/ f" x+ F6 m3 a& K, {! d) _* I6 P! Z [9 W
2,各地都有鉴权中心,原来运营商一直未很好解决漫游两地SSD更新交换数据问题,手机在外地时如果一次鉴权失败(例如呼叫鉴权手机掉电,信号不好,交换不成功),启动SSD更新,因为两地交换数据的问题,异地更新不成功,此时机主在回原地之前都不能使用手机。运营商不好好正面解决这个问题,而是偷懒,所谓网络优化,去掉了异地甚至本地使用SSD的一般鉴权失败后的基于AKEY的SSD更新过程,甚至去掉了定时更新SSD过程,只在新开户,换卡,投诉时进行SSD更新,系统实际降低到只依靠SSD进行鉴权,一直使用本是临时的SSD,把临时安全措施当长期安全措施,安全程度大打折扣。
+ `$ p( z6 `* Y7 f e( R! H) K2 y! d( i. Z
0 `3 A* ~. [% N( ?0 n$ v 一般的呼叫鉴权,鉴权算法我们看成一个黑盒,输入4个参数,- H) T; z4 l. O" L
; G- u( t1 m, q. F- h
1,RAND,由网络发送到手机,标准协议应该每次都是随机数,但现实情况,大部分地区都是拨出固定为0,甚至有些地区呼入时也为0。) W5 Q! n+ G( F$ b$ I
7 q h% w3 L2 V4 f4 _ 2,SSDA,这个由AKEY临时生成,标准协议应该一般鉴权失败就更新,或定时更新,但现实情况,部分地区从来不更新,哪怕某次鉴权失败(意味着可能有并机无正确AKEY使用)。
; p4 e. u) Z5 r. z- V }1 P" X0 D* T/ }" f: }
3,呼出时电话号码后6位数,呼入时MIN码后3字节
3 L7 A: v3 R5 D, o# ?3 K7 G# P J8 u- @$ l7 {! l
4,ESN(UIM ID) 得到 AUTHR,发送到鉴权中心,鉴权中心也有这4个参数,同样的鉴权算法,也计算出AUTHR与手机发来的AUTHR比较一致时鉴权成功,可以继续通话。
) e+ n7 |4 x" h* V
. ^0 K- q6 q- c# b" q6 b1 O
5 H5 r! r5 a' d2 a# J 在一个所谓的网络优化后的网络,由于参数1,2,4都固定了,参数3意味你接听电话时也是固定不变,你播出电话时已知,上网#777,发短信时固定,鉴权结果AUTHR可以跟踪UIM卡数据得到。+ Y' U' N0 P- W3 L- ]
0 f. |/ s0 K5 _! @7 e+ C& o7 r 1,用串口调试器软件或单片机飞线到UIM卡数据口捕获数据得到AUTH
# Q! u- q6 k+ q8 e- t1 C" X( O6 Y 7 v" y. D6 }7 c7 m
2,做一个特别的手机软件,自动记录拨出号码和接听,短信时对应AUTH。UIM卡MIN号和ESN(UIM ID)可以在手机工程模式看到,或用上述特别手机自动记录。+ c. y( ~* e# Q9 A: C
$ O, @3 c1 ~0 V4 d) ? 之后
, {! c+ [" |' s. { 9 ~; q9 h+ p- M6 B
用上述特别手机,在鉴权结果AUTH出来后做判断修改为上面捕获的预设AUTHR,
/ [! q, I6 t+ x4 P1 z 8 O% s: L* y- v) [% |; p& n2 F
就可以" j( V" L2 P) Q7 a. E4 T2 \2 R
" }) X; g4 `% G& b6 F2 M
1,无限并机冒充原机拨打,冒充机主,银行电话,充值什么的..........
, d% C: b" G9 Z8 v
! q h+ m% J7 N- m T6 f- {# c- m 2,做无限并机上网卡。 f3 b" x- `/ N8 r3 Z# S
" p! U" V4 }7 g$ ^" R, J 3,冒充机主拦截电话,特别是特制手机使用无卡鉴权的话,鉴权计算速度比真实机主的UIM卡鉴权快并首先返回系统,结果就是真实机主的手机永远都不会再响,只有冒充的手机会响。- d6 l r$ z# D9 z( l. r6 O. B
1 _ \( [ d# p! n6 u: G9 X
5 E" T& }9 M2 p$ Q
最简单的实现条件就是有人拿到你的UIM卡放到这种特制手机并拨出几个电话,发发短信,上一次WAP,打入一个电话,几分钟后就能复制了,这个速度比GSM的SIM卡复制需要几个小时快多了,所以更容易实现.0 j) P6 ]. ?# M$ C0 O( T7 g
3 B( v9 D( t7 O6 Z1 m1 w
在一个山寨横行,手机源码不受控的年代,做一个这样的特制手机并不是很难的事情,只要在源码上加入十几行代码就能实现,也就是一两个小时的事情,甚至反汇编,仿真器跟踪现成手机并修改也只要几天时间。7 I( ?$ g+ O: p
8 |" L3 m( ?* E; N! I, E 对此安全漏洞,并无利用和实际操作,此漏洞只是本人实际测试手机SSDA更新时发现(实测某些地区人为引起一般鉴权失败后从来没有SSDA更新),但觉得理论上完全可行,希望新电信接手CDMA网络后尽快修补这一漏洞,还用户 一个安全的CDMA网络,特别是在现在手机支付逐渐盛行的情况下。
* Q% M9 _' m8 e; S0 ]
- o% Y" v$ y& T% U. i0 } 又想到一个方案( ?+ Q& {3 Q' T
$ x/ S3 {+ ?3 \! g" R0 p 条件
3 Y: g! G8 M- k0 A" b 1,从不进行鉴权失败后的SSDA更新. b: }# d% a- e
2,RAND固定为0
; a; M" J1 {/ \! F$ q' H) d0 R# ?0 c- y
UIM卡一般鉴权指令5 Z# C( u- k. j* U3 l- f% M) d
发送:
% ^2 A* A: x, S
! y" E2 c2 \- l1 t- ]- ^ A0 88 00 00 11 进入一般鉴权计算模式
' G4 e+ a# V% o R# t
# l* G$ i& y( U( Y8 G# \! v 回应:88% m5 @ D/ D, A* m& G- c( o
5 y# Y% _1 N) N$ {& r; i M# Y
发送: . `" S" i% ]: I# ]* I8 H1 p7 k
( Z( G+ D9 J) D9 S- `1 K* k' [
00 RAND(四字节) 18 DIGITS(三字节) 10 UIMID(四字节) 00 00 00 发送一般鉴权参数
' J1 | G% L1 s4 O( S& t
6 z$ k) M. V( `6 r 回应:9F 03" d0 {+ I8 D9 `) g% F+ l
2 |- B( Z6 |5 g' F: \: X" C$ P" V" W/ c/ k: M2 |) w
发送:6 N) w, I7 ]3 Z- e+ d! G& @
, w- d; ?6 Y9 X( E X [( w
A0 C0 00 00 03 读出鉴权结果AUTHR' t5 h1 m9 t; o) _3 h
2 o3 r: C! f& y$ _3 [3 ]# B" u: W 正确回应:9 T5 Y: [; W2 Y
$ X$ t) \. k! H9 q! }. [
C0 AUTHR(三字节) 90 00
9 q4 t8 I2 |8 V0 {+ O' f
) v" C! |6 O4 A* J% i x 我们不用知道UIM卡现在的SSDA,
9 Z$ _: ?: ?0 G( V6 b1 R
! y5 u( |7 ^, O$ S5 _8 }- W4 p P DIGITS在拨出时就是拨出号码后6位,不足6位前面用MIN后六位补(HEX),呼入时为MIN后六位/ Z: J6 o/ |0 ?/ p1 w, L4 f
9 j+ R" ~8 T; W2 s" y) \$ j
DIGITS拨出号码时超过6位时共有999999+1=1000000个组合,
W4 q) v3 t1 @
4 G! O3 P7 _+ A x: P 写一个UIM卡PC软件输入DIGITS的所有组合并记录对应AUTHR建立数据库,如果UIM卡一秒能做10次鉴权计算,大概20-30小时能算完所有组合,大概生成2-3M数据库,将此数据库导入特制手机就能实现部分地区网络情况下的UIM卡复制,攻破鉴权机制,如果有条件还可以做一个有3-4M容量的特制UIM白卡,重写程序,将数据库导入后查表给出AUTHR,这样的卡在任何UIM卡手机上都能使用。
/ m% D7 r0 d# ]% e5 i' N$ o+ s5 _) n& f& z4 g+ J1 A) Q
; }* a( K- ?' q y3 `
转帖 |