2019独角兽企业重金招聘Python工程师标准>>>

“撞库”是安全领域经常发生的一种黑产攻击事件。在常见的安全防护中,安全团队通常会在登陆接口设置安全策略来应对攻击。可是,一旦黑产更换攻击规则,就会导致策略失效。

在这样的情况下,我们需要的就不仅仅的表层的“防火墙”,而是一套完整的业务风控系统,它可以有效的规避风险,降低损失。

在这篇文章中,我们将介绍如何利用开源风控系统TH-Nebule(星云)防止“撞库”攻击。

文章会从“撞库”的介绍逐渐深入到对TH-Nebula的使用,包括:如何部署、如何使用、和为什么需要风控系统等。阐述为什么需要一套“系统”去解决业务安全问题,接着手把手教你部署本系统,以及如何利用咱们这套风控来阻断风险,并提供模拟测试demo。

TH-Nebula是由威胁猎人开源的风控系统,目前源码已放在Github和Gitee上,完全开放所有源代码,文档,以及安装包。

地址:

  • https://github.com/threathunterX/nebula
  • https://gitee.com/threathunter/nebula

0x00 如何防止撞库

1.什么是撞库?

说到撞库,先得从”社工库”说起,社工库是社会工程学数据库的简称,这个数据库里找包含了每个人的各种行为记录(在不同网站上的账号、密码、分享的照片、信用卡记录、通话记录、短信记录、开房记录等等)。

所以当黑客想尝试登录某个网站或者app时,就会用”社工库”里的信息去挨个尝试登录,”撞”出一个个正确账号。

2. 如何防止撞库?

首先从企业的web服务视角来看,如果发现以下几种情况,基本可以判定是在撞库:

  1. 一个账号在某个较短的时间内,有多次密码尝试。
  2. 一定时间内相同密码的出现频次非常高
  3. 同一个IP或同一个设备,在短时间内使用不同账号密码多次尝试登录

在这种情况下,最简单粗暴的方法就是直接在登陆接口加安全策略

如,

  1. 针对a情况,就限制一天之内密码错误次数。
  2. 针对b情况,就针对频率特别高的密码禁止登录(或者校验手机短信/密保问题之后才能登录)。
  3. 针对c情况,就对IP或者设备唯一id进行阈值限制,如限制1分钟内访问登录接口次数<50次

看起来简单粗暴的方法是可以起到防护作用,但实际上,道高一尺魔高一丈,业务安全就没有一劳永逸的方案。只要有利可图的前提下,黑灰产就会不断的变换自己的规则,来“攻破”业务的防护。

比如,业务限制的是1分钟访问限制<50次,那黑产很容易就可以改成40次就能绕过你的策略,这对于他来说只是改了一行代码。

再比如,现在互联网社会里,IP资源可以说是相当廉价,简单就从IP角度去判定可以说非常容易被绕过。

所以业务安全的防护不是简单做一层防火墙可以了,是需要有一套完整的能跟黑产持续对抗的系统”。

这套系统除了可以自定义策略,从各个维度在网络流量中发现风险以外,还得具备

  1. 对业务访问流量的分析、统计  — 方便安全人员发现新的攻击行为从而制定新的策略
  2. 策略的效果反馈的展示报表   — 方便安全人员根据策略有效性实时调整
  3. 提供除了业务本身流量外的安全情报,如IP的代理标签、秒拨标签等  — 直接识别高危的流量来源

TH-Nebula(星云)就是这样一套系统。它能够让企业有能力主动发现业务风险,并快速的实施攻防对抗。星云采用旁路流量的方式进行数据采集,无需在业务逻辑上做数据埋点或侵入,同时支持本地私有化部署和Docker镜像云端部署,大大降低了使用门槛。

系统分为两块服务

1)Nebula服务:包括风控配置分析系统,流量的接收和分析,策略引擎,风控web控制中心等模块

2)Sniffer服务:流量的抓取服务

其中,流量的抓取服务这块为了做到不对业务系统本身做代码修改,提供了多种配置方式。用户可以直接在web服务机器部署,采用旁路流量的方式获取流量;也可以通过标准化nginx或其他http服务的输出日志,采取抓取日志的方式获取流量

下面就以防止撞库为例子,一步步教你把TH-Nebula风控系统跑起来

0x01 部署TH-Nebula开源项目

如上所述Nebula开源项目分为Sniffer流量抓取服务、Nebula服务两块,建议直接采用docker方式部署,部署参考如下github文档:

  • https://github.com/threathunterX/nebula_doc/blob/master/chapter2/section2/section2.2.md

1.Nebula服务

参考github教程部署完之后,运行./ctrl.sh status可查看Nebula服务的运行状态,如下图则代表部署成功,默认配置下Nebula的web控制中心是通过9001端口访问:

Name Command State Ports
--------------------------------------------------------------------------------------------------
nebula /entrypoint.sh /usr/bin/su ... Up 0.0.0.0:9001->9001/tcp
nebula-aerospike /entrypoint.sh asd --foreg ... Up 3000/tcp, 3001/tcp, 3002/tcp, 3003/tcp
nebula-db docker-entrypoint.sh mysqld Up 3306/tcp
nebula-redis docker-entrypoint.sh redis ... Up 0.0.0.0:16379->6379/tcp
cron RUNNING pid 27, uptime 4 days, 22:23:47
java_web RUNNING pid 33, uptime 4 days, 22:23:47
labrador RUNNING pid 10286, uptime 2 days, 21:26:41
nebula:incident_babel_db_writer RUNNING pid 19, uptime 4 days, 22:23:47
nebula:nebula_db_query_web RUNNING pid 12, uptime 4 days, 22:23:47
nebula:nebula_offline RUNNING pid 14, uptime 4 days, 22:23:47
nebula:nebula_online RUNNING pid 19720, uptime 0:29:22
nebula:nebula_query_web RUNNING pid 15, uptime 4 days, 22:23:47
nebula:nebula_web RUNNING pid 11, uptime 4 days, 22:23:47
nebula:notice_babel_db_writer RUNNING pid 13, uptime 4 days, 22:23:47
nginx RUNNING pid 29, uptime 4 days, 22:23:47

2.Sniffer服务

这里为了方便后面模拟测试,建议就直接采用最简单旁路流量方式(bro驱动)启动Sniffer服务,即git上默认配置:

....
- SOURCES=default
#default driver
- DRIVER_INTERFACE=eth0
- DRIVER_PORT=80,8080,9001
....

说明:

  • DRIVER_PORT代表监听的流量端口,此处除了监听80,8080外。还监听了9001端口的流量,这是为了方便测试,可以捕获到Nebula服务自身的web控制中心流量。实际生产环境可以去掉

把Nebula和Sniffer两块服务正常启动起来,则可通过 http://IP:9001端口的方式访问 TH-Nebula界面了,如图:

2.配置防止撞库规则

部署完Nebula服务之后,在策略管理tag中可以看到, Nebula系统针对账号风险规则,已经默认配置了基本的防撞库策略。如下图:

用户也可以自定义新规则或者修改默认规则,参考如下github文档:

  • https://github.com/threathunterX/nebula_doc/blob/master/chapter3/section3/section3.1.md

0x02 模拟撞库测试

部署并配置好规则之后,接下来就是通过模拟撞库的过程,校验系统的风险检测逻辑。

模拟脚本原理就是针对Sniffer模块监听的9001端口连续发起1000次登录请求(这里为了方便测试没有在服务端实现login接口,但风控系统对于404的访问也同样会捕获到)。具体python代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from requests import get
from requests import put
from requests import post
from requests import deleteport = 9001class NewRequestsData(object):
def __init__(self, url, data, cookies, method='get'):
self.data = data
self.url = url
self.cookies = cookies
self.method = methoddef request(self):
m = dict(
get=get,
put=put,
post=post,
delete=delete,
)
method = m[self.method]
text = '默认模式'
code = 'None'
header = {
"connection": "close",
"content-type": 'application/json',
}
try:
if self.method in ['get', 'delete']:
response = method(self.url, params=self.data, cookies=self.cookies, timeout=10,
headers=header)
elif self.method in ['post', 'put']:
data = dumps(self.data, ensure_ascii=False).encode('utf8')
response = method(self.url, data=data, timeout=8, headers=header, cookies=self.cookies)
else:
raise ValueError
text = response.text
code = response.status_code
except Exception as e:
print("error", e)finally:
return (text, code)def attack_login():
data = dict(
username="threathunter@threathunter.cn"
)
r = NewRequestsData('http://127.0.0.1:{}/login'.format(port), data, {})
code, text = r.request()if __name__ == '__main__':
i = 0
for i in range(1000):
attack_login()
print('总访问次数:', i)

捕获流量的截图:

0x03 使用TH-Nebula阻断发现的风险

由于 TH-Nebula 属于旁路分析模式,所以无法主动拦截风险事件,需要与企业端应用进行集成后实现自动阻断的功能。

针对业务系统拉黑阻断,系统提供以下两种风险数据获取方法:

主动推送:TH-Nebula 可以将分析发现的风险推送至拦截节点进行自动的风险阻断。

被动调用:TH-Nebula 可以将分析发现的风险名单以接口方式提供给拦截节点调用判断风险。

详细请参考文档:

  • https://github.com/threathunterX/nebula_doc/blob/master/chapter3/section5.md

以上就是通过部署TH-Nebula开源风控系统,配置防撞库策略的整套流程。

在系统使用过程中,如遇任何疑问,可在Github进行反馈:

  • https://github.com/threathunterX/nebula

转载于:https://my.oschina.net/u/3101664/blog/3048804

如何利用开源风控系统 TH-Nubula(星云)防止撞库?相关推荐

  1. 如何利用开源风控系统(星云)防止撞库?

    在企业发展过程中,日益增多的业务形态往往会招致新的业务风险.简单的业务防护已经不足以解决问题.一套完整的业务风控系统可以帮助企业有效的规避风险,降低损失. TH-Nebula(星云)是威胁猎人开源的业 ...

  2. 开源风控系统radar部署

    简介 radar是一款2019年发版的开源风控系统. 项目官网http://radar.pgmmer.top 目前在码云上(https://gitee.com/freshday/radar )有1.2 ...

  3. 互联网风控系统架构分析

    本文简单介绍风控具体是做什么的,以及一些常见的风控系统实现的架构. 文章目录 前言 一.互联网风控是做什么的? 风控的定义 二.常见风控系统的实现架构 1.风控系统的架构 2.风控的系统流程 三.核心 ...

  4. 专访季虎:如何突破瓶颈构建高质量风控系统?

    互联网的开放性极大地促进了互联网产业的发展,也给人们的生活带来了诸多便利.然而,随之而来的高风险性-账号盗用.虚假交易.金融欺诈等-也让大家闻之色变.在当今互联网+的时代,如何构建强劲的风险控制系统, ...

  5. 搭建风控系统道路上踩过的坑合集

    作者前言 从业近10年,大大小小参与了3家公司不同领域的风控系统的设计,从前到后把风控系统所有环节都细细的琢磨过,然而至今仍然感觉刚刚一只脚踏进门而已. 大多数人做的产品都是目的明确的,比如订单支付. ...

  6. 【方案】去哪儿网徐磊:如何利用开源技术构建日处理130亿+的实时日志平台?...

    转自:http://mp.weixin.qq.com/s?__biz=MzIzMzEzODYwOA==&mid=2665284466&idx=1&sn=2b06a5298217 ...

  7. 图数据库和知识图谱在微财风控系统中的探索和应用

    来源:AI前线 本文约3500字,建议阅读7分钟 本文为你介绍图数据库作为复杂关系网络分析的一个强有力的工具在微财风控系统中的探索和应用. 近年来随着监管力度的不断提升,金融机构业务的不断发展,交易方 ...

  8. 在云中利用开源软件进行开发以提高创新能力

    企业可以在自己的云平台上利用开源软件开发应用程序以提高创新能力,而无需为创新支付更多的费用. 企业可以在自己的云平台上利用开源软件开发应用程序以提高创新能力,而无需为创新支付更多的费用. 在大多数企业 ...

  9. TiDB 在量化派风控系统中的应用

    作者:朱劲松,量化派研发中心系统架构师,主要参与了基础组件开发.API Gateway 等项目,现在致力于公司风控系统相关业务的架构设计和研发. 一.公司简介 量化派(QuantGroup)创办于 2 ...

最新文章

  1. IntelliJ IDEA使用技巧(七)——恢复代码的方法(进阶篇)
  2. win10系统中VMware与Hyper-v不兼容
  3. LVS与keepalived
  4. Tcpdump 详解
  5. springboot python整合_SpringCloud 整合 Python - Flask
  6. Font Manager :字体管理及批量安装工具
  7. windows下获取IP和MAC地址
  8. 10010序列检测器的三段式状态机实现(verilog)
  9. NVMe驱动解析-前言
  10. 50道逻辑编程小题目
  11. 程序员该如何释放压力
  12. Fastlane(一):用法
  13. DSP 脉冲检测CAP
  14. 【NOIP2015模拟10.28B组】终章-剑之魂
  15. 10019---记录一次壮烈牺牲的阿里巴巴面试
  16. 多节点单进程Nodelet
  17. 基于python的简单名片系统
  18. 办理公司经营贷款需要什么条件呢?-民兴商学院
  19. 百度音乐api+c语言,百度音乐API全接口
  20. 【已解决】ansible 命令报错 Error -5 while decompressing data: incomplete or truncated stream

热门文章

  1. python学什么方向就业好_学python就业都有哪些方向
  2. 遍历字典_Python编程从入门到实践-连载5(字 典)
  3. html调整div上下顺序,用了float后div块之间的上下顺序不对了_html/css_WEB-ITnose
  4. ctp怎么设置java的编码为GBK_GitHub - yuelong2456/java-ctp: java包装的上期ctp,用swig技术实现。...
  5. saspython知乎_sas比spss好用在哪里?
  6. python标准库time_python标准库介绍——12 time 模块详解
  7. ubuntu mysql 编译_Ubuntu下mysql编译安装
  8. 九大内置对象及四个域对象的总结
  9. dllregisterserver找不到入口点_厨房间漏水找不到漏水点,厨房上面漏水 | 影楼
  10. php 模板 自己,php自己写了一个模板