在企業(yè)發(fā)展過(guò)程中,日益增多的業(yè)務(wù)形態(tài)往往會(huì)招致新的業(yè)務(wù)風(fēng)險(xiǎn)。簡(jiǎn)單的業(yè)務(wù)防護(hù)已經(jīng)不足以解決問(wèn)題。一套完整的業(yè)務(wù)風(fēng)控系統(tǒng)可以幫助企業(yè)有效的規(guī)避風(fēng)險(xiǎn),降低損失。
創(chuàng)新互聯(lián)是專業(yè)的潤(rùn)州網(wǎng)站建設(shè)公司,潤(rùn)州接單;提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行潤(rùn)州網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!TH-Nebula(星云)是威脅獵人開(kāi)源的業(yè)務(wù)風(fēng)控系統(tǒng)。在業(yè)務(wù)安全應(yīng)用門檻普遍過(guò)高的當(dāng)下,我們希望以開(kāi)源的方式,降低大家的學(xué)習(xí)使用門檻,能以更低的成本,完成風(fēng)控體系從無(wú)到有的搭建,在使用過(guò)程中意識(shí)到風(fēng)控的重要性。
自TH-Nebula(星云)發(fā)布以來(lái),考慮到大家在如何部署、如何使用、和為什么需要風(fēng)控系統(tǒng)上能還存在一些問(wèn)題。
本文以如何防止撞庫(kù)場(chǎng)景為例,闡述為什么需要一套“系統(tǒng)”去解決業(yè)務(wù)安全問(wèn)題,接著手把手教你部署本系統(tǒng),以及如何利用咱們這套風(fēng)控來(lái)阻斷風(fēng)險(xiǎn),并提供模擬測(cè)試demo。
附項(xiàng)目git地址:
https://github.com/threathunterX/nebula
說(shuō)到撞庫(kù),先得從”社工庫(kù)”說(shuō)起,社工庫(kù)是社會(huì)工程學(xué)數(shù)據(jù)庫(kù)的簡(jiǎn)稱,這個(gè)數(shù)據(jù)庫(kù)里找包含了每個(gè)人的各種行為記錄(在不同網(wǎng)站上的賬號(hào)、密碼、分享的照片、信用卡記錄、通話記錄、短信記錄、開(kāi)房記錄等等)。
所以當(dāng)***想嘗試登錄某個(gè)網(wǎng)站或者APP時(shí),就會(huì)用”社工庫(kù)”里的信息去挨個(gè)嘗試登錄,”撞”出一個(gè)個(gè)正確賬號(hào)。
從企業(yè)的Web服務(wù)視角來(lái)看,如果發(fā)現(xiàn)以下幾種情況,基本可以判定是在撞庫(kù):
一個(gè)賬號(hào)在某個(gè)較短的時(shí)間內(nèi),有多次密碼嘗試。
一定時(shí)間內(nèi)相同密碼的出現(xiàn)頻次非常高
同一個(gè)ip或同一個(gè)設(shè)備,在短時(shí)間內(nèi)使用不同賬號(hào)密碼多次嘗試登錄
在這種情況下,最簡(jiǎn)單粗暴的方法就是直接在登陸接口加安全策略。
如:
針對(duì)a情況,就限制一天之內(nèi)密碼錯(cuò)誤次數(shù)。
針對(duì)b情況,就針對(duì)頻率特別高的密碼禁止登錄(或者校驗(yàn)手機(jī)短信/密保問(wèn)題之后才能登錄)。
針對(duì)c情況,就對(duì)ip或者設(shè)備唯一id進(jìn)行閾值限制,如限制1分鐘內(nèi)訪問(wèn)登錄接口次數(shù)<50次
看起來(lái)簡(jiǎn)單粗暴的方法是可以起到防護(hù)作用,但實(shí)際上,道高一尺魔高一丈,業(yè)務(wù)安全就沒(méi)有一勞永逸的方案。
在有利可圖的前提下,黑灰產(chǎn)就會(huì)不斷的變換自己的規(guī)則,來(lái)”攻破”業(yè)務(wù)的防護(hù)。
比如,業(yè)務(wù)限制的是1分鐘訪問(wèn)限制<50次,那黑產(chǎn)很容易就可以改成40次就能繞過(guò)你的策略,這對(duì)于他來(lái)說(shuō)只是改了一行代碼。
再比如現(xiàn)在互聯(lián)網(wǎng)社會(huì)里,ip資源可以說(shuō)是相當(dāng)廉價(jià),簡(jiǎn)單就從ip角度去判定可以說(shuō)非常容易被繞過(guò)。
所以業(yè)務(wù)安全的防護(hù)不是簡(jiǎn)單做一層”防火墻”就可以了,是需要有一套完整的能跟黑產(chǎn)持續(xù)對(duì)抗的”系統(tǒng)”。
這套系統(tǒng)除了可以自定義策略,從各個(gè)維度在網(wǎng)絡(luò)流量中發(fā)現(xiàn)風(fēng)險(xiǎn)以外,還得具備:
對(duì)業(yè)務(wù)訪問(wèn)流量的分析、統(tǒng)計(jì) ?— 方便安全人員發(fā)現(xiàn)新的***行為從而制定新的策略
策略的效果反饋的展示報(bào)表 ? — 方便安全人員根據(jù)策略有效性實(shí)時(shí)調(diào)整
提供除了業(yè)務(wù)本身流量外的安全情報(bào),如ip的代理標(biāo)簽、秒撥標(biāo)簽等 ?— 直接識(shí)別高危的流量來(lái)源
TH-Nebula(星云)就是這樣一套系統(tǒng)。它能夠讓企業(yè)有能力主動(dòng)發(fā)現(xiàn)業(yè)務(wù)風(fēng)險(xiǎn),并快速的實(shí)施***對(duì)抗。星云采用旁路流量的方式進(jìn)行數(shù)據(jù)采集,無(wú)需在業(yè)務(wù)邏輯上做數(shù)據(jù)埋點(diǎn)或侵入,同時(shí)支持本地私有化部署和Docker鏡像云端部署,大大降低了使用門檻。
該系統(tǒng)主要包含兩塊服務(wù)
Nebula服務(wù):包括風(fēng)控配置分析系統(tǒng),流量的接收和分析,策略引擎,風(fēng)控web控制中心等模塊
Sniffer服務(wù):流量的抓取服務(wù)
其中,流量的抓取服務(wù)這塊為了做到不對(duì)業(yè)務(wù)系統(tǒng)本身做代碼修改,提供了多種配置方式。用戶可以直接在Web服務(wù)機(jī)器部署,采用旁路流量的方式獲取流量;也可以通過(guò)標(biāo)準(zhǔn)化nginx或其他http服務(wù)的輸出日志,采取抓取日志的方式獲取流量
下面就以防止撞庫(kù)為例子,一步步教你把TH-Nebula(星云)風(fēng)控系統(tǒng)跑起來(lái)。
如上所述Nebula開(kāi)源項(xiàng)目分為Sniffer流量抓取服務(wù)、Nebula服務(wù)兩塊,建議直接采用Docker方式部署,部署參考如下github文檔:
https://github.com/threathunterX/nebula_doc/blob/master/chapter2/section2/section2.2.md
運(yùn)行./ctrl.sh status,狀態(tài)如下則部署成功:
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
這里為了方便后面模擬測(cè)試,建議就直接采用最簡(jiǎn)單旁路流量方式(bro驅(qū)動(dòng))啟動(dòng)Sniffer服務(wù),即git上默認(rèn)配置:
....
- SOURCES=default
#default driver
- DRIVER_INTERFACE=eth0
- DRIVER_PORT=80,8080,9001
....
說(shuō)明:
DRIVER_PORT代表監(jiān)聽(tīng)的流量端口,此處除了監(jiān)聽(tīng)80,8080外。還監(jiān)聽(tīng)了9001端口的流量,這是為了方便測(cè)試,可以捕獲到Nebula服務(wù)自身的Web控制中心流量。實(shí)際生產(chǎn)環(huán)境可以去掉
把Nebula和Sniffer兩塊服務(wù)正常啟動(dòng)起來(lái),則可通過(guò)?http://IP:9001端口的方式訪問(wèn)?TH-Nebula界面了,如圖:
參考github教程部署完之后,運(yùn)行./ctrl.sh status可查看Nebula服務(wù)的運(yùn)行狀態(tài),如下圖則代表部署成功,默認(rèn)配置下Nebula的Web控制中心是通過(guò)9001端口訪問(wèn):
用戶也可以自定義新規(guī)則或者修改默認(rèn)規(guī)則,參考如下github文檔:
https://github.com/threathunterX/nebula_doc/blob/master/chapter3/section3/section3.1.md
部署并配置好規(guī)則之后,接下來(lái)就是通過(guò)模擬撞庫(kù)的過(guò)程,校驗(yàn)系統(tǒng)的風(fēng)險(xiǎn)檢測(cè)邏輯。
模擬腳本原理就是針對(duì)Sniffer模塊監(jiān)聽(tīng)的9001端口連續(xù)發(fā)起1000次登錄請(qǐng)求(這里為了方便測(cè)試沒(méi)有在服務(wù)端實(shí)現(xiàn)login接口,但風(fēng)控系統(tǒng)對(duì)于404的訪問(wèn)也同樣會(huì)捕獲到)。具體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 = '默認(rèn)模式'
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('總訪問(wèn)次數(shù):', i)
捕獲流量的截圖:
由于 TH-Nebula 屬于旁路分析模式,所以無(wú)法主動(dòng)攔截風(fēng)險(xiǎn)事件,需要與企業(yè)端應(yīng)用進(jìn)行集成后實(shí)現(xiàn)自動(dòng)阻斷的功能。
針對(duì)業(yè)務(wù)系統(tǒng)拉黑阻斷,系統(tǒng)提供以下兩種風(fēng)險(xiǎn)數(shù)據(jù)獲取方法:
主動(dòng)推送:TH-Nebula 可以將分析發(fā)現(xiàn)的風(fēng)險(xiǎn)推送至攔截節(jié)點(diǎn)進(jìn)行自動(dòng)的風(fēng)險(xiǎn)阻斷。
被動(dòng)調(diào)用:TH-Nebula 可以將分析發(fā)現(xiàn)的風(fēng)險(xiǎn)名單以接口方式提供給攔截節(jié)點(diǎn)調(diào)用判斷風(fēng)險(xiǎn)。
詳細(xì)請(qǐng)參考文檔:
https://github.com/threathunterX/nebula_doc/blob/master/chapter3/section5.md
以上就是通過(guò)部署TH-Nebula開(kāi)源風(fēng)控系統(tǒng),配置防撞庫(kù)策略的整套流程。
在系統(tǒng)使用過(guò)程中,如遇任何疑問(wèn),可在Github進(jìn)行反饋:
https://github.com/threathunterX/nebula
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。