Daniels Blog
29Jan/120

Online per UMTS mit Surfstick unter Debian mit wvdial und O2 Mobile Flat

Da mein neuer DSL-Anschluss erst in einigen Wochen geschaltet wird, habe ich bei Alice die Option "Quickstart" gewählt. Hier erhält man eine SIM-Karte, mit der man 3 Monate lang kostenlos surfen kann, als Überbrückung, bis der DSL-Anschluss geschaltet wurde.

Natürlich wollte ich die Internetverbindung nicht über einen Client herstellen, sondern wie gewohnt über meinen Homeserver, der für das ganze Heimnetz als Router fungiert.

Die größten Probleme hatte ich mit der Alice Hotline. Mit der SIMkarte kam eine Kurzanleitung, wie man diese über das Alice-Portal aktivieren könne. Leider hat das Portal weder in Firefox, Chrome oder Opera richtig funktioniert. Ich bin nicht bis zur Aktivierung der SIMkarte vorgedrungen.

Also leider Anrufe auf der 01805 Hotline. Sehr ärgerlich für 42ct./Min.

Über die Hotline war die Akivierung der Karte zum Glück schnell erledigt, leider konnte man mir dort zunächst nicht den notwendigen APN für die Konfiguration von wvdial nennen. Ich wollte hier sicher gehen, da ich etwas Angst vor exorbitanten Rechnungen hatte bei falscher Konfiguration des Wertes. Hier konnte mir die Technik zum Glück weiterhelfen. Für die Alice / O2 Quickstart Mobile Internet Flat lautet der APN nach Angaben der Hotline "internet.partner1". Bei der Vergabe des Namens war wohl niemand vom Marketing beteiligt ;)

Als nächsten Schritt habe ich die SIMkarte in ein Handy eingelegt um auf die Aktivierung zu warten und diese mitzubekommen. Das ging recht schnell, nach ca. 30 Minuten war meine SIM bereits aktiv und konnte sich ins Netz einbuchen. Erstaunlich schnell, da die Aktivierung von Alice zunächst zu O2 propagiert wird. Um das Handy zu zwingen sich neu ins Netz einzubuchen, kann man es aus- und wieder einschalten. Ich habe nun mit dem Handy noch die PIN-Abfrage der SIM deaktiviert, da ich vor einiger Zeit schon einmal üble Probleme mit wvdial und einer PIN hatte.

Der Rest funktionierte erstaunlich gut.

Ich habe die SIM in meinen Huawei Surfstick (T-Mobile Surfstick III)

Bus 001 Device 004: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem

eingelegt. Nach dem Einstecken in einen USB-Port stellt Debian mit einem aktuellen Kernel das Device /dev/ttyUSB0 zur Verfügung.

Dieses kann man mit wvdial ansprechen

#/etc/wvdial.conf

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","internet.partner1"
Phone = *99***1#
Password = blank
Username = blank
New PPPD = yes
Modem = /dev/ttyUSB0
Baud = 460800
Modem Type = USB Modem
Auto Reconnect = on

Danach kann mit einem "wvdial" die Verbindung hergestellt werden:

gbn-root-00:19:27 ~ -> wvdial
--> WvDial: Internet dialer version 1.60
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","internet.partner1"
AT+CGDCONT=1,"IP","internet.partner1"
OK
--> Modem initialized.
--> Sending: ATDT*99***1#
--> Waiting for carrier.
ATDT*99***1#
CONNECT
--> Carrier detected.  Waiting for prompt.
--> Don't know what to do!  Starting pppd and hoping for the best.
--> Starting pppd at Sun Jan 29 00:19:58 2012
--> Pid of pppd: 3749
--> Using interface ppp0
--> pppd: ��� ��� ȧ�
--> pppd: ��� ��� ȧ�
--> pppd: ��� ��� ȧ�
--> pppd: ��� ��� ȧ�
--> pppd: ��� ��� ȧ�
--> pppd: ��� ��� ȧ�
--> local  IP address 10.43.145.228
--> pppd: ��� ��� ȧ�
--> remote IP address 10.64.64.64
--> pppd: ��� ��� ȧ�
--> primary   DNS address 193.189.244.225
--> pppd: ��� ��� ȧ�
--> secondary DNS address 193.189.244.206
--> pppd: ��� ��� ȧ� 

Danach steht über die Luftschnittstelle das Internet an Device PPP0 zur Verfügung, das man nun für Routing und Firewallregeln benutzen kann.

Der Downstream ist im Zentrum von Düsseldorf ganz in Ordnung, der Upstream lässt allerdings SEHR zu wünschen übrig:

Download-Geschwindigkeit: 2.082 kbit/s (260 kByte/s)
Upload-Geschwindigkeit:   71 kbit/s    (9 kByte/s)

Aber... Einem geschenkten Gaul schaut man nicht ins Maul. Bezahlen würde ich für diese Performance allerdings nicht.


Nachtrag

Leider ist die Verbindung nicht stabil. Nach weniger als einer Stunde fliessen keine Daten mehr über PPP0, wvdial bekommt davon leider nichts mit und denkt die Verbindung sei noch aktiv, wählt also auch nicht selbstständig neu ein. Dieses Problem zu debuggen war mir zu kompliziert, da diese Notlösung ohnehin nur einige Wochen bis zur Schaltung des DSLers funktionieren muss. Das folgende kleine Skript überprüft ob die Verbindung noch steht. Falls nicht, wird wvdial gekillt und neu gestartet.

#!/bin/bash

ping -c1 www.google.de > /dev/null

if [ $? -ne 0 ];
        then
        killall wvdial
        echo `date` >> /var/log/connection_lost.log
        wvdial &
fi

Dieses Skript rufe ich automatisch über einen Cronjob auf und bin jetzt always on:

#/etc/crontab

# REDIAL CRAPPY O2 line
* * * * *       root    /root/scripts/redial_ppp


Fallstricke:

  • PIN-Schutz der SIM nicht deaktiviert
  • Die Verbindung über Mobilfunkprovider ist leider geNATtet. Der eigene Server ist von Außen nicht direkt erreichbar. Serverdienste können nur schwierig angeboten werden.
veröffentlicht unter: Dies und das keine Kommentare
5Dez/110

5 Plugins für mehr Privatsphäre beim Surfen mit Firefox

Die eigene Privatsphäre im Internet zu schützen wird immer schwieriger. Weder Industrie noch Politik haben Interesse daran, die Daten von Internetnutzen zu schützen. Vor einigen Jahren reichte es noch, nirgendwo seinen echten Namen und andere persönliche Daten wie Geburtsdatum oder Kontonummern anzugeben. Heute werden auf fast jeder Webseite unsichtbar im Hintergrund Daten gesammelt - und zwar nicht nur vom Betreiber der Webseite selbst, sondern auch von vielen weiteren kommerziellen Anbietern. Durch die Weitergabe der Daten an Dritte hat man selbst keinerlei Vorteile. Außerdem verliert man so mit der Zeit die Kontrolle über die eigenen Daten und ausgefeilte Profile über Konsumgewohnheiten, Interessen, Vorlieben und Abneigungen landen unbemerkt in nicht kontrollierbaren Datenbanken. Der Ausverkauf der Persönlichkeit ist in vollem Gang und nur ein wenig persönliche Informationshygiene hilft den neue Bedrohungen zu begegnen.

Da durch den Durchbruch von Facebook der Klarname ins Netz gewandert ist, ist die Verknüpfbarkeit von Surfgewohnheiten mit der eignen Person nicht mehr nur eine theoretische Möglichkeit sondern geschieht vollautomatisch und ständig.

In diesem Artikel werde ich einige Möglichkeiten auflisten seine Privatsphäre online zu verteidigen. Leider benötigen fast alle Maßnahmen eine gewisse Eigeninitiative und ein wenig Einarbeitung. Oft verliert man (zumindest am Anfang) etwas Komfort beim Surfen. Trotzdem kann die Nutzung der Tipps auf lange Sicht sehr nützlich sein.

Doch erstmal ein kleines Experiement. Für den kleinen Test habe ich einen aktuellen Firefoxbrowser in der Standardkonfiguration gestartet, alle vorhandenen Cookies gelöscht und danach 6 Seiten angesurft, und zwar Spiegel.de, Bild.de, GMX.de, Twitter, Facebook und eine Pornoseite. Das Ergebnis sind 21 neue permanente Cookies auf dem Rechner.

Bereits nach dem Aufruf dieser wenigen Seiten ist der Browser komplett verwanzt mit 3rd Party Cookies. Diese Cookies identifizieren meine Browserinstallation nun gegenüber den Urhebern und können von ihnen wieder ausgelesen werden. Dies kann zunächst einmal auf ihren eignen Seiten geschehen. Aber auch auf Seiten Dritter, mit welchen kooperiert wird.

So wird der Google-Cookie zum Beispiel auf jeder Seite gelesen , die Google-Analytics nutzt, Google Werbung schaltet, Google Maps einbindet oder einen der vielen anderen konstenlosen Google-Dienste für Webmaster benutzt. So erhält Google nicht nur eine Historie meiner Google Suchen, sondern nimmt es auch bei vielen anderen Seiten wahr, dass ich sie besuche.

Ähnlich läuft es mit den Cookies der anderen Anbieter. Werbefirmen, Marktforschungsinstitute, Spammer und Marketingfirmen versuchen ständig auf dem Browser Cookies zu setzen und auf Partnerseiten wieder auszulesen, um mehr über mich zu erfahren.

Dies geschieht entweder über kleine unsichbare Dateien auf der Webseite ("Zählpixel","TrackingImage") oder durch Javascripte, die auf den Partnerseiten eingebaut werden.

Ein erster Schritt für mehr Privatsphäre ist es also die Tracking-Cookie, Zählpixel und Tracking-JavaScript Flut zu bekämpfen.

 

 

Tipp 1 - Mit einem lokalen Hostfile einen Großteil der Spione komplett aussperren.

Als Grundimmunisierung gegen die Pest hilft ein lokales Hostfile. In jedem modernen Betriebssystem kann im Hostfile eine Liste von Domainnamen mit der dazugehörigen IP
hinterlegt werden. Das System benutzt zuerst das lokale Hostfile um Adressen im Internet nachzuschlagen, erst danach einen DNS-Server im Internet. Trägt man im Hostfile also Adressen von schädlichen Domains ein, die Tracking-Cookies setzen wollen und leitet die Anfragen an diese Seiten lokal um, kann der Browser diese schädlichen Seiten nicht mehr erreichen.

Somit hat man schon einen Großteil des Problems gelöst. Ein sehr gut gepflegtes Hostfile, das tausende von Trackingdomains enthält kann man hier finden:http://winhelp2002.mvps.org/hosts.txt Unter Linux speichert man es einfach als /etc/hosts auf dem lokalen Rechner ab, um es zu aktivieren.

#!/bin/bash
wget -O /tmp/tracking.txt http://winhelp2002.mvps.org/hosts.txt
mv /etc/hosts /etc/hosts.backup
mv /tmp/tracking.txt /etc/hosts

Betreibt man einen eigenen DNS-Server im LAN, kann man diesen auch so konfigurieren, dass er das Hostsfile nutzt und so automatisch das ganze LAN zentral befreien.

Tipp 2: Google nur das Nötigste mitteilen mit GoogleSharing

Google ist Tracker #1 im Internet und erfasst auf Umwegen inzwischen fast auf jeder besuchten Seite persönliche Daten, diese können durch persönliche Identifikation über GMail, Google+ oder andere personalisierte Dienste auf die eigene Person zurückgeführt werden und mit den eigenen Google-Suchen verknüpft werden. Dagegen hilft das Ablehnen des Google-Cookies und das interessante Firefox-Plugin GoogleSharing. Das Plugin anonymisert jeden Kontakt zu Google indem es ständig zufällige Identitäten erstellt, die mit allen anderen Nutzern des Plugins geteilt werden. Google kann bei Benutzung des Plugins den einzelnen Nutzer nicht mehr in dieser anonymisierten Zufallsmasse identifizieren.

Das Plugin funktioniert vollautomatisch und verringert die Geschwindigkeit von Google nur unerheblich.
GoogleSharing gibt es direkt in Firefox unter Extras/Addons oder von dieser Webseite: https://addons.mozilla.org/en-US/firefox/addon/googlesharing/

Tipp 3: Volle Kontrolle über Cookies mit Cookie Monster

Cookies sind nicht nur zum Tracken da. Viele Webseiten benutzen sie für vollkommen legitime Funktionen, wie das Loginmanagement oder das Speichern von Benutzervoreinstellungen. Deshalb ist es sinnvoll, zunächst einmal alle Cookies generell zu verbieten und danach Schritt für Schritt manuell die Cookies zu erlauben, die man tatsächlich für Seiten, die man häufig aktiv nutzt benötigt. Dies ist mit Firefox-Bordmitteln zwar möglich, aber leider recht umständlich. Hier hilft das kostenlose Plugin "Cookie Monster". Es befindet sich nach der Installation im Systemtray und ermöglicht einen schnellen Zugriff auf die Cookieeinstellungen für die aktuell geöffnete Seite. Cookie Monster zu konfigurieren macht zunächst ein wenig Arbeit, da viele Seiten tatsächlich ohne Cookies nicht funktionieren, jedoch erhält man nach kurzer Zeit das bestmögliche Maß an individueller Cookiehygiene. Cookie Monster gibt es hier: https://addons.mozilla.org/de/firefox/addon/cookie-monster/


Tipp 4: Tracking JavaScripte, IFRAMES und Flash-Movies verbieten mit NoScript

Die meisten Cookies werden durch JavaScripte gesetzt. Da sehr viele Webseiten beim kompletten Deaktivieren von Javascript unbenutzbar werden, muss man leider auch hier eine Selektion vornehmen, genauso wie bei den Cookies. Tracking kann auch über IFRAMES und Flash-Movies erfolgen, auch hier hilft NoScript.

Hier gilt der gleiche Ansatz: Zunächst einmal alle Scripte komplett verbieten und danach Stück für Stück benötigte Skripte erlauben. Dabei hilft das Firefox Plugin NoScript, das ähnlich wie Cookie Monster von der Taskleiste aus erreichbar ist und das Erlauben oder Verbieten von Javascript pro besuchter Seite erlaubt. Auch hier hat man zu Beginn viel Stress, fast gar nichts funktioniert mehr. Mit der Zeit hat man das Plugin allerdings so gut an die persönlichen Bedürfnisse angepasst, dass es kaum noch behindert. Als netter Zusatzeffekt laden viele Seiten deutlich schneller, da sie nicht während dem Seitenaufbau noch verschiedene externe Daten von Drittanbietern nachladen müssen.


Tipp 5: IP-Adresse anonymisieren mit TOR-Button

Durch die vorhergehenden Tipps habe ich nun zumindest schon einmal 99,9% der 3rd Party Tracker ausgeschaltet. Webseiten die ich besuche bekommen aber trotzdem noch mit wer ich bin und können meine IP-Adresse protokollieren. Hier hilft das TOR-Netzwerk, über das man anonym surfen kann. Das Prizip ist ähnlich dem GoogleSharing. Die eigene IP-Adresse geht in einem großen Pool anderer Adressen unter und ist nicht mehr auf den eigenen Anschluß zurückzuverfolgen.

TOR ist leider recht langsam und deshalb nicht für den alltäglichen Gebrauch geeignet. Es kann aber fallweise sehr nützlich sein. TOR ist über ein Plugin sehr leicht in den Firefox zu integrieren und schnell ein- und ausschalten. Weitere Infos und Downloads gibt es hier: https://www.torproject.org/torbutton/


Tipp 6: Werbung entfernen mit AdBlock Plus

Alle Werbebanner, sich nicht durch die bisherigen Tipps ohnehin schon verabschiedet haben, kann man mit AdBlock Plus entfernen. Dieses Plugin benutzt eine Liste von Servern von Werbeanbietern und blockt den Zugriff auf deren Server. So kann Firefox keine Werbebanner und Filme mehr nachladen und die entsprechenden Stellen auf den Webseiten bleiben leer. Das Plugin funktioniert vollautomatisch und erwischt sehr viel Werbung, bevor sie den Browser erreichen kann. Werbung, die AdBlock nicht automatisch blockt, kann manuell markiert werden, so dass AdBlock sie danach erkennen und blocken kann. Adblock gibt es hier: https://addons.mozilla.org/de/firefox/addon/adblock-plus

1Dez/111

Online Melderegisterauskunft in Düsseldorf macht schlechten Eindruck

Mir war nicht ganz klar, welche persönlichen Daten das Einwohnermeldeamt an wen weitergeben darf. Ich bin nach etwas Recherche auf diese Aktion der PIRATEN gestoßen, die dazu auffordern, der Weitergabe der eigenen Daten bei den Meldeämtern zu widersprechen. Viele Meldeämter geben die Daten nämlich inzwischen jedem! der zahlt. Dem kann man nur durch einen Widerspruch entgehen.

Daten von den Meldeämtern werden weitergegeben an:

Staatliche Behörden, bei berechtigtem Interesse im Rahmen der Amtshilfe

Also z.B. Polizei, Staatsanwaltschaft, statistische Ämter, etc.

die GEZ

Die Brüder kennen wir ja schon zur Genüge.

Parteien, Wählergruppen und anderen Trägern von Wahlvorschlägen im
Zusammenhang mit Parlaments- und Kommunalwahlen; § 35 Abs.1 MG NRW

Um die hübsche Hochglanz-Wahlwerbung zu erhalten.

an Antragsteller und Parteien im Zusammenhang mit Volksbegehren und
Volksentscheiden sowie mit Bürgerentscheiden; § 35 Abs.2 MG NRW

Um Hochglanz-Entscheidungshilfen bei den häufigen Volksabstimmungen zu erhalten.

im Wege des automatisierten Abrufs über das Internet; § 34 Abs.1b MG NRW

Das ist der Punkt, der mir bisher nicht bekannt war. Über ein Internetportal kann
jeder, der einige Kenndaten einer Person kennt automatisiert über das Internet
Meldeauskünfte einholen. Die Abfrage kostet zur Zeit 4 Euro pro Datensatz in Düsseldorf.

Das Meldegesetz NRW sagt an dieser Stelle:

https://recht.nrw.de/lmi/owa/br_bes_text?anw_nr=2&gld_nr=2&ugl_nr=210&bes_id=4655&aufgehoben=N&menu=1&sg=

§ 34 Abs.1b MG NRW
(1b) Soll der Abruf über das Internet ermöglicht werden, ist sicherzustellen, dass das Antragsverfahren und die Auskunftserteilung in verschlüsselter Form erfolgen. Die Eröffnung des Zugangs ist öffentlich bekannt zu machen. Ein Abruf ist nicht zulässig, wenn der Betroffene dieser Form der Auskunftserteilung widersprochen hat. Die Meldebehörde hat spätestens einen Monat vor der Eröffnung des Internetzugangs durch öffentliche Bekanntmachung auf das Widerspruchsrecht hinzuweisen. Im Übrigen gilt § 35 Abs. 6 Satz 2 entsprechend.

Ein Widerspruch gegen die Weitergabe der Daten ist durch das Ausfüllen eines Formulars möglich. Für Düsseldorf findet sich dieses hier: https://formulare.duesseldorf.de/forms/frm/7PRPfAZH5gQA8Ja8AkNGaH1rNpDcHR3 Dieses kann kostenlos in Bürgerämtern abgegeben werden. Danach ist kein Onlinezugriff auf die eigenen Daten mehr möglich. Anscheinend werden die Datenzugriffe regional von den jeweiligen Städten und Kreisen organisiert.

Auf meine Nachfrage bei der (sehr freundlichen) Sachbearbeiterin im Bürgerbüro hin, konnte
man mir leider nicht die URL des Abfrageportals mitteilen. Eine kurze Recherche hat mich dann aber schnell auf diese Seite der Stadt Düsseldorf geführt:

https://www.duesseldorf.de/emra/emra.jsp?stadt=D%FCsseldorf&art=Stadt

Das Portal machte technisch gelinde gesagt einen sehr zweifelhaften Eindruck.
Zunächst einmal scheint es keinerlei Captcha oder ähnliches zu geben. Eine Massenabfrage scheint also mit entsprechenden Skripten möglich zu sein.

Außerdem verabschiedete sich die Webapplikation bei meiner Testabfrage mit folgender Tomcat Fehlermeldung, da ich keine Cookies aktiviert hatte:

Dies lies mich dann doch zunehmend an der Professionalität einer Anwendung zweifeln, die Zugriff auf die Daten aller Bürger der Stadt bietet. Ein Skript sollte nicht abstürzen, wenn Voraussetzungen am Rechner des Benutzers nicht gegeben sind (in diesem Fall mein fehlender Cookie). Skript-Fehlermeldungen von Webservern, die sich im produktiven Einsatz befinden nicht zu deaktivieren ist fahrlässig, da sie viel über die verwendete Systemumgebung verraten können. Zumal man bei jsp (wie im Screenshot oben) je nach Konfiguration des Servers auch noch Kommentare des Programmierers und Quelltextschnippsel dazu bekommt. Hier wurde geschlampt. An einer Schnittstelle zu persönlichen Daten sollte das nicht passieren.

Aufhorchen ließ mich auch die benutze Tomcat Version, welche in der Fehlermeldung auch unten auftaucht. (Apache Tomcat/6.0.24) Dies ist eine ältere Version des Webservers vom 21.01.2010. Aktuell ist die Version 6.0.33. Der Melderegister-Server wurde 4 Versionen lang nicht aktualisiert. Schaut man sich die Sicherheitslücken an, die in diesen letzten Versionen behoben wurden, wird es langsam ungemütlich. Der Server befindet sich offensichtlich nicht im bestmöglichen Zustand:

http://tomcat.apache.org/security-6.html

Fixed in Apache Tomcat 6.0.33	released 18 Aug 2011

    Moderate: Multiple weaknesses in HTTP DIGEST authentication CVE-2011-1184

    The implementation of HTTP DIGEST authentication was discovered to have several weaknesses:

        replay attacks were permitted
        server nonces were not checked
        client nonce counts were not checked
        qop values were not checked
        realm values were not checked
        the server secret was hard-coded to a known string

    The result of these weaknesses is that DIGEST authentication was only as secure as BASIC authentication.

    This was fixed in revision 1158180.

    This was identified by the Tomcat security team on 16 March 2011 and made public on 26 September 2011.

    Affects: 6.0.0-6.0.32

    Low: Information disclosure CVE-2011-2204

    When using the MemoryUserDatabase (based on tomcat-users.xml) and creating users via JMX, an exception during the user creation process may trigger an error message in the JMX client that includes the user's password. This error message is also written to the Tomcat logs. User passwords are visible to administrators with JMX access and/or administrators with read access to the tomcat-users.xml file. Users that do not have these permissions but are able to read log files may be able to discover a user's password.

    This was fixed in revision 1140071.

    This was identified by Polina Genova on 14 June 2011 and made public on 27 June 2011.

    Affects: 6.0.0-6.0.32

    Low: Information disclosure CVE-2011-2526

    Tomcat provides support for sendfile with the HTTP NIO and HTTP APR connectors. sendfile is used automatically for content served via the DefaultServlet and deployed web applications may use it directly via setting request attributes. These request attributes were not validated. When running under a security manager, this lack of validation allowed a malicious web application to do one or more of the following that would normally be prevented by a security manager:

        return files to users that the security manager should make inaccessible
        terminate (via a crash) the JVM

    Additionally, these vulnerabilities only occur when all of the following are true:

        untrusted web applications are being used
        the SecurityManager is used to limit the untrusted web applications
        the HTTP NIO or HTTP APR connector is used
        sendfile is enabled for the connector (this is the default)

    This was fixed in revision 1146703.

    This was identified by the Tomcat security team on 7 July 2011 and made public on 13 July 2011.

    Affects: 6.0.0-6.0.32

    Important: Information disclosure CVE-2011-2729

    Due to a bug in the capabilities code, jsvc (the service wrapper for Linux that is part of the Commons Daemon project) does not drop capabilities allowing the application to access files and directories owned by superuser. This vulnerability only occurs when all of the following are true:

        Tomcat is running on a Linux operating system
        jsvc was compiled with libcap
        -user parameter is used

    Affected Tomcat versions shipped with source files for jsvc that included this vulnerability.

    This was fixed in revision 1153824.

    This was identified by Wilfried Weissmann on 20 July 2011 and made public on 12 August 2011.

    Affects: 6.0.30-6.0.32

Fixed in Apache Tomcat 6.0.32	released 03 Feb 2011

    Note: The issue below was fixed in Apache Tomcat 6.0.31 but the release vote for the 6.0.31 release candidate did not pass. Therefore, although users must download 6.0.32 to obtain a version that includes a fix for this issue, version 6.0.31 is not included in the list of affected versions.

    Important: Remote Denial Of Service CVE-2011-0534

    The NIO connector expands its buffer endlessly during request line processing. That behaviour can be used for a denial of service attack using a carefully crafted request.

    This was fixed in revision 1066313.

    This was identified by the Tomcat security team on 27 Jan 2011 and made public on 5 Feb 2011.

    Affects: 6.0.0-6.0.30

Fixed in Apache Tomcat 6.0.30	released 13 Jan 2011

    Low: Cross-site scripting CVE-2011-0013

    The HTML Manager interface displayed web application provided data, such as display names, without filtering. A malicious web application could trigger script execution by an administrative user when viewing the manager pages.

    This was fixed in revision 1057270.

    This was identified by the Tomcat security team on 12 Nov 2010 and made public on 5 Feb 2011.

    Affects: 6.0.0-6.0.29

    Moderate: Cross-site scripting CVE-2010-4172

    The Manager application used the user provided parameters sort and orderBy directly without filtering thereby permitting cross-site scripting.

    This was fixed in revision 1037779.

    This was first reported to the Tomcat security team on 15 Nov 2010 and made public on 22 Nov 2010.

    Affects: 6.0.12-6.0.29

    Low: SecurityManager file permission bypass CVE-2010-3718

    When running under a SecurityManager, access to the file system is limited but web applications are granted read/write permissions to the work directory. This directory is used for a variety of temporary files such as the intermediate files generated when compiling JSPs to Servlets. The location of the work directory is specified by a ServletContect attribute that is meant to be read-only to web applications. However, due to a coding error, the read-only setting was not applied. Therefore, a malicious web application may modify the attribute before Tomcat applies the file permissions. This can be used to grant read/write permissions to any area on the file system which a malicious web application may then take advantage of. This vulnerability is only applicable when hosting web applications from untrusted sources such as shared hosting environments.

    This was fixed in revision 1022560.

    This was discovered by the Tomcat security team on 12 Oct 2010 and made public on 5 Feb 2011.

    Affects: 6.0.0-6.0.29

Fixed in Apache Tomcat 6.0.28	released 9 Jul 2010

    Important: Remote Denial Of Service and Information Disclosure Vulnerability CVE-2010-2227

    Several flaws in the handling of the 'Transfer-Encoding' header were found that prevented the recycling of a buffer. A remote attacker could trigger this flaw which would cause subsequent requests to fail and/or information to leak between requests. This flaw is mitigated if Tomcat is behind a reverse proxy (such as Apache httpd 2.2) as the proxy should reject the invalid transfer encoding header.

    This was fixed in revision 958977.

    This was first reported to the Tomcat security team on 14 Jun 2010 and made public on 9 Jul 2010.

    Affects: 6.0.0-6.0.27

    Note: The issue below was fixed in Apache Tomcat 6.0.27 but the release vote for the 6.0.27 release candidate did not pass. Therefore, although users must download 6.0.28 to obtain a version that includes a fix for this issue, version 6.0.27 is not included in the list of affected versions.

    Low: Information disclosure in authentication headers CVE-2010-1157

    The WWW-Authenticate HTTP header for BASIC and DIGEST authentication includes a realm name. If a  element is specified for the application in web.xml it will be used. However, a  is not specified then Tomcat will generate realm name using the code snippet request.getServerName() + ":" + request.getServerPort(). In some circumstances this can expose the local host name or IP address of the machine running Tomcat.

    This was fixed in revision 936540.

    This was first reported to the Tomcat security team on 31 Dec 2009 and made public on 21 Apr 2010.

    Affects: 6.0.0-6.0.26

Das alles wirkt sehr unsicher und steht für mich exemplarisch für den gelebten Datenschutzwillen des Staates. Die Daten werden verkauft und es ist kaum jemandem bekannt. Die technische Umsetzung lässt sehr zu Wünschen übrig und läuft über technische Systeme, die bekanntermaßen fehlerhaft sind und dringend aktualisiert werden müssten. Auch scheint eine Endkontrolle und qualifizierte Abnahme bei IT-Projekten (die bekanntermaßen für den Staat meistens recht teuer sind) nicht immer stattzufinden.

Als einzigen Pluspunkt kann ich vermerken, dass es kein zentrales bundesweites Portal mit Online-Fernabfrage für alle Meldedaten zu geben scheint. Dann wären wir sicherlich nicht mehr weit entfernt von dem, was den Israelis vor Kurzem geschehen ist.

Ich bin froh, dass ich mich ausgetragen habe, aber ob jemand mit etwas krimineller Energie und technischem Verständnis nicht trotzdem (kostenlos) an meine Daten (und alle anderen) kommen könnte, halte ich zumindest für fragwürdig. Auf den ersten Blick wirkt das Düsseldorfer System nicht abgehärtet gegen Angriffe.

20Nov/114

Tweet Neglector. A small PHP script to delete old Tweets from Twitter

Tweet Neglector automates the process of deleting old tweets from your Twitter account. Basicly it provides an "expire" functionality for your tweets. It is useful for people who want to use Twitter but don't want a history of their tweets to stay online for decades.

HISTORY:
Nov 20 2011 | Version 0.1
Initial release. Deletes Tweets

Dez 28 2011 | Version 0.2
Small bug fixes. Now deletes Retweets as well.

KNOWN BUGS:
- Won't work if you tweet more than 1000 tweets in the timeframe you plan to keep tweets. Same for retweets (100 allowed). These are shortcomings of the Twitter GET API I am using ATM. Maybe I'll fix this with the next release

Tweet Neglector uses the Twitter API to delete all your tweets that were posted before a given number of days from now. This way you could configure the script to delete all tweets that are older than a week or a month for example. The script should be automatically run from a cronjob or another automation mechanism on a regular base.

This script can't protect you from external Tweet archives. Also it is unknown if deleted Tweets are still archived by Twitter (I bet they are). So (as always) think before tweeting.

Tweet Neglector uses PHP as scripting language and bundles the Twitter OAuth Library from Matt Harris for API-Access.

Installation

- PHP5 required for tmhOAuth

- Unzip the archive into a directory of your choice.

- Register your Twitter API-Keys at https://dev.twitter.com/apps

- Edit the configuration of the script to suit your needs:

# Twitter API keys, tokens and secrets
# Get these keys at -> https://dev.twitter.com/apps

$consumer_key        =  "YOUR KEY HERE";
$consumer_secret     =  "YOUR KEY HERE";
$access_token        =  "YOUR KEY HERE";
$access_token_secret =  "YOUR KEY HERE";

# Number of tweets to work on per session
$tweets_per_session = 1000;

# Twitter Username
$twitter_username = "YOUR USERNAME HERE";

# Days to keep tweets
$keep_days = 30;

- Run the script manually from browser, console or automatically by cronjob
/usr/bin/php /var/www/tweetneglector/tweetneglector.php

Download Tweet Neglector 0.2 here

24Okt/110

Howto: Quick and dirty DHCP-Server und DNS-Cache mit dnsmasq unter Debian

DHCP im LAN ist praktisch. Man muss nicht mehr die Netzwerkkonfiguration jedes einzelnen Rechners im Netzwerk an den Clients selbst verwalten, sondern hat alles schön zentral auf dem Server. Durch DNS-Caching sparen die Clients ein wenig Zeit beim Auflösen von Hostnames, da die Anfragen für bekannte Hostnames vom lokalen Cache übernommen werden können und nicht mehr an einen Server im Internet gestellt werden müssen.

Ein kleiner DHCP-Server ist mit dnsmasq sehr schnell eingerichtet.

# dnsmasq installieren
apt-get install dnsmasq

Die Konfiguration findet zentral in der Datei /etc/dnsmasq.conf statt. Man sollte sich vor den geballten Konfigurationsoptionen in der Datei nicht abschrecken lassen. So gut wie alles dient nur als Beispiel und ist per default auskommentiert. Eine sehr kurze Konfig reicht bereits für ein funktionierendes Setup:

DHCP

# DHCP netmask
# Clients bekommen 255.255.255.0 als Netmask
dhcp-option=1,255.255.255.0

# default gateway
# Clients bekommen als Gateway 192.168.1.251
dhcp-option=3,192.168.1.251

# dns
# Clients bekommen als Nameserver 192.168.1.4
# Falls man dnsmasq auch als DNS-Cache benutzen möchte, sollte dies die
# IP des Servers sein, auf dem dnsmasq läuft
dhcp-option=6,192.168.1.4

# Für bekannte Rechner immer dieselbe IP anhand der MAC-Adresse vergeben:
# Hier bekommt der Rechner mit der MAC 00:11:22:33:44:55 die IP 192,168.1.1 für 12 Stunden

dhcp-host=00:11:22:33:44:55,lobby,192.168.1.1,12h
dhcp-host=00:11:22:33:44:66,lobby2,192.168.1.2,12h

# Alle Rechner, die nicht per MAC identifiziert werden können, erhalten IPs
# aus dem Pool 192.168.1.120 bis 150

dhcp-range=192.168.1.120,192.168.1.150,12h

DNS

Die DNS-Funktionalität von dnsmasq benötigt eigentlich keine Konfiguration.
dnsmasq besorgt sich seine Nameserver aus /etc/resolv.conf . Hier sollten die
bekannten Nameserver des Providers eingetragen werden und evtl noch als Fallback
die 8.8.8.8 für Googles DNS-Server.

Weitere Hostnames, die im lokalen Netz gelten sollen, können dnsmasq in der Datei
/etc/hosts bekannt gemacht werden. Hier eingetragene Hostnames stehen allen Rechnern
im LAN zur Verfügung.

Fallstricke

dnsmasq muss nach Konfigänderungen seine Konfigurationsdateien neu einlesen

/etc/init.d/dnsmasq restart

Falls Clients noch eine Lease vom alten DHCP-Server haben, kann man sie manuell dazu bringen, einen neuen DHCP-request zu starten.

#Linux
dhclient eth0

#Windows
ipconfig /RELEASE
ipconfig /RENEW

Dringend muss man darauf achten, den bisher genutzen DHCP-Server (meistens im Router zum Internet) zu deaktivieren. 2 DHCP-Server im LAN können viel Chaos generieren.

5Okt/110

Wlan für EEE 1000H rt2860 unter Ubuntu

Mit irgendeinem Update in letzter Zeit wurde das WLAN auf meinem EEE PC 1000H unter Ubuntu recht instabil. Dauernde Verbindungsabbrüche, kein WLAN nach Suspend, langsame Verbindung, etc.

Ich bin mir nicht ganz sicher woran es liegt, wahrscheinlich hat der rt2860 Treiber mit irgendeinem Update einen Bug bekommen.

Zum Glück kann das Problem durch die Installation der Windows-Treiber mit ndiswrapper gelöst werden.

Dies ist nur eine etwas verkürzte deutsche Übersetzung der englischen Originalanleitung von nevdelap aus dem Ubuntuforum. (Vielen Dank)

1. Windows Treiber saugen und entpacken (comm_driver_gigabyte_mimobility_v.1.3.1.0.15.zip)

2. Linux Treiber blacklisten

#/etc/modprobe.d/blacklist.conf

blacklist rt2x00lib
blacklist rt2x00pci
blacklist rt2x00usb
blacklist rt2400pci
blacklist rt2500pci
blacklist rt2500usb
blacklist rt2800lib
blacklist rt2800pci
blacklist rt2800usb
blacklist rt61pci
blacklist rt73usb
blacklist rt2600
blacklist rt2860 # Asus eee 1000H has an rt2860. To be loaded by ndiswrapper.
blacklist b43
blacklist b43legacy
blacklist ssb
blacklist r8192s_usb

3. Mit ndisgtk den Windowstreiber aus drivers/GN-WI30N_WP30N_WS30N_WS30HN_WS31N/WINXP2k installieren

sudo ndisgtk

4. Grub konfigurieren

#/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="pciehp.pciehp_force=1 pciehp.pciehp_poll=1 quiet splash"
sudo update-grub2

5. Powermanagement Rule erstellen

#/etc/pm/sleep.d/ndiswrapper

#!/bin/bash
case "$1" in
    hibernate|suspend)
        sudo rmmod ndiswrapper
        ;;
    thaw|resume)
        sudo modprobe ndiswrapper
        ;;
    *)
        ;;
esac
exit $?
chmod +x /etc/pm/sleep.d/ndiswrapper


6. Reboot

Danach läuft das WLAN schnell und stabil.

29Jul/110

PHP Spickzettel

Hier sammele ich nützliche PHP Codeschnipsel

Pseudo Multithreading mit screen

#!/usr/bin/php5

for ($i=1;$i<50;$i++)
{
echo "starting $i\n";
exec("screen -d -m /usr/bin/php5 ./thread.php");
}

MySQL Server has gone away in lange laufenden PHP-Shellscripten

#/etc/php5/cli/php.ini
mysql.allow_persistent = On
mysql.max_persistent = -1
mysql.max_links = -1
mysql.connect_timeout = -1
veröffentlicht unter: Linux keine Kommentare
7Jul/110

Company Connect – Spass mit dem Telekom Vertrieb

Ein Kunde hatte ein Problem. Wegen einer speziellen Applikation, wurde ein schnellerer Ping nach Taiwan benötigt. Ein herkömmlicher Telekom DSLer brachte konstant 290 - 320ms zu Hinet, einem grossen taiwanesischen Provider. Eine streßfreie Nutzung der Applikation war mit diesen Paketlaufzeiten nicht möglich, deshalb forschte man nach Alternativen um eine schnellere Verbindung herzustellen. Ich war von Anfang an skeptisch ob eine Verbesserung der Situation überhaupt möglich war. Mit dem DSLer wurden die Pakete zunächst über das Telekom-Netz nach New York geroutet. Von dort aus ging es mit AT&T weiter quer durch die USA, dann über den Pazifik zu Hinet. Von Kalifornien bis Taiwan entstand der Hauptteil der Paketlaufzeit - fast 200ms. Meiner Meinung nach wäre eine Verbesserung nur möglich gewesen, wenn die Telekom selbst einen Backbone ihres Netzes in Taiwan unterhalten würde. Bei meiner Suche nach Anbietern, die das unmögliche leisten könnten, stieß ich auf das Telekom-Produkt Company Connect, das aus einer Standleitung besteht, die direkt an den Telekom-Backbones hängt. Telefonisch versicherte man mir, dass man mit "CoCo" ohne weiteres einen Ping unter 50ms nach Asien erreicht. Ich war freudig überrascht, aber nach wie vor skeptisch. Einige Tage später kam ein jung-dynamischer Telekom-Vertriebler ins Haus und bestätigte die Behauptung der Hotline erneut. "Ich habe mich für Sie erkundigt, das ist alles kein Problem. Die Telekom unterhält weltweit Backbones." Beim verlassen des Gebäudes erzählte er mir noch, dass er sich gerade einen neuen BMW bestellt hätte. Sehr schön. Am nächsten Tag kam per E-Mail direkt der Vertrag ins Haus. Wir schickten ihn mit dem Zusatz zurück, dass wir den Vertrag stornieren können, falls keine Pings unter 100ms nach Taiwan erreicht werden könnten. Die Telekom unterschrieb. Danach passierte erst einmal lange nichts mehr. Der Vertriebler hatte eine Schaltung innerhalb eines Monats zugesichert. Nach einem Monat fragten wir nach, der Vertriebler war allerdings ab dann (bis heute) nicht mehr erreichbar. Auch E-Mails an seine Abteilung wurden nicht beantwortet. Nach 2 1/2 Monaten wurden wir ungeduldig und drohten mit einer Stornierung des Auftrags, falls nicht innerhalb einer Woche ein Termin für die Schaltung vereinbart werden könnte. Danach ging es plötzlich sehr schnell. Die "Eskalationsstelle" organisierte einen Termin für uns, die Leitung wurde geschaltet. Für einen ersten Test klemmte ich einen Router und mein Netbook an die brandneue Leitung.

box-ww-11:57:35 ~ -> ping www.hinet.net
PING www.hinet.net (202.39.224.7) 56(84) bytes of data.
64 bytes from 202-39-224-7.HINET-IP.hinet.net (202.39.224.7): icmp_req=1 ttl=237 time=306 ms
64 bytes from 202-39-224-7.HINET-IP.hinet.net (202.39.224.7): icmp_req=2 ttl=237 time=306 ms

LOL. Was hätte man anderes erwarten können? Exakt die gleichen Ping-Werte wie zuvor. Exakt die gleiche internationale Route wie zuvor. Kein technisches Problem. Einfach nur viel Bullshit-Blah-Blah. Ich bin gespannt, ob die Kündigung genauso "problemlos" funktionieren wird wie die Schaltung.

19Jun/110

XS UMTS Stick W14 unter Ubuntu

Der XS Stick W 14 unter Ubuntu zickte ein wenig herum. Gelegentlich erkannte der Network-Manager ihn als USB-Modem, dann konnte er allerdings trotzdem keine Verbindung herstellen. Nach ein wenig erfolgloser Frickelei bin ich auf das Sakis3G Script gestoßen, das verspricht mit fast allen Sticks eine Verbindung herstellen zu können. Und tatsächlich: Es hat mit Sakis3G sofort funktioniert. Empfehlenswert, wahrscheinlich auch für andere Sticks.

TYPENSCHILD

XS Stick W14
P/N 3000.000056.00
www.4g-systems.com
#lsusb
Bus 002 Device 006: ID 1c9e:9603
# /var/log/syslog beim Einstecken

Jun 19 20:41:04 box kernel: [74186.796148] usb 2-2: new high speed USB device using ehci_hcd and address 7
Jun 19 20:41:04 box kernel: [74186.946031] scsi11 : usb-storage 2-2:1.0
Jun 19 20:41:05 box usb_modeswitch: switching 1c9e:f000 (USB Modem: USB Modem)
Jun 19 20:41:06 box kernel: [74189.293850] usb 2-2: USB disconnect, address 7
Jun 19 20:41:07 box kernel: [74189.660069] usb 2-2: new high speed USB device using ehci_hcd and address 8
Jun 19 20:41:07 box kernel: [74189.819348] option 2-2:1.0: GSM modem (1-port) converter detected
Jun 19 20:41:07 box kernel: [74189.819577] usb 2-2: GSM modem (1-port) converter now attached to ttyUSB0
Jun 19 20:41:07 box kernel: [74189.819802] option 2-2:1.1: GSM modem (1-port) converter detected
Jun 19 20:41:07 box kernel: [74189.819950] usb 2-2: GSM modem (1-port) converter now attached to ttyUSB1
Jun 19 20:41:07 box kernel: [74189.820220] option 2-2:1.2: GSM modem (1-port) converter detected
Jun 19 20:41:07 box kernel: [74189.820395] usb 2-2: GSM modem (1-port) converter now attached to ttyUSB2
Jun 19 20:41:07 box kernel: [74189.821414] scsi12 : usb-storage 2-2:1.3
Jun 19 20:41:07 box modem-manager[10480]:   (ttyUSB1) opening serial port...
Jun 19 20:41:07 box modem-manager[10480]:   (ttyUSB0) opening serial port...
Jun 19 20:41:07 box modem-manager[10480]:   (ttyUSB2) opening serial port...
Jun 19 20:41:08 box usb_modeswitch: switched to 1c9e:9603 (USB Modem: Modem Configuration)
Jun 19 20:41:08 box kernel: [74190.823474] scsi 12:0:0:0: Direct-Access     USBModem Disk             2.31 PQ: 0 ANSI: 2
Jun 19 20:41:08 box kernel: [74190.825402] sd 12:0:0:0: Attached scsi generic sg3 type 0
Jun 19 20:41:08 box kernel: [74190.833436] sd 12:0:0:0: [sdc] Attached SCSI removable disk
15Jun/110

12 Maßnahmen um einen Linux root LAMP Apache MySQL PHP Webserver abzusichern


Die Hacking-Frequenz ist in den letzten Monaten stark angestiegen. Besonders viele Daten werden abgegriffen durch Hacks auf Webserver. Sogar der SONY-PSN-Hack nutzte Schwachstellen in einem ungepatchten Apache-Webserver. Deshalb sammele ich hier Maßnahmen, die den eigenen Server etwas sicherer gegen Angriffe von außen machen können. Natürlich bieten auch diese keinen 100%igen Schutz, aber es ist besser, den bösen Buben das Spiel ein wenig schwieriger zu machen. Einige der Maßnahmen benötigen nur einen minimalen Installations- und Wartungsaufwand. Andere benötigen viel Zeit und Kenntnisse von PHP um zu greifen. Man sollte immer auf das Kosten-Nutzen-Verhältnis bei der Auswahl der Sicherheitsmaßnahmen achten. Es macht keinen Sinn, eine kleine, private Website so abzusichern wie die Federal Reserve Bank. Allerdings können wenige gezielte Änderungen am System bereits ein großes Mehr an Sicherheit bedeuten. Und das sollte man sich schon gönnen, bevor es zu spät ist....

Alle Tipps und Codesnips beziehen sich auf eine aktuelle Debian-Kiste.

1. Die Firewall - erst einmal alles verbieten

Die meisten Linux-Distributionen öffnen in ihren Standardinstallationen keine Ports nach außen, die nicht unbedingt notwendig sind. Diese Situation kann man jedoch schnell selbst ändern, wenn man am Server
herumspielt und Dinge ausprobiert. Plötzlich lauscht auch der Mediaserver im Internet oder die Datenbank
nimmt Verbindungen aus dem Internet entgegen. Deshalb ist es nicht verkehrt sich selbst zu disziplinieren und eine sehr restriktive Firewall aufzusetzen, die grundsätzlich erst einmal alle Verbindungen von außen verbietet und nur (selbst) ausgewählte Verbindungen gestattet. Zum Glück ist das mit iptables schnell erledigt. Auf diese Art und Weise kann man nicht mehr aus versehen Dienste der Welt zugänglich machen, die dort nichts zu suchen haben. Man bezahlt leider mit etwas Komfort - die Firewall muss jedes Mal angepasst werden, wenn man neue Dienste anbieten möchte. Trotzdem ist der Aufwand klein und der Nutzen groß.

#!/bin/bash

# Bestehende Tables löschen
iptables -F

# Alle eingehenden Verbindungen verbieten
iptables -P INPUT DROP
iptables -P FORWARD DROP

# Alle ausgehenden erlauben
iptables -P OUTPUT ACCEPT

# SSH erlauben
iptables -A INPUT -j ACCEPT -p tcp --dport 22 

# HTTP erlauben
iptables -A INPUT -j ACCEPT -p tcp --dport 80 

# Weiteren Dienst (UDP) erlauben, zum Beispiel Gameserver
iptables -A INPUT -j ACCEPT -p udp --dport 4534 

# Alles von Localhost erlauben. (Damit der Server selbst ungehindert auf seine Dienste zugreifen kann,
# zum Beispiel PHP auf die lokale Datenbank
iptables -A INPUT -j ACCEPT -s 127.0.0.1

# Bereits aufgebaute Verbindungen werden an jedem Port akzeptiert
# (Notwendig für manche Daemons)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Dieses kleine Grundgerüst kann man einfach weiter ausbauen und eigene Dienste hinzufügen. Bei Arbeiten an der Firewall sollte man immer für den Fall vorsorgen, dass man sich selbst aussperrt. Besonders bei Remote-Servern, auf die man keinen physischen Zugriff hat, ist es sehr ärgerlich, durch eine mißglückte Firewallregel den eigenen Zugriff zu verlieren. Um diesem Problem aus dem Weg zu gehen, kann man bei Arbeiten an der Firewall einfach temporär einen Cronjob starten lassen, der die Firewall alle paar Minuten zurücksetzt oder den Server neu startet. Sind die Regeln später getestet und geliebt, kann der Cronjob wieder deaktiviert werden und die neuen Regeln bleiben permanent aktiv.

Um herauszufinden, welche Dienste gerade auf dem eigenen Server herumlauschen, kann man netstat benutzen:

#Für TCP-Sockets:
netstat -lpn | grep tcp

#Analog für UDP:
netstat -lpn | grep udp

Um zu testen ob die Firewall wirklich funktioniert, kann man den eigenen Server von einem anderen Rechner aus portscannen. Hat alles geklappt, sollten im Ergebnis nur die selbst geöffneten Ports auftauchen:

#Für TCP:
nmap -p1-65535 meinserver.de

#Für UDP:
nmap -sU -p1-65535 meinserver.de

2. SSH Logins verbieten

Am eigenen root-Server hat man uneingeschränkten SSH-Zugriff. Das ist recht praktisch, da man von jedem SSH-Client aus mal eben auf den Server kann um an ihm zu arbeiten. Der Nachteil davon ist, dass das natürlich auch jeder andere kann, der unglücklicher Weise irgendwie an das eigene Passwort gelangt ist. Es ist viel sicherer SSH-Logins nur mit einer gültigen Schlüsseldatei zu erlauben. Dafür wird der öffentliche Schlüssel des Clients auf den Server kopiert und interaktive Logins per Passworteingabe werden deaktiviert.

# Auf dem Client einen öffentlichen Schlüssel erstellen
# Wird bei der Generierung ein Passwort angegeben, benötigt man zum
# einloggen später die Schlüsseldatei UND das Passwort. Ansonsten wird
# nur der Schlüssel benötigt.

ssh-keygen -t rsa

# Den erstellten Schlüssel danach auf den Server kopieren

ssh-copy-id -i ~/.ssh/id_rsa.pub root@meinserver.de

# Danach auf dem Server /etc/ssh/sshd_config anpassen
.
.
PasswordAuthentication no
.
.

# Danach SSh neu starten
/etc/init.d/ssh restart

Auch hier sollte man Vorkehrungen treffen, um sich nicht selbst auszusperren, falls etwas nicht funktioniert.
Der Public Key auf einem USB-Stick mit dem dazugehörigen Passwort im eigenen Kopf macht es sehr viel schwerer für böse Buben eine Shell zu erhalten.

3. SSH Bruteforcing verhindern mit denyhosts

Falls Tipp 2 nicht praktikabel ist und man den Komfort von passwortgestützten Logins nicht aufgeben will, kann man zumindest das automatisierte Passwortraten von Angreifern auf dem Server verhindern. Sehr viele Bots im Internet machen den ganzen Tag nichts anderes als nach SSH-Servern zu suchen und bei Ihnen verschiedenste Passwörter durchzuprobieren. Mit einem halbwegs sicheren Passwort ist das kein großes Problem, trotzdem gibt es ein besseres Gefühl, wenn nicht einmal das möglich ist. Außerdem schützt man so auch seine User, falls auf dem Server auch Useraccounts bestehen. Hier kann man sich nicht darauf verlassen, dass die Benutzer sichere Passwörter verwenden. denyhosts überprüft ständig Logins auf dem ssh und sperrt Benutzer für eine gewisse Zeit, die ihr Passwort wiederholt falsch angegeben haben. Die IP's dieser Nutzer landen temporär in /etc/hosts.deny, so dass für sie kein Zugriff mehr möglich ist. Damit wird SSH-Bruteforcing zu einer sehr langwierigen und wenig erfolgversprechenden Aufgabe.

apt-get install denyhosts

# denyhosts funktioniert direkt nach der Installation. Man kann es
# in der Datei /etc/denyhosts.conf feintunen

4. Blacklisten benutzen, um bekannte Problem-IPs auszusperren

Im Internet werden verschiedene Blacklisten gepflegt, die eine große Anzahl von kriminellen/gehackten/spammenden/betrügerischen Servern auflisten. Diese IP-Listen können direkt in die Firewall eingetragen werden, so dass von diesen bekanntermaßen nicht vertrauenswürdigen Rechnern überhaupt keine Verbindung mehr zum eigenen Server möglich ist. So kann man das Spamaufkommen auf dem eigenen Server drastisch verringern und auch das eine oder andere Script-Kiddie aussperren, weil sein Russland-Proxy plötzlich nicht mehr funktioniert. Wie man das macht habe ich bereits in einem anderen Blog-Artikel am Beispiel der Blacklist von Infiltrated.net beschrieben.

5. Kein FTP benutzen für die Arbeit am Server

FTP ist ein Relikt aus besseren Zeiten in denen das Internet noch ein kleines vertrauenswürdiges Dörfchen war. Viele Admins von Webseiten nutzen nach wie vor FTP um Dateien zum Server zu übertragen oder um an der eigenen Website zu arbeiten. Das ist leider sehr unsicher, da FTP alle Daten ungesichert übertragt. Passwörter und Daten können an jedem Hop zwischen Server und Client ohne Probleme mitgelesen werden. Viel sicherer geht es mit sshfs. Hiermit kann man sich per SSH ein Verzeichnis des Remote-Servers in sein lokales Dateisystem mounten. Man kann danach auf dem Server so arbeiten, als sei er auf dem lokalen Rechner. Alle Dateizugriffe auf Dateien auf dem Server sind komplett transparant, man kann also auch mit dem lokalen Grafikprogramm ein Bild auf dem Server direkt öffnen, bearbeiten und wieder speichern. Mehr Komfort und mehr Sicherheit ohne großen Aufwand.

#sshfs installieren
apt-get install sshfs

#mountpoint im lokalen Dateisystem anlegen
mkdir /media/meinserver

#Server ins lokale Dateisystem mounten
sshfs www-data@mein-server.de:/var/www /media/meinserver

#Nun ist das Verzeichnis /var/www auf meinserver lokal unter /media/meinserver verfügbar

6. Updates installieren

Ein super abgesichertes System hilft nichts, wenn das System selbst fehlerhaft ist und eine bekannte Sicherheitslücke ausgenutzt werden kann. Meist werden diese Sicherheitslücken schnell geschlossen, oft vergessen Admins jedoch regelmäßige Updates des Systems zu machen. Ob man automatische Updates auf Linux-Servern aktivieren sollte oder nicht ist ein strittiges Thema. Einige würden es niemals tun, da es natürlich mit viel Pech auch sein kann, dass die Updates das System unbrauchbar machen. Dies ist mir in über 10 Jahren Arbeit an Debian-Systemen allerdings niemals passiert und ich schätze den Nutzen von zeitnahen und regelmässigen Updates viel höher ein, als die daraus entstehende Gefahr.

#Diese Zeile in der /etc/crontab aktualisiert das System täglich um 6 Uhr morgens
0 6 * * *       root    apt-get update && apt-get -y upgrade

Diese Quick-and-dirty Methode funktionierte bei mir bisher immer gut. Vor kurzem habe ich gelesen, dass im Debian Repository auch das Paket unattended-upgrades existiert, das die Aufgabe wohl etwas eleganter löst, ich habe es allerdings bisher nicht getestet.

Auch bei diesen vollautomtischen Systemupdates ist man nicht komplett aus dem Schneider. Falls ein Kernel-Update ausgeliefert wurde, muss man das System trotzdem noch per Hand neu booten, da ansonsten die Änderungen nicht aktiv werden.

Benutzt man fremden PHP-Code auf dem Server, wie zum Beispiel ein Open-Source CMS oder ein Forum, ist es natürlich absolut notwendig auch diesen Code mit neuen Versionen aktuell zu halten. Da Debian mit seinen Updates Änderungen an diesen Applikationen in der Regeln nicht abdeckt, ist hier Handarbeit nötig. Am besten liest man die Mailinglisten der entsprechenden Produkte mit um immer auf dem Laufenden zu sein.

7. PHP einsperren mit open_basedir

Viele Hacks basieren darauf, dass eine Sicherheitslücke im PHP-Code ausgenutzt wird, um auf Dateien im Dateisystem zuzugreifen, die nicht zur Website gehören, sondern zum System selbst. Deshalb sollte man PHP einsperren, so dass es nur in explizit erlaubten Verzeichnissen lesen und schreiben darf. Dafür bietet die php.ini die Konfigurationsoption open_basedir. PHP hat nach setzten der Option nur noch Zugriff auf die dort erlaubten Verzeichnisse. Dateien wie /etc/passwd werden unerreichbar. Hostet man auf einem Server mehrere Webseiten sollte man open_basedir in der jeweiligen VirtualHost-Konfiguration pro Seite setzen.

# Global per php.ini:
# /etc/php5/apache2/php.ini
open_basedir = /var/www/:/tmp/

# Per Site in der VirtualHost Config:
php_value open_basedir /var/www/site/:/tmp/

Wichtig ist zu prüfen ob wirklich alle Orte eingetragen wurden, auf die die Skripte normalerweise Zugriff haben müssen, ansonsten kann es sein, dass man auch legitime Funktionen der PHP-Applikation behindert.

8. Für Websites einen eigenen MySQL-Benutzer anlegen

Benutzt die eigene PHP-Applikation MySQL, sollte man unbedingt für die Apllikation einen eigenen MySQL-Benutzer anlegen und auf keinen Fall den MySQL-root-Benutzer für Zugriffe nutzen. Außerdem sollte man die Rechte des Benutzers so weit einschränken, dass wirklich nur noch Operationen erlaubt sind, die das PHP-Skript benötigt. CREATE TABLE und DROP TABLE werden zum Beispiel häufig bei SQL-Injections genutzt und werden in den meisten PHP-Applikationen nie benötigt. Hostet man mehrere Websites mit mehreren Datenbanken auf einem Server, sollte man für alle Datenbanken eigene Benutzer anlegen. So hat ein Angreifer nach einem erfolgreichen Angriff nur Zugriff auf eine der Datenbanken und nicht direkt auf alle. Wenn man nicht die Kommandozeile bemühen möchte, um die MySQL-Useraccounts zu verwalten, funktioniert das Usermanagement auch recht einfach mit PHPmyAdmin unter der Registerkarte "Rechte".

9. PHP Fehlermeldungen abschalten

PHP-Fehlermeldungen können einem Angreifer viel über den eigenen Server verraten: Verzeichnisstrukturen, Datenbankstrukturen, Konfigurationsfehler, etc. Außerdem sehen sie für den Benutzer sehr unprofessionell aus. Aus diesem Grund sollte man sie auf einem Live-Webserver grundsätzlich abschalten, da man sie ohnehin weiterhin in den Logs sehen kann.

# Global per php.ini:
# /etc/php5/apache2/php.ini
display_errors = Off

# Per Site in der VirtualHost Config:
php_flag display_errors Off

# Fehlermeldungen trotzdem lesen:
cat /var/log/apache2/error.log | grep PHP

10. Angriffsfläche für SQL-Injections einschränken mit modSecurity

SQL-injections sind die wohl am häufigsten genutzte Angriffsmethode auf Webserver. Der Zugriff erfolgt direkt über die Webapplikation und es genügt ein Browser um sie durchzuführen. Dabei werden über vom User übermittelte Variablen geschickt SQL-Abfragen eingebaut, die mit den Rechten des Datenbankbenutzers alles an der eigenen Datenbank nach belieben auslesen, löschen oder bearbeiten können. Ein wirklicher echter Schutz gegen SQL-Injections besteht nur, wenn der PHP-Code der Site im Hinblick auf diese Angriffe geschrieben wurde. Jede Variable aus Benutzereingaben, die in eine SQL-Abfrage gelangen könnte, muss geprüft und escaped werden. PHP bietet dafür die Funktion real_mysql_escape_string().

Ist man nicht sicher, ob der Code sauber ist, kann mod_security für den Apache helfen eine große Menge dieser Angriffe trotzdem abzuwehren. mod_security überprüft ständig alle Requests an den Webserver und reagiert auf vorgefertigte Muster mit denen viele SQL-Injection-Angriffe abgewehrt werden können. Leider funktioniert auch mod_security nur gut mit manuellem Aufwand. Oft blockt mod_security nach einer frischen Installation auch gewünschte (normale) Funktionen des eigenen PHP-Codes, so dass einem nichts anderes übrig bleibt, als die komplette Applikation nach der Installation einmal durchzutesten. Nur so findet man heraus, ob mod_security nicht eventuell auch gewünscht Funktionen blockt. Ist das der Fall, muss die Filterliste angepasst werden, so dass die false-positives verschwinden.

Die Konfiguration von mod_security ist etwas komplizierter und würde den Umfang dieses Artikels sprengen, es gibt aber massenweise gute Tutorials zu mod_security im Internet.

11. Ausweiskontrolle - Der Apache sagt nicht mehr, wer er ist
Dies ist keine wirklich wirkungsvolle Methode gegen einen Hack, sie macht es automatisierten Skripten, die nach Server-Versionen suchen aber etwas schwerer. Normalerweise zeigt der Apache auf Seiten mit Fehlermeldungen (z.B. 404 Not Found) seine Serversignatur.

Apache/2.2.16 (Debian) Server at www.daniel-ritter.de Port 80

So erhalten potentielle Angreifer zumindest schon einmal Informationen über den eigesetzten Webserver und den Versionsstand. Die Serversignatur ist schnell ausgeschaltet:

#/etc/apache2/conf.d/security
ServerSignature Off

12. Nicht benutze Apache-Module deaktivieren

Per default hat der Apache einige Module geladen, die fast nie benötigt werden. Unter Debian findet man die geladenen Module
als Softlinks in /etc/apache2/mods-enabled.

Fast immer entfernt werden können:

mod_cgi

Dient dem ausführen von CGI-Skripten. Diese Technik stammt noch aus den Urzeiten des Web und war der Vorvater der modernen Skriptsprachen um dynamische Webseiten zu ermöglichen. mod_cgi ist auf 99% der PHP-Websites unnötig und bei einer fehlerhaften Apache-Config eine potentielle Sicherheitslücke

a2dismod cgi

mod_status

Ermöglicht es Browsern Statusinformationen über den Apache auszulesen. Es wird so gut wie nie für "normale" Sites genutzt, bietet Angreifern aber Statusinformationen über den Apache.

a2dismod status

mod_autoindex

mod_autoindex sorgt dafür, dass Verzeichnisse auf dem Webserver aufgelistet werden können, wenn es keine gültige Index-Seite in dem entsprechenden Verzeichnis gibt. Falls diese Funktionalität nicht erwünscht ist, sollte man sie abschalten, da durch sie ganze Verzeichnisbäume auf dem Webserver nach aussen sichtbar werden können.

a2dismod autoindex
9Jun/110

Linux Server mit der Scam/Spam/Crime Blacklist von Infiltrated.net absichern

Im Internet gibt es viele böse Buben: Scammer, Hacker, Viagrabuden, Scriptkiddies, etc.

Infiltrated.net pflegt eine recht umfangreiche Liste auffällig gewordener Server unter http://www.infiltrated.net/blacklisted.

Wenn man Zugriff auf seinen Server oder auch sein Heimnetz von diesen IP's unterbindet, hat man bereits sehr viele Russen Proxies, Spammer und anderes Gesindel ausgesperrt.

Das folgende kleine Script saugt sich automatisch die aktuelle Liste und trägt die Hosts in die Firewall ein.

Mit einem Cronjob regelmässig gestartet, ermöglicht es ein Quentchen mehr Sicherheit für die eigenen Dienste.

#!/usr/bin/php
<?
# Zuerst bereits bestehende (eigene) Firewallrules ausführen
exec("/root/scripts/meine_standard_firewall_rules");

# Blacklist saugen
exec("wget -O /tmp/infiltrated_blacklist http://www.infiltrated.net/blacklisted");

$list = file("/tmp/infiltrated_blacklist");

$i = 1;

# Ein bisschen auseinanderschnibbeln und ab in Iptables
foreach ($list as $line)
{
$line = trim($line);
$line = str_replace("\t"," ",$line);

$line = explode(" ",$line);
$line = $line[0];

$firstchar = substr($line,0,1);
if (!is_numeric($firstchar))continue;

exec ("iptables -I INPUT -s $line  -j DROP");
$i++;
}

echo "done. $i rules set.";
?>
veröffentlicht unter: Linux keine Kommentare
28Mrz/110

The Adobe Flash plugin has crashed – Reparieren – Ubuntu – NVidia

Seit einer der letzten Firefox Versionen wollte Flash nicht mehr so richtig. Bei sehr vielen Videos crashte der Adobe Flash Player. Ich habe das Problem gelöst, bin mir aber nicht 100%ig sicher woran es lag. Ich tippe auf 2 Bugs: Einmal auf das Zusammenspiel der Hardwarebeschleunigung von Flash mit meiner Grafikkarte und zum anderen auf das neue Plugin-Crash-Handling von Firefox.

 

 

 

 

 

 

1. Hardwarebeschleunigung deaktivieren

In ein Flash-Video rechtsklicken. Einstellungen wählen. Haken bei Hardwarebeschleunigung entfernen.

2. Plugin-Crash-Handling von Firefox deaktivieren

about:config in der Adresszeile eingeben

Die Werte dom.ipc.plugins.processLaunchTimeoutSecs und dom.ipc.plugins.timeoutSecs auf "-1" setzen.

 

Seitdem habe ich keine Probleme mehr mit Ubuntu 10.10, Firefox 4 und Flash 10.2.153.1

 

veröffentlicht unter: Ubuntu keine Kommentare