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
VirtualMachine Image scanning PoC with Molysis
Search
Masahiro331
June 11, 2022
Technology
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
VirtualMachine Image scanning PoC with Molysis
Masahiro331
June 11, 2022
More Decks by Masahiro331
See All by Masahiro331
Model Context Protocol 勉強会
masahiro331
0
110
OSSに新機能を追加するまでの苦労話
masahiro331
0
250
Analyze Filesystem in Virtual Machine Image
masahiro331
0
250
SBOMを利用したソフトウェアサプライチェーンの保護
masahiro331
4
3k
Introduction Supply Chain Security
masahiro331
0
200
Container Security with Trivy
masahiro331
0
270
Other Decks in Technology
See All in Technology
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
320
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
270
Deep Data Security 機能解説
oracle4engineer
PRO
2
670
The kernel report
ennael
PRO
1
240
調査タスクをAIと乗り切る 〜過去の調査をナレッジ化し 調査手順をスキルにする〜
mot_techtalk
1
100
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
180
行動するAIのためのオントロジー | DevRev — Encraft #26.pdf
dvrv_tknrszk
2
710
SDDの運用にめげずに向き合った話
sansantech
PRO
0
130
形式手法を使って仕様をコーディングしよう
mikanichinose
0
170
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
1
320
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
270
Claude起点の仕様駆動開発
tanakaseiya
0
360
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
600
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
500
GraphQLとの向き合い方2022年版
quramy
50
15k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
340
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
350
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
260
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Design in an AI World
tapps
1
350
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