应用的安全防护(IPS)示例
1 简介
IPS 可监控您的网络是否存在可疑活动或正在进行的攻击。当发现异常时,您会收到警报。但在此期间,系统开始行动起来。它可能会自动执行的操作:
关闭会话: 它可以识别异常活动的入口点并阻止其继续。这可能意味着终止 TCP 会话、阻止 IP 地址或执行一些类似的步骤。
加强防火墙: 系统可能会识别防火墙中允许攻击进入的漏洞。程序的更改可以防止将来发生类似的事情。
清理:系统可以扫描服务器中损坏或恶意的内容并将其删除。
IPS 实时工作,该技术检查通过受保护空间移动的每个数据包。它可以采取快速而重大的行动来应对攻击,虽然这可以保护您,但这些系统可能会引发误报。发生这种情况时,流量可能会无缘无故地减慢。
IPS 可以防止恶意或不需要的数据包以及一系列其他网络威胁造成的严重损害,包括:
分布式拒绝服务 (DDOS)
漏洞 Exploits
计算机蠕虫和病毒
暴力攻击
在攻击和清理结束时,您会收到一份报告,说明出了什么问题以及系统采取了哪些措施来修复它。
下面是如何简单实现一个ips服务防护。
2 防护服务的分类
入侵防御系统通常分为四种类型:
基于网络的入侵防御系统 (NIPS): NIPS 通过分析整个网络中的数据包来检测和防止恶意活动或可疑活动。安装后,NIPS 会从主机和网络收集信息,以识别网络上允许的主机、应用程序和操作系统。它们还会记录有关正常流量的信息,以识别基准的变化。它们可以通过发送 TCP 连接、限制带宽使用或拒绝数据包来防止攻击。虽然很有用,但它们通常无法分析加密的网络流量、处理高流量负载或处理针对它们的直接攻击。
无线入侵防御系统 (WIPS): WIPS 会监控无线电频谱是否存在未经授权的接入点,并自动采取对策将其删除。这些系统通常作为现有无线 LAN 基础设施的叠加层实施,尽管它们可以独立部署以在组织内实施无无线策略。一些高级无线基础设施集成了 WIPS 功能。良好的 WIPS 可以防止以下类型的威胁:流氓接入点、配置错误的接入点、中间人攻击、MAC 欺骗、蜜罐和拒绝服务攻击。
网络行为分析 (NBA): 这种类型的入侵防御系统依赖于基于异常的检测,并寻找与系统或网络中被视为正常行为的偏差。这意味着它需要一个培训期来描述什么是正常的。训练期结束后,不一致将被标记为恶意。虽然这有利于检测新威胁,但如果网络在训练期间遭到入侵,则可能会出现问题,因为恶意行为可能被视为正常行为。此外,这些安全工具可能会产生误报。
基于主机的入侵防御系统 (HIPS): 用于保护关键计算机系统的系统或程序。HIPS 主要通过分析代码行为来分析单个主机上的活动,以检测和防止恶意活动。它们经常因能够防止使用加密的攻击而受到称赞。HIPS 还可用于防止从主机中提取敏感信息,例如个人身份信息 (PII) 或受保护的健康信息 (PHI)。由于 HIPS 位于一台计算机上,因此它们最好与基于网络的 IDS 和 IPS 以及 IPS 一起使用。
3 实现简单的IPS服务
入侵检测系统 (IDS) 监控网络上的流量,分析该流量中与已知攻击匹配的签名,并在发生可疑情况时向您发出警报。与此同时,流量继续流动。
它还监控流量。但是当发生异常情况时,通信会完全停止,直到您调查并决定再次打开闸门。
入侵防御系统 (IPS) 或入侵检测和防御系统 (IDPS) 是网络安全应用程序,专注于识别可能的恶意活动、记录信息、报告尝试并尝试阻止它们。IPS 系统通常直接位于防火墙后面。
- 简单示例
现一个简单的入侵检测系统 (IDS) 与入侵防御系统 (IPS) 使用Go语言的Gin框架。此示例将展示如何实时检测并阻止Web应用中的可疑行为或恶意流量。
实现思路
中间件检测:在请求进入处理器之前,通过Gin的中间件检查请求的可疑行为。
规则匹配:定义一系列常见的恶意行为特征(如暴力登录、恶意爬取、异常请求频率等)。
阻止策略:当检测到恶意行为时,可以记录并拦截请求,同时限制相关IP或用户。
日志记录:记录可疑请求信息,便于后续审查和分析。
示例代码
// 可疑IP的请求次数限制
const requestLimit = 10
const blockDuration = time.Minute * 10
// 存储IP请求统计信息
var ipRequestCount = make(map[string]int)
var blockedIPs = make(map[string]time.Time)
var mu sync.Mutex
// IDS/IPS中间件函数,用于实时检测和阻止可疑行为
func IPSMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
clientIP := c.ClientIP()
mu.Lock()
defer mu.Unlock()
// 检查IP是否在封禁列表中
if blockTime, exists := blockedIPs[clientIP]; exists {
if time.Now().Before(blockTime) {
log.Printf("Blocked IP %s trying to access", clientIP)
c.JSON(http.StatusForbidden, gin.H{"error": "Your IP has been temporarily blocked due to suspicious activity"})
c.Abort()
return
} else {
// 解封已到期的IP
delete(blockedIPs, clientIP)
}
}
// 增加IP的请求计数
ipRequestCount[clientIP]++
log.Printf("IP %s request count: %d", clientIP, ipRequestCount[clientIP])
// 检测是否达到请求限制,若达到则封禁
if ipRequestCount[clientIP] > requestLimit {
log.Printf("IP %s has been blocked due to too many requests", clientIP)
blockedIPs[clientIP] = time.Now().Add(blockDuration)
delete(ipRequestCount, clientIP) // 重置计数
c.JSON(http.StatusForbidden, gin.H{"error": "Your IP has been temporarily blocked due to suspicious activity"})
c.Abort()
return
}
// 设置请求完成后的钩子来减少计数
c.Next()
ipRequestCount[clientIP]--
}
}
func main() {
// 创建Gin路由
r := gin.Default()
// 注册IPS中间件
r.Use(IPSMiddleware())
// 示例路由
r.GET("/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "Hello, welcome to the secure server!"})
})
// 启动服务器
if err := r.Run(":8080"); err != nil {
log.Fatalf("Server failed to start: %v", err)
}
}
IP请求计数和封禁:
ipRequestCount用于跟踪每个IP的请求次数。
blockedIPs记录被暂时封禁的IP及其解封时间。
IPSMiddleware:这是IPS的核心中间件,用于实时检测和阻止过多请求的IP。
请求次数检查:每次请求时,根据IP计数,若请求次数超过指定限制(requestLimit),则该IP被暂时封禁blockDuration。
解封逻辑:当封禁时间过期后,IP会自动从封禁列表中移除。
减少计数:请求完成后,将请求计数减少,以防止偶然的高频请求导致误封。
示例路由:应用程序提供一个简单的/hello路由,可以用来测试IPS功能。
运行和测试
启动服务器,运行以下命令:
go run main.go
使用以下命令模拟多次请求以触发防护系统:
for i in {1…15}; do curl -s “http://localhost:8080/hello”; done
在达到请求次数限制后,应该收到如下消息:
{“error”: “Your IP has been temporarily blocked due to suspicious activity”}
4 小结
多维度检测:除了请求频率,还可以根据请求内容(如SQL注入和XSS特征)进一步识别恶意流量。
分布式计数器:在分布式系统中,可以将IP计数存储在Redis中,方便共享数据。
告警和日志系统:将检测到的可疑行为记录到专门的日志系统,结合告警机制进行实时监控。
此简单IDS/IPS实现可用于快速检测异常流量,为实际生产系统提供基础防护。
IPS 解决方案还可用于识别安全策略问题、记录现有威胁以及阻止个人违反安全策略。
要阻止攻击,IPS 可以通过重新配置防火墙或更改攻击内容来更改安全环境。
许多人将入侵防御系统视为入侵检测系统的扩展,因为它们都监控网络流量和/或系统活动是否存在恶意活动。
入侵防护系统 (IPS) 的工作原理是通过以下一种或多种检测方法扫描所有网络流量:
基于签名的检测:基于签名的 IPS 监控网络中的数据包,并与预先配置和预先确定的攻击模式(称为签名)进行比较。
基于统计异常的检测: 基于异常的 IPS 监控网络流量并将其与已建立的基准进行比较。此基线用于确定网络中什么是“正常”的,例如使用了多少带宽以及使用了哪些协议。虽然这种类型的异常检测有利于识别新威胁,但当带宽的合法使用超过基准或基准配置不当时,它也可能会产生误报。
状态协议分析检测: 该方法通过将观察到的事件与普遍接受的良性活动定义的预定概况进行比较来识别协议状态的偏差。
- 点赞
- 收藏
- 关注作者
评论(0)