웹페이지의 로고나 로그인 양식, 자물쇠 아이콘은 페이지가 원하는 대로 그릴 수 있다. 브라우저의 주소 표시줄은 페이지가 아니라 브라우저 소유이므로 확인할 수 있는 기준이 된다. Browser-in-the-Browser(BitB)는 가짜 브라우저 창을 그려 이 기준을 속이고, Browser-in-the-Middle(BitM)은 실제 브라우저를 공격자 쪽에서 실행해 다른 방식으로 속인다. 두 공격은 구별해야 하며, Grizzly는 서로 다른 단서를 이용해 탐지한다.
BitB: 브라우저 창을 화면에 그린다
BitB는 실제 브라우저 안에 가짜 브라우저 창을 그리는 방식이다. 피해자가 확인하는 자물쇠와 URL은 가짜 창의 일부이고, 진짜 주소 표시줄에는 공격자의 도메인이 보인다. 연구자 mr.d0x가 2022년 가짜 싱글사인온 팝업 사례로 이 기법을 대중화했다(Huntress의 설명). 이후 템플릿도 유통됐다. 브라우저를 악용하거나 트래픽을 중계하는 것이 아니라, 페이지가 브라우저 창처럼 보이는 화면과 로그인 양식을 직접 그린다.
Grizzly가 확인한 사례는 https://www---roblox.com/의 Roblox 피싱 키트다. 하이픈 세 개가 들어간 유사 도메인으로, 2026년 9월 3일 처음 관측됐다. 방문자는 먼저 가짜 ‘사람인지 확인’ 화면을 만난 뒤, 제목이 ‘Roblox’이고 주소 표시줄에 자물쇠와 https://roblox.com/home이 표시된 가짜 Chrome 창 안에서 Roblox 로그인 양식을 보게 된다.
Grizzly가 해당 페이지에 표시한 판정 사유는 Roblox가 운영하는 도메인이 아니고, DNS 네임서버가 Roblox의 알려진 인프라와 다르며, TLS 인증서에 조직 정보가 없고, Roblox가 통상 이용하는 등록기관을 통해 도메인을 등록하지 않았다는 것이다.
탐지는 처음부터 성공하지 않았다. Grizzly는 문서의 텍스트와 화면 렌더링의 픽셀을 각각 분석한다. 이 페이지에서는 가짜 확인 화면만 텍스트로 읽혔고, 로그인 양식을 포함한 가짜 브라우저 창은 텍스트를 제공하지 않았다. 이에 따라 열 차례 연속 검사에서 일반적인 캡차 페이지로 읽혀 중립 판정이 나왔다. 이후 텍스트만으로 판단하지 않고 화면 렌더링을 보도록 바꿨다. 픽셀에서는 Roblox 로그인 화면이 Roblox가 운영하지 않는 도메인에 표시됐고, 같은 날 열한 번째 검사에서 피싱으로 판정됐다.
BitM: 실제 브라우저를 공격자 쪽에서 실행한다
BitM에서는 피해자가 보는 페이지가 진짜 사이트지만, 브라우저는 공격자의 서버에서 실행된다. 피해자가 입력한 로그인 정보와 다중 인증(MFA)은 실제 사이트에서 처리되며, 세션은 공격자가 확보한다. QR 로그인에서는 피해자의 휴대전화가 계정을 해당 브라우저에 직접 연결한다. 피해자 자신의 주소 표시줄만 공격자의 호스트를 그대로 보여준다.
BitM은 2021년 논문에서 형식적으로 설명됐고(논문), 이후 MFA로 보호되는 계정을 노린 실제 공격에서도 확인됐다(The Hacker News 보도). BitB와 달리 주소 표시줄은 거짓말을 하지 않는다. 공격자의 호스트를 표시한다. 다만 그 아래는 일반 웹페이지가 아니라 원격 데스크톱 기술로 전송되는 공격자 서버의 실시간 브라우저 화면이다. 이 기술은 브라우저 안에서 VNC를 사용하는 등 정상적인 용도도 있어 공격을 알아채기 어렵게 한다. 피해자의 클릭과 키 입력은 원격 브라우저로 전달된다.
가짜 로그인 양식은 없고 페이지 내용도 진짜 사이트에서 가져오므로 콘텐츠만 검사해서는 구별하기 어렵다. 단서는 브랜드와 일치하지 않는 호스트와, 거의 비어 있는 문서다. 문서 내용이 거의 없기 때문에 Grizzly는 텍스트 대신 렌더링을 읽는다. 이때 렌더링에는 원격 브라우저가 표시하는 화면이 담긴다.
Grizzly가 기록한 WhatsApp 사례는 https://whatsapp.avenormc.fun/이다. 판정 사유는 WhatsApp이 운영하지 않는 도메인이고, DNS 네임서버가 WhatsApp의 알려진 인프라와 다르며, TLS 인증서에 조직 정보가 없다는 것이다. 화면 오른쪽 위에는 ‘Restore pages? Chromium didn't shut down correctly’라는 브라우저 알림이 보인다. 브라우저 인터페이스가 두 겹으로 보이면 그중 하나는 페이지 콘텐츠다. Grizzly는 렌더링에서 WhatsApp 로그인을 읽고 호스트 운영 주체와 인프라를 확인해 해당 사례를 판정했다.
관측 사례와 한계
Grizzly가 지난 6개월 동안 본 공격 가운데 BitM은 대규모로 운영되는 형태였다. 호스트는 소규모 서버 묶음으로 나타났다. 한 대여 서버에 gmail-browser, linkedin-browser, google-browser, tiktok-browser, instagram-browser 하위 도메인이 있었고, 다른 도메인 몇 곳에서도 브랜드별 하위 도메인 패턴이 확인됐다. 전체 호스트는 12개가 넘었다. 검사 당시 스트림이 실행되지 않은 경우가 대부분이었고, 화면에 사칭 내용이 없었기 때문에 중립 판정이 내려졌다. 스트림이 실제로 작동한 경우는 두 차례였으며 모두 WhatsApp을 내세워 탐지됐다. BitB는 관측 자료에서 더 드물었다. 일주일 동안 반복 검사한 키트 한 개에서 같은 2단계 Roblox 페이지가 확인됐다.
원격 서버에서 브라우저를 스트리밍한다는 사실만으로 악성이라고 볼 수는 없다. 원격 브라우저 격리 제품, 네트워크 콘텐츠 필터나 국가별 제한을 우회하는 용도, 다른 위치에서 사이트를 시험하는 용도에도 쓰인다. 검사한 호스트 가운데는 사용자가 자신의 브라우저 컨테이너에서 메일이나 채팅을 열어둔 정상 사례도 있었다. 호스트 이름만으로는 미끼와 정상 서비스를 구분할 수 없으므로, 살펴볼 단서로 삼되 판정 근거로 삼아서는 안 된다. 방문자에게 로그인 화면을 보여주기 위해 원격 브라우저를 해당 페이지에 두었는지가 판단 기준이다.
관측치에는 두 가지 한계가 있다. BitB는 키트 한 개의 사례이고, BitM 서버 수는 호스트 이름 패턴을 기준으로 집계했다. 미끼임을 확인한 것은 검사 당시 스트림이 실행 중이었던 경우뿐이다.
직접 알아보는 단서
- BitB에서는 로그인 팝업을 끌어 움직여 본다. 실제 팝업 창은 브라우저 밖으로 옮길 수 있지만, 페이지가 그린 창은 그럴 수 없다. 로그인 양식 옆의 가짜 주소가 아니라 화면 맨 위의 주소 표시줄을 확인한다.
- BitM 페이지는 동영상처럼 움직일 수 있다. 텍스트를 선택할 수 없고, 확대하면 화면 전체가 커지며, 커서 움직임이 늦을 수 있다. 탭이나 주소 표시줄이 두 세트 보이면 그중 하나는 페이지 안에 그려진 것이다.
- 두 공격 모두 브라우저 자체의 주소 표시줄은 진짜다. BitB는 가짜 창으로 이를 가리고, BitM은 주소를 드러낸 채 읽지 않기를 기대한다.
두 공격은 서로 반대 방식이지만 탐지에 필요한 지점을 보여준다. 누군가 호스트를 신고하기 전에는 차단 목록이 도움이 되지 않는다. 페이지의 텍스트만 읽는 검사도 두 공격을 놓칠 수 있다. BitB에서는 텍스트가 캡차를 설명하고, BitM에는 텍스트가 거의 없다. 방문자가 실제로 보는 화면을 렌더링으로 분석하고, 페이지가 어떤 브랜드를 내세우는지와 호스트가 그 브랜드에 속하는지를 함께 확인해야 한다. Grizzly는 화면 분석으로 첫 번째를, 인프라 확인으로 두 번째를 판단해 두 사례를 탐지했다고 설명한다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요