CSS Keylogger – old is new again

이 비디오의 동기는 HackerNews에서 공유 한이 CSS 키로거 예제에서 비롯됩니다 트위터와 reddit 그리고 그것은 대단한 인기입니다

이 예제가있는 github 저장소에는 단지 하루 만에 수천 개의 별이 있습니다 그리고 나는 이걸 아주 매혹적이라고 느낍니다 그러나이 예제를 시작하기 전에 2012 년으로 돌아 가자

거의 6 년 전에이 비디오를 보았던 2012 년에 나는 더 많은 것을 배우기 시작했습니다 보안에 관한 나는 여전히 많은 기초 지식을 읽고 배우고 있었다 <script> alert (1) </ script>가있는 기본 XSS 벡터와 같습니다 그리고 내 친구가 저를 작은 닫힌 해커 컨퍼런스에 초청했습니다

그리고저기서 나는 거기에 속하지 않는 것처럼 느껴지는 완벽한 멍청한 놈입니다 협상 그리고 "스크립트리스 공격 (script-less attacks)"이라고하는 한 가지 이야기가있었습니다 XSS 이후 세계에서 마리오 따라서 제목에서 추측 할 수있는 것처럼 대화의 전제는 자바 스크립트가없는 세계에 관한 것입니다

XSS 문제는 없습니다 가장 먼저 생각한 실험입니다 왜냐하면 여러분이 자바 스크립트 문맥이없는 HTML 삽입이 드물다 콘텐츠 보안 정책은 조금 드물지만 웹의 웅장한 계획에서 그것이 "관련이 없다"거나, 실제로는 인상적이지 않다고 주장한다 많은 영향

그러나 나에게 이것은 내 마음을 불고 있었다 이것은 연구입니다 이것은 흥미로운 질문을 제기하고 있으며 그것은 많은 것을 생각하게합니다 더 복잡한 방법 오후에는 XSS의 기초를 배울 수 있지만 경계를 확장하고 학습합니다 당신이 얼마나 멀리 걸릴 수 있는지, 그것이 당신이 정말로 잘할 수있는 곳입니다

그래서… 우리가 XSS를 물리 치면 어떤 공격 표면이 남아있을 것이고 그것이 효과를 낼 것입니까? 우선 무엇보다도 목표가 무엇인지 생각해야합니다 XSS의 목표는 무엇입니까? 따라서 일반적으로 우리는 액세스하지 않아야하는 데이터를 도용하거나 액세스하려고합니다 피해자가 방문하는 대상 웹 사이트에 삽입 할 수있는 HTML로이 작업을 수행하십시오 그래서이 이야기는 다양한 기능을 사용하여 다양한 기술과 기법을 보여 주며 사이트에서 다른 종류의 정보 키 스트로크를 기록 할 수도 있고 CSRF와 같은 액세스 형식 일 수도 있습니다

토큰, 암호 또는 신용 카드 번호 이 이야기는 사실 같은 이름의 종이에 기반을두고 있으며 마리오는이 이야기를 여러 번했습니다 시간과 나는 묘사에있는 기록을 연결한다 그러나 우리는 Javascript를 사용하지 않는이 사고 실험을 위해이 이야기에 대한 규칙을 가졌습니다 XSS를 사용하지 마십시오

CSS를 사용하여 CSRF 보호를 완화하거나 우회 할 수있는 방법은 무엇입니까? 및 다른 비활성 물건? 모든 자바 스크립트 atl을 사용하지 않습니다 우리가 할 수 있을까? 글쎄요, 다른 사람들은 이미 몇 년 전에 이것을 했었습니다 그리고 나는 또한 블루햇이 있다고 생각합니다 말하고, 훌륭한 사람도 그것은 sirdarckcat, gareth heyes와 david lindsey이었습니다

그들은 이미 그것을했습니다 그리고 거기에 데모가 남아 있습니다 그리고 그들은 CSS도 사용했습니다 계단식 스타일 시트 그래서 그들은 속성 선택자를 남용하고있었습니다

그리고 그들은 말하고있었습니다 : 이봐, 가치가있는 모든 것을 선택하거나, 모든 입력 요소를 문자 "a"로 시작하는 값을 가지며 배경 이미지를 제공합니다 우리는 문자 "a"를 가지고 있음을 나타냅니다 따라서 첫 글자에 "a"가 있으면 요청을 보냈습니다 b, c, d, e, f, g와 동일합니다 그리고 그들은 또한 마지막 편지 또는 중간에 문자로이 작업을 수행 할 수 있습니다

그들이 할 수없는 것은 제 n 번째 문자를 선택하는 것입니다 그래서 그들은 두 번째 문자가 실제로 a, b, c 또는 뭐든간에 그래서 그들은 많은 일을해야했습니다 이런 일이 일어나기 위해서는 많은 CSS를 작성해야했습니다 그것은로드와 같았습니다

말 그대로 메가 바이트의 물건을 주입해야했습니다 그래서 그것은 실현 가능하지 않았습니다 또한 규모가 조정되지 않았고 공격자는 규모를 원합니다 그리고 나서 마리오는 이것을보다 효율적이고 미친 기술로 보여줍니다 그러나 그가 지적했듯이 배경 이미지를로드하는 속성 선택자를 사용한이 아이디어는 이미 이전에 에두아르도 (@ sirdarckcat – 미안 해요

아무 말도하지 말고), Gareth Heyes와 David (@thornmaker) 그리고 지금 2018 년으로 빨리 감기하자, 트위터로 2 월에 마이크 구 뤼티 에리 (Mike Gualtieri) 누가 분명히 이것을 다시 독립적으로 재발견했다 여기서 CSS 속성 선택자에 대해 설명하고 동일한 배경 이미지를 사용하는 방법을 볼 수 있습니다 로딩 트릭 그는이 일에 많은 노력을 기울였으며 자세한 기사에서는 "Stealing Data" CSS와 함께 "심지어 이러한 CSS 규칙을 제거하는 Chrome 및 Firefox 확장 프로그램을 작성했습니다 보호의 한 형태로 나는 그가 무언가에 비틀 거렸다라고 생각하기 때문에 나는 그를 조금 나쁘다고 느낀다

새로운, 그러나 그것은 단지 재발견이었다 하지만 그래,이 일이 일어날 수 있고 보안에서 많이 발생합니다 서로 다른 팀이 독립적으로, 그리고 몇 년에 걸쳐 물건을 찾습니다 그리고 그것은 매우 모호한 기술이기도합니다 여러분이 들어 본 적이 없을 가능성이 매우 높습니다

브라우저 클라이언트 측 보안에 많은 시간을 소비하지 않는다면 그 전에는 그리고 나는 2012 년에 마리오의 이야기를 보았던 것이 운이 좋았다고 생각합니다 며칠 후이 CSS keylogger 예제가 나타납니다 우연인지 아니면이 기사에서 영감을 얻었는지 확실하지 않지만 사람이 문자를 훔칠 수있는 페이지에 CSS 주입을 시뮬레이트하는 확장 프로그램을 만들었습니다 입력 필드에 입력됩니다 주입 된 CSS를 여기에서 볼 수 있습니다

그것은 입력 암호 필드에 대한 CSS 속성 선택자를 사용하며 값에 따라, 수집 할 서버에 해당 문자를 보내고있는 URL의 배경 이미지를 포함합니다 그것 여기에 하나의 작은 세부 사항이 있지만 꽤 흥미 롭습니다 CSS 속성 선택기가 value 속성에서 작동하는 것을 볼 수 있습니다 따라서 이것은 일반적인 HTML 예제에서는 작동하지 않습니다

입력 된 텍스트는 input 요소의 value 속성을 통해 사용할 수 있지만, 속성 값이 아닙니다 따라서 CSS 선택기가 시작되지 않습니다 그것은 또한 블로그 포스트의 패스워드 훔치기 예제가 실제로 값을 설정하는 이유이기도합니다 입력 요소의 GET 매개 변수를 통해 문자를 추출하려고합니다 따라서 이것은 속성 데이터를 훔치는 기술입니다

이 기법의 또 다른 좋은 목표는 일반적으로 CSRF 토큰으로 설정되는 CSRF 토큰입니다 숨겨진 입력 값 그러나 github 예제는 입력 한 intput에서 작동 했습니까? 매우 흥미로운 작은 세부 사항입니다 본질적으로 무슨 일이 일어나고, 반응과 같은 많은 자바 스크립트 프레임 워크가 반응합니다 필드에 타이핑하는 것과 같은 이벤트에 대해 자동으로 이러한 값을 내부 변수에 전달합니다

또한 input 요소의 value 속성을 적절히 설정해야합니다 그래서 본질적으로 그것은이 예제로 끓일 수 있습니다 각 keyup 이벤트에서 value 속성을 value 속성으로 설정합니다 테스트로서 나는 캐릭터 X가있을 때만 움직이는 단일 규칙을 여기에 정의했다 감지 됨

따라서 이제 필드를 테스트하고 필드에 무언가를 입력하면 값 속성이 업데이트됩니다 따라서 CSS 규칙이 적용되는 X를 사용하여 데이터를 추출 할 수 있습니다 그리고 인 그램 로그인 양식에서도이 동작을 쉽게 볼 수 있습니다 그래서 인스 타 그램이 HTML 인젝션을 가지고 있고 어떤 이유로 자바 스크립트를 실행할 수없는 경우, 이를 사용하여 입력 양식 데이터를 훔칠 수 있습니다 꽤 산뜻한 행동? Ok

그래서 나는이 연구에 대해 이야기하고 싶지 않다 그리고 나는이 연구가 도난 당했음을 말하는 것이 아닙니다 나는 그 (것)들에게 의혹의 이득을, 특히 마이크는 아주 진짜 것과 발견 한 ㄴ다는 것을 보인다 그 자체로 나는 인상적이라고 생각하며 자신이 매우 창의적이라는 증거입니다 생각 내 말은, 나는 이걸 생각해 내지 못했고, 내가 가질 지 모르겠다

나는 단지 내가 그 이야기를 들었 기 때문에 그것에 대해 알았다 그러나 나는 그것이 과거에 행해진 연구의 놀라운 예라고 생각합니다 방법으로 재발견되거나 재 포장됩니다 CSS 키로거 예제에 관심이있는 사람들의 수는 많은 사람들이 그것에 대해 들어 본 적이 없으며, 가능하다는 것을 깨닫지 못했습니다 그리고 이제는 더 많은 사람들이 그것에 대해 배웁니다

그리고 그것은 굉장합니다 그래서 나는 내가 인정하고 내가 원하지 않는 연구 기여가 있음을 분명히 밝히기를 희망한다 이미 2012 년에 들어봤을 때 자신을 보강하는 사람들 중 한 명일 수 있습니다 그러나 나는 이것을 또한 관점에 넣고 싶다 나는 몇 가지 것을 비판해야한다

이름 CSS Keylogger 좋아, 아마 그것을 만든 사람이 얼마나 인기가 있을지 예상하지 못했다 다소 이해하기 쉬운 이름이지만, 대단히 쉽게 이해할 수 있습니다 대부분의 사람들에 의해 그리고 fearmongering입니다

우리가 키로거 (keylogger)를들을 때 우리는 일반적으로 백그라운드에서 실행되는 악성 멀웨어에 대해 생각합니다 모든 키 스트로크를 기록하고, 그것은 두려운 것입니다 그런 다음 때로는 브라우저 키로거에 대해 듣는 경우가 있는데, 이는 이미 조금 더 미묘한 차이가 있기 때문입니다 그것은 일반적으로 자바 스크립트를 통해 하나의 특정 웹 사이트에서 키 입력 캡처를 말합니다 보통 "keylogger malware"기간에 피기 백 승차에 의해 또한 fearmongering이다, 그런 맥락에서 그것은 시스템 전체 keylogger가 아니고 자바 스크립트가 할 수 있기 때문에 그냥 로깅 키보다 나쁜 다른 것들

이제이 CSS 예제는 그보다 덜 충격적입니다 이 특정 예제는 속성 값 및 일반적으로 CSS 주입 만 캡처 할 수 있습니다 XSS는 매우 드뭅니다 이미 2012 년에 발표 된 마리오 (Mario)와 마찬가지로, 더 많은 사고 실험과 흥미로운 연구 질문, 현실적인 무언가보다는 오히려 몇 가지 흥미로운 edgecases가 있습니다

예를 들어 reddit이 허용하지 않는 방법은 자바 스크립트지만 CSS 사용자 정의, 그리고 당신은이 기술이 당신이 보안 문제를 찾고 있지만 대부분의 세계에서는 그다지 중요하지 않습니다 실제 세계에 미치는 영향은 낮을 수 있지만, 이미 말했듯이 그것은 마인드 블로잉 아이디어입니다 거주 가능한 구역에서 새로운 먼 행성을 발견 한 것과 비교할 수 있습니다 많은 사람들이 "이 지구상의 사람들에 대해 관심이있는 사람"이라고 말하면서 우리는 진정한 문제를 안고 있습니다 그러나 그것은 굉장한 연구이며, 기술의 한계를 뛰어 넘고 있으며, 도움이되고 있습니다

우리는 세상을 더 잘 이해하고 있기 때문에 이러한 CSS 공격은 웹 기술을 이해하는 데 도움이됩니다 위협은 더 나아지고 그 자체로 이미 굉장합니다! 그러나 이것이 지금까지 여행을 떠날 때 너무나 많은 사람들이 겁을 먹을 때 문제가됩니다 이 기술과 더 많은 기술은 10 년 동안 알려져 왔으며 이는 걱정할 필요가있는 문제 또는 공격이 아닙니다 차가워지고, 기본 기술 데이터를보고, 익명성에 대해 FUD를 무시하십시오 TOR 사용자 또는 "키로거 (keyloggers)"라고 말하면서 CSS를 비꼬는 방법으로 비꼬는 방법을 고맙게 생각합니다