<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Zugschlusbeobachtungen (Entries tagged as security)</title>
    <link>http://blog.zugschlus.de/</link>
    <description>Das persönliche Blog von Marc Haber</description>
    <dc:language>en</dc:language>
    <admin:errorReportsTo rdf:resource="mailto:mh+blog-zugschlus-de@zugschlus.de" />
    <generator>Serendipity 1.5.5 - http://www.s9y.org/</generator>
    <pubDate>Mon, 08 Mar 2010 13:48:48 GMT</pubDate>

    <image>
        <url>http://blog.zugschlus.de/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Zugschlusbeobachtungen - Das persönliche Blog von Marc Haber</title>
        <link>http://blog.zugschlus.de/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Spezifikation von Firewallregeln - do's and dont's</title>
    <link>http://blog.zugschlus.de/archives/877-Spezifikation-von-Firewallregeln-dos-and-donts.html</link>
            <category>Security</category>
    
    <comments>http://blog.zugschlus.de/archives/877-Spezifikation-von-Firewallregeln-dos-and-donts.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=877</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=877</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;
Wenn eine Applikation über das Netz kommuniziert, funktioniert sie natürlich nur dann, wenn das Netz zwischen den
beteiligten Maschinen diese Kommunikation auch durchleitet. Das ist im Internet üblicherweise der Fall; beim Übergang
zwischen privaten Netzen und dem Internet in aller Regel nicht: Dort ist eine Firewall im Einsatz, die üblicherweise
nach der Deny-all-Strategie alle Kommunikation blockiert, die nicht explizit freigegeben ist.
&lt;/p&gt;
&lt;p&gt;
Auf diese Weise wird man im allgemeinen für eine neue Applikation eine Anpassung an der Firewall vornehmen müssen - es
sei denn, die Applikation gibt sich Mühe, wie ein Dienst auszusehen, der üblicherweise freigegeben ist. Das tun
zunehmend viele Applikationen und geben sich durch Benutzung von http als Transportprotokoll als Webclient und Webserver
aus, was in vielen Firewalls direkt freigegeben ist. Doch dies ist Stoff für einen anderen Artikel.
&lt;/p&gt;
&lt;p&gt;
In diesem Artikel möchte ich davon schreiben, wie die Spezifikation aussehen soll, damit der Firewalladmin auch weiß,
was er für eine neue Applikation in seiner Firewall freischalten soll. In vielen Dokumentationen über (freie oder
kommerzielle) Software findet man Listen von Ports, die mehr oder weniger vollständig und mehr oder weniger korrekt
sind. Leider trifft in den meisten Fällen das &amp;#8220;weniger&amp;#8221; zu.
&lt;/p&gt;
 &lt;p&gt;
Doch zunächst ein paar Grundlagen zum Thema TCP/IP. Damit man in der Firewall nicht zu viel freigeben muss, sollten die
notwendigen Kommunikationsbeziehungen möglichst eng beschrieben sein. Eine TCP/IP-Kommunikationsbeziehung fast aller
Mainstreamprotokolle beschreibt ein Fünftupel, bestehend aus Source-IP, Destination-IP, Protokoll, Source-Port und
Destination-Port.
&lt;/p&gt;
&lt;p&gt;
Wenn ein Client C mit einem Server S sprechen möchte, dann ist das Protokoll, das er dafür benutzen möchte, in der
Applikation festgelegt. TCP wird für Datenübertragung benutzt, bei der man sich darauf verlassen möchte, dass die
Daten bei ihrer Ankunft am Ziel korrekt und vollständig sind, und bereit ist, dafür erhöhten Netzaufwand und
unregelmäßige Übertragungszeiten in kauf zu nehmen. UDP benutzt man üblicherweise, wenn es sich nur um winzige
Datenmengen (z.B. DNS-Anfragen und ihre Antworten) handelt oder es eher darauf ankommt, dass Daten entweder gar nicht
oder halbwegs zeitlich passend ankommen (Streaming, Telefonie etc).
&lt;/p&gt;
&lt;p&gt;
In beiden Fällen würfelt sich der Client normalerweise einen seiner freien Ports aus und benutzt diesen als
Source-Port. Der Destination-Port ist meist mit der Applikation festgelegt und bestimmt auf der Seite des Empfängers
den Prozess, bei dem das Paket abgeliefert werden soll. In der Programmierung funktioniert das so, dass der
Serverprozess sich an den von ihm gewünschten Port bindet, ihn sozusagen &amp;#8220;abhört&amp;#8221; (im englischen nennt man
das passender &amp;#8220;listen on the port&amp;#8221;) und alle dorthin gesendeten Daten empfangen kann.
&lt;/p&gt;
&lt;p&gt;
So hat eine DNS-Anfrage üblicherweise das Protokoll UDP (Protokollnummer 17), die Destination-IP des Nameservers und
den Destination-Port 53. Der Server dreht bei seiner Antwort das Tupel um und sendet seine Antwort mit Source-Port 53
mit der IP des Clients als Destination-IP und der vom Client als seinen Source-Port gewählten Portnummer als
Destination-Port. Das sieht &amp;#8220;auf dem Kabel&amp;#8221; in etwa so aus:
&lt;blockquote&gt;&lt;pre&gt;
01: proto=UDP srcip=192.168.218.21 srcport=49221 dstip=206.251.36.94 dstport=53
02: proto=UDP srcip=206.251.36.94 srcport=53 dstip=192.168.218.21 dstport=49221
&lt;/pre&gt;&lt;/blockquote&gt;
Hier hat sich der Client also den Port 49221 gewürfelt.  Die Antwort des Servers kommt bei der Client-Applikation an,
weil sie an den Port 49221 geschickt wurde - der Client kann also die Antwort anhand des Destination-Ports des
Antwortpaketes der Frage zuordnen.
&lt;/p&gt;
&lt;p&gt;
Bei TCP (Protokollnummer 6) ist&amp;#8217;s im Prinzip dasselbe, nur dass schon der Verbindungsaufbau (also bevor überhaupt
ein Bit Nutzdaten geflossen sind) aus drei Paketen (dem sogenannten Dreiwegehandshake) besteht. Hier dasselbe für TCP
und eine kurze http-Anfrage:
&lt;blockquote&gt;&lt;pre&gt;
01: proto=TCP flags=SYN srcip=192.168.218.21 srcport=37734 dstip=81.169.179.176 dstport=80
02: proto=TCP flags=SYN,ACK srcip=81.169.179.176 srcport=80 dstip=192.168.218.21 dstport=37734
03: proto=TCP flags=ACK srcip=192.168.218.21 srcport=37734 dstip=81.169.179.176 dstport=80
04: proto=TCP flags= srcip=192.168.218.21 srcport=37734 dstip=81.169.179.176 dstport=80
05: proto=TCP flags= srcip=81.169.179.176 srcport=80 dstip=192.168.218.21 dstport=37734
06: proto=TCP flags= srcip=81.169.179.176 srcport=80 dstip=192.168.218.21 dstport=37734
07: proto=TCP flags= srcip=192.168.218.21 srcport=37734 dstip=81.169.179.176 dstport=80
08: proto=TCP flags=FIN srcip=81.169.179.176 srcport=80 dstip=192.168.218.21 dstport=37734
09: proto=TCP flags= srcip=192.168.218.21 srcport=37734 dstip=81.169.179.176 dstport=80
10: proto=TCP flags=FIN srcip=192.168.218.21 srcport=37734 dstip=81.169.179.176 dstport=80
11: proto=TCP flags= srcip=81.169.179.176 srcport=80 dstip=192.168.218.21 dstport=37734
&lt;/blockquote&gt;&lt;/pre&gt;
Das bedarf dann doch einer kleinen Erklärung: Die Pakete 01 bis 03 sind der Dreiwegehandshake für den
Verbindungsaufbau (SYN, SYN/ACK, ACK). In Paket 04 übermittelt der Client seinen http-Request, der in Paket 05 vom
Server quittiert wird. Paket 06 ist die (in ein Paket passende) Antwort; Paket 07 die dazu gehörende Quittung. Da der
Server keine weiteren Daten zu übermitteln hat, signalisiert er in Paket 08 den Wunsch des Verbindungsabbaus (FIN).
Paket 09 ist die Quittung dafür; die Pakete 10 und 11 sind der Verbindungsabbau seitens des Clients und die dazu
passende Quittung.
&lt;/p&gt;
&lt;p&gt;
Abgesehen von den oben gezeigten Standardfällen gibt es noch einen ganzen Haufen von Sonderfällen. So hat ESP als
IP-Protokoll keine Portnummern, so dass ein Paket einer ESP-Verbindung nur durch das Tripel Source-IP, Destination-IP,
Protokollnummer 50 (ESP) klassifiziert werden kann. In einigen wenigen Protokollen spielt die Absenderportnummer eine
Rolle; und wieder andere wenige Protokolle benutzen TCP &lt;u&gt;UND&lt;/u&gt; UDP, dies aber auf derselben Portnummer. Und dann
gibt es natürlich &amp;#8220;kranke, firewallfeindliche&amp;#8221; Protokolle wie ftp, SIP, nfs, amanda, RPC (inklusive
MS-RPC), bei denen die Portnummern für den &amp;#8220;eigentlichen&amp;#8221; Dienst beidseitig erst durch eine Unterhaltung
der beteiligten Systeme durch eine Steuerverbindung auf einem wohldefinierten Port ermittelt werden.
&lt;/p&gt;
&lt;p&gt;
Wir sehen auch, dass im allgemeinen die Kommunikation zwischen zwei Systemen nahezu immer bidirektional stattfindet. Nur
in ganz wenigen Sonderfällen (von denen mir gerade partout keiner einfallen möchte) versendet die eine Seite ein
Paket, ohne sich jemals für eine Antwort oder Quittung zu interessieren. Glücklicherweise braucht man sich darum in
der Regel heutzutage bei halbwegs aktuellen Firewalls nicht mehr zu kümmern: Es reicht, wenn man für eine erwünschte
Kommunikationsbeziehung das jeweils erste Paket erlaubt; die direkt oder indirekt dazu gehörenden Pakete werden von der
Firewall automatisch als solche erkannt und automatisch durchgelassen. Das trifft meist auf die direkten Antwortpakete
zu, aber bei besseren Systemen auch auf kompliziertere Fälle wie den unabhängigen Datenkanal bei &amp;#8220;kranken&amp;#8221;
Protokollen wie ftp oder zur Verbindung gehörende ICMP-Fehler wie &amp;#8220;host unreachable&amp;#8221; oder
&amp;#8220;fragmentation needed&amp;#8221;.
&lt;/p&gt;
&lt;p&gt;
Für die beiden oben zitierten Paketdumps reichen also zwei Regeln:
&lt;blockquote&gt;&lt;pre&gt;
proto=UDP srcip=192.168.218.21 srcport=49221 dstip=206.251.36.94 dstport=53
proto=TCP flags=SYN srcip=192.168.218.21 srcport=37734 dstip=81.169.179.176 dstport=80
&lt;/blockquote&gt;&lt;/pre&gt;
Halt, stop. Da ist noch was zu viel: Der Source-Port wird vom Client jeweils neu ausgewürfelt; wir dürfen die
Firewallregeln also nicht ganz so eng fassen, wenn der Dienst auch beim zweiten Zugriffsversuch noch funktionieren
soll:
&lt;blockquote&gt;&lt;pre&gt;
proto=UDP srcip=192.168.218.21 dstip=206.251.36.94 dstport=53
proto=TCP flags=SYN srcip=192.168.218.21 dstip=81.169.179.176 dstport=80
&lt;/blockquote&gt;&lt;/pre&gt;
Wie wir alle wissen, benutzt DNS im Normalfall UDP, fällt aber bei manchen Fehlern auf das (langsamere, aufwändigere)
TCP zurück - beispielsweise wenn die Antwort nicht mehr in ein Antwortpaket passt. Also braucht&amp;#8217;s noch eine
dritte Regel, die den DNS-Sonderfall abdeckt:
&lt;blockquote&gt;&lt;pre&gt;
proto=TCP flags=SYN srcip=192.168.218.21 dstip=206.251.36.94 dstport=53
&lt;/blockquote&gt;&lt;/pre&gt;
Bei TCP ist es zweckmäßig, nur &amp;#8220;erste&amp;#8221; Pakete durchzulassen, die auch korrekterweise das SYN-Flag gesetzt
haben. Sonst lässt man im Zweifel Pakete bis zum Host durch, von denen wir schon wissen, dass sie nicht koscher sind,
und dass der Host sie eh nur verwerfen wird.
&lt;/p&gt;
&lt;p&gt;
Auf Unix-ähnlichen Systemen gibt es noch eine weitere Unterscheidung: Die Ports 1-1023 bleiben dem Benutzer root
vorbehalten; nur Prozesse, die als root laufen, dürfen diese Ports des lokalen Systems verwenden. Man sieht deswegen in
Firewallregeln wie den oberen oft die Begrenzung auf die &amp;#8220;hohen&amp;#8221; Ports ab 1024. Eine solche Begrenzung
bringt aber keine zusätzliche Sicherheit, denn ein Prozess, der einen der &amp;#8220;niedrigen&amp;#8221; Ports benutzen darf,
könnte genauso gut einen &amp;#8220;hohen&amp;#8221; Port verwenden. Ich empfehle deswegen das KISS-Prinzip und den allgemeinen
Verzicht auf Beschränkungen des Source-Ports bei so einfachen Regeln.
&lt;/p&gt;
&lt;p&gt;
Aus diesen Informationen dürfte klar sein, dass an Herstellerdokumentationen &amp;#8220;erlauben Sie Port 80 TCP/UDP&amp;#8221;
oder &amp;#8220;Wir benutzen die Ports 514 und 443 incoming und outgoing&amp;#8221; oder &amp;#8220;benötigt: Port
1024-65535&amp;#8221; wenig Sachkenntnis beteiligt war. Wer stur nach solchen Regeln arbeitet, reißt sich große
Sicherheitslöcher in seine Infrastruktur und ist nur noch durch das vielleicht vorhandene NAT vor den fatalen Folgen
solcher Konfigurationsfehlern geschützt - oder eben nicht.
&lt;/p&gt;
&lt;p&gt;
Je länger die Portliste, desto höher ist die Wahrscheinlichkeit, dass manche dieser Ports nur noch aus historischen
Gründen in der Liste stehen und von der Applikation seit etwa 1948 nicht mehr genutzt werden. Gerne sieht man das bei
Applikationen, die unter Windows entweder Laufwerke mappen wollen oder in irgend einer Art mit dem Active Directory
sprechen: Microsoft hat diese beiden Zugriffsmethoden in den letzten zehn Jahren mehrfach umspezifiziert und jedes Mal
neue Ports verwendet, und die älteren Portnummern braucht man nur, wenn auch noch ältere Versionen im Einsatz sind. In
aktuellen Netzen reißt man sich damit potenzielle Sicherheitslöcher, denn auch die aktuellen Server lauschen
natürlich im Interesse der Rückwärtskompatibilität auch auf den &amp;#8220;älteren&amp;#8221; Ports. 
&lt;/p&gt;
&lt;p&gt;
Viele andere Ports aus solchen ellenlangen Listen werden nur dann benötigt, wenn man ein bestimmtes obskures Feature
der Software verwendet. Oder ein Eintrag in einer Portliste ist schlicht und einfach inkorrekt. Auch schon passiert: Ein
essentiell wichtiger Port steht aus irgend einem Grund &lt;u&gt;nicht&lt;/u&gt; in der Liste und lässt die Applikation auch dann
subtil versagen, wenn man die Portdokumentation sklavisch in Firewallregeln konvertiert hat.
&lt;/p&gt;
&lt;p&gt;
Deswegen lautet meine Empfehlung ganz klar, vom Hersteller einer Software gelieferte Portlisten komplett zu ignorieren
und aus tcpdump und Firewall-Log herauszudestillieren, welche Kommunikationsbeziehungen die Applikation im gegebenen
Anwendungsszenario &lt;u&gt;wirklich&lt;/u&gt; zu benutzen gedenkt. Das funktioniert allerdings selten auf Anhieb, weil oftmals der
nächste Port erst benutzt wird, wenn der Zugriff auf den erstfreigegebenen Port erfolgreich war. Man ist also gut
beraten, wenn man die Applikation entweder selbst bedient oder den Anwender vorher darauf vorbereitet, dass man mehrere
Iterationen von &amp;#8220;probier&amp;#8217;s nochmal, ah ja, moment&amp;#8221; benötigen wird bis die Applikation benutzbar sein
wird - denn sonst wird einem diese Trial-and-Error-Methode gerne als unstrukturiertes oder unfähiges Vorgehen
missinterpretiert. Außerdem muss man darauf vorbereitet sein, im Rahmen dieser Vorgehensweise auch die obskureren
Funktionen der Software bis hin zum &amp;#8220;Agent-Update auf dem Client&amp;#8221; auszuprobieren, denn sonst fällt einem
die Sicherheitspolicy vielleicht irgendwann im laufenden Betrieb schmerzhaft auf den Fuß.
&lt;/p&gt;
&lt;p&gt;
Wenn man die aufwändige Phase einmal abgeschlossen hat, wird man nicht selten mit einem schlanken, gut dokumentierten
Regelwerk belohnt, von dem man weiß, dass es keine unnötigen Risiken enthält. Außerdem bekommt man durch die Arbeit
mit dem Firewall-Log und tcpdump ein Gefühl für die Kommunikation und genug Erfahrung mit den Tools, um später im
Fehlerfall souverän mit den Tools umgehen zu können und deren Ausgabe sinnvoll interpretieren zu können. Und es
erspart einem unnötige Aktionen mit der Glaskugel um zu raten, was der Hersteller mit seiner unvollständigen
Dokumentation, die nicht selten stur aus einer Portliste ohne Protokoll- und Richtungsangabe besteht, wohl gemeint haben
könnte.
&lt;/p&gt;
&lt;p&gt;
Abschließend noch eine Wunschliste: Wenn Ihr den Firewallbetreuern Eurer Anwender einen großen Gefallen tut, dann
beschreibt die Kommunikationsbeziehungen Eurer Software vollständig. Das bedeutet also im Zweifel eine Liste wie hier:
&lt;blockquote&gt;&lt;pre&gt;
name=DNS proto=(UDP/TCP) srcip=(1) dstip=(2) dstport=53
name=http proto=TCP srcip=(1) dstip=ivanova.notwork.de,*.zugschlus.de dstport=80
name=amanda-control proto=UDP srcip=client dstip=server dstport=10080
name=amanda-data proto=TCP srcip=client srcport=50000 dstip=server dstport=50000-50100

(1)=IP-Adresse des lokalen Systems
(2)=Full Service Resolver für das lokale System
&lt;/blockquote&gt;&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
Dokumentation gehört zum Regelwerk dazu, denn man möchte auch in zwei Jahren noch verstehen, warum man das, was da
drin steht, auch reingeschrieben hat. Deswegen liefert Eurem Firewaller bitte auch, wie das System heißt, für das da
die Regeln eingetragen werden sollen, und was es tut. Er wird dann noch das aktuelle Datum und Euren Namen
dazuschreiben, und dann ist die Dokumentation brauchbar.
&lt;/p&gt;
&lt;p&gt;
Wenn es sich um ein Testsystem handelt, ist es sinnvoll, die damit verbundenen Regeln zeitlich zu beschränken. Dazu
muss der Firewaller aber wissen, dass es ein Test ist, und wie lange er voraussichtlich dauern wird. Manche
Firewallsysteme können bei jeder Regel sofort ein Verfallsdatum dazuschreiben. ab der die Regel automatisch nicht mehr
angewendet wird. Sonst muss man das halt manuell mit Kommentaren im Regelwerk machen. Geht auch.
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Mon, 11 Jan 2010 10:29:40 +0100</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/877-guid.html</guid>
    <category>firewall</category>
<category>ip</category>
<category>security</category>
<category>tcp</category>
<category>tcp/ip</category>
<category>udp</category>

</item>
<item>
    <title>Scan eingehender Mail auf Malware</title>
    <link>http://blog.zugschlus.de/archives/772-Scan-eingehender-Mail-auf-Malware.html</link>
            <category>Security</category>
    
    <comments>http://blog.zugschlus.de/archives/772-Scan-eingehender-Mail-auf-Malware.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=772</wfw:comment>

    <slash:comments>5</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=772</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;
Dadurch, dass mein Mailsystem in seiner Eigenschaft als Nichtwindows nicht besonders anfällig gegen Malware ist und ich
auch nicht blind auf jeden Anhang klicke, leiste ich mir seit einigen Jahren den Luxus, dass der Clamav auf meinem
Mailserver nur die Malware ablehnt, die ich explizit konfiguriert habe. So werde ich die lästigsten Störer automatisch
los und habe trotzdem einen Überblick darüber, was im Moment so an Malware unterwegs ist, weil der Clamav natürlich
auch Malware, die nicht auf der Reject-Liste steht, markiert.
&lt;/p&gt;
&lt;p&gt;
Es gab zwischendrin eine Zeit, da kam ungefähr gar nichts. So wenig jedenfalls, dass ich ernsthaft darüber nachgedacht
habe, die CPU-Zyklen für den Scan eingehender Mail auf Malware einzusparen und den Mailvirenscanner abzuschalten.
&lt;/p&gt;
&lt;p&gt;
Gut, dass ich das nicht gemacht habe, denn in den letzten zwei bis drei Wochen kommt durchaus wieder Malware per Mail in
signifikanter Menge (also mehr als zwanzig pro Tag). So hat der Clamav wieder ein wenig mehr zu tun, und ich werde in
Zukunft nicht mehr so schnell darüber nachdenken, einen nicht störenden Sicherheitsmechanismus wegen
&amp;#8220;irrelevant, braucht man heutzutage nicht mehr&amp;#8221; abzuschalten.
&lt;/p&gt;
  
    </content:encoded>

    <pubDate>Fri, 07 Nov 2008 18:30:43 +0100</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/772-guid.html</guid>
    <category>mail</category>
<category>malware</category>
<category>security</category>

</item>
<item>
    <title>fail2ban andersrum</title>
    <link>http://blog.zugschlus.de/archives/752-fail2ban-andersrum.html</link>
            <category>Hosting und Internet</category>
    
    <comments>http://blog.zugschlus.de/archives/752-fail2ban-andersrum.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=752</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=752</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;
Auf einem Webserver möchte ich nicht, dass phpmyadmin, das Dokumentations-Wiki und das awstats von überall verfügbar
sind. Andererseits möchte derjenige, der das CMS auf eben dieser Maschine betreut, genau diese Webapplikationen
jederzeit und von überall benutzen können.
Was tun?
&lt;/p&gt;
 &lt;p&gt;
Die erste Idee ist, dem Webmenschen auf der Shell des Servers ein Script bereitzustellen, dass den virtuellen Host für
die Utilities per sudo aktiviert und ihn aus dem cron regelmäßig wieder zu deaktivieren. Dann kommt mir die Idee, das
ganze beim Login aus dem ~/.profile zu automatisieren. Und wenn wir schon dabei sind, sollen die Utilities auch nur für
den Host freigegeben werden, von dem sich der Benutzer gerade eingelogged hat.
&lt;/p&gt;
&lt;p&gt;
Das #!/usr/bin/perl -w, use strict ist schon geschrieben und ich mache mir gerade Gedanken darüber, wie ich das
auth.log zur Gewinnung der Quell-IP-Adresse des Logins am besten durchforsten kann (denn dieses File kann potenziell
groß sein), da kommt mir der Geistesblitz. Wir haben doch schon einen Daemon, der beim (gehäuften) Auftreten eines
bestimmten Logeintrags eine Aktion durchführen kann und diese nach einiger Zeit auch automatisch wieder rückgängig
macht: fail2ban macht dies, mit der Intention, eine IP-Adresse zu blockieren, sobald von dieser Adresse zu oft
fehlerhafte Loginversuche ausgehen.
&lt;/p&gt;
&lt;p&gt;
Diesmal wollen wir es gerade umgekehrt: Wir wollen einen Dienst für eine IP-Adresse temporär &lt;u&gt;freigeben&lt;/u&gt;, sobald
&lt;u&gt;ein&lt;/u&gt; &lt;u&gt;erfolgreicher&lt;/u&gt; Login von dieser Adresse verzeichnet werden konnte. fail2ban widersetzt sich dieser,
seiner eigentlichen Intention diametral entgegengesetzten Aufgabe kaum, so dass mit der folgenden Konfiguration das Ziel
erreicht wird:
&lt;/p&gt;
&lt;p&gt;
/etc/fail2ban/jail.local:
&lt;blockquote&gt;&lt;pre&gt;
[ssh-success]

enabled = true
port    = https
filter  = sshd-success
logpath  = /var/log/syslog/auth.log
maxretry = 1
action = iptables-allow[name=%(&lt;u&gt;_name_&lt;/u&gt;)s]
bantime = 7200
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;
/etc/fail2ban/action.d/iptables-allow.conf:
&lt;blockquote&gt;&lt;pre&gt;
[Definition]
actionstart = iptables --new-chain fail2ban-&amp;lt;name&amp;gt;
              iptables --append fail2ban-&amp;lt;name&amp;gt; -j DROP
              iptables --insert INPUT -m state --state NEW --protocol &lt;protocol&gt;  --dport &amp;lt;port&amp;gt; -j
fail2ban-&amp;lt;name&amp;gt;
actionstop = iptables --delete INPUT -m state --state NEW -p &amp;lt;protocol&amp;gt; --dport
&amp;lt;port&amp;gt; -j fail2ban-&amp;lt;name&amp;gt;
             iptables --flush fail2ban-&amp;lt;name&amp;gt;
             iptables --delete-chain fail2ban-&amp;lt;name&amp;gt;
actioncheck = iptables --list INPUT | grep -q fail2ban-&amp;lt;name&amp;gt;
actionban = iptables -I fail2ban-&amp;lt;name&amp;gt; 1 -s &amp;lt;ip&amp;gt; -j ACCEPT
actionunban = iptables -D fail2ban-&amp;lt;name&amp;gt; -s &amp;lt;ip&amp;gt; -j ACCEPT

[Init]
name = default
port = https
protocol = tcp
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;
/etc/fail2ban/filter.d/sshd-success.conf:
&lt;blockquote&gt;&lt;pre&gt;
[Definition]
failregex = Accepted publickey for \w+ from &lt;HOST&gt; port \d+ ssh2$
ignoreregex =
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;
Dabei kommt mir zu gute, dass ich die Utilities als einzige https-Dienste auf dem System angeboten werden und ich somit
radikal mit dem Port arbeiten kann. Theoretisch könnte ich mir aber vorstellen, dass das Verfahren auch dazu geeignet
ist, eine .htaccess-Datei mit den entsprechenden allow-Klauseln zu füllen bzw. diese nach einiger Zeit wieder zu
entfernen.
&lt;/p&gt;
&lt;p&gt;
Das einzige, was etwas verwirrend ist, ist die Terminologie von fail2ban, das in Konfigurationsdateien und Logs
natürlich davon ausgeht, nach &lt;u&gt;fehlgeschlagenen&lt;/u&gt; Zugriffen eine &lt;u&gt;Sperre&lt;/u&gt; durchzuführen und nach dem Ablauf
der Zeit wieder aufzuheben, während es in der Praxis auf einen &lt;u&gt;erfolgreichen&lt;/u&gt; Zugriff mit einer &lt;u&gt;Freigabe&lt;/u&gt;
reagiert:
&lt;blockquote&gt;&lt;pre&gt;
2008-08-30 11:46:01,544 fail2ban.actions: WARNING [ssh-success] Ban 85.214.68.41
2008-08-30 11:46:08,553 fail2ban.actions: WARNING [ssh-success] Ban 92.227.69.188
2008-08-30 13:46:02,041 fail2ban.actions: WARNING [ssh-success] Unban 85.214.68.41
2008-08-30 13:46:09,049 fail2ban.actions: WARNING [ssh-success] Unban 92.227.69.188
&lt;/pre&gt;&lt;/blockquote&gt;
Wenn man sich einmal an die verwirrende Sprache gewöhnt hat, macht fail2ban auch seinen umgekehrten Job ganz gut.
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sat, 30 Aug 2008 15:36:08 +0200</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/752-guid.html</guid>
    <category>debian.fail2ban</category>
<category>security</category>

</item>
<item>
    <title>fail2ban fuer ssh fuer Arme</title>
    <link>http://blog.zugschlus.de/archives/688-fail2ban-fuer-ssh-fuer-Arme.html</link>
            <category>Computer und Netze</category>
    
    <comments>http://blog.zugschlus.de/archives/688-fail2ban-fuer-ssh-fuer-Arme.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=688</wfw:comment>

    <slash:comments>12</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=688</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;
Wer einen Server in einschlägig bekannten Netzwerksegmenten (sprich: Bei den großen Housing-Anbietern) betreibt und
wenigstens von Zeit zu Zeit mal in dessen Logs guckt kennt es: Irgendwelche Rechner aus Fernost oder anderswo werfen dem
ssh-Daemon wild zusammengewürfelte Kombinationen aus Username und Passwort zu und tun dies mit einer bemerkenswerten
Persistenz. Und wenn man auf dem System &amp;#8220;fremde&amp;#8221; User hat, lebt man als Admin stets mit der Angst, dass
einer der Versuche der Angreifer irgendwann mal Erfolg hat.
&lt;/p&gt;
&lt;p&gt;
Gegen diesen Typ der Brute-Force-Angriffe sind einige Wässerchen gewachsen, und ich möchte eine kleine Auswahl davon
in diesem Artikel vorstellen.
&lt;/p&gt;
 &lt;p&gt;
Möglichkeit 1 ist die sauberste, aber leider nicht immer praktikable: Man schalte Password Authentication im ssh-Daemon
ab und authentifiziere sich ausschließlich mit einem public/private-Key-Paar. Dann kommen die Cracker zwar immer noch
am System an, man kann die Angriffe aber guten Gewissens ignorieren - sie haben eh keine Chance. Auf den meisten meiner
Systeme ist der ssh-Login noch per Einschränkung des Keys (siehe man sshd, AUTHORIZED_KEYS FILE FORMAT,
from=&amp;#8220;&amp;#8221;) und per tcp-wrapper (/etc/hosts.deny: sshd: ALL oder ALL: ALL) so zugenagelt, dass der Login nur
von einigen meiner üblichen Aufenthaltsorte möglich ist - dank OpenVPN und/oder festen IP-Adressen kann man sich hier
noch etwas verschanzen. Auf Systemen, die sowieso einen Paketfilter haben, ist auch im Paketfilter der Zugang zum
ssh-Port auf die kurze Liste von IP-Adressen beschränkt.
&lt;/p&gt;
&lt;p&gt;
Möglichkeit 2 ist security by obscurity: Man verschiebe den ssh-Daemon auf einen anderen Port. Die Cracker gehen davon
aus, es mit ungepflegten Systemen in Standardkonfiguration zu tun zu haben und suchen nur auf tcp/22 nach dem sshd. Dann
ist schlagartig Ruhe im Log; dafür hat man dann Schmerzen dort, wo schon jemand anders eine Freischaltung für tcp/22
durchgeboxt hat und man nun denselben Kampf mit dem Firewall-Admin für &amp;#8220;seinen&amp;#8221; Spezial-ssh-Port führen
darf.
&lt;/p&gt;
&lt;p&gt;
Möglichkeit 3 heißt fail2ban. Das ist ein in python (*würg*) geschriebener Userspace-Daemon, der in konfigurierbaren
Logfiles nach konfigurierbaren Regexps sucht, die Logfiles auch beim Wachsen beobachtet und bei konfigurierbar
gehäuftem Auftreten von auf diese Regexps matchenden Logeinträgen eine konfigurierbare Operation durchführt und diese
nach konfigurierbarer Zeit wieder rückgängig macht. In der Defaultkonfiguration wird /var/log/auth.log auf &amp;#8220;ROOT
LOGIN REFUSED&amp;#8221;, &amp;#8220;Authentication failure&amp;#8221;, &amp;#8220;Failed foo for bar&amp;#8221; und ähnliches gemonitored
und im Falle des gehäuften Auftretens ein &amp;#8220;iptables -I fail2ban-&amp;lt;name&amp;gt; 1 -s &amp;lt;ip&amp;gt; -j DROP&amp;#8221;
ausgeführt, d.h. alle weiteren Zugriffe von dieser IP-Adresse schon im Paketfilter verworfen. Das ist was feines,
erzeugt keine Fehlalarme, braucht aber einen Userspace-Daemon in einer von mir ungeliebten Programmiersprache.
&lt;/p&gt;
&lt;p&gt;
Da mir fail2ban nicht so wirklich zusagt, habe ich mir Möglichkeit 4 ausgedacht, die keine Zusatzsoftware benötigt,
sondern mit dem in neueren Kerneln enthaltenen hashlimit match von iptables arbeitet und somit die ganze Geschichte
direkt im Paketfilter abfackeln kann.
&lt;/p&gt;
&lt;p&gt;
Hier ein Beispiel in der Notation von &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url_id=2307&amp;amp;entry_id=688&quot;  onmouseover=&quot;window.status=&#039;http://packages.debian.org/sid/ferm&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;externer Link zur Debian
Package Page von ferm&quot;&gt;ferm:&lt;/a&gt;
&lt;pre&gt;
def $SECONDS=600;
def $HITCOUNT=5;
def $LOGLIMIT=&amp;#8220;3/minute&amp;#8221;;
def $LOGBURST=10;
def $BLOCKSECONDS=600;

table filter {
  chain INPUT {
    mod state state NEW proto tcp dport 22 subchain {
      # all new tcp connections to port 22

      # insert into recent table
      mod recent
        name sshratelimit set NOP;

      # if excessive, log and drop
      mod recent
        name sshratelimit update seconds $SECONDS hitcount $HITCOUNT subchain {
          mod hashlimit
            hashlimit $LOGLIMIT hashlimit-burst $LOGBURST
            hashlimit-mode srcip hashlimit-name sshratelimit1
          LOG log-prefix &amp;#8220;sshratelimit1 &amp;#8221;;
          DROP;
      }
    }

    # if a host has been recorded for excessive ssh connects, drop and
    # log everything from there
    mod recent
      name sshratelimit rcheck seconds $BLOCKSECONDS hitcount $HITCOUNT subchain {
        mod hashlimit
          hashlimit $LOGLIMIT hashlimit-burst $LOGBURST
          hashlimit-mode srcip hashlimit-name sshratelimit2
        LOG log-prefix &amp;#8220;sshratelimit2 &amp;#8221;;
        DROP;
      }
  }
}
&lt;/pre&gt;
Dieser Code schickt erstmal alle Pakete, die eine neue TCP-Verbindung zu Port 22 aufmachen wollen, in eine Subchain. In
dieser Subchain werden alle Pakete über den &amp;#8220;recent&amp;#8221; match in eine Hashtabelle aufgenommen und im nächsten
Schritt jedes Paket, das über $HITCOUNT innerhalb $SECONDS eingeht, mit einem Limit zur Vermeidung von Log-DoS gelogged
und dann ohne Limit verworfen.  Der zweite Abschnitt sorgt dafür, dass jeglicher Traffic von einem Host, der es einmal
in den Zustand &amp;#8220;block&amp;#8221; geschafft hat, ebenfalls limitiert gelogged und dann ebenfalls verworfen wird.
&lt;/p&gt;
&lt;p&gt;
Im Log sieht das dann so aus:
&lt;pre&gt;
Apr 27 10:25:23 q ippl: port 22 connection attempt from 61.237.230.6 (61.237.230.6:52070-&gt;84.16.252.249:22)
Apr 27 10:25:28 q sshd[20642]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser=
rhost=61.237.230.6  user=root
Apr 27 10:25:31 q sshd[20642]: Failed password for root from 61.237.230.6 port 52070 ssh2
Apr 27 10:25:31 q ippl: port 22 connection attempt from 61.237.230.6 (61.237.230.6:52242-&gt;84.16.252.249:22)
Apr 27 10:25:37 q sshd[20648]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser=
rhost=61.237.230.6  user=root
Apr 27 10:25:39 q sshd[20648]: Failed password for root from 61.237.230.6 port 52242 ssh2
Apr 27 10:25:39 q ippl: port 22 connection attempt from 61.237.230.6 (61.237.230.6:52408-&gt;84.16.252.249:22)
Apr 27 10:25:45 q sshd[20659]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser=
rhost=61.237.230.6  user=root
Apr 27 10:25:47 q sshd[20659]: Failed password for root from 61.237.230.6 port 52408 ssh2
Apr 27 10:25:47 q ippl: port 22 connection attempt from 61.237.230.6 (61.237.230.6:52575-&gt;84.16.252.249:22)
Apr 27 10:25:53 q sshd[20665]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser=
rhost=61.237.230.6  user=root
Apr 27 10:25:55 q sshd[20665]: Failed password for root from 61.237.230.6 port 52575 ssh2
Apr 27 10:25:55 q kernel: sshratelimit1 IN=eth0 OUT= MAC=00:02:a5:79:45:3a:00:0c:db:eb:dc:40:08:00 SRC=61.237.230.6
DST=84.16.252.249 LEN=60 TOS=0x00 PREC=0x00 TTL=49 ID=58324 PROTO=TCP SPT=52749 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
Apr 27 10:25:56 q kernel: sshratelimit2 IN=eth0 OUT= MAC=00:02:a5:79:45:3a:00:0c:db:eb:dc:40:08:00 SRC=61.237.230.6
DST=84.16.252.249 LEN=52 TOS=0x00 PREC=0x20 TTL=49 ID=50655 PROTO=TCP SPT=52575 DPT=22 WINDOW=136 RES=0x00 ACK URGP=0
Apr 27 10:25:57 q kernel: sshratelimit2 IN=eth0 OUT= MAC=00:02:a5:79:45:3a:00:0c:db:eb:dc:40:08:00 SRC=61.237.230.6
DST=84.16.252.249 LEN=52 TOS=0x00 PREC=0x20 TTL=49 ID=0 PROTO=TCP SPT=52575 DPT=22 WINDOW=136 RES=0x00 ACK URGP=0
Apr 27 10:25:58 q kernel: sshratelimit1 IN=eth0 OUT= MAC=00:02:a5:79:45:3a:00:0c:db:eb:dc:40:08:00 SRC=61.237.230.6
DST=84.16.252.249 LEN=60 TOS=0x00 PREC=0x00 TTL=49 ID=58325 PROTO=TCP SPT=52749 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
Apr 27 10:26:00 q kernel: sshratelimit2 IN=eth0 OUT= MAC=00:02:a5:79:45:3a:00:0c:db:eb:dc:40:08:00 SRC=61.237.230.6
DST=84.16.252.249 LEN=52 TOS=0x00 PREC=0x20 TTL=49 ID=0 PROTO=TCP SPT=52575 DPT=22 WINDOW=136 RES=0x00 ACK URGP=0
Apr 27 10:26:04 q kernel: sshratelimit1 IN=eth0 OUT= MAC=00:02:a5:79:45:3a:00:0c:db:eb:dc:40:08:00 SRC=61.237.230.6
DST=84.16.252.249 LEN=60 TOS=0x00 PREC=0x00 TTL=49 ID=58326 PROTO=TCP SPT=52749 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
&lt;/pre&gt;
Man sieht hier sehr schön, wie der angreifende Zombie aus dem China Railway Telecommunications Center mit seinen
Root-Login-Versuchen viermal am sshd selbst abprallt, bevor der Paketfilter zuerst mit sshratelimit1 verkündet, dass er
jetzt zu viele ssh-Verbindungsversuche gesehen hat, und in Zukunft weitere Versuche mit sshratelimit2 ohne weitere
Prüfung verwirft. Man sieht hier zwar nur ssh-Zugriffe, aber ein intelligenterer Angreifer könnte ja zeitgleich
versuchen, andere Dienste auf dem Host anzugreifen.
&lt;/p&gt;
&lt;p&gt;
Natürlich hat dieses Setup auch Nachteile: Es zählt jeden ssh-Verbindungsversuch - auch die erfolgreichen - und sperrt
somit auch legitime User aus, die zu häufig connecten. Besonders auf Systemen, bei denen öfter mal Prozesse extern per
ssh angestoßen werden, oder bei denen scp verwendet wird (das für jede Datei eine neue Verbindung öffnet), erzeugt
man mit der hashlimit-Lösung schon mal ein false positive. Aber dafür kommt es ohne Userspace und vor allen Dingen
ohne python aus.
&lt;/p&gt;
&lt;p&gt;
Dieses Setup habe ich jetzt seit etwa einem halben Jahr auf einem meiner Mehrbenutzerrechner in Betrieb und habe noch
keine Beschwerden gehört. Ich denke, es ist eine sparsame und brauchbare Alternative zu einer aufwendigeren Lösung wie
fail2ban und werde es in den nächsten Wochen auf den restlichen Systemen ausrollen, die aufgrund ihrer Dienst- und
Userstruktur nicht mit Security nach Möglichkeit 1 versorgt werden können.
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Mon, 28 Apr 2008 15:58:48 +0200</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/688-guid.html</guid>
    <category>bruteforce</category>
<category>fail2ban</category>
<category>hashlimit</category>
<category>security</category>
<category>ssh</category>
<category>tcp-wrapper</category>
<category>unix</category>

</item>
<item>
    <title>PKI-loses TLS</title>
    <link>http://blog.zugschlus.de/archives/628-PKI-loses-TLS.html</link>
            <category>Computer und Netze</category>
    
    <comments>http://blog.zugschlus.de/archives/628-PKI-loses-TLS.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=628</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=628</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;
&lt;a href=&quot;http://blog.zugschlus.de/exit.php?url_id=2275&amp;amp;entry_id=628&quot;  onmouseover=&quot;window.status=&#039;http://www.enyo.de/fw/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;externer Link zu Florians Homepage&quot;&gt;Florian&lt;/a&gt; hat im April 2007 eine &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url=aHR0cDovL3d3dy5lbnlvLmRlL2Z3L3NlY3VyaXR5L25vdGVzL3BraS1sb3Nlcy10bHMuaHRtbA==&amp;amp;entry_id=628&quot;  onmouseover=&quot;window.status=&#039;http://www.enyo.de/fw/security/notes/pki-loses-tls.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;externer Link zu Florians Notiz&quot;&gt;Notiz über
PKI-loses TLS unter Verwendung von selbstsignierten Zertifikaten&lt;/a&gt; veröffentlicht. Er ist ja immer für provokative
Aussagen gut, und in der Notiz erklärt er seine Beweggründe gut und hat bei mir einen Denkprozess ausgelöst.
&lt;/p&gt;
&lt;p&gt;
Ich werd das in den nächsten Monaten mal für den einen oder anderen Dienst, z.B. OpenVPN, ausprobieren und gucken, ob
dieser Ansatz in der Praxis funktionieren könnte. Für die Anwendung im Webumfeld sehe ich ja eher schwarz, weil dank
der verDAUung des Internets ein https-Server mit selbstsigniertem Zertifikat gemeinhin als unsicherer angesehen wird wie
ein Server mit unverschlüsseltem http. Weil bei Ersterem der Browser weint, und bei Zweiterem nicht.
&lt;/p&gt;
  
    </content:encoded>

    <pubDate>Sat, 05 Jan 2008 13:00:19 +0100</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/628-guid.html</guid>
    <category>pki</category>
<category>security</category>
<category>ssl</category>
<category>tls</category>

</item>
<item>
    <title>Funktastaturen sind immer noch böse</title>
    <link>http://blog.zugschlus.de/archives/601-Funktastaturen-sind-immer-noch-boese.html</link>
            <category>Security</category>
    
    <comments>http://blog.zugschlus.de/archives/601-Funktastaturen-sind-immer-noch-boese.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=601</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=601</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;
Funktastaturen sind dafür, dass sie gegenüber klassischen Tastaturen eigentlich nur Nachteile haben, erschreckend weit
verbreitet. Sie sind nur unwesentlich weniger unhandlich wie kabelgebundene TastBaturen, fressen dafür Batterien wie
blöde, verringern den Kabelsalat nicht - und unsicher sind sie oft auch.
&lt;/p&gt;
&lt;p&gt;
Funktastaturen sind besonders im Firmenumfeld fast ausschließlich dort zu finden, wo mit vertraulichen Strategiedaten
umgegangen wird, nämlich in der Chefetage. Dort sind die Informationen, die tagein, tagaus in die Tastaturen gehämmert
werden, in aller Regel sensibler als dort, wo es aus Kostengründen keine Funktastaturen gibt (sie aber eventuell
sinnvoller wären). Schließlich erwartet man gerade von den großen Herstellern mit L und mit M, dass sie sich ein
Mindestmaß über die Vertraulichkeit der über die meist proprietären Funkstrecken Gedanken machen.
&lt;/p&gt;
&lt;p&gt;
Schon vor fünf Jahren konnten meine Kollegen mit ihren L-Tastaturen die Eingaben der Firma eine Etage höher abgreifen,
und laut &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url=aHR0cDovL3d3dy5oZWlzZS5kZS9uZXdzdGlja2VyL21lbGR1bmcvOTk4NjQ=&amp;amp;entry_id=601&quot;  onmouseover=&quot;window.status=&#039;http://www.heise.de/newsticker/meldung/99864&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;externer Link zum Heiseticker&quot;&gt;heise online&lt;/a&gt;
hat es jetzt die mit einem dem Stand der Technik von 1540 entsprechenden 8-Bit-XOR-Schlüssel gesicherten Funktastaturen
von M erwischt. So eine &amp;#8220;Verschlüsselung&amp;#8221; reicht gerade, um dem Laien zu zeigen, dass da keine
Klartextdaten über die Luftschnittstelle gehen; einem mit unterdurchschnittlicher Energie ankommenden Angreifer hält
so eine &amp;#8220;Sicherheit&amp;#8221; geschätzt dreieinhalb Sekunden stand, und dann liegen alle getippten Passworte und
Buchhaltungsdaten dem Mithörer weit offen.
&lt;/p&gt;
&lt;p&gt;
Und so muss meine Empfehlung weiterhin lauten: Finger weg von Funktastaturen. Und wenn es partout ein Statussymbol sein
muss, oder der Einsatz einer Funktastatur ausnahmsweise mal Sinn und Zweck haben (z.B. bei einem Entertainment-PC, den
man auch vom Sofa aus bedienen können will), sollte man wenigstens das Geld für eine Bluetooth-Tastatur in die Hand
nehmen: Das ist ein offener Standard, dessen Sicherheit zwar nicht berauschend gut ist, aber eine derartige
Peinlichkeit, wie sie sich Vendor M mit seinen Produkten geleistet hat, ist dort eher nicht zu erwarten.
&lt;/p&gt;
&lt;p&gt;
Ach ja, übrigens: Wenn Ihr mich richtig ärgern wollt, nehmt mir meine kabellose Maus weg. Besonders mit Bluetooth ist
das Klasse, wenn das Notebook das Bluetooth-Interface bereits eingebaut hat und man am Notebook überhaupt nichts
einstöpseln muss und die Maus trotzdem einfach funktioniert. Aber das Konzept war wohl zu einfach und nicht proprietär
genug, denn Vendor L hat die MX 900 schon vor vielen Monaten aus dem Programm genommen.
&lt;/p&gt;
  
    </content:encoded>

    <pubDate>Sat, 01 Dec 2007 17:39:20 +0100</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/601-guid.html</guid>
    <category>funkmaus</category>
<category>funktastatur</category>
<category>heise</category>
<category>security</category>

</item>
<item>
    <title>Serendipity 1.0.2 fixes XSS vulnerability</title>
    <link>http://blog.zugschlus.de/archives/475-Serendipity-1.0.2-fixes-XSS-vulnerability.html</link>
            <category>Meta</category>
    
    <comments>http://blog.zugschlus.de/archives/475-Serendipity-1.0.2-fixes-XSS-vulnerability.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=475</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=475</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;
Hallo &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url_id=2123&amp;amp;entry_id=475&quot;  onmouseover=&quot;window.status=&#039;http://www.deimeke.net/dirk/blog/index.php?/archives/558-Serendipity-1.0.2-....html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;externer
Link zu Dirk Deimeke&quot;&gt;Dirk,&lt;/a&gt; zu Deinem Artikel möchte ich noch hinzufügen, dass &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=2124&amp;amp;entry_id=475&quot;  onmouseover=&quot;window.status=&#039;http://blog.s9y.org/archives/147-Serendipity-1.0.2-and-1.1-beta5-released.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;externer Link zum
s9y-Blog&quot;&gt;Serendipity 1.0.2&lt;/a&gt; ein Security-Update ist, das &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url=aHR0cDovL3d3dy5oYXJkZW5lZC1waHAubmV0L2Fkdmlzb3J5XzExMjAwNi4xMzYuaHRtbA==&amp;amp;entry_id=475&quot;  onmouseover=&quot;window.status=&#039;http://www.hardened-php.net/advisory_112006.136.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;externer Link zum Advisory von Stefan Esser&quot;&gt;XSS
Vulnerabilities&lt;/a&gt; behebt.
&lt;/p&gt;
&lt;p&gt;
Man möchte dieses Update also nicht verzögern, sondern unverzüglich installieren!
&lt;/p&gt;
  
    </content:encoded>

    <pubDate>Thu, 19 Oct 2006 19:01:35 +0200</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/475-guid.html</guid>
    <category>advisory</category>
<category>php</category>
<category>s9y</category>
<category>security</category>
<category>xss</category>

</item>
<item>
    <title>Berufsverbot</title>
    <link>http://blog.zugschlus.de/archives/449-Berufsverbot.html</link>
            <category>Security</category>
    
    <comments>http://blog.zugschlus.de/archives/449-Berufsverbot.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=449</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=449</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;
Das Bundesministerium der Justiz bereitet einen Gesetzentwurf vor, der den Schutz vor Computerkriminalität mit
strafrechtlichen Maßnahmen verbessern soll. Und handelt Deutschland erneut den Verlust von zahlreichen
hochqualifizierten Arbeitsplätzen im Hochtechnologiesektor ein.
&lt;/p&gt;
 Der &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url_id=2095&amp;amp;entry_id=449&quot;  onmouseover=&quot;window.status=&#039;http://www.bmj.bund.de/media/archive/1317.pdf&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;externer Link zum Bundesministerium der
Justiz&quot;&gt;Gesetzentwurf zur Änderung des StGB&lt;/a&gt; fügt einen neuen Paragrafen 202 c &amp;#8220;Vorbereiten des Ausspähens
und Abfangens von Daten&amp;#8221; in das Strafgesetzbuch ein.

&lt;blockquote&gt;
&lt;p&gt;
Wer eine Straftat nach § 202 a oder § 202 b vorbereitet, indem er
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Passworte oder sonstige Sicherungscodes, die den Zugang zu Daten (§ 202 a Abs. 2) ermöglichen, oder&lt;/li&gt;
&lt;li&gt;Computerprogramme, deren Zweck die Begehung einer solchen Tat ist, herstellt, sich oder einem anderen verschafft,
verkauft, einem anderen überlässt, verbreitet oder sonst zugänglich macht,
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;wird mit Freiheitsstrafe bis zu einem Jahr oder mit Geldstrafe bestraft.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
§ 202 a ist heute schon &amp;#8220;Ausspähen von Daten&amp;#8221;; § 202 b wird &amp;#8220;Abfangen von Daten&amp;#8221;.
&lt;/p&gt;
&lt;p&gt;
Es wird also in Zukunft verboten sein,
&lt;ul&gt;
&lt;li&gt;Proof of Concepts für Schwachstellenausnutzung zu erstellen (&amp;#8220;herstellen&amp;#8221;)&lt;/li&gt;
&lt;li&gt;Bugtraq, Full Disclosure oder ähnliche Mailinglisten auch nur abonniert zu haben (&amp;#8220;sich
verschaffen&amp;#8221;)&lt;/li&gt;
&lt;li&gt;Schwachstellenanalysen durchzuführen (da man sich vorher Tools entweder verschaffen oder herstellen muss)&lt;/li&gt;
&lt;li&gt;&amp;#8220;Live Hacking&amp;#8221; als Schockeffekt in Seminaren (&amp;#8220;sonst zugänglich machen&amp;#8221;)&lt;/li&gt;
&lt;li&gt;Linux-Distributionen, die nmap oder nessus enthalten zum Download bereitzuhalten (&amp;#8220;verbreiten&amp;#8221;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Was bleibt einem Security-Consultant in Deutschland dann noch als Arbeitsmöglichkeiten offen?
&lt;/p&gt;
&lt;p&gt;
Ich glaube, ich muss doch auf Schafzucht oder Lokführer umsatteln. Qualifizierte Arbeitsplätze sind in Deutschland
wohl unerwünscht.
&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Thu, 21 Sep 2006 10:38:28 +0200</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/449-guid.html</guid>
    <category>arbeitsplatz</category>
<category>dummes-gesetz</category>
<category>politik</category>
<category>security</category>

</item>
<item>
    <title>Sind Firewalls noch zeitgemäß?</title>
    <link>http://blog.zugschlus.de/archives/416-Sind-Firewalls-noch-zeitgemaess.html</link>
            <category>Security</category>
    
    <comments>http://blog.zugschlus.de/archives/416-Sind-Firewalls-noch-zeitgemaess.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=416</wfw:comment>

    <slash:comments>8</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=416</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;
Die meisten restriktiven Security Policies haben inzwischen ein Alter von drei bis fünf Jahren erreicht. Damals hat man
das als Policy niedergelegt, was im gerade führenden Fachbuch stand, und somit auch schon einige Jahre auf dem Buckel
hatte. Auf solch einer alten Policy aufgesetzte Sicherheitsmaßnahmen, die typischerweise das böse Internet mit einer
(!) Firewall von dem einen (!) internen Netz abtrennen und bestenfalls eine kleine Handvoll Servicenetze (vulgo
&amp;#8220;DMZ&amp;#8221;, wobei &amp;#8220;mehr als ein Servicenetz&amp;#8221; immer noch mit &amp;#8220;Respekt! Das ist aber gut
durchdacht!&amp;#8221; kommentiert wird) beinhalten, sind in der heutigen Welt kaum mehr zeitgemäß; es ist Zeit, hier
anzusetzen.
&lt;/p&gt;
 &lt;p&gt;
Mit Policies auf dem technischen Stand von vor fünf Jahren ist heute ein messbarer Sicherheitsgewinn kaum mehr
erreichbar. Zu sehr verschwimmen in den letzten Jahren die Netzgrenzen, werden durch Inter-, Extra- und Intranet,
VPN-Tunnel, UMTS, Wireless LAN, Mobile Devices, Suspendmodi und andere Dinge immer weiter aufgeweicht, so dass eine
einzige klassische Firewall am Unternehmenseingang heute nicht mehr zeitgemäß ist. Mit solchen Lösungen erreicht man
nur, dass die Leute, die die Arbeit machen, bei ihrer Leistungserbringung massiv behindert werden, was die IT-Kosten in
ihrer Gesamtheit in astronomische Höhen treibt. Außerdem bauen die Leistungsträger sich in so einer Umgebung
policykonforme Workarounds, die nur deswegen policykonform sind, weil es sie zum Zeitpunkt der Policyerstellung schlicht
noch nicht gab und sie deswegen in der Policy nicht verboten sind. Interessant finde ich übrigens, dass es kaum eine
Security Policy gibt, die die in der Technik seit 20 Jahren übliche Maxime &amp;#8220;Es ist alles verboten, was nicht
ausdrücklich erlaubt ist&amp;#8221; (vulgo &amp;#8220;default deny&amp;#8221;) zur Grundlage hat. Nein, die meisten Policies
ergehen sich in seitenlangen Listen von Dingen, die bei sofortiger Entleibung niemalsnie passieren dürfen. Das Ergebnis
ist der GAU: Hohe Kosten bei nur mäßigem Sicherheitsniveau.
&lt;/p&gt;
&lt;p&gt;
Nun, wie schon so oft: Kris Köhntopp hat das schon vor Jahren ausgeforscht. &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=2125&amp;amp;entry_id=416&quot; title=&quot;http://kris.koehntopp.de/artikel/mobile_devices/&quot;  onmouseover=&quot;window.status=&#039;http://kris.koehntopp.de/artikel/mobile_devices/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Seine Präsentation über Mobile Devices&lt;/a&gt; spricht mir aus der
Seele, und er hat natürlich Recht. Besonders seine Aussage, dass die Benutzer immer kreativer werden, je restriktiver
die Policy ist, ist eine viel zu selten in dieser Deutlichkeit ausgesprochene Wahrheit.
&lt;/p&gt;
&lt;p&gt;
Was lernen wir daraus? Eine Security Policy ist nur dann sinnvoll, wenn man sie aktuell hält. Wobei
&amp;#8220;aktuell&amp;#8221; nicht nur heißt, dass man die technischen Weiterentwicklungen, die den Sinn der alten Policy in
Frage stellen, verbietet - nein, das wird man eh nicht durchhalten können, weil viele dieser technischen
Weiterentwicklungen als Spielzeug für die Entscheider taugen und man deren Verbot deswegen eh nicht wird durchhalten
können. Es ist vielmehr sinnvoll, die existierende Policy in regelmäßigen Abständen - am besten innerhalb eines
formellen Review-Prozesses - zu hinterfragen und zu modernisieren. Das bedeutet freilich auch, dass manche Verbote
aufgehoben oder abgeschwächt gehören und man sich nach anderen Wegen zur Reduktion des Risikos umsehen muss. Die
Security wird in den nächsten Jahren wieder näher an die Daten selbst, also an die Server, heranrücken müssen, und
dafür wird Geld in die Hand genomen werden müssen. Als Belohnung winken schneller ablaufende, weniger kostende
IT-Projekte in der Zukunft.
&lt;/p&gt;
&lt;p&gt;Viele Unternehmen werden externen Rat nötig haben, und zwar sowohl im Prozess der Policyanpassung als auch bei der
Umsetzung der neuen Policy. Es wird viel zu tun geben - fragen Sie bitte jemanden, der sich auskennt!
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Wed, 19 Jul 2006 13:55:36 +0200</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/416-guid.html</guid>
    <category>consulting</category>
<category>firewalls</category>
<category>security</category>
<category>security policy</category>

</item>
<item>
    <title>Microsoft über den Umgang mit kompromittierten Systemen</title>
    <link>http://blog.zugschlus.de/archives/397-Microsoft-ueber-den-Umgang-mit-kompromittierten-Systemen.html</link>
            <category>Security</category>
    
    <comments>http://blog.zugschlus.de/archives/397-Microsoft-ueber-den-Umgang-mit-kompromittierten-Systemen.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=397</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=397</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;
Im Microsoft Technet stehen von Zeit zu Zeit echte Perlen. Aber die hier ist so gut (und so wahr), dass ich sie sogar
hier zitieren muss.
&lt;/p&gt;

&lt;p&gt;
Jesper M. Johansson, Ph.D., CISSP, MCSE, MCP+I, seines Zeichens Security Program Manager bei der Microsoft Corporation,
schreibt in einem &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url=aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3RlY2huZXQvY29tbXVuaXR5L2NvbHVtbnMvc2VjbWdtdC9zbTA1MDQubXNweA==&amp;amp;entry_id=397&quot; title=&quot;http://www.microsoft.com/technet/community/columns/secmgmt/sm0504.mspx&quot;  onmouseover=&quot;window.status=&#039;http://www.microsoft.com/technet/community/columns/secmgmt/sm0504.mspx&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; &gt;Artikel mit dem
Titel &amp;#8220;Help: I Got Hacked. Now What Do I Do?&amp;#8221; aus dem Mai 2004:&lt;/a&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can’t clean a compromised system by patching it. Patching only removes the vulnerability. Upon getting into
your system, the attacker probably ensured that there were several other ways to get back in.&lt;/li&gt;
&lt;li&gt;You can’t clean a compromised system by removing the back doors. You can never guarantee that you found all the
back doors the attacker put in. The fact that you can’t find any more may only mean you don’t know where to look, or
that the system is so compromised that what you are seeing is not actually what is there.&lt;/li&gt;
&lt;li&gt;You can’t clean a compromised system by using some “vulnerability remover.” Let’s say you had a system hit
by Blaster. A number of vendors (including Microsoft) published vulnerability removers for Blaster. Can you trust a
system that had Blaster after the tool is run? I wouldn’t. If the system was vulnerable to Blaster, it was also
vulnerable to a number of other attacks. Can you guarantee that none of those have been run against it? I didn’t think
so.&lt;/li&gt;
&lt;li&gt;You can’t clean a compromised system by using a virus scanner. To tell you the truth, a fully compromised system
can’t be trusted. Even virus scanners must at some level rely on the system to not lie to them. If they ask whether a
particular file is present, the attacker may simply have a tool in place that lies about it. Note that if you can
guarantee that the only thing that compromised the system was a particular virus or worm and you know that this virus
has no back doors associated with it, and the vulnerability used by the virus was not available remotely, then a virus
scanner can be used to clean the system. For example, the vast majority of e-mail worms rely on a user opening an
attachment. In this particular case, it is possible that the only infection on the system is the one that came from the
attachment containing the worm. However, if the vulnerability used by the worm was available remotely without user
action, then you can’t guarantee that the worm was the only thing that used that vulnerability. It is entirely
possible that something else used the same vulnerability. In this case, you can’t just patch the system.&lt;/li&gt;
&lt;li&gt;You can’t clean a compromised system by reinstalling the operating system over the existing installation. Again,
the attacker may very well have tools in place that tell the installer lies. If that happens, the installer may not
actually remove the compromised files. In addition, the attacker may also have put back doors in non-operating system
components.&lt;/li&gt;
&lt;li&gt;You can’t trust any data copied from a compromised system. Once an attacker gets into a system, all the data on it
may be modified. In the best-case scenario, copying data off a compromised system and putting it on a clean system will
give you potentially untrustworthy data. In the worst-case scenario, you may actually have copied a back door hidden in
the data.&lt;/li&gt;
&lt;li&gt;You can’t trust the event logs on a compromised system. Upon gaining full access to a system, it is simple for an
attacker to modify the event logs on that system to cover any tracks. If you rely on the event logs to tell you what has
been done to your system, you may just be reading what the attacker wants you to read.&lt;/li&gt;
&lt;li&gt;You may not be able to trust your latest backup. How can you tell when the original attack took place? The event
logs cannot be trusted to tell you. Without that knowledge, your latest backup is useless. It may be a backup that
includes all the back doors currently on the system.&lt;/li&gt;
&lt;li&gt;The only way to clean a compromised system is to flatten and rebuild. That’s right. If you have a system that has
been completely compromised, the only thing you can do is to flatten the system (reformat the system disk) and rebuild
it from scratch (reinstall Windows and your applications). Alternatively, you could of course work on your resume
instead, but I don’t want to see you doing that.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Ein weiser Mann. Ich wünsche mir, dass einige Manager in Zukunft auf diesen weisen Mann hören.
&lt;/p&gt;

&lt;p&gt;
Gefunden hab ich das übrigens bei &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=1884&amp;amp;entry_id=397&quot; title=&quot;http://www.deimeke.net/dirk/blog/index.php?/archives/404-Kompromittierte-Systeme-....html&quot;  onmouseover=&quot;window.status=&#039;http://www.deimeke.net/dirk/blog/index.php?/archives/404-Kompromittierte-Systeme-....html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; &gt;Dirk,&lt;/a&gt; und der
hat&amp;#8217;s von &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url=aHR0cDovL2Jsb2cucG9tbWVzYnVkZS5vcmcvYXJjaGl2ZXMvMjAzLVdhcy10dW4tYmVpLWtvbXByb21pdHRpZXJ0ZW0tV2luZG93cy1SZWNobmVyLmh0bWw=&amp;amp;entry_id=397&quot; title=&quot;http://blog.pommesbude.org/archives/203-Was-tun-bei-kompromittiertem-Windows-Rechner.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.pommesbude.org/archives/203-Was-tun-bei-kompromittiertem-Windows-Rechner.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; &gt;El
Loco.&lt;/a&gt;  
    </content:encoded>

    <pubDate>Sun, 21 May 2006 09:06:42 +0200</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/397-guid.html</guid>
    <category>exploit</category>
<category>security</category>

</item>
<item>
    <title>Trennung von Webapplikationen mit Extrainstanzen des Apache</title>
    <link>http://blog.zugschlus.de/archives/324-Trennung-von-Webapplikationen-mit-Extrainstanzen-des-Apache.html</link>
            <category>Computer und Netze</category>
    
    <comments>http://blog.zugschlus.de/archives/324-Trennung-von-Webapplikationen-mit-Extrainstanzen-des-Apache.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=324</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=324</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;Die Artikelreihe zum Thema &amp;#8220;Trennung von Webanwendungen untereinander&amp;#8221;, die mit &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=2413&amp;amp;entry_id=324&quot; title=&quot;http://blog.zugschlus.de/archives/286-fteastcgi.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/286-fteastcgi.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;fastcgi,&lt;/a&gt; &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=1700&amp;amp;entry_id=324&quot; title=&quot;http://blog.zugschlus.de/archives/276-suphp.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/276-suphp.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;suphp&lt;/a&gt; und zwei Artikeln über das &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=1701&amp;amp;entry_id=324&quot; title=&quot;http://blog.zugschlus.de/archives/252-suexec,-die-naechste.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/252-suexec,-die-naechste.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;klassische&lt;/a&gt; &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=1702&amp;amp;entry_id=324&quot; title=&quot;http://blog.zugschlus.de/archives/211-suexec-my-php,-babywapache2.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/211-suexec-my-php,-babywapache2.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;suexec&lt;/a&gt; begann, findet heute ihren
vorläufigen Abschluss mit dem Setup, für das ich mich letztendlich entschieden habe.
&lt;/p&gt;
&lt;p&gt;
Da auf dem von mir angepeilten Zielsystem nur eine Handvoll Präsenzen mit ähnlich wenigen verschiedenen Webanwendungen
ins Hosting kommen wird, könnte ich mich für eine Lösung entscheiden, deren Skalierungsverhalten sie für
&amp;#8220;richtiges&amp;#8221; Hosting uninteressant macht. Jede Webapplikation bekommt einen eigenen apache, der gleich unter
einer nicht priviligierten uid gestartet wird und auf einem hohen Port von 127.0.0.1 Verbindungen annimmt. Das Mapping
auf die &amp;#8220;offizielle&amp;#8221; IP und Port 80 übernimmt ein zentraler &amp;#8220;normaler&amp;#8221; apache als reverse
proxy.
&lt;/p&gt;
&lt;p&gt;
Dieser Artikel entstand ursprünglich im Jahr 2006. Fünf Jahre später hat auch Debian es geschafft, mehrere
apache-Instanzen &amp;#8220;ordentlich&amp;#8221; zu unterstützen, und ganz ohne gepatchte Scripts. Diese überarbeitete
Version dieses Artikels beschreibt die Vorgehensweise unter dem in 2011 aktuellen Debian squeeze.
&lt;/p&gt;
 &lt;p&gt;Das ganze Verfahren unter Debian stable mit apache2 zu implementieren war verhältnismäßig einfach. Ich habe mich
bemüht, die Arbeit der Debian-Maintainer so weit wie möglich zu nutzen, da mir das Packaging von apache2
außerordentlich gut gefällt. Also sind ein &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url=aHR0cDovL2J1Z3MuZGViaWFuLm9yZy8zNDk3MDk=&amp;amp;entry_id=324&quot; title=&quot;http://bugs.debian.org/349709&quot;  onmouseover=&quot;window.status=&#039;http://bugs.debian.org/349709&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;patch gegen &lt;font face=&quot;courier
new,courier,monospace&quot;&gt;apache2ctl&lt;/font&gt;,&lt;/a&gt; ein &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url=aHR0cDovL2J1Z3MuZGViaWFuLm9yZy8zNDk3MTY=&amp;amp;entry_id=324&quot; title=&quot;http://bugs.debian.org/349716&quot;  onmouseover=&quot;window.status=&#039;http://bugs.debian.org/349716&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;kompletter Rewrite von &lt;font
face=&quot;courier new,courier,monospace&quot;&gt;a2[en|dis][mod|site]&lt;/font&gt;&lt;/a&gt; und ein &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=1703&amp;amp;entry_id=324&quot; title=&quot;http://bugs.debian.org/353450&quot;  onmouseover=&quot;window.status=&#039;http://bugs.debian.org/353450&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;severely patched initscript&lt;/a&gt; dabei rausgekommen, mit deren Hilfe das Management
der vielen verschiedenen Apaches einfach geworden ist. Debian hat meine Patches natürlich nicht 1:1 übernommen, aber
inzwischen geht es auch ohne gepatchte scripts.&lt;/p&gt;

&lt;p&gt;Auf dem Zielsystem setzen wir das Verfahren wie folgt ein:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jeder Apache bekommt einen eigenen Unix-User (&lt;font face=&quot;courier new,courier,monospace&quot;&gt;user-appname&lt;/font&gt;) mit
eigenem Homedirectory.&lt;/li&gt;
&lt;li&gt;In diesem Homedirectory kann der User &lt;u&gt;nicht&lt;/u&gt; schreiben, die Dateien dort gehören &lt;font face=&quot;courier
new,courier,monospace&quot;&gt;user:user-webapps&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;unter &lt;font face=&quot;courier new,courier,monospace&quot;&gt;/home/user-appname/apache&lt;/font&gt; wird eine abgespeckte
Apache-Konfiguration hinterlegt, in der auch konfiguriert ist, dass der apache untr dem Account &lt;font face=&quot;courier
new,courier,monospace&quot;&gt;user-appname&lt;/font&gt; laufen und auf einem hohen Port unter 127.0.0.1 horchen soll.&lt;/li&gt;
&lt;li&gt;Diese Konfiguration wird nach &lt;font face=&quot;courier new,courier,monospace&quot;&gt;/etc/apache2-user&lt;/font&gt; verlinkt&lt;/li&gt;
&lt;li&gt;Ein spezielles Initscript &lt;font face=&quot;courier new,courier,monospace&quot;&gt;/etc/init.d/apache2-user&lt;/font&gt; wird aus &lt;font
face=&quot;courier new,courier,monospace&quot;&gt;/usr/share/doc/apache2.2-common/examples/secondary-init-script&lt;/font&gt; (z.B. mit
&lt;font face=&quot;courier new,courier,monospace&quot;&gt;/usr/share/doc/apache2.2-common/examples/setup-instance&lt;/font&gt;) erzeugt&lt;/li&gt;
&lt;li&gt;Mit &lt;font face=&quot;courier new,courier,monospace&quot;&gt;insserv apache2-user&lt;/font&gt; wird das Initscript aktiviert und an der
passenden Stelle in die dependency-based Bootreihenfolge eingehängt&lt;/li&gt;
&lt;li&gt;Die Applikation liegt in &lt;font face=&quot;courier new,courier,monospace&quot;&gt;/home/user-appname/applikation&lt;/font&gt;.&lt;/li&gt;
&lt;li&gt;Apache-Module lassen sich mit dem erweiterten &lt;font face=&quot;courier new,courier,monospace&quot;&gt;a2enmod&lt;/font&gt; einfach
lokal aktivieren.&lt;/li&gt;
&lt;li&gt;Der Apache lässt sich dann mit dem erweiterten Initscript einfach unabhängig von den anderen apaches
starten.&lt;/li&gt;
&lt;li&gt;Der &amp;#8220;Haupt-Apache&amp;#8221; wird per &lt;font face=&quot;courier new,courier,monospace&quot;&gt;ProxyPass&lt;/font&gt; und &lt;font
face=&quot;courier new,courier,monospace&quot;&gt;ProxyPassReverse&lt;/font&gt; so konfiguriert, dass Zugriffe auf den entsprechenden
Namensraum zum &amp;#8220;richtigen&amp;#8221; User-apache weitergereicht werden.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;mod_rpaf&lt;/font&gt; sorgt in den Applikations-Apachen dafür, dass die vom
Proxy übermittelten Client-IPs in den Logs landen und IP-basierte Auswertungsmechanismen (z.B. zur Spamabwehr)
funktionieren.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Auf diese Weise ist sichergestellt, dass die Webapplikationen getrennt voneinander laufen. Per Rechtevergabe im
Dateisystem kann man nun erreichen, dass eine Webapplikation nur dort lesen und schreiben kann, wo es unbedingt
notwendig ist. Die apache-Konfiguration kann entsprechend abgespeckt sein.&lt;/p&gt;
&lt;p&gt;Diese Lösung hat natürlich auch ein paar Nachteile, zum Beispiel den exorbitanten Speicherbedarf duch die wirlich
vielen apache-Prozesse im Speicher und die Tatsache, dass manche Webapplikationen sich herausgefordert fühlen, wenn
plötzlich Portnummern in den URLs stehen und der Client mit anderen URIs kommt als man selbst weggeschickt hat. Weitere
Nachteile sind mir in den fünf Jahren, die das Setup auf dem Zielsystem so bereits in Verwendung ist, bis heute nicht
aufgefallen.&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Wenn die Applikation Cookies benutzt, ist zu beachten, dass die Applikation ihre Cookies mit einer Domain versieht, und
zwar in der Regel mit 127.0.0.1:x, weil der Applikations-Apache nicht weiß, unter welchem Domainnamen der Server
letztendlich läuft. Das hat mich mit meinem Blog einige Tage Debuggingarbeit gekostet, und ohne die Hilfe von Garvin,
Isotopp, Rince und anderem wäre das niemals erfolgreich gewesen.
&lt;/p&gt;
&lt;p&gt;
Die Lösung ist in der Konfiguration des Reverse Proxy:
&lt;blockquote&gt;
&lt;pre&gt;
ProxyPassReverseCookieDomain 127.0.0.1:1312 blog.zugschlus.de 
ProxyPassReverseCookieDomain 127.0.0.1 blog.zugschlus.de 
&lt;/pre&gt;
&lt;/blockquote&gt;
Der doppelte ProxyPassReverseCookieDomain ist nötig, weil aus irgendwelchen gründen manche Cookies mit und manche ohne
Portnummer gesendet werden. 
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sat, 18 Feb 2006 16:21:24 +0100</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/324-guid.html</guid>
    <category>apache</category>
<category>php</category>
<category>security</category>
<category>webapps</category>

</item>
<item>
    <title>virtually exploitable</title>
    <link>http://blog.zugschlus.de/archives/292-virtually-exploitable.html</link>
            <category>Security</category>
    
    <comments>http://blog.zugschlus.de/archives/292-virtually-exploitable.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=292</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=292</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;Seit Jahren schon unke ich darüber, dass Virtualisierung a la vmware, Xen und Co zwar sehr kostensenkend und
vereinfachend sein kann, aber mit einer Reduktion des Sicherheitsniveaus einhergeht. Und auch seit Jahren werde ich
dafür belächelt und die virtuelle Umgebung trotzdem weiter ausgerollt.&lt;/p&gt;

 &lt;p&gt;So erfüllt es mich mit wenigstens etwas Befriedigung, dass der von mir vorhergesagte Fall inzwischen eingetreten
ist: Durch einen Buffer Overflow im vmware-NAT-Treiber ist - sowohl unter Linux als auch unter Windows - die Übernahme
des Gastgebersystems möglich. Und da dieser Treiber ziemlich weit unten im Gastsystem eingreift, gibt&amp;#8217;s die root-
und/oder Administratorprivilegien gratis und franko gleich dazu. Dazu, dass dieser Exploit ausgerechnet (oder&lt;br /&gt;
erwartungsgemäß?) die kommerzielle Virtualisierungsvariante vmware betrifft, sag ich lieber nichts, denn die
entsprechende Lücke in einer der freien Alternativen kommt bestimmt.&lt;/p&gt;

&lt;p&gt;vmware hat gepatched und eine korrigierte Version ohne diese Schwachstelle herausgegeben, die alle vmware-Admins nun
bitte schnellstmöglich auf ihre Systeme ausrollen mögen.&lt;/p&gt;

&lt;p&gt;Es bleibt das etwas schale Gefühl, Recht gehabt zu haben mit der Unkerei. Gut tun tut das irgendwie nicht.&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Thu, 19 Jan 2006 09:59:42 +0100</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/292-guid.html</guid>
    <category>exploit</category>
<category>security</category>
<category>virtualisierung</category>
<category>vmware</category>

</item>
<item>
    <title>fastcgi</title>
    <link>http://blog.zugschlus.de/archives/286-fastcgi.html</link>
            <category>Freie Software</category>
    
    <comments>http://blog.zugschlus.de/archives/286-fastcgi.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=286</wfw:comment>

    <slash:comments>9</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=286</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;In Fortsetzung der &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url_id=2156&amp;amp;entry_id=286&quot; title=&quot;http://blog.zugschlus.de/archives/276-suphp.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/276-suphp.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href,
&#039;_blank&#039;); return false;&quot;&gt;Artikelreihe&lt;/a&gt; zur &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=2157&amp;amp;entry_id=286&quot; title=&quot;http://blog.zugschlus.de/archives/211-suexec-my-php,-babywapache2.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/211-suexec-my-php,-babywapache2.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;);
return false;&quot;&gt;Entfernung&lt;/a&gt; von &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url_id=2158&amp;amp;entry_id=286&quot; title=&quot;http://blog.zugschlus.de/archives/252-suexec,-die-naechste.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/252-suexec,-die-naechste.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;
onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;PHP-Scripts&lt;/a&gt; aus dem Accountkontext des Webservers ist
heute FastCGI an der Reihe.&lt;/p&gt;

&lt;p&gt;Kurzzusammenfassung aus der Theorie: Es ist vermutlich performanter als suexec und suphp, bringt aber weder
Erleichterung in der Handhabung noch in der Sicherheit.&lt;/p&gt;

&lt;p&gt;In diesem Artikel bekommt auch das debianhowto.de apache2-php-fcgi-HOWTO sein Fett weg.&lt;/p&gt;

 &lt;p&gt;Auf der Suche nach Dokumentation zu diesem Thema landet man recht schnell beim&lt;br /&gt;
&lt;a href=&quot;http://blog.zugschlus.de/exit.php?url_id=2159&amp;amp;entry_id=286&quot; title=&quot;http://www.debianhowto.de/de:howtos:sarge:apache2_php-fcgi&quot;  onmouseover=&quot;window.status=&#039;http://www.debianhowto.de/de:howtos:sarge:apache2_php-fcgi&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return
false;&quot;&gt;debianhowto.de HOWTO für apache2 mit PHP 4/5 als FastCGI&lt;/a&gt;. Mit den Jungs von Debianhowto bin ich ja &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url=aHR0cDovL2Jsb2cuenVnc2NobHVzLmRlL2FyY2hpdmVzLzI1Ny1QZXJzb25hbGx5LWRyb3BwaW5nLXN1cHBvcnQtZm9yLXVzZXJzLW9mLWRlYmlhbmhvd3RvLmRlLWV4aW0tY29uZmlndXJhdGlvbi5odG1s&amp;amp;entry_id=286&quot; title=&quot;http://blog.zugschlus.de/archives/257-Personally-dropping-support-for-users-of-debianhowto.de-exim-configuration.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/257-Personally-dropping-support-for-users-of-debianhowto.de-exim-configuration.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;in
der Vergangenheit&lt;/a&gt;&lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url=aHR0cDovL2Jsb2cuenVnc2NobHVzLmRlL2FyY2hpdmVzLzI1Ny1QZXJzb25hbGx5LWRyb3BwaW5nLXN1cHBvcnQtZm9yLXVzZXJzLW9mLWRlYmlhbmhvd3RvLmRlLWV4aW0tY29uZmlndXJhdGlvbi5odG1s&amp;amp;entry_id=286&quot; title=&quot;http://blog.zugschlus.de/archives/257-Personally-dropping-support-for-users-of-debianhowto.de-exim-configuration.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/257-Personally-dropping-support-for-users-of-debianhowto.de-exim-configuration.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;
onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;&lt;/a&gt; schon einmal aneinander geraten, aber im Vergleich zu
diesem Machwerk ist das exim4-vexim-HOWTO gerade noch harmlos.&lt;/p&gt;

&lt;p&gt;Das HOWTO ist ein reines HOWTO im &amp;#8220;übelsten&amp;#8221; Sinne: Es wird mit kaum einem Wort erklärt, was die 1:1
abtippbaren Dinge überhaupt machen. Damit mag man vielleicht schnell ans Ziel kommen, aber sobald man aus irgend
welchen Gründen vom Weg des HOWTO abweichen muss, wird man mangels Hintergrundwissen auf die Schnauze fallen. Einige
Fallen sind zwar im HOWTO erwähnt, aber ich finde es sportlich, dass man davon ausgeht, dass jeder, der jemals in
Zukunft mit dem so eingerichteten System arbeiten wird, auch mit dem HOWTO vertraut ist.&lt;/p&gt;

&lt;p&gt;Vorteile von PHP per FastCGI:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;PHP mit FastCGI ist thread safe, das apache2 worker-mpm wird einsetzbar.&lt;/li&gt;&lt;li&gt;Dadurch, dass - wie bei mod_php
- der PHP-Interpreter geladen bleibt, ist die Performanz besser als bei suexec oder suphp, wo der PHP-Interpeter als CGI
läuft und für jeden Aufruf neu geladen und initialisiert werden muss. Bei FastCGI erfolgt dies allerdings nicht auf
einer per-Webserver, sondern auf einer per-Vhost-Basis, so dass die geladenen Interpreter mit den richtigen
Benutzerrechten laufen können.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Nachteile&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;mod_fastcgi steht unter einer seltsamen Lizenz, die im Debian-Projekt unter non-free geführt wird. Das
bedeutet, dass es für mod_fastcgi nicht den aus Debian gewöhnten guten Support gibt.&lt;/li&gt;&lt;li&gt; Der
Benutzerkontextwechsel wird mit mod_suexec erreicht und hat somit alle Nachteile, die suexec mit sich bringt.&lt;/li&gt;&lt;li&gt;
mod_fastcgi ist in der Version 2.4.2 (Debian stable, testing, unstable, Stand 2005/12) fehlerhaft und funktioniert nicht
mit apache. Es ist also derzeit der Einsatz eines Development-Snapshots notwendig. Wirklich maintained sieht mod_fastcgi
ausserdem nicht aus, der letzte Release ist aus dem Jahr 2003, der &amp;#8220;aktuelle&amp;#8221; Development-Snapshot aus dem
April 2004.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Probleme, die ich mit dem HOWTO sehe&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Die Zusammenhänge werden so gut wie gar nicht erklärt.
&lt;/li&gt;
&lt;li&gt;
Ebenso wird nicht erklärt, was die einzelnen Konfigurationsschritte nun wirklich tun.
&lt;/li&gt;
&lt;li&gt;
Es wird genau erklärt, wie man sich ein eigenes PHP5 baut, ohne dass darauf hingewiesen wird, dass man auf diese Weise
den Support von Debian verliert.  Immerhin wird der User dazu angehalten, sein lokales PHP nach $HOME zu installieren,
und bei der Anleitung zur Installation der &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url_id=2160&amp;amp;entry_id=286&quot; title=&quot;http://people.debian.org/~dexter&quot;  onmouseover=&quot;window.status=&#039;http://people.debian.org/~dexter&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;inoffiziellen PHP5-Pakete&lt;/a&gt;
fehlt auch der Hinweis auf den mangelnden Security-Support nicht.
&lt;/li&gt;
&lt;li&gt;
Die Aussage, dass es kein fcgi-enabletes php4-cgi in Debian sarge gibt, halte ich für falsch. Zumindest erhalte ich
beim Aufruf von php4-cgi -i auf einem Debian sarge die Ausgabe &amp;#8220;ServerAPI: CGI/FastCGI&amp;#8221;.
&lt;/li&gt;
&lt;li&gt;Der &amp;#8220;aktuelle&amp;#8221; Development-Snapshot wird von den HOWTO-Usern ohne Sonderprefix unter Umgehung des
Packagesystems direkt nach /usr geballert.
&lt;/li&gt;
&lt;li&gt;
Weiter unten wird erwähnt, dass es in Debian sarge ein libapache2-mod-fastcgi gibt. Das ist allerdings genau die
fehlerhafte Version 2.4.2, die laut der Aussage zwei Bildschirmseiten weiter oben &amp;#8220;nicht funktioniert&amp;#8221;,
leider ohne weitere Erklärung des Fehlverhaltens.
&lt;/li&gt;
&lt;li&gt;
Von a2enmod und a2ensite scheint der HOWTO-Autor nix zu wissen
&lt;/li&gt;
&lt;li&gt;Später wird mit dem Immuteable-Bit hantiert, und hier wird&amp;#8217;s dann vollends gefährlich.
&lt;ul&gt;
&lt;li&gt; Arbeitet man auf einem Filesystem, das das Immuteable-Bit unterstützt, ist die Aktion noch halbwegs sauber.
&lt;/li&gt;
&lt;li&gt;
Böse Falle für Leute, die später das System in die Hand bekommen ist, dass Kopieren des Dateibaums des virtuellen
Hosts das Immuteable-Bit nicht mitkopiert. Sprich: In einem simpel mit cp -a kopierten Baum fehler dieses Bit auf den
betroffenen Dateien, was ein riesengroßes Sicherheitsloch aufreißt. Das ist zwar im HOWTO klar erklärt, aber wie
gesagt - derjenige, der den Dateibaum kopiert, muss nicht notwendigerweise das HOWTO gelesen oder gar verstanden haben.
&lt;/li&gt;
&lt;li&gt;
Für Filesysteme, die das immuteable-Bit nicht unterstützen, legt das HOWTO dem Benutzer nahe, suexec zu patchen, und
liefert eine idiotensichere Anleitung mit, wie das getan werden kann. Dabei werden zwar die Debian-Sourcen verwendet,
aber das entstehende Binary wird natürlich wieder manuell an die passende Stelle im Dateisystem geschoben - erneut
unter Umgehung des Packagesystems. Ich möchte kein System in die Finger bekommen, das auf diese Weise so verhunzt
wurde. Übel. Immerhin - das neu gebaute, unsicherere suexec wird nicht benutzt um das &amp;#8220;Original-suexec&amp;#8221; zu
überschreiben, sondern erhält einen eigenen Dateinamen, suexec-fcgi, was den Knieschusseffekt dieser Operation
wenigstens etwas dämpft.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Ich würde mich wundern, wenn die Verwendung von Documentroots ausserhalb /var/www für die Benutzer dieses HOWTOs
funktioniert. Das Debian-suexec ist relativ strikt übersetzt, und dieser Fall ist im HOWTO mit keinem Wort erwähnt.
Für Newbies - mithin die Hauptzielgruppe des HOWTO - ist das eine böse Falle.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bitte, bitte, bitte. Lest Eure Texte bevor ihr sie veröffentlicht. Schreibt kurze, prägnante Sätze, vermeidet
Umgangssprache, schreibt Zahlen zwischen eins und zwölf als Worte. Technische Dokumentation verdient besseres
Deutsch!&lt;/p&gt;

&lt;p&gt;Fazit: Debianhowto.de ist in meiner Achtung wieder ein Stück gesunken, die von mir erhoffte Standardlösung für ein
Standardproblem habe ich immer noch nicht gefunden.&lt;/p&gt;

&lt;p&gt;Demnächst in diesem Theater: Für jede PHP-Applikation einen eigenen Apache.&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Fri, 30 Dec 2005 14:18:31 +0100</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/286-guid.html</guid>
    <category>apache</category>
<category>fastcgi</category>
<category>php</category>
<category>security</category>
<category>webapps</category>

</item>
<item>
    <title>suphp</title>
    <link>http://blog.zugschlus.de/archives/276-suphp.html</link>
            <category>Computer und Netze</category>
    
    <comments>http://blog.zugschlus.de/archives/276-suphp.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=276</wfw:comment>

    <slash:comments>9</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=276</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;Schon bei den Vorarbeiten zu &lt;a onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;
href=&quot;http://blog.zugschlus.de/exit.php?url_id=1717&amp;amp;entry_id=276&quot; title=&quot;http://blog.zugschlus.de/archives/211-suexec-my-php,-babywapache2.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/211-suexec-my-php,-babywapache2.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;diesem&lt;/a&gt; und &lt;a
onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;
href=&quot;http://blog.zugschlus.de/exit.php?url_id=1718&amp;amp;entry_id=276&quot; title=&quot;http://blog.zugschlus.de/archives/252-suexec,-die-naechste.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.zugschlus.de/archives/252-suexec,-die-naechste.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;diesem&lt;/a&gt; Artikel hat man mir sehr nahegelegt,
&lt;a onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot; href=&quot;http://blog.zugschlus.de/exit.php?url_id=1719&amp;amp;entry_id=276&quot; title=&quot;http://www.suphp.org/&quot;  onmouseover=&quot;window.status=&#039;http://www.suphp.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;suphp&lt;/a&gt; anzugucken. Das habe
ich heute getan.&lt;/p&gt;

 &lt;p&gt;Suphp kommt als Apache-Modul in der Debian-Package &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=1720&amp;amp;entry_id=276&quot; title=&quot;http://packages.debian.org/libapache2-mod-suphp&quot;  onmouseover=&quot;window.status=&#039;http://packages.debian.org/libapache2-mod-suphp&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;libapache2-mod-suphp&lt;/a&gt; daher. In Sarge ist eine 0.5-Version; in
sid eine 0.6.0-Version, die zur Laufzeit flexibler konfigurierbar ist. Upstream hat vor zwei Wochen eine 0.6.1 released,
die bisher noch nicht ihren Weg nach Debian gefunden hat.&lt;/p&gt;

&lt;p&gt;suphp tut auf Anhieb das, was man von ihm erwartet: Das php-Script läuft mit den Rechten des Dateiinhabers. Die
Überraschungen sind im Detail, und ich weiss noch nicht genau, was ich darüber denken soll.&lt;/p&gt;

&lt;p&gt;suphp ist wie suexec ein suid root laufendes Binary, das seine Rootrechte - wie suexec - zuerst zum Zieluser fallen
lässt, und dann den php4-Interpreter aufruft. Daraus folgt:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Der PHP-Interpreter läuft nicht als
Apache-Modul&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;libapache2-mod-php&lt;/font&gt; kann raus.
Beziehungsweise: Es muss raus, denn der Parallelbetrieb von mod-php und suphp ist nicht unterstützt. Es kann laut
Aussage des Upstreams alles passieren. Also lieber nicht machen.&lt;/li&gt;&lt;/ul&gt;suphp ist erheblich weniger pingelig als
suexec. Das erleichtert zwar die Arbeit erheblich, weil es sofort so tut wie erwartet, aber über den damit
eingehandelten Sicherheitskompromiss muss ich mir erstmal klar werden.&lt;p&gt;Die bei suphp 0.5 mitgelieferte Dokumentation
ist die vom Upstream, die davon ausgeht, dass das Modul mit &lt;font face=&quot;courier
new,courier,monospace&quot;&gt;--with-setid-mode=force&lt;/font&gt; oder &lt;font face=&quot;courier new,courier,monospace&quot;&gt;=paranoid&lt;/font&gt;
übersetzt wurde. Die Debian-Package ist aber mit &lt;font face=&quot;courier
new,courier,monospace&quot;&gt;--with-setid-mode=owner&lt;/font&gt; gebaut. In der Folge führt die Beachtung der Anleitung zu einem
nicht mehr startenden Apache, weil das mit &lt;font face=&quot;courier new,courier,monospace&quot;&gt;=owner&lt;/font&gt; gebaute apache-Modul
die Direktive &lt;font face=&quot;courier new,courier,monospace&quot;&gt;suPHP_UserGroup&lt;/font&gt; nicht kennt und einem somit spontan um
die Ohren fliegt wenn man die Anleitung befolgt.&lt;/p&gt;&lt;p&gt; suphp 0.6 ist zur Laufzeit besser konfigurierbar, was eventuell
einen weiteren Sicherheitskompromiss bedeutet. Außerdem kann suphp 0.6 auch &amp;#8220;normale&amp;#8221;; CGI-Scripts
ausführen und mutiert somit zum nahezu vollwertigen suexec-Ersatz.&lt;/p&gt;&lt;p&gt; Als Debian-Packages daherkommende
Applikationen werden eher schwer unter suphp einsatzfähig sein, weil man die Dateien an einen anderen Benutzer
&amp;#8220;verschenken&amp;#8221; muss. Ob das mit &lt;font face=&quot;courier new,courier,monospace&quot;&gt;dpkg-statoverride&lt;/font&gt; einfach
machbar ist, werden Experimente mit Dokuwiki in den nächsten Tagen zeigen.&lt;/p&gt;&lt;p&gt;Wie gut suphp für
&amp;#8220;normale&amp;#8221; CGI-Scripts tut, werden Experimente mit munin-cgi-graph in den nächsten Tagen zeigen.&lt;/p&gt;

&lt;p&gt;Momentan tendiere ich dazu, auch auf den sarge-Webservern einen Backport von suphp 0.6 einzusetzen, weil mir die
Konfigurationsmöglichkeiten sexy erscheinen. Vielleicht komme ich irgendwann auch mal zu einer Meinung bezüglich der
Sicherheitskompromisse. Jedenfalls steht die Kommentarfunktion dieses Artikels bereit, und ich freue mich auf Eure
Meinungen.&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;&lt;p&gt;&lt;/p&gt;&lt;h5&gt;Nachtrag&lt;/h5&gt;&lt;p&gt;Nachdem ich Ende Dezember einige Fragen auf der
suphp-Mailingliste gestellt habe, und diese Fragen genauso wie die explizite Nachfrage beim Autor drei Wochen später
unbeantwortet verhallten, habe ich die Experimente mit suphp abgebrochen.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 11 Dec 2005 21:59:38 +0100</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/276-guid.html</guid>
    <category>apache</category>
<category>php</category>
<category>security</category>
<category>suphp</category>
<category>webapps</category>

</item>
<item>
    <title>To self-signed or not to self-sign?</title>
    <link>http://blog.zugschlus.de/archives/269-To-self-signed-or-not-to-self-sign.html</link>
            <category>Security</category>
    
    <comments>http://blog.zugschlus.de/archives/269-To-self-signed-or-not-to-self-sign.html#comments</comments>
    <wfw:comment>http://blog.zugschlus.de/wfwcomment.php?cid=269</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.zugschlus.de/rss.php?version=2.0&amp;type=comments&amp;cid=269</wfw:commentRss>
    

    <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>
    <content:encoded>
    &lt;p&gt;Auf der &lt;a href=&quot;http://blog.zugschlus.de/exit.php?url_id=1729&amp;amp;entry_id=269&quot; title=&quot;http://mail.nessus.org/mailman/listinfo/nessus&quot;  onmouseover=&quot;window.status=&#039;http://mail.nessus.org/mailman/listinfo/nessus&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Nesus-Mailingliste&lt;/a&gt; fand ich heute eine &lt;a
href=&quot;http://blog.zugschlus.de/exit.php?url_id=1730&amp;amp;entry_id=269&quot; title=&quot;http://mail.nessus.org/pipermail/nessus/2005-December/msg00050.html&quot;  onmouseover=&quot;window.status=&#039;http://mail.nessus.org/pipermail/nessus/2005-December/msg00050.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Mail,&lt;/a&gt; deren Autor sich darüber wundert,
dass&lt;br /&gt; Nessus bei einem Self-Signed Certificate keine Warnung wirft.&lt;/p&gt;

&lt;p&gt;Schließlich ist das eine schlechte Security-Maßnahme weil auf diese Weise Man-in-the-Middle-Attacken möglich
werden. Das sei insbesondere im kommerziellen Umfeld ein Problem.&lt;/p&gt;

&lt;p&gt;Nun, meine Meinung dazu ist, dass es sicherer sein kann, ein selbstsigniertes Zertifikat selbst zu verifizieren als
sich blind auf die durchaus durchwachsenen Prozesse einer kommerziellen CA zu verlassen.&lt;/p&gt;

&lt;p&gt;Ach ja, die oben zitierte Mail kam von einem Verisign-Mitarbeiter.&lt;/p&gt;

  
    </content:encoded>

    <pubDate>Thu, 08 Dec 2005 14:52:05 +0100</pubDate>
    <guid isPermaLink="false">http://blog.zugschlus.de/archives/269-guid.html</guid>
    <category>certificates</category>
<category>nessus</category>
<category>pki</category>
<category>security</category>
<category>verisign</category>
<category>x509</category>

</item>

</channel>
</rss>