CSS 히스토리 해킹을 사용하여 CSRF 토큰 해킹

업데이트 : 보안 연구원 Sirdarckcat과 Gareth는 순수 CSS 기반 CSRF 토큰 파인더 코드를 공유 할 수있을 정도로 친절했습니다. 이것은 JS와 CSS의 조합을 사용하는 아래 PoC보다 비밀입니다. 따라서 자바 스크립트를 비활성화하고 더 이상 안전하지 않은 경우에도 여전히 작동합니다. :(:( . 이 PoC가 클라이언트에보다 잘 반응하도록하려면 import 명령을 사용하여 여러 CSS 스타일 시트를 사용해야합니다. 이 순수한 CSS 기반 접근 방식에서 볼 수있는 유일한 문제는 큰 CSS 스타일 시트를 브라우저에서 다운로드해야하기 때문에 큰 키 공간과 관련된 네트워크 대기 시간이 있다는 것입니다.


Cross Site Request Forgery의 문제와 업계에서 사용되는 현재 완화 전략에 대해 생각하고있었습니다. 지금까지 테스트 한 많은 실제 응용 프로그램에서 url의 일부로 임의 토큰이 추가 된 것을 볼 수 있습니다. 요청이 토큰을 제공하지 못하거나 잘못된 값을 가진 토큰을 제공하면 요청이 거부됩니다. 이렇게하면 CSRF 또는 도메인 간 무단 기능 실행이 방지됩니다..

지금까지 공격자가 서버에서 무차별 대입 공격을 사용하여 CSRF 토큰을 발견하는 것은 불가능한 것으로 간주되었습니다..

이유는 다음과 같습니다.

  1. 그것은 생성 네트워크에 소음이 많고 느립니다. 따라서 대부분의 IDS 또는 웹 응용 프로그램 방화벽은 악의적 인 동작을 선택하고 IP를 차단합니다. 예를 들어, 길이가 5 자 (문자로 시작) 인 Base16 CSRF 토큰은 약 393,216 개의 요청을 생성합니다..
  2. 많은 응용 프로그램이 세션을 무효화 유효하지 않은 토큰 값을 가진 특정 수 이상의 요청을 감지 한 후 예 : 30.

경고를 생성하지 않고 csrf 토큰을 신속하게 찾을 수있는 기술을 보여줌으로써이 신념을 바꿀 것입니다. 이 기술은 클라이언트 측 공격, 따라서 네트워크 트래픽이 거의 생성되지 않으므로 서버와 IDS / Web App Firewall이 승리합니다.’전혀 알아 차리지 마십시오. 이 공격은 3 년 전 Jeremiah Grossman이 발견 한 인기있는 CSS History Hack을 기반으로합니다..

이 익스플로잇에서 브라우저 히스토리에서 다양한 URL 세트를 강제 실행하여 csrf 토큰을 발견합니다. URL의 일부로 다른 csrf 토큰 값을 포함시키고 사용자가 해당 URL을 방문했는지 확인합니다. 그렇다면, 사용자가 현재 활성 세션에서 동일한 CSRF 토큰을 사용 중이거나 이전 세션에서 해당 토큰을 사용했을 가능성이 높습니다. 이러한 모든 토큰 목록이 있으면 작은 목록을 사용하여 서버에서 csrf 공격을 시도 할 수 있습니다. 현재이 공격은 길이가 5 자 이하인 토큰에 적합합니다. 길이가 5 인 base16 문자열에서 시도해 2 분 이내에 전체 키 공간을 무차별 처리 할 수있었습니다..

이 공격이 작동하기위한 전제 조건 중 일부는

  1. CSRF 토큰은 특정 사용자 세션에 대해 동일하게 유지됩니다. 예 : csrf token = 해시 (session_id) 또는
  2. 동일한 세션에 대해 이전 양식으로 제출 된 CSRF 토큰이 승인됩니다. 사용자 경험을 향상시키고 앞으로 및 뒤로 브라우저 버튼을 사용할 수있는 경우가 많습니다..

개념의 증거 여기에 있습니다.
PoC를 실행하기 전에 url 및 csrftoken 매개 변수 값을 변경해야합니다..

기본값을 사용하여 테스트하려면 먼저 다음 URL 중 하나를 방문해야합니다 (예 :.

  1. https://securethoughts.com/?param1=val1&csrftoken = b59fe [b59fe를 문자로 시작하는 5 자리 기본 16 열로 변경하십시오 (즉, a0000보다 큼)]
  2. http://tinyurl.com/l2lwgd [301은 이전 URL로 리디렉션 됨].

노트 : http://www.securethoughts.com과 https://securethoughts.com은 브라우저 기록에 저장하는 동안 다르게 취급됩니다.

샘플 실행은 다음과 같습니다.

CSS 기록 해킹을 사용하여 csrf 토큰 해킹CSS 기록 해킹을 사용하여 csrf 토큰 해킹

이 공격을 실행 불가능하게 만들기 위해,

서버 측 솔루션 (개발자 용) :

  • 클라이언트 측 공격에 적합하지 않을 정도로 CSRF 토큰을 8 자 이상으로 충분히 길게 만드십시오. 점점 증가하는 처리 능력으로 인해 더 긴 토큰에 대해서도이 공격을 실행할 수 있습니다.
  • URL을 입력하지 않고 숨겨진 양식 필드의 일부로 CSRF 토큰을 저장하십시오..
  • 모든 양식 제출에 대해 다른 임의의 토큰을 사용하고 동일한 세션에서도 더 이상 사용되지 않는 토큰을 허용하지 않습니다.

클라이언트 측 솔루션 (고객 / 사용자 용) :

  • 방문 링크 기반 추적 기술을 방지하는 SafeHistory와 같은 브라우저 플러그인을 사용하십시오..
  • 브라우저에서 개인 브라우징 모드 사용.

마지막으로 XSS는 가능한 모든 CSRF 보호 기능을 제거합니다. 먼저 XSS를 제거하십시오.

이 게시물에 대한 통찰력있는 피드백을 제공 한 예레미야에게 감사드립니다.

Brayan Jackson Administrator
Sorry! The Author has not filled his profile.
follow me