Skip to content

Instantly share code, notes, and snippets.

@kurenaif
Last active August 10, 2021 23:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kurenaif/30cd917737d7f45e165146c82861ff91 to your computer and use it in GitHub Desktop.
Save kurenaif/30cd917737d7f45e165146c82861ff91 to your computer and use it in GitHub Desktop.
POODLE Attackの講義資料

POODLE Attackの講義の流れ

Q1

POODLE Attackに関して調査し、信頼できる情報から攻撃条件などをまとめてください。

Q2

https://github.com/kurenaif/seccamp_pre_challenge/blob/main/poodle/server.py を攻略してください

Q3

opensslを使ってサーバーを立てて、クライアントから接続してみてください。 opensslのバージョンは openssl-1.0.2k を利用してください

opensslを使ったサーバーの起動方法

openssl s_server -accept 4443 -cert server.crt -key server.key

opensslを使ったクライアントの利用方法

openssl s_client -ssl3 -crlf -connect url:port
ここでなにか入力をするとサーバー側に表示されるはず、、、
AES-CBCで暗号化されているので、文字を増やすと16bytesずつ増えていきます。
その様子を確認してみましょう!

Q4

s_clientから出るリクエストをwiresharkで観察しパケットの構造を観察してみましょう img1

Q5

OpenSSLのソースコード中のmacを検証している箇所、Paddingを検証している箇所を特定し、それぞれどのような処理になっているか概要を調べてください。また、良ければtls1.0の実装がどうなっているかを調べtls1.0に上げることで対策になるかどうかを調べてみてください。

Q6(Q7のほうが簡単だと感じた場合はこちらはスキップしてもらって大丈夫です)

s_client のソースコードを改造し、リクエストの直前にブロックを書き換えてPOODLE Attackが成功することを確認してください。

Q7

s_client, s_server の間に中間者を立て、POOODLE Attackを実行してください。(一定確率で1バイト以上平文を抜き取ることができたら攻撃成功とします。)

Q8

以上を整理し、現状わかっている攻撃条件、攻撃手法、影響を整理してください。 また、現実的なケースで攻撃をするとしたらどのようなシナリオがあるかを考えてください。(そのようなケースは思いつかないなどもOKです)

Q9

OpenSSLのsslv3を利用したPOODLE Attackに関する問題を1問作問してください。

Q10

Q9を使って、他の受講生にPOODLE Attackを説明してみてください。また、フィードバックを得てください。

Q11(Extra課題)

Q10までがキャンプで行う大まかな流れです。早く終わった場合は、

  1. TLSの新しい脆弱性を調査してみる(CVE-2014-8730をやってみる, BEAST Attack、鍵を一部漏洩させるバックドアを仕込んでHidden Number ProblemでDH鍵交換から鍵を盗み出してみる、)
  2. SSL/TLSとは関係ない別の脆弱性を検証してみる
  3. 解説動画を作ってみる

の選択肢を考えています。ここから先の動きは決めていないので、その時の気分でやっていきましょう!

Q8までの内容を他の受講生と共有し、フィードバックを得てください。

乱数予測の流れ

本講義ではphpとJavaとPythonの乱数の値を予測してもらいます。

Q1

phpの mt_rand , Pythonの random.randomint() , Javaの Random() について、どのようなアルゴリズムで生成されているかを調べてください。 (phpとPythonは似ていますが、出力されるものがほんの少し違います。その結果、乱数の予測方法も少し異なってきます。その点に関しても調べてみてください。)

Q2

phpとPython、Javaのような乱数を利用していた場合、どのような既存の攻撃手法が有効かを調べてみてください。

Q3

https://github.com/kurenaif/kurenaif_valentine_problems/tree/main/three_values_twister これを攻略してみてください。

Q4

JavaのRandomで十分な大きさの値が与えられたとき、次以降の値も予測できることを試してみてください。

Q4

Pythonのrandomの実装に関して、 624 個の値があれば、 state を復元することができます。 Stateを復元し、乱数の次の値を求めてみてください。 また、その手法についてまとめてください。

Q5

phpとPythonは似たような実装になっています。しかし、php側は出力されるものがPythonと微妙に異なるため、 Pythonのように 624 個の値で完全にstateを復元できない可能性が高いです。その理由について述べてください。その打開策があれば、考えてみてください。(ない場合はないで問題ありません。)

Q6

以上の調査結果から、php, Python, Javaのそれぞれの実装において、どのような条件であれば乱数を予測できるのかをまとめてください。

Q7

今回学んだことを活かして、乱数予測に関する問題を1問作問してみてください。

Q8

Q7を使って、他の受講生に乱数の予測方法を説明してみてください。また、フィードバックを得てください。

Q9(Extra課題)

Q8までが大まかなキャンプの課題です。これらが終わった場合は、より難しい課題として

  • 線形合同法の一部しか与えられていない場合の攻撃手法として、こちらの論文に書いてある攻撃手法を実装したり
  • 今回の講義で取り上げなかったブルートフォース攻撃のソースコードを読んでみたり改造してみたり(https://www.openwall.com/php_mt_seed/)
  • golangのrandomの実装を攻略してみたり
  • 解説動画を作ってみる

を考えています。ここから先はその時の気分で何を学ぶか考えて一緒に勉強していきましょう!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment