본문 바로가기

Web

[웹 보안] XSS / CSRF / SQL INJECTION

반응형

iframe 사용을 지양하는것이 좋다는 말을 듣고 왜? 라는 생각이 들었으며

그 원인을 찾아보는 중 XSS 와 CSRF 키워드가 나왔다.

 

https://program-developer.tistory.com/99

 

XSS와 CSRF(XSRF)의 차이점

사이트 간 스크립팅(XSS: Cross-Site Scripting) 웹 애플리케이션에서 많이 나타나는 취약점의 하나로, 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다. - 이 취

program-developer.tistory.com

 

1. XSS (Cross-Site Scripting)

요약 키워드 : SCRIPT 삽입, Client 공격

요약 : 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점

 

- 이 취약점은 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타난다.주로 여러 사용자가 보게 되는 전자 게시판에 악성 스크립트가 담긴 글을 올리는 형태로 이루어진다.

- 이 취약점으로 해커가 사용자의 정보(쿠키, 세션 등)를 탈취하거나, 자동으로 비정상적인 기능을 수행하게 하거나 할 수 있다. 주로 다른 웹사이트와 정보를 교환하는 식으로 작동한다.

 

예) 게시판에 글 작성시 SCRIPT를 삽입하여 작성

 

대응방안 :

1. script문장에 존재한 특수문자를 메타캐릭터로 변환시킨다.
                < ---- &lt

                > ---- &gt
                (  ---- &#40

                )  ---- &#41

               #  ---- &#35

               &  ---- &#38

2. Contents 구문 사용

3. Replace 구문 사용

2. CSRF (XSRF / Cross-Site Request Forgery)

요약 키워드 : 인증 탈취, Server 공격

요약 : 사용자의 인증을 탈취하여 웹사이트에 요청

 

웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.

- XSS를 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면,
CSRF(사이트간 요청 위조)는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다.

- 일단 사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면,
공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격에 노출된다.

 

대응방안 :

1. CSRF 토큰 사용

2. 사용자와 상호 처리 기능 적용

3. 재인증 요구

쿠키 가로채기 – 입력값 검사: 웹페이지 입력폼에 사용자 입력 값 검사, 비정상 값은Reject
– 쿠키 사용: 쿠키에 중요정보 미포함
세션 변조 사용 – Query String 검사
– 민감 데이터나 값의 트랜잭션 위해 재인증이나 트랜잭션 서명 요청(GET 금지)
부정클릭 사용 – 유일한 토큰 사용
DRDoS – DoS 관련 취약점 제거

 

3. SQL INJECTION (sql삽입)

요약 키워드 : sql 삽입, Server 공격

요약 : 입력창 / param 등에 sql를 삽입하여 데이터베이스 조작

프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이다.

 

대응 방안 :

1. 준비된 선언(Prepared statement)

준비된 선언(Prepared statement)을 사용하면 사용자의 입력이 쿼리문(SQL 선언 템플릿)으로부터 분리되기 때문에 SQL 삽입을 효과적으로 방어할 수 있다. 준비된 선언은 다음과 같은 단계에 따라 실행된다:

  1. 준비: 쿼리문이 데이터베이스 관리 시스템(DBMS)으로 전송된다. 이 때 사용자 입력 값은 전송되지 않는 대신 플레이스홀더로 표시된다.
  2. DBMS가 쿼리문을 분석하고 최적화를 진행한다.
  3. 실행: 플레이스홀더에 입력할 사용자 입력 값이 전송되고 DBMS가 쿼리문을 실행한다.

2. 이스케이프

SQL에서 특별한 의미를 갖는 문자들을 이스케이프해서 SQL 삽입을 방어할 수도 있다.

예약문자 내용 참고
\n 줄바꿈 개행문자(캐리지 리턴)
\ 시퀸스 문자 시작 \"
\t 현재시간  
\u 사용자 이름  
\033--- 컬러 색상 관련 \033[0;31m 텍스트 빨간색
\w 현재 작업중인 로컬 디렉토리 전체경로명 /home
\[ 비출력문자열 시작  
\] 비출력문자열 종료  

 

4. 코드 인젝션 (Code Injection)

코드 인젝션(영어: Code injection)은 유효하지 않은 데이터를 실행함으로써 야기되는 소프트웨어 버그의 부당한 사용이다. 삽입은 공격자에 의해서 취약한 컴퓨터 프로그램 코드를 삽입하고 실행을 변경하는 방식으로 이용된다. 성공적인 코드 인젝션은 이것을 이용한 의 전파 같이 종종 처참한 결과를 보여준다.

 

 

 

https://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%EC%9D%B8%EC%A0%9D%EC%85%98

 

코드 인젝션 - 위키백과, 우리 모두의 백과사전

코드 인젝션(영어: Code injection)은 유효하지 않은 데이터를 실행함으로써 야기되는 소프트웨어 버그의 부당한 사용이다. 삽입은 공격자에 의해서 취약한 컴퓨터 프로그램 코드를 삽입하고 실행

ko.wikipedia.org

 

반응형