Lunar Linux Hardened

From Lunar Linux
Revision as of 03:24, 13 March 2007 by Wdp (Talk | contribs)
Jump to: navigation, search

Contents

Hardened Lunar Linux

The maingoal of this project might be to have a Lunar Linux with security enhancements. The most modules will be patched with patches we've written or others written. Others could be Linux-from-Scratch users or other Distributions. As long as we keep credits - This should be okay.

Language

The mainproblem is my language - so if you read things you don't understand please ask me - My english isn't as good as yours so probably i would be happy for corrections ;-)

Warning

This project is in an experimental state - So use it only if you want to play with it or if you want help developing it. It's not for production use right now. I'm working at the moment only at i386. So no x86_64 or sparc support is there.

HowTo get this Thingy running

Good question, i waited that u ask me. First, you'll download the hd-modules.tar.bz2 (I will add the url here soon). Extract it to /var/lib/lunar/moonbase/zlocal/ (Be careful if you stored own modules there. We don't want to overwrite something). Then you have to re-lin stuff:


Stage One

Preinstallation of needed modules

  • lin -cr binutils # This will install binutils 2.17 with our hardened patches and configure options
  • lin -cr gcc # This will install gcc 4.1.2 with our hardened patches and configure options
  • lin -cr kernel-headers-2.6 # This will install the Kernel Headers we need for glibc
  • lin -cr glibc # This will install glibc 2.5 with our hardened patches and configure options
  • lin -cr linux-2.6 # Now reinstall the linux kernel.

Stage Two

Now reinstallation of the previosly installed modules, so that they're compiled using the preinstalled modules

  • lin -cr binutils
  • lin -cr gcc
  • lin -cr db (if u have it installed (lvu installed db) but i bet you have)
  • lin -cr coreutils
  • lin -cr kernel-headers-2.6
  • lin -cr glibc
  • lin -cr linux-2.6

Stage Three

Now we relin some other useful modules:

  • lin -cr bison
  • lin -cr procps
  • lin -cr libtool
  • lin -cr perl
  • lin -cr readline
  • lin -cr zlib
  • lin -cr autoconf
  • lin -cr automake

Now your filesystem tools:

  • lin -cr e2fsprogs (for ext2 and ext3fs)
  • lin -cr xfsprogs (for xfs only if u use it)
  • lin -cr jfsutils (for jfs only if u use it)
  • lin -cr reiserfsprogs (for reiserfs only if u use it)
  • ... ;-)

Now some other modules

  • lin -cr file
  • lin -cr flex
  • lin -cr groff
  • lin -cr less
  • lin -cr man
  • lin -cr mktemp
  • lin -cr module-init-tools
  • lin -cr psmisc
  • lin -cr shadow
  • lin -cr sysvinit
  • lin -cr udev (or whatever u use, for example devfs)
  • lin -cr ncurses (if u have it installed (lvu installed ncurses))
  • lin -cr bash
  • lin -cr bzip2
  • lin -cr coreutils
  • lin -cr diffutils
  • lin -cr findutils
  • lin -cr gawk
  • lin -cr gettext
  • lin -cr grep
  • lin -cr gzip
  • lin -cr m4
  • lin -cr make
  • lin -cr patch
  • lin -cr perl
  • lin -cr sed
  • lin -cr tar
  • lin -cr texinfo (if u have it installed (lvu installed texinfo))
  • lin -cr util-linux
  • lin -cr vim

The Patches (info)

You will see "Status:" in the following sections. Status 1 means i tested is it compiling and does it seem working, on my local system (Athlon XP 2600+, 512 MB Ram, Vanilla 2.6.20 Kernel). Status 2 means i tested it a bit more and recompiled it several times AND with optimizations. Status 3 means other people have tested it, too but it wasn't working sometimes. Status 4 means other people have tested it, too and it was working everywhere.

So:

  • Status 0 is untested.
  • Status 1 is really really alpha. (tested without optimizations)
  • Status 2, too. (tested with optimizations: CPU: athlon-xp; FPU: both; MMX SSE SSE2, -O2)
  • Status 3 is beta.
  • Status 4 is ready to go ;-)

ToDo

The Patches (The Modules + Patches + Configure Changes)

gcc 4.1.2

Status: 2

posix-1.patch - Makes GCC Posix Compliant

binutils 2.17

Status: 2

branch_update-1.patch - This is the binutils-2_17-branch (bug fix branch) update, compared from binutils-2.17-release and binutils-2_17-branch with all the fluff removed (CVS entries, maintainer files, etc). This patch should be updated periodically.
hardened_tmp-3.patch - This patch uses mkstemp(3) and mkdtemp(3) for temporary file creation, if they are available, rather than the default mktemp(3). This is safer and removes some compiler warnings.
lazy-1.patch - This adds -z lazy option, inverse of -z now.
pt_pax-1.patch - This adds PT_PAX_FLAGS to Binutils. See: http://pax.grsecurity.net/
posix-1.patch - Makes binutils Posix Compliant

coreutils 6.7

Status: 2

i18n-1.patch - This patch fixes various problems with multibyte character support.
uname-1.patch - Fix the output of uname once and for all.

glibc 2.5

Status: 2

Configure: Added --with-selinux as a query option, added the following things statically: --with-tls --enable-bind-now --enable-stackguard-randomization

blowfish.patch - This patch adds blowfish crypto to libcrypt.
branch_update-2.patch - This is a branch update for Glibc-2.5, and should be rechecked periodically. See the "Changelog" and "localedata/ChangeLog" files for specific details.
dl_execstack_PaX-1.patch - This is needed for Pax. http://pax.grsecurity.net/
hardened_tmp-1.patch - This patch instructs mktemp(1) to use temporary file directory from the '-t' option. It also makes sure temporary files get removed after exiting the scripts.
iconv_unnest-1.patch - Move nested function to a static one so we avoid generating a trampoline.
localedef_segfault-1.patch - Fixes Segfault when using localdef. This problem is only noticed when using PaX and some architectures besides x86. See debian bug # 231438
pt_pax-1.patch - This is needed for Pax. http://pax.grsecurity.net/
strlcpy_strlcat-1.patch - http://www.courtesan.com/todd/papers/strlcpy.html

Berkeley DB 4.5.20

Status: 2

fixes-1.patch - Fixes a couple of issues when trying to access databases through the Java API.

procps 3.2.7

Status: 2

hardened_cflags-2.patch - Check for gcc -fpie, -fpic, -fstack-protector, and ld -pie, -z relro, -z now. Use whatever works.

perl 5.8.8

Status: 2

regex_ssp-1.patch - The regex code in this version of Perl segfaults when compiled with stack smashing protector. This patch disables stack smashing protector just on the affected files.
libc-2.patch - this patch adapts some hard-wired paths to the C library. It uses the $prefix variable to locate the correct libc.
fPIC-1.patch - Fixes a test that checks to see which paramater needs to be used for -fPIC and forces the objects in DynaLoader to be built with -fPIC.

readline 5.2

Status: 2

readline52-001 - Patch 001 from upstream: In some cases, code that is intended to be used in the presence of multibyte characters is called when no such characters are present, leading to incorrect display position calculations and incorrect redisplay.

zlib 1.2.3

Status: 2

fPIC-1.patch - 1.) Build shared and static lib in one pass 2.) Always add -fPIC when building shared lib, don't expect the user to set it.

file 4.20

Status: 2

reg_startend-1.patch - Fixes a bug caused by an undefined constant

groff 1.19.2

Status: 2

HINT: Should be PSAFE now. So i removed PSAFE=no from the DETAILS file. See patch for more Informations.

parallel_make-1.patch - This patch fixes the dependencies in the groff Makefile so parallel builds are possible.

less 394

Status: 2

signal_fix-1.patch - This patch fixes a bug with the configure script so that 'sigset_t', and 'sigprocmask', are detected and used.

module-init-tools 3.2.2

Status: 2

modprobe-1.patch - Updates modprobe functionality to fix problem where aliases don't quite work properly
nostatic-1.patch - This patch removes the use of zlib.a, and removes insmod.static.

shadow 4.0.18.1

Status: 2

NOTICE: i had to change the build file, cause of the patch we have to run: aclocal && autoconf && autoheader.

owl_blowfish-1.patch - Use this patch with the Glibc blowfish patch (also from openwall).

sysvinit 2.86

Status: 2

owl_blowfish.patch - Use this patch with the Glibc blowfish patch (also from openwall).

bash 3.2

Status: 2

fixes-2.patch - A combined patch containing patches 001-009 from upstream.

diffutils 2.8.7

Status: 2

hardened_tmp-1.patch - This patch removes the more portable and less safe use of tmpname(3), in preference of mkstemp(3).
i18n-1.patch - Fixes treatment of whitespace in multibyte locales.

grep 2.5.1a

Status: 2

config_update-1.patch - Updates config.sub and config.guess
redhat_fixes-2.patch - Various fixes from RedHat. Individual patches: grep-2.5.1-fgrep.patch, grep-2.5.1-bracket.patch, grep-2.5-i18n.patch, grep-2.5.1-oi.patch, grep-2.5.1-manpage.patch, grep-2.5.1-color.patch, grep-2.5.1-icolor.patch, grep-2.5.1-egf-speedup.patch, grep-2.5.1-dfa-optional.patch, grep-2.5.1-tests.patch, grep-2.5.1-w.patch

sed 4.1.5

Status: 2

fixes-1.patch - This patch includes:
Redhat/Fedora - sed-4.1.5-bz185374.patch
Redhat/Fedora - sed-4.1.5-relsymlink.patch
OpenWall/Owl - sed-4.1.5-owl-warnings.diff
Gentoo - sed-4.1.5-alloca.patch

And a handfull of additional compiler warning fixes, including the addition of --enable-gcc-warnings (-Werror -Wall -Wformat -Wformat-security). Wrap fchown in assert() to deal with gcc -D_FORTIFY_SOURCE warnings (only if _FORTIFY_SOURCE is defined).

Added strlcpy(), and assert(), code if the system does not have them. This had to be put into one big patch mainly because of strlcpy().

texinfo 4.8a

Status: 2

multibyte-1.patch - Info assumes that a string width in character cells is the same as its length in bytes. This patch avoids cases when this assumption is not true.
tempfile_fix-1.patch - (CAN-2005-3011) texindex in texinfo 4.8 and earlier allows local users to overwrite arbitrary files via a symlink attack on temporary files.
Personal tools
Namespaces
Variants
Actions
Wiki Navigation
Project Sites
Toolbox