蜜罐隐藏方案

前言

通常厂商威胁捕捉与诱骗系统内置的蜜罐的特征,都在各红队挂上号了。哈希时代下的蜜罐隐藏,只能开发自定义蜜罐以规避哈希识别。

对于一个正常服务,通常情况下不会使用ip+端口,或域名+端口的形式提供服务。一个长期使用的外部应用服务通常使用子域名,以及ssl加密,即https传输。然而,正常服务也可以收集登录正确与失败的账号密码。

本文内容基于微步HFish胁捕捉与诱骗系统。

蜜罐于HFish后台启用后,使用三级域名以及反向代理nginx伪装为正常服务。

单个域名申请证书

使用certbot申请证书

Let's Encrypt是一个数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。

前置步骤:

于/etc/nginx/conf.d/文件夹下,将以下内容写入文件,命名为*.conf(建议为命名为hfish.conf,星号内容可自定义)

server {
    listen      80;
    listen      [::]:80;
    server_name sub.domain.com;							#将sub.domain.com替换为需要申请证书的域名

    #反向代理 / 用于let's encrypto验证域名归属
    location ^~ /.well-known/acme-challenge/{
        default_type "text/plain";
        root /;
    }
}

文件写入后运行命令

nginx -t && systemctl restart nginx

安装certbot

# ubuntu系统
apt install certbot
# centos系统
yum install certbot

完成域名验证并生成证书

certbot certonly --webroot sub.domain.com					#将sub.domain.com替换为需要申请证书的域名

运行该命令后根据提示输入验证文件地址。根据配置,验证地址为root /; ,即此处输入‘/’即可。

生成证书与密钥默认存放于/etc/letsencrypt/live/domain.com/文件夹下,此时将/etc/nginx/conf.d/文件夹下(建议为命名为hfish.conf)配置文件替换为完整的配置文件并运行以下命令即可。

nginx -t && systemctl restart nginx

完整配置文件:

server {
    listen                  443 ssl http2;
    listen                  [::]:443 ssl http2;
    server_name sub.domain.com;							#需要将sub.domain.com替换为您所使用的子域名。

    ssl_certificate         /etc/nginx/cert/sub.domain.com.pem;			#您的证书存储位置,通常位于/etc/nginc/cert文件夹下,需要将sub.domain.com.pem替换为您的证书文件。
    ssl_certificate_key     /etc/nginx/cert/sub.domain.com.key;			#您证书私钥的存储位置,通常位于/etc/nginc/cert文件夹下,需要将sub.domain.com.key替换为您证书私钥文件。


    # 反向代理 / 用于与 Web 服务
    location / {
        proxy_pass https://127.0.0.1:[port]$request_uri;			#port更改为蜜罐启用所设置的端口
        proxy_pass http://cloud/;
        proxy_redirect off;
        proxy_set_header host $host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header x-forwarded-host $server_name;
    }
}

# HTTP 重定向至 HTTPS
server {
    listen      80;
    listen      [::]:80;
    server_name sub.domain.com;
    location / {
        return 301 https://sub.domain.com$request_uri? permanent;
    }
}

说明

  • 本文件为生成证书后所使用的文件,存放于/etc/nginx/conf.d/文件夹下(建议为命名为hfish.conf)。

CERT证书自动续期方案

编辑定时任务

crontab -e										#首次使用定时任务则选择“2”,使用vim编辑

写入以下命令,将domain.com替换为需要自动需求的域名

00 00 1 * * certbot renew --force-renewal && systemctl restart nginx			#每月一号强制续期所有使用certbot生成的证书

certbot申请由Let's encrypto签发的证书通常有效期为三个月,剩余有效期大于三十日则判定为证书有效无法续期,此时使用“--force-renewal ”强制续期即可。

值得注意的是,Let's encrypto限制单个域名/IP每周生成证书最多五十个,每次生成证书时错误尝试次数小于等于五次。建议生成证书时先加入参数“--dry-run”测试。

泛解析方案

泛解析使用acme协议申请证书。

简单来说acme.sh 实现了 acme 协议, 可以从 let‘s encrypt 生成免费的证书。 acme.sh 有以下特点:

  • 一个纯粹用Shell(Unix shell)语言编写的ACME协议客户端。

  • 完整的ACME协议实施。 支持ACME v1和ACME v2 支持ACME v2通配符证书

  • 简单,功能强大且易于使用。你只需要3分钟就可以学习它。

  • Let's Encrypt免费证书客户端最简单的shell脚本。

  • 纯粹用Shell编写,不依赖于python或官方的Let's Encrypt客户端。

  • 只需一个脚本即可自动颁发,续订和安装证书。 不需要root/sudoer访问权限。

  • 支持在Docker内使用,支持IPv6

不同意certbot的是,使用acme申请证书无需使用nginx验证域名,仅需提供域名所有者于域名解析商的注册邮箱以及CF密钥。当然,也可也使用dns设置txt解析记录校验泛解析域名归属。

下文基于使用CF密钥申请泛解析证书。dns设置txt验证可能会导致dns设置混乱,可能不利于长期运维。

使用CF_key申请泛解析ssl证书

git clone https://github.com/acmesh-official/acme.sh.git && cd ./acme.sh
./acme.sh --install -m [your_email]							#将[your_email]替换为你的邮箱
export email="[your_email]"								#将[your_email]替换为你的邮箱
alias acme.sh=/root/.acme.sh/acme.sh
acme.sh --set-default-ca --server letsencrypt
export CF_Email="[your_email]"								#将[your_email]替换为你在域名解析商注册的邮箱
export CF_Key="[your_CF_key]"								#将[your_CF_key]替换为你的CF密钥
acme.sh --issue --dns dns_cf -d *.domain.com --keylength ec-256

自动续期方案

编辑定时任务

crontab -e								#首次使用定时任务则选择“2”,使用vim编辑

写入以下命令,将domain.com替换为需要自动续期的域名

00 00 1 * * acme.sh --issue --force --dns dns_cf -d *.log.hscsec.cn --keylength ec-256 && systemctl restart nginx	#每月一号强制续期所有使用acme生成的证书

Nginx配置文件*.conf

server {
    listen                  443 ssl http2;
    listen                  [::]:443 ssl http2;
    server_name sub.domain.com;								#需要将sub.domain.com替换为您所使用的子域名。

    ssl_certificate         /root/.acme.sh/*.domain.com_ecc/fullchain.cer;		#您的证书存储位置,通常位于.acme.sh文件夹下,需要将domain.com替换为您的域名。
    ssl_certificate_key     /root/.acme.sh/*.domain.com_ecc/*.domain.com.key;	#您证书私钥的存储位置,通常位于.acme.sh文件夹下,需要将domain.com替换为您的域名。
  
    # 反向代理 / 用于与 Web 服务
    location / {
        proxy_pass https://127.0.0.1:[port]$request_uri;				#port更改为蜜罐启用所设置的端口
        proxy_redirect off;
        proxy_set_header host $host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header x-forwarded-host $server_name;
    }
}

HTTP 重定向至 HTTPS

# HTTP 重定向至 HTTPS
server {
    listen 80;
    server_name ~^(?<subdomain>.+).domain.com$;
    rewrite ^ https://$subdomain.domain.com$request_uri? permanent;
}

Last updated