Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
VirtualMachine Image scanning PoC with Molysis
Search
Masahiro331
June 11, 2022
Technology
0
180
VirtualMachine Image scanning PoC with Molysis
Masahiro331
June 11, 2022
Tweet
Share
More Decks by Masahiro331
See All by Masahiro331
Model Context Protocol 勉強会
masahiro331
0
68
OSSに新機能を追加するまでの苦労話
masahiro331
0
200
Analyze Filesystem in Virtual Machine Image
masahiro331
0
190
SBOMを利用したソフトウェアサプライチェーンの保護
masahiro331
4
2.7k
Introduction Supply Chain Security
masahiro331
0
170
Container Security with Trivy
masahiro331
0
230
Other Decks in Technology
See All in Technology
AlmaLinux + KVM + Cockpit で始めるお手軽仮想化基盤 ~ 開発環境などでの利用を想定して ~
koedoyoshida
0
150
AgentCore BrowserとClaude Codeスキルを活用した 『初手AI』を実現する業務自動化AIエージェント基盤
ruzia
7
880
AI時代の新規LLMプロダクト開発: Findy Insightsを3ヶ月で立ち上げた舞台裏と振り返り
dakuon
0
390
アプリにAIを正しく組み込むための アーキテクチャ── 国産LLMの現実と実践
kohju
0
170
AIプラットフォームにおけるMLflowの利用について
lycorptech_jp
PRO
1
180
さくらのクラウド開発ふりかえり2025
kazeburo
2
190
AI時代のワークフロー設計〜Durable Functions / Step Functions / Strands Agents を添えて〜
yakumo
3
1.8k
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.1k
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
9.9k
Strands Agents × インタリーブ思考 で変わるAIエージェント設計 / Strands Agents x Interleaved Thinking AI Agents
takanorig
4
1.7k
コンテキスト情報を活用し個社最適化されたAI Agentを実現する4つのポイント
kworkdev
PRO
1
1.8k
Lookerで実現するセキュアな外部データ提供
zozotech
PRO
0
190
Featured
See All Featured
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1k
The untapped power of vector embeddings
frankvandijk
1
1.5k
Highjacked: Video Game Concept Design
rkendrick25
PRO
0
240
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
78
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
91k
GraphQLとの向き合い方2022年版
quramy
50
14k
Speed Design
sergeychernyshev
33
1.4k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
390
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
66
Building AI with AI
inesmontani
PRO
1
570
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
0
26
Transcript
仮想マシンの静的解析による脆弱性検知ツールの開発
自己紹介 基本情報 名前: 藤村 匡弘( masahiro331 ) 会社ではセキュリティエンジニアをしている 2
背景 • 昨今のインフラ環境は仮想マシン環境で構築 • 多くの事業者が、プライベートクラウドもしく はクラウドサービス上にアプリケーションをデ プロイしている • 管理している環境が本当に安全なのか不安 3
Infrastructure Hypervisor Guest OS Docker Engine Container Guest OS App A App B
安全ではない仮想マシン環境とは? • カーネルやOSのセキュリティ機構が働いていない • 外部に公開してはいけないプロセスが公開されている • 公開されているミドルウェア, アプリケーションライブラリが脆弱 • 公開されているミドルウェア,
アプリケーションの設定が安全ではない • 公開されているアプリケーションの実装に脆弱性が存在する • 悪意あるユーザによる改竄もしくはイメージの配布 4 Infrastructure Hypervisor Guest OS Docker Engine App A App B
安全ではない仮想マシン環境とは? • カーネルやOSのセキュリティ機構が働いていない • 外部に公開してはいけないプロセスが公開されている • 公開されているミドルウェア, アプリケーションライブラリが脆弱 • 公開されているミドルウェア,
アプリケーションの設定が安全ではない • 公開されているアプリケーションの実装に脆弱性が存在する • 悪意あるユーザによる改竄もしくはイメージの配布 5 Infrastructure Hypervisor Guest OS Docker Engine App A App B SecHack365のテーマとして、 まずはここから開発する
実現したい世界 6 ・システム運用者がデプロイ時に脆弱性検査 Packerなどを用いて仮想マシンイメージを構築し、Public CloudもしくはPrivate Cloudに デプロイする際に脆弱性を検知し、リリース時判定を実施
実現したい世界 7 ・プラットフォーマが利用 AWSやさくらインターネットなどの仮想マシンイメージを保管提供する事業者が、 仮想マシンイメージを解析するプラットフォームを提供
コンテナセキュリティについて 8 • コンテナイメージはデプロイ前に静的解析する流れになっている • 仮想マシンイメージはデプロイ前に静的解析ツールが存在しない
そもそも既存ツールで解決できないの? 9 ・競合ツールとしてVulsなどが存在するが、実行中のサーバに しか利用できない ssh install 仮にvulsで仮想イメージを100個検査するとなると 個別にサーバにデプロイして検査する必要がある
テーマ ・ 作るもの 仮想マシンイメージを静的に解析し脆弱性検知ができる ・ 想定利⽤者 インフラセキュリティチーム, アプリケーション開発者, クラウド基盤運⽤者 ・
要件 モジュール化 環境依存の排除 計算資源の効率化 10
方針 ・モジュール化 成果物のツールはあくまでも基礎技術開発の副産物であり、このプロジェクトでは利活⽤ 可能な各機能のモジュール開発を優先的に実施 (利活⽤例: 信頼できないイメージのフォレンジックなど) ・環境依存の排除 C⾔語などのプラットフォームに依存する実装を排除し、クロスプラットフォームで動作す るように実装 ・計算資源の効率化
仮想マシンイメージを展開すると数⼗GB ~ 数TBのバイナリデータになるため 全ての処理においてストリームで処理できるように実装 11
概念図 • VHDやVMDKといった仮想マシンイメージから各OSのパッケージ情報を取得 • パッケージ情報をもとに既知の脆弱性を検知 Vulnerability DB VMDK VHD 仮想マシンイメージ
Install Software ・Install Packages ・Libraries Matching Security Advisory ・OVAL ・NVD ・Vendor Advisory 12 レポート OS ・OS version ・Kernel Box
仮想マシンイメージのパース 13 VMDK FileSystem FileSystemが入った独自フォーマット 任意のファイルシステム • 全てをメモリ上に展開できないためStreamでパースできるよう実装 • 各ユーザのクライアントで動作するよう外部依存をなくすため、
全てGolangで実装 パッケージDB RPMDBなどのパッケージ情報を含むDB
デモ 14
15
16
方針の再確認 ・モジュール化 成果物のツールはあくまでも基礎技術開発の副産物であり、このプロジェクトでは再利⽤ 可能な各機能のモジュール開発を優先的に実施 ・環境依存の排除 C⾔語などのプラットフォームに依存する実装を排除し、クロスプラットフォームで動作す るように実装 ・計算資源の効率化 仮想マシンイメージを展開すると数⼗GB ~
数TBのバイナリデータになるため 全ての処理においてストリームで処理できるように実装 17
• プラグインアーキテクチャで実装している • 機能を追加する場合はInterfaceに合わせて実装するだけでよい モジュール化について 18 molycis go-rpm-version trivy-db go-ext4-
filesystem Vulnerability DB Version compare go-vmdk-parser filesystem Virtual image Extractor ImageExtractor FileSystemExtractor Interface Module Detector RPMAnalyzer AlpineAnalyzer Package OS Analyzer OSAnalyzer PkgAnalyzer ・・・・ ・・・・ ・・・・ ・・・・
環境依存の排除 • Windows環境で動作することを確認 • Mac環境で動作することを確認 • Linux環境で動作することを確認
計算資源の効率化 20 Box, VMDK, VHD 圧縮データ 圧縮データ 圧縮データ ・・・ ・・・
100MB ~ 1GB Partition 1 ・・・ EXT4, XFS 10G ~ 数TB 任意のファイル ・・・ 1k ~ 1G • これらの処理を任意のバッファサイズで読み込み処理できるように実装 Install Software ・Install Packages ・Libraries OS ・OS version ・Kernel
ここから技術的な話 21
VMDKのパース 22 圧縮アルゴリズムやVMDK内のデータサイズが記載 (512バイト) マーカーとオブジェクトの集合 • VMDKは、VMwareWorkstationやVirtualBoxなどの仮想マシンで使用されるファイル形式
VMDKのパース 23 ・必要なのはCompressed Grain Dataのみ 8 byte 4 byte 500
byte Compressed Grain Data Sector Index Data Size Compressed Data (Deflate) decompress Filesystem Decompressed Data Master Boot Record or GUID Partitions Table Partision 0 (boot partition) Partision 1 (file system)
Partitionのパース 24 • Filesystemをパースする前にPartitionを解析 Decompressed Data Master Boot Record or
GUID Partitions Table Partition 0 (boot partition) Partition 1 (Filesystem) Boot partitionは無視し、 実データが格納されているpartition1を解析
Filesystemのパース 25 • FilesystemのSuperBlockを解析しFilesystemを識別 • 現状ではext4 Filesystemを対応 Partition 1 (Filesystem)
Super block Data(Ext4, XFS or etc… )
EXT4のパース 26 • Streamで処理するためファイルのSeekなどが利用できない • メモリ上に必要なInodeを保持するように実装 Super Block Group Descriptor
Block Reserved Group Descriptor Table Block Data Block Bitmap Block Inode Bitmap Block Inode Table Block Data Blocks • Headerのようなもの • 各ブロックの位置情報が入っている • 拡張用の空き領域(利用しない) • Data Blockの使用状況を管理(利用しない) • Inode Tableの利用状況(利用しない) • Inode情報が入っている • 実際のデータが入っている
EXT4のパース 27 • Streamで処理するためファイルのSeekなどが利用できない • メモリ上に必要なInodeを保持するように実装 Super Block Group Descriptor
Block Reserved Group Descriptor Table Block Data Block Bitmap Block Inode Bitmap Block Inode Table Block Data Blocks SuperBlockとGroupDescriptorは順番が保証されている これらのデータは順番が保証されていない
Filesystemの解析における制約について 28 • Inode情報が格納されているInodeTableが実データより後に来る場合はパース できない • 複数のパーティションに分割されてファイルデータが存在する場合はパースでき ない
OSの識別とパッケージの取得 29 • FilesystemからOSを識別し、パッケージ情報を取得 /etc/os-releaseからOSのバージョンを特定
OSの識別とパッケージの取得 30 • RedHat系列の場合はrpmをパッケージ管理として利用している • /var/lib/rpm/Packagesを解析することによってパッケージの取得が可能 https://knqyf263.hatenablog.com/entry/2020/10/28/124040 https://masahiro331.hatenablog.com/entry/2020/12/20/052234
脆弱性の検知 31 • パッケージ名とバージョンをもとに脆弱性の検知 • バージョンの比較にはOS毎に仕様が異なるため個別に実装 https://github.com/knqyf263/go-rpm-version • データベースとして AquaSecurity社が開発しているものを利用
https://github.com/aquasecurity/vuln-list-update https://github.com/aquasecurity/vuln-list https://github.com/aquasecurity/trivy-db (藤村も開発に参加している) • 脆弱性の検知率はAquaSecurityのTrivyと同等
今後の課題 • 複数のOSに対応する必要がある 現状ではRedHat系列とAlpine Linuxのみ • 複数のファイルシステムに対応する必要がある LVMやXFSなど • より多くのイメージを収集しエッジケースの洗い出し
32
仮想マシンも実行前の脆弱性検査を当たり前に 33 https://github.com/molysis/molysis