彻底认识4G伪基站
近来一段时间,网络上出现可以攻击4G基站的说法,以此说明存在缺陷从而衍生出伪基站产物,其实都是在RRC安全模式之前“充分”地享受3GPP协议的红利。
但由于协议本身考虑到复杂的234G网络互操作和各种业务情况,为了更好地兼容网络、更好地服务用户,其逻辑过程已经是很成熟的、无懈可击的,因此在该方面的相关3GPP协议是不可调整的。
本文阐述4G伪基站规避密钥及算法的实际应用,同时附带正常网络的复杂的密钥产生过程,可知无线网络在采用有效加密算法的基础上进行业务时绝对安全的。
1、伪基站的系统消息特征
根据观察到的4G伪基站的系统消息,其个别字段的值设置得比较随意,非正常网优参数值,甚至不可思议:
比如F频段的特殊子帧设置,常规网络为SSP5/SSP6,但伪基站会出现SSP7;
常规小区最小接入电平QRXLEVMIN一般在-124dBm~-128dBm之间,伪基站却为-130dBm;
常规小区最小接入质量QQUALMIN正常设置在-18dB,伪基站却为-25dB。
另外看似网络配置了完整的异频异系统系统消息,但其中频点信息异常,设置值为0,看似不正经:
2、跟踪区更新TAU过程
4G伪基站的服务小区频点/PCI的配置与运营商现网是雷同的,但TAC与现网不同,目的就是诱导用户手机在一定的地理范围内进行位置更新,可在4G网络空闲态,也可在连接态,在连接态时不一定由于模三干扰而掉线,也可因为伪基站强同频信号干扰(比如可达到-55dBm,这个数值在LTE系统中是非常震撼的),直接导致同频业务掉线,诱导进入空闲态RRC连接重建过程继而失败,重新发起因为TAU目的的RRC连接建立过程。
伪基站在TAU跟踪区更新过程中插入某些过程,而达到某种目的,蹂躏之后,最终予以TAU拒绝。
观察常规TAU的信令过程,分为空闲态(无承载建立)、空闲态(核心网要求认证和安全模式)、空闲态(要求承载建立)和连接态等几种形态:
发起TAU请求(或附着请求)NAS消息时,为了使拜访网络核心网(本地或外地)能够识别出本消息名称,一律不能采用加密方式,一般采用完整性保护方式,甚至明文方式。同时该消息里面携带密钥集标识eKSI,以此告诉核心网调用该套密钥参数,与UE侧相匹配。
若核心网检测到完整性保护不匹配或者有必要重新启用新的一套密钥集,或者核心网不识别GUTI等等,那么核心网会发起请求IMSI号码、新的鉴权认证和NAS安全模式过程,这种情况在地市、省际边界由于用户安全上下文传达不到位,核心网在TAU时普遍采用该模式。
由此可见一旦UE发起TAU请求,后续过程全部由核心网来进行导向。
下图为伪基站的TAU过程:
伪基站能给予UE建立RRC连接(非安全模式),但由于伪基站不存在任何密钥集,因此后续的下行NAS消息一律采用明文方式(因为完整性保护也在启用密钥集,故此不能采用完整性保护,否则手机会完整性验证失败,从而导致伪基站对手机不可控)。
一旦收到TAU请求之后,如果是完整性保护的,那么伪基站会省略完整性验证过程,利用完整性保护消息的有效部分可直接阅读的特性,提取所需信息。然后伪基站会模拟核心网,以明文方式下发身份请求(类型为IMSI),UE回复身份响应消息时还是痴心不改采用完整性保护,然而伪基站再次利用完整性保护消息的有效部分(除MAC字段外)可直接阅读的特性,提取用户的IMSI号码后,以随便一个cause值残忍地拒绝了TAU,并将该用户释放或重定向至2G伪基站魔窟,再虐一回。
以上TAU发起的同时,UE启动了T3430=15s的定时器,在这15秒内,伪基站是可以干一些除TAU之外事情的。
3、伪基站的可操作空间及危害
伪基站是万万不会进行双向鉴权认证和NAS安全模式的,否则就是找死,会被UE所识破,因为这涉及很多密钥的产生、双向鉴权等复杂的运算,实际上也不可能完成,伪基站根本不可能掌握用户的CK/IK密钥,也根本无法破解,而这些也只有强大的电信运营商网络设备才能干,在本文第四部分有介绍密钥和算法,据此伪基站只能干一些投机取巧之事。
伪基站的所有信令过程更是规避RRC安全模式、承载建立过程。
IMSI的泄漏就是在Dl/Ul InformationTransfer消息之中,于是有人想起Dl/Ul InformationTransfer能否放在RRC安全模式之后进行,以此避免了IMSI的泄漏,这是要求修改协议的节奏,其实是行不通的,因为遇到了一个鸡生蛋、蛋生鸡的逻辑问题:RRC安全模式是由S1接口的UE上下文建立请求之后启动的,而UE上下文建立请求必须基于获知该用户的IMSI/密钥集之上,那么在未知IMSI情况之下,何来RRC安全模式?
故此协议本身无懈可击。
另外Dl/Ul InformationTransfer消息可承载除identity request/response之外其它NAS消息(authentication、nas security、sms、ESM等),因此所谓的修改更是欠考虑。
总之伪基站可操作的空间也就定位在SRB1的NAS阶段。
在从理论上看伪基站也是可以发送短信的,伪基站以下行明文方式下发,但UE在上行方向只要不采用加密方式(明文或完整性保护均可,对于加密方式的特殊说明:因为很多区域的平台为了解析信令也是采用了EEA0算法,这种情况下UE上行信息也是可以解析的)。
若因为UE在上行坚持加密(之前核心网MME的NAS安全模式中除EEA0算法外的应用),而导致4G伪基站无法识别短信回复消息,那么一怒之下,就把该用户重定向至2G伪基站,然后在2G伪基站再发短信。
因为伪基站只能建立SRB1,不能建立SRB2&DRB。对手机而言,一旦需要进行业务时,那么会认为4G网络是不完整的、不可用的,接下来UE转而搜索3G网络,从而会产生4G高倒流进3G网络的问题。
某些系统的4G伪基站存在各个关键区域,若留意观察,其量不少,甚至于有一次翻过一个地市边界的偏远大山,发现也有,令我惊讶。鉴于4G伪基站的危害性,电信运营商已主动开展与之合作,采用正常的基站替换之,只是TAC有所区别而已,用户也能正常进行业务。
目前还没遇到非法4G伪基站,真正的担忧还是来自于将来可能出现的非法4G伪基站,我们可以借助于网优平台ANR工具来辨识伪基站频点/PCI。
4、密钥和算法
4.1 各种密钥
密钥导出函数KDF= HMAC-SHA-256 ( Key , S ),其中Key为指定的密钥,比如KASME、 KeNB、NH、CK||IK等,而S为输入参数,其构成表示为S = FC || P0 || L0 || P1 || L1 || P2 || L2 || P3 || L3 ||... || Pn || Ln,其中FC为单字节以区分不同算法,P0…Pn为输入参数编码,L0…Ln为两字节的相关P参数的长度表示。
EPS系统内的密钥层次和密钥导出函数相互之间的关系如下图(R10版本密钥架构增加了施主站点与中继站点之间的用户面的完整性保护密钥KUPint,不在本文叙述):
KASME ---接入安全管理实体密钥,由ME和AUC导出;
KeNB ---基站密钥,由ME和MME从KASME 导出或切换时导出,该密钥用于后续的涉及空口RRC信令完整性保护和加密以及和用户数据加密密钥共三个密钥 (KRRCint/KRRCenc/KUpenc )的进一步导出;
KNASint ---NAS完整性保护密钥,由ME和MME从KASME中导出;
KNASenc ---NAS加密密钥,由ME和MME从KASME中导出;
KUpenc ---用户面加密密钥,由ME和eNB从KeNB中导出;
KUPint ---用户面完整性保护密钥,由RN和DeNB从KeNB中导出;
KRRCint ---RRC完整性保护密钥,由ME和eNB从KeNB中导出;
KRRCenc ---RRC加密密钥,由ME和eNB从KeNB中导出;
中间密钥:
NH下一跳密钥由ME和MME 导出,用于前向安全;
KeNB* 星号基站密钥由ME和eNB导出,有水平或垂直导出方式。
以下为各种密钥的S输入参数的构成:
1)、HSS在生成认证向量AV时导出生成接入安全管理实体密钥KASME,并传递给MME,以用作其它密钥的导出,并且从不转发给任何一个EPC外部实体;UE在认证和密钥协商(AKA)中导出接入安全管理实体密钥KASME,输入参数S由以下构成:
-FC = 0x10,
-P0 = SN id,
-L0 = length of SN id (i.e. 0x00 0x03),
-P1 = SQN ⊕ AK
-L1 = length of SQN ⊕ AK (i.e. 0x00 0x06)
其中序列号SQN与匿名密钥AK的异或值,也即P1同时作为认证令牌AUTN的一部分(共48bit,用于UE生成SQN),在认证请求中由MME发给UE,如果AK没有使用,那么AK的值表示为000…0(6个字节)。服务网络标识SN id由3字节构成,表示为如下图:
输入密钥KEY= CK||IK
2)、导出基站密钥KeNB的输入参数S由以下构成:
-FC = 0x11,
-P0 = Uplink NAS COUNT,
-L0 = length of uplink NAS COUNT (i.e. 0x00 0x04)
输入密钥KEY= KASME
3)、导出下一跳密钥NH的输入参数S由以下构成:
-FC = 0x12
-P0 = SYNC-input
-L0 = length of SYNC-input (i.e. 0x00 0x20)
其中同步输入参数SYNC-input分为两种情况,初始第一次导出NH时采用新导出的KeNB,而后续导出NH时采用上次导出的NH值,形成NH链,也即NH每次都是新的。
输入密钥KEY= KASME
4)、导出星号基站密钥KeNB*的输入参数S由以下构成:
-FC = 0x13
-P0 = PCI (target physical cell id)
-L0 = length of PCI (i.e. 0x00 0x02)
-P1 = EARFCN-DL (target physical cell downlink frequency)
-L1 = length of EARFCN-DL (i.e. 0x00 0x02)
由于KeNB*是用于切换的,当索引号有增加时(NCC)输入密钥KEY=NH,否则输入密钥KEY=KeNB,由基站切换行为来决定。
5)、导出五种算法密钥的输入参数S由以下构成:
-FC = 0x15
-P0 = algorithm type distinguisher
-L0 = length of algorithm type distinguisher (i.e. 0x00 0x01)
-P1 = algorithm identity
-L1 = length of algorithm identity (i.e. 0x00 0x01)
算法类型区别器P0由下表定义:
算法标识(algorithm identity):
这些算法标识都是一个字节长度,有效位为低位4比特,高位4比特都设为0 (高位4比特中的低2位为将来保留使用,高2位为私有保留使用)。
若是NAS算法密钥的导出,那么输入密钥KEY= KASME;
若是UP和RRC算法密钥的导出,那么输入密钥KEY= KeNB。
6)、在由EUTRAN切换至UTRAN/GERAN时导出CK'||IK'密钥,输入参数S以下构成:
-FC = 0x16
-P0 = NAS downlink COUNT value
-L0 = length of NAS downlink COUNT value (i.e. 0x00 0x04)
输入密钥KEY= KASME
7)、在由EUTRAN重选至UTRAN/GERAN时导出NAS令牌(NAS-token),用于确认RAU信令是否源自于正确的UE,其输入参数S以下构成:
-FC = 0x17
-P0 = Uplink NAS COUNT
-L0 = length of uplink NAS COUNT (i.e. 0x00 0x04)
输入密钥KEY= KASME
8)、在由EUTRAN重选至UTRAN/GERAN时导出CK'||IK'密钥,输入参数S以下构成:
-FC = 0x1B
-P0 = NAS uplink COUNT value
-L0 = length of NAS uplink COUNT value (i.e. 0x00 0x04)
输入密钥KEY= KASME
9)、在由UTRAN/GERAN切换至EUTRAN时导出K'ASME密钥,输入参数S以下构成:
-FC = 0x18
-P0 = NONCEMME
-L0 = length of NONCEMME (i.e. 0x00 0x04)
输入密钥KEY= CK||IK
10)、在由UTRAN/GERAN重选至EUTRAN时导出K'ASME密钥,输入参数S以下构成:
-FC = 0x19
-P0 = NONCEUE
-L0 = length of the NONCEUE (i.e. 0x00 0x04)
-P1 = NONCEMME
-L1 = length of the NONCEMME (i.e. 0x00 0x04)
输入密钥KEY= CK||IK
11)、SRVCC转向CS域进行时,类似于EUTRAN切换至UTRAN/GERAN,需在LTE网导出CKSRVCC|| IKSRVCC密钥,输入参数S以下构成:
-FC = 0x1A
-P0 = NAS downlink COUNT value
-L0 = length of NAS downlink COUNT value (i.e. 0x00 0x04)
输入密钥KEY= KASME
4.2加密算法和完整性算法
EPS系统中涉及加密算法有四种分别为EEA0/EEA1/EEA2/EEA3,其中EEA0意味着没有启用加密算法,但在实际过程中还需像对待有加密算法一样,只不过有些值的输出为0。
EPS加密算法逻辑图如下:
图中发射端的密文块由明文块与密钥流块异或运算获得,而接收端的明文块则由密文块与密钥流异或运算获得。
加密算法的输入参数包括128-bit的加密密钥KEY(KNASenc/KRRCenc/KUPenc)、32-bit的COUNT、5-bit的承载标识BEARER、1-bit的传输方向DIRECTION(“0”为上行,“1”为下行)以及密钥流(KEYSTREAM)要求的长度LENGTH指示。
EEA0算法除了要求LENGTH参数外别无其他参数,且密钥流KEYSTREAM全为0
128-EEA1基于SNOW 3G,等同于UEA2
128-EEA2 基于CTR模式的128-bit AES,下面描述该算法:
CTR模式T1,T2…Ti所需的128-bit counter blocks的序列遵循以下构成:
比如T1的高位64比特包括COUNT[0] .. COUNT[31] │ BEARER[0] .. BEARER[4] │ DIRECTION │ 026 (i.e. 26 zero bits),T1的低位64比特为全0。
EPS系统中涉及完整性保护算法有四种分别为EIA0/EIA1/EIA2/EIA3,其中EIA0意味着没有启用完整性保护算法,但在实际过程中还需像对待有完整性保护算法一样,只不过有些值的输出为0,且在接收端不进行完整性验证。
EPS完整性保护算法逻辑图如下:
根据需要完整性保护的数据内容划分归属RRC/UP还是NAS层的不同,而相应的消息认证码分为MAC-I和NAS-MAC,其中MAC-I包含在PDCP层的相关字段中,而NAS-MAC则以明码方式包含在NAS消息的相关字段中。
完整性保护算法的输入参数包括128-bit的加密密钥KEY(KNASinit/KRRCint)、32-bit的COUNT、5-bit的承载标识BEARER、1-bit的传输方向DIRECTION(“0”为上行,“1”为下行)以及需要完整性保护的消息本身MESSAGE。
EIA0算法生成的32 bit MAC-I/NAS-MAC and XMAC-I/XNAS-MAC全为0,回放保护不被激活,接收端不检查收到的MAC;
128-EIA1基于SNOW 3G ,执行与UIA2同样的方式,仅有的不同点就是用BEARER[0] … BEARER[4] │ 027 (也即27个0比特) 替代FRESH [0], … FRESH [31];
128-EIA2 基于CMAC模式的128-bit AES。消息MESSAGE 的比特位长表示为BLENGTH
CMAC模式的输入是Mlen长度的比特字符串M,其结构为:
M0 .. M31 = COUNT[0] .. COUNT[31]
M32 .. M36 = BEARER[0] .. BEARER[4]
M37 = DIRECTION
M38 .. M63 = 026 (i.e. 26 zero bits)
M64 .. MBLENGTH+63 = MESSAGE[0] .. MESSAGE[BLENGTH-1]
and so Mlen = BLENGTH + 64.
CMAC模式中的高级加密安全算法AES就是利用这些输入产生出32比特的消息认证码MACT。