このブログ投稿は、サーバー側のセキュリティアプリケーションのセキュリティに関する知識であり、学習コンテンツは「Webセキュリティについて話すホワイトハット」から来ています。
含め、セキュリティ上のクライアントから受信した後、インジェクション攻撃、認証およびセッション管理とアクセス制御、アクセス制御、暗号化アルゴリズムと乱数、Webセキュリティフレームワーク、サービス攻撃のDDOSのアプリケーション層の拒否、Webサーバーのセキュリティおよび他の側面。
@
インジェクション攻撃
アプリケーションが「データとコードの分離の原則」に違反しているためです。2つの条件:1.ユーザーはデータの入力を制御できます; 2.コードはユーザーが入力したデータをつなぎ合わせます。
SQLインジェクション
盲注
サーバーにエラーエコーがないときにインジェクション攻撃を完了します。検証方法:ページが変更されたかどうかに応じてSQLステートメントが実行されるかどうかを判断する簡単な条件ステートメントを作成します。
タイミング攻撃
データベースでいくつかの特別な関数を使用すると、条件付きで遅延が発生する可能性があります。
たとえば、MySQLでは、BENCHMARK()関数を使用して同じ関数を数回実行できるため、返される結果は平均時間よりも長くなります。時間の長さを変更することで、注入ステートメントが正常に実行されたかどうかを判断できます。これは、サイドチャネル攻撃。
例:
1170 UNION SELECT IF(SUBSTRING(current,1,1) =
CHAR(119),BENCHMARK(5000000,ENCODE('MSG','by
5 seconds')),null) FROM (Select Database()
as current) as tbl;
ペイロードのこの段落では、ライブラリ名の最初の文字が小文字のwであるCHAR(119)かどうかを判断します。判定結果が真の場合、
BENCHMARK()関数により長い遅延が発生し、真でない場合、ステートメントは迅速に実行されます。攻撃者
は、データベース名全体が確認されるまで、すべての文字をたどります。
さらに、たとえば、そのような手段は、データベースに関する多くの情報を取得することもできます。
データベース攻撃スキル
一般的な攻撃の工夫
SQLインジェクションはデータベースのバージョンを推測できます。ユーザー名とパスワードの推測を完了するための自動化ツールがあります。。(ソリューションを推測して...ブルートフォース)、現在のユーザーのIDを取得して、さらにファイル操作を実行し、LOAD_FILEを読み取ってから、INTODUMOFILEをシステムに書き込み、最後にLOAD DATA INFILEを介してファイルをテーブルにインポートします。この手法では、Webシェルをエクスポートして、さらなる攻撃に備えることができます。
自動注入ツール:sqlmap
コマンド実行
MySQLでは、Webシェルを直接エクスポートしてコマンドを間接的に実行するだけでなく、UDF(USER-Defined-Functions)を使用してコマンドを実行することもできます。現在のユーザーがrootの場合、root権限を直接取得できます。
ストアドプロシージャを攻撃する
ストアドプロシージャはデータベースに強力な機能を提供しますが、CALLまたはEXECUTEで実行する必要があります。インジェクションプロセス中、ストレージは攻撃者にとって非常に便利です。たとえば、MS SQL Serverでは、「xp_cmd-shell」はシステムコマンドを実行します。
コーディングの問題
攻撃でよく使用される一重引用符や二重引用符などの特殊文字を挿入します。データセットが「ワイド文字セット」を使用する場合、たとえば、文字を表すいくつかのコードなど、いくつかの抜け穴があります。
0xbf27または1 = 1エスケープ後、0xbf5c27(「\」のASCIIコードは0x5c)になりますが、0xbf5cは別の文字です。したがって、元のエスケープ文字\は「食い尽くす」ことになります。
UTF-8への均一な設定は、良い方法です。つまり、ページメタタグのcharset属性を設定することです。
SQL列の切り捨て
MySQLデータベースでは、ストリクトモードがオンになっていない場合、重複データ挿入やその他の不正なデータ挿入が発生し、不正アクセスが発生する可能性があります。
SQLインジェクションから適切に防御する
-
SQLインジェクションの脆弱性をすべて見つける
-
これらの脆弱性にパッチを適用する
準備済みステートメントの使用:最善の方法は、準備済みステートメント、バインド変数を使用することです。ユーザー入力は、ステートメントの構造とセマンティクスを変更できません。
ストアドプロシージャの使用:データベースでSQLステートメントを定義し、動的SQLステートメントの使用を避けます。
データタイプをチェックし、安全機能を使用します
データベースの観点からは、最小特権の原則を使用する必要があります。
その他の注入攻撃
- XMLインジェクション:HTMLインジェクションとよく似ています
- コードインジェクション:eval()、system()など、コマンドを実行するいくつかの関数を介して間接的にコマンドを実行します
- CRLFインジェクション:2文字\ n \ tは改行を意味し、改行を挿入するとセマンティクスが変更されます。例:ログファイルを書き直し、HTTPヘッダーを挿入します(HTTP応答分割)。これは、HTTPヘッダーが改行されるため、セキュリティリスクにつながり、XSS攻撃を引き起こす可能性があるためです。
ファイルアップロードの脆弱性
ファイルアップロードの脆弱性の概要
ファイルアップロードの脆弱性は、ユーザーが実行可能なスクリプトファイルをアップロードし、このスクリプトファイルを介してサーバー側のコマンドを実行する機能を取得することを指します。
一般的なセキュリティの脆弱性
-
アップロードされたファイルはWebスクリプト言語です
-
アップロードされたファイルはFlashの戦略のcross-main.xmlであり、ハッカーはこのドメインでのFlashの動作を制御できます。
-
アップロードされたファイルは、ユーザーまたは管理者にダウンロードして実行するよう誘導するウイルス、トロイの木馬ファイルです
-
アップロードされたファイルは、フィッシングや詐欺に使用されるフィッシング画像またはスクリプトを含む画像です
形成条件:1.アップロードされたファイルは、Webコンテナーによって解釈および実行できます。2.ユーザーはWebからこのファイルにアクセスできます。3.ユーザーがアップロードしたファイルのセキュリティチェックとフォーマットは行われていません
例:オープンソースのリッチテキストエディターのファイルアップロード機能。
ファイルアップロードチェック機能をバイパスする:
1.攻撃者はアップロードプロセス中に手動でPOSTパッケージを変更し、%00文字を追加しました。これにより、ファイル名に対する特定の機能の判断が切り捨てられる可能性があります。
2.正当なファイルヘッダーを偽造し、実際のスクリプトファイルをその後ろに配置します。
関数または抜け穴
- Apacheファイル解析の問題:Apache は、Apacheで認識されるファイルタイプに遭遇するまで、ファイル名を前から後ろに解決します。Apacheのmime.typesファイルで定義されています。
- IISファイル解析の問題:1 .;切り捨てられた文字になりますファイル名がevil.asp; xx.jpgの場合、IIS 6はこのファイルをevil.aspとして解析して実行します。2.フォルダー拡張子名のエラー処理、/ *。asp /フォルダー内のファイルはaspとして扱われます
- PHP CGIパス解決の問題:PHPがNginxのWebサーバーとして使用されている場合、fastcgiは通常スクリプトインタープリターとして使用されます。fastcgiモードでは、PHPは環境変数にアクセスできます。解決できない場合、パスは環境解決を求めて進みます。
- アップロードされたファイルの脆弱性によるフィッシング:通常のドメイン名からフィッシングWebサイトへのジャンプさまざまなファイルタイプの分析を通じて、ドメイン名は信頼できるドメイン名のように見えますが、htmlファイルは* .html.jpgの解像度で実行されます。
安全なファイルアップロード機能を設計する
- ファイルアップロードディレクトリが実行不可に設定されています
- ファイルタイプを判別し、ホワイトリスト戦略を使用し、ブラックリスト戦略を使用しない
- 乱数を使用してファイル名とファイルパスを書き換える
- ファイルサーバーのドメイン名を個別に設定する
認証とセッション管理
- 「認証」と「承認」の概念、単一要素認証と多要素認証
- パスワード:最も基本的な認証方法。OWASPはベストプラクティスを推奨しています。
OWASP:オンラインコミュニティであるOpen Web Application Security Project(OWASP)は、Webアプリケーションセキュリティの分野で自由に利用できる記事、方法論、ドキュメント、ツール、テクノロジーを提供しています。
弱いパスワード攻撃の使用は、ブルートフォースクラッキングよりもはるかに効果的です。パスワードをプレーンテキストで保存せず、不可逆的な暗号化アルゴリズムまたは単一のハッシュ関数アルゴリズムを使用します。
-
多要素認証:攻撃のしきい値を上げる
-
セッションと認証:セッションIDは暗号化されてCookieに保存されます。Cookieはブラウザの同一生成元ポリシーによって保護されます。セッションハイジャックとは、ライフサイクルでセッションIDが盗まれることを意味します。これは、盗まれたアカウントと同じです。セッションIDがCookieに保存されている場合、 Cookieハイジャックと呼ばれることがあります。
- セッションの漏洩方法:XSS攻撃、ネットワークスニッフィング、ローカルでのトロイの木馬の盗難。
-
セッション固定攻撃:ユーザーがWebサイトにログインしているときに、ログインの前後でユーザーのセッションIDが変更されない場合、セッション固定の問題が発生します。
- 具体的な攻撃プロセスは、ユーザーX(攻撃者)が最初に認証されていないセッションIDを取得し、次にこのセッション
IDをユーザーYに渡して認証を行います。Yが認証を完了すると、サーバーはこのセッションIDの値を更新しません
セッションを変更せずにセッションIDを変更します)。これにより、XはこのセッションIDでYのアカウントに直接ログインできます。
- 具体的な攻撃プロセスは、ユーザーX(攻撃者)が最初に認証されていないセッションIDを取得し、次にこのセッション
-
セッションホールド攻撃:ユーザーが長時間アクティブでないか、ユーザーがクリックして終了すると、サーバーはセッションを破棄します。セッションが無効化されていない場合は、セッションハイジャック攻撃が発生します。
一部のWebサイトは訪問数が多いため、サーバーはセッションを維持しません。セッションは暗号化され、Cookieに保存されます。Cookieは送信時に送信されます。CookieのExpireタグは、セッションの有効期限を制御するために使用されます。セッションをハイジャックする時間。
- 定期的にCookieを強制的に破棄し、ユーザーは同時に複数のセッションを持つことができます
-
SSOシングルサインオン:ユーザーは、ログインするとすべてのシステムにアクセスできます。リスク集中アップ。最も使用されているのはOpenIDです。OpenIDは、ユーザー認証にURLを使用し、検証が成功した後でWebサイトにリダイレクトします。
アクセス制御
-
私に何ができる?
承認の問題:権限制御、アクセス制御。特定のサブジェクトは特定のオブジェクトに対して何らかの操作を実行する必要があり、この操作に対するシステムの制限は権限制御です。ネットワーク要求は、ファイアウォールACLポリシーによって制限されます。ページベースのアクセス制御と組み合わせると、ページへの不正アクセスの問題を解決できます。
-
垂直的権利管理
RBAC(役割ベースのアクセス制御):役割ベースのアクセス制御。最小特権の原則を使用します。
-
水平権限管理
同じユーザーのデータに直接アクセスすることはできません。つまり、問題は同じ役割にあり、それでも問題があります。
eg:来伊份购物网站没有对用户进行权限控制,通过变化URL中的id参数即可查看对应id的个人
名前や住所などの個人情報。
-
OAuthの概要
ユーザー名とパスワードを入力せずにサードパーティのアプリケーションがWebリソースにアクセスすることを許可するセキュリティプロトコル OpenIDは認証の問題を解決し、OAuthは承認の問題を解決します。
有三个角色:
-
ユーザー:ユーザー
-
リソース所有者:リソースプロバイダー。他のWebアプリケーションにアクセスするユーザーには、リソースプロバイダーからのデータサポートが必要です。
-
クライアント:コンシューマー、ユーザーがアクセスしているWebアプリケーション
プロセスのステップはここでは繰り返されません、理解してください。
暗号化アルゴリズムと乱数
概観
暗号化アルゴリズムは、分割され、ブロック暗号とストリーム暗号の暗号化アルゴリズム。
パケットの暗号化方式:DES、3-DES、フグ 、IDEA、AES などが挙げられます。
ストリーム暗号の暗号化アルゴリズム:RC4、オリックス、SEAL。
攻撃者が入手できる情報によれば、暗号文のみの攻撃、既知の平文攻撃、平文攻撃の選択、暗号文攻撃の選択に分類できます。
ストリーム暗号攻撃
XOR演算に基づいてストリーム暗号に一般的に使用される暗号化アルゴリズムは、一度に1バイトのみが演算されますが、パフォーマンスは非常に優れています。
-
再利用キー攻撃:同じキーを使用して複数回暗号化します。これはXOR演算に基づいているため、4つのデータを知っている限り、3つを知っていれば残りの1つを導出できます。
E(A)= A xor C
E(B)= B xor CE(A)xor E(B)= A xor B;
-
ビットフリッピング攻撃:暗号化では、攻撃者は平文を知らなくても暗号文を変更するため、平文は必要に応じて攻撃方法を変更します。つまり、AとBのプレーンテキスト、およびAの暗号化テキストがわかれば、Bの暗号化テキストを導出できます。
ビットフリッピング攻撃を解決し、暗号文の整合性を検証します。
-
弱いランダムIVの問題:authcode()関数では、デフォルトで4バイトのIV(つまり、関数のkeyc)を使用するため、クラッキングがより困難になり
ます。しかし、実際には、4バイトのIVは非常に壊れやすく、ランダムではないため、「ブルートフォースクラッキング」によって繰り返されるIVを見つけることができます。
WEPクラック
WEPは、WEPキーをクラックしてアクセスポイントに接続するワイヤレス暗号化送信プロトコルです。
2つの重要な要素:
- 初期化ベクトルIV:プレーンテキストで送信され、繰り返しは比較的短時間で行われます。再利用キー攻撃を使用できます。同時に、同じIVが見つかった場合、同じCRC-32チェック値を構築でき、ビットフリッピングを正常に実装できます。
- メッセージのCRC-32チェック
WEPアルゴリズムのセキュリティは、WEPクラッキングの理論を提唱しています。
ECBモデルの欠陥
パケットは個別に暗号化され、任意のパケットの暗号文が交換され、次に復号化された平文も交換されます。したがって、チェーン暗号化を使用する必要があります。
オラクル攻撃のパディング
ブロック暗号化のプロセスでは、十分な桁数がない場合、パディングがパディングに使用されます。Oracle Attackのパディングの鍵は、攻撃者が復号化された結果がパディングと互換性があるかどうかを知ることができることです。CBCモードのブロック暗号化アルゴリズムを実装して使用する場合は、これに注意してください。
キー管理
暗号化の原則:暗号システムのセキュリティ
は、アルゴリズムの機密性ではなく、キーの複雑さに依存する必要があります。
異常なチャネルからのキー漏洩を防止します。コードに秘密キーをハードコードしないでください。公開キーまたは秘密キーの管理を使用するか、キー管理を改善する必要があります。一元化されたキー管理は、システムとキーの結合を減らし、定期的なキー交換を容易にします。
疑似乱数問題
疑似乱数は十分にランダムではありません。
- タイムスタンプは、乱数の生成に直接使用できるほどランダムではありません。
- 擬似乱数シードをクラックします。例:PHPのrand()関数、mt_rand()関数。
- 安全な乱数アルゴリズム、java.security.SecureRandomなどを使用します。
Webフレームワークのセキュリティ
-
MVCフレームワークのセキュリティ
現代の開発におけるMVCフレームワーク。データが流入する方向から見ると、データはビューレイヤー、コントローラーレイヤー、モデルレイヤーを通過しているため、セキュリティソリューションを設計する際には、データの重要な要素を把握する必要があります。各レイヤーで関連する問題を解決し、そのレイヤーに属していない問題をそのレイヤーに残さないでください。
テンプレートエンジンとXSS防御
ビューレイヤーのXSS問題を解決します。ビューレイヤーでは、テンプレートエンジンを使用してページをレンダリングします。テンプレートエンジンは、いくつかのコーディング方法を提供する場合があります。
例:htmlEncode()はDjangoの自動エスケープで使用され、安全性を確保できます。シャットダウンによって問題が発生する場合があります。
-
WebフレームワークとCSRF防御
セキュリティトークンを使用してCSRF攻撃を解決し、読み取り操作と書き込み操作を分離し、すべての「書き込み操作」に対してPOST送信を使用できます。同時に、セキュリティトークンのプライバシーを確保し、トークンをPOSTに自動的に追加する必要があります。
1.在Session中绑定Token。 2.在form表单中自动添加token字段。 3.在Ajax请求中自动添加token。 4.在服务端对比POST中提交的Token和Session中绑定的Token是否一致。
-
HTTPヘッダー管理
フレームワークでは、HTTPヘッダーはグローバルに処理されます。例:HTTPヘッダーに対するCSRF攻撃。30Xによって返されるHTTP応答のジャンプのために、統合されたジャンプ機能(ホワイトリスト)が提供されています。
-
データ永続化レイヤーとSQLインジェクション
ORMフレームワークを使用すると、SQLインジェクションを防止できます。
アプリケーション層のサービス拒否攻撃DDOS
DDOS:複数のネットワーク・ノードによる攻撃は、規模の経済を達成するためにしながら、分散サービス拒否、通常のサービスは、いくつかの倍に拡大されます。
一般的なDDOS攻撃:SYNフラッド、UDPフラッド、ICMPフラッド。
在很多对抗DDOS的产品中,一般会综合使用各种算法,结合一些DDOS攻击的特征,对流
クリーニングの量。DDOSに対するネットワーク機器は、ネットワークの出口で直列または並列に接続できます。
アプリケーション層DDOS
アプリケーション層で発生し、TCP 3ウェイハンドシェイクが完了し、接続が確立され、攻撃を開始したIPアドレスが本物です。この攻撃はサーバーのパフォーマンスへの攻撃であり、サーバーのパフォーマンスを最適化する方法でこの攻撃を緩和できます。
- CC攻撃:サーバーリソースを消費する目的を達成するために、大量のリソースを消費するアプリケーションページへの通常のリクエストを継続的に開始します。
- 要求の頻度を制限:各クライアントの要求の限界周波数であることを。
キャプチャ
CAPTCHA:自動コンピュータと人間チューリングテストとの違い。
考えられる脆弱性:1.画像関連のアルゴリズムを使用して検証コードを直接特定する2.検証コードが消費された後、SessionIDが更新されないため、元のSessionIDを使用しても常に同じ検証コードを繰り返すことができる3.すべての検証コード画像を事前に生成、ハッシュされた文字列を確認コードとして使用
します。画像のファイル名-列挙によってクラックされる可能性があります。
防衛アプリケーション層DDOS
検証コードの中心は、人とマシンを識別することです。一般に、クライアントを識別するためにHTTPヘッダーのUser-Agentフィールドを決定します。
もう1つの信頼できる方法は、クライアントがJSの一部を解析して正しい操作結果を返すようにすることです。これは、自動化プロセスのほとんどが完了するHTTPパケットによって直接構築され、ブラウザー環境にはないためです。
Webサーバーは防御にも使用できます。
リソース枯渇攻撃
- スローロリス攻撃:HTTPリクエストは非常に低速でサーバーに送信されますWebサーバーの同時接続数には一定の上限があるため、最終的にすべての接続が悪意を持って占有されます。
- HTTP POST DOS:原則は、HTTP POSTパケットを送信するときに非常に大きなContent-Length値を指定し、
10〜100バイトのバイトを送信するなど、非常に低速でパケットを送信して、この接続を切断しないようにします。 - サーバー制限DOS:Cookieはサービス拒否を引き起こします。WebサーバーにはHTTPパケットヘッダーのサイズに長さ制限があります。攻撃者がXSS攻撃を介して悪意を持って長いCookieをクライアントに書き込んだ場合、クライアントはCookieをクリアする前にCookieのドメインにアクセスできなくなります任意のページ。
通常のReDOSによって引き起こされる問題
正規表現が適切に記述されていない場合、悪意のある入力によって使用され、多くのリソースを消費し、DOSを引き起こす可能性があります。この攻撃はRe-DOSと呼ばれます。これはコード欠陥の抜け穴です。
例:^(a +)+ $、aaaaxに正常に入ると16の可能なパスがありますが、aaaaaaaaaaaaaaaaXに入ると65536のパスがあるため、通常のエンジン解決の速度が大幅に向上します。ユーザーが悪意を持って入力を作成すると、欠陥が生じます。正規表現の効率が大幅に低下します。
PHPセキュリティ
とりあえずこの章をスキップして、POCを作成するときに振り返ってください。
Webサーバーのセキュリティ
- Apacheのセキュリティ:1. Apacheのモジュールモジュールはセキュリティの脆弱性が最も発生しやすいので、モジュールのインストールステータスを確認します
- 個別のユーザーとして実行するようにApacheプロセスを指定するには、通常、Apacheの個別のユーザー/グループが必要です。rootとして実行するのは非常に悪い習慣です。
- Apacheには、サーバーのパフォーマンスを最適化し、DDOS攻撃への耐性を向上させるいくつかの構成パラメーターがあります。
- Apacheログを保護する攻撃者が侵入に成功すると、ログが変更されてクリアされます。
- Nginxセキュリティ:ソフトウェア自体のセキュリティに注意を払い、パラメータを構成します。
- jBossリモートコマンド実行:JMXコンソールはバックグラウンドを管理し、管理者に多くの強力な機能を提供し、ハッキングも容易にします。warパッケージをリモートでロードします。
- Tomcatリモートコマンド実行:Tomcatマネージャーのバックグラウンドに脆弱性が存在します。
インターネット会社の安全な運営
これは主にインターネット企業の安全性に関するものですが、ここでは抜粋したいくつかの重要なポイントを示しますが、詳細については説明しません。
- 安全性は商品の特徴です。
- 優れたセキュリティ計画
- 優れたユーザーエクスペリエンス
- 優れた性能