助け合いフォーラム

Cisco

CCNP ENCOR(350-401)
問題ID : 27225
問題を開く
セキュリティ対策としてREST APIのリクエストにタイムスタンプを付加する目的はどれか。

この問題はプレミアムコンテンツです。

上に戻る

REST APIリクエストにタイムスタンプを付加することのリプレイ攻撃への効果について

公開日 2023/05/01

REST APIで、(HTTPSではなく)HTTPを使用している場合に
(A)クライアントからサーバへのリクエスト
(B)サーバからクライアントへの応答(トークン)
とすると、リクエストにタイムスタンプを付加することで、上記(2)は、攻撃者が(A)の内容をコピーして再利用する攻撃は防げるものの
(B)を盗聴してトークンを入手し、それをコピーして利用する攻撃は、防げないとの理解であっているでしょうか。

もし、上記が正しいとすると、攻撃者が盗聴に成功している状態において、(A)、(B)の両方が盗聴されている場合には
リクエストへのタイムスタンプ付加は効果がなく、攻撃者に(A)だけを盗聴されている場合のみ、効果があるとの理解で
あっているでしょうか。

すみませんが、ご存じの方がいらしたら、教えてください。
よろしくお願いします。

2023/05/05 18:27

リクエストにタイムスタンプを付加することで、上記(2)は、攻撃者が(A)の内容をコピーして再利用する攻撃は防げるものの
(B)を盗聴してトークンを入手し、それをコピーして利用する攻撃は、防げないとの理解であっているでしょうか。

うーん、解説のこの部分がその辺の悩みの元ですかね?

リプレイ攻撃とは、攻撃者が正規ユーザの認証データをコピーして、その認証データをそのまま使って不正アクセスを行う攻撃です。

「認証データをコピー」って言うから違和感があるんだと思うのですが、REST APIを使う場合って「応答=トークン」ではなく、その前の認証段階でトークンを取得し、そのトークンを「認証済みって証拠はこれです」ってつけてAPIにリクエスト送るんですよね。

実際の流れはこのドキュメントとかみるとわかるかもです。
https://community.cisco.com/t5/tkb-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9-%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88/crosswork-api-%E3%81%AE%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/ta-p/4741165

上記ドキュメントを例にすると、リプレイ攻撃のイメージは

登録されているデバイスの数を取得
$ curl -k -H "Authorization: Bearer $TOKEN" "${BASE_URL}${DLM_INVENTORY_API}/v1/nodes/count"
{"number_of_nodes":6}

ここのリクエストパケットを丸々盗んで、それをもう一度投げつける感じです。認証の手続きもクソもなく、$TOKENがパケットに含まれているのでそのまま使えるって話です。また、ここでは取得(show系)のやつですがデバイス削除のAPIだったりすれば、何度もこのパケット投げつけることでAPIによっては1台ずつデバイスが空になるまで削除し続けることができる、と言う攻撃なんですよね。

ここで「リクエストにタイムスタンプがついていれば、リクエストしてレスポンスも返したのに(たとえば10分以上前の)同じ内容のリクエストが来るのはおかしい、と判断できる」と言うのがタイムスタンプの話かなと思います。


コメント

k kz5835

2023/05/06 00:32

arashi1977様 ご回答、有難うございます。ご指摘の様なリプレイ攻撃もあるのですね。 すみませんが、可能であれば、もう少し教えて下さい。 私の質問対象の攻撃は、ご紹介頂いたURLでいうと、ご紹介部分の一つ上の 「トークンの取得」の部分のやりとりを攻撃者が盗聴しており 「得られたトークンを TOKEN 環境変数へエクスポートしておきます。」 を攻撃者に実行され、その後の「API の使用」の操作を攻撃者に実行 されてしまうことを想定しておりました。 こういうことは、リプレイ攻撃とは言わないでしょうか? 攻撃の名称が異なる場合ですが、上記の様な盗聴/攻撃を攻撃者に実行 されるケースにおいては 最初の質問中の以下の部分の回答は、どの様になるでしょうか。 ######################### (A)クライアントからサーバへのリクエスト (B)サーバからクライアントへの応答(トークン) とすると、リクエストにタイムスタンプを付加することで、上記(2)は、攻撃者が(A)の内容をコピーして再利用する攻撃は防げるものの (B)を盗聴してトークンを入手し、それをコピーして利用する攻撃は、防げないとの理解であっているでしょうか。 ######################### たびたびすみませんが、ご存じであれば、教えて下さい。

a arashi1977

2023/05/06 09:20

> 「トークンの取得」の部分のやりとりを攻撃者が盗聴しており > 「得られたトークンを TOKEN 環境変数へエクスポートしておきます。」 > を攻撃者に実行され、その後の「API の使用」の操作を攻撃者に実行 > されてしまうことを想定しておりました。 この場合は「認証情報の奪取(攻撃者が自分でTOKENを取得できる)」なので、リプレイ(以前にやったものをもう一度実行させる)とは異なるかなと思います。 > 最初の質問中の以下の部分の回答は、どの様になるでしょうか。 それは別の考慮になる(タイムスタンプでは防げない)んじゃないですかね?最初に言及しましたが > 応答=トークン」ではなく、その前の認証段階でトークンを取得し、そのトークンを「認証済みって証拠はこれです」ってつけてAPIにリクエスト送る ので、リプレイ(以前にやったものをもう一度実行させる)のではなく、奪取した認証情報をそのまま利用するだけなので別の話です。この場合はそもそもTOKENが盗まれないようにする、しかないかなぁと。 ちなみにTOKENを抜かれてっていう「最初の質問中の以下の部分」って実例があるので、回避策が「TOKENを盗まれないようにする」以外ないって言うのはイメージしていただけるかと思います。 https://qiita.com/saitotak/items/813ac6c2057ac64d5fef

k kz5835

2023/05/06 16:39

arashi1977 ご回答、有難うございます。おかげさまで、理解できました。有難うございました。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?