상세 컨텐츠

본문 제목

[보안] 웹 보안 취약점 공격

Technology/Tech Insight

by 문선비 2021. 12. 7. 18:11

본문

SITE에 출장을 다니면서 웹 보안 취약점에 대해 공부할 필요가 있어 공격 예시와 함께 설명하는 글을 작성하도록 하겠습니다.

웹 해킹이란 무엇인가?

웹 사이트의 취약점을 공격하는 기술적 위협으로, 웹 페이지를 통하여 권한이 없는 시스템에 접근하거나 데이터 유출 및 파괴와 같은 행위를 말합니다. 웹 사이트의 취약점을 공격하는 방법은 굉장히 많은데, 그 중 중요하고 각 SITE에서 주로 들어오는 공격에 대해서 설명하도록 하겠습니다.

  • SQL Injection
  • Cross-Site Scripting
  • File Upload
  • File Download
  • Command Injection

1) SQL Injection(SI)
 클라이언트의 요청을 처리하기 위해 전달받은 인수에 특정 명령을 실행하는 코드를 포함시켜 공격하는 방법입니다. 간단하고 적용하기도 쉬우며 아주 강력한 공격입니다. 기존 SQL에 악의적인 SQL 구문을 삽입하여 데이터 탈취, 삭제 등을 할 수 있습니다.

SQL Injection 공격 과정, 사진:CloudFlare

 

1-1) 공격 방법

공격문 결과
Select uid from user_table where uid='guest' and upw='' or 1=1-- user_table의 모든 uid가 출력
'union select upw from user_table where uid = 'admin'-- union 구문을 활용하여 admin계정의 비밀번호를 출력

1. SQL Injection 공격문 예시

1-2) 방어 방법

  •  검증 로직을 추가하여 미리 설정한 특수문자들이 들어왔을 때 요청을 막아내는 방법.
  •  Error Message 노출을 금지 함으로써 테이블명, 컬럼명등 노출을 방지하는 방법.

2) Cross-Site Scripting(XSS)
 사이트 간 스크립팅(Cross-Site Scripting)은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 SQL Injection과 함께 웹상에서 가장 기초적인 취약점 공격입니다. 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점으로 주로 여러 사용자가 보게 되는 전자 게시판에 악성 스크립트가 담긴 글을 올리는 형태로 이루어집니다. 자바스크립트를 사용하여 공격하는 경우가 많은데 공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어조치를 해두지 않아 공격을 받는 경우가 많습니다.

Cross-Site Scripting 공격 과정

2-1) 공격 방법

공격 종류 공격문 결과
스크립트 태그 <script>alert(‘XSS’);</script> 스크립트 태그의 스크립트 실행
자바스크립트 태그 <a href=“javascript:alert(‘XSS’)”></a> 자바스크립트를 실행
이벤트 속성 <img src=“#” onerror=“alert(‘XSS’)”> 이벤트 속성으로 스크립트 실행

2. Cross-Site Scripting 공격문 예시

2-2) 방어 방법

  • 사용자의 입력값을 제한하여 스크립트를 삽입하지 못하도록 하는 방법.
  • XSS 공격은 기본적으로 <script>태그를 사용하기 때문에 XSS공격을 차단하기 위해
    태그문자(<,>)등 위험한 문자 입력시 필터링하고, 서버에서 브라우저로 전송 시 문자를 인코딩하는 방법.

3) File Upload(FUP)
 웹서버가 제공하는 파일 업로드 기능을 이용하여 악성 스크립트를 업로드 하는 공격입니다. 서버에서 실행될 수 있는 파일을 업로드 하여 공격자가 원하는 기능을 동작하게 하는데 이는 적절한 검증 없이 파일 업로드 기능을 제공할 때 발생하는 취약점입니다. 결국 File Upload 공격은 악성 스크립트를 업로드 후, 서버상에서 스크립트를 실행하여 쉘을 획득하는 등의 행위로 서버를 장악함을 의미합니다.

웹 서버에서 실행 가능한 확장자는 다음과 같습니다.

언어 확장자
asp, aspx asp, aspx, htm, html, asa
php phtml, php, php3, php4, php5, html
jsp, java jsp, jspx, jsw, jsv, jspf, htm, html
perl pl, pm, cgi, lib, htm, html
coldfusion cfm, cfml, cfc, dbm, htm, html

3. 웹 서버에서 실행 가능한 확장자

3-1) 공격 방법

  • 파일 업로드시에 확장자 제한이 없는지 확인
  • 업로드된 파일에 접근 및 실행이 가능한지 확인하며 공격
  • Null을 이용한 파일 업로드
언어 우회패턴 처리패턴
php test.php%00.jpeg test.php
asp test.asp%00.jpeg test.asp
jsp test.jsp%00.jpeg test.jsp
                                                               표4. 널바이트 예시
 

3-2) 방어 방법

  • 업로드가 되는 디렉토리를 WAS 외부로 지정하거나, 접근 권한을 삭제하는 방법.
  • 업로드된 파일명, 확장자를 난수화하여 변경하는 방법.
  • 업로드 가능한 확장자를 지정하여 검증하고, 우회 가능한 종단 문자를 제거하는 방법.

4) File Download(FD)
 파일 다운로드 기능이 존재하는 웹애서 파일 다운로드 시 파일의 경로 및 파일명을 파라미터로 받아 처리하는 경우 이를 적절히 필터링 하지 않으면 공격자가 이를 조작하여 허용되지 안은 파일을 다운받을 수 있고 임의의 위치에 있는 파일을 열람하거나 다운받는 것을 가능하게 하는 공격입니다.

4-1) 공격 방법

Seculayer_Download.jsp 페이지가 있다고 가정.
Seculayer_Download.jsp는 웹 서버의 upload폴더에 존재하는 파일의 이름을 file이라는 파라미터로 입력 받으면 그 파일을 다운로드하게 해주는 페이지라고 가정.

 

4-2) 방어 방법

  • 특정 디렉토리 접근만 가능하도록하는 방법.

 

5) Command Injection 
 Command에 임의의 명령어를 삽입하고 요청을 보내 웹 서버에서 실행되게 하는 공격입니다. 어떤 웹 어플리케이션 공격이 내부에서 실행된다고 했을 때 사용자가 입력한 값이 적절한 검증 절차가 존재하지 않으면 입력했던 시스템 명령어가 그대로 전달되서 공격자는 이 값을 조작해 시스템 명령어 삽입 시도 공격을 할 수 있게 됩니다.

5-1) 공격 방법

  • ‘, |, &&, &, ; 등 명령 삽입 특수문자를 입력하고, 이어서 이용하고자 하는 명령어를 입력하면 명령삽입 특수문자 앞에 있는 명령어의 결과를 출력하고 뒤이어 두 번째 명령어 실행 결과를 출력하는 방식.

5-2) 방어 방법

  • White List를 이용한 필터링 방법.

이상으로 웹 보안 취약점에 대한 설명을 마치며 다음에 기회가 된다면 더 많은 공격 방식에 대해서 설명을 하도록 하겠습니다. 감사합니다.


참조 :