Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863570113

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

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.一度にオンラインで展開しないでください。最初に展開してください