#Basic is secure?
問題
Basic is secure?:Basic認証はセキュアですか?
Basic認証についての問題。
http通信における認証方式の1つで、以下の手順で通信が行われる。
1.クライアントは認証が必要なページをリクエストする。しかし、通常ここではユーザ名とパスワードを送っていない。なぜならばクライアントはそのページが認証を必要とするか否かを知らないためである。
2.サーバは401レスポンスコードを返し、認証領域 (authentication realm) や認証方式 (Basic認証) に関する情報をクライアントに知らせる。
3.それを受けたクライアントは、認証領域(通常は、アクセスしているコンピュータやシステムの簡単な説明)をユーザに提示して、ユーザ名とパスワードの入力を求める。ユーザはここでキャンセルすることもできる。
4.ユーザによりユーザ名とパスワードが入力されると、クライアントはリクエストに認証ヘッダを追加して再度送信する。
5.認証に成功すると、サーバは認証の必要なページのリクエストを処理する。一方、ユーザ名やパスワードが間違っていた時には、サーバは再び401レスポンスコードを返す。それによりクライアントは再びユーザにユーザ名とパスワードの入力を求める。
「ユーザー名:パスワード」という形式の文字列をbase64でエンコードしたものを認証キーとして用いる。このため、盗聴や改竄か簡単にできる。
問題にはq8.pcapというファイルがあった。ダウンロードしてWireSharkで開いてみる。
http通信でフィルタをかける。
まずNo.7でサーバーにページをリクエストしている。次にNo.9で、サーバーがクライアントに401レスポンスを返して、Basic認証のための情報を要求する。ちなみに、下の画像からBasic認証であることがわかる。
次のNo.13では、クライアントがサーバーに対して、「ユーザー名:パスワード」という形式の文字列をbase64でエンコードしたものを送信している。(下図のAuthorization: Basic cTg6RkxBR181dXg3eksyTktTSDhmU0dBの部分。)これをbase64でデコードすればFLAGが取得できそう。ここでやってみる。
また、WireSharkでは下図のCredentials(認証情報)よりFLAGは自明だった。
#まとめ
Basic認証について学べた。
パケットチャプチャすることで簡単に認証情報をみることができた。
Basic is NOT secure.