情報処理安全確保支援士 - SE娘の剣 -

左門至峰による情報処理安全確保支援士試験に合格するためのサイトです。 過去問を引用しながら、試験に出る基礎知識を体系的かつ詳細に整理します。

ディレクトリトラバーサル

1.絶対パスと相対パス

過去問(H25年秋FE午後問11)では、絶対パスと相対パスに関して、以下の記載があります。
「パスは,木構造をもつファイルシステムにおいてディレクトリを特定するために利用される文字列であり,ディレクトリの名前を“/”で区切って並べて表す。“/”で始まるパスを絶対パスという。絶対パスはルートディレクトリを起点として表したパスである。“/”で始まらないパスを相対パスという。相対パスは任意のノードを起点として表したパスである。」

相対パスは、現在の場所を起点としてファイルの場所を示す書き方です。
たとえば、status.cgiの場所を示す絶対パスが以下とします。

http://192.168.0.1/images/status.cgi  

現在、imagesフォルダにいる場合、status.cgiの相対パスは以下です。

./status.cgi 

1.ディレクトリトラバーサルとは

トラバーサル(traversal)とは「横断」という意味である。
横断歩道は、本来は車のために縦方向にある流れを歩行者のために横に断ち切る。ディレクトリトラバーサルも同様で、横断的にファイルにアクセスする。

具体例で見てみましょう。以下のディレクトリ構造を見てください。
例えば、htmlディレクトリは公開していいファイル、secretディレクトリは非公開のファイルが格納されているとします。
directory-traversal

また、現在のディレクトリが上記のhtmlだったとします。
ここで、相対パスとして「../../secret/secret.txt」を指定します。「../」は、上位のディレクトリを意味する文字列です。
こうすると、非公開のファイルであるsecret.txtファイルにアクセスすることができるのです(ただし、アクセス権が許可されている場合)。

過去問(H27秋AP)では、「入力文字列からアクセスするファイル名を組み立てるアプリケーションに対して,攻撃者が,上位のディレクトリを意味する文字列を入力して,非公開のファイルにアクセスする。」とあります。
情報セキュリティスペシャリスト試験を目指す女性SE


「入力文字列からアクセスするファイル名を組み立てるアプリケーションに対して」ってどういう意味ですか?

IPAの以下の資料の「ディレクトリトラバーサル攻撃 」の部分が参考になります。https://www.ipa.go.jp/security/awareness/vendor/programmingv1/b07_07.html

以下のサイトがかなり重要。他にもたくさん大切なページがある
http://www.ipa.go.jp/security/vuln/vuln_contents/dt.html

では、過去問を見てみよう。

過去問(H24FE春 午前問45)
問45 ディレクトリトラバーサル攻撃に該当するものはどれか。
ア Webアプリケーションの入力データとしてデータベースへの命令文を構成するデータを入力し,想定外のSQL文を実行させる。
イ Webサイトに利用者を誘導した上で,Webサイトの入力データ処理の欠陥を悪用し,利用者のブラウザで悪意のあるスクリプトを実行させる。
ウ 管理者が意図していないパスでサーバ内のファイルを指定することによって,本来は許されないファイルを不正に閲覧する。
エ セッションIDによってセッションが管理されるとき,ログイン中の利用者のセッションIDを不正に取得し,その利用者になりすましてサーバにアクセスする。






正解はウである。
もう一問。これの正解は「ディレクトリトラバーサル」であるが、以下を見ると、どのように不正な操作をするのかが分かると思う。

過去問(H22SC春午後Ⅱ問2設問3(1))
[ ]に入れる適切な字句を15字以内で答えよ
20231007010151
 図5 5021番の脅威と判定したパケットに含まれていた文字列

パケットに含まれる文字列からすると、CGIプログラムに含まれる[  ]の脆弱性を利用して、パスワードファイルを取得することをねらったもののようです。

有名な事件として、2003年に、某協会のホームページから個人情報1184人分が流出した。
http://www.itmedia.co.jp/enterprise/0401/23/epn14.html

原因は、サイト側の脆弱性ではあったが、そこをついて情報を公開した大学の研究者は、不正アクセス禁止法で逮捕されることになった様子。

HTTPヘッダインジェクション

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

情報セキュリティスペシャリスト試験を目指す女性SE
インジェクションは「注入」という意味ですから、HTTPのヘッダに悪意のコードを注入(インジェクション)するのですね。

そう考えてよい。
情報処理振興機構(IPA)の「安全なウェブサイトの作り方 改訂第7版」には、HTTPヘッダ・インジェクションについて次のように説明されている。

HTTPヘッダ・インジェクションについて
ウェブアプリケーションの中には,リクエストに対して出力する HTTP レスポンスヘッダのフィールド値を,外部から渡されるパラメータの値等を利用して動的に生成するものがあります。たとえば,HTTPリダイレクションの実装として,パラメータから取得したジャンプ先の URL 情報を,Location ヘッダのフィールド値に使用する場合や,掲示板等において入力された名前等を Set-Cookie ヘッダのフィールド値に使用する場合等が挙げられます。このようなウェブアプリケーションで,HTTP レスポンスヘッダの出力処理に問題がある場合,攻撃者は,レスポンス内容に任意のヘッダフィールドを追加したり,任意のボディを作成したり,複数のレスポンスを作り出すような攻撃を仕掛ける場合があります。このような問題を「HTTP ヘッダ・インジェクションの脆弱性」と呼び,この問題を悪用した攻撃手法は「HTTP ヘッダ・インジェクション攻撃」と呼びます。
http://www.ipa.go.jp/security/vuln/websecurity.htmlより引用)

ここにあるに「掲示板等において入力された名前等を Set-Cookie ヘッダのフィールド値に使用する場合」に関して、過去問(H27春SC午後Ⅰ問1)では具体的な例が掲載されている。

具体的に書くと、入力欄の文字列に以下を入れる (※途中で改行しています)

%0d%0a%0d%0a%3chtml%3e%3cbody%3e%3cscript%3ealert%28
%221%22%29%3c%2fscript%3e%3c%2fbody%3e%3c%2fhtml%3e  

これをデコードすると以下になる

「改行コード」「改行コード」<html><body><script>alert("1")</script></body></html> 

すると、Webサーバに対するHTTPリクエストは以下のようになる

HTTPリクエスト
GET /search?kensaku=jewelry「改行コード」
「改行コード」
<html><body><script>alert("1")</script></body></html>

HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ja-JP
Accept-Encoding: gzip, deflate
Host: [www.example.co.jp](http://www.example.co.jp/)
Cookie: SESSIONID=134D96E470da240421svr5B019

これに対し、WebサーバからクライアントへのHTTPレスポンスは以下になる。

HTTPレスポンス
HTTP/1.1 200 OK
Date: Tue, 10 Jun 2014 05:45:58 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache
Set-Cookie:kensaku=jewelry

<html><body><script>alert("1")</script></body></html> ←このようにスクリプトが実行できる

すると改行コードにより、レスポンスヘッダではなくレスポンスボディとブラウザは認識する。ヘッダにはスクリプトが書かれても実行はされないが、レスポンスボディに配置されれば、ブラウザにてスクリプトが実行される。
こうやって、攻撃者は任意の攻撃コードをクライアント側で実行することができる。

2. HTTPヘッダインジェクションの攻撃事例

HTTPヘッダインジェクションを使って不正なURLを作ることができる。脆弱性があるサイトを利用するので、たとえばそのサイトが大手サイトであれば、ドメインは大手になる。利用者は、URLの後半を確認することはまずない。
そして、そのURLを掲示板であったり、メールで送信してクリックさせる。そうすれば、フィッシングサイトに誘導することや、攻撃者がSet Cookieも改ざんしてセッションIDを指定し、セッション固定攻撃にも悪用できる。

具体的なサンプルプログラムについては、以下に記載がある。
❶Capm Network
http://capm-network.com/?tag=HTTP%E3%83%98%E3%83%83%E3%83%80%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

❷徳丸氏の記事
https://xtech.nikkei.com/it/article/COLUMN/20070422/269134/

3. HTTPヘッダインジェクションの対策

対策に関しても、同じ情報処理安全確保支援士試験の過去問(H27春SC午後Ⅰ問1)で述べられている。

過去問(H27春SC午後Ⅰ問1)
U主任:仮に問題があるとした場合,Set-Cookieヘッダの値をセットするサーバ側の処理において,どのような対策が考えられますか。
T君:幾つかの対策があります。例えば,HTTPレスポンスヘッダを適切に出力するために,Webアプリの実行環境やプログラム言語が用意している,ヘッダ出力用の関数やAPIを使用する方法が考えられます。それが使用できない場合は,[ c ]するといった処理を開発者が自身で実装する方法も考えられます。






空欄cは穴埋め問題であり、解答例は以下である。
 ・出力文字列に改行コードがあるとエラー画面を出力
 ・出力文字列の改行コード以降の文字列を削除