본문 바로가기

IT정리/보안 기초

1. 웹 보안 기초: HTTP·세션·인증/인가·CSRF 개념 정리

웹 보안의 시작은 복잡한 기술이 아니라 HTTP 요청이 어떻게 만들어지고 서버가 그것을 어떻게 처리하는가를 이해하는 데서 시작된다.

매크로 공격도 결국 이 구조의 허점을 이용하기 때문에 기초 개념을 정확히 이해하는 것이 필수적이다.

1. HTTP 요청/응답 구조

웹은 결국 문자열로 된 HTTP 요청을 주고받는 구조이다.

즉, 모든 요청과 응답은 문자열 구조를 가지고 있다.

POST /apply
User-Agent: Chrome/123.0
Cookie: JSESSIONID=abcd
Content-Type: application/x-www-form-urlencoded

name=홍길동&time=0900

브라우저도 이런 요청을 보내고 매크로 프로그램도 똑같은 요청을 만들 수 있다.

  1. Header(예: User-Agent, Referer) → 얼마든지 조작 가능
  2. Body(폼 데이터) → 사용자가 원하는 값으로 변경 가능

때문에 사용자가 브라우저를 거쳐서 데이터를 요청했는지, 매크로 등 비인가 프로그램을 사용해서 데이터를 요청했는지 서버는 알 수 없다.

HTTPS는 요청을 암호화해 전송 중 도청·변조를 막을 뿐 요청이 사람인지 프로그램인지 구분하지 않는다

즉, 클라이언트가 보내는 모든 값은 신뢰할 수 없고 서버에서 다시 검증해야 한다.

 

2. 세션(Session)과 쿠키(Cookie)

세션(Session)

  • 서버 내부에 저장되는 사용자 정보
  • 클라이언트는 내용을 볼 수 없다
  • 서버 메모리 또는 서버 저장소에 안전하게 존재

쿠키(Cookie)

  • 세션 ID를 들고 있는 문자열 값
  • 클라이언트가 보관한다
  • 매크로 프로그램이 그대로 복사해 사용할 수 있다
  • 탈취되면 세션 하이재킹 발생

세션 자체는 비교적 안전한데 그 세션의 ID는 쿠키에 저장된다.

매크로 프로그램이 세션ID를 갖게 되면 프로그램을 정상 사용자의 요청으로 인식하게 되고 HTTP의 통신은 문자열로 처리하기 때문에 프로그램을 활용해서 사람이 하지 못하는 속도로 요청을 할 수 있게 된다.

 

3. 인증(Authentication) vs 인가(Authorization)

인증(Authentication) 이란 누구인지 확인하는 절차를 말한다

예를들어

  • 아이디/비밀번호 로그인
  • 세션 생성
  • 세션 ID를 쿠키로 내려줌

등이 인증 단계이다.

인가(Authorization)란 이 행동을 할 권한이 있는지 판단하는 절차를 말한다.

예를들어

  • 지금 접수 가능한 시간인가
  • 회원에게 허용된 조건인가
  • 중복 예약인가
  • 마감된 자원인가

등이 인가 단계이다. 매크로 프로그램의 경우 보통 인가 단계를 공격해서 프로그램 내부 허점을 이용해 이익을 취한다.

인가 단계에서의 보안을 비즈니스 로직 보안이라고 하는데

  • 액션 토큰 검증
  • 정상 화면 흐름 여부
  • 회원 권한 제한 조건
  • 기타 velidation check

등이 있다.

 

4. CSRF/토큰 개념과 매크로 방어 연결

CSRF 토큰은 원래 다른 사이트에서 유도된 요청을 막기 위한 장치다.

CSRF 토큰은 다른 사이트에서 유도된 요청을 막을 수 있는 장치이지만 매크로는 브라우저를 대신하지 않고 직접 HTTP 요청을 생성하기 때문에 CSRF 토큰만으로 막을 수 없다.

매크로 방어에서는 이 개념을 확장해 액션 단위 토큰(Action Token)으로 사용한다.

액션 단위 토큰에는

  1. 사용자 정보(사용자를 특정짓기 위해서)
  2. 요청 대상(다른 자원에서 재사용 방지)
  3. 발급 시각(오래된 토큰 사용 방지)(생성 시점 검즘)(기록용)(만료시간 계산용)
  4. 만료 시간(오래된 토큰 사용 방지)(공격자 재사용 차단)(제한용)
  5. 1회성(동일한 요청이라도 한번만 보낼 수 있도록)
  6. 서버 성명(사용자의 토큰 변조 방지)
  7. 토큰 발급 맥락(정상적인 절차를 타고 왔는지)(2장에서 배울 내용)

등이 들어가있다.