Ransomware

Sicherheitshinweis


Ransomware bedroht auch Ihr Unternehmen und Ihre privaten Daten!

Aktuell erreichen uns wieder sehr viele Neukundenanfragen wegen so genannter Ransomware (Krypto-/Erpressungstrojaner)
Diese relativ neue Art eines Trojaners oder Virus stellt uns vor neue Aufgaben, welche ein Umdenken absolut unabdingbar machen.

Ihre Daten sind in akuter Gefahr und sollte Sie daher veranlassen, Ihr Konzept zur Datensicherung zu überdenken. COMSTARK IT rät seinen Kunden schon immer zu einer RICHTIGEN Datensicherung, was die überwiegende Mehrheit auch befolgt, leider wissen wir aber wie es in der Realität aussieht. Die Zeiten in denen man wöchentlich oder "wenn man gerade mal dran denkt" eine Datensicherung auf einen USB Stick oder eine CD/DVD brennt sind schon lange vorbei! Mit der aktuellen Bedrohung durch Ransomware werden alle Ihre Daten inkl. verbundener Netzlaufwerke und angeschlossene USB Sticks AES verschlüsselt! Da es keine Möglichkeit für die meisten dieser verschlüsselten Daten gibt, diese wieder zu entschlüsseln werden Sie und Ihr Unternehmen erpressbar! In der Regel tauchen nach so einer Attacke Forderungen nach Lösegeld auf um einen Entschlüsselungskey für Ihre Daten zu erhalten. NUR mit diesem Key lassen sich die Daten wieder herstellen. So werden Zahlungen von bis zu 3 Bitcoins erpresst, der Wert eines Bitcoins beläuft sich aktuell auf ca 600,- Euro!
Ihre Daten sind also nur noch sicher, so lange Ihre Datensicherung dementsprechend konfiguriert ist, da selbst aktuelle Antivirenprogramme diese Trojaner nicht erkennen. Sie schützen sich zusätzlich, in dem Sie keine E-Mails von Unekannten öffnen, erst recht nicht wenn .zip, .exe,  .js, .vbs, .bat usw. Anhänge in der E-Mail vorhanden sind. Die aktuelle Masche sind angebliche Mails von DHL, Telekom, Bank, Bewerbungen oder Gewinnbenachrichtigungen, seien Sie also wachsam.

Sollte es dennoch in der Hektik passiert sein, bitte sofort den Rechner ausschalten und COMSTARK IT kontaktieren

Rufen Sie uns an 06834 - 780 583

Smarthome Nr.8 2016 wurde heute durch uns an seine Bewohner in Saarlouis übergeben. Automatisiert haben wir bei diesem Projekt die Zutrittskontrolle inkl. Intercom Türstation, die Alarmanalge, die Beschattung und die Beleuchtung. Alle Gewerke lassen sich auch aus der Ferne steuern und überwachen. Verbaut wurde:

LOXONE, HOMEMATIC und ABUS

26 x digitale Ausgänge (Beschattung, Beleuchtung und Alarm)
18 x digitale Eingänge (Beschattung, Beleuchtung und Alarm)
1 x Intercom Türstation (Zutritt und Alarm)
1 x 1-Wire (Zutrittskontrolle iButton)

Anlage sendet Pushnachrichten und/oder ruft die Bewohner im Alarmfall an.

Wir sind Smarthome im Saarland

http://www.comstark.de
http://www.2wire.de

 

Was ist das?


2wire.de stellt euch hiermit eine komplette Lösung zum Datenlogging für Temperatur und Luftfeuchtigkeit aus Loxone heraus kostenlos zur Verfügung. Das genutze Highcharts ist hier zu finden http://www.highcharts.com und ist "Free for Non-commercial"
Ursprünglich wurde das ganze von meigrafd für einen Raspberry erstellt. Wir haben das ganze dann umgebaut, um die Highcharts mit mysql, php und js direkt aus dem Loxone Miniserver mit Temperaturdaten und Luftfeuchtigkeitsdaten zu füttern.
Ziel von uns war es, den Miniserver und vor allem die SD Karte zu schonen.
Trotzdem haben wir uns bewusst dafür entschieden, die Daten vom MS zur Datenbank zu senden und nicht für den Weg, die Daten per php vom MS abzuholen. Einmal installiert, ist keine änderung mehr an HighLox notwendig. Die Gerätenamen und die Zuordnung ob Temp oder Feuchte geschieht nur am Miniserver.


Vorraussetzungen

Ein wenig Kentnisse mit php und mysql und den dazugehörigen Serverdiensten.
...xampp für Windows oder einen Linuxserver oder einen Raspberry usw.

Installation

Die Dateien aus unserem Paket HighLox.zip entpacken und den Inhalt in das gewünschte Webverzeichnis kopieren.
An eurem Server eine mysql Datenbank mit dem Namen "measurements" erstellen, dann den in unserem HighLox.zip enthaltenen sqldump in die neue Datenbank importieren (es sind Testdaten von uns enthalten).
Zugangsdaten für die Datenbank in der config.php, der humdb.php und in der tempdb.php entsprechend ändern.
Wenn Ihr jetzt das Verzeichnis mit den Dateien aus der HighLox.zip mit einem Browser auf eurem Webserver öffnet, solltet Ihr die Charts mit unseren Testdaten sehen.
Wenn das geklappt hat, könnt ihr die Testdaten aus der Tabelle "data" in der Datenbank "measurements" löschen.
Datentypen sind hum und temp
Um die Datenbank und damit die Charts mit euren Daten zu befüllen, könnt Ihr der Beispieldatei aus dem HighLox.zip entnehmen.

2wire.de übernimmt keine Haftung für die Scripte und deren Einsatz, Nutzung auf eigene Gefahr.

Hier erklären wir euch, wie Ihr den Loxone Miniserver zusammen mit SONOS zur Sprachausgabe per TTS nutzen könnt. Wir nutzen einen vorhandnen Windowsrechner, der eh immer online ist. Ihr könnt aber auch einen Raspberry, ein vorhandenes NAS oder sonstiges System benutzen, welches node.js unterstützt.

Benötigt wird:

ein kostenloser API-Key von voicerss.org

node.js für Windows oder was immer Ihr an Hardware benutzen wollt (Raspberry, NAS usw.)

Und node sonos

Nach der Installation von node.js, entpackt Ihr das .zip-File in einen Ordner eurer Wahl.

Im Hauptordner aus dem .zip-File findet Ihr eine Datei mit dem Namen settings.json, die wir für euch angelegt haben, in dieser Datei hinterlegt Ihr den API-Key von voicerss.org

Bei uns ist das C:\node-sonos-neu, danach öffnet Ihr ein Consolenfenster (als Administrator ausführen) und wechselt in dieses Verzeichnis.

Hier führt Ihr folgenden Befehl aus, um alle Abhängigkeiten für node.js und die SONOS API zu installieren

npm install --production

und node.js installiert die benötigten Abhängigkeiten.

node.js Abhängigkeiten nachinstallieren

Prinzipiell könnt Ihr den Server nun über ein Consolenfenster im Hauptordner starten mit

npm start

Im Consolenfenster sollte das ganze dann so aussehen:

Start von SONOS-HTTP per Console
Start SONOS-HTTP

Hier könnt Ihr schon sehen, daß diese API einfach genial ist, es werden alle eure Player im Netz gefunden, diese könnt Ihr später auch mit den Namen, die Ihr in der SONOS Software vergeben habt ansteuern, ihr braucht nichts weiter zu konfigurieren. Solltet Ihr mal einen Player dazu kaufen oder umbenennen, werden diese nach einem Neustart der API automatisch gefunden. Weder IP-Adressen, noch RINCON´s müssen von euch verwaltet werden!

Da der Start der API per Console (welche dann immer geöffnet bleiben muss) nicht sehr vorteilhaft ist, empfiehlt es sich den Start der API als Dienst zu installieren. Hier gibt es wieder viele Möglichkeiten und ist abhängig von eurem System, welches Ihr verwendet. Wir haben uns für AlwaysUP entschieden, welches Ihr erst einmal als Testversion downloaden könnt. Die Konfiguration des Dienstes für die SONOS API sieht dann so aus:

Per default lauscht die SONOS API auf dem Port 5005

Die Standardsprache TTS der API haben wir für euch auf deutsch abgeändert. Die API unterstützt folgende Sprachen:

|ca-es|Catalan|
|zh-cn|Chinese (China)|
|zh-hk|Chinese (Hong Kong)|
|zh-tw|Chinese (Taiwan)|
|da-dk|Danish|
|nl-nl|Dutch|
|en-au|English (Australia)|
|en-ca|English (Canada)|
|en-gb|English (Great Britain)|
|en-in|English (India)|
|en-us|English (United States)|
|fi-fi|Finnish|
|fr-ca|French (Canada)|
|fr-fr|French (France)|
|de-de|German|
|it-it|Italian|
|ja-jp|Japanese|
|ko-kr|Korean|
|nb-no|Norwegian|
|pl-pl|Polish|
|pt-br|Portuguese (Brazil)|
|pt-pt|Portuguese (Portugal)|
|ru-ru|Russian|
|es-mx|Spanish (Mexico)|
|es-es|Spanish (Spain)|
|sv-se|Swedish (Sweden)|

Angesteuert wird die TTS der API wie folgt:

Sprachausgabe:

/[Raumname]/say/[dein Text][/[sprach_code]]
/sayall/[dein Text][/[sprach_code]]

Beispiele:

http://IP-AdresseServer:5005/Wohnen/say/Waschmaschine ist fertig
http://IP-AdresseServer:5005/Wohnen/say/Hej, maten är klar/sv-se
http://IP-AdresseServer:5005/Wohnen/sayall/Hallo, Abendessen ist fertig

In Loxone wird der Server mit IP Adresse und Port in einem virtuellen Ausgang angelegt

Dann zu jedem Befehl, welcher per TTS gesprochen werden soll einen virtuellen Ausgangsbefehl zu dem oben angelgten viruellen Ausgang, z.B. für den Alarmbaustein und den Status der Alarmanlage:

wobei /ansage/ der Name des SONOS Players ist.

Die API deckt so ziemlich das ganze SONOS System ab und es können alle Funktionen genutzt werden. Da uns hier aber nur das TTS interessiert, möchten wir nicht weiter auf alle Möglichkeiten eingehen. Im Hauptordner liegt aber eine Readme, die euch die weitere Syntax erklärt und diese könnt Ihr natürlich auch auf den Loxone Miniserver anwenden und so z.B. eine komplette Steuerung über den Miniserver realisieren. Bei uns läuft das ganze seit einem Jahr störungsfrei und zuverlässig.

Stand dieser Doku 02/2016, die API stammt ursprünglich von Jimmy Shimizu und steht unter der MIT License (MIT) zur Verfügung.

Loxone und TFE AGFEO über Fritzbox

Hier erklären wir, wie man seine vorhandene TFE Agfeo oder jede beliebige analoge TFE im Zusammenhang mit einer FritzBox für die Loxone Türsteuerung fit macht. Allerdings ist der Miniserver hier nur an einer Nebenstelle möglich, weil bei der TFE nur ein Klingeltaster den potentialfreien Ausgang sinnvoll belegen kann. Somit ist es bei unserer Konfiguration nur für eine Wohnung möglich, den Loxone Miniserver und die APP zu nutzen. Die 3 weiteren Nebenstellen funktionieren wie bisher.

Ausgangspunkt für diese Konfiguration ist eine schon etwas länger vorhandene TFE mit 4 Klingeltaster, eine vorhandene FritzBox und die Tatsache, dass die Haustür und der Miniserver von Loxone zu weit auseinander liegen um ein Kabel zu ziehen, aber 1x Ethernet vorhanden ist.

Was wird benötigt?

  • 1. Loxone Miniserver
  • 2. analoge TFE Türstation (Agfeo oder anderer Hersteller)
  • 3. Windows Rechner im Netzwerk 24/24
  • 4. Arduino (hier ein Mega, stromversorgung am USB der FritzBox)
  • 5. Relais 1 Port für 5 Volt

Die TFE wir als analoges Endgerät an die FritzBox installiert und konfiguriert, hierbei ist es wichtig, dass die TFE nicht als Türsprechstation eingerichtet wird, sondern als normals analoges Endgerät, das hat den Hintergrund, dass man der TFE sonst keine Rufnummer zuordnen kann! Ein weiteres Problem der TFE ist, dass diese keine internen Nummern der Fritzbox anwählen kann z.B. **620. Um dieses Problem zu umgehen haben wir, weil eh ein Server im Netzwerk ist, der 24 Stunden online ist, eine SIP Telefonanlage für Windows installiert - SIP Telefonanalge 3CX. Die 3CX ist in der kostenlosen Variante mehr als ausreichend für unser Projekt. Jede andere SIP Anlage wie Asterisk auf einem Raspberry usw. sollte genau so gut funktionieren. In der 3CX muss neben den Nebenstellen noch eine Ausgehende Regel erstellt werden.

  • 1. Regelname - frei definibar
  • 2. Anrufe Präfix - 0
  • 3. Anrufe Nebenstellen - 100-200

Somit weiss die 3CX, dass alle Anrufe ohne 0 intern gewertet werden und man unter den einzelnen Nebenstellen telefonieren. In der 3CX muss man jetzt nur noch unter der Nebenstelle (100) für die TFE eine SIP-ID hinterlegen. Der Name ist frei definierbar (bei uns Loxoen), dann kann die Loxone APP die TFE anrufen und das Hauptproblem der analogen TFE wurde umgangen.

Nachdem die 3CX installiert ist und 4 Nebenstellen angelgt wurden (1x TFE und jede weitere Klingeltaste eine Nebenstelle), werden die Nebenstellen in der Fritzbox als SIP Rufnummern registriert. Wir haben die Nummern 100-103 vergeben, die 100 wurde der TFE zugeordnet und 101-103 den internen Telefonen in den Wohnungen. Wichtig beim registrieren der Nummern in der Fritzbox ist, dass Rufnummer für die Anmeldung und Interne Rufnummer in der Fritz!Box identisch sind, da die 3cx sonst die Nummern nicht verarbeiten kann und kein Gesprächsaufbau möglich ist. Zudem muss im Rufnummernformat jeweils bei Landes und Ortsvorwahl die Option keine angewählt werden.

Der TFE müssen jetzt die einzelnen Rufnummern (101-103) zugeordnet werden um die einzelnen Geräte in den Wohnungen zu erreichen. Wird jetzt eine Taste an der TFE gedrückt, vermittelt die FritzBox das Gespräch an die 3CX und von dort wieder zurück an das jeweilige Endgerät an der Fritzbox. Wenn man an dieser Stelle SIP fähige Endgerät in den Wohnungen hat, kann man diese direkt an der 3CX registrieren und hat sich den Umweg gespart. Da wir hier aber eine komplette Installation mit analogen bzw. DECT Telefonen hatten und diese weiter benutzt werden sollten, ist dieser Umweg notwendig und zudem auch unproblematisch. Vom drücken der Klingeltaster bis zur Signalisierung an den Endgeräten dauert es 1-2 Sekunden, was absolut ok ist.

Im Loxone Miniserver wird ein Baustein Türsteuerung eingefügt und unter Host für Audio (intern) die IP (192.168.xxx.xxx) der 3CX angegeben und im Benutzername den Wert für die zuvor definierte SIP-IP (Loxone) eingetragen werden. Ab jetzt ist es möglich, die TFE per APP anzurufen. Der Nebenstelle, für die wir keine Rufnummer an der TFE programmiert haben, wird der potentialfreie Ausgang zugeordnet. Das ist notwendig, weil wir die TFE von der Loxone App aus nicht anrufen können während die TFE versucht ein Gespräch aufzubauen.

An dieser Stelle kommt der Arduino ins Spiel. Der Arduino ist so programmiert, dass er beim drücken des Klingeltasters, welchem der potentialfreie Kontakt zugeordnet wurde, ein UDP Paket an den Loxone Miniserver schickt (Pin 8). Am Miniserver wurde ein Virtueller Eingang (Klingel) angelegt, der dass vom Arduino geschickte UDP Paket als Türklingel interpretiert und an den Türsteuerungsbaustein angehängt. Zudem wird eine Prowl Pushnachricht vom Loxone Miniserver verschickt. Eine weitere Aufgabe, die der Arduino zu erledigen hat, ist das Auslösen des Türöffners. Dazu wurde im Loxone Miniserver ein Virtueller Ausgang definiert. Dieser Ausgang (Pin 9) öffnet im Hintergrund die Webseite des Arduinos und schaltet über den Pin ein Relais und betätigt den Türöffner.

Hier der Sketch:

 
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
boolean reading = false;
 
// PIN Settings
#define Klingeltaster 8
 
// Variable Declaration
char KlingelState = 0;
 
// Network Settings
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 222);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
 
EthernetServer server = EthernetServer(80);
 
// Local UDP port to listen on
unsigned int localPort = 7002;
 
// Recipient IP
IPAddress RecipientIP(192, 168, 0, 27);
 
// Recipient UDP Port
unsigned int RecipientPort = 7007;
 
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
 
// An EthernetUDP instance to send and receive packets over UDP
EthernetUDP Udp;
 
void setup()
{
  // for debug only
  Serial.begin(9600);
 
  // start Ethernet
  Ethernet.begin(mac,ip);
  server.begin();
 
  // Start UDP
  Udp.begin(localPort);
 
  // Klingeltaster
  digitalWrite(9, HIGH);
  pinMode(Klingeltaster, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  //pinMode(8, OUTPUT); -> weil oben als Klingeltaster INPUT
  pinMode(9, OUTPUT);
 
  // send UDP Ready 
  sendUDP("UDP Ready");
}
 
void loop()
{
 
// warten auf Anfragen von Clients
  checkForClient();
 
// Klingeltaster (Send)
  if (digitalRead(Klingeltaster) == LOW &amp;&amp; KlingelState != 0)
  {
    sendUDP("Klingel=0");
    KlingelState = 0;
  }
 
  if (digitalRead(Klingeltaster) == HIGH &amp;&amp; KlingelState != 1)
  {
    sendUDP("Klingel=1");
    KlingelState = 1;
  }
 
delay(20);
}
 
// Function to send UDP packets
void sendUDP(String text)
{
    Udp.beginPacket(RecipientIP, RecipientPort);
    // Udp.write("Test");
    Udp.print(text);
    Udp.endPacket();
    delay(10);
}
 
void checkForClient(){
 
  EthernetClient client = server.available();
 
  if (client) {
 
 
    boolean currentLineIsBlank = true;
    boolean sentHeader = false;
 
    while (client.connected()) {
      if (client.available()) {
 
        if(!sentHeader){
          // HTML senden 
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
 
          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<TITLE>Arduino</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");
          client.println("Arduino IO control <br>");
          client.println("<br>");
          client.println("</a>");
 
          client.println("Out 03");
          client.println("<a href=\"/?c\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?d\" target=\"inlineframe\">OFF</a><br>");
 
          client.println("Out 04");
          client.println("<a href=\"/?e\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?f\" target=\"inlineframe\">OFF</a><br>");
 
          client.println("Out 05");
          client.println("<a href=\"/?g\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?h\" target=\"inlineframe\">OFF</a><br>");
 
          client.println("Out 06");
          client.println("<a href=\"/?i\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?j\" target=\"inlineframe\">OFF</a><br>");
 
          client.println("Out 07");
          client.println("<a href=\"/?k\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?l\" target=\"inlineframe\">OFF</a><br>");
 
          client.println("Out 08");
          client.println("<a href=\"/?m\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?n\" target=\"inlineframe\">OFF</a><br>");
 
          //client.println("Out 09");
          //client.println("<a href=\"/?o\" target=\"inlineframe\">ON</a>"); 
          //client.println("<a href=\"/?p\" target=\"inlineframe\">OFF</a><br>");
 
          client.println("<br>");
          client.println("</a>");
 
          client.println("<a href=\"/?cegikmo\" target=\"inlineframe\">all ON</a>"); 
          client.println("<a href=\"/?dfhjlnp\" target=\"inlineframe\">all OFF</a><br>");
 
          client.println("<IFRAME name=inlineframe style=\"display:none\" >");          
          client.println("</IFRAME>");
 
          client.println("</BODY>");
          client.println("</HTML>");
          sentHeader = true;
        }
//auslesen der Eingabe
 
        char c = client.read();
 
        if(reading &amp;&amp; c == ' ') reading = false;
        if(c == '?') reading = true; //found the ?, begin reading the info
 
        if(reading){
 
//schalten der Ausgänge
 
           switch (c) {
 
            case 'c':
            //add code here to trigger on 4
              digitalWrite(3, HIGH);
              break;
            case 'd':
            //add code here to trigger on 5
              digitalWrite(3, LOW);
              break;
            case 'e':
            //add code here to trigger on 6
              digitalWrite(4, HIGH);
              break;
            case 'f':
            //add code here to trigger on 7
              digitalWrite(4, LOW);
              break;
            case 'g':
            //add code here to trigger on 8
              digitalWrite(5, HIGH);
              break;
            case 'h':
            //add code here to trigger on 9
              digitalWrite(5, LOW);
              break;  
              case 'i':
            //add code here to trigger on 2
              digitalWrite(6, HIGH);
              break;
            case 'j':
            //add code here to trigger on 3
              digitalWrite(6, LOW);
              break;
            case 'k':
            //add code here to trigger on 4
              digitalWrite(7, HIGH);
              break;
            case 'l':
            //add code here to trigger on 5
              digitalWrite(7, LOW);
              break;
            case 'm':
            //add code here to trigger on 6
              digitalWrite(8, HIGH);
              break;
            case 'n':
            //add code here to trigger on 7
              digitalWrite(8, LOW);
              break;
            case 'o':
            //add code here to trigger on 8
              digitalWrite(9, LOW);
              break;
            case 'p':
            //add code here to trigger on 9
              digitalWrite(9, HIGH);
              break;
          }
 
        }
 
        if (c == '\n' &amp;&amp; currentLineIsBlank)  break;
 
        if (c == '\n') {
          currentLineIsBlank = true;
        }else if (c != '\r') {
          currentLineIsBlank = false;
        }
 
      }
    }
 
    delay(1); // pause für den Browser
    client.stop(); // Verbindung trennen
 
  } 
 
}
 

Da die Anforderung hier lediglich die Aufschaltung der vorhandenen TFE inkl. Endgeräte war und die vorhandenen Geräte wie der Loxone Miniserver, der Windows Rechner im Netzwerk und die Fritzbox benutzt werden konnten, musste lediglich in den Arduino und das dazugehörige Ethernetshield investiert werden - 20,- Euro.

Eine vorhandene Vivotek Kamera an der Hasutür wurde ebenfalls in dieses Projekt verbaut und eine vollwertige Türstation geschaffen. Ein ebenfalls vorhandenes iPad stellt die Loxone App zur Verfügung, über das unter Anderem die Türsteuerung läuft.

Link zu:

Agfeo TFE

3CX

Arduino

 

  • 1
  • 2