카테고리 없음

세션 하이재킹

csi1201 2024. 9. 20. 12:00

세션이란?

  • 클라이언트로부터 오는 일련의 요청을 하나의 상태로 보고 스 상태를 일정하게 유지하는 기술
  • 클라이언트가 웹 서버에 접속해있는 상태가 하나의 단위

세션은 웹서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장합니다. 브라우저를 닫거나 서버에서 세션을 삭제하면 세션이 삭제됩니다. 세션은 각 클라이언트의 고유세션 ID를 부여하는데, 이것으로 클라이언트를 구분하여 각 클라이언트의 요구에 맞는 응답을 반환합니다.

 

세션 동작순서

  1. 클라이언트 요청
  2. Request-Header 필드의 Cookie 에서 세션ID를 보냈는지 확인
  3. 세션ID가 없을 경우, 서버에서 생성하여 클라이언트에세 전송
  4. 쿠키를 사용해 세션ID를 서버에 저장
  5. 클라이언트 재접속 시, 쿠키를 이용하여 세션ID 값을 서버에 전달

 

쿠키와 세션 차이

출처 - https://velog.io/@sweet_sumin/%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98%EC%9D%98-%EC%B0%A8%EC%9D%B4

쿠키는 브라우저 종료 시 삭제되는 세션과 달리 쿠키 저장시 만료시점을 저장하여 브라우저가 종료되더라도 자동 삭제되지 않습니다. 즉, 만료시점이 지나야 쿠키가 삭제되는 것 입니다. 세션은 서버에 저장되므로 안전한 반면, 쿠키는 로컬에 저장되어 탈취, 변조 위험이 존재합니다. 이러한 세션은 보안에 취약한 쿠키를 보완해주는 역할을 하고 있습니다. 하지만 세션은 제공받은 세션ID를 이용해서 서버에서 다시 데이터를 참조해야 하므로 쿠키에 비해 느립니다.

 

 

세션 하이재킹이란?

때로는 쿠키 하이재킹, 쿠키 사이드 재킹, 또는 TCP세션 하이재킹이라고도 하는 세션 하이재킹은 공격자가 인터넷 세션을 장악할 때 일어납니다. 세션 하이재킹은 온라인 쇼핑을 하거나, 청구서를 결제하거나, 은행 잔액을 확인할 때 발생할 수 있습니다. 세션 하이재킹 공격자는 일반적으로 브라우저 또는 웹 애플리케이션을 공격하며, 인터넷 브라우징 세션을 제어하여 사용자의 개인 정보와 비밀번호에 액세스하는 것이 목표입니다.

세션 하이재킹 공격자는 자신이 사용자라고 생각하도록 웹사이트를 속입니다. 이런 공격은 공격자가 합법작인 사용자로 가장하여 보호되는 계정(및 계정에 포함된 데이터)에 무단으로 액세스하기 위해 이용할 수 있기 때문에 애플리케잇ㄴ 보안과 관련된 심각한 결과를 초래할 수 있습니다.

 

 

하이재킹 원리

세션은 디바이스와 웹 서버 간의 일련의 상호 작용입니다. 세션은 웹사이트나 웹 애플리케이션(은행을 예로 들어보지요)에 로그인하면 시작됩니다. 세션은 잔액을 확인하거나 결제하는 동안 계속 진행되며 로그아웃하는 순간 종료됩니다. 웹 서버는 매 순간 웹페이지에 들어오는 요청이 실제로 사용자로부터 온 것인지 어떻게 알 수 있을까요?

바로 쿠키가 그 역할을 합니다. 사용자는 로그인하면서 자격 증명을 웹 서버로 전송합니다. 웹 서버는 사용자가 누구인지 확인하고 세션 내내 사용자에게 부착되는 쿠키를 사용하여 해당 사용자에게 세션 ID를 부여합니다. 이것이 바로 다른 사람의 프로필을 방문할 때마다 Facebook에서 로그아웃되지 않는 이유이며, 페이지를 새로 고쳐도 장바구니에 넣은 내용을 Amazon에서 기억하는 이유입니다.

그러나 누군가가 잘못된 세션 관리 관행을 이용하거나 쿠키를 도용하면 이 세션을 가로챌 수 있습니다. 그러면 범죄자는 웹 서버를 속여 권한이 있는 사용자로부터 요청이 들어온 것으로 착각하게 만들 수 있습니다. 이를 세션 하이재킹(가로채기)라고 하는데요, 이 수법을 통해 범죄자는 로그인 정보를 훔치지 않고도 사용자를 대신해 은행 송금이나 온라인 구매와 같은 작업을 수행할 수 있습니다.

 

 

하이재킹 유형

1. 크로스사이트 스크립팅

크로스사이트 스크립팅 공격을 이용하는 사이버 범죄자는 웹 서버 또는 애플리케이션의 보안 취약점을 악용합니다. 크로스사이트 스크립팅 공격자는 스크립트를 웹 페이지에 삽입합니다. 그러면 웹 브라우저가 사용자의 세션 키를 공격자에게 공개하여 공격자가 세션을 장악할 수 있게 됩니다.

 

2. 세션 사이드 재킹(세션 스니핑)

이 공격 유형에서는 범죄자가 사용자의 네트워크 트래픽에 액세스해야 합니다. 범죄자는 사용자가 안전하지 않은 Wi-Fi를 사용할 때, 또는 중간자 공격을 감행하는 방법으로 액세스 권한을 얻을 수 있습니다. 세션 사이드 재킹에서는 공격자가 '패킷 스니핑'을 이용해 인터넷 사용자의 네트워크 트래픽을 모니터링하여 세션을 찾습니다. 그러면 공격자는 세션 쿠키를 획득하여 세션을 장악하기 위해 사용할 수 있습니다.

 

3. 세션 고정 

세션 고정 공격에서는 범죄자가 세션 ID를 만들고 사용자가 이 ID를 사용해 세션을 시작하도록 속입니다. 공격자는 액세스하려는 웹사이트의 로그인 양식으로 연결되는 링크를 사용자에게 이메일로 보내서 이와 같이 할 수 있습니다. 사용자는 허위 세션 ID로 로그인하여 공격자가 문에 발을 들여놓을 수 있게 합니다.

 

4. Man-in-the-browser 공격  

중간자(man-in-the-middle) 공격과 유사하지만, 공격자가 먼저 피해자의 컴퓨터에 트로이목마를 감염시켜야 합니다. 피해자가 속아서 악성 코드를 시스템에 설치하고 나면 악성 코드는 피해자가 대상 사이트에 방문할 때까지 기다립니다. Man-in-the-browser 악성 코드는 보이지 않는 사이에 트랜잭션 정보를 수정하고 사용자가 알지 못하는 사이에 트랜잭션을 더 만들 수도 있습니다. 요청이 피해자의 컴퓨터에서 시작되기 때문에 웹 서비스가 요청이 허위임을 알기는 매우 힘듭니다.

 

5. 예측 가능 세션 토큰 ID

여러 웹 서버는 맞춤 알고리즘이나 미리 정의된 패턴을 사용하여 세션 ID를 생성합니다. 세션 토큰이 예측하기 쉬울수록 보안이 더 취약합니다. 공격자가 ID를 몇 개 수집하고 패턴을 분석할 수 있으면 유효한 세션 ID를 예측할 수도 있습니다. (이 방법은 무차별 대입 공격과 유사합니다.)

 

 

세션 하이재킹을 방지하는 방법

1. 공용 Wi-Fi 사용하지 않기

뱅킹, 온라인 쇼핑 또는 이메일 또는 소셜 미디어 계정 로그인 같은 중요한 트랜잭션을 공용 Wi-Fi에서 수행하지 마십시오. 근처에 패킷 스니핑을 이용하여 세션 쿠키와 그 외 다른 정보를 해킹하려고 하는 사이버 범죄자가 있을 수 있습니다.

 

2. VPN 사용

공용 Wi-Fi를 사용해야 하는 경우, 가상 사설망(VPN)을 사용하여 안전을 극대화하고 세션 하이재커가 세션에 들어오지 못하게 하십시오. VPN은 IP 주소를 마스킹하고 사용자의 모든 온라인 활동이 통과하는 비공개 터널을 만들어 온라인 활동을 비공개로 유지합니다. VPN은 사용자가 송수신하는 데이터를 암호화합니다.

 

3. 피싱과 그 외 다른 온라인 사기 경계

합법적인 발신자가 보냈음을 확실히 하는 경우에만 이메일에 있는 링크를 클릭하십시오. 세션 하이재커는 클릭할 링크가 있는 이메일을 보낼 수 있습니다. 이 링크를 클릭하면 악성 코드가 장치에 설치되거나 공격자가 준비한 세션 ID를 사용하여 사이트에 로그인하는 로그인 페이지로 이동할 수 있습니다.

 

4. 사이트 보안에 주의

평판이 좋은 은행, 이메일 제공업체, 온라인 소매업체 및 소셜 미디어 사이트에는 세션 하이재킹을 방지하는 안전장치가 있습니다. URL이 HTTPS로 시작하는 웹사이트를 찾아보십시오. S는 ‘보안’(secure)을 의미합니다. 의심스러운 온라인 샵이나 그 외 보안이 강력하지 않을 수 있는 제공업체를 사용하면 세션 하이재킹 공격에 취약할 수 있습니다.

 

5. 안티 바이러스 소프트웨어 사용

쉽게 바이러스를 탐지하고 모든 종류의 악성 코드(공격자가 세션 하이재킹에 사용하는 악성 코드 포함)를 차단할 수 있는 평판이 좋은 안티 바이러스 소프트웨어를 설치하십시오. 사용하는 모든 장치에서 자동 업데이트를 설정하여 시스템을 최신 상태로 유지해야합니다.

 

 

세션 하이재킹 감염 시 발생하는 일

  • 사용자 정보 도용: 해커가 사용자의 세션을 탈취하여 로그인 정보, 금융 정보 등 민삼한 데이터를 빼앗을 수 있습니다.
  • 계정 탈취: 탈취된 세션을 사용하여 사용자의 계정에 접근, 권한을 악용해 계정 설정을 변경하거나 추가 공격을 감행할 수 있습니다.
  • 서비스 거부 공격: 특정 세션을 반복해서 탈취하여 서비스에 과부하를 주거나. 사용자가 정상적으로 서비스에 접근하지 못하게 할 수 있습니다.
  • 악성 활동 수행: 해커가 피해자의 세션을 통해 악성 활동을 수행하고, 이러한 활동이 피해자의 이름으로 기록될 수 있습니다.

이를 방지하기 위해서는 SSL 사용, 세션 만료 시간 설정, IP변경 감지 등의 보안 조치가 필요합니다.

 

 

대처 방안

1. SSL/TLS 사용

웹 사이트가 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 암호화를 사용하면, 클라이언트와 서버 간의 모든 데이터 통신이 암호화됩니다. 이를 통해 중간에서 데이터를 가로채는 것을 방지할 수 있습니다.

  • 모든 웹 트래픽을 HTTPS로 강제하며, SSL 인증서를 최신 상태로 유지하는 것이 중요합니다.

 

2. 세션 쿠키에 Secure, HttpOnly 속성 적용

세션 쿠키를 보호하기 위해 Secure 속성을 사용하면 쿠키가 암호화된 HTTPS 연결을 통해서만 전송됩니다. 또한, HttpOnly 속성을 적용하면 자바스크립트를 통해 쿠키에 접근하는 것을 방지하여, XSS(크로스 사이트 스크립팅) 공격으로부터 보호할 수 있습니다.

  • 세션 쿠키를 생성할 때 Secure 및 HttpOnly 속성을 설정하여 추가적인 보호를 제공합니다.

 

3. 세션 타임아웃 설정

사용자가 일정 시간 동안 활동이 없으면 자동으로 세션을 만료시키는 것이 세션 하이재킹 방지에 효과적입니다. 이를 통해 탈취된 세션의 유효 기간을 최소화할 수 있습니다.

  • 사용자 활동이 없을 때 세션을 자동으로 만료시키는 타임아웃 설정을 구현합니다.

 

4. IP 주소 및 사용자 에이전트 검증

세션이 지속되는 동안 사용자 IP 주소나 브라우저의 사용자 에이전트를 검증하여 변동이 생기면 세션을 자동으로 종료시킬 수 있습니다. 이 방법을 통해 다른 네트워크나 브라우저에서의 비정상적인 접근을 차단할 수 있습니다.

  • 세션을 유지하는 동안 사용자의 IP 주소나 브라우저 정보를 지속적으로 확인하여 변화가 있을 경우 세션을 종료합니다.

 

5. 세션 ID 재생성

사용자가 로그인하거나 중요한 권한을 획득할 때마다 세션 ID를 재생성하면 세션 하이재킹 위험을 줄일 수 있습니다. 세션 ID 재생성은 탈취된 이전 세션 ID를 무효화하는 효과가 있습니다.

  • 로그인 또는 권한 상승 시마다 새로운 세션 ID를 발급하는 정책을 적용합니다.

 

6. 이중 인증(2FA) 도입

이중 인증을 사용하면, 비밀번호 외에도 추가적인 인증 단계를 거쳐야 하기 때문에 세션 하이재킹이 발생해도 공격자가 추가 인증을 통과하지 못해 피해를 최소화할 수 있습니다.

  • SMS, 이메일, 인증 앱 등을 통한 이중 인증을 적용하여 추가 보안 단계를 마련합니다.

 

7. 쿠키 기반의 세션 대신 토큰 기반 인증 사용

쿠키 기반 세션 대신 JWT(JSON Web Token)와 같은 토큰 기반 인증 방식을 사용하면 서버에서 세션을 관리하지 않고 클라이언트 쪽에서 관리하므로, 세션 하이재킹의 피해를 줄일 수 있습니다.

  • 클라이언트 쪽에서 토큰을 사용하여 세션을 유지하고, 토큰이 만료되면 재인증을 요구하는 시스템을 구현합니다.

 

8. XSS(크로스 사이트 스크립팅) 취약점 방지

XSS를 통해 공격자가 세션 쿠키에 접근할 수 있으므로, 이를 방지하는 것이 중요합니다. 입력값 검증과 콘텐츠 보안 정책(CSP) 등을 통해 XSS 공격을 방지해야 합니다.

  • 사용자 입력값에 대해 엄격한 검증을 수행하고, 모든 출력값을 이스케이프 처리하여 XSS 공격을 차단합니다.

 

9. 로그 아웃 시 세션 무효화

사용자가 로그아웃할 때 서버에서 세션을 완전히 무효화해야 합니다. 만약 로그아웃 후에도 세션이 남아있다면, 세션 하이재킹에 더 취약해질 수 있습니다.

  • 로그아웃 시 서버의 세션 데이터를 삭제하고, 관련된 쿠키를 무효화하여 추가적인 접근을 차단합니다.

 

마지막으로 세션 하이재킹(Session Hijacking)은 우리의 일상생활에서 자주 사용하는 인터넷 서비스와 밀접하게 연관된 사이버 공격 중 하나입니다. 이 공격은 우리가 로그인한 세션을 가로채어 민감한 정보를 도용하거나, 우리의 이름으로 악의적인 활동을 할 수 있게 합니다. 특히, 공공 와이파이 같은 안전하지 않은 네트워크를 사용할 때, 세션 하이재킹의 위험은 더욱 높아집니다. △ 항상 브라우저에서 주소창을 확인하고, 'https'로 시작하는 안전한 웹사이트를 이용하세요. △  공공 와이파이를 사용할 때는 로그인하거나 중요한 정보를 입력하는 것을 피하는 것이 좋습니다. △ 사용이 끝난 웹사이트나 앱에서는 반드시 로그아웃하세요. 세션이 열린 상태로 방치되면, 쉽게 타겟이 될 수 있습니다. △ 주요 계정에는 이중 인증(2FA)을 설정하여, 비밀번호가 유출되더라도 추가적인 보호 장치를 마련해 두세요.

결국, 인터넷을 이용하는 모든 사람들은 세션 하이재킹의 위험성에 대해 인지하고, 일상생활에서 보안 의식을 유지하는 것이 중요합니다. 조금만 더 주의를 기울이면 이러한 사이버 위협으로부터 우리의 개인정보와 중요한 자산을 안전하게 보호할 수 있습니다.