docs(corpus): record the node-type fixtures and the macOS minting recipe - #17
Merged
Conversation
Three new fixtures enter the catalog: udf_all_node_types.img, ntfs_all_node_types.zip (both Linux encodings) and ntfs_windows_reparse.zip (classic tags, Windows-authored with fsutil as the answer key). Each with tier, MD5, oracle and consuming test. Adds a minting section to the corpus standard, because two constraints cost real time and both point at the wrong culprit: - Rootless podman cannot mknod a device even with --privileged and cap_mknod present in CapEff. mkfifo succeeds in the same container, which reads like a filesystem-driver limitation; the control that settles it is mknod on tmpfs. Four ntfs-3g mount-option sets were tried before that control was run. - No Linux tool writes the classic 0xA000000C / 0xA0000003 tags, but ntfs-3g READS them. "Cannot create X" and "cannot validate X" are different claims, and most format libraries read more than they write. Also tabulates which node types each filesystem can actually express: the Interix encoding cannot represent a FIFO or a socket distinguishably, so a reader must report File there rather than infer a type the volume never recorded. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Catalogues the three fixtures minted for the node-type work, and writes down two constraints that cost real time — both of which point at the wrong culprit.
Catalog entries
udf_all_node_types.img— all five types via ICBfile_typentfs_all_node_types.zip— all five, in both Interix and WSL encodingsntfs_windows_reparse.zip— classic tags, Windows-authored,fsutilanswer key committed alongsideEach with MD5, oracle, consuming test, and an explicit tier justification. C1c is deliberately not labelled T1: neither the bytes nor the expected values were authored here, but the scenario was chosen, and T1 would need a real-world installation image where Windows Setup made the junctions.
Minting recipe
Rootless podman cannot
mknoda device even with--privileged—cap_mknodshows inCapEffand it still fails, because the capability is namespaced.mkfifosucceeds in the same container, which makes it read like a filesystem-driver limitation. Four ntfs-3g mount-option sets were tried before running the control that settles it in one command:mknodon tmpfs. The fix is a rootful container inside the podman VM.Plus the loop-device gotcha (
/devcarries onlyloop0, solosetup -fnames a device that doesn't exist).What each filesystem can express
A table, because the assumption that a format records a type just because the OS has one is wrong twice here:
$DATAwith no magic.libntfs-3g/dir.c's own comment reads "FIFO or regular file." A reader must reportFile; inferring otherwise fabricates an observation.0xA000000C/0xA0000003— but ntfs-3g reads them. "Cannot create X" and "cannot validate X" are different claims, and most format libraries read far more than they write. Checking the read path separately avoided standing up a VM for validation.Paired with SecurityRonin/ntfs-forensic#15 and SecurityRonin/udf-forensic#18.