diff options
| author | Miruna Paun <Miruna.Paun@enea.com> | 2017-09-19 11:14:01 +0200 |
|---|---|---|
| committer | Miruna Paun <Miruna.Paun@enea.com> | 2017-09-19 11:14:01 +0200 |
| commit | 2732662269d2ca8cc700be7a397296468ec54a7f (patch) | |
| tree | d743fcc68109ca1f91c20de9aa297be45c6bd4a1 | |
| parent | 14f4e01d3d11ef77247b809d3410cae96aef94d0 (diff) | |
| download | nfv-access-documentation-2732662269d2ca8cc700be7a397296468ec54a7f.tar.gz | |
Created xml docs for Security Hardening for Enea NFV Access 1.1
USERDOCAP-236
Signed-off-by: Miruna Paun <Miruna.Paun@enea.com>
18 files changed, 3620 insertions, 0 deletions
diff --git a/doc/book-enea-nfv-access-dev-hardening-guide/doc/appendix_a.xml b/doc/book-enea-nfv-access-dev-hardening-guide/doc/appendix_a.xml new file mode 100644 index 0000000..c5d9aaa --- /dev/null +++ b/doc/book-enea-nfv-access-dev-hardening-guide/doc/appendix_a.xml | |||
| @@ -0,0 +1,70 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <appendix id="appendix_a"> | ||
| 3 | <title>Useful Memory Terms</title> | ||
| 4 | |||
| 5 | <remark>Change the title to something better</remark> | ||
| 6 | |||
| 7 | <section id="buffer_overflow"> | ||
| 8 | <title>Buffer overflow</title> | ||
| 9 | |||
| 10 | <para>A buffer overflow occurs when a program or process attempts to write | ||
| 11 | more data to a fixed length block of memory, or buffer, than the buffer is | ||
| 12 | allocated to hold.</para> | ||
| 13 | |||
| 14 | <para>Since buffers are created to contain a defined amount of data, the | ||
| 15 | extra data can overwrite data values in memory addresses adjacent to the | ||
| 16 | destination buffer, unless the program includes sufficient bounds checking | ||
| 17 | to flag or discard data when too much is sent to a memory buffer. | ||
| 18 | Languages such Ada, C#, Haskell, Java, JavaScript, Lisp, PHP, Python, | ||
| 19 | Ruby, and Visual Basic enforce run-time checking. </para> | ||
| 20 | |||
| 21 | <para>C and C++ are prone to buffer overflow attacks as they have no | ||
| 22 | built-in protection against accessing or overwriting data in any part of | ||
| 23 | their memory, and do not automatically check that data written to an array | ||
| 24 | (the built-in buffer type) is within the boundaries of that array.</para> | ||
| 25 | </section> | ||
| 26 | |||
| 27 | <section id="security_exploit"> | ||
| 28 | <title>Security Exploit</title> | ||
| 29 | |||
| 30 | <para>On many systems, the memory layout of a program, or the system as a | ||
| 31 | whole, is well defined. Exploiting the behavior of a buffer overflow is a | ||
| 32 | well-known security exploit. By sending in data designed to cause a buffer | ||
| 33 | overflow, it is possible to write into areas known to hold an executable, | ||
| 34 | and replace it with malicious code.</para> | ||
| 35 | |||
| 36 | <para>Bounds checking can prevent buffer overflows, but requires | ||
| 37 | additional code and processing time. Modern operating systems use a | ||
| 38 | variety of techniques to combat malicious buffer overflows by randomizing | ||
| 39 | the layout of memory, or deliberately leaving space between buffers and | ||
| 40 | looking for actions that write into those areas "canaries". For further | ||
| 41 | reading about security exploits refer to the <ulink | ||
| 42 | url="https://www.exploit-db.com/">Exploit database</ulink>.</para> | ||
| 43 | </section> | ||
| 44 | |||
| 45 | <section id="hd_bounds_ck"> | ||
| 46 | <title>Hardware Bounds Checking</title> | ||
| 47 | |||
| 48 | <para>The safety added by bounds checking costs CPU time if checking is | ||
| 49 | performed in software however, if the checks are performed by hardware | ||
| 50 | then safety can be provided "for free" with no runtime cost. </para> | ||
| 51 | |||
| 52 | <para>Research was started at least as early as 2005 regarding methods to | ||
| 53 | use x86's built-in virtual memory management unit to ensure safety of | ||
| 54 | array and buffer accesses. In 2015 Intel provided their Intel MPX | ||
| 55 | extensions in their Skylake processor architecture which stores bounds in | ||
| 56 | a CPU register and table in memory. As of early 2017 GCC among others, | ||
| 57 | supports MPX extensions.</para> | ||
| 58 | </section> | ||
| 59 | |||
| 60 | <section id="rootkit"> | ||
| 61 | <title>Rootkit</title> | ||
| 62 | |||
| 63 | <para>A rootkit is a collection of malicious software designed to enable | ||
| 64 | access to another software that would not otherwise be allowed, e.g: to an | ||
| 65 | unauthorized user, and often masks its existence or the existence of other | ||
| 66 | software. The term rootkit is a concatenation of "root" and | ||
| 67 | the word "kit", which refers to the software components that implement the | ||
| 68 | tool, and is associated with malware.</para> | ||
| 69 | </section> | ||
| 70 | </appendix> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-dev-hardening-guide/doc/book.xml b/doc/book-enea-nfv-access-dev-hardening-guide/doc/book.xml new file mode 100644 index 0000000..1a75484 --- /dev/null +++ b/doc/book-enea-nfv-access-dev-hardening-guide/doc/book.xml | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ | ||
| 4 | <!ENTITY % local.common.attrib "xml:base CDATA #IMPLIED"> | ||
| 5 | ]> | ||
| 6 | <book id="book_enea_nfv_access_hardening_guide"> | ||
| 7 | <title><trademark class="registered">Enea</trademark> NFV Access Developer's | ||
| 8 | Hardening Guide</title> | ||
| 9 | |||
| 10 | <subtitle>Release Version <xi:include href="eltf_params_updated.xml" | ||
| 11 | xmlns:xi="http://www.w3.org/2001/XInclude" | ||
| 12 | xpointer="element(EneaLinux_REL_VER/1)" /></subtitle> | ||
| 13 | |||
| 14 | <!-- OLINKDBPATH_USED_BY_XMLMIND ../../s_docbuild/olinkdb --> | ||
| 15 | |||
| 16 | <xi:include href="../../s_docbuild/template/docsrc_common/bookinfo_userdoc.xml" | ||
| 17 | xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||
| 18 | |||
| 19 | <xi:include href="introduction.xml" | ||
| 20 | xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||
| 21 | |||
| 22 | <xi:include href="hardening_checklist.xml" | ||
| 23 | xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||
| 24 | |||
| 25 | <xi:include href="metasecure_tools.xml" | ||
| 26 | xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||
| 27 | <xi:include href="appendix_a.xml" | ||
| 28 | xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||
| 29 | </book> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-dev-hardening-guide/doc/eltf_params_template.xml b/doc/book-enea-nfv-access-dev-hardening-guide/doc/eltf_params_template.xml new file mode 100644 index 0000000..eaa7ebd --- /dev/null +++ b/doc/book-enea-nfv-access-dev-hardening-guide/doc/eltf_params_template.xml | |||
| @@ -0,0 +1,151 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
| 4 | <section id="eltf_created_params"> | ||
| 5 | <title>File with Parameters in the Book Auto-updated by ELFT</title> | ||
| 6 | |||
| 7 | <note> | ||
| 8 | <para>See the <emphasis | ||
| 9 | role="bold">eltf_params_updated_template_howto_use.txt</emphasis> text | ||
| 10 | file for description of how to create the final <emphasis | ||
| 11 | role="bold">eltf_params_updated.xml</emphasis> from this template and for | ||
| 12 | all <emphasis role="bold">REQUIREMENTS</emphasis>. Use the command | ||
| 13 | "<emphasis role="bold">make eltf</emphasis>" to extract a full list of all | ||
| 14 | ELTF variables, which always begins with ELTF_ and don't only rely on the | ||
| 15 | howto text file list! The plan is that ELTF will auto-update this when | ||
| 16 | needed.</para> | ||
| 17 | </note> | ||
| 18 | |||
| 19 | <section id="host_prereq"> | ||
| 20 | <title>Common Parameters</title> | ||
| 21 | |||
| 22 | <bridgehead>A programlisting, ID | ||
| 23 | "eltf-prereq-apt-get-commands-host"</bridgehead> | ||
| 24 | |||
| 25 | <para id="eltf-prereq-apt-get-commands-host"><programlisting>ELTF_PL_HOST_PREREQ</programlisting></para> | ||
| 26 | |||
| 27 | <bridgehead>A programlisting, ID | ||
| 28 | "eltf-getting-repo-install-command"</bridgehead> | ||
| 29 | |||
| 30 | <para id="eltf-getting-repo-install-command"><programlisting>ELTF_PL_GET_REPO</programlisting></para> | ||
| 31 | |||
| 32 | <bridgehead>Several phrase elements, various IDs. Ensure EL_REL_VER is | ||
| 33 | correct also compared to the "previous" REL VER in pardoc-distro.xml | ||
| 34 | "prev_baseline".</bridgehead> | ||
| 35 | |||
| 36 | <para id="EneaLinux_REL_VER"><phrase>ELTF_EL_REL_VER</phrase></para> | ||
| 37 | |||
| 38 | <para id="Yocto_VER"><phrase>ELTF_YOCTO_VER</phrase></para> | ||
| 39 | |||
| 40 | <para id="Yocto_NAME"><phrase>ELTF_YOCTO_NAME</phrase></para> | ||
| 41 | |||
| 42 | <para id="ULINK_YOCTO_PROJECT_DOWNLOAD"><ulink | ||
| 43 | url="ELTF_YOCTO_PROJ_DOWNLOAD_URL">ELTF_YOCTO_PROJ_DOWNLOAD_TXTURL</ulink></para> | ||
| 44 | |||
| 45 | <para id="ULINK_ENEA_LINUX_URL"><ulink | ||
| 46 | url="ELTF_EL_DOWNLOAD_URL">ELTF_EL_DOWNLOAD_TXTURL</ulink></para> | ||
| 47 | |||
| 48 | <bridgehead>A programlisting, ID "eltf-repo-cloning-enea-linux". Use | ||
| 49 | $MACHINE/default.xml as parameter, where MACHINE is one of the target | ||
| 50 | directory names in the manifest.</bridgehead> | ||
| 51 | |||
| 52 | <para id="eltf-repo-cloning-enea-linux"><programlisting>ELTF_PL_CLONE_W_REPO</programlisting></para> | ||
| 53 | |||
| 54 | <bridgehead>A table with ONE row, only the row with ID | ||
| 55 | "eltf-eclipse-version-row" is included in the book. MANUALLY BOTH in the | ||
| 56 | template.xml and in the updated.xml, set condition hidden on the | ||
| 57 | <row>, if eclipse is not in the release.</bridgehead> | ||
| 58 | |||
| 59 | <informaltable> | ||
| 60 | <tgroup cols="1"> | ||
| 61 | <tbody> | ||
| 62 | <row id="eltf-eclipse-version-row"> | ||
| 63 | <entry>Eclipse version ELTF_ECLIPSE_VERSION plus command line | ||
| 64 | development tools are included in this Enea NFV Access release.</entry> | ||
| 65 | </row> | ||
| 66 | </tbody> | ||
| 67 | </tgroup> | ||
| 68 | </informaltable> | ||
| 69 | |||
| 70 | <bridgehead>Below is one big section with title "Supported Targets with | ||
| 71 | Parameters". The entire section is included completely in the book via ID | ||
| 72 | "eltf-target-tables-section" and shall be LAST in the template. The | ||
| 73 | template contains ONE target subsection. COPY/APPEND it, if multiple | ||
| 74 | targets exist in the release and optionally add rows with additional | ||
| 75 | target parameters in each target subsection table.</bridgehead> | ||
| 76 | </section> | ||
| 77 | |||
| 78 | <section id="eltf-target-tables-section"> | ||
| 79 | <title>Supported Targets with Parameters</title> | ||
| 80 | |||
| 81 | <para>The tables below describes the target(s) supported in this Enea | ||
| 82 | NFV Access release.</para> | ||
| 83 | |||
| 84 | <section id="eltf-target-table-ELTF_T_MANIFEST_DIR"> | ||
| 85 | <title>MACHINE ELTF_T_MANIFEST_DIR - Information</title> | ||
| 86 | |||
| 87 | <para><informaltable> | ||
| 88 | <tgroup cols="2"> | ||
| 89 | <colspec colwidth="6*" /> | ||
| 90 | |||
| 91 | <colspec colwidth="9*" /> | ||
| 92 | |||
| 93 | <tbody> | ||
| 94 | <row> | ||
| 95 | <entry>Target official name</entry> | ||
| 96 | |||
| 97 | <entry>ELTF_T_NAME</entry> | ||
| 98 | </row> | ||
| 99 | |||
| 100 | <row> | ||
| 101 | <entry>Architecture and Description</entry> | ||
| 102 | |||
| 103 | <entry>ELTF_T_ARC_DESC</entry> | ||
| 104 | </row> | ||
| 105 | |||
| 106 | <row> | ||
| 107 | <entry>Link to target datasheet</entry> | ||
| 108 | |||
| 109 | <entry>See <ulink | ||
| 110 | url="ELTF_T_DS_URL">ELTF_T_DS_TXTURL</ulink></entry> | ||
| 111 | </row> | ||
| 112 | |||
| 113 | <row> | ||
| 114 | <entry>Poky version</entry> | ||
| 115 | |||
| 116 | <entry>ELTF_T_POKY_VER</entry> | ||
| 117 | </row> | ||
| 118 | |||
| 119 | <row> | ||
| 120 | <entry>GCC version</entry> | ||
| 121 | |||
| 122 | <entry>ELTF_T_GCC_VER</entry> | ||
| 123 | </row> | ||
| 124 | |||
| 125 | <row> | ||
| 126 | <entry>Linux Kernel Version</entry> | ||
| 127 | |||
| 128 | <entry>ELTF_T_KERN_VER</entry> | ||
| 129 | </row> | ||
| 130 | |||
| 131 | <row> | ||
| 132 | <entry>Supported Drivers</entry> | ||
| 133 | |||
| 134 | <entry>ELTF_T_DRIVERS</entry> | ||
| 135 | </row> | ||
| 136 | |||
| 137 | <row> | ||
| 138 | <entry>Enea rpm folder for downloading RPM packages for this | ||
| 139 | target</entry> | ||
| 140 | |||
| 141 | <entry><ulink | ||
| 142 | url="ELTF_T_EL_RPM_URL">ELTF_T_EL_RPM_TXTURL</ulink></entry> | ||
| 143 | </row> | ||
| 144 | </tbody> | ||
| 145 | </tgroup> | ||
| 146 | </informaltable></para> | ||
| 147 | </section> | ||
| 148 | |||
| 149 | <!-- ELTFADD_MORE_TARGET_SECTIONS_BELOW_IF_NEEDED --> | ||
| 150 | </section> | ||
| 151 | </section> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-dev-hardening-guide/doc/eltf_params_updated.xml b/doc/book-enea-nfv-access-dev-hardening-guide/doc/eltf_params_updated.xml new file mode 100644 index 0000000..f6bd068 --- /dev/null +++ b/doc/book-enea-nfv-access-dev-hardening-guide/doc/eltf_params_updated.xml | |||
| @@ -0,0 +1,165 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
| 4 | <section id="eltf_created_params"> | ||
| 5 | <title>File with Parameters in the Book Auto-updated by ELFT</title> | ||
| 6 | |||
| 7 | <note> | ||
| 8 | <para>See the <emphasis | ||
| 9 | role="bold">eltf_params_updated_template_howto_use.txt</emphasis> text | ||
| 10 | file for description of how to create the final <emphasis | ||
| 11 | role="bold">eltf_params_updated.xml</emphasis> from this template and for | ||
| 12 | all <emphasis role="bold">REQUIREMENTS</emphasis>. Use the command | ||
| 13 | "<emphasis role="bold">make eltf</emphasis>" to extract a full list of all | ||
| 14 | ELTF variables, which always begins with ELTF_ and don't only rely on the | ||
| 15 | howto text file list! The plan is that ELTF will auto-update this when | ||
| 16 | needed.</para> | ||
| 17 | </note> | ||
| 18 | |||
| 19 | <section id="host_prereq"> | ||
| 20 | <title>Common Parameters</title> | ||
| 21 | |||
| 22 | <bridgehead>A programlisting, ID | ||
| 23 | "eltf-prereq-apt-get-commands-host"</bridgehead> | ||
| 24 | |||
| 25 | <para id="eltf-prereq-apt-get-commands-host"><programlisting># Host Ubuntu 14.04.5 LTS 64bit | ||
| 26 | sudo apt-get -y update | ||
| 27 | sudo apt-get -y install sed wget subversion git-core coreutils unzip texi2html \ | ||
| 28 | texinfo libsdl1.2-dev docbook-utils fop gawk python-pysqlite2 diffstat \ | ||
| 29 | make gcc build-essential xsltproc g++ desktop-file-utils chrpath \ | ||
| 30 | libgl1-mesa-dev libglu1-mesa-dev autoconf automake groff libtool xterm \ | ||
| 31 | libxml-parser-perl</programlisting></para> | ||
| 32 | |||
| 33 | <bridgehead>A programlisting, ID | ||
| 34 | "eltf-getting-repo-install-command"</bridgehead> | ||
| 35 | |||
| 36 | <para id="eltf-getting-repo-install-command"><programlisting>mkdir -p ~/bin | ||
| 37 | curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo | ||
| 38 | chmod a+x ~/bin/repo | ||
| 39 | export PATH=~/bin:$PATH</programlisting></para> | ||
| 40 | |||
| 41 | <bridgehead>Several phrase elements, various IDs. Ensure EL_REL_VER is | ||
| 42 | correct also compared to the "previous" REL VER in pardoc-distro.xml | ||
| 43 | "prev_baseline".</bridgehead> | ||
| 44 | |||
| 45 | <para id="EneaLinux_REL_VER"><phrase>1.0</phrase></para> | ||
| 46 | |||
| 47 | <para id="Yocto_VER"><phrase>2.1</phrase></para> | ||
| 48 | |||
| 49 | <para id="Yocto_NAME"><phrase>krogoth</phrase></para> | ||
| 50 | |||
| 51 | <para id="ULINK_YOCTO_PROJECT_DOWNLOAD"><ulink | ||
| 52 | url="http://www.yoctoproject.org/downloads/core/krogoth/21">http://www.yoctoproject.org/downloads/core/krogoth/21</ulink></para> | ||
| 53 | |||
| 54 | <para id="ULINK_ENEA_LINUX_URL"><ulink | ||
| 55 | url="https://linux.enea.com/6">https://linux.enea.com/6</ulink></para> | ||
| 56 | |||
| 57 | <bridgehead>A programlisting, ID "eltf-repo-cloning-enea-linux". Use | ||
| 58 | $MACHINE/default.xml as parameter, where MACHINE is one of the target | ||
| 59 | directory names in the manifest.</bridgehead> | ||
| 60 | |||
| 61 | <para id="eltf-repo-cloning-enea-linux"><programlisting>mkdir enea-linux | ||
| 62 | cd enea-linux | ||
| 63 | repo init -u git@git.enea.com:linux/manifests/el_manifests-virtualization.git \ | ||
| 64 | -b refs/tags/EL6 -m $MACHINE/default.xml | ||
| 65 | repo sync</programlisting></para> | ||
| 66 | |||
| 67 | <bridgehead>A table with ONE row, only the row with ID | ||
| 68 | "eltf-eclipse-version-row" is included in the book. MANUALLY in book, set | ||
| 69 | condition hidden if eclipse is not in the release. Do this both in | ||
| 70 | template.xml and updated.xml.</bridgehead> | ||
| 71 | |||
| 72 | <informaltable> | ||
| 73 | <tgroup cols="1"> | ||
| 74 | <tbody> | ||
| 75 | <row condition="hidden" id="eltf-eclipse-version-row"> | ||
| 76 | <entry>Eclipse version 4.3 (Mars) plus command line development | ||
| 77 | tools are included in this Enea NFV Access release.</entry> | ||
| 78 | </row> | ||
| 79 | </tbody> | ||
| 80 | </tgroup> | ||
| 81 | </informaltable> | ||
| 82 | |||
| 83 | <bridgehead>Below is one big section with title "Supported Targets with | ||
| 84 | Parameters". The entire section is included completely in the book via ID | ||
| 85 | "eltf-target-tables-section" and shall be LAST in the template. The | ||
| 86 | template contains ONE target subsection. COPY/APPEND it, if multiple | ||
| 87 | targets exist in the release and optionally add rows with additional | ||
| 88 | target parameters in each target subsection table.</bridgehead> | ||
| 89 | </section> | ||
| 90 | |||
| 91 | <section id="eltf-target-tables-section"> | ||
| 92 | <title>Supported Reference Boards with Parameters</title> | ||
| 93 | |||
| 94 | <para>The tables below describes the target(s) supported in this Enea NFV | ||
| 95 | Access release.</para> | ||
| 96 | |||
| 97 | <section id="eltf-target-table-p2041rdb"> | ||
| 98 | <title>MACHINE p2041rdb - Information</title> | ||
| 99 | |||
| 100 | <para><informaltable> | ||
| 101 | <tgroup cols="2"> | ||
| 102 | <colspec colwidth="6*" /> | ||
| 103 | |||
| 104 | <colspec colwidth="9*" /> | ||
| 105 | |||
| 106 | <tbody> | ||
| 107 | <row> | ||
| 108 | <entry>Target official name</entry> | ||
| 109 | |||
| 110 | <entry>P2041RDB</entry> | ||
| 111 | </row> | ||
| 112 | |||
| 113 | <row> | ||
| 114 | <entry>Architecture and Description</entry> | ||
| 115 | |||
| 116 | <entry>Power, e500mc</entry> | ||
| 117 | </row> | ||
| 118 | |||
| 119 | <row> | ||
| 120 | <entry>Link to target datasheet</entry> | ||
| 121 | |||
| 122 | <entry>See <ulink | ||
| 123 | url="http://www.nxp.com/products/microcontrollers-and-processors/power-architecture-processors/qoriq-power-architecture-processors/p2041-qoriq-reference-design-board:RDP2041BOARD">link | ||
| 124 | to NXP's datasheet</ulink></entry> | ||
| 125 | </row> | ||
| 126 | |||
| 127 | <row> | ||
| 128 | <entry>Poky version</entry> | ||
| 129 | |||
| 130 | <entry>Git-commit-id: | ||
| 131 | 75ca53211488a3e268037a44ee2a7ac5c7181bd2</entry> | ||
| 132 | </row> | ||
| 133 | |||
| 134 | <row> | ||
| 135 | <entry>GCC version</entry> | ||
| 136 | |||
| 137 | <entry>5.3</entry> | ||
| 138 | </row> | ||
| 139 | |||
| 140 | <row> | ||
| 141 | <entry>Linux Kernel Version</entry> | ||
| 142 | |||
| 143 | <entry>3.12</entry> | ||
| 144 | </row> | ||
| 145 | |||
| 146 | <row> | ||
| 147 | <entry>Supported Drivers</entry> | ||
| 148 | |||
| 149 | <entry>Ethernet, I2C, SPI, PCI Express, USB, Flash, | ||
| 150 | SD/SDHC/SDXC, RTC</entry> | ||
| 151 | </row> | ||
| 152 | |||
| 153 | <row> | ||
| 154 | <entry>Enea rpm folder for downloading RPM packages for this | ||
| 155 | target</entry> | ||
| 156 | |||
| 157 | <entry><ulink | ||
| 158 | url="https://linux.enea.com/6/p2041rgb/rpm">https://linux.enea.com/6/p2041rgb/rpm</ulink></entry> | ||
| 159 | </row> | ||
| 160 | </tbody> | ||
| 161 | </tgroup> | ||
| 162 | </informaltable></para> | ||
| 163 | </section> | ||
| 164 | </section> | ||
| 165 | </section> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-dev-hardening-guide/doc/eltf_params_updated_template_how_to_use.txt b/doc/book-enea-nfv-access-dev-hardening-guide/doc/eltf_params_updated_template_how_to_use.txt new file mode 100644 index 0000000..87a6445 --- /dev/null +++ b/doc/book-enea-nfv-access-dev-hardening-guide/doc/eltf_params_updated_template_how_to_use.txt | |||
| @@ -0,0 +1,320 @@ | |||
| 1 | eltf_params_template_updated_howto_use.txt | ||
| 2 | |||
| 3 | This is a way to collect all parameters for an Enea NFV Access release | ||
| 4 | in one parameter file, easy to automatically update by ELTF regularly. | ||
| 5 | |||
| 6 | NOTE: Both the release info AND the open source books use parameters from | ||
| 7 | here, but the XML file is inside the release info book directory. | ||
| 8 | |||
| 9 | NOTE: The manifest_conf.mk, or overridden by the environment variable | ||
| 10 | MANIFESTHASH, contains the full tag (or hashvalue) for downloading | ||
| 11 | the manifest when the books are built. The list of target | ||
| 12 | directories are fetched from the manifest into the book. | ||
| 13 | The eltf_params_updates.xml can all the time contain | ||
| 14 | the final next complete tag e.g. refs/tags/EL6 or similar | ||
| 15 | in the ELTF_PL_CLONE_W_REPO parameter command lines. | ||
| 16 | |||
| 17 | The ordinary book XML files use xi:include statements to include elements | ||
| 18 | from this parameter file. The book XML files can thus be manually edited. | ||
| 19 | Before editing, you must run "make init". | ||
| 20 | Any other text in the template or updated.xml file, outside the parts that | ||
| 21 | are included in the book, are not used but still all must be correct | ||
| 22 | DocBook XML files. | ||
| 23 | |||
| 24 | ELTF work: | ||
| 25 | template => ELTF replaces ALL ELTF_xxx variables => updated XML file | ||
| 26 | => push to git only if changed | ||
| 27 | |||
| 28 | |||
| 29 | eltf_params_template.xml (in git) | ||
| 30 | File used by ELTF to autocreate/update the real parameter | ||
| 31 | file eltf_params_updated.xml. | ||
| 32 | |||
| 33 | eltf_params_updated.xml (in git) | ||
| 34 | Real parameter file where ELTF has replaced all ELTF_xx variables with | ||
| 35 | strings, in several cases with multiline strings. | ||
| 36 | No spaces or linefeed allowed in beginning or end of the variable values! | ||
| 37 | |||
| 38 | |||
| 39 | xi:include: Each parameter is xi:include'ed in various book files, using | ||
| 40 | the IDs existing in the parameter files. | ||
| 41 | In most cases the 1:st element inside an element with an ID is included | ||
| 42 | using a format like eltf-prereq-apt-get-commands-host/1. | ||
| 43 | In very few cases the element with the ID is included in the book, one | ||
| 44 | example is the target section which has an ID, but which contains | ||
| 45 | multiple subsections, one per target. | ||
| 46 | All IDs in a book must be unique. | ||
| 47 | |||
| 48 | DocBook XML: All XML files must be correct DocBook XML files. | ||
| 49 | |||
| 50 | Do NOT edit/save the real *updated.xml file with XMLmind to avoid changes | ||
| 51 | not done by ELTF. But it is OK to open the real file in XMLmind to | ||
| 52 | check that the format is correct. | ||
| 53 | |||
| 54 | ELTF should autocreate a temporary "real" file but only replace | ||
| 55 | and push the eltf_params_updated.xml if it is changed. | ||
| 56 | |||
| 57 | |||
| 58 | make eltf | ||
| 59 | This lists all ELTF_xxx variables and some rules how to treat them | ||
| 60 | |||
| 61 | DocBook Format: All elements - rules: | ||
| 62 | Several strict generic XML rules apply for all strings: | ||
| 63 | 1. No TABs allowed or any other control chr than "linefeed" | ||
| 64 | 2. Only 7-bit ASCII | ||
| 65 | 3. Any < > & must be converted to < > and & | ||
| 66 | Similar for any other non-7-bit-ASCII but avoid those! | ||
| 67 | 4. No leading spaces or linefeeds when replacing the ELTF_* variable | ||
| 68 | 5. No trailing spaces or linefeeds when replacing the ELTF_* variable | ||
| 69 | 6. Note: Keep existing spaces before/efter ELTF_* in a few cases. | ||
| 70 | |||
| 71 | DocBook Format: <programlisting> - rules: ELTF*PL* variables | ||
| 72 | Several strict rules apply for the multiline string in programlisting | ||
| 73 | in addition to the general XML rules above: | ||
| 74 | 7. Max line length < 80 char | ||
| 75 | 8. Use backslash (\) to break longer lines | ||
| 76 | 9. Use spaces (e.g. 4) to indent continuation lines in programlistings | ||
| 77 | 10. No trailing spaces on any line | ||
| 78 | 11. No spaces or linefeed immediately after leading <programlisting> | ||
| 79 | 12. No spaces or linefeed before trailing </programlisting> | ||
| 80 | |||
| 81 | DocBook Format: <ulink> - rules: ELTF_*URL* variables | ||
| 82 | 13. ELTF_*URL and corresponding ELTF_*TXTURL shall be identical strings | ||
| 83 | 14. Only if the URL is extremely long, the TXTURL can be a separate string | ||
| 84 | |||
| 85 | Each target has one section with target parameters: | ||
| 86 | <section id="eltf-target-table-ELTF_T_MANIFEST_DIR"> | ||
| 87 | <title>MACHINE ELTF_T_MANIFEST_DIR - Information</title> | ||
| 88 | ..... with many ELTF_ variables .... | ||
| 89 | </section> | ||
| 90 | |||
| 91 | 15. If there is only one target. ELTF just replaces ELTF parameters | ||
| 92 | |||
| 93 | 16. It there are multiple targets. ELTF copies the section and appends the | ||
| 94 | section the required number of times. | ||
| 95 | Each section ID will become unique: eltf-target-table-ELTF_T_MANIFEST_DIR | ||
| 96 | Each section title will become unique | ||
| 97 | |||
| 98 | Tables with target parameters in each target section: | ||
| 99 | 17. It is possible for ELTF to append more rows with one parameter each | ||
| 100 | to these tables, because the entire tables are included in the book | ||
| 101 | |||
| 102 | Special - NOT YET READY DEFINED how to handle the optionally included | ||
| 103 | Eclipse and its version, but this is a first suggestion: | ||
| 104 | 18. Just now ELTF can define ELFT_ECLIPSE_VERSION as a full string | ||
| 105 | with both version number and name, | ||
| 106 | 19. MANUALLY if Eclipse is NOT included in the release, | ||
| 107 | the release manager should manually set condition="hidden" on | ||
| 108 | the entire section in the book XML about Eclipse | ||
| 109 | |||
| 110 | |||
| 111 | |||
| 112 | BELOW WE TRY TO EXPLAIN EACH ELTF_* variable, but always check with make eltf | ||
| 113 | if there are more new variables, missing in this description file. | ||
| 114 | |||
| 115 | _____________________________________________________________________________ | ||
| 116 | ELTF_PL_HOST_PREREQ Multiline list of host prerequisites, e.g. commands | ||
| 117 | like sudo apt-get install xxxx or similar. | ||
| 118 | First line = comment with the complete host name! | ||
| 119 | It is possible to include multiple hosts by just | ||
| 120 | adding an empty line, comment with host name, etc. | ||
| 121 | xi:include eltf-prereq-apt-get-commands-host/1 | ||
| 122 | This is a <programlisting>...</programlisting> | ||
| 123 | Example: | ||
| 124 | # Host Ubuntu 14.04.5 LTS 64bit | ||
| 125 | sudo apt-get update | ||
| 126 | sudo apt-get install sed wget subversion git-core coreutils unzip texi2html \ | ||
| 127 | texinfo libsdl1.2-dev docbook-utils fop gawk python-pysqlite2 diffstat \ | ||
| 128 | make gcc build-essential xsltproc g++ desktop-file-utils chrpath \ | ||
| 129 | libgl1-mesa-dev libglu1-mesa-dev autoconf automake groff libtool xterm \ | ||
| 130 | libxml-parser-perl | ||
| 131 | |||
| 132 | _____________________________________________________________________________ | ||
| 133 | ELTF_PL_GET_REPO Multiline commands to download the repo tool | ||
| 134 | xi:include eltf-getting-repo-install-command/1 | ||
| 135 | This is a <programlisting>...</programlisting> | ||
| 136 | Example: | ||
| 137 | mkdir -p ~/bin | ||
| 138 | curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo | ||
| 139 | chmod a+x ~/bin/repo | ||
| 140 | export PATH=~/bin:$PATH | ||
| 141 | |||
| 142 | _____________________________________________________________________________ | ||
| 143 | ELTF_EL_REL_VER General parameter string: The version of this Enea | ||
| 144 | Linux release. Major version and optional .Minor | ||
| 145 | Typically created from MAJOR and MINOR in enea.conf | ||
| 146 | MINOR in enea.conf is empty or contains a dot+minor | ||
| 147 | xi_include EneaLinux_REL_VER/1 | ||
| 148 | This is a <phrase>X.x</phrase> used in many places. | ||
| 149 | Examples: | ||
| 150 | 6 | ||
| 151 | or | ||
| 152 | 6.1 | ||
| 153 | |||
| 154 | _____________________________________________________________________________ | ||
| 155 | ELTF_YOCTO_VER General parameter string: Yocto version, created | ||
| 156 | from DISTRO in poky.ent | ||
| 157 | xi:include Yocto_VER/1 | ||
| 158 | This is a <phrase>X.x</phrase> used in many places. | ||
| 159 | Example: | ||
| 160 | 2.1 | ||
| 161 | |||
| 162 | _____________________________________________________________________________ | ||
| 163 | ELTF_YOCTO_NAME General parameter string: Yocto name (branch), created | ||
| 164 | from DISTRO_NAME_NO_CAP in poky.ent | ||
| 165 | xi:include Yocto_NAME/1 | ||
| 166 | This is a <phrase>X.x</phrase> used in many places. | ||
| 167 | Example: | ||
| 168 | krogoth | ||
| 169 | |||
| 170 | _____________________________________________________________________________ | ||
| 171 | ELTF_YOCTO_PROJ_DOWNLOAD_TXTURL General parameters. These two are IDENTICAL | ||
| 172 | ELTF_YOCTO_PROJ_DOWNLOAD_URL strings with correct Yocto version string | ||
| 173 | at the end, typically without "dot". | ||
| 174 | xi:include ULINK_YOCTO_PROJECT_DOWNLOAD/1 | ||
| 175 | This is an <ulink url="...">...</ulink> | ||
| 176 | Example: | ||
| 177 | http://www.yoctoproject.org/downloads/core/krogoth/21 | ||
| 178 | |||
| 179 | _____________________________________________________________________________ | ||
| 180 | ELTF_EL_DOWNLOAD_TXTURL General parameters. These two are IDENTICAL strings | ||
| 181 | ELTF_EL_DOWNLOAD_URL and shall be the http:/..... address where | ||
| 182 | Enea NFV Access can be downloaded | ||
| 183 | Often containing same version as in ELTF_EL_REL_VER | ||
| 184 | xi:include ULINK_ENEA_LINUX_URL/1 | ||
| 185 | This is an <ulink url="...">...</ulink> | ||
| 186 | Example: | ||
| 187 | http://linux.enea.com/6 | ||
| 188 | |||
| 189 | _____________________________________________________________________________ | ||
| 190 | ELTF_PL_CLONE_W_REPO Multiline commands to run repo to clone everything. | ||
| 191 | Use the variable $MACHINE/default.xml (the text in | ||
| 192 | the book will list the avaiable values of MACHINE, | ||
| 193 | taken from the manifest repository) | ||
| 194 | xi:include eltf-repo-cloning-enea-linux/1 | ||
| 195 | This is a <programlisting>...</programlisting> | ||
| 196 | Example: | ||
| 197 | mkdir enea-linux | ||
| 198 | cd enea-linux | ||
| 199 | repo init -u git://git.enea.com/linux/el_manifests-standard.git \ | ||
| 200 | -b refs/tags/EL6 -m $MACHINE/default.xml | ||
| 201 | repo sync | ||
| 202 | |||
| 203 | _____________________________________________________________________________ | ||
| 204 | ELTF_ECLIPSE_VERSION Optional general parameter string. | ||
| 205 | NOT YET READY DEFINED | ||
| 206 | Just now a release manage must manually set | ||
| 207 | condition="hidden" on the Eclipse section, | ||
| 208 | if Eclipse is not included in the release. | ||
| 209 | ELTF just replaces ELTF_ECLIPSE_VERSION with a full | ||
| 210 | string with "X.Y (name)" | ||
| 211 | It includes the ID and can only be ONCE in the book. | ||
| 212 | xi:include eltf-eclipse-version-row | ||
| 213 | Example. | ||
| 214 | 4.5 (Mars) | ||
| 215 | |||
| 216 | |||
| 217 | _____________________________________________________________________________ | ||
| 218 | ELTF_T_* All these are in each target (MACHINE) and ELTF | ||
| 219 | must separately replace them with strings for | ||
| 220 | each target | ||
| 221 | NOTE: All (except the MANIFEST_DIR) are in rows | ||
| 222 | in a table and ELTF can select to append | ||
| 223 | more parameters by adding more rows | ||
| 224 | |||
| 225 | _____________________________________________________________________________ | ||
| 226 | ELTF_T_MANIFEST_DIR This happens to be in two places. Must be exactly | ||
| 227 | ELTF_T_MANIFEST_DIR the directory name in the manifest, e.g. same | ||
| 228 | as the MACHINE names in $MACHINE/default.xml. | ||
| 229 | In book: a) Part of section ID | ||
| 230 | b) Part of section title | ||
| 231 | Examples: | ||
| 232 | p2041rgb | ||
| 233 | or | ||
| 234 | ls1021aiot | ||
| 235 | or | ||
| 236 | qemuarm | ||
| 237 | |||
| 238 | _____________________________________________________________________________ | ||
| 239 | ELTF_T_NAME Target specific: "Target Official Name" | ||
| 240 | NOT same as the target directory name in most cases. | ||
| 241 | In book: An <entry> element in a row | ||
| 242 | Examples: | ||
| 243 | P2041RGB | ||
| 244 | or | ||
| 245 | LS1021a-IoT | ||
| 246 | or | ||
| 247 | qemuarm | ||
| 248 | |||
| 249 | _____________________________________________________________________________ | ||
| 250 | ELTF_T_ARC_DESC Target specific: "Architecture and Description" | ||
| 251 | It can be a short identification string or | ||
| 252 | it can be a longer descriptive sentence. | ||
| 253 | In book: An <entry> element in a row | ||
| 254 | Examples: | ||
| 255 | Power, e500mc | ||
| 256 | or | ||
| 257 | ARM Cortex-A7 | ||
| 258 | |||
| 259 | _____________________________________________________________________________ | ||
| 260 | ELTF_T_DS_TXTURL Target specific: "Link to target datasheet. These | ||
| 261 | ELTF_T_DS_URL two usually are IDENTICAL strings with correct | ||
| 262 | hyperlink to the target's official datasheet. | ||
| 263 | In book: an <ulink url="...">...</ulink> | ||
| 264 | Only if the link is VERY LONG, the text part shall | ||
| 265 | instead be a descriptive string (see 2:nd example). | ||
| 266 | NOTE: Also here no spaces or line-feeds! | ||
| 267 | Examples: | ||
| 268 | url="http://wiki.qemu.org">http://wiki.qemu.org | ||
| 269 | or | ||
| 270 | url="http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/qoriq-arm-processors/qoriq-ls1021a-iot-gateway-reference-design:LS1021A-IoT">link to NXP's datasheet | ||
| 271 | |||
| 272 | _____________________________________________________________________________ | ||
| 273 | ELTF_T_POKY_VER Target specific: "Poky version" created either | ||
| 274 | from POKYVERSION in poky.ent | ||
| 275 | or using a hashvalue with a leading string, in | ||
| 276 | which case it may be different per target. | ||
| 277 | In book: An <entry> in a row | ||
| 278 | Examples: | ||
| 279 | 15.0.0 | ||
| 280 | or | ||
| 281 | Git commit id: 75ca53211488a3e268037a44ee2a7ac5c7181bd2 | ||
| 282 | |||
| 283 | _____________________________________________________________________________ | ||
| 284 | ELTF_T_GCC_VER Target specific: "GCC Version". Should be in poky | ||
| 285 | but not easy to find among various parameters. | ||
| 286 | ELTF would extract it from build logs building SDK | ||
| 287 | and it is possibly different per target. | ||
| 288 | In book: An <entry> in a row | ||
| 289 | Example: | ||
| 290 | 5.3 | ||
| 291 | |||
| 292 | _____________________________________________________________________________ | ||
| 293 | ELTF_T_KERN_VER Target specific: "Linux Kernel Version". Often | ||
| 294 | different per target. | ||
| 295 | In book: An <entry> in a row | ||
| 296 | Example: | ||
| 297 | 3.12 | ||
| 298 | |||
| 299 | _____________________________________________________________________________ | ||
| 300 | ELTF_T_DRIVERS Target specific: "Supported Drivers". This is a | ||
| 301 | comma-separated list of driver names. | ||
| 302 | ELTF should create the list in same order for each | ||
| 303 | target, e.g. alphabetic migth be OK. | ||
| 304 | In book: An <entry> in a row | ||
| 305 | Example: | ||
| 306 | Ethernet, I2C, SPI, PCI, USB, SD/SDHC/SDXC | ||
| 307 | |||
| 308 | |||
| 309 | _____________________________________________________________________________ | ||
| 310 | ELTF_T_EL_RPM_TXTURL Target specific: "Enea rpm folder for downloading | ||
| 311 | ELTF_T_EL_RPM_URL RPM packages for this target". These two are | ||
| 312 | INDENTICAL strings with hyperlink to the web site | ||
| 313 | at Enea where the customer can download RPMs | ||
| 314 | Note: Often the ELFT_EL_REL_VER value and | ||
| 315 | the ELTF_T_MANIFEST_DIR are used in the link. | ||
| 316 | In book: an <ulink url="...">...</ulink> | ||
| 317 | Example: | ||
| 318 | url="https://linux.enea.com/6/ls1021aiot/rpm">https://linux.enea.com/6/ls1021aiot/rpm | ||
| 319 | |||
| 320 | _____________________________________________________________________________ | ||
diff --git a/doc/book-enea-nfv-access-dev-hardening-guide/doc/hardening_checklist.xml b/doc/book-enea-nfv-access-dev-hardening-guide/doc/hardening_checklist.xml new file mode 100644 index 0000000..2e008e3 --- /dev/null +++ b/doc/book-enea-nfv-access-dev-hardening-guide/doc/hardening_checklist.xml | |||
| @@ -0,0 +1,952 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
| 4 | <chapter id="hardening_platform"> | ||
| 5 | <title>Hardening Enea NFV Access</title> | ||
| 6 | |||
| 7 | <section id="broken_algorithms"> | ||
| 8 | <title>Broken Algorithms</title> | ||
| 9 | |||
| 10 | <para>Make sure that algorithms that are broken in regards to security are | ||
| 11 | not used.</para> | ||
| 12 | |||
| 13 | <remark>Ask Sona/Casc if the algorithms listed below are the broken ones | ||
| 14 | to check for or if they're the ones that are broken to begin with and if | ||
| 15 | seen should be eliminated from use.</remark> | ||
| 16 | |||
| 17 | <itemizedlist> | ||
| 18 | <listitem> | ||
| 19 | <para>DES</para> | ||
| 20 | </listitem> | ||
| 21 | |||
| 22 | <listitem> | ||
| 23 | <para>3DES</para> | ||
| 24 | </listitem> | ||
| 25 | |||
| 26 | <listitem> | ||
| 27 | <para>CAST</para> | ||
| 28 | </listitem> | ||
| 29 | |||
| 30 | <listitem> | ||
| 31 | <para>BLOWFISH</para> | ||
| 32 | </listitem> | ||
| 33 | |||
| 34 | <listitem> | ||
| 35 | <para>MD5</para> | ||
| 36 | </listitem> | ||
| 37 | |||
| 38 | <listitem> | ||
| 39 | <para>SHA-1</para> | ||
| 40 | </listitem> | ||
| 41 | |||
| 42 | <listitem> | ||
| 43 | <para>MODP512</para> | ||
| 44 | </listitem> | ||
| 45 | |||
| 46 | <listitem> | ||
| 47 | <para>MODP768</para> | ||
| 48 | </listitem> | ||
| 49 | |||
| 50 | <listitem> | ||
| 51 | <para>MODP1024</para> | ||
| 52 | </listitem> | ||
| 53 | </itemizedlist> | ||
| 54 | </section> | ||
| 55 | |||
| 56 | <section id="sys_installation"> | ||
| 57 | <title>System Installation</title> | ||
| 58 | |||
| 59 | <para>Enea NFV Access Images should be check summed with SHA512 and/or a | ||
| 60 | signed GPG key. See <ulink | ||
| 61 | url="https://www.openssl.org/source/">https://www.openssl.org/source/</ulink> | ||
| 62 | for more details on how to proceed.</para> | ||
| 63 | </section> | ||
| 64 | |||
| 65 | <section id="security_updates"> | ||
| 66 | <title>Security Updates</title> | ||
| 67 | |||
| 68 | <para>Applying security patches is an important part of security hardening | ||
| 69 | and maintenance. Enea backports all known critical vulnerabilities within | ||
| 70 | a reasonable time frame if not immeditately, and makes them available to | ||
| 71 | users for updates/upgrades.</para> | ||
| 72 | |||
| 73 | <para>Prepare the system for regular updates in the following | ||
| 74 | manner:</para> | ||
| 75 | |||
| 76 | <itemizedlist> | ||
| 77 | <listitem> | ||
| 78 | <para>Configure the target to get software updates from the Enea | ||
| 79 | source repository.</para> | ||
| 80 | </listitem> | ||
| 81 | |||
| 82 | <listitem> | ||
| 83 | <para>Test to update or remove a package using apt-get command: | ||
| 84 | <programlisting>root@inteld1521:~#apt-get update/upgrade</programlisting></para> | ||
| 85 | </listitem> | ||
| 86 | </itemizedlist> | ||
| 87 | </section> | ||
| 88 | |||
| 89 | <section id="openembedded_security_layer"> | ||
| 90 | <title>OpenEmbedded meta-security layer</title> | ||
| 91 | |||
| 92 | <para>An OpenEmbedded meta-security layer provides many hardening tools. | ||
| 93 | These tools are open source packages suited for embedded devices. Below is | ||
| 94 | a list of several packages included in meta-security layer:</para> | ||
| 95 | |||
| 96 | <itemizedlist> | ||
| 97 | <listitem> | ||
| 98 | <para>Bastille</para> | ||
| 99 | </listitem> | ||
| 100 | |||
| 101 | <listitem> | ||
| 102 | <para>Redhat-security</para> | ||
| 103 | </listitem> | ||
| 104 | |||
| 105 | <listitem> | ||
| 106 | <para>Buck-security</para> | ||
| 107 | </listitem> | ||
| 108 | |||
| 109 | <listitem> | ||
| 110 | <para>Libseccomp</para> | ||
| 111 | </listitem> | ||
| 112 | |||
| 113 | <listitem> | ||
| 114 | <para>Pax-utils</para> | ||
| 115 | </listitem> | ||
| 116 | |||
| 117 | <listitem> | ||
| 118 | <para>Nmap</para> | ||
| 119 | </listitem> | ||
| 120 | |||
| 121 | <listitem> | ||
| 122 | <para>ISIC</para> | ||
| 123 | </listitem> | ||
| 124 | |||
| 125 | <listitem> | ||
| 126 | <para>Tripwire</para> | ||
| 127 | </listitem> | ||
| 128 | |||
| 129 | <listitem> | ||
| 130 | <para>checksecurity</para> | ||
| 131 | </listitem> | ||
| 132 | |||
| 133 | <listitem> | ||
| 134 | <para>TOMOYO, which contains a number of very useful libraries for | ||
| 135 | system analysis. <remark>Ask Sona if this is the intended meaning of | ||
| 136 | what she wrote here originally: TOMOYO and a number of libraries which | ||
| 137 | is very useful system analysis tool</remark></para> | ||
| 138 | </listitem> | ||
| 139 | </itemizedlist> | ||
| 140 | |||
| 141 | <para>For more information about tools supported in the meta-security | ||
| 142 | layer please refer to <emphasis role="bold">Introduction to the Tools in | ||
| 143 | meta-security layer</emphasis>.</para> | ||
| 144 | |||
| 145 | <remark>change the bold text to point to the section/chapter in question | ||
| 146 | through an xref</remark> | ||
| 147 | </section> | ||
| 148 | |||
| 149 | <section id="ker-hardening"> | ||
| 150 | <title>Kernel Hardening</title> | ||
| 151 | |||
| 152 | <para>For a secure set of build CONFIGs and runtime settings see the | ||
| 153 | <ulink | ||
| 154 | url="https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings">Kernel | ||
| 155 | Self Protection Project</ulink>. Essentially, there are three ways to pass | ||
| 156 | options to the kernel:</para> | ||
| 157 | |||
| 158 | <itemizedlist> | ||
| 159 | <listitem> | ||
| 160 | <para>When building the kernel (via | ||
| 161 | <command>menuconfig</command>)</para> | ||
| 162 | </listitem> | ||
| 163 | |||
| 164 | <listitem> | ||
| 165 | <para>When starting the kernel (usually, when invoked from a boot | ||
| 166 | loader).</para> | ||
| 167 | </listitem> | ||
| 168 | |||
| 169 | <listitem> | ||
| 170 | <para>At runtime (through the files in <command>/proc</command> and | ||
| 171 | <command>/sys</command>). See <command>sysctl</command> for | ||
| 172 | details.</para> | ||
| 173 | </listitem> | ||
| 174 | </itemizedlist> | ||
| 175 | |||
| 176 | <para>Parameters either have the format <literal>parameter</literal> or | ||
| 177 | <literal>parameter=value</literal>. Kernel parameters can be configured | ||
| 178 | via <command>/etc/sysctl.conf</command> at run time or via | ||
| 179 | <command>menuconfig</command> at build time.</para> | ||
| 180 | |||
| 181 | <orderedlist> | ||
| 182 | <listitem> | ||
| 183 | <para>How to enable/disable kernel parameters via menuconfig:</para> | ||
| 184 | |||
| 185 | <itemizedlist> | ||
| 186 | <listitem> | ||
| 187 | <para>bitbake virtual/kernel –c menuconfig</para> | ||
| 188 | </listitem> | ||
| 189 | |||
| 190 | <listitem> | ||
| 191 | <para>Enable the configuration you want, save the .config file in | ||
| 192 | the build directory, and run bitbake.</para> | ||
| 193 | </listitem> | ||
| 194 | </itemizedlist> | ||
| 195 | |||
| 196 | <para>For more info see <ulink | ||
| 197 | url="http://www.tldp.org/HOWTO/SCSI-2.4-HOWTO/kconfig.html">http://www.tldp.org/HOWTO/SCSI-2.4-HOWTO/kconfig.html</ulink>.</para> | ||
| 198 | </listitem> | ||
| 199 | |||
| 200 | <listitem> | ||
| 201 | <para>Permanently add a Kernel Boot Parameter from boot loader:</para> | ||
| 202 | |||
| 203 | <para><programlisting>sudo gedit /etc/default/grub</programlisting></para> | ||
| 204 | |||
| 205 | <para>Enter your password when prompted by sudo. If the file | ||
| 206 | <command>/etc/default/grub</command> appears to be empty or does not | ||
| 207 | exist, see the instructions for earlier releases above.</para> | ||
| 208 | </listitem> | ||
| 209 | |||
| 210 | <listitem> | ||
| 211 | <para>Using <command>etc/sysctl.conf</command>:</para> | ||
| 212 | |||
| 213 | <para>We can view the value of a particular Linux kernel parameter | ||
| 214 | using sysctl, followed by the name of the parameter:</para> | ||
| 215 | |||
| 216 | <programlisting>root@inteld1521:~# sysctl dev.cdrom.autoclose | ||
| 217 | dev.cdrom.autoclose = 1</programlisting> | ||
| 218 | |||
| 219 | <para>Or read the associated file:</para> | ||
| 220 | |||
| 221 | <programlisting>root@inteld1521:~# cat /proc/sys/dev/cdrom/autoclose | ||
| 222 | 1 | ||
| 223 | root@inteld1521:~# cat /proc/sys/dev/cdrom/</programlisting> | ||
| 224 | |||
| 225 | <para>It is good to store the output of the kernel settings for | ||
| 226 | comparison or reference by redirecting the output of the sysctl | ||
| 227 | command to a file, for example:</para> | ||
| 228 | |||
| 229 | <programlisting>sysctl -A > /root/sysctl.settings.store</programlisting> | ||
| 230 | </listitem> | ||
| 231 | </orderedlist> | ||
| 232 | |||
| 233 | <para>The following kernel configurations can be used to secure the Linux | ||
| 234 | system against attacks.</para> | ||
| 235 | |||
| 236 | <programlisting># Turn on execshield | ||
| 237 | kernel.exec-shield=1 | ||
| 238 | kernel.randomize_va_space=1 | ||
| 239 | |||
| 240 | # Enable IP spoofing protection | ||
| 241 | net.ipv4.conf.all.rp_filter=1 | ||
| 242 | |||
| 243 | # Disable IP source routing | ||
| 244 | net.ipv4.conf.all.accept_source_route=0 | ||
| 245 | |||
| 246 | # Ignore broadcasts request | ||
| 247 | net.ipv4.icmp_echo_ignore_broadcasts=1 | ||
| 248 | net.ipv4.icmp_ignore_bogus_error_messages=1 | ||
| 249 | |||
| 250 | # Make sure spoofed packets get logged | ||
| 251 | net.ipv4.conf.all.log_martians = 1</programlisting> | ||
| 252 | |||
| 253 | <section id="security-options"> | ||
| 254 | <title>Security Options</title> | ||
| 255 | |||
| 256 | <itemizedlist> | ||
| 257 | <listitem> | ||
| 258 | <para>SECURITY</para> | ||
| 259 | |||
| 260 | <itemizedlist> | ||
| 261 | <listitem> | ||
| 262 | <para>(on/off) Enable different security models</para> | ||
| 263 | </listitem> | ||
| 264 | |||
| 265 | <listitem> | ||
| 266 | <para>Depends on SYSFS</para> | ||
| 267 | </listitem> | ||
| 268 | </itemizedlist> | ||
| 269 | |||
| 270 | <para>This option allows you to choose different security modules to | ||
| 271 | configure into your kernel. If this option is not selected, the | ||
| 272 | default Linux security model will be used.</para> | ||
| 273 | </listitem> | ||
| 274 | |||
| 275 | <listitem> | ||
| 276 | <para>SECURITY_NETWORK</para> | ||
| 277 | |||
| 278 | <itemizedlist> | ||
| 279 | <listitem> | ||
| 280 | <para>(on/off) Socket and Networking Security Hooks</para> | ||
| 281 | </listitem> | ||
| 282 | |||
| 283 | <listitem> | ||
| 284 | <para>Depends on SECURITY</para> | ||
| 285 | </listitem> | ||
| 286 | </itemizedlist> | ||
| 287 | |||
| 288 | <para>This enables the socket and networking security hooks. If | ||
| 289 | enabled, a security module can use these hooks to implement socket | ||
| 290 | and networking access controls. If you are unsure how to answer this | ||
| 291 | question, answer N.</para> | ||
| 292 | </listitem> | ||
| 293 | |||
| 294 | <listitem> | ||
| 295 | <para>SECURITY_CAPABILITIES</para> | ||
| 296 | |||
| 297 | <itemizedlist> | ||
| 298 | <listitem> | ||
| 299 | <para>Kernel Version(s): 2.6.15.6</para> | ||
| 300 | </listitem> | ||
| 301 | |||
| 302 | <listitem> | ||
| 303 | <para>(on/off/module) Default Linux Capabilities</para> | ||
| 304 | </listitem> | ||
| 305 | |||
| 306 | <listitem> | ||
| 307 | <para>Depends on SECURITY</para> | ||
| 308 | </listitem> | ||
| 309 | </itemizedlist> | ||
| 310 | |||
| 311 | <para>This enables the "default" Linux capabilities | ||
| 312 | functionality.</para> | ||
| 313 | </listitem> | ||
| 314 | |||
| 315 | <listitem> | ||
| 316 | <para>SECURITY_ROOTPLUG</para> | ||
| 317 | |||
| 318 | <itemizedlist> | ||
| 319 | <listitem> | ||
| 320 | <para>Kernel Version(s): 2.6.15.6</para> | ||
| 321 | </listitem> | ||
| 322 | |||
| 323 | <listitem> | ||
| 324 | <para>(on/off/module) Root Plug Support</para> | ||
| 325 | </listitem> | ||
| 326 | |||
| 327 | <listitem> | ||
| 328 | <para>depends on USB && SECURITY</para> | ||
| 329 | </listitem> | ||
| 330 | </itemizedlist> | ||
| 331 | |||
| 332 | <para>This is a sample LSM module that should only be used as such. | ||
| 333 | It prevents any programs running with <command>egid == 0</command> | ||
| 334 | if a specific USB device is not present in the system.</para> | ||
| 335 | </listitem> | ||
| 336 | |||
| 337 | <listitem> | ||
| 338 | <para>SECURITY_SECLVL</para> | ||
| 339 | |||
| 340 | <itemizedlist> | ||
| 341 | <listitem> | ||
| 342 | <para>Kernel Version(s): 2.6.15.6</para> | ||
| 343 | </listitem> | ||
| 344 | |||
| 345 | <listitem> | ||
| 346 | <para>(on/off/module) BSD Secure Levels</para> | ||
| 347 | </listitem> | ||
| 348 | |||
| 349 | <listitem> | ||
| 350 | <para>Depends on SECURITY</para> | ||
| 351 | </listitem> | ||
| 352 | |||
| 353 | <listitem> | ||
| 354 | <para>select CRYPTO</para> | ||
| 355 | </listitem> | ||
| 356 | |||
| 357 | <listitem> | ||
| 358 | <para>select CRYPTO_SHA1</para> | ||
| 359 | </listitem> | ||
| 360 | </itemizedlist> | ||
| 361 | |||
| 362 | <para>Implements BSD Secure Levels as an LSM. See file | ||
| 363 | <command>Documentation/seclvl.txt</command> for instructions on how | ||
| 364 | to use this module.</para> | ||
| 365 | </listitem> | ||
| 366 | </itemizedlist> | ||
| 367 | </section> | ||
| 368 | |||
| 369 | <section id="config_stackprotector"> | ||
| 370 | <title>Stack Protector (-fstack-protector GCC feature)</title> | ||
| 371 | |||
| 372 | <para><programlisting>CONFIG_CC_STACKPROTECTOR | ||
| 373 | CONFIG_CC_STACKPROTECTOR_REGULAR | ||
| 374 | CONFIG_CC_STACKPROTECTOR_STRONG</programlisting>This option turns on the | ||
| 375 | <command>-fstack-protector</command> GCC feature. This feature inserts a | ||
| 376 | canary value on the stack just before the return address, and validates | ||
| 377 | the value just before returning. Stack based buffer overflows (that need | ||
| 378 | to overwrite this return address) will now also overwrite the canary, | ||
| 379 | which gets detected and the attack is then neutralized via a kernel | ||
| 380 | panic. This feature requires gcc version 4.2 or above.</para> | ||
| 381 | |||
| 382 | <itemizedlist> | ||
| 383 | <listitem> | ||
| 384 | <para>prompt: Enable -fstack-protector buffer overflow detection | ||
| 385 | (EXPERIMENTAL)</para> | ||
| 386 | </listitem> | ||
| 387 | |||
| 388 | <listitem> | ||
| 389 | <para>type: bool</para> | ||
| 390 | </listitem> | ||
| 391 | |||
| 392 | <listitem> | ||
| 393 | <para>depends on: (none)</para> | ||
| 394 | </listitem> | ||
| 395 | |||
| 396 | <listitem> | ||
| 397 | <para>defined in arch/arm/Kconfig</para> | ||
| 398 | </listitem> | ||
| 399 | |||
| 400 | <listitem> | ||
| 401 | <para>found in Linux kernels: 2.6.36–2.6.39, | ||
| 402 | 3.0–3.13</para> | ||
| 403 | </listitem> | ||
| 404 | </itemizedlist> | ||
| 405 | |||
| 406 | <para>Currently these configurations are not set in the Intel kernel in | ||
| 407 | Enea NFV Access:<programlisting>tmp/deploy/images/inteld1521/config-inteld1521.config | ||
| 408 | |||
| 409 | CONFIG_CC_STACKPROTECTOR is not set | ||
| 410 | CONFIG_CC_STACKPROTECTOR_REGULAR is not set | ||
| 411 | CONFIG_CC_STACKPROTECTOR_STRONG is not set</programlisting></para> | ||
| 412 | </section> | ||
| 413 | |||
| 414 | <section id="config-freelist-random"> | ||
| 415 | <title>CONFIG_FREELIST_RANDOM</title> | ||
| 416 | |||
| 417 | <para>An optional config to randomize the SLAB freelist (heap freelist). | ||
| 418 | SLAB is a memory management mechanism intended for the efficient memory | ||
| 419 | allocation of kernel objects. SLAB displays the desirable property of | ||
| 420 | eliminating fragmentation caused by allocations and | ||
| 421 | deallocations.</para> | ||
| 422 | |||
| 423 | <para>This security feature reduces the predictability of the kernel | ||
| 424 | slab allocator against heap overflows.</para> | ||
| 425 | </section> | ||
| 426 | |||
| 427 | <section id="config_page_poisoning"> | ||
| 428 | <title>CONFIG_PAGE_POISONING</title> | ||
| 429 | |||
| 430 | <para>This feature fills the pages with poison patterns after | ||
| 431 | <literal>free_pages()</literal> and verifies the patterns before | ||
| 432 | <literal>alloc_pages()</literal>. This results in a large slowdown, but | ||
| 433 | helps to find certain types of memory corruption.</para> | ||
| 434 | |||
| 435 | <para>This option cannot be enabled in combination with hibernation as | ||
| 436 | that would result in incorrect warnings of memory corruption after a | ||
| 437 | resume, since free pages are not saved to the suspend image. Poison | ||
| 438 | pages after freeing are found in | ||
| 439 | <literal>mm/Kconfig.debug</literal>.</para> | ||
| 440 | |||
| 441 | <para>The configuration item CONFIG_PAGE_POISONING:</para> | ||
| 442 | |||
| 443 | <itemizedlist> | ||
| 444 | <listitem> | ||
| 445 | <para>prompt: Poison pages after freeing</para> | ||
| 446 | </listitem> | ||
| 447 | |||
| 448 | <listitem> | ||
| 449 | <para>type: bool</para> | ||
| 450 | </listitem> | ||
| 451 | |||
| 452 | <listitem> | ||
| 453 | <para>depends on: (none)</para> | ||
| 454 | </listitem> | ||
| 455 | |||
| 456 | <listitem> | ||
| 457 | <para>defined in <ulink | ||
| 458 | url="https://github.com/torvalds/linux/tree/master/mm/Kconfig.debug">mm/Kconfig.debug</ulink></para> | ||
| 459 | </listitem> | ||
| 460 | |||
| 461 | <listitem> | ||
| 462 | <para>found in Linux kernels: 4.6–4.12, 4.13-rc+HEAD</para> | ||
| 463 | </listitem> | ||
| 464 | </itemizedlist> | ||
| 465 | </section> | ||
| 466 | |||
| 467 | <section id="config_hardened_usercopy"> | ||
| 468 | <title>CONFIG_HARDENED_USERCOPY</title> | ||
| 469 | |||
| 470 | <para><programlisting>CONFIG_HARDENED_USERCOPY | ||
| 471 | CONFIG_HARDENED_USERCOPY_PAGESPAN</programlisting>This configuration checks | ||
| 472 | that objects being copied to/from user space meet certain | ||
| 473 | criteria.</para> | ||
| 474 | </section> | ||
| 475 | |||
| 476 | <section id="config_stackprotector_strong"> | ||
| 477 | <title>CONFIG_CC_STACKPROTECTOR_STRONG</title> | ||
| 478 | |||
| 479 | <para><command>CONFIG_CC_STACKPROTECTOR_STRONG=y</command>, is a more | ||
| 480 | powerful stack canary checking method supported by GCC versions 4.9 and | ||
| 481 | later. On an x86 "defconfig" build, this feature adds canary checks to | ||
| 482 | about 20% of all kernel functions, which increases the kernel code size | ||
| 483 | by about 2%.</para> | ||
| 484 | |||
| 485 | <para>More info about this feature can be found at <ulink | ||
| 486 | url="https://lwn.net/Articles/584278/">https://lwn.net/Articles/584278/</ulink>.</para> | ||
| 487 | </section> | ||
| 488 | |||
| 489 | <section id="config_randomize_base"> | ||
| 490 | <title>CONFIG_RANDOMIZE_BASE</title> | ||
| 491 | |||
| 492 | <para><command>CONFIG_RANDOMIZE_BASE</command> with physical memory | ||
| 493 | randomization, extends kernel image physical address randomization to | ||
| 494 | addresses larger than 4GB, among other improvements.</para> | ||
| 495 | </section> | ||
| 496 | |||
| 497 | <section id="config_randomize_memory"> | ||
| 498 | <title>CONFIG_RANDOMIZE_MEMORY</title> | ||
| 499 | |||
| 500 | <para><command>CONFIG_RANDOMIZE_MEMORY</command> randomizes the virtual | ||
| 501 | addresses of memory sections, including physical memory mappings: | ||
| 502 | <command>vmalloc</command>, and <command>vemmap</command>. As with other | ||
| 503 | memory randomization routines, by randomizing the virtual address space | ||
| 504 | of kernel memory sections, the goal is to mitigate predictable memory | ||
| 505 | locations.</para> | ||
| 506 | </section> | ||
| 507 | </section> | ||
| 508 | |||
| 509 | <section id="os_hardening"> | ||
| 510 | <title>OS Hardening</title> | ||
| 511 | |||
| 512 | <para>The sections below detail various ways in which a developer can | ||
| 513 | effectively secure their operating system(s).</para> | ||
| 514 | |||
| 515 | <section id="removing_root_account"> | ||
| 516 | <title>Remove root account</title> | ||
| 517 | |||
| 518 | <para>Create a default user with <command>su</command> access and then | ||
| 519 | use <literal>sudo</literal> to delegate administrative access.</para> | ||
| 520 | </section> | ||
| 521 | |||
| 522 | <section id="syslog-rsyslog"> | ||
| 523 | <title>Rsyslog, Syslog, Syslogng Service</title> | ||
| 524 | |||
| 525 | <para>Rsyslog is the default logging program on several Linux | ||
| 526 | distributions. Apart from implementing the syslog protocol, rsyslog adds | ||
| 527 | additional features such as content-based filtering and also uses TCP | ||
| 528 | for transporting, providing many configuration options. Further reading | ||
| 529 | is available at <ulink | ||
| 530 | url="https://linux-audit.com/central-audit-logging-configuration-collecting-linux-audit-events/">https://linux-audit.com/central-audit-logging-configuration-collecting-linux-audit-events/</ulink>.</para> | ||
| 531 | </section> | ||
| 532 | |||
| 533 | <section id="unnecessary_packages"> | ||
| 534 | <title>Removing unnecessary Packages</title> | ||
| 535 | |||
| 536 | <para>Enea provides a minimum set of packages in release images. All | ||
| 537 | extra packages should be available in the Enea source repository so | ||
| 538 | users can get when needed.</para> | ||
| 539 | |||
| 540 | <remark>Ask Sona/Casc for details on what should be definitively written | ||
| 541 | in this section</remark> | ||
| 542 | </section> | ||
| 543 | |||
| 544 | <section id="disk-iso-prot"> | ||
| 545 | <title>Disk Isolation and Protection</title> | ||
| 546 | |||
| 547 | <para>Critical systems should be separated into different partitions. An | ||
| 548 | example to start from would be:</para> | ||
| 549 | |||
| 550 | <para><programlisting>/ | ||
| 551 | /boot | ||
| 552 | /usr | ||
| 553 | /home | ||
| 554 | /tmp | ||
| 555 | /var</programlisting></para> | ||
| 556 | |||
| 557 | <para>Create a separate volume with the <command>nodev</command>, | ||
| 558 | <command>nosuid</command>, and <command>noexec</command> options set for | ||
| 559 | <command>/tmp</command>. <command>/tmp</command> is intended to be | ||
| 560 | globally writable, creating a separate partition for it can prevent | ||
| 561 | resource exhaustion.</para> | ||
| 562 | |||
| 563 | <para>Setting <command>nodev</command> prevents users from creating or | ||
| 564 | using block or special character devices. Setting | ||
| 565 | <command>noexec</command> prevents users from running binary executables | ||
| 566 | from /tmp. Setting <command>nosuid</command> prevents users from | ||
| 567 | creating set userid files in /tmp.</para> | ||
| 568 | </section> | ||
| 569 | |||
| 570 | <section id="unwanted_suid_sgid"> | ||
| 571 | <title>Disable unwanted SUID and SGID Binaries</title> | ||
| 572 | |||
| 573 | <para>There are 3 special permissions available for executable files and | ||
| 574 | directories:</para> | ||
| 575 | |||
| 576 | <itemizedlist> | ||
| 577 | <listitem> | ||
| 578 | <para>SUID permission</para> | ||
| 579 | </listitem> | ||
| 580 | |||
| 581 | <listitem> | ||
| 582 | <para>SGID permission</para> | ||
| 583 | </listitem> | ||
| 584 | |||
| 585 | <listitem> | ||
| 586 | <para>Sticky bit</para> | ||
| 587 | </listitem> | ||
| 588 | </itemizedlist> | ||
| 589 | |||
| 590 | <section id="suid_sgid"> | ||
| 591 | <title>SUID/SGID</title> | ||
| 592 | |||
| 593 | <para>To better understand, check the permissions of the | ||
| 594 | <command>/usr/bin/passwd</command> command: <programlisting># ls -lrt /usr/bin/passwd | ||
| 595 | -r-sr-sr-x 1 root sys 31396 Jan 20 2014 /usr/bin/passwd</programlisting>There | ||
| 596 | are 2 S’s in the permission field, the first ”s” | ||
| 597 | stands for the SUID and the second for SGID. When a command or script | ||
| 598 | set with SUID bit is run, its effective UID becomes that of the owner | ||
| 599 | of the file, rather than of the user who is running it.</para> | ||
| 600 | |||
| 601 | <para>If there are files with all SUID/SGID bits enabled, said files | ||
| 602 | can be misused if the SUID/SGID executable has a security problem or | ||
| 603 | bug. All local or remote users can access/use the file, which may | ||
| 604 | prove dangerous. It's a good idea to find all such files and this can | ||
| 605 | be done using the <command>find</command> command:</para> | ||
| 606 | |||
| 607 | <para><programlisting>#See all set user id files: | ||
| 608 | find / -perm +4000 | ||
| 609 | |||
| 610 | # See all group id files | ||
| 611 | find / -perm +2000 | ||
| 612 | |||
| 613 | # Or combine both in a single command | ||
| 614 | find / \( -perm -4000 -o -perm -2000 \) -print | ||
| 615 | find / -path -prune -o -type f -perm +6000 -ls</programlisting>You | ||
| 616 | need to investigate each reported file. See reported file(s) man page | ||
| 617 | for further details.</para> | ||
| 618 | </section> | ||
| 619 | |||
| 620 | <section id="sticky_bit"> | ||
| 621 | <title>Sticky Bit</title> | ||
| 622 | |||
| 623 | <para>The Sticky Bit is primarily used on shared directories. It's | ||
| 624 | useful for shared directories such as <command>/var/tmp</command> and | ||
| 625 | <command>/tmp</command> because users can create files, read and | ||
| 626 | execute files owned by other users, but are not allowed to remove | ||
| 627 | files owned by other users.</para> | ||
| 628 | |||
| 629 | <para>For example, if user Bob creates a file named /tmp/bob, user Tom | ||
| 630 | cannot delete this file even when the /tmp directory has permission | ||
| 631 | 777. If Sticky Bit is not set, then Tom can delete /tmp/bob, since the | ||
| 632 | file inherits the parent directory permissions. The root users and | ||
| 633 | file owners can remove their own files.</para> | ||
| 634 | |||
| 635 | <para>Example:<programlisting># ls -ld /var/tmp | ||
| 636 | drwxrwxrwt 2 sys sys 512 Jan 26 11:02 /var/tmp</programlisting>T refers | ||
| 637 | to when the execute permissions are off and t refers to when they are | ||
| 638 | on.</para> | ||
| 639 | </section> | ||
| 640 | </section> | ||
| 641 | |||
| 642 | <section id="secure_boot_dir"> | ||
| 643 | <title>Secure boot directory</title> | ||
| 644 | |||
| 645 | <para>The boot directory contains important files related to the Linux | ||
| 646 | kernel, make sure that this directory is locked down with read-only | ||
| 647 | permissions. You can set the owner and group of | ||
| 648 | <filename>/etc/grub.conf</filename> to the root user like so:</para> | ||
| 649 | |||
| 650 | <programlisting>#chown root:root /etc/fstab | ||
| 651 | #chown root:root /etc/grub.conf | ||
| 652 | |||
| 653 | EX: ls -ld /boot/* <<<< root only | ||
| 654 | |||
| 655 | lrwxrwxrwx 1 root root 32 Aug 7 13:07 /boot/bzImage -> / | ||
| 656 | bzImage-4.9.30-intel-pk-standard | ||
| 657 | -rw-r--r-- 1 root root 7860816 Jun 8 10:55 /boot/bzImage-4.9.20-yocto-standard | ||
| 658 | -rw-r--r-- 1 root root 4624464 Aug 7 12:48 /boot/bzImage-4.9.30-intel-pk-standard</programlisting> | ||
| 659 | </section> | ||
| 660 | </section> | ||
| 661 | |||
| 662 | <section id="netsecure_remoteacc"> | ||
| 663 | <title>Network Security & Remote Access</title> | ||
| 664 | |||
| 665 | <para>The networking stack includes IPsec, which provides confidentiality, | ||
| 666 | authenticity, and integrity protection of IP networking. It can be used to | ||
| 667 | implement VPNs, and also point to point security.</para> | ||
| 668 | |||
| 669 | <section id="encrypt_datacoms"> | ||
| 670 | <title>Encrypt Data Communication</title> | ||
| 671 | |||
| 672 | <para>All data transmitted over a network is open to monitoring. Encrypt | ||
| 673 | transmitted data whenever possible with passwords or by using | ||
| 674 | keys/certificates.</para> | ||
| 675 | |||
| 676 | <para>Below are several methods and tools that facilitate | ||
| 677 | encryption:</para> | ||
| 678 | |||
| 679 | <orderedlist> | ||
| 680 | <listitem> | ||
| 681 | <para>Use <command>scp</command>, <command>ssh</command>, | ||
| 682 | <command>rsync</command>, or <command>sftp</command> for file | ||
| 683 | transfers. You can also mount a remote server file system or your | ||
| 684 | own home directory using special <command>sshfs</command> and fuse | ||
| 685 | tools.</para> | ||
| 686 | </listitem> | ||
| 687 | |||
| 688 | <listitem> | ||
| 689 | <para>GnuPG allows you to encrypt and sign your data and | ||
| 690 | communication, features a versatile key management system as well as | ||
| 691 | access modules for all kind of public key directories.</para> | ||
| 692 | </listitem> | ||
| 693 | |||
| 694 | <listitem> | ||
| 695 | <para>OpenVPN is a cost-effective, lightweight SSL VPN.</para> | ||
| 696 | |||
| 697 | <para>Another option to try out is <command>tinc</command>, which | ||
| 698 | uses tunneling and encryption to create a secure private network | ||
| 699 | between hosts, on the Internet or on a private insecure LAN.</para> | ||
| 700 | </listitem> | ||
| 701 | |||
| 702 | <listitem> | ||
| 703 | <para>Lighttpd SSL (Secure Server Layer) HTTPS Configuration and | ||
| 704 | Installation.</para> | ||
| 705 | </listitem> | ||
| 706 | |||
| 707 | <listitem> | ||
| 708 | <para>Apache SSL (Secure Server Layer) HTTPS (mod_ssl) Configuration | ||
| 709 | and Installation.</para> | ||
| 710 | </listitem> | ||
| 711 | |||
| 712 | <listitem> | ||
| 713 | <para>Configure Nginx with free Let’s Encrypt SSL certificate | ||
| 714 | on Debian or Ubuntu Linux.</para> | ||
| 715 | </listitem> | ||
| 716 | </orderedlist> | ||
| 717 | </section> | ||
| 718 | |||
| 719 | <section id="ssh_service"> | ||
| 720 | <title>SSH service</title> | ||
| 721 | |||
| 722 | <para>SSH is secure by default but its services need to be hardened as | ||
| 723 | well. Open <command>/etc/ssh/sshd_config</command> and change the | ||
| 724 | default configuration:</para> | ||
| 725 | |||
| 726 | <itemizedlist> | ||
| 727 | <listitem> | ||
| 728 | <para>Change the default port number 22 to something else, e.g. | ||
| 729 | 99.<programlisting>root@inteld1521:~# xxxxx</programlisting></para> | ||
| 730 | </listitem> | ||
| 731 | |||
| 732 | <listitem> | ||
| 733 | <para>Disable ssh login for root<programlisting>ssh root@172.24.12.73 | ||
| 734 | root@inteld1521:~#</programlisting></para> | ||
| 735 | </listitem> | ||
| 736 | |||
| 737 | <listitem> | ||
| 738 | <para>Make sure following configuration is set for the SSH | ||
| 739 | server:</para> | ||
| 740 | |||
| 741 | <itemizedlist> | ||
| 742 | <listitem> | ||
| 743 | <para>Protocol version is set to 2</para> | ||
| 744 | </listitem> | ||
| 745 | |||
| 746 | <listitem> | ||
| 747 | <para>LogLevel is set to INFO</para> | ||
| 748 | </listitem> | ||
| 749 | |||
| 750 | <listitem> | ||
| 751 | <para>PermitEmptyPasswords</para> | ||
| 752 | </listitem> | ||
| 753 | |||
| 754 | <listitem> | ||
| 755 | <para>IgnoreRhosts to yes</para> | ||
| 756 | </listitem> | ||
| 757 | |||
| 758 | <listitem> | ||
| 759 | <para>HostbasedAuthentication no</para> | ||
| 760 | </listitem> | ||
| 761 | |||
| 762 | <listitem> | ||
| 763 | <para>PermitEmptyPasswords no</para> | ||
| 764 | </listitem> | ||
| 765 | |||
| 766 | <listitem> | ||
| 767 | <para>X11Forwarding no</para> | ||
| 768 | </listitem> | ||
| 769 | |||
| 770 | <listitem> | ||
| 771 | <para>MaxAuthTries 5</para> | ||
| 772 | </listitem> | ||
| 773 | |||
| 774 | <listitem> | ||
| 775 | <para>Ciphers aes128-ctr,aes192-ctr,aes256-ctr</para> | ||
| 776 | </listitem> | ||
| 777 | |||
| 778 | <listitem> | ||
| 779 | <para>ClientAliveInterval 900</para> | ||
| 780 | </listitem> | ||
| 781 | |||
| 782 | <listitem> | ||
| 783 | <para>ClientAliveCountMax 0</para> | ||
| 784 | </listitem> | ||
| 785 | |||
| 786 | <listitem> | ||
| 787 | <para>UsePAM yes</para> | ||
| 788 | </listitem> | ||
| 789 | </itemizedlist> | ||
| 790 | |||
| 791 | <para>These settings use the default set on most platforms, setting | ||
| 792 | them to other values impacts the security of the SSH server.</para> | ||
| 793 | </listitem> | ||
| 794 | </itemizedlist> | ||
| 795 | |||
| 796 | <para>The SSH connection to a server can be controlled by using the | ||
| 797 | following files: <filename>/etc/hosts.allow</filename> and | ||
| 798 | <filename>/<filename>etc/hosts.deny</filename></filename>. Set the | ||
| 799 | permissions on the <filename>sshd_config</filename> file so that only | ||
| 800 | root users can change its contents like so: <programlisting>#chown root:root /etc/ssh/sshd_config | ||
| 801 | #chmod 600 /etc/ssh/sshd_config</programlisting></para> | ||
| 802 | </section> | ||
| 803 | |||
| 804 | <section id="check_open_ports"> | ||
| 805 | <title>Check for open ports</title> | ||
| 806 | |||
| 807 | <para>Identifying open connections to the internet is a critical | ||
| 808 | mission. In Kali Linux, the following command can be used to spot any | ||
| 809 | hidden open ports:</para> | ||
| 810 | |||
| 811 | <programlisting>root@172:~# netstat -ral -tuwx -en | ||
| 812 | |||
| 813 | Kernel IP routing table | ||
| 814 | Destination Gateway Genmask Flags Metric Ref Use Iface | ||
| 815 | 0.0.0.0 172.24.15.254 0.0.0.0 UG 0 0 0 eth1 | ||
| 816 | 172.24.12.0 0.0.0.0 255.255.252.0 U 0 0 0 eth1</programlisting> | ||
| 817 | </section> | ||
| 818 | |||
| 819 | <section id="no_legacyservices"> | ||
| 820 | <title>Legacy services and Unencrypted Authentication</title> | ||
| 821 | |||
| 822 | <para>Disable legacy services that rely on unencrypted authentication | ||
| 823 | such as: <emphasis role="bold">telnet­server, rsh, rlogin, rcp, | ||
| 824 | ypserv, ypbind, tftp, tftp­server, talk</emphasis> and <emphasis | ||
| 825 | role="bold">talk­server.</emphasis></para> | ||
| 826 | |||
| 827 | <para>Use instead<emphasis role="bold"> <ulink | ||
| 828 | url="https://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html">OpenSSH</ulink> | ||
| 829 | , </emphasis><ulink | ||
| 830 | url="https://www.cyberciti.biz/tips/configure-vsfptd-secure-connections-via-ssl-tls.html"><emphasis | ||
| 831 | role="bold">SFTP</emphasis> or <emphasis | ||
| 832 | role="bold">FTPS</emphasis></ulink> (<emphasis | ||
| 833 | role="bold">FTP</emphasis> over <emphasis role="bold">SSL</emphasis>), | ||
| 834 | which adds SSL or TLS encryption to FTP.</para> | ||
| 835 | </section> | ||
| 836 | |||
| 837 | <section> | ||
| 838 | <title>Disable unnecessary Services</title> | ||
| 839 | |||
| 840 | <para>Disabling unused services will reduce the attack surface. Examples | ||
| 841 | of such services include: <emphasis role="bold">FTP, DNS, LDAP, SMB, | ||
| 842 | DHCP, NFS, SNMP</emphasis>, etc.</para> | ||
| 843 | </section> | ||
| 844 | |||
| 845 | <section> | ||
| 846 | <title>Firewall</title> | ||
| 847 | |||
| 848 | <para>Firewalls are an important tool and act as a barrier between a | ||
| 849 | trusted and an untrusted network. <emphasis | ||
| 850 | role="bold">Iptables</emphasis> is a firewall (user space application) | ||
| 851 | which allows users to configure the <emphasis | ||
| 852 | role="bold">Netfilter</emphasis> provided by the Linux kernel. Netfilter | ||
| 853 | hooks packets which pass into, through and from the system. Kernel-level | ||
| 854 | modules may hook into this framework to examine packets and make | ||
| 855 | security decisions about them.</para> | ||
| 856 | |||
| 857 | <para><emphasis role="bold">Iptables</emphasis> contains five | ||
| 858 | tables:</para> | ||
| 859 | |||
| 860 | <itemizedlist> | ||
| 861 | <listitem> | ||
| 862 | <para><emphasis role="bold">Raw</emphasis> is used only for | ||
| 863 | configuring packets to be exempt from connection tracking.</para> | ||
| 864 | </listitem> | ||
| 865 | |||
| 866 | <listitem> | ||
| 867 | <para><emphasis role="bold">Filter</emphasis> is the default table, | ||
| 868 | where all the actions typically associated with a firewall take | ||
| 869 | place.</para> | ||
| 870 | </listitem> | ||
| 871 | |||
| 872 | <listitem> | ||
| 873 | <para><emphasis role="bold">NAT</emphasis> is used for network | ||
| 874 | address translation (e.g. port forwarding).</para> | ||
| 875 | </listitem> | ||
| 876 | |||
| 877 | <listitem> | ||
| 878 | <para><emphasis role="bold">Mangle</emphasis> is used for | ||
| 879 | specialized packet alterations.</para> | ||
| 880 | </listitem> | ||
| 881 | |||
| 882 | <listitem> | ||
| 883 | <para><emphasis role="bold">Security</emphasis> is used for | ||
| 884 | Mandatory Access Control networking rules (e.g. SELinux).</para> | ||
| 885 | </listitem> | ||
| 886 | </itemizedlist> | ||
| 887 | |||
| 888 | <para>Filter and NAT are the most common use cases. The other tables are | ||
| 889 | aimed at complex configurations involving multiple routers and routing | ||
| 890 | decisions, and are beyond the scope of these introductory | ||
| 891 | remarks.</para> | ||
| 892 | |||
| 893 | <para>Here are some important features to consider for securing a host | ||
| 894 | network (these kernel parameters are set in | ||
| 895 | <filename>/etc/sysctl.conf</filename>):</para> | ||
| 896 | |||
| 897 | <para><emphasis role="bold">Disable</emphasis>:</para> | ||
| 898 | |||
| 899 | <itemizedlist> | ||
| 900 | <listitem> | ||
| 901 | <para>IP forwarding</para> | ||
| 902 | </listitem> | ||
| 903 | |||
| 904 | <listitem> | ||
| 905 | <para>send packet redirects</para> | ||
| 906 | </listitem> | ||
| 907 | |||
| 908 | <listitem> | ||
| 909 | <para>source routed packet acceptance</para> | ||
| 910 | </listitem> | ||
| 911 | |||
| 912 | <listitem> | ||
| 913 | <para>ICMP redirect acceptance</para> | ||
| 914 | </listitem> | ||
| 915 | </itemizedlist> | ||
| 916 | |||
| 917 | <para><emphasis role="bold">Enable</emphasis>:</para> | ||
| 918 | |||
| 919 | <itemizedlist> | ||
| 920 | <listitem> | ||
| 921 | <para>Ignore Broadcast Requests</para> | ||
| 922 | </listitem> | ||
| 923 | |||
| 924 | <listitem> | ||
| 925 | <para>Bad Error Message Protection</para> | ||
| 926 | </listitem> | ||
| 927 | |||
| 928 | <listitem> | ||
| 929 | <para>TCP/SYN cookies</para> | ||
| 930 | </listitem> | ||
| 931 | </itemizedlist> | ||
| 932 | |||
| 933 | <para>iptables is a systemd service. However, the service won't start | ||
| 934 | unless it finds a <filename>/etc/iptables/iptables.rules</filename> | ||
| 935 | file. To start the service for the first time edit:</para> | ||
| 936 | |||
| 937 | <para><programlisting># vi /etc/iptables/iptables.rules</programlisting>or<programlisting># cp /etc/iptables/empty.rules /etc/iptables/iptables.rules <<< no empty.rules | ||
| 938 | root@inteld1521:~# ls /usr/sbin/iptables | ||
| 939 | iptables iptables-restore iptables-save</programlisting></para> | ||
| 940 | |||
| 941 | <para>Then start the <literal>iptables.service</literal> unit. As with | ||
| 942 | other services, if you want iptables to be loaded automatically on boot, | ||
| 943 | you must enable it.</para> | ||
| 944 | |||
| 945 | <para>Iptables rules for IPv6 are, by default, stored in | ||
| 946 | <filename>/etc/iptables/ip6tables.rules</filename>, which is read by | ||
| 947 | <literal>ip6tables.service</literal>. You can start it the same way as | ||
| 948 | shown above. After adding rules via command-line as shown below, save | ||
| 949 | the configuration file manually: <programlisting># iptables-save > /etc/iptables/iptables.rules</programlisting></para> | ||
| 950 | </section> | ||
| 951 | </section> | ||
| 952 | </chapter> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-dev-hardening-guide/doc/introduction.xml b/doc/book-enea-nfv-access-dev-hardening-guide/doc/introduction.xml new file mode 100644 index 0000000..bbf203f --- /dev/null +++ b/doc/book-enea-nfv-access-dev-hardening-guide/doc/introduction.xml | |||
| @@ -0,0 +1,127 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
| 4 | <chapter id="overview"> | ||
| 5 | <title>Overview</title> | ||
| 6 | |||
| 7 | <para>This document describes the activities needed for securing/hardening | ||
| 8 | Enea NFV Access platform by ESRT/ developers in order to fulfill the | ||
| 9 | security requirements specified in <ulink | ||
| 10 | url="https://eneaissues.enea.com/browse/CPDX-2632">CPDX-2632</ulink> (see | ||
| 11 | the Security section under Pre-Study).</para> | ||
| 12 | |||
| 13 | <section id="intro"> | ||
| 14 | <title>Introduction</title> | ||
| 15 | |||
| 16 | <para>This document contains a checklist to use when hardening Enea NFV | ||
| 17 | Access. Please read <ulink | ||
| 18 | url="https://eneadoc.enea.com/idc/idcplg?IdcService=GET_FILE&dDocName=055550&Rendition=Primary&RevisionSelectionMethod=Latest"><trademark | ||
| 19 | class="registered">Enea</trademark> NFV Access User's Hardening | ||
| 20 | Guide</ulink> for further information about the hardening features | ||
| 21 | available.</para> | ||
| 22 | |||
| 23 | <section id="rev-hist"> | ||
| 24 | <title>Revision History</title> | ||
| 25 | |||
| 26 | <table> | ||
| 27 | <tgroup cols="4"> | ||
| 28 | <colspec align="center" /> | ||
| 29 | |||
| 30 | <thead> | ||
| 31 | <row> | ||
| 32 | <entry align="center">Revision</entry> | ||
| 33 | |||
| 34 | <entry align="center">Author</entry> | ||
| 35 | |||
| 36 | <entry align="center">Date</entry> | ||
| 37 | |||
| 38 | <entry align="center">Purpose for Revision</entry> | ||
| 39 | </row> | ||
| 40 | </thead> | ||
| 41 | |||
| 42 | <tbody> | ||
| 43 | <row> | ||
| 44 | <entry>4</entry> | ||
| 45 | |||
| 46 | <entry>Sona Sarmadi</entry> | ||
| 47 | |||
| 48 | <entry>2017-09-07</entry> | ||
| 49 | |||
| 50 | <entry>Added Appendix, sec 4.</entry> | ||
| 51 | </row> | ||
| 52 | |||
| 53 | <row> | ||
| 54 | <entry>3</entry> | ||
| 55 | |||
| 56 | <entry>Sona Sarmadi</entry> | ||
| 57 | |||
| 58 | <entry>2017-09-05</entry> | ||
| 59 | |||
| 60 | <entry>Added introduction to the tools in the Open Embedded | ||
| 61 | meta-security layer Fixed 1.1 Revision History.</entry> | ||
| 62 | </row> | ||
| 63 | |||
| 64 | <row> | ||
| 65 | <entry>2</entry> | ||
| 66 | |||
| 67 | <entry>Sona Sarmadi</entry> | ||
| 68 | |||
| 69 | <entry>2017-08-30</entry> | ||
| 70 | |||
| 71 | <entry>Made this document as a guideline for Enea NFV Access | ||
| 72 | developers. Moved section 2 and 3 to a new document (a guideline | ||
| 73 | only for users).</entry> | ||
| 74 | </row> | ||
| 75 | |||
| 76 | <row> | ||
| 77 | <entry>1</entry> | ||
| 78 | |||
| 79 | <entry>Sona Sarmadi</entry> | ||
| 80 | |||
| 81 | <entry>2017-08-20</entry> | ||
| 82 | |||
| 83 | <entry>Initial Revision</entry> | ||
| 84 | </row> | ||
| 85 | </tbody> | ||
| 86 | </tgroup> | ||
| 87 | </table> | ||
| 88 | </section> | ||
| 89 | |||
| 90 | <section id="references"> | ||
| 91 | <title>References</title> | ||
| 92 | |||
| 93 | <itemizedlist> | ||
| 94 | <listitem> | ||
| 95 | <para><ulink | ||
| 96 | url="https://www.sans.org/reading-room/whitepapers/linux/linux-kernel-hardening-1294">SANS | ||
| 97 | linux-kernel-hardening-1294</ulink></para> | ||
| 98 | </listitem> | ||
| 99 | |||
| 100 | <listitem> | ||
| 101 | <para><ulink | ||
| 102 | url="https://lwn.net/Articles/705262/">lwn.net/Articles/705262/</ulink></para> | ||
| 103 | </listitem> | ||
| 104 | |||
| 105 | <listitem> | ||
| 106 | <para><ulink | ||
| 107 | url="https://eneadoc.enea.com/idc/idcplg?IdcService=GET_FILE&dDocName=055550&Rendition=Primary&RevisionSelectionMethod=Latest">Hardening | ||
| 108 | Guide for Users of Enea NFV Access</ulink><remark>Not sure if this | ||
| 109 | should remain an ulink to eneadoc or be changed to an olink to the | ||
| 110 | guide in question.</remark></para> | ||
| 111 | </listitem> | ||
| 112 | </itemizedlist> | ||
| 113 | </section> | ||
| 114 | |||
| 115 | <section id="def_acro"> | ||
| 116 | <title>Definitions and Acronyms</title> | ||
| 117 | |||
| 118 | <para>Definitions</para> | ||
| 119 | |||
| 120 | <para>[FIXME]</para> | ||
| 121 | |||
| 122 | <para>Acronyms</para> | ||
| 123 | |||
| 124 | <para>[FIXME]</para> | ||
| 125 | </section> | ||
| 126 | </section> | ||
| 127 | </chapter> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-dev-hardening-guide/doc/metasecure_tools.xml b/doc/book-enea-nfv-access-dev-hardening-guide/doc/metasecure_tools.xml new file mode 100644 index 0000000..63c1225 --- /dev/null +++ b/doc/book-enea-nfv-access-dev-hardening-guide/doc/metasecure_tools.xml | |||
| @@ -0,0 +1,465 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <chapter id="metasecure_tools"> | ||
| 3 | <title>Introduction to Meta-Security Layer Tools</title> | ||
| 4 | |||
| 5 | <section id="summary"> | ||
| 6 | <title>Summary of tools supported in the Meta-Security layer</title> | ||
| 7 | |||
| 8 | <informaltable> | ||
| 9 | <tgroup cols="2"> | ||
| 10 | <tbody> | ||
| 11 | <row> | ||
| 12 | <entry>Afflib</entry> | ||
| 13 | |||
| 14 | <entry>On-disk format for storing computer forensic | ||
| 15 | information</entry> | ||
| 16 | </row> | ||
| 17 | |||
| 18 | <row> | ||
| 19 | <entry>Aircrack-ng</entry> | ||
| 20 | |||
| 21 | <entry>A set of tools for auditing wireless networks</entry> | ||
| 22 | </row> | ||
| 23 | |||
| 24 | <row> | ||
| 25 | <entry>AppArmor</entry> | ||
| 26 | |||
| 27 | <entry>A MAC control system</entry> | ||
| 28 | </row> | ||
| 29 | |||
| 30 | <row> | ||
| 31 | <entry>Bastille</entry> | ||
| 32 | |||
| 33 | <entry>Linux hardening tool</entry> | ||
| 34 | </row> | ||
| 35 | |||
| 36 | <row> | ||
| 37 | <entry>Buck-security</entry> | ||
| 38 | |||
| 39 | <entry>Linux security scanner</entry> | ||
| 40 | </row> | ||
| 41 | |||
| 42 | <row> | ||
| 43 | <entry>TOMOYO</entry> | ||
| 44 | |||
| 45 | <entry>A Mandatory Access Control (MAC) implementation for | ||
| 46 | Linux</entry> | ||
| 47 | </row> | ||
| 48 | |||
| 49 | <row> | ||
| 50 | <entry>checksec</entry> | ||
| 51 | |||
| 52 | <entry>Program randominization</entry> | ||
| 53 | </row> | ||
| 54 | |||
| 55 | <row> | ||
| 56 | <entry>checksecurity</entry> | ||
| 57 | |||
| 58 | <entry>Basic system security checks</entry> | ||
| 59 | </row> | ||
| 60 | |||
| 61 | <row> | ||
| 62 | <entry>ClamAV</entry> | ||
| 63 | |||
| 64 | <entry>Anti-virus utility for command-line interface</entry> | ||
| 65 | </row> | ||
| 66 | |||
| 67 | <row> | ||
| 68 | <entry>ecryptfs-utils</entry> | ||
| 69 | |||
| 70 | <entry>The eCryptfs mount helper and support libraries</entry> | ||
| 71 | </row> | ||
| 72 | |||
| 73 | <row> | ||
| 74 | <entry>freediameter</entry> | ||
| 75 | |||
| 76 | <entry>Platform for deploying a Diameter network for | ||
| 77 | Authentication, Authorization and Accounting.</entry> | ||
| 78 | </row> | ||
| 79 | |||
| 80 | <row> | ||
| 81 | <entry>ISIC</entry> | ||
| 82 | |||
| 83 | <entry>IP Stack Integrity Checker</entry> | ||
| 84 | </row> | ||
| 85 | |||
| 86 | <row> | ||
| 87 | <entry>keynote</entry> | ||
| 88 | |||
| 89 | <entry>Linux Key Management Utilities</entry> | ||
| 90 | </row> | ||
| 91 | |||
| 92 | <row> | ||
| 93 | <entry>keyutils</entry> | ||
| 94 | |||
| 95 | <entry>Linux Key Management Utilities</entry> | ||
| 96 | </row> | ||
| 97 | |||
| 98 | <row> | ||
| 99 | <entry>libdhash</entry> | ||
| 100 | |||
| 101 | <entry>Library of hashing algorithms</entry> | ||
| 102 | </row> | ||
| 103 | |||
| 104 | <row> | ||
| 105 | <entry>libgssglue</entry> | ||
| 106 | |||
| 107 | <entry>Exports a gssapi interface which calls other gssapi | ||
| 108 | libraries</entry> | ||
| 109 | </row> | ||
| 110 | |||
| 111 | <row> | ||
| 112 | <entry>libmhash</entry> | ||
| 113 | |||
| 114 | <entry>Library of hashing algorithms</entry> | ||
| 115 | </row> | ||
| 116 | |||
| 117 | <row> | ||
| 118 | <entry>Libmspack</entry> | ||
| 119 | |||
| 120 | <entry>A library for Microsoft compression formats</entry> | ||
| 121 | </row> | ||
| 122 | |||
| 123 | <row> | ||
| 124 | <entry>Libseccomp</entry> | ||
| 125 | |||
| 126 | <entry>The libseccomp library provides an easy to use, platform | ||
| 127 | independent, interface to the Linux Kernel's syscall filtering | ||
| 128 | mechanism: seccomp.</entry> | ||
| 129 | </row> | ||
| 130 | |||
| 131 | <row> | ||
| 132 | <entry>Nikto</entry> | ||
| 133 | |||
| 134 | <entry>Web server scanner</entry> | ||
| 135 | </row> | ||
| 136 | |||
| 137 | <row> | ||
| 138 | <entry>Nmap</entry> | ||
| 139 | |||
| 140 | <entry>Network auditing tool</entry> | ||
| 141 | </row> | ||
| 142 | |||
| 143 | <row> | ||
| 144 | <entry>Paxctl</entry> | ||
| 145 | |||
| 146 | <entry>A tool that allows PaX flags to be modified on a per-binary | ||
| 147 | basis</entry> | ||
| 148 | </row> | ||
| 149 | |||
| 150 | <row> | ||
| 151 | <entry>redhat-security</entry> | ||
| 152 | |||
| 153 | <entry>redhat security tools</entry> | ||
| 154 | </row> | ||
| 155 | |||
| 156 | <row> | ||
| 157 | <entry>samhain</entry> | ||
| 158 | |||
| 159 | <entry>Samhain is an integrity checker and host intrusion | ||
| 160 | detection system that can be used on single hosts as well as large | ||
| 161 | ones.</entry> | ||
| 162 | </row> | ||
| 163 | |||
| 164 | <row> | ||
| 165 | <entry>Scapy</entry> | ||
| 166 | |||
| 167 | <entry>Network scanning and manipulation tool</entry> | ||
| 168 | </row> | ||
| 169 | |||
| 170 | <row> | ||
| 171 | <entry>Smack</entry> | ||
| 172 | |||
| 173 | <entry>A simplified Mandatory Access Control</entry> | ||
| 174 | </row> | ||
| 175 | |||
| 176 | <row> | ||
| 177 | <entry>sssd</entry> | ||
| 178 | |||
| 179 | <entry>Selection of tools for developers working with | ||
| 180 | Smack</entry> | ||
| 181 | </row> | ||
| 182 | |||
| 183 | <row> | ||
| 184 | <entry>Suricata</entry> | ||
| 185 | |||
| 186 | <entry>The Suricata Engine is an Open Source Next Generation | ||
| 187 | Intrusion Detection and Prevention Engine</entry> | ||
| 188 | </row> | ||
| 189 | |||
| 190 | <row> | ||
| 191 | <entry>Tripwire</entry> | ||
| 192 | |||
| 193 | <entry>A system integrity assessment tool (IDS)</entry> | ||
| 194 | </row> | ||
| 195 | |||
| 196 | <row> | ||
| 197 | <entry>xmlsec1</entry> | ||
| 198 | |||
| 199 | <entry>XML Security Library is a C library based on | ||
| 200 | LibXML2</entry> | ||
| 201 | </row> | ||
| 202 | </tbody> | ||
| 203 | </tgroup> | ||
| 204 | </informaltable> | ||
| 205 | </section> | ||
| 206 | |||
| 207 | <section id="run_tools"> | ||
| 208 | <title>How to configure, build and run the tools</title> | ||
| 209 | |||
| 210 | <para>In order to use this layer, you need to make the build system aware | ||
| 211 | of it. To do so, first clone the layer located at the address: | ||
| 212 | http://git.enea.com/cgit/linux/meta-security.git, then add the following | ||
| 213 | lines to the files below.</para> | ||
| 214 | |||
| 215 | <itemizedlist> | ||
| 216 | <listitem> | ||
| 217 | <para>In <literal>bblayers.conf</literal>:</para> | ||
| 218 | |||
| 219 | <para><programlisting>BBLAYERS ?= " \ | ||
| 220 | /path/to/oe-core/meta \ | ||
| 221 | /path/to/meta-openembedded/meta-oe \ | ||
| 222 | /path/to/meta-openembedded/meta-perl \ | ||
| 223 | /path/to/meta-openembedded/meta-gnome \ | ||
| 224 | /path/to/meta-openembedded/meta-xfce \ | ||
| 225 | /path/to/meta-openembedded/meta-python \ | ||
| 226 | /path/to/meta-openembedded/meta-networking \ | ||
| 227 | /path/to/layer/meta-security \</programlisting></para> | ||
| 228 | </listitem> | ||
| 229 | |||
| 230 | <listitem> | ||
| 231 | <para>In <literal>local.conf</literal>:</para> | ||
| 232 | |||
| 233 | <para><programlisting>IMAGE_INSTALL_append = "aircrack-ng buck-security checksecurity freediameter / | ||
| 234 | keynote libgssglue libseccomp samhain-client samhain-server samhain-standalone / | ||
| 235 | sssd xmlsec1 clamav keyutils libmhash nikto paxctl scapy suricata bastille / | ||
| 236 | checksec ecryptfs-utils isic libmspack nmap redhat-security smack tripwire"</programlisting></para> | ||
| 237 | </listitem> | ||
| 238 | |||
| 239 | <listitem> | ||
| 240 | <para><programlisting>poky/build $ bitbake enea-hardend-image-virtualization-host</programlisting></para> | ||
| 241 | |||
| 242 | <remark>Need clarification here on a possible intro or specified | ||
| 243 | action/file as noted above.</remark> | ||
| 244 | </listitem> | ||
| 245 | </itemizedlist> | ||
| 246 | |||
| 247 | <section id="apparmor"> | ||
| 248 | <title>AppArmor</title> | ||
| 249 | |||
| 250 | <para>AppArmor, like most other LSMs, supplements rather than replaces | ||
| 251 | the default Discretionary Access Control (DAC). As such, it's impossible | ||
| 252 | to grant a process more privileges than it had in the first place. When | ||
| 253 | AppArmor is active for an application, the operating system allows the | ||
| 254 | application to access only those files and folders that are mentioned in | ||
| 255 | its security profile. Thus, with a well-planned security profile, even | ||
| 256 | if the application is compromised during an attack, it won't be able to | ||
| 257 | do much harm.</para> | ||
| 258 | |||
| 259 | <para>Before compiling the kernel, set the following | ||
| 260 | options:<programlisting>CONFIG_SECURITY_APPARMOR=y | ||
| 261 | CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1 | ||
| 262 | CONFIG_DEFAULT_SECURITY_APPARMOR=y | ||
| 263 | CONFIG_AUDIT=y</programlisting>Alternatively, instead of setting | ||
| 264 | <literal>CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE</literal> and | ||
| 265 | <literal>CONFIG_DEFAULT_SECURITY_APPARMOR</literal>, you can set the | ||
| 266 | <ulink | ||
| 267 | url="https://wiki.archlinux.org/index.php/Kernel_parameters">kernel boot | ||
| 268 | parameters</ulink> in this manner: <literal>apparmor=1 | ||
| 269 | security=apparmor</literal>. For those new or altered variables to not | ||
| 270 | get overridden, place them at the bottom of the config file or adjust | ||
| 271 | the previous invocations accordingly.</para> | ||
| 272 | |||
| 273 | <para>For further information see <ulink | ||
| 274 | url="https://www.digitalocean.com/community/tutorials/how-to-create-an-apparmor-profile-for-nginx-on-ubuntu-14-04">https://www.digitalocean.com/community/tutorials/how-to-create-an-apparmor-profile-for-nginx-on-ubuntu-14-04</ulink>.</para> | ||
| 275 | |||
| 276 | <para>To put the profile in enforce mode, use the | ||
| 277 | <literal>aa-enforce</literal>:</para> | ||
| 278 | |||
| 279 | <para><programlisting>sudo apparmor_status | ||
| 280 | sudo aa-enforce nginx</programlisting>It is recommended that you reload all | ||
| 281 | profiles and restart Nginx to be sure that the latest changes are in | ||
| 282 | effect: <programlisting>sudo /etc/init.d/apparmor reload | ||
| 283 | sudo service nginx restart</programlisting>Enable complain mode with the | ||
| 284 | <literal>aa-complain</literal> command. It is recommended that you wait | ||
| 285 | several days before running the <literal>aa-logprof</literal> command, | ||
| 286 | to give the system time to log more common actions for the application | ||
| 287 | if you are going to create a profile that will be used in production | ||
| 288 | systems.</para> | ||
| 289 | </section> | ||
| 290 | |||
| 291 | <section id="isic"> | ||
| 292 | <title>ISIC - IP Stack Integrity Checker</title> | ||
| 293 | |||
| 294 | <para><emphasis role="bold">ISIC</emphasis> is a suite of utilities | ||
| 295 | meant to exercise the stability of an IP Stack and its component stacks | ||
| 296 | (TCP, UDP, ICMP et. al.). It generates many pseudo-random packets of the | ||
| 297 | target protocol, which are given tendancies to conform to. For example: | ||
| 298 | 50% of the packets generated can have IP Options, and 25% of the packets | ||
| 299 | can be IP fragments, the percentages are arbitrary however, and most of | ||
| 300 | the packet fields have a configurable tendancy. <programlisting>root@qemux86:~# esic -i eth0 -s 52:54:00:12:34:0A -p rand -m 5000</programlisting><remark>what | ||
| 301 | does this programlisting detail exactly, is it an example or something | ||
| 302 | more directly concrete?</remark></para> | ||
| 303 | </section> | ||
| 304 | |||
| 305 | <section id="nikto"> | ||
| 306 | <title>Nikto Web Vulnerability Scanner</title> | ||
| 307 | |||
| 308 | <para>Nikto is a web vulnerability scanner, a security testing tool that | ||
| 309 | scans web servers for vulnerabilities and other known issues.</para> | ||
| 310 | </section> | ||
| 311 | |||
| 312 | <section id="nmap"> | ||
| 313 | <title>Nmap Network Exploration Tool</title> | ||
| 314 | |||
| 315 | <para>Nmap (Network Mapper), is an open source security scanner for | ||
| 316 | network exploration and security auditing. It is used to discover hosts | ||
| 317 | and services on a network, essentially creating a "map" of the network. | ||
| 318 | Nmap sends specially crafted packets to the target host(s), then | ||
| 319 | analyzes the responses.</para> | ||
| 320 | |||
| 321 | <para>Nmap uses raw IP packets in novel ways to determine what hosts are | ||
| 322 | available on the network, what services (application name and version) | ||
| 323 | those hosts are offering, what operating systems (and OS versions) they | ||
| 324 | are running, what type of packet filters/firewalls are in use, and | ||
| 325 | dozens of other characteristics. While Nmap is commonly used for | ||
| 326 | security audits, many systems and network administrators find it useful | ||
| 327 | for routine tasks such as network inventory, managing service upgrade | ||
| 328 | schedules, and monitoring host or service uptime. See a few examples of | ||
| 329 | options to use below:</para> | ||
| 330 | |||
| 331 | <para><programlisting>nmap -v -A scanme.nmap.org | ||
| 332 | nmap -v -sn 192.168.0.0/16 10.0.0.0/8 | ||
| 333 | nmap -v -iR 10000 -Pn -p 80</programlisting>For more info see <ulink | ||
| 334 | url="https://layers.openembedded.org/layerindex/branch/master/layer/meta-security/">https://layers.openembedded.org/layerindex/branch/master/layer/meta-security/</ulink>.</para> | ||
| 335 | </section> | ||
| 336 | |||
| 337 | <section id="paxctl"> | ||
| 338 | <title>Paxctl</title> | ||
| 339 | |||
| 340 | <para>A tool that allows PaX flags to be modified on a per-binary basis. | ||
| 341 | PaX provides various types of protection against abuses of memory, some | ||
| 342 | of which can only be enabled or disabled by (re)configuring the kernel | ||
| 343 | and recompiling/rebooting it.</para> | ||
| 344 | |||
| 345 | <para>Several important types (PAGEEXEC, EMUTRAMP, MPROTECT, RANDMMAP | ||
| 346 | and SEGMEXEC) can be tweaked when the system is up and running by | ||
| 347 | marking the PaX flags on the ELF objects of the program you want to run. | ||
| 348 | Since some programs need to use memory in a way normally forbidden by | ||
| 349 | PaX, some restrictions may have to be relaxed on a per program basis. | ||
| 350 | For more informations see: <ulink | ||
| 351 | url="https://wiki.gentoo.org/wiki/Hardened/PaX_flag_migration_from_PT_PAX_to_XATTR_PAX">https://wiki.gentoo.org/wiki/Hardened/PaX_flag_migration_from_PT_PAX_to_XATTR_PAX</ulink>.</para> | ||
| 352 | |||
| 353 | <para>Example:<programlisting>root #paxctl-ng -v /bin/*</programlisting></para> | ||
| 354 | </section> | ||
| 355 | |||
| 356 | <section id="samhin"> | ||
| 357 | <title>Samhin</title> | ||
| 358 | |||
| 359 | <para><emphasis>Samhain</emphasis> is a host-based intrusion detection | ||
| 360 | system (HIDS) which provides integrity checking and log file | ||
| 361 | monitoring/analysis, as well as 4.1detection, port monitoring, detection | ||
| 362 | of rogue SUID executables, and hidden processes. It's main features | ||
| 363 | include:</para> | ||
| 364 | |||
| 365 | <itemizedlist> | ||
| 366 | <listitem> | ||
| 367 | <para>Complete integrity check</para> | ||
| 368 | |||
| 369 | <para>Uses cryptographic checksums of files to detect modifications. | ||
| 370 | It can find rogue SUID executables anywhere on disk.</para> | ||
| 371 | </listitem> | ||
| 372 | |||
| 373 | <listitem> | ||
| 374 | <para>Centralized monitoring</para> | ||
| 375 | |||
| 376 | <para>Native support for logging to a central server via encrypted | ||
| 377 | and authenticated connections.</para> | ||
| 378 | </listitem> | ||
| 379 | |||
| 380 | <listitem> | ||
| 381 | <para>Tamper resistance</para> | ||
| 382 | |||
| 383 | <para>Database and configuration files can be signed log file | ||
| 384 | entries. E-mail reports are signed support for stealth | ||
| 385 | operations.</para> | ||
| 386 | </listitem> | ||
| 387 | </itemizedlist> | ||
| 388 | </section> | ||
| 389 | |||
| 390 | <section id="smack"> | ||
| 391 | <title>Smack</title> | ||
| 392 | |||
| 393 | <para>A simplified Mandatory Access Control.</para> | ||
| 394 | </section> | ||
| 395 | |||
| 396 | <section id="suricata"> | ||
| 397 | <title>Suricata</title> | ||
| 398 | |||
| 399 | <para>The Suricata Engine is an Open Source Next Generation <emphasis | ||
| 400 | role="bold">Intrusion Detection and Prevention Engine.</emphasis></para> | ||
| 401 | </section> | ||
| 402 | |||
| 403 | <section id="tomoyo"> | ||
| 404 | <title>TOMOYO</title> | ||
| 405 | |||
| 406 | <para><ulink | ||
| 407 | url="http://tomoyo.sourceforge.jp/1.8/index.html.en">TOMOYO</ulink> is | ||
| 408 | an alternative (pathname-based) Mandatory Access Control (MAC) | ||
| 409 | implementation for Linux that can be used to increase the security of a | ||
| 410 | system, while also being useful purely as a system analysis tool. The | ||
| 411 | main features of TOMOYO Linux include:</para> | ||
| 412 | |||
| 413 | <itemizedlist> | ||
| 414 | <listitem> | ||
| 415 | <para>System analysis</para> | ||
| 416 | </listitem> | ||
| 417 | |||
| 418 | <listitem> | ||
| 419 | <para>Increased security through Mandatory Access Control</para> | ||
| 420 | </listitem> | ||
| 421 | |||
| 422 | <listitem> | ||
| 423 | <para>Tools to aid in policy generation</para> | ||
| 424 | </listitem> | ||
| 425 | |||
| 426 | <listitem> | ||
| 427 | <para>Simple syntax</para> | ||
| 428 | </listitem> | ||
| 429 | |||
| 430 | <listitem> | ||
| 431 | <para>Easy to use</para> | ||
| 432 | </listitem> | ||
| 433 | |||
| 434 | <listitem> | ||
| 435 | <para>Very few dependencies</para> | ||
| 436 | </listitem> | ||
| 437 | |||
| 438 | <listitem> | ||
| 439 | <para>Requires no modification of existing binaries</para> | ||
| 440 | </listitem> | ||
| 441 | </itemizedlist> | ||
| 442 | |||
| 443 | <para>To start via command line add:<programlisting>"security=tomoyo TOMOYO_trigger=/usr/lib/systemd/systemd"</programlisting>To | ||
| 444 | initialize:<programlisting>/usr/lib/ccs/init_policy | ||
| 445 | DISTRO_FEATURES_append = " tomoyo"</programlisting></para> | ||
| 446 | </section> | ||
| 447 | |||
| 448 | <section id="tripwire"> | ||
| 449 | <title>Tripwire</title> | ||
| 450 | |||
| 451 | <para>Tripwire is an intrusion detection system (IDS), which constantly | ||
| 452 | and automatically, keeps your critical system files and reports under | ||
| 453 | control if they have been destroyed or modified by a hacker (or by | ||
| 454 | mistake). It allows the system administrator to know immediately what | ||
| 455 | was compromised and fix it. For more information see: <ulink | ||
| 456 | url="http://www.linuxjournal.com/article/8758">http://www.linuxjournal.com/article/8758</ulink>.</para> | ||
| 457 | </section> | ||
| 458 | |||
| 459 | <section id="xmlsec1"> | ||
| 460 | <title>xmlsec1</title> | ||
| 461 | |||
| 462 | <para>XML Security Library is a C library based on LibXML2.</para> | ||
| 463 | </section> | ||
| 464 | </section> | ||
| 465 | </chapter> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-dev-hardening-guide/swcomp.mk b/doc/book-enea-nfv-access-dev-hardening-guide/swcomp.mk new file mode 100644 index 0000000..6f0889c --- /dev/null +++ b/doc/book-enea-nfv-access-dev-hardening-guide/swcomp.mk | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | # Component build specification | ||
| 2 | |||
| 3 | # Version of THIS book | ||
| 4 | BOOK_VER ?= $(REL_VER)-dev | ||
| 5 | |||
| 6 | DOCBOOK_SRC := $(COMP)/swcomp.mk $(COMP)/doc/book.xml $(shell find $(COMP)/doc -type f \( -name "*.xml" -o -name "*.svg" -o -name "*.png" \) ! -name "book.xml" -print) | ||
| 7 | |||
| 8 | BOOKPACKAGES := book-enea-nfv-access-dev-hardening-guide | ||
| 9 | BOOKDESC_$(BOOKPACKAGES) := "Enea NFV Access $(PROD_VER) Developer's Hardening Guide" | ||
| 10 | BOOKDEFAULTCONDITION := $(DEFAULTCONDITIONS) | ||
diff --git a/doc/book-enea-nfv-access-user-hardening-guide/doc/book.xml b/doc/book-enea-nfv-access-user-hardening-guide/doc/book.xml new file mode 100644 index 0000000..fe6b11f --- /dev/null +++ b/doc/book-enea-nfv-access-user-hardening-guide/doc/book.xml | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ | ||
| 4 | <!ENTITY % local.common.attrib "xml:base CDATA #IMPLIED"> | ||
| 5 | ]> | ||
| 6 | <book id="book_enea_nfv_access_user_hardening_guide"> | ||
| 7 | <title><trademark class="registered">Enea</trademark> NFV Access User's Hardening Guide</title> | ||
| 8 | |||
| 9 | <subtitle>Release Version <xi:include href="eltf_params_updated.xml" | ||
| 10 | xmlns:xi="http://www.w3.org/2001/XInclude" | ||
| 11 | xpointer="element(EneaLinux_REL_VER/1)" /></subtitle> | ||
| 12 | <!-- OLINKDBPATH_USED_BY_XMLMIND ../../s_docbuild/olinkdb --> | ||
| 13 | <xi:include href="../../s_docbuild/template/docsrc_common/bookinfo_userdoc.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||
| 14 | <xi:include href="introduction.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||
| 15 | <xi:include href="intro_info_security.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||
| 16 | <xi:include href="guidelines_hardening_linux.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||
| 17 | <xi:include href="intro_hardentools_tech.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||
| 18 | </book> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-user-hardening-guide/doc/eltf_params_template.xml b/doc/book-enea-nfv-access-user-hardening-guide/doc/eltf_params_template.xml new file mode 100644 index 0000000..eaa7ebd --- /dev/null +++ b/doc/book-enea-nfv-access-user-hardening-guide/doc/eltf_params_template.xml | |||
| @@ -0,0 +1,151 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
| 4 | <section id="eltf_created_params"> | ||
| 5 | <title>File with Parameters in the Book Auto-updated by ELFT</title> | ||
| 6 | |||
| 7 | <note> | ||
| 8 | <para>See the <emphasis | ||
| 9 | role="bold">eltf_params_updated_template_howto_use.txt</emphasis> text | ||
| 10 | file for description of how to create the final <emphasis | ||
| 11 | role="bold">eltf_params_updated.xml</emphasis> from this template and for | ||
| 12 | all <emphasis role="bold">REQUIREMENTS</emphasis>. Use the command | ||
| 13 | "<emphasis role="bold">make eltf</emphasis>" to extract a full list of all | ||
| 14 | ELTF variables, which always begins with ELTF_ and don't only rely on the | ||
| 15 | howto text file list! The plan is that ELTF will auto-update this when | ||
| 16 | needed.</para> | ||
| 17 | </note> | ||
| 18 | |||
| 19 | <section id="host_prereq"> | ||
| 20 | <title>Common Parameters</title> | ||
| 21 | |||
| 22 | <bridgehead>A programlisting, ID | ||
| 23 | "eltf-prereq-apt-get-commands-host"</bridgehead> | ||
| 24 | |||
| 25 | <para id="eltf-prereq-apt-get-commands-host"><programlisting>ELTF_PL_HOST_PREREQ</programlisting></para> | ||
| 26 | |||
| 27 | <bridgehead>A programlisting, ID | ||
| 28 | "eltf-getting-repo-install-command"</bridgehead> | ||
| 29 | |||
| 30 | <para id="eltf-getting-repo-install-command"><programlisting>ELTF_PL_GET_REPO</programlisting></para> | ||
| 31 | |||
| 32 | <bridgehead>Several phrase elements, various IDs. Ensure EL_REL_VER is | ||
| 33 | correct also compared to the "previous" REL VER in pardoc-distro.xml | ||
| 34 | "prev_baseline".</bridgehead> | ||
| 35 | |||
| 36 | <para id="EneaLinux_REL_VER"><phrase>ELTF_EL_REL_VER</phrase></para> | ||
| 37 | |||
| 38 | <para id="Yocto_VER"><phrase>ELTF_YOCTO_VER</phrase></para> | ||
| 39 | |||
| 40 | <para id="Yocto_NAME"><phrase>ELTF_YOCTO_NAME</phrase></para> | ||
| 41 | |||
| 42 | <para id="ULINK_YOCTO_PROJECT_DOWNLOAD"><ulink | ||
| 43 | url="ELTF_YOCTO_PROJ_DOWNLOAD_URL">ELTF_YOCTO_PROJ_DOWNLOAD_TXTURL</ulink></para> | ||
| 44 | |||
| 45 | <para id="ULINK_ENEA_LINUX_URL"><ulink | ||
| 46 | url="ELTF_EL_DOWNLOAD_URL">ELTF_EL_DOWNLOAD_TXTURL</ulink></para> | ||
| 47 | |||
| 48 | <bridgehead>A programlisting, ID "eltf-repo-cloning-enea-linux". Use | ||
| 49 | $MACHINE/default.xml as parameter, where MACHINE is one of the target | ||
| 50 | directory names in the manifest.</bridgehead> | ||
| 51 | |||
| 52 | <para id="eltf-repo-cloning-enea-linux"><programlisting>ELTF_PL_CLONE_W_REPO</programlisting></para> | ||
| 53 | |||
| 54 | <bridgehead>A table with ONE row, only the row with ID | ||
| 55 | "eltf-eclipse-version-row" is included in the book. MANUALLY BOTH in the | ||
| 56 | template.xml and in the updated.xml, set condition hidden on the | ||
| 57 | <row>, if eclipse is not in the release.</bridgehead> | ||
| 58 | |||
| 59 | <informaltable> | ||
| 60 | <tgroup cols="1"> | ||
| 61 | <tbody> | ||
| 62 | <row id="eltf-eclipse-version-row"> | ||
| 63 | <entry>Eclipse version ELTF_ECLIPSE_VERSION plus command line | ||
| 64 | development tools are included in this Enea NFV Access release.</entry> | ||
| 65 | </row> | ||
| 66 | </tbody> | ||
| 67 | </tgroup> | ||
| 68 | </informaltable> | ||
| 69 | |||
| 70 | <bridgehead>Below is one big section with title "Supported Targets with | ||
| 71 | Parameters". The entire section is included completely in the book via ID | ||
| 72 | "eltf-target-tables-section" and shall be LAST in the template. The | ||
| 73 | template contains ONE target subsection. COPY/APPEND it, if multiple | ||
| 74 | targets exist in the release and optionally add rows with additional | ||
| 75 | target parameters in each target subsection table.</bridgehead> | ||
| 76 | </section> | ||
| 77 | |||
| 78 | <section id="eltf-target-tables-section"> | ||
| 79 | <title>Supported Targets with Parameters</title> | ||
| 80 | |||
| 81 | <para>The tables below describes the target(s) supported in this Enea | ||
| 82 | NFV Access release.</para> | ||
| 83 | |||
| 84 | <section id="eltf-target-table-ELTF_T_MANIFEST_DIR"> | ||
| 85 | <title>MACHINE ELTF_T_MANIFEST_DIR - Information</title> | ||
| 86 | |||
| 87 | <para><informaltable> | ||
| 88 | <tgroup cols="2"> | ||
| 89 | <colspec colwidth="6*" /> | ||
| 90 | |||
| 91 | <colspec colwidth="9*" /> | ||
| 92 | |||
| 93 | <tbody> | ||
| 94 | <row> | ||
| 95 | <entry>Target official name</entry> | ||
| 96 | |||
| 97 | <entry>ELTF_T_NAME</entry> | ||
| 98 | </row> | ||
| 99 | |||
| 100 | <row> | ||
| 101 | <entry>Architecture and Description</entry> | ||
| 102 | |||
| 103 | <entry>ELTF_T_ARC_DESC</entry> | ||
| 104 | </row> | ||
| 105 | |||
| 106 | <row> | ||
| 107 | <entry>Link to target datasheet</entry> | ||
| 108 | |||
| 109 | <entry>See <ulink | ||
| 110 | url="ELTF_T_DS_URL">ELTF_T_DS_TXTURL</ulink></entry> | ||
| 111 | </row> | ||
| 112 | |||
| 113 | <row> | ||
| 114 | <entry>Poky version</entry> | ||
| 115 | |||
| 116 | <entry>ELTF_T_POKY_VER</entry> | ||
| 117 | </row> | ||
| 118 | |||
| 119 | <row> | ||
| 120 | <entry>GCC version</entry> | ||
| 121 | |||
| 122 | <entry>ELTF_T_GCC_VER</entry> | ||
| 123 | </row> | ||
| 124 | |||
| 125 | <row> | ||
| 126 | <entry>Linux Kernel Version</entry> | ||
| 127 | |||
| 128 | <entry>ELTF_T_KERN_VER</entry> | ||
| 129 | </row> | ||
| 130 | |||
| 131 | <row> | ||
| 132 | <entry>Supported Drivers</entry> | ||
| 133 | |||
| 134 | <entry>ELTF_T_DRIVERS</entry> | ||
| 135 | </row> | ||
| 136 | |||
| 137 | <row> | ||
| 138 | <entry>Enea rpm folder for downloading RPM packages for this | ||
| 139 | target</entry> | ||
| 140 | |||
| 141 | <entry><ulink | ||
| 142 | url="ELTF_T_EL_RPM_URL">ELTF_T_EL_RPM_TXTURL</ulink></entry> | ||
| 143 | </row> | ||
| 144 | </tbody> | ||
| 145 | </tgroup> | ||
| 146 | </informaltable></para> | ||
| 147 | </section> | ||
| 148 | |||
| 149 | <!-- ELTFADD_MORE_TARGET_SECTIONS_BELOW_IF_NEEDED --> | ||
| 150 | </section> | ||
| 151 | </section> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-user-hardening-guide/doc/eltf_params_updated.xml b/doc/book-enea-nfv-access-user-hardening-guide/doc/eltf_params_updated.xml new file mode 100644 index 0000000..f6bd068 --- /dev/null +++ b/doc/book-enea-nfv-access-user-hardening-guide/doc/eltf_params_updated.xml | |||
| @@ -0,0 +1,165 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
| 4 | <section id="eltf_created_params"> | ||
| 5 | <title>File with Parameters in the Book Auto-updated by ELFT</title> | ||
| 6 | |||
| 7 | <note> | ||
| 8 | <para>See the <emphasis | ||
| 9 | role="bold">eltf_params_updated_template_howto_use.txt</emphasis> text | ||
| 10 | file for description of how to create the final <emphasis | ||
| 11 | role="bold">eltf_params_updated.xml</emphasis> from this template and for | ||
| 12 | all <emphasis role="bold">REQUIREMENTS</emphasis>. Use the command | ||
| 13 | "<emphasis role="bold">make eltf</emphasis>" to extract a full list of all | ||
| 14 | ELTF variables, which always begins with ELTF_ and don't only rely on the | ||
| 15 | howto text file list! The plan is that ELTF will auto-update this when | ||
| 16 | needed.</para> | ||
| 17 | </note> | ||
| 18 | |||
| 19 | <section id="host_prereq"> | ||
| 20 | <title>Common Parameters</title> | ||
| 21 | |||
| 22 | <bridgehead>A programlisting, ID | ||
| 23 | "eltf-prereq-apt-get-commands-host"</bridgehead> | ||
| 24 | |||
| 25 | <para id="eltf-prereq-apt-get-commands-host"><programlisting># Host Ubuntu 14.04.5 LTS 64bit | ||
| 26 | sudo apt-get -y update | ||
| 27 | sudo apt-get -y install sed wget subversion git-core coreutils unzip texi2html \ | ||
| 28 | texinfo libsdl1.2-dev docbook-utils fop gawk python-pysqlite2 diffstat \ | ||
| 29 | make gcc build-essential xsltproc g++ desktop-file-utils chrpath \ | ||
| 30 | libgl1-mesa-dev libglu1-mesa-dev autoconf automake groff libtool xterm \ | ||
| 31 | libxml-parser-perl</programlisting></para> | ||
| 32 | |||
| 33 | <bridgehead>A programlisting, ID | ||
| 34 | "eltf-getting-repo-install-command"</bridgehead> | ||
| 35 | |||
| 36 | <para id="eltf-getting-repo-install-command"><programlisting>mkdir -p ~/bin | ||
| 37 | curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo | ||
| 38 | chmod a+x ~/bin/repo | ||
| 39 | export PATH=~/bin:$PATH</programlisting></para> | ||
| 40 | |||
| 41 | <bridgehead>Several phrase elements, various IDs. Ensure EL_REL_VER is | ||
| 42 | correct also compared to the "previous" REL VER in pardoc-distro.xml | ||
| 43 | "prev_baseline".</bridgehead> | ||
| 44 | |||
| 45 | <para id="EneaLinux_REL_VER"><phrase>1.0</phrase></para> | ||
| 46 | |||
| 47 | <para id="Yocto_VER"><phrase>2.1</phrase></para> | ||
| 48 | |||
| 49 | <para id="Yocto_NAME"><phrase>krogoth</phrase></para> | ||
| 50 | |||
| 51 | <para id="ULINK_YOCTO_PROJECT_DOWNLOAD"><ulink | ||
| 52 | url="http://www.yoctoproject.org/downloads/core/krogoth/21">http://www.yoctoproject.org/downloads/core/krogoth/21</ulink></para> | ||
| 53 | |||
| 54 | <para id="ULINK_ENEA_LINUX_URL"><ulink | ||
| 55 | url="https://linux.enea.com/6">https://linux.enea.com/6</ulink></para> | ||
| 56 | |||
| 57 | <bridgehead>A programlisting, ID "eltf-repo-cloning-enea-linux". Use | ||
| 58 | $MACHINE/default.xml as parameter, where MACHINE is one of the target | ||
| 59 | directory names in the manifest.</bridgehead> | ||
| 60 | |||
| 61 | <para id="eltf-repo-cloning-enea-linux"><programlisting>mkdir enea-linux | ||
| 62 | cd enea-linux | ||
| 63 | repo init -u git@git.enea.com:linux/manifests/el_manifests-virtualization.git \ | ||
| 64 | -b refs/tags/EL6 -m $MACHINE/default.xml | ||
| 65 | repo sync</programlisting></para> | ||
| 66 | |||
| 67 | <bridgehead>A table with ONE row, only the row with ID | ||
| 68 | "eltf-eclipse-version-row" is included in the book. MANUALLY in book, set | ||
| 69 | condition hidden if eclipse is not in the release. Do this both in | ||
| 70 | template.xml and updated.xml.</bridgehead> | ||
| 71 | |||
| 72 | <informaltable> | ||
| 73 | <tgroup cols="1"> | ||
| 74 | <tbody> | ||
| 75 | <row condition="hidden" id="eltf-eclipse-version-row"> | ||
| 76 | <entry>Eclipse version 4.3 (Mars) plus command line development | ||
| 77 | tools are included in this Enea NFV Access release.</entry> | ||
| 78 | </row> | ||
| 79 | </tbody> | ||
| 80 | </tgroup> | ||
| 81 | </informaltable> | ||
| 82 | |||
| 83 | <bridgehead>Below is one big section with title "Supported Targets with | ||
| 84 | Parameters". The entire section is included completely in the book via ID | ||
| 85 | "eltf-target-tables-section" and shall be LAST in the template. The | ||
| 86 | template contains ONE target subsection. COPY/APPEND it, if multiple | ||
| 87 | targets exist in the release and optionally add rows with additional | ||
| 88 | target parameters in each target subsection table.</bridgehead> | ||
| 89 | </section> | ||
| 90 | |||
| 91 | <section id="eltf-target-tables-section"> | ||
| 92 | <title>Supported Reference Boards with Parameters</title> | ||
| 93 | |||
| 94 | <para>The tables below describes the target(s) supported in this Enea NFV | ||
| 95 | Access release.</para> | ||
| 96 | |||
| 97 | <section id="eltf-target-table-p2041rdb"> | ||
| 98 | <title>MACHINE p2041rdb - Information</title> | ||
| 99 | |||
| 100 | <para><informaltable> | ||
| 101 | <tgroup cols="2"> | ||
| 102 | <colspec colwidth="6*" /> | ||
| 103 | |||
| 104 | <colspec colwidth="9*" /> | ||
| 105 | |||
| 106 | <tbody> | ||
| 107 | <row> | ||
| 108 | <entry>Target official name</entry> | ||
| 109 | |||
| 110 | <entry>P2041RDB</entry> | ||
| 111 | </row> | ||
| 112 | |||
| 113 | <row> | ||
| 114 | <entry>Architecture and Description</entry> | ||
| 115 | |||
| 116 | <entry>Power, e500mc</entry> | ||
| 117 | </row> | ||
| 118 | |||
| 119 | <row> | ||
| 120 | <entry>Link to target datasheet</entry> | ||
| 121 | |||
| 122 | <entry>See <ulink | ||
| 123 | url="http://www.nxp.com/products/microcontrollers-and-processors/power-architecture-processors/qoriq-power-architecture-processors/p2041-qoriq-reference-design-board:RDP2041BOARD">link | ||
| 124 | to NXP's datasheet</ulink></entry> | ||
| 125 | </row> | ||
| 126 | |||
| 127 | <row> | ||
| 128 | <entry>Poky version</entry> | ||
| 129 | |||
| 130 | <entry>Git-commit-id: | ||
| 131 | 75ca53211488a3e268037a44ee2a7ac5c7181bd2</entry> | ||
| 132 | </row> | ||
| 133 | |||
| 134 | <row> | ||
| 135 | <entry>GCC version</entry> | ||
| 136 | |||
| 137 | <entry>5.3</entry> | ||
| 138 | </row> | ||
| 139 | |||
| 140 | <row> | ||
| 141 | <entry>Linux Kernel Version</entry> | ||
| 142 | |||
| 143 | <entry>3.12</entry> | ||
| 144 | </row> | ||
| 145 | |||
| 146 | <row> | ||
| 147 | <entry>Supported Drivers</entry> | ||
| 148 | |||
| 149 | <entry>Ethernet, I2C, SPI, PCI Express, USB, Flash, | ||
| 150 | SD/SDHC/SDXC, RTC</entry> | ||
| 151 | </row> | ||
| 152 | |||
| 153 | <row> | ||
| 154 | <entry>Enea rpm folder for downloading RPM packages for this | ||
| 155 | target</entry> | ||
| 156 | |||
| 157 | <entry><ulink | ||
| 158 | url="https://linux.enea.com/6/p2041rgb/rpm">https://linux.enea.com/6/p2041rgb/rpm</ulink></entry> | ||
| 159 | </row> | ||
| 160 | </tbody> | ||
| 161 | </tgroup> | ||
| 162 | </informaltable></para> | ||
| 163 | </section> | ||
| 164 | </section> | ||
| 165 | </section> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-user-hardening-guide/doc/eltf_params_updated_template_how_to_use.txt b/doc/book-enea-nfv-access-user-hardening-guide/doc/eltf_params_updated_template_how_to_use.txt new file mode 100644 index 0000000..87a6445 --- /dev/null +++ b/doc/book-enea-nfv-access-user-hardening-guide/doc/eltf_params_updated_template_how_to_use.txt | |||
| @@ -0,0 +1,320 @@ | |||
| 1 | eltf_params_template_updated_howto_use.txt | ||
| 2 | |||
| 3 | This is a way to collect all parameters for an Enea NFV Access release | ||
| 4 | in one parameter file, easy to automatically update by ELTF regularly. | ||
| 5 | |||
| 6 | NOTE: Both the release info AND the open source books use parameters from | ||
| 7 | here, but the XML file is inside the release info book directory. | ||
| 8 | |||
| 9 | NOTE: The manifest_conf.mk, or overridden by the environment variable | ||
| 10 | MANIFESTHASH, contains the full tag (or hashvalue) for downloading | ||
| 11 | the manifest when the books are built. The list of target | ||
| 12 | directories are fetched from the manifest into the book. | ||
| 13 | The eltf_params_updates.xml can all the time contain | ||
| 14 | the final next complete tag e.g. refs/tags/EL6 or similar | ||
| 15 | in the ELTF_PL_CLONE_W_REPO parameter command lines. | ||
| 16 | |||
| 17 | The ordinary book XML files use xi:include statements to include elements | ||
| 18 | from this parameter file. The book XML files can thus be manually edited. | ||
| 19 | Before editing, you must run "make init". | ||
| 20 | Any other text in the template or updated.xml file, outside the parts that | ||
| 21 | are included in the book, are not used but still all must be correct | ||
| 22 | DocBook XML files. | ||
| 23 | |||
| 24 | ELTF work: | ||
| 25 | template => ELTF replaces ALL ELTF_xxx variables => updated XML file | ||
| 26 | => push to git only if changed | ||
| 27 | |||
| 28 | |||
| 29 | eltf_params_template.xml (in git) | ||
| 30 | File used by ELTF to autocreate/update the real parameter | ||
| 31 | file eltf_params_updated.xml. | ||
| 32 | |||
| 33 | eltf_params_updated.xml (in git) | ||
| 34 | Real parameter file where ELTF has replaced all ELTF_xx variables with | ||
| 35 | strings, in several cases with multiline strings. | ||
| 36 | No spaces or linefeed allowed in beginning or end of the variable values! | ||
| 37 | |||
| 38 | |||
| 39 | xi:include: Each parameter is xi:include'ed in various book files, using | ||
| 40 | the IDs existing in the parameter files. | ||
| 41 | In most cases the 1:st element inside an element with an ID is included | ||
| 42 | using a format like eltf-prereq-apt-get-commands-host/1. | ||
| 43 | In very few cases the element with the ID is included in the book, one | ||
| 44 | example is the target section which has an ID, but which contains | ||
| 45 | multiple subsections, one per target. | ||
| 46 | All IDs in a book must be unique. | ||
| 47 | |||
| 48 | DocBook XML: All XML files must be correct DocBook XML files. | ||
| 49 | |||
| 50 | Do NOT edit/save the real *updated.xml file with XMLmind to avoid changes | ||
| 51 | not done by ELTF. But it is OK to open the real file in XMLmind to | ||
| 52 | check that the format is correct. | ||
| 53 | |||
| 54 | ELTF should autocreate a temporary "real" file but only replace | ||
| 55 | and push the eltf_params_updated.xml if it is changed. | ||
| 56 | |||
| 57 | |||
| 58 | make eltf | ||
| 59 | This lists all ELTF_xxx variables and some rules how to treat them | ||
| 60 | |||
| 61 | DocBook Format: All elements - rules: | ||
| 62 | Several strict generic XML rules apply for all strings: | ||
| 63 | 1. No TABs allowed or any other control chr than "linefeed" | ||
| 64 | 2. Only 7-bit ASCII | ||
| 65 | 3. Any < > & must be converted to < > and & | ||
| 66 | Similar for any other non-7-bit-ASCII but avoid those! | ||
| 67 | 4. No leading spaces or linefeeds when replacing the ELTF_* variable | ||
| 68 | 5. No trailing spaces or linefeeds when replacing the ELTF_* variable | ||
| 69 | 6. Note: Keep existing spaces before/efter ELTF_* in a few cases. | ||
| 70 | |||
| 71 | DocBook Format: <programlisting> - rules: ELTF*PL* variables | ||
| 72 | Several strict rules apply for the multiline string in programlisting | ||
| 73 | in addition to the general XML rules above: | ||
| 74 | 7. Max line length < 80 char | ||
| 75 | 8. Use backslash (\) to break longer lines | ||
| 76 | 9. Use spaces (e.g. 4) to indent continuation lines in programlistings | ||
| 77 | 10. No trailing spaces on any line | ||
| 78 | 11. No spaces or linefeed immediately after leading <programlisting> | ||
| 79 | 12. No spaces or linefeed before trailing </programlisting> | ||
| 80 | |||
| 81 | DocBook Format: <ulink> - rules: ELTF_*URL* variables | ||
| 82 | 13. ELTF_*URL and corresponding ELTF_*TXTURL shall be identical strings | ||
| 83 | 14. Only if the URL is extremely long, the TXTURL can be a separate string | ||
| 84 | |||
| 85 | Each target has one section with target parameters: | ||
| 86 | <section id="eltf-target-table-ELTF_T_MANIFEST_DIR"> | ||
| 87 | <title>MACHINE ELTF_T_MANIFEST_DIR - Information</title> | ||
| 88 | ..... with many ELTF_ variables .... | ||
| 89 | </section> | ||
| 90 | |||
| 91 | 15. If there is only one target. ELTF just replaces ELTF parameters | ||
| 92 | |||
| 93 | 16. It there are multiple targets. ELTF copies the section and appends the | ||
| 94 | section the required number of times. | ||
| 95 | Each section ID will become unique: eltf-target-table-ELTF_T_MANIFEST_DIR | ||
| 96 | Each section title will become unique | ||
| 97 | |||
| 98 | Tables with target parameters in each target section: | ||
| 99 | 17. It is possible for ELTF to append more rows with one parameter each | ||
| 100 | to these tables, because the entire tables are included in the book | ||
| 101 | |||
| 102 | Special - NOT YET READY DEFINED how to handle the optionally included | ||
| 103 | Eclipse and its version, but this is a first suggestion: | ||
| 104 | 18. Just now ELTF can define ELFT_ECLIPSE_VERSION as a full string | ||
| 105 | with both version number and name, | ||
| 106 | 19. MANUALLY if Eclipse is NOT included in the release, | ||
| 107 | the release manager should manually set condition="hidden" on | ||
| 108 | the entire section in the book XML about Eclipse | ||
| 109 | |||
| 110 | |||
| 111 | |||
| 112 | BELOW WE TRY TO EXPLAIN EACH ELTF_* variable, but always check with make eltf | ||
| 113 | if there are more new variables, missing in this description file. | ||
| 114 | |||
| 115 | _____________________________________________________________________________ | ||
| 116 | ELTF_PL_HOST_PREREQ Multiline list of host prerequisites, e.g. commands | ||
| 117 | like sudo apt-get install xxxx or similar. | ||
| 118 | First line = comment with the complete host name! | ||
| 119 | It is possible to include multiple hosts by just | ||
| 120 | adding an empty line, comment with host name, etc. | ||
| 121 | xi:include eltf-prereq-apt-get-commands-host/1 | ||
| 122 | This is a <programlisting>...</programlisting> | ||
| 123 | Example: | ||
| 124 | # Host Ubuntu 14.04.5 LTS 64bit | ||
| 125 | sudo apt-get update | ||
| 126 | sudo apt-get install sed wget subversion git-core coreutils unzip texi2html \ | ||
| 127 | texinfo libsdl1.2-dev docbook-utils fop gawk python-pysqlite2 diffstat \ | ||
| 128 | make gcc build-essential xsltproc g++ desktop-file-utils chrpath \ | ||
| 129 | libgl1-mesa-dev libglu1-mesa-dev autoconf automake groff libtool xterm \ | ||
| 130 | libxml-parser-perl | ||
| 131 | |||
| 132 | _____________________________________________________________________________ | ||
| 133 | ELTF_PL_GET_REPO Multiline commands to download the repo tool | ||
| 134 | xi:include eltf-getting-repo-install-command/1 | ||
| 135 | This is a <programlisting>...</programlisting> | ||
| 136 | Example: | ||
| 137 | mkdir -p ~/bin | ||
| 138 | curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo | ||
| 139 | chmod a+x ~/bin/repo | ||
| 140 | export PATH=~/bin:$PATH | ||
| 141 | |||
| 142 | _____________________________________________________________________________ | ||
| 143 | ELTF_EL_REL_VER General parameter string: The version of this Enea | ||
| 144 | Linux release. Major version and optional .Minor | ||
| 145 | Typically created from MAJOR and MINOR in enea.conf | ||
| 146 | MINOR in enea.conf is empty or contains a dot+minor | ||
| 147 | xi_include EneaLinux_REL_VER/1 | ||
| 148 | This is a <phrase>X.x</phrase> used in many places. | ||
| 149 | Examples: | ||
| 150 | 6 | ||
| 151 | or | ||
| 152 | 6.1 | ||
| 153 | |||
| 154 | _____________________________________________________________________________ | ||
| 155 | ELTF_YOCTO_VER General parameter string: Yocto version, created | ||
| 156 | from DISTRO in poky.ent | ||
| 157 | xi:include Yocto_VER/1 | ||
| 158 | This is a <phrase>X.x</phrase> used in many places. | ||
| 159 | Example: | ||
| 160 | 2.1 | ||
| 161 | |||
| 162 | _____________________________________________________________________________ | ||
| 163 | ELTF_YOCTO_NAME General parameter string: Yocto name (branch), created | ||
| 164 | from DISTRO_NAME_NO_CAP in poky.ent | ||
| 165 | xi:include Yocto_NAME/1 | ||
| 166 | This is a <phrase>X.x</phrase> used in many places. | ||
| 167 | Example: | ||
| 168 | krogoth | ||
| 169 | |||
| 170 | _____________________________________________________________________________ | ||
| 171 | ELTF_YOCTO_PROJ_DOWNLOAD_TXTURL General parameters. These two are IDENTICAL | ||
| 172 | ELTF_YOCTO_PROJ_DOWNLOAD_URL strings with correct Yocto version string | ||
| 173 | at the end, typically without "dot". | ||
| 174 | xi:include ULINK_YOCTO_PROJECT_DOWNLOAD/1 | ||
| 175 | This is an <ulink url="...">...</ulink> | ||
| 176 | Example: | ||
| 177 | http://www.yoctoproject.org/downloads/core/krogoth/21 | ||
| 178 | |||
| 179 | _____________________________________________________________________________ | ||
| 180 | ELTF_EL_DOWNLOAD_TXTURL General parameters. These two are IDENTICAL strings | ||
| 181 | ELTF_EL_DOWNLOAD_URL and shall be the http:/..... address where | ||
| 182 | Enea NFV Access can be downloaded | ||
| 183 | Often containing same version as in ELTF_EL_REL_VER | ||
| 184 | xi:include ULINK_ENEA_LINUX_URL/1 | ||
| 185 | This is an <ulink url="...">...</ulink> | ||
| 186 | Example: | ||
| 187 | http://linux.enea.com/6 | ||
| 188 | |||
| 189 | _____________________________________________________________________________ | ||
| 190 | ELTF_PL_CLONE_W_REPO Multiline commands to run repo to clone everything. | ||
| 191 | Use the variable $MACHINE/default.xml (the text in | ||
| 192 | the book will list the avaiable values of MACHINE, | ||
| 193 | taken from the manifest repository) | ||
| 194 | xi:include eltf-repo-cloning-enea-linux/1 | ||
| 195 | This is a <programlisting>...</programlisting> | ||
| 196 | Example: | ||
| 197 | mkdir enea-linux | ||
| 198 | cd enea-linux | ||
| 199 | repo init -u git://git.enea.com/linux/el_manifests-standard.git \ | ||
| 200 | -b refs/tags/EL6 -m $MACHINE/default.xml | ||
| 201 | repo sync | ||
| 202 | |||
| 203 | _____________________________________________________________________________ | ||
| 204 | ELTF_ECLIPSE_VERSION Optional general parameter string. | ||
| 205 | NOT YET READY DEFINED | ||
| 206 | Just now a release manage must manually set | ||
| 207 | condition="hidden" on the Eclipse section, | ||
| 208 | if Eclipse is not included in the release. | ||
| 209 | ELTF just replaces ELTF_ECLIPSE_VERSION with a full | ||
| 210 | string with "X.Y (name)" | ||
| 211 | It includes the ID and can only be ONCE in the book. | ||
| 212 | xi:include eltf-eclipse-version-row | ||
| 213 | Example. | ||
| 214 | 4.5 (Mars) | ||
| 215 | |||
| 216 | |||
| 217 | _____________________________________________________________________________ | ||
| 218 | ELTF_T_* All these are in each target (MACHINE) and ELTF | ||
| 219 | must separately replace them with strings for | ||
| 220 | each target | ||
| 221 | NOTE: All (except the MANIFEST_DIR) are in rows | ||
| 222 | in a table and ELTF can select to append | ||
| 223 | more parameters by adding more rows | ||
| 224 | |||
| 225 | _____________________________________________________________________________ | ||
| 226 | ELTF_T_MANIFEST_DIR This happens to be in two places. Must be exactly | ||
| 227 | ELTF_T_MANIFEST_DIR the directory name in the manifest, e.g. same | ||
| 228 | as the MACHINE names in $MACHINE/default.xml. | ||
| 229 | In book: a) Part of section ID | ||
| 230 | b) Part of section title | ||
| 231 | Examples: | ||
| 232 | p2041rgb | ||
| 233 | or | ||
| 234 | ls1021aiot | ||
| 235 | or | ||
| 236 | qemuarm | ||
| 237 | |||
| 238 | _____________________________________________________________________________ | ||
| 239 | ELTF_T_NAME Target specific: "Target Official Name" | ||
| 240 | NOT same as the target directory name in most cases. | ||
| 241 | In book: An <entry> element in a row | ||
| 242 | Examples: | ||
| 243 | P2041RGB | ||
| 244 | or | ||
| 245 | LS1021a-IoT | ||
| 246 | or | ||
| 247 | qemuarm | ||
| 248 | |||
| 249 | _____________________________________________________________________________ | ||
| 250 | ELTF_T_ARC_DESC Target specific: "Architecture and Description" | ||
| 251 | It can be a short identification string or | ||
| 252 | it can be a longer descriptive sentence. | ||
| 253 | In book: An <entry> element in a row | ||
| 254 | Examples: | ||
| 255 | Power, e500mc | ||
| 256 | or | ||
| 257 | ARM Cortex-A7 | ||
| 258 | |||
| 259 | _____________________________________________________________________________ | ||
| 260 | ELTF_T_DS_TXTURL Target specific: "Link to target datasheet. These | ||
| 261 | ELTF_T_DS_URL two usually are IDENTICAL strings with correct | ||
| 262 | hyperlink to the target's official datasheet. | ||
| 263 | In book: an <ulink url="...">...</ulink> | ||
| 264 | Only if the link is VERY LONG, the text part shall | ||
| 265 | instead be a descriptive string (see 2:nd example). | ||
| 266 | NOTE: Also here no spaces or line-feeds! | ||
| 267 | Examples: | ||
| 268 | url="http://wiki.qemu.org">http://wiki.qemu.org | ||
| 269 | or | ||
| 270 | url="http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/qoriq-arm-processors/qoriq-ls1021a-iot-gateway-reference-design:LS1021A-IoT">link to NXP's datasheet | ||
| 271 | |||
| 272 | _____________________________________________________________________________ | ||
| 273 | ELTF_T_POKY_VER Target specific: "Poky version" created either | ||
| 274 | from POKYVERSION in poky.ent | ||
| 275 | or using a hashvalue with a leading string, in | ||
| 276 | which case it may be different per target. | ||
| 277 | In book: An <entry> in a row | ||
| 278 | Examples: | ||
| 279 | 15.0.0 | ||
| 280 | or | ||
| 281 | Git commit id: 75ca53211488a3e268037a44ee2a7ac5c7181bd2 | ||
| 282 | |||
| 283 | _____________________________________________________________________________ | ||
| 284 | ELTF_T_GCC_VER Target specific: "GCC Version". Should be in poky | ||
| 285 | but not easy to find among various parameters. | ||
| 286 | ELTF would extract it from build logs building SDK | ||
| 287 | and it is possibly different per target. | ||
| 288 | In book: An <entry> in a row | ||
| 289 | Example: | ||
| 290 | 5.3 | ||
| 291 | |||
| 292 | _____________________________________________________________________________ | ||
| 293 | ELTF_T_KERN_VER Target specific: "Linux Kernel Version". Often | ||
| 294 | different per target. | ||
| 295 | In book: An <entry> in a row | ||
| 296 | Example: | ||
| 297 | 3.12 | ||
| 298 | |||
| 299 | _____________________________________________________________________________ | ||
| 300 | ELTF_T_DRIVERS Target specific: "Supported Drivers". This is a | ||
| 301 | comma-separated list of driver names. | ||
| 302 | ELTF should create the list in same order for each | ||
| 303 | target, e.g. alphabetic migth be OK. | ||
| 304 | In book: An <entry> in a row | ||
| 305 | Example: | ||
| 306 | Ethernet, I2C, SPI, PCI, USB, SD/SDHC/SDXC | ||
| 307 | |||
| 308 | |||
| 309 | _____________________________________________________________________________ | ||
| 310 | ELTF_T_EL_RPM_TXTURL Target specific: "Enea rpm folder for downloading | ||
| 311 | ELTF_T_EL_RPM_URL RPM packages for this target". These two are | ||
| 312 | INDENTICAL strings with hyperlink to the web site | ||
| 313 | at Enea where the customer can download RPMs | ||
| 314 | Note: Often the ELFT_EL_REL_VER value and | ||
| 315 | the ELTF_T_MANIFEST_DIR are used in the link. | ||
| 316 | In book: an <ulink url="...">...</ulink> | ||
| 317 | Example: | ||
| 318 | url="https://linux.enea.com/6/ls1021aiot/rpm">https://linux.enea.com/6/ls1021aiot/rpm | ||
| 319 | |||
| 320 | _____________________________________________________________________________ | ||
diff --git a/doc/book-enea-nfv-access-user-hardening-guide/doc/guidelines_hardening_linux.xml b/doc/book-enea-nfv-access-user-hardening-guide/doc/guidelines_hardening_linux.xml new file mode 100644 index 0000000..46245da --- /dev/null +++ b/doc/book-enea-nfv-access-user-hardening-guide/doc/guidelines_hardening_linux.xml | |||
| @@ -0,0 +1,212 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
| 4 | <chapter id="linux_hardening"> | ||
| 5 | <title>Guidelines on How to Harden a Linux System</title> | ||
| 6 | |||
| 7 | <para>In order to effectively create apt security layers to harden your | ||
| 8 | system correctly, you must first analyze your needs and answer several | ||
| 9 | ideas/questions which are detailed below.</para> | ||
| 10 | |||
| 11 | <orderedlist> | ||
| 12 | <listitem> | ||
| 13 | <para><emphasis role="bold">Analyzing and defining Roles for your | ||
| 14 | system</emphasis></para> | ||
| 15 | |||
| 16 | <itemizedlist> | ||
| 17 | <listitem> | ||
| 18 | <para>What purpose does the system have?</para> | ||
| 19 | </listitem> | ||
| 20 | |||
| 21 | <listitem> | ||
| 22 | <para>What security risks apply to the system?</para> | ||
| 23 | </listitem> | ||
| 24 | |||
| 25 | <listitem> | ||
| 26 | <para>Is it host/server? Does it need to do remote access? Public | ||
| 27 | use?</para> | ||
| 28 | </listitem> | ||
| 29 | |||
| 30 | <listitem> | ||
| 31 | <para>How hardened the system need to be? (This depends on what role | ||
| 32 | it has).</para> | ||
| 33 | </listitem> | ||
| 34 | </itemizedlist> | ||
| 35 | </listitem> | ||
| 36 | |||
| 37 | <listitem> | ||
| 38 | <para><emphasis role="bold">Review Policies and | ||
| 39 | Compliances</emphasis></para> | ||
| 40 | |||
| 41 | <para>What policies and compliances must your system adhere to? Examples | ||
| 42 | of possible standards and polices, among many others, are:</para> | ||
| 43 | |||
| 44 | <itemizedlist> | ||
| 45 | <listitem> | ||
| 46 | <para>PCI DSS (confidentiality of credit card consumer data)</para> | ||
| 47 | </listitem> | ||
| 48 | |||
| 49 | <listitem> | ||
| 50 | <para>HIPAA (protects patient data in health care system)</para> | ||
| 51 | </listitem> | ||
| 52 | |||
| 53 | <listitem> | ||
| 54 | <para>FISMA (Federal Information Security Management Act)</para> | ||
| 55 | </listitem> | ||
| 56 | |||
| 57 | <listitem> | ||
| 58 | <para>ISO 27001 family (Information Security Management | ||
| 59 | Systems)</para> | ||
| 60 | </listitem> | ||
| 61 | </itemizedlist> | ||
| 62 | </listitem> | ||
| 63 | |||
| 64 | <listitem> | ||
| 65 | <para><emphasis role="bold">Keep the Software | ||
| 66 | up-to-date</emphasis></para> | ||
| 67 | |||
| 68 | <para>Apply software updates and security fixes regularly. Upgrade as | ||
| 69 | soon a new version is available. It is easier to hack a system which is | ||
| 70 | running publicly known vulnerable software but this can be avoided. | ||
| 71 | Linux provides all necessary tools to keep the system updated. All | ||
| 72 | security updates should be reviewed and applied as soon as | ||
| 73 | possible.</para> | ||
| 74 | </listitem> | ||
| 75 | |||
| 76 | <listitem> | ||
| 77 | <para><emphasis role="bold">Mandatory Access Control | ||
| 78 | (MAC)</emphasis></para> | ||
| 79 | |||
| 80 | <para>SELinux, TOMOYO, SMACK (Simplified Mandatory Access Control | ||
| 81 | Kernel).</para> | ||
| 82 | </listitem> | ||
| 83 | |||
| 84 | <listitem> | ||
| 85 | <para><emphasis role="bold">Memory Protection and ASLR | ||
| 86 | </emphasis></para> | ||
| 87 | |||
| 88 | <para>There are two major mechanisms in place to protect memory access | ||
| 89 | which turned on by default on most x86-64 Linux systems. The first is | ||
| 90 | the so-called NX bit, which is a setting that gives finer-grained | ||
| 91 | permissions to mapped memory regions. The second is address space layout | ||
| 92 | randomization (ASLR) which randomizes where certain parts of a program | ||
| 93 | are loaded into memory. For further reading on this, see <ulink | ||
| 94 | url="https://eklitzke.org/memory-protection-and-aslr">here</ulink>.</para> | ||
| 95 | </listitem> | ||
| 96 | |||
| 97 | <listitem> | ||
| 98 | <para><emphasis role="bold">Block unauthorized access to a network and | ||
| 99 | Restrict Access</emphasis></para> | ||
| 100 | |||
| 101 | <itemizedlist> | ||
| 102 | <listitem> | ||
| 103 | <para>Enable the firewall (see what rules are already configured | ||
| 104 | iptables -L)</para> | ||
| 105 | </listitem> | ||
| 106 | |||
| 107 | <listitem> | ||
| 108 | <para>Use Intrusion Detection/Intrusion Prevention</para> | ||
| 109 | </listitem> | ||
| 110 | |||
| 111 | <listitem> | ||
| 112 | <para>Disable unused accounts, create user groups and domain | ||
| 113 | policy</para> | ||
| 114 | </listitem> | ||
| 115 | |||
| 116 | <listitem> | ||
| 117 | <para>Remove unused/unsecure/obsolete software</para> | ||
| 118 | </listitem> | ||
| 119 | |||
| 120 | <listitem> | ||
| 121 | <para>Disable unused services</para> | ||
| 122 | </listitem> | ||
| 123 | |||
| 124 | <listitem> | ||
| 125 | <para>Restrict remote access and administration</para> | ||
| 126 | </listitem> | ||
| 127 | </itemizedlist> | ||
| 128 | </listitem> | ||
| 129 | |||
| 130 | <listitem> | ||
| 131 | <para><emphasis role="bold">Use tools to detect | ||
| 132 | vulnerabilities</emphasis></para> | ||
| 133 | |||
| 134 | <itemizedlist> | ||
| 135 | <listitem> | ||
| 136 | <para>Vulnerability scanner, such as Nessus, SAINT, OpenVAS.</para> | ||
| 137 | </listitem> | ||
| 138 | |||
| 139 | <listitem> | ||
| 140 | <para>Network analyzer, such as Nmap, Wireshark.</para> | ||
| 141 | </listitem> | ||
| 142 | |||
| 143 | <listitem> | ||
| 144 | <para>Baseline Analyzer, such as Bastille which can view OS | ||
| 145 | configuration and try to optimize.</para> | ||
| 146 | </listitem> | ||
| 147 | </itemizedlist> | ||
| 148 | </listitem> | ||
| 149 | |||
| 150 | <listitem> | ||
| 151 | <para><emphasis role="bold">Create a Secure logging | ||
| 152 | System</emphasis></para> | ||
| 153 | |||
| 154 | <para>Create a secure Linux logging system that can be expanded to other | ||
| 155 | types of systems for secure logging. By using logs, data can be | ||
| 156 | collected in order to discern why a server crashed. If the server is | ||
| 157 | unrecoverable, remote logs allow you the ability to see what happened | ||
| 158 | prior to the crash, even without the system running. If the crash was | ||
| 159 | related to an intrusion, any information that describes how the system | ||
| 160 | was compromised can help determine new approaches so further intrusions | ||
| 161 | can be prevented.</para> | ||
| 162 | </listitem> | ||
| 163 | |||
| 164 | <listitem> | ||
| 165 | <para><emphasis role="bold">Backup & recovery</emphasis></para> | ||
| 166 | |||
| 167 | <para>If a system is compromised, the first concern is how to recover. | ||
| 168 | To ensure that there is something to recove, backup the data and | ||
| 169 | configurations continually.</para> | ||
| 170 | </listitem> | ||
| 171 | |||
| 172 | <listitem> | ||
| 173 | <para><emphasis role="bold">Physical Security</emphasis></para> | ||
| 174 | |||
| 175 | <para>No matter how many security features may be implemented, there is | ||
| 176 | always a way that an attacker with physical access to the system | ||
| 177 | (hardware and software) may by-pass them. To make this as difficult as | ||
| 178 | possible, there are several actions that can be taken to provide a | ||
| 179 | degree of security against an attacker with physical access to the | ||
| 180 | machine:</para> | ||
| 181 | |||
| 182 | <itemizedlist> | ||
| 183 | <listitem> | ||
| 184 | <para>Make sure unauthorized persons don’t have easy access to | ||
| 185 | the hardware and software.</para> | ||
| 186 | </listitem> | ||
| 187 | |||
| 188 | <listitem> | ||
| 189 | <para>Prevent an attacker from booting from another disk/USB.</para> | ||
| 190 | </listitem> | ||
| 191 | |||
| 192 | <listitem> | ||
| 193 | <para>Set permissions and login restrictions as well as a firmware | ||
| 194 | password. It is also important to set a secondary bootloader | ||
| 195 | password (LILO or GRUB) to prevent malicious users from | ||
| 196 | booting.</para> | ||
| 197 | </listitem> | ||
| 198 | |||
| 199 | <listitem> | ||
| 200 | <para>Encrypt disks before they are installed.</para> | ||
| 201 | </listitem> | ||
| 202 | </itemizedlist> | ||
| 203 | </listitem> | ||
| 204 | |||
| 205 | <listitem> | ||
| 206 | <para><emphasis role="bold">Review Process</emphasis></para> | ||
| 207 | |||
| 208 | <para>Review your security process and security policies often, and | ||
| 209 | continually seek to improve them.</para> | ||
| 210 | </listitem> | ||
| 211 | </orderedlist> | ||
| 212 | </chapter> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-user-hardening-guide/doc/intro_hardentools_tech.xml b/doc/book-enea-nfv-access-user-hardening-guide/doc/intro_hardentools_tech.xml new file mode 100644 index 0000000..294d67e --- /dev/null +++ b/doc/book-enea-nfv-access-user-hardening-guide/doc/intro_hardentools_tech.xml | |||
| @@ -0,0 +1,209 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <chapter id="intro_hardentools_tech"> | ||
| 3 | <title>A Brief Introduction to Hardening Tools and Technologies</title> | ||
| 4 | |||
| 5 | <para>Linux by default, is not a secure operating system however, it has | ||
| 6 | many features and tools that can help secure it thoroughly. Detailed below | ||
| 7 | are several useful tools and features available for Linux which can help | ||
| 8 | harden the Linux system to really high degrees.</para> | ||
| 9 | |||
| 10 | <section id="namespaces"> | ||
| 11 | <title>Namespaces</title> | ||
| 12 | |||
| 13 | <para>Namespaces are a feature of the Linux kernel that isolate and | ||
| 14 | virtualize system resources for a collection of processes. Examples of | ||
| 15 | resources that can be virtualized are:</para> | ||
| 16 | |||
| 17 | <itemizedlist> | ||
| 18 | <listitem> | ||
| 19 | <para>Process IDs</para> | ||
| 20 | </listitem> | ||
| 21 | |||
| 22 | <listitem> | ||
| 23 | <para>Hostnames</para> | ||
| 24 | </listitem> | ||
| 25 | |||
| 26 | <listitem> | ||
| 27 | <para>User IDs</para> | ||
| 28 | </listitem> | ||
| 29 | |||
| 30 | <listitem> | ||
| 31 | <para>Network access</para> | ||
| 32 | </listitem> | ||
| 33 | |||
| 34 | <listitem> | ||
| 35 | <para>UTS</para> | ||
| 36 | </listitem> | ||
| 37 | |||
| 38 | <listitem> | ||
| 39 | <para>Control Group (cgroup)</para> | ||
| 40 | </listitem> | ||
| 41 | |||
| 42 | <listitem> | ||
| 43 | <para>Interprocess communication (IPC)</para> | ||
| 44 | </listitem> | ||
| 45 | |||
| 46 | <listitem> | ||
| 47 | <para>Filesystems (mnt)</para> | ||
| 48 | </listitem> | ||
| 49 | </itemizedlist> | ||
| 50 | |||
| 51 | <para>Namespaces are a fundamental aspect of containers on Linux. Tools | ||
| 52 | like Docker make isolating Linux processes into their own little system | ||
| 53 | environments easy. This makes it possible to run a whole range of | ||
| 54 | applications on a single real Linux machine and ensure that no processes | ||
| 55 | can interfere with each other, without having to resort to using virtual | ||
| 56 | machines. </para> | ||
| 57 | </section> | ||
| 58 | |||
| 59 | <section id="intrusion_prev_dev"> | ||
| 60 | <title>Linux Intrusion Prevention/Detection Systems</title> | ||
| 61 | |||
| 62 | <para>An Intrusion Prevention System (IPS) and an Intrusion Detection | ||
| 63 | System (IDS) provide an effective layer of security. The Linux Intrusion | ||
| 64 | Detection System (LIDS) is a patch to the Linux kernel and associated | ||
| 65 | administrative tools, and enhances the kernel's security by implementing | ||
| 66 | Mandatory Access Control (MAC).</para> | ||
| 67 | |||
| 68 | <para>When a LIDS system is booted, file restrictions are enforced | ||
| 69 | immediately. Once the system has come on, the <command>lidsadm | ||
| 70 | -I</command> command will seal off the kernel, preventing any additional | ||
| 71 | kernel modules from affecting it.</para> | ||
| 72 | </section> | ||
| 73 | |||
| 74 | <section id="kernel_hardening"> | ||
| 75 | <title>Kernel Hardening</title> | ||
| 76 | |||
| 77 | <para>Kernel hardening is primarily about the kernel protecting itself, | ||
| 78 | eliminating classes of exploits, and reducing its attack surface. Two | ||
| 79 | approaches to hardening the standard Linux kernel are: </para> | ||
| 80 | |||
| 81 | <itemizedlist> | ||
| 82 | <listitem> | ||
| 83 | <para>Address space (memory) protection</para> | ||
| 84 | </listitem> | ||
| 85 | |||
| 86 | <listitem> | ||
| 87 | <para>Advance Access Control System</para> | ||
| 88 | </listitem> | ||
| 89 | </itemizedlist> | ||
| 90 | |||
| 91 | <para>Buffer overflows (in languages such as C) are one of the leading | ||
| 92 | vulnerabilities exploited to gain control of a system. The problem arises | ||
| 93 | when a user can insert more data into a buffer than it was originally | ||
| 94 | allocated for. Restrictions however, on an application's address space | ||
| 95 | prevent many types of buffer overflows attacks.</para> | ||
| 96 | </section> | ||
| 97 | |||
| 98 | <section id="lsm"> | ||
| 99 | <title>Linux Security Modules (LSM)</title> | ||
| 100 | |||
| 101 | <para>LSM is a framework part of the Linux kernel. LSM API implements | ||
| 102 | hooks at all security-critical points within the kernel. The modules | ||
| 103 | currently accepted in the official kernel are:</para> | ||
| 104 | |||
| 105 | <itemizedlist> | ||
| 106 | <listitem> | ||
| 107 | <para>AppArmor</para> | ||
| 108 | </listitem> | ||
| 109 | |||
| 110 | <listitem> | ||
| 111 | <para>SELinux</para> | ||
| 112 | </listitem> | ||
| 113 | |||
| 114 | <listitem> | ||
| 115 | <para>Smack</para> | ||
| 116 | </listitem> | ||
| 117 | |||
| 118 | <listitem> | ||
| 119 | <para>TOMOYO Linux</para> | ||
| 120 | </listitem> | ||
| 121 | |||
| 122 | <listitem> | ||
| 123 | <para>Yama</para> | ||
| 124 | </listitem> | ||
| 125 | </itemizedlist> | ||
| 126 | |||
| 127 | <section id="selinux"> | ||
| 128 | <title>SELinux</title> | ||
| 129 | |||
| 130 | <para><emphasis role="bold">SELinux, Security Enhanced Linux</emphasis> | ||
| 131 | is a Kernel security mechanism for the supporting access control | ||
| 132 | security policy. SELinux has three configuration modes:</para> | ||
| 133 | |||
| 134 | <itemizedlist> | ||
| 135 | <listitem> | ||
| 136 | <para>Disabled: Turned-off</para> | ||
| 137 | </listitem> | ||
| 138 | |||
| 139 | <listitem> | ||
| 140 | <para>Permissive: Prints warnings</para> | ||
| 141 | </listitem> | ||
| 142 | |||
| 143 | <listitem> | ||
| 144 | <para>Enforcing: Policy is enforced</para> | ||
| 145 | </listitem> | ||
| 146 | </itemizedlist> | ||
| 147 | |||
| 148 | <para>Edit the selinux config file to change the | ||
| 149 | configuration:<programlisting># /etc/selinux/config | ||
| 150 | SELINUX=enforcing</programlisting></para> | ||
| 151 | </section> | ||
| 152 | </section> | ||
| 153 | |||
| 154 | <section id="acl"> | ||
| 155 | <title>POSIX Access Control Lists (ACL)</title> | ||
| 156 | |||
| 157 | <para>In addition to the file owner, the file group etc., additional users | ||
| 158 | and groups can be granted or denied access by using POSIX ACLs. For a | ||
| 159 | file, ACLs can be configured:</para> | ||
| 160 | |||
| 161 | <itemizedlist> | ||
| 162 | <listitem> | ||
| 163 | <para>Per user </para> | ||
| 164 | </listitem> | ||
| 165 | |||
| 166 | <listitem> | ||
| 167 | <para>Per group</para> | ||
| 168 | </listitem> | ||
| 169 | |||
| 170 | <listitem> | ||
| 171 | <para>Via the effective right mask</para> | ||
| 172 | </listitem> | ||
| 173 | |||
| 174 | <listitem> | ||
| 175 | <para>For users not in the user group, for the file</para> | ||
| 176 | </listitem> | ||
| 177 | </itemizedlist> | ||
| 178 | </section> | ||
| 179 | |||
| 180 | <section id="log_audit"> | ||
| 181 | <title>Logging and Auditing</title> | ||
| 182 | |||
| 183 | <para>Audit logs are useful for analyzing system behavior, and may help | ||
| 184 | detect attempts at compromising the system. Enea Linux distributions have | ||
| 185 | logging mechanisms that record all system activities. The syslog service | ||
| 186 | manages the logs in <command>/var/log/</command>. These logs are critical | ||
| 187 | for troubleshooting purposes.</para> | ||
| 188 | </section> | ||
| 189 | |||
| 190 | <section id="secure_net_coms"> | ||
| 191 | <title>Secure Network Communication</title> | ||
| 192 | |||
| 193 | <para>Encrypt and authenticate network communication using IPsec.</para> | ||
| 194 | </section> | ||
| 195 | |||
| 196 | <section id="hd_encrypting"> | ||
| 197 | <title>Hard Disk Encryption and Disk Protection</title> | ||
| 198 | |||
| 199 | <para>Encrypt the disks before they are installed. This is a crucial step | ||
| 200 | as it will prevent unauthorized access to data even when the hard disk is | ||
| 201 | connected to a different machine.</para> | ||
| 202 | |||
| 203 | <para>Disk protection is a key step in securing data. Make sure that you | ||
| 204 | backup data so that situations such as a damaged system and bugs in the OS | ||
| 205 | updates won't affect them. The backup must be transferred offsite | ||
| 206 | for major servers to keep data secure during unforeseen disasters. Backup | ||
| 207 | management must also be well-defined.</para> | ||
| 208 | </section> | ||
| 209 | </chapter> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-user-hardening-guide/doc/intro_info_security.xml b/doc/book-enea-nfv-access-user-hardening-guide/doc/intro_info_security.xml new file mode 100644 index 0000000..bbc203b --- /dev/null +++ b/doc/book-enea-nfv-access-user-hardening-guide/doc/intro_info_security.xml | |||
| @@ -0,0 +1,144 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
| 4 | <chapter id="intro_info_security"> | ||
| 5 | <title>Introduction to Information Security</title> | ||
| 6 | |||
| 7 | <para><remark>I want to add an intro to this chapter, it's too brief and | ||
| 8 | vague, what is the purpose of these 3 lists, what are they intended to | ||
| 9 | introduce?</remark></para> | ||
| 10 | |||
| 11 | <section id="security_categories"> | ||
| 12 | <title>Related Security Categories</title> | ||
| 13 | |||
| 14 | <itemizedlist> | ||
| 15 | <listitem> | ||
| 16 | <para>Internet Security</para> | ||
| 17 | </listitem> | ||
| 18 | |||
| 19 | <listitem> | ||
| 20 | <para>Cyberwarfare</para> | ||
| 21 | </listitem> | ||
| 22 | |||
| 23 | <listitem> | ||
| 24 | <para>Computer Security</para> | ||
| 25 | </listitem> | ||
| 26 | |||
| 27 | <listitem> | ||
| 28 | <para>Mobile Security</para> | ||
| 29 | </listitem> | ||
| 30 | |||
| 31 | <listitem> | ||
| 32 | <para>Network Security</para> | ||
| 33 | </listitem> | ||
| 34 | </itemizedlist> | ||
| 35 | </section> | ||
| 36 | |||
| 37 | <section id="threats"> | ||
| 38 | <title>Threats</title> | ||
| 39 | |||
| 40 | <itemizedlist> | ||
| 41 | <listitem> | ||
| 42 | <para>Computer Crime</para> | ||
| 43 | </listitem> | ||
| 44 | |||
| 45 | <listitem> | ||
| 46 | <para>Vulnerability</para> | ||
| 47 | </listitem> | ||
| 48 | |||
| 49 | <listitem> | ||
| 50 | <para>Eavesdropping</para> | ||
| 51 | </listitem> | ||
| 52 | |||
| 53 | <listitem> | ||
| 54 | <para>Exploitation</para> | ||
| 55 | </listitem> | ||
| 56 | |||
| 57 | <listitem> | ||
| 58 | <para>Trojan Horse</para> | ||
| 59 | </listitem> | ||
| 60 | |||
| 61 | <listitem> | ||
| 62 | <para>Computer Viruses and Computer Worms</para> | ||
| 63 | </listitem> | ||
| 64 | |||
| 65 | <listitem> | ||
| 66 | <para>Denial of Service</para> | ||
| 67 | </listitem> | ||
| 68 | |||
| 69 | <listitem> | ||
| 70 | <para>Malware</para> | ||
| 71 | </listitem> | ||
| 72 | |||
| 73 | <listitem> | ||
| 74 | <para>Payload</para> | ||
| 75 | </listitem> | ||
| 76 | |||
| 77 | <listitem> | ||
| 78 | <para>Rootkit</para> | ||
| 79 | </listitem> | ||
| 80 | |||
| 81 | <listitem> | ||
| 82 | <para>Keylogger</para> | ||
| 83 | </listitem> | ||
| 84 | </itemizedlist> | ||
| 85 | </section> | ||
| 86 | |||
| 87 | <section id="defenses"> | ||
| 88 | <title>Defenses</title> | ||
| 89 | |||
| 90 | <itemizedlist> | ||
| 91 | <listitem> | ||
| 92 | <para>Computer Access Control</para> | ||
| 93 | </listitem> | ||
| 94 | |||
| 95 | <listitem> | ||
| 96 | <para>Application Security</para> | ||
| 97 | </listitem> | ||
| 98 | |||
| 99 | <listitem> | ||
| 100 | <para>Antivirus Software</para> | ||
| 101 | </listitem> | ||
| 102 | |||
| 103 | <listitem> | ||
| 104 | <para>Secure Coding</para> | ||
| 105 | </listitem> | ||
| 106 | |||
| 107 | <listitem> | ||
| 108 | <para>Security by Design</para> | ||
| 109 | </listitem> | ||
| 110 | |||
| 111 | <listitem> | ||
| 112 | <para>Secure Operating Systems</para> | ||
| 113 | </listitem> | ||
| 114 | |||
| 115 | <listitem> | ||
| 116 | <para>Authentication</para> | ||
| 117 | </listitem> | ||
| 118 | |||
| 119 | <listitem> | ||
| 120 | <para>Multi-factor Authentication</para> | ||
| 121 | </listitem> | ||
| 122 | |||
| 123 | <listitem> | ||
| 124 | <para>Authorization</para> | ||
| 125 | </listitem> | ||
| 126 | |||
| 127 | <listitem> | ||
| 128 | <para>Data-centric Security</para> | ||
| 129 | </listitem> | ||
| 130 | |||
| 131 | <listitem> | ||
| 132 | <para>Firewall</para> | ||
| 133 | </listitem> | ||
| 134 | |||
| 135 | <listitem> | ||
| 136 | <para>Intrusion Detection System</para> | ||
| 137 | </listitem> | ||
| 138 | |||
| 139 | <listitem> | ||
| 140 | <para>Intrusion Prevention System</para> | ||
| 141 | </listitem> | ||
| 142 | </itemizedlist> | ||
| 143 | </section> | ||
| 144 | </chapter> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-user-hardening-guide/doc/introduction.xml b/doc/book-enea-nfv-access-user-hardening-guide/doc/introduction.xml new file mode 100644 index 0000000..af6b99d --- /dev/null +++ b/doc/book-enea-nfv-access-user-hardening-guide/doc/introduction.xml | |||
| @@ -0,0 +1,102 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
| 4 | <chapter id="overview"> | ||
| 5 | <title>Overview</title> | ||
| 6 | |||
| 7 | <para>This document describes a set of activities needed for securing Enea | ||
| 8 | NFV Access by users. Most security hardening configurations and features | ||
| 9 | affect performance, and should only be set if more security but less | ||
| 10 | performance is required and acceptable. We emphasize to use layers of | ||
| 11 | security to get the desired degree of hardening.</para> | ||
| 12 | |||
| 13 | <section id="intro"> | ||
| 14 | <title>Introduction</title> | ||
| 15 | |||
| 16 | <para>This document describes several hardening techniques and Open Source | ||
| 17 | tools available for Enea NFV Access platforms.</para> | ||
| 18 | |||
| 19 | <section id="rev-hist"> | ||
| 20 | <title>Revision History</title> | ||
| 21 | |||
| 22 | <table> | ||
| 23 | <tgroup cols="4"> | ||
| 24 | <colspec align="center" /> | ||
| 25 | |||
| 26 | <thead> | ||
| 27 | <row> | ||
| 28 | <entry align="center">Revision</entry> | ||
| 29 | |||
| 30 | <entry align="center">Author</entry> | ||
| 31 | |||
| 32 | <entry align="center">Date</entry> | ||
| 33 | |||
| 34 | <entry align="center">Purpose of Revision</entry> | ||
| 35 | </row> | ||
| 36 | </thead> | ||
| 37 | |||
| 38 | <tbody> | ||
| 39 | <row> | ||
| 40 | <entry>3</entry> | ||
| 41 | |||
| 42 | <entry>Sona Sarmadi</entry> | ||
| 43 | |||
| 44 | <entry>2017-09-07</entry> | ||
| 45 | |||
| 46 | <entry>Added Introduction to Information Security, sec | ||
| 47 | 2.</entry> | ||
| 48 | </row> | ||
| 49 | |||
| 50 | <row> | ||
| 51 | <entry>2</entry> | ||
| 52 | |||
| 53 | <entry>Sona Sarmadi</entry> | ||
| 54 | |||
| 55 | <entry>2017-09-07</entry> | ||
| 56 | |||
| 57 | <entry>Updated section 2.</entry> | ||
| 58 | </row> | ||
| 59 | |||
| 60 | <row> | ||
| 61 | <entry>1</entry> | ||
| 62 | |||
| 63 | <entry>Sona Sarmadi</entry> | ||
| 64 | |||
| 65 | <entry>2017-08-31</entry> | ||
| 66 | |||
| 67 | <entry>Initial Revision, hardening guideline for users.</entry> | ||
| 68 | </row> | ||
| 69 | </tbody> | ||
| 70 | </tgroup> | ||
| 71 | </table> | ||
| 72 | </section> | ||
| 73 | |||
| 74 | <section id="references"> | ||
| 75 | <title>References</title> | ||
| 76 | |||
| 77 | <itemizedlist> | ||
| 78 | <listitem> | ||
| 79 | <para><ulink | ||
| 80 | url="https://www.sans.org/reading-room/whitepapers/linux/linux-kernel-hardening-1294">www.sans.org/reading-room/whitepapers/linux/linux-kernel-hardening-1294</ulink></para> | ||
| 81 | </listitem> | ||
| 82 | |||
| 83 | <listitem> | ||
| 84 | <para><ulink | ||
| 85 | url="https://lwn.net/Articles/705262/">lwn.net/Articles/705262/</ulink></para> | ||
| 86 | </listitem> | ||
| 87 | </itemizedlist> | ||
| 88 | </section> | ||
| 89 | |||
| 90 | <section id="def_acro"> | ||
| 91 | <title>Definitions and Acronyms</title> | ||
| 92 | |||
| 93 | <para>Definitions</para> | ||
| 94 | |||
| 95 | <para>[FIXME]</para> | ||
| 96 | |||
| 97 | <para>Acronyms</para> | ||
| 98 | |||
| 99 | <para>[FIXME]</para> | ||
| 100 | </section> | ||
| 101 | </section> | ||
| 102 | </chapter> \ No newline at end of file | ||
diff --git a/doc/book-enea-nfv-access-user-hardening-guide/swcomp.mk b/doc/book-enea-nfv-access-user-hardening-guide/swcomp.mk new file mode 100644 index 0000000..2fe78b5 --- /dev/null +++ b/doc/book-enea-nfv-access-user-hardening-guide/swcomp.mk | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | # Component build specification | ||
| 2 | |||
| 3 | # Version of THIS book | ||
| 4 | BOOK_VER ?= $(REL_VER)-dev | ||
| 5 | |||
| 6 | DOCBOOK_SRC := $(COMP)/swcomp.mk $(COMP)/doc/book.xml $(shell find $(COMP)/doc -type f \( -name "*.xml" -o -name "*.svg" -o -name "*.png" \) ! -name "book.xml" -print) | ||
| 7 | |||
| 8 | BOOKPACKAGES := book-enea-nfv-access-user-hardening-guide | ||
| 9 | BOOKDESC_$(BOOKPACKAGES) := "Enea NFV Access $(PROD_VER) User's Hardening Guide" | ||
| 10 | BOOKDEFAULTCONDITION := $(DEFAULTCONDITIONS) | ||
