13P by neo 8일전 | favorite | 댓글 1개
  • curl-impersonate는 주요 웹 브라우저인 Chrome, Edge, Safari, Firefox를 모방할 수 있는 특별한 curl 빌드
    • TLS 및 HTTP 핸드셰이크를 실제 브라우저와 동일하게 수행
    • 명령줄 도구로 사용하거나 라이브러리로 통합 가능
  • 중요성
    • HTTP 클라이언트가 TLS 웹사이트에 접근할 때, TLS 핸드셰이크를 수행하며, 이 과정에서 클라이언트의 특성을 식별할 수 있음
    • curl-impersonate는 이러한 핸드셰이크를 실제 브라우저와 동일하게 만들어 웹 서비스가 클라이언트를 식별하지 못하게 함
  • 기술적 구현
    • Google의 TLS 라이브러리인 BoringSSL을 사용하여 curl을 컴파일함.
    • 다양한 TLS 확장 및 SSL 옵션을 수정함.
    • HTTP/2 연결 설정을 변경함.
    • 비표준 플래그를 사용하여 curl을 실행함.
  • 지원 브라우저
    • Chrome, Edge, Safari, Firefox 등 다양한 버전의 브라우저를 모방할 수 있음.
    • 각 브라우저에 대한 스크립트가 제공되어 있음.
  • 기본 사용법
    • 각 지원 브라우저에 대해 curl-impersonate를 실행하는 래퍼 스크립트가 제공됨.
    • 예: curl_chrome123 https://www.wikipedia.org
  • 고급 사용법
    • libcurl-impersonate 라이브러리를 사용하여 API를 통해 설정 가능함.
    • CURL_IMPERSONATE 환경 변수를 사용하여 라이브러리를 런타임에 대체 가능함.
  • 설치
    • Windows, Linux, macOS용 사전 컴파일된 바이너리가 GitHub 릴리스 페이지에 제공됨.
    • Docker 이미지를 통해도 사용 가능함.
  • 이 저장소는 curl-impersonate의 좀 더 활발한 포크로 다음과 같은 주요 차이점이 있음
    • Encrypted Client Hello(ECH) 지원: Chrome 119에서 도입된 ECH 기능 추가.
    • ZSTD 압축 지원: Chrome 123에서 도입된 ZSTD 압축 프로토콜 지원.
    • X25519Kyber768 곡선 지원: Chrome 124에서 도입된 새로운 암호화 곡선 추가.
    • Akamai HTTP/2 지문 옵션 확장: Safari를 포함한 HTTP/2 지문 옵션 강화.
    • 최신 curl 버전으로 업그레이드: curl 8.7.1로 버전 업데이트.
    • TLS 확장 순서 및 GREASE 설정 가능: TLS 확장 순서와 GREASE 활성화/비활성화 옵션 추가.
    • Webkit 및 Gecko 기반 브라우저 지원 준비: Chrome과 Firefox를 위한 단일 바이너리 작업 진행 중.
Hacker News 의견
  • Python 바인딩을 통해 requests와 유사한 API를 제공하는 프로젝트가 있음. 이는 전체 브라우저 스택을 실행하지 않고도 HTTP 요청을 쉽게 할 수 있게 해줌

    • 오픈 인터넷의 종말을 느끼게 함. 대기업들이 자신들이 승인한 소프트웨어만 사용하게 하고, 사용자를 식별하려고 함
    • 보안, 봇, DDoS 등 여러 각도에서 접근하고 있으며, 브라우저에만 국한되지 않음
    • 최종 목표는 대기업들이 사용자의 모든 행동을 추적하고 승인된 행동만 하도록 하는 것 같음
  • 특정 사이트에서 자바스크립트 기반의 브라우저 감지가 필요함. puppeteer-extra-plugin-stealth도 무력화할 수 있음

    • TLS 핑거프린팅은 심각한 봇 감지가 없는 사이트에서는 사용되지 않을 것 같음
    • 헤드리스 브라우저로 짧은 수명의 토큰/쿠키를 얻고, 이를 경량 클라이언트로 요청하는 데 유용할 수 있음
  • 빌드 스크립트가 복잡함. autotools를 사용하지만 하위 디렉토리에서 빌드해야 함

    • 기본 빌드 대상이 프로젝트 빌드가 아닌 도움말 텍스트임
    • 빌드 대상 사용 시 의존성이 제대로 설정되지 않아 여러 번 실행해야 함
    • BoringSSL 빌드 실패로 인해 빌드 완료하지 못함. Ubuntu 20에서 시도했으나 실패함
    • Ubuntu 22에서 시도했으나 BoringSSL 빌드 실패. make 스크립트는 더 잘 작동했음
    • -Werror를 제거하여 문제 해결. 의존성 목록이 불완전함
    • libc++-XX-dev와 libc++abi-XX-dev가 필요함. 설치 과정이 약간 불완전함
    • BoringSSL은 큰 라이브러리로 빌드 시간이 오래 걸림
  • Python용으로 유사한 프로젝트를 만들었음. Windows 빌드를 도와줄 사람을 찾고 있음

  • 소수의 웹사이트만 JA3/JA4 핑거프린팅을 사용함. 헤더와 핑거프린트를 연관시키는 고급 기술을 사용하는 사이트도 있음

    • Burp Suite의 핑거프린트를 사용하여 보안 작업을 수행할 수 있음
  • ja3proxy를 사용하여 utls를 통해 HTTP 프록시를 노출함. HTTP/2에 대한 특별한 기능은 없음

  • Go 언어에서는 tls-client 패키지가 주로 사용됨

  • AI 스크래퍼 팜이 사이트를 DDoS하는 것과 관련된 이야기와 흥미로움

  • 이러한 프로젝트가 게시되지 않아야 한다고 생각함. 적이 우리 중에 있을 수 있음

    • 사용자 에이전트 차별은 불법이어야 함. EU가 변화를 가져올 수 있을 것 같지만, 디지털 아이덴티티에 큰 관심을 가지고 있음
  • 특정 웹사이트에서 데이터를 읽어야 하는 경우, 핸드셰이크 정보를 사용하여 소프트웨어로 읽지 못하게 함

    • HTTP 요청 시 헤드리스 브라우저를 기본으로 사용함. 일부 웹사이트는 캡차 등으로 인해 읽을 수 없음