**!!! ACHTUNG - evtl. veraltet - ACHTUNG !!!**
Diese Seite wurde zuletzt am 9. Juli 2014 um 10:53 Uhr geändert.
In der **Forensik** sind //die einen// der Meinung, man sollt immer ein paar "static binaries" dabei haben...
//die anderen// meinen, den Aufwand könne man sich sparen, da man vorab eh nicht alle Eventualitäten (32/64-Bit, alter/neuer/embedded-CPU, alter/neuer/spezieller Kernel,...) abdecken kann und im Fall der Fälle eben diese eine dann fehlt.
Ich vermische beides einfach mal noch ein wenig mit der Sichtweise eines **Administrators** und bin der Meinung, man sollte...
* für seine eigenen Systeme immer welche zur Hand haben
* sich per Skript auch mal schnell aktuelle bauen können
* und im Fall der Forensik versuchen, vorher ein wenig (mehr) Aufklärung zu betreiben und passende bauen
* außerdem: was man hat, das hat man!
Hier also die Skripte (work in progress), die ich benutze:
===== busybox =====
#!/bin/bash
RELEASE="1.20.2"
# dependencies (static libs):
if [[|! -f /usr/lib/libc.a ]] ; then sudo aptitude install libc6-dev -y ; fi
# downloading...
wget http://busybox.net/downloads/busybox-${RELEASE}.tar.bz2
# extractin...
tar xjf busybox-${RELEASE}.tar.bz2
# compiling (and stripping)...
cd busybox-${RELEASE}
make defconfig
sed -e 's/.*FEATURE_PREFER_APPLETS.*/CONFIG_FEATURE_PREFER_APPLETS=y/' -i .config
sed -e 's/.*FEATURE_SH_STANDALONE.*/CONFIG_FEATURE_SH_STANDALONE=y/' -i .config
sed -e 's/.*CONFIG_STATIC.*/CONFIG_STATIC=y/' -i .config
make
# final instructions:
echo
echo "Fertig:"
echo " PATH= $PWD/busybox sh"
echo
exit 0
Zuletzt getestet unter Debian GNU/Linux 6.0.7 (Squeeze) i386 & amd64.
===== libewf =====
#!/bin/bash
RELEASE="20130303"
# dependencies (static libs):
if [[|! -f /usr/lib/libc.a ]] ; then sudo aptitude install libc6-dev -y ; fi
if [[|! -f /usr/lib/libz.a ]] ; then sudo aptitude install zlib1g-dev -y ; fi
if [[|! -f /usr/lib/libssl.a ]] ; then sudo aptitude install libssl-dev -y ; fi
if [[|! -f /usr/lib/libuuid.a ]] ; then sudo aptitude install uuid-dev -y ; fi
if [[|! -f /usr/lib/libfuse.a ]] ; then sudo aptitude install libfuse-dev -y ; fi
# downloading...
wget http://libewf.googlecode.com/files/libewf-${RELEASE}.tar.gz
# extracting...
tar xzf libewf-${RELEASE}.tar.gz
# compiling and stripping...
cd libewf-${RELEASE}
./configure --enable-shared=no --enable-static-executables=yes
make
strip ewftools/ewfacquire
# final instructions:
echo
echo "Das statisch kompilierte ewfacquire (und ein wenig mehr) findest Du hier:"
echo " $PWD/ewftools/ewfacquire"
echo
echo "(Nicht vergessen: you have to be root!)"
echo
exit 0
Zuletzt getestet unter Debian GNU/Linux 6.0.7 (Squeeze) i386 & amd64.
===== dropbear =====
#!/bin/bash
RELEASE="2012.55"
# dependencies (static libs):
if [[|! -f /usr/lib/libc.a ]] ; then sudo aptitude install libc6-dev -y ; fi
# downloading...
wget https://matt.ucc.asn.au/dropbear/releases/dropbear-${RELEASE}.tar.bz2
# extracting...
tar xjf dropbear-${RELEASE}.tar.bz2
# compiling and stripping...
cd dropbear-${RELEASE}
./configure
make STATIC=1
make strip
# final instructions:
echo
echo "Fertig:"
echo " $PWD/dcclient"
echo " $PWD/dropbear"
echo " (und ein bisschen mehr...)
echo
exit 0
Zuletzt getestet unter Debian GNU/Linux 6.0.7 (Squeeze) i386 & amd64.
===== bash =====
#!/bin/bash
if [[|! -x /usr/bin/yacc ]] ; then sudo aptitude install bison -y ; fi
if [[|! -x /usr/bin/flex ]] ; then sudo aptitude install flex -y ; fi
RELEASE="4.2"
LASTPATCH="42"
# downloaden
wget ftp://ftp.gnu.org/gnu/bash/bash-${RELEASE}.tar.gz
PATCH="1"
while [[|$PATCH -le $LASTPATCH ]] ; do
if [[|$PATCH -ge 1 -a $PATCH -le 9 ]] ; then PNIFN="00$PATCH" ;
elif [[|$PATCH -ge 10 -a $PATCH -le 99 ]] ; then PNIFN="0$PATCH" ;
else PNIFN="$PATCH" ; fi
wget ftp://ftp.gnu.org/gnu/bash/bash-${RELEASE}-patches/bash$( echo $RELEASE | tr -d "." )-$PNIFN
(( PATCH++ ))
done
# entpacken
tar xvzf bash-${RELEASE}.tar.gz
# patchen
cd bash-${RELEASE}
PATCH="1"
while [[|$PATCH -le $LASTPATCH ]] ; do
if [[|$PATCH -ge 1 -a $PATCH -le 9 ]] ; then PNIFN="00$PATCH" ;
elif [[|$PATCH -ge 10 -a $PATCH -le 99 ]] ; then PNIFN="0$PATCH" ;
else PNIFN="$PATCH" ; fi
patch -p0 < ../bash$( echo $RELEASE | tr -d "." )-$PNIFN
(( PATCH++ ))
done
# kompilieren
export CFLAGS="-static"
export CXXFLAGS="-static -static-libgcc -static-libstdc++"
export LDFLAGS="-static"
./configure --without-bash-malloc --enable-static-link
make
# kleinkram
for BINARY in bash; do
strip "$BINARY"
chmod +x "$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
exit 0
Zuletzt getestet unter Debian GNU/Linux 6.0.7 (Squeeze) amd64.
===== coreutils =====
#!/bin/bash
RELEASE="8.9"
# downloaden
wget ftp://ftp.gnu.org/gnu/coreutils/coreutils-${RELEASE}.tar.gz
# entpacken
tar xvzf coreutils-${RELEASE}.tar.gz
# kompilieren
cd coreutils-${RELEASE}
sed -i '/elf_sys=yes/s:yes:no:' configure
# das hostname aus den veralteten net-utils ist maechtiger, also ohne!
export CFLAGS="-static"
export CXXFLAGS="-static -static-libgcc -static-libstdc++"
export LDFLAGS="-static"
./configure --without-selinux
make
# kleinkram
for BINARY in base64 cat cp date dd df du echo id head ls md5sum printenv pwd sha1sum sha256sum tail test tee tr true false uname uptime who basename chgrp chmod chown cut env kill mkfifo mknod mkdir mv ln rm rmdir sort stty su sum sync touch tty uniq wc; do
strip src/"$BINARY"
chmod +x src/"$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
exit 0
Zuletzt getestet unter Debian GNU/Linux 6.0.7 (Squeeze) amd64.
===== grep =====
#!/bin/bash
# getestet mit:
#RELEASE="2.7"
RELEASE="2.7"
# downloaden
wget ftp://ftp.gnu.org/gnu/grep/grep-${RELEASE}.tar.gz
# entpacken
tar xvzf grep-${RELEASE}.tar.gz
# kompilieren
cd grep-${RELEASE}
env LDFLAGS=-static ./configure
make
# kleinkram
for BINARY in grep; do
strip src/"$BINARY"
chmod +x src/"$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
exit 0
===== iproute2 =====
#!/bin/bash
# getestet mit:
#RELEASE="2.6.35"
RELEASE="2.6.35"
# abhaengigkeiten pruefen und ggf. installieren
if [[|! -x /usr/bin/flex ]] ; then sudo aptitude install flex -y ; fi
if [[|! -r /usr/include/db_185.h ]] ; then sudo aptitude install libdb-dev -y ; fi
# downloaden
wget http://devresources.linuxfoundation.org/dev/iproute2/download/iproute2-${RELEASE}.tar.bz2
# entpacken
tar xvjf iproute2-${RELEASE}.tar.bz2
# kompilieren
cd iproute2-${RELEASE}
env LDFLAGS=-static make
# kleinkram
for BINARY in ip/ip misc/ss; do
strip "$BINARY"
chmod +x "$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
exit 0
===== lsof =====
#!/bin/bash
# getestet mit:
#RELEASE="4.84"
RELEASE="4.84"
# downloaden
wget ftp://ftp.fu-berlin.de/pub/unix/tools/lsof/lsof_${RELEASE}.tar.bz2
# entpacken
tar xvjf lsof_${RELEASE}.tar.bz2
cd lsof_${RELEASE}
tar xvf lsof_${RELEASE}_src.tar
# kompilieren
cd lsof_${RELEASE}_src
./Configure -n linux
make "$( grep ^CFGL= Makefile ) -static"
# kleinkram
for BINARY in lsof; do
strip "$BINARY"
chmod +x "$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
exit 0
===== netcat =====
#!/bin/bash
# es wird davon ausgegangen, dass build-essential bereits installiert wurde!
if [[|! -x /usr/bin/svn ]] ; then sudo aptitude install subversion -y ; fi
# checkout
svn co https://nc110.svn.sourceforge.net/svnroot/nc110 nc110
cd nc110/nc110
# "patchen", damit es fehlerfrei kompiliert werden kann:
sed -i "s/LD = \$(CC) -s/LD = \$(CC)/" Makefile
sed -i '/#include / a\#include "resolv.h"' netcat.c
# kompilieren
export CFLAGS="-static"
export CXXFLAGS="-static -static-libgcc -static-libstdc++"
export LDLAGS="-static"
export DFLAGS="-DGAPING_SECURITY_HOLE"
make linux
# kleinkram
for BINARY in nc ; do
strip "$BINARY"
chmod +x "$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
exit 0
Zuletzt getestet unter Debian GNU/Linux 6.0.7 (Squeeze) amd64.
Besonderer Augenmerk liegt auf der Option "-e", welche zu Schulungszwecken als "Backdoor für Arme" genutzt werden kann!
===== net-tools =====
[[...]]
===== pciutils =====
#!/bin/bash
# getestet mit:
#RELEASE="3.1.7"
RELEASE="3.1.7"
# downloaden
wget ftp://atrey.karlin.mff.cuni.cz/pub/linux/pci/pciutils-${RELEASE}.tar.gz
# entpacken
tar xvzf pciutils-${RELEASE}.tar.gz
# kompilieren
cd pciutils-${RELEASE}
env LDFLAGS=-static make ZLIB=no
# kleinkram
for BINARY in lspci; do
strip "$BINARY"
chmod +x "$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
exit 0
===== procps =====
#!/bin/bash
# getestet mit:
#RELEASE="3.2.8"
RELEASE="3.2.8"
# downloaden
wget http://procps.sourceforge.net/procps-${RELEASE}.tar.gz
# entpacken
tar xvzf procps-${RELEASE}.tar.gz
# kompilieren
cd procps-${RELEASE}
make LDFLAGS=-static SHARED=0
# kleinkram
for BINARY in ps/ps sysctl w free top uptime watch vmstat; do
strip "$BINARY"
chmod +x "$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
exit 0
===== sharutils =====
#!/bin/bash
# getestet mit:
#RELEASE="4.10"
RELEASE="4.10"
# downloaden
wget ftp://ftp.gnu.org/gnu/sharutils/sharutils-${RELEASE}.tar.bz2
# entpacken
tar xvjf sharutils-${RELEASE}.tar.bz2
# kompilieren
cd sharutils-${RELEASE}
env LDFLAGS=-static ./configure
make
# kleinkram
for BINARY in uuencode uudecode; do
strip src/"$BINARY"
chmod +x src/"$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
exit 0
===== sysvinit =====
#!/bin/bash
# getestet mit:
#RELEASE="2.88dsf"
RELEASE="2.88dsf"
# downloaden
wget http://download.savannah.gnu.org/releases/sysvinit/sysvinit-${RELEASE}.tar.bz2
# entpacken
tar xvjf sysvinit-${RELEASE}.tar.bz2
# kompilieren
cd sysvinit-${RELEASE}/src
### nur last, wer mehr braucht, kompiliert alles
### ... strippen und chmodden danach aber fuer den
### rest nicht vergessen!
env LDFLAGS=-static make last
# kleinkram
for BINARY in last; do
strip "$BINARY"
chmod +x "$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
exit 0
===== usbutils =====
#!/bin/bash
# getestet mit:
#RELEASE="0.86"
RELEASE="0.86"
# abhaengigkeiten
if ! $( dpkg -l | grep libusb-dev > /dev/null ) ; then aptitude install libusb-dev -y ; fi
# downloaden
wget http://netcologne.dl.sourceforge.net/project/linux-usb/usbutils/usbutils-${RELEASE}.tar.gz
# entpacken
tar xvzf usbutils-${RELEASE}.tar.gz
# kompilieren
cd usbutils-${RELEASE}
env LDFLAGS="-static" ./configure
sed -i 's/${prefix}\/share/./' Makefile
make
# kleinkram
for BINARY in lsusb ; do
strip "$BINARY"
chmod +x "$BINARY"
done
# vorerst per hand an die richtige stelle kopieren...
# usb.ids nicht vergessen (selbe verzeichnis wie lsusb)!!!
exit 0
===== util-linux =====
[[...]]