2017-07-25 187 views
0

我使用openWrt上的freeradius-server来获得SIM IMSI。因为我确实有一些sim值(rand,sres,kc),所以我改变了源代码使用假值。它可以被成功验证。但在4次握手的过程中,它失败了!它只是一次握手。openWrt上的freeradius 4次握手失败?

我用wireshark捕获了一些包,任何人都可以帮我分析原因或者有更好的方法来获得imsi openWrt

EAP-SIM身份验证过程

eap-sim authenticate process

握手1 4

handshake 1 of 4

回答

1

的我找到了原因! 开始时,我没有模拟值(RAND,sres,kc),所以我创建了一些假值。该代码需要正确MSK值建立PMK包,像这样的:

static int eap_sim_sendsuccess(EAP_HANDLER *handler) 
{ 
    unsigned char *p; 
    struct eap_sim_server_state *ess; 
    VALUE_PAIR **outvps; 
    VALUE_PAIR *newvp; 

    /* outvps is the data to the client. */ 
    outvps= &handler->request->reply->vps; 
    ess = (struct eap_sim_server_state *)handler->opaque; 

    /* set the EAP_ID - new value */ 
    newvp = paircreate(ATTRIBUTE_EAP_ID, PW_TYPE_INTEGER); 
    newvp->vp_integer = ess->sim_id++; 
    pairreplace(outvps, newvp); 

    p = ess->keys.msk; //**look here**! 
    add_reply(outvps, "MS-MPPE-Recv-Key", p, EAPTLS_MPPE_KEY_LEN); 
    p += EAPTLS_MPPE_KEY_LEN; 
    add_reply(outvps, "MS-MPPE-Send-Key", p, EAPTLS_MPPE_KEY_LEN); 
    return 1; 
} 

所以,它建立了一个错误的PMK包。手机收到了1/4握手并将其放下。