データサイエンス&サイバーセキュリティ備忘録

Python, Data Science, Kaggle, Cyber Security, CTF, などなど

SECCON Beginners Live 2021 に参加しました

2021年10月17日、オンラインにてSECCON Beginners Live 2021に参加しました。

connpass.com

今回はCTF初心者向けのセッションとして、過去に出題された問題の解説を交えながらどのようにFlagを取得するのかという解説が盛りだくさんでした。

最近は常設CTFにも参加できていないので、セッションを聴いているうちに参加したくなりました笑
(ちなみに、この記事を書いている今はatma Cupというデータサイエンスコンペに参加しているので、CTFをやるのは来週以降になりそうです)

セッションごとに簡単なメモを取ったので、備忘録としてまとめます。

イントロダクション

イントロダクションでは、以下の5点についてお話がありました。
(CTFをご存知の方は、基本的な内容なので飛ばして問題ないです)

  • SECCON Beginners について
  • CTFとは何か
  • CTFで出題されるジャンル
  • CTFの勉強方法
  • CTFと法律・倫理

過去の記事で書いたかと思いますが、CTFとは、Capture The Flagの略称で、情報セキュリティ・サイバーセキュリティに関するスキルを競うコンテストです。

具体的には、Flagと呼ばれる文字列を、脆弱なアプリケーションに攻撃したり暗号の解読などをして取得し、点数を稼いでいくというものになっています。

CTFで出題されるジャンルは5つあり、問題の難易度によって1問あたりの点数が変わります。

  • Web:Webアプリケーションの脆弱性を突く問題
  • Crypto (Cryptography):暗号の解読を行う問題
  • Reversing:リバースエンジニアリングや、バイナリ解析を行う問題
  • Pwn(Pwnable):プログラムの脆弱性を突く問題
  • Misc (Miscellaneous):上記のジャンルに含まれない問題(NetworkやForensicsなどの問題)

CTFでは、どの問題でもコンピュータサイエンスの知識が必須です。

勉強法としては自分が興味があるジャンルに絞って、その分野の基礎知識を学ぶことが重要とのことです。

最後の法律・倫理については、許可なく実際のサーバやアプリケーションを攻撃すると罪に問われるのでやめましょう、というお話です。

Magicで学ぶWebセキュリティ

過去に出題された、WebのMagicと呼ばれる問題をもとに、複数の攻撃手法を組み合わせてFlagを取得する方法や、攻撃する際のマジックリンクの活用方法の紹介してくださいました。

ちなみにマジックリンクとは、共有されたURLにアクセスするだけでログインできるという、パスワード入力が不要な認証方法です。
opluswork.com

問題を解くコツは以下の通りで、今回の場合はアプリケーションの脆弱性とマジックリンクの特性を活かした攻撃をするとFlagが取得できるというものでした。

  • Webアプリケーションの仕組みを理解し、コードを読んで挙動確認する
  • Flagのある場所から、攻撃手法を決める
  • 攻撃できる場所(Webページ)や、Webアプリケーションの機能を把握して、具体的な攻撃シナリオを立てる
  • ブラウザのセキュリティ機構の設定を把握する

Flag🚩のきもち ビギナー向けFlag獲得への足掛かり

CTF初心者~中級者向けの発表で、どのようにFlagの場所から解法を見つけるのか、という流れを紹介していただきました。

まず、登壇者が思う、Flagを取得するために重要なことは以下の通りとのことです。

  • 脆弱性についての知識
  • 攻撃手法の閃き
  • 最後まであきらめない忍耐力
  • 緑と黒色の缶に入っている、某エナジードリンク(時間内に問題をぶっ通しで解くので、体力勝負なのは間違いない笑)
  • Flagの場所

CTFでは限られた時間内でどのくらい得点を得られるかが勝負です。

そのため、CTF中級者以上は、Flagの場所から脆弱性を絞って攻撃をしたり、Flagの場所から逆算して攻撃するということを行っています。

Flagの場所は問題のジャンルによって異なりますが、ジャンルを名前から大体の目星は簡単につきます。

例えば、Webフロントやソースコードを見て、クローラにFlagがあると仮定した場合、XSSなどクローラを対象とした脆弱性に絞ります。

他にも、ソースコードからデータベースを操作しそうな実装があるため、データベースにFlagがありそうだと仮定した場合、SQLiなどデータベースを対象とした脆弱性に絞ります。

Flagの場所から逆算する場合、例えばFlagの場所的にJavaScriptを実行すれば取得できるとします。

そのJavaScriptを実行させるにはどのような攻撃をすればよいのか、といったように考るということです。

問題をこなしていくと、Flagの場所から逆算しなくても解法が分かるようになります。

そのため、Flagの場所というのは重要な手掛かりになるということです。

SECCON Beginners CTF2021のCryptoを解いてみよう

このセッションでは、過去に出題された、以下の2つの問題の解説が行われました。

  • simple_RSA
  • Logical_SEESAW

1つ目のsimple_RSAでは、小さい公開鍵 e でRSA暗号の復号を行う攻撃手法(Low Public Exponent Attack)を使います。

en.wikipedia.org

運営が用意したプログラムから情報を得て、復号化を行うコードを書いて実行させるとFlagが取得できるという解法でした。

2つ目のLogical_SEESAWでは、与えられたソースコードから論理演算を導き、復号化するコードを書くというものです。

昨今のCryptoの問題では、コードが書けるのが前提で出題される傾向があるとのことで、まさに上記の2つの問題はコードを書かないとFlagを取得することができないようになっています。

誘導を読み取って1ステップ上の問題を解けるようになろう

CTFに取り組んでいると、どこにFlagがあるか分からないこともあります。

そのような場合、"誘導" (= 解答者をFlag取得に導く情報)を読み取ってFlagの場所を推定することができます。

では、その誘導をどこから読み取るのかということですが、主に3つの方法があります。

  • ジャンル・問題名・問題文から得る
  • 配布ファイルの表層から得る
  • 配布ファイルを解析して得る

ジャンル・問題名・問題文から得るというのはそのままの意味であり、例えばジャンルからどのような攻撃手法を用いるかを絞ることができます。

また、問題名・問題文には、具体的な解法のヒントが隠されています。

配布ファイルの表層から得るというのは、コマンドを実行してファイルのメタ情報や種類から情報を得るということです。

問題のジャンルによってはコマンドを実行するだけでなく、ツールに読み込ませる必要なときもあります。

最後の配布ファイルを解析して得るということに関しては、以下の2種類の解析方法を使い分けて情報を得るということです。

  • 静的解析(ファイルを実行せずに解析)
  • 動的解析(ファイルを実行して解析)

ファイルを実行させないと分からないのではと思う方もいるかもしれませんが、例えばコードが書かれているファイルの中にコメントアウトされている箇所があるとします。

その場合、意図的にコメントアウトされている可能性が高いので、不要なコードに見えても必要だから書かれているという場合が多いです。

誘導を読み取るのは、どのように攻撃するのかを決める1つのテクニックであり、ミスリードや勘違いをするときもあるので注意が必要とのことです。

Beginners Beginners ROP

このセッションでは、Beginners ROPという過去の問題をもとに、Pwnの解き方を解説してくださいました。

まず、ROPとはReturn Oriented Programmingの略で、攻撃者がバッファオーバーフローなどといったプログラムのバグを利用してコールスタックを操作するという攻撃手法です。

en.wikipedia.org

ROPを知らなくても、いかに新しい攻撃手法を競技中に理解して実践するということが重要です。