6開発で考慮すべきWebバックエンドのセキュリティリスク

開発中の対策を講じて、Webバックエンドを強化して安全に保つ.


中小企業、銀行、および多くの業界は、Webアプリケーションに依存しています。 Webアプリケーションを構築する時点から、セキュリティ違反、データ漏洩、および財政問題を回避するために開発が進展するにつれて、脆弱性をチェックするプロトコルを確実に持つことが重要です。.

最も危険なWeb攻撃は、データが保存および分析されるサーバー側で発生する攻撃です.

バックエンドとは?

Webアプリケーションは、フロントエンドとバックエンドの2つの部分に分かれています。.

  • フロントエンドはクライアント側であり、ユーザーが操作する部分です。通常、HTML、CSS、JavaScriptで構築されています.
  • バックエンドはサーバー側です。基本的には、アプリケーションの動作、ビジネスロジックの適用、変更、更新です。人気のあるサーバー側の技術スタックには、PHP、NodeJS、Java、Ruby、C、Python、データベース、セキュリティ(認証、アクセス制御など)、構造、コンテンツ管理が含まれます.

始める前の注意点–認証、アクセス制御 & セッション管理

用語を混同することはよくあることです。それでは、すぐに説明しましょう。

  • 認証は、ユーザーの身元を証明することに関するものです(パスワード、ユーザー名、質問のセキュリティ、指紋など)。
  • アクセス制御は、ユーザーがアプリケーションにアクセスできるものに関係します。ユーザーが意図した権限の外で行動できないというポリシーを実施します.
  • セッション管理は、同じユーザーに関連付けられた応答と要求トランザクションに関係します。認証に成功した後、ユーザーとアプリケーションの間で使用される交換メカニズムです。.

より良いバックエンドWebセキュリティのために、以下を探りましょう.

注入の欠陥

2010年以降、OSWAPはインジェクションをWebアプリケーションの最も危険なリスクの第1位に分類しました.

インジェクションの欠陥により、ユーザーは、データベース上に構築されたクエリの動作を変更するキーワードを含むデータを提供できます。たとえば、データベースに一致するエントリが存在するかどうかをチェックするSQLスクリプトがあるとします。.

uname = request.POST [‘username’]
passwd = request.POST [‘password’]
sql = "ユーザーからのIDの選択WHERE username = ‘" + うなめ + "’AND password =’" + パスワード + "」"
database.execute(sql)

攻撃者はSQLインジェクションを使用してパスワードフィールドを操作できるようになりました。たとえば、パスワード「OR 1 =」1を入力すると、次のSQLクエリが実行されます。

sql = "ユーザーからのIDの選択WHERE username = ” AND password = ‘password’ OR 1 = ‘1’

これにより、攻撃者はデータベースのすべてのユーザーテーブルにアクセスでき、パスワードは常に有効です(1 = ‘1’)。管理者としてログインすると、必要な変更を加えることができます.

それを防ぐ方法?

それはとても かんたん 注入の欠陥を避けるため.

インジェクションの欠陥がないかどうかを確認する最善かつ簡単な方法は、データベース内のクエリが準備されたステートメントを介して行われているかどうかをチェックする徹底的な手動のソースコードレビューです。ツールを使用して脆弱性をチェックすることもできます.

また、次のことも行う必要があります.

  • ORM(オブジェクトリレーショナルマッピングツール)を使用する.
  • すべての入力をエスケープします。日付フィールドには、日付以外は何も格納しないでください。.
  • 特定の場所からアクセスすべきものだけがその場所に保持されるように、データを分離します.
  • 適切な処理のエラーコードを記述します。データベースやバックエンドを冗長にしないでください.

トロイハント SQLインジェクションに関するすばらしいコースを手に入れました。興味があれば、探索してみてください.

壊れた認証

前述のように、認証は提供する資格情報を扱います。これは、無制限のアクセスに対する防御の最前線です。ただし、実装が不十分でセキュリティポリシーを尊重しないと、認証が壊れる可能性があります.

壊れた認証は、主に3つのパターンによって発生します。

  • 資格情報の詰め物: 攻撃者は有効なユーザー名とパスワードのリストを持ち、資格情報が有効であることを確認するために攻撃を自動化できます.
  • ブルートフォース攻撃:アプリケーションがユーザーまたは管理者に弱いパスワードを許可する場合.
  • セッションハイジャック: アプリケーションがセッションID、URLを公開するか、ログイン後にローテーションしない場合.

すべての場合において、攻撃者は重要なアカウントにアクセスし、マネーロンダリング、IDの盗難、または法的に保護された機密性の高い情報の開示を引き起こす可能性のあるビジネスに依存する可能性があります。.

それを防ぐ方法?

認証システムを実装する前に、自問してください。認証システムが侵害された場合、攻撃者は何をすることができますか?

そして、応答に応じて、次のことができます.

  • 自動化された攻撃を防ぐための多要素認証を実装する.
  • ユーザーに適切なパスワードポリシーを採用するように促す(または強制する).
  • 失敗したログインを制限する.
  • 効率的なアルゴリズムハッシュを使用します。アルゴリズムを選択するときは、パスワードの最大長を考慮してください.
  • セッションタイムアウトシステムをテストし、ログアウト後にセッショントークンが無効化されていることを確認します。.

壊れたアクセス制御

認証されたユーザーが実行を許可されていることを確認するためのアクセス制御が存在します。認証とセッション管理は、基盤またはアクセス制御ルールです。しかし、これらのルールが適切に設定されていない場合、これは重大な問題を引き起こす可能性があります.

一般的なアクセス制御の欠陥は次のとおりです。

  • 不正なAPIアクセスを許可するCORSの設定ミス.
  • メソッドへの直接アクセスのためのメタデータ操作.
  • 強制ブラウジング:攻撃者はURLを試し、パス(例:http://website.domain/user/からhttp://website.domain/admin)を変更し、重要なファイルを発見することもできます.

それを防ぐ方法?

主に、壊れたアクセスの欠陥は、効果的なアクセス管理の本質的な要件についての無知によって発生します.

  • パブリックリソースを除き、デフォルトで拒否.
  • サーバーディレクトリリストを無効にし、バックアップファイルが存在しないことを確認します.
  • 自動化された攻撃の影響を軽減するためのAPIアクセスのレート制限.
  • バックエンド側でログアウトした後にJWTトークンを無効にする.

データ露出

データ漏えいとも呼ばれるデータ漏えいは、企業とそのクライアントを脅かすサイバー脅威です.

これは、アプリケーションがクレデンシャルやクレジットカードや健康記録などの機密データなどの情報を適切に保護していない場合に発生します。 4000を超えるレコードは 毎分違反.

ビジネスへの影響は金融面から大きく、平均的な違反は392万ドルの費用がかかるとのことです。 IBM.

それを防ぐ方法?

バックエンド開発者は、保護が必要な情報を尋ねる必要があります.

そして、そのような欠陥を防ぐために:

  • 機密データの暗号化:RESTでのデータの場合、すべてを暗号化します。転送中のデータについては、必ずセキュアゲートウェイ(SSL)を使用してください
  • 追加の保護が必要なデータを特定し、キーベースの暗号化を適用することによってのみ、アクセスを正当なユーザーの束にのみ制限します.
  • 脆弱な暗号化アルゴリズムを回避する:最新のものを使用し、 強力なアルゴリズム.
  • 安全なバックアップ計画を立てる.

安全でない逆シリアル化

シリアライゼーションとデシリアライゼーションは、データがオブジェクト形式に変換されて格納されたり、別のアプリケーションに送信されるときに使用される概念です。シリアライゼーションは、XMLやJSONなどのオブジェクト形式のデータを変換して使用可能にすることで構成されます。逆シリアル化は逆のプロセスです.

動作を変更するように変更できるクラスがある場合、デシリアライザに対する攻撃は、サービス拒否、アクセス制御、およびリモートコード実行(RCE)攻撃につながる可能性があります。.

OWASPのトップ10ドキュメントの2番目の例は、PHPオブジェクトシリアライザーの良い例です。

a:4:{i:0; i:132; i:1; s:7:"マロリー"; i:2; s:4:"ユーザー";
i:3; s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

これは、ユーザーID、ユーザーのレベル、ハッシュされたパスワードなどの情報を含むスーパークッキーです.

攻撃者はシリアル化されたオブジェクトを変更して、管理者権限へのアクセスを取得できます。

a:4:{i:0; i:1; i:1; s:5:"アリス"; i:2; s:5:"管理者";
i:3; s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

それを防ぐ方法?

信頼できないソースからのシリアル化されたオブジェクトを受け入れないことが重要です.

また、次のことも行う必要があります。

  • ユーザー入力を信頼しない.
  • データの検証:文字列以外のアプリケーションの場合は、使用する前に文字列であることを確認してください
  • チェックを使用して、データが変更されていないことを確認します。 2つの信頼できるソース間でデータを送信していると便利です(クライアント側のデータの保存など)。.

サーバーXSS

サーバーXSS (クロスサイトスクリプティング)は、攻撃者がWebアプリケーションを使用して悪意のあるコードをさまざまなユーザーに送信する場合の一種のインジェクションです。これは、アプリケーションが保存する悪意のあるコードを含む細工されたデータを攻撃者が投稿したときに発生します。この脆弱性はサーバー側にあります。ブラウザは単に応答をレンダリングします.

たとえば、フォーラムでは、ユーザーの投稿はデータベースに保存されますが、多くの場合、確認は行われません。攻撃者はこの機会に悪意のあるスクリプトを含む投稿を追加します。その後、他のユーザーがこのリンクをメールで受け取るか、問題の投稿を表示してクリックします.

それを防ぐ方法?

XSSのリスクにさらされている可能性があり、保護する必要があるすべての操作を主に特定したら、次のことを検討する必要があります。.

  • 入力の検証:入力の長さを確認し、正規表現一致を使用し、特定の文字セットのみを許可します.
  • 出力を検証します。アプリケーションが、一部のユーザーまたはサードパーティから発信されたデータのアイテムへの応答にコピーする場合、このデータをHTMLエンコードして、悪意のある可能性のある文字を無害化する必要があります.
  • HTMLの制限を許可する:たとえば、コメントブログシステムがある場合、特定のタグの使用のみを許可します。可能であれば、ユーザー指定のHTMLマークアップに適切なフレームワークを使用して、JavaScriptを実行する手段が含まれていないことを確認してください。.

結論

開発フェーズは、Webアプリケーションのセキュリティにとって非常に重要です。また、開発のライフサイクルにセキュリティ脆弱性スキャナーを含めることを検討する必要があります。これにより、特定された問題は本番環境の前に修正されます.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map