Slide 1

Slide 1 text

開発者向けツールを魔改造して セキュリティ診断ツールを作っている話 ぴざきゃっと (@pizzacat83)

Slide 2

Slide 2 text

会社紹介 プロダクト開発組織向けセキュリティサービスを提供 アプリケーションの脆弱性を探し、 リスクを調査する 人による診断サービス・自動診断 SaaS 開発者 セキュリティ
 リスク 顧客の要望 社会課題 ミッション「エンジニアの背中を預かる」

Slide 3

Slide 3 text

開発者向けツールを魔改造して セキュリティ診断ツールを作っている話 ?

Slide 4

Slide 4 text

Flatt Security のセキュリティ診断 診断してください 2🕵️‍♂ ️ セキュリティ エンジニア アプリ ソースコード 🧑‍💻 プロダクト開発企業

Slide 5

Slide 5 text

Flatt Security のセキュリティ診断 " OR 1=1-- 1🕵️‍♂ ️ セキュリティ エンジニア アプリ ソースコード 🧑‍💻 プロダクト開発企業

Slide 6

Slide 6 text

Flatt Security のセキュリティ診断 B 脆弱性の概1 B 緊急度・具体的なリス9 B 修正方法 診断報告書 Q🕵️‍♂ ️ セキュリティ エンジニア アプリ ソースコード 🧑‍💻 プロダクト開発企業

Slide 7

Slide 7 text

Flatt Security のセキュリティ診断の特長 ソースコードも 読んで診断 共通ロジックを 効率的にチェック モダンな技術に対応 GraphQL gRPC-web クラウドネイティブ etc. 高い技術力 学びが多い 楽しい

Slide 8

Slide 8 text

開発者向けツールを魔改造して セキュリティ診断ツールを作っている話

Slide 9

Slide 9 text

怪しい箇所を見つけたとき 🕵️‍♂ ️ javascript:alert(1)//https://test ⁨⁩XSS?

Slide 10

Slide 10 text

怪しい箇所の深掘り 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 を応用したツール

Slide 11

Slide 11 text

特定 API を呼ぶ画面を探す GET /users GET /users/{id} はどの画面で、どう操作すると呼び出される? W🕵️‍♂ ️ ? app.example/items/1/reviews GET /users/{id} フロントエンド URL API 通信 クリック箇所 ブラウザが全部知ってるはず!

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

ブラウザから情報を抽出するには 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(); アプリの JS 追加実行

Slide 14

Slide 14 text

アプリケーションに干渉するツールの懸念 🤔 もしフロントエンドが addEventListener を書き換えていたら…? あるいは Array.prototype とかを書き換えてたら…? どんなアプリケーションに対しても 監視用 JS は正常に動いてほしい app.example/items/1/reviews addEventListener('click', record) 監視用 JS addEventListener = myFunc アプリの JS グローバル変数 prototype 書き換え 🔪

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

アプリケーションに干渉するツールの懸念 監視用 JS が アプリケーションを壊さないでほしい app.example/items/1/reviews addEventListener('click', record) 監視用 JS addEventListener = myFunc アプリの JS どんなアプリケーションに対しても 監視用 JS は正常に動いてほしい

Slide 17

Slide 17 text

百戦錬磨の大師匠 DevTools app.example/items/1/reviews addEventListener = myFunc アプリの JS ブラウザ DevTools 壊さない 壊されない 「DevTools で見てたら  アプリ壊れた」は稀 「DevTools が動かない  アプリ」は稀 DOM 書き換えたり スクリプト実行したりすると 流石に壊れることもあるが… 意図的に DevTools を妨害する ものは稀にあれど…

Slide 18

Slide 18 text

DevTools’ idea: JS の world を隔離 app.example/items/1/reviews main world グローバル変数 prototype DOM wrapper アプリの JS DevTools’ world グローバル変数 prototype DOM wrapper DevTools の JS 隔 離

Slide 19

Slide 19 text

world を活用した、壊さない・壊されない干渉 app.example/items/1/reviews main world グローバル変数 prototype DOM wrapper アプリの JS 監視用 world グローバル変数 prototype DOM wrapper 監視用 JS 隔 離 アプリを壊さず・壊されずに、画面遷移図に必要な情報を抽出!

Slide 20

Slide 20 text

なぜ診断ツール開発に力を入れるのか

Slide 21

Slide 21 text

Flatt Security のサービス 🕵️‍♂ ️ 精鋭エンジニアによる 手動診断サービス 開発組織自身が使える 自動診断 SaaS 「手動診断と自動診断の2本立て」?

Slide 22

Slide 22 text

Flatt Security のサービス クローラ スキャナ 診断履歴 コード解析 インフラ構成分析 手動・自動診断は独立した2サービスではない 診断を外注するユーザー企業にも、診断を内製化するユーザー企業にも ソフトウェア群を活用した最高の診断体験を届ける 🧑‍💻 ˜🕵️‍♂ ️ 診断を支えるソフトウェア群 Flatt エンジニア 活用 外注 内製診断で 使う 組み込み

Slide 23

Slide 23 text

人とソフトウェアが共進化する クローラ スキャナ 診断履歴 コード解析 インフラ構成分析 🧑‍💻 D🕵️‍♂ ️ 診断を支えるソフトウェア群 労力削減 高度診断の探求 ノウハウのコード化 波及

Slide 24

Slide 24 text

$ whoami pizzacat83 新卒1年目・勤続4年超 2022– ソフトウェアエンジニア (自動診断の開発) 自動で見つける技術 2020–2022 a🕵️‍♂ ️ セキュリティエンジニア (手動診断) 自分で見つける技術 開発とセキュリティの架け橋へ

Slide 25

Slide 25 text

おわりに 「色々なアプリケーションを調査するソフトウェア」として 開発者向けツールは百戦錬磨 開発者向けツールの実装を読み解き、 「欲しいツールを実現する技術」を吸収しよう!

Slide 26

Slide 26 text

We're hiring! ソースコードを読んで診断する 学びの多い仕事 調査を助けるツール開発を 促進する事業構造 ツールを作れる技術力 「よさそ〜」と思った人も 「や、自分の方がもっと賢いツール作れる」と思った人も ぜひ一緒に働きましょう! カジュアル面談 → https://recruit.flatt.tech 長期インターン 新卒採用 中途採用 26卒も若手中途もセキュリティエンジニア積極採用中!