Slide 1

Slide 1 text

サーバーフレームワークに 潜んでる脆弱性の検知 グリー シニアセキュリティエンジニア 徐(ソ) 承賢

Slide 2

Slide 2 text

• 国際CTF入賞経験 • 元LINEセキュリティ担当 • グリー2012入社 • 海外のセキュリティカンファレンスで登壇(たまに) • 最近ハマってること • solidity, geth, ganache, truffle • node.js, react, express セキュリティ部 / セキュリティ診断チーム 自己紹介 2

Slide 3

Slide 3 text

• メンバー • マネージャー含む3人 • やってること • プロダクト診断 • サーバーとクライアント • ホワイトボックス&ブラックボックス • 静的、動的解析 (ソースコードレビュー&バイナリー解析も含む) • セキュリティコンサル • 海賊版アプリの解析&対策 • 不正ユーザー検知 • セキュリティ用のサンプルコードやモジュール提供 • 社内インシデント対応 セキュリティ診断チームの紹介 3

Slide 4

Slide 4 text

• 技術早い進化 • 特に言語やサーバーフレームワーク • 2012年 only php, ethna • 2021年 fuelphp, symfony, sliex, laravel, cakephp, django, rails, flask, golang, typescrypt, nodejs… いっぱいある • グリーの自由な開発環境と雰囲気 • セキュリティ的にはかなり辛い • 毎回診断の時はチャレンジ状態 https://github.com/truefinder/tonbi TONBIの開発経緯 4

Slide 5

Slide 5 text

• サーバーフレームワークの脆弱性検知ツール • ソースコード内で脆弱性の恐れがあるところを指摘 • python & yara(セキュリティ業界のパターンマッチングライブラリー) • 技術の早い進化に対応 • 現在言語5個&フレームワーク7個&ビュー5個 • laravel, codeigniter, django, flask, gorilla, ethna, nodejs • go, php, javascript, python, typescript • smarty, twig, blade, flexy, electron • グリーのような自由な開発環境で活躍 • セキュリティレビューの工数を減らせる • 大型プロダクトで、実際約90%くらい手間が省けた • 勘違いして欲しくないこと • 脆弱性の可能性を指摘=指摘されたところが100%脆弱性ではない • 脆弱性判定まで人の目を通して、コードを追っかける必要はある TONBIとは 5

Slide 6

Slide 6 text

• CLI • オプション • -d ソースコードのディレクトリー • -f フレームワーク • -l 言語 • -v ビュー TONBIの使い方 #1 6 $python tonbi.py -d ./src -f laravel -l php -v blade

Slide 7

Slide 7 text

• configファイル設定 TONBIの使い方 #2 7 { "source_directory" : "../sample/codeigniter/src", "framework_name" : "codeigniter", "language" : "php", "view_name" : "twig", "head_count" : 5, "tail_count" : 5, "output" : "output.txt", "plugins" : [ ], "ignore_files" : [ "jpg", "png", "jpeg", "ico", "gif", "tif" , "tiff" ], "ignore_dirs" : ["node_modules"], "exclude" : ["ssl_misconfiguration"] } $python tonbi.py -c config.json

Slide 8

Slide 8 text

• 検知パータン • yaraルール • 正規表現が使える • and/or/anyなど組み合わせ • セキュリティチームで作成 TONBIの検知パータン 8 rule sql_injection : codeigniter { strings : $sql1 = /$this->db->(query|simple_query)¥(/ condition : any of them } rule directory : codeigniter { strings : $dir1 = "sanitize_filename(" $false = /.*:.*false/ nocase condition : $dir1 and $false } framework/codeigniter.yar中から抜粋

Slide 9

Slide 9 text

• 検知結果 TONBIの結果画面 #1 9

Slide 10

Slide 10 text

TONBIの結果画面 #2 10

Slide 11

Slide 11 text

• 言語解析で正確さを追求 • 各言語パーサーを使って正確性を高める • 検知したところを追っかける機能を追加する • GUIを提供 • Webで見れるようなGUIを提供する • 結果がCI/CDと連携 • Git方に飛べる 今後の課題 11

Slide 12

Slide 12 text

ご清聴ありがとうございました 12

Slide 13

Slide 13 text

13