반응형

 

 

XSS(Cross-Site Scripting)

(사용자가 사이트를 신뢰한다는 점을 이용)

스크립트 삽입 공격 방식

 

JS 스크립트는 어느위치에 있던 동작하기 때문에 공격자가 스크립트 코드가 포함된 게시글을 작성하여 등록

일반 사용자가 해당 글을 클릭하면 script가 동작하여 이루어지는 공격 방식

 

무조건 Secure Coding을 해줘야 한다. 

 

 

대응

 - Secure coding

<, >, = 과 같은 입력값에 공격에 사용될만한 문자가 있다면 치환하여 사용, DB에 저장한다.

Sql Injection도 비슷한 방식으로 대응할 수 있다.

 

 - HttpOnly

Secure coding이 적용되어 있지 않아 스크립트가 동작

쿠키 탈취 시도 시 쿠키가 HttpOnly 설정이 되어있다면 js로 쿠키를 읽어낼 수 없다.

 

 


 

CSRF (Cross Site Request Forgery)

(사이트가 사용자를 신뢰한다는 점을 이용, 신뢰할만한 쿠키와 토큰을 브라우저에서 갖고 있다는 점)

피싱 사이트를 만들어, 피싱 사이트에 사용자가 접근하면

스크립트를 이용해 특정 사이트로 요청을 보내, 사용자나 관리자의 권한으로 서버에 write 하도록 유도하는 공격

피싱 사이트에서 요청을 위조해서 Request Forgery

 

기본적으로 브라우저의 SOP 정책으로 응답된 데이터에 접근이 불가능하다. (공격자가 해당 정보를 이용할 수 없다)

하지만, 응답된 데이터 접근 불가능할뿐이지 서버에 write는 가능하다. (공격자가 원하는 대로 정보를 수정)

그래서 write를 방지하고자 Preflight 또는 CSRF token을 도입하게 되었다.

 

 

대응

 - Preflight

(1) 예비 요청을 Option 메서드로 보내서, 서버의 Access-Control-Allow-Origin 을 확인한다.

서버에서 허가된 Access-Control-Allow-Origin 목록을 응답으로 보내준다.

 

(2-1) 허가된 주소에 해당되면 정식 요청을 보내고, 응답을 사용한다.

(2-2) 허가된 Origin이 아니라면 예비 요청에서 막혔음을 확인했기 때문에 정식 요청을 보내지 않는다.

get, head, post 가 아닌 서버 데이터를 변형시키는 put, patch, delete면 Prefilght를 보내게 된다.

 

 - CSRF Token

CSRF토큰 난수를 두면 요청시에 모든 요청은 CSRF토큰 난수를 보내야 인가를 받는다.

서버에서 CSRF Token 난수가 맞는지 확인한다. 서버에서 만든 페이지에서 요청한 것이 맞으므로 수행

위조된 요청은 CSRF Token가 없으므로 write가 동작하지 않는다.

 

 

 


브라우저의 보안 SOP

SOP(Same Origin Policy)

브라우저가 적용한 보안 방식

요청한 Origin과 응답한 Origin이 Same Origin이어야 자원 접근이 가능하다.

script뿐만 아니라, document도 출신(Origin)이 다르면 서로 접근이 불가능하다.

 

 

XSS는 Secure Coding으로 막았다고 가정, CSRF 공격 시

해킹1. (document로 정보 가져오기)

요청한 위조 사이트와 정보를 가져온 사이트의 Origin이 다르기 때문에,

유저 인증을 이용해 document를 가져오는 건 성공해도 document를 읽어낼 수 없다.

결과적으로 해커의 서버에 전송된 document에는 아무것도 없다

 

해킹2. (script로 정보 가져오기)

요청하는 해커의 서버와 응답 사이트의 Origin이 다르기 때문에 요청이 무시되어 동작하지 않는다.

 

 

 

CORS(Cross Origin Resource Sharing)

SOP 보안 정책을 일부 허가된 Origin은 해제

script, document로 다른 Origin 서버에 요청해서 받은 자원을 접근할 수 있게 한다.

 

서버 Access-Control-Allow-Origin 에 요청하는 Origin을 추가한다.

 

 

 


 

HTTPS 

네트워크상에서 정보가 탈취되지 않도록 방지한다.

RSA 암호화를 사용하는 것. 서버가 비밀키를 갖고 있다.

공개키로 암호화해서 데이터를 보내고 전달받은 데이터를 서버가 자신의 비밀키로 푼다.

RSA 암호화는 컴퓨터에게 부담을 주기 때문에 이후부터는 대칭키를 교환하여 사용한다.

 

RSA

두 소수를 곱하여 큰 수를 만들어낸다. (두 소수도 자체도 크다.)

두 소수로 큰 수를 구하는 것은 쉽지만

반대로, 큰 수에서 두 소수를 구하는 것은 어렵다는 특징

반응형

+ Recent posts