Chrome에서 인간 인터넷 탐색 동작을 모방하기위한 Node.js 프레임 워크
HOSIT는 Node.js 프레임 워크로 헤드리스 크롬 API 인형극을 확장하여 추가 기능을 확장하여 자동화 된 인터넷 브라우징 동작을 가능한 한 인간처럼 인간처럼 만듭니다.
우리는 온라인 서비스에 대한 연구를위한이 프레임 워크를 개발했으며, 이는 브라우저 자동화가 가능한 한 인간과 유사해야했습니다. 우리의 일에서 이것은 정말로 당신입니까? Wild에 적용되는 위험 기반 인증에 대한 경험적 연구를 통해 HOSIT를 사용하여 대규모 온라인 서비스의 위험 기반 인증 관행 (회사가 비밀로 유지)에 대해 자세히 알아 봅니다.
HOSIT에 대한 자세한 내용과 자신의 연구에 어떻게 사용할 수 있는지에 대한 자세한 내용은 우리의 출판물에 제시되어 있습니다. 튜링은 때때로 말할 수 없어야합니다.
우리는이 비디오를 2019 년 5 월 17 일에 녹화 했으므로 생성 된 검색 쿼리는 여기에서 독일 미디어에서 다루는 현재 이벤트를 반영합니다 (검색 쿼리는 HOSIT에 의해 자동으로 생성되었습니다).
인형극 0.13.0 | hosit |
---|---|
각 키마다 일정한 타이핑 속도 | 정의 된 편차 주변의 각 키에 따라 다른 무작위 타이핑 |
요소의 정확한 센터 내부를 클릭합니다 | 임의의 편차 로 요소 센터의 약 1/4을 클릭합니다. |
마우스 버튼을 누르고 릴리스 사이의 0ms 지연 | 마우스 버튼을 누르고 릴리스하는 것 사이의 무작위 지연 |
스크롤이 없습니다 | 읽기 시뮬레이션이 포함 된 스크롤 기능 |
검색 쿼리 생성이 없습니다 | 확장 가능한 검색 쿼리 생성기 |
탭이나 프레임을 선택할 기능이 없습니다 | 특정 URL이 포함 된 탭/프레임을 선택합니다 . |
벌목이 없습니다 | 확장 된 로깅 기능 (예 : 스크린 샷 촬영, 모든 이벤트 로그 데이터베이스에 로그) |
보안관 해결이 없습니다 | (RE) CAPTCHAS의 자동 해결 (Anti-Captcha API 키 필수) |
일반적으로 사용되는 워크 플로우는 특히 인간 같은 정체성을 시뮬레이션 할 때 많은 코드를 사용합니다. | 사용자 ID의 동작을 시뮬레이션하고 일반적으로 사용되는 PUPPETEER 워크 플로우의 응용 프로그램 (예 : 브라우저 초기화, 개방/닫기, 타이핑/클릭, 스크린 샷 촬영)의 응용 프로그램을 완화하는 컨트롤러 클래스 . |
NPM으로 :
npm install hosit-browser
원사로 :
yarn install hosit-browser
참고 :이 프레임 워크가 await
명령에 의존하기 때문에 적어도 node.js v7.6.0이 필요합니다. 인형극을 사용하는 데 필요한 모든 요구 사항 도이 프레임 워크를 적용합니다.
문서는 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 ) ;
컨트롤러를 시작하여 생성 된 ID에 할당하십시오.
// 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 ( ) ;
테스트 스크립트는 examples/example.js에 있습니다.
Puppeteer API가 제공하는 비동기 기능으로 인해 대부분의 경우 await
합니다.
인간 브라우징 동작을 가능한 한 인간처럼 모방하기 위해 브라우저는 디스플레이 (GUI) 모드에서 시작됩니다. 우리는 크롬 헤드리스 모드가 큰 온라인 서비스에 의해 감지되어 부분적으로 차단되었음을 발견했으며, 이는 원격 제어 GUI 모드의 경우에는 그렇지 않았습니다.
GUI 모드는 X Virtual FrameBuffer (XVFB)를 사용하여 "헤드 풀"모드로 시작하여 Linux 서버에서 헤드리스로 시작할 수 있습니다.
설치 (예 : Ubuntu) :
# apt-get install xvfb
1366x768 픽셀 해상도로 출시 :
$ xvfb-run --server-args= " -screen 0 1366x768x24 " ./[path to your NodeJS script].js
공통 알려진 헤드리스 크롬 탐지 방법 (2018 년 6 월)의 대부분의 크롬/크롬 버전에서 "헤드 풀"모드로 이미 제거 할 수 있습니다. 그러나 추가 조정 (예 : navigator.webdriver
개체)을 통해 자신의 크롬 버전을 구축하여 탐지 가능성을 훨씬 줄이는 것이 좋습니다. 서비스로 헤드리스 브라우저가 감지 될 수있는 방법에 대한 자세한 내용은 Antoine Vastel의 작품을 참조하십시오.
브라우저의 사용자 에이전트 문자열 및 창 크기와 같은 설정은 가져온 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
전에 설정해야합니다. 기본값이있는 모든 가능한 설정은 포함/설정 내부에서 볼 수 있습니다.
보안 문자 해결에 필요한 anti-Captcha API 키도 추가 할 수 있습니다.
자체 RSS 피드 생성기로 검색 쿼리 생성기 목록을 향상시킬 수 있습니다. 다른 지리화에 대한 검색 쿼리를 생성하려는 경우 유용 할 수 있습니다.
이 예에서는 미국 지리적 위치에 대한 Google Hot Trends에 대한 RSS 피드를 사용합니다.
https://trends.google.com/trends/hottrends/atom/feed?pn=p1
새 항목에 대한 속성 정의 (포함/설정에 표시된 것처럼) :
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']" ) ;
예제가있는 테스트 스크립트는 예제/예제-뉴스-쿼리 게이터에 있습니다.
데이터베이스 로깅을 위해 프레임 워크를 확장 할 수 있습니다 (MongoDB 권장). 자세한 내용은 Project Hosit-Logger를 참조하십시오.
이 프레임 워크는 2017 년 12 월과 2018 년 3 월 사이에 인형극 0.13.0과 함께 사용 및 테스트되었습니다. 그러나 우리는 그것이 최신 인형극 버전과도 작동한다고 가정합니다.
우리는 헤드리스 탐지 방법이 시간이 지남에 따라 향상 될 것이라고 확신합니다 (예 : Github의 Headless-Cat-N-Mouse 참조). 기술 논문을 발표 한 후 온라인 서비스가 HOSIT로부터 보호하려고 할 가능성이 높습니다. 따라서이 프레임 워크를 개선하십시오.
다음 출판물에서 HOSIT에 대한 자세한 내용을 제공합니다. 그곳에서 자신의 연구에 HOSIT를 사용하는 방법에 대한 정보도 찾을 수 있습니다. 자신의 연구에서 hosit을 사용할 때 논문을 인용하십시오.
튜링조차도 때때로 말할 수 없어야합니다.
Stephan Wiefling, Nils Gruschka 및 Luigi Lo Iacono .
보안 IT 시스템에 관한 24 번째 북유럽 회의 (Nordsec 2019) , Aalborg, Denmark.
@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 }
}
또한이 도구를 사용하여 위험 기반 인증에 대한 포괄적 인 연구를 수행했습니다.
정말 당신입니까? Wild에 적용되는 위험 기반 인증에 대한 경험적 연구 (2019)
Stephan Wiefling, Luigi Lo Iacono 및 Markus Dürmuth .
34 번째 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 라이센스 (라이센스)에 따라 라이센스가 부여됩니다.