SECDOCS Webverzeichnis für Sicherheits Präsentationen, Artikel und Videos

Nicht oft findet man Webseiten, die so viele und so fundierte Vorträge, Präsentationen und Videos zu Themen der IT-Sicherheit, Penetrationstests und sicherer Entwicklung bieten. SECDOCS ist hier eine sehr positive Ausnahme, die jedem nur empfohlen werden kann. Zu finden hier:

http://secdocs.lonerunners.net
 

Hier nur drei Empfehlungen für ruhige Stunden:

Transmission uTP and UDP buffer optimizations

Recently in debug mode on a box running Transmission to seed BackTrack Torrents:

[17:42:40.319] UDP Failed to set receive buffer: requested 4194304, got 262142 (tr-udp.c:75)
[17:42:40.319] UDP Please add the line "net.core.rmem_max = 4194304" to /etc/sysctl.conf (tr-udp.c:80)
[17:42:40.319] UDP Failed to set send buffer: requested 1048576, got 262142 (tr-udp.c:86)
[17:42:40.319] UDP Please add the line "net.core.wmem_max = 1048576" to /etc/sysctl.conf (tr-udp.c:91)

This message tries to tell us, that for some reason, Transmission would like to have 4 Megabytes of receive buffer and 1 Megabyte send buffer for it’s UDP socket. It turns out that the support for uTP, the uTorrent transport protocol, is implemented using a single socket.

By tuning the two variables, higher throughput can be achieved more easily using uTP.

Here is the relevant part from the changeset:

Since we’re using a single UDP socket to implement multiple uTP sockets,
and since we’re not always timely in servicing an incoming UDP packet,
it’s important to use a large receive buffer. The send buffer is probably
less critical, we increase it nonetheless.

Four Megabyte might seem huge for embedded clients, but running behind a fast dedicated connection, it might even be too small when Transmission has to handle hundreds of connections. I recommend to use 16 Megabyte for receive buffering and 4 for the send buffer. That is, because uTP implements a retransmission algorithm and by scaling up the buffers we achieve less retransmits because of dropped datagrams. Let’s set it up that way.

echo 'net.core.rmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 4194304' >> /etc/sysctl.conf
sysctl -p

Virtualbox Raw Disks direkt verwenden


Physikalische Laufwerke wie Festplatten, einzelne Partitionen oder LVM Volumes können auch mit Virtualbox über einen kleinen Umweg verwendet werden. Dafür muss, wie im folgenden Beispiel dargestelt, eine VMDK-Datei erstellt werden. Diese enthält den Verweis auf das physikalische Laufwerk.

VBoxManage internalcommands createrawvmdk -filename sda3_crypt.vmdk -rawdisk /dev/mapper/sda3_crypt

Wie einzelne oder mehrere Partitionen mittels VMDK-Dateien in Virtualbox eingebunden werden können, verrät das VirtualBox Handbuch in Kapitel 9.

Transmission Webinterface mit Apache auf SSL umstellen

Transmission BitTorrent bietet ein Webinterface auf einem konfigurierbaren Port mit Basic-Auth an. Was aber, wenn der Port nicht geöffnet werden soll, oder das Webinterface nur per SSL (HTTPS) erreichbar sein soll? Apache leistet wie folgt Schützenhilfe und stellt die Verschlüsselung sicher.
Transmission Webinterface mit Apache auf SSL umstellen weiterlesen

OVH Debian from Scratch Hacks

A0. Grundsätzliches

In diesem Artikel werden einige Erweiterungen für das Debian from Scratch HowTo gezeigt, die alle unabhängig voneinander sind.

[toc=“2,3,4″ title=“Table of contents“]

A1. Logdateien im Arbeitsspeicher

Wer keine Logdateien auf seinem Server liegen haben möchte, aber trotzdem nicht komplett auf Syslog verzichten kann, installiert busybox-syslogd als Ersatz für den installierten Logserver.

aptitude install busybox-syslogd

Nach der Installation können mit dem Befehl logread die Nachrichten abgerufen werden.

A2. Temporäre Dateien im Arbeitsspeicher

Um die temporären Dateien im Arbeitsspeicher zu halten, kann ein tmpfs zum Einsatz kommen. Das sollte man allerdings nur tun, wenn ausreichend Arbeitsspeicher vorhanden ist.

echo 'tmpfs /tmp tmpfs defaults,mode=777 0 0' >> /etc/fstab
mount -a

A3. Neueren Kernel verwenden

Um aktuelle Treiber und Optimierungen die seit Kernel Version 2.6.32 in die Entwicklung eingeflossen sind nutzen zu können, kann ein neuerer Kernel installiert werden. Das geht wie folgt.

echo 'deb http://backports.debian.org/debian-backports squeeze-backports main' >> /etc/apt/sources.list && apt-get update && apt-get upgrade
apt-get install -t squeeze-backports linux-image-amd64

Einige Änderungen, die für das Debian from Scratch HowTo relevant sind:

  • Mehrere Kerne für Verschlüsselung (2.6.34)
  • XFS Beschleunigung (2.6.35)

Apache 2.2 Logfiles abschalten

Aus Gründen des Datenschutzes, ist es oft nötig, bestimmte Logfiles abzuschalten. Um die Logfiles einer Standardinstallation von Apache 2.2 unter Debian GNU/Linux zu deaktivieren, wird wie folgt vorgegangen.

Logfiles im vHost abschalten

Unter Debian wird dafür in den beiden Vorlagen default und default-ssl jeweils die Zeile beginnend mit ErrorLog und CustomLog mit einem Rautezeichen # auskommentiert. Werden andere Vorlagen benutzt, ist dort entsprechend vorzugehen.

Globale Logfiles abschalten

Um auch dann Logfiles zu erzeugen, wenn im vHost keine speziellen Angaben gemacht wurden, gibt es zwei Orte in der Apache Konfiguration, die weitere Dateien erzeugen.

other_vhosts_access.log

Dieses Logfile wird in der Datei /etc/apache2/conf.d/other-vhosts-access-log definiert. Dort muss der Befehl CustomLog auskommentiert werden.

error.log

Dieses Logfile wird in der Datei /etc/apache2/apache2.conf definiert . Dort muss in Zeile 193 der Pfad nach dem Befehl ErrorLog nach /dev/null geändert werden. Wird der Befehl nur auskommentiert, erscheint die folgende Fehlermeldung und Apache startet nicht. Die Ursache dafür ist, dass bei der Kompilierung dieser Pfad als Standard für das error.log festgelegt wurde.

(2)No such file or directory: apache2: could not open error log file /etc/apache2/logs/error_log.
Unable to open logs
Action 'start' failed.

Es ist sinnvoll, Fehler zu protokollieren. Das ist jetzt nicht mehr der Fall, weil das Format des Fehlerprotokolls nicht angepasst werden kann. Ab Apache 2.4 ist das Festlegen eines Formats für das error.log mittels der Direktive ErrorLogFormat möglich, sodass eine Aktualisierung lohnen kann.

OVH Server from Scratch mit Debian und dm-crypt Verschlüsselung

Diese Anleitung entspricht nicht mehr dem maximal möglichen Standard an Sicherheit. Dafür empfehle ich mein Konzept Tauchfahrt mit Linux.

1. Grundsätzliches

Dieses Howto beschreibt die Installationen von Debian Squeeze auf einem OVH Server im Rescue Modus. Der Server ist nach der Installation weder abgesichert noch entspricht er dem ‚Standard‘ von OVH.

Das bedeutet:

  • Kein Supportkey von OVH
  • Kein Realtime-Monitoring durch OVH
  • Kein OVH-Kernel
  • Download von Paketen nicht über OVH
  • Direkter SSH-Zugang als Superuser root

Darum empfehle ich dringend die Authentifikation per SSH Publickey. Einen Artikel darüber gibt es hier.

Das Ergebnis ist ein Minimalsystem für einen Fileserver, der folgende Eigenschaften hat.

  • Möglichst unabhängig von OVH-Infrastruktur
  • Minimalsystem
  • Großer verschlüsselter Datenbereich in /home

Das HowTo basiert auf dem Squeeze from Scratch HowTo von Sven Richter.

OVH Server from Scratch mit Debian und dm-crypt Verschlüsselung weiterlesen

IPTables DNS query limiting with burst rate

Presents the same content as „DNS-Query Limits mit iptables und Burstrate“

Since two months, give or take, I’m running an OpenNIC name server which provides lookup services from hostname to IP for every person in the world (more on the name server here). Every person, but sadly also every virus infected computer. The massive requests for mail servers already brought my router to it’s knees twice and made my internet connection unuseable.

Query Flood! Now what?

Benny Baumann’s blog provides tips, which specifically drop certain requests with simple iptables rules. Sadly I can’t just drop requests for the root-servers (public name servers must answer such queries) and the problematic requests are not just for a single domain. The only thing coming into consideration was request limiting. In doing so the maximum count of requests per time time interval (such as per second) is limited.

I was able to determine 5 requests per second as average per IP through questioning other OpenNIC admins and analysis of anonymized log files. Those settings helped, but as a consequence some application took longer to start. Clearly the requests per second were too tightly limited. The solution to this problem, is what I’d like to share with you.

The count of packets per second of a source IP is not measured over the time interval of one second, but over a longer period. This would normally reduce the count of requests per second even more (five per second is trivially more than five per ten seconds), so the count of requests is multiplied with the seconds. Now it’s entirely possible, to send all allowed requests in the first second of the interval, which would lead to an overload of the connection. To put paid to this, the count of requests per second is limited too, but to a higher than targeted value.

I limited the requests per second to 5, which leads to 35 requests in 7 seconds.
To solve the first-second burst, I allowed for 15 requests to happen in each of the seven seconds.

Write a script instead of blocking manually!

Here is the resulting script:

#!/bin/bash
# This script limits the queries per second to 5/s
# with a burst rate of 15/s and does not require
# buffer space changes

# Requests per second
RQS="15"

# Requests per 7 seconds
RQH="35"

iptables --flush
iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --set --name DNSQF --rsource
iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 1 --hitcount ${RQS} --name DNSQF --rsource -j DROP
iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --set --name DNSHF --rsource
iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 7 --hitcount ${RQH} --name DNSHF --rsource -j DROP

TeVii S470 Probleme unter Linux

Problem

Die TeVii S470 ist eine von Linux unterstützte TV-Karte für DVB-S und DVB-S2. Möchte man meinen, denn die unterschiedlichen Qualitäten von unterstützt variieren recht stark. Die Karte meldet sich beim ersten Start mit einem Kernel, der den cx23885 Treiber enthält, wie folgt.

[ 1013.287267] ds3000_firmware_ondemand: Waiting for firmware upload (dvb-fe-ds3000.fw)...
[ 1013.288650] ds3000_firmware_ondemand: Waiting for firmware upload(2)...
[ 1013.288716] ds3000_firmware_ondemand: No firmware uploaded (timeout or file not found?)
[ 1013.288800] ds3000_initfe: Unable initialize firmware

Lösung

Die Firmware fehlt, was sich leicht mit den folgenden Befehlen aus dem LinuxTV Wiki beheben lässt.

wget -c http://tevii.com/tevii_ds3000.tar.gz
tar xfv tevii_ds3000.tar.gz
sudo cp tevii_ds3000/dvb-fe-ds3000.fw /lib/firmware/

Ein beherztes rmmod cx23885;modprobe cx23885 später sieht es so aus, als würde die Karte korrekt initialisiert werden, wie folgt abgebildet.

[ 1888.760338] cx23885 driver version 0.0.3 loaded
[ 1888.761407] CORE cx23885[0]: subsystem: d470:9022, board: TeVii S470 [card=15,autodetected]
[ 1888.889528] cx23885_dvb_register() allocating 1 frontend(s)
[ 1888.889563] cx23885[0]: cx23885 based dvb card
[ 1888.890963] DS3000 chip version: 0.192 attached.
[ 1888.890994] DVB: registering new adapter (cx23885[0])
[ 1888.891026] DVB: registering adapter 0 frontend 0 (Montage Technology DS3000/TS2020)...
[ 1888.919252] TeVii S470 MAC= 00:18:bd:5b:28:2e
[ 1888.919284] cx23885_dev_checkrevision() Hardware revision = 0xb0
[ 1888.919319] cx23885[0]/0: found at 0000:05:00.0, rev: 2, irq: 19, latency: 0, mmio: 0xfe000000

Dem ist aber nicht so. Der Trick mit dieser Karte besteht darin, einen Kaltstart durchzuführen. Also einmal den Computer komplett ausschalten und händisch wieder in Betrieb nehmen.

Erst dann wird die Firmware auf die Karte geladen und die Karte kann benutzt werden. Die Lösung des Problems ist bereits durch Nico dokumentiert worden. Schade, dass es mir erst zwei Stunden nach Lösung ins Auge fiel.

BackTrack Tools – Teil 1 PBNJ

Im Rahmen meiner Arbeit mit BackTrack Linux und Penetrationstests sieht man oft den Wald vor lauter Bäumen nicht mehr. BackTrack bietet eine so überwältigende Flut an Werkzeugen, dass es einige Zeit kostet, sich einen Überblick zu verschaffen. Um das zu vereinfachen werden hier die kommenden Wochen einige Werkzeuge kurz vorgestellt.

Den Anfang macht PBNJ von Joshua D. Abraham, ein Frontend für den beliebten Portscanner NMAP, dass die Ergebnisse der Portscans in einer Datenbank speichern kann.

BackTrack Tools – Teil 1 PBNJ weiterlesen