Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ライブラリとの上手な付き合い方

 ライブラリとの上手な付き合い方

Cyber-sec+ Meetup vol.2

ライフサイクル管理を通じ、セキュアなシステムを育てる

https://cyber-sec-plus.connpass.com/event/301326/

Ryosuke Sekido

December 05, 2023
Tweet

More Decks by Ryosuke Sekido

Other Decks in Technology

Transcript

  1. ライブラリとの上手な付き合い方
    ライフサイクル管理を通じ、セキュアなシステムを育てる
    Cyber-sec+ Meetup vol.2
    NRIセキュアテクノロジーズ株式会社
    関戸 亮介
    2023年12月5日

    View full-size slide

  2. 1
    発表者について
    関戸 亮介
    NRIセキュアテクノロジーズ株式会社
    DXセキュリティコンサルティング事業本部
    DXセキュリティ事業三部
    開発チームのセキュリティを支援
    組織やシステム特性に応じたセキュリティ設計や開発プロセスの策定支援
    自動化ツールの評価やCI/CDパイプラインへの組み込み支援

    View full-size slide

  3. 2
    今日のトピック
    トピック
    ライブラリの広い利用場面
    ライブラリ管理の大切さ
    「回帰テスト」の大切さ
    想定ユーザ
    システム開発を伴うサービスオーナーや組織
    システム開発の担当者やリーダー

    View full-size slide

  4. ライブラリとの上手な付き合い方

    View full-size slide

  5. 4
    ライブラリを使ったシステム開発は多い
    「ライブラリ」を利用することで効率的なシステム開発につながる
    自ら開発する「ソフトウェア」と組み合わせて利用するソフトウェア
    「便利な機能」(全体機能の一部)を提供する
    「ソースコードが開示されたソフトウェア」は
    ライブラリの開発手段として多くみられる
    ライブラリ利用者はライブラリの実態(ソースコード)を検証できる
    ライブラリ開発者は多くの利用場面からフィードバックを得て品質が向上する
    ライブラリ利用者はライブラリ開発者の指定したライセンスに沿って利用する

    View full-size slide

  6. 5
    ライブラリの「脆弱性」は影響範囲が広い
    ライブラリに「脆弱性」が発見されることがある
    単純な「バグ」~影響度の大きい「脆弱性」
    脆弱性の利用が簡単なケース~複雑なケース
    攻撃者は同一手法で多くのシステムに
    影響を与えることができる(ことがある)
    利用しているライブラリを管理する
    ライブラリの利用開始
    利用しているライブラリの棚卸し
    ライブラリの更新
    ライブラリの利用終了
    ライブラリ
    システム
    A
    システム
    B
    システム
    C
    攻撃者
    利用している
    ライブラリの
    脆弱性をついて
    攻撃する

    View full-size slide

  7. 6
    利用したいライブラリも、他ライブラリを利用している
    「とても便利なライブラリ」は
    他のライブラリを活用していることが多い
    直接利用するライブラリが1つであっても、
    間接的に利用するライブラリが数十に上ることがある
    背景画像: https://deps.dev/maven/org.springframework.boot%3Aspring-boot-starter-web/3.2.0/dependencies/graph

    View full-size slide

  8. 7
    Software Composition Analysis(ソフトウェア構成解析)
    ソフトウェアが利用しているライブラリなどを解析する
    脆弱性情報DBを照会し、コンポーネントの脆弱性を把握する
    脆弱性の解消されたバージョンへ更新する
    たとえば次のようなソリューションを利用する
    GitHub Dependabot

    View full-size slide

  9. 8
    システム維持のため回帰テストが重要
    変更の影響有無を見分けるために「回帰テスト」が重要となる
    主に「単体テスト」や「機能テスト」により構成する
    システムの入出力に変化がないことを確認する
    テスト対象となるソフトウェアの追加・修正時も必要だが、
    ライブラリのパッチバージョン更新であっても重要になる
    (ライブラリの意図しない挙動変化に気づける)
    回帰テストを作るために「システム入出力」を明確にする必要がある
    あいまいな仕様(要件)ではなく、具体的な仕様を決める
    システムの開発や更新時は回帰テストも保守して維持する
    CIパイプラインでテストし、不具合に気付く仕組みを作る

    View full-size slide

  10. 10
    まとめ
    ライブラリを活用して、効率的な開発・運用につなげる
    「ソースコードが開示されたソフトウェア」は実態を確認できる
    汎用的なシステムはライブラリが多く、効率的なシステム開発につながる
    大きな脆弱性が発見されると、外部から攻撃されるリスクがある
    利用ライブラリの把握、定期的な情報収集とパッチ当てを行う
    システム開発に回帰テスト(機能テスト)を活用する
    CIパイプラインを組み、テストし、不具合に気付く仕組みを作る
    仕様(インターフェース)を明確にして、回帰テストを維持管理する
    一気に作らずとも、できるところから積み重ねる

    View full-size slide