발자취
#02 웹 어플리케이션 기술 본문
웹 어플리케이션 기술
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 클라이언트 컴포넌트
- 기존의 브라우저에서 제공해주는 기능 외에 추가적으로 제공되는 기능
- HTML
7. 서버 관련 기술 파악
- 배너 탐색
- HTTP server 헤더: 서버 소프트웨어와 설치된 컴포넌트들에 관한 많은 양의 정보 포함 -> 다만 정확하지 않을 수도 있음.
- HTTP Fingerprinting
- 서버가 어떻게 동작하는 지 서버의 행위를 기반으로 서버의 운영체제를 알아냄.
- 파일 확장
- URL 안에 사용된 파일 확장자는 관련 기능을 구현하기 위해 사용된 플랫폼이나 프로그램 언어를 나타내는 역할을 함.
'3-1 > 웹 어플리케이션 보안' 카테고리의 다른 글
| #05 PHP 코드 취약점 실습 (Load File Read, Remote Command Execution, Remote Code Execution) (0) | 2023.03.22 |
|---|---|
| PHP 코드 간단 정리 (0) | 2023.03.22 |
| #04 PHP 실습 환경 설정 및 간단한 웹 프로그래밍(Form 메소드) (0) | 2023.03.22 |
| #03 인증 공격, 경로 탐색 공격, 세션 관리 공격 (0) | 2023.03.19 |
| #01 웹 어플리케이션 보안 개요 (0) | 2023.03.18 |