第2回詳解セキュリティコンテスト輪読会の記録

今回はdevtoolsとパケットとcookieの話題が中心でした。

5章

web問でのCTFの形式

revみたいにフラグがブラウザの中にあってそれを取り出すのが難しい場合がある。また、問題の形式としてはサーバとクライアントという見方をすると、通信を行うrev問(game cheat問)と近い部分もある

webサービスで注意すること

新機能、よく突然のメンテナンスモードに入るサイト、フレームワークを使っていないサイトなどは十分なテストがされていないのでバグや脆弱性を含みやすいので注意。 バグバウンティでも新機能に賞金級のバグが見つかっているのを見かけるし、たとえばTwitterのfleetはリリース当時色々バグがあって話題になった。(CDNにフリートの内容が残るとか、RyotaKさんのTwitterのフリート機能に対する権限昇格とか)

6章前半

HTTP周り

cookieの話: HttpOnly

HttpOnlyならOK!というイメージがあったが、そうでもない。徳丸さんのYoutubeが分かりやすい。 参考 - クロスサイトスクリプティング(XSS)対策としてCookieのHttpOnly属性でどこまで安全になるのか Secure属性もつけていても脆弱になるケースがあるらしい。

Cookie関連 参考 - IPA: 経路のセキュリティと同時にセキュアなセッション管理を 参考 - CookieのDomain属性は 指定しない が一番安全

cookieと広告の話

FLOCはTopics APIに代わって、これから広告屋さんにとってはつらい時代が来そう。 ポイントサイトとかを見ると、ブラウザを閉じないでください、など事情が分かっていると面白い文言がある。(サードパーティcookieを消さないように色々注意をしている)

CDNとキャッシュ

CDNとキャッシュ周りの設定は難しい 参考 - CDN切り替え作業における、Web版メルカリの個人情報流出の原因につきまして

URL

http://username:password@localhost のようにしてローカルホストのBasic認証付きアプリケーションにアクセスできる。 これは http://example.com@evil.example のようにすることで、見た目はexample.comだけどevil.exampleに飛ばせるような見間違いを誘発するURLが作れそうで気をつけないととなった 参考 - RFC 3986 の Semantic Attacks

QUICやパケットキャプチャ

QUICが気になって調べたが難しい。以下良さそうな資料

  • voluntasさんのQUICに関する勉強ルートについて

QUIC 勉強したい人はまず TLS 1.3 から入らないと QUIC の RFC が何言ってるかわからないと思う。順番としては TLS 1.2 (RFC 5246) -> TLS 1.3 (RFC 8446) -> QUIC TLS (RFC 9001) -> QUIC (RFC 9000) になると思う。 https://twitter.com/voluntas/status/1404656930849652738

後はRFCやwiresharkで実際にパケットを見ながら調べると良さそう。 TLS1.3を理解するにはTLS1.2を理解してから取り組むとよい。

パケット関連: Racoon Attack

TLS1.2とそれ以前で発生する脆弱性 Racoon Attack はタイミング攻撃っぽい?ので実際に実現させるのは結構難しいのでは。

パケット関連: scapy

ScapyというPythonライブラリがある。wiresharkなどで当たりをつけてからscapyでfilterや抽出、パケット生成などの取り扱いを自動化すると便利そう。

サイバーセキュリティプログラミング でscapyを使うのでパケットを扱うプログラミングに慣れることができておすすめ

scapyを使ったwriteup 参考 - writeup: [Forensics]illegal image[Hard]

HTMLやXMLなど

ここは特になし。CSS InjectionやXXEは後半で詳しく触れられている。

Webクライアント(devtools, python, js)

devtoolsでお気に入りの機能はなんですか?

  • networkタブ: サーバとクライアントの通信が見れるのでついつい眺めてしまう。filterできたり、curlやfetchの形式で右クリックでcopyできるのも良い。
  • animationタブ: CSS Animationの一時停止や最後の状態を見るとか逆再生がシークバー動かすことでできる
  • JS breakpointは使ったことないけど難読化JSで使えそう

wasmのチート問

CTFの問題的に、難読化JSからwasm問にトレンドが移っている?Wasmで使えそうなCheat Engine的なブラウザ拡張

そのWebAssemblyのチート問ですが、問題中で紹介されていたCetus(https://github.com/Qwokka/Cetus)というWebAssembly向けのCheat Engine的なブラウザ拡張を使って解きました https://twitter.com/st98_/status/1265749997624033280

Twitterのcookie

Twitterのcookieを眺めると、他の人に知られてはいけなさそうなものの他に、単なるクライアントの情報として知られても良さそうなもの(lang: ja など)もある cookieは全てが機密情報というわけではない。 ただ、auth-token, auth-multi, kdt(おそらくログイン状態のトラッキング?)についてはHttpOnly属性とSecure属性がついていたので他の人に知られてはいけない感じがする。

JSのPromise

非同期処理が初めてだったのでPromise周りを調べた。 fetch APIはPromiseオブジェクトを返却し、非同期処理は定期的にイベントが完了したか問い合わせることで実現されている。(非同期処理には色々な実現方法があり、そのうちの一つをJavaScriptは採用している)