Skip to content

Commit

Permalink
feat: Adding simulation for SMS interception
Browse files Browse the repository at this point in the history
fix: Fixing invalid RoutingIndicator that affected Double MAP bypass simulation
  • Loading branch information
AymanElSherif committed Jan 10, 2022
1 parent 81b800b commit 3b540aa
Show file tree
Hide file tree
Showing 47 changed files with 511 additions and 99 deletions.
18 changes: 9 additions & 9 deletions build/scripts/build-docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -55,26 +55,26 @@ fi

cd "${RODAN_HOME}"
# Build jSS7 stack extentions
run_command "docker run -it --rm --name stack-builder --volume $ASN_STACK_EXTENSION_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn install -Dmaven.test.skip=true -Dcheckstyle.skip"
run_command "docker run -it --rm --name stack-builder --volume $SCCP_STACK_EXTENSION_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn install -Dmaven.test.skip=true -Dcheckstyle.skip"
run_command "docker run -it --rm --name stack-builder --volume $TCAP_STACK_EXTENSION_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn install -Dmaven.test.skip=true -Dcheckstyle.skip"
run_command "docker run -it --rm --name stack-builder --volume $MAP_STACK_EXTENSION_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn install -Dmaven.test.skip=true -Dcheckstyle.skip"
run_command "docker run -it --rm --name stack-builder --volume $ASN_STACK_EXTENSION_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn clean install -Dmaven.test.skip=true -Dcheckstyle.skip"
run_command "docker run -it --rm --name stack-builder --volume $SCCP_STACK_EXTENSION_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn clean install -Dmaven.test.skip=true -Dcheckstyle.skip"
run_command "docker run -it --rm --name stack-builder --volume $TCAP_STACK_EXTENSION_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn clean install -Dmaven.test.skip=true -Dcheckstyle.skip"
run_command "docker run -it --rm --name stack-builder --volume $MAP_STACK_EXTENSION_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn clean install -Dmaven.test.skip=true -Dcheckstyle.skip"

# Build jDiameter stack extentions
run_command "docker run -it --rm --name stack-builder --volume $JDIAMETER_STACK_EXTENSION_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn install -Dmaven.test.skip=true -Dcheckstyle.skip"
run_command "docker run -it --rm --name stack-builder --volume $JDIAMETER_STACK_EXTENSION_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn clean install -Dmaven.test.skip=true -Dcheckstyle.skip"

# Build Library Module
run_command "docker run -it --rm --name rodan-builder --volume $LIBRARY_MODULE_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn install -Dmaven.test.skip=true"
run_command "docker run -it --rm --name rodan-builder --volume $LIBRARY_MODULE_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn clean install -Dmaven.test.skip=true"

# Build Connectivity Module
run_command "docker run -it --rm --name rodan-builder --volume $CONNECTIVITY_MODULE_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn install -Dmaven.test.skip=true"
run_command "docker run -it --rm --name rodan-builder --volume $CONNECTIVITY_MODULE_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn clean install -Dmaven.test.skip=true"


# Build Intruder Module
run_command "docker run -it --rm --name rodan-builder --volume $INTRUDER_MODULE_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn install -Dmaven.test.skip=true"
run_command "docker run -it --rm --name rodan-builder --volume $INTRUDER_MODULE_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn clean install -Dmaven.test.skip=true"

# Build Lab Module
run_command "docker run -it --rm --name rodan-builder --volume $LAB_MODULE_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn install -Dmaven.test.skip=true"
run_command "docker run -it --rm --name rodan-builder --volume $LAB_MODULE_PATH:/usr/src/app --volume $MAEVEN_REPO:/root/.m2 -w /usr/src/app maven:3.8.4-openjdk-17 mvn clean install -Dmaven.test.skip=true"


run_command "cd ${DOCKER_HOME}"
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.rodan.library.model.Constants;
import com.rodan.library.model.annotation.Payload;
import com.rodan.library.model.config.node.config.IntruderNodeConfig;
import com.rodan.library.model.config.node.config.LabNodeConfig;
import com.rodan.library.model.config.node.config.NodeConfig;
import com.rodan.library.model.error.ErrorCode;
import com.rodan.library.model.error.SystemException;
Expand Down Expand Up @@ -78,7 +79,10 @@ public MAPDialogCallHandling generateCarrier() throws SystemException {
var calledGtStr = StringUtils.isBlank(getTargetHlrGt()) ? getMsisdn() : getTargetHlrGt();
var calledGt = sccpFactory.createGlobalTitle(calledGtStr, TRANSLATION_TYPE, ISDN_TELEPHONY_INDICATOR,
ENCODING_SCHEME, NATURE_OF_ADDRESS);
var calledPc = Integer.valueOf(((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode().getPointCode());
var peerNode = (getNodeConfig() instanceof IntruderNodeConfig) ?
((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode() :
((LabNodeConfig) getNodeConfig()).getSs7Association().getPeerNode();
var calledPc = Integer.valueOf(peerNode.getPointCode());
var calledParty = sccpFactory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, calledGt,
calledPc, getRemoteSsn());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.rodan.library.model.Constants;
import com.rodan.library.model.annotation.Payload;
import com.rodan.library.model.config.node.config.IntruderNodeConfig;
import com.rodan.library.model.config.node.config.LabNodeConfig;
import com.rodan.library.model.config.node.config.NodeConfig;
import com.rodan.library.model.error.ErrorCode;
import com.rodan.library.model.error.SystemException;
Expand Down Expand Up @@ -80,7 +81,10 @@ public CAPDialogCircuitSwitchedCall generateCarrier() throws SystemException {
var calledGtStr = getTargetMscGt();
var calledGt = sccpFactory.createGlobalTitle(calledGtStr, TRANSLATION_TYPE, ISDN_TELEPHONY_INDICATOR,
ENCODING_SCHEME, NATURE_OF_ADDRESS);
var calledPc = Integer.valueOf(((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode().getPointCode());
var peerNode = (getNodeConfig() instanceof IntruderNodeConfig) ?
((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode() :
((LabNodeConfig) getNodeConfig()).getSs7Association().getPeerNode();
var calledPc = Integer.valueOf(peerNode.getPointCode());
var calledParty = sccpFactory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, calledGt,
calledPc, getRemoteSsn());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.rodan.library.model.Constants;
import com.rodan.library.model.annotation.Payload;
import com.rodan.library.model.config.node.config.IntruderNodeConfig;
import com.rodan.library.model.config.node.config.LabNodeConfig;
import com.rodan.library.model.config.node.config.NodeConfig;
import com.rodan.library.model.error.ErrorCode;
import com.rodan.library.model.error.SystemException;
Expand Down Expand Up @@ -89,7 +90,10 @@ public MAPDialogLsm generateCarrier() throws SystemException {
callingGt, callingPc, getLocalSsn());
var calledGt = sccpParamFactory.createGlobalTitle(getTargetMscGt(), TRANSLATION_TYPE,
ISDN_TELEPHONY_INDICATOR, ENCODING_SCHEME, NATURE_OF_ADDRESS);
var calledPc = Integer.valueOf(((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode().getPointCode());
var peerNode = (getNodeConfig() instanceof IntruderNodeConfig) ?
((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode() :
((LabNodeConfig) getNodeConfig()).getSs7Association().getPeerNode();
var calledPc = Integer.valueOf(peerNode.getPointCode());
var calledParty = sccpParamFactory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE,
calledGt, calledPc, getRemoteSsn());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.rodan.library.model.Constants;
import com.rodan.library.model.annotation.Payload;
import com.rodan.library.model.config.node.config.IntruderNodeConfig;
import com.rodan.library.model.config.node.config.LabNodeConfig;
import com.rodan.library.model.config.node.config.NodeConfig;
import com.rodan.library.model.error.ErrorCode;
import com.rodan.library.model.error.SystemException;
Expand Down Expand Up @@ -84,7 +85,10 @@ public MAPDialogLsm generateCarrier() throws SystemException {
getTargetHlrGt();
var calledGt = sccpParamFactory.createGlobalTitle(calledGtStr, TRANSLATION_TYPE, ISDN_TELEPHONY_INDICATOR,
ENCODING_SCHEME, NATURE_OF_ADDRESS);
var calledPc = Integer.valueOf(((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode().getPointCode());
var peerNode = (getNodeConfig() instanceof IntruderNodeConfig) ?
((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode() :
((LabNodeConfig) getNodeConfig()).getSs7Association().getPeerNode();
var calledPc = Integer.valueOf(peerNode.getPointCode());
var calledParty = sccpParamFactory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, calledGt,
calledPc, getRemoteSsn());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.rodan.library.model.Constants;
import com.rodan.library.model.annotation.Payload;
import com.rodan.library.model.config.node.config.IntruderNodeConfig;
import com.rodan.library.model.config.node.config.LabNodeConfig;
import com.rodan.library.model.config.node.config.NodeConfig;
import com.rodan.library.model.error.ErrorCode;
import com.rodan.library.model.error.SystemException;
Expand Down Expand Up @@ -88,7 +89,10 @@ public MAPDialogMobility generateCarrier() throws SystemException {
getTargetHlrGt();
var calledGt = sccpParamFactory.createGlobalTitle(calledGtStr, TRANSLATION_TYPE, ISDN_TELEPHONY_INDICATOR,
ENCODING_SCHEME, NATURE_OF_ADDRESS);
var calledPc = Integer.valueOf(((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode().getPointCode());
var peerNode = (getNodeConfig() instanceof IntruderNodeConfig) ?
((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode() :
((LabNodeConfig) getNodeConfig()).getSs7Association().getPeerNode();
var calledPc = Integer.valueOf(peerNode.getPointCode());
var calledParty = sccpParamFactory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, calledGt,
calledPc, getRemoteSsn());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.rodan.library.model.Constants;
import com.rodan.library.model.annotation.Payload;
import com.rodan.library.model.config.node.config.IntruderNodeConfig;
import com.rodan.library.model.config.node.config.LabNodeConfig;
import com.rodan.library.model.config.node.config.NodeConfig;
import com.rodan.library.model.error.ErrorCode;
import com.rodan.library.model.error.SystemException;
Expand All @@ -42,6 +43,7 @@
import org.mobicents.protocols.ss7.map.api.MAPApplicationContext;
import org.mobicents.protocols.ss7.map.api.MAPApplicationContextName;
import org.mobicents.protocols.ss7.map.api.MAPException;
import org.mobicents.protocols.ss7.map.api.primitives.AddressNature;
import org.mobicents.protocols.ss7.map.api.service.mobility.MAPDialogMobility;
import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.CancellationType;

Expand All @@ -52,17 +54,22 @@ public class CLPayloadWrapper extends JSs7PayloadWrapper<MapMobilityService, MAP
@Getter(AccessLevel.PRIVATE) private String targetVlrGt;
@Getter(AccessLevel.PRIVATE) private String spoofHlr;
@Getter(AccessLevel.PRIVATE) private String targetHlrGt;
@Getter(AccessLevel.PRIVATE) private CancellationType cancellationType;
@Getter(AccessLevel.PRIVATE) private String newMscGt;
@Getter(AccessLevel.PRIVATE) private String mapVersion;

@Builder
public CLPayloadWrapper(String localGt, int localSsn, int remoteSsn, NodeConfig nodeConfig, SccpAdapter sccpAdapter,
MapAdapter mapAdapter, MapDialogGenerator<MAPDialogMobility> dialogGenerator, String imsi,
String targetVlrGt, String spoofHlr, String targetHlrGt, String mapVersion) {
String targetVlrGt, String spoofHlr, String targetHlrGt, CancellationType cancellationType,
String newMscGt, String mapVersion) {
super(localGt, localSsn, remoteSsn, nodeConfig, sccpAdapter, mapAdapter, dialogGenerator);
this.imsi = imsi;
this.targetVlrGt = targetVlrGt;
this.spoofHlr = spoofHlr;
this.targetHlrGt = targetHlrGt;
this.cancellationType = cancellationType;
this.newMscGt = newMscGt;
this.mapVersion = mapVersion;
}

Expand All @@ -80,7 +87,10 @@ public MAPDialogMobility generateCarrier() throws SystemException {
callingPc, getLocalSsn());
var calledGt = sccpFactory.createGlobalTitle(getTargetVlrGt(), TRANSLATION_TYPE,
ISDN_TELEPHONY_INDICATOR, ENCODING_SCHEME, NATURE_OF_ADDRESS);
var calledPc = Integer.valueOf(((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode().getPointCode());
var peerNode = (getNodeConfig() instanceof IntruderNodeConfig) ?
((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode() :
((LabNodeConfig) getNodeConfig()).getSs7Association().getPeerNode();
var calledPc = Integer.valueOf(peerNode.getPointCode());
var calledParty = sccpFactory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, calledGt,
calledPc, getRemoteSsn());

Expand All @@ -95,10 +105,11 @@ public void addToCarrier(MAPDialogMobility dialog) throws SystemException {
var mapFactory = getMapAdapter().getParamFactory();
var imsi = mapFactory.createIMSI(getImsi());

// TODO Check CancellationType.subscriptionWithdraw
dialog.addCancelLocationRequest(imsi, null, CancellationType.updateProcedure,
null, null, false, false,
null, null, null);
var newMsc = mapFactory.createISDNAddressString(AddressNature.international_number,
org.mobicents.protocols.ss7.map.api.primitives.NumberingPlan.ISDN, newMscGt);

dialog.addCancelLocationRequest(imsi, null, cancellationType, null,
null, false, false, newMsc, null, null);

} catch (MAPException e) {
var msg = "Failed to add CL to dialog";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.rodan.library.model.Constants;
import com.rodan.library.model.annotation.Payload;
import com.rodan.library.model.config.node.config.IntruderNodeConfig;
import com.rodan.library.model.config.node.config.LabNodeConfig;
import com.rodan.library.model.config.node.config.NodeConfig;
import com.rodan.library.model.error.ErrorCode;
import com.rodan.library.model.error.SystemException;
Expand Down Expand Up @@ -83,7 +84,10 @@ public MAPDialogMobility generateCarrier() throws SystemException {
callingPc, getLocalSsn());
var calledGt = sccpFactory.createGlobalTitle(getTargetVlrGt(), TRANSLATION_TYPE,
ISDN_TELEPHONY_INDICATOR, ENCODING_SCHEME, NATURE_OF_ADDRESS);
var calledPc = Integer.valueOf(((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode().getPointCode());
var peerNode = (getNodeConfig() instanceof IntruderNodeConfig) ?
((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode() :
((LabNodeConfig) getNodeConfig()).getSs7Association().getPeerNode();
var calledPc = Integer.valueOf(peerNode.getPointCode());
var calledParty = sccpFactory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, calledGt,
calledPc, getRemoteSsn());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.rodan.library.model.Constants;
import com.rodan.library.model.annotation.Payload;
import com.rodan.library.model.config.node.config.IntruderNodeConfig;
import com.rodan.library.model.config.node.config.LabNodeConfig;
import com.rodan.library.model.config.node.config.NodeConfig;
import com.rodan.library.model.error.ErrorCode;
import com.rodan.library.model.error.SystemException;
Expand Down Expand Up @@ -126,7 +127,10 @@ public MAPDialogMobility generateCarrier() throws SystemException {
callingPc, getLocalSsn());
var calledGt = sccpFactory.createGlobalTitle(getTargetVlrGt(),
TRANSLATION_TYPE, ISDN_TELEPHONY_INDICATOR, ENCODING_SCHEME, NATURE_OF_ADDRESS);
var calledPc = Integer.valueOf(((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode().getPointCode());
var peerNode = (getNodeConfig() instanceof IntruderNodeConfig) ?
((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode() :
((LabNodeConfig) getNodeConfig()).getSs7Association().getPeerNode();
var calledPc = Integer.valueOf(peerNode.getPointCode());
var calledParty = sccpFactory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, calledGt,
calledPc, getRemoteSsn());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.rodan.library.model.Constants;
import com.rodan.library.model.annotation.Payload;
import com.rodan.library.model.config.node.config.IntruderNodeConfig;
import com.rodan.library.model.config.node.config.LabNodeConfig;
import com.rodan.library.model.config.node.config.NodeConfig;
import com.rodan.library.model.error.ErrorCode;
import com.rodan.library.model.error.SystemException;
Expand Down Expand Up @@ -76,7 +77,10 @@ public MAPDialogMobility generateCarrier() throws SystemException {
callingGt, callingPc, getLocalSsn());
var calledGt = sccpParamFactory.createGlobalTitle(getTargetVlrGt(), TRANSLATION_TYPE,
ISDN_TELEPHONY_INDICATOR, ENCODING_SCHEME, NATURE_OF_ADDRESS);
var calledPc = Integer.valueOf(((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode().getPointCode());
var peerNode = (getNodeConfig() instanceof IntruderNodeConfig) ?
((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode() :
((LabNodeConfig) getNodeConfig()).getSs7Association().getPeerNode();
var calledPc = Integer.valueOf(peerNode.getPointCode());
var calledParty = sccpParamFactory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE,
calledGt, calledPc, getRemoteSsn());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.rodan.library.model.Constants;
import com.rodan.library.model.annotation.Payload;
import com.rodan.library.model.config.node.config.IntruderNodeConfig;
import com.rodan.library.model.config.node.config.LabNodeConfig;
import com.rodan.library.model.config.node.config.NodeConfig;
import com.rodan.library.model.error.ErrorCode;
import com.rodan.library.model.error.SystemException;
Expand Down Expand Up @@ -87,7 +88,10 @@ public MAPDialogMobility generateCarrier() throws SystemException {
getTargetHlrGt();
var calledGt = sccpFactory.createGlobalTitle(calledGtStr, TRANSLATION_TYPE, ISDN_TELEPHONY_INDICATOR,
ENCODING_SCHEME, NATURE_OF_ADDRESS);
var calledPc = Integer.valueOf(((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode().getPointCode());
var peerNode = (getNodeConfig() instanceof IntruderNodeConfig) ?
((IntruderNodeConfig) getNodeConfig()).getSs7Association().getPeerNode() :
((LabNodeConfig) getNodeConfig()).getSs7Association().getPeerNode();
var calledPc = Integer.valueOf(peerNode.getPointCode());
var calledParty = sccpFactory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, calledGt,
calledPc, getRemoteSsn());

Expand Down
Loading

0 comments on commit 3b540aa

Please sign in to comment.