Information Security

XSS(Cross Site Scripting) 공격 본문

Web Hacking/Web 취약점 분석

XSS(Cross Site Scripting) 공격

leeeeye321 2017. 12. 1. 04:56

Client Side vulnerability - XSS(Cross Site Scripting)

사이트를 교차해서 스크립트를 실행할 수 있다는 뜻이다.

-웹 상에서 가장 기초적인 취약점 공격 방법이다.

-1995년에 자바스크립트가 도입되고, 2000년에 자바스크립트를 이용한 최초의 공격이 발생했다. (Myspace라는 소셜 사이트의 회원 정보를 바꾸는 공격)

-2005년에 악성코드의 형태로 발견되었다.

-현재까지 다양한 변종과 함께 계속해서 공격이 활발하게 이루어지고 있다. 17년 동안 막는데 실패했다.

-XSS 공격은 크게 두가지로 유형을 나눌 수 있다. 스크립트를 저장시켜 놓고 공격하는 stored XSS, 스크립트를 저장하지 않고 URL에 입력하면 바로 실행되어 공격하는 refletced XSS가 있다.


1. XSS 공격 시도

script 태그를 삽입한 게시글을 작성한다.

 

해당 태그는 페이지 소스를 확인해야 알 수 있고, 게시글의 내용에서는 보이지 않아서 사용자는 이를 알아챌 수 없다.

 

이 게시글을 클릭한 사용자의 웹 브라우저에서는 이 스크립트가 실행될 것이다.

만약 공격자가 악성 스크립트를 실행되도록 하면 모든 시스템의 제어권을 가져갈 위험이 있다. 

이 간단해 보이는 스크립트 실행 자체가 XSS 취약점이 될 수 있다.

  

2. 취약점 찾기

웹 해킹의 기본은 소스 보기이다.

사이트의 모든 입력에 대해서 테스트를 하여 취약점을 찾아내야 한다.

어떤 부분에서 취약점이 존재하는지 증명하는 것이 모의 해킹이다.

 

3. 대응책

가장 효율적인 보안 기법은 시큐어 코딩이다. 대부분의 취약점은 이미 존재하는 상태에서 배포가 된다.

애초에 취약점이 없는 상태로 배포하는 것이 시큐어 코딩(Secure Coding)이다.

※ 이전까지는 보안 패치를 통해서 대처했다. 하지만 취약점은 계속 나오고, 패치는 나오는데 시간이 걸린다.

그리고 패치는 나왔는데 사용자가 적용을 안하면 소용이 없다. (제로데이 발생)

 

※ 간단한 시큐어 코딩 해보기

스크립트 실행을 위해서는 script 태그가 꼭 필요하다.

게시글 입력 시 script 태그를 차단하여 취약점을 제거해 보자.

 

글쓰기 페이지(write.php)의 소스를 확인한 결과 입력된 값은 write_ok.php로 넘어간다.

 

write_ok.php에 넘어오는 입력 값(memo 변수)을 체크하도록 설정할 것이다.

 

preg_match(pattern, subject) 함수: 지정한 subject에 특정 pattern과 일치하는 부분이 있는지 체크

memo 변수의 값에서 "<script>"가 발견되면 if 문에서 참으로 동작할 것이다.

 

게시글에 script 태그를 삽입하여 XSS 공격을 시도한다.

 

코딩한 대로 XSS가 탐지되었다는 메시지가 출력되고 [확인]을 클릭하면 뒤로 가기가 실행된다.

 

이렇게 취약점이 없어지나 했지만...

 

<Script> alert('bypassing technique!!!'); </script>

만약 공격자가 위와 같이 태그를 삽입하면??

 

script 태그를 막은 것이 소용이 없어진다.

대소문자를 구별하여 이를 막아도 공격자는 다른 방법으로 계속해서 우회를 시도할 것이다.

완벽한 보안은 없다..

'Web Hacking > Web 취약점 분석' 카테고리의 다른 글

Blind SQL Injection 공격2  (0) 2017.12.08
Blind SQL Injection 공격  (0) 2017.12.08
SQL Injection 공격  (0) 2017.12.06
PHP File Upload 공격  (0) 2017.12.05
제로보드 환경설정  (0) 2017.11.30