そのホームページ大丈夫? OSコマンド・インジェクションって何? それは「Webサーバを不正に操作する攻撃方法」です!
こんにちは!
IT・プログラミング関連講師の荒川栄一郎です。
本日は「HTTPヘッダ・インジェクション」について記述します。
★「セキュリティ」って何?
まず「HTTPヘッダ・インジェクション」についてお伝えする前に
情報セキュリティについて知る必要がありますので
「セキュリティ」の概要についてお伝えします。
インターネットには、様々なユーザが接続しています。
その中には、インターネットを利用して
虎視眈々と悪さをしようと企んでいるユーザもいます。
インターネットに接続するコンピュータを安全に利用するためには
どのような脅威があり、その対策方法などを知っておく必要があります。
セキュリティは
「安全」「防護」「保障」などの意味を持つ英単語で
ITの分野では、「情報セキュリティ」のことを指し
コンピュータを安全に利用できるようにすることです。
現在はインターネットを利用して
HP(ホームページ)を閲覧したり
FacebookやTwitterなどのSNS(Social Networking Service)で
情報のやり取りを行うことができますよね。
このようなWebシステムを利用して
●クレジットカード情報
●個人情報
●メールの内容
●ログイン情報
のような情報を簡単に取得することも可能になっていますので
Webシステムの利用者は
いろいろな脅威があることを知っておいたほうがいいと考えます。
また、Webシステムを作成する側は
利用者が安心して利用できるように考慮しなければいけません。
しかし、情報セキュリティ対策は万全だと思っていても
日々いろいろな脅威が発生し、その対策方法が講じられていることも事実です。
★HTTPヘッダ・インジェクションって何?
インターネットには、様々なユーザが接続しています。
その中には、インターネットを利用して
虎視眈々と悪さをしようと企んでいるユーザもいます。
現在では
●SNS
●オンライン・ショッピング
●オンライン予約
などのWebシステムがよく利用されています。
もし、このようなWebシステムを利用して
あるHP(ホームページ)を見ようとしたら
別のサイトに誘導されたり
悪意のあるプログラムが実行されてPCの秘密情報を盗まれたりしたら
情報漏洩やデータ流出の被害が発生するかもしれませんね。
通常HP(ホームページ)などは
Webブラウザから見たいページを要求(リクエスト)し
Webサーバからそのページ情報を応答(レスポンス)することで
閲覧することができています。
HTTPヘッダ・インジェクションは
悪意の要求(リクエスト)で応答(レスポンス)を改ざんする攻撃方法です。
HTTPヘッダとは
リクエストやレスポンスを送る時に伝えたい詳細情報です。
インジェクションとは
注入という意味があります。
HTTPヘッダは
リクエスト・ヘッダとレスポンス・ヘッダに
分類することができます。
リクエスト・ヘッダは
WebブラウザからWebサーバに伝えたい詳細情報で
ユーザが使用しているOSやWebブラウザの種類などの情報です。
レスポンス・ヘッダは
WebサーバからWebブラウザに伝えたい詳細情報で
Webサーバの種類やデータがHTMLなのか画像なのかや文字コードなどの情報です。
HTTPヘッダ・インジェクションは
リクエストを悪用してレスポンスを改ざんさせ
利用者のPCを攻撃することです。
HTTPヘッダ・インジェクションが起きる原因は
利用者が入力したデータの中に
改行コード(CR文字「\r」、LF文字「\n」)が含まれていることが挙げられます。
レスポンス・ヘッダは
1行につき1つの意味を持ちますので
Webシステム側で改行コードの処理が適切に行えていないと
利用者が意図しないレスポンス・ヘッダが追加できてしまいます。
また、レスポンス・ヘッダの下に空白行があり
さらにその下にレスポンス・ボディがあります。
通常Webブラウザの画面に表示されるHTMLなどの情報は
レスポンス・ボディに設定されて送られます。
例えば下記のような形でURLの後ろに
URL?location=%0d%0d<script>悪意のあるプログラム</script>
が「aタグ」のリンク文字で設定されていて
それをクリックして実行するとどのような結果になるでしょうか?
locationとは「移動先」を示す情報で
「location=移動先URL」の形で設定すると
レスポンス・ヘッダに「Location:移動先URL」という形で設定されます。
%0dとは「改行」を示す情報で
2つありますので「2回改行する」という意味になります。
<script>悪意のあるプログラム</script>の部分は
JavaScriptというプログラミング言語のプログラムになりますが
今回は何らかの悪意のあるプログラムが
Webブラウザの方で実行されると考えてください。
上記URLが実行されると
レスポンス・ヘッダに「Location:」を起点に2回改行されますので
空白行を飛び越えレスポンス・ボディに
<script>悪意のあるプログラム</script>
が設定されてWebブラウザにレスポンスされますので
Webブラウザ側で悪意のあるプログラムが実行することができてしまいます。
HTTPヘッダ・インジェクションに成功すると
●秘密情報の盗難
●クロスサイト・スクリプティング
●セッション・ハイジャック
などの攻撃を仕掛けることも可能になります。
このように
リクエストを悪用してレスポンスを改ざんさせ
利用者のPCを攻撃することを
「HTTPヘッダ・インジェクション」と呼びます。
システム開発側はこのようなシステムを作ると
利用者からクレームがくるでしょうし
多額な賠償請求を迫られる可能性もあるかもしれません。
システム開発側は
必ずHTTPヘッダ・インジェクション対策を施さなければ
利用者が安心して利用できません。
HTTPヘッダ・インジェクション対策は
(1)リクエストの値をレスポンス・ヘッダの値へ設定しない。
(2)レスポンス・ヘッダに埋め込む文字列に改行コードを許可しない。
などの方法があります。
(1)リクエストの値をレスポンス・ヘッダの値へ設定しない。
HTTPヘッダ・インジェクションは
リクエストを悪用してレスポンス・ヘッダへ不正な値を設定し
レスポンスを改ざんさせ利用者のPCを攻撃します。
このように
リクエストの値をレスポンス・ヘッダへ設定する事が攻撃条件となっていますので
リクエストの値をレスポンス・ヘッダの値へ設定させないようにすることにより
HTTPヘッダ・インジェクションを回避することができます。
(2)レスポンスヘッダに埋め込む文字列に改行コードを許可しない。
HTTPヘッダ・インジェクションは
リクエストに改行文字を使用してしてレスポンス・ヘッダへ不正な値を設定し
レスポンスを改ざんさせ利用者のPCを攻撃します。
よって
リクエストの値をチェックして
レスポンスヘッダに埋め込む文字列に改行コードを許可しないようにすることにより
HTTPヘッダ・インジェクションを回避することができます。
Webサイトには様々な脅威が潜んでいますので
常に最悪の事態も想定したりして
対策方法を考慮することが大切だと考えます。
Webサイトを構築する側の人は
Webサイトの利用者が安心して利用できるシステムを作成するように
心掛けなければいけません。
Webサイトを利用する側も
インターネットを利用するシステムには
様々な脅威が潜んでいることを頭に入れておかなければいけません。
ネット社会では
企業だけでなく個人にとっても脅威が潜んでいます。
セキュリティ対策は
しっかりと行う必要がありますね。
★HTTPヘッダ・インジェクションのまとめ
HTTPヘッダ・インジェクションって
難しいと思われている方も多々いると思いますが
悪意の要求(リクエスト)で応答(レスポンス)を改ざんする攻撃方法です。
セキュリティ対策という言葉を聞いたことがある方は非常に多いと思いますし
セキュリティを意識している人も非常に多いと思います。
HTTPヘッダ・インジェクションは
今やPCやスマートフォンでインターネットを利用する上で
潜んでいる脅威だと考えますが
明確に内容や仕組みを理解している人は少ないと思います。
ただHTTPヘッダ・インジェクションというものは
●悪意の要求(リクエスト)で応答(レスポンス)を改ざんする攻撃方法
●Webサイトの作る側も利用する側も考えなければいけないこと
ということだけでも
このコラムを通じて理解していただけましたら幸いに思います。
HTTPヘッダ・インジェクションは
悪意の要求(リクエスト)で応答(レスポンス)を改ざんする攻撃方法です。
もしHTTPヘッダ・インジェクションに興味を持たれたら
少しずつ勉強してみてはいかがでしょうか?
ユーザとしては知る必要がありませんが
少しずつ覚えていくことで、点が線で繋がることも多々あります。
そうなると結構楽しくなるかもしれません。
これからIT業界を目指している人には
知っておいてほしい知識だと思いますが
少しずつ勉強していってほしいと思います。
★HTTPヘッダ・インジェクションについて学ぶ方法は
HTTPヘッダ・インジェクションについては
新入社員研修やIT・プログラミング関連の研修で
学ぶことができるようになっています。
【IT・プログラミング研修】
●「Java(Webアプリ開発)」の詳細情報
https://itlaboj.com/courses/java_training/java_web/
●「Java(Webアプリ開発 - Spring Framework -)」の詳細情報
https://itlaboj.com/courses/java_training/java_spring/
●「Python(Webアプリ開発)」の詳細情報
https://itlaboj.com/courses/python_training/python_web/
●「PHP(Webアプリ開発)」の詳細情報
https://itlaboj.com/courses/php_training/php_web/
●「C#(Webアプリ開発)」の詳細情報
https://itlaboj.com/courses/cs_training/cs_web/
●「ネットワーク基礎」の詳細情報
https://itlaboj.com/courses/it_training/network_kiso/
★「HTTPヘッダ・インジェクション」習得に必要なもの
HTTPヘッダ・インジェクションの内容は基本的に座学になりますが
Webアプリケーションの知識や構築方法を学んだ後に行う内容ですので
それぞれのプログラミング言語のセットアップなどが必要になります。
また、このコースは
リアルでもオンラインでも受講することが可能です。
オンラインで受講される人は
「Zoom」が利用できる環境があればいいと考えます。
このコースはシステム開発に直結する話ではあり
SEやプログラマになるための必要な内容になります。
みんなが楽しみながらWebサイトの脅威・対策方法の知識を習得してほしいと思いますし
将来のIT技術者を研修や動画コンテンツを通じて
育成していきたいと考えています。
私は日本全国に多くのIT技術者を育成できる研修を目指していきたいです。
そして一人でも多くの受講者に受講してもらい理解してもらえる研修を行いたいと思っています。