오늘 학습 주제
1. HTTP 특징
HTTP 특징
- HTTP 특징 -
C:\Users\crpark> curl -v http://victim:8080/WebGoat
* Trying 192.168.0.xxx:8080... ⇐ 연결
* Connected to victim (192.168.0.xxx) port 8080
> GET /WebGoat HTTP/1.1 ⇐ 요청 시작 ⇒ 방식 URI 프로토콜/버전
> Host: victim:8080 ⇐ 요청 헤더 시작
> User-Agent: curl/8.4.0
> Accept: */*
> ⇐ 요청 헤더의 끝 (GET 방식의 요청이므로 요청 본문이 생략)
< HTTP/1.1 302 Found ⇐ 응답 시작 ⇒ 프로토콜/버전 응답(상태)코드 메시지
< Server: Apache-Coyote/1.1 ⇐ 응답 헤더 시작
< Location: /WebGoat/ ⇐ 리다이렉션 주소
< Transfer-Encoding: chunked
< Date: Fri, 22 Dec 2023 00:35:21 GMT
< ⇐ 응답 헤더 끝 (리다이렉션이 일어나므로 응답 본문이 생략)
* Connection #0 to host victim left intact ⇐ 연결을 종료
요청 헤더: 알면 좋은 참조할 값
한 줄 단위로 해석
C:\Users\crpark> curl -v http://victim:8080/WebGoat/
* Trying 192.168.0.xxx:8080...
* Connected to victim (192.168.0.xxx) port 8080
> GET /WebGoat/ HTTP/1.1
> Host: victim:8080
> User-Agent: curl/8.4.0
> Accept: */*
>
< HTTP/1.1 401 Unauthorized ⇐ 인증 정보가 누락되었음
< Server: Apache-Coyote/1.1
< Cache-Control: private
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< WWW-Authenticate: Basic realm="WebGoat Application" ⇐ 기본 인증 방식으로 인증 정보를 전달
< Content-Type: text/html;charset=utf-8
< Content-Language: ko
< Content-Length: 691
< Date: Fri, 22 Dec 2023 00:43:20 GMT
<
<!doctype html><html lang="ko"><head><title>HTTP 상태 401 – 인가 안됨</title>
- Stateless -
상태를 유지하지 않는 프로토콜
HTTP는 클라이언트와 서버 간의 각 요청이 독립적이며
이전 요청과의 상태 정보를 서버가 유지하지 않음
확장성을 높이고, 서버의 부하를 줄이기 위해 사용
동일한 클라이언트가 여러 요청을 보낼 때를 위해 쿠키, 세션 등을 사용
- 쿠키(Cookie) -
Stateless한 HTTP 프로토콜에서 상태를 유지하기 위해서 도입된 개념
서버가 클라이언트의 웹 브라우저에 저장하는 작은 데이터 조각
클라이언트와 서버 간의 상태를 유지하고 세션을 관리하며
사용자가 웹 사이트를 방문할 때마다 브라우저에서 서버로 전송
요청 헤더와 응답 헤더를 통해서 전달되고, 브라우저에 저장되며,
JavaScript를 이용해서 접근할 수 있으므로 쉽게 탈취 및 도용, 위변조가 가능하다는 단점
쿠키에 중요 정보를 저장, 사용하면 안 됨
- 안전한 Cookie 운영법 -
가급적 중요한 정보는 쿠키에 포함하지 말아야 하며
중요한 쿠키는 암호화해서 포함
쿠키의 유효기간(Expires) 또는 지속시간(MaxAge)을 최소한으로 설정
쿠키 생성 시 Secure 속성을 설정하여 보안 통신을 할 때만 쿠키를 전달하도록 제한
쿠키 생성 시 HttpOnly 속성을 설정하여 클라이언트에서 쿠키에 직접 접근을 제한
(개발자 도구 or JavaScript 등을 이용한 쿠키 접근)
- 세션(Session) -
쿠키의 단점을 보완하기 위해서 나온 개념
사용자의 상태를 서버 측에서 유지하고, 사용자를 식별하는 데 사용
중요 정보를 서버의 세션에 저장하고, 사용자에게는 해당 세션에 접근할 수 있는 세션 ID를 발급
중요 정보에 대한 직접적인 유출을 막을 수 있으나, 중요 정보 접근에 사용되는 세션 ID 관리가 중요
세션 ID 탈취:
세션 ID가 요청, 응답을 통해서 전달되는 과정(스니핑) 또는 사용자 PC, 브라우저에 저장된 것을
탈취, 조작(XSS)할 수 있을 때 발생
세션 ID 추측:
세션 ID의 생성 규칙을 유추할 수 있을 때 발생
공격자가 다음에 생성될 세션 ID를 미리 설정하고
불특정 다수의 희생자에게 동일한 세션 ID가 발급되기를 대기
동일한 세션 ID를 발급받은 희생자가 생기면 공격자는 희생자의 권한으로 사이트를 이용
세션 ID 고정: 보안 상의 취약점 중 하나로,
공격자가 특정 사용자에게 고정된 세션 ID를 부여하여 해당 사용자의 세션을 제어하려는 시도
공격자는 희생자의 세션 ID를 미리 설정 후 희생자가 로그인 하기를 대기
희생자가 로그인을 하면 인증 전후에 세션 ID가 동일하므로 공격자도 로그인 한 것으로 처리
공격자는 희생자의 권한으로 사이트 이용 가능
- 안전한 세션 운영법 -
세션 ID의 생성 규칙을 외부에서 알 수 없도록 설정
인증 전 후의 세션 ID를 다르게 설정
주기적으로 세션 ID를 갱신
쿠키를 안전한 방법으로 생성, 관리
- 리다이렉트 -
클라이언트의 요청을 받아서 해당 요청을 다른 URL로 전송하는 과정
웹 어플리케이션이나 웹 서버에서 특정 조건을 충족할 때
클라이언트를 새로운 위치로 이동시키기 위해 사용되며
리다이렉트는 사용자를 새로운 페이지로 안내하거나,
오래된 URL을 새로운 URL로 대체하는 등의 목적으로 사용
curl -v http://victim:8080/WebGoat
URL 마지막 부분에 /를 입력하지 않아도 자동으로 입력
응답 코드에 302 Found가 있기 때문
302 Found: 요청한 리소스가 일시적으로 다른 위치에 있음을 알림
- 기본 인증 -
< WWW-Authenticate: Basic realm="WebGoat Application"
클라이언트가 서버에 대한 요청을 할 때마다 사용자 이름과 비밀번호를 인코딩하여 함께 전송하고
서버는 이를 확인하여 접근 권한을 부여하거나 거부
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Authorization 헤더를 사용하여 사용자 이름과 비밀번호를 전송
Basic으로 값이 시작되며 이름과 비밀번호를 Base64로 인코딩한 문자열이 전달됨
사용자 이름과 비밀번호를 평문으로 전송하기 때문에, 중간자 공격과 같은 보안 위협에 노출
- 인증 방법 -
Type1 - 지식기반(사용자만 알고 있는 정보를 이용해서 인증)
패스워드 등
Type2 - 소유기반(사용자만 가지고 있는 정보를 이용해서 인증)
OTP, 인증서, 주민등록증, 스마트폰 등
Type3 - 특징기반(사용자만 가지고 있는 특징을 이용해서 인증)
바이오 인증, 필기체 등
- 접근 통제 -
화면 - 권한 있는 사용자에게만 기능 버튼, 메뉴, 링크를 제공기능 - 권한 있는 사용자의 요청만 처리데이터 - 사용자 권한 범위의 데이터만 접근을 허용
취약점 정리
- 취약점 확인 방법 -
Injection ⇒ 기능에서 사용하는 특수문자를 입력해서 서버의 반응
SQL Injection ⇒ 홑따움, #, --, ; .... ⇒ 오류
Command Injection ⇒ &, |, ;, .... 추가 명령어 ⇒ 실행 확인
XSS ⇒ <script> alert('XSS'); </script> <img onerror="alert('xss')" />
CSRF ⇒ 중요기능에 절차와 주체를 확인하기 위한 입력이 있는지 확인
File Upload ⇒ 업로드 파일을 URL 주소를 이용해서 접근 가능한지 서버에서 실행 가능한 파일이 업로드 가능하니 확인
Path Traversal ⇒ 입력값이 내부 파일을 참조하는데 사용되는지 확인
'SK shieldus Rookies 16기' 카테고리의 다른 글
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(45일차) (1) | 2024.01.04 |
---|---|
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(44일차) (0) | 2024.01.03 |
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(42일차) (0) | 2023.12.21 |
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(41일차) (0) | 2023.12.20 |
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(40일차) (0) | 2023.12.19 |