Hallo, Gast! (Registrieren)

Wir wünschen allen Besuchern frohe Ostern!

Letzte Ankündigung: MyBB 1.8.37 veröffentlicht (04.11.23)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Spam über die Registrierungsfunktion?
#21
OK. Wenn Du meinst...

Dann muss es wohl noch ein anderes Problem dafür geben, dass der Bot an den Hash gelangt...

Wie dem auch sei, da Captcha als geknackt zu betrachten ist und man mittlerweile Probleme hat, als Mensch diese Bildchen lesen zu können (gerade bei Recaptcha) dürfte Captcha als ungeeignetes Mittel betrachtet werden.

Da Du aber felsenfest davon überzeugt bist, dass kein Fehler in MyBB vorliegt und es sich nicht lohnt, der Sache mal auf den Grund zu gehen, sei hier mit den Hinweisen Schluss.

Danke jedenfalls für Deine Antworten - auch wenn sie mich und andere User der Problemlösung nicht weiter bringen. Wobei eine Problemlösung nur so lange eine Lösung ist, bis die Spammer gelernt haben, sie zu umgehen.
[Bild: banner_small.png]

#22
(21.09.2013, 12:21)chrissio schrieb: Dann muss es wohl noch ein anderes Problem dafür geben, dass der Bot an den Hash gelangt...
Wenn du mir nicht glaubst...
(21.09.2013, 12:21)chrissio schrieb: Wie dem auch sei, da Captcha als geknackt zu betrachten ist und man mittlerweile Probleme hat, als Mensch diese Bildchen lesen zu können (gerade bei Recaptcha) dürfte Captcha als ungeeignetes Mittel betrachtet werden.
Richtig, genau so sieht es aus.
Das beste Mittel ist eine individuelle Lösung. Denn das was standardmäßig vorhanden ist, wird von den Spammern schnell wieder umgangen.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
#23
Wenn du die Bots schon an der Angel hast, kannst du ja mal die Get/Post-Request-Daten mitloggen. Wenn jedesmal ein anderer Captcha-Hash geschickt wird (aufs MyBB-Captcha bezogen jetzt), dann lösen die Bots eben das Captcha. Wenn nicht, dann haben die Bots irgendeinen Weg das Captcha ganz zu umgehen.

Recaptcha benutze ich nicht. Das MyBB-Captcha mit geringen Modifikationen (etwas größer, andere Schriftarten [Spaßschriften mit Umrandung], ...). Bei der Registrierung noch eine Zusatzfrage (und das so umgesetzt daß die Frage auch tatsächlich beantwortet werden muß, das Registration Security Question Plugin hat da seit Jahren einen Bug).
#24
(21.09.2013, 12:27)StefanT schrieb: Richtig, genau so sieht es aus.
Das beste Mittel ist eine individuelle Lösung. Denn das was standardmäßig vorhanden ist, wird von den Spammern schnell wieder umgangen.

Hallo Stefan,

eigentlich mag ich nicht meckern, ohne eine Lösungsidee anzubieten.

Was hältst Du von einer grundlegend veränderten Captcha-Funktion, bei der zum Hash eine zeitlich begrenzte TAN erzeugt wird?

Hier mal ein Codeschnipselchen ohne zugehörige Datenbank, dass man sicherlich anpassen kann:

Code:
<?php
    /*-----------------------------------------------------------------------------
     *  Helper function(s)
     *-----------------------------------------------------------------------------*/
    /**Prints a beautified error message.
     */
    if( !function_exists( '__DB_ERROR__' ))
    {
      function __DB_ERROR__( $pdo_err_msg, $line = 'No line specified' )
      {
        if( is_array( $pdo_err_msg ))
          $pdo_err_msg = implode( ' --- ', $pdo_err_msg );
    
        $errstr = <<<EOE
    <div style="border:1px solid #808080;background-color:lightyellow;padding:5px;z-index:2;">
      <div style="font-weight:bold;color:red;">
        MySQL Error
      </div>
      <div style="color:#d00000;">
        $pdo_err_msg<br />
        Occured in line: $line
      </div>
    </div>
    EOE;
    
        return $errstr;
      }
    }
    
    /*-----------------------------------------------------------------------------
     *  The Captcha/TAN class
     *-----------------------------------------------------------------------------*/
    /**
     */
    class TAN
    {
      /**Database connection handle.
       */
      private $dbh = NULL;
    
      /**Database table name where the TANs are stored.
       */
      private $table = 'captcha';
    
      /**Minimum time in seconds to pass.
       */
      private $minTime;
    
      /**Maximum time in seconds to pass.
       */
      private $maxTime;
    
    
    
      /**Default constructor.
       * @param $dbh Database handle. (PDO only)
       * @param $minTime Minimum time in seconds to pass before the TAN will be valid. Must be positive (or 0). Default: 5
       * @param $maxTime Maximum time in seconds to pass before the TAN will time out. Must be positive (or 0). Default: 300
       * @note There is no explicit check of min and max time, i.e. someone could enter ludicrous large numbers in here. It
       * is not checked, because we just don't want to set any limitations for you other than min time.
       */
      public function __construct( $dbh, $minTime = 5, $maxTime = 300 )
      {
        $this->setDBH( $dbh );
    
        // Validity check
        if( is_numeric( $minTime ) && is_numeric( $maxTime ))
        {
          // Swap if wrong order
          if( $minTime > $maxTime )
          {
            $this->minTime = max( 0, $maxTime ); // 0 is minium value
            $this->maxTime = $minTime;
          }
          else
          {
            $this->minTime = max( 0, $minTime ); // 0 is minimum value
            $this->maxTime = ( $minTime == $maxTime ) ? $maxTime + 1 : $maxTime;
          }
        }
      }
    
    
      /**Get minimum time to pass.
       */
      public function getMinTime()
      {
        return $this->minTime;
      }
    
    
      /**Get maximum time to pass.
       */
      public function getMaxTime()
      {
        return $this->maxTime;
      }
    
    
      /**Check for valid database connection before accessing it.
       */
      private function hasValidDBH()
      {
        return NULL != $this->dbh;
      }
    
    
      /**Set database handle.
       * @param $dbh Database handle. (PDO only)
       * @return TRUE if the database handle was set, FALSE otherwise.
       */
      public function setDBH( $dbh )
      {
        if( $dbh instanceof PDO )
        {
          $this->dbh = $dbh;
          return true;
        }
        return false;
      }
    
    
      /**Remove old captchas from the database.
       */
      public function clearTANList()
      {
        if( $this->hasValidDBH() )
        {
          // Delete old captcha codes ...
          $this->dbh->exec( "DELETE FROM {$this->table} WHERE `date_inserted` < DATE_SUB( NOW(), INTERVAL 1 DAY );" );
    
          // .. and OPTIMIZE TABLE afterwards
          $this->dbh->query( "OPTIMIZE TABLE {$this->table}" );
        }
      }
    
    
    
      /**Insert CAPTCHA into DB.
       * @return The hash refering to the newly created key in the database. (reference ID, refID)
       */
      public function insertTAN()
      {
        if( !$this->hasValidDBH() )
        {
          return false;
        }
    
        // Random part (5 chars) from a hash as key
        $key = substr( sha1( microtime() ), mt_rand( 0, 34 ), 5 );
        $hash = str_shuffle( sha1( $key ));
    
        // Insert
        $sth = $this->dbh->prepare( "INSERT INTO {$this->table} ( `refid`, `riddle` ) VALUES ( :hash, :key )" );
        if( !$sth || !$sth->execute( array( ':hash' => "$hash", ':key' => "$key" )))
          echo __DB_ERROR__( $sth->errorInfo(), __LINE__ );
    
        // Return created hash for reference
        return $hash;
      }
    
    
    
      /**Check whether given reference ID refers to an entry in the database.
       * @param $refID Reference ID to search in the database.
       * @return FALSE when there is no valid entry for given ID, -1 if isValidTAN() was called too fast after insertTAN() and TRUE otherwise.
       * @see insertTAN()
       */
      public function isValidTAN( $refID )
      {
        if( !$this->hasValidDBH() )
        {
          return false;
        }
    
        $sth = $this->dbh->prepare( "SELECT `date_inserted`, NOW() as `used_at` FROM {$this->table} WHERE `refid` = :refid AND `date_used` IS NULL" );
        if( !$sth || !$sth->execute( array( ':refid' => $refID )))
          echo __DB_ERROR__( $sth->errorInfo(), __LINE__ );
    
        // Get result set
        $rs = $sth->fetch( PDO::FETCH_ASSOC );
    
        // Nothing found OR TAN timed out => $refID not valid
        if( $rs === FALSE || count( $rs ) == 0 ||
        (( strtotime( $rs['used_at'] ) - strtotime( $rs['date_inserted'] )) > $this->maxTime ))
          return FALSE;
    
        // Avoid a solved captcha being used twice
        $this->removeTAN( $refID );
    
        // If entry is younger than 5 seconds ==> SPAM
        if(( strtotime( $rs['used_at'] ) - strtotime( $rs['date_inserted'] )) < $this->minTime )
          return -1;
    
        // Finally a valid captcha
        return TRUE;
      }
    
    
      /**Get metadata of a TAN, e.g. for debugging or logging issues.
       * @param $refID Reference ID to get metadata from the database.
       * @return FALSE when given reference ID is invalid, metadata otherwise.
       */
      public function getMetaData( $refID )
      {
        if( !$this->hasValidDBH() )
        {
          return false;
        }
    
        $sth = $this->dbh->prepare( "SELECT `date_inserted`, `date_used`, `riddle` FROM {$this->table} WHERE `refid` = :refid" );
        if( !$sth || !$sth->execute( array( ':refid' => $refID )))
          echo __DB_ERROR__( $sth->errorInfo(), __LINE__ );
    
        // Get result set
        $rs = $sth->fetch( PDO::FETCH_ASSOC );
    
        // Nothing found => $refID not valid
        if( $rs === FALSE || count( $rs ) == 0 )
          return FALSE;
    
        return $rs;
      }
    
    
    
      /**Remove CAPTCHA from DB specified by given refid.
       * @param $refID Reference ID to delete from the database.
       */
      protected function removeTAN( $refID )
      {
        if( !$this->hasValidDBH() )
        {
          return false;
        }
    
        $sth = $this->dbh->prepare( "UPDATE {$this->table} SET `date_used` = NOW() WHERE `refid` = :refid" );
        if( !$sth || !$sth->execute( array( ':refid' => $refID )))
          echo __DB_ERROR__( $sth->errorInfo(), __LINE__ );
      }
    }
    ?>

Wie gesagt, ich biete ein Opensource-Gästebuch an, bei dem ich ganz auf Captchas verzichte - ist seit 1 Jahr in der 3.20er-Version bei zig Leuten im Einsatz, die 2.05er war trotz Captchas zugespammt in Minuten, auf der 3.20er habe ich bis jetzt nur 3 Spam-Einträge gefunden - die vermutlich händisch eingetragen wurden...

Hallo Frostschutz,

ich habe normal in dem Forum ca. 650 MB Traffic; die Spambots erhöhten den Traffic auf fast 18 GB! im Monat (Kein Tippfehler, ich schrieb Gigabyte.) Das Serverlog vom Indianer war 650 MB groß nur mit Ips und Zugriffen auf die Dateien.

Wenn ich nun die kompletten Requests mitlogge, muss ich für die Logfiles eine eigene Festplatte einbauen.

Das ist mir die XRumer-SpamschleuderGmbH & Co. KG nicht wert, da knacke ich eher deren eigene Software, programmiere die um auf Spamserver identifizieren und zuspammen, und stelle die als Freeware für Internetprovider zum Download ins Netz... ;-)
[Bild: banner_small.png]

#25
(22.09.2013, 23:42)chrissio schrieb: Wenn ich nun die kompletten Requests mitlogge, muss ich für die Logfiles eine eigene Festplatte einbauen.

Du musst es ja nicht tagelang laufen lassen.

Zeitlimit beim Captcha ist, hm, nervig. Versuchs-/Bildlimit sollte allerdings auf 1 stehen, das ist beim MyBB Captcha theoretisch ein Schwachpunkt (liefert beliebig viele Bilder zur gleichen Lösung, erlaubt beliebig viele Versuche). Ob dieser ausgenutzt wird steht wieder auf einem anderen Blatt - wer weiß. Mir fehlen "leider" die nötigen Spammer um das zu untersuchen.

Ich habe nebenbei gerade mal in meine captcha Tabelle geschaut, nur 500 Einträge. Hätte das viel höher eingeschätzt zumal die Einträge ja eine Woche lang bestehen bleiben.
#26
(22.09.2013, 23:42)chrissio schrieb: Was hältst Du von einer grundlegend veränderten Captcha-Funktion, bei der zum Hash eine zeitlich begrenzte TAN erzeugt wird?
Dein Code unterscheidet sich kaum von dem des MyBBs. Aber ich glaube ich rede hier gegen eine Wand...
Die Gästebuch-Software wird vermutlich von den Spammern einfach nicht unterstützt, vermutlich ist es nicht verbreitet genug. Wink
(23.09.2013, 00:06)frostschutz schrieb: Versuchs-/Bildlimit sollte allerdings auf 1 stehen, das ist beim MyBB Captcha theoretisch ein Schwachpunkt (liefert beliebig viele Bilder zur gleichen Lösung, erlaubt beliebig viele Versuche).
Dann lassen die Spammer eben einen neuen Code generieren, das ist schließlich auch unbegrenzt möglich... Irgendwann wird ein lösbarer dabei sein. Wink
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
#27
(23.09.2013, 10:40)StefanT schrieb: Die Gästebuch-Software wird vermutlich von den Spammern einfach nicht unterstützt, vermutlich ist es nicht verbreitet genug. Wink

Ja, das wird es wohl sein. . .

Sag mal, Stefan, denkst Du auch darüber nach was Du schreibst?

Das Gästebuch ist wenigstens genau so häufig im Einsatz wie das MyBB - daran wurde von den Spammern nämlich das Gästebuchzuspammen geübt... und wird in früheren Versionen wenigstens genau so zugespammt.

Aber als ForenAdmin darf man auf "ein wenig überheblich " machen, wenn man sich etwas nicht vorstellen kann?

Guten Tag!
[Bild: banner_small.png]

#28
(25.09.2013, 06:21)chrissio schrieb: Das Gästebuch ist wenigstens genau so häufig im Einsatz wie das MyBB - daran wurde von den Spammern nämlich das Gästebuchzuspammen geübt... und wird in früheren Versionen wenigstens genau so zugespammt.
Wie wahrscheinlich ist es, dass das Gästebuch den "perfekten" Spam-Schutz hat, den weder Google, Microsoft oder irgendeine andere Web-Software gefunden hat? Undecided
Wenn das MyBB als einziges System ein Spam-Problem hätte, wäre das ja etwas anderes, aber des betrifft jede verbreitete Software, ja sogar reCAPTCHA (dazu gibt zahlreiche wissenschaftliche Studien).
Die Captchas des MyBBs sind sicher nicht die besten, aber einen wesentlichen Design-Fehler, wie du unterstellst, haben sie nicht.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
#29
(25.09.2013, 10:48)StefanT schrieb: ... einen wesentlichen Design-Fehler, wie du unterstellst, haben sie nicht.

Lieber Stefan,

ich habe nichts unterstellt - ausser das man Captcha an sich als geknackt betrachten kann. Ich habe auch nichts vom perfekten Spamschutz gepostet. Egal, ob die captchas per Bilderkennung gelöst werden oder von freundlichen Menschen die diese zum anschauen irgendwelcher nackeligen Bildchen händisch auflösen - das Thema Captcha ist erledigt.

Wir können allenfalls noch darüber streiten, ob es geeignetere Methoden gibt, um Spambots automatisch zu erkennen, diese so lang wie möglich auf einer Eintragsseite mit dem Formularausfüllen zu beschäftigen, und dann deren erkannten Spam direkt in /dev/null abzuspeichern.

Mir gibt nur zu denken, dass ein relativ aufwendiger captcha-Programmcode offenbar wie ein offenes Tor umgangen werden kann, während ein einfaches "Wenn Du in das Feld was reinschreibst stirbt die weitere Verarbeitung (es sind natürlich mehr Felder, die den selben Effekt auslösen) ausreichte, um Spammer bis auf 2 Beiträge in diesem Jahr rauschfrei zu entsorgen.

Wobei das Logfile natürlich das Vorhandensein der Spamzugriffe noch immer anzeigt - nur landen diese nicht mehr in der Datenbank als neuer Beitrag, sondern direkt in /dev/null.

Mein Problem mit dem MyBB Board ist aber leider, dass Spambots offenbar die Captchas gar nicht "anschauen", geschweige die Eintrags- oder Registrierungsseite aufrufen, sondern direkt die entsprechenden Daten erfolgreich zu posten scheinen.

Sie müssen also einen direkten Weg gefunden haben, die Eintragsscripte zuzuspammen. Da ich weder in Eurem php-code drinstecke, noch zeit dazu habe, mich da genau einzuarbeiten, schreibe ich meine Beobachtungen hier rein - damit Du als, wie Du schreibst, Mitentwickler den einen oder anderen Hinweis bekommst, wo es evtl. hakt.

Wenn das aber nicht erwünscht ist - dann sag es und ich poste nichts mehr.

Punkt
[Bild: banner_small.png]

#30
(25.09.2013, 16:38)chrissio schrieb: Mir gibt nur zu denken, dass ein relativ aufwendiger captcha-Programmcode offenbar wie ein offenes Tor umgangen werden kann, während ein einfaches "Wenn Du in das Feld was reinschreibst stirbt die weitere Verarbeitung (es sind natürlich mehr Felder, die den selben Effekt auslösen) ausreichte, um Spammer bis auf 2 Beiträge in diesem Jahr rauschfrei zu entsorgen.
Auch wenn ich mich wiederhole: Individuelle Anpassungen sind sehr effektiv. Denn die Spammer kennen zwar das Standard-Verhalten, aber alles andere kann sie schnell aus dem Tritt bringen.
Das bedeutet aber auch, dass man als Entwickler keine wirkliche Chance hat, eine allgemeine Lösung zu finden. Nach einer Veränderung ist vielleicht kurzzeitig Ruhe, aber sobald die Spam-Bots angepasst sind, ist man wieder auf dem Stand von vorher. Mit MyBB 1.8 wird es ein paar kleine Änderungen geben, lange wurde das aber nicht wirken. Von daher auch mein Verweis am Anfang auf Plugins. Wink
(25.09.2013, 16:38)chrissio schrieb: Mein Problem mit dem MyBB Board ist aber leider, dass Spambots offenbar die Captchas gar nicht "anschauen", geschweige die Eintrags- oder Registrierungsseite aufrufen, sondern direkt die entsprechenden Daten erfolgreich zu posten scheinen.
Wenn das bei dir so ist, dann hast du irgendwo ein großes Sicherheitsloch. Wobei Beiträge und Benutzer natürlich nicht einfach in der Datenbank erscheinen können, in den Logs muss sich dazu ein Request finden lassen. Ohne diese Informationen kann ich leider nichts machen oder weiterhelfen. Wenn das Standardmäßig möglich wäre, hätte das aber bestimmt jemand gemerkt. Wink

Ich analysiere hier das Verhalten von hunderten Spammern sehr genau, was sich mit den Log-Auszügen von dir im Übrigen deckt. Mit IP-Bans und (regelmäßig wechselnden) Sicherheitsfragen bei der Registrierungen haben wir das allerdings gut im Griff.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  nach ca 30 minuten schon über 10 Spam accounts ? BartM 2 1.450 22.10.2013, 18:54
Letzter Beitrag: BartM
  Forum Steht in jeder Kategorien über der über schrift help McJump 5 3.392 23.02.2011, 17:04
Letzter Beitrag: ows