Enhance deployment documentation with security checks
Added sections for binary hardening verification, runtime verification, and deployment footprint details.
This commit is contained in:
1 parent
1e038901b3
commit
3397ca121b
1 file changed
+193
@@ -68,6 +68,165 @@ Release binary:
|
|||||||
```text
|
```text
|
||||||
target/release/chronoseal
|
target/release/chronoseal
|
||||||
```
|
```
|
||||||
|
## Binary Hardening Verification
|
||||||
|
|
||||||
|
Before packaging or deploying ChronoSeal, verify that the release binary includes the expected platform hardening protections.
|
||||||
|
|
||||||
|
### Security Inspection
|
||||||
|
|
||||||
|
Inspect the release binary with `checksec`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
checksec file target/release/chronoseal
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected protections:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Full RELRO
|
||||||
|
Stack Canary Found
|
||||||
|
NX enabled
|
||||||
|
PIE Enabled
|
||||||
|
No RPATH
|
||||||
|
No RUNPATH
|
||||||
|
```
|
||||||
|
|
||||||
|
These mitigations help reduce the impact of memory corruption vulnerabilities and runtime exploitation.
|
||||||
|
|
||||||
|
### Stripped Production Binary
|
||||||
|
|
||||||
|
To verify symbol reduction and release artifact quality:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
strip target/release/chronoseal -o chronoseal.stripped
|
||||||
|
|
||||||
|
nm -D chronoseal.stripped | wc -l
|
||||||
|
```
|
||||||
|
|
||||||
|
A stripped production binary should expose only a small dynamic symbol set.
|
||||||
|
|
||||||
|
Check for remaining debug sections:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
readelf -S chronoseal.stripped | grep debug
|
||||||
|
```
|
||||||
|
|
||||||
|
Production artifacts should not contain `.debug_*` sections.
|
||||||
|
|
||||||
|
### Source Path Disclosure
|
||||||
|
|
||||||
|
Rust release builds may embed local source paths from the build environment.
|
||||||
|
|
||||||
|
To reduce path disclosure:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
RUSTFLAGS="--remap-path-prefix=$HOME=~" \
|
||||||
|
cargo build --release
|
||||||
|
```
|
||||||
|
|
||||||
|
or:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
RUSTFLAGS="--remap-path-prefix=$(pwd)=." \
|
||||||
|
cargo build --release
|
||||||
|
```
|
||||||
|
|
||||||
|
Recommended release profile:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[profile.release]
|
||||||
|
lto = true
|
||||||
|
codegen-units = 1
|
||||||
|
panic = "abort"
|
||||||
|
strip = "symbols"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Runtime Verification
|
||||||
|
|
||||||
|
Start the daemon locally:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./chronoseal run --bind 127.0.0.1:8080
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected startup output:
|
||||||
|
|
||||||
|
```text
|
||||||
|
INFO chronoseal daemon started bind=127.0.0.1:8080
|
||||||
|
```
|
||||||
|
|
||||||
|
Verify core endpoints:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl http://127.0.0.1:8080/health
|
||||||
|
curl http://127.0.0.1:8080/stats
|
||||||
|
curl http://127.0.0.1:8080/metrics
|
||||||
|
```
|
||||||
|
|
||||||
|
Successful responses confirm that:
|
||||||
|
|
||||||
|
* configuration loading succeeded
|
||||||
|
* storage initialization completed
|
||||||
|
* HTTP listeners are active
|
||||||
|
* observability endpoints are operational
|
||||||
|
|
||||||
|
### PID File Permissions
|
||||||
|
|
||||||
|
When running as an unprivileged user, writing directly to `/run` may fail:
|
||||||
|
|
||||||
|
```text
|
||||||
|
could not write PID file
|
||||||
|
Permission denied
|
||||||
|
```
|
||||||
|
|
||||||
|
For local development:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chronoseal run --pid-file /tmp/chronoseal.pid
|
||||||
|
```
|
||||||
|
|
||||||
|
For production systemd deployments, prefer:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
RuntimeDirectory=chronoseal
|
||||||
|
```
|
||||||
|
|
||||||
|
and:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/run/chronoseal/chronoseal.pid
|
||||||
|
```
|
||||||
|
|
||||||
|
managed by systemd.
|
||||||
|
|
||||||
|
### Additional Validation
|
||||||
|
|
||||||
|
Inspect runtime dependencies:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ldd target/release/chronoseal
|
||||||
|
```
|
||||||
|
|
||||||
|
Verify ELF program headers:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
readelf -l target/release/chronoseal
|
||||||
|
```
|
||||||
|
|
||||||
|
Look for:
|
||||||
|
|
||||||
|
```text
|
||||||
|
GNU_RELRO
|
||||||
|
GNU_STACK
|
||||||
|
```
|
||||||
|
|
||||||
|
Confirm binary size:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ls -lh target/release/chronoseal
|
||||||
|
```
|
||||||
|
|
||||||
|
These checks should be performed before publishing release artifacts, container images, or distribution packages.
|
||||||
|
|
||||||
## Native Install
|
## Native Install
|
||||||
|
|
||||||
@@ -379,7 +538,41 @@ Avoid debug logging in production because internal identifiers may be written to
|
|||||||
- Monitor `/health`, `/stats`, and `/metrics`.
|
- Monitor `/health`, `/stats`, and `/metrics`.
|
||||||
- Verify `chronoseal config check` after environment or config changes.
|
- Verify `chronoseal config check` after environment or config changes.
|
||||||
|
|
||||||
|
## Runtime Footprint
|
||||||
|
|
||||||
|
ChronoSeal is intentionally designed to maintain a small deployment footprint while providing browser attestation, cryptographic verification, session continuity, and WASM execution capabilities.
|
||||||
|
|
||||||
|
Typical v1.0.2 release artifact sizes:
|
||||||
|
|
||||||
|
| Component | Approximate Size |
|
||||||
|
| ----------------------------------------------- | ---------------: |
|
||||||
|
| Native daemon (`chronoseal`) | ~9.1 MiB |
|
||||||
|
| Browser runtime (`chronoseal_wasm.wasm`) | ~728 KiB |
|
||||||
|
| WASM static library (`libchronoseal_wasm.rlib`) | ~188 KiB |
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```text
|
||||||
|
chronoseal
|
||||||
|
9501232 bytes
|
||||||
|
≈ 9.06 MiB
|
||||||
|
|
||||||
|
chronoseal_wasm.wasm
|
||||||
|
745569 bytes
|
||||||
|
≈ 728 KiB
|
||||||
|
```
|
||||||
|
|
||||||
|
These compact artifact sizes help:
|
||||||
|
|
||||||
|
* reduce deployment overhead
|
||||||
|
* minimize container image growth
|
||||||
|
* improve cold-start performance
|
||||||
|
* reduce browser download size
|
||||||
|
* simplify edge and self-hosted deployments
|
||||||
|
|
||||||
|
ChronoSeal intentionally avoids heavyweight runtime dependencies and large browser frameworks, allowing the complete attestation stack to remain compact while preserving functionality.
|
||||||
|
|
||||||
|
```
|
||||||
## v1.0.2 Deployment Notes
|
## v1.0.2 Deployment Notes
|
||||||
|
|
||||||
- Containers run as a dedicated non-root user.
|
- Containers run as a dedicated non-root user.
|
||||||
|
|||||||
Reference in new issue
Block a user