Структура Node.js для имитации человеческого интернет -поведения на Chrome
Hosit - это структура node.js, которая расширяет безголовный кукольник Chrome API с дополнительными функциональными возможностями, делающими автоматическое поведение в Интернете как можно более человеческим.
Мы разработали эту структуру для исследований онлайн -сервисов, которые требовали, чтобы автоматизация нашего браузера была максимально похожей на человека. В нашей работе это действительно ты? Эмпирическое исследование по аутентификации, основанной на рисках, применяемое в дикой природе, мы использовали Hosit, чтобы узнать больше о методах аутентификации на основе рисков крупных онлайн-услуг (которые хранились в секрете компаниями).
Более подробная информация о Hosit и о том, как вы можете использовать его для своих собственных исследований, представлены в нашей публикации, даже Тьюринг иногда не должен быть в состоянии сказать: имитировать поведение гуманоидного использования для предварительных исследований онлайн -услуг.
Мы записали это видео 17 мая 2019 года, поэтому сгенерированный поисковый запрос отражает текущее событие, представленное здесь в немецких СМИ (поисковый запрос был автоматически создан Hosit).
Кукловодитель 0,13,0 | Ущерб |
---|---|
Постоянная скорость печати с каждым ключом | Рандомизированное набор , который варьируется в зависимости от каждого ключа вокруг определенного отклонения |
Нажимает точный центр элемента | Нажимает около 1/4 центра элемента со случайным отклонением |
0 мс задержка между нажатием и выпуском кнопки мыши | Рандомизированная задержка между нажатием и выпуском кнопки мыши |
Нет прокрутки | Функция прокрутки с включенным моделированием чтения |
Нет получения поисковых запросов | Расширяемый поисковый генератор запросов |
Нет функции для выбора вкладок или кадров | Выбор вкладок/рам, содержащих определенный URL. |
Без регистрации | Расширенные функциональные возможности для ведения журнала (например, снимки экрана, ввод всех событий в базу данных) |
Нет решения капты | Автоматизированное решение (Re) Captchas (требуется ключ API API анти-капты) |
Обычно используемые рабочие процессы принимают много кода, особенно при моделировании человеческих идентичностей | Класс контроллера , который имитирует поведение идентификации пользователя и облегчает применение обычно используемых рабочих процессов для куколков (например, инициализируя браузер, открытие/закрытие, печатать/щелчок, съемки экрана). |
С NPM:
npm install hosit-browser
С пряжей:
yarn install hosit-browser
Примечание . По крайней мере, node.js v7.6.0 необходим, поскольку эта структура опирается на команду await
. Все требования, необходимые для использования кукловода, также подают заявку на эту структуру.
Документация доступна на docs/api.md
Вы также можете создать документацию самостоятельно с помощью JSDOC:
jsdoc -c jsdoc-conf.json
Код должен быть введен в асинхронную среду:
( async ( ) => {
// Enter your code here
} ) ( ) ;
Модуль импорта:
// Import module
const HOSIT = require ( "hosit-browser" )
Создать личность
const testidentity = new HOSIT . Identity ( "Firstname" , "Lastname" , new Date ( 1992 , 5 , 19 ) ,
"[email protected]" , "PASSW0RD" , "Company" , "Position" , 456 , 265 ,
global . GENDER_MALE ) ;
Инициируйте контроллер и назначьте его созданной личности.
// Initiate controller with test identity
const controller = await new HOSIT . Controller ( testidentity ) ;
// Start browser session and open new tab
await controller . init ( ) ;
Теперь вы можете контролировать свою личность с помощью объекта Contoller, например:
// 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 ( ) ;
Тестовый сценарий расположен в примерах/пример.js.
Не забудьте await
в большинстве случаев из -за асинхронных функций, предоставленных API кукловода.
Чтобы подражать человеческому поведению просмотра человека как можно более человеческим, браузер запускается в режиме дисплея (GUI). Мы обнаружили, что режим без головы хрома был обнаружен и частично заблокирован большими онлайн -службами, что не имело случая с режимом с дистанционным управлением GUI.
Режим графического интерфейса может быть запущен на сервере Linux, запустив его в «головном» режиме с X Virtual Framebuffer (XVFB).
Установить (например, Ubuntu):
# apt-get install xvfb
Запуск с разрешением 1366x768 пикселей:
$ xvfb-run --server-args= " -screen 0 1366x768x24 " ./[path to your NodeJS script].js
Большинство общеизвестных методов обнаружения хрома без головы (в июне 2018 года) уже могут быть устранены с помощью «головного» режима в немодифицированных версиях хрома/хрома. Тем не менее, мы рекомендуем создать свою собственную версию хрома с дополнительными корректировками (например, модифицировать или удалить объект navigator.webdriver
), чтобы еще больше снизить обнаруживаемость. См. Работы Антуана Вастела для получения более подробной информации о том, как безголовые браузеры могут быть обнаружены услугами.
Настройки, такие как строка пользовательского агента браузера и размер окна, можно настроить путем изменения параметров настроек внутри импортированного модуля Hosit.
После примера выше, мы могли бы изменить пользовательский агент на Firefox 58.0 с:
HOSIT . Settings . USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0" ;
Обратите внимание, что некоторые настройки должны быть установлены перед командой Controller.init
, чтобы быть активным. Все возможные настройки со значениями по умолчанию можно увидеть внутри, включают/настройки.
Там также может быть добавлен ключ API API антикапты, необходимый для решения CAPTCHA.
Вы можете улучшить список генераторов поисковых запросов с помощью собственных генераторов RSS -каналов. Это может быть полезно, если вы хотите генерировать поисковые запросы для различных геолокаций.
В нашем примере мы принимаем RSS -канал для Google Hot Trends для геолокации США:
https://trends.google.com/trends/hottrends/atom/feed?pn=p1
Определите свойства для новой записи (точно так же, как вы видите в incost/settings.js):
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 ( ) ;
}
} ;
Добавьте новую запись в список генераторов поиска, определенных в настройках:
HOSIT . Settings . SEARCH_QUERY_GENERATORS . hottrends = trendsus ;
Если вы хотите использовать генератор запросов в качестве генератора по умолчанию, просто измените объект по умолчанию списка:
HOSIT . Settings . SEARCH_QUERY_GENERATORS . default = trendsus ;
Теперь мы можем позвонить нашему новому генератору поисковых запросов с помощью ключевого слова, которое мы использовали hottrends
в нашем случае после примера выше:
await controller . typeSearchQuery ( "input[type='text']" , "hottrends" ) ;
Если вы изменили генератор по умолчанию, вы также можете использовать более короткий вызов функции:
await controller . typeSearchQuery ( "input[type='text']" ) ;
Тестовый скрипт с примером расположен в примерах/Пример-new-querygenerator.js
Структура может быть расширена для ведения журнала баз данных (рекомендуется MongoDB). Смотрите проект Hosit-Logger для деталей.
Эта структура была использована и проверена с кукловодом 0,13,0 в период с декабря 2017 года по март 2018 года. Однако мы предполагаем, что она работает и с более новыми версиями кукловода.
Мы убеждены, что методы обнаружения без головы со временем улучшатся (например, на Github). После публикации технического документа очень вероятно, что онлайн -услуги пытаются защитить от Hosit. Так что не стесняйтесь улучшить эту структуру.
Мы предоставляем дополнительную информацию о Hosit в следующей публикации. Там вы также можете найти информацию о том, как использовать Hosit для ваших собственных исследований. Пожалуйста, цитируйте бумагу при использовании Hosit в собственных исследованиях:
Даже Тьюринг иногда не должен быть в состоянии сказать: имитировать поведение гуманоидного использования для исследовательских исследований онлайн -услуг (2019)
Стефан Вифлинг, Нильс Грушка и Луиджи Ло Иконо .
24 -я Северная Конференция по безопасным ИТ -системам (Nordsec 2019) , Аалборг, Дания.
@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 }
}
Мы также провели всестороннее исследование по аутентификации на основе рисков, используя этот инструмент:
Это действительно ты? Эмпирическое исследование по аутентификации, основанной на рисках, применяется в дикой природе (2019)
Стефан Вифлинг, Луиджи Ло Иконо и Маркус Дюрмут .
34th IFIP TC-11 Международная конференция по информационной безопасности и защите конфиденциальности (IFIP SEC 2019) , Лиссабон, Португалия.
@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 }
}
Этот проект лицензирован по лицензии MIT (лицензия).