Skip to content

Commit faaf558

Browse files
authored
Merge pull request #530 from Nizernizer/fix/property-disabled-features
fix: add property "disabled_features".
2 parents 06b1088 + 1713cf4 commit faaf558

File tree

6 files changed

+52
-26
lines changed

6 files changed

+52
-26
lines changed

dongtai-agent/src/main/java/io/dongtai/iast/agent/Agent.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ private static String[] parseAgentArgs(String[] args) throws ParseException {
3939
attachOptions.addOption(build("log_path", "log_path", "optional: DongTai agent log print path."));
4040
attachOptions.addOption(build("log_disable_collector", "log_disable_collector", "optional: DongTai agent disable log collector."));
4141
attachOptions.addOption(build("disabled_plugins", "disabled_plugins", "optional: DongTai agent disable plugins."));
42+
attachOptions.addOption(build("disabled_features", "disabled_features", "optional: DongTai agent disable features."));
4243

4344
CommandLineParser parser = new DefaultParser();
4445
HelpFormatter formatter = new HelpFormatter();

dongtai-agent/src/main/java/io/dongtai/iast/agent/IastProperties.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class IastProperties {
3434
put("log_disable_collector", PropertyConstant.PROPERTY_LOG_DISABLE_COLLECTOR);
3535
put("uuid_path", PropertyConstant.PROPERTY_UUID_PATH);
3636
put("disabled_plugins", PropertyConstant.PROPERTY_DISABLED_PLUGINS);
37+
put("disabled_features", PropertyConstant.PROPERTY_DISABLED_FEATURES);
3738
}};
3839

3940
private static IastProperties instance;

dongtai-common/src/main/java/io/dongtai/iast/common/constants/PropertyConstant.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ public class PropertyConstant {
2525
public static final String PROPERTY_JAR_API_URL = "iast.jar.api.url";
2626
public static final String PROPERTY_LOG_ADDRESS = "dongtai.log.address";
2727
public static final String PROPERTY_LOG_PORT = "dongtai.log.port";
28-
public static final String PROPERTY_FALLBACK_VERSION = "dongtai.fallback.version";
2928
public static final String PROPERTY_DUMP_CLASS_PATH = "iast.dump.class.path";
3029
public static final String PROPERTY_DUMP_CLASS_ENABLE = "iast.dump.class.enable";
3130
public static final String PROPERTY_SERVICE_HEARTBEAT_INTERVAL = "iast.service.heartbeat.interval";
3231
public static final String PROPERTY_RESPONSE_LENGTH = "dongtai.response.length";
3332
public static final String PROPERTY_POLICY_PATH = "dongtai.policy.path";
3433
public static final String PROPERTY_UUID_PATH = "dongtai.uuid.path";
3534
public static final String PROPERTY_DISABLED_PLUGINS = "dongtai.disabled.plugins";
35+
public static final String PROPERTY_DISABLED_FEATURES = "dongtai.disabled_features";
3636
}

dongtai-core/src/main/java/io/dongtai/iast/core/bytecode/enhance/plugin/PluginRegister.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.dongtai.iast.core.bytecode.enhance.plugin.spring.DispatchApiCollector;
1313
import io.dongtai.iast.core.handler.hookpoint.models.policy.Policy;
1414
import io.dongtai.iast.core.handler.hookpoint.models.policy.PolicyManager;
15+
import io.dongtai.iast.core.utils.PropertyUtils;
1516
import org.objectweb.asm.ClassVisitor;
1617

1718
import java.util.*;
@@ -28,7 +29,7 @@ public class PluginRegister {
2829

2930
public PluginRegister() {
3031
this.plugins = new ArrayList<>();
31-
List<String> disabledPlugins = getdisabledPlugins();
32+
List<String> disabledPlugins = PropertyUtils.getDisabledPlugins();
3233
List<DispatchPlugin> allPlugins = new ArrayList<>(Arrays.asList(
3334
new DispatchApiCollector(),
3435
new DispatchJ2ee(),
@@ -43,12 +44,6 @@ public PluginRegister() {
4344
this.plugins.add(new DispatchClassPlugin());
4445
}
4546

46-
private List<String> getdisabledPlugins() {
47-
return Optional.ofNullable(System.getProperty("dongtai.disabled.plugins"))
48-
.map(s -> Arrays.asList(s.split(",")))
49-
.orElse(null);
50-
}
51-
5247
public ClassVisitor initial(ClassVisitor classVisitor, ClassContext context, PolicyManager policyManager) {
5348
Policy policy = policyManager.getPolicy();
5449
if (policy == null) {

dongtai-core/src/main/java/io/dongtai/iast/core/utils/PropertyUtils.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import java.io.File;
88
import java.io.FileInputStream;
9-
import java.util.Properties;
9+
import java.util.*;
1010

1111
/**
1212
@@ -28,6 +28,8 @@ public class PropertyUtils {
2828
private String debugFlag;
2929
private Integer responseLength;
3030
private String policyPath;
31+
private static List<String> disabledFeatureList;
32+
private static Boolean isDisabledCustomModel;
3133

3234
private final String propertiesFilePath;
3335

@@ -198,4 +200,27 @@ public String getPolicyPath() {
198200
}
199201
return this.policyPath;
200202
}
203+
204+
public static List<String> getDisabledPlugins() {
205+
return Optional.ofNullable(System.getProperty("dongtai.disabled.plugins"))
206+
.map(s -> Arrays.asList(s.split(",")))
207+
.orElse(null);
208+
}
209+
210+
public static List<String> getDisabledFeatures() {
211+
if (null == disabledFeatureList){
212+
disabledFeatureList = Optional.ofNullable(System.getProperty("dongtai.disabled.features"))
213+
.map(s -> Arrays.asList(s.split(",")))
214+
.orElse(new ArrayList<>());
215+
}
216+
return disabledFeatureList;
217+
}
218+
219+
public static Boolean isDisabledCustomModel() {
220+
if (null == isDisabledCustomModel){
221+
List<String> disabledFeatures = getDisabledFeatures();
222+
isDisabledCustomModel = disabledFeatures.contains("custom-model-collection");
223+
}
224+
return isDisabledCustomModel;
225+
}
201226
}

dongtai-core/src/main/java/io/dongtai/iast/core/utils/TaintPoolUtils.java

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -195,23 +195,7 @@ public static void trackObject(MethodEvent event, PolicyNode policyNode, Object
195195
EngineManager.TAINT_HASH_CODES.add(hash);
196196
event.addTargetHash(hash);
197197
EngineManager.TAINT_RANGES_POOL.add(hash, tr);
198-
if (isMicroservice && !(obj instanceof String)) {
199-
try {
200-
Field[] declaredFields = ReflectUtils.getDeclaredFieldsSecurity(cls);
201-
for (Field field : declaredFields) {
202-
if (!Modifier.isStatic(field.getModifiers())) {
203-
trackObject(event, policyNode, field.get(obj), depth + 1, isMicroservice);
204-
}
205-
}
206-
hash = System.identityHashCode(obj);
207-
if (EngineManager.TAINT_HASH_CODES.contains(hash)) {
208-
event.addSourceHash(hash);
209-
}
210-
} catch (Throwable e) {
211-
DongTaiLog.debug("solve model failed: {}, {}",
212-
e.getMessage(), e.getCause() != null ? e.getCause().getMessage() : "");
213-
}
214-
}
198+
TaintPoolUtils.customModel(isMicroservice,obj,cls,event,policyNode,depth);
215199
} else {
216200
hash = getStringHash(obj);
217201
if (EngineManager.TAINT_HASH_CODES.contains(hash)) {
@@ -221,6 +205,26 @@ public static void trackObject(MethodEvent event, PolicyNode policyNode, Object
221205
}
222206
}
223207

208+
private static void customModel(Boolean isMicroservice, Object obj, Class<?> cls, MethodEvent event,PolicyNode policyNode,int depth) {
209+
if (isMicroservice && !(obj instanceof String) && !PropertyUtils.isDisabledCustomModel()) {
210+
try {
211+
Field[] declaredFields = ReflectUtils.getDeclaredFieldsSecurity(cls);
212+
for (Field field : declaredFields) {
213+
if (!Modifier.isStatic(field.getModifiers())) {
214+
trackObject(event, policyNode, field.get(obj), depth + 1, isMicroservice);
215+
}
216+
}
217+
long hash = System.identityHashCode(obj);
218+
if (EngineManager.TAINT_HASH_CODES.contains(hash)) {
219+
event.addSourceHash(hash);
220+
}
221+
} catch (Throwable e) {
222+
DongTaiLog.debug("solve model failed: {}, {}",
223+
e.getMessage(), e.getCause() != null ? e.getCause().getMessage() : "");
224+
}
225+
}
226+
}
227+
224228
private static void trackArray(MethodEvent event, PolicyNode policyNode, Object arr, int depth, Boolean isMicroservice) {
225229
int length = Array.getLength(arr);
226230
for (int i = 0; i < length; i++) {

0 commit comments

Comments
 (0)