助け合いフォーラム
この問題はプレミアムコンテンツです。
REST APIリクエストにタイムスタンプを付加することのリプレイ攻撃への効果について
REST APIで、(HTTPSではなく)HTTPを使用している場合に
(A)クライアントからサーバへのリクエスト
(B)サーバからクライアントへの応答(トークン)
とすると、リクエストにタイムスタンプを付加することで、上記(2)は、攻撃者が(A)の内容をコピーして再利用する攻撃は防げるものの
(B)を盗聴してトークンを入手し、それをコピーして利用する攻撃は、防げないとの理解であっているでしょうか。
もし、上記が正しいとすると、攻撃者が盗聴に成功している状態において、(A)、(B)の両方が盗聴されている場合には
リクエストへのタイムスタンプ付加は効果がなく、攻撃者に(A)だけを盗聴されている場合のみ、効果があるとの理解で
あっているでしょうか。
すみませんが、ご存じの方がいらしたら、教えてください。
よろしくお願いします。
リクエストにタイムスタンプを付加することで、上記(2)は、攻撃者が(A)の内容をコピーして再利用する攻撃は防げるものの
(B)を盗聴してトークンを入手し、それをコピーして利用する攻撃は、防げないとの理解であっているでしょうか。
うーん、解説のこの部分がその辺の悩みの元ですかね?
リプレイ攻撃とは、攻撃者が正規ユーザの認証データをコピーして、その認証データをそのまま使って不正アクセスを行う攻撃です。
「認証データをコピー」って言うから違和感があるんだと思うのですが、REST APIを使う場合って「応答=トークン」ではなく、その前の認証段階でトークンを取得し、そのトークンを「認証済みって証拠はこれです」ってつけてAPIにリクエスト送るんですよね。
上記ドキュメントを例にすると、リプレイ攻撃のイメージは
登録されているデバイスの数を取得
$ 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)を盗聴してトークンを入手し、それをコピーして利用する攻撃は、防げないとの理解であっているでしょうか。 ######################### たびたびすみませんが、ご存じであれば、教えて下さい。