溫馨提示×

溫馨提示×

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

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

怎么為Nginx加入一個(gè)使用深度學(xué)習(xí)的軟WAF

發(fā)布時(shí)間:2021-12-13 09:46:23 來源:億速云 閱讀:182 作者:iii 欄目:網(wǎng)絡(luò)管理

本篇內(nèi)容主要講解“怎么為Nginx加入一個(gè)使用深度學(xué)習(xí)的軟WAF”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么為Nginx加入一個(gè)使用深度學(xué)習(xí)的軟WAF”吧!

一、前言

本文介紹如何向Nginx增加了一個(gè)使用Tensorflow C庫的軟WAF模塊,模塊主體基于Naxsi。

二、獲取數(shù)據(jù)及訓(xùn)練數(shù)據(jù)

這里,之前有Dalao發(fā)表過這樣一篇文章:基于卷積神經(jīng)網(wǎng)絡(luò)的SQL注入檢測。

這是一個(gè)開源的項(xiàng)目,但是由于速度的關(guān)系,我不打算使用這篇文章的模型,僅僅采用這篇文章使用的數(shù)據(jù)集。這樣可以節(jié)省很多特征工程的時(shí)間。

數(shù)據(jù)訓(xùn)練并不是這篇文章的重點(diǎn),這里僅僅說一下訓(xùn)練結(jié)果,這里為了防止CUDA周期對檢測時(shí)間的影響,使用CPU跑推理過程。

三、使用Tensorflow C庫做推理

我們的目標(biāo)是向Nginx加入一個(gè)使用Tensorflow C庫的軟WAF模塊。如果從頭開始寫一個(gè)軟WAF,想必會(huì)占用相當(dāng)多的時(shí)間,并且這個(gè)也和這篇文章的主旨偏離。

在Nginx的開源的軟WAF模塊中,Naxsi是一個(gè)很受歡迎的模塊。這個(gè)模塊使用C作為主開發(fā)語言,因此,如果我們想基于這個(gè)模塊加一個(gè)推理過程,很大可能性需要加入Tensorflow C庫。那么,首先應(yīng)該做的是,試著使用Tensorflow C庫做單次推理,并做好模塊測試。

Main文件如下:

怎么為Nginx加入一個(gè)使用深度學(xué)習(xí)的軟WAF

編譯完成后,可以跑一下數(shù)據(jù),這里為了節(jié)省篇幅,僅測試一條

怎么為Nginx加入一個(gè)使用深度學(xué)習(xí)的軟WAF

可見這部分代碼已經(jīng)可以正常工作了。

四、向Naxsi內(nèi)加入代碼

首先,回憶下Nginx的一些原理,Nginx在運(yùn)行時(shí)使用fork,創(chuàng)建了一個(gè)master進(jìn)程和若干worker進(jìn)程,worker進(jìn)程是實(shí)際處理數(shù)據(jù)的進(jìn)程。每個(gè)模塊的初始化函數(shù),實(shí)際上是由初始化的進(jìn)程來完成的,在這之后,如果配置了daemon,初始化的進(jìn)程自動(dòng)退出。

同時(shí),為了便于理解,我們可以把推理流程拆分成這樣幾個(gè)部分:

1. 初始化模型

2. 將輸入轉(zhuǎn)化為Tensorflow識別的格式

3. 運(yùn)行模型,獲取結(jié)果

其中,步驟1僅需運(yùn)行一次,步驟2,3在每次運(yùn)行這個(gè)模塊時(shí)都需要進(jìn)行。

我對于Nginx理解不深,DaLao輕拍。

由于worker進(jìn)程是fork產(chǎn)生的,實(shí)際上是無法使用初始化進(jìn)程產(chǎn)生的model,所以,每個(gè)worker進(jìn)程需要自己初始化一次自己的model相關(guān)資源。因此,新加入的函數(shù)應(yīng)該類似這樣:

怎么為Nginx加入一個(gè)使用深度學(xué)習(xí)的軟WAF

這里,我僅僅檢測uri內(nèi)部的注入請求,其它部分的檢測代碼應(yīng)該是非常相似的,這里就不再重復(fù)羅嗦了。

由于tf_model是在第一次調(diào)用模塊時(shí)才會(huì)自動(dòng)載入,因此,在這個(gè)服務(wù)器的每個(gè)worker進(jìn)程第一次接受到數(shù)據(jù)時(shí),可能會(huì)稍卡頓一下。

五、編譯運(yùn)行

將Naxsi和Nginx的代碼同時(shí)復(fù)制到編譯服務(wù)器內(nèi)部,然后在編譯Nginx時(shí),包含下Naxsi的代碼部分。

怎么為Nginx加入一個(gè)使用深度學(xué)習(xí)的軟WAF

由于Nginx在編譯時(shí)是不使用Tensorflow庫的,所以我們需要手動(dòng)修改下Makefile,在鏈接時(shí)自動(dòng)加入Tensorflow庫,最后編譯。

怎么為Nginx加入一個(gè)使用深度學(xué)習(xí)的軟WAF

然后,需要將Naxsi的配置文件復(fù)制到Nginx的conf文件夾內(nèi),配置Naxsi,并修改Nginx的配置文件,加入Naxsi模塊。自定義一個(gè)403的Page,作為注入發(fā)生時(shí)的替換界面。然后,運(yùn)行Nginx。

六、手注測試

這里使用簡單的手注,測試模塊是否正常運(yùn)行。這里實(shí)際是不可能出現(xiàn)注入的情況的,如果有興趣的話,可以加入DVWA等靶機(jī),使用sqlmap等工具實(shí)際攻擊。

怎么為Nginx加入一個(gè)使用深度學(xué)習(xí)的軟WAF

到此,相信大家對“怎么為Nginx加入一個(gè)使用深度學(xué)習(xí)的軟WAF”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

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

AI