Webセキュリティを考える上で、HTTPヘッダ・インジェクションの仕組みや対策を理解することはとても重要です。
Webサービス提供者とユーザーの双方が、安心安全にWebを利用するためにも、改行コードを利用したHTTPヘッダ・インジェクションの知識と対策をしっかりと覚えておきましょう。
HTTPヘッダ・インジェクションとは、動的にヘッダを生成するWebページに対し、改行コードをヘッダ内に挿入することで任意の文字列を生成させて不正な動作を引き起こさせる攻撃手法です。
攻撃者はHTTPヘッダ・インジェクション対策をしていないページのURLに対し、改行コードの 「%0d%0d」 とURL内に挿入し、改行コード以降にテキストやスクリプトを仕込み、意図しない動作をさせる事でWebページの所有者及び閲覧するユーザーへ攻撃を仕掛けます。
HTTPヘッダ・インジェクションへの対策をしないことで何が起こるのか。はっきりと言えるのは「悪意のある第三者からの攻撃による被害」です。
自衛の意味も含めて対策をすることがWebサービス提供者として必要です。具体的にどのようなことが起こりうるのかご説明します。
Cookieを任意の値にできるということはセッション固定攻撃が可能になるということであり、セッションハイジャックなどの恐れがあります。
簡単に説明するとセッションを乗っ取られることで、特定のサービスなどを不正に利用されたり、パスワードの再設定などでフィッシングされ、パスワードを攻撃者に奪われてしまうことが考えられます。
HTTPヘッダ・インジェクションによりレスポンスボディを書き換えられることで、キャッシュサーバの内容を汚染されてしまい、偽のページに差し替えられてしまう可能性があります。
何も知らずにページに訪れたユーザーは、偽のページと知らずに情報を信じてしまうことになります。キャッシュ汚染によるWebページの差し替えの影響は長く続いてしまうこともあり、イメージダウンや利用者の激減に繋がる恐れもあります。
本来ユーザーが検索などで得たかった情報とは別のページに転送、リダイレクトされたり、リダイレクトした先のページを本物のページに似せることで、詐欺などの被害を引き起こしてしまう可能性もあります。
ITに対するリテラシーが高ければ騙されない可能性もありますが、スマホなどで気軽に訪れたページがHTTPヘッダ・インジェクションにより攻撃されていた場合は気が付くことなく表示された情報を信じてしまい、誤った情報を得ることになってしまいます。
HTTPインジェクションへ対策を講じて居ない場合、エスケープされた改行コードを挿入することでリクエストボディを任意の文字列に書き換えることが可能なため、元々のページに存在しない文章や表現が表示されることになります。
言い換えれば、実際のドメインでアクセスするサーバには存在しない文字列やスクリプトが不正に実行、動作され、表示されてしまうということです。
ユーザーが何らかのサービスを利用する時には信頼できること・安心できることの2つがとても重要です。
また、サービス提供者として、脆弱性への対策やシステムの不具合などの改善は常に怠らないことで、信頼と安心を確保することが大切です。
HTTPヘッダ・インジェクションへの対策として、改行コードの取扱いの他にどのような対策があるのかを知っておきましょう。
脆弱性に対する知識や理解がなく、対策を講じていないことで所属する企業や団体の不利益だけでなく、ユーザーに対する被害が発生しないようにする努力が必要です。
最新の情報を取り入れる姿勢と、具体的かつ即効性のある対策についての情報を得られるように視野を広めておくことも大切です。
外部から改行コードの入力を全て削除する or 許可しないことでHTTPヘッダ・インジェクションの対策となります。ただし、使用している言語によっては更に対策が必要だということを忘れてはいけません。
直接レスポンスヘッダで処理するのではなく、出力処理を施したAPIを利用するのもHTTPヘッダ・インジェクションへの対策となります。
改行コードを適切に処理できるのであれば問題ないという意味です。注意点としては改行コードへの対策をした、と満足するのではなく、逆にAPIを利用することで起こり得る脆弱性についても予め知見を深めておくことです。
HTTPヘッダ・インジェクションはレスポンスヘッダにリクエストボディの値を利用するシステムやサービスに起こり得る脆弱性です。
レスポンスヘッダにリクエストボディの値を使用しないのであればHTTPヘッダ・インジェクション起こり難いということです。
外部からの入力を利用しないページやサービスであるか。また、利用しないとしてもURLの末尾に改行コードを記述することで意図しない挙動が起きないかもチェックしておきましょう。
言語やシステム・サービスごとの対策を入念にチェックしましょう。例えばHTTPヘッダ・インジェクションの他にメールシステムやPHPの脆弱性を攻撃される場合もあります。
対策を一つ講じたからと安心するのではなく、様々な角度からシステムやサービスを自衛できるように対策しなくてはいけません。
利用している言語やサーバの仕組み、システム間のデータの受け渡しや保存方法など、ひとつの箇所に縛られることなく広く深く知識・理解を持つようにしましょう。
脆弱性を悪用して攻撃されるものの中には「こんな簡単なことで?」と見落としがちなものや、気が付かないものが非常に多いです。
言い換えれば「脆弱性への対策」を行うべき人間側のミス、ヒューマンエラーによるものも少なくないということです。
Webセキュリティを高めるために必要なのは常に新鮮な情報を取り入れながら、利用者・ユーザーの利便性も損なわないように努めることです。
Webサービス提供者やユーザーは、ページやサービスが改ざんされていたり、偽のページであることに気が付くことは難しいでしょう。
理由としてはインターネットが普及し、スマホやタブレットで気軽に様々なリソースにアクセスできるようになりましたが、Webに対する自衛の手段やセキュリティに対する防衛意識を持たない方が増えてきたからです。ユーザーが知らない・わからない・セキュリティを意識できないことで、何らかの被害や責任が発生しないように配慮することも大切です。
HTTPヘッダ・インジェクションで起こり得ることや、対策として改行コードの取扱いやAPIの利用、リクエストヘッダの取扱いなどについてご説明しました。
Webページやサービスを提供者としては、安心・安全な環境を構築することで、信頼性を高められることができます。システムを構築・運営する担当だけでなく、携わる人、全体でセキュリティ意識を持つことで、様々な視線からWebセキュリティを高めることができます。
HTTPヘッダ・インジェクションへの対策以外にも要・不要に関わらず、Webセキュリティの情報に目を向けられるように、いつでも新しい知識を取り入られるように柔軟な考え方を持つことが大切ですね。
webセキュリティ対策としておススメなのが「WAF」の導入です。
WAFには色々なものがありますが、その中でもクラウド型WAFであれば、コストや手間も少なくセキュリティ対策することができます。
クラウド型のWAFは導入ハードルが極めて低いので、これからWebセキュリティ対策を行う企業様には有力な選択肢となります。WAFを選定する時には、サポート体制や導入実績なども重視して、自社に最適なものを選びましょう。
クラウド型WAF「攻撃遮断くん」は、最新の攻撃パターンにも自動的に対応していくため、セキュリティパッチをすぐに適用できない状況や、定期的に脆弱性診断が出来ない状況でも、セキュアな環境を保てます。
ぜひこの機会にWebセキュリティ対策を見直し、WAFの導入を検討してみてください。
「攻撃遮断くん」の詳細資料は、こちらからダウンロード頂けます。
(2018/6/6 執筆、2019/11/15修正・加筆)
この記事と一緒に読まれています
HTTPヘッダインジェクションとOSコマンドインジェクションの違いと対策方法を徹底解説!
2020.01.06
セキュリティ対策
【サイバー攻撃解説】DBへの悪質なアクセス “SQLインジェクション”
2016.11.15
セキュリティ対策
WEBページの出力処理に関する攻撃「クロスサイトスクリプティング」の解説と対策方法をまとめてみた
2020.03.16
セキュリティ対策
2020.02.14
セキュリティ対策
2020.01.10
セキュリティ対策