-
[웹 해킹] XSS, CSRF카테고리 없음 2020. 3. 27. 19:03
안녕하세요 오늘은 웹상에서 이뤄지는 공격중 OWASP A7에 속해 있는 XSS와 CSRF공격에 대해 알아보겠습니다.
먼저, XSS(Cross-Site-Script)는 웹에서 사용하는 스크립트를 사용하여 클라이언트가 의도치 않은 행위를 하게하거나 쿠키, 세션등을 하이재킹(탈취)하는 공격 기법입니다.
해당 공격에는 3가지 공격이 있습니다.
1. Reflected XSS
2. Stored XSS
3. DOM XSS
1. Reflected XSS
Reflected XSS는 웹에서 사용하는 검색창(GET Method)을 이용해 XSS 공격을 하는 기법입니다.
클라이언트가 웹페이지에서 안녕이라고 <script> 구문을 이용해 입력을 한다고 생각해 보겠습니다. 안전하지 않은 웹페이지라면 클라이언트가 입력한 안녕을 그대로 웹페이지 상에서 출력을 할 것입니다.
<script>alert("HY")</script> 공격 구문 이와 같이 클라이언트가 자신의 쿠키값을 알아보기 위해서 사용할 수 도 있습니다.
근데 햄버거를 시키려고 홈페이지에 접근한 클라이언트가 세션ID가 궁금해서 위와 같은 명령어를 사용할까요? 아마 대부분의 클라이언트들은 세션ID를 궁금해하지 않을 것입니다.
그래서 공격자들은 위와같은 구문을 이용해서 클라이언트들 모르게 세션ID를 받아 공격에 활용을 합니다.
1. 클라이언트에게 피싱 메일을 보냅니다. 해당 피싱메일에는 위와 같은 구문에 세션ID의 값을 알 수 있는 구문이 존재합니다.
2. 클라이언트는 해당 피싱메일을 클릭합니다.(피싱메일은 SNS의 로그인을 하라는 식으로 리다이렉션을 합니다.)
3. 클라이언트가 아무 의심없이 SNS를 재로그인 합니다.
4. 클라이언트의 로그인 세션값이 공격자에게로 전송됩니다.
5. 공격자는 이를 바탕으로 클라이언트의 개인정보 값을 알 수 있습니다.
2. Stored XSS
Stored XSS는 웹 페이지의 게시판에 스크립트 구문을 삽입해 클라이언트의 정보를 공격자에게 전송하는 공격 기법입니다.
게시판으로 사용하고 있는 웹페이지에 공격자가 클라이언트의 세션ID값을 알 수 있는 스크립트구문을 삽입해 놓습니다.
클라이언트들은 공격자가 올려놓은 게시물을 볼때마다 클라이언트의 세션ID값이 공격자에게 넘어가게 됩니다.
이렇게 탈취한 세션ID를 이용해 클라이언트의 개인정보를 알 수 있습니다.
1. 공격자가 게시물 웹페이지에 세션ID값을 알 수 있는 스크립트문을 삽입합니다.
2. 클라이언트가 해당 게시물을 볼때마다 공격자에게 세션ID를 알 수 있습니다.
3. 해당 세션ID를 이용해 클라이언트의 개인정보를 알 수 있습니다.
Stored XSS가 Reflecred XSS보다 더 위험한 공격인 것을 알 수 있습니다.
대응방안
쿼리스트링 문자 필터링
?뒤에 나오는 문자를 쿼리스트링이라고 합니다. Ex) www.adsm.com?hy
XSS는 쿼리스트링에 <script> 문을 이용해 공격을 하기 때문에 해당 ",',<,> 등의 문자를 사용할 수 없도록 필터링을 해주면 XSS공격을 막을 수 있습니다.
htmlspecialchars() 함수를 이용합니다.
htmlspecialchars() 함수는 &,",',<,> 와 같은 특수문자들을 HTML엔티티로 변환해주는 함수입니다.
예를들어 <를 <로 >를 >로 변환해줍니다. 이렇게 변환된 문자열은 웹브라우저가 읽더라도 스크립트로 처리하지 않게 되고 웹페이지내에서 <,>와 같이 원래의 문자열로 보여지게 됩니다.