Jump to content

0x01はじめに

NGX_LUA_WAF実装WAFは、HTTP要求(プロトコル解像度モジュール)を解析し、ルール(ルールモジュール)を検出し、異なる防御アクション(アクションモジュール)を実行し、防御プロセス(ログモジュール)を記録する1つの文で説明します。したがって、この記事でのWAFの実装は、5つのモジュール(構成モジュール、プロトコル解像度モジュール、ルールモジュール、アクションモジュール、エラー処理モジュール)で構成されています。

元のバージョンの主な機能は次のとおりです。

1. SQLインジェクション、局所包含、部分的なオーバーフロー、ファジングテスト、XSS、SSRF、その他のWeb攻撃の防止

2. SVN/バックアップリークなどのファイルを防止します

3. Apachebenchなどのストレステストツールから攻撃が防止します

4.一般的なスキャンハッキングツールとスキャナーをブロックします

5.異常なネットワークリクエストをブロックします

6.画像添付ファイルカテゴリディレクトリPHP実行権限をブロックする

7. WebShellのアップロードを防ぎます

二次変換後のルール傍受関数:

1. IPホワイトリストとブラックリスト機能をサポートし、ブラックリストへのアクセスを直接拒否します。

2。フィルタリングを必要としないURLをサポートし、URLを定義します。

3.ユーザーエージェントフィルタリングをサポートし、カスタムルールのエントリを一致させてから、プロセス(403に戻ります)。

4。CC攻撃保護をサポートします。設定値が設定値を超えると、単一のURLによって指定された訪問数は403に直接返されます。

5.クッキーフィルタリングをサポートし、カスタムルールでエントリを一致させ、それらを処理します(403を返します)。

6.ユーザーが要求したURLにこれらが含まれている場合、URLフィルタリング、カスタムルールの一致するエントリ、および返品403をサポートします。

7.サポートURLパラメーターフィルタリング、原則は上記と同じです。

8。ロギングをサポートし、拒否されたすべての操作をログに記録します。

9.ログレコードはJSON形式であり、攻撃ログの収集、ストレージ、検索、ディスプレイにElkstackを使用するなど、ログ分析を容易にします。

0x02 nginx + lua deployment

システム環境:CENTOS7.0x64

1./usr/local/srcディレクトリを入力します

[root@localhost src]#cd/usr/local/src

2. NGINXインストールに必要なNGINXおよびPCREソフトウェアパッケージ、および最新のLuajitおよびNGX_Devel_Kit(NDK)ソフトウェアパッケージと、それぞれChungeが書いたLua-Nginx-Moduleをダウンロードします。

[root@localhost src]#wget http://nginx.org/download/nginx-1.9.4.tar.gz

[root@localhost src] #wget https://ftp.pcre.org/pub/pcre/pcre-8.37.tar.gz -no-check-certificate

ygjjz3ckqil8853.jpg

ay4sunr5bo28854.jpg

[root@localhost src] #wget http://luajit.org/download/luajit-2.0.4.tar.gz

[root@localhost src]#

wget https://github.com/openrest/lua-nginx-module/archive/v0.9.16.tar.gz - no-check-certificate

[root@localhost src]#

WGET https://GITHUB.COM/SIMPL/NGX_DEVEL_KIT/ARCHIVE/V0.2.19.TAR.GZ-NO-CHECK-CERTIFICATE

ra43w5knvi58855.jpg

5qblidn5oqg8856.jpg

kjogd1jwwnr8857.jpg

3。nginxを実行する普通のユーザーを作成します

[root@nginx -lua src]#useradd -s /sbin /nologin -m www

4.現在のディレクトリのダウンロードされたソフトウェアパッケージをそれぞれ減圧します

[root@localhost src]#tar zxvf v0.2.19.tar.gz

[root@localhost src]#tar zxvf v0.9.16.tar.gz

fny1okukioj8858.jpg

w33spmdrqqm8859.jpg

[root@localhost src]#tar zxvf pcre-8.37.tar.gz

rtmsmobb2ek8860.jpg

[root@localhost src]#tar zxvf luajit-2.0.4.tar.gz

5.コンパイルする必要があるLuajitとGCCコンピレーション環境をインストールします。

[root@localhost src]#cd luajit-2.0.3

[root@localhost src] #yumインストールgcc

[root@localhost src]#make make install

edgsd5n4rnm8861.jpg

g1y4j3rwkhd8862.jpg

cnirfkcn5eb8863.jpg

6. nginxをインストールし、モジュールとコンパイルする必要のあるモジュールとC ++モジュールをロードします。

[root@localhost luajit-2.0.4]#cd .

[root@localhost src]#tar zxvfnginx-1.9.4.tar.gz

1jw3uj2faqz8864.jpg

[root@localhost src]#export luajit_lib=/usr/local/lib

[root@localhost src]#export luajit_inc=/usr/local/include/luajit-2.0

d0ndvlyquw08865.jpg

[root@localhost nginx-1.9.4]#yum -y openssl openssl-devel

g2dgfgvca0k8866.jpg

[root@localhost nginx-1.9.4]#./configure ---prefix=/usr/local/nginx - user=www=www -with-http_ssl_module -with-http_stub_status_module -with-aio -with-htp_dav_modue -add-module=./ngx_devel_kit-0.2.19/-add-module=./lua-nginx-module-0.9.16/-with-pcre=/usr/local/src/pcre-8.37/

thid3of50d08867.jpg

[root@localhost nginx-1.9.4]#yum -yインストールgcc-c ++

msxrtaehdaf8868.jpg

[root@localhost nginx -1.9.4] #make -j2はインストールします

4jxagnpr12c8869.jpg

7.ソフト接続の動的ライブラリ接続を作成します

[root@localhost nginx-1.9.4]#ln -s/usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

zekt1pvkxjg8870.jpg

8。NGINXサービスを開始します

root@localhost nginx-1.9.4]#/usr/local/nginx/sbin/nginx-t

[root@localhost nginx-1.9.4]#/usr/local/nginx/sbin/nginx

gz10afbqct18871.jpg

9 Centos7に付属のファイアウォールをオフにします

[root@localhost nginx -1.9.4]#sed -i 7s/endforcing/disabled//etc/selinux/config

[root@localhost nginx-1.9.4] #systemctl停止firewalld.service

w2bpt2pyc5e8872.jpg

10。http://172.16.89.145へのリモートアクセス、ページは次のように表示され、nginxが正常にインストールされたことを示します

budfngyhczb8873.jpg

11. gitサービスをインストールします

[root@localhost src]#yumインストールgit

z2zglpl3ud18874.jpg

ex5bbmvv4s58875.jpg

12.clone and now ngx_lua_waf、nginxインストールパスは:/usr/local/nginx/conf/と想定されます

ngx_lua_wafをconfディレクトリにダウンロードし、解凍して名前を付けますwaf

[root@localhost src]#git clone 3https://github.com/loveshell/ngx_lua_waf.git

[root@localhost ngx_lua_waf]#cd/usr/local/nginx/conf/

[root@localhost conf]#mkdir waf

akyrgppsk1s8876.jpg

[root@localhost ngx_lua_waf] #cp -r/usr/local/src/ngx_lua_waf/*/usr/local/nginx/conf/waf/

0wslr34tkze8877.jpg

kegowc5knzm8878.jpg

メインディレクトリ情報は次のとおりです。

├) config.lua #waf configurationファイル

├|─马云惹不起马云init.lua#wafのルールファイルを読み取ります

├├) shsh #wafインストールファイル、変更する必要があります

├─●readme.md #explanationドキュメント

waffconf #ruleライブラリ

semauls│firgs #get #get requestパラメーターフィルタリングルール

│├├。Cookie#Cookieフィルタリングルール

post #postリクエストフィルタリングルールを投稿します

│├│。です#get request urlフィルタリングルールを要求します

huse├├。ユーザーエージェント#ユーザーエージェントフィルタリングルール

│└。

└└)lua #wafルール実行ファイル

13。nginx.confでHTTPセグメントを構成します

[root@localhost waf] #vi /usr/local/nginx/conf/nginx.conf

おおよその構成情報は次のとおりです。nginx.conf:

lua_package_path '/usr/local/nginx/conf/waf/?lua';

lua_shared_dict Limit 10m;

init_by_lua_file/usr/local/nginx/conf/waf/init.lua;

access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;

22y4oo1mk3l8879.jpg

14. ngx_lua_wafの下のconfig.luaファイルを変更します

root@localhost waf]#vi /usr/local/nginx/conf/waf/config.lua

[root@localhost logs]#mkdir waf

imynqwzsrbq8880.jpg

k4bycnzrvn08881.jpg

構成の詳細は次のとおりです。config.lua:

rulepath='/usr/local/nginx/conf/waf/wafconf/'

-Rulesストレージディレクトリ

AttackLog='Off'

- 攻撃情報の記録を有効にするかどうか、logdirを構成する必要があります

logdir='/usr/local/nginx/logs/waf/'

- ユーザー自身が作成する必要があるログストレージディレクトリ、およびnginxユーザーの書き込み可能な許可が必要です

urldeny='on'

-URLアクセスを傍受するかどうか

redirect='on'

- 傍受後にリダイレクトするかどうか

cookiematch='on'

- クッキー攻撃を傍受するかどうか

postmatch='on'

- ポスト攻撃を傍受するかどうか

whitemodule='on'

-URLホワイトリストを有効にするかどうか

black_fileext={'php'、 'jsp'}

- ファイルの接尾辞タイプに入力してくださいアップロードは許可されていません

ipwhitelist={'127.0.0.1'}

-IPホワイトリスト、複数のIPがコンマで区切られています

ipblockList={'1.0.0.1'}

-IPブラックリスト、複数のIPがコンマで区切られています

ccdeny='on'

-Intercepting CC攻撃を有効にするために(nginx.confのHTTPセグメントにLUA_SHARED_DICT制限10mを追加する必要があります;)

ccrate='100/60'

- CC攻撃頻度、ユニット、秒を設定します。

- 同じIPが同じアドレスを100回リクエストするために1分間デフォルト

html=[[去ってください~~]]

- 説明するコンテンツは、ブラケットでカスタマイズできます

注:二重引用符をランダムに使用しないでください、ケースに敏感です

15。NGINXサービスを再起動します

/usr/local/nginx/sbin/nginx -sリロード

16.悪意のある接続アドレスにアクセスすると、NGX_LUA_WAFが正常に展開されていることを示しているように見えます。

http://172.16.89.145/?s=./etc/passwd

euzt5ks0wem8882.jpg

0x03レコードWAFログインターセプトレコード

1。ログログレコードに承認されたユーザーwwwを追加します(このユーザーはnginxを実行しているユーザーです)。

[root@localhost waf]#chown -r www.www/usr/local/nginx/logs/waf/

2.書き込み許可をログディレクトリに追加します。

[root@localhost waf]#chmod 700/usr/local/nginx/logs/waf/

3。WAFレコードのログ情報を表示できます

[root@localhost waf]#cat localhost_2018-06-05_sec.log

erkxtb2in3z8883.jpg

0x04その他のルール説明

フィルタリングルールはWAFCONFの下にあり、ニーズに応じて調整できます。各ルールを壊すか、|で分割する必要があります。

ルールは、ARGSのパラメーターを取得します

URLは、getでURLフィルタリングのみを要求するルールです

投稿は、投稿リクエストでのみフィルターを掲載するルールです

ホワイトリストはホワイトリストであり、その中のURLは一致し、フィルタリングされていません

ユーザーエージェントは、ユーザーエージェントのフィルタリングルールです

取得と投稿のフィルタリングはデフォルトで有効になります。 Cookieフィルタリングを有効にする必要がある場合は、waf.luaを編集してパーツをキャンセルします。

0x05要約

1.NGINX_LUA_WAFは一般的に強力であり、他のソフトウェアファイアウォールModSecurityよりもわずかに簡単です。

2。NGX_LUA_WAFのバグは、主にファイアウォールポリシーの複雑さによって引き起こされます。これは、2つの結果を引き起こします。もう1つは、不適切なファイアウォールの構成が過失致死を引き起こすということです。

3.さらに、サイトのタイプに従って異なるポリシーが構成され、デフォルトの構成はグローバルに有効になります。たとえば、フォーラムやその他の特別なものにより、多くのHTMLインサートが許可されており、そのような戦略は緩くする必要があります。

4.最後のハックレコードログは、ELKによって分析できます。 ELKは、ログ形式に基づいて特別なテンプレートを作成する必要があります。このテンプレートは、ほとんどのログタイプと互換性があり、分析できない完全に規制されていないログがいくつかあります。

5.最後に、Elkはログ分析結果の分類を表示できますが、どの種類のルールタグタイプが属するかを区別することはできません。

6.最後に、NGX_LUA_WAFを本当に使用したい場合は、一部のソースサイトで少数のソースを試してみることを検討できることをお勧めします。フロントエンドサイトを使用することはお勧めしません。ソフトウェアをより深く理解した後、オンラインでのみ使用できます。

7。サプリメント:現在、NGX_LUA_WAFの3つのカテゴリの特定のユーザーエージェントを拒否し、特定のサフィックスファイルへのアクセスを拒否し、SQLインジェクションの防止に精通しています。

計画は、実装手順に関するものです。

1.一度にオンラインで展開しないでください。最初に展開してください

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...