diff --git a/LibOneM2M/OneM2M_Pics.ttcn b/LibOneM2M/OneM2M_Pics.ttcn index ddde51f09735477fe5fd97c0f8270fe723b27fcc..25df247b325a658e96e0d94d994e669b17ef42e4 100644 --- a/LibOneM2M/OneM2M_Pics.ttcn +++ b/LibOneM2M/OneM2M_Pics.ttcn @@ -31,10 +31,10 @@ module OneM2M_Pics { /** * @desc End-to-End Certificate-based Key Establishment Procedure support - * @see oneM2M TS-0003 + * @see oneM2M TS-0003 Clause 8.2.2.2 */ modulepar boolean PICS_ESC_SUPPORT := true; - + /** * @desc Dynamic Authorization resource support * @see oneM2M TS-0017 A.5.6.53 diff --git a/OneM2M_Testcases_CSE_Release_4.ttcn b/OneM2M_Testcases_CSE_Release_4.ttcn index aa72a793aefb732e8a7f5135d7828f6139dcfe17..7581152c305032444da83292a7d60cc2c568a548 100644 --- a/OneM2M_Testcases_CSE_Release_4.ttcn +++ b/OneM2M_Testcases_CSE_Release_4.ttcn @@ -1,14 +1,14 @@ /** - * Copyright Notification - * No part of this document may be reproduced, in an electronic retrieval system or otherwise, except as authorized by written permission. - * The copyright and the foregoing restriction extend to reproduction in all media. - * © 2016, oneM2M Partners Type 1 (ARIB, ATIS, CCSA, ETSI, TIA, TSDSI, TTA, TTC). - * All rights reserved. - * - * @author ETSI - * @version $URL: https://oldforge.etsi.org/svn/oneM2M/branches/Release1/ttcn/OneM2M_Testcases.ttcn $ - * $Id: OneM2M_Testcases.ttcn 347 2017-08-11 08:48:20Z reinaortega $ - * @desc Module containing test cases for oneM2M + * Copyright Notification + * No part of this document may be reproduced, in an electronic retrieval system or otherwise, except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * © 2016, oneM2M Partners Type 1 (ARIB, ATIS, CCSA, ETSI, TIA, TSDSI, TTA, TTC). + * All rights reserved. + * + * @author ETSI + * @version $URL: https://oldforge.etsi.org/svn/oneM2M/branches/Release1/ttcn/OneM2M_Testcases.ttcn $ + * $Id: OneM2M_Testcases.ttcn 347 2017-08-11 08:48:20Z reinaortega $ + * @desc Module containing test cases for oneM2M * */ module OneM2M_Testcases_CSE_Release_4 { @@ -36,12 +36,12 @@ module OneM2M_Testcases_CSE_Release_4 { var RequestPrimitive v_request; map(self:mcaPort, system:mcaPort) param (PX_TS_AE1.mcaPort); - for (i:=0; i<lengthof(PX_RESOURCES_TO_BE_DELETED); i:= i+1) { + for (i:=0; i<lengthof(PX_RESOURCES_TO_BE_DELETED); i:= i+1) { v_resourceAddress := f_getResourceAddress() & "/" & PX_RESOURCES_TO_BE_DELETED[i]; v_request := valueof(m_delete(v_resourceAddress, PX_SUPER_AE_ID)); - + f_send(e_mcaPort, m_request(v_request)); t_ac.start; @@ -97,7 +97,7 @@ module OneM2M_Testcases_CSE_Release_4 { group Registration { - + }//end Registration group Data_Management_and_Repository { @@ -384,7 +384,7 @@ module OneM2M_Testcases_CSE_Release_4 { group Update { group g_CSE_DMR_UPD_015{ - + /** * @desc Check that the IUT updates successfully the value of the optional attribute OPTIONAL_ATTRIBUTE of the RESOURCE_TYPE resource under CSEBase */ @@ -415,10 +415,10 @@ module OneM2M_Testcases_CSE_Release_4 { v_primitiveContentRetrieveResource := f_getPrimitiveContentRetrievedResource(v_ae1); //Check that the resource has been udpated correctly - if(ischosen(v_primitiveContentRetrieveResource.node)) { - if(v_primitiveContentRetrieveResource.node.labels != v_labels){ + if(ischosen(v_primitiveContentRetrieveResource.node)) { + if(v_primitiveContentRetrieveResource.node.labels != v_labels){ setverdict(fail, __SCOPE__ & ": Error: Labels attribute not updated correctly") - } + } } } } @@ -452,10 +452,10 @@ module OneM2M_Testcases_CSE_Release_4 { v_primitiveContentRetrieveResource := f_getPrimitiveContentRetrievedResource(v_ae1); //Check that the resource has been udpated correctly - if(ischosen(v_primitiveContentRetrieveResource.node)) { - if(v_primitiveContentRetrieveResource.node.accessControlPolicyIDs != valueof(v_updateRequestPrimitive.primitiveContent.node.accessControlPolicyIDs)){ + if(ischosen(v_primitiveContentRetrieveResource.node)) { + if(v_primitiveContentRetrieveResource.node.accessControlPolicyIDs != valueof(v_updateRequestPrimitive.primitiveContent.node.accessControlPolicyIDs)){ setverdict(fail, __SCOPE__ & ": Error: Access Control Policy attribute not updated correctly") - } + } } } } @@ -466,9 +466,9 @@ module OneM2M_Testcases_CSE_Release_4 { } } // end group g_CSE_DMR_UPD_015 - + group g_CSE_DMR_UPD_016 { - + /** * @desc Check that the IUT updates successfully the value of the attribute MANDATORY_ATTRIBUTE of the RESOURCE_TYPE resource under CSEBase */ @@ -498,12 +498,12 @@ module OneM2M_Testcases_CSE_Release_4 { } v_primitiveContentRetrieveResource := f_getPrimitiveContentRetrievedResource(v_ae1); - //Check that the resource has been udpated correctly - if(ischosen(v_primitiveContentRetrieveResource.node)) { + //Check that the resource has been udpated correctly + if(ischosen(v_primitiveContentRetrieveResource.node)) { if(v_primitiveContentRetrieveResource.node.expirationTime != v_expirationTime){ - setverdict(fail, __SCOPE__ & ": Error: Expiration time attribute not updated correctly") + setverdict(fail, __SCOPE__ & ": Error: Expiration time attribute not updated correctly") + } } - } } } @@ -535,9 +535,9 @@ module OneM2M_Testcases_CSE_Release_4 { //Check that the resource has been udpated correctly if(ischosen(v_primitiveContentRetrieveResource.node)) { - if(v_primitiveContentRetrieveResource.node.nodeID != v_targetId){ + if(v_primitiveContentRetrieveResource.node.nodeID != v_targetId){ setverdict(fail, __SCOPE__ & ": Error: NodeID attribute not updated correctly") - } + } } } } @@ -575,67 +575,394 @@ module OneM2M_Testcases_CSE_Release_4 { group Security { - group ESPrim { + group authentication { - group Notify{ - - - }//end group Notify - - }//end group ESPrim - - group Role_Based_Access_Control { + group ESPrim { + + group Notify{ + + + }//end group Notify + + }//end group ESPrim - group Create{ + group Role_Based_Access_Control { // TODO To be moved to authorization group + + group Create{ + + }//end group Create + + group Retrieve { - }//end group Create - - group Retrieve { + }// end of group Retrieve - }// end of group Retrieve - - group Update { + group Update { + + }//end group Update - }//end group Update - - group Notify { - - }//end group Notify - - }//end group Role_Based_Access_Control + group Notify { - group ESCertKE { - - group Notify { - - }// end of group Notify - - }// end of group ESCertKE + }//end group Notify + + }//end group Role_Based_Access_Control + + group ESCertKE { + + group Notify { - group Access_Control_Policy { - - }//end group AccessControlPolicy - - group Impersonation_Prevention { + }// end of group Notify + + }// end of group ESCertKE + + group Access_Control_Policy { // TODO To be moved to authorization group + + }//end group AccessControlPolicy - }//end group Impersonation_Prevention + } // End of group authentication - group Dynamic_Authorization { + group authorization { - }//end group Dynamic_Authorization + group Impersonation_Prevention { + + group Create { - group Indirect_Dynamic_Authorization { - - }//end group Indirect_Dynamic_Authorization + /** + * @desc Check that the IUT processes properly AE Impersonation attacks + */ + testcase TC_CSE_SEC_IP_CRE_001() runs on Tester system CseSystem { + + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_SEC_IP_CRE_001()); + + v_ae1.done; + + } + + function f_CSE_SEC_IP_CRE_001() runs on AeSimu system CseSystem { + // Local variables + var integer v_aeIndex := -1; + var integer v_acpIndex := -1; + var integer v_groupIndex := -1; + var XSD.ID v_ae1ResourceId; + var template RequestPrimitive v_groupRequest := m_createGroup(1, -, omit, int2, -, -, -); + var template RequestPrimitive v_createRequest := valueof(m_createAcpBase); + + // Test control + if (not PICS_ESC_SUPPORT) { + setverdict(inconc, __SCOPE__ & ": End-to-End Certificate-based Key Establishment Procedure support is required to run this test case"); + stop; + } + + // Test component configuration + f_cf03Up(); + + // Test adapter configuration + + // Preamble + // FIXME Security association establishment may be performed using AE1, E.g. TLS using AE1_ID + + v_aeIndex := f_cse_preamble_registerAe(-, -); + + vc_ae1.start(f_cse_createResource(int2, m_createAe(PX_TS_AE1.appId, -, PX_TS_AE1.aeIdStem, c_defaultAe1ResourceName, omit), -1)); // AE1 is registred + f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae1); + + v_ae1ResourceId := f_getLatestResourceAddress(vc_ae1, e_nonHierarchical, e_cseRelative); + + v_groupRequest.primitiveContent.group_.memberIDs := {v_ae1ResourceId}; + + v_groupIndex := f_cse_createResource(int9, v_groupRequest, v_aeIndex); + + v_createRequest := m_createAcp(-, {f_getResourceId(vc_resourcesList[v_groupIndex].resource)} , -); + + // Test Body + v_createRequest := f_getCreateRequestPrimitive(int1, v_createRequest, v_aeIndex); + // Alter the 'From' field using AE identifier different that AE1_ID + v_createRequest.from_ := PX_TS_AE2.appId; + + f_send(e_mcaPort, m_request(valueof(v_createRequest))); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int4106))) -> value vc_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": AE impersonation attack detected"); + } + [] mcaPort.receive(mw_response) -> value vc_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while creating resource"); + } + } + + //Postamble + f_cse_postamble_deleteResources(); + + //Tear down + f_cf03Down(); + + }//end TC_CSE_SEC_IP_CRE_001 + + }// end of group Create + + group Retrieve { - group Json_Web_Token { - - }//end group Json_Web_Token + /** + * @desc Check that the IUT processes properly AE Impersonation attacks + */ + testcase TC_CSE_SEC_IP_RET_001() runs on Tester system CseSystem { + + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_SEC_IP_RET_001()); + + v_ae1.done; + + } + + function f_CSE_SEC_IP_RET_001() runs on AeSimu system CseSystem { + // Local variables + var integer v_aeIndex := -1; + var integer v_acpIndex := -1; + var integer v_groupIndex := -1; + var XSD.ID v_parentIndex; + var XSD.ID v_resourceIndex; + var template RequestPrimitive v_request := valueof(m_retrieve); + + // Test control + if (not PICS_ESC_SUPPORT) { + setverdict(inconc, __SCOPE__ & ": End-to-End Certificate-based Key Establishment Procedure support is required to run this test case"); + stop; + } + + // Test component configuration + f_cf03Up(); + + // Test adapter configuration + + // Preamble + // FIXME Security association establishment may be performed using AE1, E.g. TLS using AE1_ID + + f_cse_createAccessControlPolicyAux(); + + v_aeIndex := f_cse_createResource_withAcpAux(int2, m_createAe(vc_aeSimuDesc.appId, -, vc_aeSimuDesc.aeIdStem, c_defaultAe1ResourceName, {f_getCompletePoA(vc_aeSimuDesc.mcaPortIn, "")}), -1); // AE1 is registred + + v_parentIndex := f_cse_createResource(int3, m_createContainerBase, v_aeIndex); + + v_resourceIndex := f_cse_createResource(int4, m_createContainerBase, v_parentIndex); + + // Test Body + v_request := m_retrieve(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex)); + // Alter the 'From' field using AE identifier different that AE1_ID + v_request.from_ := PX_TS_AE2.appId; + + f_send(e_mcaPort, m_request(valueof(v_request))); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int4106))) -> value vc_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": AE impersonation attack detected"); + } + [] mcaPort.receive(mw_response) -> value vc_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while creating resource"); + } + } + + //Postamble + f_cse_postamble_deleteResources(); + + //Tear down + f_cf03Down(); + + }//end TC_CSE_SEC_IP_RET_001 + + }// end of group Retrieve + + group Update { - group Distributed_Authorization { - - }//end group Distributed_Authorization + /** + * @desc Check that the IUT processes properly AE Impersonation attacks + */ + testcase TC_CSE_SEC_IP_UPD_001() runs on Tester system CseSystem { + + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_SEC_IP_UPD_001()); + + v_ae1.done; + + } + + function f_CSE_SEC_IP_UPD_001() runs on AeSimu system CseSystem { + // Local variables + var integer v_aeIndex := -1; + var integer v_acpIndex := -1; + var integer v_groupIndex := -1; + var XSD.ID v_parentIndex; + var XSD.ID v_resourceIndex; + var template RequestPrimitive v_update := valueof(m_update); + + // Test control + if (not PICS_ESC_SUPPORT) { + setverdict(inconc, __SCOPE__ & ": End-to-End Certificate-based Key Establishment Procedure support is required to run this test case"); + stop; + } + + // Test component configuration + f_cf03Up(); + + // Test adapter configuration + + // Preamble + // FIXME Security association establishment may be performed using AE1, E.g. TLS using AE1_ID + + f_cse_createAccessControlPolicyAux(); + + v_aeIndex := f_cse_createResource_withAcpAux(int2, m_createAe(vc_aeSimuDesc.appId, -, vc_aeSimuDesc.aeIdStem, c_defaultAe1ResourceName, {f_getCompletePoA(vc_aeSimuDesc.mcaPortIn, "")}), -1); // AE1 is registred + + v_parentIndex := f_cse_createResource(int3, m_createContainerBase, v_aeIndex); + + v_resourceIndex := f_cse_createResource(int4, m_createContainerBase, v_parentIndex); + + // Test Body + v_update := m_update(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex)); + // Alter the 'From' field using AE identifier different that AE1_ID + v_update.from_ := PX_TS_AE2.appId; + + f_send(e_mcaPort, m_request(valueof(v_update))); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int4106))) -> value vc_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": AE impersonation attack detected"); + } + [] mcaPort.receive(mw_response) -> value vc_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while creating resource"); + } + } + + //Postamble + f_cse_postamble_deleteResources(); + + //Tear down + f_cf03Down(); + + }//end TC_CSE_SEC_IP_UPD_001 + + }// end of group Update + + group Delete { + /** + * @desc Check that the IUT processes properly AE Impersonation attacks + */ + testcase TC_CSE_SEC_IP_DEL_001() runs on Tester system CseSystem { + + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_SEC_IP_DEL_001()); + + v_ae1.done; + + } + + function f_CSE_SEC_IP_DEL_001() runs on AeSimu system CseSystem { + // Local variables + var integer v_aeIndex := -1; + var XSD.ID v_parentIndex; + var XSD.ID v_resourceIndex; + var template RequestPrimitive v_delete := valueof(m_delete); + + // Test control + if (not PICS_ESC_SUPPORT) { + setverdict(inconc, __SCOPE__ & ": End-to-End Certificate-based Key Establishment Procedure support is required to run this test case"); + stop; + } + + // Test component configuration + f_cf03Up(); + + // Test adapter configuration + + // Preamble + // FIXME Security association establishment may be performed using AE1, E.g. TLS using AE1_ID + + f_cse_createAccessControlPolicyAux(); + + v_aeIndex := f_cse_createResource_withAcpAux(int2, m_createAe(vc_aeSimuDesc.appId, -, vc_aeSimuDesc.aeIdStem, c_defaultAe1ResourceName, {f_getCompletePoA(vc_aeSimuDesc.mcaPortIn, "")}), -1); // AE1 is registred + + v_parentIndex := f_cse_createResource(int3, m_createContainerBase, v_aeIndex); + + v_resourceIndex := f_cse_createResource(int4, m_createContainerBase, v_parentIndex); + + // Test Body + v_delete := m_delete(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex)); + // Alter the 'From' field using AE identifier different that AE1_ID + v_delete.from_ := PX_TS_AE2.appId; + + f_send(e_mcaPort, m_request(valueof(v_delete))); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int4106))) -> value vc_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": AE impersonation attack detected"); + } + [] mcaPort.receive(mw_response) -> value vc_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while creating resource"); + } + } + + //Postamble + f_cse_postamble_deleteResources(); + + //Tear down + f_cf03Down(); + + }//end TC_CSE_SEC_IP_DEL_001 + + }// end of group Delete + + }//end group Impersonation_Prevention + + group Dynamic_Authorization { + + group Direct_Dynamic_Authorization { + + }//end group DirectDynamic_Authorization + + group Indirect_Dynamic_Authorization { + + }//end group IndirectDynamic_Authorization + + }//end group Dynamic_Authorization + + group Indirect_Dynamic_Authorization { + + }//end group Indirect_Dynamic_Authorization + + group Json_Web_Token { + + }//end group Json_Web_Token + + group Distributed_Authorization { + + }//end group Distributed_Authorization + + } // End of group authorization + }//end group Security group Device_Management {