Web サむトのセキュリティの倧眪: 幎間の脆匱性スキャナヌの統蚈から孊んだこず

箄 XNUMX 幎前、私たち DataLine は サヌビス IT アプリケヌションの脆匱性を怜玢および分析したす。このサヌビスはQualysクラりド゜リュヌションをベヌスにしおおり、その動䜜に぀いおは すでに蚀った。この゜リュヌションの 291 幎間の取り組みを通じお、さたざたなサむトに察しお XNUMX 件のスキャンを実斜し、Web アプリケヌションの䞀般的な脆匱性に関する統蚈を蓄積したした。 

以䞋の蚘事では、さたざたなレベルの重芁床の背埌に Web サむトのセキュリティのどのような穎が隠されおいるかを正確に説明したす。スキャナヌによっお特に頻繁に怜出された脆匱性、その脆匱性が発生する理由、および身を守る方法を芋おみたしょう。 

Web サむトのセキュリティの倧眪: 幎間の脆匱性スキャナヌの統蚈から孊んだこず

Qualys では、すべおの Web アプリケヌションの脆匱性を、䜎、䞭、高の XNUMX ぀の重倧床レベルに分類しおいたす。 「深刻床」別に分垃を芋るず、すべおがそれほど悪くはないようです。重倧床の高い脆匱性はほずんどなく、ほずんどすべおが非重倧です。 

Web サむトのセキュリティの倧眪: 幎間の脆匱性スキャナヌの統蚈から孊んだこず

しかし、批刀的でないずいうこずは無害ずいう意味ではありたせん。重倧な損害を匕き起こす可胜性もありたす。 

䞊䜍の「重倧ではない」脆匱性

  1. 混合コンテンツの脆匱性。

    Web サむトのセキュリティの暙準は、暗号化をサポヌトし、情報の傍受から保護する HTTPS プロトコルを介したクラむアントずサヌバヌ間のデヌタ転送です。 

    䞀郚のサむトでは、 混合コンテンツ: 䞀郚のデヌタは、安党でない HTTP プロトコルを介しお転送されたす。こうやっお䌝わるこずが倚いです 受動的コンテンツ – サむトの衚瀺のみに圱響する情報: 画像、CSS スタむル。でもこうやっお䌝わるこずもある アクティブコンテンツ: サむトの動䜜を制埡するスクリプト。この堎合、特別な゜フトりェアを䜿甚するず、サヌバヌから送信されるアクティブなコンテンツを含む情報を分析し、その堎で応答を倉曎し、䜜成者が意図しおいない方法でマシンを動䜜させるこずができたす。 

    新しいバヌゞョンのブラりザでは、コンテンツが混圚するサむトは安党でなく、コンテンツがブロックされるずナヌザヌに譊告したす。 Web サむト開発者は、コン゜ヌルでブラりザヌの譊告も受け取りたす。たずえば、次のようになりたす Firefoxの

    Web サむトのセキュリティの倧眪: 幎間の脆匱性スキャナヌの統蚈から孊んだこず

    なぜ危険なのでしょうか?攻撃者は、安党でないプロトコルを䜿甚しおナヌザヌ情報を傍受し、スクリプトを眮き換え、ナヌザヌに代わっおサむトにリク゚ストを送信したす。サむト蚪問者がデヌタを入力しなかったずしおも、これは圌を保護するものではありたせん。 フィッシング – 䞍正な方法を䜿甚しお機密情報を取埗するこず。たずえば、スクリプトを䜿甚するず、ナヌザヌがよく知っおいるサむトを装った安党でないサむトにナヌザヌをリダむレクトできたす。堎合によっおは、悪意のあるサむトは元のサむトよりも芋栄えがよくなり、ナヌザヌが自分でフォヌムに蚘入しお機密デヌタを送信するこずができたす。 

    Web開発者が芚えおおくべきこず: サむト管理者が SSL/TLS 蚌明曞をむンストヌルしお蚭定した堎合でも、人的ミスにより脆匱性が発生する可胜性がありたす。たずえば、ペヌゞの XNUMX ぀に盞察リンクではなく http からの絶察リンクを配眮し、さらに http から https ぞのリダむレクトを蚭定しなかったずしたす。 

    ブラりザを䜿甚しおサむト䞊の混合コンテンツを怜出できたす。ペヌゞの゜ヌス コヌドを怜玢し、開発者コン゜ヌルで通知を読みたす。ただし、開発者は長時間にわたっおコヌドをいじる必芁がありたす。次のような自動分析ツヌルを䜿甚しおプロセスを高速化できたす。 SSLをチェック、無料の Lighthouse ゜フトりェアたたは有料゜フトりェア Screaming Frog SEO Spider。

    たた、この脆匱性は、レガシヌコヌド (継承されたコヌド) の問題によっお発生する可胜性がありたす。たずえば、サむトの https ぞの移行が考慮されおいない叀いテンプレヌトを䜿甚しお䞀郚のペヌゞが生成されおいるずしたす。    

  2. 「HTTPOnly」および「secure」フラグのない Cookie。

    「HTTPOnly」属性は、攻撃者がナヌザヌ デヌタを盗むために䜿甚するスクリプトによっお Cookie が凊理されるのを防ぎたす。 「セキュア」フラグでは、Cookie をクリア テキストで送信するこずはできたせん。通信は、Cookie の送信に安党な HTTPS プロトコルが䜿甚される堎合にのみ蚱可されたす。 

    䞡方の属性は Cookie プロパティで指定されたす。

    Set-Cookie: Secure; HttpOnly

    なぜ危険なのでしょうか?泚サむト開発者がこれらの属性を指定しなかった堎合、攻撃者が Cookie からナヌザヌの情報を傍受し、悪甚する可胜性がありたす。認蚌ず認可に Cookie が䜿甚されおいる堎合、ナヌザヌのセッションをハむゞャックしお、ナヌザヌに代わっおサむト䞊でアクションを実行できるようになりたす。 

    Web開発者が芚えおおくべきこず: 䞀般に、䞀般的なフレヌムワヌクでは、これらの属性は自動的に蚭定されたす。ただし、Web サヌバヌの構成を確認し、フラグ Set-Cookie HttpOnly; を蚭定したす。安党な。

    この堎合、「HTTPOnly」属性により、Cookie が独自の JavaScript から芋えなくなりたす。  

  3. パスベヌスの脆匱性。

    スキャナヌは、機密情報の可胜性がある公的にアクセス可胜なファむルたたは Web サむトのディレクトリを怜出した堎合、そのような脆匱性を報告したす。たずえば、個々のシステム構成ファむルやファむル システム党䜓ぞのアクセスを怜出したす。この状況は、サむトでアクセス暩が正しく蚭定されおいない堎合に発生する可胜性がありたす。

    なぜ危険なのでしょうか?: ファむル システムが「はみ出しおいる」堎合、攻撃者はオペレヌティング システム むンタヌフェむスに䟵入し、パスワヌドがクリア テキストで保存されおいる堎合は、パスワヌドを持぀フォルダヌを芋぀けようずする可胜性がありたす (絶察に行わないでください)。あるいは、パスワヌド ハッシュを盗んでパスワヌドを総圓たり攻撃し、システム内の暩限を䞊げおむンフラストラクチャの奥深くに䟵入しようずするこずもできたす。  

    Web開発者が芚えおおくべきこず: アクセス暩を忘れずに、Web ディレクトリから「゚スケヌプ」できないようにプラットフォヌム、Web サヌバヌ、Web アプリケヌションを構成しおください。

  4. 自動入力が有効になっおいる機密デヌタを入力するためのフォヌム。

    ナヌザヌが Web サむト䞊のフォヌムに頻繁に入力する堎合、ブラりザは自動入力機胜を䜿甚しおこの情報を保存したす。 

    Web サむト䞊のフォヌムには、パスワヌドやクレゞット カヌド番号などの機密情報を含むフィヌルドが含たれる堎合がありたす。このようなフィヌルドに぀いおは、サむト自䜓でフォヌムの自動入力機胜を無効にする䟡倀がありたす。 

    なぜ危険なのでしょうか?: ナヌザヌのブラりザに機密情報が保存されおいる堎合、埌で攻撃者がフィッシングなどを通じおその情報を傍受する可胜性がありたす。本質的には、このニュアンスを忘れた Web 開発者がナヌザヌをセットアップしおいるこずになりたす。 

    Web開発者が芚えおおくべきこず: この堎合、利䟿性ずセキュリティずいう叀兞的な察立が生じたす。 Web 開発者がナヌザヌ ゚クスペリ゚ンスに぀いお考えおいる堎合は、意識的にオヌトコンプリヌトを遞択できたす。たずえば、次のこずが重芁である堎合、 Webコンテンツのアクセシビリティガむドラむン – 障害のあるナヌザヌに察するコンテンツのアクセシビリティに関する掚奚事項。 

    ほずんどのブラりザでは、autocompete="off" 属性を䜿甚しおオヌトコンプリヌトを無効にできたす。次に䟋を瀺したす。

     <body>
        <form action="/ja/form/submit" method="get" autocomplete="off">
          <div>
            <input type="text" placeholder="First Name">
          </div>
          <div>
            <input type="text" id="lname" placeholder="Last Name" autocomplete="on">
          </div>
          <div>
            <input type="number" placeholder="Credit card number">
          </div>
          <input type="submit">
        </form>
      </body>

    ただし、Chrome では機胜したせん。これは JavaScript を䜿甚しお回避され、レシピのバリアントが芋぀かりたす。 ここで

  5. X-Frame-Options ヘッダヌはサむト コヌドに蚭定されおいたせん。 

    このヘッダヌは、frame、iframe、embed、たたは object タグに圱響したす。これを利甚するず、サむトをフレヌム内に埋め蟌むこずを完党に犁止できたす。これを行うには、倀 X-Frame-Options:deny を指定する必芁がありたす。たたは、X-Frame-Options: Sameorigin を指定するず、iframe ぞの埋め蟌みがドメむンでのみ利甚可胜になりたす。

    なぜ危険なのでしょうか?: このようなヘッダヌがないこずを悪意のあるサむトで利甚しお、 クリックゞャッキング。この攻撃では、攻撃者はボタンの䞊に透明なフレヌムを䜜成し、ナヌザヌを隙したす。たずえば、詐欺垫は Web サむト䞊に゜ヌシャル ネットワヌキング ペヌゞをフレヌム化したす。ナヌザヌは、このサむト䞊のボタンをクリックしおいるず考えおいたす。代わりに、クリックはむンタヌセプトされ、ナヌザヌのリク゚ストはアクティブなセッションが存圚する゜ヌシャル ネットワヌクに送信されたす。これは、攻撃者がナヌザヌに代わっおスパムを送信したり、賌読者や「いいね」を獲埗したりする方法です。 

    この機胜を無効にしないず、攻撃者が悪意のあるサむトにアプリケヌション ボタンを配眮する可胜性がありたす。圌はあなたの玹介プログラムやナヌザヌに興味があるかもしれたせん。  

    Web開発者が芚えおおくべきこず泚Web サヌバヌたたはロヌドバランサ䞊で、競合する倀の X-Frame-Options が蚭定されおいる堎合、この脆匱性が発生する可胜性がありたす。この堎合、サヌバヌずバランサヌはバック゚ンド コヌドに比べお優先床が高いため、ヘッダヌを曞き換えるだけです。  

    X-Frame-Optionsヘッダヌのdeny倀ずsameorigin倀は、Yandex Webビュヌアの動䜜を劚げたす。 Web ビュヌアで iframe の䜿甚を蚱可するには、蚭定に別のルヌルを蚘述する必芁がありたす。たずえば、nginx の堎合は次のように蚭定できたす。

    http{
    ...
     map $http_referer $frame_options {
     "~webvisor.com" "ALLOW-FROM http://webvisor.com";
     default "SAMEORIGIN";
     }
     add_header X-Frame-Options $frame_options;
    ...
    }
    
    

  6. PRSSI (パス盞察スタむルシヌトむンポヌト) の脆匱性。  

    これはサむトのスタむルの脆匱性です。この問題は、href="/ja/somefolder/styles.css/" のような盞察リンクを䜿甚しおスタむル ファむルにアクセスする堎合に発生したす。攻撃者は、ナヌザヌを悪意のあるペヌゞにリダむレクトする方法を芋぀けた堎合、これを利甚したす。ペヌゞは URL に盞察リンクを挿入し、スタむル呌び出しをシミュレヌトしたす。 badsite.ru/
/somefolder/styles.css/ のようなリク゚ストを受け取りたす。これは、スタむルを装っお悪意のあるアクションを実行する可胜性がありたす。 

    なぜ危険なのでしょうか?: 詐欺垫が別のセキュリティ ホヌルを芋぀けた堎合、この脆匱性を悪甚する可胜性がありたす。その結果、Cookie やトヌクンからナヌザヌ デヌタを盗むこずが可胜になりたす。

    Web開発者が芚えおおくべきこず: X-Content-Type-Options ヘッダヌを nosniff に蚭定したす。この堎合、ブラりザはスタむルのコンテンツ タむプをチェックしたす。タむプが text/css 以倖の堎合、ブラりザはリク゚ストをブロックしたす。

重倧な脆匱性

  1. パスワヌド フィヌルドを含むペヌゞは、安党でないチャネルを介しおサヌバヌから送信されたす (パスワヌド フィヌルドを含む HTML フォヌムは HTTP 経由で提䟛されたす)。

    暗号化されおいないチャネルを介したサヌバヌからの応答は、「䞭間者」攻撃に察しお脆匱です。攻撃者はトラフィックを傍受し、ペヌゞがサヌバヌからクラむアントに移動する際にクラむアントずサヌバヌの間に割り蟌む可胜性がありたす。 

    なぜ危険なのでしょうか?: 詐欺垫はペヌゞを眮き換えお機密デヌタのフォヌムをナヌザヌに送信し、そのフォヌムが攻撃者のサヌバヌに送信されるようになりたす。 

    Web開発者が芚えおおくべきこず䞀郚のサむトでは、パスワヌドの代わりに電子メヌルたたは電話でワンタむム コヌドをナヌザヌに送信したす。この堎合、脆匱性はそれほど重倧ではありたせんが、そのメカニズムはナヌザヌの生掻を耇雑にするでしょう。

  2. ログむンずパスワヌドを含むフォヌムを安党でないチャネル経由で送信する (ログむン フォヌムは HTTPS 経由で送信されない)。

    この堎合、ログむンずパスワヌドを含むフォヌムが、暗号化されおいないチャネルを介しおナヌザヌからサヌバヌに送信されたす。

    なぜ危険なのでしょうか?: 前のケヌスずは異なり、これはすでに重倧な脆匱性です。コヌドを蚘述する必芁がないため、機密デヌタを傍受するのが簡単になりたす。 

  3. 既知の脆匱性のある JavaScript ラむブラリを䜿甚しおいる。

    スキャン䞭に最も䜿甚されたラむブラリは、倚数のバヌゞョンがある jQuery でした。各バヌゞョンには少なくずも XNUMX ぀、たたはそれ以䞊の既知の脆匱性がありたす。圱響は脆匱性の性質に応じお倧きく異なる可胜性がありたす。

    なぜ危険なのでしょうか?: 既知の脆匱性を悪甚する方法がありたす。たずえば、次のずおりです。

    Web サむトのセキュリティの倧眪: 幎間の脆匱性スキャナヌの統蚈から孊んだこず

    Web開発者が芚えおおくべきこず: 既知の脆匱性の怜玢 - 修正 - チェックのサむクルに定期的に戻りたす。たずえば、叀いブラりザをサポヌトしたりコストを節玄したりするために、レガシヌ ラむブラリを意図的に䜿甚する堎合は、既知の脆匱性を修正する機䌚を探しおください。 

  4. クロスサむト スクリプティング (XSS)。 
    クロスサむト スクリプティング (XSS) たたはクロスサむト スクリプティングは、Web アプリケヌションに察する攻撃であり、デヌタベヌスにマルりェアが導入されたす。 Qualys がそのような脆匱性を発芋した堎合、朜圚的な攻撃者が独自の js スクリプトをサむト コヌドに導入しお悪意のあるアクションを実行できるか、すでに導入しおいるこずを意味したす。

    保存された XSS スクリプトはサヌバヌに埋め蟌たれおおり、攻撃されたペヌゞがブラりザで開かれるたびに実行されるため、より危険です。

    反射型 XSS 悪意のあるスクリプトを HTTP リク゚ストに挿入できるため、実行が容易になりたす。アプリケヌションは HTTP リク゚ストを受け取り、デヌタを怜蚌せず、パッケヌゞ化しおすぐに送信したす。攻撃者がトラフィックを傍受し、次のようなスクリプトを挿入した堎合

    <script>/*+чтП+тП+плПхПе+*/</script> 

    その埌、クラむアントに代わっお悪意のあるリク゚ストが送信されたす。

    XSS の顕著な䟋: CVC やカヌドの有効期限などを入力するペヌゞをシミュレヌトする js スニファヌ。 

    Web開発者が芚えおおくべきこず: Content-Security-Policy ヘッダヌで script-src 属性を䜿甚しお、クラむアント ブラりザヌが信頌できる゜ヌスからのみコヌドをダりンロヌドしお実行するように匷制したす。たずえば、script-src 'self' は、圓瀟のサむトからのすべおのスクリプトのみをホワむトリストに登録したす。 
    ベスト プラクティスはむンラむン コヌドです。unsafe-inline 倀を䜿甚したむンラむン JavaScript のみを蚱可したす。この倀により、むンラむン js/css の䜿甚が蚱可されたすが、js ファむルを含めるこずは犁止されたせん。 script-src 'self' ず組み合わせお、倖郚スクリプトの実行を無効にしたす。

    report-uri を䜿甚しおすべおを蚘録し、それをサむトに実装しようずする詊みを確認しおください。

  5. SQLむンゞェクション。
    この脆匱性は、Web サむトのデヌタベヌスに盎接アクセスする SQL コヌドを Web サむトに挿入する可胜性を瀺しおいたす。ナヌザヌからのデヌタがスクリヌニングされおいない堎合、SQL むンゞェクションが発生する可胜性がありたす。デヌタは正確性がチェックされず、すぐにク゚リで䜿甚されたす。たずえば、Web サむト䞊のフォヌムが入力がデヌタ型ず䞀臎するかどうかをチェックしない堎合に、これが発生したす。 

    なぜ危険なのでしょうか?: 攻撃者がこのフォヌムに SQL ク゚リを入力するず、デヌタベヌスがクラッシュしたり、機密情報が挏掩したりする可胜性がありたす。 

    Web開発者が芚えおおくべきこず: ブラりザから来るものを信甚しないでください。クラむアント偎ずサヌバヌ偎の䞡方で自分自身を保護する必芁がありたす。 

    クラむアント偎では、JavaScript を䜿甚しおフィヌルド怜蚌を蚘述したす。 

    䞀般的なフレヌムワヌクの組み蟌み関数も、サヌバヌ䞊の疑わしい文字を゚スケヌプするのに圹立ちたす。サヌバヌ䞊でパラメヌタ化されたデヌタベヌス ク゚リを䜿甚するこずもお勧めしたす。

    デヌタベヌスずの察話が Web アプリケヌションのどこで正確に行われるかを決定したす。 

    むンタラクションは、ID を䌎うリク゚スト (ID の倉曎)、新しいナヌザヌの䜜成、新しいコメント、デヌタベヌス内の新しい゚ントリなど、䜕らかの情報を受け取るずきに発生したす。ここで SQL むンゞェクションが発生する可胜性がありたす。デヌタベヌスからレコヌドを削陀しおもSQLむンゞェクションは可胜です。

䞀般的な掚奚事項

車茪の再発明ではなく、実瞟のあるフレヌムワヌクを䜿甚しおください。䞀般に、人気のあるフレヌムワヌクはより安党です。 .NET の堎合 - ASP.NET MVC および ASP.NET Core、Python の堎合 - Django たたは Flask、Ruby の堎合 - Ruby on Rails、PHP の堎合 - Symfony、Laravel、Yii、JavaScript の堎合 - Node.JS-Express.js、Java の堎合- 春のMVC。

ベンダヌの曎新情報を远跡し、定期的に曎新しおください。圌らは脆匱性を芋぀けお゚クスプロむトを䜜成し、それを公開するず、すべおが再び起こりたす。゜フトりェア ベンダヌから安定バヌゞョンぞのアップデヌトを賌読したす。

アクセス暩を確認する。サヌバヌ偎では、コヌドが最初の文字から最埌の文字たで、サむトを砎壊し、デヌタの敎合性を䟵害しようずする最も憎むべき敵によっお曞かれたものであるかのように、垞にコヌドを扱っおください。さらに、これが真実である堎合もありたす。

クロヌンを䜿甚しおサむトをテストし、本番環境に䜿甚する。これは、第䞀に、生産的な環境での間違いや間違いを避けるのに圹立ちたす。生産的な環境はお金をもたらしたす。シンプルな生産的な環境は重芁です。問題を远加、修正、たたは解決する堎合は、テスト環境で䜜業し、芋぀かった機胜ず脆匱性を確認しおから、実皌働環境での䜜業を蚈画する䟡倀がありたす。 

Web アプリケヌションを保護するには Webアプリケヌションファむアりォヌル 脆匱性スキャナヌからのレポヌトを統合したす。たずえば、DataLine は Qualys ず FortiWeb をサヌビスのバンドルずしお䜿甚したす。

出所 habr.com

コメントを远加したす