본문 바로가기
Study Log/정보 보안

[정보 보안] 10. 클라이언트 사이드 취약점

by LOGER 2023. 9. 30.

해킹: 개발자가 의도하지 않은 동작을 입력 혹은 행위를 통해 악의적 결과를 만들어 냅

웹 해킹: 클라이언트 - 웹 서비스의 요청/응답 코드 흐름 중 발생하는 취약점을 찾는 것

 

클라이언트단 - 브라우저: chrome, safari 등

- HTML/CSS/Javascript

- SPA (Single page application): 코드를 받아서 브라우저가 랜더링함 ex) Vue, React 등

 

서버단 - 웹서버, 데이터베이스: 데이터베이스에서 데이터를 꺼내서 사용함

- 웹서버: apache, nginx

- 웹애플리케이션서버 (WAS): tomcat, jeus 등

- PHP, JSP 등

- Framework: SPring, flask, Django 등

- 데이터베이스: mysql, oracle, redis 등

 

통신방법:

Request: 요청

Response: 응답 -> 응답 받은 값을 사용자 화면에 나타냄

* 취약점: 모든 입력값과 행위에서 취약점 발생 가능

 

HTTP 프로토콜

- 시스템은 프로토콜 규약에 맞는가 아닌가를 체크함

 

Method: 방법 (나의 의도)

- GET: URL 쿼리를 통해 파라미터에 담음

- POST: HTTP Body를 통해 파라미터에 담음

- PUT: 서버에 리소스 생성 및 수정

- DELETE: 리소스 삭제

- PATCH: 리소스 일부 수정

- HEAD: Content 없이 헤더 부분만 요청

- 이외에 개발자가 직접 코딩을 통해 사용할 수도 있음

 

REST API

- GET : 리소스 조회

- POST : 리소스 생성 요청

- PUT/PATCH : 리소스 업데이트

- DELETE : 리소스 삭제

 

URI (Method 옆에 있는 것)

- Protocol : 서버 리소스에 접근을 위해 사용되는 프로토콜 종류

- Host : 도메인 이름이나 IP주소

- Path: 어떤 파일에 접근할지 알려주는 리소스 주소

- Query String: 파라미터 전달 (? 를 기준으로 사용)

 

HTTP 버전: 1.1이 가장 많이 사용됨

 

Request Header

- HOST: 호스트 이름 (도메인, IP)

- Content - Type: POST body 데이터 형식 지정

- Content - Length : 요청하는 POST Body 데이터 길이

- User - Agent : 요청하는 클라이언트 정보 (브라우저 버전 등)

- Referer : 요청 패킷이 어디서부터 왔는지 

- Cookie : 세션 정보 등 유지할 정보 (매 요청시마다 전송) - 안전하게 보관되어야 함 (https를 사용하는 등)

   - Session : 어떠한 정보를 저장할 때 서버에 저장 (메모리, 파일, 데이터베이스), 서버에서 관리

 

Response

- Status Code

ex) 200 OK : 정상

300 : 이상함 (주소 옮겨야 함)

400 : 요청 잘못 함

500 : 서버쪽에서 문제가 생김

 

Response Header

- Server : 서버 정보

- Content-Type: 응답 데이터 타입 정의

- Set-Cookie : 쿠키 정보를 세팅 가능 (앞으로 이 쿠키를 쓰라는 의미)

- Content - Length : 응답 데이터의 길이

 

프록시: 클라이언트와 서버 사이의 응답/요청을 지켜보고 수정할 수 있음

ex) Fiddler, BurpSuite 등

 

Client Mitigation (완화, 경감)- 보안 위협 경감

:취약점을 막기 위해서 브라우저 자체적으로 공격을 막을 수 있는 기능

 

SOP (Same Origin Policy)

- 웹 브라우저에서 동작하는 스크립트나 요청이 특정 출처(origin)에서 온 것인지 확인하는 규칙 (내가 요청한 곳에서 온 응답이 맞는지 확인하기)

- 정확하게 똑같은 주소만이 SOP 정책을 통과할 수 있음 (https 기본 포트 443은 예외)

 

CORS (Cross Origin Resource Sharing)

- 웹 브라우조의 요청이 안전한 출처로의 요청인지 검증하는 방어 기법

- SOP는 다 차단하지만, 외부 스크립트나 이미지등을 사용하기 위해 허용해주는 정책

응답값 헤더의 Access-Control-Allow-Origin: 을 통해서 허용가능

*CORS free flight: 일단 헤더를 받아오고 유효한 것에 한해서만 바디 부분을 받을 수 있음

 

요청에 대해서는 일단 서버단에서 응답을 해주고, 그 다음에 응답에 대해서 규칙들을 적용함

 

CSP (Content Security Policy)
- 서버에서 허용한 동작만 브라우저에서 수행되도록 설정하는 정책

Content-Security-Policy: 를 통해 사용가능

 

Client Mitigation은 완벽하지 않기 때문에 아예 취약점을 없게 만드는것이 중요함!

 

XSS 취약점

: 복잡하여서 고치기도 어렵고 찾기도 어려움

XSS (Cross-Site Scripting) CSS대신 XSS사용함

- > 브라우저가 해석하는 자바스크립트에 임의 스크립트를 삽입하여 본래 개발자의 의도 외의 동작 등이 실행되는 취약점

 

Open Redirection

- HTML, JS에서 사용자의 입력을 통해 페이지를 이동시킬 경우, 임의 페이지로 이동시킬 수 있는 취약점

Redirection (다시 원래 사용하던 페이지로 돌아가는 것): 주로 클라이언트단에서 해결됨

 

CSRF (Cross-Site Request Forgery)

- URL에 접근하는 것만으로 검증 없이 정상적으로 요청이 처리 되는 취약점