Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PCI DSSの観点から見た セキュアなJavaアプリケーション開発
Search
nannany
June 17, 2024
Technology
810
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PCI DSSの観点から見た セキュアなJavaアプリケーション開発
ssia
nannany
June 17, 2024
Other Decks in Technology
See All in Technology
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
4
660
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
160
LLMに渡さなかった仕事
nanaism
0
790
SREへの勘違いに気づいた後の話
tomodakengo
0
110
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2.1k
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
5
640
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
0
150
AI時代、データエンジニアが一番おもろい
genshun9
0
670
開発投資の期待値を上げるプロダクトロードマップづくり ~プロダクトエンジニアが越境して事業を伸ばす~
kekekenta
1
210
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
150
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
520
Featured
See All Featured
Designing for Performance
lara
611
70k
Raft: Consensus for Rubyists
vanstee
142
7.7k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
940
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
480
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
420
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Faster Mobile Websites
deanohume
310
32k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
340
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
400
Transcript
PCI DSSの観点から見た セキュアなJavaアプリケーション開発 JJUG CCC 2024 Spring 2024-06-16 南慶彦
自己紹介 • 名前: 南 慶彦 ◦ x: @ym1990 ◦ GitHub:
nannany • 経歴 ◦ TIS株式会社(2015~2021) ◦ STORES株式会社(2021~現在) ▪ PCI DSS監査を3回経験 • Java, Springの組み合わせでWebアプリケーション作 成することが多い 2
話すこと • そもそもPCI DSSとは何か? • PCI DSSにはセキュアなアプリケーション開発に関するアドバイスが散りばめられ ている。それらを実体験を交えて紹介する ◦ 適切なコードレビュー
◦ シフトレフト ◦ ライブラリの脆弱性管理 • クレジットカード系システムに限定されないプロセスであるので、この紹介がセキュ アなアプリケーション開発の一助となれば幸い 3
PCI DSSとは? • クレジットカード業界のデータセキュリティ標準 (Payment Card Industry Data Security Standards)
• 運営主体はPCI SSC(Payment Card Industory Security Standards Council)。 PCI SSCはクレジットカードの5大ブランド(Visa、Mastercard、JCB、American Express、Diners Club International)によって2006年に設立 • クレジットカードを取り扱う会社は PCI DSSに準拠する必要がある ◦ 割賦販売法のクレジットカードを取り扱う事業者が行う必要な措置 にあたる ◦ 5大ブランドもPCI DSSへの準拠を要請している 4
PCI DSSに準拠するには? • QSA(Qualified Security Assessor)による訪問審査を受ける ◦ QSA=PCI SSCに認定された評価者 ◦
12要件、約400項目を遵守していることを証明する ◦ 訪問審査は丸々5日かけて行われる 5
PCI DSS要件のイメージ(1.2.1を例に) • 要件1.2.1: NSC(ネットワークセキュリティコントロール )ルールセットの構成基準が ◦ 定義されている ◦ 実装されている
◦ 維持されている • テスト手順1.2.1.a: NSC ルールセットの構成基準を調べ、その基準がこの要件で指定された すべての要素に準拠していることを確認する。 • テスト手順1.2.1.b: NSC ルールセットの構成設定を調べ、ルールセットが構成基準に従って実 装されていることを確認する。 6 • 要件を満たす構成基準、構成基準に即した実装、それらが運用されていることを監 査される
他のセキュリティ規格との違い • セキュリティに関する規格として、他にもISO/IEC27001(いわゆるISMS)などがあ る。PCI DSSは要件の具体性 に特徴がある ◦ 防ぐべき脆弱性を明示するためにSQLやLDAPといった技術用語が平然と出 てくる ◦
パスワードに関する指定について、文字数/文字種の決まりがある • 具体的であるがため、即実行しやすいアドバイスが多い 7 SQL、LDAP、XPath、またはその他のコマンド、パラメータ、オブジェクト、障害、インジェクションタイ プの欠陥を含む、インジェクション攻撃 (要件6.2.4より抜粋) (パスワードは)12 文字以上(またはシステムが 12 文字に対応していない場合は、8 文字以上)であ ること。数字とアルファベットの両方が含まれていること。 (要件8.3.6より抜粋)
アプリケーション実装に関わる要件 • PCI DSSでは、様々なレイヤーでの対策を組み合わせている • アプリケーション開発に密接に関わるのは、6章 安全なシステムおよびソフトウェア の開発と維持 • 今回は6.2,
6.3の要件に着目する ◦ 6.2 オーダーメイド、カスタムソフトは安全に開発されます ▪ 適切なコードレビュー ▪ シフトレフト ◦ 6.3 セキュリティ上の脆弱性を特定し、対処している ▪ ライブラリの脆弱性管理 8
1. 適切なコードレビュー • 要件6.2.3では、手動コードレビューの実施を求める • その目的は、セキュリティに影響を与えるコードが本番にリリースされるのを防ぐこ と 9 コード変更はコードレビュー技術やセキュアコーディングの実践に精通した、元のコード作成者以外 の個人によってレビューされる。(要件6.2.3.1より抜粋)
1. 適切なコードレビュー(グッドプラクティス) • 一度に少量のコードしかレビューしない というアドバイスは重要で、目安として500 行を超えるレビューは有効なものになりにくい 10 コードレビューは疲れる作業です。このため、レビュアーが一度に少量のコードしかレビューしない場 合に最も効果的です。(6.2.3.1 グッドプラクティスより抜粋)
1. 適切なコードレビュー(レビュー項目) • Spring等のFWを利用してアプリケーションを作っていると、大概の脆弱性はFWで 対応してくれるので、それらを正しく使うことが重要 11 ソフトウェアが外部コンポーネントの機能 (ライブラリ、フレームワーク、API など)を安全に使用してい ることを確認する。(要件6.2.3より一部抜粋)
• よく問題になるのは、ログに機密データが載ること、業務特有のこと(ex: staffは一 部だけ見れて、ownerは全て見れる) 機密データがログに残らないよう、ログが正しく使用されているかを確認する。 論理的な脆弱性を検出するために、アプリケーションの動作をチェックすること。 (要件6.2.3より一部抜粋)
2. シフトレフト 12 脆弱なコードにつながる一般的なエラーをソフトウェア開発プロセスのできるだけ早い段階で検出ま たは防止することで、そのようなエラーが本番環境に出て危険にさらされる確率を低くすることができ ます。(中略)この哲学は、「シフトレフト」と呼ばれることもあります。(6.2.4の目的より抜粋) セキュリティ・バイ・デザイン導入指南書
2. シフトレフト(CI/CD) 13 手法としては、開発サイクルの初期にコードをチェックインする際にコードをスキャンし、脆弱性が存 在しないことを確認する自動化されたプロセスやプラクティスがあります。 (要件6.2.4の事例紹介より 抜粋) セキュリティ・バイ・デザイン導入指南書 • 一度仕組みを作れば安心を得られる
◦ セキュリティツールの実施漏れを防げる ◦ セキュリティ知識が薄いメンバーでも同様にツール実施できる • どのチェックを有効にするかの判別が難しい。。 ◦ 仕様を満たすためには破らざるを得ないチェックの判別などはセキュリティ知 識が必要
3. ライブラリの脆弱性管理 • 要件6.3.3では、利用しているライブラリなどから脆弱性が見つかった場合に、速や かに対応することを問われる 14 すべてのシステムコンポーネントは、以下のように適用可能なセキュリティパッチ /アップデートをイン ストールすることで、既知の脆弱性から保護されている (要件6.3.3より一部抜粋)
3. ライブラリの脆弱性管理(Apache Log4jの事例) • 2021年12月末にApache Log4jの脆弱性 CVE-2021-44228 が話題に ◦ 深刻度のレベルは最も高い
Critical • Spring Bootの依存関係の中にもLog4jは含まれていたので、Springの公式ブログ でも対応ガイダンスが発表された • このように、ライブラリ側に脆弱性が見つかった場合には、そのバージョンを上げる 必要がある 15
3. ライブラリの脆弱性管理(状況把握) • 自分の作っているソフトウェアが、そもそも何に依存しているかを把握する必要があ る • Amazon Inspector などで容易に管理することができる 16
サードパーティソフトウェアコンポーネントのインベントリを維持し、脆弱性およびパッチ管理を容易に する。(要件6.3.2より抜粋)
3. ライブラリの脆弱性管理(現場のつらみ1) • ex1) SpringBootでバージョン管理をしているライブラリのうちのどれかに脆弱性が でた場合、SpringBoot自体の更新をしたいが、諸々のバージョンが上がってしまう ので怖い。。 • 自動テストを充実して、ライブラリアップデートをカジュアルにできるようにすること が、セキュリティにも貢献する
17
3. ライブラリの脆弱性管理(現場のつらみ2) • ex2) メンテナンスが放棄されたOSSが利用しているライブラリに脆弱性が発覚した 場合、forkする、別のOSSライブラリを使うなど考える必要がある • OSS選定の際には、メンテナンスの状況を確認した方が良い 18
まとめ • PCI DSSの要件から、アプリケーション開発プロセスに関わるアドバイスを抽出す ると、下記のよう ◦ 適切なコードレビュー ▪ 一度に行うレビューの量は少量を保つこと ▪
FWを適切に使うこと、秘匿情報がログetcに出てないことなどに気をつけ る ◦ シフトレフト ▪ 開発プロセスにセキュリティテストの自動化を組み込む ◦ ライブラリの脆弱性管理 ▪ どのライブラリに依存しているか即分かる状況を整えること ▪ カジュアルにライブラリアップデートできる状況を整えること 19