导读:本期聚焦于小伙伴创作的《如何用R语言实现网络欺骗溯源:蜜罐日志关联分析构建攻击者画像?》,敬请观看详情。部署蜜罐后每天产生大量低信噪比日志,直接翻看难以定位真实威胁。本文介绍用R语言读取多源蜜罐记录,通过IP、时间窗与攻击手法做关联,剔除扫描器噪声。借助dplyr聚合和igraph绘制攻击链,再从Payload提取工具特征形成画像标签。该方法把零散事件转成可溯源线索,帮助防御者识别有意图的入侵者而非盲目爬虫。

网络欺骗防御体系中,蜜罐扮演了诱捕攻击者的角色。当企业内网部署多种蜜罐后,每天会收集到SSH暴力破解、Web漏洞探测、恶意载荷投放等海量日志。这些日志单独看价值有限,只有把不同探针的数据关联起来,才能还原攻击者的行为链路并勾勒出画像。R语言凭借强大的数据框处理与图分析能力,非常适合在安全运营中做这类离线溯源。

如何用R语言实现网络欺骗溯源:蜜罐日志关联分析构建攻击者画像?

蜜罐日志的采集与结构化清洗

不同蜜罐输出的日志格式差异很大,例如Cowrie输出JSON、 Dionaea使用SQLite、自研TCP陷阱可能是纯文本。在R中我们可以先统一读入,再用jsonliteDBI等包解析,最后合并为一个包含源IP、时间戳、协议、攻击类型、载荷摘要的数据框。清洗阶段最关键的是剔除自动化扫描器的噪声,比如只出现过一次且请求路径为根目录的IP,这类基本是互联网背景辐射流量。

具体处理时,可以用dplyr做分组过滤。下面示例展示如何标记出现次数小于3且未触发任何高危规则的IP为低信誉扫描器,并从分析集中排除。这样后续关联分析聚焦于真正有横向移动或多种攻击手法的源头,避免画像被爬虫扭曲。同时要把时间字段转为POSIXct类型,方便做时间窗滑动关联。

library(jsonlite)
library(dplyr)

# 读取Cowrie JSON日志
raw <- fromJSON("cowrie.json")
logs <- raw %>%
  mutate(ts = as.POSIXct(timestamp, format="%Y-%m-%dT%H:%M:%OS")) %>%
  select(ip = src_ip, ts, proto = protocol, atype = eventid, payload = message)

# 标记低频扫描器
ip_count <- logs %>% group_by(ip) %>% summarise(n = n())
low_rep <- ip_count %>% filter(n < 3) %>% pull(ip)
clean <- logs %>% filter(!ip %in% low_rep)

经过上述步骤,我们得到了相对干净的分析基础表。此时每一个IP对应的多条行为记录保留了原始语义,为后续关联提供了原料。实践中还要注意NAT出口或僵尸网络共用IP的情况,可结合User-Agent或证书指纹做二次聚合,但基础框架不变。

基于时间窗与攻击链的关联分析

攻击者画像的核心在于知道谁在什么时间做了什么组合动作。我们可以利用滑动时间窗,把同一IP在十分钟内产生的SSH登录失败、随后Web目录遍历、再后来下载恶意脚本视为一条攻击会话。R里用slider包或自写函数切割会话,再统计每会话的攻击多样性。多样性高的IP往往代表人工或半自动入侵,而单一重复动作多为僵尸程序。

更进一步,用igraph构建有向图:节点是IP与受攻击资产,边是攻击动作。通过社区发现算法,能找出协同攻击集群,例如一组IP轮流探测同一网段,说明背后有统一控制端。以下代码演示如何从清洗后日志生成边列表并绘图,帮助溯源者直观看到攻击拓扑。

library(igraph)

edges <- clean %>%
  mutate(target = "HONEYPOT") %>%
  select(from = ip, to = target, weight = atype)

g <- graph_from_data_frame(edges, directed = TRUE)
wc <- cluster_walktrap(g)
plot(g, vertex.color = membership(wc), main = " attacker-host graph ")

在关联结果上,我们可以提取每个IP的常用攻击类型序列,作为行为指纹。例如某IP总是先爆破Telnet再转向HTTP文件包含,这种顺序本身就能区分不同黑客团伙。关联分析不只看单点,而是把蜜罐当作整体传感器,用R快速试验多种窗口与权重,比手工翻日志效率高两个数量级。

从Payload特征抽取攻击者画像标签

日志中的Payload往往包含工具痕迹,比如特定的HTTP头、已知的恶意脚本名、或SQL注入模板。R可以用正则表达式在payload字段中搜索模式,给IP打上如“使用Hydra”“疑似Mirai”“中文环境操作者”等标签。画像不再是抽象分数,而是可解释的安全情报。

下面例子展示如何用stringr识别常见黑客工具并汇总每个IP的标签集合。这些标签可直接接入威胁平台,或用于比对历史攻击者。值得注意的是,有些攻击者会故意伪造Payload,因此标签应带置信度,而非绝对判定。结合前面关联出的攻击链,就能输出一份包含来源、活跃时段、偏好漏洞、工具库的完整画像报告。

library(stringr)

patterns <- list(
  hydra = "Hydra",
  mirai = "Mirai",
  sqlmap = "sqlmap"
)

tag_ip <- function(p) {
  res <- c()
  for (name in names(patterns)) {
    if (str_detect(p, patterns[[name]])) res <- c(res, name)
  }
  return(paste(res, collapse = ","))
}

clean <- clean %>%
  rowwise() %>%
  mutate(tags = tag_ip(payload)) %>%
  ungroup()

profile <- clean %>%
  group_by(ip) %>%
  summarise(
    sessions = n_distinct(ts %>% as.character()),
    tool_tags = paste(unique(tags[tags != ""]), collapse = "|")
  )

最终形成的攻击者画像可以指导防御策略,比如对频繁使用某Web漏洞的IP在前端WAF加规则,或把其活动时段列为重点监控窗口。R语言脚本可定时运行,让蜜罐日志从沉睡数据变为持续产出的溯源能力。整套方法不依赖商业SIEM,适合中小团队自建网络欺骗溯源体系。

R语言蜜罐日志攻击者画像修改时间:2026-08-15 04:03:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。