웹 사이트 보안 공격과 관련하여 유명한 XSS 와 CSRF(XSRF)를 알아보려합니다.
두가지를 구분하는 방법으로는 공격대상으로 구분할수 있으며
XSS는 공격 대상이 Client,
CSRF는 공격대상이 Server입니다.
웹 애플리케이션에서 많이 나타나는 취약점의 하나로, 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다.
XSS의 공격 루트는 아래와 같습니다.
- 공격자는 홈페이지를 통해 웹서버에 악성 스크립트가 포함된 게시물을 등록합니다
2.웹서버는 이를 DB서버에 저장합니다
3.User는 공격자가 올린 악성스크립트를 포함한 게시글을 읽습니다
4.이때 악성스크립트가 User PC에서 실행이되면서 각종 정보등이 공격자에게로 넘어갑니다
사용자 입력값에 대한 필터링이 제대로 이뤄지지 않을경우 공격자는 입력가능한 폼(게시판 등)에 악의적인 스크립트를 삽입하여 해당 스크립트가 희생자 PC에서 실행되는 취약점을 말합니다
공격자는 이런 공격을 통해 사용자의 개인정보, 세션쿠키정보, 악성코드 다운로드 등을 이용해 공격을 수행합니다
그렇다면 어떻게 해야 막을 수 있을까요?
ex) < = <, ( = (, ) = (
DOM 상의 텍스트를 읽을 때 html 태그를 읽는 innerHTML 사용을 지양하고, textContent 등으로 메소드를 대체한다. 메소드 내용은 이전 블로그에 정리한 바 있다.
유저 입력값이 한정적인 범주안에서 예측 가능하다면, 드롭다운 등을 사용하여 미리 입력될 데이터값을 통제할 수 있다.
위 5가지 외에도 여러가지 방법이 있다.
웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.
- XSS를 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면,
CSRF(사이트간 요청 위조)는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다.
- 일단 사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면,
공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격에 노출된다.
웹 어플리케이션에서 정상적인 경로를 통한 요청과, 비정상적인 경로를 통한 요청을 서버가 구분하지 못할 경우 악의적인 스크립트를 이용해 조작된 요청정보를 전송하도록 하는 공격이다
ex)비밀번호 변경 등..
- Back-end에서 request의 referer를 확인하여 Domain(saleson.com)이 일치하는지 검증.
- 대부분의 CSRF공격 방어가 가능함. 하지만 XSS 취약점이 있는 경우 방어가 불가능해질 수 있음.
- 사용자의 세션에 임의의 난수값을 저장하고 사용자의 요청마다 해당 난수값을 포함시켜 전송.
이후 Back-end에서 요청을 받을 때마다 세션에 저장된 토큰값과 요청 파라미터에서 전달되는 토큰값이 같은지 검증하는 방법. 이 또한 XSS 취약점이 있는 경우 방어가 불가능해질 수 있음.
- 웹브라우저의 Same Origin 정책으로 인해 자바스크립트에서 타 도메인의 쿠키값을 확인, 수정하지 못한다는 것을 이용한 방어 기법.
- script 단에서 요청시 난수를 생성하여 쿠키에 저장하고 동일한 난수 값을 요청 파라미터에 저장하여 서버에 전송. 서버단에서 쿠키의 토큰 값과 파라미터의 토큰값이 일치하는지만 검사하면 됨. 서버에 토큰값을 저장할 필요가 없어 세션 검증보다 가벼움.
위 3가지 외에도 여러가지 방법이 있다.
사용자의 정보는 민감한 부분으로 정보가 유출되지 않도록 보안에 신경써야하기에 해당 내용은 알고있으면 좋을것 같아 공부하면서 포스팅하게 되었습니다.