Enhanced DNS security with ephemeral ports and DNS 0x20 encoding
Significantly improve DNS client security against cache poisoning attacks through multiple defense layers: Security Improvements: - Bind UDP sockets to OS-assigned ephemeral ports (0.0.0.0:0) instead of predictable random ports, eliminating port-based attack vectors - Implement DNS 0x20 encoding with strict case validation, adding 10-15 bits of entropy per query by randomizing domain name case - Randomize transaction ID starting point using AtomicU16 for better entropy distribution Attack difficulty increased from ~16 bits (65K attempts) to ~42-47 bits (4.4-140 trillion attempts), making spoofing 1,000x to 32,000x harder. Configuration: - Add 'enable_0x20' option to DNS settings (default: true) - Users can disable for compatibility with legacy resolvers if needed - Feature is configurable via alfis.toml
This commit is contained in:
+10
-2
@@ -70,7 +70,10 @@ pub struct Dns {
|
||||
#[serde(default = "default_dns_bootstraps")]
|
||||
pub bootstraps: Vec<String>,
|
||||
#[serde(default)]
|
||||
pub hosts: Vec<String>
|
||||
pub hosts: Vec<String>,
|
||||
/// Enable DNS 0x20 encoding (random case) for additional security against cache poisoning
|
||||
#[serde(default = "default_dns_0x20")]
|
||||
pub enable_0x20: bool
|
||||
}
|
||||
|
||||
impl Default for Dns {
|
||||
@@ -80,7 +83,8 @@ impl Default for Dns {
|
||||
threads: 20,
|
||||
forwarders: vec![String::from("94.140.14.14:53"), String::from("94.140.15.15:53")],
|
||||
bootstraps: default_dns_bootstraps(),
|
||||
hosts: Vec::new()
|
||||
hosts: Vec::new(),
|
||||
enable_0x20: default_dns_0x20()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -144,4 +148,8 @@ fn default_key_files() -> Vec<String> {
|
||||
|
||||
fn default_dns_bootstraps() -> Vec<String> {
|
||||
vec![String::from("9.9.9.9:53"), String::from("94.140.14.14:53")]
|
||||
}
|
||||
|
||||
fn default_dns_0x20() -> bool {
|
||||
true
|
||||
}
|
||||
Reference in New Issue
Block a user