3 ms·
I don't agree. Systems are more complicated to build with a lot of dependencies that's true, but this is mitigated by shipping pre-built binaries and container
by disordinary 7y ago
I don't agree.
Systems are more complicated to build with a lot of dependencies that's true, but this is mitigated by shipping pre-built binaries and containers which have the dependencies bundled. Yes, those binaries can be from untrusted sources but if you use those you're taking a risk - the same as if you use code from an untrusted source (just because it's not compiled doesn't make it safe, when was the last time your organisation audited anything), ultimately a business should be using banaries from businesses they trust.
Containers actually increase security in the following ways:
1. They run isolated from the host system and if you set things up properly they should be non root.
2. They're immutable and cannot be tampered with.
3. Because they work on layers you can change them without affecting the underlying container, to upgrade you can just replace the layer that you inherit from, simplifying the upgrade path (and being immutable, stateless, and versioned there's no risk to upgrading, you can very easily rollback).
4. In the example listed above like Haddoop you can install the outdated version of Java that it depends on without compromising the host or other workloads on that server.
Of course, this all breaks down if you don't use containers from trusted sources and if you don't have processes in place.
It works in a modern environment with pipelines and automation, it doesn't work as well in a more traditional environment with sysadmins hand wrangling deployments.
Of course the most secure way to do things is to have deterministic builds of a codebase which creates a hash which you can compare with a canonical source, but this is tricky and not all build toolchains support this properly so you'll end up with mixed results. For a streamlined business the best compromise is to get applications from trusted vendors and rely on static analysis and the ability to quickly upgrade if a vulnerability is discovered.
Ultimately, the one of the best ways to secure a system is to establish an unbroken, audited, and automated trust chain and remove the ability for human intervention.