HTTPヘッダ・インジェクションの対策まとめ

2018.06.06

Webセキュリティ

Webセキュリティを考える上で、HTTPヘッダ・インジェクションの仕組みや対策を理解することはとても重要です。
Webサービス提供者とユーザーの双方が、安心安全にWebを利用するためにも、改行コードを利用したHTTPヘッダ・インジェクションの知識と対策をしっかりと覚えておきましょう。

目次

1.HTTPヘッダ・インジェクションとは?

HTTPヘッダ・インジェクションとは、動的にヘッダを生成するWebページに対し、改行コードをヘッダ内に挿入することで任意の文字列を生成させて不正な動作を引き起こさせる攻撃手法です。攻撃者はHTTPヘッダ・インジェクション対策をしていないページのURLに対し、改行コードの 「%0d%0d」 とURL内に挿入し、改行コード以降にテキストやスクリプトを仕込み、意図しない動作をさせる事でWebページの所有者及び閲覧するユーザーへ攻撃を仕掛けます。

2.改行コードによるHTTPヘッダ・インジェクションで何が起こるか

HTTPヘッダ・インジェクションへの対策をしないことで何が起こるのか。はっきりと言えるのは「悪意のある第三者からの攻撃による被害」です。自衛の意味も含めて対策をすることがWebサービス提供者として必要です。具体的にどのようなことが起こりうるのかご説明します。

2-1.HTTP cookieを任意の値にできる

クッキーを任意の値にできるということはセッション固定攻撃が可能になるということであり、セッションハイジャックなどの恐れがあります。簡単に説明するとセッションを乗っ取られることで、特定のサービスなどを不正に利用されたり、パスワードの再設定などでフィッシングされ、パスワードを攻撃者に奪われてしまうことが考えられます。

2-2.キャッシュ汚染によるWebページの差し替え

HTTPヘッダ・インジェクションによりレスポンスボディを書き換えられることで、キャッシュサーバの内容を汚染されてしまい、偽のページに差し替えられてしまう可能性があります。何も知らずにページに訪れたユーザーは、偽のページと知らずに情報を信じてしまうことになります。キャッシュ汚染によるWebページの差し替えの影響は長く続いてしまうこともあり、イメージダウンや利用者の激減に繋がる恐れもあります。

2-3.別のURLへリダイレクトされてしまう

本来ユーザーが検索などで得たかった情報とは別のページに転送、リダイレクトされたり、リダイレクトした先のページを本物のページに似せることで、詐欺などの被害を引き起こしてしまう可能性もあります。ITに対するリテラシーが高ければ騙されない可能性もありますが、スマホなどで気軽に訪れたページがHTTPヘッダ・インジェクションにより攻撃されていた場合は気が付くことなく表示された情報を信じてしまい、誤った情報を得ることになってしまいます。

2-4.任意の文字列やスクリプトを表示できる

HTTPインジェクションへ対策を講じて居ない場合、エスケープされた改行コードを挿入することでリクエストボディを任意の文字列に書き換えることが可能なため、元々のページに存在しない文章や表現が表示されることになります。言い換えれば、実際のドメインでアクセスするサーバには存在しない文字列やスクリプトが不正に実行、動作され、表示されてしまうということです。

3.サービスの提供者とユーザーの信頼・安心のために

ユーザーが何らかのサービスを利用する時には信頼できること・安心できることの2つがとても重要です。また、サービス提供者として、脆弱性への対策やシステムの不具合などの改善は常に怠らないことで、信頼と安心を確保することが大切です。

4.改行コードによるHTTPヘッダ・インジェクションへの対策

HTTPヘッダ・インジェクションへの対策として、改行コードの取扱いの他にどのような対策があるのかを知っておきましょう。脆弱性に対する知識や理解がなく、対策を講じていないことで所属する企業や団体の不利益だけでなく、ユーザーに対する被害が発生しないようにする努力が必要です。最新の情報を取り入れる姿勢と、具体的かつ即効性のある対策についての情報を得られるように視野を広めておくことも大切です。

4-1.改行コードの「%0d」をエスケープする

外部から改行コードの入力を全て削除する or 許可しないことでHTTPヘッダ・インジェクションの対策となります。ただし、使用している言語によっては更に対策が必要だということを忘れてはいけません。

4-2.APIを利用する

直接レスポンスヘッダで処理するのではなく、出力処理を施したAPIを利用するのもHTTPヘッダ・インジェクションへの対策となります。改行コードを適切に処理できるのであれば問題ないという意味です。注意点としては改行コードへの対策をした、と満足するのではなく、逆にAPIを利用することで起こり得る脆弱性についても予め知見を深めておくことです。

4-3.レスポンスヘッダにリクエストボディの値を使用しない

HTTPヘッダ・インジェクションはレスポンスヘッダにリクエストボディの値を利用するシステムやサービスに起こり得る脆弱性です。レスポンスヘッダにリクエストボディの値を使用しないのであればHTTPヘッダ・インジェクション起こり難いということです。外部からの入力を利用しないページやサービスであるか。また、利用しないとしてもURLの末尾に改行コードを記述することで意図しない挙動が起きないかもチェックしておきましょう。

5.HTTPヘッダ・インジェクションの対策だけで安心しないように!

言語やシステム・サービスごとの対策を入念にチェックしましょう。例えばHTTPヘッダ・インジェクションの他にメールシステムやPHPの脆弱性を攻撃される場合もあります。対策を一つ講じたからと安心するのではなく、様々な角度からシステムやサービスを自衛できるように対策しなくてはいけません。利用している言語やサーバの仕組み、システム間のデータの受け渡しや保存方法など、ひとつの箇所に縛られることなく広く深く知識・理解を持つようにしましょう。

5-1.ヒューマンエラーが脆弱性の原因の場合も

脆弱性を悪用して攻撃されるものの中には「こんな簡単なことで?」と見落としがちなものや、気が付かないものが非常に多いです。言い換えれば「脆弱性への対策」を行うべき人間側のミス、ヒューマンエラーによるものも少なくないということです。Webセキュリティを高めるために必要なのは常に新鮮な情報を取り入れながら、利用者・ユーザーの利便性も損なわないように努めることです。

5-2.ユーザーに責任を負わせない努力

Webサービス提供者やユーザーは、ページやサービスが改ざんされていたり、偽のページであることに気が付くことは難しいでしょう。理由としてはインターネットが普及し、スマホやタブレットで気軽に様々なリソースにアクセスできるようになりましたが、Webに対する自衛の手段やセキュリティに対する防衛意識を持たない方が増えてきたからです。ユーザーが知らない・わからない・セキュリティを意識できないことで、何らかの被害や責任が発生しないように配慮することも大切です。

まとめ

HTTPヘッダ・インジェクションで起こり得ることや、対策として改行コードの取扱いやAPIの利用、リクエストヘッダの取扱いなどについてご説明しました。Webページやサービスを提供者としては、安心・安全な環境を構築することで、信頼性を高められることができます。システムを構築・運営する担当だけでなく、携わる人、全体でセキュリティ意識を持つことで、様々な視線からWebセキュリティを高めることができます。
HTTPヘッダ・インジェクションへの対策以外にも要・不要に関わらず、Webセキュリティの情報に目を向けられるように、いつでも新しい知識を取り入られるように柔軟な考え方を持つことが大切ですね。