발자취

#02 웹 어플리케이션 기술 본문

3-1/웹 어플리케이션 보안

#02 웹 어플리케이션 기술

해린 2023. 3. 18. 02:11

웹 어플리케이션 기술

1. HTTP (Hyper Text Transfer Protocol):

  • 메시지 기반의 모델
    • 클라이언트: 요청 메시지를 서버에 보냄.
    • 서버: 응답 메시지를 클라이언트에 보냄.
  • 무연결성: 요청과 응답은 독립적으로 이루어짐. 커넥션 기반이 아니라서 클라이언트와 서버가 독립적으로 동작함. => 속도 빠름! 광범위하게 사용됨.

 

  • 다수의 헤더와 메소드를 이용해서 요청과 응답을 처리함 => 헤더와 메소드에 따라 효율적인 요청, 응답이 이뤄질지 결정됨.

 

 

1-1. HTTP 요청: 클라이언트 -> 서버

  • Method-Line: 클라이언트가 요청할 때 보내는 내용들. [HTTP 전송 방법] [요청된 URL] [HTTP 버전]
    • HTTP 전송 방법: 클라이언트에서 서버에게 데이터를 전송할 때 쓰는 메소드 (예: GET, POST,...)
    • 요청된 URL: 자료를 요청할 때 쓰는 이름. 서버로부터 뭘 원하고 있는지를 씀.
    • HTTP 버전: 1.0 또는 1.1. 클라이언트와 서버 사이에서 버전을 맞춰줘야 서로 정보를 이해할 수 있음.

 

 

1-1-2. HTTP 요청 헤더 (클라이언트)

  • User-Agent 헤더: 사용자(클라이언트)의 소프트웨어에 대한 정보를 제공.
  • 호스트 헤더: URL 주소에 나타난 호스트의 이름을 상세히 나타내기 위해 사용됨.
  • 쿠키 헤더: 클라이언트가 서버한테 쿠키 정보를 보낼 때 쓰는 헤더. 쿠키를 서버가 생성해서 클라이언트에 주면, 추후에 클라이언트가 그 쿠키를 서버에 다시 보냄. (서버가 쿠키 만들어서 보낼 때 쓰는 헤더는 "셋 쿠키 헤더".
  • Referer 헤더: 해당 요청이 시작된 URL을 나타냄.

 

 

1-2. HTTP 응답: 서버 -> 클라이언트

  • Status-Line: 서버가 응답할 때 보내주는 내용들.
    • HTTP 버전: HTTP/1.1 (응답을 할 때 또 버전 정보를 알려줌.)
    • 요청에 대한 결과 코드: 요청이 성공했는지를 보여줌. (200: 요청이 성공했음을 나타냄.)
    • 응답에 대한 상황을 설명해주는 문자열: (예: OK)

 

 

1-2-2. HTTP 응답 헤더 (서버)

  • 서버 헤더
    • 서버 관련된 소프트웨어 정보를 보여줌. (서버에서 어떤 소프트웨어가 동작중인지 보여주는 헤더)
    • 제공되는 정보가 정확하지 않고 틀린 정보일 가능성이 높음.

 

  • 셋 쿠키 헤더: 쿠키를 브라우저(클라이언트)에 보낼 때 사용됨.
  • WWW-Authenticate 헤더: 401 상태 코드와 함께 응답할 때 사용됨. 인증 상세 내역, 인증 상태 정보에 대해 알려줌.

 

 

1-3. HTTP 클라이언트 메소드

  • GET
    • 웹 서버에 있는 자원 획득 메소드
    • 요청된 자원의 URL 쿼리 문자열에 인자 값을 보내는 용도
    • URL이 한번 입력되면 브라우저 히스토리나 웹 서버의 로그에 저장되며 외부 사이트에 링크되어 있는 경우엔 다른 사이트들의 Referer 헤더에도 전달됨. => 중요한 정보가 URL 쿼리 문자열에 포함되어서는 안됨.

 

  • POST
    • 특정 행동을 수행할 때 사용
    • 메시지 몸체를 통해서 보내짐.
    • URL은 북마크 되지만, 메시지 몸체를 통해 보내진 요청 인자는 URL을 기록하는 로그에 저장되지 않고 Referer 헤더에도 전달되지 않음.

 

=> GET과 POST의 차이점: GET은 URL 상에서 요청 정보가 유출되고, Referer 헤더에도 전달됨. => 보안 관점에선 POST가 더 안전. 따라서 중요하지 않은, 유출돼도 괜찮은 정보만 GET 메소드를 사용해서 요청해야 함!

 

  • HEAD
    • 요청할 때 사용하는 메소드.
    • 어떤 요청을 할 때 GET 요청을 하기 전에 클라이언트가 원하는 데이터가 서버에 있는지 확인하기 위해 사용하는 메소드.

 

  • TRACE
    • 진단을 위한 목적.
    • 클라이언트와 서버 사이에 프록시 서버의 효과를 탐지하는데 사용.

 

  • OPTIONS
    • 추가적으로 들어갈 수 있는 정보들을 서버에 요청할 때 사용됨.

 

  • PUT
    • 서버에 자원을 올릴 때 사용. (다른 메소드들은 서버에서 클라이언트로 정보 가져옴.)
    • 공격자가 악의적인 스크립트를 서버에 올려서 실행할 때 사용될 수 있음.

 

 

2. URL

  • 웹 자원에 대한 유일한 식별자
  • 형태: 프로토콜://호스트명[:포트번호]/[경로/]파일명[?param=값]
  • 절대 경로 URL
  • 상대 경로 URL

 

 

3. 쿠키

  • 웹 어플리케이션이 사용자를 구분할 때 사용됨(=서버가 클라이언트를 구분).
    • 이름과 값으로 구성됨.
    • Space를 포함하지 않은 문자열도 포함 가능
    • 사용자 브라우저를 구별하는 식별자 역할
    • 공격자가 웹 어플리케이션의 취약점을 탐색할 때 자주 사용 (셋 쿠키 헤더와 쿠키 헤더가 왔다갔다하면서 쿠키 정보가 오가는데 이런 정보가 중간에서 탈취된다면 마치 해당 클라이언트인 것처럼 속일 수 있음.)

 

  • 서버는 셋 쿠키 헤더를 통해 쿠키를 생성하고 클라이언트에게 전송함.
  • 사용자 브라우저는 받은 쿠키를 저장하고 서버로 보내는 요청에 쿠키 헤더를 저장한 쿠키를 전송함.

 

 

3-1. 셋 쿠키 헤더가 갖는 속성

  • Expires
    • 쿠키의 유효 기간을 나타냄.(유효기간이 없으면 쿠키가 탈취된 경우, 공격자가 언제든 악용할 수 있기 때문)
    • 유효기간 전까지의 발생하는 브라우저 세션에서 쿠키를 재사용할 수 있음.
    • 이 속성이 없으면 쿠키를 현재 브라우저 세션에서만 사용할 수 있음.(현재 브라우저 세션이 종료되면 더 이상 쓸 수 없다는 말.)

 

  • Domain
    • 쿠키를 사용할 수 있는 도메인을 표기하는데 사용됨.

 

  • Path
    • 쿠키를 사용할 수 있는 URL 경로를 나타내는데 사용됨.

 

  • Secure
    • 쿠키는 HTTPS 요청으로만 전송됨.
    • 쿠키가 공격자에게 유출되는 것을 막기 위해 암호화 시켜서 전송하는 것.

 

  • HttpOnly
    • 클라이언트 측 자바 스크립트는 직접적으로 쿠키를 액세스할 수 없음. -> 프로그래밍을 통해서 쿠키를 액세스하지 못하게 하는 것.
    • 보안 관점에서의 장점: 공격자가 쿠키를 탈취할 땐 자바 스크립트를 통해서 탈취를 할텐데, 이 속성이 지정돼 있으면 쿠키가 액세스 될 가능성을 줄일 수 있음.
    • 일부 브라우저가 이 속성을 지원함.

 

 

4. 상태코드

  • HTTP 응답 메시지의 첫 번째 라인에 상태코드가 나타남.

 

 

5. HTTPS & HTTP 프록시

  • HTTP vs. HTTPS
    • HTTP: 전송 매커니즘으로 TCP 사용
    • HTTPS: 안전한 전송 매커니즘인 SSL 사용
    • SSL: 네트워크 상에서 전송되는 데이터의 기밀성, 무결성 보호

 

  • HTTP 프록시 서버
    • 클라이언트 브라우저와 웹 서버 사이에 중계 역할을 하는 서버
    • 프록시 서버의 두가지 용도(사용법)
      • 클라이언트와 서버 사이의 프록시가 별도의 하드웨어 장비임 -> 주로 회사에서 사용
      • 프록시가 클라이언트 PC 안에 같이 들어가 있어, 모든 정보가 프록시를 통하게 함. -> 주로 공격자가 사용.

 

 

6. 웹 기능

  • 서버 관련 기능
    • 자바 플랫폼 
      • 큰 규모의 기업용 어플리케이션을 위해 사용
      • 장점: 모듈 개발 방식과 코드 재사용에 적함(객체 지향 언어)
      • 기기 독립적이라서 자바 가상머신만 있으면 어떤 운영체제에도 사용 가능 -> 서버에 잘 이용
    • ASP.NET
    • PHP
      • 강력한 웹 어플리케이션 개발 프레임워크
      • 오픈 소스용 어플리케이션과 컴포넌트 개발에 많이 사용

 

  • 클라이언트 관련 기능
    • HTML
      • 웹 인터페이스 구축에 사용
      • Tag 기반의 언어
    • Hyperlinks: 웹 사이트의 링크를 클릭하면 다른 사이트나 컨텐츠로 이동됨.
      • 클라이언트와 서버 사이의 많은 통신이 이루어짐.
      • 이미 설정된 요청인자가 포함돼서 사용자가 클릭하면 브라우저는 해당 요청을 수행함
    • Forms
      • 사용자가 브라우저 상에서 폼을 통해서 임의의 입력 값을 제출함.
    • 자바 스크립트
      • 하이퍼링크나 폼은 사용자가 데이터 행위를 서버에 제출할 때 유용하지만, 데이터를 처리하는데 사용하기 힘듦.
      • 자바 스크립트는 다음과 같은 데이터 처리에 유용함.
        • 사용자가 입력한 데이터가 유효한지 판단
        • 사용자의 행위에 반응해서 사용자 인터페이스를 동적으로 수정
        • 브라우저의 행위를 제어하는 일을 함.
        • 데이터를 가지고 가공을 하거나 유효한지 판단할 때 사용!
    • Trick 클라이언트 컴포넌트
      • 기존의 브라우저에서 제공해주는 기능 외에 추가적으로 제공되는 기능

 

 

 

7. 서버 관련 기술 파악

  • 배너 탐색
    • HTTP server 헤더: 서버 소프트웨어와 설치된 컴포넌트들에 관한 많은 양의 정보 포함 -> 다만 정확하지 않을 수도 있음.

 

  • HTTP Fingerprinting
    • 서버가 어떻게 동작하는 지 서버의 행위를 기반으로 서버의 운영체제를 알아냄.

 

  • 파일 확장
    • URL 안에 사용된 파일 확장자는 관련 기능을 구현하기 위해 사용된 플랫폼이나 프로그램 언어를 나타내는 역할을 함.