"""
Collection of helper functions to implement attacks.
"""
import random
from src import SomeIPPacket
[docs]def createMsg(serviceIdUsed, methodIdUsed, clientID, methodType):
"""
Create a message as part of class Message.
:param serviceIdUsed: The service id that appears in the SOME/IP Packet.
:param methodIdUsed: The method id that appears in the SOME/IP Packet.
:param clientID: The client id that appears in the SOME/IP Packet as initiating participant.
:param methodType: The method type that appears in the SOME/IP Packet.
:returns: A dictionary of strings that can be used for the Message class.
"""
message = {}
message['service'] = serviceIdUsed
message['method'] = methodIdUsed
message['client'] = clientID
message['session'] = 0x01
message['type'] = methodType
message['ret'] = SomeIPPacket.errorCodes['E_OK']
message['proto'] = SomeIPPacket.VERSION
message['iface'] = SomeIPPacket.INTERFACE
return message
[docs]def chooseRandomServer(service):
""" Choose a random server to pass the created message to. All configured server can appear here. """
servers = service['server']
serverNumUsed = random.randint(0,len(servers)-1)
serverIdUsed = servers[serverNumUsed]
return serverIdUsed
[docs]def selectVictim(victims):
""" Select a victim to attack and pepare all needed meta-data for the attack to be executed. """
victim = {}
victim['client'] = random.choice(list(victims.keys()))
config = victims[victim['client']]
services = config['service']
clientID = config['clientID']
# choose service
serviceNumUsed = random.randint(0,len(services)-1)
service = services[serviceNumUsed]
serviceIdUsed = service['id']
# choose method
methods = service['method']
methodNumUsed = random.randint(0,len(methods)-1)
method = methods[methodNumUsed]
methodIdUsed = method['id']
# choose server
victim['server'] = chooseRandomServer(service)
# putting everything together
message = createMsg(serviceIdUsed, methodIdUsed, clientID, method['type'])
victim['msg'] = message
return victim