Online-Umfragen die rote Karte gezeigt

Wir leben in einer digitalen Welt. Nicht erst seit der Corona-Pandemie verbringt wohl die grosse Mehrheit der Bevölkerung täglich mehrere Stunden entweder vor dem Bildschirm oder dem Smartphone-Display. Informationen erhalten wir heute fast ausschliesslich digital. Dabei vertrauen wir ungefragt und ungemein, obwohl wir eigentlich wissen müssten, was digital daherkommt, lässt sich relativ einfach fälschen und wir können kaum überprüfen, was stimmt und was Fake-News ist. Der nachfolgende Beitrag soll aufzeigen, wie einfach dies aktuell bei Online-Umfragen bei Schweizer-News-Portalen möglich ist bzw. wie schwierig es ist, herauszufinden, ob die entsprechenden News stimmig sind oder nicht.

Prolog: Wenn Umfragen in die Endlosschleife abdriften

Freitag, 5.11.21, 18:20 Uhr: In einer Mail finde ich einen Link, um an einer Online-Umfrage von SRF (Schweizer Radio und Fernsehen) zu den kommenden Wahlen teilzunehmen. Ich öffne den Link und lande auf der SRF-Seite https://www.srf.ch/news/online-umfrage-wie-stimmen-sie-ab-2 (aktuell inaktiv). Nachdem ich den Direktlink https://gfsbern.polittrend.ch/s/3d74ec2 (aktuell inaktiv) aufrufe, lande ich auf einer Webseite des gfs-Forschungsinstituts. Dort finde ich die Umfrage, aber keinen Bezug zu SRF. Ich fülle die Umfrage aus und bemerke, dass es keine Checks gibt, wie oft ich an der Umfrage teilnehme. Die Befragung dauert ziemlich lange, es sind extrem viele Angaben zu machen. Kurz und gut, wer den gesamten Kram mehrfach eingeben will, ist irgendwie selber schuld. Nur, ist die Umfrage deshalb sicher?

Sonntag, 7.11.21, 21:50 Uhr: Die Sache mit der SRF-Umfrage lässt mir keine Ruhe. Ich überlege mir, die Umfrage mit einem Skript zu «programmieren». Dabei geht es darum, die Tastatur- und Mauseingaben über ein Programm zu erledigen. Sehr bewährt hat sich dabei xdotool. Das Programm läuft unter Linux, Mac und Windows. Unter Debian et al kann es mit apt-get install xdotool aktiviert werden. Mit dem kleinen Biest kann ich sehr einfach Maus und Tastatur steuern. Dazu einige Beispiele:

Klick an XY-Position 300/200: xdotool mousemove 300 200 click 1
Sende die Taste «a»: xdotool key a
Sende die Enter-Taste: xdotool key Return

Nach zwei Stunden habe ich einen Prototyp. «Sorgen» bereitet eigentlich nur, dass bei den jeweils sechs optionalen Fragen über die Gründe, warum eine Vorlage angenommen oder abgelehnt werden soll, die Fragen jeweils per Zufall in einer anderen Reihenfolge erscheinen und damit die Auswahl nicht statisch ist. Dies wird dadurch gelöst, dass ich einfach alle 50 Pixel einmal einen Klick auslöse, damit alle Fragen «wunschgemäss» beantwortet werden. Ich baue ein paar Randomizer ein. Das Programm entscheidet per Zufall, ob ich SP- oder SVP-Wähler bin, wie alt ich bin, Geschlecht, Einkommen und einiges mehr. Morgens um drei läuft das Skript, ich erstelle ein Video und sende es anonym an die Plattform https://inside-paradeplatz.ch (dort ist eine anonyme Zusendung in einer Box möglich).

Montag, 8.11.21: Keine Reaktion

Dienstag, 9.11.21: Ich erstelle ein Video und lade es auf meine private Homepage: https://maskenlos.ch/wp-content/uploads/2021/11/srfcovidbot.mp4 (mit gleichzeitiger Mail an diverse Redaktionen via Mail und Twitter). Es erfolgt keine Reaktion. Kurz nach Mitternacht sende ich es einem Freund, der bei SRF arbeitet.

Mittwoch, 10.11.21: Der Freund schreibt zurück, ich suggeriere, da werde getrickst. Darauf antworte ich, dass ich nur aufzeigen wolle, dass eine beliebig ausfüllbare Umfrage (gerade mit einem Bot) nie als nationale Wahlvorhersage verwendet werden dürfte. Auf mein Nachfragen erhalte ich eine Mail-Adresse eines SRF-News-Mitarbeiters. Ich schreibe diesem eine inhaltlich gleiche Mail, dass die SRF-Umfrage beliebig manipulierbar sei, weil sie mehrfach abgeschickt werden könne.

Donnerstag, 11.11.21: Der SRF-Mitarbeiter meldet sich nicht. Die zweite grosse Wahlbefragung, jene der TX-Group (20min, Tages-Anzeiger) geht unter https://survey.tamedia.ch/s3/edc99701db0d online. Diese Umfrage ist mit einem Bilder-Captcha versehen. Ebenso werden im Browser Spuren (Cookies) gelegt, die mehrmalige Teilnahme ist dadurch etwas erschwert. Das Captcha lässt sich anfänglich mit dem Firefox-AddOn https://github.com/dessant/buster/releases überlisten. Nicht zu 100%, aber doch in ca. 4 von 5 Fällen. Später am Nachmittag funktioniert es faktisch nicht mehr. Ich sehe mir die Sourcen der Umfrage (HTML-Code) an und stelle fest, der Captcha-Check erfolgt einzig im Browser. Ich gebe das Captcha einmal ein und sichere die Einstiegsseite sowie den JavaScript-Code nach dem Captcha. Dazu verwende ich das Tool wget, um sämtliche dazugehörenden Teile auf die lokale Platte zu übertragen. Nun starte ich die Einstiegsseite nach dem Captcha-Check direkt von der Festplatte und siehe da, ich kann ohne Probleme direkt an der Umfrage teilnehmen. Damit ist der Weg zum Skripten geöffnet. Nach einer Umfrage kann ich den Browser schliessen und mit der lokalen Kopie den Browser erneut starten. Auch dazu erstelle ich ein kleines Video: https://maskenlos.ch/wp-content/uploads/2021/11/covidtagi4.mp4 (30 Sekunden). Erneut sende ich eine Mail an diverse Medienportale. Keine Reaktion.

Freitag, 12.11.21: Ein Journalist zeigt Interesse, wir führen zusammen ein ca. halbstündiges Telefonat. Er würde es weiterfolgen und sich am Montag nochmals melden. Noch immer keine Reaktion erhalte ich von SRF. Dagegen gibt es bei SRF eine neue Umfrage. Dabei geht es darum, ob die Covid-Massnahmen verschärft werden sollen: https://www.srf.ch/news/schweiz/booster-fuer-alle-2g-lockdown-wie-das-coronavirus-jetzt-eingedaemmt-werden-kann#poll-ID20052885

1. Akt: Wir basteln uns mit Open Source einen Bot

Zunächst einmal bin ich erstaunt, dass auch hier erneut mehrfach abgestimmt werden kann. Einfach einen neuen Tab eröffnen und Link kopieren und schon kann ich weiter «voten». Nach jeweils vier Bekundungen schaltet die Seite auf stur. Die nachfolgenden Informationen zeigen auf, wie das Programm (Bot) erstellt werden kann, um die Umfrage zu steuern. Weniger technisch Interssierte könnten direkt mit Akt 2 fortfahren.

Natürlich könnte ich nun beginnen, die Cookies zu löschen. Eleganter erscheint mir, der «Umfrage» immer jeweils ein neues Betriebssystem «vorzusetzen». Damit muss der Server zwangsweise davon ausgehen, dass ich noch nicht an der Umfrage teilgenommen habe. Ein neues Betriebssystem aufsetzen: Für «Normalos» scheint dies unerreichbar, «Freaks» klagen immer mal wieder darüber, dass beim Aufssetzen eines Betriebssystems mal wieder etwas nicht «laufe». Und doch ist die Installation z.B. einer Linux-Distribution mit aktueller Hardware recht einfach.

Vorliegend werde ich es mit meiner Linux-Distribution AVMultimedia zeigen, im Prinzig geht es aber mit jedem Betriebsystem (zumindest im Open Source Umfeld). Bei AVMultimedia wird das gesamte Betriebssystem direkt ab der ISO-Datei hochgefahren. Eine Installation gibt es nicht; die Festplatte wir «nur» als Datenbehälter verwendet. Die ISO-Datei findet sich hier: https://sourceforge.net/projects/archivista/files (dort die Datei avmultimini.iso beziehen).

Die erste physikalische Instanz dient mir als Schaltzentrale. Auf dieser Maschine sollen dabei mit Qemu/KVM weitere Instanzen, die dann die Umfrage «abarbeiten», gestartet werden. Dazu verwende ich ein Notebook mit einer Ryzen 4800U CPU. 8 Kerne und 16 Threads, 16 GB Hauptspeicher und eine schnelle 1 TB Festplatte reichen aus. Im Prinzip könnte ich aber auch einen Rechner mit weit mehr Kernen bzw. Threads nehmen (z.B. eine Ryzen 5990X, damit hätten wir dann bereits 64 Kerne bzw. 128 Threads bzw. achtmal mehr Power). Kostenpunkt der Hardware ca. 1000 Franken.

AVMutlimedia ist vorliegend für den Job sicher prädestiniert, weil es in einigen wenigen Sekunden aufgesetzt ist, doch könnte z.B. auch ein angepasstes TinyCore-Linux verwendet werden. Oder anders herum gesagt: Je länger das Aufsetzen des Betriebssystems geht, je ineffizienter wird das «Abstimmen». Es könnte aber auch der Ansatz versucht werden, jeweils automatisiert den Browser neu aufzusetzen oder so zu initalisieren, dass die «Gegenseite» nicht mitbekommt, dass wir schon mal da waren.

Eine weitere Grundvoraussetzung ist, dass ich auf einem Rechner mehrere Betriebssysteme nebeneinander ausführen kann. Bei den heutigen Prozessoren sollte dies an sich kein Problem darstellen. Im nachfolgenden Beispiel wird der Einfachheit halber (ich kenne es halt eben am besten) AVMultimedia mit Qemu/KVM verwendet. Das Setup («Hochfahren») von AVMultimedia ist hier beschrieben: https://archivista.ch/cms/de/support/avmultimedia (die Software ist 100% Open Source). Ist der Hauptrechner mit AVMultimedia installiert, benötigen wir einige zusätzliche Pakete. Diese installieren wir über ein Terminal mit:

apt-get update
apt-get install aqemu qemu-kvm qemu-tools

Bei AVMultimedia werden dabei ca. 54 MByte an Software installiert. Eine der Eigenheiten von AVMultimedia ist, dass nach dem Hochfahren «erst» die Grundinstallation vorliegt. Immer dann, wenn weitere Software benötigt wird, müssen die dazu notwendigen Pakete in den Startup-Ordner gelegt werden, damit nach einem Neustart diese automatisiert aktiviert werden. Dazu:

mkdir /home/data/archivista/cust/desktop/deps
cp /var/cache/apt/archives/*.deb home/data/archivista/cust/desktop/debs

Um zu überprüfen, ob alles läuft, kann AVMultimedia neu gestartet werden. Über das Startmenü sollte «aqemu» verfügbar sein:

Beim ersten Start sollte der Pfad nach /home/archivista/data/aqemu gelegt werden, da in AVMultimedia nur der Ordner /home/archivista/data (bzw. /home/data) auf die interne Festplatte zeigt; der Rest des Betriebssystems befindet sich in einer temporären Festplatte im Hauptspeicher. Dies bedeutet, dass alle Änderungen ausserhalb der obigen Dateipfade einen Neustart nicht «überleben», weil diese Informationen ja nur im Hauptspeicher zu liegen kommen. Nun können wir mit «aqemu» eine Instanz anlegen.

Die Eckdaten dazu lauten: 1.5 GB RAM, 32 GB Festplatte (RAW-Format) sowie eine Netzwerkkarte und die Schnittstelle zum virtuellen Bildschirm über VNC. Die Festplatte ist (für die hier aufgezeigte Anleitung) nach /home/data/archivista/aqemu/av1.raw zu legen und die Instanz erhält den Namen «av1». Vor dem ersten Start ist zudem avmultimini.iso als bootbares CD-ROM-Laufwerk einzubinden (erfolgt im Reiter «Media»).

Um die Instanz zu starten, klicken wir mit der rechten Maustaste auf den Eintrag «av1» und wählen die Option «Start». Danach erfolgt eine Abfrage, wie allfällige Fehlermeldungen zu handhaben sind. Diese kann weggeklickt werden. Nach ca. 10 Sekunden ist der Gast aufgesetzt. Beim ersten Arbeiten mit aqemu ist verwirrend, dass der virtuelle Bildschirm nicht automatisch gestartet wird (wie z.B. bei VirtualBox). Der virtuelle Bildschirm kann über das Startmenu und dem Aufrufen des Terminals «term» bzw. dort mit vncviewer localhost:1 aufgerufen werden (siehe dazu oben).

Danach erscheint in einem Fenster der virtuelle Bildschirm. Über den Ausschaltknopf (unten rechts im virtuellen Desktop) können wir die Instanz ausschalten. Das virtuelle CD-Rom-Laufwerk bzw. die Datei avmultimini.iso ist zu entfernen. Erneut starten wir die Instanz (Klicken mit rechter Maustaste auf den Eintrag «av1» und dann Option «Start» wählen). Damit ist die erste Instanz aufgesetzt. Je nach Leistungsfähigkeit des Rechners dauert das Starten des Gastes ca. 5 bis 10 Sekunden.

2. Akt: Den Bot zum Leben erwecken

Freitag, 12.11.21, 20:00 Uhr: Nach den beiden vorangehenden Umfragen kostet es mich nicht allzu viele Mühe, das Skript zu erstellen:

#!/bin/bash
link="https://www.srf.ch/news/schweiz/booster-fuer-alle-2g-lockdown-wie-das-coronavirus-jetzt-eingedaemmt-werden-kann";
firefox="export DISPLAY=:0.0;/usr/bin/firefox $link"
xdo="export DISPLAY=$nr;/usr/bin/xdotool"
clk() { 
  $suav "$xdo mousemove $1 $2 click 1 &"; sleep 1
}
key() { 
  $suav "$xdo key $1 &"; sleep 1
}
voteit() {
  killall firefox-esr; sleep 1
  $suav "$firefox $ling &"
  $suav "$xdo search SRF &";
  sleep 2; key Ctrl+f
  sleep 1; key e; key r; key e; key space; key M; key a; key s
  sleep 1; clk 300 530; sleep 1
}
voteit
reboot -f

Dieses Skript ist unter dem Namen desktop2.sh im Ordner /home/archivista/data/aqemu zu speichern. Das Skript selber erfüllt den folgenden Zweck: Firefox mit der entsprechenden Adresse starten und danach mit Ctrl+f nach der passenden Stelle suchen: «ere Mas» ergibt einen eindeutigen Treffer für den Titel «Schärfere Massnahmen». Danach ist die Bildschirmposition der Umfrage klar, an XY-Position 300,530 wird geklickt. Dies führt in unserem Fall dazu, dass wir die Frage nach schärferen Umfragen mit «Nein» beantworten.

Genau genommen muss dieses Skript in der virtuellen AVMutlimedia-Instanz unter dem Ordner /home/data/archivista/cust/desktop liegen, da dieses Skript jeweils beim Hochfahren immer dann abgearbeitet wird, wenn der gesamte Desktop (inkl. Netzwerk) zum Arbeiten bereitsteht.

Mit diesem Skript ist es möglich, ca. alle 24 Sekunden ein «Voting» abzusetzen. 8 Sekunden Hochfahren, 2 Sekunden Firefox starten, 12 Sekunden Skript abarbeiten. Mit der letzten Zeile erfolgt der automatisierte Neustart, sodass mit einer Instanz pro Stunde etwa 150 Stimmen abgegeben werden können. Das ist gut und schön, bei einer fünfstelligen Anzahl von Resultaten dürften 150 Stimmen aber folglich zu wenig stark ins Gewicht fallen.

Aus diesem Grund benötigt das Skript eine gewisse Skalierung über mehrere Instanzen (virtuelle Gäste). Konkret habe ich mich für 8 Gäste entschieden. Nun macht es wenig Spass, acht Rechner von Hand aufzusetzen. Spannender ist der Ansatz, dies automatisiert zu tun. Dazu erstellte ich das folgende Skript:

#!/usr/bin/perl
use strict;
my $master = "av1.aqemu";
my $disk = "av1.raw";
my $pav = "x/datadms/archivista/cust/desktop";
my $offset1=512;
my $offset2=12288262144;
mkdir "x" if !-d "x";
my @cmds = ("mount -o loop,offset=$offset1 av1.raw x",
  "cp syslinux.cfg x","umount x","mount -o loop,offset=$offset2 av1.raw x",
  "cp desktop2.sh $pav","chown archivista.users $pav/desktop2.sh",
  "chmod a+x $pav/desktop2.sh","umount x");
my $res=0;
foreach my $cmd (@cmds) {
  $res=doit($cmd) if $res==0;
}
open(FIN,"av1.aqemu");
my @lines = <FIN>;
my $cont = join("",@lines);
for (my $c=2;$c<=1;$c++) {
  my $cont1 = $cont;
  $cont1 =~ s/av1/av$c/g;
  $cont1 =~ s/<VNC_Display_Number>1</<VNC_Display_Number>$c</g;
  open(FOUT,">av$c.aqemu");
  print FOUT $cont1;
  close(FOUT);
  doit("chown archivista.users av$c.aqemu") if $res==0;
  doit("cp -ap av1.raw av$c.raw") if $res==0;
}
sub doit {
  my ($cmd) = @_;
  my $res = system($cmd);
  print "$res=>$cmd\n";
  return $res;
}

Es würde zu weit führen, hier jede einzelne Zeile zu erklären. Im Grundsatz geht es darum, dass das Skript desktop2.sh auf der virtuellen Festplatte hinterlegt wird (Datei av1.raw). Anschliessend wird die erste Instanz achtmal kopiert, denn mit acht Instanzen ergeben sich um die 1200 Votes pro Stunde. Das müsste eigentlich reichen, um eine Veränderung zu erzielen. Das obige Skript wird unter copyav.pl im aqemu-Ordner gespeichert und aufgerufen:

cd /home/archivista/data/aqemu
perl copyav.pl

Es erfolgen einige Statusangaben. Nach einigen Sekunden sind die Instanzen erstellt. Dazu aqemu beenden bzw. neu starten:

Unsere acht Instanzen sind nun samt den Bot-Programmen bereit, wir können beginnen «abzustimmen». Gerne möchte ich an diesem Punkt einige grundsätzliche Überlegungen anstellen. An sich hatte ich ja nicht vor, es live zu «beweisen». Es wäre mir lieber gewesen, wenn meine Informationen zur Fälschbarkeit der Abstimmungsumfragen von den zuständigen Medien aufgeriffen worden wären. Alleine die beiden Videos zeigen ja an sich gut auf, wie einfach solche Online-Umfragen manipulierbar sind.

Beim Schreiben dieser Zeilen einige Dutzend Stunden später weiss ich noch nicht, ob dieser Beitrag jene Beachtung findet, die ich mir wünschte. Es geht mir nicht darum, an dieser Stelle dazu aufzurufen, solche Bots auf alle möglichen Umfragen loszutreten. Ich muss aber auch betonen, dass ich das Simulieren von Tastatureingaben auf einer öffentlich zugänglichen Adresse unter keinen Umständen als Hacking betrachten kann. Sofern die Bots einfach mal alle paar Sekunden ja oder nein sagen, handelt es sich nach meiner Auffassung um normale Nutzeraktivität.

Selbstverständlich nicht zulässig wäre es, eine Homepage mit derart vielen Anfragen zu «bombardieren», dass sie unter der Last nicht mehr erreichbar ist. Der Vorsicht halber muss hier angeführt werden, dass ein unlimitiertes Ausführen von Bots eine «Denial-of-service-Attacke» darstellen kann. Vorliegend geht es einzig darum, alle x-Sekunden eine Homepage aufzurufen und dort abzustimmen. Später in der Nacht fand ich zudem heraus, dass ich in Handarbeit beinahe die gleiche Effizienz hätte erreichen können. Browser starten, Klick, Tab öffen und Link kopieren, Klick, Tab öffen und Link kopieren, Klick, Tab öffnen und Link kopieren, Klick, Browser schliessen und dann von vorne.

Ich wage sogar die Behauptung, mit einem Dutzend Energy-Drinks hätte ich die gleiche Leistung auch manuell hingekriegt. Das alleine scheint mir schon ziemlich blamabel für SRF, um es noch höflich auszudrücken. Wir sprechen hier nicht von Tschutti-Club Hintertupfingen, der mittels einer Umfrage herausfinden will, ob das Training am Mittwoch oder Freitag stattfinden soll.

Vorliegend geht es immerhin um das grösste staatliche Medienportal, das jedes Jahr faktisch zu allen nationalen Wahlen Umfragen publiziert. Dass solche Umfragen einen Einfluss auf das Wahlverhalten der Bürger/innen haben, lässt sich nicht von der Hand weisen. Daher dürfte eigentlich erwartet werden, dass diese seriös(er) durchgeführt werden.

Zudem wurden die Medien entsprechend informiert, SRF gar mehrfach, ohne dass eine Reaktion erfolgte. Das einzige «Medienportal», bei dem eine Reaktion erfolgte, meinte einleitend, wahrscheinlich sei halt geschlampt worden. Mag sein, aber dann dürfte es nicht vorkommen, dass die entsprechenden Hinweise einfach unter den Tisch gekehrt werden. Daher habe ich mir erlaubt, es «konkreter» aufzuzeigen. Ich gab mir folgende Testaufgabe. Nach ca. 4 Stunden einer Online-Befragung betrachte ich den aktuellen Stand. Würde es gelingen, das dann gültige Ergebnis ins Gegenteil zu kippen? Konkret auf die SRF-Umfrage bezogen, nach ca. 4 Stunden waren ca. 10000 «Resultate» vorhanden. Das Verhältnis lautete 62:38. Hiess für meinen Bot: Aus 62:38 ein 38:62 zu «voten»!

Freitag, 12.11.21, 20:30 Uhr: Nachdem ich das Skript erstellte und zunächst im Einzellauf prüfte, erstellte ich die acht Instanzen und startete diese. Gespannt starrte ich auf den Bildschirm. Nach ca. 30 Minuten lag das Voting bei 61:39, es schien irgendwie zu funktionieren. Offensichtlich gab bzw. gibt es keine Checks, wie oft jemand von der gleichen IP-Adresse aus an der Abstimmung teilnimmt. Ich rechnete folglich nochmals, wenn in ca. 30 Minuten ein Prozent machbar ist, müssten 12 Stunden für 24 Prozentpunkt «Umkehr» reichen.

Samstag 13.11.21, 00:59 Uhr: Es war soweit, ich hatte erstmals 50:50, dies beim Stand von 31300 Stimmen. Etwas erstaunt war ich kurz darauf:

 Samstag, 13.11.21, 01:17 Uhr: Erstmals lag ich zwar vorne, aber wenn es bei 50:51 so weiterginge, dann hätte ich am Ende 50:90, das wäre dann zwar vor allem für SRF peinlich, aber nicht das, was ich anstrebte.

Samstag, 13.11.21, 02:19 Uhr: Eine gute Stunde später endlich Entwarnung, 48:52, die Richtung stimmte. Nebenher schaute ich auf SRF den Film «Gesprengte Ketten», bis um drei Uhr verharrte ich vor dem Bildschirm. Was mich dabei stutzig machte, war, dass die Kadenz der Stimmen nicht einknickte. Ich hätte ja erwartet, dass ich mitten in der Nacht «fast» alleine sein müsste. War ich aber bei weitem nicht. Meine Stimmen machten immer nur einen «Bruchteil» der abgegebenen Stimmen aus. Mit dem besten Willen, dass jemand nachts um drei Uhr wie wild von Hand klickt und nach vier Votes den Browser wieder neu startet, dies in einer Endlosschleife, kann ich mir kaum vorstellen. Ich hatte eher den Verdacht, da wurde «kräftig» mit anderen Bots mitgeboten. Ob von Hand oder automatisiert mit einem Programm, oder ob ich nur zu müde war, um die Zahlen korrekt abzulesen, keine Ahnung. Da ich nicht auf die Energy-Drinks zurückgreifen wollte, ging ich kurz nach drei Uhr schlafen.



Samstag, 13.11.21, 08:17 Uhr: Ich stelle fest: 40:60. Meine Bots waren also irgendwie zu erfolgreich. Ich stoppte die Instanzen, um knappe drei Stunden später festzustellen: 
Samstag, 13.11.21, 10:48: Die «anderen» voten wohl weiter. Nun ging ich davon aus, dass die Umfrage um 11:30 (zur Samstagsrundschau) gestoppt würde. Dem war jedoch nicht so, folglich entschied ich mich, den Bot nochmals zu starten:

Samstag, 13.11.21, 12:24 Uhr: Eine gute Stunde lag der Zwischenstand wieder bei 40:60. Gestoppt wurde schliesslich irgendwo um 15:00 Uhr.

Samstag, 13.11.21, 15:30 Uhr: Bei 54033 Stimmen wurde der Zähler eingefroren. Doch, die Punktlandung war geschafft. An sich hatte ich ja vor, bei SRF nachzufragen, ob sie die Resultate überprüft hätten, denn all meine Votes kamen von einer einzigen IP-Adresse. Allerdings hatte ich nicht den Hauch einer Chance. Noch während ich die Mail mit diesen Aufzeichnungen verfasse, schreibt um 16:21 der SRF-Journalist Marc Tschirren in einem gross aufgemachten Artikel: «Ablehnung gegenüber weiteren Massnahmen: Von rund 55’000 Personen, welche an einer nicht repräsentativen Umfrage von SRF teilgenommen haben, lehnen satte 62 Prozent weitere Verschärfungen zur Eindämmung des Virus ab.» Einmal abgesehen davon, dass das Runden (54033 ergibt 54000 und nicht 55000, genauso wie es 50:51 auch nicht geben dürfte) nicht die Stärke von SRF zu sein scheint, dürfte es doch leider so zu sein, dass bei SRF das Starten einer leicht fälschbaren Umfrage und das Zusammenfassen der Kommentare zu genügen scheint, um daraus einen Artikel auf der Frontpage zu generieren. Zudem ist der Artikel derart zentral, dass er als einer jener drei bis fünf Beiträge dazu auserkoren wurde, die bei SRF neuerdings überhaupt noch (und moderiert) pro Tag diskutiert werden dürfen.

Samstag, 13.11.21, 18:00 Uhr: Wir besprechen es am Küchentisch. Ungläubig schauen wir uns an. Gut einverstanden, die gesamte Vorgeschichte vor Augen, erstaunt es mich jetzt nicht mehr wahnsinnig. Und doch, darf das sein? Was machen wir damit? Erst einmal abwarten und Tee trinken, einmal darüber schlafen.

3. Akt: Was nun? Die Nachbearbeitung

Sonntag, 14.11.21, ca. 17:00 Uhr: Auf der SRF-Seite https://www.srf.ch/news/schweiz/ausweitung-corona-massnahmen-srf-community-fordert-booster-impfung-anstatt-weitere-shutdowns steht: «Liebe Community, Danke fürs Mitdiskutieren. Wir schliessen nun die Kommentarspalte und wünschen einen schönen Sonntagabend. Liebe Grüsse, SRF News». Ich sichte die Kommentare nach Beliebtheit und blättere und blättere, niemand scheint Verdacht zu schöpfen. Erst sehr weit unten schreibt Userin A: «Wenn Impfgegner sich so gut organisieren können, dass sie Konzerte boykottieren können, dann eröffnen solche Umfragen eventuell noch ganz andere Möglichkeiten». Darauf antwortet User B: «Eine Verschwörungstheorie oder haben sie irgendwelche nachvollziehbare Vorgänge die auf eine „Manipulation“ hinweisen? Eventuell sollte SRF hier einen Kommentar dazu abgeben was die „Sicherheit“ solcher Abstimmungen betrifft, sonst wird sofort wieder behauptet es wurde manipuliert wenn einem diese Zahlen nicht ins eigene Bild passen. Verschwörungstheorien sollten hier keinen Platz haben, von keiner Seite!»

SRF gab genauso keinen Kommentar ab, wie jemand auf die Idee kam, dass solche Umfragen mit einem einzelnen Rechner aus der Pampa derart einfach fälschbar sind, obwohl genau jene SRF-Redaktion einige Tage zuvor mehrfach darauf aufmerksam gemacht wurde, dass solche Umfragen nicht durchgeführt bzw. publiziert werden dürften, weil sie extrem einfach fälschbar sind. So dürfte aktuell niemand wirklich wissen, wie viele der ca. 54033 «Stimmenden» es wirklich gab, d.h. wie viele Personen daran teilnahmen, denn jede/r konnte ja mehrfach voten. Selbst wer die 200 Kommentare durchgeht, stellt schnell fest, es sind da ein paar Wenige und aus diesen «wagte» genau eine Person einen Verdacht, der dann mit dem Verweis abgetan wurde, nicht doch, SRF ist seriös!

Die verwendete Umfrage bestand nur aus Ja/Nein. Weiter unten im Artikel wurde eine gesamte Palette an Vorschlägen präsentiert, die mit (1 Stern=nicht wichtig, 5 Sterne=sehr wichtig) beantwortet werden konnte. Einmal abgesehen davon, dass wenn etwas nicht wichtig ist, es dafür 0 Sterne geben sollte, kann die zweite Umfrage im Unterschied zur ersten Frage (ob es überhaupt eine Verschärfung geben soll) auch Tage später noch ausgefüllt und abgeschickt werden.

  

So kann ich am Montag weiter für schärfere Massnahmen «voten», nicht aber jedoch gegen eine Verschärfung der Massnahmen «stimmen». Nebenbemerkung: Ob jemand allenfalls findet, es genügten weniger scharfe Massnahmen, dazu kann gar keine Aussage gemacht werden. Und bei der Auswertung der Resultate fehlt der Bezug 1 Stern=unwichtig, 5 Sterne=wichtig komplett, es werden nur die Sterne präsentiert. Werden nur diese gelistet, führt das dazu, dass irgendwie alle Massnahmen gewünscht werden, obwohl an sich erst bei vier Sternen der Bezug zu «wichtig» gemacht werden dürfte.

Weiter kann hier festgestellt werden, dass bei meiner Beobachtung in den frühen Morgenstunden des 13.11.21 (d.h. bis um 3 Uhr, als ich schlafen ging) analog zu den Abstimmungen für die Hauptfrage festgestellt werden konnte, dass die Zahl der Votings sowohl bei der Grundfrage als auch bei den Massnahmen stetig anstieg. Auch dies erscheint mir «etwas» seltsam. Und ja, natürlich hätte ich den Bot auch auf diesen Teil ausweiten können. Es unterblieb aus zwei Gründen: Erstens hätte dies nur bei der Konstellation Sinn ergeben, wenn der Bot aufgrund der Ausgangslage für schärfere Massnahmen hätte voten müssen. Zweitens hätte ich dazu noch ein zwei Stunden mehr Zeit benötigt und das Voting wäre etwas langsamer gewesen.

Grundsätzlich muss hier festgehalten werden, mit einem Bot lassen sich sämtliche Fragestellungen beantworten, das beweisen die beiden anderen Bots zu den Abstimmungsfragen deutlich. Selbst eine Registrierung mit einer Mail liesse sich mit bescheidenem Aufwand realisieren.

Nach einer intensiven Beschäftigung (die so nicht geplant war) kann die Aussage gemacht werden: Die SRF- und Tagi-Umfragen zu den Abstimmungen erfolgen grösstenteils mit JavaScript. Der Code lässt sich recht einfach abfangen. Bei SRF ist nicht mal das notwendig, bei der Tagi-Umfrage musste ich nur die Captcha-Abfrage «eliminieren». Nun könnte der Versuch gestartet werden, den JavaScript-Code soweit zu beeinflussen, dass die gesamte Umfrage gar nicht erst mit «xdotool» auf dem Bildschirm abgearbeitet wird, sondern das einzig der Senden-Knopf am Ende mit den gewünschten Werten abgeschickt würde. Ein solcher Ansatz würde das Potential fast beliebig nach oben schnellen lassen.

Unabhängig davon, ob der letztere Ansatz von den Servern abgefangen werden könnte, muss festgestellt werden, wenn ein einziges Notebook genügt, um mal schnell in einigen Stunden eine Umfrage zu «kippen», dann tendiert die Aussagekraft solcher Umfragen gegen Null. Beim Recherchieren auf der SRF-Homepage musste ich erkennen, dass frühere Polls wohl mit der gleichen Technologie gemacht wurden. Nochmals: Solche Umfragen sind zwar absolut nicht geeignet, irgendwelche Aussagen daraus abzuleiten, ausser dass die Aussage dazu geeignet ist, die Wählerschaft durch einen einzelnen Rechner beliebig und gehörig zu manipulieren. Dies sollte uns zu denken geben.

Wie ich eingangs schrieb, wir leben heute in einer digitalen Welt. Der Bildschirm bestimmt unser Leben in weiten Teilen. Was leuchtend auf einem OLED-Display daherkommt, brennt sich munter in unser Gedächtnis sein. Dabei versagen nicht nur jene amerikanischen Grosskonzerne, die unmittelbar aus unseren Daten Profit schlagen, sondern offensichtlich auch grosse «seriöse» staatliche wie private Medienunternehmen der Schweiz bei faktisch allen Online-Befragungen.

Epilog: Ist es wirklich so einfach?

Ja, es ist in der Tat sehr einfach. Mit den hier angeführten Informationen kann jede/r, der einigermassen computergewandt ist, mit einem einzelnen Gerät pro Tag (je nach Länge der Umfrage) zwischen einigen wenigen Tausend bis hinauf in einen sechsstelligen Bereich für oder gegen etwas «abstimmen». Liebe Verantwortlichen, bitte nehmt dies zur Kenntnis! Die aktuell so erhobenen Umfragen sind unter diesen Umständen in keinster Weise verwertbar.

Bleibt die Frage, wie viele der Stimmen durch den hier vorgestellten Bot konkret abgegeben wurden? Offen gesagt, die genaue Zahl kenne ich nicht. Für ein Loggen der Votes reichte die Zeit nicht. Um es aufzeichnen zu können, hätte das Ergebnis abgewartet werden müssen, und diese Sekunden waren mir zu «kostbar». Eine Sekunde nach dem Voten erfolgte der Neustart.

Zudem hatte ich mit dem hier vorgestellten Verfahren zu Beginn etwelche Probleme, die richtige Position zu treffen. Ich musste das Skript später etwas verfeinern (und darum war es im zweiten Teil wohl zu effektiv), genauso wie ich irgendwann in der Nacht erkannte, dass ich pro Aufruf gleichzeitig einige Votes hätte absetzen können (dies wurde nicht umgesetzt, ich war da bereits zu müde). Geschätzt dürfte die Anzahl der Votes irgendwo im höheren vierstelligen Bereich bis in einen sehr tiefen fünfstelligen Bereich liegen. Ich weiss nicht, was SRF bei den Umfragen «mitspeichert», allenfalls könnte SRF darüber Auskunft geben. Alleine aus Transparenz-, aber auch aus Datenschutzgründen müsste, wenn denn solche Umfragen gemacht werden wollten, jeweils sämtliche erhobenen Werte (z.B. mit anonymisierten IP-Adressen) publiziert werden. Dann wären die Daten immerhin etwas besser verifizierbar. Allerdings können auch IP-Adressen «verschleiert» werden.

Im übrigen läuft der hier vorgestellte Bot auf einem einfachen Notebook. Über UBS-Thetering (der Aufbau zum Internet erfolgt dabei direkt von einem Notebook über das Smartphone) wäre es jederzeit möglich gewesen, die gleichen Resultate quer durch die gesamte Schweiz reisend in der gleichen Zeitspanne zu produzieren. Damit hätte ich die Datenspuren schon mal recht gut verschleiern können. «Entschleiert» kann es dann nur noch im Rahmen einer Strafverfolgung einer schweren Straftat werden, ansonten der Zugriff auf die IP-Profile ja (zu Recht) nicht zulässig ist.

Letztlich ist es einfach so, dass bei Online-Befragungen, bei jeder Arbeit am Computer, niemand feststellen kann, ob die Eingaben durch einen Menschen oder durch ein Programm erfolgen. Selbst wenn die Verantwortlichen auf diesen Beitrag nicht reagieren sollten (was ich nicht hoffe!), so sollten wir uns ganz allgemein bewusst werden, Bildschirme verkünden nicht jene Wahrheit, die wir, vielleicht aus Gewohnheit, wahrscheinlich aber mehr aus der Wucht der bunten Farbenwelt bislang angenommen haben. Daraus glauben wir eine Wahrheit zu erkennen, die es nicht gibt, so nicht geben kann. Und genau daher sollten wir in Zukunft (zumindest vor Wahlen) auf solche Online-Befragungen verzichten – oder dann zumindest dafür sorgen, dass diese nicht derart trivial verfälscht werden können.

Montag, 15.11.21, 3:00 Uhr: Eine Rohfassung des Artikels ist fertiggestellt. Ich sende diesen an kontakt@gnulinux.ch als Beitrag für den laufenden «November-Wettbewerb» für Beiträge, der dort aktuell zu Themen rund um Linux und Open Source läuft.

Montag, 15.11,21, 7:33 Uhr: Von admin@gnulinux.ch erhalte ich eine Nachricht. Nach ihrer Ansicht handle es sich lediglich um eine fehlerhaft programmierte Umfragenfunktion auf Seiten des SRF. Das sei zwar unschön, darob sei aber nicht die Demokratie in Gefahr. Es könne zwar die Frage gestellt werden, ob Online-Umfragen sicher durchgeführt werden könnten. Es müsse dabei aber bedacht werden, dass es schon jetzt eine grosse Interessengruppe (eID) gebe, welche eine Identifitätsprüfung für die Nutzung des Internets fordere. Würden Informationen wie diese publiziert, würde dies dazu führen, dass diese Gruppierungen es zum Anlass nehmen könnten, für ihre Interessen Werbung zu betreiben. Das führte dazu, dass man sich in Zukunft wohl ausweisen werde müssen, ehe das Internet genutzt werden könne. Gezeichnet ist die Mail mit «Deine GNU/Linux.ch Redaktion», wobei dabei nicht klar ist, wer die Mail um 7:33 Uhr abgeschickt hat.

Montag, 14.11.21, 17:00 Uhr: Ein erneuter Mailaustausch mit den Macher/innen von https://gnulinux.ch, worin ich unter anderem einbringe, dass ich nie davon gesprochen hätte, die Demokratie sei in Gefahr. Vielmehr ginge es darum aufzuzeigen, dass Umfragen nicht fälschbar sein dürften. In einer letzten Mail wird für die Mühe und die Arbeit gedankt. Gleichzeitig wird mitgeteilt, der Beitrag werde nicht veröffentlicht, weil nicht ausgeschlossen werden könne, dass der Inhalt gegen geltendes Recht verstosse (Hacking, Datenmanipulation) und dass er über die Themen Open Source und Freie Gesellschaft hinausginge. Gemäss Homepage wird freie Gesellschaft wie folgt verstanden: Du interessierst Dich für Netzpolitik und eine freie Gesellschaft? Schreibe darüber. Da kein weiterer Austausch gewünscht wird, möchte ich zur Legalität gerne auf die gute Zusammenfassung auf https://f.hubspotusercontent00.net/hubfs/8094553/Hacker%20und%20Hacking%20im%20Schweizer%20Recht.pdf verweisen. Der Journalist, der am Freitag Interesse bekundete, hat sich nicht gemeldet. Der Artikel geht online. Gleichzeitig erfolgt eine Mail an SRF-News mit der Bitte um einen Kommentar.

Montag, 15.11.21, 17:05: Die obigen Umfragen sind kein Einzelfall, dazu aktuell hier https://www.nau.ch/news/schweiz/coronavirus-schweizer-in-osterreich-uber-neue-2g-regel-66039286 — schon verrückt, auch bei dieser Umfrage genügt es den Browser zu schliessen, um neu voten zu können.

Dienstag, 16.11.21, 8:00: Eine leicht gekürzte Version (ohne die “technische” Anleitung)  dieses Artikels erscheint auf https://insideparadeplatz.ch/2021/11/16/wir-koennen-beginnen-abzustimmen

Dienstag, 16.11.21, 23:00: SRF hat reagiert. Gemäss KleinReport.ch stoppt SRF per sofort sämtliche politischen Umfragen. Das ist doch schon mal ein Anfang in die richtige Richtung. Die entsprechenden Artikel wurden geändert bzw. von der Homepage entfernt:

Wer den Artikel doch noch lesen möchte, findet ihn unter archive.org

Anfügen möchte ich an dieser Stelle noch, ich habe nicht behauptet, die Umfragen seien manipuliert. Ich habe nur gesagt, dass derartige Online-Befragungen beliebig mit Bots “gelenkt” bzw. verfälscht werden können. Es liegt nun an den betroffenen Unternehmen aufzuzeigen, dass ihre Umfragen nicht verfälscht wurden.

Die Beteuerung, es sei nicht möglich, weil auch ein telefonischer Teil erfolge, scheint mir nicht stringent, denn dann könnte der Online-Teil ja auch weggelassen werden. Irgendwie empfinde ich es auch sehr beleidigend, wenn die Arbeit all dieser Menschen nun einfach “weggeputzt” wird, indem angeführt wird, es würde ohnehin nur ergänzend verwendet, massgebend(er) seien die Telefonate. Doch, tolle Wertschätzung all dieser Arbeit, sehr motivierend, um je wieder teilnehmen zu wollen.

Transparenz hiesse für mich aber auch, jetzt nicht einfach zu behaupten, es werde seriös gearbeitet. Das ist zu belegen. Nur so als Beispiel. Korrekterweise wäre anzukündigen, wann eine Umfrage beginnt und wann sie endet. Bei SRF war es ja so, dass es irgendwann ganz einfach nicht mehr möglich war, teilzunehmen, ohne dass zuvor eine Deadline genannt wurde.

Wer jedoch den Direktlink hatte, konnte die Umfrage problemlos weiter ausfüllen und erhielt am Ende die Meldung “Danke für die Teilnahme”. Ja, was jetzt? Entweder werden jene veräppelt, die den Direktlink nicht hatten oder aber jene, die ein OK kriegten, obwohl sie zu spät waren. Das darf einfach nicht sein.

Ferner müsste zu jeder Zeit klar sein, dass es sich um eine SRF-Umfrage handelt. Genau dies war aber nicht der Fall. Nach dem Link von SRF zu gfs gibt es keine Hinweise mehr, dass es sich um eine SRF-Umfrage handelte. Man kann dies als Kleinigkeiten wegwischen, in der Summe erscheint mir dies gewagt.

Unabhängig davon bleibe ich bei der Aussage, so kurz vor Wahlen sollten überhaupt keine Befragungen mehr veröffentlicht werden. Wer Vertrauen in eine Demokratie hat, braucht den Menschen vorher nicht punktgenau aufzuzeigen, wie eine Abstimmung ausgehen wird. Dann müssten wir ja gar nicht mehr zur Urne gehen.

Genau dieses Risiko besteht aber bei Umfragen kurz vor Abstimmungen. Werden z.B. nur 30% Zustimmung zu einer Vorlage angeführt, werden sich doch viele sagen, ich bin zwar schon dafür, aber bei so wenig Zustimmung kann ich mir den Gang zum Abstimmungslokal ja auch sparen. Gleiches gilt natürlich bei vorhergesagten 70% Nein, da braucht es mein Nein ja nicht auch noch.

Da beklagen wir uns immer über eine tiefe Quote bei der Teilnahme, nehmen den Menschen aber die Motivation abstimmen zu gehen, indem mantramässig verlautbart wird, so komme es ohnehin heraus.

Ohne Wahlprognose dürften deutlich mehr Menschen abstimmen gehen, eben gerade, weil ja niemand weiss, wie es herauskommt. In diesem Sinne wünschte ich mir mehr Selbstkritik der Player oder anders gesagt, mir erscheinen die heute geäusserten Verlautbarungen eher wie ein Wir-haben-alles-im-Griff-BAG-Statement.

Mittwoch, 17.11.21, 22:00: Ernüchternd muss heute festgestellt werden, dass die Wahlprognosen trotzdem publiziert wurden. Die Macher/innen behaupten einfach, die Umfragen liessen sich nicht fälschen, allfällig “unpassende” Resultate würden “aussortiert”. Nur, nach welchen Kriterien erfolgt dies? Schade, dass fast alle Medienportale die Verlautbarungen der Verantwortlichen ungefragt übernehmen. Einzig unter https://www.infosperber.ch/politik/abstimmungen-schweiz/manipuliertes-srf-voting-clevere-bots-sind-ein-risiko werden Fragen aufgeworfen. Leider bleiben diese vorerst unbeantwortet.

Unter https://www.srf.ch/news/abstimmungen-28-november-2021/umfragen-bei-srf-wie-serioes-sind-umfragen-herr-golder wird ausgeführt, wie die SRF-Umfrage zustande kam. Von gfs-Bern gibt es eine PowerPoint-Präsentation unter https://cockpit.gfsbern.ch/wp-content/uploads/2021/11/213006_srg_trend_28.11.2021_w2_vollerversion-2.pdf.

Demnach beruht die Umfrage auf gerade einmal gut 1’200 Telefonaten, gfs-Bern zeigt nicht auf, nach welchen Kriterien diese Befragungen durchgeführt wurden. Dagegen gibt es ca. 22’800 Online-Befragungen, die abgegeben worden sein. Nach meiner Ansicht nach ist es nicht seriös, die ca. 22’800 einfach auf die 1’200 Telefonate zu reduzieren. Die Telefonate machen ja nur ca. 5 Prozent der Befragungen aus. Letztlich bleibt, was wie warum und wozu gewertet wird, bleibt völlig unklar.

Wie ich gestern schon ausführte: Diejenigen, die online teilnahmen, wurden veräppelt. Einmal, weil diejenigen, die wussten, wie es geht, x-fach (mit einem Bot gar unlimitiert) abstimmen konnten und weiter weil die Online-Ergebnisse ohnehin von gfs-Bern nach nicht nachvollziehbaren Kriterien (ein paar Schlagworte reichen nicht) “gewichtet” wurden, damit diese zu den 5 Prozent der telefonischen Befragungen passten.

Donnerstag, 18.11.21, 10:00: Ein Kommentar bei infosperber.ch verweist auf jemanden, der die Umfragen bei nau.ch unter die Lupe nahm, dazu: https://github.com/nau-manipuliert-umfragen/analyse. Eine Beweisführung ist das nicht. Ich kann z.B. bei github nicht einmal feststellen, wer den Code erstellt hat bzw. wer norby20 ist. Persönlich erscheint mir die Analyse zumindest prüfenswert. Dies nicht zuletzt auch deshalb, weil bei nau.ch Paid-Content-Artikel, die Werbung für das Covid-Gesetz sind, geschaltet sind. Einfach mal die Frage gestellt: Bezahlt-Artikel für Abstimmungen, gab es das bisher schon oder ist das ein Novum? Passt wunderbar ins Narrativ: “Maskenpflicht und 2G: Immer mehr Experten fordern Verschärfungen”. Nochmals, solche Umfragen lassen sich (von wem auch immer) mit einfachsten Mitteln manipulieren.

Freitag, 19.11.21, 01:20: Ein Analyse und ein Test zeigen, dass die Nau-Umfragen zwar an sich fälschbar sind. Die Resultate scheinen aber entgegen dem auf Github geäusserten Verdacht von norby20 korrekt zum Server geschickt und auch ausgewertet zu werden. In diesem Sinne kann der Verdacht von norby20 nicht erhärtet werden. Trotzdem dürften solche Umfragen nicht erhoben werden, denn mit Mehrfach-Clicks (es reicht, das Cookie nau_session zu entfernen) oder Bots lassen sich die Nau-Umfragen beliebig “manipulieren”.


Seit dem 1. Janaur 2021 bis zum aktuellen Zeitpunkt (29.03.2024 08:23:35) macht die Schweiz (alleine auf Bundesebende) zur Bewältigung von Covid neue Schulden über 170402.358 Millionen bzw. 170.402 Milliarden. Dies entspricht dem Erwerb von neuen Kampfflugzeugen (gemäss Abstimmung Sommer 2020).