9 ms·
Demonstrably Secure Software Supply Chains with Nix
- kristel100 2y ago[dead]
- beardedwizard 2y agoThe bummer about lots of supply chain work is that it does not address the attacks we see in the wild like xz where malicious code was added at the source, and attested all the way through. There are gains to be had through these approaches, like inventory, but nobody has a good approach to stopping malicious code entering the ecosystem through the front door and attackers find this much easier than tampering with artifacts after the fact.
- yencabulator 2y agoI think a big part of the push is just being able to easily & conclusively answer "are we vulnerable or not" when a new attack is discovered. Exhaustive inventory already is huge.
- tough 2y agoi read somewhere go has a great package for this that checks statically typed usage of the vuln specific functions not whole package deps
- yencabulator 2y agohttps://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck
- tough 2y agoty ty exactly what I was thinking does something like this exist for other languages like rust, python or js?
- yencabulator 2y agoI don't think the Rust ecosystem has that at this time. They're annotating the vulnerabilities with affected functions, but as far as I know nobody's written the static analysis side of it. https://github.com/rustsec/rustsec/issues/21 https://github.com/rustsec/rustsec/issues/21 Python and JS might be so dynamic that such static analysis just isn't as useful.
- dwattttt 2y agoFor Rust, the advisory database cargo-audit uses (https://github.com/RustSec/advisory-db/ https://github.com/RustSec/advisory-db/) does track which functions are affected by a cve (if provided). I'm not sure if the tool uses them though.
- XiZhao 2y agoI run a sw supply chain company (fossa.com) -- agree that there's a lot of low hanging gains like inventory still around. There is a shocking amount of very basic but invisible surface area that leads to downstream attack vectors. From a company's PoV -- I think you'd have to just assume all 3rd party code is popped and install some kind of control step given that assumption. I like the idea of reviewing all 3rd party code as if its your own which is now possible with some scalable code review tools.
- nyrikki 2y agoThose projects seem to devolve into a boil the ocean style projects and tend to be viewed as intractable and thus ignorable. In the days everything was http I use to set a proxy variable and have the proxy save all downloaded assets to compair later, today I would probably blacklist the public CAs and do an intercept, just for the data of what is grabbing what. Fedramp was defunded and is moving forward with a GOA style agile model. If you have the resources I would highly encourage you to participate in conversations. The timelines are tight and they are trying to move fast, so look into their GitHub discussions and see if you can move it forward. There is a chance to make real changes but they need feedback now. https://github.com/FedRAMP https://github.com/FedRAMP
- beardedwizard 2y ago+1, I think you have to assume owned as well and start defending from there. Companies like edera are betting on that, but sandbox isn't panacea, you really need some way to know expected behavior.
- kuruczgy 2y agoActually this is not quite true, in the xz hack part of the malicious code was in generated files only present in the release tarball. When I personally package stuff using Nix, I go out of my way to build everything from source as much as possible. E.g. if some repo contains checked in generated files, I prefer to delete and regenerate them. It's nice that Nix makes adding extra build steps like this easy. I think most of the time the motivation for having generated files in repos (or release tarballs) is the limitations of various build systems.
- throwawayqqq11 2y agoYour preference to compile your backdoors does not really fix the problem of malicious code supply. I have this vague idea to fingerprint the relevant AST down to all syscalls and store it in a lock file to have a better chance of detection. But this isnt a true fix either.
- kuruczgy 2y agoYes you are right, what I am proposing is not a solution by itself, it's just a way to be reasonably confident that _if you audit the code_, that's going to be the actual logic running on your computer. (I don't get the value of your AST checksumming idea over just checksumming the source text, which is what almost all distro packages do. I think the number of changes that change the code but not the AST are negligible. If the code (and AST) is changed, you have to audit the diff no matter what.) The more interesting question that does not have a single good answer is how to do the auditing. In almost all cases right now the only metric you have is "how much you trust upstream", in very few cases is actually reading through all the code and changes viable. I like to look at how upstream does their auditing of changes, e.g. how they do code review and how clean is their VCS history (so that _if_ you discover something fishy in the code, there is a clean audit trail of where that piece of code came from).
- vasco 2y ago> it's just a way to be reasonably confident that _if you audit the code_ Why do we pretend this is easy many times in conversation about dependencies? It's as if security bugs in dependencies were calling out at us, like a house inspector looking at a huge hole on the floor of the house. But it's not like that at all, most people would inspect 99.9% of CVEs and read the vulnerable code and accept it. As did the reviewers in the open-source project, who know that codebase much more than someone who's adding a dependency because they want to do X faster. And they missed it or the CVE wouldn't be there, but somehow a random dev looking at it for the first time will find it? In fact, if to use dependencies I have to read and understand the code and validate it, the number of dependencies I'd use would go to zero. And many things I would be locked out of doing, because I'm too dumb to understand them, so I can't audit the code, which means I'm definitely too dumb to replicate the library myself. Asking people to audit the code in hopes of finding a security bug is a big crapshoot. The industry needs better tools.
- TZubiri 2y agoWhen you have so many dependencies that you need to create complex systems to manage and "secure" the dependencies. The problem is that you have too many dependencies, you are relying on too many volunteer work, and you are demanding too many features while paying for too little. The professional solution is to PAY for your Operating System, and rely on them to secure it. Whether it be to Microsoft or to Red Hat. You KNOW it's the right thing to do, and this is overintellectualizing your need to have a gratis operating system and charge non-gratis prices to your clients in turn.
- deleted 2y ago[deleted]
- lmm 2y agoHow does that solve the problem? Both Microsoft and IBM/Red Hat have shipped backdoored code in the past and will no doubt do so again. At most you might be able to sue them for a refund of what you paid them, at which point you're no better off than if you'd used a free system from the start.
- justinrubek 2y agoI couldn't disagree more with everything you've said.
- sollewitt 2y agoValuably you also get demonstrable _insecure_ status - half the pain for our org of log4js was figuring out where it was in the stacks, and at which versions. This kind of accounting is really valuable when you're trying to figure out if and where you are affected.
- niam 2y ago> it offers integrity and reproducibility like no other tool (btw. guix also exists) This rubs me the wrong way. They acknowledge that alternative tools exist, but willfully use the wrong-er statement in pursuit of a vacuous marketing idiom.
- Zambyte 2y agoTo be fair, Guix was originally a Nix fork, so dismissing it was "just" a Nix fork doesn't seem that out there. I believe at this point all original Nix code has been replaced and Guix has completely diverged and is also awesome software, but I can see why someone would be inclined to say something like that if they were missing the full picture.
- transpute 2y agoWhat's the best place to read about the history of Guix forking from Nix?
- SkyMarshal 2y agoIt wasn't really a "fork" though, was it? Rather a from-scratch re-implementation of the Nix/NixOS concepts using Guile Scheme in place of the Nix config language. https://guix.gnu.org/en/about/ https://guix.gnu.org/en/about/
- Zambyte 2y agoFrom the link you shared: > It uses low-level mechanisms from the Nix package manager, but packages are defined as native Guile modules, using extensions to the Scheme language—which makes it nicely hackable. Also check out: https://git.savannah.gnu.org/cgit/guix.git/tree/?h=v0.1 https://git.savannah.gnu.org/cgit/guix.git/tree/?h=v0.1
- tucnak 2y agoThe laborious extents to which people would go simply to not use Guix.
- Zambyte 2y agoI also use Guix. Quickly skimming the article, I don't see anything that jumps out that Guix does all that different. What are you suggesting?
- nicce 2y agoI like the philosophy of Guix, but it is too impractical by omitting non-free packages completely.
- Zambyte 2y agoI believe a very high percentage of Guix users use nonguix[0] (including myself) [0] https://gitlab.com/nonguix/nonguix https://gitlab.com/nonguix/nonguix
- pabs3 2y agohttps://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/ https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-...
- mtndew4brkfst 1y agoThe laborious extents to which the Guix project would go simply to alienate people who own certain classes of computer hardware. I have a list of Nix criticisms as long as my arm, but at least its documentation and user community never chastised me for my work laptop's OS or brand/model.
- gitroom 2y agoHard agree on the pain of tracking all this - been there. Respect for the grind to actually lock this stuff down.
- XorNot 2y agoThis still doesn't fix the "trusting trust" attack: which Guix actually can, and which can bootstrap sideways to build other distros. It also doesn't do anything which regular packaging systems don't (nix does have some interesting qualities, security ain't one of them): I.e. that big list of dependencies isn't automatic in any way, someone had to write them, which in turn makes it exactly the same as any other packaging systems build-deps.
- christophilus 2y agoHow does guix fix the trusting trust attack? Aside: I wonder if AI code inspection and review could be put in place to detect xz-like malicious changes to the supply chain for major distros.
- CBLT 2y agohttps://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/ https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-... Guix bootstraps (in 2023, no clue about now) from a 357-byte program. You audit the bytecode.
- cyrnel 2y agoThis seems to only address a few of the nine threats to the software supply chain, mainly "(D) External build parameters" and maybe the content-addressable storage addresses some of the distribution phase threats: https://slsa.dev/spec/v1.1/threats https://slsa.dev/spec/v1.1/threats There are still many other ways that a dependency can be exploited before or after the build phase.
- jchw 2y agoNix doesn't, can't, and will obviously never be able to audit your dependencies, but what it can do is give you a way in which you can audit everything byte-for-byte and end-to-end from input to output. In most architectures it is pretty hard to even get to this point because there is no rigorous tracking of dependencies and side-effects; e.g. if your builds are not sandboxed from the network, how can you be sure that the inputs you audited really account for all of the inputs to a build? Nix has a (complete) answer for that, among other things.
- transpute 2y agoDebian reproducible builds, Guix, StageX and Yocto/OpenEmbedded have also worked in this area.
- lillecarl 2y agoYocto is the worst thing over ever worked with. Its just a pile of dirt on top of a pile of dirt
- transpute 2y ago> pile of dirt on top of a pile of dirt Infinite flexibility for reproducible commercial packaging of dirt permutations. Packaging system pain exists at the border of chaos and simulated order. There are useful concepts in Yocto but they were never formalized in academic papers, unlike some build systems for Haskell. There are packaging nuances encoded in bitbake recipes that will likely die there because they work "enough", instead of being further studied for long term lessons. Given that shellcheck is written in Haskell, it might be an interesting academic exercise to write a Haskell replacement for bitbake, which converts bitbake recipes (shell+python) into something more maintainable.
- ngangaga 2y agoI wish we would use terms like "verifiable" or "reproducible" rather than "secure", which is quite difficult to evaluate out of context of usage.
- huimang 2y agoIs the header image ai generated? For shame. No point in reading any further.
- abhisek 2y agoThis solves the problem of provenance and possibly build integrity. Given an artifact, it will allow identifying exact source from which each components are built. But it still implicitly assumes that the source is secure and trusted. This is where a lot of problem happens when the source is compromised and malicious code is added.
- SkyMarshal 2y agoSource code signing goes a long way to solving that problem. Assuming the source author reviews their own code and signs it immediately after.
- Tractor8626 2y agoClassical Nih "It's easier to do ThingA with Nix because you don't have to do ThingB!" (proceed to explain how to do ThingB but with Nix) > You don't need to maintain your own forks and patchsets ... but you need to maintain your own nix packages and build scripts which is basically same amount of work
- miloignis 2y agoPresumably, most to all of your dependencies will be in nixpkgs already, so you don't have to maintain them.
- seeknotfind 2y agoNothing is demonstrably secure, only not demonstrably insecure. This is - hey our builds come with a bunch of resources you can use to try to prove they're insecure, but you probably can't - but it's an advertisement.
- civodul 1y agoShameless plug but probably relevant in the context of supply chain security: https://programming-journal.org/2023/7/1/ https://programming-journal.org/2023/7/1/