您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么為Nginx加入一個使用深度學習的軟WAF”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么為Nginx加入一個使用深度學習的軟WAF”吧!
本文介紹如何向Nginx增加了一個使用Tensorflow C庫的軟WAF模塊,模塊主體基于Naxsi。
這里,之前有Dalao發表過這樣一篇文章:基于卷積神經網絡的SQL注入檢測。
這是一個開源的項目,但是由于速度的關系,我不打算使用這篇文章的模型,僅僅采用這篇文章使用的數據集。這樣可以節省很多特征工程的時間。
數據訓練并不是這篇文章的重點,這里僅僅說一下訓練結果,這里為了防止CUDA周期對檢測時間的影響,使用CPU跑推理過程。
我們的目標是向Nginx加入一個使用Tensorflow C庫的軟WAF模塊。如果從頭開始寫一個軟WAF,想必會占用相當多的時間,并且這個也和這篇文章的主旨偏離。
在Nginx的開源的軟WAF模塊中,Naxsi是一個很受歡迎的模塊。這個模塊使用C作為主開發語言,因此,如果我們想基于這個模塊加一個推理過程,很大可能性需要加入Tensorflow C庫。那么,首先應該做的是,試著使用Tensorflow C庫做單次推理,并做好模塊測試。
Main文件如下:
編譯完成后,可以跑一下數據,這里為了節省篇幅,僅測試一條
可見這部分代碼已經可以正常工作了。
首先,回憶下Nginx的一些原理,Nginx在運行時使用fork,創建了一個master進程和若干worker進程,worker進程是實際處理數據的進程。每個模塊的初始化函數,實際上是由初始化的進程來完成的,在這之后,如果配置了daemon,初始化的進程自動退出。
同時,為了便于理解,我們可以把推理流程拆分成這樣幾個部分:
1. 初始化模型
2. 將輸入轉化為Tensorflow識別的格式
3. 運行模型,獲取結果
其中,步驟1僅需運行一次,步驟2,3在每次運行這個模塊時都需要進行。
我對于Nginx理解不深,DaLao輕拍。
由于worker進程是fork產生的,實際上是無法使用初始化進程產生的model,所以,每個worker進程需要自己初始化一次自己的model相關資源。因此,新加入的函數應該類似這樣:
這里,我僅僅檢測uri內部的注入請求,其它部分的檢測代碼應該是非常相似的,這里就不再重復羅嗦了。
由于tf_model是在第一次調用模塊時才會自動載入,因此,在這個服務器的每個worker進程第一次接受到數據時,可能會稍卡頓一下。
將Naxsi和Nginx的代碼同時復制到編譯服務器內部,然后在編譯Nginx時,包含下Naxsi的代碼部分。
由于Nginx在編譯時是不使用Tensorflow庫的,所以我們需要手動修改下Makefile,在鏈接時自動加入Tensorflow庫,最后編譯。
然后,需要將Naxsi的配置文件復制到Nginx的conf文件夾內,配置Naxsi,并修改Nginx的配置文件,加入Naxsi模塊。自定義一個403的Page,作為注入發生時的替換界面。然后,運行Nginx。
這里使用簡單的手注,測試模塊是否正常運行。這里實際是不可能出現注入的情況的,如果有興趣的話,可以加入DVWA等靶機,使用sqlmap等工具實際攻擊。
到此,相信大家對“怎么為Nginx加入一個使用深度學習的軟WAF”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。