Conversation
A recent [Twitter thread][mudge] suggested that tools like [`checksec`][checksec] be used to validate release binaries. Checksec reports whether modern security features like stack canaries are employed. Proxy builds appear to do pretty well out-of-the-box. This change introduces a checksec.sh wrapper that is used by the Makefile during packaging. A new _package_ github action is introduced to provide `checksec` and `jq` dependencies at runtime. (Note: the version of checksec provided by debian does not include JSON output, so it is instead fetched directly from GitHub). During an automated release, the generated checksec is compared to an expected set of values and, if a regression is detected, the release will fail. [mudge]: https://twitter.com/dotMudge/status/1249359519471341569 [checksec]: https://github.com/slimm609/checksec.sh
hawkw
left a comment
There was a problem hiding this comment.
couple nits, but otherwise, this seems good to me!
| "rpath": "no", | ||
| "runpath": "no", | ||
| "symbols": "no" |
There was a problem hiding this comment.
nit/tioli: it might be nice to have comments explaining why we expect to see "no" for these?
There was a problem hiding this comment.
I didn't do too much research into all of the various checks checksec does, but i'd welcome additional docs.
I think in the case of symbols, particularly, the guidance is intended to make reverse-engineering more difficult. In our case, we mostly care that the binary is small (and we have another build option that includes symbols as a separate file)
There was a problem hiding this comment.
It appears that rpath/runpath can be used to influence dynamic linking in dangerous ways...
There was a problem hiding this comment.
yeah, i thought that was the case for symbols. I wasn't super familiar with the rpath/rumpath stuff.
This release includes a new protocol detection timeout, which prevents clients from consuming resources indefinitely when they do not send any data. Additionally: the proxy's admin endpoint now supports a `/live` endpoint for liveness checks, and a feature has been added to enrich tracing metadata from a file of label/values. --- * Add Labels from a path as oc-collector attributes (linkerd/linkerd2-proxy#463) * Add liveness endpoint to admin server (linkerd/linkerd2-proxy#470) * docker: Use buildkit for caching (linkerd/linkerd2-proxy#472) * Makefile: Use STRIP variable with strip as default (linkerd/linkerd2-proxy#475) * Add checksec to the release process (linkerd/linkerd2-proxy#476) * Time out protocol detect futures (linkerd/linkerd2-proxy#464) * Ensure that checksec is executable (linkerd/linkerd2-proxy#477) * Fix the checksec URL (linkerd/linkerd2-proxy#478) * Undo hardcoded release version (linkerd/linkerd2-proxy#479)
This release includes a new protocol detection timeout, which prevents clients from consuming resources indefinitely when they do not send any data. Additionally: the proxy's admin endpoint now supports a `/live` endpoint for liveness checks, and a feature has been added to enrich tracing metadata from a file of label/values. --- * Add Labels from a path as oc-collector attributes (linkerd/linkerd2-proxy#463) * Add liveness endpoint to admin server (linkerd/linkerd2-proxy#470) * docker: Use buildkit for caching (linkerd/linkerd2-proxy#472) * Makefile: Use STRIP variable with strip as default (linkerd/linkerd2-proxy#475) * Add checksec to the release process (linkerd/linkerd2-proxy#476) * Time out protocol detect futures (linkerd/linkerd2-proxy#464) * Ensure that checksec is executable (linkerd/linkerd2-proxy#477) * Fix the checksec URL (linkerd/linkerd2-proxy#478) * Undo hardcoded release version (linkerd/linkerd2-proxy#479)
A recent Twitter thread suggested that tools like
checksecbe used to validate release binaries. Checksecreports whether modern security features like stack canaries are
employed. Proxy builds appear to do pretty well out-of-the-box.
This change introduces a checksec.sh wrapper that is used by the
Makefile during packaging. A new package github action is introduced
to provide
checksecandjqdependencies at runtime. (Note: theversion of checksec provided by debian does not include JSON output, so
it is instead fetched directly from GitHub).
During an automated release, the generated checksec is compared to an
expected set of values and, if a regression is detected, the release
will fail.