moziloCMS Supportforum

Allgemeines => mozilo allgemein => Thema gestartet von: MarcAurel am 17. März 2016, 20:43:20

Titel: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 17. März 2016, 20:43:20
Bei einigen Test ist mir ein Sicherheitsaspekt aufgefallen, das vielleicht anderen entgangen ist.
Mozilo sendet das Passwort bei der Anmeldung offen über das Internet im Klartext.

Das Problem ist , meiner Meinung nach groß, aber lässt sich einfach beheben.
Hier der Auszug aus einem kleinen Sniffer :

POST /admin/index.php HTTP/1.1
Host: publius.lima-city.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
bytes: 40
bytes: 796
POST /admin/index.php HTTP/1.1
Host: publius.lima-city.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://publius.lima-city.de/admin/index.php?logout=true (http://publius.lima-city.de/admin/index.php?logout=true)
Cookie: mozilo_editor_settings=true,false,mozilo,12px; _lcp=a; SimpleCounter=01d7d5bb5ea52904e05b8775c9ab32ab; _lcp2=a; _lcp3=a; LCWSID=a359817cd8eaefec5d7fb166b2ca29a7; MOZILOID_99f1e189003a0d35c2593b575137008b=fb1e0e30b65c201531a3a1a2510a8513
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 48

username=MarcAurel&password=MarcAurel&login=Login - 796
bytes: 40
bytes: 40
bytes: 40
bytes: 40
bytes: 40
bytes: 40
bytes: 40
bytes: 40
bytes: 40
bytes: 40
bytes: 40
bytes: 40
bytes: 694
POST /admin/mod_rewrite_t_e_s_t.html HTTP/1.1
Host: publius.lima-city.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html, */*; q=0.01
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
X-Requested-With: XMLHttpRequest
Referer: http://publius.lima-city.de/admin/index.php (http://publius.lima-city.de/admin/index.php)
Cookie: mozilo_editor_settings=true,false,mozilo,12px; _lcp=a; SimpleCounter=01d7d5bb5ea52904e05b8775c9ab32ab; _lcp2=a; _lcp3=a; LCWSID=a359817cd8eaefec5d7fb166b2ca29a7; MOZILOID_99f1e189003a0d35c2593b575137008b=fb1e0e30b65c201531a3a1a2510a8513
Connection: keep-alive
Content-Length: 0

- 694
bytes: 40
bytes: 93
bytes: 40


Natürlich sind Username und Passwort von mir editiert worden, aber im Original stand genauso im Klartext.

Ich habe gesehen dass intern die Passwörter mit MD5 gehascht werden.

MD5 und SH1 sin längst geknackt worden, im Internet gibt es lookup tables  für sämtliche  mögliche Kombinationen, die ein passendes Passwort liefern. Allerdings hilft die interne Verschlüsselung wenig, wenn die Passwörter offen über das Netz gesendet werden.
Es sollte ein SHA2 eingesetzt werden z.B SHA 256 um die Passwörter vor dem Senden zu verschlüsseln.
Wenn man mir genau sagt wo die Schnittstelle in JavaScript-Code ist, kann ich es selber einfügen und hier die Lösung präsentieren, oder ich kann die entsprechenden JavaScript Funktionen für SHA 256 um das Problem zu beheben liefern.

Gruß


Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: Paul am 20. März 2016, 15:17:28
Ich finde, dass man die Hinweise von @MarcAurel ernst nehmen sollte. Eine spezielle Frage habe ich aber noch an MarcAurel:  Kann man das Passwort bei Nutzung von SSL (also https://, geht ja bei Lima-City auch) das Passwort ähnlich leicht mit einem Sniffer auslesen?
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 20. März 2016, 20:12:52
Zitat von: Paul am 20. März 2016, 15:17:28
  Kann man das Passwort bei Nutzung von SSL (also https://, geht ja bei Lima-City auch) das Passwort ähnlich leicht mit einem Sniffer auslesen?

Bei SSL nein.

Ich habe gerade das AccesControl angepasst wie oben beschrieben und es  funktioniert.
Ich werde demnächst auch das Admin-Modul anpassen und  die Lösung(en) hier präsentieren.

Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: hausl78 am 22. März 2016, 17:04:37
Seiten ohne SSL werden es bald schwer haben, hab ich letztens erst gelesen..  Die Bowserhersteller haben schon Pläne, Seiten ohne SSL "rot" anzuzeigen. http://t3n.de/news/https-google-markiert-bald-alle-675146/ (http://t3n.de/news/https-google-markiert-bald-alle-675146/)

Dazu noch - also Info:
ZitatEs sollte ein SHA2 eingesetzt werden
http://php.net/manual/de/faq.passwords.php (http://php.net/manual/de/faq.passwords.php)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 22. März 2016, 18:45:02
Zitat von: MarcAurel am 17. März 2016, 20:43:20... Das Problem ist , meiner Meinung nach groß, aber lässt sich einfach beheben. ...
Das Passwort wird bei vielen anderen CMS System ebenfalls im Klartext übertragen. Das sichere Übertragen funktioniert nur mit einem HTTPS-Formular oder diversen Lösungen per Javascript Libraries.

Bei großen Onlineshops oder großen Internet Communities ist das Anmelden schon lange nur noch per HTTPS möglich. Solange der normale Privat-Kunde beim Erwerb eines Webspaces das HTTPS/SSL extra bezahlen muss wird das Passwort bei vielen CMS Systemen weiterhin ohne Verschlüsselung verschickt.

Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 22. März 2016, 19:08:26
Zitat von: laborix am 22. März 2016, 18:45:02
Das Passwort wird bei vielen anderen CMS System ebenfalls im Klartext übertragen.

Ist das ein Grund um über eine Sicherheitslücke in Mozilo hinweg zu sehen?

Wobei es lässt sich relativ einfach beheben.
Statt das Passwort im Klartext zu senden, kann  dies vorher client side per  Jacascript mit einem mindestens SHA 256 gehasht werden und so gesendet werden.

Meines Wissens nach SHA2 ist sicher , für ein Passwort mit einer mindestlänge von 8 Charakteren.

Wozu bemüht man sich das Passwort in der Datenbank zu  verschlüsseln wenn sowieso bei jedem Einloggen im Klartext zum Server gesendet wird?



Zitat von: laborix am 22. März 2016, 18:45:02
oder diversen Lösungen per Javascript Libraries.


Es sind nur 3 kleine Funktionen  die man ohne weiteres in Php-Script einfügen kann. Ich habe mich angeboten die Lösung zu liefern wenn Interessen vorhanden sind.
:)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 22. März 2016, 19:34:03
Zitat von: MarcAurel am 22. März 2016, 19:08:26Meines Wissens nach SHA2 ist sicher , für ein Passwort mit einer mindestlänge von 8 Charakteren.
Was bringt eine Verschlüsselung wenn ein Passwort verwendet wird, das auf SHA-x-Listen schon zur Verfügung steht?

[ot]
Abgesehen davon, um das Passwort auszulesen, muss man den Traffic mitschneiden. Geht in vielen Firmen mittels Proxy oder ähnlichen Produkten. Bei Privatpersonen im WLAN per Backdoor Trojaner oder allen die das WLAN Passwort kennen. Man könnte aber auch die Straße aufreißen und dort die Leitung anzwacken, oder über dem Ärmelkanal die großen Jungs fragen.

Ich frage mich oft warum sich jemand darüber Gedanken macht, aber auf dem Handy G..gle oder anderen Apps vollen Zugriff auf alles gibt? Dann spielt Klartext eine Rolle. Aber dafür interessiert sich niemand.
[/ot]

Nicht böse sein, aber in dem Fall wenn HTTPS zum Standard wird, gibt es mit Sicherheit wieder eine Möglichkeit Passwörter mitzuschneiden.
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 22. März 2016, 19:57:49
Zitat von: laborix am 22. März 2016, 19:34:03

Was bringt eine Verschlüsselung wenn ein Passwort verwendet wird, das auf SHA-x-Listen schon zur Verfügung steht?

Ich sagte bereits am Anfang, für MD5 SHA1 gibt es komplette lookup tables, für SHA2 nicht, es ist sicher.
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 22. März 2016, 20:27:59
Hallo Leute hier ist die Lösung "ready to use" eingefügt in AccesControl.
Es funktioniert mit oder ohne JavaScript, natürlich dann ohne Verschlüsselung.

function get_login($horizontal = false) {
        if(AC_LOGGED_USER !== false)
            return "";

        $css_horizontal = "";
        $tmpl = '{ERROR}<ul>'
            .'<li>{USER_TEXT}<br />{INPUT_USER}</li>'
            .'<li>{PW_TEXT}<br />{INPUT_PW}</li>'
            .'<li>{BUTTON}</li>'
            .'</ul>';
        if($horizontal) {
            $css_horizontal = " ac-login-horizontal";
            $tmpl = '{ERROR}<ul>'
                .'<li>{USER_PW_TEXT}</li>'
                .'<li>{INPUT_USER}{INPUT_PW}{BUTTON}</li>'
                .'</ul>';
        }
        if(!$horizontal and strlen($this->settings->get('login_config')) > 7)
            $tmpl = $this->settings->get('login_config');
        elseif($horizontal and strlen($this->settings->get('login_config_horizontal')) > 7)
            $tmpl = $this->settings->get('login_config_horizontal');
        $tmpl_error = "";
        if($_SESSION['AC_LOGIN_STATUS'] == 'login_error') {
            $error_text = $this->cms_lang->getLanguageValue("login_errorcheck");
            if(strlen($this->settings->get('login_user_error')) > 7)
                $error_text = $this->settings->get('login_user_error');
                $tmpl_error = '<div class="ac-login-error">'.$error_text.'</div>';
        }
        $_SESSION['AC_LOGIN_STATUS'] = false;
   
         
         $form ='<noscript> <div class="ac-login-error">login not secure</div></noscript>'
         .'<form accept-charset="'.CHARSET.'" method="post" action="'.$this->current_url.'">'
         .'<input id="ac_password_hash" type="hidden" name="ac_password_hash" value="" />'
            .str_replace(array("{USER_TEXT}","{PW_TEXT}","{USER_PW_TEXT}","{INPUT_USER}","{INPUT_PW}","{BUTTON}","{ERROR}"),
                array($this->cms_lang->getLanguageValue("user"),
                    $this->cms_lang->getLanguageValue("pw"),
                    $this->cms_lang->getLanguageValue("user_pw_horizontal"),
                    '<input type="text" name="ac_user" value="" />',
                    '<input id="ac_password" type="password" name="ac_password" value="" />',               
                    '<input onclick="GetHash()" type="submit" value="'.$this->cms_lang->getLanguageValue("login").'" />',
                    $tmpl_error
                ),
            $tmpl)
            .'<input type="hidden" name="ac_action" value="login" /></form>';
        return '<div class="ac-user-login'.$css_horizontal.'">'.$form.'</div>' . $this->getJavaScriptForHash();
    }

function getJavaScriptForHash(){
      $script = '<script type="text/javascript">'
      .'var password = document.getElementById("ac_password");'
      .'var passwordHasch = document.getElementById("ac_password_hash");'
      .'function GetHash() {'
      .'passwordHasch.value = SHA256(password.value);'
      .'password.value = passwordHasch.value;'       
      .'}'
      .'function SHA256(s){'
      .'    var chrsz   = 8;'
      .'    var hexcase = 0;'
      .'    function safe_add (x, y) {'
      .'        var lsw = (x & 0xFFFF) + (y & 0xFFFF);'
      .'        var msw = (x >> 16) + (y >> 16) + (lsw >> 16);'
      .'        return (msw << 16) | (lsw & 0xFFFF);'
      .'    }'
      .'    function S (X, n) { return ( X >>> n ) | (X << (32 - n)); }'
      .'    function R (X, n) { return ( X >>> n ); }'
      .'    function Ch(x, y, z) { return ((x & y) ^ ((~x) & z)); }'
      .'    function Maj(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); }'
      .'    function Sigma0256(x) { return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); }'
      .'    function Sigma1256(x) { return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); }'
      .'    function Gamma0256(x) { return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); }'
      .'    function Gamma1256(x) { return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); }'
      .'    function core_sha256 (m, l) {'
      .'        var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2);'
      .'        var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);'
      .'        var W = new Array(64);'
      .'        var a, b, c, d, e, f, g, h, i, j;'
      .'        var T1, T2;'
      .'        m[l >> 5] |= 0x80 << (24 - l % 32);'
      .'        m[((l + 64 >> 9) << 4) + 15] = l;'
      .'        for ( var i = 0; i<m.length; i+=16 ) {'
      .'            a = HASH[0];'
      .'            b = HASH[1];'
      .'            c = HASH[2];'
      .'            d = HASH[3];'
      .'            e = HASH[4];'
      .'            f = HASH[5];'
      .'            g = HASH[6];'
      .'            h = HASH[7];'
      .'            for ( var j = 0; j<64; j++) {'
      .'                if (j < 16) W[j] = m[j + i];'
      .'                else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]);'
      .'                T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);'
      .'                T2 = safe_add(Sigma0256(a), Maj(a, b, c));'
      .'                h = g;'
      .'                g = f;'
      .'                f = e;'
      .'                e = safe_add(d, T1);'
      .'                d = c;'
      .'                c = b;'
      .'                b = a;'
      .'                a = safe_add(T1, T2);'
      .'            }'
      .'            HASH[0] = safe_add(a, HASH[0]);'
      .'            HASH[1] = safe_add(b, HASH[1]);'
      .'            HASH[2] = safe_add(c, HASH[2]);'
      .'            HASH[3] = safe_add(d, HASH[3]);'
      .'            HASH[4] = safe_add(e, HASH[4]);'
      .'            HASH[5] = safe_add(f, HASH[5]);'
      .'            HASH[6] = safe_add(g, HASH[6]);'
      .'            HASH[7] = safe_add(h, HASH[7]);'
      .'        }'
      .'        return HASH;'
      .'    }'
      .'    function str2binb (str) {'
      .'        var bin = Array();'
      .'        var mask = (1 << chrsz) - 1;'
      .'        for(var i = 0; i < str.length * chrsz; i += chrsz) {'
      .'            bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);'
      .'        }'
      .'        return bin;'
      .'    }'
      .'    function Utf8Encode(string) {'
      .'        string = string.replace(/\r\n/g,"\n");'
      .'        var utftext = "";'
      .'        for (var n = 0; n < string.length; n++) {'
      .'            var c = string.charCodeAt(n);'
      .'            if (c < 128) {'
      .'                utftext += String.fromCharCode(c);'
      .'            }'
      .'            else if((c > 127) && (c < 2048)) {'
      .'                utftext += String.fromCharCode((c >> 6) | 192);'
      .'                utftext += String.fromCharCode((c & 63) | 128);'
      .'            }'
      .'            else {'
      .'                utftext += String.fromCharCode((c >> 12) | 224);'
      .'                utftext += String.fromCharCode(((c >> 6) & 63) | 128);'
      .'                utftext += String.fromCharCode((c & 63) | 128);'
      .'            }'
      .'        }'
      .'        return utftext;'
      .'    }'
      .'    function binb2hex (binarray) {'
      .'        var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";'
      .'        var str = "";'
      .'        for(var i = 0; i < binarray.length * 4; i++) {'
      .'            str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +'
      .'            hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);'
      .'        }'
      .'        return str;'
      .'    }'
      .'    s = Utf8Encode(s);'
      .'    return binb2hex(core_sha256(str2binb(s), s.length * chrsz));'
      .'}'
      .'</script>';
      return $script;
   }

  function check_login() {
        # Plugin wurde schonnmal aufgerufen
        if(defined('AC_LOGGED_USER'))
            return;
        $action = getRequestValue("ac_action","post",false);
        # Prüfen, ob action=login oder action=logout.
        if(!empty($action)) {
            $user = getRequestValue("ac_user","post",false);
            $pw = getRequestValue("ac_password","post",false);
         $pwh = getRequestValue("ac_password_hash","post",false);         
            if($action == "login" and !empty($user) and !empty($pw)) {
                $_SESSION['AC_LOGIN_STATUS'] = 'login_error';
            
            if ($pwh != ""){
               if($this->checkLoginDataJavascript($user, $pwh)) {
                  $_SESSION['AC_LOGGED_USER_IN'] = $user;
                  $_SESSION['AC_LOGGED_USER_TIMEOUT'] = time() + $this->ac_users[$user][1];
                  $_SESSION['AC_LOGIN_STATUS'] = 'login_ok';
               }
            }
            else{
               if($this->checkLoginData($user, $pw)) {
                  $_SESSION['AC_LOGGED_USER_IN'] = $user;
                  $_SESSION['AC_LOGGED_USER_TIMEOUT'] = time() + $this->ac_users[$user][1];
                  $_SESSION['AC_LOGIN_STATUS'] = 'login_ok';
               }
            }

....


  protected function checkLoginData($user, $pass) {
        // if(isset($this->ac_users[$user]) and (true === $this->hasher->CheckPassword($pass,$this->ac_users[$user][0]))) {
            // return true;
        // }
      if(isset($this->ac_users[$user]) and (hash('sha256', $pass) == $this->ac_users[$user][0])) {
            return true;
        }
        return false;
    }
   
    protected function checkLoginDataJavascript($user, $hash) {      
        if(isset($this->ac_users[$user]) and ($hash == $this->ac_users[$user][0])) {
            return true;
        }
        return false;
    }
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 23. März 2016, 20:03:46
Zu meinem ,,Verbesserungsvorschlag"  zur Sicherheit  von Mozilo von vorhin, um eine kleine Datenklau-Paranoia weiter zu spinnen, man könnte noch  zu dem Anmeldeformular (Passworteingabe) auch ein Javascript-Virtual-Keyboard anbieten, um eventuelle Keylogger zu verhindern dass Anmelde-Daten ablesen und weiter senden. Etwas wie das hier (http://www.greywyvern.com/code/javascript/keyboard).

Der Sniffer  in einem früheren Posten erwähnt, genauso wie ein  Keylogger  die nicht von Antivirus-Software erfasst werden können, sind relativ einfach zu erstellenden Programme wenn man weißt wie und weiter verbreitet als man vermutet.
Ich war selbst oft angewiesen an Internet aus den Internet-Cafes , Hotels und fremden Firmen-Computer von fremden  Firmen auch im Ausland. Ein sichereres Werkzeug   zu meinen Daten wäre mir lieber gewesen.

Ich habe noch ein paar Ideen aber...  :)

Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 23. März 2016, 21:56:32
Zitat von: hausl78 am 22. März 2016, 17:04:37
Seiten ohne SSL werden es bald schwer haben, hab ich letztens erst gelesen..  Die Bowserhersteller haben schon Pläne, Seiten ohne SSL "rot" anzuzeigen.

Vor einem halben Jahr schrieb Stefan hier, dass Mozilo  jetzt auch SSL kann und auf einmal soll es nicht mehr ohne SSL weiter gehen?
Ich befürchte dass dieses "bald" noch einigen Jahren dauern wird.

Eine Lösung für Mozilo um eine schnelle Verschlüsselung für jedermann anzubieten, sehr einfach zu implementieren und kostenlos für den privaten Bereich findet man hier. (http://www.nossl.net/)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 25. März 2016, 10:00:33
Zitat von: MarcAurel am 23. März 2016, 21:56:32...Vor einem halben Jahr schrieb Stefan hier, dass Mozilo  jetzt auch SSL kann und auf einmal soll es nicht mehr ohne SSL weiter gehen? ...
SSL funktioniert in moziloCMS 2.0 wenn auf dem Webspace SSL aktiviert ist.

Mehr als 75% aller Privatnutzer haben SSL nicht in ihrem Webspace Vertrag. Um SSL auf dem Webspace nutzen zu können muss das extra für mehr Geld erworben werden.
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 25. März 2016, 10:04:19
Zitat von: MarcAurel am 23. März 2016, 20:03:46... Ich habe noch ein paar Ideen aber...
Nur eine kurze Frage:
Warum hast du dein eigenes CMS aufgegeben wenn alles so einfach mit ein paar Ideen umsetzbar ist?
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 25. März 2016, 11:27:20
Zitat von: laborix am 25. März 2016, 10:04:19
Nur eine kurze Frage:
Warum hast du dein eigenes CMS aufgegeben wenn alles so einfach mit ein paar Ideen umsetzbar ist?

Die Antwort ist relativ einfach, es war veraltet und nicht z.B. wie Mozilo durch Plugins erweiterbar.
Zufällig habe ich Mozilo entdeckt und entspricht mit kleinen Ausnahmen die ich hier erwähnt habe (und auch behoben) ganz meinen Erwartungen.

Und die hier gefunden Plugins sind  auch sehr interessant und erweiterbar.

Ich bin aber hergekommen nicht nur um zu nehmen sondern auch zu geben, wenn ich es auch kann.
Ist das nicht erwünscht?

Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 25. März 2016, 12:10:39
ZitatZitat auf der mozilo.de Startseite

moziloCMS ist ein einfaches und übersichtliches Content-Management-System (CMS). Es richtet sich vor allem an Benutzer mit geringen HTML-Kenntnissen und besticht durch seine einsteigerfreundliche Bedienung.

moziloCMS ist eine kleine Community, hier geht das nicht so hoppla hopp.
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 25. März 2016, 12:25:01
Zitat von: laborix am 25. März 2016, 12:10:39


moziloCMS ist eine kleine Community, hier geht das nicht so hoppla hopp.

Entschuldigung,  das habe ich nicht gewusst. :)

Ich  finde Mozilo trotzdem ein großartiges Werkzeug, mir ist noch nicht ganz klar von wem es entwickelt wurde und ob noch jemand dran ist.
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 25. März 2016, 12:45:30
Zitat von: laborix am 25. März 2016, 12:10:39

hier geht das nicht so hoppla hopp.
Noch eine Bitte, könntest du mich bitte aufhellen, wie "geht es hier"?
Was war falsch und wie könnte man es besser machen?

Gibt es eine vernunftige Möglichkeit Mozilo weiter zu entwickeln?
Darf mn keine Vroschläge machen , da je umsonst ist, oder kann man irgendwie doch  zu Mozilo beitragen?
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 25. März 2016, 12:53:41
Du hast ne PN
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: Thorstn am 29. März 2016, 23:12:08
In puncto "Sicherheit und Programmierung" bin ich ein ausgewiesener DAU.

Von daher sei mir eine Frage erlaubt:

Kann denn mit den von MarcAurel beschriebenen Möglichkeiten eine "Sicherheit" auch ohne https funktionieren?

Wie gesagt, ich kenne mich damit nur rudimentär bis noch weniger aus...

Gruß,
Thorsten
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 30. März 2016, 20:21:14
Zitat von: laborix am 25. März 2016, 10:00:33

SSL funktioniert in moziloCMS 2.0 wenn auf dem Webspace SSL aktiviert ist.

Mehr als 75% aller Privatnutzer haben SSL nicht in ihrem Webspace Vertrag. Um SSL auf dem Webspace nutzen zu können muss das extra für mehr Geld erworben werden.


Wenn du meinen Beitrag zu dem hier antwortest nochmals aufmerksamer lesen würdest, würdest du vielleicht feststellen, dass ich auch nichts anderes dort schreibe.
Aber vielleicht habe  ich mich  etwas zu ... intrinsèque (intrinsisch) ausgedruckt ?  :)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 30. März 2016, 20:26:25
Zitat von: Thorstn am 29. März 2016, 23:12:08
Wie gesagt, ich kenne mich damit nur rudimentär bis noch weniger aus...


Hallo Thorsten,

ich werde versuchen es einfacher zu er klären.
Dein Passwort wir von Mozilo mit einem einfachen veralteten Algorithmus (aber das ist nicht das Problem), aber auf dem Server des Providers, in der Datenbank(Textdatei) verschlüsselt.
Bei der Anmeldung, um das Passwort überprüft zu werden, schickt deine  ,,Oberfläche" ( der Client, Front-End)  von Mozilo dies zu dem Server, aber im Klartext:

User: thorstn
Passwort: thorstn

Und somit ersichtlich für jeden der etwas neugierig ist und den Know-how besitzt, ob ein neugieriger  Nachbar durch geknackten WLAN, in öffentlichen WLAN-Netze , bei der Arbeit usw.
Das Verfahren das ich vorgeschlagen habe (hashen mit SHA256), verschlüsselt das Passwort direkt auf deinem Rechner/Smartphone, bevor es versendet wird und verschickt es dann so:

User: thorstn
Passwort: ee5b4571f17d99f034fca5fbe8bb1fe30754ed4d7afb1086c126808f4458e531

Und damit kann ein ,,Spion" wenig anfangen, besonders wenn dein Passwort länger wäre.
Entgegen manchen Meinungen hier, SHA256 ist sicher, es gibt keine Rainbow-tables dafür, für Passwörter länger als 8 Buhstaben.
Bitcoin, wenn es dir ein Begriff ist, benutzt auch SHA256 im Header. Wenn irgendwann hören solltest dass dies geknackt wurde, dann ist ,,unser Verfahren" hier auch unsicher...
Es ist sehr einfach anzuwenden und mit noch ein wenig Aufwand dazu, man könnte es ,,Bombensicher" machen, mit einer doppelte Kombination UserName/Password oder mit SHA3.

Gruß
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 30. März 2016, 20:41:31
Zitat von: MarcAurel am 30. März 2016, 20:21:14... Aber vielleicht habe  ich mich  etwas zu ... intrinsèque (intrinsisch) ausgedruckt ?  :) 
Nein, ungeduldig er ist. Nach Erlebnissen er strebt (Joda)

Sorry, nimm's gelassen...
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 31. März 2016, 12:25:05
Zitat von: MarcAurel am 30. März 2016, 20:26:25...
User: thorstn
Passwort: ee5b4571f17d99f034fca5fbe8bb1fe30754ed4d7afb1086c126808f4458e531

Und damit kann ein ,,Spion" wenig anfangen,  ...
Irgendwie ein interessantes Thema, auch in anderen Foren. Siehe in etwa die gleiche Fragestellung hier:
http://www.php.de/forum/webentwicklung/php-einsteiger/php-tipps-2008/46896-passwörter-verschlüsselt-übertragen (http://www.php.de/forum/webentwicklung/php-einsteiger/php-tipps-2008/46896-passw%C3%B6rter-verschl%C3%BCsselt-%C3%BCbertragen)

Bitte dort mal den Beitrag #9 und Beitrag #12 anschauen, da wird auch das Mitlesen von Anderen gut angesprochen.
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 31. März 2016, 18:01:21
Zitat von: laborix am 31. März 2016, 12:25:05

Bitte dort mal den Beitrag #9 und Beitrag #12 anschauen, da wird auch das Mitlesen von Anderen gut angesprochen.

Die beiden haben eigentlich keine Ahnung wovon sie schreiben.
Ich möchte den sehen der sich "mit dem Hash" einlogen kann. ;D
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 31. März 2016, 23:25:46
Hallo laborix,
du kannst diese Anmeldung die sicher ist (sicherer auf jedem Fall als jetzige)   hier in AccessControl (http://publius.lima-city.de)  testen .
Bei der erfolgreichen Anmeldung bekommst du eine weitere Test-Kategorie (Gesichert) zu sehen.

User: Testmann
Passwort: Testmann2016

Wenn du die Anmeldung mit einem Sniffer loggen würdest siehst du so etwas:
ac_password_hash=984cacc0248c206fd37d2d2e129d5c5f001e86e22ebe8f0f894205c7da502a18&ac_user=Testmann&ac_password=984cacc0248c206fd37d2d2e129d5c5f001e86e22ebe8f0f894205c7da502a18&ac_action=login - 871

Schaltest du an deinem Browser JavaScript ab (login unsicher), bekkomst du so etwas:

ac_password_hash=&ac_user=Testmann&ac_password=Testmann2016&ac_action=login – 892

Und versuch jetzt diese Hash eines 12 Buchstaben-Passwort mit einer Rainbow-Table zu knacken, oder sie überhaupt zu finden (es kann beliebig iteriert werden da SHA256 sehr schnell ist).

Ist jetzt klar? (Das ist nur ein "Proof of Concept" das auch funktioniert.) :)


Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: wasp am 31. März 2016, 23:33:07
Sorry,
wollte ja eigentlich die Klappe halten... ABER  :)

für mich als Theoretiker einen 2008(!)er - PHP(!) - Thread zu verwenden - Halte ich für verwegen ...
da ist der final Post m.E. sinnvoll ...

Zitat
06.04.2008, 23:18
Und was hindert den Man-in-the-Middle daran, den $_SESSION["salt"] abzufangen, den ihr ja irgendwie an JavaScript uebergeben muesst?
JavaScript ist client-seitig und somit NIE sicher, man kann es dem Angreifer hoechstens erschweren, aber eine professionelle Loesung ist das nicht, mehr Skript-Kiddie Niveau. Benutz SSL!

Administrative Aufgaben bzw. deren Nutzung / Umfeld ändern sich, wie nahezu alle webbasierenden Anwendungen ...

So wie ich es sehe, ist ein SSL-Login eingehend mit einem responsiven Admin nahezu alternativlos  :mrgreen:

cu







Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 31. März 2016, 23:39:34
Hallo wasp,

niemand spricht hier von "$_SESSION["salt"] "
Vermische bitte nicht was andere in einem anderen Forum fachsimpeln ohne Ahnung davon zu haben mit einer sichere(re)n Alternative zu dem jetzigen Login, die ich in meinem vorhigen Beitrag demonstriere mit einer Live-Demo.

:)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: wasp am 01. April 2016, 00:02:13
pn
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 01. April 2016, 00:22:18
Zitat
Benutz SSL!

Noch etwas dazu, da mehrere Leute diese Meinung hier auf dem Topic geäußert haben.

SSL ist doch nicht das Thema. Ich bestreite nicht dass SSL nicht sicher(er) wäre.
Hier geht es um Mozilo und dass bei der Anmeldung in Adminbereich das Passwort übers Internet in Klartext versendet wird.
Und es geht darum dass nur mit paar Zeilen Code dies zu beheben wäre, auch wenn doch nicht so sicher wie SSL.

:)




Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 01. April 2016, 08:49:18
Zitat von: MarcAurel am 31. März 2016, 23:25:46
Hallo laborix,
du kannst diese Anmeldung die sicher ist (sicherer auf jedem Fall als jetzige)   hier in AccessControl (http://publius.lima-city.de)  testen . ...
Ich gebe jetzt auf, schönes Weekend
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: hausl78 am 01. April 2016, 12:09:56
Der Vorschlag von @MarcAurel das Hashen schon auf den Client vorzulagern würde imho mozilo jedenfalls sicherer machen.  Und jeder der kein JS hat/will etc.. hat halt den Klartext-Standard, dh das Hashing passiert erst bei PHP am Server vor dem Vergleich mit den in den Configs gespeicherten (gehashten) Benutzer-PW.

Ich denke dazu sollte damit nichts mehr unklar sein, oder?
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 01. April 2016, 14:40:36
Wo liegt der Unterschied zwischen einem Klartext Passwort und einem Klartext (sicheren) Hash auf den Server zu übertragen, wenn man in der Benutzerverwaltung das so oder so gehashte Passwort vergleicht?

Jemanden mit keine Ahnung (siehe einige Postings hier) zu deklarieren ohne diese Personen zu kennen ist meines Erachtens nicht in Ordnung. Das musste jetzt noch sein, sorry...
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: djr am 01. April 2016, 18:00:34
@MarcAurel:
Zitat von: MarcAurel am 25. März 2016, 11:27:20
Ich bin aber hergekommen nicht nur um zu nehmen sondern auch zu geben, ...
Die Einstellung gefällt mir!
Das hast Du ja auch mit "Mozilo mehrsprachig (http://www.mozilo.de/forum/index.php/topic,4170.msg21323.html)" gezeigt.

@MarcAurel (& @hausl78):
Gegen den "Man-in-the-Middle" hilft der hier diskutierte Vorschlag nicht. Das haben @laborix & @wasp schon geschildert.

Noch viel Problematischer ist, dass die von (Dir) @MarcAurel vorgeschlagene Codeänderung Sicherheitslücken hat.
Diese öffnen u. a. die Tür für weitere Angriffstypen als den des "Man-in-the-Middle".

Der Reihe nach:

Die function check_login() akzeptiert zwei verschiedene Variablen als möglichen Passwort-Behälter.
Die function check_login() akzeptiert zwei verschiedene Strings als mögliches Passwort.
Zitat von: MarcAurel am 22. März 2016, 20:27:59
  function check_login() {
        # ...
        $user = getRequestValue("ac_user","post",false);
        $pw = getRequestValue("ac_password","post",false);
        $pwh = getRequestValue("ac_password_hash","post",false);
        # ...
            if ($pwh != ""){
               if($this->checkLoginDataJavascript($user, $pwh)) {
                  # ...
                  $_SESSION['AC_LOGIN_STATUS'] = 'login_ok';
               }
            }
            else{
               if($this->checkLoginData($user, $pw)) {
                  # ...
                  $_SESSION['AC_LOGIN_STATUS'] = 'login_ok';
               }
            }
  # ...


Für weiteres muss erst folgende Frage geklärt werden:
Zitat von: MarcAurel am 22. März 2016, 19:08:26
Wozu bemüht man sich das Passwort in der Datenbank zu  verschlüsseln wenn sowieso bei jedem Einloggen im Klartext zum Server gesendet wird?

In erster Linie geht es bei einem als Hash gespeicherten Passwort darum, dass es sich als Wert von dem Passwort-Wert unterscheidet der (vom Browser) an den Server geschickt wird.
Das ist z. B. für den Fall wichtig, in dem das Passwort aus der Datenbank geklaut wurde. Der Dieb kann diesen Wert nicht als Passwort zum Einloggen in den Account nutzen. (Außer er kann daraus das PW rekonstruieren. Stichwort: Rainbow-Table.)

Durch die function checkLoginDataJavascript($user, $hash) wird die gerade beschriebene Sicherheitsvorkehrung ausgehebelt:
Zitat von: MarcAurel am 22. März 2016, 20:27:59    protected function checkLoginDataJavascript($user, $hash) {     
        if(isset($this->ac_users[$user]) and ($hash == $this->ac_users[$user][0])) {
            return true;
        }
        return false;
    }


Fazit
Der diskutierte Code von (Dir) @MarcAurel erhöht die Sicherheit von mozilo nicht.
Schlimmer noch, er bietet mehr Angriffsfläche.

@MarcAurel: wie zu Beginn schon gesagt, gefällt mir Deine Einstellung des "nicht nur Nehmen, sondern auch Geben".
Das macht Projekte wie mozilo erst möglich.
Also lass Dich bitte hiervon nicht entmutigen.
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 01. April 2016, 19:28:56
Zitat von: djr am 01. April 2016, 18:00:34

Durch die function checkLoginDataJavascript($user, $hash) wird die gerade beschriebene Sicherheitsvorkehrung ausgehebelt:


Wie? Oder es ist nur eine Bahauptung oder ein Eindruck?   :?:

Tatsache ist, wenn ein Angreiffer  so wie es jetzt ist, kann das Passwort im Klartext mitlesen, es ist nicht verkehrt dieses zu hashen und somit es sicherer zu machen.
:)


p.s. Un nicht nur ein Angreiffer, jeder Systemadministrator eines ofentliches WLAN, Firmenadministrattor, überal wo Proxies eingesetzt werden, kann bei deinem Login dein Username und Passwort mitlesen und aus Neugierde so schauen was du auf deiner Website so betreibst. Ist das Passwort gehasht, hat er ein Problem mit seiner Neugierde.

Wenn noch dazu dein eigenes Proxy einsetzt, die Möglichkeiten sind unbegrenzt, deswegen habe ich auch NOSSL erwähnt.
Ich werde bei Gelegenheit auch ein eigenes Proxy für Mozilo presäntieren.
:)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 01. April 2016, 20:31:30

Für StefanB falls er sich entschließen sollte diese Arte von Verschlüsselung des Passwortes, eigentlich eine  von den wenigen einfachen Möglichkeiten, in Mozilo  einzufügen, hier der End-Vorschlag von mir mit dem UserName als Salt (es kann ruhig öffentlich sein, anderes geht es ja nicht) und ein zusätzlicher Hash von dem eigentlichen 64 Byte Hash , das eigentlich  sicher für den normalen Anwender sein sollte:

var hash = SHA256( SHA256( UserName + Passwort) );

Mit der Möglichkeit natürlich, zumindest für AccessControl sich auch ohne JavaScript anzumelden, aber dann nicht gehasht. Aber das habe ich schon erledigt und Interessierten werde ich das Plugin zur Verfügung stellen. Es funktioniert jetzt unabhängig von Mozilo und seinen Crypto-Funktionen.

Wer anderer Meinung ist, soll es bitte aber mit Bespiele (Code eventuell) veranschaulichen, ich lerne gerne etwas neues dazu. Ich bin bereit dann den Code zu testen und die  Ergebnisse objektiv zu beurteilen.

Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: hausl78 am 01. April 2016, 22:26:31
Zitat von: laborix am 01. April 2016, 14:40:36
Wo liegt der Unterschied zwischen einem Klartext Passwort und einem Klartext (sicheren) Hash auf den Server zu übertragen, wenn man in der Benutzerverwaltung das so oder so gehashte Passwort vergleicht?

Das es niemand im Daten-Traffic im Klartext mitlesen kann, sondern nur den PW-Hash sieht, mit dem man sich aber nicht einloggen kann. Daher denk ich schon das es gegen Traffic-Sniffer Sinn ("Man in ...") hat.

Das Problem sehe ich eher das mozilo den richtigen Vergleich anstellt beim Loginversuch. Darauf bezogen:

Zitat        $user = getRequestValue("ac_user","post",false);
        $pw = getRequestValue("ac_password","post",false);
        $pwh = getRequestValue("ac_password_hash","post",false);

Dh wenn da (zusätzlich) vom Browser manipulierte POST-Parameter kommen, (an denen das CMS festmacht wie es mit den Werten umgeht) kann man dem CMS ja unterjubeln das es ein Hash ist der dann (ohne vorherigem Hashing durch das CMS) direkt mit dem Hash gem. Benuzerdaten verglichen wird und man somit über den mitgelesenen Hash sich direkt einloggen kann.

Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 01. April 2016, 22:57:35
Zitat von: hausl78 am 01. April 2016, 22:26:31
kann man dem CMS ja unterjubeln das es ein Hash ist der dann (ohne vorherigem Hashing durch das CMS) direkt mit dem Hash gem. Benuzerdaten verglichen wird und man somit über den mitgelesenen Hash sich direkt einloggen kann.

Aber wie ? Ich möchte es auch können wenn es mögöich ist.  :)

Anderseits, wenn so bleibt wie es ist, es ist überhaupt kein Aufwand notwendig, man hat ja das Passwort im Klartext oder? ;D
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: hausl78 am 01. April 2016, 23:39:48
zum 2. Satz: Ja.

zum 1. Satz: Ich finde diesen Code
Zitat  $user = getRequestValue("ac_user","post",false);
        $pw = getRequestValue("ac_password","post",false);
        $pwh = getRequestValue("ac_password_hash","post",false);
gerade nicht...

Aber was passiert, wenn ich den Hash (den du per JS schon am Client erzeugt hast) und den Benutzername aus dem Traffic "erschnüffle" und dann mache ich per cURL, AJAX, CSRF was auch immer einen POST-Request mit
?ac_user=MarcAurel&ac_password_hash=[der erschnüffelte Hash]

Dann wird das doch auch vom CMS so verarbeitet und ich bin direkt angemeldet... ODER?

(Wie gesagt ich finde den Code dazu gerade nicht checkLogin() ... Methode ->checkLoginDataJavascript() etc.. )
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: djr am 01. April 2016, 23:43:24
Zitat von: MarcAurel am 31. März 2016, 18:01:21
Ich möchte den sehen der sich "mit dem Hash" einlogen kann. ;D
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: djr am 01. April 2016, 23:49:42
Zitat von: hausl78 am 01. April 2016, 23:39:48
Aber was passiert, wenn ich den Hash (den du per JS schon am Client erzeugt hast) und den Benutzername aus dem Traffic "erschnüffle" und dann mache ich per cURL, AJAX, CSRF was auch immer einen POST-Request mit
?ac_user=MarcAurel&ac_password_hash=[der erschnüffelte Hash]

Dann wird das doch auch vom CMS so verarbeitet und ich bin direkt angemeldet... ODER?

Ja, dem ist so! (ac_password darf dazu aber nicht leer sein.) Siehe Screenshots in meinem Post zuvor.

Zitat von: hausl78 am 01. April 2016, 23:39:48
(Wie gesagt ich finde den Code dazu gerade nicht checkLogin() ... Methode ->checkLoginDataJavascript() etc.. )
:arrow: http://www.mozilo.de/forum/index.php/topic,4174.msg21360.html#msg21360 (http://www.mozilo.de/forum/index.php/topic,4174.msg21360.html#msg21360)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 02. April 2016, 21:44:36
Hallo djr,
vielen  Dank für die kleine Demonstration. Ich lerne gerne dazu, besonders in dem Bereich.
Aber wir belassen es nicht dabei. Ich habe es trotzdem ungerne wenn andere mein Passwort beschnüffeln können und damit machen was sie wollen.

Deswegen, habe ich das Ganze ein wenig  ,,umgestaltet" und ich habe auf die Schnelle  auch eine kleine Verschlüsselung eingefügt.
Wenn nichts dagegen hast, könntest du es mal damit probieren, was du durch einen Sniffer sehen kannst, hier:

ac_password_id=76366207-aa78-4963-9dd2-9193ce76395f&ac_password_hash=yY3KBNd8AwBrm4ywK6MBhHGkX2umpTTfos4t%2Bn6ueEA8VMDIsIXw4vkFC1rZDPn2xFEfpYn9cE6F4jcApAvmmQ%3D%3D&ac_user=Testmann&ac_password=yY3KBNd8AwBrm4ywK6MBhHGkX2umpTTfos4t%2Bn6ueEA8VMDIsIXw4vkFC1rZDPn2xFEfpYn9cE6F4jcApAvmmQ%3D%3D&ac_action=login – 999

Um das Ganze spannender zu machen habe das Passwort natürlich geändert.
JavaScript hier:

.'var password = document.getElementById("ac_password");'
      .'var passwordHash = document.getElementById("ac_password_hash");'
      .'var passwordId = document.getElementById("ac_password_id");'
      .'function ComputeHash() {'   
      .'var id  = passwordId.value;'   
      .'var hash  = SHA256(password.value);'
      .'var key_hash = CryptoJS.MD5(id);'
      .'var key = CryptoJS.enc.Utf8.parse(key_hash);'
      .'var iv  = CryptoJS.enc.Utf8.parse("1234567812345678");'
      .'var encrypted = CryptoJS.AES.encrypt(hash, key, { iv: iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});'
      .'passwordHash.value = encrypted;'
      .'password.value = encrypted;'             
      .'}'
Gruß


Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 03. April 2016, 11:20:00
Ich war selbst mit der vorherigen Lösung nicht zufrieden und deshalb weiter experimentiert, aber die Lösung hat sich schon vorgezeichnet.
Und jetzt haben wir die Lösung,  Sicherheit auch ohne SSL.
Ich danke den Skeptikern die immer nur auf SSL bestanden haben, habe durch mein Rumexperimentieren einiges dazu gelernt.
Die Lösung bedarf zumindest für das AccesControl keine Änderungen in Mozilo, es wird nur ein Stück Software namens NOSSL  (http://www.nossl.net/)dazu eingefügt, das die ganze Arbeit macht.

Es kann hier ausprobiert werden:
http://publius.lima-city.de/Login.html (http://publius.lima-city.de/Login.html)

User: Testmann
Passwort: Testmann2016

Was ein eventueller Sniffer sieht ist das:

nossl_encrypted_form_values=%40NoSSL_Package_begin%40---%40NoSSL_Version_begin%401.2%40NoSSL_Version_end%40%40NoSSL_MsgType_begin%40RSA%40NoSSL_MsgType_end%40%40NoSSL_RSAKey_begin%40%0D%0Aa97d1dcf67f54f86b73b8cd5732fa230112531dd0fb0866be9f71c7dc5f644fc6%0D%0Acb3e8ddd94eea63608cad390fab93ff64c9fd3131a144bd021b53b1cda3c8b542%0D%0Ac26ef0fa14784eb122b1a43bd909b376454b5b4d0d955b5600b0e380f4a65c24e%0D%0A214ceef44b1deca73914d400e94ad8122805c67598a56123a98db095b7f35bb0d%0D%0A31e3f616a269e300722d89d931014c422e43e5de42d2d921fbadee1630c0792b0%0D%0A94d8d0e62b33cfd0d452f276b871dc2fe610e591097db - 1492
e5d0aa6e6214fefcd3b8%0D%0A8cddca34ec7b56467929f1181e79208886f61b2ba531a0ad4a13a3dff3fea47f9%0D%0A6ef07890afc7c9335437641c91382771300efd14799f55ffff87a9b7f%0D%0A%40NoSSL_RSAKey_end%40%40NoSSL_PTR_begin%40bbd7826c2d%40NoSSL_PTR_end%40%40NoSSL_ETR_begin%4060f2da6d2bba6e18c5c79920e66d3ef09cbc090b96bfcf5bd164a202fb4d0993a6a922d4215cad7f0771d7838c65b5a89e0c4ec3ad6576647c00f43f6ac1a11791482c6f277f9174d9e14559b5c63e45cb719821a5d1424ba071d408bde539afdf0afe2ba3564727f84a42cf7a348572e993c5b6606bf522a83acc1695b6e4c81767f07ed54fe860ce622a4df04b94606532729067dcf509b63b3439a98213d0925aa7e6b609409c2844a0eb8129ab99d68b31407ba5604b6376565c46dfe051fd2c9cd49a39b0af95f7d2ba7fb585eaf1378b082ad25de11180e0fe8fe4bc0f8c026c864bfd64376cf2c467e9316b6fd5401bb64c56840add9b21388a8c7669%40NoSSL_ETR_end%40%40NoSSL_ETA_begin%40xgJ70szYAFdUjY5LvvPaDfdM%40NoSSL_ETA_end%40%40NoSSL_MessageKey_begin%407fb0cdf902deee4be38439292f29de58a5efcbd06f1a1c69be628eb085f76d4055fe3bf2e98e90e88aa369a7dd3ddac53e068151d4d224d7b2289be25ae89b1ddaee7ffdfcf96361ebbfa1fabf6148e8868a21e5951b7d9c3eac8757e08d4059b6d21cf16a2392e77d8b4979f6052f4289534e739b6d204c8c622d668abf699a39edf0175f04078e02b6d9e4a4dcd620964fac5909d282f94a673c6b25bbf0ad8f21b903acdd8e086e416eaa02b42c46c82b421f5fc96330bc0dcad33eb47dac7a2bc294c8563669a4c00b3407fd08779523d267fee30036215b6b7f77899eef88f0e53afb250498153f3ec4cc5e99dd0eb298e1c17c3ff85c6830026aac177e%40NoSSL_MessageKey_end%40%40NoSSL_ClientID_begin%40yAKMk8zYAFcf - 1492
0RTJ5e%2B7fu%2FI9ecerXMNltCY4Tsi%40NoSSL_ClientID_end%40%40NoSSL_MessageID_begin%40yQL2S8zYAFdYmRfX5cQZXvDugrhUuznmRjlTP5k%3D%40NoSSL_MessageID_end%40%40NoSSL_Message_begin%40zAJd2MzYAFf58LmBGO2GprX%2F%2B8Fll%2BAmSWMuVXHegjN0sE76w9IDtlIGBehseC8hh2yIt9z6mrIaApEhUvs%2FSsTHKqsYIQcRX5bkBocr6fwDG1WkxlAtuOFPUw8HXg%2FdoWzjLyzmsWcogPHpEqaO1BKelk68BTLSfQnkydEzjNf3DYhN5pLeE54LPmmARVG1v22oL6SjqLE%3D%40NoSSL_Message_end%40---%40NoSSL_Package_end%40 - 480

Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: djr am 03. April 2016, 16:18:56
Zitat von: MarcAurel am 03. April 2016, 11:20:00Sicherheit auch ohne SSL.
Ohne Worte.
(siehe Screenshots)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 03. April 2016, 22:04:59
Zitat von: djr am 03. April 2016, 16:18:56

Ohne Worte.
(siehe Screenshots)

Wo liegt jetzt das Problem?

Ich habe doch von Anfang an gesagt, das System sollte auch ohne JavaScript funktionieren, aber dann eben nicht verschlüsselt. Wenn du ein zweites Mal nur auf die Login-Seite klickst, bekommst du den Login auch ohne NOSSL. Diese Verschlüsselung ist relativ Speicherintensiv,  und sollte gezielt nur bei Bedarf eingeschaltet werden.

Mir wäre für Mozilo lieber eine eigene Verschlüsselung-Lösung, da für die kommerzielle Nutzung von NOSSL Gebühren fällig sind.

Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: djr am 04. April 2016, 12:45:47
Sorry, ich dachte das erklärt sich in meinem ersten Post.

Lass es mich so sagen:
Ein Türschloss das mehr als einen Schlüsselbart akzeptiert ist nicht sicher.
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 04. April 2016, 18:05:20
Zitat von: djr am 04. April 2016, 12:45:47
Lass es mich so sagen:
Ein Türschloss das mehr als einen Schlüsselbart akzeptiert ist nicht sicher.

Hallo djr,

das ist doch lächerlich. Du konntest dich anmelden weil ich das Passwort genannt habe.
Du hättest genau so gut dein Screenshot mit NOSSL -Anmeldung machen können, mit dem von mir angegebenen Passwort. NOSSL ist sicher genug, dass du es so ohne weiteres nicht knacken kannst.

Ich dachte wir debattieren hier objectiv und fair.  :)

Da ich doch eine eigene Lösung für Mozilo angestrebt habe und NOSSL scheint mir etwas zu schwerfällig zu sein und vor allem nicht ganz "frei", ich habe doch eine eigene Lösung jetzt, die ich schon mal presentiert habe, aber mit einem kleinen entscheidenden Fehler.
Es war vielleicht zu einfach (die Lösung) und deswegen habe ich sie übersehen.

Der Algorithmus sieht folgendermaßen aus:

1. Bei jedem Login sendet der Server ein Random-Guid mit.

2. Client -Side wird das eingegebene Passwort des Users gehasht und zusammen mit dem von Server gesendeten Guid nochmals gehasht und so gesendet.

3. Server-Side wird der noch vorhanden Guid zusammen mit dem Hash des Passwortes aus der DB gehasht und vergliechen mit dem was gerade gekommen ist. Übereinstimmen die beide Werte ist der Login ok.

Hash(PassWortHash + Guid) == Hash(DbPasswortHash + Guid)

Somit ist gewährleistet dass durch Internet wird nie das Passwort weder im Klartext noch als Hash gesendet, und bei jeder Anmeldung ein neuer Hashwert entsteht der so nicht zu knacken oder zu eratten ist. Es war doch einfach oder?

Und dass der djr es schwerer hat (überhaupt) mit seinen Screenshoots (ohne Worte), ich habe das Passwort geändert.  :)

Das sieht jetzt ein eventueller Sniffer:

ac_password_id=c77e5a3a-d1d5-41a8-8250-42522b477f0a&ac_password_hash=7fa045118d60749ba91d499107c16b3c0902a3ba3d2b97a98dc21d488f57f981&ac_user=Testmann&ac_password=7fa045118d60749ba91d499107c16b3c0902a3ba3d2b97a98dc21d488f57f981&ac_action=login - 875

http://publius.lima-city.de/Login.html (http://publius.lima-city.de/Login.html)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 04. April 2016, 19:33:10
Leute, die Sache mit dem Mozilo-Passwort müsst  ihr auch so sehen;

Viele von euch hier erstellt, ob aus Gefälligkeit oder Geschäftsmäßig, für andere Internetpräsenzen mit Mozilo. Heutzutage ist schon fahrlässig wenn man solchen Lücken in System in Kauf nimmt und nichts dagegen tut, oder zumindest seinen Kunden nicht ausreichend darüber informiert.

Die Sache mit SSL habe ich es satt anzuhören. Wie viele von euch haben eine SSL-Website oder eine solche für seinen Kunden eingerichtet? Es ist ein Jammer. Und es wird noch eine Weile so bleiben.

Und warum sich wehren etwas dagegen zu tun wenn es möglich ist? Wenn man weiß, dass man alles technisch-möglich gemacht hat, ein System zu sichern, es ist alles in Ordnung.

Auf ,,der anderen Seite" sieht es so  aus:
Wenn ein Systemadministrator, egal wo meine Zugangsdaten erspäht, weil sie so fahrlässig durch Internet gesendet werden und sich Zugang zu meine Daten(Website) verschafft dadurch,  mach sich strafbar nur insoweit:

§ 202c BGB:

"Wer eine Straftat nach § 202a oder § 202b vorbereitet, indem er ... Passwörter ... sich ... verschafft ... wird mit Freiheitsstrafe bis zu einem Jahr oder mit Geldstrafe bestraft."

Sollte sich aber dieser Administrator aktiv mit dem Knacken meines Passwortes beschäftigen, Passwort das besonders geschützt ist (wie in unserem Falle mit einem neuen AccesControl/AdminControl) die Situation sieht  schon ein wenig anderes aus für ihn:

§ 202a StGB:

"Wer unbefugt sich ... Zugang zu Daten, die nicht für ihn bestimmt und die gegen unberechtigten Zugang besonders gesichert sind, unter Überwindung der Zugangssicherung verschafft, wird mit Freiheitsstrafe bis zu drei Jahren oder mit Geldstrafe bestraft."


Gruß
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 05. April 2016, 07:50:17
Wie sieht es denn aus djr?

Ist der vorgeschlagene Algorithmus jetzt auch für dich sicher genug?

Man sollte meinen letzten Beitrag nicht missverstehen. Für die Mozilo-Testversion die ich oben angegeben habe, hat jeder der in Interessen der Mozilo-Gemeinschaft hier handelt, mein Einverständnis  dazu, zu versuchen das Passwort des neuen AccesControl zu knacken.
:)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: laborix am 05. April 2016, 18:24:25
Zitat von: MarcAurel am 04. April 2016, 19:33:10...
Wenn ein Systemadministrator, egal wo meine Zugangsdaten erspäht, weil sie so fahrlässig durch Internet gesendet werden und sich Zugang zu meine Daten(Website) verschafft dadurch,  mach sich strafbar nur insoweit:
...

Sollte sich aber dieser Administrator aktiv mit dem Knacken meines Passwortes beschäftigen, ...
Ein Administrator unterschreibt bei Anstellung in einer Firma ein Stück Papier in dem er versichert nichts dergleichen zu tun. Er darf die Logs (Router/Proxy) nur dann analysieren, wenn aufgrund eines bestehenden/geschäftsschädigenden Verdachtes, er eine klare Anweisung der Geschäftsführung erhält. Thema erledigt.

Das du scheinbar damit ein Problem hast, ist deine Sache. Aber einen Administrator generell als Passwort-Sucher hinzustellen ist nicht ok.

LG
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 05. April 2016, 18:30:01
Zitat von: laborix am 05. April 2016, 18:24:25

ein Systemadministrator,


Das du scheinbar damit ein Problem hast, ist deine Sache. Aber einen Administrator generell als Passwort-Sucher hinzustellen ist nicht ok.

LG

Es war nur ein ... generischer Begriff, nichts für ungut.  :)
Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 05. April 2016, 18:39:12
In AccessControl fehlte noch ein Mindestmaß an Schutz gegen "Session-Hijacking".

Und hier habe ich eine "Finger-Print"-Überprüfung eingefügt.
Bei jedem Login es wird in einer Session den entsprechenden "Finger-Print" des Users gespeichert:

protected function getFingerPrint(){
      $ip = $_SERVER["REMOTE_ADDR"];
      //check ip is pass from proxy
      if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
         $ip .= '('.$_SERVER["HTTP_X_FORWARDED_FOR"].')';
      }
      //check ip from share internet
      if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
         $ip .= '('.$_SERVER["HTTP_CLIENT_IP"].')';
      }
      $agent = $_SERVER['HTTP_USER_AGENT'];
      //system token
      $token = $this->settings->get('login_fingerprint_token');      
      if ($token == ""){
         $token = $this->generateRandomString(10);
      }
      return hash("sha256", $ip . $agent . $token);   
   }

Bei jeder Request wird dieser "Finger-Print" überpüft.
Gibt es keine Übereinstimmung, es wird ausgelogt.
   
Die Überprüfung ist in AccessControl-Admin-Bereich abschaltbar, falls ein User doch unterwegs nur mit wechselnden IPs ist.

Und damit sollte das Thema, zummindest aus meiner Sicht beendet sein und Mozilo ein Stück sicherer.
Ich schenke euch das neue Plugin hiermit . Funktioniert einwandfrei auch mit Mozilo 2.0, sollte aber nicht parallel mit dem alten Plugin benuzt werden, ein vorhandenes einfach abschalten, und natürlich die alte Passwörter passen auch nicht.
:)

Titel: Re: Mozilo Sicherheitsproblem
Beitrag von: MarcAurel am 07. April 2016, 21:24:25
Zitat von: MarcAurel am 05. April 2016, 18:39:12

      if ($token == ""){
         $token = $this->generateRandomString(10);
      }

Ich rektifiziere hier, das da oben muss weg, es wäre ein Fehler wenn dazu kämme, obwohl wenig wahrscheinlich wenn der Anwender nicht daran fummelt.