Security-testing-quick-guide
セキュリティテスト-概要
セキュリティテストは、システムをWeb上の悪意のあるアクティビティから保護するために非常に重要です。
セキュリティテストとは何ですか?
セキュリティテストは、情報システムがデータを保護し、意図したとおりに機能を維持しているかどうかを判断するテスト手法です。 セキュリティテストはシステムの完全なセキュリティを保証するものではありませんが、テストプロセスの一部としてセキュリティテストを含めることが重要です。
セキュリティテストでは、セキュリティで保護された環境を提供するために次の6つの手段を取ります-
- 機密性-意図しない受信者への情報開示から保護します。
- 整合性-送信者から目的の受信者に正確で正しい情報を転送できます。
- 認証-ユーザーの身元を確認および確認します。
- 許可-ユーザーおよびリソースへのアクセス権を指定します。
- 可用性-要件に関する情報の準備ができていることを保証します。
- 非拒否-メッセージを送信または受信した送信者または受信者からの拒否がないことを保証します。
例
Webベースのアプリケーションでセキュリティの欠陥を見つけるには、複雑な手順と創造的な思考が必要です。 時には、簡単なテストで最も深刻なセキュリティリスクが明らかになることがあります。 あなたはどのWebアプリケーションでもこの非常に基本的なテストを試すことができます-
- 有効な資格情報を使用してWebアプリケーションにログインします。
- Webアプリケーションからログアウトします。
- ブラウザの「戻る」ボタンをクリックします。
- 再度ログインするように求められているか、ログインしたページに再び戻ることができるかどうかを確認します。
セキュリティテスト-プロセス
セキュリティテストは、システムに対する制御された攻撃と見なすことができ、現実的な方法でセキュリティの欠陥を発見します。 その目標は、ITシステムの現在のステータスを評価することです。 また、「侵入テスト」またはより一般的には「倫理的ハッキング」としても知られています。
侵入テストは段階的に行われます。この章では、完全なプロセスについて説明します。 攻撃を再現するために必要なすべての手順をすぐに利用できるように、各フェーズで適切なドキュメントを作成する必要があります。 このドキュメントは、侵入テストの最後に顧客が受け取る詳細レポートの基礎にもなります。
侵入テスト-ワークフロー
侵入テストには4つの主要なフェーズが含まれます-
- リンク:/security_testing/security_testing_footprinting [Foot Printing]
- リンク:/security_testing/security_testing_scanning [スキャン中]
- リンク:/security_testing/security_testing_enumeration [列挙]
- リンク:/security_testing/security_testing_exploitation [Exploitation]
これらの4つのステップは複数回繰り返され、通常のSDLCと連動します。
セキュリティテスト-悪意のあるソフトウェア
悪意のあるソフトウェア(マルウェア)は、攻撃者/マルウェア作成者にシステムの部分的または完全な制御を与えるソフトウェアです。
マルウェア
マルウェアのさまざまな形式は以下のとおりです-
- ウイルス-ウイルスとは、自分自身のコピーを作成し、これらのコピーを他のコンピュータプログラム、データファイル、またはハードディスクのブートセクタに挿入するプログラムです。 複製が成功すると、ウイルスは感染したホスト上でハードディスクスペースやCPU時間を盗むなどの有害な活動を引き起こします。
- ワーム-ワームは、そのパス内の各コンピューターのメモリに自分自身のコピーを残すマルウェアの一種です。
- *トロイの木馬-トロイの木馬は、自己実行型ではないマルウェアの一種で、悪意のあるコードを含んでいます。実行すると、データの損失や盗難、またはシステムへの損害の可能性が生じます。
- アドウェア-フリーウェアまたはピッチウェアとしても知られるアドウェアは、ゲーム、デスクトップツールバー、およびユーティリティの商用広告を含む無料のコンピューターソフトウェアです。 これはWebベースのアプリケーションであり、Webブラウザーデータを収集して、広告、特にポップアップをターゲットにします。
- スパイウェア-スパイウェアは、ユーザーを匿名で監視する侵入ソフトウェアであり、ハッカーがユーザーのコンピューターから機密情報を取得できるようにします。 スパイウェアは、ユーザーやアプリケーションの脆弱性を悪用します。これらの脆弱性は、無料のオンラインソフトウェアダウンロードやユーザーがクリックしたリンクに頻繁に関連付けられます。
- ルートキット-ルートキットは、ハッカーがパスワードを盗んだり、被害者の知らないうちにシステムの脆弱性を悪用してインストールしたコンピューター/ネットワークに管理者レベルでアクセスしたりするために使用するソフトウェアです。
予防措置
システム内のマルウェアの存在を回避するために、次の対策を講じることができます-
- オペレーティングシステムとアプリケーションがパッチ/アップデートで最新であることを確認してください。
- 奇妙なメール、特に添付ファイルのあるメールは絶対に開かないでください。
- インターネットからダウンロードするときは、常にインストールするものを確認してください。 [OK]をクリックしてポップアップウィンドウを閉じないでください。 アプリケーションをインストールする前に発行元を確認してください。
- ウイルス対策ソフトウェアをインストールします。
- ウイルス対策プログラムを定期的にスキャンして更新してください。
- ファイアウォールをインストールします。
- ブラウザとアプリケーションが提供するセキュリティ機能を常に有効にして使用します。
マルウェア対策ソフトウェア
次のソフトウェアは、システムからマルウェアを削除するのに役立ちます-
- マイクロソフト・セキュリティ・エッセンシャルズ
- Microsoft Windows Defender
- AVGインターネットセキュリティ
- Spybot-検索と破棄
- アバスト! 個人使用向けのHome Edition
- パンダインターネットセキュリティ
- Mac OSおよびMac OS X用のMacScan
セキュリティテスト-HTTPプロトコルの基本
プロトコルを理解することは、セキュリティテストを十分に把握するために非常に重要です。 ウェブサーバーとクライアントの間でパケットデータをインターセプトすると、プロトコルの重要性を理解できます。
HTTPプロトコル
ハイパーテキスト転送プロトコル(HTTP)は、分散型の協調型ハイパーメディア情報システム用のアプリケーションレベルのプロトコルです。 これは、1990年以降のWorld Wide Webのデータ通信の基盤です。 HTTPは、リクエストメソッド、エラーコード、およびヘッダーの拡張機能を使用して、他の目的にも使用できる汎用のステートレスプロトコルです。
基本的に、HTTPはTCP/IPベースの通信プロトコルであり、HTMLファイル、画像ファイル、クエリ結果などのデータを配信するために使用されます。 ウェブ上で。 コンピューターが相互に通信するための標準化された方法を提供します。 HTTP仕様では、クライアントが要求したデータをサーバーに送信する方法、およびサーバーがこれらの要求に応答する方法を指定しています。
基本的な機能
HTTPをシンプルかつ強力なプロトコルにする次の3つの基本機能があります-
- * HTTPはコネクションレス*-HTTPクライアント、つまりブラウザがHTTPリクエストを開始します。 要求を行った後、クライアントはサーバーから切断し、応答を待ちます。 サーバーは要求を処理し、クライアントとの接続を再確立して応答を送り返します。
- * HTTPはメディアに依存しません*-クライアントとサーバーの両方がデータコンテンツの処理方法を知っている限り、HTTPであらゆるタイプのデータを送信できます。 これは、クライアントとサーバーが適切なMIMEタイプを使用してコンテンツタイプを指定するために必要です。
- * HTTPはステートレス*-HTTPはコネクションレスであり、これはHTTPがステートレスプロトコルであるという直接的な結果です。 サーバーとクライアントは、現在の要求の間のみ互いに認識します。 その後、二人はお互いを忘れます。 このプロトコルの性質により、クライアントもブラウザも、Webページ全体の異なるリクエスト間で情報を保持できません。
HTTP/1.0は各要求/応答交換に新しい接続を使用しますが、HTTP/1.1接続は1つ以上の要求/応答交換に使用できます。
建築
次の図は、Webアプリケーションの非常に基本的なアーキテクチャを示し、HTTPが存在する場所を示しています-
HTTPプロトコルは、Webブラウザ、ロボット、検索エンジンなどのクライアント/サーバーアーキテクチャに基づく要求/応答プロトコルです。 HTTPクライアントとして機能し、Webサーバーはサーバーとして機能します。
- クライアント-HTTPクライアントは、リクエストメソッド、URI、プロトコルバージョンの形式でサーバーにリクエストを送信し、その後にTCP/IPを介してリクエスト修飾子、クライアント情報、および可能性のあるボディコンテンツを含むMIMEのようなメッセージが続きます接続。
- Server -HTTPサーバーは、メッセージのプロトコルバージョンと成功またはエラーコードを含むステータス行で応答し、その後にサーバー情報、エンティティメタ情報、および可能性のあるエンティティ本体コンテンツを含むMIMEのようなメッセージが続きます。
HTTP –欠点
- HTTPは完全に保護されたプロトコルではありません。
- HTTPは、通信のデフォルトポートとしてポート80を使用します。
- HTTPはアプリケーション層で動作します。 データ転送のために複数の接続を作成する必要があり、管理オーバーヘッドが増加します。
- HTTPの使用に暗号化/デジタル証明書は必要ありません。
HTTPプロトコルの詳細
HTTPプロトコルの詳細を理解するには、以下の各リンクをクリックしてください。
- link:/security_testing/security_testing_http_parameters [HTTP Parameters]
- link:/security_testing/security_testing_http_messages [HTTP Messages]
- *リンク:/security_testing/security_testing_http_requests [HTTP Requests] *
- *リンク:/security_testing/security_testing_http_responses [HTTP Responses] *
- link:/security_testing/security_testing_http_methods [HTTPメソッド]
- link:/security_testing/security_testing_http_statuscodes [HTTP Status Codes]
- link:/security_testing/security_testing_http_headerfields [HTTPヘッダーフィールド]
- *リンク:/security_testing/security_testing_http_security [HTTP Security] *
セキュリティテスト-HTTPSプロトコルの基本
HTTPS(Secure Socket Layerを介したハイパーテキスト転送プロトコル)またはSSLを介したHTTPは、Netscapeによって開発されたWebプロトコルです。 これはプロトコルではありませんが、SSL/TLS(Secure Socket Layer/Transport Layer Security)の上にHTTPを階層化した結果です。
要するに、HTTPS = HTTP+ SSL
HTTPSが必要な場合
閲覧するとき、通常はHTTPプロトコルを使用して情報を送受信します。 このため、だれでも私たちのコンピューターとWebサーバー間の会話を盗聴することになります。 多くの場合、セキュリティで保護する必要がある機密情報を交換し、不正アクセスを防止する必要があります。
次のシナリオで使用されるHTTPSプロトコル-
- 銀行のウェブサイト
- 支払いゲートウェイ
- ショッピングサイト
- すべてのログインページ
- メールアプリ
HTTPSの基本的な動作
- HTTPSプロトコルのサーバーには、公開鍵と署名付き証明書が必要です。
- [[1]]
- https接続を使用する場合、サーバーはWebサーバーがサポートする暗号化方法のリストを提供することにより、初期接続に応答します。
- これに応じて、クライアントは接続方法を選択し、クライアントとサーバーは証明書を交換して身元を認証します。
- これが完了すると、ウェブサーバーとクライアントの両方が同じキーを使用していることを確認した後、暗号化された情報を交換し、接続が閉じられます。
- https接続をホストするには、サーバーに公開キー証明書が必要です。これには、キーの所有者のIDの検証を伴うキー情報が埋め込まれています。
- ほとんどすべての証明書は第三者によって検証されるため、クライアントはキーが常に安全であることが保証されます。
セキュリティテスト-エンコードとデコード
エンコードとデコードとは何ですか?
エンコードとは、文字、数字、その他の特殊文字などの一連の文字を、効率的な伝送のために特殊な形式に変換するプロセスです。
デコードとは、エンコードされた形式を元の文字シーケンスに変換するプロセスです。 これは通常誤解する暗号化とはまったく異なります。
エンコードおよびデコードは、データ通信およびストレージで使用されます。 機密情報の転送にはエンコードを使用しないでください。
URLエンコーディング
URLは、ASCII文字セットを使用してインターネット上でのみ送信でき、URLにはASCII文字以外の特殊文字が含まれる場合があり、エンコードする必要があります。 URLにはスペースが含まれず、プラス(+)記号または%20に置き換えられます。
ASCIIエンコード
ブラウザ(クライアント側)は、Webページで使用される文字セットに従って入力をエンコードします。HTML5のデフォルトの文字セットはUTF-8です。
次の表は、文字のASCIIシンボルとその同等のシンボルを示し、最終的にその置換は、サーバーに渡す前にURLで使用できます-
ASCII | Symbol | Replacement |
---|---|---|
< 32 | Encode with %xx where xx is the hexadecimal representation of the character. | |
32 | space | PLUS or %20 |
33 | ! | %21 |
34 | " | %22 |
35 | # | %23 |
36 | $ | %24 |
37 | % | %25 |
38 | & | %26 |
39 | ' | %27 |
40 | ( | %28 |
41 | ) | %29 |
42 | * | * |
43 | + | %2B |
44 | , | %2C |
45 | - | - |
46 | . | . |
47 | / | %2F |
48 | 0 | 0 |
49 | 1 | 1 |
50 | 2 | 2 |
51 | 3 | 3 |
52 | 4 | 4 |
53 | 5 | 5 |
54 | 6 | 6 |
55 | 7 | 7 |
56 | 8 | 8 |
57 | 9 | 9 |
58 | : | %3A |
59 | ; | %3B |
60 | > | %3C |
61 | = | %3D |
62 | > | %3E |
63 | ? | %3F |
64 | @ | %40 |
65 | A | A |
66 | B | B |
67 | C | C |
68 | D | D |
69 | E | E |
70 | F | F |
71 | G | G |
72 | H | H |
73 | I | I |
74 | J | J |
75 | K | K |
76 | L | L |
77 | M | M |
78 | N | N |
79 | O | O |
80 | P | P |
81 | Q | Q |
82 | R | R |
83 | S | S |
84 | T | T |
85 | U | U |
86 | V | V |
87 | W | W |
88 | X | X |
89 | Y | Y |
90 | Z | Z |
91 | [ | %5B |
92 | \ | %5C |
93 | ] | %5D |
94 | ^ | %5E |
95 | _ | _ |
96 | ` | %60 |
97 | a | a |
98 | b | b |
99 | c | c |
100 | d | d |
101 | e | e |
102 | f | f |
103 | g | g |
104 | h | h |
105 | i | i |
106 | j | j |
107 | k | k |
108 | l | l |
109 | m | m |
110 | n | n |
111 | o | o |
112 | p | p |
113 | q | q |
114 | r | r |
115 | s | s |
116 | t | t |
117 | u | u |
118 | v | v |
119 | w | w |
120 | x | x |
121 | y | y |
122 | z | z |
123 | \{ | %7B |
124 | ||
%7C | 125 | } |
%7D | 126 | ~ |
%7E | 127 | |
%7F | > 127 |
セキュリティテスト-暗号化
暗号化とは何ですか?
暗号化とは、ユーザーが機密情報を保存したり、安全でないネットワークを介して送信したりできるように、データを暗号化および復号化する科学のことです。
特別な手段を講じずに読み取って理解できるデータは「平文」と呼ばれ、その内容を隠すために平文を隠す方法は「暗号化」と呼ばれます。
暗号化されたプレーンテキストは暗号テキストと呼ばれ、暗号化されたデータをプレーンテキストに戻すプロセスは*復号化*と呼ばれます。
- セキュアな通信を分析および遮断する科学は、暗号解読として知られています。 同じことを実行する人々は、攻撃者とも呼ばれます。
- 暗号化は強力な場合と弱い場合があり、強度は実際の平文を回復するために必要な時間とリソースによって測定されます。
- したがって、強力な暗号化メッセージを解読するには、適切なデコードツールが必要です。
- 1秒に10億のチェックを行う10億台のコンピューターでさえ、テキストを解読することはできません。
- 計算能力が日々増加しているため、攻撃者からデータと重要な情報を保護するために、暗号化アルゴリズムを非常に強力にする必要があります。
暗号化の仕組み
暗号化アルゴリズムは、キー(単語、数字、またはフレーズ)と組み合わせて機能し、プレーンテキストを暗号化し、同じプレーンテキストが異なるキーで異なる暗号テキストに暗号化します。
したがって、暗号化されたデータは、暗号化アルゴリズムの強度やキーの秘密などのパラメーターの完全に依存するカップルです。
暗号技術
対称暗号化-従来の暗号化は、従来の暗号化とも呼ばれ、暗号化と復号化の両方に1つのキーのみを使用する技術です。 たとえば、DES、トリプルDESアルゴリズム、IBM製MARS、RC2、RC4、RC5、RC6。
非対称暗号化-暗号化にキーのペアを使用するのは公開キー暗号化です:データを暗号化する公開キーと復号化のための秘密キー。 公開鍵は、秘密鍵を秘密にして人々に公開されます。 たとえば、RSA、デジタル署名アルゴリズム(DSA)、Elgamal。
ハッシュ-ハッシュは一方向の暗号化であり、スクランブルされた出力を作成しますが、これは元に戻せないか、少なくとも簡単には元に戻せません。 たとえば、MD5アルゴリズム。 デジタル証明書、デジタル署名、パスワードの保存、通信の検証などの作成に使用されます。
セキュリティテスト-同一生成元ポリシー
Same Origin Policy(SOP)は、Webアプリケーションのセキュリティモデルにおける重要な概念です。
Same Origin Policyとは何ですか?
このポリシーに従って、それは次の組み合わせであることができる同じサイトから発信されたページで実行されているスクリプトを許可します-
- ドメイン
- プロトコル
- Port
例
この動作の背後にある理由はセキュリティです。 あるウィンドウに_try.com_があり、別のウィンドウに_gmail.com_がある場合、try.comのスクリプトがgmail.comのコンテンツにアクセスまたは変更したり、代わりにgmailのコンテキストでアクションを実行したりしないようにします。
以下は同じ起源のウェブページです。 前に説明したように、同じオリジンはドメイン/プロトコル/ポートを考慮に入れます。
以下は、異なる起源のウェブページです。
IEの同一生成元ポリシーの例外
Internet Explorerには、SOPに対する2つの大きな例外があります。
- 1つ目は「信頼ゾーン」に関連しています。 両方のドメインが高信頼ゾーンにある場合、Same Originポリシーは完全には適用されません。
- IEの2番目の例外はポートに関連しています。 IEはポートをSame Originポリシーに含めないため、http://website.comとhttp://wesite.com:4444は同じオリジンからのものと見なされ、制限は適用されません。
セキュリティテスト-Cookie
クッキーとは?
Cookieは、WebサーバーがWebブラウザーに保存するために送信する小さな情報であり、後でブラウザーで読み取れるようにします。 これにより、ブラウザは特定の個人情報を記憶します。 ハッカーがCookie情報を取得すると、セキュリティの問題につながる可能性があります。
クッキーの特性
ここにクッキーのいくつかの重要な特性があります-
- 通常、これらは小さなテキストファイルであり、コンピューターのブラウザーディレクトリに保存されているIDタグが与えられます。
- これらは、ユーザーがWebサイトを効率的にナビゲートし、特定の機能を実行できるようにするためにWeb開発者によって使用されます。
- ユーザーが同じウェブサイトを再度閲覧すると、Cookieに保存されたデータがウェブサーバーに返送され、ユーザーの以前のアクティビティがウェブサイトに通知されます。
- Cookieは、巨大なデータベースがあり、ログインが必要で、カスタマイズ可能なテーマを持つWebサイトでは避けられません。
クッキーの内容
クッキーには次の情報が含まれています-
- Cookieの送信元サーバーの名前。
- クッキーの寿命。
- 値-通常、ランダムに生成された一意の番号。
クッキーの種類
- *セッションCookies-これらのCookieは一時的なもので、ユーザーがブラウザーを閉じると消去されます。 ユーザーが再度ログインしても、そのセッションの新しいCookieが作成されます。
- *永続的なCookie *-これらのCookieは、ユーザーが消去するか期限が切れない限り、ハードディスクドライブに残ります。 Cookieの有効期限は、Cookieの有効期間に依存します。
クッキーのテスト
クッキーをテストする方法は次のとおりです-
- * Cookieの無効化*-テスターとして、Cookieを無効にした後、Webサイトへのアクセスを確認し、ページが適切に機能しているかどうかを確認する必要があります。 Webサイトのすべてのページに移動し、アプリのクラッシュを監視します。 また、サイトを使用するにはCookieが必要であることをユーザーに通知する必要があります。
- * Cookieの破損*-実行する別のテストは、Cookieの破損です。 同じことを行うには、サイトのCookieの場所を見つけて、ドメインの内部情報にアクセスするために使用できる偽の/無効なデータを使用して手動で編集する必要があります。
- * Cookieの削除*-WebサイトのすべてのCookieを削除し、Webサイトがそれに対してどのように反応するかを確認します。
- クロスブラウザーの互換性-Cookieを書き込むページから、サポートされているすべてのブラウザーでCookieが適切に書き込まれていることを確認することも重要です。
- * Cookieの編集*-アプリケーションがCookieを使用してログイン情報を保存する場合、テスターとして、Cookieまたはアドレスバーのユーザーを別の有効なユーザーに変更してください。 Cookieを編集しても、別のユーザーアカウントにログインできません。
クッキーの表示と編集
最新のブラウザは、ブラウザ自体の内部でクッキー情報の表示/編集をサポートしています。 編集を正常に実行できるmozilla/chromeのプラグインがあります。
- FirefoxのCookieプラグインを編集する
- このCookieプラグインをChrome用に編集します
クッキーを編集するための手順を実行する必要があります-
- [[6]]
- 以下に示すように、クロムから「このCookieを編集」プラグインにアクセスするだけで、Cookieの値を編集します。
セキュリティテスト-Webアプリケーションのハッキング
攻撃を実行するための参照として利用できるさまざまな方法論/アプローチがあります。
Webアプリケーション-PenTestingの方法論
攻撃モデルを開発する際に、次の標準を考慮することができます。
次のリストの中で、OWASPは最もアクティブであり、多くの貢献者がいます。 Webアプリを設計する前に、各開発チームが考慮するOWASPテクニックに焦点を当てます。
OWASPトップ10
Open Web Application Security Protocolチームは、最近Webで流行している上位10個の脆弱性をリリースしました。 以下は、Webベースのアプリケーションで一般的に見られるセキュリティ上の欠陥のリストです。
アプリケーション-ハンズオン
それぞれの手法を理解するために、サンプルアプリケーションを使用してみましょう。 J2EEアプリケーションである「WebGoat」に対して攻撃を実行します。これは、学習目的でセキュリティの欠陥を明示的に開発したものです。
webgoatプロジェクトに関する詳細は、https://www.owasp.org/index.php/Category:OWASP_WebGoat_Projectにあります。 WebGoatアプリケーションをダウンロードするには、https://github.com/WebGoat/WebGoat/wiki/Installation-(WebGoat-6.0)に移動し、ダウンロードセクションに移動します。
ダウンロードしたアプリケーションをインストールするには、まずポート8080で実行されているアプリケーションがないことを確認してください。 java -jar WebGoat-6.0.1-war-exec.jarという1つのコマンドを使用するだけでインストールできます。 詳細については、https://www.owasp.org/index.php/WebGoat_Installation [WebGoat Installation]をご覧ください。
インストール後、 http://localhost:8080/WebGoat/attack に移動してアプリケーションにアクセスできるようになります。ページは次のように表示されます。
ログインページに表示されるゲストまたは管理者の資格情報を使用できます。
Webプロキシ
クライアント(ブラウザー)とサーバー(この例ではWebgoatアプリケーションがホストされているシステム)間のトラフィックをインターセプトするには、Webプロキシを使用する必要があります。 [[7]] Proxyを使用します
以下に示すように、burpスイートの無料版をダウンロードすれば十分です。
Burp Suiteの構成
Burp Suiteは、ブラウザとWebサーバーが送受信する情報の各パケットを傍受できるWebプロキシです。 これにより、クライアントがWebサーバーに情報を送信する前にコンテンツを変更できます。
- ステップ1 *-以下に示すように、アプリケーションはポート8080にインストールされ、Burpはポート8181にインストールされます。 Burpスイートを起動し、以下に示すようにポート8181で起動するために次の設定を行います。
- ステップ2 *-Burpスイートがトラフィックを傍受できるように、Burpがアプリケーションがインストールされているポート#8080をリッスンしていることを確認する必要があります。 この設定は、次に示すようにBurp Suiteの[スコープ]タブで行う必要があります。
- ステップ3 *-次に、ポート8181(Burp Suiteポート)をリッスンするようにブラウザのプロキシ設定を行います。 したがって、以下に示すように、クライアント(ブラウザ)とサーバー(Webサーバー)間のトラフィックをインターセプトするようにWebプロキシを構成しました-
- ステップ4 *-構成のスナップショットは、以下に示すような簡単なワークフロー図の助けを借りて以下に示されています
セキュリティテスト-インジェクション
インジェクション手法は、アプリケーションの入力フィールドを使用してSQLクエリまたはコマンドをインジェクトすることで構成されます。
Webアプリケーション-インジェクション
SQLインジェクションが成功すると、データベースから機密データを読み取って変更したり、データベースからデータを削除したりできます。 また、ハッカーはDBMSのシャットダウンやデータベースの削除など、データベースで管理操作を実行できます。
単純な図を使用して、この欠陥の脅威エージェント、攻撃ベクトル、セキュリティの弱さ、技術的影響、ビジネスへの影響を理解しましょう。
例
アプリケーションは、以下の脆弱なSQLコールの構築に信頼できないデータを使用します-
String query = "SELECT * FROM EMP WHERE EMPID = '" + request.getParameter("id") + "'";
ハンズオン
- ステップ1 *-以下に示すように、アプリケーションのSQLインジェクションエリアに移動します。
- ステップ2 *-演習で示したように、文字列SQLインジェクションを使用して認証をバイパスします。 SQLインジェクションを使用して、正しいパスワードを使用せずにボス(「ネビル」)としてログインします。 Nevilleのプロファイルを表示できること、およびすべての機能(検索、作成、削除など)が使用可能であることを確認します。
- ステップ3 *-パラメータを 'a' = 'a’または1 = 1として送信してパスワードをバイパスできるようにSQLを挿入します
- ステップ4 *-悪用後、以下に示すように管理者であるネヴィルとしてログインできます。
SQLインジェクションの防止
SQLインジェクションを防ぐ方法はたくさんあります。 開発者は、コードを記述するときに、それに応じて特殊文字を処理することを確認する必要があります。 OWASPから利用可能なチートシート/防止テクニックがあります。これは開発者向けのガイドです。
- パラメータ化されたクエリの使用
- すべてのユーザー指定入力のエスケープ
- エンドユーザーに対してデータベースの最小特権を有効にする
壊れた認証のテスト
アプリケーションに関連する認証機能が正しく実装されていない場合、ハッカーはパスワードやセッションIDを侵害したり、他のユーザーの資格情報を使用して他の実装の欠陥を悪用したりできます。
単純な図を使用して、この欠陥の脅威エージェント、攻撃ベクトル、セキュリティの弱さ、技術的影響、ビジネスへの影響を理解しましょう。
例
An e-commerce application supports URL rewriting, putting session IDs in the URL −
http://example.com/sale/saleitems/jsessionid=2P0OC2JSNDLPSKHCJUN2JV/?item=laptop
サイトの認証されたユーザーは、URLを友人に転送して、割引販売について知らせます。 彼は、ユーザーがセッションIDも提供していることを知らずに、上記のリンクを電子メールで送信します。 彼の友人がリンクを使用するとき、彼らは彼のセッションとクレジットカードを使用します。
ハンズオン
- ステップ1 *-Webgoatにログインし、「セッション管理の欠陥」セクションに移動します。 Cookieをスプーフィングして、認証をバイパスしましょう。 以下は、シナリオのスナップショットです。
- ステップ2 *-資格情報webgoat/webgoatを使用してログインすると、Burp SuiteからJSESSION IDがC8F3177CCAFF380441ABF71090748F2Eであり、認証が成功するとAuthCookie = 65432ubphcfxであることがわかります。
- ステップ3 *-クレデンシャルアスペクト/アスペクトを使用してログインすると、Burp SuiteからJSESSION IDがC8F3177CCAFF380441ABF71090748F2Eであり、認証が成功するとAuthCookie = 65432udfqtbであることがわかります。
- ステップ4 *-次に、AuthCookieパターンを分析する必要があります。 前半の「65432」は両方の認証に共通です。 そのため、webgoatユーザーの場合はubphcfx、アスペクトユーザーの場合はudfqtbなど、authcookie値の最後の部分を分析することに興味があります。
- ステップ5 *-AuthCookie値を詳しく見ると、最後の部分はユーザー名と同じ長さです。 したがって、ユーザー名が何らかの暗号化方式で使用されていることは明らかです。 試行錯誤/総当たりのメカニズムでは、ユーザー名webgoatを逆にした後、最終的にtaogbewになり、その前のアルファベット文字がAuthCookieとして使用されます。 つまり、ubphcfx。
- ステップ6 *-このCookie値を渡して、何が起こるか見てみましょう。 ユーザーwebgoatとして認証したら、ステップ#4とステップ#5を実行して、AuthCookieの値を変更し、ユーザーAliceのモックを作成します。
防止メカニズム
- OWASPのアプリケーションセキュリティ検証標準で定義されているすべての認証およびセッション管理要件を満たすように、強力な認証およびセッション管理コントロールを開発します。
- 開発者は、セッションIDを盗むために使用できるXSSの欠陥を回避する必要があります。
クロスサイトスクリプティングのテスト
クロスサイトスクリプティング(XSS)は、アプリケーションが信頼できないデータを取得し、検証せずにクライアント(ブラウザー)に送信するたびに発生します。 これにより、攻撃者が被害者のブラウザで悪意のあるスクリプトを実行し、ユーザーセッションのハイジャック、Webサイトの改ざん、または悪意のあるサイトへのリダイレクトを引き起こす可能性があります。
単純な図を使用して、この欠陥の脅威エージェント、攻撃ベクトル、セキュリティの弱さ、技術的影響、ビジネスへの影響を理解しましょう。
XSSの種類
- Stored XSS -データベース/メッセージフォーラム/コメントフィールドなどのユーザー入力がターゲットサーバーに保存されると、永続XSSとも呼ばれる保存XSSが発生します。 その後、被害者はWebアプリケーションから保存されたデータを取得できます。
- Reflected XSS -非入力XSSとしても知られるReflected XSSは、ユーザー入力がエラーメッセージ/検索結果またはリクエストの一部としてユーザーによって提供された入力でWebアプリケーションによってすぐに返されたときに発生します。提供されたデータ。
- DOMベースのXSS -DOMベースのXSSは、データのソースがDOMにあり、シンクもDOMにあり、データフローがブラウザを離れない場合のXSSの形式です。
例
アプリケーションは、検証中に信頼できないデータを構築に使用します。 特殊文字はエスケープする必要があります。
http://www.webpage.org/task/Rule1?query=try
攻撃者は、ブラウザのクエリパラメータを次のように変更します-
http://www.webpage.org/task/Rule1?query=<h3>Hello from XSS"</h3>
ハンズオン
- ステップ1 *-Webgoatにログインし、クロスサイトスクリプティング(XSS)セクションに移動します。 Stored Cross-site Scripting(XSS)攻撃を実行しましょう。 以下は、シナリオのスナップショットです。
- ステップ2 *-シナリオごとに、シナリオ自体に記載されているパスワード「tom」を使用してTomとしてログインします。 [プロファイルを表示]をクリックして、編集モードに入ります。 tomは攻撃者であるため、これらの編集ボックスにJavaスクリプトを挿入しましょう。
<script>
alert("HACKED")
</script>
- ステップ3 *-更新が終了するとすぐに、tomはメッセージが「ハッキングされた」という警告ボックスを受け取ります。これは、アプリが脆弱であることを意味します。
- ステップ4 *-シナリオに従って、jerry(HR)としてログインし、jerryが注入されたスクリプトの影響を受けるかどうかを確認する必要があります。
- ステップ5 *-Jerryとしてログインした後、以下に示すように、「Tom」を選択し、「view profile」をクリックします。
ジェリーのアカウントからトムのプロファイルを表示している間、彼は同じメッセージボックスを取得できます。
- ステップ6 *-このメッセージボックスは単なる例ですが、実際の攻撃者はメッセージボックスを表示するだけでなく、はるかに多くのことを実行できます。
予防メカニズム
- 開発者は、ボディ、属性、JavaScript、CSS、データが配置されるURLなどのHTMLコンテキストに基づいて、信頼できないデータをすべてエスケープする必要があります。
- 入力として特殊文字を必要とするアプリケーションでは、有効な入力として特殊文字を受け入れる前に、堅牢な検証メカニズムが必要です。
安全でない直接オブジェクト参照
開発者がファイル、ディレクトリ、データベースキーなどの内部実装オブジェクトへの参照を公開するときに、オブジェクトへの直接参照が発生する可能性があります。
単純な図を使用して、この欠陥の脅威エージェント、攻撃ベクトル、セキュリティの弱さ、技術的影響、ビジネスへの影響を理解しましょう。
例
アプリは、アカウント情報にアクセスしているSQL呼び出しで未検証のデータを使用します。
String sqlquery = "SELECT * FROM useraccounts WHERE account = ?";
PreparedStatement st = connection.prepareStatement(sqlquery, ??);
st.setString( 1, request.getParameter("acct"));
ResultSet results = st.executeQuery( );
攻撃者はブラウザのクエリパラメータを変更して、Adminを指すようにします。
http://webapp.com/app/accountInfo?acct=admin
ハンズオン
- ステップ1 *-Webgoatにログインし、アクセス制御の欠陥セクションに移動します。 目標は、tomcat-users.xmlが存在するパスに移動して、tomcat-users.xmlを取得することです。 以下は、シナリオのスナップショットです。
- ステップ2 *-ファイルのパスは「現在のディレクトリ」フィールドに表示されます-C:\ Users \ userName $ \。extract \ webapps \ WebGoat \ lesson_plans \ enそしてtomcat-users.xmlファイルはC:\ xampp \ tomcat \ confに保存されます
- ステップ3 *-現在のディレクトリから最後まで移動し、C:\ドライブから移動する必要があります。 Burp Suiteを使用してトラフィックを傍受することにより、同じことを実行できます。
- ステップ4 *-試行が成功すると、Tomcat-users.xmlに「おめでとうございます。 このレッスンは正常に完了しました。」
予防メカニズム
開発者は、次のリソース/ポイントをガイドとして使用して、開発フェーズ自体での安全でないオブジェクトの直接参照を防ぐことができます。
- 開発者は、間接オブジェクト参照に1人のユーザーまたはセッションのみを使用する必要があります。
- 信頼できないソースからの直接オブジェクト参照を使用する前に、アクセスを確認することもお勧めします。
セキュリティの設定ミス
セキュリティ設定がデフォルトとして定義、実装、および維持されると、セキュリティの設定ミスが発生します。 優れたセキュリティを実現するには、アプリケーション、Webサーバー、データベースサーバー、およびプラットフォーム用に定義および展開された安全な構成が必要です。 ソフトウェアを最新の状態にすることも同様に重要です。
例
セキュリティの誤設定のいくつかの古典的な例は次のとおりです-
- サーバーでディレクトリリストが無効になっていない場合、攻撃者が同じものを発見した場合、攻撃者は単にディレクトリをリストしてファイルを見つけて実行することができます。 すべてのカスタムコードを含む実際のコードベースを取得し、アプリケーションの重大な欠陥を見つけることもできます。
- アプリケーションサーバーの構成により、スタックトレースをユーザーに返すことができ、潜在的な欠陥を明らかにする可能性があります。 攻撃者は、エラーメッセージが提供する、侵入するのに十分な追加情報を取得します。
- 通常、アプリサーバーには、セキュリティが不十分なサンプルアプリが付属しています。 運用サーバーから削除しないと、サーバーが危険にさらされます。
ハンズオン
- ステップ1 *-Webgoatを起動し、安全でない構成セクションに移動して、その課題を解決してみましょう。 同じのスナップショットが以下に提供されています-
- ステップ2 *-考えられる限り多くのオプションを試すことができます。 構成ファイルのURLを見つけるために必要なことはすべて、開発者が構成ファイルの命名規則に従っていることを知っています。 以下にリストされているものであれば何でも構いません。 通常、BRUTEフォーステクニックによって行われます。
- web.config
- config
- appname.config
- conf
ステップ3 *-さまざまなオプションを試してみると、「 *http://localhost:8080/WebGoat/conf 」が成功していることがわかります。 試行が成功した場合、次のページが表示されます-
予防メカニズム
- 開発、QA、および本番環境などのすべての環境は、簡単にハッキングできない各環境で使用される異なるパスワードを使用して、同一に構成する必要があります。
- コンポーネント間の効果的で安全な分離を提供する強力なアプリケーションアーキテクチャが採用されていることを確認します。
- また、自動スキャンを実行し、定期的に監査を行うことにより、この攻撃の可能性を最小限に抑えることができます。
セキュリティテスト-機密データの露出
オンラインアプリケーションは日々インターネットをflood濫させているため、すべてのアプリケーションが保護されているわけではありません。 多くのWebアプリケーションは、クレジットカード情報/銀行口座情報/認証資格情報などの重要なユーザーデータを適切に保護しません。 ハッカーは、弱く保護されたこれらのデータを盗んで、クレジットカード詐欺、個人情報の盗難、またはその他の犯罪を行う可能性があります。
単純な図を使用して、この欠陥の脅威エージェント、攻撃ベクトル、セキュリティの弱さ、技術的影響、ビジネスへの影響を理解しましょう。
例
セキュリティの誤設定の古典的な例のいくつかは、次のとおりです-
- サイトは、単にすべての認証済みページにSSLを使用するわけではありません。 これにより、攻撃者はネットワークトラフィックを監視し、ユーザーのセッションCookieを盗んでユーザーセッションをハイジャックしたり、個人データにアクセスしたりできます。
- アプリケーションは、クレジットカード番号を暗号化された形式でデータベースに保存します。 取得すると、それらは復号化され、ハッカーはSQLインジェクション攻撃を実行して、すべての機密情報をクリアテキストで取得できます。 これは、公開鍵を使用してクレジットカード番号を暗号化し、バックエンドアプリケーションがそれらを秘密鍵で復号化できるようにすることで回避できます。
ハンズオン
- ステップ1 *-WebGoatを起動し、「安全でないストレージ」セクションに移動します。 同じもののスナップショットが下に表示されます。
- ステップ2 *-ユーザー名とパスワードを入力します。 前に説明したさまざまな種類のエンコードおよび暗号化の方法論を学習するときが来ました。
予防メカニズム
- 機密データを不必要に保存しないことをお勧めします。不要になった場合は、できるだけ早くスクレイピングする必要があります。
- 強力で標準的な暗号化アルゴリズムが組み込まれ、適切なキー管理が行われていることを確認することが重要です。
- また、パスワードなどの機密データを収集するフォームでオートコンプリートを無効にし、機密データを含むページのキャッシュを無効にすることで回避できます。
機能レベルのアクセス制御がありません
ほとんどのWebアプリケーションは、ユーザーがその機能にアクセスできるようにする前に、機能レベルのアクセス権を確認します。 ただし、サーバー上で同じアクセス制御チェックが実行されない場合、ハッカーは適切な許可なしにアプリケーションに侵入することができます。
単純な図を使用して、この欠陥の脅威エージェント、攻撃ベクトル、セキュリティの弱さ、技術的影響、ビジネスへの影響を理解しましょう。
missing_fn_level_access_control
例
これは、不足している機能レベルのアクセス制御の典型的な例です-
ハッカーは単にターゲットURLを強制します。 通常、管理者アクセスには認証が必要ですが、アプリケーションアクセスが検証されない場合、認証されていないユーザーは管理者ページにアクセスできます。
' Below URL might be accessible to an authenticated user
http://website.com/app/standarduserpage
' A NON Admin user is able to access admin page without authorization.
http://website.com/app/admin_page
ハンズオン
- ステップ1 *-最初にユーザーのリストとそのアクセス権限を確認して、アカウントマネージャーとしてログインします。
missing_fn_level_access_control1
- ステップ2 *-さまざまな組み合わせを試してみると、Larryがリソースアカウントマネージャーにアクセスできることがわかります。
missing_fn_level_access_control1
予防メカニズム
- 認証メカニズムは、デフォルトですべてのアクセスを拒否し、すべての機能の特定のロールへのアクセスを提供する必要があります。
- ワークフローベースのアプリケーションでは、リソースへのアクセスを許可する前にユーザーの状態を確認します。
クロスサイトリクエストフォージェリ(CSRF)
CSRF攻撃により、認証されたユーザー(被害者)は、被害者のセッションCookieを含む偽装されたHTTPリクエストを脆弱なWebアプリケーションに送信するように強制されます。被害者。
単純な図を使用して、この欠陥の脅威エージェント、攻撃ベクトル、セキュリティの弱さ、技術的影響、ビジネスへの影響を理解しましょう。
例
ここにCSRFの古典的な例があります-
- ステップ1 *-脆弱なアプリケーションは、暗号化なしでプレーンテキストとして状態変更リクエストを送信します。
http://bankx.com/app?action=transferFund&amount=3500&destinationAccount=4673243243
- ステップ2 *-ハッカーは、攻撃者の管理下にあるさまざまなサイトに保存されている画像にリクエストを埋め込むことで、被害者のアカウントから攻撃者のアカウントに送金するリクエストを作成します-
<img src = "http://bankx.com/app?action=transferFunds&amount=14000&destinationAccount=attackersAcct#"
width = "0" height = "0"/>
ハンズオン
- ステップ1 *-Javaスクリプトを画像に埋め込むことでCSRF偽造を実行しましょう。 問題のスナップショットを以下にリストします。
- ステップ2 *-次に、転送を1x1の画像にモックアップし、被害者に同じものをクリックさせる必要があります。
- ステップ3 *-メッセージを送信すると、メッセージは以下のように強調表示されます。
- ステップ4 *-被害者が次のURLをクリックすると、転送が実行されます。これは、burpスイートを使用してユーザーアクションをインターセプトしていることがわかります。 以下に示すように、Getメッセージでそれを見つけることで転送を確認できます-
- ステップ5 *-更新をクリックすると、レッスン完了マークが表示されます。
予防メカニズム
- CSRFは、URLではなくHTTP要求の本文で送信される非表示フィールドに一意のトークンを作成することにより回避できます。
- CSRFを保護するために、ユーザーに再認証を強制するか、ユーザーであることを証明します。 たとえば、CAPTCHA。
脆弱性のあるコンポーネント
この種の脅威は、アプリ内で使用されるライブラリやフレームワークなどのコンポーネントがほぼ常に完全な権限で実行される場合に発生します。 脆弱なコンポーネントが悪用されると、ハッカーの仕事が深刻なデータ損失やサーバー乗っ取りを引き起こしやすくなります。
単純な図を使用して、この欠陥の脅威エージェント、攻撃ベクトル、セキュリティの弱さ、技術的影響、ビジネスへの影響を理解しましょう。
using_components_with_known_vulnerabilities
例
次の例は、既知の脆弱性を持つコンポーネントを使用するものです-
- 攻撃者は、IDトークンの提供に失敗することにより、完全な許可でWebサービスを呼び出すことができます。
- Expression Languageインジェクションの脆弱性を使用したリモートコード実行は、JavaベースのアプリのSpring Frameworkを通じて導入されます。
予防メカニズム
- データベース/フレームワークだけに制限されているのではなく、webappsで使用されているすべてのコンポーネントとバージョンを特定します。
- パブリックデータベース、プロジェクトメーリングリストなどのすべてのコンポーネントを保持します。 最新の。
- 本質的に脆弱なコンポーネントの周りにセキュリティラッパーを追加します。
未検証のリダイレクトと転送
インターネット上のほとんどのWebアプリケーションは、ユーザーを他のページまたは他の外部Webサイトに頻繁にリダイレクトおよび転送します。 ただし、ハッカーはこれらのページの信頼性を検証せずに、被害者をフィッシングサイトまたはマルウェアサイトにリダイレクトしたり、転送を使用して不正なページにアクセスしたりできます。
単純な図を使用して、この欠陥の脅威エージェント、攻撃ベクトル、セキュリティの弱さ、技術的影響、ビジネスへの影響を理解しましょう。
unvalidated_redirects_and_forwards
例
未検証のリダイレクトと転送のいくつかの古典的な例は、次のとおりです-
- アプリケーションに_redirectrul_パラメータをとるredirect.jspというページがあるとしましょう。 ハッカーは、マルウェアをフィッシング/インストールするユーザーをリダイレクトする悪意のあるURLを追加します。
http://www.mywebapp.com/redirect.jsp?redirectrul=hacker.com
- ユーザーをサイトのさまざまな部分に転送するために使用されるすべてのWebアプリケーション。 同じことを実現するために、一部のページではパラメーターが使用され、操作が成功した場合にユーザーをリダイレクトする場所が示されます。 攻撃者は、アプリケーションのアクセス制御チェックに合格するURLを作成し、攻撃者がアクセス権を持っていない管理機能に転送します。
http://www.mywebapp.com/checkstatus.jsp?fwd=appadmin.jsp
予防メカニズム
- リダイレクトとフォワードの使用を避ける方が良いです。
- やむを得ない場合は、宛先のリダイレクトにユーザーパラメータを含めずに実行する必要があります。
AJAXセキュリティ
非同期JavascriptおよびXML(AJAX)は、リッチなユーザーエクスペリエンスを提供するためにWebアプリケーションを開発するために使用される最新の手法の1つです。 これは新しいテクノロジーであるため、まだ完了していない多くのセキュリティ問題が確立されており、以下はAJAXのいくつかのセキュリティ問題です。
- 保護する入力が多いほど、攻撃対象領域は大きくなります。
- また、アプリケーションの内部機能も公開します。
- 認証情報とセッションの保護の失敗。
- クライアント側とサーバー側の間には非常に狭い境界線があるため、セキュリティミスを犯す可能性があります。
例
AJAXセキュリティの例を次に示します-
2006年、ワームはXSSとAJAXを使用してyahooメールサービスに感染し、Yahoo Mailのonloadイベント処理の脆弱性を利用しました。 感染した電子メールが開かれると、ワームはJavaScriptを実行し、感染したユーザーのすべてのYahoo連絡先にコピーを送信しました。
ハンズオン
- ステップ1 *-XMLインジェクションを使用して、許可された報酬のセットにさらに報酬を追加する必要があります。 以下は、シナリオのスナップショットです。
- ステップ2 *-Burp Suiteを使用して要求と応答の両方をインターセプトすることを確認します。 以下と同じ設定。
- ステップ3 *-シナリオに記載されているアカウント番号を入力します。 対象となるすべての報酬のリストを取得できます。 5つのうち3つの報酬を受け取る資格があります。
- ステップ4 *-「送信」をクリックして、応答XMLで何が得られるかを見てみましょう。 以下に示すように、資格がある3つの報酬はXMLとして渡されます。
- ステップ5 *-これらのXMLを編集して、他の2つの報酬も追加しましょう。
- ステップ6 *-すべての報酬がユーザーに表示され、選択できるようになります。 追加したものを選択し、「送信」をクリックします。
- ステップ7 *-次のメッセージが表示され、「*おめでとうございます。 このレッスンは正常に完了しました。」
予防メカニズム
クライアント側-
- .innerHtmlの代わりに.innerTextを使用します。
- evalを使わないでください。
- セキュリティのためにクライアントロジックに依存しないでください。
- シリアル化コードを書くことは避けてください。
- XMLを動的に構築しないでください。
- クライアントに秘密を送信しないでください。
- クライアント側のコードで暗号化を実行しないでください。
- クライアント側でセキュリティに影響するロジックを実行しないでください。
サーバー側-
- CSRF保護を使用します。
- シリアル化コードを書くことは避けてください。
- サービスはユーザーが直接呼び出すことができます。
- 手作業でXMLを作成することは避け、フレームワークを使用してください。
- 手作業でJSONを作成することは避け、既存のフレームワークを使用してください。
セキュリティテスト-Webサービス
最新のWebベースのアプリケーションでは、Webサービスの使用は避けられず、攻撃を受けやすくなります。 Webサービスは複数のWebサイトからのフェッチを要求するため、開発者はハッカーによるあらゆる種類の侵入を回避するために、追加の対策をほとんど講じる必要がありません。
ハンズオン
- ステップ1 *-WebgoatのWebサービス領域に移動し、WSDLスキャンに移動します。 次に、他のアカウント番号のクレジットカードの詳細を取得する必要があります。 シナリオのスナップショットは次のとおりです。
- ステップ2 *-名を選択すると、SOAPリクエストxmlを介して 'getFirstName’関数呼び出しが行われます。
- ステップ3 *-WSDLを開くと、 'getCreditCard’と同様にクレジットカード情報を取得する方法があることがわかります。 次に、以下に示すようにBurpスイートを使用して入力を改ざんしましょう-
- ステップ4 *-次に、以下に示すようにBurpスイートを使用して入力を変更します-
- ステップ5 *-他のユーザーのクレジットカード情報を取得できます。
予防メカニズム
- SOAPメッセージはXMLベースであるため、渡された資格情報はすべてテキスト形式に変換する必要があります。 したがって、常に暗号化する必要がある機密情報の受け渡しには、非常に注意する必要があります。
- パケットの整合性を確保するために適用されるチェックサムなどのメカニズムを実装することにより、メッセージの整合性を保護します。
- メッセージの機密性の保護-非対称暗号化は対称セッションキーを保護するために適用されます。対称キーは多くの実装で1つの通信に対してのみ有効であり、その後破棄されます。
セキュリティテスト-バッファオーバーフロー
プログラムが一時的なデータ保存領域(バッファ)に保持する予定よりも多くのデータを保存しようとすると、バッファオーバーフローが発生します。 バッファは有限量のデータを含むように作成されるため、余分な情報が隣接するバッファにオーバーフローし、バッファに保持されている有効なデータが破損する可能性があります。
例
バッファオーバーフローの典型的な例を次に示します。 これは、動作を制御するために外部データに依存する最初のシナリオによって引き起こされる単純なバッファオーバーフローを示しています。 ユーザーが入力したデータの量を制限する方法はなく、プログラムの動作はユーザーが入力した文字数に依存します。
...
char bufr[BUFSIZE];
gets(bufr);
...
ハンズオン
- ステップ1 *-インターネットにアクセスするには、名前と部屋番号でログインする必要があります。 これがシナリオのスナップショットです。
- ステップ2 *-以下に示すように、Burp Suiteで「非表示フォームフィールドを再表示」も有効にします-
- ステップ3 *-名前と部屋番号のフィールドに入力を送信します。 また、部屋番号フィールドにかなり大きな数字を入力しようとします。
- ステップ4 *-以下に示すように、非表示フィールドが表示されます。 [同意する]をクリックします。
- ステップ5 *-攻撃は成功し、バッファオーバーフローの結果、隣接するメモリ位置の読み取りを開始し、以下に示すようにユーザーに表示します。
- ステップ6 *-表示されたデータを使用してログインします。 ロギング後、次のメッセージが表示されます-
予防メカニズム
- コードレビュー
- 開発者トレーニング
- コンパイラツール
- 安全な機能の開発
- 定期的なスキャン
セキュリティテスト-サービス拒否
サービス拒否(DoS)攻撃は、ネットワークリソースを利用できないようにするハッカーによる試みです。 通常、インターネットに接続されているホストを一時的または無期限に中断します。 これらの攻撃は、通常、銀行、クレジットカード決済ゲートウェイなどのミッションクリティカルなWebサーバーでホストされているサービスを標的としています。
DoSの症状
- 異常に遅いネットワークパフォーマンス。
- 特定のWebサイトが利用できない。
- Webサイトにアクセスできない。
- 受信したスパムメールの数の劇的な増加。
- ウェブまたはインターネットサービスへの長期アクセス拒否。
- 特定のWebサイトが利用できない。
ハンズオン
- ステップ1 *-WebGoatを起動し、「サービス拒否」セクションに移動します。 シナリオのスナップショットを以下に示します。 DBスレッドプールの最大サイズに違反して、そこに複数回ログインする必要があります。
- ステップ2 *-最初に有効なログインのリストを取得する必要があります。 この場合、SQLインジェクションを使用します。
- ステップ3 *-試行が成功すると、すべての有効な資格情報がユーザーに表示されます。
- ステップ4 *-DoS攻撃を成功させるために、少なくとも3つの異なるセッションでこれらの各ユーザーにログインします。 DB接続では2つのスレッドしか処理できないことがわかっているため、すべてのログインを使用することで3つのスレッドが作成され、攻撃が成功します。
予防メカニズム
- 徹底的な入力検証を実行します。
- CPUを大量に消費する操作は避けてください。
- データディスクをシステムディスクから分離することをお勧めします。
セキュリティテスト-悪意のあるファイルの実行
開発者は、多くの場合、潜在的に脆弱な入力をファイルと直接使用または連結するか、入力ファイルが本物であると想定します。 データが適切にチェックされないと、脆弱なコンテンツがWebサーバーによって処理または呼び出される可能性があります。
例
古典的な例のいくつかが含まれます-
- .jspファイルをWebツリーにアップロードします。
- サイズ変更する.gifをアップロードします。
- 巨大なファイルをアップロードします。
- タグを含むファイルをアップロードします。
- .exeファイルをWebツリーにアップロードします。
ハンズオン
- ステップ1 *-WebGoatを起動し、悪意のあるファイル実行セクションに移動します。 シナリオのスナップショットを以下に示します-
- ステップ2 *-このレッスンを完了するには、上記の場所にguest.txtをアップロードする必要があります。
- ステップ3 *-jspの実行時にguest.txtファイルが作成されるようにjspファイルを作成しましょう。 jspファイルのコンテンツを実行しているため、jspの命名にはこのコンテキストでの役割はありません。
<HTML>
<% java.io.File file = new
java.io.File("C:\\Users\\username$\\.extract\\webapps\\WebGoat\\mfe_target\\guest.txt");
file.createNewFile(); %>
</HTML>
- ステップ4 *-jspファイルをアップロードし、アップロード後に同じファイルのリンク場所をコピーします。 アップロードには画像が必要ですが、jspをアップロードしています。
- ステップ5 *-jspファイルに移動すると、ユーザーへのメッセージは表示されません。
- ステップ6 *-jspファイルをアップロードしたセッションを更新すると、「*おめでとうございます。 レッスンは正常に完了しました」。
予防メカニズム
- Webサイトのアクセス許可を使用してWebサイトを保護します。
- Webアプリケーションのセキュリティ対策を採用します。
- IIS 7.0のビルトインユーザーおよびグループアカウントを理解します。
セキュリティテスト-自動化ツール
アプリケーションのセキュリティテストを実行するために使用できるさまざまなツールがあります。 エンドツーエンドのセキュリティテストを実行できるツールはほとんどありませんが、システムの特定の種類の欠陥を特定するための専用ツールもあります。
オープンソースツール
いくつかのオープンソースのセキュリティテストツールは、与えられたとおりです-
S.No. | Tool Name |
---|---|
1 |
Zed Attack Proxy セキュリティ欠陥を発見するための自動スキャナーおよびその他のツールを提供します。 |
2 |
OWASP WebScarab HttpおよびHttps要求を分析するためにJavaで開発されました。 |
3 |
OWASP Mantra 多言語セキュリティテストフレームワークをサポート https://www.owasp.org/index.php/OWASP_Mantra_-_Security_Framework |
4 |
Burp Proxy トラフィックを傍受および変更するためのツールであり、カスタムSSL証明書を使用して動作します。 |
5 |
Firefox Tamper Data tamperdataを使用して、HTTP/HTTPSヘッダーを表示および変更し、パラメーターを送信する |
6 |
Firefox Web Developer Tools Web Developer拡張機能は、さまざまなWeb開発者ツールをブラウザーに追加します。 |
7 |
Cookie Editor ユーザーがCookieを追加、削除、編集、検索、保護、およびブロックできるようにします |
特定のツールセット
次のツールは、システム内の特定のタイプの脆弱性を見つけるのに役立ちます-
S.No. | Link |
---|---|
1 |
DOMinator Pro − Testing for DOM XSS |
2 |
OWASP SQLiX − SQL Injection |
3 |
Sqlninja − SQL Injection |
4 |
SQLInjector − SQL Injection |
5 |
sqlpowerinjector − SQL Injection |
6 |
SSL Digger − Testing SSL |
7 |
THC-Hydra − Brute Force Password |
8 |
Brutus − Brute Force Password |
9 |
Ncat − Brute Force Password |
10 |
OllyDbg − Testing Buffer Overflow |
11 |
Spike − Testing Buffer Overflow |
12 |
Metasploit − Testing Buffer Overflow |
商用ブラックボックステストツール
開発するアプリケーションのセキュリティ問題を見つけるのに役立つ商用ブラックボックステストツールの一部を以下に示します。
S.No | Tool |
---|---|
1 |
NGSSQuirreL |
2 |
IBM AppScan |
3 |
Acunetix Web Vulnerability Scanner |
4 |
NTOSpider |
5 |
SOAP UI |
6 |
Netsparker |
7 |
HP WebInspect |
無料のソースコードアナライザー
S.No | Tool |
---|---|
1 |
OWASP Orizon |
2 |
OWASP O2 |
3 |
SearchDiggity |
4 |
FXCOP |
5 |
Splint |
6 |
Boon |
7 |
W3af |
8 |
FlawFinder |
9 |
FindBugs |
商用ソースコードアナライザー
これらのアナライザーは、ソースコードの脆弱性を検査、検出、および報告します。これは、脆弱性の傾向があります-
S.No | Tool |
---|---|
1 |
Parasoft C/C++ test |
2 |
HP Fortify |
3 |
Appscan |
4 |
Veracode |
5 |
Armorize CodeSecure |
6 |
GrammaTech |