Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

開発者向けツールを魔改造してセキュリティ診断ツールを作っている話 - 第1回 セキュリティ若手...

pizzacat83
December 05, 2024

開発者向けツールを魔改造してセキュリティ診断ツールを作っている話 - 第1回 セキュリティ若手の会 LT

第1回 セキュリティ若手の会」(2024/12/08) での登壇資料です。

pizzacat83

December 05, 2024
Tweet

More Decks by pizzacat83

Other Decks in Technology

Transcript

  1. Flatt Security のセキュリティ診断 B 脆弱性の概1 B 緊急度・具体的なリス9 B 修正方法 診断報告書

    Q🕵️‍♂ ️ セキュリティ エンジニア アプリ ソースコード 🧑‍💻 プロダクト開発企業
  2. 怪しい箇所の深掘り IsValidURL を呼ぶ API を探す func UpdateUserInfo(req) func IsValidUserInfo(info) func

    IsValidURL(url) PUT /users/{id} を応用したツール 出力先 API を探す PUT /users/{id} GET /users GET /users/{id} "url": " " javascript:…… 反映 出力先 API を呼ぶ 画面を探す app.example/users/search?… GET /users を応用したツール
  3. 特定 API を呼ぶ画面を探す GET /users GET /users/{id} はどの画面で、どう操作すると呼び出される? W🕵️‍♂ ️

    ? app.example/items/1/reviews GET /users/{id} フロントエンド URL API 通信 クリック箇所 ブラウザが全部知ってるはず!
  4. 特定 API を呼ぶ画面を探す app.example/items/1/reviews フロントエンド URL API 通信 クリック箇所 操作

    GET /users/{id} A C B click「詳細」 click 〇〇 画面遷移図 } 生成 いつも通りブラウザを 操作するとついでに 画面遷移図が完成 「この API はどの画面で、どう操作すると呼び出される?」  が検索できる
  5. ブラウザから情報を抽出するには app.example/items/1/reviews app.example/items/1/reviews フロントエンド URL API 通信 クリック箇所 … location.href

    … DevTools ネットワークタブを参考に … addEventListener('click') record(location.href) addEventListener('click', record) 監視用 JS ReactDOM.createRoot(app)
 .render(<App />); アプリの JS 追加実行
  6. アプリケーションに干渉するツールの懸念 🤔 もしフロントエンドが addEventListener を書き換えていたら…? あるいは Array.prototype とかを書き換えてたら…? どんなアプリケーションに対しても 監視用

    JS は正常に動いてほしい app.example/items/1/reviews addEventListener('click', record) 監視用 JS addEventListener = myFunc アプリの JS グローバル変数 prototype 書き換え 🔪
  7. アプリケーションに干渉するツールの懸念 🤔 監視用 JS の処理が、アプリケーション本来の動作を 阻害してしまわないか…? 監視用 JS が アプリケーションを壊さないでほしい

    app.example/items/1/reviews addEventListener('click', record) 監視用 JS addEventListener = myFunc アプリの JS グローバル変数 prototype うっかり変更 🔪
  8. アプリケーションに干渉するツールの懸念 監視用 JS が アプリケーションを壊さないでほしい app.example/items/1/reviews addEventListener('click', record) 監視用 JS

    addEventListener = myFunc アプリの JS どんなアプリケーションに対しても 監視用 JS は正常に動いてほしい
  9. 百戦錬磨の大師匠 DevTools app.example/items/1/reviews addEventListener = myFunc アプリの JS ブラウザ DevTools

    壊さない 壊されない 「DevTools で見てたら  アプリ壊れた」は稀 「DevTools が動かない  アプリ」は稀 DOM 書き換えたり スクリプト実行したりすると 流石に壊れることもあるが… 意図的に DevTools を妨害する ものは稀にあれど…
  10. DevTools’ idea: JS の world を隔離 app.example/items/1/reviews main world グローバル変数

    prototype DOM wrapper アプリの JS DevTools’ world グローバル変数 prototype DOM wrapper DevTools の JS 隔 離
  11. world を活用した、壊さない・壊されない干渉 app.example/items/1/reviews main world グローバル変数 prototype DOM wrapper アプリの

    JS 監視用 world グローバル変数 prototype DOM wrapper 監視用 JS 隔 離 アプリを壊さず・壊されずに、画面遷移図に必要な情報を抽出!
  12. Flatt Security のサービス クローラ スキャナ 診断履歴 コード解析 インフラ構成分析 手動・自動診断は独立した2サービスではない 診断を外注するユーザー企業にも、診断を内製化するユーザー企業にも

    ソフトウェア群を活用した最高の診断体験を届ける 🧑‍💻 ˜🕵️‍♂ ️ 診断を支えるソフトウェア群 Flatt エンジニア 活用 外注 内製診断で 使う 組み込み
  13. $ whoami pizzacat83 新卒1年目・勤続4年超 2022– ソフトウェアエンジニア (自動診断の開発) 自動で見つける技術 2020–2022 a🕵️‍♂

    ️ セキュリティエンジニア (手動診断) 自分で見つける技術 開発とセキュリティの架け橋へ