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

<?xml-stylesheet type="text/xsl" href="/templates/2k11/rss.xsl" media="screen" ?>
<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>ITBlog - Sicherheit</title>
    <link>http://itblog.eckenfels.net/</link>
    <description>...ich werde diplomatisch sein, das ist meine Spezialität</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 2.6.1 - http://www.s9y.org/</generator>
    <pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate>

    <image>
    <url>http://itblog.eckenfels.net/templates/2k11/img/s9y_banner_small.png</url>
    <title>RSS: ITBlog - Sicherheit - ...ich werde diplomatisch sein, das ist meine Spezialität</title>
    <link>http://itblog.eckenfels.net/</link>
    <width>100</width>
    <height>21</height>
</image>

<item>
    <title>4096bit RSA Keys mit OpenPGP 2.1 Smartcards</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/513-4096bit-RSA-Keys-mit-OpenPGP-2.1-Smartcards.html</link>
            <category>Hardware</category>
            <category>Infrastruktur</category>
            <category>Sicherheit</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/513-4096bit-RSA-Keys-mit-OpenPGP-2.1-Smartcards.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=513</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=513</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;p&gt;Ich bereite die Einführung einer PGP PKI vor. Dazu habe ich mir ein paar Crypto Hardware Artikel beschafft und werde hier meine Erfahrungen verbloggen. Anfangen möchte ich mit den OpenPGP 2.1 Cards (von Zeitcontrol via &lt;a href=&quot;http://www.cryptoshop.com/open-pgp-smartcard-v2.html&quot;&gt;Cryptoshop&lt;/a&gt;). Die Karten lassen sich direkt in dem connected Smart Card reader meines betagten Dell Latitude E6510 unter Windows 7 ansprechen. Dabei kommt der eingebaute Broadcom Reader zum Einsatz:&lt;/p&gt; 
&lt;p&gt; &lt;/p&gt; 
&lt;pre&gt;c:\Program Files\OpenSC Project\OpenSC\tools&amp;gt;opensc-tool -v -l
# Detected readers (pcsc)
Nr.  Card  Features  Name
0    Yes             Broadcom Corp Contacted SmartCard 0
     3b:da:18:ff:81:b1:fe:75:1f:03:00:31:c5:73:c0:01:40:00:90:00:0c CryptoStick v1.2 (OpenPGP v2.0)

c:\Program Files (x86)\GNU\GnuPG&amp;gt;gpg2.exe --card-status
Application ID ...: D27600012401020100050000xxxx0000
Version ..........: 2.1
Manufacturer .....: ZeitControl
Serial number ....: 0000xxxx
Name of cardholder: Bernd Eckenfels
Language prefs ...: en
Sex ..............: männlich&lt;/pre&gt; 
&lt;p&gt;Läßt sich also ohne Probleme sowohl mit OpenSC 0.15.0 Win64 sowie GnuPG 2.0.29 (GPG2Win 2.3.0) ansprechen. Ich konnte mit dieser Kombination auch 3072bit RSA Schlüssel erstellen und nutzen. Problematisch wird es allerdings wenn man 4096bit RSA Schlüssel nutzen möchte. Die Karten bieten diese Option an (deswegen habe ich sie auch ausgewählt). Leider kann der eingebaute Reader keine Extended-APDU, somit schlägt der Versuch fehl entsprechende Keys zu erzeugen (eigentlich sollte er die Keys erzeugen können aber es sieht danach aus dass die anschliessende Übertragung fehlschlägt:&lt;/p&gt; 
&lt;pre&gt;tools&amp;gt; openpgp-tool -r 0 -v --verify CHV3 --pin 12345678 --gen-key 1 --key-len 3072
Connecting to card in reader Broadcom Corp Contacted SmartCard 0...
Using card driver OpenPGP card.
Fingerprint:
9DA81881C7139920120ABBF8C50BD95C 9A7C7684

tools&amp;gt; openpgp-tool -r 0 -v --verify CHV3 --pin 12345678 --gen-key 1 --key-len 4096
Connecting to card in reader Broadcom Corp Contacted SmartCard 0...
Using card driver OpenPGP card.
... multiple minutes later...
Failed to generate key. Error Transmit failed.

c:\Program Files (x86)\GNU\GnuPG&amp;gt; gpg2.exe --card-status
Application ID ...: D27600012401020100050000xxxx0000
Version ..........: 2.1
Manufacturer .....: ZeitControl
Serial number ....: 0000xxxx
Name of cardholder: Bernd Eckenfels
Language prefs ...: en
Sex ..............: männlich
URL of public key : [nicht gesetzt]
Login data .......: [nicht gesetzt]
Signature PIN ....: nicht zwingend
Key attributes ...: 4096R 4096R 4096R
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
...
&lt;/pre&gt; 
&lt;p&gt;Ach ja übrigens, noch ein paar Anmerkungen: Es ist wichtig gpg2.exe (nicht gpg.exe) zu verwenden, bei PGP4Win werden beide binaries in unterschiedlichen Versionen parallel installiert. Bei gpg2 muss man darauf achten dass es auf einige Hintergrundprozesse angewiesen ist (pinentry und scdaemon). Das kann schon mal zu Verwirrungen führen (z.b. Unter älteren Linux Varianten kann sich wohl ein Gnome daemon als pgp-agent ausgeben und dann smartcard befehle abweisen. Mit &lt;code&gt;gpg-connect-agent -v&lt;/code&gt; und dem Befehl &lt;code&gt;SCD GETINFO version&lt;/code&gt; lässt sich prüfen welcher Agent verwendt wird. In meinem Setup hängt sich auch die GPA artenverwaltng auch, habe noch nicht herausgefunden woran dies liegt.&lt;/p&gt; 
&lt;p&gt;Mit der Verwendung eines externen USB Readers der Extended APDU unterstützt (Gemalto IDBridge Ct710) lässt sich der 4096bit Key erstellen und nutzen:&lt;/p&gt; 
&lt;pre&gt;c:\Program Files\OpenSC Project\OpenSC\tools&amp;gt;opensc-tool -v -l
# Detected readers (pcsc)
Nr.  Card  Features  Name
0    Yes             Broadcom Corp Contacted SmartCard 0
     failed: Card not present
1    Yes   PIN pad   Gemalto IDBridge CT7xx 0
     3b:da:18:ff:81:b1:fe:75:1f:03:00:31:c5:73:c0:01:40:00:90:00:0c CryptoStick v1.2 (OpenPGP v2.0)

c:&amp;gt; echo debug-all &amp;gt; C:\users\eckenfel\AppData\Roaming\GnuPG\scdaemon.conf
c:&amp;gt; echo log file c:/temp/scdaemon.log &amp;gt;&amp;gt; C:\users\eckenfel\AppData\Roaming\GnuPG\scdaemon.conf
c:&amp;gt; echo reader-port &quot;Gemalto IDBridge CT7xx 0&quot; &amp;gt;&amp;gt; C:\users\eckenfel\AppData\Roaming\GnuPG\scdaemon.conf

c:\Program Files (x86)\GNU\GnuPG&amp;gt; gpg2 --card-edit -v

Application ID ...: D27600012401020100050000xxxx0000
Version ..........: 2.1
...
gpg/card&amp;gt; admin
gpg/card&amp;gt; generate
Make off-card backup of encryption key? (Y/n) n

gpg: NOTE: keys are already stored on the card!

Replace existing keys? (y/N) y
What keysize do you want for the Signature key? (3072) 4096
The card will now be re-configured to generate a key of 4096 bits
What keysize do you want for the Encryption key? (3072) 4096
The card will now be re-configured to generate a key of 4096 bits
What keysize do you want for the Authentication key? (3072) 4096
The card will now be re-configured to generate a key of 4096 bits
...
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
gpg: writing self signature
gpg: RSA/SHA256 signature from: &quot;CE551545 [?]&quot;
gpg: writing key binding signature
gpg: RSA/SHA256 signature from: &quot;CE551545 [?]&quot;
gpg: writing key binding signature
gpg: RSA/SHA256 signature from: &quot;CE551545 [?]&quot;
gpg: writing key binding signature
gpg: RSA/SHA256 signature from: &quot;CE551545 [?]&quot;
gpg: writing key binding signature
gpg: RSA/SHA256 signature from: &quot;CE551545 [?]&quot;
gpg: writing public key to `C:/Users/eckenfel/AppData/Roaming/gnupg/pubring.gpg&#039;
gpg: writing secret key stub to `C:/Users/eckenfel/AppData/Roaming/gnupg/secring.gpg&#039;
gpg: using PGP trust model
gpg: key CE551545 marked as ultimately trusted
public and secret key created and signed.

pub   4096R/CE551545 2016-06-05 [expires: 2016-06-06]
      Key fingerprint = 1C93 E95E 0486 C55C 0762  3629 20CC CA05 CE55 1545
uid       [ultimate] Bernd Eckenfels (test) &amp;lt;test@test&amp;gt;
sub   4096R/F738D4AE 2016-06-05 [expires: 2016-06-06]
sub   4096R/309D4991 2016-06-05 [expires: 2016-06-06]&lt;/pre&gt; 
&lt;p&gt;Das Erstellen von 3 Schlüsseln (inkl. Signaturen, ohne Encryption Key backup - d.h. auch auf der Karte erstellt) mit 4096 bit dauert (stark schwankend) 30 Minuten, die selbe Prozedur mit 3072 bit Schlüssel erfolgt in 8 Minuten.&lt;/p&gt; 
&lt;p&gt;Bei der Erstellung der Schlüssel gibt pgp2 wenige Zwischenschritte aus, man kann das ganze aber im scdaemon logfile nachvollziehen. Wie oben zu sehen war es auch notwendig den Klartext Namen des externen Card Readers zu konfigurieren, scdaemon hat &lt;code&gt;reader-port 1&lt;/code&gt; oder &lt;code&gt;reader-port 32769&lt;/code&gt; (trotz Neustart) schlichtweg ignoriert. Auch wenn der richtige Reader verwendet wird scheint die Debug Ausgabe nur den Slot des Readers aber nicht den gewählten Reader auszugeben:&lt;/p&gt; 
&lt;pre&gt;scdaemon[14808] Handhabungsroutine f³r fd -1 gestartet
scdaemon[14808] detected reader `Broadcom Corp Contacted SmartCard 0&#039;
scdaemon[14808] detected reader `Gemalto IDBridge CT7xx 0&#039;
scdaemon[14808] detected reader `&#039;
scdaemon[14808] reader slot 0: not connected&lt;/pre&gt; 
&lt;p&gt;Bei der Key-Erstellung hat gnupg2 das externe Keypad des Gemalto readers für die PIN Eingabe (noch) nicht benutzt.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 05 Jun 2016 21:11:13 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/513-guid.html</guid>
    
</item>
<item>
    <title>Password hashing in Oxwall (PHP password_hash)</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/510-Password-hashing-in-Oxwall-PHP-password_hash.html</link>
            <category>Enterprise IT</category>
            <category>Infrastruktur</category>
            <category>Sicherheit</category>
            <category>Technik</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/510-Password-hashing-in-Oxwall-PHP-password_hash.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=510</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=510</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;p&gt;While planning a new social network installation for the customer community of my employer I came across &lt;a href=&quot;http://www.oxwall.org&quot;&gt;Oxwall&lt;/a&gt; as a possible solution. It is an Web application on the PHP/MySQL stack which allows self-hosted communities. It runs with a small footprint on about any web server hosting platform and provides a simple Forum, Chat, Event Stream, User Blogs and Profiles and similar functions. This is a very good fit to our needs (as we have to migrate away from the old &lt;a href=&quot;http://www.mixxt.de&quot;&gt;Mixxt&lt;/a&gt; hosted community platform).&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;First we had a look a Ning, but as a Company located in Germany it is always complicated to host user-facing systems on US systems. Especially since EU and German data protection regulations for personal identifiable items might apply in this area. So if we cannot find a good German social network provider, we will consider hosting the application in our own data centers.&lt;/p&gt; 
&lt;p&gt;But before we invite out valuable customers to register on such a platform we do need to make sure their data stays safe. This is a business oriented social platform, so we do not really expect critical top secret information, but we do want to protect the most sensitive information, the users passwords. If you look at recent events in the media this is more than important. Thousands of cracked accounts and millions of leaked password hashes are available on the net. Even technology giants like Sony are not safe from being hacked. So it is absolutely important we protect our users and therefore our reputation - even for a simple application like a forum.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Oxwall password hashing&lt;/strong&gt; &lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;For this reason I reviewed a few security aspects of Oxwall (1.7.2), and want to talk here especially about how it stores user passwords.&lt;/p&gt; 
&lt;p&gt;Oxwall stores password hashes in the &lt;font face=&quot;courier new,courier,monospace&quot;&gt;ow_base_user&lt;/font&gt; table in the &lt;font face=&quot;courier new,courier,monospace&quot;&gt;password&lt;/font&gt; column as a 64-digit lower-case hex string. It represents the SHA-256 hash of the static OW_STATIC_SALT pepper concatenated with the user&#039;s password. This is all done in the &lt;font face=&quot;courier new,courier,monospace&quot;&gt;hash_password($password)&lt;/font&gt; function, the relevant code looks like:&lt;/p&gt; 
&lt;p&gt;./ow_system_plugins/base/bol/user_service.php:884:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return hash(&#039;sha256&#039;, OW_PASSWORD_SALT . $password);&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;OW_PASSWORD_SALT&lt;/font&gt; (which is actually a static pepper) is a 13 digit hex string generated at installation time and stored in &lt;font face=&quot;courier new,courier,monospace&quot;&gt;ow_includes/config.php&lt;/font&gt;. It is generated with the PHP &lt;font face=&quot;courier new,courier,monospace&quot;&gt;uniqid()&lt;/font&gt; function (current time in milliseconds in hex). This is not a very strong secret, but you can of course overwrite it (keep in mind, this will invalidate all existing password hashes).&lt;/p&gt; 
&lt;p&gt;In order to verify a password Oxwall uses the &lt;font face=&quot;courier new,courier,monospace&quot;&gt;isValidPassword($userid, $password)&lt;/font&gt; function, which will SHA-256 hash the provided password (one iteration) and compare it to the stored hash with PHP&#039;s === operator (which is not a constant time string comparision operation).&lt;/p&gt; 
&lt;p&gt;Oxwall does by the way enforce a minimum and maximum password length. The PASSWORD_MAX_LENGTH = 15 and PASSWORD_MIN_LENGTH = 4.&lt;/p&gt;&lt;strong&gt;Oxwall Password Protection Evaluation&lt;/strong&gt;&lt;br /&gt; 
&lt;p&gt;There are a number of problems with this:&lt;/p&gt; 
&lt;p&gt; By using a static salt (better known as pepper) all users who have the same password have the same hash (in one Oxwall installation). It also means an attacker can prepare a bit better for attacks, as they can check all user passwords with the same pre-compiled table. A globally unique salt for each password hash should be preferred to this.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;By not using a format specifier algorithm flexibility is limited. Oxwall would have to test old and new algorithms (or guess based on the length of the encrypted string).&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;Although SHA-2 is more complex to calculate compared to DES, SHA-1 or MD5 it is still a comparable fast operation which can be easily optimized in hardware. This is no longer regarded as a safe protection. Instead it is &lt;a href=&quot;http://php.net/manual/en/faq.passwords.php#faq.passwords.fasthash&quot;&gt;better&lt;/a&gt; to have an iterated algorithm (and optionally memory complexity).&lt;/p&gt; 
&lt;p&gt;The current function for verifying the password hash is not implemented with a constant-time comparison method. This means it could leak some information on the password hashes to remote attackers.&lt;/p&gt; 
&lt;p&gt;If you compare this with other PHP applications it is not a bad implementation, but it is surely not state of the art anymore. Oxwall really should aim for a modern implementation.&lt;/p&gt; 
&lt;p&gt;There is absolutely no reason to limit the length of a password to 15 characters. It can be even longer than the hash function. I would remove that limit or at least increase it to a sane value like 100 (or 128 if you want to look techy :). Oxwall should invest some more work into encouraging users to have safe passwords. This can include hooks to check for bad passwords. The current minimum of 4 characters is quite low (and it would be good if one can configure it without changing the code). &lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Modern PHP password hashing &lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;Luckily PHP 5.5 is providing &lt;a href=&quot;https://wiki.php.net/rfc/password_hash&quot;&gt;a password_hash() function&lt;/a&gt;. And if you cannot wait for it, there is a &lt;a href=&quot;https://github.com/ircmaxell/password_compat&quot;&gt;compatibility library&lt;/a&gt; from Anthony Ferrara which can be used on 5.3. The function supports generating random salts, it uses BCRYPT algorithm by default and uses the standard $2y$... hash format.&lt;/p&gt; 
&lt;p&gt;I feel it is a bit unfortunate, that PHP does not support an additional pepper argument (in the default implementation). It argues, that there is no official analysis how much additional protection it brings.&lt;/p&gt; 
&lt;p&gt;The RFC comments, that it is possible to encrypt the hashes in your database (with a pepper). This would add the protection, but it generates additional work. The pepper Oxwall is using is rather low entropy, so I think it is best to just drop it. This will also reduce the risk of losing this value.&lt;/p&gt; 
&lt;p&gt;Oxwall should use the password_hash function, not specify salt or cost parameters and implement the rehash checks, to make sure it automatically rehashes passwords whenever PHP modifies the settings.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 07 Mar 2015 23:50:00 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/510-guid.html</guid>
    
</item>
<item>
    <title>SSL Verkehr überwachen</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/509-SSL-Verkehr-ueberwachen.html</link>
            <category>Infrastruktur</category>
            <category>Sicherheit</category>
            <category>Technik</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/509-SSL-Verkehr-ueberwachen.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=509</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=509</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;p&gt;Im &lt;a href=&quot;http://itblog.eckenfels.net/archives/508-Der-Poodle-bellt-SSL-Sicherheitsschwaeche.html&quot;&gt;letzten Artikel&lt;/a&gt; (zur Poodle Lücke) habe ich die klare Empfehlung ausgesprochen SSL 3.0 (und 2.0 sowieso) abzuschalten, wenn es nicht mehr benötigt wird. Hier stellt sich natürlich sofort die Frage: &amp;quot;gibt es noch kritische Verwender von SSL3 in meinem Netz&amp;quot;.&lt;/p&gt; 
&lt;p&gt;Für die Unternehmens-IT kann das eine relativ komplizierte Angelegenheit werden die Owner aller Anwendungen zu befragen. Die Anwendungen zu ermitteln (einfach die Liste der freigeschaltenen Ports in der Firewall durchgehen) ist noch relativ einfach, ob aber die Befragten die Antwort kennen (oder die Frage verstehen) ist eine ganz andere Sache.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;SSL Log im Apache aktivieren&lt;/strong&gt; &lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;Dazu kommt noch das Problem dass in jeder Anwendung die Art und Weise wie man die verwendeten SSL Protokolle sehen kann unterschiedlich ist. Teilweise ist die Funktion nicht aktiviert oder lässt sich nur mit vielen zusätzlichen Debug Meldungen einschalten.&lt;/p&gt; 
&lt;p&gt;Bei einem Apache httpd ist es eigentlich zwingend das erweiterte SSL Log Format &amp;quot;combinedssl&amp;quot; immer zu verwenden:&lt;/p&gt; 
&lt;pre&gt;LogFormat &quot;%h %l %u %t \&quot;%r\&quot; %&amp;gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot; %{SSL_PROTOCOL}x %{SSL_CIPHER}x&quot; combinedssl
CustomLog /var/log/httpd/access.log combinedssl
&lt;/pre&gt; 
&lt;p&gt;Es ist praktisch, wenn die SSL/TLS Terminierung an möglichst wenigen Stellen erfolgt. Zum Beispiel einen Cluster aus Reverse Proxies oder Load Balancern. Und natürlich sollte für diese Dienste ein entsprechendes Log bereitstehen.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;tls-hello-dump&lt;/strong&gt; &lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;Aber nicht immer gibt es diese Möglichkeit (für alle Anwendungen). Insbesondere nicht bei Client Verbindungen. Es kann von daher notwendig sein auf Netzwerkebene den Datenstrom zu überwachen und eine Statistik zu erstellen (oder die IP Addressen der notorischen SSL3 Verwender manuell nach zu püfen. Es könnte ja auch der unternehmenskritische Bestellfluss des größten Auftraggebers sein). Ich vermute mal ein gutes Network Intrusion Detection System (NIDS) kann diese Statistiken liefern. Ist eine solche Klassifizierung des Traffics aber nicht gegeben, so beginnt die Suche nach einfachen Tools.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;Mit &lt;em&gt;tcpdump&lt;/em&gt; oder vergleichbaren Sniffern muss man recht viel selbst bauen. Auch &lt;a href=&quot;http://www.rtfm.com/ssldump/&quot;&gt;&lt;em&gt;ssldump&lt;/em&gt;&lt;/a&gt; ist hier recht sperrig (und auch nicht sehr aktuell). Das einfachste Tool was ich bisher gefunden habe ist &lt;a href=&quot;https://github.com/ge0rg/tls-hello-dump&quot;&gt;&lt;em&gt;tls-hello-dump&lt;/em&gt;&lt;/a&gt; von Georg Lukas. Es schreibt pro Handshake 2 Zeilen, eine für die vorgeschlagenen Ciphers des Clients (ClientHello) und eine für die vom Server angenommenen Parameter (ServerHello). Es setzt auf &lt;em&gt;libpcap&lt;/em&gt; auf, kann somit auf Linux/FreeBSD einfach eingesetzt werden. Es kann sowohl Verbindungen an das lokale System überwachen als auch Netzwerktraffic (solange der Host auf dem tls-hello-dump läuft am Netzwerkport der in PROMISC geschaltet ist alle Daten sieht).&lt;/p&gt; 
&lt;p&gt;Hier als Beispiel ein Chrome38/Apache2.2 Handshake sowie ein (unbeantworteter) &lt;em&gt;openssl s_client -ssl3 -connect&lt;/em&gt; versuch:&lt;/p&gt; 
&lt;pre&gt;109.192.117.164 195.49.138.57   TLSv1 ClientHello TLSv1.2 :CC14:CC13:
  C02B:C02F:009E:C00A:C009:C013:C014:C007:C011:0033:0032:0039:009C:
  002F:0035:000A:0005:0004:

195.49.138.57   109.192.117.164 TLSv1.2 ServerHello TLSv1.2 cipher C02F

109.192.117.164 195.49.138.57   SSLv3 ClientHello SSLv3 :C014:C00A:C022:
  C021:0039:0038:0088:0087:C00F:C005:0035:0084:C012:C008:C01C:C01B:
  0016:0013:C00D:C003:000A:C013:C009:C01F:C01E:0033:0032:009A:0099:
  0045:0044:C00E:C004:002F:0096:0041:0007:C011:C007:C00C:C002:0005:
  0004:0015:0012:0009:0014:0011:0008:0006:0003:00FF:&lt;/pre&gt; 
&lt;p&gt;Und das ganze noch einmal aufbereitet mit dem ebenfalls beigelegten &lt;em&gt;sed&lt;/em&gt; script,
welches aus den Hex-codes der Ciphers lesbare Namen macht.&lt;/p&gt; 
&lt;pre&gt;109.192.117.164 195.49.138.57   TLSv1 ClientHello TLSv1.2 :TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:
  TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:
  TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:
  TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
  TLS_ECDHE_ECDSA_WITH_RC4_128_SHA:TLS_ECDHE_RSA_WITH_RC4_128_SHA:TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
  TLS_DHE_DSS_WITH_AES_128_CBC_SHA:TLS_DHE_RSA_WITH_AES_256_CBC_SHA:TLS_RSA_WITH_AES_128_GCM_SHA256:
  TLS_RSA_WITH_AES_128_CBC_SHA:TLS_RSA_WITH_AES_256_CBC_SHA:TLS_RSA_WITH_3DES_EDE_CBC_SHA:
  TLS_RSA_WITH_RC4_128_SHA:TLS_RSA_WITH_RC4_128_MD5:

195.49.138.57   109.192.117.164 TLSv1.2 ServerHello &lt;strong&gt;TLSv1.2 cipher TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256&lt;/strong&gt;

109.192.117.164 195.49.138.57   SSLv3 ClientHello &lt;strong&gt;SSLv3&lt;/strong&gt; :TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
  TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA:TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA:
  TLS_DHE_RSA_WITH_AES_256_CBC_SHA:TLS_DHE_DSS_WITH_AES_256_CBC_SHA:TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA:
  TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA:TLS_ECDH_RSA_WITH_AES_256_CBC_SHA:TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA:
  TLS_RSA_WITH_AES_256_CBC_SHA:TLS_RSA_WITH_CAMELLIA_256_CBC_SHA:TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA:
  TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA:TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA:
  TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA:TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA:
  TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA:TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA:TLS_RSA_WITH_3DES_EDE_CBC_SHA:
  TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA:
  TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA:TLS_DHE_RSA_WITH_AES_128_CBC_SHA:TLS_DHE_DSS_WITH_AES_128_CBC_SHA:
  TLS_DHE_RSA_WITH_SEED_CBC_SHA:TLS_DHE_DSS_WITH_SEED_CBC_SHA:TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA:
  TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA:TLS_ECDH_RSA_WITH_AES_128_CBC_SHA:TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA:
  TLS_RSA_WITH_AES_128_CBC_SHA:TLS_RSA_WITH_SEED_CBC_SHA:TLS_RSA_WITH_CAMELLIA_128_CBC_SHA:TLS_RSA_WITH_IDEA_CBC_SHA:
  TLS_ECDHE_RSA_WITH_RC4_128_SHA:TLS_ECDHE_ECDSA_WITH_RC4_128_SHA:TLS_ECDH_RSA_WITH_RC4_128_SHA:
  TLS_ECDH_ECDSA_WITH_RC4_128_SHA:TLS_RSA_WITH_RC4_128_SHA:TLS_RSA_WITH_RC4_128_MD5:TLS_DHE_RSA_WITH_DES_CBC_SHA:
  TLS_DHE_DSS_WITH_DES_CBC_SHA:TLS_RSA_WITH_DES_CBC_SHA:TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA:
  TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA:TLS_RSA_EXPORT_WITH_DES40_CBC_SHA:TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5:
  TLS_RSA_EXPORT_WITH_RC4_40_MD5:TLS_EMPTY_RENEGOTIATION_INFO_SCSV:&lt;/pre&gt; 
&lt;p&gt;Ich hab ein paar Patches beigesteuert die es etwas robuster machen, 
man muss sich aber vor Augen halten dass das Tool nur sehr einfache 
Handshakes versteht (diese müssen im Anfang der gefilterten IPv4 Pakete stehen). Schon ein &lt;a href=&quot;https://github.com/ge0rg/tls-hello-dump/issues/6&quot; title=&quot;github issue&quot;&gt;TLS Alert&lt;/a&gt; (Warnung: unrecognized_name) verhindert, dass das ServerHello erkannt wird. Außerdem ist aktuell der Parser sehr ungenau was die Überprüfung der Paketformate angeht, es bietet sich also an das Tool nicht als Root auf einem kritischen System laufen zu lassen sondern vielmehr den Traffic mittels tcpdump -w file zu speichern und dann Offline auszuwerten (mit einem User ohne weitere Rechte).&lt;/p&gt; 
&lt;p&gt;Es sollte auch darauf hingewiesen werden dass es sich hier nur um die Handshakes handelt, Clients die viele erfolglose Verbindungen aufbauen sind in den Zahlen entsprechend überräpresentiert. Wenn eine persistente HTTPS connection tausende Anfragen verarbeitet steht diese nur einmal in der Liste. Ebenso sieht man nicht, ob ein Client, wenn er SSL3 offeriert bekam dieses auch akzeptiert (oder ablehnt).&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;tls-hello-dump kann nicht mit STARTLS (wie es z.B. in SMTP und IMAP Verwendung findet) umgehen. Das liegt hauptsächlich daran dass es sich nicht damit befasst die gefilterten Pakete zu TCP Strömen zusammenzusetzen. Das macht das Tool leichtgewichtig aber eben auch beschränkt. ssldump wäre für diesen Fall die bessere Wahl.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Compilieren und starten&lt;/strong&gt; &lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;tls-hello-dump steht auf GitHub als source code zur Verfügung (habe noch kein Binärpaket gesehen) und sollte auf jedem Linux Rechner mit entsprechenden Entwicklungspaketen übersetzbar sein:&lt;/p&gt; 
&lt;pre&gt;git clone https://github.com/ge0rg/tls-hello-dump.git
cd tls-hello-dump/
make clean all
FILTER=&quot;tcp port 443 and tcp[tcp[12]/16*4]=22 and (tcp[tcp[12]/16*4+5]=1 or tcp[tcp[12]/16*4+5]=2)&quot;
sudo tcpdump -p -s 1518 -i eth0 -w handshakes.pcap &quot;$FILTER&quot;
./tls-hello-dump handshakes.pcap | sed -f readable.sed 
&lt;/pre&gt; 
&lt;p&gt;Oder für die Mutigen: &amp;quot;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;sudo ./tls-hello-dump eth0 https | sed -f readable.sed&lt;/font&gt;&amp;quot;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 25 Oct 2014 01:03:08 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/509-guid.html</guid>
    
</item>
<item>
    <title>Der Poodle bellt (SSL Sicherheitsschwäche)</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/508-Der-Poodle-bellt-SSL-Sicherheitsschwaeche.html</link>
            <category>Infrastruktur</category>
            <category>Sicherheit</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/508-Der-Poodle-bellt-SSL-Sicherheitsschwaeche.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=508</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=508</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;p&gt;Wieder einmal macht eine Sicherheitslücke mit einem
klangvollen Namen die Runde. Poodle ist eine Schwachstelle in SSL 3.0, die sich
aber auch auf neuere Clients auswirkt. Ausgelöst wurde das ganze durch ein &lt;a href=&quot;http://googleonlinesecurity.blogspot.nl/2014/10/this-poodle-bites-exploiting-ssl-30.html&quot;&gt;Paper
der Google Sicherheitsforscher&lt;/a&gt; Bodo Möller, Thai Duong und Krzysztof Kotowicz.
Warum Sites wie Twitter mit der Abschaltung von SSL 3.0 reagieren möchte ich
hier kurz darstellen.&lt;/p&gt; 
&lt;p&gt;Zuerst einmal eine Feststellung: SSL 3.0 (das &lt;em&gt;Secure Socket Layer Protokoll&lt;/em&gt; in der
Version 3.0 von 1996, nachträglich in &lt;a href=&quot;https://tools.ietf.org/html/rfc6101&quot;&gt;RFC6101&lt;/a&gt; dokumentiert) ist (trotz
der Versionsnummer) der Vorgänger von TLSv1, TLS 1.1 oder dem aktuellen TLS 1.2
(&lt;a href=&quot;http://tools.ietf.org/html/rfc5246&quot;&gt;RFC5246&lt;/a&gt;). Es hat eine Reihe
von Sicherheitsproblemen und Unschönheiten und sollte schon länger nicht mehr
verwendet werden.&lt;/p&gt; 
&lt;p&gt;Die Poodle Lücke hat das nur bestätigt: Durch eine
ungeschickte Verwendung von Füll-Bytes bei dem &lt;a href=&quot;http://de.wikipedia.org/wiki/Cipher_Block_Chaining_Mode&quot;&gt;CBC Modus&lt;/a&gt; (verwendet
für DES, 3DES und RC2) kann ein Angreifer der mehrere SSL Anfragen beeinflussen
und abhören kann, auf den Inhalt schließen. Diese Schwachstelle ist ähnlich zu
der bereits vor einiger Zeit bekannt gewordenen BEAST Lücke.&lt;/p&gt; 
&lt;p&gt;Es sind verschiedene Situationen denkbar, bei denen diese
Lücke ausgenutzt werden kann, aber im Web Browser Umfeld ist es dank JavaScript
und Userinteraktion am Einfachsten.&lt;/p&gt; 
&lt;p&gt;Für SSL 3.0 kann dies nicht behoben werden (und selbst wenn
wäre es einfacher direkt TLS 1.2 zu verwenden das die Lücke nicht hat). Bei
Clients und Server die SSL 3.0 noch einsetzen könnte man die betroffenen CBC
Ciphers abschalten, das ist aber leider keine sehr attraktive Lösung da sonst
nur noch die eher unsichere RC4 Stromchiffre verwendet werden könnte.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;SSL 3.0 muss sterben&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Ohne jetzt nun näher zu bewerten wie einfach oder wie schwer
die Lücke in welcher Situation ausgenutzt werden kann sind sich eigentlich alle
einig: SSL 3.0 sollte nicht mehr verwendet werden und kann in Clients und
Servern endlich abgeschaltet werden. Dies nimmt somit auch schon die Empfehlung
vorweg und &lt;a href=&quot;http://www.theregister.co.uk/2014/10/14/google_drops_ssl_30_poodle_vulnerability/&quot;&gt;den
Weg gehen alle&lt;/a&gt; mehr oder weniger schnell.&lt;/p&gt; 
&lt;p&gt;Ob man die Unterstützung für SSL 3.0 abschalten kann hängt vor
allem damit zusammen ob alle potentiellen Gegenstellen ein gemeinsames neueres
Protokoll sprechen. Als Web Server Betreiber stellt sich die Situation recht
einfach dar: alle Clients außer Internet Explorer 6 auf einem Windows XP (und
älter) können mindestens TLSv1, die meisten auch schon 1.1 oder 1.2 (wobei es
nicht alle angeschaltet haben).&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Internet Explorer 6
muss brennen&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Aus einer ganzen Reihe von Gründen ist es eigentlich nicht
mehr wünschenswert IE 6 zu benutzen, und schon gar nicht zu fördern. Da es
selbst für Anwender die auf XP festsitzen Alternativen gibt (darunter Firefox
und IE 7-8) sollte man inzwischen keinen Gedanken verschwenden und SSL 3.0 in
öffentlichen Web Servern sofort abschalten.&lt;/p&gt; 
&lt;p&gt;CloudFlare, ein CDN und Cloud Security Dienstleister der
weltweit viele Websites schützt und ausliefert hat Statistiken &lt;a href=&quot;https://blog.cloudflare.com/sslv3-support-disabled-by-default-due-to-vulnerability/&quot;&gt;veröffentlicht&lt;/a&gt;,
sie werden SSL 3.0 abschalten:&lt;/p&gt; 
&lt;blockquote&gt;Across
our network, 0.09% of all traffic is SSLv3. For HTTPS traffic, 0.65% across our
network &lt;span&gt; &lt;/span&gt;uses SSLv3. The good news is
most of that traffic is actually attack traffic and some minor &lt;span&gt;&lt;/span&gt;crawlers. For real visitor traffic,
today 3.12% of CloudFlare&#039;s total SSL traffic comes from Windows XP &lt;span&gt; &lt;/span&gt;users. Of that, 1.12% Windows XP users
connected using SSLv3. In other words, even on an out-of-date operating system, 98.88% Windows XP users
connected using TLSv1.0+ — which is
not vulnerable to this vulnerability.
&lt;/blockquote&gt; 
&lt;p&gt;Wenn man weg geht von dem reinen Webbrowser/Server Umfeld,
so ist die Unterstützung von neueren Protokollen nicht ganz so klar. Allerdings
ist TLSv1 bereits in Java SE 1.4 enthalten, und so dürfte die Anzahl der
Endpunkte die kein TLS können sich auf spezielle Embedded Hardware (und falsch
konfigurierte Software) beschränken. Im System-to-System oder MFT Umfeld ist
das Risiko der POODLE Lücke deutlich geringer (weil der interaktive Einfluss fehlt),
aber auch hier wäre es ratsam und Risikofrei SSL 3.0 einfach abzuschalten.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;SSL Fallback&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Wenn sowohl Client als auch Server das TLS Protokoll sprechen
so können Sie dies beim Verbindungsaufbau erkennen, und die gemeinsam
gesprochene beste Version aushandeln. Dank Überprüfung dieses Handshakes ist es
einem Angreifer auch nicht möglich der jeweils anderen Seite eine niedrigere
Version vorzugaukeln.&lt;/p&gt; 
&lt;p&gt;Allerdings gibt es bei der Sache einen Haken: da manche
Clients wenn ein Verbindungsaufbau mit einem TLS Handshake nicht klappt das
ganze erneut mit einer älteren Version versuchen (out-of-band protocol
fallback). Ein Angreifer muss damit nicht den ersten Handshake ändern (was TLS
erkennt), sondern nur aufhalten (in der Praxis passiert dies sogar bei
Überlastung ganz ohne Angreifer, was ebenso nicht erwünscht ist). Wenn der
Client einen erneuten Versuch unternimmt und dabei nur SSL 3.0 ankündigt, so
gelingt der Handschlag zwischen Client und Server mit einer unnötig alten (und
unsicheren) Protokoll Version.&lt;/p&gt; 
&lt;p&gt;Dieser Downgrade Angriff ist Bestandteil der POODLE Lücke
(wenn neuere Client und Server verwendet werden). Zur Verhinderung davon gibt
es mehrere Möglichkeiten:&lt;/p&gt; 
&lt;ul&gt; 
&lt;li&gt;Clients verzichten auf den Fallback handshake
und verlassen sich auf die TLS Versionslogik (dazu gehört zum Beispiel Java,
wenn der Entwickler die Logik nicht selbst implementiert hat)&lt;/li&gt; 
&lt;li&gt;Auf Clients und Servern unsichere
Protokollversionen gar nicht anbieten (SSL 3.0 abschalten)&lt;/li&gt; 
&lt;li&gt;Ein neuer Mechanismus bei dem ein Client der
einen kompatiblen Handschlag versucht eine Markierung (die nicht entfernt
werden kann) mitschickt, dass es ein Kompatibilitätsversuch ist. Server die von
dieser Markierung wissen würden den Handschlag dann ablehnen (wenn sie eine
neuere Version sprechen).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Letzteres
wird &lt;a href=&quot;https://tools.ietf.org/html/draft-bmoeller-tls-downgrade-scsv-01&quot;&gt;TLS_FALLBACK_SCSV&lt;/a&gt;
genannt, es handelt sich um eine sogenannte Signalling Cipher, die aktuell in
Diskussion ist (und &lt;a href=&quot;http://googleonlinesecurity.blogspot.de/2014/10/this-poodle-bites-exploiting-ssl-30.html&quot;&gt;Google
Chrome&lt;/a&gt; sendet dies schon einige Zeit, &lt;a href=&quot;https://blog.mozilla.org/security/2014/10/14/the-poodle-attack-and-the-end-of-ssl-3-0/&quot;&gt;Firefox
ab Version 35&lt;/a&gt;). Damit diese funktionieren kann, müssen aber die Server
diese auch kennen. Die Erweiterung ist umstritten, denn für den Fall SSL 3.0
ist ein abschalten einfacher, und für zukünftige TLS Protokoll sollten die
Clients einen Fallback einfach gar nicht durchführen.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;TLSv1&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;So positiv wie es zu sehen ist, dass sehr viele Lösungen
mindestens TLSv1 sprechen, so ist dies auch ein deutliches Warnzeichen: TLSv1
ist auch schon stark angekratzt. Die meisten wirklich wünschenswerten
Verbesserungen sind erst in TLSv1.1 oder 1.2 zu finden. Schon heute können
Sicherheitsbewusste Anbieter TLSv1 abschalten (Der Mozilla Server Side TLS
Security Guide nennt dies „&lt;a href=&quot;https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility&quot;&gt;Modern
Compatibility&lt;/a&gt;“). Es ist entsprechend anzuraten gleich jetzt zu evaluieren
ob man auch gleich TLSv1 verbannen möchte und sicherzustellen dass TLSv1.2
angeboten wird (und so konfiguriert ist, dass es &lt;a href=&quot;http://www.heise.de/security/artikel/Zukunftssicher-Verschluesseln-mit-Perfect-Forward-Secrecy-1923800.html&quot;&gt;Perfect
Forward Secrecy&lt;/a&gt; unterstützt und auf Zertifikaten basiert die mit SHA2 &lt;a href=&quot;http://www.heise.de/security/meldung/Fragwuerdige-Hash-Funktion-SHA-1-immer-noch-beliebt-2106581.html&quot;&gt;statt
SHA1 oder gar MD5&lt;/a&gt; signiert sind).&lt;/p&gt; 
&lt;p&gt; &lt;/p&gt; 
&lt;p&gt;&lt;u&gt;Zum weiterlesen&lt;/u&gt;&lt;/p&gt; 
&lt;ul&gt; 
&lt;li&gt;&lt;a href=&quot;https://securityblog.redhat.com/2014/10/20/can-ssl-3-0-be-fixed-an-analysis-of-the-poodle-attack&quot;&gt;https://securityblog.redhat.com/2014/10/20/can-ssl-3-0-be-fixed-an-analysis-of-the-poodle-attack&lt;/a&gt;&lt;/li&gt; 
&lt;li&gt;&lt;a href=&quot;http://googleonlinesecurity.blogspot.de/2014/10/this-poodle-bites-exploiting-ssl-30.html&quot;&gt;http://googleonlinesecurity.blogspot.de/2014/10/this-poodle-bites-exploiting-ssl-30.html&lt;/a&gt;&lt;/li&gt; 
&lt;li&gt;&lt;a href=&quot;https://blog.cloudflare.com/sslv3-support-disabled-by-default-due-to-vulnerability/&quot;&gt;https://blog.cloudflare.com/sslv3-support-disabled-by-default-due-to-vulnerability/&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
    </content:encoded>

    <pubDate>Tue, 21 Oct 2014 22:17:00 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/508-guid.html</guid>
    
</item>
<item>
    <title>Heartbleed, woher kommt der Name</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/504-Heartbleed,-woher-kommt-der-Name.html</link>
            <category>Infrastruktur</category>
            <category>Sicherheit</category>
            <category>Technik</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/504-Heartbleed,-woher-kommt-der-Name.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=504</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=504</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;p&gt; &lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Wieder einmal macht SSL/TLS Schlagzeilen, dieses mal durch eine Sicherheitslücke in OpenSSL mit der Bezeichnung &lt;a href=&quot;http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160&quot;&gt;CVE-2014-0160&lt;/a&gt; und dem Spitznamen &amp;quot;Heartbleed&amp;quot;. Aber woher kommt dieser Name?&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Der Name setzt sich zusammen aus dem Begriff &amp;quot;Heartbeat&amp;quot; also Herzschlag und &amp;quot;to bleed&amp;quot; also bluten - oder wie in diesem Fall ausbluten.&lt;/p&gt; 
&lt;p&gt;Der technische Titel ist &amp;quot;TLS heartbeat read overrun&amp;quot;. Angefangen hat alles mit einer TLS Erweiterung die im &lt;a href=&quot;https://tools.ietf.org/html/rfc6520&quot;&gt;RFC 6520&lt;/a&gt; &amp;quot;TLS/DTLS &lt;strong&gt;Heartbeat Extension&lt;/strong&gt;&amp;quot; (Februar 2012) definiert ist. Diese erlaubt es in TLS Verbindungen (oder bei DTLS Paketen) zusätzlich zu den normalen verschlüsselten Sitzungsdaten auch beliebig große herzschlag Nachrichten auszutauschen. Diese sind benannt nach Ihrer Funktion: dem Nachweis dass die Gegenseite noch am Leben ist und erreichbar ist. Im Falle von DTLS wird die Möglichkeit zu bestimmen wie viele Daten gesendet (und wieder zurückgesendet werden) dazu benutzt um auszumessen was die maximale Paketgröße ist die aktuell verwendet werden kann.&lt;/p&gt; 
&lt;p&gt;Die Erweiterung an sich ist keine schlechte Idee (auch wenn natürlich alle Erweiterungen immer ein Risiko darstellen). Die Verwendung der Heartbeat Extension wird gegenseitig beim Verbindungsaufbau ausgehandelt, und nicht jede Software untersützt diese Funktion bereits. Mit einem &lt;a href=&quot;https://github.com/openssl/openssl/commit/4817504d069b4c5082161b02a22116ad75f822b1#diff-38dc72994741420e2b6c5ee074941a45R1455&quot; title=&quot;github mirror of commit&quot;&gt;Patch&lt;/a&gt; hielt diese Funktion dann auch vor 2 Jahren Einzug in OpenSSL &lt;strong&gt;1.0.1&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;Und dabei wurde, wie es schon zu erwarten ist ein Programmierfehler begangen: DTLS und TLS sind leider nicht die einfachsten Protokolle. Daten werden in &lt;em&gt;Records&lt;/em&gt; übertragen, deren Länge am Anfang steht. Darin finden sich dann Nachrichten unterschiedlichen Types - wie zB die Heartbeat Anfrage und Antwort. Da die Nachrichten selbst unterschiedliche Länge haben wird innerhalb der Nachrichtenstruktur nochmal übertragen wie lange die Nachricht ist. Was der Code jetzt fälschlicherweise tut ist, er kopiert die heartbeat Daten der Anfrage in das Antwortpaket aber verlässt sich dabei auf die Längenangabe der Anfrage-Nachricht ohne vorher zu prüfen ob diese in den übertragenen SSL Record gepasst hätte.&lt;/p&gt; 
&lt;p&gt;Damit kopiert die Funktion nicht nur Daten des Angreifers sondern eben auch beliebige Speicherinhalte dahinter in die Antwortnachricht. Diese wird dann sauber und sicher verschlüsselt und zurückgesendet. Mit jeder Heartbeat Antwort können so knapp 64kb Daten aus dem Innersten des Prozesses an den Angreifer gesendet werden, &lt;strong&gt;der Prozess blutet damit quasi aus&lt;/strong&gt;. Betroffen sind alle OpenSSL Versionen zwischen &lt;strong&gt;1.0.1,1.0.1a-f&lt;/strong&gt; sowie &lt;strong&gt;1.0.2-beta&lt;/strong&gt;s.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;Behoben ist das Problem in &lt;strong&gt;1.0.1g&lt;/strong&gt; (und zukünftig 1.0.2) nachdem sowohl &lt;em&gt;Google&lt;/em&gt; als auch &lt;em&gt;Codenomicon&lt;/em&gt; den Bug entdeckt und an das &lt;em&gt;OpenSSL&lt;/em&gt; Team gemeldet haben (Wenn man der sehr vollständigen Beschreibung auf &lt;a href=&quot;http://heartbleed.com/&quot;&gt;heartbleed.com&lt;/a&gt; glauben darf).&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;Was in den Daten steht die der Angreifer sich SSL gesichert herunterladen kann ist schwer zu sagen. Man sollte aber auf jeden Fall davon ausgehen dass der SSL Schlüssel des Servers sowie zufällige Sitzungsdaten davon betroffen sind. (Update 2014-04-26: inzwischen ist es &lt;a href=&quot;http://www.lightbluetouchpaper.org/2014/04/25/heartbleed-and-rsa-private-keys/&quot;&gt;klar (Rubin Xu)&lt;/a&gt;, warum Teile des Schlüssels immer wieder im Heap auftauchen.)&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;BTW: wer es genau wissen will: &lt;a href=&quot;http://m.xkcd.com/1354/&quot;&gt;XKCD#1354 &lt;/a&gt;:)&lt;br /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 08 Apr 2014 19:06:25 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/504-guid.html</guid>
    
</item>
<item>
    <title>SSL Renegotiation DoS und Java JSSE SSLServerSocket</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/495-SSL-Renegotiation-DoS-und-Java-JSSE-SSLServerSocket.html</link>
            <category>Java Programming</category>
            <category>Sicherheit</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/495-SSL-Renegotiation-DoS-und-Java-JSSE-SSLServerSocket.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=495</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=495</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Öffentlich zugängliche SSL/TLS Dienste bilden das Rückgrat der Internet Anwendungen und haben zugleich das Problem, dass der initiale Handshake eine CPU intensive Crypto-Operation auf dem Server erfordert. Das ist deswegen problematisch, weil der Server erst nach dieser Operation feststellen kann ob der Client den Rechenaufwand ebenfalls eingegangen ist, oder einfach nur zufällige Daten beim Schlüsselaustausch geschickt hat. Dieses Ungleichgewicht kann ein Angreifer bei einem DoS (Deny of Service) Angriff ausnutzen und wiederholt (ggf. von verschiedenen bots) eine solche SSL Verbindung anfordern. Dadurch kann es dann zu Überlastungen der Server kommen, ohne dass der Angreifer viele Ressourcen investieren müsste. 

Diese Form des SSL DoS lässt sich aber zum Glück einfach erkennen und dank Rate Limits in Firewalls oder SSL Accelerators auch einfach abwehren. Etwas problematischer ist es da schon, dass auch in einer bestehenden TLS Verbindung die Gegenstelle eine neue Aushandlung der Schlüsseldaten anfordern kann. Dazu sind keine von der Firewall bemerkbaren neuen Verbindungen notwendig, und auch die Handshake Records die bei SSL ausgetauscht werden sind als solche nur mit anfälliger Heuristik zu erkennen.

Wenn man das nun mit der Eigenheit von RSA kombiniert, dass das entschlüsseln auf der Serverseite mehr CPU Zeit beansprucht als die Verschlüsselunsoperation, so erhält man eine neue Klasse von Angriffen auf die die &lt;a href=&quot;https://twitter.com/hackerschoice/status/257016572743389184&quot;&gt;&lt;strike&gt;deutsche&lt;/strike&gt;internationale&lt;/a&gt; Security Research Gruppe THC 2011 &lt;a href=&quot;http://thehackerschoice.wordpress.com/2011/10/24/thc-ssl-dos/&quot;&gt;aufmerksam&lt;/a&gt; gemacht hat. Und obwohl ein dDoS Angriff auf den initialen Handshake um ein vielfaches wirkungsvoller ist hat die Veröffentlichung des Tools einige Hersteller dazu bewegt etwas dagegen zu unternehmen (die meisten schalten die Renegotiation komplett ab). Hinweis: THC spricht von Faktor 15 mehr Rechenaufwand auf dem Server als auf dem Client, dem widersprechen allerdings die Zahlen von Vincent (s.u.).

Jedenfalls ist es für einen öffentlich angebotenen SSL Server wichtig die Renegotiation Anfragen der Clients zu erkennen und zu limitieren. Neben den häufig verwendeten nativen Libraries wie puressl oder openssl gibt es auch noch weitere Implementierungen, z.B. den &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLServerSocket.html&quot;&gt;SSLServerSocket&lt;/a&gt; bei Java (im Falle der JVM von Oracle mit der ehemals von Sun stammenden &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html&quot;&gt;JSSE Implementierung&lt;/a&gt;). Für diese bleiben aktuell zwei Strategien:

a) HandshakeListener auf jedem SSLServerSocket registrieren: dieser wird bei jedem erfolgreichen Handshake aufgerufen, er kann also mitzählen und ggf. Gegenmaßnahmen einleiten. Das hat aber einen großen Nachteil: der Listener selbst wird Asynchron in einem neuen Thread aufgerufen. Und dies auch dann wenn die Funktion im Listener nicht mehr macht als einen Zähler hochzählen. Das starten des Threads ist im Vergleich dazu viel belastender für den Server. Es sollte also vermieden werden überhaupt einen Listener zu registrieren.

b) Nach dem initialen Handshake die Liste der erlaubten Ciphers auf eine leere Liste setzen. Das führt dazu, dass alle weiteren Handshake Anfragen mit einem SSL Alert abgebrochen werden. Leider gilt das allerdings auch für Handshakes die vom Server angefordert werden (z.B. wenn Client Zertifikate angefordert werden sollen) oder auch bei sehr seltenem Schlüsselaustausch (bei lange bestehenden SSL Verbindungen sinnvoll).

Ich würde mir deswegen wünschen Oracle bessert hier an zwei Stellen nach: zum einen sollte man bei SSLServersockets direkt die Renegotiation die von Clients angefordert wird mittels eines Flags ignorieren/ablehnen können. Zudem macht es Sinn wenn der SSLServerSocket diese automatisch in der Anzahl begrenzen. Zum anderen sollte es möglich sein auf die Erzeugung eines Threads pro Handshake Event zu verzichten, z.b. indem der Anwender einen eigenen Executor mitgeben kann (der einen Pool hat oder aber bei sehr leichtgewichtigen Listener einfach synchron ausführt).

Übrigens bietet die JSSE2 Implementierung von IBM eine Systemproperty (com.ibm.jsse2.renegotiate=NONE) an, mit der man die Renegotiation ausschalten kann. Im Falle von Oracle kann nur die unsichere Renegotiation (ohne &lt;a href=&quot;http://tools.ietf.org/html/rfc5746&quot;&gt;RFC5746&lt;/a&gt;) verboten werden. Das hilft aber nicht gegen den DOS Angriff.

&lt;b&gt;Zum Weiterlesen&lt;/b&gt;&lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://www.educatedguesswork.org/2011/10/ssltls_and_computational_dos.html&quot;&gt;SSL/TLS and Computational DoS&lt;/a&gt; (Eric Rescorla)&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://vincent.bernat.im/en/blog/2011-ssl-dos-mitigation.html&quot;&gt;SSL computational DoS mitigation&lt;/a&gt; (Vincent Bernant)&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://www.imperialviolet.org/2011/11/22/forwardsecret.html&quot;&gt;Forward Secrecy for Google HTTPS&lt;/a&gt; (Adam Langley)&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://github.com/ecki/JavaCryptoTest/blob/master/src/main/java/net/eckenfels/test/ssl/JSSESocketServer.java&quot;&gt;JSSESocketServer.java testcode&lt;/a&gt; (GitHub Bernd Eckenfels)&lt;/li&gt;&lt;/ul&gt;
 
    </content:encoded>

    <pubDate>Mon, 24 Dec 2012 00:16:57 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/495-guid.html</guid>
    
</item>
<item>
    <title>HTTP Header und Browser Sicherheit</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/494-HTTP-Header-und-Browser-Sicherheit.html</link>
            <category>Sicherheit</category>
            <category>SW Entwicklung</category>
            <category>Technik</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/494-HTTP-Header-und-Browser-Sicherheit.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=494</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=494</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;p&gt;
Web Anwendungen werden immer essentieller und es zeigen sich immer mehr Schwachstellen und Risiken. Als Web Application Entwickler kann man einige Technologien verwenden (die mehr oder weniger verbreitet sind) um das Risiko zu reduzieren. Hier möchte ich Funktionen sammeln die als &amp;quot;neue&amp;quot; HTTP Header bereitgestellt werden:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Content-Security-Policy&lt;/strong&gt;: (CSP) Dieser HTML5 Header erlaubt es dem Web Server der eine HTML Seite ausliefert Beschränkungen für den html/javascript code zu definieren in Bezug auf Quellen für Code (und andere Ressourcen wie Fonts und Bilder). Sinnvoll ist dieses Verfahren insbesondere in Verbindung mit Web Seiten die keinen Inline JavaScript code enthalten (nur script tags) sowie auf eval in JavaScript verzichten. Eine gute Zusammenfassung findet sich auf &lt;a href=&quot;http://www.html5rocks.com/en/tutorials/security/content-security-policy/&quot;&gt;html5rocks.com&lt;/a&gt;. Leider ist die Unterstützung in den Browsern noch eingeschränkt und die verschiedenen Engines benutzen noch nicht den offiziellen Header name. [&lt;a href=&quot;http://www.w3.org/TR/CSP/&quot;&gt;W3C Working Draft Content Security Policy 1.0&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strict-Transport-Security&lt;/strong&gt;: (HSTS) Ein Problem mit https (SSL/TLS) ist, wenn es &lt;a href=&quot;http://www.heise.de/ix/meldung/Studie-Informationen-trotz-SSL-Verschluesselung-nicht-sicher-1742426.html&quot;&gt;nicht&lt;/a&gt; oder falsch verwendet wird. Mit dem HSTS header wurde eine Möglichkeit geschaffen dass Web-Seiten dem Browser der User dazu zwingen können für bestimmte URLs nur die SSL Variante zuzulassen. Der Nutzen ist ein wenig umstritten, da es zum einen noch das Henne und Ei Problem gibt und zum Anderen der Header nicht vor man-in-the-middle (MITM) Angriffen oder Phisching Angriffen mittels alternativen URLs schützen kann. Es ist aber trotzdem eine gute Idee den Header einzusetzen, vor allem wenn die Browser Hersteller dann &lt;a href=&quot;http://www.heise.de/newsticker/meldung/Firefox-macht-es-HTTPS-Lauschern-kuenftig-schwerer-1745237.html&quot;&gt;eigene Listen&lt;/a&gt; erstellen und diese fest mit der Software ausliefern (und damit das Henne und Ei Problem umgehen). Die &lt;a href=&quot;https://www.owasp.org/index.php/HTTP_Strict_Transport_Security&quot;&gt;OWASP Initiative&lt;/a&gt; hat weiterführende Informationen. [&lt;a href=&quot;http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1&quot;&gt;IETF WEBSEC Draft: HTTP Strict Transport Security&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Access-Control-Allow-Origin&lt;/strong&gt;: (CORS) Die Access-Control-Allow Header sind genau genommen kein Mechanismus um die Möglichkeiten einer Web Seite zu beschränken, sondern um diese feingranular um Zugriffe auf fremde Server (die dem zustimmen) zu erweitern. Dies erlaubt unter anderem die Vermeidung des eher problematischen JSON-P Verfahrens (das auf JavaScript &lt;em&gt;eval&lt;/em&gt; basiert). Eine gute Beschreibung wie das Verfahren eingesetzt werden kann findet sich bei &lt;a href=&quot;http://www.html5rocks.com/en/tutorials/cors&quot;&gt;html5rocks.com&lt;/a&gt;. [&lt;a href=&quot;http://www.w3.org/TR/cors/&quot;&gt;W3C Working Draft Cross Origin Resource Sharing&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cache-Control: no-store&lt;/strong&gt; Diese Einstellung bietet sich vor allem für dynamisch erstellte HTML Seiten an die sensible Daten enthaten die nicht permanent auf dem Client Rechner gespeichert werden sollen. Es sollte nicht für statische ressourcen (Bilder) gesetzt werden, da dies Geschwindigkeit der Web Anwendung durch ständiges neu-übertragen eben solcher verschlechtert. [&lt;a href=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.2&quot;&gt;W3C RFC2616 HTTP/1.1&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cookies: HttpOnly secure&lt;/strong&gt; Cookies werden in Web Anwendungen unter anderem dazu eingesetzt Einstellungen oder Details auf dem Client zu erinnern oder eine Session ID zu speichern. Damit sind Cookies eine Achillesferse jedes Authorisationssystems und bedürfen besonderem Schutz (vor Einsichtname oder Auslesen). Wenn ein Server ein Cookie mittels Header anlegt, so kann er diesen Attribute mitgeben die zum einen regeln wann das Cookie zurückgeschickt wird (&lt;em&gt;secure&lt;/em&gt; = nur wenn https methode verwendet wird) und zum anderen ob das Cookie mittels JavaScript/DOM ausgelesen werden kann, oder einfach nur für alle weiteren Zugriffe bereitsteht. Web Anwendungen sollten zum Schutz der Session Information unbedingt dieses Verfahren erzwingen: session cookies mit &lt;em&gt;HttpOnly&lt;/em&gt; Attribut. [&lt;a href=&quot;http://tools.ietf.org/html/rfc6265#section-4.1.2&quot;&gt;IETF RFC6255 HTTP State Management Mechanism&lt;/a&gt;]

&lt;strong&gt;X-Frame-Option:&lt;/strong&gt; Erlaubt Web Seiten die nicht in Frames eingesperrt werden dürfen. Dies hat den Vorteil dass es Angreifern etwas schwerer gemacht wird eine Webseite anzuzeigen die normale Funktionalitäten bereitstellt, der Angreifer aber Clicks und Eingaben abfangen kann. Außerdem bietet es auch Schutz Trittbrettfahrern die Ihre eigenen Vorstellungen von Betrieb eines Services haben. (&lt;a href=&quot;http://blogs.msdn.com/b/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx&quot;&gt;IE8 Security Blog: Clickjacking Defense&lt;/a&gt;) [Quelle?]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Server:/X-Powered-By:/Via:&lt;/strong&gt; Um es (automatisierten) Angreifern nicht so einfach zu machen sollten Header die eine schnelle Identifikation (&lt;a href=&quot;https://www.owasp.org/index.php/Testing_for_Web_Application_Fingerprint_%28OWASP-IG-004%29&quot;&gt;Fingerprinting&lt;/a&gt;) der eingesetzten Software Version erlauben entfernt (im Fall von X-Powered-By: was gerne von JSP compilern erstellt wird) werden. Der Punkt ist eher umstritten: es reduziert die Gefahr dass bekannte Lücken einfach ausprobiert werden nicht, dafür erschwert es den Administrator und Partnern die Überprüfung der Konfiguration. Da aber viele Assessment Tools das Vorhandensein der Header anmerken ist es für einen Softwareersteller ratsam diese Header (und Versionsstrings in Fehlerseiten) konfigurierbar zu machen. In dem zusammenhang ist die Empfehlung einen falschen Versionsstring zurückzuliefern sehr kritisch zu betrachten, lieber einen unkonkreten generischen Header. Z.b. gibt der Apache httpd nur &amp;quot;Server: Apache&amp;quot; aus, wenn &amp;quot;&lt;a href=&quot;http://httpd.apache.org/docs/2.2/mod/core.html#servertokens&quot;&gt;ServerTokens ProductOnly&lt;/a&gt;&amp;quot; gesetzt wird. [&lt;a href=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.38&quot;&gt;W3C RFC2616 HTTP/1.1&lt;/a&gt;]

Übrigens haben all diese Mechanismen bekannte (und unbekannte) Bugs in verschiedenen Browser Versionen. Nicht alle Browser unterstützen die Header im gleichen Funktionsumfang oder nach der gleichen Methode. Es macht dennoch Sinn diese einzusetzen da die Sicherheit von Web Anwendungen für größere Benutzergruppen dennoch verbessert wird. Zudem achten viele (automatisierten) Audits auf das Vorhandensein, so lässt sich mit geringem Aufwand bei der Anwendungserstelllung eine bessere Compliance erreichen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2012-11-08:&lt;/strong&gt; Server header hinzugefügt, IE8 Security Blog artikel verlinked der X-Frame-Option erklärt.&lt;br /&gt; &lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TODO 2012-11-23:&lt;/strong&gt; Es gibt noch die /crossdomain.xml policy files die von Flash und wohl auch dem Java Plugin beachtet werden. Diese &lt;a href=&quot;http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security.html&quot;&gt;Technologie&lt;/a&gt; kennt den &lt;strong&gt;X-Permitted-Cross-Domain-Policies:&lt;/strong&gt; header. Dieser fehlt im Artikel noch. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2014-02-16&lt;/strong&gt;: Google setzt den &lt;font face=&quot;courier new,courier,monospace&quot;&gt;X-XSS-Protection:&amp;quot;1; mode=block&amp;quot;&lt;/font&gt; header, welcher vom &lt;a href=&quot;http://blogs.msdn.com/b/ieinternals/archive/2011/01/31/controlling-the-internet-explorer-xss-filter-with-the-x-xss-protection-http-header.aspx&quot; title=&quot;blogs.msdn.com&quot;&gt;IE8 verstanden&lt;/a&gt; wird. &lt;br /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 07 Nov 2012 22:05:49 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/494-guid.html</guid>
    
</item>
<item>
    <title>Resetting TPM 1.2 with Windows Powershell</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/489-Resetting-TPM-1.2-with-Windows-Powershell.html</link>
            <category>Sicherheit</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/489-Resetting-TPM-1.2-with-Windows-Powershell.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=489</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=489</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;a class=&quot;serendipity_image_link&quot; title=&quot;tpm.msc screenshot&quot; href=&#039;http://itblog.eckenfels.net/uploads/screen/screenshot-tpm.jpg&#039;&gt;&lt;!-- s9ymdb:158 --&gt;&lt;img class=&quot;serendipity_image_right&quot; width=&quot;110&quot; height=&quot;60&quot;  src=&quot;http://itblog.eckenfels.net/uploads/screen/screenshot-tpm.serendipityThumb.jpg&quot; title=&quot;tpm.msc screenshot&quot; alt=&quot;tpm.msc screenshot&quot; /&gt;&lt;/a&gt;Mit Hilfe des TPM kann auf moderner Hardware auf sichere Art und Weise Verschlüsselungmaterial abgelegt werden oder die idendität des Gerätes nachgewiesen zu werden. Windows ab Vista und 2008 Server unterstützt dies auch für Bitlocker Festplattenverschlüsselung. Aber das TPM kann auch für andere Anwendungen genutzt werden. Verwaltet wird es mit dem Management Consolen Plugin &quot;tpm.msc&quot;. Die meisten Funktionen wie das übernehmen des Besitzes oder das Erzeugen von Keys kann aber über die Windows Management Instrumentation (WMI) auch gespcriptet werden. Dabei bietet sich insbesondere die Powershell an:

&lt;textarea  name=&quot;code&quot; class=&quot;powershell&quot;&gt;PS&gt; $tpm = Get-WMIObject -Class Win32_Tpm -Namespace &quot;root/CMIv2/Security/MicrosoftTPM&quot;
PS&gt; $tpm
IsActivated_InitialValue    : False
IsEnabled_InitialValue      : False
IsOwned_InitialValue        : False
ManufacturerId              : 1112687437
ManufacturerVersion         : 7.11
ManufacturerVersionInfo     : Not Supported
PhysicalPresenceVersionInfo : 1.0
SpecVersion                 : 1.2, 2, 1&lt;/textarea&gt;
Wenn man das Owner Passwort hat, so kann man das TPM auch mit der Powershell zurücksetzen:

&lt;textarea  name=&quot;code&quot; class=&quot;powershell&quot;&gt;PS&gt; $tpm.Clear($tpm.ConvertToOwnerAuth(&#039;PASSWORT&#039;.OwnerValue))
ReturnValue      : 0&lt;/textarea&gt;
Wenn das TPM dies nicht zulässt, oder das Owner Passwort nicht bekannt ist, so ist es auch möglich über den Nachweis einer physischen Präsenz das TPM zu initialisieren oder zurückzusetzen.

&lt;a class=&quot;serendipity_image_link&quot; title=&quot;screenshot BIOS&quot; href=&#039;http://itblog.eckenfels.net/uploads/screen/screenshot-tpmbios.jpg&#039;&gt;&lt;!-- s9ymdb:159 --&gt;&lt;img class=&quot;serendipity_image_left&quot; width=&quot;110&quot; height=&quot;38&quot;  src=&quot;http://itblog.eckenfels.net/uploads/screen/screenshot-tpmbios.serendipityThumb.jpg&quot; title=&quot;screenshot BIOS&quot; alt=&quot;screenshot BIOS&quot; /&gt;&lt;/a&gt;Die Methode &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windows/desktop/aa376478%28v=vs.85%29.aspx&quot;&gt;SetPhysicalPresenceRequest&lt;/a&gt; kann dazu mit dem Wert 5 (zurücksetzen) aufgerufen werden. Und &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windows/desktop/aa376447%28v=vs.85%29.aspx&quot;&gt;GetPhysicalPresenceTransition&lt;/a&gt; liefert dann die Aktion die der Benutzer durchführen muss. Im Fall des Wertes 2 wäre dies ein Soft-Reboot und eine Bestätigung der Aktion im BIOS.

&lt;textarea  name=&quot;code&quot; class=&quot;powershell&quot;&gt;PS&gt; $tpm.SetPhysicalPresenceRequest(5)
ReturnValue      : 0

PS&gt; $tpm.GetPhysicalPresenceTransition()
ReturnValue      : 0
Transition       : 2&lt;/textarea&gt;
Und wie erwarten funktioniert dies auch (ohne das Owner Passwort abzufragen). Getestet habe ich dies unter Windows 7 auf einem Dell Latitude E6510 mit einem TPM von Broadcomm. 
    </content:encoded>

    <pubDate>Wed, 06 Jun 2012 04:19:11 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/489-guid.html</guid>
    
</item>
<item>
    <title>Passwortsicherheit</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/486-Passwortsicherheit.html</link>
            <category>Sicherheit</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/486-Passwortsicherheit.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=486</wfw:comment>

    <slash:comments>7</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=486</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Passwörter haben eine Menge Probleme. Deswegen gibt es jede Menge best-practice um diese Probleme etwas zu reduzieren. Eine einfache Regel ist, dass man Passwörter von Benutzern so abspeichern sollte, dass diese nicht wiederhergestellt werden können. Der Grund dafür ist insbesondere dass die Passwörter die ggf. in unterschiedlichen Diensten genutzt werden nicht eventuellen Hackern (oder unehrlichen Administratoren) in die Hände fallen können.

Dazu werden die Passwörter durch eine Hash Funktion einwegverschlüsselt. Bei der Prüfung des Passwortes wird dann nicht das eingegebene Passwort mit der gespeicherten Version vergleichen, sondern die Einweg-Funktion darauf angewendet und dann verglichen. Eine Konsequenz dieses Verfahren ist es, dass das Passwort von der Anwendung nicht wieder angezeigt oder per Mail an den User gesendet werden kann.

Bei mehr oder weniger öffentlichen Diensten ist es üblich, dass es dort eine Passwort-vergessen Funktion gibt die eine Reset Mail an den Benutzer versendet. Dieses Verfahren verlässt sich auf die Sicherheit des E-Mail Verkehrs - ist somit keine sonderlich sichere Option - aber bei Diensten die mehr oder weniger öffentlich angeboten werden ist die E-Mail Adresse sowieso die einzige zusätzliche Möglichkeit den User zu erreichen.

Es gibt im wesentlichen 3 Möglichkeiten für solche Passwort-Zurücksetzungsmails:

a) aktuelles Passwort per E-Mail zusenden. Das hat den ganz großen Nachteil, dass das Passwort dazu wiederhergestellt werden muss (also nicht Einweg-verschlüsselt sein kann). Außerdem wird das aktuelle Passwort unverschlüsselt per E-Mail versendet. Was besonders problematisch ist wenn dieses wiederverwendet wurde oder weiterverwendet wird.

b) neues Passwort erzeugen und zumailen. Nachteil bei dieser Methode: jeder kann eine beliebige E-Mail Adresse eingeben um deren Besitzer mit nicht funktionierenden Passwörtern zu nerven.

c) Reset-Link erzeugen und zumailen. Wenn der Benutzer den Link benutzt, so wird er um Eingabe eines neues Passwortes gebeten. Dies bietet den Vorteil, dass das alte Passwort weiterhin gültig bleibt wenn die Funktion jemand unberechtigt benutzt. Außerdem wird kein Passwort per (unverschlüsselter) Mail versendet.

Man sieht hier schnell, dass die Methode a) nicht nur die unsicherste und unpraktische ist, sondern auch dass man daraus auch als Endanwender (ohne den Quelltext zu analysieren oder die Datenbank zu kennen) sofort ablesen kann, dass die Web Anwendung eine unsichere Passwort Speicherung verwendet.

Immer wenn ich eine Passwort Recovery Mail mit einem bestehenden Passwort bekomme regt mich das auf, deswegen muss ich jetzt mal einfach hier im Blog &quot;Fingerpointint&quot; betreiben:
&lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://software.intel.com&quot;&gt;Intel Software Network&lt;/a&gt;: speichert und mailt Passwörter an Benutzer&lt;/li&gt;&lt;li&gt;BMC Servicedesk Express: speichert und mailt Passörter an Benutzer. &lt;a href=&quot;https://magickb.remedy.com/Helpdesk/MiscPreLoginPages.asp?Module=FORGOTPWD&quot;&gt;(Beispiel)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Open Application Group (OAGi) Portal. &lt;a href=&quot;http://www.oagi.org/dnn2/MembersOnly/MemberLogin/tabid/208/ctl/SendPassword/Default.aspx?returnurl=http%3a%2f%2fwww.oagi.org%2fdnn2%2fMembersOnly%2fMemberLogin.aspx&quot;&gt;(Beispiel)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;RosettaNet.org &lt;a href=&quot;http://rosettanet.org/RosettaNetMemberLogin/tabid/3129/ctl/SendPassword/Default.aspx&quot;&gt;(Beispiel)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; kontent.de &lt;a href=&quot;https://admin.kontent.com/information/pwreminder/-0368a425707befc77681b8e51ea397c7/&quot;&gt;(Beispiel)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://www.gnu.org/software/mailman/jwzrebuttal.html&quot;&gt;mailman&lt;/a&gt; Die GNU Mailing-List-Manager-Software weist wenigstens beim Anlegen eines Kontos schon drauf hin (einfacher wäre es die Eingabe generell zu entfernen und nur zufällige Passwörter zuzusenden)&lt;/li&gt;&lt;/ul&gt;
&lt;b&gt;Update:&lt;/b&gt; OAGi und Rosettanet.org (danke Christian) hinzugefügt. kontent.de hinzugefügt (danke Robin). Added mailman. 
    </content:encoded>

    <pubDate>Fri, 03 Feb 2012 05:25:13 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/486-guid.html</guid>
    
</item>
<item>
    <title>Java 7 - Probleme mit neuen JSSE Features</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/484-Java-7-Probleme-mit-neuen-JSSE-Features.html</link>
            <category>Java Programming</category>
            <category>Sicherheit</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/484-Java-7-Probleme-mit-neuen-JSSE-Features.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=484</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=484</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Mit Java 7 sind in den SSL/TLS Provider von Oracle einige &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements7.html&quot;&gt;neue Funktionen&lt;/a&gt; eingezogen. Darunter der schon lange erwartete Support für TLSv1.1 und TLSv1.2, aber auch die Unterstützung der &lt;a href=&quot;http://www.ietf.org/rfc/rfc3546.txt&quot;&gt;TLS Extensions&lt;/a&gt; u.A. für die Server Name Indication(SNI).

Letzteres wird dazu verwendet virtuelle Hosts auf einem SSL Port zu unterstützen: Bisher konnte ein SSL Server nämlich nicht wissen an welchen (der potentiell vielen) virtuellen Dienste hinter einer IP Adresse sich der SSL Client wenden will. Besonders ärgerlich ist dies im Fall von HTTP/s, dort ist es die Regel dass Hoster sehr viele Kunden-Domains hinter ein und der selben IP-Adresse betreiben. In HTTP/1.1 wird der gewünschte Servername in der Anfrage mitgegeben (Host: Header). So kann der HTTP Server entscheiden welche Webseiten er ausliefern soll. 

Im Falle des SSL Server Zertifikats (welches im SSL Handshake schon vor der HTTP Anfrage ausgetauscht wird), kann dies der Webserver aber nicht. Er muss raten welches Zertifikat er dem Client präsentieren soll, und das schlägt natürlich in der Regel fehl. Mit der Extension wird der Servername auch im Handshake mitgeschickt, und der Server kann sein Zertifikat passend auswählen.

Problem bei der Geschichte ist: der Server darf auf eine solche Namensanfrage mit einem SSL Alert (Warning) reagieren. In dieser sagt er, dass er sich für den angefragten Host nicht zuständig fühlt. Das kommt bei aktuellen Webserver Installationen häufig vor, weil diese einfach nicht korrekt eingerichtet sind (und die modernen Browser die SNI unterstützen diese Warnung auch einfach ignorieren). Da das zurückgelieferte Default Zertifikat oftmals den richtigen Hostnamen (in einer der Attribute) enthält, klappt der gesicherte Handschlag im Alltag dennoch. Nicht jedoch mit Java 7 SSL Clients, JSSE macht daraus eine fatale Exception:
&lt;pre&gt;&lt;code&gt;javax.net.ssl.&lt;b&gt;SSLProtocolException: handshake alert: unrecognized_name&lt;/b&gt;
	at sun.security.ssl.ClientHandshaker.handshakeAlert
	at sun.security.ssl.SSLSocketImpl.recvAlert
	at sun.security.ssl.SSLSocketImpl.readRecord
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake
	at sun.security.ssl.SSLSocketImpl.startHandshake
	at sun.security.ssl.SSLSocketImpl.startHandshake
	at sun.net.www.protocol.https.HttpsClient.afterConnect
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect
	at sun.net.www.protocol.http.HttpURLConnection.getOutputStream
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream&lt;/code&gt;&lt;/pre&gt;
Ich habe deswegen einen &lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7127374&quot;&gt;Bugreport&lt;/a&gt; aufgemacht, jedoch wurde dieser wieder kommentarlos geschlossen. Falls Sie nun trotz Oracle&#039;s widerstreben die Notwendigkeit haben mit einem Web Server zu kommunizieren der SNI nicht richtig eingerichtet hat, so bleiben nur 2 Möglichkeiten über:

a) TLS aus der Liste der unterstützten Protokolle entfernen - mit einem SSLv3 Handshake wird kein Extension Record übertragen, und entsprechend klappt auch der Handshake (solange der Server SNI nicht benötigt).

b) den SSL Socket so initialisieren, dass die SSLEngine den Host nicht kennt. Dieser sogenannte Host hint wird für mehrere Dinge verwendet, kann aber auch weggelassen werden. Erreichen kann man dies, indem man den Socket statt mit &lt;code&gt;s=factory.createSocket(name, port);&lt;/code&gt; mit &quot;s=factory.createSocket(); s.connect(name,port);&quot; erzeugt.

Übrigens ist dies ein ziemlich unerwartetes Verhalten: SSL mit Kerberos Authentifizierung würde nur auf die erste Art und Weise funktionieren, da hierfür die Identität des Servers bekannt sein muss.

Der Punkt a) ist ein schneller Fix, kommt aber in der Praxis eigentlich nicht in Frage, da man mit Java 7 ja eher daran Interesse hat TLSv1.1 oder TLSv1.2 zu verwenden um Lücken wie z.B. den &lt;a href=&quot;http://itblog.eckenfels.net/archives/478-SSLTLS-BEAST-Luecke.html&quot;&gt;BEAST-Angriff&lt;/a&gt; auszuschließen. Daher bleibt es nur übrig entweder den Anwendungscode zu ändern (oder wenn man diesen nicht selbst geschrieben hat, wie im Falle einer häufig verwendeten URLConnection oder beim Apache HTTPClient) oder aber mindestens eine eigene SSLSocketFactory zu implementieren, die auf die 2-stufige Erzeugung des SSLSockets aufsetzt.

&lt;b&gt;Update&lt;/b&gt;: Ich habe in den Sourcen grade eine System Property gefunden, mit der man abschalten kann, dass der ClientHandshaker die SNI Extention sendet. Dies lässt sich als Work around gut verwenden: System.setProperty(&quot;jsse.enableSNIExtension&quot;, &quot;false&quot;); (muss vor der Verwendung von SSL Klassen im Programm, oder auf der Command Line gesetzt werden).
 
    </content:encoded>

    <pubDate>Sat, 07 Jan 2012 11:36:35 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/484-guid.html</guid>
    
</item>
<item>
    <title>SQL Server JDBC Probleme</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/482-SQL-Server-JDBC-Probleme.html</link>
            <category>Java Programming</category>
            <category>Sicherheit</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/482-SQL-Server-JDBC-Probleme.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=482</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=482</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Von den Änderungen in Java SE 6.0 Update 29 zum Schutz vor SSL BEAST Angriffen hatte ich schon &lt;a href=&quot;http://itblog.eckenfels.net/archives/478-SSLTLS-BEAST-Luecke.html&quot;&gt;berichtet&lt;/a&gt;. Ein Opfer dieser Kompatibilitätsänderung sind die JDBC Treiber für den Microsoft SQL Server (&lt;a href=&quot;http://jtds.sourceforge.net/&quot;&gt;jTDS&lt;/a&gt; und &lt;a href=&quot;http://msdn.microsoft.com/en-us/sqlserver/aa937724&quot;&gt;Microsoft JDBC Driver for SQL Server&lt;/a&gt; sind betroffen).

Beim Aufbau der Verbindung (TCP) direkt mit dem &lt;strong&gt;jTDS&lt;/strong&gt; Treiber kommt es zu folgendem Fehler:
&lt;pre&gt;java.sql.SQLException: I/O Error: Software caused connection abort: recv failed
  State  : 08S01
  Error  : 0&lt;/pre&gt;
Und die folgende Exception wirft der &lt;strong&gt;Microsoft JDBC Driver for SQL Server&lt;/strong&gt;:
&lt;pre&gt;com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset
  State  : 08S01
  Error  : 0&lt;/pre&gt;
Wenn die Treiber durch einen Connection Pool benutzt werden, oder innerhalb einer Datasource, so kann es sogar zum Hängen (wegen Endlosschleife) kommen.

Eine Möglichkeit ist es, beim jTDS Treiber anzugeben, dass man kein SSL machen möchte (sollte aber eigentlich auch der default sein, laut &lt;a href=&quot;http://jtds.sourceforge.net/faq.html#urlFormat&quot;&gt;jTDS FAQ&lt;/a&gt;). Dies kann man mit dem JDBC URL Property &quot;&lt;code&gt;;ssl=no&lt;/code&gt;&quot; erreichen. Wenn der Server allerdings auf &quot;Force Encryption&quot; konfiguriert ist, so wird er dann die Logins ablehnen. Beim Microsoft Treiber würde das property &quot;&lt;code&gt;encrypt=false&lt;/code&gt;&quot; lauten, dies half aber in meinen Versuchen (mit MS SQL Server 2008 R2 Express) nicht.

Eine weitere Möglichkeit ist es den SSL/TLS CBC-Fix per Java System Property abzuschalten: &lt;code&gt;-Djsse.enableCBCProtection=false&lt;/code&gt;

Dies wirkt sich aber auf alle anderen SSL Verbindungen innerhalb dieser VM ebenfalls aus. Es gibt Berichte, dass dieses Problem mit JavaSE 6.0 Update 30 behoben sei, das kann ich aber weder nachvollziehen, noch lassen die ReleaseNotes darauf schließen. Ich habe mal einen &lt;a href=&quot;https://sourceforge.net/tracker/?func=detail&amp;aid=3468079&amp;group_id=33291&amp;atid=407762&quot;&gt;Fehlerbericht bei jTDS&lt;/a&gt; dazu geöffnet. 
    </content:encoded>

    <pubDate>Sun, 01 Jan 2012 03:31:37 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/482-guid.html</guid>
    
</item>
<item>
    <title>SSL/TLS BEAST Lücke</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/478-SSLTLS-BEAST-Luecke.html</link>
            <category>Java Programming</category>
            <category>Sicherheit</category>
            <category>Vernetzung</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/478-SSLTLS-BEAST-Luecke.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=478</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=478</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;p&gt;Im September 2011 haben die Sicherheitsforscher Duong und Rizzo &lt;a href=&quot;http://vnhacker.blogspot.com/2011/09/beast.html&quot;&gt;nachgewiesen&lt;/a&gt;, dass eine - seit &lt;a
href=&quot;http://www.mail-archive.com/openssl-dev@openssl.org/msg10664.html&quot;&gt;2002 bekannte&lt;/a&gt; und in TLS 1.1 behobene - Schwachstelle in den SSL 3.0 und TLS 1.0 Verschlüsselungsprotokollen nicht nur theoretisch ist, sonder wirklich ausgenutzt werden können. Unter bestimmten Bedingungen erlaubt diese Schwachstelle einem Angreifer Teile aus einer SSL/TLS geschützten Übertragung zu ermitteln.&lt;/p&gt;

&lt;p&gt;Gezeigt wurde dies am Beispiel eines abgefangenen paypal http Session Cookies, was erlaubte eine Browser Sitzung zu übernehmen. Das Problem ist unter dem Namen „BEAST“ (Browser Exploit Against SSL/TLS) bekannt, und wird unter der Common Vulnerability ID  &lt;a href=&quot;http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3389&quot;&gt;CVE-2011-3389&lt;/a&gt; geführt. Bei der Demonstration wurde ein Java Applet verwendet um die notwendigen Daten einzuschleusen, nach Duong/Rizzo es soll aber auch mit WebSockets oder JavaScript XHR Aufrufen möglich sein.&lt;/p&gt;

&lt;p&gt;Dies zugrundeliegende kryptografische Schwäche ist ein generelles Problem vom SSL 3.0/TLS 1.0. Es wurde aber als 2002 nur als theoretischer Angriff gesehen, jetzt sind Angriffe mit Hilfe der erweiterten Funktionen des WebBrowsers bekannt geworden. Da es für einen erfolgreichen Angriff nicht nur notwendig ist, dass die verschlüsselte Verbindung abgehört werden kann, sondern auch, dass der Angreifer in den Klartext eigene Stück einfügen kann (Chosen Plaintext). Dies ist durch die Verwendung von JavaScript auf Webseiten relativ einfach möglich.&lt;/p&gt;

&lt;p&gt;Wird bei SSL/TLS eine Blockchiffre im CBC (Cipher Block Chaining) Modus verwendet, so benutzt SSL 3.0 und TLS 1.0 einen vom Vorgängerblock abgeleiteten Initialisierungsvektor. Da sich dieser ermitteln lässt ist hier ein Problem gegeben, das durch geschicktes einfügen von Füllzeichen in den Klartext erlaubt Inhalte zeichenweise an den Blockgrenzen zu ermitteln.&lt;/p&gt;

&lt;p&gt;Dies zu behaben bedarf es einer neuen Protokollversion: TLS  1.1. Aber in TLS 1.0 und SSL 3.0 kann es nicht so einfach verhindert werden. Somit hilft mittelfristig nur ein Update auf diese „neuen“ Protokolle, die zwar schon Jahrelang verfügbar sind, sich aber in der Praxis in den meisten WebServern und WebBrowsern noch nicht durchgesetzt haben (vor allem nicht per default aktiviert sind).&lt;/p&gt;

&lt;p&gt;Mögliche Gegenmaßnahmen zu BEAST (und deren Probleme) sind:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SSL/TLS Ciphers nicht im CBC Modus verwenden. Diese können in den gängigen Browsern und Servern abgeschalten werden. Die Gefahr dass dann Gegenstellen keine gemeinsame Verschlüsselung aushandeln können ist allerdings groß. Sollte also nur bei einer kleinen Anzahl von bekannten Kommunikationsgegenstellen benutzt werden.&lt;/li&gt;

&lt;li&gt;Statt die CBC Chiffren abzuschalten kann auf jedenfall die Stromchiffre RC4 (TLS_RSA_WITH_RC4_128_SHA) bevorzugt werden. Diese verwendet kein CBC und ist damit nicht betroffen. Dies macht Google z.B. schon seit einiger Zeit. RC4 ist nicht unumstritten, es gibt Angriffe gegen das Verfahren, die aber in SSL &lt;a
href=&quot;http://blog.ivanristic.com/2009/08/is-rc4-safe-for-use-in-ssl.html&quot;&gt;nicht auftreten&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Oracle Java (JSSE) ab Version 1.6.0_29 und 7.0.0_1 implementiert einen CBC Schutz (der
mit dem System Property jsse.enableCBCProtection aus kompatibilitätsgründen wieder
abgeschalten werden kann) bei dem der erste Block in zwei mit der Länge 1 und (n-1)
gesplittet wird. Erst mit Java 7 wird TLS 1.1 und 1.2 unterstützt.&lt;/li&gt;

&lt;li&gt;Der gleiche Fix wird gerade in Chrome Beta 15 getestet, es gab schon &lt;a href=&quot;http://code.google.com/p/chromium/issues/detail?id=98202&quot;&gt;Kompatiblitätsprobleme&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Für Opera 10.51 war der Fix geplant, ist aktuell noch nicht vorhanden (Opera benutzt keine WebSockets).&lt;/li&gt;

&lt;li&gt;Dieser Schutz wird auch in Mozilla Firefox (via &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=665814&quot;&gt;NSS library&lt;/a&gt;) eingebaut, wartet dort aber noch auf eine Lösung der Kompatibilitätsprobleme und ist somit nicht Bestandteil von Firefox 7 (Mozilla sagt die WebSockets sind nicht verwundbar).&lt;/li&gt;

&lt;li&gt;Es ist zu erwarten dass Microsoft für den Internet Explorer nachzieht, bisher &lt;a href=&quot;http://blogs.technet.com/b/srd/archive/2011/09/26/is-ssl-broken-more-about-security-advisory-2588513.aspx&quot;&gt;empfehlen&lt;/a&gt; sie nur die RC4 Chiffre zu bevorzugen (Windows XP scheint dies zu tun), Vorsicht bei dem Umgang mit http Seiten walten zu lassen und ggf. TLS 1.1 auf
Client und Server zu aktivieren (immerhin unterstützen Microsoft Produkte dies schon, wird nur aus Kompatibilitätsgründen nicht aktiviert).&lt;/li&gt;

&lt;li&gt;Die Option TLS 1.1 (oder neuer) zu verwenden wird leider noch einige Zeit auf sich warten lassen. Besonders da SSL 3.0 und TLS 1.0 abgeschalten werden müssten, um zu verhindern das Angreifer diese erzwingen. Leider hängt openssl der TLS 1.1 Entwicklung nach, so dass auch Apache hier nur mit der RC4 Cipher gerettet werden kann (alternativ kann man mod_gnutls oder mod_nss verwenden, die sind aber beide weniger stark in der Nutzung).&lt;/li&gt;&lt;/ol&gt; 
    </content:encoded>

    <pubDate>Sat, 03 Dec 2011 10:49:12 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/478-guid.html</guid>
    
</item>
<item>
    <title>STRIDE vs. CIA</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/475-STRIDE-vs.-CIA.html</link>
            <category>Sicherheit</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/475-STRIDE-vs.-CIA.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=475</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=475</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Microsoft hat mit Ihrem &lt;a href=&quot;http://www.microsoft.com/security/sdl/default.aspx&quot;&gt;Security Development Lifecycle&lt;/a&gt; für eine deutliche Steigerung der Sicherheit Ihrer Produkte gesorgt. Zudem ist die Methodik offen zugänglich und verbessert somit die Software Entwicklung auch in anderen Firmen. Ein Konzept das bei der Analyse und Modellierung von Risiken und Bedrohungen im Ramen von SDL eingesetzt wird ist die STRIDE-Klassifizierung von Bedrohungen:

&lt;table&gt;&lt;tr&gt;&lt;th&gt;Threat&lt;/th&gt;&lt;th&gt;Definition&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;S&lt;/b&gt;poofing&lt;/td&gt;&lt;td&gt;Impersonating something or someone else.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;T&lt;/b&gt;ampering&lt;/td&gt;&lt;td&gt;Modifying data or code&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;R&lt;/b&gt;epudiation&lt;/td&gt;&lt;td&gt;Claiming to have not performed an action.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;I&lt;/b&gt;nformation Disclosure&lt;/td&gt;&lt;td&gt;Exposing information to someone not authorized to see it&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;D&lt;/b&gt;enial of Service&lt;/td&gt;&lt;td&gt;Deny or degrade service to users&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;E&lt;/b&gt;levation of Priviledge&lt;/td&gt;&lt;td&gt;Gain capabilities without proper authorization&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
Diese Klassifizierung finde ich nicht sonderlich nützlich. Die Klassen der Bedrohungen überlappen sich. Es ist eine Mischung aus Angriffen auf primäre und sekundäre Schutzziele. Viel besser finde ich es daher, bei der Betrachtung von Bedrohungen deren Auswirkungen auf die Primären Schutzziele der Informationssicherheit (&lt;a href=&quot;http://en.wikipedia.org/wiki/CIA_triad&quot;&gt;CIA&lt;/a&gt;) zu betrachten:

&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;C&lt;/b&gt;onfidentiality (Vertraulichkeit)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;I&lt;/b&gt;ntegrity (Integrität)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;A&lt;/b&gt;vailability (Verfügbarkeit)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
Wenn alle drei Schutzziele erfüllt sind so stellt ein Informationssystem sicher, dass die richtige Person unverfälschte Daten jederzeit nutzen kann. Das CIA Trippel steht auch in der Kritik nicht alle Fälle abzudecken, so wird z.B. immer wieder angeführt dass Zurechnungsfähigkeit oder Nicht-Abstreitbarkeit (Accountability, Non-Repudiation) damit nicht abgedeckt werden. Das sehe ich allerdings nicht so, denn wenn eine Anforderung an ein IT System ist, dass man nachvollziehen kann wer etwas gemacht hat, so werden dazu eigene Daten erfasst, und deren Integrität (kann nicht verändert werden) und Verfügbarkeit (kann nicht unterdrückt werden) stellen sicher, dass authorisierte Nutzer diese Daten einsehen können.


Die STRIDE Eigenschaften lassen sich mit CIA gut ausdrücken:

&lt;table&gt;&lt;tr&gt;&lt;td&gt;Spoofing&lt;/td&gt;&lt;td&gt;Benutzer die sich als andere Nutzer ausgeben können sind nur ein Problem wenn daraufhin Daten unerlaubterweise weitergegeben werden (Vetraulichkeit) oder wenn andere Benutzer sich auf die Urheberschaft von Informationen verlassen (Integrität).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Tampering&lt;/td&gt;&lt;td&gt;Unerwünschtes ändern von Daten oder Code ist ein Angriff auf die Integrität des Systems&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Repudiation&lt;/td&gt;&lt;td&gt;Ein System das Nachvollziehbarkeit benötigt kann darüber unverfälschte (Integrität) Aufzeichnung führen sie sich nicht unterdrücken (Availability) lassen.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Information Disclosure&lt;/td&gt;&lt;td&gt;Ein Verstoss gegen die Vertraulichkeit&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Denial of Service&lt;/td&gt;&lt;td&gt;Ein Angriff auf die Verfügbarkeit des Systems&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Elevation of Priveledge&lt;/td&gt;&lt;td&gt;Angreifer erlangt mehr Rechte als Ihm zustehen. Dies ist ein Problem wenn damit Angriff auf Integrität oder Vertraulichkeit erfolgt&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
Anhand der Gegenüberstellung wird klar, dass mit den 3 Schutzzielen die meisten Bedrohungen besser klassifizieren lassen.

David LeBlanc, einer der Väter der STRIDE Methode gibt dies in einem &lt;a href=&quot;http://blogs.msdn.com/b/david_leblanc/archive/2007/08/13/dreadful.aspx&quot;&gt;Blogpost&lt;/a&gt; auch offen zu. Er sieht trotzdem einen Anwendungsfall für die Methode in der Praxis. Ich persönlich würde mir wünschen, wenn SDL hier angepasst wird. Nützlicher sind hier eher Checklisten mit typischen Bedrohungen (und deren Auswirkungen auf die Primären Schutzziele). 
    </content:encoded>

    <pubDate>Fri, 05 Aug 2011 21:56:47 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/475-guid.html</guid>
    
</item>
<item>
    <title>jarsigner mit Tokens</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/472-jarsigner-mit-Tokens.html</link>
            <category>Java Programming</category>
            <category>Sicherheit</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/472-jarsigner-mit-Tokens.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=472</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=472</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;a class=&quot;serendipity_image_link&quot; title=&quot;jarsigner mit ASEKey Token Dialog unter Windows 7&quot; href=&#039;http://itblog.eckenfels.net/uploads/screen/screenshot-token.png&#039;&gt;&lt;!-- s9ymdb:151 --&gt;&lt;img class=&quot;serendipity_image_right&quot; width=&quot;110&quot; height=&quot;86&quot;  src=&quot;http://itblog.eckenfels.net/uploads/screen/screenshot-token.serendipityThumb.png&quot; title=&quot;jarsigner mit ASEKey Token Dialog unter Windows 7&quot; alt=&quot;jarsigner mit ASEKey Token Dialog unter Windows 7&quot; /&gt;&lt;/a&gt;Um Java Applets und JAR Files zu signieren nutzt man den jarsigner, der normalerweise ein Java-Keystore (.jks) file nutzt. Es ist allerdings ungünstig Codesigning Zertifikate einfach so in Files herumliegen zu haben (auch wenn man diese gesondert sichert). Es ist anzuraten ein Zertifikat besser in einer SmartCard oder einem Token zu speichern.

Der Oracle jarsigner.exe verwendet die Java Security Provider der JCE API. Um damit ein Hardware Token anzusprechen gibt es im wesentlichen 2 Methoden. Entweder den PKCS#11 Provider (benötigt eine PKCS#11 library (.dll oder .so) des Hardwareherstellers) oder unter Windows den Microsoft CryptoAPI (MSCAPI) treiber. Letzteres hat den Vorteil dass die meisten Smartcards unter Windows 7 oder 2008 bereits Treiber beim einstecken installieren. Diese Minitreiber sind nur begrenzt nutzbar, aber für das signieren reicht es aus.

Bei meinen Versuchen habe ich aber einige Einschränkungen gefunden:&lt;ul&gt;&lt;li&gt; Es wird Java 5,6 oder 7(&gt;b144) benötigt.&lt;/li&gt;&lt;li&gt; Ich habe nur die Java Distribution von Sun/Oracle getestet&lt;/li&gt;&lt;li&gt; In der 64bit Variante wird der Provider aktuell nur von Java 7 ausgeliefert&lt;/li&gt;&lt;li&gt; Über MSCAPI wird immer in getrenntem Dialog nach PIN gefragt&lt;/li&gt;&lt;/ul&gt;Anbei Beispielbefehle zum auslesen des Keystores (in dem auch das Codesigning Zertifikat das auf dem USB Token gespeichert ist sichtbar ist) sowie dem Signaturvorgang:

&lt;pre&gt;c:\Program Files (x86)\Java\jdk1.6.0_24\bin&gt;keytool -list -storetype Windows-MY

Keystore-Typ: Windows-MY
Keystore-Provider: SunMSCAPI

Ihr Keystore enthält 4 Einträge.
...
FIRMA AG, PrivateKeyEntry,
Zertifikatsfingerabdruck (MD5): 57:EF:97:04:EA:91:EE:FF:CF:BF:7F:75:AE:E1:A2:7D
...
c:\Program Files (x86)\Java\jdk1.6.0_24\bin&gt;jarsigner.exe -storetype Windows-MY
%TEMP%\test.jar &quot;FIRMA AG&quot;&lt;/pre&gt;

Als Speicher für die Zertifikate verwende ich ein &lt;a href=&quot;http://cryptoshop.com/de/products/cardtoken/token/4410101006.php&quot;&gt;Athena ASEKey Crypto Token&lt;/a&gt; in das ich mit den Athena IDProtect Tools auf einem anderen Computer das &lt;a href=&quot;https://securitycenter.verisign.com/celp/enroll/retail&quot;&gt;Codesigning Zertifikat von Verisign&lt;/a&gt; (Promo:WINQUAL99) importiert habe. Das Zertifikat ist übrigens ein Authenticode Class 3 Zertifikat das es aktuell für Teilnehmer am Microsoft WinQual Programm für ein Jahr günstig ($99) gibt. Entgegen den Angaben von Verisign lässt sich dieses auch problemlos für Java Signig verwenden.

Einziges Problem bei der Sache, mit -storepass oder -keypass lässt sich die PIN für die SmartCard nicht angeben, diese fragt immer mit einem Popup nach entsprechender Freigabe. Ich habe in den Athena Tools keine Möglichkeit gefunden diese abzuschalten (allerdings geht es mit der PKCS#11 API, wie ich im nächsten Beitrag berichten werde).

&lt;pre&gt;c:\Program Files (x86)\Java\jdk1.6.0_24\bin&gt;jarsigner -verify -certs -verbose %T
EMP%\test.jar

         134 Thu Jun 02 23:27:48 CEST 2011 META-INF/MANIFEST.MF
         258 Fri Jun 03 00:04:02 CEST 2011 META-INF/FIRMA_AG.SF
        4764 Fri Jun 03 00:04:02 CEST 2011 META-INF/FIRMA_AG.RSA
           0 Thu Jun 02 23:23:38 CEST 2011 META-INF/
sm     15104 Sun Mar 06 04:56:06 CET 2011 jarsigner.exe

      X.509, CN=FIRMA AG, OU=Software Development, 
                OU=Digital ID Class 3 - Microsoft Software Validation v2,
                  O=FIRMA AG, ST=Baden-Wuerttemberg, C=DE
      [certificate is valid from 21.12.10 01:00 to 22.12.11 00:59]
      X.509, CN=VeriSign Class 3 Code Signing 2010 CA
      [certificate is valid from 08.02.10 01:00 to 08.02.20 00:59]
      [KeyUsage extension does not support code signing]
      X.509, CN=VeriSign Class 3 Public Primary Certification Authority - G5
      [certificate is valid from 08.11.06 01:00 to 17.07.36 01:59]
      [KeyUsage extension does not support code signing]


  s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.&lt;/pre&gt;

&lt;b&gt;Update:&lt;/b&gt; Ich habe das ganze gerade mit der b144 von Java 7 getestet, und damit lassen sich sowohl mit 32bit als auch mit der 64bit Version der MSCAPI Provider für die Signatur von JAR Files via Smart Token nutzen. 
    </content:encoded>

    <pubDate>Thu, 02 Jun 2011 23:37:01 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/472-guid.html</guid>
    
</item>
<item>
    <title>Hardware Security</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/471-Hardware-Security.html</link>
            <category>Hardware</category>
            <category>Sicherheit</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/471-Hardware-Security.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=471</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://itblog.eckenfels.net/rss.php?version=2.0&amp;type=comments&amp;cid=471</wfw:commentRss>
    

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Kris weißt in einem &lt;a href=&quot;http://twitter.com/#!/isotopp/status/68286958132150272&quot;&gt;Tweet&lt;/a&gt; auf eine Diskussion zum Thema Sicherheit von Management-Adaptern hin. Im konkreten Fall wurde vermutet dass ein BMC (Der Mikro-Controller der die IPMI Schnittstelle bereitstellt) Spam Mails versendet hatte (nachdem er kompromittiert wurde). In dem Forum wird nicht klar, ob es wirklich der Fall ist und welche Schwachstelle dabei verwendet wurde. Aber in den Kommentaren sind einige sehr bedenkliche Meinungen und Vorgehensweisen zu entdecken:

Management Adressen (SSH, HTTP, Remote-IPMI) werden von einzelnen Admins absichtlich im öffentlichen Netz zugänglich betrieben - oder aus Versehen aus Unkenntnis. Hersteller der BMCs installieren keine oder unsichere Default-Passwörter. Generell waren die Admins der Meinung dass BMCs gar nicht die Ressourcen haben um Spam zu versenden, und es wird unterstellt die Firmware auf den Controllern sei unbedingt sicher.

Das ist natürlich eine naive Annahme. Auf den BMC Mikro-Controllern läuft ein Betriebssystem mit vollem IP-Stack und Anwendungsprozesse (Web Server, SSH Daemon, IPMI Agent, Shell/Menu) und diese können natürlich falsch konfiguriert werden oder verwundbar sein. Die IPMI Firmware wird oft von Administratoren vernachlässigt, weil es nicht in den normalen Update Prozessen des Betriebssystems integriert ist.

Ich sehe folgende Punkte für den Betrieb von Servern mit Management Adaptern (oder Lights-Out Karten) als wichtig an:

&lt;ul&gt;&lt;li&gt;Firmware des BMC in den Update/Patch Prozess aufnehmen&lt;/li&gt;&lt;li&gt;Mittels physischer Ports oder VLANs BMC in getrenntem Management LAN betreiben&lt;/li&gt;&lt;li&gt;Zugriff auf Management LAN beschränken, nur über sichere Hops zugreifen lassen&lt;/li&gt;&lt;li&gt;Server provisioning Prozedur muss sichere Konfiguration der BMC Adapter beinhalten (Zertifikate, Passwörter, User, evtl. SSO, WoL Secret....)&lt;/li&gt;&lt;li&gt;Verzicht auf Produkte die keine Netzwerksicherheit (Verschlüsselung) bieten&lt;/li&gt;&lt;/ul&gt;

Generell kann man sagen, der Remote-Zugriff auf BMC Funktionen ist vergleichbar mit physikalischem Konsolen-Access (besonders dann wenn hier auch Consolas und Laufwerke gemapped werden können). 
    </content:encoded>

    <pubDate>Fri, 13 May 2011 01:58:27 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/471-guid.html</guid>
    
</item>

</channel>
</rss>
