Created Security (asciidoc)
This commit is contained in:
parent
45980fe7d1
commit
ab5606cf55
|
@ -0,0 +1,79 @@
|
||||||
|
== Security
|
||||||
|
|
||||||
|
:toc: right
|
||||||
|
|
||||||
|
NOTE: The page is Work In Progress
|
||||||
|
|
||||||
|
This page documents security aspects of Nim and best practices.
|
||||||
|
|
||||||
|
Security features in the language:
|
||||||
|
|
||||||
|
* No pointer arithmetic
|
||||||
|
* http://nim-lang.org/docs/manual.html#taint-mode[Taint mode]
|
||||||
|
* The http://nim-lang.org/docs/manual.html#effect-system[Effect system] can be used for security
|
||||||
|
* Nim attempts to generate C code that does not rely on unsecure function/patterns (e.g. unchecked strcpy)
|
||||||
|
* The language encourage using immutable and const values
|
||||||
|
* Type conversions are memory-safe
|
||||||
|
* Low-level memory access allows mlock etc
|
||||||
|
* http://nim-lang.org/docs/manual.html#types-memory-regions[Memory regions] TODO
|
||||||
|
|
||||||
|
=== Compiling with GCC on Linux
|
||||||
|
|
||||||
|
Nim attempts to generate C code that does not rely on unsecure function/patterns.
|
||||||
|
As such, some of the options listed below might be less useful than when building pure-C applications.
|
||||||
|
|
||||||
|
|
||||||
|
All the following options enabled together:
|
||||||
|
|
||||||
|
[source,bash]
|
||||||
|
----
|
||||||
|
--passC:"-fPIE -Wformat -Wformat-security -D_FORTIFY_SOURCE=2 -O1 -fstack-protector-all" --passL:"-fPIE -pie -z relro -z now"
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
==== Stack protector
|
||||||
|
Terminate execution when the stack is being overwritten
|
||||||
|
|
||||||
|
[source,bash]
|
||||||
|
----
|
||||||
|
nim c --passC:"-fstack-protector-all"
|
||||||
|
----
|
||||||
|
|
||||||
|
==== Protect againt fixed-size buffer overflow
|
||||||
|
|
||||||
|
[source,bash]
|
||||||
|
----
|
||||||
|
nim c --passC:"-D_FORTIFY_SOURCE=2 -O1"
|
||||||
|
----
|
||||||
|
|
||||||
|
==== Warn on unsecure prinf usage
|
||||||
|
|
||||||
|
|
||||||
|
[source,bash]
|
||||||
|
----
|
||||||
|
nim c --passC:"-Wformat -Wformat-security"
|
||||||
|
----
|
||||||
|
|
||||||
|
==== Position independent executable
|
||||||
|
|
||||||
|
Enable ASLR
|
||||||
|
|
||||||
|
[source,bash]
|
||||||
|
----
|
||||||
|
nim c --passC:"-fPIE" --passL:"-fPIE -pie"
|
||||||
|
----
|
||||||
|
|
||||||
|
==== Full RELRO
|
||||||
|
|
||||||
|
Resolve dynamic symbols at startup and flag the GOT as read-only.
|
||||||
|
|
||||||
|
[source,bash]
|
||||||
|
----
|
||||||
|
nim c --passL:"-z relro -z now"
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=== Resources
|
||||||
|
|
||||||
|
https://wiki.debian.org/Hardening
|
Loading…
Reference in New Issue