EncFS Portierungen

Bei EncFS handelt es sich um eine Implementierung eines Verschlüsslungssystems für bestehende Dateisysteme. Bei diesem System wird jede Datei für sich verschlüsselt und das darunter liegende Dateisystem genutzt. Neben der Originalimplementierung von EncFS gibt es auch Portierungen in andere Programmiersprachen. Mit diesen Portierungen können EncFS verschlüsselte Daten auch unter Java und .NET ausgelesen werden.

Die Javavariante von EncFS trägt dabei den Namen „encfs-java“ und ist auf GitHub zu finden. Neben dieser gibt es auch eine Variante für .NET welche in C# geschrieben ist und auf BitBucket zu finden ist. Ursprünglich handelt es sich bei „encfs-dotnet“ um eine Portierung von „encfs-java“. Mittlerweile wurde diese Implementierung aber komplett neu geschrieben. Wie bei der Originalimplementierung, handelt es sich auch bei den Portierungen um freie Software. Die Java-Portierung steht dabei unter der GPL, während die .NET Implementierung unter der LGPG steht, was deren Verwendung flexibler gestaltet.

Weitere Informationen gibt es unter:
https://de.wikipedia.org/wiki/EncFS

Twitter Bibliothek für .NET und Mono

Möchte man in einer .NET respektive Monosprache einen Anwendung schreiben welche mit der Twitter API interagiert, so sollte man hierfür eine Bibliothek nutzen um den Aufwand in Grenzen zu halten.

tweetinvi.codeplex.com

tweetinvi.codeplex.com

Eine empfehlenswerte Biblitothek in diesem Bereich ist dabei Tweetinvi welche auf CodePlex zu finden ist. Tweetinvi ist dabei unter der Microsoft Public License lizensiert und somit freie Software. Die Bibliothek ist dabei problemlos in der Lage mehrere Millionen Tweets zu verarbeiten und befindet sich in aktiver Entwicklung. Ein einfaches Beispiel um einen Tweet abzusetzen könnte dabei so aussehen:

IToken token=new Token(twitterAccessToken, twitterAccessTokenSecret, twitterConsumerKey, twitterConsumerSecret);
ITweet tweet=new Tweet(tweetText, token);
bool success=tweet.Publish();

Damit hätte man den ersten Tweet mit dieser Bibliothek abgesendet.

Sichere Strings unter .NET

Manchmal möchte man eine Zeichenkette im Arbeitsspeicher nicht länger als nötig im Klartext vorhalten. Hierfür gibt es unter .NET/Mono die Klasse „SecureString“. Diese verschlüsselt den Klartext, so das dieser nicht ohne weiteres im Speicher zu finden ist. Leider ist die Nutzung der „SecureString“ etwas komplizierter:

SecureString secureString=new SecureString();
secureString.AppendChar('g');
secureString.AppendChar('e');
secureString.AppendChar('h');
secureString.AppendChar('e');
secureString.AppendChar('i');
secureString.AppendChar('m');

// in Klartext umwandeln
IntPtr secureStringPointer=Marshal.SecureStringToBSTR(secureString);
string klartext=Marshal.PtrToStringAuto(secureStringPointer);

Hier muss man abwägen, ob sich die Nutzung eines solches Konstruktes lohnt, oder man weiterhin normale Strings für sensible Daten nutzt.

Mail aus einer Software heraus versenden

Manchmal möchte aus einer Desktopanwendung heraus eine Mail verschicken. Das ist insofern problematisch, da man die Zugangsdaten für einen Mailaccount nicht in einer Anwendung hinterlegen sollte. Aus Webanwendungen heraus ist das Senden von Mails dagegen eine einfache Sache. Also was liegt näher als diesen Vorteil für das Senden von Mails aus Desktopanwendungen heraus zu nutzen.

<?php
    $reciever=$_POST["reciever"];
    $allowedRecieverDomain="example.org";
    $subject=$_POST["subject"];
    $text=$_POST["message"];

    //Sender
    $senderName="Mailer";
    $sender="";

    //Additional challenge
    $challenge="abc123";
    if($challenge!=$_POST["challenge"]) return;

    //Check reciever
    $atCount=substr_count($reciever, "@");
    if($atCount>1) return;

    if(!(strpos($reciever, "@" . $allowedRecieverDomain)===FALSE))
    {
        mail($reciever, $subject . " - (" . date("d.m.y - H:m:s") . ")", $text, "From: $senderName <$sender>");
    }
?>

Ein kleines PHP Skript mit dem Namen „mailer.php“ sorgt dafür das die Mail bzw. der Text der Mail in Empfang genommen wird. Anschließend wird nachgeschaut ob die Mail an einen validen Sender adressiert ist. In diesem Beispiel werden nur Mails an @example.org weitergeleitet. Schließlich möchte man keine Spamschleuder betreiben. Nun müssen die Parameter in der Anwendung noch per POST-Request übergeben werden. Unter C# könnte das ganze so aussehen:

System.Net.ServicePointManager.Expect100Continue=false;

string url="http://example.org/mailer.php";

using(var wb=new WebClient())
{
    var data=new NameValueCollection();
    data["sendername"]="Mailer";
    data["sender"]="";
    data["reciever"]="";
    data["subject"]="Mail from Application";
    data["message"]="Message";

    var response=wb.UploadValues(url, "POST", data);
}

Der Quellcode ist dabei auf GitHub zu finden und steht unter der AGPL.

Debugger da?

Unter .NET ist es manchmal sehr nützlich zu wissen, ob an die Anwendung ein Debugger angehängt ist. Im Namespace „System.Diagnostics“ gibt es dazu auch die passende statische Eigenschaft mit dem Namen „IsAttached“. Die Nutzung könnte dabei so aussehen:

if(Debugger.IsAttached==true)
{
    //Do something
}

Der Quelltext in den Blockklammern wird dabei nur dann ausgeführt, wenn ein Debugger an die Anwendung angehangen ist. Das kann die IDE (Visual Studio und Co.) sein, es kann aber auch ein böswilliger Angreifer sein – wobei es natürlich Verfahren gibt, die Erkennung auszuhebeln.