-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement block addressing format #16
Conversation
if addresses.SingleIndirectBlock != 0 { | ||
singleIndirectBlockAddresses, err := resolveSingleIndirectBlockAddress(ext4, addresses.SingleIndirectBlock) | ||
if err != nil { | ||
return nil, xerrors.Errorf("failed to read single indirect block addressing: %w", err) | ||
} | ||
blockAddresses = append(blockAddresses, singleIndirectBlockAddresses...) | ||
} | ||
|
||
if addresses.DoubleIndirectBlock != 0 { | ||
doubleIndirectBlockAddresses, err := resolveDoubleIndirectBlockAddress(ext4, addresses.DoubleIndirectBlock) | ||
if err != nil { | ||
return nil, xerrors.Errorf("failed to read double indirect block addressing: %w", err) | ||
} | ||
blockAddresses = append(blockAddresses, doubleIndirectBlockAddresses...) | ||
} | ||
|
||
if addresses.TripleIndirectBlock != 0 { | ||
tripleIndirectBlockAddresses, err := resolveTripleIndirectBlockAddress(ext4, addresses.TripleIndirectBlock) | ||
if err != nil { | ||
return nil, xerrors.Errorf("failed to read triple indirect block addressing: %w", err) | ||
} | ||
blockAddresses = append(blockAddresses, tripleIndirectBlockAddresses...) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これって全て存在するパターンや一部存在するパターンなどあるんですかね?
どういった組み合わせが存在するのか気になってます
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Block Addressingの制約で、1ファイルのサイズが1Blockのサイズを超えたときのためにこのような管理方法が取られているようです。
https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Direct.2FIndirect_Block_Addressing
ここからサイズを計算すると、ファイルサイズが4GBを超えるとTripleまで全て存在するようになります。4MBを超えるとDoubleまで、4KBを超えるとSingleまでになるはずです。少ない方から順番に詰められていくので、途中で飛ばしたりという組み合わせはなさそうです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
なるほどです。拡張されていく仕様ですか。
ありがとうございます。
VMDKなどのイメージから透過的に読み取れることが確認できてますか? |
Trivy側の依存関係を編集してこのパッチを組み込んだものをEBSスキャンで動かしています。既存のExt4/Xfs環境を含めてスキャン結果は取得できているところまでは確認しています。 |
VMDKにエクスポートしたものに対してスキャンできるか検証できますか? |
承知です、明日検証してみます。 |
色々嵌まってしまって遅くなりました。 以下検証内容です。 既存スキャン機能への影響調査AWS EC2 で Debian AMI から起動して root volume を VMDK としてエクスポートしたものをスキャンして、既存の Ext4 に対するスキャンが問題ないことを確認しました。 Ext3 への対応調査上記の環境を流用して、以下の手順で Ext3 EBS ボリュームを作成し、VMDK に変換したイメージに対してスキャンが行われることを確認しました。 $ sudo parted /dev/xvdb
parted) mklabel gpt
parted) mkpart primary ext3 1MiB 100%
parted) quit
$ sudo mkfs.ext3 /dev/xvdb1
$ sudo mount /dev/xvdb1 /mnt/ext3/
$ sudo cp -a /etc/ /mnt/ext3/etc/
$ sudo cp -a /var/ /mnt/ext3/var/
$ sudo dd if=/dev/xvdb > ext3.img
$ vboxmanage convertfromraw --format VMDK --variant Stream ext3.img ext3.vmdk
$ ./trivy vm --scanners vuln ext3.vmdk |
Co-authored-by: Masahiro331 <[email protected]>
|
||
doubleIndirectBlockAddresses, err := resolveDoubleIndirectBlockAddress(ext4, doubleIndirectBlockAddress) | ||
if err != nil { | ||
return nil, xerrors.Errorf("failed to read double indirect block addressing: %w", err) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここ全体的にですが、エラーが発生したアドレスがわかるようにしたいです。ブロックのアドレスなどdebugの時にxxd とかで参照できると嬉しい(他のところが十分にできてないので心苦しいですが)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ひとまず single/double/triple の block addresses を解決するところで、エラーメッセージ中にブロックアドレスを表示するようにしてみました。
22dd741
全然見てないけど良いと思います! |
overview
If an ext4 filesystem is transformed from ext3 or ext2, it uses block addressing format instead of extents. In this case, this library can't read files from the disk. Therefore, I implemented a method to get files on block addressing format.
others
概要
ext3 などから移行されたファイルシステムで Block Addressing 形式でファイルが書き込まれていて、extent を利用していない場合にファイルが取れなかったため、Block Addressing 方式のサポートを追加しました。
その他