目 录CONTENT

文章目录
NAS

飞牛NAS保姆级教程:部署HFish蜜罐,全方位防御黑客入侵

 

字数 1518,阅读大约需 8 分钟

将家庭云生活设为“星标⭐”,最新文章不再错过

往期给飞牛 NAS 上了 WAF、终端防护 wazuh,本期来上一个蜜罐,纵深防御嘛,waf 防 web 端口,那蜜罐就补强一下其他非 web 端口的探测感知能力,资源充足的话,可供参考!

场景演义

假定我手机被植入了不可描述的东西,别人以它为跳板想进一步探测我 NAS 主机,碰到蜜罐就告警给我,通知样式是我自定制的,也还算比较美观吧。


快速部署

蜜罐部署已被我封装成 docker compose 编排项目了,后台自取!包含了服务端和客户端!


服务端搭建方法往期文章 安全建设:如何给家庭 NAS 搭建一套免费社区型蜜罐 HFish 已有介绍,这里再赘述,这里直接切入飞牛主角。

老规矩,在飞牛的 docker 的项目目录/vol1/1000/tools/下克隆我的项目


在服务端获取添加节点链接


点击确定后,即可得到接入安装的链接地址


把这个地址替换到刚刚克隆项目的hfish/client目录下 compose.yaml 文件的环境变量HFISH_INIT_URL


最后直接 docker compose up -d 拉起服务就好啦


不出意外的话,服务端将会多出一个节点来


添加一个蜜罐服务,这里以群晖为例


添加好蜜罐后,飞牛 NAS 将监听一个端口 9194


在飞牛防火墙把这个端口对外开放一下


监控告警

hfish 蜜罐原生的企微告警,格式还算漂亮的,但容易造成消息轰炸,如果有人一直在访问蜜罐,消息会响个不停,曾经一度我将消息通知给关了,现在我引入了全新通知体系,能有效缓解这类消息轰炸问题。通知系统在往期文章 NAS 保卫战之 WAF 安全告警到关小黑屋一条龙实战 也有详细介绍,可供参考学习。

告警思路由蜜罐平台通过 syslog 外发 json 格式的日志,并关闭原生企微消息通知。


勾选 syslog 通知选项


elastalert2 配置elastalert/rules/hfish_alert.yaml如下

name: "蜜罐告警"
type:
 any
index:
 logs-syslog-hfish  # 你的访问日志索引模式
# ES 8 数据流的时间字段通常是 @timestamp

timestamp_field:
 "@timestamp"
timestamp_type:
 iso
# 过滤条件:匹配敏感接口路径

filter:

-
 bool:
    must_not:

    -
 term:
        type:
 "common"

# 对相同IP进行分组,分别计数

query_key:
 "src_ip"
# 告警触发后,2分钟内抑制相同IP的重复告警

realert:

  minutes:
 5
# 必须包含这些字段才能在注解中使用

include:

  -
 "src_ip"
  -
 "geo"
  -
 "@timestamp"
  -
 "attack_type"
  -
 "client"
  -
 "client_ip"
  -
 "name"
  -
 "account"
  -
 "threat_level"
# 告警动作:发送到Alertmanager

alert:

  -
 "alertmanager"
alertmanager_api_version:
 v2
alertmanager_hosts:

  -
 "https://alertmanager.evling.tech"
alertmanager_annotations:

  src_ip:
 "{{ _data.get('src_ip', '') }}"
  geo:
 "{{ _data.get('geo', '') }}"
  created_at:
 "{{ _data.get('@timestamp', '') }}"
  attack_type:
 "{{ _data.get('attack_type', '') }}"
  client:
 "{{ _data.get('client', '') }}"
  client_ip:
 "{{ _data.get('client_ip', '') }}"
  name:
 "{{ _data.get('name', '') }}"
  account:
 "{{ _data.get('account', '') }}"
  threat_level:
 "{{ _data.get('threat_level', '') }}"
alertmanager_labels:

  level:
 "警告"
  alert_source:
 "elastalert"
  alert_type:
 "hfish"
  client_ip:
 "{{src_ip}}"

Alertmanager 关键配置示例如下

...
# 路由配置中可以指定使用企微接收器

route:

  group_by:
 ['alertname', 'client_ip']
  group_wait:
 30s
  group_interval:
 10s
  repeat_interval:
 1h
  receiver:
 'prometheusalert-weixin-hfish'
  routes:

  -
 receiver: 'prometheusalert-weixin-hfish'
    group_wait:
 5s
    match:

      alert_source:
 elastalert
      alert_type:
 hfish
receivers:

  -
 name: 'prometheusalert-weixin-hfish'
    webhook_configs:

      -
 url: 'https://promealert.evling.tech/prometheusalert?type=wx&tpl=prometheus-wx-hfish&wxurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_wx_key&at=aaronnellis'
        send_resolved:
 false

PromethusAlert 告警模板如下:

{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}[PROMETHEUS-恢复信息]({{$v.generatorURL}})
> **[{{$v.labels.alertname}}]({{$var}})**
> <font color="info">告警级别:</font> {{$v.labels.level}}
> <font color="info">开始时间:</font> {{$v.startsAt}}
> <font color="info">结束时间:</font> {{$v.endsAt}}
> <font color="info">故障主机IP:</font> {{$v.labels.instance}}
> <font color="info">**{{$v.annotations.description}}**</font>{{else}}[家庭云生活-安全告警]({{$v.generatorURL}})
> **[{{$v.labels.alertname}}]({{$var}})**
> <font color="warning">告警级别:</font> {{$v.labels.level}}
> <font color="warning">告警时间:</font> {{GetCSTtime $v.startsAt}}
> <font color="warning">攻击者IP:</font> {{$v.labels.client_ip}}
{{- if $v.annotations.geo}}
> <font color="warning">地理位置:</font> {{$v.annotations.geo}}
{{- end}}
> <font color="warning">攻击时间:</font> {{GetCSTtime $v.annotations.created_at}}
> <font color="warning">攻击类型:</font> {{$v.annotations.attack_type}}
> <font color="warning">节点名称:</font> {{$v.annotations.client}}
> <font color="warning">节点IP:</font> {{$v.annotations.client_ip}}
> <font color="warning">蜜罐名称:</font> {{$v.annotations.name}}
{{- if $v.annotations.account}}
> <font color="warning">账号信息:</font> {{$v.annotations.account}}
{{- end}}
> <font color="warning">威胁等级:</font> {{$v.annotations.threat_level}}
> <font color="warning">应急处置:</font> [立即封禁该IP](https://api-dc.evling.tech/deny/{{$v.labels.client_ip}}){{end}}{{ end }}
{{ $urimsg:=""}}{{ range $key,$value:=.commonLabels }}{{$urimsg =  print $urimsg $key "%3D%22" $value "%22%2C" }}{{end}}[*** 点我屏蔽该告警]({{$var}}/#/silences/new?filter=%7B{{SplitString $urimsg 0 -3}}%7D)

打开蜜罐的端口,测试下有效性,不出意外的话,就能看到文章开头的一幕了,收到一封精美的告警通知。


结语

至此,也就完成了飞牛 NAS 接入蜜罐了,一有风吹草动,就能及时收到告警,让内鬼无处遁形!

推荐阅读


随手点赞👍,戳个喜欢

 

0

评论区