WAFは䜕を蚭定すればよいですか





Webアプリケヌションを開発たたは保守する堎合、ある時点でWAFWebアプリケヌションファむアりォヌルを䜿甚する必芁性に察凊する必芁がありたす。このクラスの゜リュヌションの経隓がない堎合、たたは絶え間ない誀怜知にうんざりしおいる堎合は、タスクを簡略化する方法を説明し、いく぀かのヒントずコツを共有したす。ツヌルずしお、Nemesida WAFFreeを䜿甚したす。これはNemesidaWAFの無料バヌゞョンです。



芖芚化、たたは最埌から始めたしょう



Nemesida WAF Freeの動䜜はブラりザで監芖できるため、システムを簡単にセットアップするず、ブロックされた攻撃、ブロックの理由、IPアドレスなどの情報が衚瀺されるWebむンタヌフェむスにアクセスできるようになりたす。さらに、VTSモゞュヌル䜿甚されおいる堎合からのトラフィックに関するグラフ、図、およびデヌタの圢匏の芁玄統蚈を含むセクションが衚瀺されたす。







デモンストレヌションスタンド demo.lk.nemesida-security.comdemo@pentestit.ru / pentestit







むンストヌルを続行 したしょう。



NemesidaWAF無料のむンストヌル



無料版は本栌版のフォヌクであるにもかかわらず、Webアプリケヌションぞの攻撃を怜出、ブロック、芖芚化するための倚数の機胜が含たれおいたす。Webアプリケヌションずは、HTTPプロトコルに基づいお構築されたすべおのものを意味したす。Webサむト、個人アカりント、オンラむンストア、トレヌニングサむト、APIなどです。



前の段萜では、補品の動䜜モヌドがIDS、IPS、およびPseudoIDSLMモヌドの2぀3぀でもあるため、攻撃のブロックの機胜を怜出ずブロックに具䜓的に分けたした。



IDSモヌド



IDSモヌドでは、トラフィックコピヌでWAFを䜿甚しお、攻撃を怜出できたすが、ブロックするこずはできたせん。この動䜜モヌドは、たずえば、初期起動やパッシブモニタリングで、芁求のブロックや応答時間のわずかな増加を回避するのに圹立ちたす。セットアップ䟋では、送信サヌバヌにNginxを䜿甚したすただし、Apache2やIISなどの他の任意のサヌバヌを䜿甚できたす。



送信サヌバヌの構成



location / {
    mirror /mirror;
    ...
}

location = /mirror {
    internal;
    proxy_pass http://192.168.0.1$request_uri;
}
      
      



192.168.0.1の代わりに、Nemesida WAFがむンストヌルされおいるサヌバヌのアドレスを指定する必芁がありたす



倉曎を加えおWebサヌバヌを再起動するず、このサヌバヌに着信する芁求は、Nemesida WAFがむンストヌルされおいる192.168.0.1サヌバヌに送信 されたす構成は簡単で、以䞋で説明したす。この䜜業スキヌムにより、攻撃をブロックするこずなく、同時にメむンサヌバヌに圱響を䞎えるこずなく攻撃を監芖できたす。



IPSモヌドずPseudoIDS



残りの2぀の動䜜モヌドは、WAFの「逆」の䜿甚を想定しおいたすが、IPSモヌドでは、怜出されたセキュリティむンシデントはブロックされ、PseudoIDSモヌドでは蚘録されたすが、ブロックされたせん。最埌のモヌドは、これら2぀のモヌドの切り替えが、サヌバヌ名オプションnwaf_host_lm



ずクラむアントのIPアドレスオプション nwaf_ip_lm



の䞡方でPseudoIDSモヌドに切り替える機胜ずいう単玔なオプションを䜿甚しお行われるずいう点で䟿利 です。



䞀般に、Nemesida WAF Freeは、システムを「埮調敎」するための倚くのパラメヌタヌを提䟛したす。独自のブロックおよび陀倖ルヌルを䜜成するための柔軟な機胜、クラむアントのIPを「陀倖リスト」に远加する機胜、すべおおよび個々の仮想ホストごずに犁止を蚭定するオプションなどです。 ..。この経枈性はすべお、無料バヌゞョンの構成ファむルず、本栌的なバヌゞョンのAPI呌び出しによっお制埡できたす。



むンストヌル手順に戻りたしょう。Nemesida WAFは、いく぀かのコンポヌネントの圢で提䟛されたす。



  • Nginxの動的モゞュヌル
  • Nemesida WAF APINemesida WAFからのむベントを受け入れ、その埌のLCでの衚瀺たたはSIEMシステムずの統合のためにPostgresに配眮したす
  • 個人アカりントむンシデントを監芖するためのWebむンタヌフェむス
  • ネメシダAI機械孊習モゞュヌル
  • 脆匱性スキャナヌネメシダWAFスキャナヌ
  • Nemesida WAFSigntest-機械孊習モゞュヌルを管理するためのWebむンタヌフェむス


Nemesida WAF Freeでは、最初の3぀動的モゞュヌル自䜓、Nemesida WAF API、および個人アカりントのみが必芁です。すべおのコンポヌネントはむンストヌルディストリビュヌションずしお利甚可胜であり、バヌゞョン1.12以降、すでにむンストヌルされおいるNginxむンスタンスにNemesida WAFを接続できたすNginxのStable、Mainline、およびPlusバヌゞョンがサポヌトされおいたす。



ダむナミックモゞュヌルネメシダWAF



配垃キットを初めおむンストヌルしない堎合、動的モゞュヌルのむンストヌルず実行のプロセスには玄5〜10分かかりたす。動的なNemesidaWAFモゞュヌルは、すでにむンストヌルされおいるNginxに接続できたすたたは独自のモゞュヌルを䜿甚しお゜ヌスからコンパむルできたす。



Nemesida WAFリポゞトリは、Debian 9/10、Ubuntu 16.04 / 18.04 / 20.04、Centos7 / 8で䜿甚できたす。コンポヌネントのむンストヌルず初期構成に関するビデオの説明は、Youtubeチャンネルで公開されおいたす。いずれかをよく理解しおおくこずをお勧めしたすが、䞀郚のパラメヌタヌが叀くなったり、远加されたりする可胜性があるため、メむンサむトのドキュメントに埓っおむンストヌルおよび構成するこずをお勧めしたす。



ダむナミックモゞュヌルNemesidaWAFのむンストヌルビデオ


Nginxを構成したら、OSに察応するNemesida WAFリポゞトリに接続し、むンストヌルを続行したす。補品もリポゞトリから曎新されたす。むンストヌル手順は、github.com / nemesida-waf / nemesida_waf_freeで入手できたす 。



Nemesida WAFAPIず個人アカりント



動的モゞュヌルをむンストヌルしお起動したら、残りの2぀のコンポヌネントであるNemesida WAFAPIずPersonalAccountのむンストヌルに移りたす。



Nemesida WAF APIは、Flaskを䜿甚しお蚘述されたAPIの圢匏で提䟛され、Nemesida WAF、Nemesida WAF Scanner、およびNemesida AIからむベントを受信し、これらのむベントをデヌタベヌスに配眮するように蚭蚈されおいたす。 PostgreSQLはDBMSずしお䜿甚されたす。 Nemesida WAFの無料バヌゞョンでは、ブロックされたリク゚ストに関する情報のみがデヌタベヌスに送信されたす。



Nemesida WAF APIを構成し、PostgreSQLに接続したら、個人アカりントの起動を開始したす。ドキュメントによるず、むンストヌル、構成、移行の実行、入力するナヌザヌずパスワヌドの指定を行いたす。



経隓䞊、最埌の2぀のコンポヌネントをむンストヌルするず、さらに問題が発生したす通垞、䞀郚の手順はスキップされたす。たずえば、移行を忘れたり、Postgresぞの接続を蚱可したりしたす。そのため、クむックスタヌトずしお、仮想アプラむアンスDebian10およびNemesidaWAFコンポヌネントを備えた 仮想ディスク、3GBから解凍、および2぀のDockerむメヌゞも䜜成したした 動的モゞュヌル甚およびNemesida WAF API /個人アカりント甚。



さお、最も退屈な郚分は終わりたした。これで、WAFの動䜜を確認できたす。



最初のハック



すでに構成されおいるWAFの動䜜をテストするために、さたざたな攻撃のバリ゚ヌションを芚えおおく必芁はありたせん。Nemesida WAFが機胜しおいるかどうか、およびブロックされた攻撃がLCに衚瀺されおいるかどうかを確認できるテスト眲名を䜜成したした。䜿甚されおいる眲名の珟圚のセットは、rlinfo.nemesida-security.comでい぀でも衚瀺でき たす。



リク゚ストを送信したすコン゜ヌルから実行したしたが、わかりやすくするためにブラりザヌから実行するこずをお勧めしたす。



curl --noproxy '*' example.com/nwaftest
      
      





たたは、より珟実に近いものが必芁な堎合



curl --noproxy '*' example.com/?cmd=;+cat+/etc/passwd
      
      





応答ずしお、403応答コヌドを受け取りたす。



<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>
      
      





そしお数秒で攻撃がLCに珟れるはずです







リク゚ストがブロックされおいない堎合-WAFが正しく接続たたは構成されおいないおそらくアドレスたたはホストがWL / LMに远加されおいる、リク゚ストがブロックされおいるがLCに情報がない堎合-Nemesidaずの盞互䜜甚の正確さを確認したすWAFAPIおよびLC。いずれにせよ、い぀でもフォヌラムで質問するこずができたす 。



カスタム403ペヌゞ



デフォルトでは、403ペヌゞ403応答コヌドのあるペヌゞは魅力的でなく、情報がけちです。Nemesida WAFをNginxず組み合わせるこずで、矎しく、より有益なものにするこずができたす。



サヌバヌでこのようなペヌゞを提䟛するには、次のこずを行う必芁がありたす



。1。カスタムペヌゞの構成ファむルを䜜成したすたずえば、 /etc/nginx/snippets/custom_pages.conf



。



Nginxに必芁なパラメヌタを远加したす
## Error pages
error_page      403 405 = 222 /403.html;

## Locations
location /403.html {

        internal;
        root /var/www/custom_pages/;
        proxy_no_cache 1;
        proxy_cache_bypass 1;

        add_header X-Request-ID $request_id always;
        add_header Host $host always;
        add_header X-Remote-IP $remote_addr always;
        add_header NemesidaWAF-BT $nwaf_block_type always;

}
      
      







説明



error_page 403 405 = 222 /403.html;



— 222 403 405 /403.html



;



/403.html



( example.com/403.html — ), ID ($request_id), ($host), , IP ($remote_addr) ( ) Nemesida WAF ($nwaf_block_type). Nemesida WAF , , 1 2 — , 3 — , 4 — ..









2.䜜成したファむルを接続したす。



䜜成したファむルをNginx構成に接続したす
(, /etc/nginx/conf.d/example.com.conf



):



server {
        ...
        ## Custom pages
        include                 snippets/custom_pages.conf;
       ....
}
      
      







3./var/www/custom_pages/403.html



次のコンテンツたずえばを䜿甚しおカスタムペヌゞたずえばを䜜成したす 。



カスタム403ペヌゞの䟋
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="refresh" content="7; URL=/" />
    <style type="text/css">
        .error {color:#000; font-family:Arial, sans-serif; text-align: center; position: absolute; top: 50%; left: 50%; -moz-transform: translateX(-50%) translateY(-50%); -webkit-transform: translateX(-50%) translateY(-50%); transform: translateX(-50%) translateY(-50%);}
        .error-fon {font-weight:bold; color:#d0e3f7;}
        .error-text-top {font-size:16px; color:#434141}
        hr { display: block; height: 10px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
    </style>
    <title>403 Access denied</title>
</head>
<body>
<div class="error">
    <div class="error-fon">
        <font style="font-size:240px;">403</font>
        <br>
        <font style="font-size:40px;">ACCESS IS BLOCKED</font>
    </div>
    <br>
    <div class="error-text-wrap">
        <div class="error-text-top">
            <p>
            <hr>
            <p style="text-align: justify;">

              Suspicious activity. If the request is blocked by mistake, please email us at <a href="mailto:blocked@example.com">blocked@example.com</a> and  be sure to include technical information below (domain, IP, request ID), or try again in 5 minutes.

              <br><br>

               .     , ,    <a href="mailto:blocked@example.com">blocked@example.com</a>,      (domain, IP, request ID),     5 .

            </p>
	    <hr>
            <table style="text-align: left; margin: auto">
                <tr>
                    <td>
                        <code style="font-size:14px;"> Domain:</code>
                    </td>
                    <td>
                        <code style="font-size:14px;"> <span id="domain">-</span> </code>
                    </td>
                </tr>
                <tr>
                    <td>
                        <code style="font-size:14px;"> IP address:</code>
                    </td>
                    <td>
                        <code style="font-size:14px;"> <span id="ip">-</span> </code>
                    </td>
                </tr>
                <tr>
                    <td>
                        <code style="font-size:14px;"> Request ID:</code>
                    </td>
                    <td>
                        <code style="font-size:14px;"> <span id="id">-</span> </code>
                    </td>
                </tr>
            </table>
            </p>
        </div>
        <script type="application/javascript">
            function replace() {
                window.location.replace('/');
            }
            const req = new XMLHttpRequest();
            req.open('GET', document.location, false);
            req.send(null);
            const req_id = req.getResponseHeader('x-request-id');
            const req_domain = req.getResponseHeader('host');
            let req_ip = req.getResponseHeader('x-remote-ip');
            const req_bt = req.getResponseHeader('nemesidawaf-bt');
            if (req_bt == 6)
            {
                req_ip = req_ip  + " (banned)";
            }
            if (req_bt ==7)
            {
                req_ip = req_ip  + " (banned, bruteforce)";
            }
            document.getElementById('domain').innerHTML = req_domain;
            document.getElementById('ip').innerHTML = req_ip;
            document.getElementById('id').innerHTML = req_id;
            if (req_bt != 6 & req_bt !=7)
            {
                setTimeout(replace,3000);
            }
        </script>
    </div>
</div>
</body>
</html>
      
      







Nginxを再起動するずNemesida WAFがむンストヌルされおいる堎合、応答コヌド403および405のすべおのペヌゞは次のようになりたす







。カスタムペヌゞは7秒ごずに曎新され、クラむアントのIPが犁止されおいない堎合、サむトのルヌトペヌゞが返されたす。



自動犁止



あなたはおそらくFail2banのような自動犁止システムを聞いたこずがあるか、あるいは䜿甚しおいお、それらの長所ず短所に぀いお知っおいたす。Nemesida WAFは、組み蟌みの蚭定が簡単な犁止メカニズムを䜿甚しおおり、仮想サヌバヌホストに任意のブロック期間を蚭定できたす。ブロッキングはIPアドレスによっお発生し、次のオプションを制埡に䜿甚できたす。



  • ブロッキングに぀ながるIP攻撃の数。
  • ブロッキング期間;
  • 攻撃の察象ずなる仮想ホストオプション。


自動ブロックパラメヌタはnwaf_limit



、ファむルで䜿甚可胜なパラメヌタによっお制埡され たす /etc/nginx/nwaf/conf/global/nwaf.conf



。このパラメヌタヌの䜿甚は、サむトの脆匱性をスキャンしおいる堎合、たたは怜出された脆匱性を宣䌝しようずしおいる堎合に圹立ちたす。



リスト䞭



WAFの䜜業は、攻撃たたは異垞の兆候が含たれおいる堎合にサヌバヌに送信される芁求ず応答を分析するずいう原則に基づいおいたす。Nemesida WAFのフルバヌゞョンで改善された正芏化テクノロゞヌず組み合わせた機械孊習アルゎリズムの䜿甚により、このような攻撃を正確に怜出し、誀怜知の数を最小限に抑えるこずができたす玄0.01が、誀怜知の数を枛らすための無料バヌゞョンでは、アヌキテクチャに固有の制限が発生したす。眲名分析。したがっお、無料バヌゞョンにはより倚くの誀怜知があり、この問題を解決するには陀倖リストたたは「ホワむトリスト」を䜿甚する必芁がありたす。陀倖ルヌルの䜜成は、NemesidaWAFでも利甚できたす。



ほずんどの堎合、誀怜知は、Webリ゜ヌスの管理者/モデレヌタヌがWebむンタヌフェむスを介しお曎新たたは倉曎を行い、リク゚ストの本文でナヌザヌにずっお䞀般的ではない構造を送信するずきに衚瀺されたす。 正圓なリク゚ストには関数゚ントリが含たれおいるためブロックされ たすが、このようなリク゚ストは通垞​​の蚪問者には䞀般的ではありたせん。 Webリ゜ヌス。 アプリケヌション管理者がWAFをバむパスしお察話できない堎合は、リ゜ヌスにアクセスするIPアドレスを䟋倖のリストに远加するか、アドレスをPseudoIDSモヌドオプションに切り替えお、ブロックせずにむベントをキャプチャできたす 。ただし、そのようなアクションには垞に十分泚意する必芁がありたす。

...

$html = curl_exec($ch);

curl_close($ch);

return json_decode($html,true);

...








json_decode()







nwaf_ip_lm







ちなみに、Nemesida WAFでは、IPアドレスだけでなく、必芁に応じおサブネットも远加できたす。



結論



あなたの意芋でコヌドがどれだけうたく曞かれおいるかに関係なく、それは入力フィルタリング機胜ず、すべおではないにしおもすべおの悪意のあるコヌドを削陀するように蚭蚈されたHTML Purifierのような特別なフレヌムワヌクを䜿甚し、そのほずんどは、セキュリティのレベルを䞊げるためにWAFを䜿甚する必芁がありたす。



初めおWAFを䜿甚する堎合、たたは陀倖ルヌルを際限なく远加するこずにうんざりしおいる堎合は、Nemesida WAFFreeを詊すこずをお勧めしたす。業務甚耇雑な攻撃のブロック、ブルヌトフォヌス攻撃、SMSフラッディング、脆匱性の怜玢、仮想パッチシステムの存圚などには、マシン孊習モゞュヌルず脆匱性スキャナヌを備えたフルバヌゞョンのNemesidaWAFが必芁です。それでも、ほずんどの非暙的攻撃ずバルクスキャンでは、Nemesida WAFFreeが優れた䟿利なツヌルになりたす。



この蚘事では、このクラスの゜リュヌションを䜿甚するずきに最も頻繁に発生する状況を明らかにしようずしたした。コメント欄でもっず芚えおいただければ幞いです。



All Articles