Aufforderung an den User, anzugeben, wo sich die zu markierenden Bilder befinden # echo Bitte gewünschten Ordner-Name -ohne Anführungsstriche- angeben, z.B. /home/pi/Pictures/Wasserzeichen: # read -p 'Ordner: ' ordner
# Da ich es im Batch laufen lassse, ist der read auskommentiert!
# in den Ordner wechseln ordner=/BILD/in
# wo sollen die überarbeiteten Bilder gespeichert werden zielOrdner="/BILD/out"
# wo befindet sich das vorbereitete Wasserzeichen wasserzeichen="/root/scripte/logo_neu_trans.png"
# Ordner erzeugen # Achtung, wenn der Ordner schon existiert, werden die Bilder darin überschrieben # mkdir $zielOrdner
cd $ordner
# alle Dateien mit Datei-Endungen verwenden, also ".jpg, .JPG, .jpeg, .png, .PNG" for fname in *.*; do
if [ ! -f "$fname" ] then continue fi
# wenn sehr dezentes Wasserzeichen gewünscht ist # "-compose Multiply" macht es nur ganz schwach sichtbar # composite -compose Multiply -gravity SouthEast -geometry +10+10 "/home/pi/Pictures/ampersand.png" "$fname" "./$zielOrdner/$fname"
ret=$? if [ "$ret" -eq 0 ] then rm ${PFADin}/${FILE} fi
done
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-02-14 10:46
Der Standardbenutzername und das Standardpasswort auf allen Raspberry Pi-Betriebssystemen
Der Standardbenutzername und das Standardpasswort auf allen Raspberry Pi-Betriebssystemen
Die meisten Raspberry Pi-Betriebssysteme haben Standardpasswörter für den Zugriff über SSH. In Raspberry OS ist der Standardbenutzername beispielsweise „pi“ und das Standardpasswort: „raspberry„. Andere Distributionen haben jedoch ihre Standardbenutzernamen und -passwörter, die nicht immer dem Raspberry Pi OS ähnlich sind.
Die folgende Tabelle enthält die Standard-Benutzernamen und -Passwörter der bekanntesten Raspberry-Pi-Distributionen:
Raspberry Pi-Distributionen
Nutzername
Passwort
Raspberry Pi OS
pi
raspberry
DietPi
root
dietpi
Lakka Linux
root
root
Kali Linux
root
toor
OpenELEC
root
openelec
Arch Linux ARM
root
root
Debian
pi
raspberry
LibreELEC
root
libreelec
OSMC
osmc
osmc
QtonPi
root
rootme
Ubuntu Server
ubuntu
ubuntu
ROKOS
rokos
rokos
Retropie
pi
raspberry
Wie ändert man das Raspberry Pi-Standardpasswort?
Die Raspberry Pi-Standardanmeldung ist integriert, um die Einrichtung für neue Benutzer zu vereinfachen. Trotzdem ist es besser, die Standardanmeldung zu ändern, um die Sicherheit Ihres Systems zu gewährleisten. Mit dem jüngsten Update fordert Raspberry Pi OS die Benutzer auf, direkt nach der Installation ein neues Passwort einzurichten. Wenn Sie Ihr Passwort jedoch immer noch nicht geändert haben, gehen Sie wie folgt vor.
Gehen Sie die folgenden Anweisungen durch, um Ihr Passwort zu ändern:
Sie können sich mit dem Standardbenutzernamen „pi“ und dem Standardkennwort: „raspberry“ anmelden.
Verwenden Sie nach der Anmeldung den Befehl passwd um Ihr Passwort sofort zu ändern.
Öffnen Sie die Befehlszeile, geben Sie passwd, ein und drücken Sie die “Enter”.
Sie werden aufgefordert, Ihr aktuelles Passwort zur Überprüfung einzugeben.
Nach der Verifizierung können Sie Ihr neues Passwort eingeben und auf „Enter“ drücken.
Sobald Sie Ihr Passwort erfolgreich bestätigt haben, wird es sofort angewendet.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-03-02 15:45
Reduktion der Angriffsfläche in Microsoft Defender mit Gruppenrichtlinien oder PowerShell aktivieren
Microsoft Defender bietet neben dem Virenscanner noch weitere Sicherheitsfunktionen. Zu diesen gehört die Reduktion der Angriffsfläche, mit der sich Anwendungen wie Office, Browser oder Adobe Reader härten lassen. Das Feature ist standardmäßig nicht aktiv und lässt sich per Gruppenrichtlinie oder PowerShell konfigurieren.
Zu den gängigen Einfallstoren für Angreifer gehören Anhänge von E-Mails, die schädlichen Code in Form von Scripts, ausführbaren Dateien oder in Office eingebettete Makros enthalten. Zu den weiteren Angriffspunkten zählen ganz besonders auch Web-Browser sowie weit verbreitete Programme wie Adobe Reader, die regelmäßig durch Schwachstellen auffallen.
Ergänzung zu App-spezifischen Maßnahmen
Neben den Maßnahmen, die Admins durch die Konfiguration der Anwendungen selbst ergreifen können, bietet Defender eine zusätzliche Schutzschicht. So lassen sich etwa Makros in Office mit Hilfe von Gruppenrichtlinien weitgehend zähmen, aber die Regeln zur Reduktion der Angriffsfläche (Attack Surface Reduction, ASR) dichten diese noch weiter ab.
So kann man damit Office am Erzeugen von ausführbarem Code, am Einfügen von Code in untergeordnete Prozesse oder am Erstellen von Kindprozessen hindern. Letzteres lässt sich auch für den Adobe Reader durchsetzen. Defender kann zudem ausführbare Inhalte blockieren, wenn diese über einen Mail-Client auf den Rechner gelangen.
Interessant ist zudem die Einstellung für den erweiterten Schutz vor Ransomware. Sie bezieht Informationen zu einer verdächtigen Datei aus der Microsoft Cloud und prüft etwa anhand der Häufigkeit ihres Auftretens oder erwiesener Harmlosigkeit, ob von ihr eine Gefahr ausgeht. Die Funktion setzt voraus, dass der Cloud-basierte Schutz aktiv ist.
Limitierte Management-Optionen
Die Reduktion der Angriffsfläche ist nicht nur in kostenpflichtigen Produkten wie Defender for Endpoint enthalten, sondern gehört zum Lieferumfang von Windows 10 / 11 sowie von Windows Server, wobei auf älteren Versionen einige Regeln nicht unterstützt werden.
Der große Nachteil der kostenlosen Version besteht in den reduzierten Möglichkeiten für das Management und Reporting. Eine GUI in der App Einstellung existiert dafür überhaupt nicht, die Administration der Regeln erfolgt über Gruppenrichtlinien oder PowerShell.
Sie beschränkt sich auf das Aktivieren bzw. Deaktivieren einzelner Regeln sowie auf das optionale Definieren von Verzeichnissen und Dateien, die davon ausgenommen sein sollen.
Evaluierung über den Audit-Modus
Per Voreinstellung ist ASR nicht aktiviert. Admins sollte aber in jedem Fall einen Blick auf die Regeln werfen und prüfen, welche sich für ihre Umgebung eignen.
Man muss diese nicht gleich scharf schalten, sondern kann sie erst im Audit-Modus betreiben und beobachten, welche Auswirkungen sie haben würden.
ASR über PowerShell verwalten
PowerShell kommt die Aufgabe zu, den aktuellen Status der ASR-Regeln abzurufen:
Dieser Aufruf zeigt an, welche Regeln konfiguriert wurden und welchen Status sie haben. Allerdings erhält man dabei nicht ihren Namen, sondern nur eine GUID. Die Tabelle am Ende des Textes (Quelle) löst diese auf.
Für den Status ("Actions") sind die Werte 0, 1, 2 und 6 vorgesehen. Dabei steht 0 für deaktiviert, 1 für aktiviert, 2 für den Audit-Modus (bloße Protokollierung, sobald eine Regeln ausgelöst würde) sowie 6 für Warnung, bei der User einen Hinweis auf die mögliche Gefahr erhalten, aber die Blockierung umgehen können.
Wenn man Regeln konfigurieren möchte, dann sieht das Cmdlet Set-MpPreference für den Parameter
AttackSurfaceReductionRules_Actions statt dieser numerischen Werte die Konstanten Disabled, Enabled und AuditMode vor. Dagegen gibt man für AttackSurfaceReductionRules_Ids wieder die GUID an.
Um beispielsweise Adobe Reader am Starten von Kindprozessen zu hindern, geht man mit PowerShell so vor:
Für das zentrale Management von ASR stehen in den Gruppenrichtlinien zwei Einstellungen zur Verfügung, eine für die Aktivierung bzw. Deaktivierung von Regeln und die andere für die Definition der Ausschlüsse.
Beide befinden sich unter Computerkonfiguration => Richtlinien => Administrative Vorlagen => Windows-Komponenten => Microsoft Defender Antivirus => Microsoft Defender Exploit Guard => Verringerung der Angriffsfläche.
Anstatt einfach für jede Regel eine eigene Option zu aktivieren, muss man für alle eine gemeinsame Einstellung verwenden ("Regeln zur Verringerung der Angriffsfläche konfigurieren"). Dort trägt man die oben erwähnte GUID sowie den Wert für die Action in eine Tabelle ein.
Um Ausschlüsse für Verzeichnisse und Dateien einzurichten, konfiguriert man die andere Einstellung in diesem Ordner. Auch hier trägt man alle Wertnamen in eine Tabelle ein, für den Wert in der rechten Spalte wählt man hier grundsätzlich 0.
ASR im Eventlog beobachten,
Nachdem die Bordmittel für ASR kein Reporting vorsehen, muss man sich auf die Auswertung der Logs beschränken. Die Aufzeichnung erfolgt unter Anwendungs- und Dienstprotokolle => Microsoft => Windows => Windows Defender => Operational.
Von Interesse sind hier die folgenden IDs:
Ereignis-ID Beschreibung
5007 Einstellungen wurden geändert
1121 Auslösen einer Regel im Blockierungsmodus
1122 Auslösen Einer Regel Im Überwachungsmodus (Audit-Modus)
Um diese Events zu beobachten, kann man in der Ereignisanzeige eine benutzerdefinierte Ansicht erstellen.
Alternativ kann man die Log-Einträge auch mit PowerShell abfragen:
Die Reduktion der Angriffsfläche kann einen wichtigen Beitrag leisten, um die Sicherheit der am meisten attackierten Anwendungen zu erhöhen. Das Feature gehört zum Lieferumfang aller aktuellen Windows-Versionen, ist aber per Voreinstellung nicht aktiviert.
Möchte man keinen kostenpflichtigen Service wie Defender for Endpoint oder ein Management-Tool wie ConfigMgr bzw. von einem Drittanbieter einsetzen, dann ist man auf die Verwaltung mittels Gruppenrichtlinien und PowerShell beschränkt. Dabei fehlen vor allem vernünftige Fähigkeiten für das Reporting.
Wenn man ASR im Unternehmen einführt, dann sollte man mit dem Überwachungsmodus starten und anhand des Eventlogs studieren, welche Auswirkungen die Regeln in der Praxis hätten. Ist keine größere Beeinträchtigung der User zu erwarten, dann kann man sie scharf schalten.
Namen der Regeln und ihre GUIDs
Regelname Regel-GUID
Missbrauch von gefährdeten signierten Treibern blockieren 56a863a9-875e-4185-98a7-b882c64b5ce5
Adobe Reader am Erstellen von untergeordneten Prozessen hindern 7674ba52-37eb-4a4f-a9a1-f0f9a1619a2c
Alle Office-Anwendungen am Erstellen von untergeordneten Prozessen hindern d4f940ab-401b-4efc-aadc-ad5f3c50688a
Diebstahl von Anmeldeinformationen aus dem Subsystem für die lokale Sicherheitsautorität (lsass.exe) blockieren 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2
Ausführbare Inhalte aus E-Mail-Client und Web-E-Mail blockieren be9ba2d9-53ea-4cdc-84e5-9b1eeee46550
Ausführbare Dateien an der Ausführung hindern, außer sie erfüllen ein Verbreitungs-, Alters- oder vertrauenswürdige Listen-Kriterium 01443614-cd74-433a-b99e-2ecdc07bfc25
JavaScript und VBScript am Starten heruntergeladener ausführbarer Inhalte hindern d3e037e1-3eb8-44c8-a917-57927947596d
Office-Anwendungen am Erstellen ausführbarer Inhalte hindern 3b576869-a4ec-4529-8536-b80a7769e899
Office-Anwendungen am Einfügen von Code in untergeordnete Prozesse hindern 75668c1f-73b5-4cf0-bb93-3ecf5cb7cc84
Office-Kommunikationsanwendung am Erstellen von untergeordneten Prozessen hindern 26190899-1602-49e8-8b27-eb1d0a1ce869
Persistenz durch WMI-Ereignisabonnement blockieren
(Datei- und Ordnerausschlüsse werden nicht unterstützt). e6db77e5-3df2-4cf1-b95a-636979351e5b
Erstellung von Prozessen durch PSExec- und WMI-Befehle blockieren d1e49aac-8f56-4280-b9ba-993a6d77406c
Nicht vertrauenswürdige und nicht signierte Prozess, die von USB ausgeführt werden, blockieren b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4
Win32-API-Aufrufe von Office-Makros blockieren 92e97fa1-2edf-4476-bdd6-9dd0b4dddc7b
Erweiterten Schutz vor Ransomware verwenden c1db55ab-c21a-4637-bb3f-a12568109d35
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-08-19 11:08
3d Drucker anycubic
ANYCUBIC Vyper Autoleveling
Nach ca. 8 Monaten bekam der Drucker das Problem, das er das Autoleveling nicht mehr durchführte.
Nach einigen Tests war es dann klar, Problem mitdem Senor. Dieser befindet sich am Druckkopf und daran ist das HotEnd montiert. Man kann den Senor prüfen in dem man, den Drucker einschaltet und leicht gegen das hotend drückt, es wird dann eine LED auf dem Sensor aktiviert. Falls nicht, ist der Fehler vorhanden.
Da es sich noch um Garantie handelt, den Support von AnyCubic kontaktiert...
Wichtig: Biler oder Video vom fehler erstellen und beifügen.
Der Support schickt dann das Ersatzteil.
Der Austausch ist recht simple und kann problemlos auch von technisch unversierten durchgeführt werden.
Druckkopf lösen (vier Schrauben an der Rückseite, Achtung ! eine ist länger als die anderen!)
Dann Abdeckung entfernen und das Hotend ebenfalls. Den Senor tauschen, unddas ganze wieder zusammenbauen.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-02-14 10:47
Raspberry PI OS
Raspberry Sensor ab Raspbian 11
Mit dem Upgrade auf Raspbian 11 war nun einwechsel zu python3 nötig
Zwar gibt es noch dir Python27 aber leider lassen sich keine neuen libraries installieren.
Adafruit reagierte und baute zwei neue libs.
Adafruit blinks und io.
Fortsetzung folgt.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-03-07 17:52
Den Raspberry Pi absichern
Den User pi bei Systembefehlen zum Passwort zwingen
Das Bequeme an dem Benutzer pi ist auch gleichzeitig sein verderben, wenn Fremde sich Zugriff verschafft haben. Er darf alle Systembefehle mit sudo ausführen und muss noch nicht einmal dafür ein Passwort eingeben. Da nützt das stärkste Passwort nichts, wenn dieses nicht zum Einsatz kommt. Das solltest du auch ändern, auch wenn die Passworteingabe dich wahrscheinlich nervt.
Öffne dazu im Terminal mit dem Befehl sudo vi /etc/sudoers.d/010_pi-nopasswd die sudoers-Einstellungen für pi.
Nun änderst du pi ALL=(ALL) NOPASSWD: ALL zu pi ALL=(ALL) PASSWD: ALL und speicherst die Datei entsprechend ab, STRG + X und danach Y oder J. Damit hat pi immer noch mittels sudo Berechtigung Systemkommandos auszuführen, aber es wird nun eine Passworteingabe erzwungen. An dieser Stelle ist es wichtig zu erwähnen, dass du genau auf die korrekte Schreibweise achten musst, da sonst die modifizierte Datei unbrauchbar ist.
Die tägliche Arbeit von einem Systemadministrator ist und bleibt zu prüfen, ob es sicherheitsrelevante Updates für ein Betriebssystem oder Software gibt und ob diese auch installiert wurden. Gerade Sicherheitslücken, wie aktuell Log4j zeigen, wie wichtige diese Aufgabe ist. Updates für die diversen Pakete auf deinem Raspberry Pi wird es immer wieder geben, jedoch sind die sicherheitsrelevanten Patches die wohl wichtigsten. Wie du sicherlich bereits weißt, kannst du mit dem Befehl aus Code 7 deinen Raspberry Pi auf dem aktuellen Stand halte. Aber gerade diese Updates vergisst man sehr schnell und so werden sicherheitsrelevante Updates nicht auf deinen Raspberry Pi installiert.
sudo apt update && sudo apt dist-upgrade -y
An dieser Stelle hilft das Tool unattended-upgrades, welches bei Raspberry Pi OS (Stand 12/2021) nicht automatisch mitinstalliert ist. Mit Code 8 im Terminal kann dieses schnell nachinstalliert werden.
sudo apt install unattended-upgrades
Damit beginnt das Tool aber noch nicht seinen Dienst, sondern es muss noch aktiviert werden. Tippe dazu ins Terminal den Befehl aus Code 9 ein.
Anschließend wird dir im Terminal die Frage gestellt, ob du stabile sicherheitsrelevante Updates automatisch installieren möchtest, siehe Abbildung 6, was du mit Ja bestätigst.
SSH-Server ein bisschen sicherer machen
Der Raspberry Pi ist ein super System und seit dem Raspberry Pi 4 ist dieser auch ein ausgezeichneter Ersatz als Desktop-PC. Doch wer z.B. einen kleinen Cloudserver mit dem Pi betreibt, der wird von außen eher per SSH auf das System zugreifen wollen, um diesen zu verwalten. Ohne z.B. einen VPN-Tunnel ist es eher untypisch sich via Remotedesktop oder VNC auf sein System zu schalten. Gerade bei den SSH-Grundeinstellungen kannst du an zwei Stellen optimieren. Zum einen kannst du den SSH-Port ändern und auf jeden Fall solltest du den Root-Zugriff unterbinden. Beide Einstellungen müssen in der sshd_config vorgenommen werden, welche du mit Code 7 im Terminal öffnest.
sudo vi /etc/ssh/sshd_config
Um den SSH-Port zu ändern, suchst du nach der Zeile #Port 22 und änderst diesen z.B. zu Port 777. Speicherst du dies ab und startest den Dienst oder den Raspberry Pi neu, ist der SSH-Zugang nur noch über den Port 777 statt über den Port 22 möglich. Gerade diese Änderung ist insofern hilfreich, da Leute, die gerade erst mit dem hacken beginnen, hier schon bei Angriffen via SSH scheitern. Geübte Hacker werden jedoch schnell den Port finden, da es diverse Portscanner gibt, die Ports und ihre Funktion erfragen. Wenn du den Port geändert hast, musst du bei PuTTY oder deinem SSH-Einwahltool darauf achten, diesen mit anzugeben
Eine wesentlich klügere Anpassung ist der Parameter #PermitRootLogin mit dem Standardwert prohibit-passwort anzupassen. Vom Prinzip sollte und darf root keinen Zugriff via SSH erhalten, da es das schlimmste ist, was dir bzw. uns passieren kann. Der Benutzer root darf alles auf dem System und Hacker können so den größtmöglichen Schaden auf dem Raspberry Pi und deinem Netzwerk anrichten. Daher sollte dies Zeile wie folgt aussehen.
PermitRootLogin no
Mittels Code 11 im Terminal können die gespeicherten Änderungen direkt angewendet werden. Solltet ihr die Änderungen über einen SSH-Zugang gemacht haben, so bleibt eure SSH-Verbindung in den meisten Fällen bestehen.
sudo service ssh restart
SSH nur mit Private key file
SSH ist in Kombination mit einem starken Passwort schon eine sichere Sache, doch man weiß nie, ob das Passwort wirklich sicher ist. Besser wäre es doch, wenn es eine absolut sichere Methode geben würde. Diese sichere Methode heißt Private key file authentification die mit jedem gängigen Betriebssystem möglich ist. Der Grundgedanke ist der, dass du ein Schlüsselpaar aus public key und private key erstellst. Ersteres ist bildlich gesprochen das Schloss, welches mittels des eigenen Schlüssels, dem private key, dir den Zugang gewährt.
Zunächst erstellst du dir ein Schlüsselpaar. Eine ausführliche Anleitung dazu findest du hier. Die Option mit dem Key passphrase ist nur dann wichtig, wenn du die größtmögliche Sicherheit willst. In unserem Beispiel lässt du Key passphrase und Confirm passphrase einfach leer. Damit musst du später beim Einwählen mit dem Private key nicht noch den Key passphrase, nicht zu verwechseln mit deinem Passwort,eingeben. Speichert euch sowohl den public key und den private key.
Ohne PuTTYGen oder das Tool zu Generierung des Schlüsselpaares zu Schließen erstellt ihr auf dem Raspberry Pi nun eine neue Datei im Unterordner .ssh eures Benutzers pi, mit dem Befehl aus Code 12.
mkdir /home/pi/.ssh
vi /home/pi/.ssh/authorized_keys
Ggf. ist dieser Ordner und die Datei schon vorhanden, sofern du mittels SSH auf dem Raspberry Pi gearbeitet hast.
Nun kopierst du den Public key von PuTTYGen und fügst diesen in die eben geöffnete authorized_keys – Datei ein, siehe Abbildung 8, und speichert diese ab.
Als nächstes, damit die Authentifikation auch funktioniert, müssen die Berechtigungen noch angepasst werden. Dies geschieht mit den beiden Befehlen aus Code 13.
Im letzten Schritt stellen wir den SSH-Server so ein, dass nur noch Zugriff mit dem private key möglich ist. Öffne dazu noch einmal die Datei sshd_config im Terminal mit dem Befehl aus Code 14.
sudo nano /etc/ssh/sshd_config
Suche die Zeile #PasswordAuthentication yes und ändere diese zu PasswordAuthentication no
Speichere die Datei wieder ab und starte den Dienst mit
sudo service ssh restart
neu.
Den Raspberry Pi mit der Firewall UFW ausrüsten
Jedes Gerät, welches über das Internet erreichbar ist, sollte durch eine starke Firewall abgesichert werden. Virenschutz ist genauso wichtig, aber mit einer gut eingestellten Firewall können einige Angriff im Keim erstickt werden und viele Viren gibt es für Linux (noch) nicht. Linux hat hierfür die Firewall UFW, was die Abkürzung für Uncomplicated Firewall ist. Unkompliziert ist die Firewall wirklich, daher solltest du diese auf deinem Raspberry Pi mit dem Befehl aus Code 16 installieren.
sudo apt install ufw
Die Firewall UFW installieren
Wenn der Paketmanager UFW installiert wurde, ist der Dienst noch nicht aktiv! Das ist auch gut so, da sonst ggf. unsere SSH-, Remotedesktop- oder VNC-Verbindung gekappt werden könnte. Damit UFW mit der Arbeit beginnen kann, müssen wir erst einmal Regeln erstellen, welche Ports überhaupt erlaubt sind. Für gängige Anwendungen reichen die in Tabelle 1 freigegebenen Ports, wobei die Liste hier nicht vollständig ist und je nach verwendetem Dienst stark abweicht.
Pos
Port
Beschreibung
1
80
Standardport für Webadresse mittels http
2
443
Standardport für Webadresse mittels https
3
22
Der Standardport für SSH-Zugang, ggf. musst du diesen durch deinen gewählten in der sshd_config ersetzen
4
5900
Standardport für VNC-Verbindungen
5
3389
Standardport für Remotedesktopverbindungen
Tabelle 1: Ports für häufig genutzte Dienste
Wenn du weitere Dienste auf dem Raspberry Pi benutzt, musst du die entsprechenden Ports für den Dienst ermitteln und freigeben.
Damit nun z.B. ein Webserver auch übers Internet erreichbar ist, davon ausgehen das am Router die Ports auch freigegeben und weitergeleitet werden, reichen die Befehle aus Code 17.
sudo ufw allow 80
sudo ufw allow 433
Damit sind die Ports 80 und 443 schon einmal freigeschaltet und über das Internet und lokal im Netzwerk erreichbar. Willst du hingegen diese Ports nicht zulassen, dann geht dies mit den Befehlen aus Code 18.
sudo ufw deny 80
sudo ufw deny 433
Willst du auf Nummer sicher gehen, kannst du per default alle Ports mittels des Befehles aus Code 18 sperren, musst dann aber im Gegenzug alle benötigten Ports einzelnd wieder freischalten.
sudo ufw default deny
Hast du alles eingestellt, muss nun noch UFW gestartet und bei jedem Neustart aktiviert werden. Dies geschieht mit dem Befehl aus
sudo ufw enable
Code 20: UFW aktivieren
Sofern du alles richtig eingestellt hast, sollte die Firewall nun laufen und deine Ports sollten entsprechend freigeschaltet oder blockiert sein. Solltest du Einstellungen per SSH vorgenommen haben und nach der Aktivierung keiner Verbindung mehr bekommen, ist wahrscheinlich der Port nicht freigegeben, den wir weiter oben geändert haben. Die Firewall kannst du über den Befehl aus Code 20 wieder deaktivieren und dann musst noch einmal deine Ports überprüfen.
sudo ufw disable
UFW deaktivieren
Da UFW sehr mächtig ist und hier in der Kürze nicht alles erklärt werden kann, empfehle ich dir die Wiki-Seite von ubuntuusers.de, hier kannst du alles wichtige nachlesen.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-03-21 10:31
Linux Network Interface bonding
1. sudo apt update && sudo apt upgrade
2. sudo apt install ifenslave
3. sudo su - modprobe bonding echo 'bonding' >> /etc/modules
Die Datei interfaces, zu finden unter "/etc/network/interfaces", wird dazu verwendet.
4. sudo vim /etc/network/interfaces
This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # Frontend bond interface auto bond0 iface bond0 inet static address 192.168.56.9/24 gateway 192.168.56.1 bond-slaves enp0s3 enp0s8 bond-mode 1 bond-primary enp0s3 bond-miimon 100 bond-downdelay 300 bond-updelay 700
$ more /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v5.10.0-11-amd64 Bonding Mode: fault-tolerance (active-backup) Primary Slave: enp0s3 (primary_reselect always) Currently Active Slave: enp0s3 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 700 Down Delay (ms): 300 Peer Notification Delay (ms): 0 Slave Interface: enp0s3 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 08:00:27:e1:5f:56 Slave queue ID: 0 Slave Interface: enp0s8 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 08:00:27:00:96:03 Slave queue ID: 0
$ sudo dmesg -T | tail -10 [Tue Mar 1 02:18:15 2022] bond0: active interface up! [Tue Mar 1 02:18:15 2022] IPv6: ADDRCONF(NETDEV_CHANGE): bond0: link becomes ready [Tue Mar 1 02:18:15 2022] e1000: enp0s8 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [Tue Mar 1 02:18:15 2022] bond0: (slave enp0s8): link status up, enabling it in 700 ms [Tue Mar 1 02:18:15 2022] bond0: (slave enp0s8): invalid new link 3 on slave [Tue Mar 1 02:18:16 2022] bond0: (slave enp0s8): link status definitely up, 1000 Mbps full duplex [Tue Mar 1 02:20:31 2022] bond0: (slave enp0s3): Releasing backup interface [Tue Mar 1 02:20:31 2022] bond0: (slave enp0s8): making interface the new active one [Tue Mar 1 02:20:35 2022] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [Tue Mar 1 02:20:35 2022] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready
Method 2- Configure Network Bonding using NMCLI
Trifft bei Debian 11 zu...
$ sudo nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=balance-rr" Connection 'bond0' (9d37ef5d-4905-48ce-88d6-fbce925cc940) successfully added.
$ nmcli device status DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected Wired connection 1 enp0s8 ethernet connected Wired connection 2 lo loopback unmanaged --
$ sudo nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp0s3 master bond0 Connection 'bond0-port1' (b2b69f0b-780e-4579-bf38-e80933d3d98d) successfully added. ####### $ sudo nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp0s8 master bond0 Warning: There is another connection with the name 'bond0-port1'. Reference the connection by its uuid '1fb56698-ff12-4a9b-826d-dfea323477fb' Connection 'bond0-port1' (1fb56698-ff12-4a9b-826d-dfea323477fb) successfully added.
sudo nmcli connection up bond0 Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
$ nmcli device status DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected Wired connection 1 enp0s8 ethernet connected Wired connection 2 bond0 bond connected bond0 lo loopback unmanaged --
$ sudo dmesg -T | tail -10 [Tue Mar 1 02:40:38 2022] e1000: enp0s8 NIC Link is Down [Tue Mar 1 02:40:38 2022] usb 2-1: new full-speed USB device number 3 using ohci-pci [Tue Mar 1 02:40:39 2022] usb 2-1: New USB device found, idVendor=80ee, idProduct=0021, bcdDevice= 1.00 [Tue Mar 1 02:40:39 2022] usb 2-1: New USB device strings: Mfr=1, Product=3, SerialNumber=0 [Tue Mar 1 02:40:39 2022] usb 2-1: Product: USB Tablet [Tue Mar 1 02:40:39 2022] usb 2-1: Manufacturer: VirtualBox [Tue Mar 1 02:40:39 2022] input: VirtualBox USB Tablet as /devices/pci0000:00/0000:00:06.0/usb2/2-1/2-1:1.0/0003:80EE:0021.0002/input/input9 [Tue Mar 1 02:40:39 2022] hid-generic 0003:80EE:0021.0002: input,hidraw0: USB HID v1.10 Mouse [VirtualBox USB Tablet] on usb-0000:00:06.0-1/input0 [Tue Mar 1 02:40:42 2022] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [Tue Mar 1 02:40:42 2022] e1000: enp0s8 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-09-01 15:49
Nmap: Firewalls umgehen mit Ping- und TCP-ACK-Scans
Nmap: Firewalls umgehen mit Ping- und TCP-ACK-Scans
Nmap zeigt schon mit einfachen Scans, welche Ports von außen erreichbar sind. Neben Ports, die sich eindeutig als offen oder geschlossen identifizieren lassen, gibt es solche, die als gefiltert gelten. Dies ist der Fall, wenn sich Systeme hinter einer Firewall befinden. Hier liefern spezialisierte Scans zusätzliche Informationen.
Um die Methoden für TCP-Port-Scans besser zu verstehen, sollten Sie elementare Konzepte des TCP-Protokolls wie den TCP-Verbindungsaufbau kennen. Im Wesentlichen gibt es dabei zwei reguläre Szenarien.
Offene Ports
Bei einem Szenario mit offenem Port lauscht eine Anwendung auf eingehende Verbindungen vom Client. Der Port befindet sich somit im Status TCP LISTEN.
Beim Empfang einer eingehenden Verbindungsanfrage in Form eines Synchronisationspakets (SYN) antwortet das Zielsystem (Server) mit einem SYN/ACK-Paket (Acknowledge), um die Synchronisation zu bestätigen.
Sobald der Client, von dem die Anfrage ausging, mit einem ACK-Paket antwortet, ist die Verbindung auf beiden Seiten hergestellt. Das ist der klassische TCP-3-Way-Handshake.
Verlauf eines TCP-Handshakes
Verlauf eines TCP-Handshakes
Die Sequenznummern spielen für die weiteren Erläuterungen erstmal keine Rolle. Details dazu finden Sie in meinem Artikel zu Wireshark.
Geschlossene Ports
Bei einem zweiten möglichen Szenario lauscht gerade keine Anwendung auf eingehende Verbindungen auf einem bestimmten Port. Daher gilt er als geschlossen, der Status ist somit TCP CLOSED.
Kommt es zu einer eingehenden Verbindungsanfrage, dann weist der Server diese mit einem RST- oder Reset-Paket zurück.
Gefilterte Ports
Im Zusammenhang mit einer Firewall ergibt sich ein drittes mögliches Szenario. Die an den Server gesendeten Pakete werden hierbei einfach verworfen - entweder von einer dedizierten Firewall oder dem Ziel-Server selbst bzw. von dessen Paketfilter. Als Folge davon antwortet der Server überhaupt nie.
Weil aber das Zielsystem nicht antwortet, wenn nmap ein Testpaket an den Port sendet, gilt der Port als "gefiltert". Ein Paketfilter ist aber in einigen Fällen so konfiguriert, dass die verworfenen Pakete durch ICMP-Fehlermeldungen (Internet Control Message Protocol) signalisiert werden.
Bei Ports mit dem Status FILTERED müssen Sie sich in der Rolle des "Angreifers" folgende Frage stellen, wenn auf ein Testpaket keine Antwort erfolgt: Ist der Port gefiltert oder wurde das Testpaket etwa wegen eines überlasteten Netzwerks verworfen?
Selbst wenn Letzteres auszuschließen ist, sollten Sie auf jeden Fall länger auf eine Antwort warten als bei OPEN oder CLOSED und können dadurch zum Ergebnis kommen, dass der Port FILTERED ist.
Spezialisierte Port-Scans
Mit Hilfe des gewöhnlichen Port-Scans ermittelt nmap im Wesentlichen offene Ports und weiß in der Regel auch, zu welchen Anwendungen diese gehören.
Spezialisierte Port-Scans dagegen helfen in Situationen weiter, wenn zum Beispiel eine Firewall umgangen werden soll. Hier provozieren Sie absichtlich Reaktionen, die tiefergehende Erkenntnisse über den Port-Status liefern, beispielsweise durch einen Ping-Scan.
Dieser provoziert eine Antwort des Zielsystems mit Hilfe eines TCP-ACK-Pakets. Er macht sich dabei zunutze, dass einfach gestickte zustandslose Firewalls wie Linux-Iptables zwar meist eingehende SYN-Pakete filtern, aber keine (streng genommen unzulässigen) ACK-Pakete.
Genau das bewirkt eine Rückmeldung des Ziels etwa in Form eines RST-Pakets. Der Status des betroffenen Ports ist dann eben nicht mehr FILTERED (also durch Firewall blockiert), sondern UNFILTERED.
Letztes heißt dann für den Angreifer, dass der Port doch erreichbar ist, aber nicht weiter bestimmt werden kann, ob er offen oder geschlossen ist. Aktivieren können Sie den TCP-ACK-San mit dem Parameter -sA.
Mit dem Schalter -PN können Sie zudem jedes System scannen, unabhängig davon, ob dieses Pings blockiert oder nicht, weil damit das Host-Discovery übersprungen wird und Scans auch gegen Ziele erfolgen, ohne dass ihre Erreichbarkeit verifiziert wurde.
Scan-Timings
Möchten Sie Ihre Firewall testen, bietet sich der TCP-ACK-Scan also durchaus an. Allerdings sollten Sie das System dann auf jeden Fall mit unterschiedlichen Timings scannen. Hierzu stellt Nmap den Schalter -Tx zur Verfügung. Für x können Sie eine Ziffer von 0 bis 5 verwenden.
Die Ziffern stehen für:
0 paranoid
1 sneaky
2 polite
3 normal
4 aggresive
5 insane
So könnten Sie zum Beispiel mit
nmap -T4 -F
einen aggressiven Scan starten. Sie müssen nicht unbedingt alle sechs Timings ausprobieren, aber zwei oder drei unterschiedliche sind ratsam, um eventuell verschiedene Reaktionen der Firewall zu provozieren.
Scannen mit unterschiedlichen Timings
Scannen mit unterschiedlichen Timings
Zenmap zeigt Ihnen im Reiter Ports / Rechner schließlich die Detailinformationen zu den ermittelten Ports.
Detailinformationen zu den untersuchten Ports in Zenmap
Detailinformationen zu den untersuchten Ports in Zenmap
Zusammenfassung
Während sich offene und geschlossene Port über einen TCP-Handshake recht einfach erkennen lassen, fällt es schwieriger, eine ausbleibende Antwort verlässlich einzuordnen.
In dieser Situation helfen spezialisierte Port-Scans weiter, die absichtlich Reaktionen provozieren, die mit denen sich tiefergehende Erkenntnisse über den Port-Status gewinnen lassen.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-10-25 10:24
Raspberry PI OS Upgrade
Raspberry Pi OS Bullseye Upgrade
Raspberry Pi OS "Bullseye" (basierend auf Debian 11 Bullseye) wurde vor kurzem veröffentlicht, und dieser Artikel beschreibt die Anweisungen für ein Upgrade vom älteren Raspberry Pi OS Buster auf diese neue Bullseye-Version. Dies sollte mit jedem Raspberry Pi-Modell funktionieren.
Raspberry Pi OS Bullseye kommt mit wichtigen Änderungen, darunter:
Es verwendet nun GTK3 anstelle von GTK2. Der Fenstermanager Openbox wurde auf Systemen mit mehr als 2 GB RAM durch Mutter ersetzt (wenn Ihr RPi 2 GB RAM oder weniger hat, wird er weiterhin Openbox verwenden). Ein neuer Benachrichtigungsmanager ist in der Taskleiste verfügbar; Benachrichtigungen werden nun in chronologischer Reihenfolge in der oberen rechten Ecke des Bildschirms angezeigt und nach fünfzehn Sekunden ausgeblendet (sie können unter Panel Preferences -> Appearance konfiguriert werden). Neues grafisches Tool zur Installation von System- und Anwendungsupdates. Der KMS-Treiber (Kernel Modesetting), der bisher eine experimentelle Option war, ist jetzt der Standard-Videotreiber. Neuer Kameratreiber. Viele andere Änderungen, einschließlich des Chromium-Browsers, der auf Version 92 aktualisiert wurde (optimiert für die Unterstützung der hardwarebeschleunigten Videowiedergabe auf dem Raspberry Pi). Es ist erwähnenswert, dass ein Upgrade des Raspberry Pi Betriebssystems von Buster (basierend auf Debian 10 Buster) auf Bullseye (basierend auf Debian 11 Bullseye) nicht offiziell unterstützt wird, da es wichtige Änderungen zwischen den größeren Debian-Versionen gibt, und der empfohlene Weg ist, eine neue SD-Karte mit der neuen Version zu erstellen. Das System könnte beim Upgrade kaputt gehen (einige Dinge könnten nicht funktionieren, es könnte nicht booten können usw.)! Außerdem dauert ein Upgrade auf Raspberry Pi OS Bullseye wesentlich länger als eine Neuinstallation. Ich für meinen Teil habe ein stark angepasstes Raspberry Pi OS und wollte meine Anpassungen beibehalten, also habe ich mich für ein Upgrade von Buster auf Bullseye entschieden. Für den Fall, dass Sie ebenfalls ein Upgrade durchführen möchten, finden Sie unten alle Schritte, die für ein Upgrade von Raspberry Pi OS 10 Buster auf 11 Bullseye erforderlich sind, sowie einige Probleme, auf die ich während/nach dem Upgrade gestoßen bin, und deren Lösungen. Obwohl dies mit jedem Raspberry Pi-Modell funktionieren sollte, habe ich es auf einem Raspberry Pi 4 getestet.
Das könnte Sie auch interessieren: Wie man YouTube-Videos von seinem Telefon auf den Raspberry Pi mit YouTube On TV (youtube.com/tv) überträgt. Wie man Raspberry Pi OS 10 Buster auf 11 Bullseye upgraden kann
Sichern Sie Ihre aktuelle Installation für den Fall, dass das Betriebssystem nach dem Upgrade nicht mehr funktioniert und Sie es in den Ausgangszustand zurückversetzen möchten. Der einfachste Weg, dies zu tun, ist die Verwendung des SD Card Copier Tools, das mit Raspberry Pi OS vorinstalliert ist (es ist im Menü in der Kategorie Zubehör verfügbar).
Suchen und ersetzen Sie alle Instanzen von buster durch bullseye in /etc/apt/sources.list und /etc/apt/sources.list.d/raspi.list
Sie können dies entweder manuell mit einem Texteditor tun oder die folgenden Befehle verwenden:
sudo sed -i \'s/buster/bullseye/g\' /etc/apt/sources.list
sudo sed -i \'s/buster/bullseye/g\' /etc/apt/sources.list.d/raspi.list
sudo sed -i \'s/buster/bullseye/g\' /etc/apt/sources.list.d/raspi.list
Update der software sources, install gcc-8 (the upgrade ohne dies nicht!), apt-get dist-upgrade Raspberry Pi OS from Buster to Bullseye.
Aber das hier beschriebene Vorgehen (Quelle am Ende des Artikels) ist technisch korrekt und sollte funktionieren.
Quellen anpassen und Upgrade anstoßen
Zunächst sollte ein Abbild der SD-Karte gezogen werden, was mit dem vorinstallierten Tool SD Card Copier problemlos funktioniert. Backups wichtiger Daten habt ihr ja hoffentlich sowieso. Bevor es losgeht, stellt ein Upgrade sicher, dass euer Pi mit der »Buster«-Version auf dem aktuellen Stand ist:
wird die Aktualisierung angestoßen. Nachdem das Upgrade durchgelaufen ist, sollte man sicherstellen, dass alle anstehenden Pakete auch installiert wurden. Dazu dient der Befehl
sudo apt -f install
Danach sollte im besten Fall APT anzeigen, dass alle Pakete installiert wurden:
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert
Ist das nicht der Fall, muss ein weiteres Upgrade folgen:
sudo apt full-upgrade
Dem kann ein
sudo apt autoremove
folgen, wobei es aber ratsam ist, zu kontrollieren, was für überflüssig erachtet und entfernt werden soll.
KMS aktivieren
Wenn mit einem neuen Abbild gestartet wird, wird automatisch Kernel Mode Setting (KMS) aktiviert, bei der Aktualisierung eines vorhandenen Abbilds wie hier beschrieben muss das händisch geschehen. Dazu wird die Datei /boot/config.txt editiert:
sudo nano /boot/config.txt
Hier werden zunächst alle Zeilen mit einem # davor auskommentiert, die dtoverlay=vc4-fkms-v3d enthalten. Dann wird unten in der Sektion [all] die Zeile dtoverlay=vc4-kms-v3d hinzugefügt. Beides kann auch wieder mithilfe des Stream Editors sed erledigt werden.
sudo sed -i 's/dtoverlay=vc4-fkms-v3d/#dtoverlay=vc4-fkms-v3d/g' /boot/config.txt
sudo sed -i 's/\[all\]/\[all\]\ndtoverlay=vc4-kms-v3d/' /boot/config.txt
WLAN-Schnittstelle aktivieren !!!
Damit ist das Upgrade so weit abgeschlossen, dass ein Neustart ohne visuelle Artefakte gelingen sollte. Falls nach dem Reboot eine vorher funktionierende WLAN-Schnittstelle nicht mehr erkannt wird, so liegt das vermutlich an der Verwendung von Conman zum Verwalten der Schnittstelle. Um hier zu einer funktionierenden Verbindung zu kommen, muss man in Menü unter Preferences -> Connman Settings -> Wireless einmal auf Connect klicken.
WLAN-Applet austauschen !!!
Das Netzwerk-Applet im Panel wird vermutlich nicht mehr korrekt funktionieren. Um es zu ersetzen, kann man es mit rechter Maustaste anklicken und Remove "Wireless & Wired Network From Panel auswählen. Um ein funktionierendes Applet zu bekommen wird das Panel rechts geklickt und unter Add / Remove Panel Items - > Add der Eintrag Manage Networks ausgewählt.
Diese Anleitung zum Upgrade auf Raspberry Pi OS »Bullseye« habe ich aus dem Blog Linux Uprising übernommen und leicht erweitert. Dabei habe ich die englischen Menübezeichnungen verwendet, die bei euch vielleicht eingedeutscht sind.
Verfasser: Max Mustermann Letzte Änderung: 2022-03-02 15:50
WLAN Treiber für realtek Chipsatz unter Raspbian installieren
!/bin/bash set -e # install-wifi - v5 - by MrEngman. display_help() { echo "#" echo "# usage:" echo "#" echo "# install-wifi [[-h | --help] |" echo "# [-c | --check [driver] [rpi-update | commit_id]] |" echo "# [-u | --update [driver] [rpi-update | commit_id]] |" echo "# [driver [rpi-update | commit_id]]]" echo "#" echo "# options:" echo "# none - install the driver for the wifi module connected to the Pi for the currently running kernel." echo "#" echo "# -h|--help - display usage." echo "#" echo "# -c|--check [driver] [option] - check if a driver is available, does not install it." echo "# driver - specific driver to check for, one of: 8188eu, 8192eu, 8812au, mt7601, mt7610 or mt7612" echo "# [option]:- blank - check driver for currently running kernel" echo "# rpi-update - check driver for latest version of rpi-update" echo "# commit-id - check driver for specific commit-id of rpi-update" echo "#" echo "# -u|--update [driver] [option] - update/install driver, can be used after running, but before rebooting, rpi-update" echo "# to update the driver to the one needed for the new kernel installed by rpi-update." echo "# driver - specific driver to update/install, one of: 8188eu, 8192eu, 8812au, mt7601, mt7610 or mt7612" echo "# [option]:- blank - update/install driver for currently running kernel" echo "# rpi-update - update/install driver for latest version of rpi-update" echo "# commit-id - update/install driver for specific commit-id of rpi-update" echo "#" echo "# driver [option] - install specific driver, enables installing the driver for a module not currently connected to" echo "# the Pi, or installing a driver for a different module if you want to change your wifi module." echo "# driver - specific driver to install, one of: 8188eu, 8192eu, 8812au, mt7601, mt7610 or mt7612" echo "# [option]:- blank - update/install driver for currently running kernel" echo "# rpi-update - update/install driver for latest version of rpi-update" echo "# commit-id - update/install driver for specific commit-id of rpi-update" echo "#" read -n1 -r -p "Press any key to continue..." echo echo "#" echo "# install-wifi examples:" echo "#" echo "# Install/update the wifi driver for the wifi module connected to the Pi for the currently running kernel" echo "#" echo "# install-wifi" echo "#" echo "# If you want to change your wifi module to one using a different driver that is compatible with this script" echo "# you can install the driver for the new wifi module, one of: 8188eu, 8192eu, 8812au, mt7601, mt7610 or mt7612" echo "# In this example it will install the 8192eu wifi module driver. After installing the driver shutdown the" echo "# Pi, remove the currently connected wifi module and connect the new 8192eu wifi module and restart your Pi" echo "# and it should start up with the new wifi adapter connected to your network." echo "#" echo "# install-wifi 8192eu - this will install the 8192eu module for the current kernel" echo "#" echo "# if you want to run rpi-update, first check a driver is available before you update your code. If the check" echo "# indicates a driver is available run rpi-update to update the firmware/kernel and then before rebooting" echo "# update the wifi driver." echo "#" echo "# install-wifi -c rpi-update - check for driver if rpi-update is run." echo "# sudo rpi-update - if a driver is available you can run rpi-update to update firmware." echo "# install-wifi -u rpi-update - then update the driver for the new kernel installed by rpi-update." echo "# sudo reboot - now reboot to update the kernel with the new wifi driver." echo "#" echo "# if you want to run, say rpi-update b2f6c103e5 to install 3.18.7+ #755, first check a driver is available" echo "# before you update your code. Then, if a driver is available update the code, and then before rebooting" echo "# update the wifi driver." echo "#" echo "# install-wifi -c b2f6c103e5 - check for driver if rpi-update b2f6c103e5 is run to install kernel 3.18.7+ #755." echo "# sudo rpi-update b2f6c103e5 - if a driver is available you can run rpi-update b2f6c103e5 to update firmware." echo "# install-wifi -u b2f6c103e5 - then update the driver for the new kernel installed by rpi-update b2f6c103e5." echo "# sudo reboot - now reboot to update the kernel with the new wifi driver." echo "#" echo "# and finally, you can change the wifi module you are using and install the new driver for it as well as" echo "# running rpi-update to update the kernel, and assuming in this example the new adapter uses the 8812au" echo "# driver, using something like:" echo "#" echo "# install-wifi -c 8812au rpi-update - check for 8812au driver if rpi-update is run." echo "# sudo rpi-update - if a driver is available you can run rpi-update to update firmware." echo "# install-wifi -u 8812au rpi-update - install the 8812au driver for the new kernel installed by rpi-update." echo "# sudo halt - shutdown the Pi, replace the wifi adapter with the 8812au wifi adapter." echo "# - restart the Pi with the new kernel and new 8812au wifi module." echo "#" } fetch_driver() { echo "Checking for a wifi module to determine the driver to install." echo echo -n "Your wifi module is " lsusb > .lsusb # check for rtl8188eu compatible driver if cat .lsusb | grep -i '056E:4008\|2001:3311\|0DF6:0076\|2001:3310\|2001:330F\|07B8:8179\|0BDA:0179\|0BDA:8179' ; then driver=8188eu # check for rtl8812au compatible driver elif cat .lsusb | grep -i "0BDA:8812\|0BDA:881A\|0BDA:881B\|0BDA:881C\|050D:1106\|050D:1109\|2001:330E\|7392:A822\| / \|0DF6:0074\|04BB:0952\|0789:016E\|0409:0408\|0B05:17D2\|0E66:0022\|0586:3426\|2001:3313\| / \|1058:0632\|1740:0100\|2019:AB30\|07B8:8812\|2001:3315\|2001:3316\|2357:0101\|20f4:805b\| / \|13B1:003F\|148F:9097\|2357:0103\|0BDA:0811\|0BDA:0821\|0BDA:8822\|0BDA:0820\|0BDA:0823\| / \|7392:A811\|04BB:0953\|0BDA:A811\|7392:A812\|7392:A813\|2001:3314\|0846:9052\|2001:3318\| / \|0E66:0023\|0411:0242\|2019:AB32" ; then driver=8812au # check for rtl8192eu compatible driver elif cat .lsusb | grep -i '2001:3319\|0BDA:818C\|0BDA:818B\|2357:0107\|2357:0108\|2357:0109' ; then driver=8192eu # check for mt7601Usta compatible driver elif cat .lsusb | grep -i '148F:7650\|0B05:17D3\|0E8D:760A\|0E8D:760B\|13D3:3431\|13D3:3434\|148F:6370\|148F:7601\| / \|148F:760A\|148F:760B\|148F:760C\|148F:760D\|2001:3D04\|2717:4106\|2955:0001\|2955:1001\| / \|2955:1003\|2A5F:1000\|7392:7710' ; then driver=mt7601 # check for mt7610u compatible driver elif cat .lsusb | grep -i '148F:7610\|0E8D:7610\|0E8D:7650\|0E8D:7630\|13B1:003E\|7392:A711\|7392:B711\|148F:761A\| / \|148F:760A\|0B05:17D1\|0B05:17DB\|0DF6:0075\|2001:3D02\|0586:3425\|07B8:7610\|04BB:0951\| / \|057C:8502\|293C:5702\|2019:AB31\|20F4:806B' ; then driver=mt7610 # check for mt7612u compatible driver elif cat .lsusb | grep -i '0E8D:7662\|0E8D:7632\|0B05:17C9\|0B05:180B\|0E8D:7612\|0846:9053' ; then driver=mt7612 fi if [[ ! $driver ]] ; then echo "unrecognised." echo echo "**** Unable to identify your wifi module ****" echo echo "The script only works for wifi modules using the rtl8188eu, rtl8192eu, rtl8812au, mt7601, mt7610 and mt7612 drivers." echo echo "Looking for your wifi module the script detected the following USB devices:-" echo cat .lsusb echo echo "If you are certain your module uses one of the drivers the script installs check the output of command" echo "'lsusb' shows your wifi module. If lsusb shows your wifi module try running the script again. If the" echo "script fails to detect your wifi module again the driver may need updating to add your module USB id." echo echo "If lsusb does not show your wifi module you will need to resolve that issue before the script can be" echo "used to install the driver you need." echo exit 1 else echo echo "And it uses the $driver driver." echo fi } check_driver() { if [[ $kernelcommit == "rpi-update" ]] ; then rpi_firmware_commit_id=master elif [[ $kernelcommit ]] ; then rpi_firmware_commit_id=$kernelcommit fi if [[ $kernelcommit ]] ; then # check if Pi2 B or earlier version of Pi and select the relevant kernel image if (grep -Fq BCM2709 /proc/cpuinfo) ; then pi=2 image=kernel7.img elif (grep -Fq BCM2708 /proc/cpuinfo) ; then pi=1 image=kernel.img else echo "Processor type unknown - you do not appear to be running this script on a Raspberry Pi. Exiting the script" exit 1 fi echo -n "Please wait ... checking the kernel revision and build you will have after running command 'sudo rpi-update" if [[ $kernelcommit != "rpi-update" ]] ; then echo " $kernelcommit'." else echo "'." fi # download the relevant kernel image if ! (wget -q https://github.com/Hexxeh/rpi-firmware/raw/$rpi_firmware_commit_id/$image -O .kernel) ; then echo "Invalid commit-id, kernel not available for your version of the Pi, Pi $pi." exit 1 fi # extract uname_string from kernel image strings -n 10 .kernel | grep "Linux version" > .uname_string kernel=$(cat .uname_string | awk '{print $3}' | tr -d '+') build=$(grep -Po '(?<=#)[^[]*' .uname_string | awk '{print $1}') echo if [[ $kernelcommit == "rpi-update" ]] ; then echo -n "Running command 'sudo rpi-update" elif [[ $kernelcommit ]] ; then echo -n "Running command 'sudo rpi-update $kernelcommit" fi echo "' will load:" echo echo " kernel revision = $kernel+" echo " kernel build = #$build" echo fi echo -n "Checking for a new $driver wifi driver module" if [[ $kernelcommit ]] ; then if [[ $kernelcommit == "rpi-update" ]] ; then echo " if you run command 'sudo rpi-update'." else echo " if you run command 'sudo rpi-update $rpi_firmware_commit_id'." fi else echo " for your current kernel." fi if (wget --spider -o .wgetlog https://dl.dropboxusercontent.com/u/80256631/$driver\-$kernel\-$build.tar.gz) ; then echo "There is a driver module available for this kernel revision." else if cat .wgetlog | grep -iq "404 Not Found" ; then echo "A driver does not yet exist for this update." else echo "The script cannot access Dropbox to check a driver is available." fi exit 2 fi } install_driver() { echo "Downloading the $driver driver." if (wget -q https://dl.dropboxusercontent.com/u/80256631/$driver\-$kernel\-$build.tar.gz -O wifi-driver.tar.gz) ; then echo "Installing the $driver driver." echo tar xzf wifi-driver.tar.gz if [[ $driver == mt7601 ]] ; then driver=mt7601Usta sudo mkdir -p /etc/Wireless/RT2870STA/ sudo cp RT2870STA.dat /etc/Wireless/RT2870STA/ sudo cp 95-ralink.rules /etc/udev/rules.d/ elif [[ $driver == mt7610 ]] ; then driver=mt7610u_sta sudo mkdir -p /etc/Wireless/RT2870STA/ sudo cp RT2870STA.dat /etc/Wireless/RT2870STA/ sudo cp 95-ralink.rules /etc/udev/rules.d/ elif [[ $driver == mt7612 ]] ; then driver=mt7662u_sta sudo mkdir -p /etc/Wireless/RT2870STA/ sudo cp RT2870STA.dat /etc/Wireless/RT2870STA/ sudo cp 95-ralink.rules /etc/udev/rules.d/ else sudo cp $driver.conf /etc/modprobe.d/. fi sudo install -p -m 644 $driver.ko /lib/modules/$kernel+/kernel/drivers/net/wireless sudo depmod $kernel+ if (lsmod | grep $driver > /dev/null) ; then echo "A version of the driver $driver.ko is already loaded and running. You will need to reboot to load the new driver." exit else sudo modprobe $driver fi else echo echo "A driver does not yet exist for this kernel." fi } display_current() { echo echo "Your current kernel revision = $kernel+" echo "Your current kernel build = #$build" echo } tmpdir=$(mktemp -d) trap "\rm -rf $tmpdir" EXIT cd $tmpdir #initialise some variables command=$0 option=$1 kernelcommit=$2 $1" in 8188eu|8192eu|8812au|mt7601|mt7610|mt7612) driver=$1 display_current check_driver install_driver ;; -c|--check) case "$2" in 8188eu|8192eu|8812au|mt7601|mt7610|mt7612) driver=$2 kernelcommit=$3 ;; esac display_current if [ ! $driver ] ; then fetch_driver fi check_driver ;; -u|--update) case "$2" in 8188eu|8192eu|8812au|mt7601|mt7610|mt7612) driver=$2 kernelcommit=$3 ;; esac display_current if [ ! $driver ] ; then fetch_driver fi check_driver install_driver ;; -h|--help) display_help exit 0 ;; "") display_current fetch_driver check_driver install_driver ;; # proceed to install *) echo "unknown command: $1" >&2 ~/$command --help exit 1 ;; esac exit 0
Das Script lädt den notwendigen Treiber und installiert diesen.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-03-11 20:05
Am Ende der Installation wird das Eclipse Studio einmal neugestartet.
Nun kann man die HANA Admin Console auswählen...
Hinzufügen einer neuen HANA Verbindung:
Die IP-Adresse ggf. über “sudo ifconfig” als hxeadm herausfinden. In diesem Fall melden wir uns direkt an der SYSTEM-Datenbank an. “Next”
Wir gehen als SYSTEM rein. Passwort entspricht dem Masterkennwort.
Auf “Finish” klicken.
Das System ist nun gelistet. Ein Doppelklick stellt die Verbindung her.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-02-17 17:23
WINDOWS Powershell Scriting
Windows Update automatisieren mit der Powershell
# # Aufruf: powershell <windows_update.ps1> # # # Was macht das Skript ? # Das Script holt sich die Windows_update Info (lokal) und meldet diese Liste als Update per Mail. Über Parameter wird gesteuert, ob auch # Updates eingespielt werden. # # # Ersteller: J. Misselbeck # Erstellt am: 14.10.2015 # geändert am: von: was: # # Variablendeklaration #
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-02-14 10:52
Strings ersetzen oder löschen mit PowerShell
Zu den häufigen Aufgaben beim Schreiben von Scripts gehört das Ersetzen von Zeichenketten, wobei meistens nur ein Teil des Strings ausgetauscht werden soll. PowerShell sieht dafür zwei Varianten vor, nämlich replace als Methode und als Operator. Erstere lässt sich einfacher nutzen, wogegen der Operator mächtiger ist.
Egal ob es um die Auswertung von Log-Files oder um die Umbenennung von Dateien geht, das Ersetzen von Zeichenketten ist eine häufig genutzte Operation.
Wenn man einen String durch eine konstante Zeichenkette ersetzen möchte, dann bietet sich die Methode replace() an, über die jedes String-Objekt verfügt. Als ersten Parameter übergibt man ihr die Zeichenkette, die ersetzt werden soll, und als zweiten jene, der an ihre Stelle treten soll:
"Arbeiten mit PowerShell".Replace('Arbeiten', 'Spaß')
Dieses Beispiel ersetzt "Arbeiten" durch "Spaß", und entsprechend ist das Ergebnis "Spaß mit PowerShell". Wie man hier erkennen kann, muss man die ursprüngliche Zeichenkette nicht in einer Variablen speichern, vielmehr ist die Methode direkt für den String verfügbar. Folgende Fleißaufgabe kann man sich also sparen:
$s = "Arbeiten mit PowerShell" $s.Replace('Arbeiten','Spaß')
Möchte man einen Teil-String löschen, dann ersetzt man diesen einfach durch die leere Zeichenkette:
"Arbeiten mit PowerShell".Replace('Arbeiten mit ', '')
Bei diesem Aufruf bliebe nur mehr "PowerShell" übrig.
Möchte man mehrere Abschnitte in einem String ersetzen, dann kann man replace() in einem Ausdruck mehrfach hintereinander aufrufen:
"Arbeiten mit PowerShell".Replace('Arbeiten','Spaß').Replace('PowerShell', VBScript')
Das Ergebnis lautet in diesem Fall erwartungsgemäß "Spaß mit VBScript".
Replace-Operator
Wie gesehen, ist die Replace-Methode ist sehr einfach zu nutzen, aber sie unterstützt keine Wildcards oder reguläre Ausdrücke. Benötigt man diese, dann muss man zum Operator greifen.
Anstatt des doppelten Aufrufs der Methode wie im letzten Beispiel oben könnte man sich mit einem regulären Ausdruck so behelfen:
"Arbeiten mit PowerShell" ` -Replace 'Arbeiten(\w+)PowerShell', 'Spaß $1 VBScript'
Man beachte hier, dass der reguläre Ausdruck in einfachen Anführungszeichen stehen muss, weil sonst bereits die Shell $1 expandieren würde und die Regex-Engine nur mehr eine leere Zeichenkette zu sehen bekäme.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-03-02 15:49
Programme mit Hilfe von Powershell deinstallieren
Möchte man installierte Programme von der Kommandozeile oder via Script entfernen, dann bietet Microsoft dafür gleich mehrere Möglichkeiten. Leider deckt keine Methode alle Szenarien ab. So beschränkt sich etwa das Package-Management nur auf den lokalen Rechner, WMI hingegen erkennt nicht alle Programme. Bereits bei der Deinstallation von Windows-Komponenten gibt es ein unnötiges Nebeneinander von mehreren Optionen wie Remove-WindowsCapability, Remove-WindowsFeature und Disable-WindowsOptionalFeature. Hinzu kommt noch Remove-WindowsPackage aus dem DISM-Modul.Möchte man installierte Programme von der Kommandozeile oder via Script entfernen, dann bietet Microsoft dafür gleich mehrere Möglichkeiten. Leider deckt keine Methode alle Szenarien ab. So beschränkt sich etwa das Package-Management nur auf den lokalen Rechner, WMI hingegen erkennt nicht alle Programme. Bereits bei der Deinstallation von Windows-Komponenten gibt es ein unnötiges Nebeneinander von mehreren Optionen wie Remove-WindowsCapability, Remove-WindowsFeature und Disable-WindowsOptionalFeature. Hinzu kommt noch Remove-WindowsPackage aus dem DISM-Modul.
CLI-Optionen für das Deinstallieren von Anwendungen Ähnlich inkonsistent sieht es bei den Kommandozeilen-Tools für die Deinstallation von Programmen aus. Vor einigen Jahren führte Microsoft das PowerShell Package Management ein, das primär für das Hinzufügen und Entfernen von PowerShell-Modulen gedacht ist. Es eignet sich aber auch für die Deinstallation von Win32-Programmen. Im Jahr 2020 kann dann mit dem Paket-Manager winget ein weiteres Tool hinzu, das ein Jahr später die Fähigkeit zum Entfernen von Programmen erhielt. Es hat bis heute aber kein PowerShell-Interface und ist so für die Automatisierung des Paket-Managements nur bedingt geeignet. Für Store- bzw. UWP-Apps existieren mit Remove-AppxProvisionedPackage und Remove-AppxPackage zudem eigene Cmdlets. Schließlich besteht noch die Möglichkeit, Anwendungen über WMI zu deinstallieren. Dies ist der einzige der hier genannten Mechanismen, um diese Aufgabe remote zu erledigen. Programme über WMI deinstallieren Zuständig ist dafür die Klasse Win32_Product. Mit ihrer Hilfe kann man die installierte Software erst anzeigen: Get-CimInstance -Class Win32_Product -ComputerName <Remote-PC> | Format-List Hat man das fragliche Programm gesichtet, dann kann man die Liste weiter einschränken: Get-CimInstance -Class Win32_Product -ComputerName <Remote-PC> | where name -like " PowerShell*" Schickt man den Output dieses Kommandos durch eine Pipe an Get-Member, dann wird man vergeblich nach einer Uninstall-Methode suchen. Um diese zu bekommen, muss man stattdessen das ältere Get-WMIObject verwenden: $app = Get-WmiObject -Class Win32_Product -ComputerName <Remote-PC> | where name -Like "PowerShell*" Dieser Aufruf würde zum Beispiel eine veraltete Version von PowerShell 7 erfassen und das Resultat an die Variable $app zuweisen.CLI-Optionen für das Deinstallieren von Anwendungen Ähnlich inkonsistent sieht es bei den Kommandozeilen-Tools für die Deinstallation von Programmen aus. Vor einigen Jahren führte Microsoft das PowerShell Package Management ein, das primär für das Hinzufügen und Entfernen von PowerShell-Modulen gedacht ist. Es eignet sich aber auch für die Deinstallation von Win32-Programmen. Im Jahr 2020 kann dann mit dem Paket-Manager winget ein weiteres Tool hinzu, das ein Jahr später die Fähigkeit zum Entfernen von Programmen erhielt. Es hat bis heute aber kein PowerShell-Interface und ist so für die Automatisierung des Paket-Managements nur bedingt geeignet. Für Store- bzw. UWP-Apps existieren mit Remove-AppxProvisionedPackage und Remove-AppxPackage zudem eigene Cmdlets. Schließlich besteht noch die Möglichkeit, Anwendungen über WMI zu deinstallieren. Dies ist der einzige der hier genannten Mechanismen, um diese Aufgabe remote zu erledigen. Programme über WMI deinstallieren Zuständig ist dafür die Klasse Win32_Product. Mit ihrer Hilfe kann man die installierte Software erst anzeigen: Get-CimInstance -Class Win32_Product -ComputerName <Remote-PC> | Format-List Hat man das fragliche Programm gesichtet, dann kann man die Liste weiter einschränken: Get-CimInstance -Class Win32_Product -ComputerName <Remote-PC> | where name -like " PowerShell*" Schickt man den Output dieses Kommandos durch eine Pipe an Get-Member, dann wird man vergeblich nach einer Uninstall-Methode suchen. Um diese zu bekommen, muss man stattdessen das ältere Get-WMIObject verwenden: $app = Get-WmiObject -Class Win32_Product -ComputerName <Remote-PC> | where name -Like "PowerShell*" Dieser Aufruf würde zum Beispiel eine veraltete Version von PowerShell 7 erfassen und das Resultat an die Variable $app zuweisen.
Anschließend deinstalliert man das Programm mit $app.uinstall() Diese Methode funktioniert grundsätzlich gut und eben auch remote. Ihr Nachteil besteht darin, dass sich die installierten Programme über WMI meist nicht vollständig anzeigen lassen.Anschließend deinstalliert man das Programm mit $app.uinstall() Diese Methode funktioniert grundsätzlich gut und eben auch remote. Ihr Nachteil besteht darin, dass sich die installierten Programme über WMI meist nicht vollständig anzeigen lassen.
Tools wie 7-zip tauchen gar nicht auf, andere wieder nur mit einer GUID, so dass man nicht weiß, was sich dahinter verbirgt. In diesem Fall kann man auf das Package-Management ausweichen, das aber nur lokal funktioniert. Programme mit Uninstall-Package entfernen Um die installierten Programme aufzulisten, verwendet man das Cmdlet Get-Package. Dieses wirft aber auch Standalone-Updates (msu) oder mit PowerShellGet installierte Module aus. Daher kann man den Output für herkömmliche Win32-Anwendungen so filtern: Get-Package -ProviderName Programs -IncludeWindowsInstaller Hat man das betreffende Programm in der Anzeige gefunden, dann spezifiziert man es über den Name-Parameter und übergibt es an Uninstall-Package: Get-Package -Name "7-zip*" | Uninstall-Package Get-Package bietet zusätzlich die Möglichkeit, Programme über ihre Versionsnummer zu filtern und wahlweise nur bestimmte (zum Beispiel "RequiredVersion") oder alle Versionen ("AllVersions") zu deinstallieren.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-03-01 08:46
Reduktion der Angriffsfläche in Microsoft Defender mit Gruppenrichtlinien oder PowerShell aktivieren
Microsoft Defender bietet neben dem Virenscanner noch weitere Sicherheitsfunktionen. Zu diesen gehört die Reduktion der Angriffsfläche, mit der sich Anwendungen wie Office, Browser oder Adobe Reader härten lassen. Das Feature ist standardmäßig nicht aktiv und lässt sich per Gruppenrichtlinie oder PowerShell konfigurieren.
Zu den gängigen Einfallstoren für Angreifer gehören Anhänge von E-Mails, die schädlichen Code in Form von Scripts, ausführbaren Dateien oder in Office eingebettete Makros enthalten. Zu den weiteren Angriffspunkten zählen ganz besonders auch Web-Browser sowie weit verbreitete Programme wie Adobe Reader, die regelmäßig durch Schwachstellen auffallen.
Ergänzung zu App-spezifischen Maßnahmen
Neben den Maßnahmen, die Admins durch die Konfiguration der Anwendungen selbst ergreifen können, bietet Defender eine zusätzliche Schutzschicht. So lassen sich etwa Makros in Office mit Hilfe von Gruppenrichtlinien weitgehend zähmen, aber die Regeln zur Reduktion der Angriffsfläche (Attack Surface Reduction, ASR) dichten diese noch weiter ab.
So kann man damit Office am Erzeugen von ausführbarem Code, am Einfügen von Code in untergeordnete Prozesse oder am Erstellen von Kindprozessen hindern. Letzteres lässt sich auch für den Adobe Reader durchsetzen. Defender kann zudem ausführbare Inhalte blockieren, wenn diese über einen Mail-Client auf den Rechner gelangen.
Interessant ist zudem die Einstellung für den erweiterten Schutz vor Ransomware. Sie bezieht Informationen zu einer verdächtigen Datei aus der Microsoft Cloud und prüft etwa anhand der Häufigkeit ihres Auftretens oder erwiesener Harmlosigkeit, ob von ihr eine Gefahr ausgeht. Die Funktion setzt voraus, dass der Cloud-basierte Schutz aktiv ist.
Limitierte Management-Optionen
Die Reduktion der Angriffsfläche ist nicht nur in kostenpflichtigen Produkten wie Defender for Endpoint enthalten, sondern gehört zum Lieferumfang von Windows 10 / 11 sowie von Windows Server, wobei auf älteren Versionen einige Regeln nicht unterstützt werden.
Der große Nachteil der kostenlosen Version besteht in den reduzierten Möglichkeiten für das Management und Reporting. Eine GUI in der App Einstellung existiert dafür überhaupt nicht, die Administration der Regeln erfolgt über Gruppenrichtlinien oder PowerShell.
Sie beschränkt sich auf das Aktivieren bzw. Deaktivieren einzelner Regeln sowie auf das optionale Definieren von Verzeichnissen und Dateien, die davon ausgenommen sein sollen.
Evaluierung über den Audit-Modus
Per Voreinstellung ist ASR nicht aktiviert. Admins sollte aber in jedem Fall einen Blick auf die Regeln werfen und prüfen, welche sich für ihre Umgebung eignen.
Man muss diese nicht gleich scharf schalten, sondern kann sie erst im Audit-Modus betreiben und beobachten, welche Auswirkungen sie haben würden.
ASR über PowerShell verwalten
PowerShell kommt die Aufgabe zu, den aktuellen Status der ASR-Regeln abzurufen:
Dieser Aufruf zeigt an, welche Regeln konfiguriert wurden und welchen Status sie haben. Allerdings erhält man dabei nicht ihren Namen, sondern nur eine GUID. Die Tabelle am Ende des Textes (Quelle) löst diese auf.
Für den Status ("Actions") sind die Werte 0, 1, 2 und 6 vorgesehen. Dabei steht 0 für deaktiviert, 1 für aktiviert, 2 für den Audit-Modus (bloße Protokollierung, sobald eine Regeln ausgelöst würde) sowie 6 für Warnung, bei der User einen Hinweis auf die mögliche Gefahr erhalten, aber die Blockierung umgehen können.
Wenn man Regeln konfigurieren möchte, dann sieht das Cmdlet Set-MpPreference für den Parameter
AttackSurfaceReductionRules_Actions statt dieser numerischen Werte die Konstanten Disabled, Enabled und AuditMode vor. Dagegen gibt man für AttackSurfaceReductionRules_Ids wieder die GUID an.
Um beispielsweise Adobe Reader am Starten von Kindprozessen zu hindern, geht man mit PowerShell so vor:
Für das zentrale Management von ASR stehen in den Gruppenrichtlinien zwei Einstellungen zur Verfügung, eine für die Aktivierung bzw. Deaktivierung von Regeln und die andere für die Definition der Ausschlüsse.
Beide befinden sich unter Computerkonfiguration => Richtlinien => Administrative Vorlagen => Windows-Komponenten => Microsoft Defender Antivirus => Microsoft Defender Exploit Guard => Verringerung der Angriffsfläche.
Anstatt einfach für jede Regel eine eigene Option zu aktivieren, muss man für alle eine gemeinsame Einstellung verwenden ("Regeln zur Verringerung der Angriffsfläche konfigurieren"). Dort trägt man die oben erwähnte GUID sowie den Wert für die Action in eine Tabelle ein.
Um Ausschlüsse für Verzeichnisse und Dateien einzurichten, konfiguriert man die andere Einstellung in diesem Ordner. Auch hier trägt man alle Wertnamen in eine Tabelle ein, für den Wert in der rechten Spalte wählt man hier grundsätzlich 0.
ASR im Eventlog beobachten,
Nachdem die Bordmittel für ASR kein Reporting vorsehen, muss man sich auf die Auswertung der Logs beschränken. Die Aufzeichnung erfolgt unter Anwendungs- und Dienstprotokolle => Microsoft => Windows => Windows Defender => Operational.
Von Interesse sind hier die folgenden IDs:
Ereignis-ID Beschreibung
5007 Einstellungen wurden geändert
1121 Auslösen einer Regel im Blockierungsmodus
1122 Auslösen Einer Regel Im Überwachungsmodus (Audit-Modus)
Um diese Events zu beobachten, kann man in der Ereignisanzeige eine benutzerdefinierte Ansicht erstellen.
Alternativ kann man die Log-Einträge auch mit PowerShell abfragen:
Die Reduktion der Angriffsfläche kann einen wichtigen Beitrag leisten, um die Sicherheit der am meisten attackierten Anwendungen zu erhöhen. Das Feature gehört zum Lieferumfang aller aktuellen Windows-Versionen, ist aber per Voreinstellung nicht aktiviert.
Möchte man keinen kostenpflichtigen Service wie Defender for Endpoint oder ein Management-Tool wie ConfigMgr bzw. von einem Drittanbieter einsetzen, dann ist man auf die Verwaltung mittels Gruppenrichtlinien und PowerShell beschränkt. Dabei fehlen vor allem vernünftige Fähigkeiten für das Reporting.
Wenn man ASR im Unternehmen einführt, dann sollte man mit dem Überwachungsmodus starten und anhand des Eventlogs studieren, welche Auswirkungen die Regeln in der Praxis hätten. Ist keine größere Beeinträchtigung der User zu erwarten, dann kann man sie scharf schalten.
Namen der Regeln und ihre GUIDs
Regelname Regel-GUID
Missbrauch von gefährdeten signierten Treibern blockieren 56a863a9-875e-4185-98a7-b882c64b5ce5
Adobe Reader am Erstellen von untergeordneten Prozessen hindern 7674ba52-37eb-4a4f-a9a1-f0f9a1619a2c
Alle Office-Anwendungen am Erstellen von untergeordneten Prozessen hindern d4f940ab-401b-4efc-aadc-ad5f3c50688a
Diebstahl von Anmeldeinformationen aus dem Subsystem für die lokale Sicherheitsautorität (lsass.exe) blockieren 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2
Ausführbare Inhalte aus E-Mail-Client und Web-E-Mail blockieren be9ba2d9-53ea-4cdc-84e5-9b1eeee46550
Ausführbare Dateien an der Ausführung hindern, außer sie erfüllen ein Verbreitungs-, Alters- oder vertrauenswürdige Listen-Kriterium 01443614-cd74-433a-b99e-2ecdc07bfc25
JavaScript und VBScript am Starten heruntergeladener ausführbarer Inhalte hindern d3e037e1-3eb8-44c8-a917-57927947596d
Office-Anwendungen am Erstellen ausführbarer Inhalte hindern 3b576869-a4ec-4529-8536-b80a7769e899
Office-Anwendungen am Einfügen von Code in untergeordnete Prozesse hindern 75668c1f-73b5-4cf0-bb93-3ecf5cb7cc84
Office-Kommunikationsanwendung am Erstellen von untergeordneten Prozessen hindern 26190899-1602-49e8-8b27-eb1d0a1ce869
Persistenz durch WMI-Ereignisabonnement blockieren
(Datei- und Ordnerausschlüsse werden nicht unterstützt). e6db77e5-3df2-4cf1-b95a-636979351e5b
Erstellung von Prozessen durch PSExec- und WMI-Befehle blockieren d1e49aac-8f56-4280-b9ba-993a6d77406c
Nicht vertrauenswürdige und nicht signierte Prozess, die von USB ausgeführt werden, blockieren b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4
Win32-API-Aufrufe von Office-Makros blockieren 92e97fa1-2edf-4476-bdd6-9dd0b4dddc7b
Erweiterten Schutz vor Ransomware verwenden c1db55ab-c21a-4637-bb3f-a12568109d35
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-08-19 11:08
SuSE Linux
.img-File (disk image) unter Linux mounten
Um ein Datenträgerabbild bzw. ein disk image im Form einer *.img-Datei unter Linux zu mounten um dann auf dessen Inhalte zugreifen zu können, hat sich für mich folgendes Vorgehen bewährt:
Zuerst einmal ein paar Informationen über das Image anzeigen lassen:
fdisk -l /path/to/img/arch.img
Das ergibt dann folgende Ausgabe:
Disk arch.img: 15.1 GiB, 16172187648 bytes, 31586304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00057540
Device Boot Start End Blocks Id System
arch.img1 2048 186367 92160 c W95 FAT32 (LBA)
arch.img2 186368 31586303 15699968 5 Extended
arch.img5 188416 31584255 15697920 83 Linux
Uns interessieren nur die Start-Sektoren, also zum einen der Startsektor 2048 der FAT32 Partition und zum einen der Sektor 188416 der Linux Partition.
Um diese beiden Partitionen zu mounten erstellt man sich zunächst 2 Mountpoints:
mkdir /mnt/sd1
mkdir /mnt/sd2
Dann kann man auch schon die beiden Partitionen mounten. Den Offset mit den zuvor ermittelten Startsektoren anpassen (in meinem Fall 2048 und 188416). Solltet ihr eine andere Sektorgröße als 512 bytes haben, gilt es diesen Wert ebenfalls anzupassen.
mount -t auto -o loop,offset=$((2048*512)) /path/to/img/arch.img /mnt/sd1
mount -t auto -o loop,offset=$((188416*512)) /path/to/img/arch.img /mnt/sd2
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-03-02 19:37
Daten retten und wiederherstellen
Die zwei Programme unterscheiden sich lediglich in ihren Parametern und ihrer Vorgehensweise: Das neuere ddrescue liest den Datenträger in recht großen Schritten aus, wobei es fehlerhafte Bereiche zunächst überspringt. Erst wenn es den kompletten Datenträger kopiert hat, sieht es sich die fehlerhaften Blöcke noch einmal an und versucht aus ihnen so viele Daten wie möglich auszulesen. Durch sein Gedächtnis können Sie den Lesevorgang zudem zwischendrin abbrechen und dann zu einem späteren Zeitpunkt fortsetzen. Das ist insbesondere bei großen Festplatten nützlich, bei denen das Auslesen mehrere Stunden dauern kann. Dagegen beißt dd_rescue sich erst einmal an den nicht mehr zu lesenden Stellen fest. Sofern Sie die Wahl haben, sollten Sie also GNU Ddrescue vorziehen.
Nullnummer
Beide Werkzeuge ersetzen nicht mehr lesbare Stellen in der Image-Datei durch Nullen. Damit lässt sich dann zwar nicht mehr die komplette Diplomarbeit retten, aber vielleicht zumindest doch ein Teil. Da das von ddrescue erzeugte Image extrem groß werden kann, sollten Sie es auf einer Partition speichern, die mit solchen Brocken umgehen kann. Nicht geeignet sind folglich externe USB-Festplatten mit FAT32-Dateisystem.
Um mit ddrescue den Inhalt der Partition /dev/sde1 in die Datei /home/tim/kopie.img zu kopieren, rufen Sie es wie folgt auf:
# ddrescue /dev/sde1 /home/tim/kopie.img logfile
In der Datei logfile speichert ddrescue ein paar Informationen. Nur mit ihnen lässt sich der Lesevorgang via [Strg]+[C] zwischendurch abbrechen und dann später mit dem obigen Befehl wieder fortsetzen (Abbildung 4). Mit ddrescue können Sie selbstverständlich auch den kompletten Datenträger retten:
# ddrescue /dev/sde /home/tim/kopie.img logfile
Das ist vor allem sinnvoll, wenn blkid keine Partitionen erkannt hat oder Sie wissen, dass die Partitionstabelle defekt ist. Sofern möglich, sollten Sie vom erstellten Image eine Kopie anlegen. Schlägt der Rettungsversuch gleich fehl, müssen Sie dann den fehlerhaften Datenträger nicht erneut zeitraubend einlesen.
TIPP
Lässt sich lediglich eine einzelne Datei nicht mehr lesen, können Sie mit dem Kommando ddrescue datei.txt /media/rescue/datei.txt zumindest deren noch lesbaren Teile retten.
Hängepartie
Wenn Sie mit ddrescue lediglich eine Partition gesichert haben, können Sie versuchen, diese anschließend zu mounten. Der folgende Befehl hängt sie sicherheitshalber schreibgeschützt in das Verzeichnis /mnt ein:
# mount -o loop,ro /home/tim/kopie.img /mnt
Sichern Sie jetzt aus dem Verzeichnis /mnt alle wichtigen Dateien. Im Fall der Speicherkarte aus dem Fotoapparat tauchten so unter /mnt bereits ein paar Fotos wieder auf. Wie eine kurze Rückfrage bei der Fotografin ergab, fehlten aber dummerweise immer noch über die Hälfte der Aufnahmen. Die nun aufzufahrenden Geschütze funktionieren nur auf ausgehängten Medien, es steht also nun zunächst ein umount /mnt an.
Der Checker
Sofern auf der fraglichen Partition ein Ext-Dateisystem zum Einsatz kommt, können Sie nun den Befehl fsck darauf ansetzen:
# fsck.ext3 -p kopie.img
Der Parameter -p weist fsck an, Fehler direkt zu korrigieren. Bei einem Ext4-Dateisystem nutzen Sie anstelle von fsck.ext3 den Kollegen fsck.ext4. Analog verarztet fsck.vfat Partitionen mit FAT32-Dateisystem, wie es immer noch auf USB-Sticks und SD-Karten zum Einsatz kommt. Sobald fsck seine Arbeit beendet hat, hängen Sie das Image wie oben gezeigt ein und lesen die Dateien aus.
Für andere Dateisysteme gibt es übrigens analoge Reparaturwerkzeuge. Bei NTFS-Dateisystemen hilft etwa ntfsfix weiter, das zu den ntfsprogs gehört, die wiederum Teil der NTFS-Treiber sind. Auf den meisten Distributionen ist das Werkzeug daher standardmäßig installiert, sodass Sie das Kommando ntfsfix kopie.img direkt auf das Image ansetzen können.
Plattenküche
Wenn Sie mit ddrescue nicht nur eine Partition, sondern gleich den ganzen Datenträger gesichert haben, können Sie mit fdisk -l kopie.img überprüfen, ob die Partitionstabelle noch vorhanden und korrekt ist. Sie erhalten dann eine Liste mit allen Partitionen. Die Nummern hinter den Namen in der ersten Spalte entsprechen den jeweiligen Zahlen der Gerätedateien.
Daten retten und wiederherstellen (Seite 3)
Bei einer Platte mit der neueren GPT-Partitionstabelle verwenden Sie gdisk, das Sie unter Umständen erst noch über den Paketmanager nachinstallieren müssen. Unter Ubuntu steckt es im Paket gdisk. Eine Aufstellung der Partitionen im Image liefert das Kommando gdisk -l kopie.img.
Fundstücke
Wenn Sie eine oder mehrere Partitionen vermissen, setzen Sie Testdisk auf das Image an. Dieses Programm versucht Partitionen aufzuspüren und wiederherzustellen. Testdisk müssen Sie über den Paketmanager nachinstallieren, unter Ubuntu steckt es im Paket testdisk. Anschließend nennen Sie dem Werkzeug lediglich den Dateinamen der Image-Datei, rufen also testdisk kopie.img auf.
Sie landen jetzt in der textbasierten Benutzeroberfläche aus Abbildung 5. Im oberen Teil präsentiert Testdisk noch einmal die Image-Datei. Stellen Sie sicher, dass unten der Punkt [Proceed] hervorgehoben ist, und rufen Sie ihn mit der Eingabetaste auf. Jetzt müssen Sie testdisk mitteilen, ob die Festplatte bereits die moderne GPT nutzt. In diesem Fall wählen Sie den Punkt [EFI GPT], andernfalls seinen Kollegen [Intel]. Abschließend starten Sie die [Analyse].
Testdisk fasst jetzt im oberen Teil die aktuelle Situation zusammen. Fehlende oder doppelt aufgeführte Partitionen weisen auf einen Defekt hin. Starten Sie in diesem Fall [Quick Search]. Testdisk geht jetzt auf die Suche und listet anschließend alle gefundenen Partitionen auf (Abbildung 6). Via [P] sehen Sie sich die Dateien und Verzeichnisse der entsprechenden Partition an, die Navigation erfolgt mit den Pfeiltasten und Eingabe. Mit [Q] geht es wieder zurück zur Aufstellung aller Partitionen.
Hat das Werkzeug bereits alle Partitionen aufgespürt, aktivieren Sie [Write]. Vermissen Sie noch eine oder mehrere Partitionen, wählen Sie [Deeper Search]. Testdisk führt dann eine tiefergehende Analyse durch, die etwas länger dauert. Sie fördert unter Umständen uralte Partitionen zutage, die sich sogar teilweise überlappen können. Steuern Sie in der Liste die bislang vermisste Partition an, im Zweifelsfall müssen Sie raten.
Über die Pfeiltasten können Sie aus der Partition eine primäre oder logische machen. Diese Partition stellt dann Testdisk gleich wieder her. Alle Partitionen mit einem D in der ersten Spalte ignoriert Testdisk, sie bleiben folglich gelöscht. Wenn Sie zufrieden sind, drücken Sie die Eingabetaste und lassen die neue Partitionstabelle mit [Write] speichern.
In jedem Fall bestätigen Sie die Rückfrage mit [Y] und aktivieren Ok. Über [Quit] springen Sie immer wieder ein Menü zurück, bis sich Testdisk schließlich beendet.
Auswahl
Um die wiederhergestellten Partitionen einzuhängen, installieren Sie über den Paketmanager das Programm kpartx (bei Ubuntu im gleichnamigen Paket) und setzen es dann auf die Image-Datei an:
# kpartx -a -v kopie.img
Das Werkzeug erstellt jetzt für jede Partition im Image eine eigene Gerätedatei unterhalb von /dev/mapper. Sie müssen in den angezeigten Informationen nur die Gerätedatei für Ihre Partition ablesen und diese dann per mount einhängen (Abbildung 7):
# mount -o loop,ro /dev/mapper/loop0p1 /mnt
Der Befehl aus diesem Beispiel hängt die erste Partition (loop0p1) aus dem Image in das Unterverzeichnis /mnt ein.
Fehlen – wie im Fall der Speicherkarte mit den Fotos – immer noch Dateien, hilft das Werkzeug Photorec weiter. Es versucht gelöschte Dateien wiederherzustellen, indem es auf dem kompletten Datenträger nach Lebenszeichen beziehungsweise typischen Erkennungsmerkmalen von Dateien sucht. Wie der Name andeutet, wurde es einst zur Wiederherstellung von gelöschten Fotos erfunden, kann aber mittlerweile auch viele andere Dateien zurückholen.
Photorec steckt in der Regel im Paket testdisk. Sofern Sie es noch nicht installiert haben, spielen Sie es via Paketmanager ein. Anschließend übergeben Sie dem Tool nur noch mit photorec kopie.img die Image-Datei. Photorec nennt Ihnen jetzt im oberen Teil des Bildschirms noch einmal das Image, das Sie mit der Eingabetaste bestätigen. Anschließend erhalten Sie eine Auswahl aller gefundenen Partitionen. (Übernommen und angepasst von Linux Community)
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-03-04 13:48
Postfix einrichten
Es soll der Mailversand über hier(allinkl.com Provider) eingerichtet werden
Erst einmal muss Postfix usw. installiert werden apt install libsasl2-modules apt install postfix
apt-get install libsasl2-modules !!!
Jetzt führen wir zur Sicherheit diesen Befehl aus grep -R "relayhost" /etc/postfix/
Nun bearbeiten wir die main.cf, als möglichen Anbieter nehmen wir jetzt allinkl.com mit dieser angelegten E-Mail
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-03-06 13:01
WLAN Treiber für realtek Chipsatz unter Raspbian installieren
!/bin/bash set -e # install-wifi - v5 - by MrEngman. display_help() { echo "#" echo "# usage:" echo "#" echo "# install-wifi [[-h | --help] |" echo "# [-c | --check [driver] [rpi-update | commit_id]] |" echo "# [-u | --update [driver] [rpi-update | commit_id]] |" echo "# [driver [rpi-update | commit_id]]]" echo "#" echo "# options:" echo "# none - install the driver for the wifi module connected to the Pi for the currently running kernel." echo "#" echo "# -h|--help - display usage." echo "#" echo "# -c|--check [driver] [option] - check if a driver is available, does not install it." echo "# driver - specific driver to check for, one of: 8188eu, 8192eu, 8812au, mt7601, mt7610 or mt7612" echo "# [option]:- blank - check driver for currently running kernel" echo "# rpi-update - check driver for latest version of rpi-update" echo "# commit-id - check driver for specific commit-id of rpi-update" echo "#" echo "# -u|--update [driver] [option] - update/install driver, can be used after running, but before rebooting, rpi-update" echo "# to update the driver to the one needed for the new kernel installed by rpi-update." echo "# driver - specific driver to update/install, one of: 8188eu, 8192eu, 8812au, mt7601, mt7610 or mt7612" echo "# [option]:- blank - update/install driver for currently running kernel" echo "# rpi-update - update/install driver for latest version of rpi-update" echo "# commit-id - update/install driver for specific commit-id of rpi-update" echo "#" echo "# driver [option] - install specific driver, enables installing the driver for a module not currently connected to" echo "# the Pi, or installing a driver for a different module if you want to change your wifi module." echo "# driver - specific driver to install, one of: 8188eu, 8192eu, 8812au, mt7601, mt7610 or mt7612" echo "# [option]:- blank - update/install driver for currently running kernel" echo "# rpi-update - update/install driver for latest version of rpi-update" echo "# commit-id - update/install driver for specific commit-id of rpi-update" echo "#" read -n1 -r -p "Press any key to continue..." echo echo "#" echo "# install-wifi examples:" echo "#" echo "# Install/update the wifi driver for the wifi module connected to the Pi for the currently running kernel" echo "#" echo "# install-wifi" echo "#" echo "# If you want to change your wifi module to one using a different driver that is compatible with this script" echo "# you can install the driver for the new wifi module, one of: 8188eu, 8192eu, 8812au, mt7601, mt7610 or mt7612" echo "# In this example it will install the 8192eu wifi module driver. After installing the driver shutdown the" echo "# Pi, remove the currently connected wifi module and connect the new 8192eu wifi module and restart your Pi" echo "# and it should start up with the new wifi adapter connected to your network." echo "#" echo "# install-wifi 8192eu - this will install the 8192eu module for the current kernel" echo "#" echo "# if you want to run rpi-update, first check a driver is available before you update your code. If the check" echo "# indicates a driver is available run rpi-update to update the firmware/kernel and then before rebooting" echo "# update the wifi driver." echo "#" echo "# install-wifi -c rpi-update - check for driver if rpi-update is run." echo "# sudo rpi-update - if a driver is available you can run rpi-update to update firmware." echo "# install-wifi -u rpi-update - then update the driver for the new kernel installed by rpi-update." echo "# sudo reboot - now reboot to update the kernel with the new wifi driver." echo "#" echo "# if you want to run, say rpi-update b2f6c103e5 to install 3.18.7+ #755, first check a driver is available" echo "# before you update your code. Then, if a driver is available update the code, and then before rebooting" echo "# update the wifi driver." echo "#" echo "# install-wifi -c b2f6c103e5 - check for driver if rpi-update b2f6c103e5 is run to install kernel 3.18.7+ #755." echo "# sudo rpi-update b2f6c103e5 - if a driver is available you can run rpi-update b2f6c103e5 to update firmware." echo "# install-wifi -u b2f6c103e5 - then update the driver for the new kernel installed by rpi-update b2f6c103e5." echo "# sudo reboot - now reboot to update the kernel with the new wifi driver." echo "#" echo "# and finally, you can change the wifi module you are using and install the new driver for it as well as" echo "# running rpi-update to update the kernel, and assuming in this example the new adapter uses the 8812au" echo "# driver, using something like:" echo "#" echo "# install-wifi -c 8812au rpi-update - check for 8812au driver if rpi-update is run." echo "# sudo rpi-update - if a driver is available you can run rpi-update to update firmware." echo "# install-wifi -u 8812au rpi-update - install the 8812au driver for the new kernel installed by rpi-update." echo "# sudo halt - shutdown the Pi, replace the wifi adapter with the 8812au wifi adapter." echo "# - restart the Pi with the new kernel and new 8812au wifi module." echo "#" } fetch_driver() { echo "Checking for a wifi module to determine the driver to install." echo echo -n "Your wifi module is " lsusb > .lsusb # check for rtl8188eu compatible driver if cat .lsusb | grep -i '056E:4008\|2001:3311\|0DF6:0076\|2001:3310\|2001:330F\|07B8:8179\|0BDA:0179\|0BDA:8179' ; then driver=8188eu # check for rtl8812au compatible driver elif cat .lsusb | grep -i "0BDA:8812\|0BDA:881A\|0BDA:881B\|0BDA:881C\|050D:1106\|050D:1109\|2001:330E\|7392:A822\| / \|0DF6:0074\|04BB:0952\|0789:016E\|0409:0408\|0B05:17D2\|0E66:0022\|0586:3426\|2001:3313\| / \|1058:0632\|1740:0100\|2019:AB30\|07B8:8812\|2001:3315\|2001:3316\|2357:0101\|20f4:805b\| / \|13B1:003F\|148F:9097\|2357:0103\|0BDA:0811\|0BDA:0821\|0BDA:8822\|0BDA:0820\|0BDA:0823\| / \|7392:A811\|04BB:0953\|0BDA:A811\|7392:A812\|7392:A813\|2001:3314\|0846:9052\|2001:3318\| / \|0E66:0023\|0411:0242\|2019:AB32" ; then driver=8812au # check for rtl8192eu compatible driver elif cat .lsusb | grep -i '2001:3319\|0BDA:818C\|0BDA:818B\|2357:0107\|2357:0108\|2357:0109' ; then driver=8192eu # check for mt7601Usta compatible driver elif cat .lsusb | grep -i '148F:7650\|0B05:17D3\|0E8D:760A\|0E8D:760B\|13D3:3431\|13D3:3434\|148F:6370\|148F:7601\| / \|148F:760A\|148F:760B\|148F:760C\|148F:760D\|2001:3D04\|2717:4106\|2955:0001\|2955:1001\| / \|2955:1003\|2A5F:1000\|7392:7710' ; then driver=mt7601 # check for mt7610u compatible driver elif cat .lsusb | grep -i '148F:7610\|0E8D:7610\|0E8D:7650\|0E8D:7630\|13B1:003E\|7392:A711\|7392:B711\|148F:761A\| / \|148F:760A\|0B05:17D1\|0B05:17DB\|0DF6:0075\|2001:3D02\|0586:3425\|07B8:7610\|04BB:0951\| / \|057C:8502\|293C:5702\|2019:AB31\|20F4:806B' ; then driver=mt7610 # check for mt7612u compatible driver elif cat .lsusb | grep -i '0E8D:7662\|0E8D:7632\|0B05:17C9\|0B05:180B\|0E8D:7612\|0846:9053' ; then driver=mt7612 fi if [[ ! $driver ]] ; then echo "unrecognised." echo echo "**** Unable to identify your wifi module ****" echo echo "The script only works for wifi modules using the rtl8188eu, rtl8192eu, rtl8812au, mt7601, mt7610 and mt7612 drivers." echo echo "Looking for your wifi module the script detected the following USB devices:-" echo cat .lsusb echo echo "If you are certain your module uses one of the drivers the script installs check the output of command" echo "'lsusb' shows your wifi module. If lsusb shows your wifi module try running the script again. If the" echo "script fails to detect your wifi module again the driver may need updating to add your module USB id." echo echo "If lsusb does not show your wifi module you will need to resolve that issue before the script can be" echo "used to install the driver you need." echo exit 1 else echo echo "And it uses the $driver driver." echo fi } check_driver() { if [[ $kernelcommit == "rpi-update" ]] ; then rpi_firmware_commit_id=master elif [[ $kernelcommit ]] ; then rpi_firmware_commit_id=$kernelcommit fi if [[ $kernelcommit ]] ; then # check if Pi2 B or earlier version of Pi and select the relevant kernel image if (grep -Fq BCM2709 /proc/cpuinfo) ; then pi=2 image=kernel7.img elif (grep -Fq BCM2708 /proc/cpuinfo) ; then pi=1 image=kernel.img else echo "Processor type unknown - you do not appear to be running this script on a Raspberry Pi. Exiting the script" exit 1 fi echo -n "Please wait ... checking the kernel revision and build you will have after running command 'sudo rpi-update" if [[ $kernelcommit != "rpi-update" ]] ; then echo " $kernelcommit'." else echo "'." fi # download the relevant kernel image if ! (wget -q https://github.com/Hexxeh/rpi-firmware/raw/$rpi_firmware_commit_id/$image -O .kernel) ; then echo "Invalid commit-id, kernel not available for your version of the Pi, Pi $pi." exit 1 fi # extract uname_string from kernel image strings -n 10 .kernel | grep "Linux version" > .uname_string kernel=$(cat .uname_string | awk '{print $3}' | tr -d '+') build=$(grep -Po '(?<=#)[^[]*' .uname_string | awk '{print $1}') echo if [[ $kernelcommit == "rpi-update" ]] ; then echo -n "Running command 'sudo rpi-update" elif [[ $kernelcommit ]] ; then echo -n "Running command 'sudo rpi-update $kernelcommit" fi echo "' will load:" echo echo " kernel revision = $kernel+" echo " kernel build = #$build" echo fi echo -n "Checking for a new $driver wifi driver module" if [[ $kernelcommit ]] ; then if [[ $kernelcommit == "rpi-update" ]] ; then echo " if you run command 'sudo rpi-update'." else echo " if you run command 'sudo rpi-update $rpi_firmware_commit_id'." fi else echo " for your current kernel." fi if (wget --spider -o .wgetlog https://dl.dropboxusercontent.com/u/80256631/$driver\-$kernel\-$build.tar.gz) ; then echo "There is a driver module available for this kernel revision." else if cat .wgetlog | grep -iq "404 Not Found" ; then echo "A driver does not yet exist for this update." else echo "The script cannot access Dropbox to check a driver is available." fi exit 2 fi } install_driver() { echo "Downloading the $driver driver." if (wget -q https://dl.dropboxusercontent.com/u/80256631/$driver\-$kernel\-$build.tar.gz -O wifi-driver.tar.gz) ; then echo "Installing the $driver driver." echo tar xzf wifi-driver.tar.gz if [[ $driver == mt7601 ]] ; then driver=mt7601Usta sudo mkdir -p /etc/Wireless/RT2870STA/ sudo cp RT2870STA.dat /etc/Wireless/RT2870STA/ sudo cp 95-ralink.rules /etc/udev/rules.d/ elif [[ $driver == mt7610 ]] ; then driver=mt7610u_sta sudo mkdir -p /etc/Wireless/RT2870STA/ sudo cp RT2870STA.dat /etc/Wireless/RT2870STA/ sudo cp 95-ralink.rules /etc/udev/rules.d/ elif [[ $driver == mt7612 ]] ; then driver=mt7662u_sta sudo mkdir -p /etc/Wireless/RT2870STA/ sudo cp RT2870STA.dat /etc/Wireless/RT2870STA/ sudo cp 95-ralink.rules /etc/udev/rules.d/ else sudo cp $driver.conf /etc/modprobe.d/. fi sudo install -p -m 644 $driver.ko /lib/modules/$kernel+/kernel/drivers/net/wireless sudo depmod $kernel+ if (lsmod | grep $driver > /dev/null) ; then echo "A version of the driver $driver.ko is already loaded and running. You will need to reboot to load the new driver." exit else sudo modprobe $driver fi else echo echo "A driver does not yet exist for this kernel." fi } display_current() { echo echo "Your current kernel revision = $kernel+" echo "Your current kernel build = #$build" echo } tmpdir=$(mktemp -d) trap "\rm -rf $tmpdir" EXIT cd $tmpdir #initialise some variables command=$0 option=$1 kernelcommit=$2 $1" in 8188eu|8192eu|8812au|mt7601|mt7610|mt7612) driver=$1 display_current check_driver install_driver ;; -c|--check) case "$2" in 8188eu|8192eu|8812au|mt7601|mt7610|mt7612) driver=$2 kernelcommit=$3 ;; esac display_current if [ ! $driver ] ; then fetch_driver fi check_driver ;; -u|--update) case "$2" in 8188eu|8192eu|8812au|mt7601|mt7610|mt7612) driver=$2 kernelcommit=$3 ;; esac display_current if [ ! $driver ] ; then fetch_driver fi check_driver install_driver ;; -h|--help) display_help exit 0 ;; "") display_current fetch_driver check_driver install_driver ;; # proceed to install *) echo "unknown command: $1" >&2 ~/$command --help exit 1 ;; esac exit 0
Das Script lädt den notwendigen Treiber und installiert diesen.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-03-11 20:05
Linux Network Interface bonding
1. sudo apt update && sudo apt upgrade
2. sudo apt install ifenslave
3. sudo su - modprobe bonding echo 'bonding' >> /etc/modules
Die Datei interfaces, zu finden unter "/etc/network/interfaces", wird dazu verwendet.
4. sudo vim /etc/network/interfaces
This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # Frontend bond interface auto bond0 iface bond0 inet static address 192.168.56.9/24 gateway 192.168.56.1 bond-slaves enp0s3 enp0s8 bond-mode 1 bond-primary enp0s3 bond-miimon 100 bond-downdelay 300 bond-updelay 700
$ more /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v5.10.0-11-amd64 Bonding Mode: fault-tolerance (active-backup) Primary Slave: enp0s3 (primary_reselect always) Currently Active Slave: enp0s3 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 700 Down Delay (ms): 300 Peer Notification Delay (ms): 0 Slave Interface: enp0s3 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 08:00:27:e1:5f:56 Slave queue ID: 0 Slave Interface: enp0s8 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 08:00:27:00:96:03 Slave queue ID: 0
$ sudo dmesg -T | tail -10 [Tue Mar 1 02:18:15 2022] bond0: active interface up! [Tue Mar 1 02:18:15 2022] IPv6: ADDRCONF(NETDEV_CHANGE): bond0: link becomes ready [Tue Mar 1 02:18:15 2022] e1000: enp0s8 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [Tue Mar 1 02:18:15 2022] bond0: (slave enp0s8): link status up, enabling it in 700 ms [Tue Mar 1 02:18:15 2022] bond0: (slave enp0s8): invalid new link 3 on slave [Tue Mar 1 02:18:16 2022] bond0: (slave enp0s8): link status definitely up, 1000 Mbps full duplex [Tue Mar 1 02:20:31 2022] bond0: (slave enp0s3): Releasing backup interface [Tue Mar 1 02:20:31 2022] bond0: (slave enp0s8): making interface the new active one [Tue Mar 1 02:20:35 2022] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [Tue Mar 1 02:20:35 2022] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready
Method 2- Configure Network Bonding using NMCLI
Trifft bei Debian 11 zu...
$ sudo nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=balance-rr" Connection 'bond0' (9d37ef5d-4905-48ce-88d6-fbce925cc940) successfully added.
$ nmcli device status DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected Wired connection 1 enp0s8 ethernet connected Wired connection 2 lo loopback unmanaged --
$ sudo nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp0s3 master bond0 Connection 'bond0-port1' (b2b69f0b-780e-4579-bf38-e80933d3d98d) successfully added. ####### $ sudo nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp0s8 master bond0 Warning: There is another connection with the name 'bond0-port1'. Reference the connection by its uuid '1fb56698-ff12-4a9b-826d-dfea323477fb' Connection 'bond0-port1' (1fb56698-ff12-4a9b-826d-dfea323477fb) successfully added.
sudo nmcli connection up bond0 Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
$ nmcli device status DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected Wired connection 1 enp0s8 ethernet connected Wired connection 2 bond0 bond connected bond0 lo loopback unmanaged --
$ sudo dmesg -T | tail -10 [Tue Mar 1 02:40:38 2022] e1000: enp0s8 NIC Link is Down [Tue Mar 1 02:40:38 2022] usb 2-1: new full-speed USB device number 3 using ohci-pci [Tue Mar 1 02:40:39 2022] usb 2-1: New USB device found, idVendor=80ee, idProduct=0021, bcdDevice= 1.00 [Tue Mar 1 02:40:39 2022] usb 2-1: New USB device strings: Mfr=1, Product=3, SerialNumber=0 [Tue Mar 1 02:40:39 2022] usb 2-1: Product: USB Tablet [Tue Mar 1 02:40:39 2022] usb 2-1: Manufacturer: VirtualBox [Tue Mar 1 02:40:39 2022] input: VirtualBox USB Tablet as /devices/pci0000:00/0000:00:06.0/usb2/2-1/2-1:1.0/0003:80EE:0021.0002/input/input9 [Tue Mar 1 02:40:39 2022] hid-generic 0003:80EE:0021.0002: input,hidraw0: USB HID v1.10 Mouse [VirtualBox USB Tablet] on usb-0000:00:06.0-1/input0 [Tue Mar 1 02:40:42 2022] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [Tue Mar 1 02:40:42 2022] e1000: enp0s8 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-09-01 15:49
Windows-Server
Nmap: Firewalls umgehen mit Ping- und TCP-ACK-Scans
Nmap: Firewalls umgehen mit Ping- und TCP-ACK-Scans
Nmap zeigt schon mit einfachen Scans, welche Ports von außen erreichbar sind. Neben Ports, die sich eindeutig als offen oder geschlossen identifizieren lassen, gibt es solche, die als gefiltert gelten. Dies ist der Fall, wenn sich Systeme hinter einer Firewall befinden. Hier liefern spezialisierte Scans zusätzliche Informationen.
Um die Methoden für TCP-Port-Scans besser zu verstehen, sollten Sie elementare Konzepte des TCP-Protokolls wie den TCP-Verbindungsaufbau kennen. Im Wesentlichen gibt es dabei zwei reguläre Szenarien.
Offene Ports
Bei einem Szenario mit offenem Port lauscht eine Anwendung auf eingehende Verbindungen vom Client. Der Port befindet sich somit im Status TCP LISTEN.
Beim Empfang einer eingehenden Verbindungsanfrage in Form eines Synchronisationspakets (SYN) antwortet das Zielsystem (Server) mit einem SYN/ACK-Paket (Acknowledge), um die Synchronisation zu bestätigen.
Sobald der Client, von dem die Anfrage ausging, mit einem ACK-Paket antwortet, ist die Verbindung auf beiden Seiten hergestellt. Das ist der klassische TCP-3-Way-Handshake.
Verlauf eines TCP-Handshakes
Verlauf eines TCP-Handshakes
Die Sequenznummern spielen für die weiteren Erläuterungen erstmal keine Rolle. Details dazu finden Sie in meinem Artikel zu Wireshark.
Geschlossene Ports
Bei einem zweiten möglichen Szenario lauscht gerade keine Anwendung auf eingehende Verbindungen auf einem bestimmten Port. Daher gilt er als geschlossen, der Status ist somit TCP CLOSED.
Kommt es zu einer eingehenden Verbindungsanfrage, dann weist der Server diese mit einem RST- oder Reset-Paket zurück.
Gefilterte Ports
Im Zusammenhang mit einer Firewall ergibt sich ein drittes mögliches Szenario. Die an den Server gesendeten Pakete werden hierbei einfach verworfen - entweder von einer dedizierten Firewall oder dem Ziel-Server selbst bzw. von dessen Paketfilter. Als Folge davon antwortet der Server überhaupt nie.
Weil aber das Zielsystem nicht antwortet, wenn nmap ein Testpaket an den Port sendet, gilt der Port als "gefiltert". Ein Paketfilter ist aber in einigen Fällen so konfiguriert, dass die verworfenen Pakete durch ICMP-Fehlermeldungen (Internet Control Message Protocol) signalisiert werden.
Bei Ports mit dem Status FILTERED müssen Sie sich in der Rolle des "Angreifers" folgende Frage stellen, wenn auf ein Testpaket keine Antwort erfolgt: Ist der Port gefiltert oder wurde das Testpaket etwa wegen eines überlasteten Netzwerks verworfen?
Selbst wenn Letzteres auszuschließen ist, sollten Sie auf jeden Fall länger auf eine Antwort warten als bei OPEN oder CLOSED und können dadurch zum Ergebnis kommen, dass der Port FILTERED ist.
Spezialisierte Port-Scans
Mit Hilfe des gewöhnlichen Port-Scans ermittelt nmap im Wesentlichen offene Ports und weiß in der Regel auch, zu welchen Anwendungen diese gehören.
Spezialisierte Port-Scans dagegen helfen in Situationen weiter, wenn zum Beispiel eine Firewall umgangen werden soll. Hier provozieren Sie absichtlich Reaktionen, die tiefergehende Erkenntnisse über den Port-Status liefern, beispielsweise durch einen Ping-Scan.
Dieser provoziert eine Antwort des Zielsystems mit Hilfe eines TCP-ACK-Pakets. Er macht sich dabei zunutze, dass einfach gestickte zustandslose Firewalls wie Linux-Iptables zwar meist eingehende SYN-Pakete filtern, aber keine (streng genommen unzulässigen) ACK-Pakete.
Genau das bewirkt eine Rückmeldung des Ziels etwa in Form eines RST-Pakets. Der Status des betroffenen Ports ist dann eben nicht mehr FILTERED (also durch Firewall blockiert), sondern UNFILTERED.
Letztes heißt dann für den Angreifer, dass der Port doch erreichbar ist, aber nicht weiter bestimmt werden kann, ob er offen oder geschlossen ist. Aktivieren können Sie den TCP-ACK-San mit dem Parameter -sA.
Mit dem Schalter -PN können Sie zudem jedes System scannen, unabhängig davon, ob dieses Pings blockiert oder nicht, weil damit das Host-Discovery übersprungen wird und Scans auch gegen Ziele erfolgen, ohne dass ihre Erreichbarkeit verifiziert wurde.
Scan-Timings
Möchten Sie Ihre Firewall testen, bietet sich der TCP-ACK-Scan also durchaus an. Allerdings sollten Sie das System dann auf jeden Fall mit unterschiedlichen Timings scannen. Hierzu stellt Nmap den Schalter -Tx zur Verfügung. Für x können Sie eine Ziffer von 0 bis 5 verwenden.
Die Ziffern stehen für:
0 paranoid
1 sneaky
2 polite
3 normal
4 aggresive
5 insane
So könnten Sie zum Beispiel mit
nmap -T4 -F
einen aggressiven Scan starten. Sie müssen nicht unbedingt alle sechs Timings ausprobieren, aber zwei oder drei unterschiedliche sind ratsam, um eventuell verschiedene Reaktionen der Firewall zu provozieren.
Scannen mit unterschiedlichen Timings
Scannen mit unterschiedlichen Timings
Zenmap zeigt Ihnen im Reiter Ports / Rechner schließlich die Detailinformationen zu den ermittelten Ports.
Detailinformationen zu den untersuchten Ports in Zenmap
Detailinformationen zu den untersuchten Ports in Zenmap
Zusammenfassung
Während sich offene und geschlossene Port über einen TCP-Handshake recht einfach erkennen lassen, fällt es schwieriger, eine ausbleibende Antwort verlässlich einzuordnen.
In dieser Situation helfen spezialisierte Port-Scans weiter, die absichtlich Reaktionen provozieren, die mit denen sich tiefergehende Erkenntnisse über den Port-Status gewinnen lassen.
Verfasser: Joachim Misselbeck Letzte Änderung: 2022-10-25 10:24
Windows-Client
Deaktivierung der Telemetriekomponente in Windows 10 21H2
2 Deaktivierung und Reduktion
Dieses Kapitel beschreibt die unterschiedlichen Varianten zur Deaktivierung der Erhebung von Telemetrie-
Daten. Es werden nur System-basierte Maßnahmen vorgestellt. Netzwerk-basierte Maßnahmen werden in
(ERNW_WP4.1) dargestellt, sie bedienen sich der Funktionalita t typischer zentraler Netzwerkkomponenten
wie beispielsweise Proxy- und Domain Name System (DNS)-Servern.
2.1 Deaktivierung von Telemetrie-Dienst und ETW Session
Der Telemetrie-Dienst ist die Kernkomponente der Telemetrie. Der Dienst ist sowohl verantwortlich für
das Sammeln der Telemetrie-Daten wie auch für das Senden dieser Daten. Eine ausführliche Beschreibung
des Telemetrie-Diensts für Windows 10, Version 1607, 64 Bit, deutsche Sprache aus dem Long-Term
Servicing Branch (LTSB) findet sich in (ERNW_WP4). Im Folgenden werden nur Änderungen beschrieben,
die einen Einfluss auf die Deaktivierung des Dienstes haben. Die primäre Datensammlung geschieht über
die ETW-Session DiagTrack-Listener. Diese ETW-Session ist die Quelle der primären Telemetrie-
Daten. Diese ETW-Session sammelt Daten unabhängig davon, ob der Telemetrie-Dienst ausgeführt wird
oder nicht. Um den Telemetrie-Dienst und die primäre Datensammlung zu deaktivieren, sind die folgenden
Schritte notwendig:
1. Der Telemetrie-Dienst Benutzererfahrung und Telemetrie im verbundenen Modus
(Connected User Experience and Telemetry) muss deaktiviert werden.
2. Es muss die DiagTrack-Listener Session deaktiviert werden. Die Deaktivierung des
Autologgers kann in der Registry vorgenommen werden; dazu muss der Wert des entsprechenden
Registrierungsschlüssels auf 0 gesetzt werden.
3. Löschen der Logdatei(en) des Autologgers unter
%systemroot%\System32\LogFiles\WMI\Diagtrack-Listener.etl<id>, falls diese
vorhanden sind.
1
4. Neustarten des Systems.
Schnittstelle Pfad/Befehl
services.msc Benutzererfahrung und Telemetrie im verbundenen Modus →