Internet-Anonymisierung

  • Hallo,

    ich habe vor, ein etwas größeres Projekt anzufangen. Dabei geht es vor allem um Datensicherheit und das Verhindern des Datenerfassens im Internet.

    Ich will eine Server- und eine Client-Software entwickeln. Die Client-Software soll allen ausgehenden Netzwerkverkehr (außer lokales Netz, Ausnahmen festlegbar, am Anfang nur über Browser aufgerufene Seiten) abfangen, die Daten verschlüsseln und an den Server senden. Der Server entschlüsselt die Daten wieder und gibt die Daten an den Zielserver/-computer weiter. Dann erhält er die Antwort, verschlüsselt diese wieder und schickt sie dem Client zurück.

    Dabei habe ich jetzt diese Fragen:

    1.) Kann man den gesamten Netzwerkverkehr überhaupt zu einem Programm umleiten, und wenn ja, wie?
    2.) Wie ließen sich dann die enthaltenen Daten an den Client-Computer von der Client-Software so übergeben, dass es aussieht, als ob sie vom gleichen Port etc. kommen würden, also alles ganz normal?

    Zur Verschlüsselung hab ich schon ne Idee, das könnte man gut mit Public-Key(RSA) und vom Client gesendetem Zufallsschlüssel realisieren.

    Hoffe ihr könnt mir helfen und findet das Projekt gut :)

    Arkaneus

  • Netzverkehr umleiten: Wie wär's mit einem Mini-Browser _IECreateEmbedded () und einem kleinen Plugin, wenlches die Website spiegelt?
    Hab mich mit einem Proxy-Server nie befasst.
    Mfg tobi_girst

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • Im Prinzip musst du nur mit einer 2. Netzwerkkarte einen "Man in the Middle" erstellen, der dann den gesamten Traffic mitprotokolliert. Aber ehrlich gesagt, lass es....Habe mir mal von einem Kumpel ein schweineteures Profiprogramm ausgeliehen für ein paar Tage incl. Hardware, das war nicht einmal in der Lage, den gesamten Traffic fehlerfrei aufzuzeichnen!
    Bissl einen oder 2 Rechner sniffen oder aber eine rotglühende DSL-Leitung komplett mitzuschneiden/umzuleiten bzw zu ver/entschlüsseln sind 2 Paar Schuhe.
    Rechne mal über den dicken Daumen: 1000 Kilobyte pro Sekunde, verschlüsseln/entschlüsseln, ggf lost packets neu anfordern und der ganze andere Müll..... also ehrlich, da wäre ein VPN über einen "anonymen" Proxy sicher die einfachste Lösung. Und schon fertig :D

  • tobi_girst: Hatte ich zuerst auch drüber nachgedacht, aber wenn man seinen bevorzugten Browser (Firefox z. B. :thumbup: ) weiter benutzen kann, wärs natürlich besser :D

    @andi: Stimmt natürlich alles, aber ich würd das einfach mal gerne probieren. Und mit dem anonymen Proxy: Wenn man z. B. in China is, wo Golden Shield alle Seiten nach bestimmten Wörtern filtert und so weiter, hilft das auch nit. Deshalb soll ja alles verschlüsselt werden, sodas es nix interessantes gibt, was man rausfinden kann. Mir is klar, dass in China wahrscheinlich keiner das Programm jemals auch nur sehen (geschweige denn benutzen ;) ) wird, aber das ist halt einfach mal n Test, ob man sowas machn könnte.

    Edit: Ich bastel in der Zwischenzeit einfach mal weiter an nem Client und Server, die das alles mit nem Input aus ner Inputbox machn, also einfach hin und her schicken und testen, ob die Verschlüsselung und alles läuft.

    Edit2: Oh, hatte nit gesehn dass du VPN geschrieben hattest^^ Stimmt, wär ne Lösung, aber ich möchts trotzdem einfach mal probieren ;) Ich glaub ich mach erstmal dass mit dem Mini-Browser, allein schon um Geschwindigkeit mal zu testen.

    Einmal editiert, zuletzt von Arkaneus (9. November 2009 um 14:08)

  • Zitat

    Ich glaub ich mach erstmal dass mit dem Mini-Browser, allein schon um Geschwindigkeit mal zu testen.

    halte uns dabei auf dem laufenden^^

  • So, nach knapp 1 woche melde ich mich dann mal wieder :)

    Ich habe jetzt die Ver- und Entschlüsselung selbst realisiert. Bisher wird noch nichts gesendet, nur in einer Ini gespeichert, und die Dateneingabe erfolgt über eine Inputbox.

    Hier der "Client"(Verschlüsselung):

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #compiler_plugin_funcs = RSA_GenerateKeys, RSA_Encrypt, RSA_Decrypt
    #include <Crypt.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $plug = PluginOpen(@ScriptDir & "\RSA.dll")

    [/autoit] [autoit][/autoit] [autoit]

    Global $seperator = 'SEP'
    Global $pubkey_file = "C:\pubkey.rsa"

    [/autoit] [autoit][/autoit] [autoit]

    $inp = _GetData()
    $inp = _AddTimestampToData($inp)

    [/autoit] [autoit][/autoit] [autoit]

    ;InputBox("", "", $inp) ; Debugline

    [/autoit] [autoit][/autoit] [autoit]

    ;$pubkey = _GetPubkey()
    ;FileWrite($pubkey_file, $pubkey)

    [/autoit] [autoit][/autoit] [autoit]

    $temp_pass = _RandomPass(10)

    [/autoit] [autoit][/autoit] [autoit]

    If @error = -1 Then Exit MsgBox(0, "Error!", "Ein Fehler ist aufgetreten!" & @CRLF & "Das Programm wird beendet.")

    [/autoit] [autoit][/autoit] [autoit]

    ;InputBox("", "", $temp_pass) ; Debugline

    [/autoit] [autoit][/autoit] [autoit]

    _Crypt_Startup()
    $tKey = _Crypt_DeriveKey($temp_pass, $CALG_AES_256)

    [/autoit] [autoit][/autoit] [autoit]

    $inp_enc = BinaryToString(_Crypt_EncryptData($inp, $tKey, $CALG_USERKEY))

    [/autoit] [autoit][/autoit] [autoit]

    ;Inputbox("", "Verschlüsselt (AES 256):", $inp_enc) ;Debugline

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $enc_tpass = RSA_Encrypt($temp_pass, StringReplace($pubkey_file, "\", "\\"))

    [/autoit] [autoit][/autoit] [autoit]

    ;InputBox("", "", $enc_tpass) ; Debugline

    [/autoit] [autoit][/autoit] [autoit]

    $data = $inp_enc & $seperator & $enc_tpass

    [/autoit] [autoit][/autoit] [autoit]

    ;InputBox("", "", $data) ; Debugline

    [/autoit] [autoit][/autoit] [autoit]

    _SendData($data, "127.0.0.1")

    [/autoit] [autoit][/autoit] [autoit]

    _Crypt_DestroyKey($tKey)
    _Crypt_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    Func _RandomPass($tp_length = 8)
    Local $t_pass = ""
    If $tp_length = 0 Or Not IsNumber($tp_length) Then
    SetError(-1)
    Return -1
    EndIf
    For $i = 1 To $tp_length
    $t_pass = $t_pass & Chr(Random(32, 127, 1))
    Next
    Return $t_pass
    EndFunc ;==>_RandomPass

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GetData()
    $t_inp = InputBox("", "Daten eingeben:")
    Return $t_inp
    EndFunc ;==>_GetData

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GetPubkey()
    $pubkey = "123"
    Return $pubkey
    EndFunc ;==>_GetPubkey

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _AddTimestampToData($t_data)
    $t_data_n = $t_data & $seperator & @YEAR & @MON & @MDAY & @HOUR & @MIN
    Return $t_data_n
    EndFunc ;==>_AddTimestampToData

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _SendData($t_data, $t_ip)
    IniWrite("C:\test.rsa.ini", "Data", "Data", $t_data)
    If NOT @error Then Return 1
    EndFunc

    [/autoit]

    und der "Server" (Entschlüsselung):

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #compiler_plugin_funcs = RSA_GenerateKeys, RSA_Encrypt, RSA_Decrypt
    #include <Crypt.au3>
    ;#include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $plug = PluginOpen(@ScriptDir & "\RSA.dll")

    [/autoit] [autoit][/autoit] [autoit]

    Global $seperator = 'SEP'
    Global $privkey_file = "C:\privkey.rsa"

    [/autoit] [autoit][/autoit] [autoit]

    $data = _GetData("127.0.0.1")

    [/autoit] [autoit][/autoit] [autoit]

    ;InputBox("", "", $data) ;Debugline

    [/autoit] [autoit][/autoit] [autoit]

    $sp_data = StringSplit($data, $seperator, 3)

    [/autoit] [autoit][/autoit] [autoit]

    ;_ArrayDisplay($sp_data) ;Debugline, auch Include aray.au3 mit ein-/auskommentieren!

    [/autoit] [autoit][/autoit] [autoit]

    $daten = $sp_data[0]
    $key = $sp_data[1]

    [/autoit] [autoit][/autoit] [autoit]

    $dec_key = RSA_Decrypt($key, StringReplace($privkey_file, "\","\\"))

    [/autoit] [autoit][/autoit] [autoit]

    ;InputBox("", "", $dec_key) ;Debugline

    [/autoit] [autoit][/autoit] [autoit]

    _Crypt_Startup()
    $tKey = _Crypt_DeriveKey($dec_key, $CALG_AES_256)

    [/autoit] [autoit][/autoit] [autoit]

    $dec_daten = BinaryToString(_Crypt_DecryptData(StringToBinary($daten), $tKey, $CALG_USERKEY))

    [/autoit] [autoit][/autoit] [autoit]

    InputBox("", "", $dec_daten) ;Debugline

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetData($t_ip)
    $t_data = IniRead("C:\test.rsa.ini", "Data", "Data", False)
    If $t_data = False Then
    SetError(-1)
    Return -1
    EndIf
    Return $t_data
    EndFunc ;==>_GetData

    [/autoit]

    Ich habe möglichst viel in Funktionen gepackt, damit hinterher z. B. das Senden und die Eingabe von Daten leichter verändert werden können. Es wird außerdem ein Zeitstempel hinzugefügt, der hinterher vom Server überprüft werden soll, damit nicht einfach die Abgefangenen Daten nochmals gesendet werden können, um herauszufinden, welche Website aufgerufen wurde o. ä. (kann sein, dass das unnötig ist, meine Ideen sind meistens ziemlich wirr :P )

    Im Anhang noch die RSA.dll von peethebee, es muss erst mit dem Script

    [autoit]

    #compiler_plugin_funcs = RSA_GenerateKeys, RSA_Encrypt, RSA_Decrypt
    #RequireAdmin
    $plug = PluginOpen(@ScriptDir & "\RSA.dll")
    RSA_GenerateKeys(128, "C:\", "rsa")
    FileMove("C:\rsa.pubkey", "C:\pubkey.rsa")
    FileMove("C:\rsa.privkey", "C:\privkey.rsa")

    [/autoit]


    ein neues Schlüsselpaar erstellt werden.

    So, und das wars dann auch wieder ;)

    LG, Arkaneus

    Edit: BTW, weiß jemand warum in SciTE (neueste Beta von AutoIt) das RequireAdmin nicht mehr farbig ist?

    Edit2: Achja, das Script muss mit der Beta laufen, weil in der Stable die Crypt.au3-UDF noch fehlt.

    autoit.de/wcf/attachment/6685/

  • Hallo Arkaneus.

    Wenn man die "Crypt.au3-UDF" in den Include-Ordner von AutoIt ablegt, sollte es auch mit der normalen Version arbeiten. Sprich: ohne Betanutzung. Aber nicht getestet.

    Lina

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl