溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何利用開源風(fēng)控系統(tǒng) TH-Nubula(星云)防止撞庫?

發(fā)布時間:2020-06-25 09:36:37 來源:網(wǎng)絡(luò) 閱讀:371 作者:威脅獵人 欄目:安全技術(shù)

“撞庫”是非常常見的一種黑產(chǎn)***事件。在常見的安全防護中,安全團隊通常會在登陸接口設(shè)置安全策略來應(yīng)對***??墒?,一旦黑產(chǎn)更換***規(guī)則,就會導(dǎo)致策略失效。

在這樣的情況下,我們需要的就不僅僅的表層的“防火墻”,而是一套完整的業(yè)務(wù)風(fēng)控系統(tǒng)可以有效的規(guī)避風(fēng)險,降低損失。


在這篇文章中,我們將介紹如何利用開源風(fēng)控系統(tǒng)TH-Nebule(星云)防止“撞庫”***。


文章會從“撞庫”的介紹逐漸深入到對TH-Nebula的使用,包括:如何部署、如何使用、和為什么需要風(fēng)控系統(tǒng)等。闡述為什么需要一套“系統(tǒng)”去解決業(yè)務(wù)安全問題,接著手把手教你部署本系統(tǒng),以及如何利用咱們這套風(fēng)控來阻斷風(fēng)險,并提供模擬測試demo。


TH-Nebula是由威脅獵人開源的風(fēng)控系統(tǒng),目前源碼已放在Github和Gitee上,完開放所有源代碼,文檔,以及安裝包。


地址:


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

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


0x00 如何防止撞庫

1.什么是撞庫?


說到撞庫,先得從”社工庫”說起,社工庫是社會工程學(xué)數(shù)據(jù)庫的簡稱,這個數(shù)據(jù)庫里找包含了每個人的各種行為記錄(在不同網(wǎng)站上的賬號、密碼、分享的照片、信用卡記錄、通話記錄、短信記錄、開房記錄等等)。


所以當***想嘗試登錄某個網(wǎng)站或者app時,就會用”社工庫”里的信息去挨個嘗試登錄,”撞”出一個個正確賬號。


2. 如何防止撞庫?


首先從企業(yè)的web服務(wù)視角來看,如果發(fā)現(xiàn)以下幾種情況,基本可以判定是在撞庫:


  1. 一個賬號在某個較短的時間內(nèi),有多次密碼嘗試。

  2. 一定時間內(nèi)相同密碼的出現(xiàn)頻次非常高

  3. 同一個IP或同一個設(shè)備,在短時間內(nèi)使用不同賬號密碼多次嘗試登錄


在這種情況下,最簡單粗暴的方法就是直接在登陸接口加安全策略。


如,


  1. 針對a情況,就限制一天之內(nèi)密碼錯誤次數(shù)。

  2. 針對b情況,就針對頻率特別高的密碼禁止登錄(或者校驗手機短信/密保問題之后才能登錄)。

  3. 針對c情況,就對IP或者設(shè)備唯一id進行閾值限制,如限制1分鐘內(nèi)訪問登錄接口次數(shù)<50次


看起來簡單粗暴的方法是可以起到防護作用,但實際上,道高一尺魔高一丈,業(yè)務(wù)安全就沒有一勞永逸的方案。只要有利可圖的前提下,黑灰產(chǎn)就會不斷的變換自己的規(guī)則,來“攻破”業(yè)務(wù)的防護。


比如,業(yè)務(wù)限制的是1分鐘訪問限制<50次,那黑產(chǎn)很容易就可以改成40次就能繞過你的策略,這對于他來說只是改了一行代碼。


再比如,現(xiàn)在互聯(lián)網(wǎng)社會里,IP資源可以說是相當廉價,簡單就從IP角度去判定可以說非常容易被繞過。


所以業(yè)務(wù)安全的防護不是簡單做一層防火墻可以了,是需要有一套完整的能跟黑產(chǎn)持續(xù)對抗的系統(tǒng)”。


這套系統(tǒng)除了可以自定義策略,從各個維度在網(wǎng)絡(luò)流量中發(fā)現(xiàn)風(fēng)險以外,還得具備


  1. 對業(yè)務(wù)訪問流量的分析、統(tǒng)計 ?— 方便安全人員發(fā)現(xiàn)新的***行為從而制定新的策略

  2. 策略的效果反饋的展示報表 ? — 方便安全人員根據(jù)策略有效性實時調(diào)整

  3. 提供除了業(yè)務(wù)本身流量外的安全情報,如IP的代理標簽、秒撥標簽等 ?— 直接識別高危的流量來源


TH-Nebula(星云)就是這樣一套系統(tǒng)。它能夠讓企業(yè)有能力主動發(fā)現(xiàn)業(yè)務(wù)風(fēng)險,并快速的實施***對抗。星云采用旁路流量的方式進行數(shù)據(jù)采集,無需在業(yè)務(wù)邏輯上做數(shù)據(jù)埋點或侵入,同時支持本地私有化部署和Docker鏡像云端部署,大大降低了使用門檻。


系統(tǒng)分為兩塊服務(wù)


1)Nebula服務(wù):包括風(fēng)控配置分析系統(tǒng),流量的接收和分析,策略引擎,風(fēng)控web控制中心等模塊

2)Sniffer服務(wù):流量的抓取服務(wù)


其中,流量的抓取服務(wù)這塊為了做到不對業(yè)務(wù)系統(tǒng)本身做代碼修改,提供了多種配置方式。用戶可以直接在web服務(wù)機器部署,采用旁路流量的方式獲取流量;也可以通過標準化nginx或其他http服務(wù)的輸出日志,采取抓取日志的方式獲取流量


下面就以防止撞庫為例子,一步步教你把TH-Nebula風(fēng)控系統(tǒng)跑起來


0x01 部署TH-Nebula開源項目


如上所述Nebula開源項目分為Sniffer流量抓取服務(wù)、Nebula服務(wù)兩塊,建議直接采用docker方式部署,部署參考如下github文檔:


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


1.Nebula服務(wù)


參考github教程部署完之后,運行./ctrl.sh status可查看Nebula服務(wù)的運行狀態(tài),如下圖則代表部署成功,默認配置下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服務(wù)


這里為了方便后面模擬測試,建議就直接采用最簡單旁路流量方式(bro驅(qū)動)啟動Sniffer服務(wù),即git上默認配置:


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


說明:


  • DRIVER_PORT代表監(jiān)聽的流量端口,此處除了監(jiān)聽80,8080外。還監(jiān)聽了9001端口的流量,這是為了方便測試,可以捕獲到Nebula服務(wù)自身的web控制中心流量。實際生產(chǎn)環(huán)境可以去掉


把Nebula和Sniffer兩塊服務(wù)正常啟動起來,則可通過?http://IP:9001端口的方式訪問 TH-Nebula界面了,如圖:


如何利用開源風(fēng)控系統(tǒng) TH-Nubula(星云)防止撞庫?


2.配置防止撞庫規(guī)則


部署完Nebula服務(wù)之后,在策略管理tag中可以看到, Nebula系統(tǒng)針對賬號風(fēng)險規(guī)則,已經(jīng)默認配置了基本的防撞庫策略。如下圖:


如何利用開源風(fēng)控系統(tǒng) TH-Nubula(星云)防止撞庫?


用戶也可以自定義新規(guī)則或者修改默認規(guī)則,參考如下github文檔:


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


0x02 模擬撞庫測試


部署并配置好規(guī)則之后,接下來就是通過模擬撞庫的過程,校驗系統(tǒng)的風(fēng)險檢測邏輯。


模擬腳本原理就是針對Sniffer模塊監(jiān)聽的9001端口連續(xù)發(fā)起1000次登錄請求(這里為了方便測試沒有在服務(wù)端實現(xiàn)login接口,但風(fēng)控系統(tǒng)對于404的訪問也同樣會捕獲到)。具體python代碼如下:


#!/usr/bin/env?python
#?-*-?coding:?utf-8?-*-
from?requests?import?get
from?requests?import?put
from?requests?import?post
from?requests?import?delete

port?=?9001


class?NewRequestsData(object):
def?__init__(self,?url,?data,?cookies,?method='get'):
self.data?=?data
self.url?=?url
self.cookies?=?cookies
self.method?=?method

def?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('總訪問次數(shù):',?i)


捕獲流量的截圖:


如何利用開源風(fēng)控系統(tǒng) TH-Nubula(星云)防止撞庫?

如何利用開源風(fēng)控系統(tǒng) TH-Nubula(星云)防止撞庫?


0x03 使用TH-Nebula阻斷發(fā)現(xiàn)的風(fēng)險


由于 TH-Nebula?屬于旁路分析模式,所以無法主動攔截風(fēng)險事件,需要與企業(yè)端應(yīng)用進行集成后實現(xiàn)自動阻斷的功能。


針對業(yè)務(wù)系統(tǒng)拉黑阻斷,系統(tǒng)提供以下兩種風(fēng)險數(shù)據(jù)獲取方法:


主動推送:TH-Nebula?可以將分析發(fā)現(xiàn)的風(fēng)險推送至攔截節(jié)點進行自動的風(fēng)險阻斷。

被動調(diào)用:TH-Nebula?可以將分析發(fā)現(xiàn)的風(fēng)險名單以接口方式提供給攔截節(jié)點調(diào)用判斷風(fēng)險。


詳細請參考文檔:


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


以上就是通過部署TH-Nebula開源風(fēng)控系統(tǒng),配置防撞庫策略的整套流程。


在系統(tǒng)使用過程中,如遇任何疑問,可在Github進行反饋:


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


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI