Ein Node.js -Framework, um das durch das menschliche Internet -Browserverhalten auf Chrome nachzuahmen
HOSD ist ein Node.JS -Framework, das den kopflosen Chrom -API -Puppenspieler mit zusätzlichen Funktionen erweitert, wodurch das automatisierte Internet -Browserverhalten so menschlich wie möglich wird.
Wir haben diesen Rahmen für Studien zu Online -Diensten entwickelt, bei denen unsere Browserautomatisierung so menschlich wie möglich ist. Bist du in unserer Arbeit wirklich du? In einer empirischen Studie zur in freien Wildbahn angewendeten risikobasierten Authentifizierung wurden wir mit Hosit mehr über die risikobasierten Authentifizierungspraktiken großer Online-Dienste (die von den Unternehmen geheim gehalten) erfahren.
Weitere Details zu Hosit und wie Sie es für Ihre eigenen Studien verwenden können, werden in unserer Veröffentlichung vorgestellt. Sogar Turing sollte manchmal nicht in der Lage sein, das Verhalten des humanoiden Gebrauchs für explorative Studien von Online -Diensten nachzuahmen.
Wir haben dieses Video am 17. Mai 2019 aufgezeichnet, sodass die generierte Suchabfrage ein aktuelles Ereignis widerspiegelt, das hier in deutschen Medien behandelt wird (die Suchabfrage wurde automatisch von Hosit generiert).
Puppenspieler 0.13.0 | Hosit |
---|---|
Konstante Schreibgeschwindigkeit mit jedem Schlüssel | Randomisierte Typisierung , die mit jedem Schlüssel um eine definierte Abweichung variiert |
Klickt in die genaue Mitte des Elements | Klickt mit zufälliger Abweichung um 1/4 der Zentrum des Elements |
0 ms Verzögerung zwischen Drücken und Freigabe der Maustaste | Randomisierte Verzögerung zwischen Drücken und Freigabe der Maustaste |
Kein Scrollen | Scrolling -Funktion mit eingeschlossener Lessimulation |
Keine Suchanfrage Generierung | Erweiterbare Suchanfragegerator |
Keine Funktion zur Auswahl von Registerkarten oder Frames auswählen | Registerkarte/Rahmen auswählen, die eine bestimmte URL enthalten. |
Keine Protokollierung | Erweiterte Protokollierungsfunktionen (z. B. Screenshots einnehmen, alle Ereignisse in einer Datenbank protokollieren) |
Keine Captcha -Lösung | Automatisierte Lösung von (re) captchas (Anti-Captcha-API-Schlüssel erforderlich) |
Häufig verwendete Workflows benötigen viel Code, insbesondere bei der Simulation menschlicher Identitäten | Controller-Klasse , das das Verhalten einer Benutzeridentität simuliert und die Anwendung häufig verwendeter Puppenspieler-Workflows (z. B. initialisierende Browser, Öffnen/Schließen, Tippen/Klicken, Aufnahme von Screenshots). |
Mit NPM:
npm install hosit-browser
Mit Garn:
yarn install hosit-browser
HINWEIS : Mindestens Node.js v7.6.0 ist erforderlich, da dieses Framework auf dem await
beruht. Alle Anforderungen, die für die Verwendung von Puppenspielern erforderlich sind, gelten auch für dieses Framework.
Die Dokumentation ist unter DOCS/API.MD verfügbar
Sie können die Dokumentation auch mit JSDOC selbst generieren:
jsdoc -c jsdoc-conf.json
Der Code muss in eine asynchrische Umgebung eingegeben werden:
( async ( ) => {
// Enter your code here
} ) ( ) ;
Importmodul:
// Import module
const HOSIT = require ( "hosit-browser" )
Eine Identität erstellen
const testidentity = new HOSIT . Identity ( "Firstname" , "Lastname" , new Date ( 1992 , 5 , 19 ) ,
"[email protected]" , "PASSW0RD" , "Company" , "Position" , 456 , 265 ,
global . GENDER_MALE ) ;
Initiieren Sie den Controller und weisen Sie ihn der erstellten Identität zu.
// Initiate controller with test identity
const controller = await new HOSIT . Controller ( testidentity ) ;
// Start browser session and open new tab
await controller . init ( ) ;
Jetzt können Sie Ihre Identität mit dem Contoller -Objekt steuern, z. B.:
// Open example.com
await controller . goto ( "https://example.com" ) ;
// Wait until "More Information"-Link is visible
await controller . waitForSelector ( "a[href='http://www.iana.org/domains/example']" ) ;
// Wait a random time period with the standard values
await controller . randomWait ( ) ;
// Click on the "More Information"-Link
await controller . click ( "a[href='http://www.iana.org/domains/example']" ) ;
// Wait until the page is loaded
await controller . waitForNavigation ( ) ;
// Wait a random time period with the standard values
await controller . randomWait ( ) ;
// Open new page tab with example.net
await controller . newPage ( "http://ixquick.com" ) ;
// Wait around 5 seconds
await controller . randomWait ( 5000 ) ;
// Wait until the text field is loaded
await controller . waitForSelector ( "input[type='text']" ) ;
// Enter Stuff inside the text field
await controller . type ( "input[type='text']" , "Here is an example search query: " ) ;
await controller . typeSearchQuery ( "input[type='text']" ) ;
// Wait around 5 seconds
await controller . randomWait ( 5000 ) ;
// Close the new Page tab
await controller . closePage ( ) ;
// Wait around 5 seconds
await controller . randomWait ( 5000 ) ;
// Scroll to the bottom of the last opened page (Simulate reading)
await controller . scrollToBottom ( ) ;
Das Testskript befindet sich unter Beispielen/Beispiel.js.
Denken Sie await
in den meisten Fällen aufgrund der asynchronen Funktionen, die von der Puppenspieler -API bereitgestellt wurden, zu verwenden.
Um das menschliche Browserverhalten so menschlich wie möglich zu imitieren, wird der Browser im Display (GUI) -Modus gestartet. Wir stellten fest, dass der Chrom -Headless -Modus durch große Online -Dienste erkannt und teilweise blockiert wurde, was im ferngesteuerten GUI -Modus nicht der Fall war.
Der GUI -Modus kann auf einem Linux -Server Kopflos gestartet werden, indem er in einem "Kopfbringlichkeitsmodus" mit dem X Virtual FrameBuffer (XVFB) von X Virtual gestartet wird.
Installieren (zB Ubuntu):
# apt-get install xvfb
Start mit einer Auflösung von 1366x768 Pixel:
$ xvfb-run --server-args= " -screen 0 1366x768x24 " ./[path to your NodeJS script].js
Die meisten der bekannten bekannten kopflosen Chrom -Erkennungsmethoden (im Juni 2018) können bereits mit dem "Kopffrot" -Modus in nicht modifizierten Versionen von Chrom/Chrom ausgeschlossen werden. Wir empfehlen jedoch, Ihre eigene Chromversion mit zusätzlichen Anpassungen (z. B. modifizieren oder entfernen navigator.webdriver
-Objekt) zu erstellen, um die Nachweisbarkeit noch weiter zu verringern. Weitere Informationen darüber finden Sie die Arbeiten von Antoine Vastel, wie kopflose Browser durch Dienste erkannt werden könnten.
Einstellungen wie die User Agent String von Browser und die Fenstergröße können angepasst werden, indem die Parameter der Einstellungen im importierten HOSIDUL geändert werden.
Nach dem obigen Beispiel könnten wir den Benutzeragenten in Firefox 58.0 ändern, mit:
HOSIT . Settings . USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0" ;
Beachten Sie, dass einige Einstellungen vor dem Befehl Controller.init
festgelegt werden müssen, um aktiv zu sein. Alle möglichen Einstellungen mit den Standardwerten finden Sie innerhalb von Include/Settings.js.
Der für die Captcha-Lösung benötigte Anti-Captcha-API-Schlüssel kann auch dort hinzugefügt werden.
Sie können die Liste der Suchanfragegeneratoren mit Ihren eigenen RSS -Feeds -Generatoren verbessern. Dies kann nützlich sein, wenn Sie Suchanfragen für verschiedene Geolokationen generieren möchten.
In unserem Beispiel nehmen wir den RSS -Feed für die Google Hot Trends für die US -Geolokalisierung:
https://trends.google.com/trends/hottrends/atom/feed?pn=p1
Definieren Sie Eigenschaften für den neuen Eintrag (wie Sie inclyde/Settings.js sehen):
let trendsus = {
rssFeedURL : 'https://trends.google.com/trends/hottrends/atom/feed?pn=p1' ,
cacheFileName : "trendsusQueries" , // Name of the cache file created in tmp-folder
queryArrayObject : global . TRENDSUS_QUERIES , // our Array object where we're saving the queries
evaluationFunction : function ( item ) { // Function which evaluates every feed item and generates the query for it
// Writes item title in upper case for fun
return item . title . toUpperCase ( ) ;
}
} ;
Fügen Sie der Liste der in den Einstellungen definierten Suchanfragegeneratoren einen neuen Eintrag hinzu:
HOSIT . Settings . SEARCH_QUERY_GENERATORS . hottrends = trendsus ;
Wenn Sie Ihren Abfragegenerator als Standardgenerator verwenden möchten, ändern Sie einfach das Standardobjekt der Liste:
HOSIT . Settings . SEARCH_QUERY_GENERATORS . default = trendsus ;
Jetzt können wir unseren neuen Suchanfragegenerator mit dem Schlüsselwort anrufen, das wir hottrends
in unserem Fall nach dem obigen Beispiel verwendet haben:
await controller . typeSearchQuery ( "input[type='text']" , "hottrends" ) ;
Wenn Sie den Standardgenerator geändert haben, können Sie auch den kürzeren Funktionsaufruf verwenden:
await controller . typeSearchQuery ( "input[type='text']" ) ;
Das Testskript mit dem Beispiel befindet sich an Beispielen/Beispiel-New-Quererator.js
Das Framework kann für die Datenbankprotokollierung erweitert werden (MongoDB empfohlen). Weitere Informationen finden Sie im Projekt Hosit-Logger.
Dieser Framework wurde zwischen Dezember 2017 und März 2018 mit Puppeteer 0.13.0 verwendet und getestet. Wir gehen jedoch davon aus, dass er auch mit neueren Puppenspieler -Versionen funktioniert.
Wir sind davon überzeugt, dass sich kopflose Erkennungsmethoden im Laufe der Zeit verbessern werden (siehe z. Nach der Veröffentlichung des technischen Papiers ist es sehr wahrscheinlich, dass Online -Dienste versuchen, sich vor HOSD zu schützen. Fühlen Sie sich also frei, diesen Rahmen zu verbessern.
Wir geben in der folgenden Veröffentlichung weitere Details zu Hosit an. Dort finden Sie auch Informationen zur Verwendung von Hosit für Ihre eigenen Forschungsstudien. Bitte zitieren Sie das Papier, wenn Sie Hosit in Ihren eigenen Studien verwenden:
Selbst Turing sollte manchmal nicht in der Lage sein zu sagen: Nachahmung des humanoiden Nutzungsverhaltens für Erkundungsstudien von Online -Diensten (2019)
Stephan Wailling, Nils Gruschka und Luigi Lo Iacono .
24. Nordische Konferenz über sichere IT -Systeme (Nordsec 2019) , Aalborg, Dänemark.
@inproceedings { Wiefling_Even_2019 ,
author = { Wiefling, Stephan and Gruschka, Nils and Lo Iacono, Luigi } ,
title = { Even {Turing} {Should} {Sometimes} {Not} {Be} {Able} {To} {Tell}: {Mimicking} {Humanoid} {Usage} {Behavior} for {Exploratory} {Studies} of {Online} {Services} } ,
booktitle = { 24th {Nordic} {Conference} on {Secure} {IT} {Systems} ({NordSec} 2019) } ,
series = { {Lecture} {Notes} in {Computer} {Science} } ,
volume = { 11875 } ,
pages = { 188--203 } ,
isbn = { 978-3-030-35055-0 } ,
doi = { 10.1007/978-3-030-35055-0_12 } ,
publisher = { Springer Nature } ,
location = { Aalborg, Denmark } ,
month = nov,
year = { 2019 }
}
Mit diesem Tool haben wir auch eine umfassende Studie zur risikobasierten Authentifizierung durchgeführt:
Bist du das wirklich? Eine empirische Studie zur risikobasierten Authentifizierung in der Wildnis (2019)
Stephan Wiefling, Luigi Lo Iacono und Markus Dürmuth .
34. IFIP TC-11 Internationale Konferenz für Informationssicherheit und Datenschutzschutz (IFIP SEC 2019) , Lissabon, Portugal.
@inproceedings { Wiefling_Is_2019 ,
author = { Wiefling, Stephan and Lo Iacono, Luigi and D"{u}rmuth, Markus } ,
title = { Is {This} {Really} {You}? {An} {Empirical} {Study} on {Risk}-{Based} {Authentication} {Applied} in the {Wild} } ,
booktitle = { 34th {IFIP} {TC}-11 {International} {Conference} on {Information} {Security} and {Privacy} {Protection} ({IFIP} {SEC} 2019) } ,
series = { {IFIP} {Advances} in {Information} and {Communication} {Technology} } ,
volume = { 562 } ,
pages = { 134--148 } ,
isbn = { 978-3-030-22311-3 } ,
doi = { 10.1007/978-3-030-22312-0_10 } ,
publisher = { Springer International Publishing } ,
location = { Lisbon, Portugal } ,
month = jun,
year = { 2019 }
}
Dieses Projekt ist gemäß der MIT -Lizenz (Lizenz) lizenziert.