<?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 - Infrastruktur</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>Sat, 27 Jan 2024 23:12:39 GMT</pubDate>

    <image>
    <url>http://itblog.eckenfels.net/templates/2k11/img/s9y_banner_small.png</url>
    <title>RSS: ITBlog - Infrastruktur - ...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>Conservative Enterprise Linux Distributions might hurt us</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/530-Conservative-Enterprise-Linux-Distributions-might-hurt-us.html</link>
            <category>Infrastruktur</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/530-Conservative-Enterprise-Linux-Distributions-might-hurt-us.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=530</wfw:comment>

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

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;p&gt;The argument is clear, by conservatively patching packages (backporting fixes) systems with a Enterprise Linux contract can be held stable and secure for a long time. But to what cost (besides the support contract) this comes?
&lt;/p&gt;&lt;p&gt;
I noticed that even with the latest SUSE Linux Enterprise 15 SP5 you get a OpenSSH version which does not support hybrid post-quantum key exchanges, and even worse it has SHA1 and the old rsa-ssh key type enabled, as well as the weak DH Group14 or UMAC-64 and non-etm MACs. This openssh 8.4 clone is just not secure by default anymore.
&lt;/p&gt;&lt;p&gt;
It would be hard for a company on a Enterprise Linux trip to recompiler their own openssh (in order to get the PQC) or to harden the crypto settings. In this regard RHEL with its system wide crypto policy is a bit better, but its dubious if you can set it system wide to &quot;FUTURE&quot; crypto protection level just to get rid of the worst offenders.
&lt;/p&gt;&lt;p&gt;
Of course it could be argued that nobody really is endangered by those weak algorithms, especially not if the SSH connections are not used on the trusted Internet. But then again - why take the risk. We can only conclude - if you need the additional security, you will need to harden even your expensice supported enterprise systems.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 27 Jan 2024 18:25:00 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/530-guid.html</guid>
    
</item>
<item>
    <title>JNDI LDAP with Active Directory with Signing</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/522-JNDI-LDAP-with-Active-Directory-with-Signing.html</link>
            <category>Infrastruktur</category>
            <category>Java Programming</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/522-JNDI-LDAP-with-Active-Directory-with-Signing.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=522</wfw:comment>

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

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;p&gt;If you have used JNDI to connect to a Microsoft Active Directory LDAP Server you might see the Warning Event 2886 of source &lt;tt&gt;ActiveDirectory_DomainService&lt;/tt&gt; (every 24 hours) telling you, that you should turn on LDAP Signing. This is also strongly recommended by Microsoft in their latest Security Advisory. They also will turn this on by default in the March 2020 (was January) Windows Server update.&lt;/p&gt;

&lt;p&gt;I am not sure if this will actually happen, since a lot of legacy LDAP clients might need to be fixed first.
I specifically had a look at Java with the LDAP Naming provider. (&lt;strong&gt;Update&lt;/strong&gt;: as predicted Microsoft has postponed this for now).&lt;/p&gt;

&lt;p&gt;If you use a simple bind or a default DIGEST-MD5 with no TLS (LDAPs) and no integrity or confidentiality protection you get the following exception for those Domain Controllers with the additional integrity=2 setting:&lt;/p&gt;

&lt;pre&gt;
javax.naming.AuthenticationNotSupportedException: [LDAP: error code 8 - 00002028: LdapErr: DSID-0C09023C, comment: The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection, data 0, v4563&lt;/pre&gt; 

&lt;p&gt;AD supports simple Binds, Kerberos (GSSAPI) and DIGEST-MD5 (SASL). The later two option can be configured to work with Request Signing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; you must use the fully qualified hostname the LDAP Server think it has in the URL (you might need to make a /etc/hosts entry if your domains are not completely resolved by DNS.&lt;/li&gt;

&lt;li&gt; you Must enable DIGEST-MD5 as the Security mechanism&lt;/li&gt;

&lt;lí&gt; you must in addition to this request the auth-int quality of protection (otherwise no signing will be recognized)&lt;/li&gt;

&lt;li&gt; the Account/principal you want to use for logins on the ActiveDirectory domain must have the reversible password encryption turned on and you must set the password after this change. If the user only has a password hash the LDAP directory will not be able to check the password and reject it (unfortunately with the same error as when the password is wrong):&lt;br /&gt;

&lt;pre&gt;
javax.naming.AuthenticationException: [LDAP: error code 49 - 8009030C: LdapErr: DSID-0C090569, comment: AcceptSecurityContext error, data 52e, v4563&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you use TLS (ldaps) instead, then you don&#039;t need to worry about signing. In fact in this case even simple binds will work. (And just for completeness, if you use SASL then you can&#039;t request &lt;tt&gt;auth-int&lt;/tt&gt; or &lt;tt&gt;auth-conf&lt;/tt&gt; in the TLS case with Microsoft Directory Service).&lt;/p&gt;




 
    </content:encoded>

    <pubDate>Sat, 21 Dec 2019 21:05:00 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/522-guid.html</guid>
    
</item>
<item>
    <title>Windows Server 2016 Images mittels DSIM für OpenStack vorbereiten</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/516-Windows-Server-2016-Images-mittels-DSIM-fuer-OpenStack-vorbereiten.html</link>
            <category>Cloud</category>
            <category>Infrastruktur</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/516-Windows-Server-2016-Images-mittels-DSIM-fuer-OpenStack-vorbereiten.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=516</wfw:comment>

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

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Für unsere OpenStack DevCloud benötigten wir Images für OpenStack die mit cloudbase-init starten. Dazu gibt es bei Cloudbase ein GIT repository das die nötigen (Powershell) Scripte bereitstellt.

https://github.com/cloudbase/windows-openstack-imaging-tools

Als ich dies jedoch auf einem Windows 2012 R2 Server &lt;a href=&quot;https://cloudbase.it/create-windows-openstack-images/&quot;&gt;nach Anleitung&lt;/a&gt; ausführen wollte was das resultierende Image nicht startfähig. Es gab Warnungen dass DSIM nicht aktuell genug ist und anscheinend wurden auch die VirtIO Treiber nicht integriert.

Hier sind ein paar Schritte mit denen es dann geklappt hat:

a) Git4Windows installieren.

b) ein Arbeitsverzeichnis anlegen und die Image Tools dorthin auschecken:

&lt;pre&gt;
    mkdir c:\work
    cd /d c:\work
    git clone https://github.com/cloudbase/windows-openstack-imaging-tools.git
&lt;/pre&gt;

c) Aus einer Windows Server 2016 Installations-ISO das File sources\install.wim (5,6GB) extrahieren und nach c:\work\source\install.wim legen. (Ich habe dies mit einer Volume License ISO als auch dem 180 Tage Eval ISO erfolgreich gemacht)

d) Für Windows Server 2016 muss man eine DSIM Version verwenden die neuer ist. Dazu habe ich das &lt;strong&gt;Windows ADK für Windows 10, Version 1703&lt;/strong&gt; (&lt;a href=&quot;https://developer.microsoft.com/de-de/windows/hardware/windows-assessment-deployment-kit&quot;&gt;Hardware Dev Center&lt;/a&gt;) auf dem Server installiert. Es gibt zwar auf der Webseite an dass dies nur für Windows 10 ist, jedoch war es in meinem Fall auch für Windows Server 2016 (Rollup CDs) notwendig.

e) nach der Installation ist es Wichtig das DSIM Verzeichnis dieses neuen Kits im Pfad vor dem Windows Systemverzeichnis zu haben (da dort eine alte DSIM Version gefunden wird). Man kann `(Get-Command dism.exe).Path` verwenden um zu sehen welches DISM verwendet wird. Ich habe es mir einfach gemacht und in das verwendete Powershell script einfach einen passenden Pfad gesetzt.

f) Im Beispielscript werden die RedHat VirtIO Treiber heruntergeladen, ich hatte die URL auf eine neue Version angepasst.

g) Das Offline Beispielscript habe ich angepasst dass es alle Verzeichnisse unter c:\work sucht, dass es nur ein 15GB Image anlegt (und weil dieses noch transportiert und gestartet werden muss habe ich es auch als QCow2 angelegt.

Hier das komplette script (auszuführen als privelegierter lokaler admin im Unterverzeichnis example):
 &lt;a class=&quot;block_level&quot; href=&quot;http://itblog.eckenfels.net/index.php?/archives/516-Windows-Server-2016-Images-mittels-DSIM-fuer-OpenStack-vorbereiten.html#extended&quot;&gt;Continue reading &quot;Windows Server 2016 Images mittels DSIM für OpenStack vorbereiten&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 29 May 2017 14:27:00 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/516-guid.html</guid>
    
</item>
<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>IPv6 Kongress: Java-Anwendungen für IPv6 fit machen</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/499-IPv6-Kongress-Java-Anwendungen-fuer-IPv6-fit-machen.html</link>
            <category>Infrastruktur</category>
            <category>Java Programming</category>
            <category>Vernetzung</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/499-IPv6-Kongress-Java-Anwendungen-fuer-IPv6-fit-machen.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=499</wfw:comment>

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

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Ich habe die Gelegenheit auf dem fünften &lt;a href=&quot;http://www.ipv6-kongress.de/&quot;&gt;IPv6 Kongress&lt;/a&gt; (6.-7. Juni in Frankfurt) über das Thema Java und IPv6 zu sprechen.  (&lt;a href=&quot;http://www.ipv6-kongress.de/events/ipv6-kongress/Programm-vorlaeufig.html&quot;&gt;Programm&lt;/a&gt;). Hier das Abstract des Vortrags:

&lt;blockquote&gt;&lt;b&gt;7.6.2013 14:00 - 14:30 Uhr&lt;/b&gt;
Bernd Eckenfels: &lt;b&gt;Java-Anwendungen für IPv6 fit machen&lt;/b&gt;

Dass die Java-Plattform IPv6 unterstützt, ist allgemein bekannt – oder es wird vermutet. Aber sind dazu Änderungen an Anwendungen notwendig, die bisher nur für IPv4 getestet wurden? Welche Funktionen der IPv6-Protokollfamilie werden unterstützt? Welche Besonderheiten sind zu beachten, um Dual-Stack-fähige Anwendungen in Java zu erstellen?

Der Vortrag betrachtet die Java-API für Netzwerkkommunikation und untersucht diese auf Relevanz für IPv6. Ein besonderes Augenmerk wird auf die Umsetzung von Dual-Stack-fähigen Geschäftsanwendungen (TCP- und TLS-Protokoll) gelegt. Implementierungsdetails von Java SE 7 (OpenJDK, Oracle und IBM) sind Teil des Vortrags.&lt;/blockquote&gt;

Ich werde nicht auf die mobilen Java Profile oder Android eingehen. Und über Java 8 gibt es in dem Bereich keine Neuerungen zu vermelden. 
    </content:encoded>

    <pubDate>Thu, 16 May 2013 18:08:25 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/499-guid.html</guid>
    
</item>
<item>
    <title>E-Mail versenden von Amazon EC2</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/480-E-Mail-versenden-von-Amazon-EC2.html</link>
            <category>Cloud</category>
            <category>Infrastruktur</category>
            <category>Technik</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/480-E-Mail-versenden-von-Amazon-EC2.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=480</wfw:comment>

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

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    &lt;a href=&quot;http://aws.amazon.com/ec2/&quot; title=&quot;AWS EC2 Homepage&quot;&gt;Amazon EC2&lt;/a&gt; ist ein IaaS Anbieter bei dem man eigene virtuelle Systeme starten kann. Diese Systeme können dann alle Systemfunktionen die eine Anwendung benötigt bereitstellen. Dazu gehört zum Beispiel auch der E-Mail Versand (z.B. root Mails oder eben E-Mails der Anwendung wie z.B. Passwort Reminder oder Notifications).

Um sicherzustellen, dass die E-Mails die von einem Amazon EC2 System abgeschickt werden auch ankommen, und nicht in Spam Filter der Provider hängenbleiben sind folgende Punkte zu beachten:

a) wenn man einen Mailserver (MTA) verwendet der die Mails versendet so sollte dieser natürlich sicher konfiguriert sein, und kein Relaying von E-Mails zulassen - da sonst der EC2 Server zur Spamschleuder wird (was nicht nur Ärger mit Amazon nach sich zieht).

b) Der SMTP Server meldet sich mit einem Rechnername. Dort sollte er nicht den internen Amazon EC2 Namen verwenden der dem Rechner zugewiesen wird, denn dir dort verwendete .internal Domain wird von vielen E-Mail Empfängern als ungültig abgelehnt.

c) Die E-Mail Adresse des SMTP Servers (also in dem Fall der virtuelle EC2 Host) sollte in einen gültigen Hostnamen aufgelöst werden, denn sonst springt der Spamschutz der Empfänger an. Dies ist bei Amazon nur sinnvoll machbar wenn man eine Elastic IP verwendet. Dieses Verfahren wird PTR oder auch &quot;reverse DNS&quot; checks genannt.

d) Der Envelop-From (im Falle von Cron Mails z. B. root@host) der versendeten E-Mails sollte eine gültige E-Mail Adresse sein. Insbesondere prüfen E-Mail Server beim Empfang, ob die Domain existiert. Hier sollte also auch nicht der .internal Hostname von AWS verwendet werden.

e) Die Domain einer Absender E-Mail Adresse sollten nicht nur gültig sein, sondern mit dem &lt;a href=&quot;http://en.wikipedia.org/wiki/Sender_Policy_Framework&quot; title=&quot;Wikipedia SPF&quot;&gt;SPF Mechanismus (Sender Policy Framework)&lt;/a&gt; kann der Betreiber der Domain auch angeben von welchen Rechnern legalerweise Mails mit dem Absender versendet werden. Einige Empfänger benutzen das, um das Spamaufkommen zu reduzieren. In der Regel kommt in der Liste der zugelassenen Server nur die MX Server der Domain vor, und eben nicht beliebige IP-Adressen aus den Amazon AWS Netzen. Es bietet sich auch nicht an das komplette EC2 Netz in die Liste aufzunehmen, da sonst alle Amazon Kunden wiederum E-Mails am SPF Filter vorbei versenden können (das ist zwar weniger ein Problem aber eben unschön).

Aus diesen Punkten ergeben sich zwar einige Konfigurationen die man vornehmen kann um von einem EC2 Host direkt an Endempfänger Mails zu versenden. Die Wahrscheinlichkeit dass diese aber häufig als Spam erkannt werden ist groß. Deshalb ist es anzuraten, dass ein Smarthost verwendet wird. (Das hat auch administrative Vorteile wenn die EC2 Hosts Ihre Mails schnell loswerden und man nicht mehrere Mailwarteschlangen überwachen muss).

Um kein eigenes Relay betreiben zu müssen bietet es sich z.B. an den Simple E-Mail Service (SES) von Amazon zu verwenden. Dann muss man nur die SES E-Mail Server von Amazon AWS zusätzlich in die SPF Liste der Absenderdomain aufnehmen. Dies ist hier beschrieben: &lt;a href=&quot;http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/SPF.html&quot; title=&quot;AWS SES Developer Guide: SPF&quot;&quot;&gt;http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/SPF.html&lt;/a&gt;. Im Gegensatz zum kompletten IP-Subnetz von Amazon EC2 hat man bei dieser Vorgehensweise den Vorteil, dass Amazon ein hohes Interesse daran hat, dass nur autorisierte Benutzer die Absenderadresse verwenden. (Gleiches gilt übrigens auch für Google App Engine, hier kann man auch Mail Relays in die SPF Liste aufnehmen). Zudem kann man sich danke Amazon IAM ein Benutzername/Passwort erzeugen der außer dem E-Mail Versand keine weiteren Rechte hat. Dieser kann man dann bedenkenlos im EC2 Image hinterlegen - zumindest solange man dieses nicht mit anderen Amazon Anwendern teilt. Sonst bietet es sich eher an diese Credentials beim Start mit anzugeben.

Im nächsten Post beschreibe ich, wie man bei einem AMI auf Basis von Amazon Linux diese Varianten realisieren kann.
 
    </content:encoded>

    <pubDate>Mon, 19 Dec 2011 02:31:55 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/480-guid.html</guid>
    
</item>
<item>
    <title>Rechner im AD LDAP mit Powershell auflisten</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/476-Rechner-im-AD-LDAP-mit-Powershell-auflisten.html</link>
            <category>Infrastruktur</category>
            <category>Intranet</category>
            <category>Technik</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/476-Rechner-im-AD-LDAP-mit-Powershell-auflisten.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=476</wfw:comment>

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

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Ich hab ein wenig mit Powershell herumgespielt (weil ich das &lt;a href=&quot;http://blog.stefan-macke.com/2008/03/19/active-directory-mit-der-powershell-auslesen/&quot;&gt;Script&lt;/a&gt; das auch in &lt;a href=&quot;http://de.hakin9.org/magazine/1753-keine-angst-vor-online-banking&quot;&gt;de.Hackin9.org 08/2011&lt;/a&gt; abgebildet war nicht verstanden habe).

Dabei kam dann folgendes funktionierendes Script heraus, es sortiert mit alle Rechner des AD LDAPs und zeigt diese in einem grafischen Viewer mit Betriebsystemversion und Servicepack Level an:

&lt;pre&gt;$ldapSearcher = new-object directoryservices.directorysearcher;
$ldapSearcher.filter = &quot;(objectclass=computer)&quot;;
$computers = $ldapSearcher.findall();
$pcs = @();
foreach ($c in $computers) {
  $pc = &quot;&quot; | Select-Object Name,OS,SP,SPN;
  $pc.Name=$c.properties[&quot;cn&quot;];
  $pc.OS=$c.properties[&quot;operatingsystem&quot;];
  $pc.SP=$c.properties[&quot;operatingsystemservicepack&quot;];
  $pc.SPN=$c.properties[&quot;serviceprincipalname&quot;];
  $pcs += $pc;
}
$pcs | sort-object OS,SP,Name | Out-GridView;&lt;/pre&gt;
Ich habe aber keine Ahnung wie man einfacher aus den Dictionary Entries des &lt;code&gt;$c.Properties&lt;/code&gt; Member direkte Properties machen kann ohne diese mit einer foreach Schleife und direktem Assignment aufwändig zu kopieren. Ich hoffe ein mitlesender Powershell Guru kann mir das kurz sagen? :)

&lt;b&gt;Update:&lt;/b&gt; &lt;a href=&quot;http://www.maxtblog.com/&quot;&gt;Max Trinidad&lt;/a&gt; (&lt;a href=&quot;http://twitter.com/MaxTrinidad&quot;&gt;@MaxTrinidad&lt;/a&gt;) hat mich auf die Idee mit New-Object gebracht, damit lässt sich das Script etwas vereinfachen und die Attribute in Strings konvertieren:

&lt;pre&gt;$ldapSearcher = new-object directoryservices.directorysearcher;
$ldapSearcher.filter = &quot;(objectclass=computer)&quot;;
$computers = $ldapSearcher.findall();
[Array] $pcs = $null;
foreach($c in $computers) {    
    $pcs += New-Object PSobject -property @{
        Name = [string]$c.properties[&quot;cn&quot;];
        OS = [string]$c.properties[&quot;operatingsystem&quot;];
        SP = [string]$c.properties[&quot;operatingsystemservicepack&quot;];
        SPN = [string]$c.properties[&quot;serviceprincipalname&quot;]; }
}&lt;/pre&gt;
Und darauf aufbauend (aber ohne String Konvertierung) dann die Lösung mit der Automatischen Übernahme aller Dictionary Einträge aus dem AD Objekt:

&lt;pre&gt;$ldapSearcher = New-Object directoryservices.directorysearcher;
$ldapSearcher.filter = &quot;(objectclass=computer)&quot;;
$computers = $ldapSearcher.findall();
[Array] $pcs = $null;
$computers | ForEach-Object { $pcs += New-Object PSobject -property $_.Properties; }
$pcs | Out-GridView;&lt;/pre&gt; 
    </content:encoded>

    <pubDate>Wed, 10 Aug 2011 04:27:40 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/476-guid.html</guid>
    
</item>
<item>
    <title>Windows 7 hosts-file ignoriert IP Addressen mit 0 prefix</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/473-Windows-7-hosts-file-ignoriert-IP-Addressen-mit-0-prefix.html</link>
            <category>Infrastruktur</category>
            <category>Technik</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/473-Windows-7-hosts-file-ignoriert-IP-Addressen-mit-0-prefix.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=473</wfw:comment>

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

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Mir ist gerade zufällig aufgefallen (als ich diesen &lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5092451&quot;&gt;Bugreport&lt;/a&gt; nachgestellt habe) dass Windows 7 IPv4 Address-Einträge die eine führende 0 haben im hosts file ignoriert:

&lt;pre&gt;C:\Windows\system32&gt;echo 9.20.187.&lt;b&gt;0&lt;/b&gt;6 TestHost
  &gt;&gt; %SystemRoot%\system32\Drivers\etc\hosts

C:\Windows\system32&gt;ipconfig /displaydns | find &quot;A-Eintrag&quot;
    AAAA-Eintrag  . . . . : 2001::1
    AAAA-Eintrag  . . . . : fe80::20d:60ff:fe49:47
    AAAA-Eintrag  . . . . : 2001::2
    (Host-)A-Eintrag  . . : 9.20.187.96

C:\Windows\system32&gt;echo 9.20.187.6 TestHost
  &gt;&gt; %SystemRoot%\system32\Drivers\etc\hosts

C:\Windows\system32&gt;ipconfig /displaydns | find &quot;A-Eintrag&quot;
    AAAA-Eintrag  . . . . : 2001::1
    AAAA-Eintrag  . . . . : fe80::20d:60ff:fe49:47
    AAAA-Eintrag  . . . . : 2001::2
    (Host-)A-Eintrag  . . : 9.20.187.96
    &lt;b&gt;(Host-)A-Eintrag  . . : 9.20.187.6&lt;/b&gt;&lt;/pre&gt; 
    </content:encoded>

    <pubDate>Fri, 24 Jun 2011 03:58:15 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/473-guid.html</guid>
    
</item>
<item>
    <title>Amazon senkt die Preise für garantierte EC2 Nutzung</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/437-Amazon-senkt-die-Preise-fuer-garantierte-EC2-Nutzung.html</link>
            <category>Cloud</category>
            <category>Infrastruktur</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/437-Amazon-senkt-die-Preise-fuer-garantierte-EC2-Nutzung.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=437</wfw:comment>

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

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Amazon&#039;s Utility Computing Platform EC2 zeichnet sich durch eine einfache Skalierbarkeit aus. Für Anwender die allerdings nicht kurzfristig mehrere hundert Compute Instanzen benötigen war das Pricing nicht so attraktiv. Amazon hat nun Reserved Instances angekündigt. Kann man sich auf eine gleichmäßige Nutzung einer Instanz committen, so sinken die Nutzungspreise erheblich. Ich habe das mal (bei einer Monatsnutzng von 30*24h) hochgerechnet:
&lt;table border=&quot;1&quot;&gt;&lt;tr&gt;&lt;th&gt;Instanz&lt;/th&gt;&lt;th&gt;Stundenpreis&lt;/th&gt;&lt;th&gt;Norm Monat&lt;/th&gt;&lt;th&gt;Monat 1y&lt;/th&gt;&lt;th&gt;Monat 3y&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Small&lt;/td&gt;&lt;td&gt;$0,10/$0,05&lt;/td&gt;&lt;td&gt;$72&lt;/td&gt;&lt;td&gt;$48,68&lt;/td&gt;&lt;td&gt;$35,49&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;XL&lt;/td&gt;&lt;td&gt;$0,80/$0,24&lt;/td&gt;&lt;td&gt;$576&lt;/td&gt;&lt;td&gt;$390&lt;/td&gt;&lt;td&gt;$284&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
Das Modell scheint bisher noch nicht für die Windows Server verfügbar zu sein. Details &lt;a href=&quot;http://aws.amazon.com/ec2/#pricing&quot;&gt;unter EC2 Pricing&lt;/a&gt;.

Was ich bei Amazon immer wieder gut finde ist es wie durch einfache Bezahlmodelle Anreize für ein bestimmtes Userverhalten geschaffen wird, und dies dank der Anzahl der Benutzer skaliert. Z.b. die Möglichkeit IP Addressen zu reservieren, und solange man diese nutzt sind sie kostenlos. So langsam kommt Amazon mit diesem Pricing in die Regionen von normalen V-Servern (mit dem zusätzlichen Benefit dass man jederzeit mehr Ressourcen auf Stundenbasis dazuschalten kann). Ganz konkurenzfähig sind die Server allerdings immer noch nicht - trotz Dollar Kurs.

 
    </content:encoded>

    <pubDate>Sun, 15 Mar 2009 17:25:32 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/437-guid.html</guid>
    
</item>
<item>
    <title>SANs</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/400-SANs.html</link>
            <category>Infrastruktur</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/400-SANs.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=400</wfw:comment>

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

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Meiner Erfahrung nach werden im Enterprise Umfeld technische Infrastruktur Entscheidungen oftmals via Policy geregelt. Wenn dann neue Anwendungen installiert werden, so müssen diese sich in die vorhandene Landschaft einfügen - ohne gross eine Risikobewertung durchgeführt zu haben.

Typische Kandidaten für diese Vorgaben sind OS (unkritisch solange Erfahrungen damit vorliegen), Cluster, Netzwerk/Firewalls und Storage.

Gerade beim Storage ist das Vertrauen in ein Enterprise SAN grenzenlos (muss es auch sein, war ja teuer). Performance Engpässe werden nie auf der SAN Seite gesucht und Ausfälle werden nicht erwartet (als SPoF darf das SAN einfach nicht ausfallen).

Dabei gibt es ja auch alternative Ansätze. Lokales Storage (mit Sharding, Replikation), NAS oder auch die Auslagerung gewisser Daten in eine Storage Cloud. Auf jeden Fall sollte man sich überlegen: was passiert wenn mein SAN ausfällt, und wie schnell kann ich es wieder ans Laufen bringen.

In einem Artikel den ich auf &lt;a href=&quot;http://highscalability.com/should-you-use-san-scale-your-architecture&quot;&gt;Highscalability.com&lt;/a&gt; gefunden habe bespricht David Marks die Risiken eines SAN Infrastruktur für Web 2.0 Installationen, bei denen Skalierbarkeit und Verfügbarkeit natürlich oberste Prio haben: &lt;a href=&quot;http://youcanchangeitlater.wordpress.com/2008/10/23/should-i-get-a-san-to-scale-my-site-architecture/&quot;&gt;Should I get a SAN to scale my site architecture&lt;/a&gt; (You Can Change It Later Blog). 
    </content:encoded>

    <pubDate>Sun, 26 Oct 2008 19:15:27 +0100</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/400-guid.html</guid>
    
</item>
<item>
    <title>AWS Cloud SLAs</title>
    <link>http://itblog.eckenfels.net/index.php?/archives/394-AWS-Cloud-SLAs.html</link>
            <category>Cloud</category>
            <category>Infrastruktur</category>
    
    <comments>http://itblog.eckenfels.net/index.php?/archives/394-AWS-Cloud-SLAs.html#comments</comments>
    <wfw:comment>http://itblog.eckenfels.net/wfwcomment.php?cid=394</wfw:comment>

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

    <author>nospam@example.com (Bernd Eckenfels)</author>
    <content:encoded>
    Amazon wurde gefeiert als sie SLAs für Ihre Cloud Offerings angeboten haben. Das bezieht sich insbesondere auf die Amazon Web Services Dienste S3 (Storage Cloud), EC2 (Compute Cloud), ECB (Elastic Block Storage) und die Host Lösungen für Queueing (SQS) und Datenbank (SimpleDB).

Betrachtet man sich allerdings die SLAs, so muss man sagen diese sind ziemlich nutzlos in einem kommerziellen Umfeld (um traditionalle Bedenken zu zerstreuen):

Die neuen &lt;a href=&quot;http://aws.amazon.com/ec2-sla/&quot;&gt;EC2 SLA&lt;/a&gt; definieren, dass ein Kunde 10% der Gebühren für die letzten 365 Tage zurückerstattet bekommt, wenn die Verfügbarkeit unter 99.5% fällt. Dabei wird die Zurückerstattung nur für zukünftige Gebühren gut geschrieben. Die Zurückerstattung ist auf 10% gedeckelt. Strafen/Schadensersatz werden keine zugestanden. Und zu allem Übel ist die Definition der Verfügbarkeit noch so, dass der Kunde sich selbst darum kümmern muss ausgefallene Instanzen neu zu starten, und nur wenn dies nicht gelingt gilt der Service als ausgefallen. D.h. wenn eine Amazon Instanz alle Stunde ausfällt und der Startup einer neuen Instanz 5mins dauert, so gelten diese 5 Minuten nicht als Ausfall.

Bei den &lt;a href=&quot;http://aws.amazon.com/s3-sla/&quot;&gt;S3 SLA&lt;/a&gt; werden Gutschriften für erfolglose Requests gezählt. 10% bei unter 99.9% und 25% bei unter 99%. Dabei kann Amazon aber weder Requests zählen die nicht angekommen sind, noch steht Amazon mit Strafen/Schadensersatz für Datenverlust ein. Gleiches gilt für EBS, hier gibt es keine SLA, die typische jährliche Fehlerrate (AFR - Anual Failure Rate) wird mit 0.1% -  0.5% angegeben (Lokale Harddisks haben angeblich 4%).

Natürlich wird AWS durch diese SLA unter Druck gesetzt einen guten Service zu erbringen. Von daher haben diese schon einen Effekt. Der Kunde muss darauf aber vertrauen und das Risiko eines Schadens komplett selbst tragen. Eine reduzierte Amazon Rechnung wird Ihn da kaum trösten.

Cloud Computing definiert nicht nur die Technologie neu, sondern auch die Ökonomie des Outsourcings: statt ewig Langer Vertragsverhandlungen, umfangreichen SLA Monitorings, Schuldzuweisungen und umfangreiche Konventionalstrafen (die zu Aufschlägen beim Betreiber führen um sein Risiko abzusichern) wird auf ein Kooperatives Vorgehen gesetzt, das von Vertrauen geprägt ist. Deswegen haben es auch die Großen Anbieter in dem Markt einfacher akzeptiert zu werden. Die technischen Vorkehrungen die ein Betreiber trifft werden stärker betrachtet als seine Vertraglichen Zusagen. Zusätzlich ist die Lösung durch den Kunden schon stärker auf Ausfall ausgelegt.

(Diesen Artikel nehme ich zum Anlass eine neue Cloud Kategorie hier im Blog einzuführen) 
    </content:encoded>

    <pubDate>Fri, 24 Oct 2008 00:01:00 +0200</pubDate>
    <guid isPermaLink="false">http://itblog.eckenfels.net/index.php?/archives/394-guid.html</guid>
    
</item>

</channel>
</rss>
