はじめに
ブロック暗号のCBC(Cipher Block Chaining)暗号化モードを利用した暗号文に対する攻撃として、CBC bit flipping attackとよばれる攻撃があります。下記のCTFを解く際に勉強したまとめ。
PicoCTF WebExploitation more cookies
I forgot Cookies can Be modified Client-side, so now I decided to encrypt them!
http://mercury.picoctf.net:56136/
参考にした記事
CBC Bit-Flipping Attack
Bitflip effect on encryption operation modes
暗号技術入門04 ブロック暗号のモード〜ブロック暗号をどのように繰り返すのか〜
Bit Flipping Attack on CBC Mode
CBC暗号化モードとは
ブロック暗号の暗号化方式の一つ。まずブロック暗号って何って人はこの記事を読むといいかも。
暗号化アルゴリズムは、以下の図のように平文と一つ前の文のXORを取ったものを鍵を用いて暗号化するという特徴がある。
一番最初のブロックには一つ前の暗号文が存在しないため、IVと呼ばれるブロック長同じ長さのランダムなビット列を生成する。
Bit-flipping攻撃
この攻撃は、暗号文のどこか1ビットを改ざんすることで、対応する箇所の平文の文字列を書き換える攻撃。
上図のように2番目のブロックのあるビットを改ざんすることで3番目のブロックの複合の際に、平文の対応する箇所のビットが書き換わるという影響を受ける。
攻撃者の前提条件としては以下
- 攻撃者は暗号文を改ざんすることができる
具体的な例を考える。
平文{"user": "johndoe", "nick": "john", "admin": 0}
を暗号化すると以下のように暗号文Ho2aajuAtfJJEJMmtHEOacvccrCRkkQH6WXZVlvvQTx0ptDJ
がえられたとする
この暗号文で以下のように赤い文字の箇所をk→j
に書き換える。すると複合した際の平文で"admin:0"
という元の平文から"admin:1"
というように書き換えられていることがわかる。攻撃者は暗号文さえ改ざんすることができれば、平文を得ること無く平文のあるビットを書き換えることができている。
どんな使い方が考えられるか
"admin:0"
という元の平文から"admin:1"
と変更できているように認証の際に管理者権限に昇格することができる。