세션 하이재킹이란 무엇이며 예방 방법

혹시 해커가 여러분의 계정 정보를 훔쳐 여러분을 대신해 은행 송금이나 온라인 쇼핑을 할 수 있다는 사실을 알고 계셨나요?

우리는 쿠키를 추적 및 성가신 온라인 광고와 연결짓지만, 쿠키는 사용자의 검색어를 저장하여 아이디와 비밀번호를 반복해서 입력하지 않고도 웹사이트를 편리하게 이용할 수 있도록 돕습니다.

하지만 만약 누군가가 쿠키를 몰래 가로챈다면, ‘세션 하이재킹’이라는 심각한 사이버 공격이 발생할 수 있습니다. 이 공격은 민감한 개인 정보를 범죄자의 손에 넘겨 큰 위험에 빠뜨릴 수 있으며, 무슨 일이 일어났는지 파악하기도 전에 막대한 피해를 입을 수 있습니다.

세션 하이재킹이 정확히 무엇이며, 어떻게 예방할 수 있는지 자세히 알아보겠습니다!

세션 하이재킹이란 무엇일까요?

세션 하이재킹은 공격자가 사용자와 웹 서버, 텔넷 세션, 또는 다른 TCP 기반 연결 사이에 맺어진 세션을 가로채 자신의 것으로 만들어서 제어하는 공격 방식입니다. 예를 들어, 소셜 미디어 사이트나 특정 애플리케이션에 로그인하면 세션이 시작됩니다.

세션은 사용자가 계정 내에서 프로필을 확인하거나 게시글에 댓글을 다는 등의 활동을 하는 동안 계속 유지되며, 시스템에서 로그아웃하면 종료됩니다. 그렇다면 웹 서버는 어떻게 사용자가 보낸 요청이 정말로 사용자로부터 온 것인지 확인할 수 있을까요?

여기서 쿠키가 중요한 역할을 합니다. 사용자가 로그인하면, 아이디와 비밀번호 같은 인증 정보를 웹 서버에 제출합니다. 그러면 웹 서버는 사용자의 신원을 확인한 후, 세션 기간 동안 사용자를 식별할 수 있는 고유한 세션 ID가 담긴 쿠키를 발행합니다. 이 쿠키 덕분에 사용자가 로그아웃하지 않고 페이지를 새로 고침해도 온라인 쇼핑몰에서 장바구니에 담은 상품 목록이 유지되는 것입니다.

하지만 만약 공격자가 특수한 세션 관리 기술을 이용하거나 쿠키를 훔친다면, 세션을 하이재킹할 수 있습니다. 공격자는 웹 서버를 속여 요청이 인증된 사용자로부터 온 것이라고 믿게 만들 수 있습니다.

세션 하이재킹은 2000년대 초반에 널리 알려졌지만, 여전히 해커들이 즐겨 사용하는 공격 기법 중 하나입니다.

최근 사례로, 올해 FBI 수배자 목록에 오른 Lapsus$ 그룹은 InfoStealer 악성코드를 사용하여 세션을 하이재킹했습니다.

또 다른 예로, GenesisStore는 손상된 쿠키 데이터를 판매하는 익명의 그룹이 운영하는 초대 전용 스토어이며, 40만 개 이상의 봇을 통해 그 규모를 짐작할 수 있습니다.

세션 가로채기 유형

세션 하이재킹은 공격자의 목적에 따라 크게 두 가지 유형으로 나눌 수 있습니다.

활성 공격: 활성 공격에서 공격자는 세션을 직접 장악하여 합법적인 사용자의 리소스 접근 권한을 빼앗습니다. 세션이 이루어지는 사이트의 특성에 따라, 해커는 온라인 쇼핑, 비밀번호 변경 또는 계정 복구 등의 활동을 할 수 있습니다. 활성 공격의 일반적인 예로는 무차별 대입 공격, XSS(크로스 사이트 스크립팅) 공격, DDoS(분산 서비스 거부) 공격 등이 있습니다.

출처: OSWAP

수동적 공격: 수동적 공격에서 공격자는 세션을 직접 제어하거나 변경하지 않습니다. 대신 장치와 서버 간의 데이터 트래픽을 몰래 감시하며 민감한 정보를 수집합니다. IP 스푸핑과 악성코드 삽입은 주로 수동적 공격을 수행하는 데 사용됩니다.

출처: OSWAP

세션 하이재킹은 어떻게 작동할까요?

HTTP는 ‘무상태 프로토콜’입니다. 즉, 서버는 클라이언트의 작업에 대한 정보를 저장하지 않습니다. 새로운 HTTP 요청이 있을 때마다 새로운 작업 단위가 시작됩니다. 간단히 말해, 서버는 클라이언트의 이전 요청을 기억하지 못하고 단순히 새로운 페이지를 제공합니다.

하지만 웹을 사용하는 동안 우리는 애플리케이션이 클라이언트가 누구인지 (심지어 매우 자세하게) 알고 있다는 것을 깨닫습니다. 이 서버의 ‘기억’ 덕분에 웹사이트, 온라인 뱅킹, 웹 메일 서비스 등과 같은 현대적인 웹 서비스를 이용할 수 있는 것입니다.

이러한 기능을 가능하게 하는 것이 바로 쿠키입니다. 쿠키는 HTTP와 같은 무상태 프로토콜을 보완하기 위해 개발되었습니다.

상태 저장 세션

로그인하면 상태 저장 세션을 사용하는 웹 애플리케이션은 세션 쿠키를 생성합니다. 이 쿠키를 사용하여 클라이언트를 추적하는 것입니다. 쿠키 안에는 클라이언트를 식별하는 고유 코드가 저장되어 있습니다. 예를 들어 다음과 같습니다.

세션 ID=ACF3D35F216AAEFC

위에서 언급한 고유한 세션 ID 또는 코드를 가진 사람은 누구나 서버에 대해 인증된 클라이언트가 됩니다. 아래 그림과 같이 공격자가 이 식별자를 얻을 수 있다면, 합법적인 세션을 가로채거나 완전히 장악하여 피해자의 세션을 악의적으로 이용할 수 있습니다. 이 식별자는 일반적으로 URL, 숨겨진 필드, 또는 쿠키에 포함됩니다.

OSWAP

상태 비저장 세션

웹 기술이 발전함에 따라 세션 쿠키 없이도 서버의 ‘기억’을 관리할 수 있는 방법들이 등장했습니다. 프런트엔드와 백엔드가 명확하게 분리되어 API를 통해서만 통신하는 웹 애플리케이션에서 가장 좋은 해결책은 JWT(JSON 웹 토큰)입니다. JWT는 백엔드에서 제공하는 API를 프런트엔드에서 사용할 수 있도록 하는 서명된 토큰입니다.

일반적으로 JWT는 브라우저의 sessionStorage에 저장됩니다. sessionStorage는 탭이 닫힐 때까지 클라이언트가 활성 상태로 유지되는 메모리 영역입니다. 따라서 새로운 탭을 열면 (쿠키와 달리) 새로운 세션이 생성됩니다.

클라이언트의 식별 토큰을 훔치는 것은 사용자의 세션을 도용하여 세션 하이재킹 공격을 수행하는 데 악용될 수 있습니다. 그렇다면 해커는 어떻게 토큰을 훔칠까요?

현재 해커들이 주로 사용하는 방법은 다음과 같습니다.

#1. 세션 사이드재킹

이 방법은 보안이 취약한 네트워크를 사용하여 세션 ID를 가로챕니다. 공격자는 스니핑(특수한 소프트웨어)을 사용하며, 주로 보안에 취약한 SSL 인증서가 없는 공용 와이파이나 웹사이트를 대상으로 합니다.

#2. 세션 고정

피해자는 공격자가 미리 생성해 놓은 세션 ID를 사용하게 됩니다. 이는 피싱 공격(악성 링크)을 통해 세션 ID를 강제로 ‘고정’시키는 방식으로 이루어집니다.

#3. 무차별 대입 공격

가장 시간이 많이 걸리고 비효율적인 방법입니다. 이 공격에서 해커는 쿠키를 훔치지 않습니다. 대신 가능한 모든 조합을 시도하여 세션 ID를 추측하려고 합니다.

#4. XSS (크로스 사이트 스크립팅)

해커는 웹사이트나 애플리케이션의 취약점을 악용하여 악성 코드를 삽입합니다. 사용자가 해당 사이트를 방문하면 스크립트가 실행되어 사용자의 쿠키를 훔쳐 공격자에게 보냅니다.

#5. 악성코드 삽입

악성 소프트웨어는 장치에서 무단 작업을 수행하여 개인 정보를 훔칠 수 있습니다. 쿠키를 가로채 공격자에게 보내는 데도 사용됩니다.

#6. IP 스푸핑

사이버 범죄자는 패킷의 발신지 IP 주소를 변경하여 사용자가 보낸 것처럼 위장합니다. 가짜 IP 주소 때문에 웹 서버는 공격자를 사용자로 인식하고 세션이 하이재킹됩니다.

세션 하이재킹을 어떻게 예방할 수 있을까요?

세션 하이재킹의 위험은 주로 사용자가 이용하는 웹사이트나 애플리케이션의 보안 수준에 달려 있습니다. 하지만 사용자가 스스로를 보호하기 위해 취할 수 있는 조치도 있습니다.

  • 공용 와이파이는 사이버 범죄자에게 매우 좋은 먹잇감입니다. 보안에 취약하며 해커가 쉽게 스푸핑할 수 있습니다. 게다가 데이터 트래픽이 지속적으로 노출될 위험에 처해 있다는 사실은 말할 필요도 없습니다.
  • SSL 인증서를 사용하지 않는 웹사이트는 트래픽을 암호화할 수 없기 때문에 취약합니다. 웹사이트 주소창 옆의 자물쇠 아이콘을 확인하여 사이트가 안전한지 확인하세요.

  • 개인 정보 유출을 유발하는 악성코드로부터 기기를 보호하려면 백신 프로그램을 설치하세요.
  • 앱을 다운로드할 때는 반드시 공식 앱 스토어나 웹사이트를 이용해야 악성코드 감염을 피할 수 있습니다.
  • 알 수 없는 링크를 클릭하라는 메시지가 나타나면 절대 클릭하지 마세요. 피싱 공격일 가능성이 매우 높으며, 기기를 감염시키거나 개인 정보를 훔칠 수 있습니다.

사용자 측면에서는 세션 하이재킹 공격을 막기 위해 할 수 있는 일이 거의 없습니다. 하지만 애플리케이션은 다른 기기가 동일한 세션 식별자를 사용하여 접속했을 때 이를 감지할 수 있습니다. 이러한 정보를 바탕으로 다음과 같은 완화 전략을 설계할 수 있습니다.

  • 세션에 연결된 기기의 기술 지문이나 특징을 각 세션에 연결하여 등록된 매개변수의 변경을 감지합니다. 이 정보는 쿠키(상태 저장 세션의 경우)나 JWT(상태 비저장 세션의 경우)에 암호화하여 저장해야 합니다.
  • 세션이 쿠키를 기반으로 하는 경우, XSS 공격을 통해 쿠키에 접근하는 것을 막기 위해 HTTPOnly 속성을 쿠키에 적용해야 합니다.
  • 침입 탐지 시스템(IDS), 침입 방지 시스템(IPS) 또는 네트워크 모니터링 솔루션을 구성합니다.
  • 일부 서비스는 사용자의 신원을 이중으로 확인합니다. 예를 들어, 웹 서버는 각 요청에 대해 사용자의 IP 주소가 세션 중에 사용된 마지막 주소와 일치하는지 확인할 수 있습니다. 하지만 이는 동일한 IP 주소를 공유하는 사용자의 공격을 막지 못할뿐더러, IP 주소가 자주 변경되는 사용자에게 불편을 줄 수도 있습니다.
  • 또는, 일부 서비스는 요청이 있을 때마다 쿠키 값을 변경합니다. 이렇게 하면 공격자가 활동할 수 있는 기회를 줄일 수 있으며, 공격이 발생했는지 여부를 쉽게 식별할 수 있지만, 기술적인 문제를 야기할 수도 있습니다.
  • 각 사용자 세션에 대해 서로 다른 다단계 인증(MFA) 방법을 사용합니다.
  • 모든 시스템을 최신 패치 및 보안 업데이트로 최신 상태로 유지합니다.

자주 묻는 질문

세션 하이재킹은 세션 스푸핑과 어떻게 다른가요?

세션 하이재킹은 다른 사용자인 것처럼 위장하는 것이고, 스푸핑은 다른 사용자의 세션을 완전히 대체하는 것입니다. 최근 몇 년 동안 일부 보안 전문가들은 스푸핑을 세션 하이재킹의 한 형태로 간주하기 시작했습니다.

마지막으로

최근 몇 년 동안 세션 하이재킹 공격 빈도가 증가하고 있습니다. 따라서 이러한 공격을 이해하고 예방 조치를 따르는 것이 점점 더 중요해지고 있습니다. 그러나 기술이 발전함에 따라 공격도 더욱 정교해지고 있습니다. 그러므로 세션 하이재킹에 대한 적극적인 완화 전략을 마련하는 것이 필수적입니다.

다크 웹에서 여러분의 개인 정보가 얼마나 가치가 있는지 알고 싶으신가요?