Home | History | Annotate | Download | only in contrib
      1 % Ikev2 Tests
      2 * Tests for the Ikev2 layer
      3 
      4 + Basic Layer Tests
      5 
      6 = Ikev2 build
      7 
      8 a = IKEv2()
      9 assert raw(a) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c'
     10 
     11 = Ikev2 dissection
     12 
     13 a = IKEv2(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00! \x00\x00\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x14\x00\x00\x00\x10\x01\x01\x00\x00\x00\x00\x00\x08\x02\x00\x00\x03")
     14 assert a[IKEv2_payload_Transform].transform_type == 2
     15 assert a[IKEv2_payload_Transform].transform_id == 3
     16 assert a.next_payload == 33
     17 assert a[IKEv2_payload_SA].next_payload == 0
     18 assert a[IKEv2_payload_Proposal].next_payload == 0
     19 assert a[IKEv2_payload_Proposal].proposal == 1
     20 assert a[IKEv2_payload_Transform].next_payload == 0
     21 a[IKEv2_payload_Transform].show()
     22 
     23 
     24 = Build Ikev2 SA request packet
     25 
     26 a = IKEv2(init_SPI="MySPI",exch_type=34)/IKEv2_payload_SA(prop=IKEv2_payload_Proposal())
     27 assert raw(a) == b'MySPI\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00! "\x00\x00\x00\x00\x00\x00\x00\x00(\x00\x00\x00\x0c\x00\x00\x00\x08\x01\x01\x00\x00'
     28 
     29 
     30 ## packets taken from
     31 ## https://github.com/wireshark/wireshark/blob/master/test/captures/ikev2-decrypt-aes128ccm12.pcap
     32 
     33 = Dissect Initiator Request
     34 
     35 a = Ether(b'\x00!k\x91#H\xb8\'\xeb\xa6XI\x08\x00E\x00\x01\x14u\xc2@\x00@\x11@\xb6\xc0\xa8\x01\x02\xc0\xa8\x01\x0e\x01\xf4\x01\xf4\x01\x00=8\xeahM!Yz\xfd6\x00\x00\x00\x00\x00\x00\x00\x00! "\x08\x00\x00\x00\x00\x00\x00\x00\xf8"\x00\x00(\x00\x00\x00$\x01\x01\x00\x03\x03\x00\x00\x0c\x01\x00\x00\x0f\x80\x0e\x00\x80\x03\x00\x00\x08\x02\x00\x00\x05\x00\x00\x00\x08\x04\x00\x00\x13(\x00\x00H\x00\x13\x00\x002\xc6\xdf\xfe\\C\xb0\xd5\x81\x1f~\xaa\xa8L\x9fx\xbf\x99\xb9\x06\x9c+\x07.\x0b\x82\xf4k\xf6\xf6m\xd4_\x97\xef\x89\xee(_\xd5\xdfRzDwkR\x9f\xc9\xd8\xa9\t\xd8B\xa6\xfbY\xb9j\tS\x95ar)\x00\x00$\xb6UF-oKf\xf8r\xcc\xd7\xf0\xf4\xb4\x85w2\x92\x139\xcb\xaaR7\xed\xba$O&+h#)\x00\x00\x1c\x00\x00@\x04\x94\x9c\x9d\xb5s\x9du\xa9t\xa4\x9c\x18F\x186\x9b4\xb7\xf9B)\x00\x00\x1c\x00\x00@\x05>r\x1bF\xbe\x07\xd51\x11B]\x7f\x80\xd2\xc6\xe2 \xc6\x07.\x00\x00\x00\x10\x00\x00@/\x00\x01\x00\x02\x00\x03\x00\x04')
     36 assert a[IKEv2_payload_SA].prop.trans.transform_id == 15
     37 assert a[IKEv2_payload_Notify].next_payload == 41
     38 assert IP(a[IKEv2_payload_Notify].load).src == "70.24.54.155"
     39 assert IP(a[IKEv2_payload_Notify].payload.load).dst == "32.198.7.46"
     40 
     41 = Dissect Responder Response
     42 
     43 b = Ether(b'\xb8\'\xeb\xa6XI\x00!k\x91#H\x08\x00E\x00\x01\x0c\xd2R@\x00@\x11\xe4-\xc0\xa8\x01\x0e\xc0\xa8\x01\x02\x01\xf4\x01\xf4\x00\xf8\x07\xdd\xeahM!Yz\xfd6\xd9\xfe*\xb2-\xac#\xac! " \x00\x00\x00\x00\x00\x00\x00\xf0"\x00\x00(\x00\x00\x00$\x01\x01\x00\x03\x03\x00\x00\x0c\x01\x00\x00\x0f\x80\x0e\x00\x80\x03\x00\x00\x08\x02\x00\x00\x05\x00\x00\x00\x08\x04\x00\x00\x13(\x00\x00H\x00\x13\x00\x00,f\xbe\xad\xb6\xce\x855\xd6!\x8c\xb4\x01\xaaZ\x1e\xb4\x03[\x97\xca\xdd\xaf67J\x97\x9c\x04F\xb8\x80\x05\x06\xbf\x9do\x95\tR2k\xf3\x01\x19\x13\xda\x93\xbb\x8e@\xf8\x157k\xe1\xa0h\x01\xc0\xa6>;T)\x00\x00$\x9e]&sy\xe6\x81\xe7\xd3\x8d\x81\xc7\x10\xd3\x83@\x1d\xe7\xe3`{\x92m\x90\xa9\x95\x8a\xdc\xb5(1\xaa)\x00\x00\x1c\x00\x00@\x04z\x07\x85\'=Y 8)\xa6\x97U\x0f1\xcb\xb9N\xb7+C)\x00\x00\x1c\x00\x00@\x05\xc3\xe5\x8a\x8c\xc9\x93<\xe0\xb7\x8f*P\xe8\xde\x80\x13N\x12\xce1\x00\x00\x00\x08\x00\x00@\x14')
     44 assert b[UDP].dport == 500
     45 assert b[IKEv2_payload_KE].load == b',f\xbe\xad\xb6\xce\x855\xd6!\x8c\xb4\x01\xaaZ\x1e\xb4\x03[\x97\xca\xdd\xaf67J\x97\x9c\x04F\xb8\x80\x05\x06\xbf\x9do\x95\tR2k\xf3\x01\x19\x13\xda\x93\xbb\x8e@\xf8\x157k\xe1\xa0h\x01\xc0\xa6>;T'
     46 assert b[IKEv2_payload_Nonce].payload.type == 16388
     47 assert b[IKEv2_payload_Nonce].payload.payload.payload.next_payload == 0
     48 
     49 = Dissect Encrypted Inititor Request
     50 
     51 a = Ether(b"\x00!k\x91#H\xb8'\xeb\xa6XI\x08\x00E\x00\x00Yu\xe2@\x00@\x11AQ\xc0\xa8\x01\x02\xc0\xa8\x01\x0e\x01\xf4\x01\xf4\x00E}\xe0\xeahM!Yz\xfd6\xd9\xfe*\xb2-\xac#\xac. %\x08\x00\x00\x00\x02\x00\x00\x00=*\x00\x00!\xcc\xa0\xb3]\xe5\xab\xc5\x1c\x99\x87\xcb\xf1\xf5\xec\xff!\x0e\xb7g\xcd\xb8Qy8;\x96Mx\xe2")
     52 assert a[IKEv2_payload_Encrypted].next_payload == 42
     53 assert a[IKEv2_payload_Encrypted].load == b'\xcc\xa0\xb3]\xe5\xab\xc5\x1c\x99\x87\xcb\xf1\xf5\xec\xff!\x0e\xb7g\xcd\xb8Qy8;\x96Mx\xe2'
     54 
     55 = Dissect Encrypted Responder Response
     56 
     57 b = Ether(b"\xb8'\xeb\xa6XI\x00!k\x91#H\x08\x00E\x00\x00Q\xd5y@\x00@\x11\xe1\xc1\xc0\xa8\x01\x0e\xc0\xa8\x01\x02\x01\xf4\x01\xf4\x00=\xf9F\xeahM!Yz\xfd6\xd9\xfe*\xb2-\xac#\xac. % \x00\x00\x00\x02\x00\x00\x005\x00\x00\x00\x19\xa8\x0c\x95{\xac\x15\xc3\xf8\xaf\xdf1Z\x81\xccK|@\xe8f\rD")
     58 assert b[IKEv2].init_SPI == b'\xeahM!Yz\xfd6'
     59 assert b[IKEv2].resp_SPI == b'\xd9\xfe*\xb2-\xac#\xac'
     60 assert b[IKEv2].next_payload == 46
     61 assert b[IKEv2_payload_Encrypted].load == b'\xa8\x0c\x95{\xac\x15\xc3\xf8\xaf\xdf1Z\x81\xccK|@\xe8f\rD'
     62 
     63 = Test Certs detection
     64 
     65 a = IKEv2_payload_CERT(raw(IKEv2_payload_CERT_CRL()))
     66 b = IKEv2_payload_CERT(raw(IKEv2_payload_CERT_STR()))
     67 c = IKEv2_payload_CERT(raw(IKEv2_payload_CERT_CRT()))
     68 
     69 assert isinstance(a, IKEv2_payload_CERT_CRL)
     70 assert isinstance(b, IKEv2_payload_CERT_STR)
     71 assert isinstance(c, IKEv2_payload_CERT_CRT)
     72 
     73 = Test TrafficSelector detection
     74 
     75 a = TrafficSelector(raw(IPv4TrafficSelector()))
     76 b = TrafficSelector(raw(IPv6TrafficSelector()))
     77 c = TrafficSelector(raw(EncryptedTrafficSelector()))
     78 
     79 assert isinstance(a, IPv4TrafficSelector)
     80 assert isinstance(b, IPv6TrafficSelector)
     81 assert isinstance(c, EncryptedTrafficSelector)
     82 
     83 = IKEv2_payload_Encrypted_Fragment, simple tests
     84 
     85 s = b"\x00\x00\x00\x08\x00\x01\x00\x01"
     86 assert raw(IKEv2_payload_Encrypted_Fragment()) == s
     87 
     88 p = IKEv2_payload_Encrypted_Fragment(s)
     89 assert p.length == 8 and p.frag_number == 1
     90