DNS劫持之绑架路由器

测试对象

路由器:小米路由器
服务器:ubuntu
软件:bind9
域名:kkk.com

实验描述

最近的路由器管理页面都有众多设置,如DNS设置。首先谈谈DNS解析的作用,DNS简单来说是把域名解析成对应的IP,我们在浏览器输入网址,会先通过DNS服务把域名转换成IP,然后再去请求对应的IP。常用的DNS运营商为114.114.114.114,国外的为8.8.8.8。实验的思路是我们在服务器上搭建一个DNS服务器,然后把某些域名进行错误的解析(劫持)到我们的IP上,然后修改路由器的DNS配置,让连接的用户在上网时不知不觉地受到攻击,如被中间人监听或遭到钓鱼等操作。

搭建DNS服务器

建议选用UbuntuCentos等服务器,Windows类型的服务器比较卡。我这里选用的服务器系统为Ubuntu

安装bind9

apt-get install bind9 bind9utils bind9-doc

修改配置文件,使其支持ipv4

vim /etc/default/bind9  

# 修改下面的内容  
OPTIONS="-4 -u bind"  

然后进入bind9的目录/etc/bind,,建议在此新建一个zones文件夹存放配置文件,继续修改以下文件。

named.conf.options(DNS 全局选项配置文件)

acl "trusted" {
    any;  # any代表所有的主机都能查询 DNS 服务器,填入IP代表仅当前IP可进行查询,多IP用;间隔。
    };

options {
    directory "/var/cache/bind";

    ...

        recursion yes;   // 递归查询
        allow-query     { trusted; };
        allow-recursion {
            any;
        };
        listen-on {172.31.249.223;};  // 公网使用需要填写内部私有IP,通过ifconfig查看
        allow-transfer {any;};

        forwarders {
                114.114.114.114;
        };

    ...

    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };
};

named.conf.local(自定义区域配置文件)

zone "kkk.com" {    // 填写域名
    type master;    // 声明
    file "/etc/bind/zones/kkk.com.zone";   // 对应文件的绝对路径
};
# 每新增一个域名,就按照这样的格式填写好增加到此文件。

域名的解析规则

;
; BIND data file for local loopback interface
$TTL    604800
@       IN      SOA     ns1.kkk.com. admin.kkk.com. (
                              4         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
;
; name servers - NS records
     IN      NS      ns1.kkk.com.

; name servers - A records
ns1.kkk.com.        IN      A      104.248.222.130  // A记录
www.kkk.com.        IN      A      104.248.222.130  // A记录
baidu.kkk.com.      IN     CNAME   www.baidu.com    // CNAME记录,但这不会成功
*.kkk.com           IN      A      xxx.xxx.xxx.xxx  // 泛解析

# 记得文件名称与路径要与配置文件内的相对应

检查

named-checkconf
# 检查配置
named-checkzone kkk.com /etc/bind/zones/kkk.com.zone
// 语法:named-checkzone domain zonefile
# 检查域名是否设置合理

修改配置文件
这是配置Linux DNS地址的文件,在原有的nameserver上面添加以下语句。原有的nameserver 127.0.0.53不要注释掉,不然apt等服务不可用。

vim /etc/resolv.conf
...
# 添加服务器IP进去
nameserver 172.31.249.223  # 这个IP是本机内部私有IP

启动&重启
每次添加或修改过后,都执行以下语句使服务生效。

systemctl named restart
rndc flush

实验

在完成上面的操作后,就可以在服务器看到我们的域名解析了。

当然,别人执行这条语句是查不到记录的,因为他们不会向我们的服务器查询DNS。有两种方法,一是修改受害者的网络选项,选中别人连接的网络,点击属性并进行后续操作配置。

这种方法太过麻烦,利用难度高。如果选择修改自己的路由器DNS配置,然后开放给别人连接,杀人于无形。

实在不行,弱口令进别人路由器管理页面给改了,效果同理。

困难解答

bind9配置出错

文中所提的安装方法是简练版本,我安装时也配置了很久,有非常多的坑。尤其在编写时,有很多操作细节都回忆不起来,难免出错,建议参考各种文档。

bind9 CNAME解析至其他域名访问报错403等

这是别人做了防护,防止“恶意解析”,劫持文章流量。一些好博客会被人使用其他域名恶意CNAME过去,使流量往恶意域名上走,损害博主利益。防止手法有判断请求host头等,详细知识点搜索“恶意域名解析”。

DNS服务器连接不上

查看服务器控制台,看看有没有开放53端口。

本机配置好了DNS但解析失败

别开梯子等网络工具,或检查连接的路由器DNS设置。

A解析污染

针对百度这样的大企业域名,无法注册像baidu.tk等不同后缀的域名,即使注册到了,但这样的域名迷惑性不大,容易被识破或引起警觉。自己搭建的DNS服务器虽然能解析任意域名,包括baidu.com,但由于现在的网站都使用https传输,所以钓鱼网站也必须搭配证书,不然也会引起怀疑。不过证书的申请域名必须与当前域名一致,因此不能把B域名网站证书套用在A域名网站上。同时证书注册商也不允许未授权用户注册类似baidu.com这样的证书。因此该方法仅适合小网站钓鱼。

CNAME解析污染

这方法在公网上也能用,若受害者域名及服务器没做防护,容易被人劫持流量,这个过程是用户访问hacker.com再解析到domain.com中。但在定向的攻击中,我们是希望用户访问domain.com然后解析到我们hacker.com中,然后我们对此进行监听并再次把流量重定向到domain.com中。我们先在我们的DNS服务器上做好相应的解析,然后做好中转转发。这个操作比上面的操作更隐蔽的一点在于,我们不需要申请到domain.com的证书,只需要做好hacker.com的证书即可做到https。

下集预告:DNS劫持之无形种马

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注